汉扬编程 编程大纲 Java版《贪吃蛇》升级版小游戏,源码奉送

Java版《贪吃蛇》升级版小游戏,源码奉送

《贪吃蛇》小游戏,说是90后的童年的一部分,一点也不夸张吧!“小霸王”游戏机、电视机、手柄游戏等等,应该都回忆起来了吧都,哈哈哈……

Java版《贪吃蛇》升级版小游戏,源码奉送

视频加载中…

Java版《贪吃蛇》升级版小游戏,源码奉送

前2个星期小编就发过一篇文章,当时的《贪吃蛇》只是初见成效,今日个小编加了部分功能进去。

Java版《贪吃蛇》升级版小游戏,源码奉送

下面小编来介绍下用Java写的《贪吃蛇》小游戏升级版:1、主要功能:开始游戏、重新开始游戏、历史最高分记录、贪吃蛇会越跑越快

Java版《贪吃蛇》升级版小游戏,源码奉送

2、难点:熟悉掌握Java中的AWT和SWING界面操作类,弄清楚游戏玩法,并拆分游戏功能模块,并一步步的去用Java实现

Java版《贪吃蛇》升级版小游戏,源码奉送

3、适用学习对象:主要适用于Java初学者,是一个不错的练手的好项目

(注意了,获取源码的方式在文章的最后面哦~)

核心代码展示:1、在PubStaticVar静态变量类中,设置了游戏中需要的各个参数,例如:STEP表示贪吃蛇每次移动距离;MOVE_RATE_01表示贪吃蛇移动频率等等

2、setRandomWorm私有方法,在界面上随机生成一个虫虫

3、关键代码,贪吃蛇移动的实现:建立一个新线程,指导贪吃蛇死亡,否则线程中的代码会一直执行

4、贪吃蛇的自动移动、移动频率、虫虫的设置、贪吃蛇迟到虫虫的检测功能的实现

获取源码方式:头条私信回复A009,即可下载源码今天的分享就到这了,希望大家喜欢~

喜欢的童鞋记得点一波关注哦,后面会不断有惊喜等着你们哦~

程序员大佬直播C语言写个贪吃蛇游戏练手,如此简单,你会做了吗

用C语言完成简单经典小游戏——贪吃蛇。出格适合新手熟谙CC语言。

Java版《贪吃蛇》升级版小游戏,源码奉送

首要触及C语言常识点以下:*布局体,函数的定义及调用,指针变量,指针和数组,逻辑表达式,根基的选择和轮回语句,头文件的编写等*。

Java版《贪吃蛇》升级版小游戏,源码奉送

可以说是麻雀虽小,五脏俱全,是新手演习C措辞的绝佳小项目!

Java版《贪吃蛇》升级版小游戏,源码奉送

游戏界面以下:

Java版《贪吃蛇》升级版小游戏,源码奉送

根基思路:

蛇每吃一个食品蛇身子就增加一格,用WASD节制蛇头的勾当,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。

法度典型首要变量以下:

“`

#define M 20//全数图形界面的长和宽

#define N 60

struct snake a[(M – 2)*(N – 2)];//蛇身数组

int snake_x =4;//蛇身的XY坐标

int snake_y =4;

int X = 1;//节制蛇头的偏向量

int Y = 0;

int food_x , food_y ;//食品的XY坐标

int score = 0;//分数

“`

食品的随机位置产生是经过过程两个随机数辨别代表X,Y坐标完成的。

“`

void food(int *x, int *y,int *fx,int *fy,int *s, struct snake *snake)

{

int ffx, ffy;//上一次食品的XY坐标

ffx = *fx;

ffy = *fy;

if (*x == *fx && *y == *fy)//假定吃到了食品,产生下一个食品

{

do {

*fx = 1 + rand() % (N – 3);

*fy = 1 + rand() % (M – 3);

} while (ffx == *fx && ffy == *fy);//包管与前次食品位置不合

for (int i= (*s); i >= 0; i–)

{

if ((snake + *s)->snake_x == *fx && (snake + *s)->snake_y == *fy) {

*fx = 1 + rand() % (N – 3);

*fy = 1 + rand() % (M – 3);

}

}//大年夜大年夜概率包管食品与蛇身子的位置不合(不克不及完全包管)

(*s)++ ; //分数加一!!!!!!!

}

}

“`

