用java编写的贪吃蛇游戏代码

用Java编写的贪吃蛇代码
下面是我用java编写的一个贪吃蛇游戏源代码.我个人是比较喜欢玩游戏的,所以学习编程二年多了,很想做个游戏程序,由于能力有限,一直没能做好,后来突然看同学在手机上玩“贪吃蛇”,故想做出来,其一是因为此游戏界面容易设计,算法也比较简单,今天我就把我程序的代码和算法介绍一下,顺便把程序界面皮肤设计说一下......
    程序中一个关于游戏信息的类如下,由于类的说明在程序中写的很清楚了,就不再多解释了:#include "time.h"
    //方向定义
    const CPoint UP(CPoint(0,-1));
    const CPoint DOWN(CPoint(0,1));
    const CPoint LEFT(CPoint(-1,0));
    const CPoint RIGHT(CPoint(1,0));
    //速度快慢定义
    const int HIGH = 75;
    const int NORMAL = 180;
    const int SLOW = 300;
    const int MAX = 80; //表示转向数
    const int LENGTH = 10;
    class GameMsg
    {
    public:
    GameMsg(void)
    : m_icon(0)
巴尔蒂斯
    {
    InitGame();
    }
    void InitGame(int up = VK_UP, int down = VK_DOWN, int left = VK_LEFT, int right = VK_RIGHT)
    {
    srand((unsigned)time(NULL));
    m_gameSpeed = NORMAL;
    m_speedNum = 2;
    m_snakeNum = 4;
    for(int i=0; i<m_snakeNum; ++i)
    m_snakePoint[i] = CPoint(5+LENGTH*2*5+LENGTH,LENGTH*2*(i+5));
    m_run = true;
    m_direction = RIGHT;
    turnUP = up;
    turnDOWN = down;
    turnLEFT = left;
    turnRIGHT = right;
    }
    public:
    int m_gameSpeed;//游戏速度
    int m_speedNum;//游戏速度数
    CPoint m_foodPoint; //食物定义
    bool m_run;//游戏状态,运得态还是暂停(结束)态
    CPoint m_snakePoint[MAX]; //蛇身定义
    CPoint m_direction;//蛇运动方向
    int m_snakeNum; //蛇身结点数
    int m_icon;//用来设定食物是那种图标的
    int turnUP;//用来表示玩家“上”键设的键int turnDOWN;//用来表示玩家“下”键设的键int turnLEFT;//用来表示玩家“左”键设的键int turnRIGHT;//用来表示玩家“右”键设的键
    int m_num;//用来记录所选水果的编号
    };
    再让读者看一下程序主干类的设计,其中以下只列出由我们自己添加的一些变量的说明,
其他的是由程序向导自动生成的,我就不说了:
    public:
    afx_msg void OnTimer(UINT_PTR nIDEvent);//程序中运行函数,即是一个定时器,时间就是上面类中的m_gameSpeed来控制的CStatic *m_staticArray;//这是一个蛇定义,是用来显示蛇的,上面只告诉蛇身结点的中心点位置坐标,然后在此中心画一个控件就类似于蛇身了afx_msg void OnClose();//结束,主要是在其中销毁定时器的
    void GameOver(void);//游戏结束函数
    afx_msg void OnRButtonDown(UINT nFlags, CPoint point);//当点击鼠标右键出现菜单afx_msg void OnNewGame();//菜单选项,新游戏afx_msg void OnPauseOrStart();//菜单选项,暂停/开始 游戏afx_msg void OnUpdateQuick(CCmdUI *pCmdUI);//这3个函数本来是来标记速度的,和上面类中的m_speedNum对应,但是没有标记成功
    afx_msg void OnUpdateNormal(CCmdUI *pCmdUI);
    afx_msg void OnUpdateSlow(CCmdUI *pCmdUI);中国思维
    afx_msg void OnNormal();//菜单选项,设定为普通速度afx_msg void OnSlow();//菜单选项,设定为慢速度afx_msg void OnQuick();//菜单选项,设定为快速度afx_msg void OnIntroduce();//游戏介绍,就是弹出一个对话框而以
20钢    afx_msg void OnMoreprogram();//进入我的博客的函数
    afx_msg void OnAbout();//关于“贪吃蛇”说明的对话框坦克巷战
    afx_msg void OnExit();//退出游戏
    CFont m_font;//这就是上图中显示“空心字体”的字体设置void ShowHollowFont(int cx, int cy, CString str);//显示空心字体函数,在(Cx,Cy)处显示字符串str
円族    afx_msg void OnBnClickedExit();//退出游戏
    private:
    int m_icon1;//表明蛇吃第1种水果的个数
    int m_icon2;//表明蛇吃第2种水果的个数
    int m_icon3;//表明蛇吃第3种水果的个数
然后给读者写的是我程序运行很重要的一个函数,WM_TIMER显示函数,里面有食物位置随机出现,判断蛇死,蛇移动等:
    void CSnakeDlg::OnTimer(UINT_PTR nIDEvent)
    {
    if(game.m_snakePoint[0].x < 0 || game.m_snakePoint[0].y < LENGTH || game.m_snakePoint[0].x > 700 || game.m_snakePoint[0].y > 500)//当蛇跑出边界,游戏结束
    {
    GameOver();
    }
    for(int j=game.m_snakeNum-1; j>0; --j)//蛇移动的量的变化,当重新设定这些控件的位置时也就是让蛇移动起来game.m_snakePoint[j] = game.m_snakePoint[j-1];
    game.m_snakePoint[0].x += game.m_direction.x * LENGTH * 2;//蛇头移动game.m_snakePoint[0].y += game.m_direction.y * LENGTH * 2;
非法侵入(01)
    for(int i=0; i<game.m_snakeNum; ++i)
    {
    m_staticArray[i].SetWindowPos( NULL, game.m_snakePoint[i].x - LENGTH, game.m_snakePoint[i].y - LENGTH, game.m_snakePoint[i].x + LENGTH, game.m_snakePoint[i].y + LENGTH,

本文发布于:2024-09-22 07:39:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/244870.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:游戏   程序   设定   用来   菜单   选项   函数   显示
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议