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

CloudCone闪购优惠洛杉矶MC机房VPS月$1.99 便宜可随意删除重开

CloudCone商家我们很多喜欢低价便宜VPS主机的肯定是熟悉的,个人不是特别喜欢他。因为我之前测试过几次,开通的机器IP都是不通的,需要删除且开通好几次才能得到一个可用的IP地址。当然他们家的优势也是有的,就是价格确实便宜,而且还支持删除重新开通,而且机房只有一个洛杉矶MC。实话,如果他们家能多几个机房,保持现在的特点,还是有很多市场的。CloudCone是来自美国的主机销售商,成立于2017...

gcorelabs:美国GPU服务器,8张RTX2080Ti,2*Silver-4214/256G内存/1T SSD/

gcorelabs提供美国阿什本数据中心的GPU服务器(显卡服务器),默认给8路RTX2080Ti,服务器网卡支持2*10Gbps(ANX),CPU为双路Silver-4214(24核48线程),256G内存,1Gbps独享带宽仅需150欧元、10bps带宽仅需600欧元,不限流量随便跑吧。 官方网站 :https://gcorelabs.com/hosting/dedicated/gpu/ ...

RAKsmartCloud服务器,可自定义配置月$7.59

RAKsmart商家一直以来在独立服务器、站群服务器和G口和10G口大端口流量服务器上下功夫比较大,但是在VPS主机业务上仅仅是顺带,尤其是我们看到大部分主流商家都做云服务器,而RAKsmart商家终于开始做云服务器,这次试探性的新增美国硅谷机房一个方案。月付7.59美元起,支持自定义配置,KVM虚拟化,美国硅谷机房,VPC网络/经典网络,大陆优化/精品网线路,支持Linux或者Windows操作...

贪吃蛇代码为你推荐
sdf关于sdf的问题:请问这个是什么啊,怎么弄好啊?scanf_sscanf_s和以前的scanf是一样等级的吗???微信收款语音播报怎么设置怎么设置农商银行的收钱语音播报?adversary英语match,是什么意思.?查字网騳骉,怎样读?拼音电子日历墙上挂的电子日历不显示怎么维修拓扑关系简述空间数据的拓扑关系及其对GIS数据处理和空间分析有何重要意义?天融信防火墙天融信下一代防火墙有那些特点和优势?radius认证PPPoE有认证的功能,RADIUS也有验证功能,两者有区别么??问卷星登陆请问问卷星怎么设置答题时间?
网站空间申请 虚拟主机mysql 根域名服务器 php空间租用 budgetvm winhost 网站保姆 国外网站代理服务器 元旦促销 美国网站服务器 如何注册阿里云邮箱 环聊 免费的域名 中国linux photobucket 万网空间 华为k3 lamp架构 双线空间 ledlamp 更多