求经典游戏(五子棋蛇俄罗斯方块等。)c++源代码。最好有软件设计流程。我想学习想法。

这是蛇最简单的控制过程。

这些游戏一般分为控制算法、显示算法、决策算法等。

供参考:

# include & ltstdio.h & gt

# include & ltwindows.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

# include & ltconio.h & gt

# include & lttime.h & gt//使用当前时间作为种子;

枚举目录{上、下、左、右};//枚举类型枚举目录;

//栅栏;

void init fence();

void OutputF();

char游戏[20][20];

//绘制一个框架;

void InitFence(){

int i,j;

for(I = 0;我& lt20;i++)

for(j = 0;j & lt20;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;我& lt20;i++){

for(j = 0;j & lt20;j++)

printf("%c ",game[I][j]);

printf(" \ n ");

}

}

//snake节点;

结构SnakeNode{

int x,y;

struct SnakeNode *prior,* next

}*head=NULL,* tail = NULL

void add_head(int x,int y);

int get _ x(struct snake node * p);

int get _ y(struct snake node * p);

void delete _ tail();

//插入头节点;

void add_head(int x,int y){

struct snake node * q =(struct snake node *)malloc(sizeof(struct snake node));

q->;x = xq->;y = y

q->;下一个=头;

q->;先验=空;

if(head)head-& gt;先验= q;

head = q;

如果(!tail)尾巴=头;

game[x][y]= ' * ';//f对象可以在定义Fence类的时候定义;并且Fence类在SnakeNode类之前定义;

}

int get_x(struct SnakeNode *p){

返回p-& gt;x;

}

int get_y(struct SnakeNode *p){

返回p-& gt;y;

}

//删除尾节点;

void delete_tail(){

struct SnakeNode * p = tail

游戏[get _ x(tail)][get _ y(tail)]=“”;//将尾节点坐标表示的' * '设置为空格;

if(tail==head)

tail = head = NULL

否则{

tail = tail-& gt;先验;

尾巴-& gt;next = NULL

}

免费(p);

}

//move移动;

结构移动{

枚举方向点;//枚举变量point:控制方向;

int food _ x;

int food _ y;

};

void移动(struct move * m);

void change_point(char,struct move * m);//改变方向;

void get _ food(struct move * m);

void get_food(struct move *m){

srand((无符号int)time(NULL));//seed(程序运行时间);

m-& gt;food _ x = rand()% 18+1;

m-& gt;food _ y = rand()% 18+1;

游戏[m-& gt;food _ x][m-& gt;food _ y]= ' * ';

}

空移动(结构移动*m){

int a,b;

a = get _ x(head);//获取头节点的横坐标

b = get _ y(head);//头节点的纵坐标

开关(m->;点){

case up:-a;打破;

case down:++ a;打破;

案例左:-b;打破;

case right:++ b;打破;

}

if(a = = 19 | | b = = 19 | | a = = 0 | | b = = 0){//判断是否碰壁;

printf("游戏结束!!!\ n ");

退出(0);

}

if(a = = m-& gt;食物x & amp& ampb = = m-& gt;Food_y){ //吃货;

add_head(a,b);

get _ food(m);

}

否则{

add_head(a,b);//插入头节点;

delete _ tail();//删除尾节点;

}

}

void change_point(char keydown,struct move *m){

开关(按键){

//大小写“w”:m-& gt;点=上;打破;

//大小写':m-& gt;点=下;打破;

//大小写“a”:m-& gt;点=左;打破;

//大小写“d”:m-& gt;点=右;打破;

案例72:m-& gt;点=上;打破;

案例80:m-& gt;点=下;打破;

案例75:m-& gt;点=左;打破;

案例77:m-& gt;点=右;打破;

}

}

//main();

int main(){

结构移动m;

printf("用‘w,s,a,d’控制方向!!!\ n \ n \ n ");

init fence();

add_head(4,3);

add_head(4,4);

add_head(4,5);

获取_食物(& ampm);

OutputF();

while (1){

char keydown = getch();//getch()返回在键盘上读取的字符;包括头文件

change _ point(keydown & amp;m);

而(!khit()){//判断是否有掉键;

系统(“cls”);//清屏功能;

移动(& ampm);

OutputF();

睡眠(200);

}

}

返回0;

}