qtday03 简单版的贪吃蛇游戏

//snakegame.h

#ifndef SNAKEGAME_H

#define SNAKEGAME_H

#include<QList>

#include<QtWidgets/QLabel>

#include<QtWidgets/QDialog>

#include<QKeyEvent>

#include<QTimer>

/*枚举,表示方向*/

enum Direction{D_UP,D_DOWN,D_LEFT,D_RIGHT};

class SnakeGame:public QDialog

{

Q_OBJECT

public:

SnakeGame() ;

~SnakeGame();

public slots:

void snakemove();/*移动*/

public:

QLabel* getfood();/*产生新食物*/

void keyPressEvent(QKeyEvent *key);

private:

QList<QLabel*> snake;/*蛇*/

QLabel * food;/*食物*/

Direction dire;/*方向*/

int foodlen;/*食物长度*/

int maxlen;/*最大长度*/

QTimer * timer;/*定时器*/

};

#endif // SNAKEGAME_H

//snakegame.cpp

#include "snakegame.h"

#include<QTime>

#include<QMessageBox>

SnakeGame::SnakeGame(){

this->resize(760,600);

foodlen=40;/*食物的高/宽*/

qsrand(QTime::currentTime().msec());

timer=new QTimer(this);

timer->setInterval(300);

timer->start();

snake.push_back(getfood());

food=getfood();

maxlen=5;

dire=D_RIGHT;

connect(timer,SIGNAL(timeout()),this,SLOT(snakemove()));

}

SnakeGame::~SnakeGame(){

delete timer;

delete food;

for(int i=0;i<snake.length();i++){

delete snake[i];

}

}

void SnakeGame::snakemove(){

int x=snake[0]->x();

int y=snake[0]->y();

bool isover=false;/*自己碰到自己,结束*/

for(int i=1;i<snake.length();i++){

if(snake[0]->x()==snake[i]->x() && snake[0]->y()==snake[i]->y()){

isover=true;

break;

}

}

if(snake.size()>=maxlen){

QMessageBox msg(this);

msg.setText("Continue ?");

msg.setStandardButtons(QMessageBox::Yes|QMessageBox::No);

if(msg.exec()==QMessageBox::No)

{

this->close();

}

else{

maxlen=maxlen*2+1;

}

}

else  if(x<0|| y<0 || x>this->width()|| y>this->width()|| isover==true){

QMessageBox msg(this);

msg.setText("Game over!");

msg.exec();

this->close();

}

if(x==food->x()&& y==food->y()){

snake.push_back(food);

food=getfood();

}

/*把后面的移动一步,*/

for(int i=snake.length()-1;i>=1;i--){

snake[i]->move(snake[i-1]->x(),snake[i-1]->y());

}

switch (dire) {

case D_UP:

y=y-foodlen;

break;

case D_DOWN:

y=y+foodlen;

break;

case D_LEFT:

x=x-foodlen;

break;

case D_RIGHT:

x=x+foodlen;

break;

default:

break;

}

/*把头移动一步*/

snake[0]->move(x,y);

}

QLabel* SnakeGame::getfood(){

food=new QLabel(this);

food->resize(foodlen,foodlen);

food->setAutoFillBackground(true);

/*随机颜色*/

//qDebug(QString::number(i).toStdString());

food->setPalette(QPalette(QColor(qrand()%256,qrand()%256,qrand()%256)));

int w=this->width()-foodlen;

int h=this->height()-foodlen;

food->move((qrand()%w)/foodlen*foodlen,

(qrand()%h/foodlen*foodlen));

food->show();

return food;

}

void SnakeGame::keyPressEvent(QKeyEvent *key){

switch (key->key()) {

case Qt::Key_Left:

if(dire!=D_RIGHT)  dire=D_LEFT;

break;

case Qt::Key_Right:

if(dire!=D_LEFT)    dire=D_RIGHT;

break;

case Qt::Key_Up:

if(dire!=D_DOWN)   dire=D_UP;

break;

case Qt::Key_Down:

if(dire!=D_UP)   dire=D_DOWN;

break;

default:

break;

}

}

//main.cpp

#include<QApplication>

#include "snakegame.h"

int main(int argc,char* argv[])

{

QApplication app(argc,argv);

SnakeGame sg;

sg.show();

return app.exec();

}

qtday03 简单版的贪吃蛇游戏

时间: 2024-10-14 00:52:33

qtday03 简单版的贪吃蛇游戏的相关文章

Android快乐贪吃蛇游戏实战项目开发教程-01项目概述

一.项目简介贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏.我已经将做好的案例上传到了应用宝,大家可以下载下来把玩一下.为了和其它的贪吃蛇区别开来,我取名叫“快乐贪吃蛇”.应用宝链接:http://sj.qq.com/myapp/detail.htm?apkName=net.chengyujia.happysnake这里上两张截图先睹为快,哈哈.怎么玩大家应该都知道,不过我还是要多提一下.通过屏幕上的方向键控制蛇的前进方向.蛇每吃到一个食物身体会

手起刀落-一起来写经典的贪吃蛇游戏

