TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的5 z, P i$ T; j7 O
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。
" x9 a+ k3 [% t
6 [2 q# ` h3 F1 I! G4 w3 q用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,' s. g' v# G4 W$ r: R
象PC- DOS 、+ `- A4 d% i# L
1 v' z1 V1 k: I: D* DWORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: 9 h8 a& r& `+ F# i9 i
/ A4 `* `) I) y3 E q/ I1 |( e
1. C是中级语言
/ G( N+ F [5 i
6 s6 o& G4 J$ v" }, u4 i/ H8 R( s
它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
. N# E% K, J% M3 A4 P: a. D9 _' D" b- X/ Y/ ^
汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。# T2 f- e, E: e1 m$ S" `) l2 T4 B
% |& E1 `, d8 u' `1 A2 I' C! H" p' ^8 u9 \( Q& U/ g
2. C是结构式语言6 f, s+ F' q1 |+ U
0 P0 j. d, r& ^: \/ G
8 N: p; l5 ~. D2 I7 R3 \- ?: e$ P结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的5 q [. p. \' d6 F4 V& H+ b. Z. `
$ f3 u8 ]4 j" Z: \: f8 ]: V% _ Y信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调0 B4 J1 Y) Q! _) l; b$ Y2 E
7 I R+ k: N3 r" }$ m m- }
试。C 语言是以函数形式提供给用户的,
: p6 q- o8 m# z这些函数可方便的调用,4 {% S6 O8 ]0 U
并具有多种循
B! B. x4 N* N5 |5 ^% k% ]* |" |% ? |0 x
环、条件语句控制程序流向, 从而使程序完全结构化。, V$ E0 \1 I& K8 j) G: g
( C2 _" I1 y$ G8 f
# r# |( Z( v' W4 k3. C语言功能齐全
; m B1 k' X, e7 ]- @4 ~: F
L0 H* m1 @7 j, y; c
7 ~5 m, w$ K3 C2 s4 u pC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
" `( S0 x0 ^4 B; B: X- f7 `" r$ F6 n$ Q. Q8 F- K9 X+ D
外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑) P" I* O# F* ?8 b
" ~7 W$ a. _1 `/ {判断功能也比较强大, 可以实现决策目的。
5 k9 F, d$ S& D$ D. Z7 A1 }/ g! j* Q0 p( H
* H+ S- L/ s1 k& ?4. C语言适用范围大
; v# y# r/ M4 U. `1 t& S
" T) u# J4 ]% y8 H; p' S( o9 [- C2 [ o" S0 m- S' m
C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于+ f9 C+ f6 E/ z& o8 S
2 a0 f) n; J$ S3 M- L* E3 C多种机型。
( B4 }& K$ s: I1 I, N% @- q7 F) S5 d% T6 N' `
% q% E9 h* |5 l( y3 G; c+ n……………………………复制下面红色字段………………………………………# ]! U: @7 q7 t7 [2 E
4 ~8 N3 E; \/ f9 J2 @
8 e0 P+ f4 Q1 D' B2 A x
/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
) T& R! }5 R+ b' u, ]* m5 t; Q( I#include"stdio.h" y- j, H5 D, t
#include"bios.h"0 W) S% p R" _% D! X' H5 x
#define LEFT 75! b) E" Q5 T/ z* i1 \
#define RIGHT 77/ M) b1 R+ @/ |) D- N! c
#define UPPER 72
, C) Y7 d3 X# `( k% i#define DOWN 80
; V# x1 C! ]6 \/ d#define ESC 27
) {. `! Z1 f+ ^- Estruct Boxss /*定义箱子结构体,其中包含坐标属性*/* j8 k: N5 b* q
{
, J* m" D! b8 G+ O4 Uint x,y;
% ?% `' D5 g0 `0 F, Z# K};" }% n9 |* r8 [ G1 \3 \- n! @3 B
union keyboard /*定义读取键盘码的共用体类型*/9 _6 T6 V l8 e% J4 I" b
{
. ]2 e# `! w, D9 ?& _ l: aunsigned int iKeyInfo;
; Y L1 A/ J- k, v6 r' I" Echar chKeyBit[2];; m, m6 }4 R& w; |* x
}; q! @5 I; f5 |1 j0 N' {
int fnGetKey(void) /*定义读取键盘码的函数*/
8 F+ q2 y; L1 i3 O3 h: d* W{. A% ?- g& V4 G; P8 G
union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
) e/ p' L$ ~9 j' Mwhile(bioskey(1)==0); /*检测用户是否按键*/8 l+ j8 d. Z& R0 p
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
" Z( k8 p+ C" m& Z/ |0 V4 |return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/
n; |6 B; a$ |4 i3 r w}
* _0 N5 z1 F% p+ V4 ]/ Cvoid main(). k) S: } x8 L! {& Z; T; ?
{
5 |+ K: v1 G$ v1 Mint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
8 e9 q; o/ \& t5 c: B5 G' wstruct Boxss Box[4]; /*定义箱子数量*/% j+ S9 N- ~2 T
int chMap[10][10]={ /*用二维数组定义地图*/
) k9 m* N- a( S, D( {; f& Y6 }( D# ] {0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/6 a1 U3 I% p0 }+ t$ P6 q
{0,1,0,0,0,0,1,1,1,0},
( @' s% n1 ?9 ^' B$ c6 N* R% X4 c* T {0,1,0,2,0,0,1,0,1,0},
+ @; k* Q( H+ _ {0,1,0,1,0,0,1,0,1,0},9 {3 [- g2 T5 S+ \; G: r5 ~* ^
{0,1,1,1,0,0,1,0,1,0},
# ]/ l, g: \ B/ P" H4 B7 }+ H& m6 S {0,1,0,0,0,0,1,0,1,0},
: I6 R1 i: D" O8 B0 |0 s+ R {0,1,1,1,1,1,1,0,1,0},# }& K: B8 X: \1 J; W( J+ Z5 g, d9 L
{0,1,0,1,0,0,0,0,2,0},& F6 \+ c5 {( j0 R3 X
{0,2,0,1,1,1,1,2,0,0},- \# I' @& H+ i
{0,0,0,0,0,0,0,0,0,0},6 Q8 u$ g$ c. U0 s$ a+ Y$ k
};
4 Z. `7 n% ?3 N5 G% G# ?int i,j;
$ I2 X |* k3 w$ s0 UBox[0].x=13; /*定义箱子的坐标属性*/
* ]& K- G# ^$ K/ `/ JBox[1].x=11;
, t1 u9 d& A, |0 ]Box[2].x=14;
9 [' v% X0 s. g/ YBox[3].x=18;
' ]1 k k F, ~" |1 \9 EBox[0].y=8;
% {9 e* K% B* @' ]1 D* gBox[1].y=7;
. m/ p# J, q$ M/ ?' Q# U( rBox[2].y=13;( W) c' ~; M- w- t
Box[3].y=7;
0 k; ?" a- s; @2 ]9 D1 C$ X* h: A0 T1 i while(1) /*反复进行求移动的坐标运算*/
$ |* S) y1 b7 v) h {
6 p: r G5 |* ~' ]' h for(i=0;i<10;i++) /*输出新地图(刷新地图)*/, s" T; t4 a! h& J; c1 ` I
{; z H3 U% z @( m( H' K* d
gotoxy(10,5+i);4 a O# W, S: j/ A/ }
for(j=0;j<10;j++)% v0 x2 `# l3 N7 E- V' m" y
{
$ o# |, j5 f9 n if(chMap[j]==0)
0 X4 v- s9 m0 j# ^6 s! m( F printf("#"); F4 Y; Z% W$ z, ?" ^% n
if(chMap[j]==1)5 A5 y" m/ P6 \# M/ ?2 j7 ~- W
printf(" ");
/ P. A8 d. O$ @+ X if(chMap[j]==2)
# p* n; \- y1 Z printf("X");$ a( r7 l; z& j5 ^+ [1 W( C# M
}
( U1 g3 h$ g6 Y. ]* P }9 h. B# b9 V9 S3 k8 u
j=0; /*判断是否所有箱子都在目标坐标上*/% W0 q0 d1 j4 q0 B1 m+ K
for(i=0;i<4;i++)
" f3 J- O( _! _7 w if(chMap[Box.y-5][Box.x-10]==2)" R+ A( U7 |" i9 Y0 ?" t0 B
j++;5 I+ J: f' b1 b5 W" p5 t
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/) a9 Y" x. s0 {* j4 n4 G
{3 ~! r3 @+ v# O1 ^& z
clrscr();' `+ k8 o" ?+ i0 \
printf("You Win!");
: g- f* S# T& d$ |+ h% v" V break;
. J T+ _% l/ a, D/ ~3 \ }
; J1 ? h3 O1 D for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/) a2 [" \+ C' _) G+ ^; x
{
4 |# n: i1 k7 R) o8 g gotoxy(Box.x,Box.y);
6 k5 f. l! J9 |& \2 ^# n! K9 k printf("0");
3 I% R4 j9 P5 z% N }
W5 a2 }( o# s; ?4 U/ m4 h gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
! v. s1 l. r* _" c) F" `. m6 V printf("*\b");5 \2 j6 F" d7 }7 ^: Z+ \ A
tx=x; /*记录本次移动前的坐标*/
# d2 M! p1 X* |2 U n4 X# [ ty=y;% V9 ]/ U- L. f
iKey=fnGetKey();
/ k" B. Z, q2 M ]% A8 G if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/6 W/ L) p$ C( j3 j( m2 _! p! {1 l
x--;
3 t# n6 T" Q" N; ? if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
, j: T$ U6 B6 j1 P8 k7 c. y x++;
. }" W" _, @ t) w if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)0 {! H, }( e( ^/ j4 {
y--;6 N7 F+ Z- f1 h6 ?8 I7 C
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)9 i/ K4 o& B4 v# s x; a: ?
y++; /*输入ESC退出并输出"YOU LOST"*/ d0 J) E3 ~- |$ A8 o( G
if(iKey==ESC)
9 C7 z% E4 o9 a1 ]) V {
/ @3 k6 X" t) P4 v1 y. p clrscr();+ ?! z# l& R/ N! ^' |4 ^
printf("You Lost");+ ]. u2 O* O# f. z9 g0 v
break;6 L8 N7 k0 I" G6 o! [1 t
} ]( d/ o& x" \6 ]: D
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
( W( s4 F# Q5 @ S2 I+ Y! J if(Box.x==x&&Box.y==y)
" s" i! s( P Z {
' o7 l; B$ C8 B9 M+ Y) A Box.x+=(x-tx);% J9 z$ w6 u% }% |1 _7 E& h. i
Box.y+=(y-ty);
+ f5 z1 w, F7 y, ^' y4 y! N if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
" ?+ L1 J; O. F% b/ w {% H, B ^1 l( r
Box.x-=(x-tx);! g& l& A. Q; x: ~9 ~4 N0 x
Box.y-=(y-ty);
: @$ E' Z8 d( t H6 n7 M/ ~ x=tx;
/ E) J& ]9 i) [$ z! q: h( i* ^# L y=ty;
: E( Y2 C8 d5 w3 ` }9 \; {* I0 n5 P- V; F5 c/ {
break;
9 c9 {% S5 `" z1 k6 c+ L$ v }& c. ?4 Q' k" @% B* n
clrscr();
$ M- l" @* y+ Q+ R }6 M0 a0 l( X5 }1 h4 K. t4 c
getch();+ f% j' e& d) e* Q$ v. V( {
}5 l5 U7 g8 }5 I: I* V
+ [. g( T! U. d
# W& U' q5 _' C) j) s8 u; K& N , s" C. p6 e* Q% b& r7 F6 i1 r
………………………END(复制上面的红色字段)………………………………………………… |
|