TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的! F. M7 o# B' {5 P1 p
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
5 {* S* A7 ?+ I- `$ X C+ @# Y0 l! F! s% l6 k( d
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,- w: w; g: u; `* X Q
象PC- DOS 、( U2 z( l/ I% N9 u
) `. a, ?9 Q+ n* S, t
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: |; A6 B1 t: j. ]! p* ?
# f2 R6 v( P9 T" B6 D( ?
1. C是中级语言* }% U* q8 `6 T; ^$ u3 h+ J0 `& y1 g
6 Y1 g& E% i; L1 U. T4 @5 x$ |
/ X( t' U) @* S3 h! Y它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
% L) b Y) v( r2 F' W, `7 ^! t6 q: w, g6 b3 d" g/ d; T( E( Y: ^% M; N
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。# u: `' R) Z# [/ E# m$ E& w" _' X
+ j6 m' p$ E: z' W4 s3 K' X% Y* k
* a9 m0 u/ f3 V+ b( g' T y2. C是结构式语言4 V4 m/ M! y8 M8 E
0 f0 O4 E0 w5 C8 Y/ R
$ P/ i& w# c3 J9 j% r* q, S W结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的( l+ Y" ^8 q9 Y
/ _0 D# M2 x4 L
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
( Z4 V4 C; v& Y# m, p- s$ K: k7 m: x5 f% u: u( {8 h
试。C 语言是以函数形式提供给用户的," }9 M- N2 N" B7 I/ F' Y' K
这些函数可方便的调用,/ m a9 T7 f- H' A5 |
并具有多种循# q( `/ |+ @3 g; T1 N7 D4 O) k3 N
( @) U% [0 n0 @4 W
环、条件语句控制程序流向, 从而使程序完全结构化。
5 }& Q" |1 M: \7 _7 i( i
6 X% D* j+ V+ r8 l5 B l9 ]& Y! |( t& f3 A& Z
3. C语言功能齐全4 W) N4 @! `! G. _1 E8 g
8 ?/ k7 ]! U8 Z/ k' Z* I
, H0 S e1 _; m6 W9 N+ W% i! T% @+ UC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另$ p+ ]! ?( B; E
* W d+ E; P* w$ q5 b7 i
外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
6 |. Q- [& g- j7 [: `2 b$ e) e1 M* j, X% I9 ]
判断功能也比较强大, 可以实现决策目的。
+ \. ^1 c$ |" Z2 Z
( |. H& u) L5 r2 b `
2 Q5 q, C3 U, L9 l# O4. C语言适用范围大; w. `0 G8 E- Y. a- R8 `6 ^) `( f- C" ~: }
. b8 B8 x1 h/ S+ e# C \0 Y% R! T1 g6 C. w
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
' A4 u) T: N- f. F+ v; `* M
3 C: Y" A3 n; u! t8 G多种机型。
1 \. z- K: F# L9 g8 \" W& L' a) S% @; X6 _& y- [1 d Y& [
" I- e) n" O# e; b% R……………………………复制下面红色字段………………………………………
4 T6 _4 K5 D! G8 @. ]% S B; n3 }$ M; w+ y9 E! W% A
# e% B1 m4 D, f/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
2 ?1 P3 ^. `' @' Q; R#include"stdio.h"# ^9 r0 M9 W6 K2 H
#include"bios.h"% b! s1 T ~& N# T( H
#define LEFT 75. h4 o6 G# |$ O7 o
#define RIGHT 77
! d6 V, R8 A( U! h' b#define UPPER 72. c+ x% k4 ~6 l5 g. c# k3 B2 T2 d
#define DOWN 80' l# q% h, H6 H* B; @4 {
#define ESC 27) {. h- m5 h3 W9 ~3 T2 X
struct Boxss /*定义箱子结构体,其中包含坐标属性*/
# _( B+ v/ a: g% j" ~7 J4 r; _{9 z" U! |$ w a1 ]
int x,y;# j1 e+ E$ I4 V. h3 l6 c
};- d/ a! ` x9 }6 Y {1 W9 e# x
union keyboard /*定义读取键盘码的共用体类型*/
3 [) J, U- i) @4 ^{& u ^& L5 f( v& o" b3 i; x
unsigned int iKeyInfo; _( V& m! K& V0 _+ Z, }( ~7 f8 j* A' B
char chKeyBit[2];
3 r- O2 l- x: V' {};/ ~' @0 i; s) v U, n
int fnGetKey(void) /*定义读取键盘码的函数*/, ~( r, Z6 r& p! t6 t' b
{' Y' n0 b+ T' \1 [' x( f; f
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/: \9 J; H( C2 k( z' l
while(bioskey(1)==0); /*检测用户是否按键*/
3 {+ Y! T5 B) W" muniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
G& D& U# Q0 C) Yreturn(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/& {+ }- w( B6 \9 M, \, ]+ I5 ?
}
9 g5 G/ d7 v5 Svoid main()
; L+ n" ^. G- a1 _* f{, l, Z- T. y# z% }
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*// E& k$ m9 z8 x2 o. V
struct Boxss Box[4]; /*定义箱子数量*/, [4 N0 @9 `* V0 g; z
int chMap[10][10]={ /*用二维数组定义地图*/5 \( J* k3 H/ |& K" ?: ? O/ j0 v
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/6 e4 z' }3 M8 b3 i$ D
{0,1,0,0,0,0,1,1,1,0},
. @' F$ H* ^+ g0 `( v2 i {0,1,0,2,0,0,1,0,1,0},
: C: S6 K" g* j; z4 @1 W {0,1,0,1,0,0,1,0,1,0},
7 h, ^! f- K$ E0 e! M {0,1,1,1,0,0,1,0,1,0},
! k) I, z( z' r0 y* o {0,1,0,0,0,0,1,0,1,0}," [0 F) z* z$ A4 D H
{0,1,1,1,1,1,1,0,1,0},
: Y( I! X8 W* O8 O+ _: O: g {0,1,0,1,0,0,0,0,2,0},
; D8 y! b6 T3 E. H- \. U( P; c {0,2,0,1,1,1,1,2,0,0},
. v" L3 G1 h6 r* d( P {0,0,0,0,0,0,0,0,0,0},/ Z4 g2 ^, ?9 n$ G% Z$ z' G
};
: } h' D* m& S. |% a1 vint i,j; U3 D4 a1 }1 e# q- K8 W7 t
Box[0].x=13; /*定义箱子的坐标属性*/ H* M% E- [$ a3 A; w6 c4 h" j
Box[1].x=11; w! g3 H A+ n8 M) d2 {( P$ W
Box[2].x=14;% b! q* b) D. T* O5 l/ K% Y
Box[3].x=18;4 z( h" G* w, [0 H% }9 N
Box[0].y=8;
+ U t2 u$ f6 R- h7 mBox[1].y=7;. m& B& m7 F! d/ f, O: R
Box[2].y=13;
) r8 q) R, ^$ H1 Q3 T1 Z; bBox[3].y=7;
! F$ S1 b* \, D9 k8 r, T$ l3 v( | while(1) /*反复进行求移动的坐标运算*// O" k- M# S" \) u
{
+ ?' H6 \9 _6 _3 M+ i for(i=0;i<10;i++) /*输出新地图(刷新地图)*/
# p& i5 a5 X" z5 `4 y) ~ {
; \& Y* q2 m' | gotoxy(10,5+i);0 E- m; _( M# k
for(j=0;j<10;j++)! }6 |. |! T" Z5 G
{
5 F/ b. s+ H0 C4 ~4 w if(chMap[j]==0)
) ]5 h. f7 Y$ W$ I printf("#");
% H1 Q1 c% \+ M7 h2 a/ v if(chMap[j]==1)3 C. }7 }7 n: _0 X
printf(" ");
2 l. P# @ J* ^+ M) w" F F; y' { if(chMap[j]==2)/ v% b7 U3 d9 q' O# q
printf("X");
1 u, `7 n% p, M" D0 Y }: G8 j5 S6 y' Z2 X, O6 Q
}4 e8 w) Q5 A+ i
j=0; /*判断是否所有箱子都在目标坐标上*/
' |* `, ~1 q0 ]7 v; m1 Z ~, w+ y for(i=0;i<4;i++)
4 R& x) u/ K& q, b if(chMap[Box.y-5][Box.x-10]==2)/ E: w! I8 I( Q/ R# i7 V
j++;
# J3 S4 \- m b+ |% _+ ^ if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
4 G$ s9 r: X- n4 ~) c {& D c3 k! H, Z4 n
clrscr();6 v. ]# ]: Q$ o' d) A, B/ k
printf("You Win!");
* U# @2 N' P* n break;( s: f. E& [8 \ C
}1 N3 y$ [0 _6 i) J4 E6 m$ _- n0 W
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/# D2 t8 @7 L7 i: n
{
4 w* ?2 n/ \: P- w. a gotoxy(Box.x,Box.y);
" t- q; n) m/ D! B( s printf("0");9 W% }& n* s1 k
}
2 B. D {9 r: R1 z, _ gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/1 {6 h) }% C/ `1 f' A5 l
printf("*\b");
1 b3 r& A) r) ]0 A) t# L tx=x; /*记录本次移动前的坐标*/
8 s2 a& Y7 L- C( @2 n* x! D ty=y;3 Y; X0 T* |3 x# [8 }$ M
iKey=fnGetKey();
5 C. W* F, f& l% y I+ I6 C4 p. ^ if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/) y9 o5 X! U) }, M3 o1 d* y
x--;: T& o- o, G6 \6 I! I
if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
& o* d9 y& H- F x++;
7 \4 f/ b/ n; T* d( d/ { if(iKey==UPPER&&chMap[y-1-5][x-10]!=0) ^2 e7 Z; B+ b5 }' q1 S4 @
y--;
9 ~0 z( |) J( Q, d4 T5 D* O if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)* t! H& K8 ^% X) L! x
y++; /*输入ESC退出并输出"YOU LOST"*/- Z$ n; z' A+ {( L- Q
if(iKey==ESC)
2 H2 E" W3 B$ D! D {" H6 p. s6 Z% f
clrscr();
6 m8 N5 w% N( u) N! l7 e printf("You Lost");
& Y8 o+ v" S, ?8 G, j5 I% ` break;
* E8 b3 Q) i$ ^; G2 Q a4 R }
: v. M$ U% N9 {$ @1 k, n for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
! _( l9 D1 t# H' G if(Box.x==x&&Box.y==y)3 f" k" e& D. ^; Y
{6 l7 h8 f4 o9 y- M3 f0 o
Box.x+=(x-tx);9 }: l' `. ~$ v! k/ O4 |
Box.y+=(y-ty);
, k; Y3 Y. K! f% N, v if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
! s$ A8 O" X: A- ~& k( B! [/ ] {
3 }* q& J6 G S$ n: s& a& D Box.x-=(x-tx);' V% Y$ N L, ?" i, E
Box.y-=(y-ty);
& F3 {8 Q2 s. r/ x* v) Y$ T, C x=tx;
; w2 m2 Y. H* J/ ~$ s y=ty;7 t7 v- P6 z7 G' ]0 m
}; S0 M6 d6 ^. }' w$ l: Q
break;
; @4 U4 B) v$ q' f. J1 H }
6 X' y/ I# ~( l0 h% y clrscr();$ X* S ^& @- t. I" v$ S w: B! h; D
}1 D y) j, s' r4 q1 J3 L: o
getch();7 M+ b0 q3 u( B" Q
}
- l7 L5 E! a7 D- d# p% d9 O) {) B. J: r! t
0 w: F/ D1 u- ^! H9 `4 h
! v& B4 R+ k8 g9 {
………………………END(复制上面的红色字段)………………………………………………… |
|