TA的每日心情 | 开心 2014-7-28 21:47 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的- |; P0 y0 [( n+ b8 l
功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。! [. v9 t& U: c- f( c
) A o: P! x2 M/ \3 r5 f0 M+ Z用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,$ o- h |; i$ L$ g/ ^
象PC- DOS 、
2 B7 g, }8 @) y5 I. L! Q b7 s* ~' N, M% I
WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点: % ?' w, x: \7 a4 k- r
1 O' F, T5 R6 `5 L1 T/ {* T9 R2 Y* i1. C是中级语言& a, t& H" n* T4 S# F7 U7 d
- F m' F; z. m6 [
" y/ v* Q4 U" o) K" z它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象6 E: z! u ?8 U# x
4 w. F1 U s& U# M" c1 ^& Z f汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。& L9 x+ A# @/ Z+ A
3 I7 Q5 o: r9 i3 l
+ V- y0 o; V8 k: n. C2. C是结构式语言' z$ z- E' b& j7 Y: g& g& k1 a
o: H" E; v% X/ t% ^+ p
6 _7 w0 B! b5 R+ G8 _' W
结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的
% [& E# y8 M9 N; o4 N; p, j- `7 u* g2 X5 U" E6 z' o6 @
信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调# V7 `7 U, z# E* ^. u
! h0 Q0 H8 R' M试。C 语言是以函数形式提供给用户的,
- K1 V4 b9 U8 I" k# o# A8 V这些函数可方便的调用,
# Q' F" C* v/ I( T( t6 [并具有多种循; K5 }! E$ j! i8 @; \3 {" Y
4 H' L# ~; A/ c* G( W7 S4 J
环、条件语句控制程序流向, 从而使程序完全结构化。
3 z6 k- E8 c1 q" f4 f
/ {# C% D: c0 K+ v1 g# g8 G" t4 c g. R+ ?) n
3. C语言功能齐全: c0 B7 \0 t' p& n
* }) G7 S' @9 b- K3 d# {( ?" b4 }
2 t+ A* ]8 H3 J
C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另
9 t {4 y. M2 z1 Q( y3 J
k8 x7 |, _% m4 W) |$ |外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑
1 {, g! `/ q0 W" \! z+ d( {+ \6 @! |9 A9 t
判断功能也比较强大, 可以实现决策目的。
9 w, n+ A7 |+ Y( z
0 }7 Z# q/ a3 G5 w Y" F. [% j! Q* R% z/ } F
4. C语言适用范围大
9 Z2 n4 R9 T. J9 x, c9 x# q# C/ O/ ^; D
) S4 p6 i1 m0 [* I# uC 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于3 Z& a' _5 m0 R% [/ C2 n* u
3 E6 A7 i7 f/ p4 h- Y( A
多种机型。
4 _$ L2 f1 J: b$ z/ m% b9 W# `2 P& j+ }% s- p# P, s5 L
5 T' [2 D2 J( Y, ?" s+ K7 o! t……………………………复制下面红色字段………………………………………
6 }- M2 c5 b3 o! j$ g( U
9 A+ Z* J0 N* t0 J! c) c/ ^. A
+ G: A) M. a; [! _, ?, \/* 这是简单的推箱子游戏,大家试试玩,谁有更好的Idea? */1 `/ m4 I7 M6 q3 l
#include"stdio.h"' m/ C" {0 C& e8 s- D% r0 `+ [3 E
#include"bios.h"
6 P ^+ T j4 |4 [) R! P7 \#define LEFT 75
v4 W' c7 v9 U#define RIGHT 77
6 f4 f" W1 {2 R& \. Q. G7 L#define UPPER 72
/ `7 N6 V( x6 F/ M#define DOWN 80
! u4 D3 n$ L! @* {+ o8 U#define ESC 27* ]2 G; c4 [5 d8 V& L) Y; t. G. H5 ?3 x
struct Boxss /*定义箱子结构体,其中包含坐标属性*/) e( Q" {5 Q( t# ]6 \ m3 F
{
( X) S9 g; k, w. k% ~$ t. L- G' pint x,y;/ g; S3 m( s1 R( a; F
};' \7 c( V8 `! i
union keyboard /*定义读取键盘码的共用体类型*/
4 e8 Q2 H) Q: g( t6 H& h7 G' i{. U4 Q5 E' }7 k5 [# Y
unsigned int iKeyInfo;" e! O" ^, r9 T1 [
char chKeyBit[2];$ d" w& {; k x
};5 a( [ j4 g1 B0 l V0 ^4 k
int fnGetKey(void) /*定义读取键盘码的函数*/
& F+ ~2 `& W" b, C{
6 [+ X6 A) X; Lunion keyboard uniKey1; /*定义读取键盘码的共用体变量*/
& t U1 q8 O3 t% m; Owhile(bioskey(1)==0); /*检测用户是否按键*/
z" j0 J4 T+ B6 ?; A* O0 }* n' KuniKey1.iKeyInfo=bioskey(0); /*读取按键信息*/& ^. V+ p$ |- R! ^5 A
return(uniKey1.chKeyBit[0]==0?uniKey1.chKeyBit[1]:uniKey1.chKeyBit[0]); /*返回ASCII码或扩充码*/) w6 X# M* x/ |7 N/ U
}' a7 j* J' E3 h6 A
void main()
9 c- S% x0 e2 i" B9 o) L1 q{
6 ? k+ k: l6 t- @0 o7 P. I6 Sint iKey,x=11,y=6,tx=11,ty=6; /*x,y为人物移动后坐标,tx,ty为人物移动前坐标*/" z( r" }" k4 `
struct Boxss Box[4]; /*定义箱子数量*/
) N$ X% n) V7 E3 i8 K/ Dint chMap[10][10]={ /*用二维数组定义地图*/) I0 a/ ]0 w/ ?7 l
{0,0,0,0,0,0,0,0,0,0}, /*0表示墙1表示路2表示目标*/1 J. } A' J6 q2 ~. a
{0,1,0,0,0,0,1,1,1,0},, O2 J6 ~; o4 x; l! A0 ^
{0,1,0,2,0,0,1,0,1,0},
4 t1 A* q- ~, u/ v# V, v; B {0,1,0,1,0,0,1,0,1,0},
3 W9 G5 c8 S) d) V5 q0 n; B' ? {0,1,1,1,0,0,1,0,1,0},
. n5 z( p; V) e( T2 ^; J Q! A2 ] {0,1,0,0,0,0,1,0,1,0},$ ~! n9 v4 X* i1 O$ F4 Z& l
{0,1,1,1,1,1,1,0,1,0},
6 W3 |$ x: U* m4 R: h8 {0 X {0,1,0,1,0,0,0,0,2,0},
2 b- X/ u3 _3 A1 {% T3 H {0,2,0,1,1,1,1,2,0,0}, Q) \( h5 {" p
{0,0,0,0,0,0,0,0,0,0},. \. n! H/ m4 ^* K
};) K1 V" H, \2 s' Y, @
int i,j;
; m) ]- g, B# @. T( P" EBox[0].x=13; /*定义箱子的坐标属性*/: d" M$ Y$ V1 g* @; P/ V- h
Box[1].x=11;1 l- F2 w0 d6 e0 o, Y4 I, a
Box[2].x=14;
A3 m1 N" P" i2 I) ]5 kBox[3].x=18;1 W) b! z! `4 d" p8 R6 c. U/ z4 [! d
Box[0].y=8;" {* O0 A! T, L) u J# K, s7 `
Box[1].y=7;
/ i* P3 m, s4 i" R- V* R' ^Box[2].y=13;3 d7 W3 p6 |. _+ V4 F! Z( d( b
Box[3].y=7;, u0 d; e: R7 M, @" x& ^
while(1) /*反复进行求移动的坐标运算*/
. d8 u5 K8 J5 o. `3 s' _$ M4 O1 e {
0 M0 r* ]* X" h& W( ` \3 _% `7 x1 i for(i=0;i<10;i++) /*输出新地图(刷新地图)*/9 N& m: t. S8 D8 n8 B0 {
{
, K) J# I7 @' B gotoxy(10,5+i);
$ T" }: u2 B9 F4 ~& c for(j=0;j<10;j++)
/ }4 x+ C, B0 m {
0 {+ Z0 i- s W" `9 c if(chMap[j]==0)7 c& ~3 Q+ }; S5 K1 c( i
printf("#");
( p- r: j" ?3 I" r/ Z( Y) B) U if(chMap[j]==1)9 c7 _+ H5 ^; O& O/ f/ _0 T9 K
printf(" ");
; l( p( j* w( Q: C if(chMap[j]==2)
* g; S6 ^3 a5 |; Y: E' A/ i printf("X");
% o2 p2 [; E$ ^& y( j }3 v. }, _. a6 R# b4 A
}1 g% J+ U: R$ ]$ n G! e
j=0; /*判断是否所有箱子都在目标坐标上*/
+ x" |, a8 ^& w0 T% C3 ? for(i=0;i<4;i++), s/ E& U. \2 y9 |, T" u% Z9 }( V
if(chMap[Box.y-5][Box.x-10]==2)
9 j( p1 f( e2 H' q y j++;( q( H5 G5 }" o6 ^
if(j==4) /*如果所有箱子都就位输出"YOU WIN!"退出*/4 `' {& i1 W: Y7 ~
{
+ E/ n" r" }& l8 e8 ^. D clrscr();: E$ T& [/ o1 a+ w) Y
printf("You Win!");& a. c: k8 p8 E$ R' v
break;+ I; |: i S3 E z5 x
}. f, K( {8 D/ P2 x9 b& B1 L
for(i=0;i<4;i++) /*在起始(或移动后)的坐标输出箱子*/
2 @0 ]0 x* f6 l5 ^ {
, C1 Y8 L+ k& U& |2 V" g gotoxy(Box.x,Box.y);
+ _ M. _) B/ @% y2 n5 k( _" x$ b9 K# F9 X printf("0");
' z1 D, T, W; j8 ` }
0 _! i+ K7 ` \* q0 X gotoxy(x,y); /*在起始(或移动后)的坐标输出人*/: p* I4 ~2 `' k- z ?1 o, s
printf("*\b");' X6 W, o3 [! ^, H: Z- ?" d. ]+ n
tx=x; /*记录本次移动前的坐标*/; C8 F* W) f$ P$ R6 e
ty=y;2 I% o( J) S; y% @" L1 ?5 k2 c/ i5 J
iKey=fnGetKey();8 f: T o9 s7 v7 q
if(iKey==LEFT&&chMap[y-5][x-1-10]!=0) /*按读取的按键信息改变坐标如果改变的坐标和墙(0)重合则不改变*/
% l: |: o5 Q a) {' X# U, J; g# b" S x--;
, Y9 n+ m6 U- z; C2 w, l if(iKey==RIGHT&&chMap[y-5][x+1-10]!=0)( Q, K) v3 u1 ], q7 }! k B
x++;7 N1 f4 J; a6 _- a9 _
if(iKey==UPPER&&chMap[y-1-5][x-10]!=0)9 q9 e+ y- x5 }9 j0 |3 L
y--;
5 |8 F3 q3 |9 K4 }2 z/ Y if(iKey==DOWN&&chMap[y+1-5][x-10]!=0)% F8 s6 S0 H' d& ~4 A
y++; /*输入ESC退出并输出"YOU LOST"*/
, t+ U2 r# ?: P3 Q. e/ S8 F7 a9 s* Q if(iKey==ESC)! j# \: r' k# C3 t; F, i5 K
{( d+ E' F: }* W
clrscr();* j9 L- P2 k( b0 K% T
printf("You Lost");
0 E2 h! i+ ~& |/ H0 k break;
, X7 r4 E" g& X% \& l9 _5 A }
/ @9 ~* X) d8 `5 X( d4 B6 I for(i=0;i<4;i++) /*如果移动后的人的坐标与箱子坐标重合,则改变箱子坐标向前一格*/: g5 P7 \% Z8 v* c! F9 w* v
if(Box.x==x&&Box.y==y)
5 y2 u# `0 e' m' N {* [* Z. l" }! F) \, z0 e
Box.x+=(x-tx);
& k+ C1 N' _/ G" I% } | Box.y+=(y-ty);2 r# c% H8 x' x1 L
if(chMap[Box.y-5][Box.x-10]==0) /*如果移动后的箱子坐标会出现在墙上,则使箱子坐标和人坐标都返回移动前的值*/! T! x% v @7 i! R& A7 }: @
{2 a, x! q1 F/ F( O1 C" i
Box.x-=(x-tx);
! v# ]* @* X# U# b \9 p Box.y-=(y-ty);! N/ V) ~. v; l
x=tx;) n9 V2 O2 N J9 |; G! x
y=ty;
2 E; e) T5 y. P# ~4 O }/ O0 G/ D0 t5 d/ \" a# o
break;3 |( B0 b1 u3 t- B
}
2 P3 j: Q+ J& y5 F3 y clrscr();
9 z0 e. }" g" P! [, w }+ R% ]" t3 [* ^2 T) h6 ^' G
getch();
% e: v' n% A" @" O. J}
B7 e" b$ I* k) n) w# ]
3 w, U. E9 F& e' f5 j6 \2 Q& l8 o) v- a, ~. c
$ u8 O$ V# r7 |. X( _! U………………………END(复制上面的红色字段)………………………………………………… |
|