TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的1 f: F+ g8 S8 r
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。: d; e( t" J! F6 h
! r9 h6 X" `0 i
用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,) D7 r) Z+ @8 e; Q- ~* a( r, ~
象PC- DOS 、
9 t1 |) _5 W# |, M
8 h Z& U! U" rWORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:
# q+ M: J' g% `- F. _8 U! H9 Q" e' T2 `6 u
1. C是中级语言
4 n6 y. q1 ~# I% C# V+ ]! Q _
, S+ ^& {; j) O9 _- R
, H1 u$ v3 x7 D* @; S7 O- Q- h它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象
0 W# V5 ~% v E- y$ L
9 V* f. V* d9 \2 ^' }; ]汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。
# D% G/ F9 c+ v6 I( N/ _9 K$ F1 h* v; [
n% Q% H( P' c
6 L: u. d' g( B" z1 f+ t8 [1 k2. C是结构式语言" Y! w1 E$ ?/ c! p) H
/ X" V- u2 ?7 M3 E1 H0 G* d" s0 }
5 {0 ^( M7 Z, R- y
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
. d: Y, k: s) e. v7 t0 ~" r) O! |2 y. ^' O
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调( \& F1 ^/ K1 \* z9 z
9 e( v" I$ U9 D
试。C 语言是以函数形式提供给用户的,6 w8 D7 i0 |- A0 W) i, _* ]$ @
这些函数可方便的调用,; s2 |3 r. a+ l0 w4 ^0 ^
并具有多种循
: C! |8 |8 [: z' K3 B: U8 b5 F
5 U5 J' j, s7 Y$ I! J7 I1 a环、条件语句控制程序流向, 从而使程序完全结构化。
" J& ] l2 _# I. e$ {! f+ w! C( ~. b( Y8 n
1 H# h' T- W0 g3. C语言功能齐全
( y. W6 y/ o# i% A- y* Q9 S1 T8 G0 A
" f8 ~9 B+ b/ B7 ~8 p% w3 u kC 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
t- i- K* u! b2 c" p5 A7 t( l, a# D D6 s$ I' ]# D
外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑7 p5 u' Q$ a6 w6 f; i
8 f6 B( a3 a% ]& j1 D T! a
判断功能也比较强大, 可以实现决策目的。
2 h; X. ]2 p- X& Q: @$ C. e7 v- n, n$ b* B0 [; E' F
7 T# _; ?/ \' R' }! N# K
4. C语言适用范围大; w2 S$ E; |2 E# u6 O6 e5 a0 ~. R
. s3 \# `/ P& R' C! g; N' | c* A
: Z6 g% e; U$ ?& G9 X, N |C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于
8 S( \+ t) L! `% \1 p3 }0 K/ Z* M: i
) s) g" g& C6 L( E1 W% R( y多种机型。
2 T9 r K3 I, @# c. s# }! g! L
6 d7 w, C5 T: X+ K. y6 E
, i2 @+ h2 Z( Q/ G- T……………………………复制下面红色字段………………………………………
9 f' c5 v- y/ b7 B
4 f) B% Z1 Q( D
7 Y# c v. n1 v/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */; W# Y m/ R4 X
#include"stdio.h" S/ ~2 g% a: \5 a; F, W3 G
#include"bios.h"
! Q/ N9 M: B1 r0 l7 e#define LEFT 75
: B; i9 G9 c1 I0 W% E#define RIGHT 77
6 q0 P- g; U6 W+ M7 F6 p( L#define UPPER 72) r$ o9 a! F) A8 J
#define DOWN 80, K& J; t* Z/ H3 S1 F8 y4 \
#define ESC 27
/ _( o: C% l% n+ Astruct Boxss /*定义箱子结构体,其中包含坐标属性*/( j: M' g* B+ ^, ~; G* T
{
9 L2 C' ?% w1 B; U% Yint x,y;
% X( O b- Q4 `2 m8 v};7 N9 l' m9 y; C I$ C* f- Q
union keyboard /*定义读取键盘码的共用体类型*/9 A- {6 i- x) Z }) l# ?
{
6 W" b/ `8 U6 P3 O5 Munsigned int iKeyInfo;) w/ O( v1 C( E; H; |0 Q- }. ^
char chKeyBit[2];
2 r! M# |: `% |! k}; g' R& Q# M/ m/ f. P
int fnGetKey(void) /*定义读取键盘码的函数*/) s- k# t. K: t0 f/ N$ Z& j1 ]' C
{
7 M) p" _5 i1 Aunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/
2 l" \/ L0 C& |4 }' S8 {, Mwhile(bioskey(1)==0); /*检测用户是否按键*/% E9 W- v- p$ M5 O$ Y# ]
uniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/
+ f M7 C9 h! ~1 d2 rreturn(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/1 d6 ? I: C) i3 B: U" g
}
2 x0 I X) s- { Z3 q& Y y9 @void main()1 X* l- [2 B" [* k/ Y3 o' D
{
. ^' S! }5 f# w5 j5 k+ M# ~" i Uint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/
8 T+ }5 _) j' J+ Zstruct Boxss Box[4]; /*定义箱子数量*/
' c0 g0 y% k* E3 z7 h$ j H+ o" Yint chMap[10][10]={ /*用二维数组定义地图*// }( _% u/ }* V' _' C
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/
3 h( Y H5 ~9 j7 C, { {0,1,0,0,0,0,1,1,1,0},
; ^8 n$ V O* j9 t! T7 w" K: f {0,1,0,2,0,0,1,0,1,0},
4 k4 ^3 h. O0 R- P {0,1,0,1,0,0,1,0,1,0},
. h) c# A* Z* r3 X {0,1,1,1,0,0,1,0,1,0},: _/ v" ~- E8 P, F
{0,1,0,0,0,0,1,0,1,0},! G9 |1 d* M) Y1 W0 }
{0,1,1,1,1,1,1,0,1,0},
# H, j1 k& c7 N0 t: N8 m {0,1,0,1,0,0,0,0,2,0},# p( v/ {( D) a y% i1 Z
{0,2,0,1,1,1,1,2,0,0},* y- ]0 r4 q7 v0 q: s5 G# u
{0,0,0,0,0,0,0,0,0,0},0 Q' _+ M: z: L, ~# K
};9 ]; k5 h7 t0 Z
int i,j;
+ q4 j$ L" G/ S" l9 cBox[0].x=13; /*定义箱子的坐标属性*/
5 E2 j; Z" ?' d: `1 a' BBox[1].x=11; S: J* Y+ v0 G2 \1 S) H6 ?
Box[2].x=14;& k- A3 Y; r! i# t0 {. l% z f5 O
Box[3].x=18;
# X% r/ Z$ W* n& jBox[0].y=8;
" S) X$ ^ L$ s- _1 PBox[1].y=7;- I( v' d9 J$ H2 @. E
Box[2].y=13;
3 w$ q5 | e8 fBox[3].y=7;
8 ^2 T S& w% [/ s1 C7 G( j while(1) /*反复进行求移动的坐标运算*/
1 Z8 w" ]6 h3 \. E {3 U. m- v$ e0 {" O# P6 w; _
for(i=0;i<10;i++) /*输出新地图(刷新地图)*/' l9 k: T& E6 `, w, o0 g4 X
{
- a3 f* A/ k6 Q" s' n gotoxy(10,5+i);
( ^" _* B3 L6 R, D, _3 k for(j=0;j<10;j++)
) J5 r" {* c9 O {6 T& O9 a' N# T) _0 f" r
if(chMap[j]==0)$ p6 A1 k) Q4 p. ~# R
printf("#");
o& r# y" S3 k) h) d if(chMap[j]==1)
* j& u _7 M* o% [ ^6 V7 u printf(" ");( T2 L: ~" A |/ r: H* u( v$ y% |
if(chMap[j]==2)
c8 Z, X- `+ N* O printf("X");/ U# a* \9 Q. N6 B
}
+ s6 J* M& I6 I: G: r/ c9 t. I* W }* T5 k7 T6 I" d9 K
j=0; /*判断是否所有箱子都在目标坐标上*/8 q1 P9 i9 `( X+ S
for(i=0;i<4;i++)
% Q1 u. z a1 ] if(chMap[Box.y-5][Box.x-10]==2); _+ H0 Z2 M, L& S
j++;
2 ?1 L, o# o$ Y- X f) b if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/
9 |4 [8 u% G( T6 V {5 r$ W4 u/ x2 R* Q* C
clrscr();3 ~8 k# F0 F' V- j3 `
printf("You Win!");
7 ]: X9 T+ Z& N; b- B$ E; [1 g break;6 R% W5 b& {. W. x6 j% k
}. Y6 z7 Z3 h& l: W
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
! y3 |5 T: \! |+ ]- Z- H {
3 u) H: d# ~) F2 n+ H$ u gotoxy(Box.x,Box.y);
/ g' }# E' I6 | printf("0");" M9 e( s% ?6 e$ T
}
, T6 R& q6 e' Q" B( z# X; i gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/
: x% `# d4 u! v printf("*\b");
: t7 E! c+ X* ^* m tx=x; /*记录本次移动前的坐标*/
; y- u+ v0 Y* P1 c ty=y;1 w) q3 R, q% W1 S3 r n7 B
iKey=fnGetKey();' G! D' c; g B C2 \, Y) Q8 r8 b
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
. F: p! a* n& Y/ L! } x--;
( @/ \' U' I% i4 } if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)
* O* h7 t* q( b; S5 ~ x++;# P$ w; `3 R. D4 \: [4 b/ y
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)
* ?- j' T {+ l5 l# c y--; v J: [! A8 t% w% P1 m, @) _1 p
if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)! B2 D* K2 c5 C
y++; /*输入ESC退出并输出"YOU LOST"*/
3 a( x$ w0 b9 G" a w if(iKey==ESC)
H J& H! z+ A E$ W2 T) P0 N9 k {
$ l# _1 U3 q% S, J9 L! {, f clrscr();5 \$ I o& d2 o* H
printf("You Lost");3 s1 z+ u& ]% K% Q- R# v9 s: U2 x
break;
/ U* B1 Z2 n9 _ }
: }6 I# w. X- @ for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/
' E" a4 d2 s9 z3 Z+ a P0 R if(Box.x==x&&Box.y==y)
7 \9 G: f9 O2 R# \! q* f6 A# a {/ S0 P7 d% r5 t; L6 |
Box.x+=(x-tx);
( p# ^) r- i6 t0 X Box.y+=(y-ty);
6 B$ M( Q/ r0 R/ H: K$ ? if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/
; P' W, z `0 ]* G0 @ {
# Y- T+ {7 I# f6 ?' H/ q Box.x-=(x-tx);, V- q* F d5 C8 N$ C: Y* \3 V/ E% J9 q8 g
Box.y-=(y-ty);
3 m; }2 |8 A* Q x=tx;; y* ~. k7 K( H0 e& W# O+ R# m
y=ty;
& j+ M, d2 u6 ?0 j8 p% \: | }
1 f. y( w3 ~1 w break;5 {0 [3 W8 ^5 X' Z
}1 S; i4 R3 T# u
clrscr();
% f0 {0 R8 [% W2 l }
/ I, Z& B+ [( q# U& q* Z1 ygetch();
1 t! H, I! Y ~3 D4 v} d/ B5 q3 Y0 { B W ~
, p6 |6 h& w0 E/ v- C/ C/ m/ v* m% V
2 |' U0 \8 _3 Y2 `5 k3 U$ L………………………END(复制上面的红色字段)………………………………………………… |
|