回味 小时候玩的经典贪吃蛇游戏我们印象仍然深刻,谋划了几天,小时候喜欢玩的游戏,长大了终于有能力把他做出来(从来都没有通关过,不知道自己写的程序,是不是能通关了...),好了,闲话不多谈,先来看一下效果吧!! 功能和小时候玩的贪吃蛇一样, 1.选择速度 slow normal fast 2.选择是否有墙作为障碍物 on off 看完效果就先附上地址喽:大山深处修炼的小龙虾,欢迎fork. 结构分解 如果构建一个简单的经典贪吃蛇游戏呢?我们根据面板可以分解出如下结构: 因为其他面板比较简单,我们重

Qt版贪吃蛇游戏

Qt版贪吃蛇游戏 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 最近在学习Qt,用了一个多月的时间掌握了Qt中最基本的知识,也完成了<Qt版音乐播放器>.<Qt版贪吃蛇游戏>.<Qt版双人俄罗斯方块>以及<Qt版科学计算器>等,之前在VC下写过这些程序,所以在Qt下只是改变了显示等语句,我写过<C++版贪吃蛇游戏>.<VC版贪吃蛇游戏>,当时将与显示等无关的东西封装起来,在Qt下直接用,只

做一个简单的贪吃蛇游戏

这是一个贪吃蛇游戏,你可以忽略他的外表,好了,先上html代码 <style type="text/css"> * {margin: 0;padding: 0;} #container {width: 1000px;height: 550px;border: 1px solid #000;margin: 0 auto;} #container #ground {width: 1000px;height: 500px;background-color:#eeeeee;posi

贪吃蛇游戏

学习C语言也差不多学完了想做一个游戏,而贪吃蛇和俄罗斯方块都是非常经典的游戏,在网上也找到了许多相关的参考资料,便动手做了,这个游戏室控制台版的 游戏流程图 函数模块 函数名 函数功能 CursorPosition 光标定位函数 CreateSnake 蛇初始化函数 ShowWall 显示墙体 UpdateSnake 更新界面上的蛇体.分数.等级.食物 CollisionDetection 判断蛇是否咬到自己 RandFood 随机产生食物 Move 控制方向 程序代码 #include <st

贪吃蛇 游戏

结队作业  结队人 郑丁鹏(负责 (二)流程图和(四)游戏测试 ) 我负责 (二)游戏需求分析 与(三)游戏代码 贪吃蛇游戏程序设计 一.基本内容描述 运用java技术开发出贪吃蛇游戏,这个程序是用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块.移动时必须从蛇头开始,也就是蛇尾不能改作蛇头.当游戏者按了方向键后,蛇头朝着指定的方向移动,一步移动一节身体.图形的实现是从蛇头的新位置开始画出蛇.用户可以用上下左右键控制蛇头的方向,用空格键暂停或继续,非常简单! 可以实现如下功能: 贪吃蛇游

基于控制台实现贪吃蛇游戏

1).引言 学习编程,我个人觉得最好的办法就是根据自己的水平不断的给自己设定一个小目标.而这个小目标就是一个有意思的项目,通过完成这个项目,对自己的成果(也包括失败的)进行分析总结,从中提炼出对应的技术并分享出来,不断的往复,如此,为的就是让我们永远保持编写程序的兴趣和热情,完了,还提高我们的技术.而本文就是总结自己的一个小目标(基于控制台实现的贪吃蛇游戏而写的总结) 2).技术实现 大家小时候一定玩过贪吃蛇的游戏.贪吃蛇游戏的控制过程其实也不复杂.简单的可以概括为以下4个部分. 1.1  .组

使用Love2D引擎开发贪吃蛇游戏

今天来介绍博主最近捣腾的一个小游戏[贪吃蛇],贪吃蛇这个游戏相信大家都不会感到陌生吧.今天博主将通过Love2D这款游戏引擎来为大家实现一个简单的贪吃蛇游戏,在本篇文章当中我们将会涉及到贪吃蛇的基本算法.Lua语言编程等基本的内容,希望能够对大家开发类似的游戏提供借鉴和思考,文章中如有不足之处,还希望大家能够谅解,因为博主的游戏开发基本就是这样慢慢摸索着学习,所以难免会有不足的地方. 游戏算法 我们首先来看看贪吃蛇是怎么移动的? 通过这四张图的演示,我们可以发现这样一个规律: 蛇的移动其实是将蛇

《结对-网页贪吃蛇游戏-需求分析》

一. 介绍:贪吃蛇游戏是一款经典的益智游戏,有PC和手机等多平台版本.既简单又耐玩,深受人们喜爱. 二. 用户需求:1.可在浏览器上进行游戏. 2.可以调节难度. 3.可查看历史战绩. 4.可以更改背景,游戏的开始暂停以及分辨率的调节. 5.可显示游戏的实时分数. 三. 实施做法:应用html,css,javascript,语言进行代码编写,运用sublime,DW进行代码编写调试运行. 四. 游戏特点:无需下载,用户可以随时打开浏览器进行游戏. 五. 游戏规定:游戏者通过键盘的上下左右控制蛇头