贪吃蛇代码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

NameCheap域名转入优惠再次来袭 搜罗今年到期域名续费

在上个月的时候也有记录到 NameCheap 域名注册商有发布域名转入促销活动的,那时候我也有帮助自己和公司的客户通过域名转入到NC服务商这样可以实现省钱续费的目的。上个月续费转入的时候是选择9月和10月份到期的域名,这不还有几个域名年底到期的,正好看到NameCheap商家再次发布转入优惠,所以打算把剩下的还有几个看看一并转入进来。活动截止到9月20日,如果我们需要转入域名的话可以准备起来。 N...

pigyun25元/月,香港云服务器仅起;韩国云服务器,美国CUVIP

pigyun怎么样?PIGYun成立于2019年,2021是PIGYun为用户提供稳定服务的第三年,期待我们携手共进、互利共赢。PIGYun为您提供:香港CN2线路、韩国CN2线路、美西CUVIP-9929线路优质IaaS服务。月付另有通用循环优惠码:PIGYun,获取8折循环优惠(永久有效)。目前,PIGYun提供的香港cn2云服务器仅29元/月起;韩国cn2云服务器仅22元/月起;美国CUVI...

#推荐# cmivps:全场7折,香港不限流量VPS,支持Windows系统

cmivps香港VPS带来了3个新消息:(1)双向流量改为单向流量,相当于流量间接扩大一倍;(2)Hong Kong 2T、Hong Kong 3T、Hong Kong 无限流量,这三款VPS开始支持Windows系统,如果需要中文版Windows系统请下单付款完成之后发ticket要求官方更改即可;(3)全场7折年付、8折月付优惠,优惠码有效期一个月!官方网站:https://www.cmivp...

贪吃蛇代码为你推荐
移动测速被移动测速拍到超速怎么办科来网络分析系统如何破解电信星空极速?httpsessionhttpsession 和cookie实现的会话跟踪有什么区别微信收款语音播报怎么设置两部手机微信收款语音播报怎么设置备忘录模式Java中常用的设计模式有哪些?请详细说明一下工厂模式。索引超出了数组界限什么是索引超出了数组界限inode智能客户端我的电脑上inode智能客户端连接网络时,提示~服务器没有响应,请确认当前认证网卡已连接到合适的网flowplayer如何编译flowplayer源码ruby语言Ruby语言输入方法法菜霸为什么现在都在说生意难做?
免费动态域名解析 awardspace 2017年万圣节 云服务器比较 免费网络 贵阳电信 qq金券 葫芦机 reboot hosting 傲盾代理 tracert 瓦工技术 ddos攻击软件 国内免备案cdn 国外bt下载网站 vpn服务器架设 8度空间论坛 腾讯qq空间登录首页 魔兽世界网通服务器 更多