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

HTTPS加密协议端口默认是多少且是否支持更换端口访问

看到群里网友们在讨论由于不清楚的原因,有同学的网站无法访问。他的网站是没有用HTTPS的,直接访问他的HTTP是无法访问的,通过PING测试可以看到解析地址已经比较乱,应该是所谓的DNS污染。其中有网友提到采用HTTPS加密证书试试。因为HTTP和HTTPS走的不是一个端口,之前有网友这样测试过是可以缓解这样的问题。这样通过将网站绑定设置HTTPS之后,是可以打开的,看来网站的80端口出现问题,而...

华纳云不限流量¥324/年,香港双向CN2(GIA)云服务器/1核1G/50G存储/2Mbps

华纳云(HNCloud Limited)是一家专业的全球数据中心基础服务提供商,总部在香港,隶属于香港联合通讯国际有限公司,拥有香港政府颁发的商业登记证明,保证用户的安全性和合规性。 华纳云是APNIC 和 ARIN 会员单位。主要提供香港和美国机房的VPS云服务器和独立服务器。商家支持支付宝、网银、Paypal付款。华纳云主要面向国内用户群,所以线路质量还是不错的,客户使用体验总体反响还是比较好...

knownhost西雅图/亚特兰大/阿姆斯特丹$5/月,2个IP1G内存/1核/20gSSD/1T流量

美国知名管理型主机公司,2006年运作至今,虚拟主机、VPS、云服务器、独立服务器等业务全部采用“managed”,也就是人工参与度高,很多事情都可以人工帮你处理,不过一直以来价格也贵。也不知道knownhost什么时候开始运作无管理型业务的,估计是为了扩展市场吧,反正是出来较长时间了。闲来无事,那就给大家介绍下“unmanaged VPS”,也就是无管理型VPS,低至5美元/月,基于KVM虚拟,...

贪吃蛇代码为你推荐
0x800700050x80070005是怎么回事?bindservice如何启动和停止用servicearc是什么意思数学中的arctan是什么意思inode智能客户端win7如何使用校园网iNode智能客户端smartupload为什么使用smartupload执行上传保存操作时用这句smart.save("upload")失败用smart.save("/upload")成功弹幕网站求弹幕网邀请码!数据分析报告范文800字统计分析报告什么是SOA什么是cookies 有什么作用12306注册12306网站账户注册菜霸保险是传销吗?
紧急升级请记住新域名 域名管理 域名交易网 greengeeks directspace godaddy优惠码 国内加速器 国内php空间 嘟牛 777te 100m免费空间 智能骨干网 韩国名字大全 美国免费空间 空间技术网 免费cdn 支持外链的相册 1元域名 上海电信测速网站 外贸空间 更多