社区
J2ME
帖子详情
求贪吃蛇小程序
bianmazi
2007-08-23 06:09:32
谁能给贴出个贪吃蛇的小例子,为了学习学习。呵呵。多谢。
用一个线程的。一个Midlet扩展类就可以了。呵呵。
好着急啊。。。。
...全文
436
10
打赏
收藏
求贪吃蛇小程序
谁能给贴出个贪吃蛇的小例子,为了学习学习。呵呵。多谢。 用一个线程的。一个Midlet扩展类就可以了。呵呵。 好着急啊。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xueyong1203
2007-09-06
打赏
举报
回复
WTK 2.5.1 app目录下就有一个完整的demo, 你先运行下, 然后看代码好了
semsun0
2007-09-04
打赏
举报
回复
WTK2.1的demo里不是也有一个吗~
renjunjie20051758
2007-08-27
打赏
举报
回复
#include <stdlib.h>
#include <graphics.h>
#include <bios.h>
#include <dos.h>
#include <conio.h>
#define Enter 7181
#define ESC 283
#define UP 18432
#define DOWN 20480
#define LEFT 19200
#define RIGHT 19712
void Initgra(void);
void Initsnake(void);
void Initfood(void);
void Snake_Headmv(void);
void Flag(int,int,int,int);
void GameOver(void);
void Snake_Bodymv(void);
void Snake_Bodyadd(void);
void Food(void);
void Dsnkorfd(int,int,int);
void Delay(int);
struct Snake
{int x;int y;int color;}Snk[200];
struct Food
{int x;int y;int color;}Fd;
int flag1=1,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,
checkx,checky,num=2,key=0;
void main()
{ Initgra();
Initsnake();
Initfood();
while(1)
{Snake_Headmv();
GameOver();
if(key==ESC)
break;
if(key==Enter)
{cleardevice();
Initsnake();
Initfood();
key=0;
}
Snake_Bodymv();
Snake_Bodyadd();
Food();
Delay(10);
}
closegraph();
}
void Initgra()
{int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\tc");
}
void Initsnake()
{randomize();
num=2;
Snk[0].x=random(540);
Snk[0].x=Snk[0].x-Snk[0].x%20+50;
Snk[0].y=random(380);
Snk[0].y=Snk[0].y-Snk[0].y%20+50;
Snk[0].color=4;
Snk[1].x=Snk[0].x;
Snk[1].y=Snk[0].y+20;
Snk[1].color=4;
}
void Initfood()
{randomize();
Fd.x=random(580);
Fd.x=Fd.x-Fd.x%20+30;
Fd.y=random(420);
Fd.y=Fd.y-Fd.y%20+30;
Fd.color=random(14)+1;
}
void Snake_Headmv()
{if(bioskey(1))
{key=bioskey(0);
switch(key)
{case UP:Flag(1,0,0,0);break;
case DOWN:Flag(0,1,0,0);break;
case LEFT:Flag(0,0,1,0);break;
case RIGHT:Flag(0,0,0,1);break;
default:break;
}
}
if(flag1)
{checkx=Snk[0].x;
checky=Snk[0].y;
Dsnkorfd(Snk[0].x,Snk[0].y,0);
Snk[0].y-=20;
Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);
}
if(flag2)
{checkx=Snk[0].x;
checky=Snk[0].y;
Dsnkorfd(Snk[0].x,Snk[0].y,0);
Snk[0].y+=20;
Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);
}
if(flag3)
{checkx=Snk[0].x;
checky=Snk[0].y;
Dsnkorfd(Snk[0].x,Snk[0].y,0);
Snk[0].x-=20;
Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);
}
if(flag4)
{checkx=Snk[0].x;
checky=Snk[0].y;
Dsnkorfd(Snk[0].x,Snk[0].y,0);
Snk[0].x+=20;
Dsnkorfd(Snk[0].x,Snk[0].y,Snk[0].color);
}
}
void Flag(int a,int b,int c,int d)
{flag1=a;flag2=b;flag3=c;flag4=d;}
void GameOver()
{int i;
if(Snk[0].x<10||Snk[0].x>630||Snk[0].y<10||Snk[0].y>470)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"Game Over");
key=bioskey(0);
}
else for(i=3;i<num;i++)
{if(Snk[0].x==Snk[i].x&&Snk[0].y==Snk[i].y)
{cleardevice();
setcolor(11);
settextstyle(0,0,4);
outtextxy(160,220,"Game Over");
key=bioskey(0);
}
}
}
void Snake_Bodymv()
{int i,s,t;
for(i=1;i<num;i++)
{Dsnkorfd(checkx,checky,Snk[i].color);
Dsnkorfd(Snk[i].x,Snk[i].y,0);
s=Snk[i].x;
t=Snk[i].y;
Snk[i].x=checkx;
Snk[i].y=checky;
checkx=s;
checky=t;
}
}
void Food()
{if(flag5)
{randomize();
Fd.x=random(580);
Fd.x=Fd.x-Fd.x%20+30;
Fd.y=random(420);
Fd.y=Fd.y-Fd.y%20+30;
Fd.color=random(14)+1;
flag5=0;
}
Dsnkorfd(Fd.x,Fd.y,Fd.color);
}
void Snake_Bodyadd()
{if(Snk[0].x==Fd.x&&Snk[0].y==Fd.y)
{if(Snk[num-1].x>Snk[num-2].x)
{num++;
Snk[num-1].x=Snk[num-2].x+20;
Snk[num-1].y=Snk[num-2].y;
Snk[num-1].color=Fd.color;
}
else
if(Snk[num-1].x<Snk[num-2].x)
{num++;
Snk[num-1].x=Snk[num-2].x-20;
Snk[num-1].y=Snk[num-2].y;
Snk[num-1].color=Fd.color;
}
else
if(Snk[num-1].y>Snk[num-2].y)
{num++;
Snk[num-1].x=Snk[num-2].x;
Snk[num-1].y=Snk[num-2].y+20;
Snk[num-1].color=Fd.color;
}
else
if(Snk[num-1].y<Snk[num-2].y)
{num++;
Snk[num-1].x=Snk[num-2].x;
Snk[num-1].y=Snk[num-2].y-20;
Snk[num-1].color=Fd.color;
}
flag5=1;
}
}
void Dsnkorfd(int x,int y,int color)
{setcolor(color);
setfillstyle(1,color);
circle(x,y,10);
floodfill(x,y,color);
}
void Delay(int times)
{int i;
for(i=1;i<=times;i++)
delay(15000);
}
wormwormwormworm
2007-08-25
打赏
举报
回复
有利息的啊
bianmazi
2007-08-25
打赏
举报
回复
我的邮箱:wanglu0923@yahoo.com.cn
Thanks!
ls的人是什么意思?分数?不明白你的意思。。。解释下
网络咖啡
2007-08-25
打赏
举报
回复
package snake;
import java.util.*;
import javax.microedition.lcdui.*;
/**
* 贪吃蛇游戏
*/
public class SnakeCanvas extends Canvas implements Runnable {
/** 存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标 */
int[][] snake = new int[200][2];
/** 已经使用的节点数量 */
int snakeNum;
/** 贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右 */
int direction;
/* 移动方向 */
/** 向上 */
private final int DIRECTION_UP = 0;
/** 向下 */
private final int DIRECTION_DOWN = 1;
/** 向左 */
private final int DIRECTION_LEFT = 2;
/** 向右 */
private final int DIRECTION_RIGHT = 3;
/** 游戏区域宽度 */
int width;
/** 游戏区域高度 */
int height;
/** 蛇身单元宽度 */
private final byte SNAKEWIDTH = 4;
/** 是否处于暂停状态,true代表暂停 */
boolean isPaused = false;
/** 是否处于运行状态,true代表运行 */
boolean isRun = true;
/** 时间间隔 */
private final int SLEEP_TIME = 300;
/** 食物的X坐标 */
int foodX;
/** 食物的Y坐标 */
int foodY;
/** 食物的闪烁控制 */
boolean b = true;
/** Random对象 */
Random random = new Random();
public SnakeCanvas() {
// 初始化
init();
width = this.getWidth();
height = this.getHeight();
// 启动线程
new Thread(this).start();
}
/**
* 初始化开始数据
*/
private void init() {
// 初始化节点数量
snakeNum = 7;
// 初始化节点数据
for (int i = 0; i < snakeNum; i++) {
snake[i][0] = 100 - SNAKEWIDTH * i;
snake[i][1] = 40;
}
// 初始化移动方向
direction = DIRECTION_RIGHT;
// 初始化食物坐标
foodX = 100;
foodY = 100;
}
protected void paint(Graphics g) {
// 清屏
g.setColor(0xffffff);
g.fillRect(0, 0, width, height);
g.setColor(0);
// 绘制蛇身
for (int i = 0; i < snakeNum; i++) {
g.fillRect(snake[i][0], snake[i][1], SNAKEWIDTH, SNAKEWIDTH);
}
// 绘制食物
if (b) {
g.fillRect(foodX, foodY, SNAKEWIDTH, SNAKEWIDTH);
}
}
private void move(int direction) {
// 蛇身移动
for (int i = snakeNum; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1];
}
// 第一个单元格移动
switch (direction) {
case DIRECTION_UP:
snake[0][1] = snake[0][1] - SNAKEWIDTH;
break;
case DIRECTION_DOWN:
snake[0][1] = snake[0][1] + SNAKEWIDTH;
break;
case DIRECTION_LEFT:
snake[0][0] = snake[0][0] - SNAKEWIDTH;
break;
case DIRECTION_RIGHT:
snake[0][0] = snake[0][0] + SNAKEWIDTH;
break;
}
}
/**
* 吃掉食物,自身增长
*/
private void eatFood() {
// 判别蛇头是否和食物重叠
if (snake[0][0] == foodX && snake[0][1] == foodY) {
snakeNum++;
generateFood();
}
}
/**
* 产生食物 说明:食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
private void generateFood() {
while (true) {
foodX = Math.abs(random.nextInt() % (width - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
foodY = Math.abs(random.nextInt() % (height - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
boolean b = true;
for (int i = 0; i < snakeNum; i++) {
if (foodX == snake[i][0] && snake[i][1] == foodY) {
b = false;
break;
}
}
if (b) {
break;
}
}
}
/**
* 判断游戏是否结束 结束条件: 1、蛇头超出边界 2、蛇头碰到自身
*/
private boolean isGameOver() {
// 边界判别
if (snake[0][0] < 0 || snake[0][0] > (width - SNAKEWIDTH)
|| snake[0][1] < 0 || snake[0][1] > (height - SNAKEWIDTH)) {
return true;
}
// 碰到自身
for (int i = 4; i < snakeNum; i++) {
if (snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]) {
return true;
}
}
return false;
}
/**
* 事件处理
*/
public void keyPressed(int keyCode) {
int action = this.getGameAction(keyCode);
// 改变方向
switch (action) {
case UP:
if (direction != DIRECTION_DOWN) {
direction = DIRECTION_UP;
}
break;
case DOWN:
if (direction != DIRECTION_UP) {
direction = DIRECTION_DOWN;
}
break;
case LEFT:
if (direction != DIRECTION_RIGHT) {
direction = DIRECTION_LEFT;
}
break;
case RIGHT:
if (direction != DIRECTION_LEFT) {
direction = DIRECTION_RIGHT;
}
break;
case FIRE:
// 暂停和继续
isPaused = !isPaused;
break;
}
}
/**
* 线程方法 使用精确延时
*/
public void run() {
try {
while (isRun) {
// 开始时间
long start = System.currentTimeMillis();
if (!isPaused) {
// 吃食物
eatFood();
// 移动
move(direction);
// 结束游戏
if (isGameOver()) {
break;
}
// 控制闪烁
b = !b;
}
// 重新绘制
repaint();
long end = System.currentTimeMillis();
// 延时
if (end - start < SLEEP_TIME) {
Thread.sleep(SLEEP_TIME - (end - start));
}
}
} catch (Exception e) {
}
}
}
skyinfo
2007-08-25
打赏
举报
回复
給我也發一個吧,謝謝!
skyinfo@gmail.com
yanhan0615
2007-08-24
打赏
举报
回复
我靠,楼主的分咋涨的这么快??
古月一刀2005
2007-08-23
打赏
举报
回复
hubing20082008@163.com谢谢了
sylar
2007-08-23
打赏
举报
回复
给你邮箱我 我发给你
贪吃蛇
小程序
源码
贪吃蛇
微信
小程序
源码,简单实用,下载后可直接部署使用!
C语言OpenGL
贪吃蛇
小程序
C语言OpenGL
贪吃蛇
小程序
这是个工程文件, 解压即可编译运行 方便学习opengl 注释颇多, 值得一看
vc
贪吃蛇
小程序
贪吃蛇
小程序
,又添加了背景音乐和开始暂停功能,按空格键暂停,w a s d 键分别控制蛇的上下左右行走, 程序还有部分bug。
C语言
贪吃蛇
小程序
代码
一个C语言写的
贪吃蛇
代码 不是EXE程序 使用时需要自己生成程序运行
贪吃蛇
小程序
winform、C#|
贪吃蛇
贪吃蛇
小程序
贪吃蛇
小程序
贪吃蛇
小程序
很简单的
贪吃蛇
利用排序的方法,使蛇移动。
J2ME
13,100
社区成员
26,495
社区内容
发帖
与我相关
我的任务
J2ME
Java J2ME
复制链接
扫一扫
分享
社区描述
Java J2ME
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章