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

老周互联24小时无理由退款,香港原生IP,28元起

老周互联怎么样?老周互联隶属于老周网络科技部旗下,创立于2019年12月份,是一家具有代表性的国人商家。目前主营的产品有云服务器,裸金属服务器。创办一年多以来,我们一直坚持以口碑至上,服务宗旨为理念,为用户提供7*24小时的轮班服务,目前已有上千多家中小型站长选择我们!服务宗旨:老周互联提供7*24小时轮流值班客服,用户24小时内咨询问题可提交工单,我们会在30分钟内为您快速解答!另免费部署服务器...

易探云:香港物理机服务器仅550元/月起;E3-1230/16G DDR3/SATA 1TB/香港BGP/20Mbps

易探云怎么样?易探云(yitanyun.com)是一家知名云计算品牌,2017年成立,从业4年之久,目前主要从事出售香港VPS、香港独立服务器、香港站群服务器等,在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。目前,易探云推出免备案香港物理机服务器性价比很高,E3-1230 8 核*1/16G DDR3/SATA 1TB/香港BGP线路/20Mbps/不限流量,仅...

零途云月付31.9元起,香港cn2 gia线路

零途云是一家香港公司,主要产品香港cn2 gia线路、美国Cera线路云主机,美国CERA高防服务器,日本CN2直连服务器;同时提供香港多ip站群云服务器。即日起,购买香港/美国/日本云服务器享受9折优惠,新用户有优惠码:LINGTUYUN,使用即可打折。目前,零途云还推出性价比非常高香港多ip站群云服务器,有需要的,可以关注一下。零途云优惠码:优惠码:LINGTUYUN (新用户优惠,享受9折优...

贪吃蛇代码为你推荐
显卡挖矿啥意思显卡怎么分辨是不是矿卡?挖矿卡又是什么意思?httpsessionhttpsession中的SessionID是如何生成的?md5值文件名后缀为MD5是什么文件。bindserviceservice在手机程序中起什么作用数秦科技天津数沃科技公司怎么样?待遇和发展如何?有人知道么?问卷星登陆问卷星的使用步骤booth算法用Booth算法计算-4×3的4位补码乘法运算,要求写出每一步运算过程及运算结果 麻烦详细说明每一步的操作jsindexofjavascript 中indexof 的用法数据分析报告范文如何写数据分析报告?银联商务招聘急问银联商务的客服待遇如何啊?
美国虚拟主机购买 中文域名注册 太原域名注册 泛域名解析 淘宝抢红包攻略 arvixe 百度云100as cpanel 香港cdn 搜狗12306抢票助手 52测评网 世界测速 傲盾官网 ftp免费空间 中国电信宽带测速器 新世界服务器 网站在线扫描 域名dns 申请网站 河南移动梦网 更多