TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的
9 G: j0 P4 U) a8 C* O功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。! N8 T2 J4 E' l' _& ~" J
/ {0 ^* R( q: J1 D4 |
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,+ ?. U4 V, Q3 X5 `. m
象PC- DOS 、2 n" O) ~6 Y b6 @% S c
: D8 @3 \9 t& d' r8 o7 ^* \
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: 7 `1 I) _* U9 f/ B6 q+ ?0 e1 N
1 f9 K! z% h% m" w; ?
1. C是中级语言1 D8 e* k. o2 Y, U
/ ^/ P" ~3 B# H# ]/ E' K
& h% S; U" S5 \# U, f! L( B& u它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
) M" _+ v0 {1 i. Q6 T
2 b7 X' M0 U3 C4 S汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。: @' W+ C7 J2 R0 r
) v2 d f# ]& c: N
. N5 X% ~# C/ R8 o# J2. C是结构式语言
0 E' P" R$ q) t2 \3 |. g; `
4 c9 @! t, Z6 q& J" q( e. L8 x& ?5 ^4 u; S3 T7 i
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的% D \0 l. Q2 ^
8 Y/ d* [' x% i: n, w信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调
( P! Z* B* U4 V$ y/ _% i; A/ Y1 k$ s+ |' A2 S
试。C 语言是以函数形式提供给用户的,% F G- H& ], x' w- H* T
这些函数可方便的调用,9 Y; }* I4 d. x
并具有多种循' C! c; [9 B; w2 {* ?9 e3 ~
/ b& e) V6 A6 L7 Z( \& c. k r环、条件语句控制程序流向, 从而使程序完全结构化。! Z8 k! K* \$ m9 |4 B
6 c8 N1 {' Q2 L2 F$ d
N+ r! u! L. L$ @( C& F
3. C语言功能齐全
% E9 l8 ? e! W! G- S0 f* S2 g; [+ q' g1 j- w ]8 D5 g, j+ t
9 ^5 V. K( Q" ]( {" u+ Y! e, f! b
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
) N$ m, @ J! A& q/ G3 r, M0 A
* `5 d7 }$ v5 m. i; H+ d# Q外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑! S3 X) i2 q* l: w
! j' q# K3 v3 X7 y# n3 b' ]" ^ }判断功能也比较强大, 可以实现决策目的。
! u$ L5 G' J8 O( @" g; Z1 p
2 P9 B9 _6 s" J- I) B4 l5 A# ]7 x U8 k1 w+ r
4. C语言适用范围大
9 _. R8 o) |, K$ l! A: A/ l9 t8 t5 V* Y3 ]$ V' o
@" T4 C- ?' S# o$ sC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于 Z3 S7 s$ z$ k" O0 v
1 p; `) g, I- H2 Y& e4 g& V多种机型。
7 R" @; i6 t# f4 f" d4 o5 |8 X) F4 P, b) O
" p0 `/ Z! `' I5 R
……………………………复制下面红色字段………………………………………
" r; _6 @+ r! D+ z3 t3 F; W/ i; e# x8 t; @4 k8 H: X4 _) U
3 _4 e9 i$ ^" F; j
/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */
4 _6 _; u# R* F* E9 {+ Q; [- }3 c9 e#include"stdio.h"0 y. x1 P% V: Y/ M6 D9 S: X
#include"bios.h"
7 [2 [2 C& d+ V- s$ b. n8 L, }9 J#define LEFT 75! j p9 J* Q$ d9 C! a
#define RIGHT 77
/ G4 U) A: ?1 ~# ~#define UPPER 72- z: v! n4 n" l) C8 I y
#define DOWN 80
7 Z ^- O0 d! J#define ESC 27
8 b, ]+ |4 a8 t; G$ p% Tstruct Boxss /*定义箱子结构体,其中包含坐标属性*/
( D, t( Y5 c8 k& y{
1 U: r9 J' b% H) o# l$ |int x,y;' V n, @% l- x. V: ^
};
) e2 X2 i7 d$ I9 n: j( [5 J6 Gunion keyboard /*定义读取键盘码的共用体类型*/" t# K5 i( z6 R& x: w
{# b$ m9 h5 c! F" @6 j
unsigned int iKeyInfo;, y9 F/ K7 x; s) h0 z! k6 Z# }
char chKeyBit[2];/ R6 \: r) I" W' s3 V2 S
};
) U# d9 [: |; m: B2 C' M# Q! aint fnGetKey(void) /*定义读取键盘码的函数*/2 d! ^3 F. z5 l! H
{
0 F6 h! B% y- t2 ?union keyboard uniKey1; /*定义读取键盘码的共用体变量*/
' v% \2 _+ C: Y) B) a6 q: q- gwhile(bioskey(1)==0); /*检测用户是否按键*/6 K7 ^7 a2 x! v+ [
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
" [" Q4 I( S! g2 k" E" T+ x2 B7 Freturn(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/2 c$ A9 U: }! v4 K3 ]% ~
}
5 O) ?: w) l$ }( V6 h, Nvoid main()
9 W; { k9 d$ G3 o: Z{% u+ U2 x) P) Y4 P3 f6 K9 ?7 Q
int iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/" H E R: a* q! G1 d. S
struct Boxss Box[4]; /*定义箱子数量*/3 r. y" ]' Q' e/ E* ?9 Q
int chMap[10][10]={ /*用二维数组定义地图*/, J+ \/ @7 k* [/ a! Y' i' z: {
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
) K+ c3 @3 ?% |- B) r2 K+ r {0,1,0,0,0,0,1,1,1,0},& t4 o8 ~5 ?/ i; u
{0,1,0,2,0,0,1,0,1,0},
+ c' f6 _2 M% Q0 i6 O& B {0,1,0,1,0,0,1,0,1,0},
8 Y& L3 C/ n5 F: ^ {0,1,1,1,0,0,1,0,1,0},$ u1 ? C2 o9 Q( t4 Y& r
{0,1,0,0,0,0,1,0,1,0},7 e3 S9 [4 @" K2 t" k8 h$ A1 e
{0,1,1,1,1,1,1,0,1,0},
/ J# K8 N& H3 i% i% @# x {0,1,0,1,0,0,0,0,2,0},1 L6 n! k- L( y6 S8 J
{0,2,0,1,1,1,1,2,0,0},+ c4 x! F6 |" R, H% I* H
{0,0,0,0,0,0,0,0,0,0},
+ \. O+ c5 o) J r' R1 a };
G) v. V2 c4 M7 Y; Zint i,j;
- [, X6 ~$ }! ZBox[0].x=13; /*定义箱子的坐标属性*/
# ?( k( ^# x* m7 h XBox[1].x=11;
" Z8 @ G! k A6 F0 i" }Box[2].x=14;
+ A# _/ Z+ g! zBox[3].x=18;
/ }8 C2 n! D# N" X' UBox[0].y=8;
* r$ T- F2 `$ k! ]" I HBox[1].y=7;
' ~ w. ?/ o+ h8 OBox[2].y=13;$ ?6 f4 X& z7 `% Q5 L: `
Box[3].y=7;. j* @: Q2 J1 h7 m: d
while(1) /*反复进行求移动的坐标运算*/
" d# f0 c+ z/ N) B7 T/ } {
5 \1 h. a0 b( I for(i=0;i<10;i++) /*输出新地图(刷新地图)*/0 H2 e( Q! Z4 |. G7 E5 f
{
. K' V# a6 |9 u, | R- Q3 e$ E gotoxy(10,5+i);; f" l4 u9 u( T: q3 k
for(j=0;j<10;j++)4 G- s; M2 n% `- ~
{$ n" w+ p, n8 q9 A5 Z
if(chMap[j]==0)
3 @# v; L4 P, \$ Z/ O8 a printf("#");" N, }8 {$ @+ u! d' V" C
if(chMap[j]==1)
0 k( b$ x5 n7 w printf(" ");) f* g0 v1 E! d q
if(chMap[j]==2)# E7 W+ q7 O) _$ A# f/ r
printf("X");
% D* P4 k3 H) p* B3 @; `$ r }
! B* q* m+ K4 g+ [; z }, h9 r, ~" x- L
j=0; /*判断是否所有箱子都在目标坐标上*/5 R, z Q" V: W+ z' s! \
for(i=0;i<4;i++)
0 x$ y- d# y# `# ]( p) S if(chMap[Box.y-5][Box.x-10]==2)9 i3 r: h7 r; S: W8 n# y6 h8 b. R
j++;
7 f+ e5 q' V! V2 j if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/; _5 o; E* _3 [% I) L
{
: F6 s* v" G: N3 f, { clrscr();0 c( n# J& g6 k7 |. e9 j+ Q
printf("You Win!");
7 r. Q* [* ~! ~" m) H$ a: A break;
/ a& {, U! C* d9 P4 }" u }
% A2 A& i. L: Y0 G for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
0 W' \. \6 A8 ?' T) S3 |* f {
; H4 U' Y2 r; G( ^0 L% R1 l gotoxy(Box.x,Box.y);/ f4 x& d5 D7 r( k; _% H1 B
printf("0");6 c4 P( m7 M4 s7 \$ K. v
}3 N7 A- i6 a: H+ |, M4 @
gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/: `8 h' {# k* n3 ?( N m! {3 K2 N
printf("*\b");( m4 L: C8 D2 p- }" L9 N
tx=x; /*记录本次移动前的坐标*/7 k9 R; p8 @; B8 Z
ty=y;* ]5 C5 U% n9 Y I1 J
iKey=fnGetKey();
. N% i! {% g& E! v' ]& w if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/6 v% H; I/ m6 |3 b% k
x--;
" ^ s- B% }+ v$ u U& X if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
0 _% f; z" ]2 E" W* b; z- _. E x++;) O/ p0 |: }) f( U' H
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)' m5 t# O7 d( W
y--;" d) e- j1 O! {# j: t! O9 }
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)
% }# @1 v5 F$ ~ y++; /*输入ESC退出并输出"YOU LOST"*/1 h6 L& Z5 b ~) o
if(iKey==ESC)
& Q' X2 ~$ B* C {
3 S1 y4 O3 \. f/ v ], B: N9 _ clrscr(); W# v) t/ V& b4 E! `
printf("You Lost");
+ M0 k1 l: g" |+ c8 v/ r, p, s; E break;& L! y; o7 ? v _
}4 n2 v) ?2 I ^! Z
for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
. g! f+ L$ U N if(Box.x==x&&Box.y==y). x, C; F) T4 B- k7 Z- e+ N
{: l4 E6 R9 C1 ^/ f
Box.x+=(x-tx); q) m) `: }; ]3 I
Box.y+=(y-ty);- E( W$ d5 T+ F
if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/7 `0 e( G9 z$ S/ C
{; p# f( L. J2 S' k f
Box.x-=(x-tx);/ j E. p5 ~- P! @4 w' E
Box.y-=(y-ty);4 w) [ q4 X6 X! e: S
x=tx;
( E% A- i% f0 _! ?: E3 j5 b3 } y=ty;
& I, s) {( ^- m' |9 x }
j3 J! R4 p) ^6 s break;: o4 u4 ?$ g$ O- x& u! O c
}
: T" m& g8 ]! w; o clrscr();; v. t- s9 ` \( m
}
5 `5 ^; G# d# j7 i/ wgetch();3 s" P% b+ X; C
}
+ x" e! ~& K6 i3 B# C" R
% L' l1 k; \3 m; E2 u9 j2 Z! O0 F1 j
) k& i# I& C( q$ ~3 i
………………………END(复制上面的红色字段)………………………………………………… |
|