用WASD节制蛇头的勾当是经过过程改动蛇头的X,Y坐标完成的。

“`

void control(int *x,int *y,int *X,int *Y)//xy是蛇头的坐标,XY是节制勾当偏向的量

{

if (_kbhit())

{

switch (_getch())

{

case \’w\’ :

case \’W\’ :

if(interf[*y – 1][*x]!=\’@\’){ //if语句包管蛇不克不及倒着走

*X = 0; *Y = -1;

}

break;

case \’d\’:

case \’D\’:

if(interf[*y][*x + 1] != \’@\’){

*X = 1; *Y = 0;

}

break;

case \’s\’:

case \’S\’:

if (interf[*y + 1][*x] != \’@\’) {

*X = 0; *Y = 1;

}

break;

case \’a\’:

case \’A\’:

if (interf[*y][*x – 1] != \’@\’) {

*X = -1; *Y = 0;

}

break;

default:

break;

}

}

*x = *x + *X;//改动一次位置

*y = *y + *Y;

}

“`

用定义蛇身子的布局体储藏身安身子的XY坐标,然后定义蛇身子布局体数组存储每节蛇身子。

“`

struct snake

{

int number;

int snake_x;

int snake_y;

//struct snake *next;

};

struct snake a[(M – 2)*(N – 2)];

void build_snake(struct snake *snake,int s,int *sx,int *sy)//sx,sy蛇头的位置

{

for (int i = s; i >= 0; i–)

{

if (i == 0) {

(snake + i)->number = i;

(snake + i)->snake_x = *sx;

(snake + i)->snake_y = *sy;

}else{

(snake + i)->number = i;

(snake + i)->snake_x = (snake + i – 1)->snake_x;

(snake + i)->snake_y = (snake + i – 1)->snake_y;

}

}

}

“`

有了蛇身子和食品的坐标位置,将它们一路存储在一个暗示全数界面的二位数组,然后轮回打印全数数组构成动画成果!

“`

char interf[M][N];

void newinterface(struct snake *snake, int fx, int fy,int s)

{

int x, y;

for (int i = 0; i < M; i++)

{

for (int j = 0; j < N; j++)

{

if (i == 0 || i == M – 1)

interf[i][j] = \’-\’;

//printf(\”-\”);

else if (j == 0)

interf[i][j] = \’|\’;

//printf(\”|\”);

else if (j == N – 1)

interf[i][j] = \’|\’;

//printf(\”|\\n\”);

else if (i == fy && j == fx)

interf[i][j] = \’$\’;

//printf(\”$\”);

else

interf[i][j] = \’ \’;

//printf(\” \”);

}

}

for (; s >= 0; s–)

{

x = (snake + s)->snake_x;

y = (snake + s)->snake_y;

interf[y][x] = \’@\’;

}

}

“`

完全法度典型代码!!!

“`

文件 snakemain.cpp

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#include \”interface.h\”

#include \”snake.h\”

int main(void)

{

struct snake a[(M – 2)*(N – 2)];

int snake_x =4;

int snake_y =4;

int X = 1;

int Y = 0;

int food_x , food_y ;

int score = 0;

do {

food_x = 1 + rand() % (N – 3);

food_y = 1 + rand() % (M – 3);

} while (food_x == 4 && food_y == 4);

for (;;)

{

system(\”cls\”);

printf(\”\\n 贪吃蛇小游戏\”);

printf(\”\\n作者:xhyang 博客地址:/weixin_39449570\\n\”);

printf(\”按W节制向上勾当,按D节制向右勾当,按S节制向下勾当,按A节制向左勾当。\\n\”);

printf(\”得分:%d\”,score);

printf(\”\\n\”);

control(&snake_x, &snake_y,&X,&Y);

build_snake(a, score, &snake_x, &snake_y);

death(snake_x, snake_y,score);

newinterface(a, food_x, food_y, score);

food(&snake_x, &snake_y, &food_x, &food_y,&score,a);

draw();

Sleep(140);

}

system(\”pause\”);

return 0;

}

“`

“`

文件 snake.h

#ifndef SNAKE_H

#define SNAKE_H

struct snake

{

int number;

int snake_x;

int snake_y;

//struct snake *next;

};

void build_snake(struct snake *snake, int s, int *sx, int *sy);

#endif

“`

