求经典小游戏(五子棋 贪吃蛇 俄罗斯方块等)c++ 源代码。最好能有软件设计过程 我想学思路

 我来答
zhjiemm
2012-03-17 · TA获得超过2643个赞
知道大有可为答主
回答量:1834
采纳率:75%
帮助的人:708万
展开全部
这有一个最简单的贪吃蛇的控制过程。
一般对于此类的游戏,都分为控制算法,显示算法,判定算法等几个大部分。

供参考:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h> //使用当前时间做种子;
enum dir{up,down,left,right}; //枚举类型enum dir;
//围墙;
void InitFence();
void OutputF();
char game[20][20];

//画框框;
void InitFence(){
int i,j;
for(i=0; i<20; i++)
for(j=0; j<20; j++){
if(i==0||i==19||j==0||j==19)
game[i][j]= '*';
else game[i][j]= ' ';
}
}
//显示框框;
void OutputF(){
int i,j;
for(i=0; i<20; i++){
for(j=0; j<20; j++)
printf("%c ",game[i][j]);
printf("\n");
}
}
//蛇结点;
struct SnakeNode{
int x,y;
struct SnakeNode *prior,*next;
}*head=NULL, *tail =NULL;
void add_head(int x,int y);
int get_x(struct SnakeNode *p);
int get_y(struct SnakeNode *p);
void delete_tail();

//插入头结点;
void add_head(int x,int y){
struct SnakeNode *q= (struct SnakeNode *)malloc(sizeof(struct SnakeNode));
q->x =x; q->y =y;
q->next =head;
q->prior =NULL;
if(head) head->prior =q;
head =q;
if(!tail) tail =head;
game[x][y]= '*'; //f对象可以在定义Fence类时定义; 且Fence类在SnakeNode类前定义;
}
int get_x(struct SnakeNode *p){
return p->x;
}
int get_y(struct SnakeNode *p){
return p->y;
}
//删除尾结点;
void delete_tail(){
struct SnakeNode *p =tail;
game[get_x(tail)][get_y(tail)]= ' ';//把尾结点的坐标表示的'*'置为空格;
if(tail==head)
tail= head= NULL;
else{
tail= tail->prior;
tail->next= NULL;
}
free(p);
}
//move移动;
struct move{
enum dir point; //枚举变量point: 控制方向;
int food_x;
int food_y;
};
void moving(struct move *m);
void change_point(char,struct move *m); //改变方向;
void get_food(struct move *m);

void get_food(struct move *m){
srand((unsigned int) time(NULL)); //做种子(程序运行时间);
m->food_x= rand()%18+1;
m->food_y= rand()%18+1;
game[m->food_x][m->food_y]= '*';
}

void moving(struct move *m){
int a,b;
a= get_x(head); //取得头结点横坐标
b= get_y(head); //头结点纵坐标
switch(m->point){
case up: --a; break;
case down: ++a; break;
case left: --b; break;
case right: ++b; break;
}
if(a==19||b==19||a==0||b==0){ //判断是否撞墙;
printf("game over!!!\n");
exit(0);
}
if(a==m->food_x && b==m->food_y){ //吃food;
add_head(a,b);
get_food(m);
}
else{
add_head(a,b); //插入头结点;
delete_tail(); //删除尾结点;
}
}
void change_point(char keydown,struct move *m){
switch(keydown){
// case 'w': m->point= up; break;
// case 's': m->point= down; break;
// case 'a': m->point= left; break;
// case 'd': m->point= right; break;
case 72: m->point= up; break;
case 80: m->point= down; break;
case 75: m->point= left; break;
case 77: m->point= right; break;
}
}

//main();
int main(){
struct move m;

printf("Using 'w,s,a,d'to control direction!!!\n\n\n");

InitFence();
add_head(4,3);
add_head(4,4);
add_head(4,5);
get_food(&m);
OutputF();
while (1){
char keydown= getch(); //getch()返回键盘上读取的字符;包含头文件<conio.h>
change_point(keydown,&m);
while(!kbhit()){ //判断有没有按键落下;
system("cls"); //清屏函数;
moving(&m);
OutputF();
Sleep(200);
}
}
return 0;
}
拾得于春秋9
2012-03-19
知道答主
回答量:22
采纳率:0%
帮助的人:3.5万
展开全部
???
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式