贪吃蛇代码c贪吃蛇代码

贪吃蛇代码  时间:2021-07-16  阅读:()

C语言中贪吃蛇代码 #define LEFT 0x4b00 #define RIGHT 0x4d0

是数的一种写法。

前缀 0x 表示后面的是十六进制的数。

比如 0x10 表示 十进制的数字 16。

具体的可以找点 十六进制 的资料看看。

贪吃蛇 java代码

import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.*; public class SnakeGame extends JFrame implements KeyListener{ private int stat=1,direction=0,bodylen=6,headx=7,heady=8, tailx=1,taily=8,tail,foodx,foody,food;//初始化定义变量 public final int EAST=1,WEST=2,SOUTH=3,NORTH=4;//方向常量 int [][] fillblock=new int [20][20];//定义蛇身所占位置 public SnakeGame() {//构造函数 super("贪吃蛇"); setSize(510,510); setVisible(true);//设定窗口属性 addKeyListener(this);//添加监听 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int i=1;i<=7;i++) fillblock[i][8]=EAST;//初始化蛇身属性 direction=EAST;//方向初始化的设置 FoodLocate(); //定位食物 while (stat==1){ fillblock[headx][heady]=direction; switch(direction){ case 1:headx++;break; case 2:headx--;break; case 3:heady++;break; case 4:heady--;break; }//蛇头的前进 if(heady>19||headx>19||tailx>19||taily>19||heady<0||headx<0||tailx<0||taily<0||fillblock[headx][heady]!=0){ stat=0; break; } //判断游戏是否结束 try{ Thread.sleep(150); } catch(InterruptedException e){}//延迟 fillblock[headx][heady]=direction; if(headx==foodx&&heady==foody){//吃到食物 FoodLocate(); food=2; try{ Thread.sleep(100); } catch(InterruptedException e){}//延迟 } if(food!=0)food--; else{tail=fillblock[tailx][taily]; fillblock[tailx][taily]=0;//蛇尾的消除 switch(tail){ case 1:tailx++;break; case 2:tailx--;break; case 3:taily++;break; case 4:taily--;break; }//蛇尾的前进 } repaint(); } if(stat==0) JOptionPane.showMessageDialog(null,"GAME OVER","Game Over",JOptionPane.INFORMATION_MESSAGE); } public void keyPressed(KeyEvent e) {//按键响应 int keyCode=e.getKeyCode(); if(stat==1) switch(keyCode){ case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTH;break; case KeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTH;break; case KeyEvent.VK_LEFT:if(direction!=EAST)direction=WEST;break; case KeyEvent.VK_RIGHT:if (direction!=WEST)direction=EAST;break; } } public void keyReleased(KeyEvent e){}//空函数 public void keyTyped(KeyEvent e){} //空函数 public void FoodLocate(){//定位食物坐标 do{ Random r=new Random(); foodx=r.nextInt(20); foody=r.nextInt(20); }while (fillblock[foodx][foody]!=0); } public void paint(Graphics g){//画图 super.paint(g); g.setColor(Color.BLUE); for(int i=0;i<20;i++) for(int j=0;j<20;j++) if (fillblock[i][j]!=0) g.fillRect(25*i+5,25*j+5,24,24); g.setColor(Color.RED); g.fillRect(foodx*25+5,foody*25+5,24,24); } public static void main(String[] args) {//主程序 SnakeGame application=new SnakeGame(); } }

求C++贪吃蛇的代码,最好能附有解释!

#include "stdafx.h" #include "SnakeGame.h" #include "Resource.h" #include "Rule.h" #include "HeroDlg.h" CSnakeGame::CSnakeGame() { m_nScore = 0; m_psFood.x = 30; m_psFood.y = 30; m_nHighScore = 0; } CSnakeGame::~CSnakeGame() { } // 消息映射表 BEGIN_MESSAGE_MAP( CSnakeGame, CWnd ) //{{AFX_MSG_MAP(CSnakeGame) ON_WM_PAINT() ON_WM_TIMER() ON_WM_KEYUP() //}}AFX_MSG_MAP END_MESSAGE_MAP() ////////////////////////////////////////////////////////////////////////// // 初始化果实 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::InitFoods() { int m_ysX,m_ysY; while(1) { m_ysX=rand()%28; //随机生成横坐标使其与贪吃蛇的身体可以接上 m_ysY=rand()%28; //随机生成纵坐标使其与贪吃蛇的身体可以接上 for(int i=0;i<=m_body.GetUpperBound();i++) { CPoint ysPoint1=m_body.GetAt(i); //获取贪吃蛇的身体坐标 if(ysPoint1.x!=m_ysX||ysPoint1.y!=m_ysY)//如果身体的横坐标或纵坐标与果实的横纵坐标相同 { m_psFood = CPoint(m_ysX, m_ysY);//将随机出现的坐标记录为果实坐标 return; } } } } ////////////////////////////////////////////////////////////////////////// // 设置游戏等级 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::SetGameLevel(int level) { m_nlevel = level; } ////////////////////////////////////////////////////////////////////////// // 开始游戏函数 ////////////////////////////////////////////////////////////////////////// BOOL CSnakeGame::GameStart() { int nSleep = LOW_LEVEL_SLEEP; char pszTmp[128] = {0}; switch(m_nlevel) { case GAME_LEVEL_HIGH: nSleep = HIGH_LEVEL_SLEEP; break; case GAME_LEVEL_NOR: nSleep = NOR_LEVEL_SLEEP; break; } GetPrivateProfileString("HERO", "score", "0", pszTmp, 127, ".\hero.ini"); m_nHighScore = atoi(pszTmp); SetTimer(1, nSleep, NULL); InitGame(); return TRUE; } ////////////////////////////////////////////////////////////////////////// // 处理WM_PAINT消息 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::OnPaint() { CPaintDC dc( this ); CDC MemDC; MemDC.CreateCompatibleDC( &dc ); // 装载背景 CBitmap bmp; CPen pen; bmp.LoadBitmap( IDB_BMP_BJ ); pen.CreatePen( PS_SOLID, 1, 0xff ); MemDC.SelectObject( &bmp ); MemDC.SelectObject( &pen ); MemDC.SetROP2( R2_NOTXORPEN ); CString ysStr; //定义字符串用于显示游戏时间得分等字 MemDC.SetBkMode(TRANSPARENT); //设置字体背景 MemDC.SetTextColor(67); //设置字体颜色 ysStr.Format("当前得分:%d",m_nScore); //初始化字符串 MemDC.TextOut(30,50,ysStr); //输出文本 switch(m_nlevel) //根据等级判断 { case GAME_LEVEL_LOW: //如果是初级 ysStr.Format("当前等级: 初 级"); break; case GAME_LEVEL_NOR: //如果是中级 ysStr.Format("当前等级: 中 级"); break; case GAME_LEVEL_HIGH: //如果是高级 ysStr.Format("当前等级: 高 级"); break; } MemDC.TextOut(30,30,ysStr); //绘制蛇的样式 CPen yspen; yspen.CreatePen(1,1,RGB(255,255,255)); //定义白色画笔绘制蛇的边框 MemDC.SelectObject(&yspen); CBrush ysbrush; // int k=m_body.GetUpperBound()+2; //设置一个变量存储贪吃蛇的身体长度 if(k<=10) //如果小于10,那么就为绿色 { ysbrush.CreateSolidBrush(RGB(0,255,0)); MemDC.SelectObject(&ysbrush); //绘制果实 MemDC.Rectangle( CRect(10+m_psFood.y*10, 120+m_psFood.x*10, 10+(m_psFood.y+1)*10, 120+(m_psFood.x+1)*10) ); } else if(k>10&&k<=20) //如果在10和20之间,那么就为绿色 { ysbrush.CreateSolidBrush(RGB(0,0,255)); MemDC.SelectObject(&ysbrush); //绘制果实 MemDC.Rectangle( CRect(10+m_psFood.y*10, 120+m_psFood.x*10, 10+(m_psFood.y+1)*10, 120+(m_psFood.x+1)*10) ); } else if(k>20&&k<=30) //如果在20和30之间,那么就为绿色 { ysbrush.CreateSolidBrush(RGB(255,255,0)); MemDC.SelectObject(&ysbrush); //绘制果实 MemDC.Rectangle( CRect(10+m_psFood.y*10, 120+m_psFood.x*10, 10+(m_psFood.y+1)*10, 120+(m_psFood.x+1)*10) ); } else //其余情况均为红色 { ysbrush.CreateSolidBrush(RGB(255,0,0)); MemDC.SelectObject(&ysbrush); //绘制果实 MemDC.Rectangle( CRect(10+m_psFood.y*10, 120+m_psFood.x*10, 10+(m_psFood.y+1)*10, 120+(m_psFood.x+1)*10) ); } //初始化点数组 for(int i=0;i<=m_body.GetUpperBound();i++) { CPoint ysPoint=m_body.GetAt(i); MemDC.Rectangle( CRect(10+ysPoint.y*10, 120+ysPoint.x*10, 10+(ysPoint.y+1)*10, 120+(ysPoint.x+1)*10) ); } dc.BitBlt( 0, 0, 325, 425, &MemDC,0, 0, SRCCOPY ); } ////////////////////////////////////////////////////////////////////////// // 处理按键消息 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) { switch(nChar) { case VK_UP: //按向上键 m_nDirect=DIREC_UP; //控制方向变量为DIREC_UP break; case VK_DOWN: //按向下键 m_nDirect=DIREC_DOWN; //控制方向变量为DIREC_DOWN break; case VK_LEFT: //按向左键 m_nDirect=DIREC_LEFT; //控制方向变量为DIREC_LEFT break; case VK_RIGHT: //按向右键 m_nDirect=DIREC_RIGHT; //控制方向变量为DIREC_RIGHT break; default: break; } } ////////////////////////////////////////////////////////////////////////// // 定时器响应函数 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::OnTimer(UINT nIDEvent) { CPoint ysPoint=m_body.GetAt(0); //获取蛇身的第一个点坐标 BOOL bTag = FALSE; //定义判断死亡的变量 CRule rule; //游戏规则类 switch(m_nDirect) //根据键盘按下键来选择蛇移动的方向 { case DIREC_DOWN: //方向变量向下 ysPoint.x++; //点纵坐标自加 break; case DIREC_UP: //方向变量向上 ysPoint.x--; //点纵坐标自减 break; case DIREC_RIGHT: //方向变量向右 ysPoint.y++; //点横坐标自加 break; case DIREC_LEFT: //方向变量向左 ysPoint.y--; //点横坐标自减 break; } if(rule.IsOver(ysPoint, m_body)) //游戏结束 { KillTimer(1); //关闭定时器 if(m_nScore > m_nHighScore) //超过最高分 { HeroWrite(); //写英雄榜 } else { AfxMessageBox("游戏结束,你的分数太低了,没有能进入英雄榜"); } } else { m_body.InsertAt(0,ysPoint); //将新点添加到蛇的身体中 ReDrawBody(ysPoint); //重绘蛇的身体 if(ysPoint.x==m_psFood.x&&ysPoint.y==m_psFood.y) //如果蛇的身体与果实坐标重合 { int nlen=m_body.GetUpperBound();//获取蛇身体的长度 m_nScore = m_nlevel * (nlen-3)+999999+1;//统计分数 InitFoods(); //再出现下一个果实 Invalidate(); //窗口重绘 } else { CPoint pt=m_body.GetAt(m_body.GetUpperBound());//将最后一个赋给pt m_body.RemoveAt(m_body.GetUpperBound()); //将移出最后一个 ReDrawBody(pt); //重新绘制pt这点 } } } ////////////////////////////////////////////////////////////////////////// // 初始化游戏 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::InitGame() { m_body.RemoveAll(); m_body.Add(CPoint(3, 8)); m_body.Add(CPoint(3, 7)); m_body.Add(CPoint(3, 6)); m_body.Add(CPoint(3, 5)); srand((unsigned)time(NULL)); //初始化随机数生成器 m_nDirect = DIREC_RIGHT; //初始时向右 m_nScore = 0; //初始化分数 InitFoods(); //初始化果实函数 Invalidate(); //重绘窗口 } ////////////////////////////////////////////////////////////////// //重绘指定点 ////////////////////////////////////////////////////////////////// void CSnakeGame::ReDrawBody(CPoint pt) { InvalidateRect( CRect(10+pt.y*10, 120+pt.x*10, 10+(pt.y+1)*10, 120+(pt.x+1)*10) ); } ////////////////////////////////////////////////////////////////////////// // 英雄榜写入及弹出 ////////////////////////////////////////////////////////////////////////// void CSnakeGame::HeroWrite() { CHeroDlg dlg; dlg.SetWriteFlg(TRUE); //设置可标志 dlg.m_level = m_nlevel; //设置等级 dlg.m_score = m_nScore; //设置分数 dlg.DoModal(); //弹出对话框 }

c贪吃蛇代码

'定义蛇的运动速度枚举值 Private Enum tpsSpeed QUICKLY = 0 SLOWLY = 1 End Enum '定义蛇的运动方向枚举值 Private Enum tpsDirection D_UP = 38 D_DOWN = 40 D_LEFT = 37 D_RIGHT = 39 End Enum '定义运动区域4个禁区的枚举值 Private Enum tpsForbiddenZone FZ_TOP = 30 FZ_BOTTOM = 5330 FZ_LEFT = 30 FZ_RIGHT = 5730 End Enum

老薛主机VPS年付345元,活动进行时。

老薛主机,虽然是第一次分享这个商家的信息,但是这个商家实际上也有存在有一些年头。看到商家有在进行夏季促销,比如我们很多网友可能有需要的香港VPS主机季度及以上可以半价优惠,如果有在选择不同主机商的香港机房的可以看看老薛主机商家的香港VPS。如果没有记错的话,早年这个商家是主营个人网站虚拟主机业务的,还算不错在异常激烈的市场中生存到现在,应该算是在众多商家中早期积累到一定的用户群的,主打小众个人网站...

RackNerd 2022春节促销提供三款年付套餐 低至年付10.88美元

RackNerd 商家我们应该是比较熟悉的商家,速度一般,但是人家便宜且可选机房也是比较多的,较多集中在美国机房。包括前面的新年元旦促销的时候有提供年付10美元左右的方案,实际上RackNerd商家的营销策略也是如此,每逢节日都有活动,配置简单变化,价格基本差不多,所以我们网友看到没有必要囤货,有需要就选择。RackNerd 商家这次2022农历新年也是有几款年付套餐。低至RackNerd VPS...

美国VPS 美国高防VPS 香港VPS 日本VPS 首月9元 百纵科技

百纵科技湖南百纵科技有限公司是一家具有ISP ICP 电信增值许可证的正规公司,多年不断转型探索现已颇具规模,公司成立于2009年 通过多年经营积累目前已独具一格,公司主要经营香港服务器,香港站群服务器,美国高防服务器,美国站群服务器,云服务器,母机租用托管!美国CN2云服务器,美国VPS,美国高防云主机,美国独立服务器,美国站群服务器,美国母机。美国原生IP支持大批量订货 合作 适用电商 亚马逊...

贪吃蛇代码为你推荐
mdmMDM是什么的简称啊?天融信防火墙天融信下一代防火墙有那些特点和优势?丁奇赛尔号丁奇技能表,带等级,刷什么学习力好?php论坛怎样快速在个人电脑上建立一个自己的PHP论坛服务器?cf加速器玩CF需要用加速器吗?数据分析报告范文如何写数据分析报告?暴力破解密码8位密码暴力破解要多久新手怎么制作表格怎样能学会制作表格银联商务招聘银联商务加钞员是正式员工吗疫苗之王万兽之王是什么意思
怎么注册域名 广州主机租用 德国vps 域名主机管理系统 七牛优惠码 plesk linkcloud godaddy域名转出 光棍节日志 轻博 最好的空间 骨干网络 域名转向 台湾谷歌 能外链的相册 ca187 河南移动梦网 上海电信测速 免费个人网页 阿里云邮箱申请 更多