“`

文件 snake.cpp

#include <stdio.h>

#include <stdlib.h>

#include \”snake.h\”

void build_snake(struct snake *snake,int s,int *sx,int *sy)

{

for (int i = s; i >= 0; i–)

{

if (i == 0) {

(snake + i)->number = i;

(snake + i)->snake_x = *sx;

(snake + i)->snake_y = *sy;

}else{

(snake + i)->number = i;

(snake + i)->snake_x = (snake + i – 1)->snake_x;

(snake + i)->snake_y = (snake + i – 1)->snake_y;

}

}

}

“`

“`

文件 interface.h

#ifndef INTERFACE_H

#define INTERFACE_H

#define M 20

#define N 60

void control(int *x, int *y, int *X, int *Y);

void snake(int x, int y);

void newinterface(struct snake *snake, int fx, int fy, int s);

void food(int *x, int *y, int *fx, int *fy, int *s, struct snake *snake);

void draw(void);

void death(int x, int y, int s);

#endif

“`

“`

文件 interface.cpp

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <windows.h>

#include \”interface.h\”

#include \”snake.h\”

char interf[M][N];

void newinterface(struct snake *snake, int fx, int fy,int s)

{

int x, y;

for (int i = 0; i < M; i++)

{

for (int j = 0; j < N; j++)

{

if (i == 0 || i == M – 1)

interf[i][j] = \’-\’;

//printf(\”-\”);

else if (j == 0)

interf[i][j] = \’|\’;

//printf(\”|\”);

else if (j == N – 1)

interf[i][j] = \’|\’;

//printf(\”|\\n\”);

else if (i == fy && j == fx)

interf[i][j] = \’$\’;

//printf(\”$\”);

else

interf[i][j] = \’ \’;

//printf(\” \”);

}

}

for (; s >= 0; s–)

{

x = (snake + s)->snake_x;

y = (snake + s)->snake_y;

interf[y][x] = \’@\’;

}

}

void food(int *x, int *y,int *fx,int *fy,int *s, struct snake *snake)

{

int ffx, ffy;//上一次食品的XY坐标

ffx = *fx;

ffy = *fy;

if (*x == *fx && *y == *fy)//假定吃到了食品,产生下一个食品

{

do {

*fx = 1 + rand() % (N – 3);

*fy = 1 + rand() % (M – 3);

} while (ffx == *fx && ffy == *fy);//包管与前次食品位置不合

for (int i= (*s); i >= 0; i–)

{

if ((snake + *s)->snake_x == *fx && (snake + *s)->snake_y == *fy) {

*fx = 1 + rand() % (N – 3);

*fy = 1 + rand() % (M – 3);

}

}//大年夜大年夜概率包管食品与蛇身子的位置不合(不克不及完全包管)

(*s)++ ; //分数加一!!!!!!!

}

}

void control(int *x,int *y,int *X,int *Y)//xy是蛇头的坐标,XY是节制勾当偏向的量

{

if (_kbhit())

{

switch (_getch())

{

case \’w\’ :

case \’W\’ :

if(interf[*y – 1][*x]!=\’@\’){ //if语句包管蛇不克不及倒着走

*X = 0; *Y = -1;

}

break;

case \’d\’:

case \’D\’:

if(interf[*y][*x + 1] != \’@\’){

*X = 1; *Y = 0;

}

break;

case \’s\’:

case \’S\’:

if (interf[*y + 1][*x] != \’@\’) {

*X = 0; *Y = 1;

}

break;

case \’a\’:

case \’A\’:

if (interf[*y][*x – 1] != \’@\’) {

*X = -1; *Y = 0;

}

break;

default:

break;

}

}

*x = *x + *X;//改动一次位置

*y = *y + *Y;

}

void draw(void)

{

for (int i = 0; i < M; i++)

{

for (int j = 0; j < N; j++)

{

printf(\”%c\”, interf[i][j]);

}

printf(\”\\n\”);

}

}

void death(int x,int y,int s)

{

if (x == 0 || x == N-1 || y == 0 || y == M-1 || interf[y][x] == \’@\’) {

for (;;)

{

system(\”cls\”);

printf(\”\\n 游戏中断!\\n\”);

printf(\” 终究得分:%d \\n\”, s);

Sleep(140);

//system(\”pause\”);

}

}

}

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/6806.html

C/C++游戏开发(贪吃蛇)老司机的编程入门心得

用 Python 写个贪吃蛇,保姆级教程

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部