贪吃蛇代码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
萤光云怎么样?萤光云是一家国人云厂商,总部位于福建福州。其成立于2002年,主打高防云服务器产品,主要提供福州、北京、上海BGP和香港CN2节点。萤光云的高防云服务器自带50G防御,适合高防建站、游戏高防等业务。目前萤光云推出北京云服务器优惠活动,机房为北京BGP机房,购买北京云服务器可享受6.5折优惠+51元代金券(折扣和代金券可叠加使用)。活动期间还支持申请免费试用,需提交工单开通免费试用体验...
在之前的一些文章中有提到HostYun商家的信息,这个商家源头是比较老的,这两年有更换新的品牌域名。在陆续的有新增机房,价格上还是走的低价格路线,所以平时的折扣力度已经是比较低的。在前面我也有介绍到提供九折优惠,这个品牌商家就是走的低价量大为主。中秋节即将到,商家也有推出稍微更低的88折。全场88折优惠码:moon88这里,整理部分HostYun商家的套餐。所有的价格目前都是原价,我们需要用折扣码...
目前舍利云服务器的主要特色是适合seo和建站,性价比方面非常不错,舍利云的产品以BGP线路速度优质稳定而著称,对于产品的线路和带宽有着极其严格的讲究,这主要表现在其对母鸡的超售有严格的管控,与此同时舍利云也尽心尽力为用户提供完美服务。目前,香港cn2云服务器,5M/10M带宽,价格低至30元/月,可试用1天;;美国cera云服务器,原生ip,低至28元/月起。一、香港CN2云服务器香港CN2精品线...
贪吃蛇代码为你推荐
strcatstrcat函数的使用抓包抓包这么那么难吗?不见得!一物一码一袋一码和一物一码有什么区别?溢出隐藏overflow:hidden用在哪里?ruby语言ruby什么意思?什么含义?图片存储手机照片的保存方法?药品标准查询《中华人民名共和国卫生部药品标准》【20080802】?sungard银湖资本的投资建立qq号QQ号码怎么建?petshop(PetShop.IMessaging.IOrder)Assembly.Load(path).CreateInstance(className);
北京服务器租用 域名主机管理系统 如何注册中文域名 vir 国外服务器 sugarsync 网站保姆 火车票抢票攻略 xfce 轻量 嘟牛 anylink 双线主机 网站卫士 域名接入 卡巴斯基试用版 免费phpmysql空间 33456 in域名 攻击服务器 更多