FLASH游戏之贪吃蛇游戏源代码

合集下载

贪吃蛇源代码

贪吃蛇源代码

//本程序用于初学者间的学习和交流,程序粗糙简陋在刷新重画时总出现白条画面,希望大家能提出宝贵意见。

QQ:609429837import java.awt.Color;import java.awt.Graphics;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import javax.swing.ButtonGroup;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JRadioButton;public class myTcs extends JFrame implements ActionListener, KeyListener,Runnable {// private Graphics g;// private JPanel jp;File file = new File("分数.txt");ArrayList<String> re = null;// 用于存储得分String fenshu = null;// 用于显示得分private JMenuBar menuBar;private JMenu youXiMenu, nanDuMenu, fenShuMenu, guanYuMenu;private JMenuItem kaiShiYouXi, exitItem, zuoZheItem, fenShuItem,maxfenShuItem;private JRadioButton cJianDan, cPuTong, cKunNan;private ButtonGroup bg = new ButtonGroup();private int m[] = new int[60];private int n[] = new int[60];private Thread she = null;private int life = 3;// 生命数量private int length = 6;// 蛇的长度private static int foods = 0;// 本局吃了多少苹果private boolean isApple = false;// 蛇要吃的苹果private static int maxfenshu = 0;// 本局等分private int x = 230;private int y = 200;private int time = 500;// 用于设置难易程度private String direction = "right";// 蛇运动的方向// 构造方法public myTcs() {// 实例化组件// jp=new JPanel();menuBar = new JMenuBar();youXiMenu = new JMenu("游戏");nanDuMenu = new JMenu("难度");fenShuMenu = new JMenu("分数");guanYuMenu = new JMenu("关于");kaiShiYouXi = new JMenuItem("开始");exitItem = new JMenuItem("退出");cJianDan = new JRadioButton("简单");cPuTong = new JRadioButton("普通");cKunNan = new JRadioButton("困难");zuoZheItem = new JMenuItem("作者");fenShuItem = new JMenuItem("上局得分");maxfenShuItem = new JMenuItem("最高得分");// 添加组件menuBar.add(youXiMenu);menuBar.add(nanDuMenu);menuBar.add(fenShuMenu);menuBar.add(guanYuMenu);youXiMenu.add(kaiShiYouXi);youXiMenu.add(exitItem);bg.add(cJianDan);bg.add(cPuTong);bg.add(cKunNan);nanDuMenu.add(cJianDan);nanDuMenu.add(cPuTong);nanDuMenu.add(cKunNan);fenShuMenu.add(fenShuItem);fenShuMenu.add(maxfenShuItem);guanYuMenu.add(zuoZheItem);// 添加监听kaiShiYouXi.addActionListener(this);exitItem.addActionListener(this);cJianDan.addActionListener(this);cPuTong.addActionListener(this);cKunNan.addActionListener(this);fenShuItem.addActionListener(this);maxfenShuItem.addActionListener(this);zuoZheItem.addActionListener(this);addKeyListener(this);// 设置窗体this.setJMenuBar(menuBar);this.setVisible(true);this.setSize(400, 400);this.setLocation(100, 100);this.setTitle("贪吃蛇");this.setResizable(false);this.validate();this.setDefaultCloseOperation(EXIT_ON_CLOSE);}public static void main(String aa[]) {new myTcs();}@Overridepublic void actionPerformed(ActionEvent e) {if ("开始".equals(e.getActionCommand())) {this.isApple = true;life = 3;if (she == null) {// System.out.println(x + " " + y);she = new Thread(this);she.start();} else if (she != null) {she = null;she = new Thread(this);she.start();}}if ("退出".equals(e.getActionCommand())) {System.exit(0);}if ("简单".equals(e.getActionCommand())) {time = 1000;}if ("普通".equals(e.getActionCommand())) {time = 500;}if ("困难".equals(e.getActionCommand())) {time = 200;}if ("上局得分".equals(e.getActionCommand())) {this.defen();JOptionPane.showMessageDialog(this, fenshu);}if ("最高得分".equals(e.getActionCommand())) {this.defen();JOptionPane.showMessageDialog(this, maxfenshu);}if ("作者".equals(e.getActionCommand())) {JOptionPane.showMessageDialog(this, "制作:飞" + "\r\n"+ "QQ: 609429837" + "\n");}this.repaint();// 重画}// 绘图public void paint(Graphics g) {super.paint(g);// g.setColor(Color.DARK_GRAY); // 设置背景g.fillRect(0, 50, 400, 400);g.setColor(Color.BLUE);for (int i = 0; i <= length - 1; i++) {g.fillRect(m[i], n[i], 10, 10);}if (isApple == true) {g.setColor(Color.RED);g.fillRect(x, y, 10, 10);}}@Overridepublic void run() {for (int i = 0; i <= length - 1; i++) {m[i] = 50 - i * 10;n[i] = 60;}while (she != null) {check();try {Thread.sleep(time);} catch (Exception ee) {System.out.println(direction);}}}// 判断运动方向并设置活动范围public synchronized void check() {if (she != null) {for (int i = length - 1; i >= 1; i--) {m[i] = m[i - 1];n[i] = n[i - 1];}if (direction.equals("up")) {n[0] = n[0] - 10;if (n[0] == (y - 10) && m[0] >= x & m[0] <= (x + 10)) {this.foods++;this.length++;this.apple();if (foods == 50 || life == 0) {this.isApple = false;}}}if (direction.equals("down")) {n[0] = n[0] + 10;if (n[0] == (y + 10) && m[0] >= x & m[0] <= (x + 10)) { this.foods++;this.length++;this.apple();if (foods == 50 || life == 0) {this.isApple = false;}}}if (direction.equals("left")) {m[0] = m[0] - 10;if (m[0] == (x + 10) && n[0] >= y && n[0] <= (y + 10)) { this.foods++;this.length++;this.apple();if (foods == 50 || life == 0) {this.isApple = false;}}}if (direction.equals("right")) {m[0] = m[0] + 10;if (m[0] == (x) && n[0] >= y && n[0] <= (y + 10)) {this.foods++;this.length++;this.apple();if (foods == 50 || life == 0) {this.isApple = false;}}}if (m[0] <= -5 || m[0] >= 395 || n[0] <= 45 || n[0] >= 395) { --life;she = null;if (life <= 0) {this.save();} else {if (she == null) {// System.out.println(x + " " + y);she = new Thread(this);this.length = 6;this.direction = "right";she.start();} else if (she != null) {she = null;she = new Thread(this);this.length = 6;this.direction = "right";she.start();}}}}this.repaint();// 重画}// 产生苹果并实现蛇吃苹果public void apple() {x = (int) Math.floor(Math.random() * 39) * 10;y = (int) Math.floor(Math.random() * 29) * 10 + 50; }@Overridepublic void keyTyped(KeyEvent e) {}@Overridepublic void keyPressed(KeyEvent e) {if (e.getKeyCode() == KeyEvent.VK_UP) {if (!direction.equals("down")) {direction = "up";check();}}if (e.getKeyCode() == KeyEvent.VK_DOWN) {if (!direction.equals("up")) {direction = "down";check();}}if (e.getKeyCode() == KeyEvent.VK_LEFT) {if (!direction.equals("right")) {direction = "left";check();}}if (e.getKeyCode() == KeyEvent.VK_RIGHT) {if (!direction.equals("left")) {direction = "right";check();}}}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}public void save() {boolean append = false;if (file.exists()) {append = true;}FileWriter fc = null;BufferedWriter bf = null;try {fc = new FileWriter("分数.txt", append);bf = new BufferedWriter(fc);bf.append(Integer.toString(foods * 10) + "\r\n");} catch (IOException e) {e.toString();}try {bf.flush();bf.close();fc.close();} catch (IOException e) {e.toString();}}public void defen() {re = new ArrayList<String>();FileReader fr = null;BufferedReader bfr = null;if (file.exists()) {try {fr = new FileReader(file);bfr = new BufferedReader(fr);fenshu = bfr.readLine();re.add(fenshu);while (fenshu != null) {fenshu = bfr.readLine();re.add(fenshu);}if (re.size() >= 2) {fenshu = re.get(re.size() - 2);} else {fenshu = "无记录";}} catch (IOException e) {e.toString();}maxfenshu = Integer.valueOf(re.get(0));for (int i = 0; i < re.size() - 1; i++) {if (maxfenshu < Integer.valueOf(re.get(i))) {maxfenshu = Integer.valueOf(re.get(i));System.out.println(i);}}} else {fenshu = "无记录";}}}。

FLASH游戏之贪吃蛇游戏源代码

FLASH游戏之贪吃蛇游戏源代码

} } } function timestart(){ clearInterval(Interval); Interval=setInterval(walk,time[speed],x1,y1); }
clear(); score=0; x = startlong-1; y = 0; x1 = 1; y1 = 0; map = new Array(); for (i=0; i<20; i++) {
map[i] = new Array(20); } snake = new Array(); x = artlong-1; y = 0; for (var long = 0; long<startlong; long++) {
body(long, 0); } egg(); game="start";
运行结果如图:
gotoAndStop("over"); } else {
snake.push(snake[0]);
snake.shift(0); snake[long-1]._x = x*8; snake[long-1]._y = y*8; map[x][y] = 1; walks.start(); } } } function egg() { var x2, y2; x2 = random(20); y2 = random(20); while (map[x2][y2] == 1) { x2 = random(20); y2 = random(20); } map[x2][y2] = 2; egg2._x = x2*8; egg2._y = y2*8; } function body(x3, y3) { window.attachMovie(snakebody, "snake"+long,long); temp=eval("window.snake"+long); temp._x=x3*8; temp._y=y3*8; snake.push(temp); map[x3][y3] = 1; } function enter(){ if(game=="stop"){ stopallsound() gotoandplay("start"); }else if(game=="pause"){ game="start"; gotoandplay("play"); }else if(game=="start"){ game="pause"; gotoandplay("pause") } } function clear(){ if (long>startlong) { for (i=0; i<=long; i++) { snake[i].removeMovieClip();

贪吃蛇小游戏源代码

贪吃蛇小游戏源代码
return 1;
}
tail=(tail+1)%80;
qipan[zuobiao[0][head]][zuobiao[1][head]]='*';
head=(head+1)%80;
zuobiao[0][head]=x;
zuobiao[1][head]=y;
qipan[zuobiao[0][head]][zuobiao[1][head]]='#';
/*处理棋盘*/
char qipan[20][80];//定义棋盘
for(i=0;i<20;i++)
for(j=0;j<80;j++)
qipan[i][j]=' ';//初始化棋盘
for(i=0;i<80;i++)
qipan[0][i]='_';
for(i=0;i<20;i++)
qipan[i][0]='|';
printf("Input your game speed,please.(e.g.300)\n");
scanf("%d",&gamespeed);
while(direction!='q')
{
system("cls");
for(i=0;i<20;i++)//打印出棋盘
for(j=0;j<80;j++)
direction='q';
system("cls");
printf("GAME OVER!\n");

贪吃蛇游戏安卓源代码

贪吃蛇游戏安卓源代码

附录1.SnakeView类package com.example.android_snake.view;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.Timer;import java.util.TimerTask;import com.example.android_snake.R;import com.example.android_snake.food.Food;import com.example.android_snake.snake.Body;import com.example.android_snake.snake.Head;import com.example.android_snake.snake.Snake;import com.example.android_snake.snake.SnakeDirection; import com.example.android_snake.stone.Stone;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.os.Handler;import android.util.DisplayMetrics;import android.view.Display;import android.view.MotionEvent;import android.view.View;import android.view.ViewManager;import android.view.WindowManager;import android.widget.Toast;public class SnakeView extends View {private Context context;private Bitmap headBitmap;private Bitmap bodyBitmap;private Bitmap foodBitmap;private Bitmap stoneBitmap;// 屏幕的高度和宽度private int screenHeight;private int screenWidth;// 每个小格子的高度和宽度private int eachHeight;private int eachWidth;private Snake snake;private Food food;private Stone stone;private int [] listx;private int [] listy;private Timer timer = new Timer();Handler handler = new Handler() {public void handleMessage(android.os.Message msg) {moveSnake();invalidate();}};public SnakeView(Context context) {super(context);this.context = context;listx =new int[100];listy =new int[100];// 获得屏幕的高和宽DisplayMetrics metrics = new DisplayMetrics();WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);windowManager.getDefaultDisplay().getMetrics(metrics);screenHeight = metrics.heightPixels;screenWidth = metrics.widthPixels;eachHeight = screenHeight / 32;eachWidth = screenWidth / 20;// 初始化图片headBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.head);bodyBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.body);foodBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.food);stoneBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.stone);this.initSnake();this.initFood();this.initstone();gameRun();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Paint paint = new Paint();// 定义画笔paint.setColor(Color.GRAY);// 设置画笔颜色paint.setAntiAlias(true);// 去除锯齿paint.setStyle(Style.STROKE);// 设置空心实心paint.setTextSize(40);drawLines(canvas, paint);drawStone(canvas, paint);if(isCollide()){canvas.drawText("Game Over!", screenWidth/4, screenHeight/3, paint);canvas.drawText("得分", screenWidth/4, screenHeight/2, paint);timer.cancel();}else{this.drawSnake(canvas, paint);}boolean flag = IsRectCollision(snake.getHead().getPointX(), snake.getHead().getPointY(), eachWidth, eachHeight,food.getPointX(), food.getPointY(), eachWidth, eachHeight);if (flag) {food = null;snake.getBodyList().add(new Body());this.initFood();this.initstone();} else {this.drawFood(canvas, paint);this.drawStone(canvas, paint);}}//方向控制@Overridepublic boolean onTouchEvent(MotionEvent event) {int x = (int) event.getX();int y = (int) event.getY();SnakeDirection nowDir = snake.getSnakeDirection();int m = -screenHeight * x + screenHeight * screenWidth - screenWidth * y;int n = screenHeight * x - screenWidth * y;if ((m > 0 && n > 0) && (nowDir != SnakeDirection.DOWN)) {snake.setSnakeDirection(SnakeDirection.UP);} else if ((m > 0 && n < 0) && (nowDir != SnakeDirection.RIGHT)) { snake.setSnakeDirection(SnakeDirection.LEFT);} else if ((m < 0 && n > 0) && (nowDir != SnakeDirection.LEFT)) { snake.setSnakeDirection(SnakeDirection.RIGHT);} else if ((m < 0 && n < 0) && (nowDir != SnakeDirection.UP)) { snake.setSnakeDirection(SnakeDirection.DOWN);}return super.onTouchEvent(event);}public void gameRun() {timer.scheduleAtFixedRate(new TimerTask() {public void run() {handler.obtainMessage().sendToTarget();}}, 100, 400);}/** 画网格线*/public void drawLines(Canvas canvas, Paint paint) {int startX = 0, startY = 0;for (int i = 0; i < 100; i++) {canvas.drawLine(0, startY, screenWidth, startY, paint);startY = startY + eachHeight;}for (int i = 0; i < 100; i++) {canvas.drawLine(startX, 0, startX, screenHeight, paint);startX = startX + eachWidth;}canvas.drawLine(0, 0, screenWidth, screenHeight, paint);canvas.drawLine(0, screenHeight, screenWidth, 0, paint);}// 初始化蛇public void initSnake() {List<Body> bodies = new ArrayList<Body>();Head head = new Head(eachWidth * 4, eachHeight * 2, headBitmap);Body body1 = new Body(eachWidth * 3, eachHeight * 2, bodyBitmap);Body body2 = new Body(eachWidth * 2, eachHeight * 2, bodyBitmap);Body body3 = new Body(eachWidth * 1, eachHeight * 2, bodyBitmap);Body body4 = new Body(eachWidth * 0, eachHeight * 2, bodyBitmap);bodies.add(body1);bodies.add(body2);bodies.add(body3);bodies.add(body4);snake = new Snake(head, bodies, SnakeDirection.RIGHT);}// 画蛇public void drawSnake(Canvas canvas, Paint paint) {canvas.drawBitmap(headBitmap, snake.getHead().getPointX(), snake .getHead().getPointY(), paint);for (int i = 0; i < snake.getBodyList().size(); i++) {canvas.drawBitmap(bodyBitmap, snake.getBodyList().get(i).getPointX(), snake.getBodyList().get(i).getPointY(), paint);}}// 改变蛇身的位置public void changSnakePosition(int pointX, int pointY) {for (int i = snake.getBodyList().size() - 1; i > 0; i--) {snake.getBodyList().get(i).setPointX(snake.getBodyList().get(i - 1).getPointX());snake.getBodyList().get(i).setPointY(snake.getBodyList().get(i - 1).getPointY());}snake.getBodyList().get(0).setPointX(snake.getHead().getPointX());snake.getBodyList().get(0).setPointY(snake.getHead().getPointY());}// 移动蛇public void moveSnake() {int nowPointX = snake.getHead().getPointX();int nowPointY = snake.getHead().getPointY();if (snake.getSnakeDirection() == SnakeDirection.RIGHT) {changSnakePosition(nowPointX, nowPointY);if (nowPointX >= screenWidth - eachWidth) {snake.getHead().setPointX(0);} else {snake.getHead().setPointX(nowPointX + eachWidth);}} else if (snake.getSnakeDirection() == SnakeDirection.DOWN) { changSnakePosition(nowPointX, nowPointY);if (nowPointY >= screenHeight - eachHeight) {snake.getHead().setPointY(0);} else {snake.getHead().setPointY(nowPointY + eachHeight);}} else if (snake.getSnakeDirection() == SnakeDirection.LEFT) {changSnakePosition(nowPointX, nowPointY);if (nowPointX <= 0) {snake.getHead().setPointX(screenWidth - eachWidth);} else {snake.getHead().setPointX(nowPointX - eachWidth);}} else if (snake.getSnakeDirection() == SnakeDirection.UP) {changSnakePosition(nowPointX, nowPointY);if (nowPointY <= 0) {snake.getHead().setPointY(screenHeight - eachHeight);} else {snake.getHead().setPointY(nowPointY - eachHeight);}}}// 初始化foodpublic void initFood() {int x = new Random().nextInt(19);int y = new Random().nextInt(29);food = new Food(eachWidth * x, eachHeight * y, foodBitmap);}// 在界面上画出Foodpublic void drawFood(Canvas canvas, Paint paint) {if (food != null) {canvas.drawBitmap(foodBitmap, food.getPointX(), food.getPointY(),paint);}}// 初始化stonepublic void initstone() {int x = new Random().nextInt(17);int y = new Random().nextInt(23);stone = new Stone(eachWidth * x, eachHeight * y, stoneBitmap);int i=0,j=0;listx[i++]=x;listy[j++]=y;}// 在界面上画出Stonepublic void drawStone(Canvas canvas, Paint paint) {if (true) {canvas.drawBitmap(stoneBitmap, stone.getPointX(), stone.getPointY(),paint);for(int k=0;k<100;k++){//food = new Food(eachWidth * listx[k], eachHeight * listy[k], foodBitmap);//canvas.drawBitmap(stoneBitmap,listx[k], listy[k],paint);}}}/*** 矩形碰撞检测参数为x,y,width,height** @param x1* 第一个矩形的x* @param y1* 第一个矩形的y* @param w1* 第一个矩形的w* @param h1* 第一个矩形的h* @param x2* 第二个矩形的x* @param y2* 第二个矩形的y* @param w2* 第二个矩形的w* @param h2* 第二个矩形的h* @return是否碰撞*/public boolean IsRectCollision(int x1, int y1, int w1, int h1, int x2, int y2, int w2, int h2) {if (x2 > x1 && x2 >= x1 + w1) {return false;} else if (x2 < x1 && x2 <= x1 - w2) {return false;} else if (y2 > y1 && y2 >= y1 + h1) {return false;} else if (y2 < y1 && y2 <= y1 - h2) {return false;} else {return true;}}//检测蛇头是否与蛇身碰撞//检测蛇头与墙的碰撞//public boolean isCollide() {boolean flag = false;for (int i = 0; i < snake.getBodyList().size(); i++) {flag = IsRectCollision(snake.getHead().getPointX(),snake.getHead().getPointY(), eachWidth, eachHeight,snake.getBodyList().get(i).getPointX(),snake.getBodyList().get(i).getPointY(),eachWidth,eachHeight);for(int j=0;j<100;j++){flag = IsRectCollision(snake.getHead().getPointX(),snake.getHead().getPointY(), eachWidth, eachHeight,listx[j],listy[j], eachWidth,eachHeight);if(flag){break;}}if ((snake.getHead().getPointX() < 1) ||(snake.getHead().getPointY() < 1) ||(snake.getHead().getPointX() > screenWidth - 1)||(snake.getHead().getPointY() > screenHeight - 1)){flag = true;}if(flag){break;}}return flag;}}2.MainActivity类package com.example.android_snake;import com.example.android_snake.R;import com.example.android_snake.view.SnakeView;//Downloads By import android.os.Bundle;import android.app.Activity;import android.view.Menu;import android.view.MenuItem;import android.view.Window;import android.view.WindowManager;public class MainActivity extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);//设置全屏getWindow().setFlags(youtParams.FLAG_FULLSCREEN, youtParams.FLAG_FULLSCREEN);SnakeView view = new SnakeView(this);setContentView(view);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu);return true;}}3.Food类package com.example.android_snake.food;import android.graphics.Bitmap;public class Food {private int pointX;private int pointY;private Bitmap foodBitmap;public Food() {super();}public Food(int pointX, int pointY, Bitmap foodBitmap) { super();this.pointX = pointX;this.pointY = pointY;this.foodBitmap = foodBitmap;}public int getPointX() {return pointX;}public void setPointX(int pointX) {this.pointX = pointX;}public int getPointY() {return pointY;}public void setPointY(int pointY) {this.pointY = pointY;}public Bitmap getFoodBitmap() {return foodBitmap;}public void setFoodBitmap(Bitmap foodBitmap) {this.foodBitmap = foodBitmap;}}4.Body类package com.example.android_snake.snake;import android.graphics.Bitmap;public class Body {private int pointX;private int pointY;private Bitmap bodyBitMap;public Body() {super();}public Body(int pointX, int pointY, Bitmap bodyBitMap) { super();this.pointX = pointX;this.pointY = pointY;this.bodyBitMap = bodyBitMap;}public int getPointX() {return pointX;}public void setPointX(int pointX) {this.pointX = pointX;}public int getPointY() {return pointY;}public void setPointY(int pointY) {this.pointY = pointY;}public Bitmap getBodyBitMap() {return bodyBitMap;}public void setBodyBitMap(Bitmap bodyBitMap) {this.bodyBitMap = bodyBitMap;}}5.Head类package com.example.android_snake.snake;import android.graphics.Bitmap;public class Head {private int pointX;private int pointY;private Bitmap headBitMap;public Head() {super();}public Head(int pointX, int pointY, Bitmap headBitMap) {super();this.pointX = pointX;this.pointY = pointY;this.headBitMap = headBitMap;}public int getPointX() {return pointX;}public void setPointX(int pointX) {this.pointX = pointX;}public int getPointY() {return pointY;}public void setPointY(int pointY) {this.pointY = pointY;}public Bitmap getHeadBitMap() {return headBitMap;}public void setHeadBitMap(Bitmap headBitMap) {this.headBitMap = headBitMap;}}6.Snake类package com.example.android_snake.snake;import java.util.ArrayList;import java.util.List;import android.graphics.Bitmap;public class Snake {private Head head;private Body body;private List<Body> bodyList;private SnakeDirection snakeDirection;public Snake(){}public Snake(Head head,List<Body> bodyList,SnakeDirection snakeDirection){ super();this.head = head;this.bodyList = bodyList;this.snakeDirection = snakeDirection;}public Head getHead() {return head;}public void setHead(Head head) {this.head = head;}public Body getBody() {return body;}public void setBody(Body body) {this.body = body;}public List<Body> getBodyList() {return bodyList;}public void setBodyList(List<Body> bodyList) {this.bodyList = bodyList;}public SnakeDirection getSnakeDirection() {return snakeDirection;}public void setSnakeDirection(SnakeDirection snakeDirection) { this.snakeDirection = snakeDirection;}}7.SnakeDirection类package com.example.android_snake.snake;public enum SnakeDirection {UP,DOWN,LEFT,RIGHT;}8.Stone类package com.example.android_snake.stone;import android.graphics.Bitmap;public class Stone {private int pointX;private int pointY;private Bitmap stoneBitmap;public Stone() {super();}public Stone(int pointX, int pointY, Bitmap foodBitmap) { super();this.pointX = pointX;this.pointY = pointY;this.stoneBitmap = stoneBitmap;}public int getPointX() {return pointX;}public void setPointX(int pointX) {this.pointX = pointX;}public int getPointY() {return pointY;}public void setPointY(int pointY) {this.pointY = pointY;}public Bitmap getStoneBitmap() {return stoneBitmap;}public void setFoodBitmap(Bitmap foodBitmap) { this.stoneBitmap = stoneBitmap;}}。

贪吃蛇 源代码

贪吃蛇 源代码

#include"stdafx.h"#include<iostream>#include<conio.h>#include<time.h>#include<windows.h>using namespace std;const int X=30,Y=15; //初始边界大小int level=1; //初始等级int length=3; //初始长度int food_bool=0; //食物是否存在int food_x,food_y; //食物存在的座标char direction='d'; //初始方向int success=1; //成功条件void SetPoint(int x,int y) //构造gotoxy函数{COORD s={x,y};SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),s);}struct body{ //构造蛇和墙体的身体int x,y;body *next;};body *head=new(struct body); //声明蛇头body *wall; //声明墙体的头节点class snake{ //构造蛇类public:void gaming(); //声明游戏的主函数void map(); //声明边界构造函数void paint_body(); //声明蛇体构造函数void food(); //声明创建食物函数void str_wall(); //声明墙体构造函数void add_wall(); //声明墙体添加函数};void snake::str_wall() //墙体构造函数{struct body *p=new(struct body); //声明并初始化操作节点wall=p; //让墙体头节点等于pp->x=(rand()+time(NULL))%(X-3)+2; //随机创建节点坐标p->y=(rand()+time(NULL))%(Y-3)+2;int k=0;while(k==0) //判断墙体是否出现在蛇身{k=1;struct body *q;q=head;while(q!=NULL){if(p->x==q->x&&p->y==q->y){k=0;p->x=(rand()+time(NULL))%(X-3)+2;p->y=(rand()+time(NULL))%(Y-3)+2;break;}q=q->next;}}SetPoint(p->x,p->y);cout<<"■";for(int i=0;i<10;i++){p->next=new(struct body); //构建10个初始墙体p=p->next;p->x=(rand()+time(NULL))%(X-3)+2;p->y=(rand()+time(NULL))%(Y-3)+2;while(k==0) //判断墙体是否出现在蛇身{k=1;struct body *q;q=head;while(q!=NULL){if(p->x==q->x&&p->y==q->y){k=0;p->x=(rand()+time(NULL))%(X-3)+2;p->y=(rand()+time(NULL))%(Y-3)+2;break;}q=q->next;}}k=0;SetPoint(p->x,p->y); //墙体出现位置正确时画出墙体cout<<"■";}p->next=NULL; //设置末节点为NULL}void snake::add_wall() //墙体添加函数{struct body *p;for(int i=0;i<3;i++) //判断墙体是否成立{p=new(struct body);int k=0;p->x=(rand()+time(NULL))%(X-3)+2;p->y=(rand()+time(NULL))%(Y-3)+2;while(k==0){k=1;struct body *q;q=head;while(q!=NULL){if(p->x==q->x&&p->y==q->y){k=0;p->x=(rand()+time(NULL))%(X-3)+2;p->y=(rand()+time(NULL))%(Y-3)+2;break;}q=q->next;}}p->next=wall;wall=p; //将新得到的墙体插入到头节点SetPoint(p->x,p->y);cout<<"■";}}void snake::food() //创建食物函数{int k;k=0;food_x=(rand()+time(NULL))%(X-3)+2;food_y=(rand()+time(NULL))%(Y-3)+2;body *p;while(k==0){k=1;p=wall;while(p!=NULL) //判断食物是否出现在墙体上{if(p->x==food_x&&p->y==food_y){k=0;food_x=(rand()+time(NULL))%(X-3)+2;food_y=(rand()+time(NULL))%(Y-3)+2;break;}p=p->next;}p=head;while(p!=NULL) //判断食物是否出现在蛇身上{if(p->x==food_x&&p->y==food_y){k=0;food_x=(rand()+time(NULL))%(X-3)+2;food_y=(rand()+time(NULL))%(Y-3)+2;break;}p=p->next;}}SetPoint(food_x,food_y); //画出食物cout<<"*";food_bool=1;}void snake::map() //边界构造函数{system("cls"); //清屏for(int i=0;i<=X;i+=2) //画出墙体{SetPoint(i,0);cout<<"■";}for(int i=1;i<Y;i++){SetPoint(0,i);cout<<"■";}for(int i=1;i<Y;i++){SetPoint(X,i);cout<<"■";}for(int i=0;i<=X+1;i+=2){SetPoint(i,Y);cout<<"■";}SetPoint(X+5,3); //画出信息cout<<"长度:"<<length;SetPoint(X+5,5);cout<<"等级:"<<level;}void snake::paint_body() //蛇体构造函数{body *body; //构建身体,比较丑,但是不想改了head->x=X/2; //游戏开始时,蛇出现在地图中心,此时长度为三 head->y=Y/2;body=new(struct body);head->next=body;body->x=head->x-1;body->y=head->y;body->next=new(struct body);body->next->x=head->x-2;body->next->y=head->y;body->next->next=NULL;SetPoint(head->x,head->y);cout<<"*";SetPoint(head->next->x,head->next->y);cout<<"*";SetPoint(head->next->next->x,head->next->next->y);cout<<"*";}void snake::gaming() //这里是gaming!!!!!!!!!!{int time_begin=clock();char x;char x1;struct body *newb;newb=new(body);map(); //构造边界paint_body(); //构造蛇身体str_wall(); //构造墙体food(); //构造一个食物x=direction; //读取方向while(1){if(_kbhit()) //如果读入缓存中有输入{x=_getch();while(_kbhit()) //读掉剩下的输入缓存中的数_getch();}if(x==' '){_getch();x=direction;}elseif((x=='w'||x=='W')&&direction!='s'){newb->x=head->x;newb->y=head->y-1;x1='w';}else if((x=='a'||x=='A')&&direction!='d'){newb->x=head->x-1;newb->y=head->y;x1='a';}else if((x=='s'||x=='S')&&direction!='w'){newb->x=head->x;newb->y=head->y+1;x1='s';}else if((x=='d'||x=='D')&&direction!='a'){newb->x=head->x+1;newb->y=head->y;x1='d';}else{if(x1=='w'){newb->x=head->x;newb->y=head->y-1;}else if(x1=='a'){newb->x=head->x-1;newb->y=head->y;}else if(x1=='s'){newb->x=head->x;newb->y=head->y+1;}else if(x1=='d'){newb->x=head->x+1;newb->y=head->y;}}if(clock()-time_begin>(500-level*45))//移动蛇身,随时间加快{time_begin=clock();{direction=x1;newb->next=head;head=newb;}if(head->x==food_x&&head->y==food_y)//遇见食物吃掉,食物小时{food_bool=0;}if(head->x==X||head->y==Y||head->x==0||head->y==0)//遇到墙体死亡{success=0;}else{body *p=head->next;if(food_bool==1){while(p->next!=NULL){if(p->x==head->x&&p->y==head->y)success=0;p=p->next;}}else{while(p!=NULL){if(p->x==head->x&&p->y==head->y)success=0;p=p->next;}}}{body *p=wall;while(p!=NULL){if(p->x==head->x&&p->y==head->y)//遇到墙体死亡success=0;p=p->next;}}if(success==0){system("cls");cout<<"你失败了"<<endl;cout<<"死的时候你的长度为"<<length<<endl;break;}if(food_bool==1){body *p=head;while(p->next->next!=NULL)//将指针移到末尾{p=p->next;}SetPoint(p->next->x,p->next->y);//蛇身移动后最后一部分消失cout<<" ";delete(p->next);p->next=NULL;}else{food();length++;if(length%5==0){level++;add_wall();}if(level==10)success=2;SetPoint(X+5,3);cout<<"长度:"<<length;SetPoint(X+5,5);cout<<"等级:"<<level;}{SetPoint(head->x,head->y);//吃到食物后蛇身增加cout<<"*";}if(success==2){system("cls");cout<<"你通关了"<<endl;break;}newb=new(body);}SetPoint(X+30,Y);}}void prompt(){cout<<"****************************************************"<<endl;cout<<"* 欢迎进入贪吃蛇世界 *"<<endl;cout<<"* *代表蛇身或食物 *"<<endl;cout<<"* ■代表墙 *"<<endl;cout<<"* *"<<endl;cout<<"* *"<<endl;cout<<"* 初试身体长度为3,每到5的倍数升一级 *"<<endl;cout<<"* *"<<endl;cout<<"* wasd操控,注意切换输入法哦 *"<<endl;cout<<"* *"<<endl;cout<<"* 每升一级速度加快,同时增加三个墙体 *"<<endl;cout<<"* *"<<endl;cout<<"* 按任意键开始游戏 *"<<endl;cout<<"* ps:按空格键暂停 *"<<endl;cout<<"****************************************************"<<endl;_getch();}int main(int argc,char argv[]){snake H;prompt();system("cls");H.gaming();system("pause");return 0;}。

贪吃蛇游戏源代码

贪吃蛇游戏源代码

贪吃蛇游戏源代码#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <graphics.h>#include <bios.h>#include <dos.h>#include<string.h>#define LEFT_MARGIN 140#define FRAME_UNIT_WIDTH 25#define FRAME_UNIT_HEIGHT 15#define BOX_SIZE 15#define WINDOW_WIDTH 640#define WINDOW_HEIGHT 480#define SNAK_DEFAULT_POS_X 10#define SNAK_DEFAULT_POS_Y 5#define SMD_UP 1#define SMD_DOWN 2#define SMD_RIGHT 3#define SMD_LEFT 4#define UP_MOVE 72#define DOWN_MOVE 80#define LEFT_MOVE 75#define RIGHT_MOVE 77#define STEP_MOVE 7#define GAME_STOP 57#define ESC_OUT 1#define GENERAT_EGG 8#define NO_EVENT 0#define Boolean int#define TRUTH 1#define FALS 0#define Type_GAMESTATUS int#define ON_PAL YING 2#define WINNER 1#define GAMEOVER 0#define TIMEINTERV AL 6typedef struct{int p_X;int p_Y;}POS_in_Fram;typedef struct SNode{POS_in_Fram cur_pos;int color;struct SNode *next;}SNode, *LSNode;typedef struct{int direction;int len;POS_in_Fram Head_pre_pos; POS_in_Fram Head_cur_pos;int Head_color;LSNode next;Boolean Dead;}SNAK;typedef struct{POS_in_Fram egg_pos;int egg_color;}EggType;SNAK obj_snake;EggType obj_egg;int Message_Event;int ScoreTotal;int SpeedLevel;Type_GAMESTATUS GameStat;void set_Message_Event(int T){Message_Event = T;}int get_Message_Event(){return(Message_Event);}void clear_ScoreTotal(){ScoreTotal = 0;}int get_ScoreTotal(){return(ScoreTotal);}void draw_ScoreTotal(){char text_buffer[20];int ul_X, ul_Y;ul_X = LEFT_MARGIN;ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT - 4); setcolor(BLUE);sprintf(text_buffer, "Score Total: %d", get_ScoreTotal());moveto(ul_X, ul_Y);outtext(text_buffer);setcolor(YELLOW);ScoreTotal++;sprintf(text_buffer, "Score Total: %d", get_ScoreTotal());moveto(ul_X, ul_Y);outtext(text_buffer);}void init_SpeedLevel(){SpeedLevel = 1;}int get_SpeedLevel(){return(SpeedLevel);}void draw_SpeedLevel(int old_l, int new_l){char text_buffer[20];int ul_X, ul_Y;ul_X = LEFT_MARGIN;ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT - 4); setcolor(BLUE);sprintf(text_buffer, "Speed Level: %d", old_l);moveto(ul_X, ul_Y + textheight("H") * 2);outtext(text_buffer);setcolor(YELLOW);sprintf(text_buffer, "Speed Level: %d", new_l);moveto(ul_X, ul_Y + textheight("H") * 2);outtext(text_buffer);}void setSpeedLevel(int score){if(score >= 0 && score < 20){draw_SpeedLevel(get_SpeedLevel(), 1);SpeedLevel = 1;}else if(score >= 20 && score < 50){draw_SpeedLevel(get_SpeedLevel(), 2);SpeedLevel = 2;}else if(score >= 50 && score < 100){draw_SpeedLevel(get_SpeedLevel(), 3);SpeedLevel = 3;}else{draw_SpeedLevel(get_SpeedLevel(), 4);SpeedLevel = 4;}}void set_GameStat(Type_GAMESTATUS state){GameStat = state;}Type_GAMESTATUS get_GameStat() {return(GameStat);}void set_SnakeDead(Boolean T){obj_snake.Dead = T;}Boolean Is_SnakeDead(){return(obj_snake.Dead);}int get_SHOD(int T){switch(T){case SMD_UP:return(SMD_DOWN);case SMD_DOWN:return(SMD_UP);case SMD_RIGHT:return(SMD_LEFT);case SMD_LEFT:return(SMD_RIGHT);}}int get_SHD(){return(obj_snake.direction);}Boolean findPointInSnake(int pX, int pY) {LSNode p;if((obj_snake.Head_cur_pos.p_X == pX) && (obj_snake.Head_cur_pos.p_Y == pY))return(TRUTH);for(p = obj_snake.next;p != NULL;p = p->next){if((p->cur_pos.p_X == pX) && (p->cur_pos.p_Y == pY))return(TRUTH);}return(FALS);}Boolean Is_SnakEating(){if((obj_snake.Head_pre_pos.p_X == obj_egg.egg_pos.p_X) && (obj_snake.Head_pre_pos.p_Y == obj_egg.egg_pos.p_Y))return(TRUTH);elsereturn(FALS);}void Init_obj_snake(){obj_snake.direction = SMD_RIGHT;obj_snake.len = 1;obj_snake.Head_cur_pos.p_X = SNAK_DEFAULT_POS_X;obj_snake.Head_cur_pos.p_Y = SNAK_DEFAULT_POS_Y;obj_snake.Head_pre_pos = obj_snake.Head_cur_pos;obj_snake.Head_color = RED;obj_snake.next = NULL;obj_snake.Dead = FALS;}void Init_obj_egg(){obj_egg.egg_pos.p_X = 0;obj_egg.egg_pos.p_Y = 0;obj_egg.egg_color = BLACK;}void RegistryGraphicMode(){int Driver, Mode;detectgraph(&Driver, &Mode);initgraph(&Driver, &Mode,"");}void Draw_FrameInWindow(int f_ul_X, int f_ul_Y, int f_dr_X, int f_dr_Y, int W, int H) {int i, x, y;rectangle(f_ul_X - 1, f_ul_Y - 1, f_dr_X + 1, f_dr_Y + 1);setfillstyle(SOLID_FILL, BLACK);bar(f_ul_X, f_ul_Y, f_dr_X, f_dr_Y);setcolor(DARKGRAY);for(i = 1;i < W;i++){x = f_ul_X + i * BOX_SIZE;line(x, f_ul_Y, x, f_dr_Y);}for(i = 1;i < H;i++){y = f_ul_Y + i * BOX_SIZE;line(f_ul_X, y, f_dr_X, y);}}void Draw_mainGraphWindow(){int ul_X, ul_Y, dr_X, dr_Y;setfillstyle(SOLID_FILL, BLUE);bar(0, 0, WINDOW_WIDTH - 1, WINDOW_HEIGHT - 1);ul_X = LEFT_MARGIN;ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT * 2 - 3);dr_X = LEFT_MARGIN + BOX_SIZE * FRAME_UNIT_WIDTH;dr_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT - 3);Draw_FrameInWindow(ul_X, ul_Y, dr_X, dr_Y, FRAME_UNIT_WIDTH, FRAME_UNIT_HEIGHT);ul_X = LEFT_MARGIN;ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT - 4);settextjustify(LEFT_TEXT, TOP_TEXT);settextstyle(DEFAULT_FONT, HORIZ_DIR, 1);setcolor(YELLOW);sprintf(text_buffer, "Score Total: %d", get_ScoreTotal());moveto(ul_X, ul_Y);outtext(text_buffer);sprintf(text_buffer, "Speed Level: %d", get_SpeedLevel());moveto(ul_X, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "EXIT: ESC Button");moveto(ul_X, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "Created By: qiuyongfei");moveto(ul_X, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "Class: 04hulianwang29hao");moveto(ul_X, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "UP: Up Arrow");moveto(ul_X + textwidth("H") * 30, ul_Y);strcpy(text_buffer, "DOWN: Down Arrow");moveto(ul_X + textwidth("H") * 30, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "LEFT: Left Arrow");moveto(ul_X + textwidth("H") * 30, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "RIGHT: Right Arrow");moveto(ul_X + textwidth("H") * 30, gety() + textheight("H") * 2);outtext(text_buffer);strcpy(text_buffer, "STOP: Space Button");moveto(ul_X + textwidth("H") * 30, gety() + textheight("H") * 2);outtext(text_buffer);}void draw_egg(Boolean T){int ul_X, ul_Y;int color;ul_X = LEFT_MARGIN;ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT * 2 - 3);if(T == FALS)color = BLACK;elsecolor = obj_egg.egg_color;setfillstyle(SOLID_FILL, color);bar(ul_X + BOX_SIZE * obj_egg.egg_pos.p_Y + 1, ul_Y + BOX_SIZE * obj_egg.egg_pos.p_X + 1, ul_X + BOX_SIZE * (obj_egg.egg_pos.p_Y + 1) - 1, ul_Y + BOX_SIZE * (obj_egg.egg_pos.p_X + 1) - 1);}void Mapped_Draw(Boolean T){int ul_X, ul_Y;int Ax, Ay, Bx, By;int color;LSNode p;ul_X = LEFT_MARGIN;ul_Y = WINDOW_HEIGHT - BOX_SIZE * (FRAME_UNIT_HEIGHT * 2 - 3);if(T == FALS)color = BLACK;elsecolor = obj_snake.Head_color;setfillstyle(SOLID_FILL, color);Ax = ul_X + BOX_SIZE * obj_snake.Head_cur_pos.p_Y + 1;Ay = ul_Y + BOX_SIZE * obj_snake.Head_cur_pos.p_X + 1;Bx = ul_X + BOX_SIZE * (obj_snake.Head_cur_pos.p_Y + 1) - 1;By = ul_Y + BOX_SIZE * (obj_snake.Head_cur_pos.p_X + 1) - 1;bar(Ax, Ay, Bx, By);if(T == TRUTH){setfillstyle(SOLID_FILL, YELLOW);bar(Ax + 4, Ay + 4, Ax + 4 + 5, Ay + 4 + 5);}for(p = obj_snake.next;p != NULL;p = p->next){if(T == FALS)color = BLACK;elsecolor = p->color;setfillstyle(SOLID_FILL, color);Ax = ul_X + BOX_SIZE * p->cur_pos.p_Y + 1;Ay = ul_Y + BOX_SIZE * p->cur_pos.p_X + 1;Bx = ul_X + BOX_SIZE * (p->cur_pos.p_Y + 1) - 1;By = ul_Y + BOX_SIZE * (p->cur_pos.p_X + 1) - 1;bar(Ax, Ay, Bx, By);}}void draw_GS_GO_Surface(Type_GAMESTA TUS T){char text_buffer[40];settextjustify(LEFT_TEXT, TOP_TEXT);switch(T){case ON_PAL YING:settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 4);setcolor(LIGHTCY AN);strcpy(text_buffer, "ITEM - 2: Game.Greed Snake");moveto(100, 100);outtext(text_buffer);settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 1);setcolor(YELLOW);strcpy(text_buffer, "Please press any key to continue ...");moveto(150, 300);outtext(text_buffer);break;case GAMEOVER:settextstyle(GOTHIC_FONT, HORIZ_DIR, 8);setcolor(RED);strcpy(text_buffer, "GAME OVER");moveto(70, 80);outtext(text_buffer);settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 2);setcolor(YELLOW);strcpy(text_buffer, "Sorry!");moveto(160, 320);outtext(text_buffer);sprintf(text_buffer, "Total Score: %d", get_ScoreTotal());moveto(240, 320);outtext(text_buffer);sprintf(text_buffer, "Speed Level: %d", get_SpeedLevel());moveto(240, 350);outtext(text_buffer);break;case WINNER:settextstyle(GOTHIC_FONT, HORIZ_DIR, 8);setcolor(RED);strcpy(text_buffer, "YOU WIN !");moveto(80, 80);outtext(text_buffer);settextstyle(SANS_SERIF_FONT, HORIZ_DIR, 2);setcolor(YELLOW);strcpy(text_buffer, "Congratulation!");moveto(120, 320);outtext(text_buffer);sprintf(text_buffer, "Total Score: %d", get_ScoreTotal());moveto(280, 320);outtext(text_buffer);sprintf(text_buffer, "Speed Level: %d", get_SpeedLevel());moveto(280, 350);outtext(text_buffer);break;default:break;}}void set_SH_Pre_Pos(int T){int H_pX, H_pY;H_pX = obj_snake.Head_cur_pos.p_X;H_pY = obj_snake.Head_cur_pos.p_Y;switch(T){case SMD_UP:if((H_pX - 1) < 0 || findPointInSnake(H_pX - 1, H_pY) == TRUTH){set_SnakeDead(TRUTH);return;}obj_snake.Head_pre_pos.p_X = H_pX - 1;obj_snake.Head_pre_pos.p_Y = H_pY;break;case SMD_DOWN:if((H_pX + 1) >= FRAME_UNIT_HEIGHT || findPointInSnake(H_pX + 1, H_pY) == TRUTH){set_SnakeDead(TRUTH);return;}obj_snake.Head_pre_pos.p_X = H_pX + 1;obj_snake.Head_pre_pos.p_Y = H_pY;break;case SMD_RIGHT:if((H_pY + 1) >= FRAME_UNIT_WIDTH || findPointInSnake(H_pX, H_pY + 1) == TRUTH){set_SnakeDead(TRUTH);return;}obj_snake.Head_pre_pos.p_X = H_pX;obj_snake.Head_pre_pos.p_Y = H_pY + 1;break;case SMD_LEFT:if((H_pY - 1) < 0 || findPointInSnake(H_pX, H_pY - 1) == TRUTH){set_SnakeDead(TRUTH);return;}obj_snake.Head_pre_pos.p_X = H_pX;obj_snake.Head_pre_pos.p_Y = H_pY - 1;break;}}Boolean set_SHD(int T){if(get_SHD() == T || get_SHOD(get_SHD()) == T) return(FALS);obj_snake.direction = T;return(TRUTH);}void process_SnakeNode(Boolean eated){int i;POS_in_Fram temp1_cur_pos, temp2_cur_pos; LSNode p, q;temp1_cur_pos = obj_snake.Head_cur_pos;obj_snake.Head_cur_pos = obj_snake.Head_pre_pos;p = obj_snake.next;for(i = 1;i < obj_snake.len;i++){temp2_cur_pos = p->cur_pos;p->cur_pos = temp1_cur_pos;temp1_cur_pos = temp2_cur_pos;p = p->next;}if(eated == TRUTH){q = (LSNode)malloc(sizeof(SNode));q->color = obj_egg.egg_color;q->cur_pos = temp1_cur_pos;if(obj_snake.len == 1){q->next = obj_snake.next;obj_snake.next = q;obj_snake.len++;return;}for(p = obj_snake.next;p->next != NULL;p = p->next);q->next = p->next;p->next = q;obj_snake.len++;}}void generate_Egg(){int temp_pX, temp_pY, temp_color;draw_egg(FALS);temp_pX = random(FRAME_UNIT_HEIGHT);temp_pY = random(FRAME_UNIT_WIDTH);while(findPointInSnake(temp_pX, temp_pY) == TRUTH){temp_pX = random(FRAME_UNIT_HEIGHT);temp_pY = random(FRAME_UNIT_WIDTH);}obj_egg.egg_pos.p_X = temp_pX;obj_egg.egg_pos.p_Y = temp_pY;for(temp_color = random(16);temp_color == BLACK;temp_color = random(16)); obj_egg.egg_color = temp_color;draw_egg(TRUTH);set_Message_Event(NO_EVENT);}void move_To(int T, Boolean step) {if(step == FALS){if(set_SHD(T) == FALS)goto Skip_1;}set_SH_Pre_Pos(T);if(Is_SnakeDead() == TRUTH) goto Skip_2;if(Is_SnakEating() == TRUTH) {Mapped_Draw(FALS);process_SnakeNode(TRUTH);Mapped_Draw(TRUTH);draw_ScoreTotal();setSpeedLevel(get_ScoreTotal());goto Skip_3;}else{Mapped_Draw(FALS);process_SnakeNode(FALS);Mapped_Draw(TRUTH);goto Skip_1;}Skip_1:set_Message_Event(NO_EVENT); return;Skip_2:set_Message_Event(ESC_OUT); return;Skip_3:set_Message_Event(GENERAT_EGG); return;}void pause_game(){while((bioskey(0) >> 8) != GAME_STOP);set_Message_Event(NO_EVENT);}void process_GameStat(Type_GAMESTATUS T) {LSNode p, q;switch(T){case ON_PAL YING:draw_GS_GO_Surface(ON_PAL YING);break;case WINNER:cleardevice();draw_GS_GO_Surface(WINNER);getch();break;case GAMEOVER:cleardevice();draw_GS_GO_Surface(GAMEOVER);getch();break;default:break;}p = obj_snake.next;while(p != NULL){q = p->next;free(p);}}Boolean IsWinner(){if(get_SpeedLevel() == 4)return(TRUTH);elsereturn(FALS);}Boolean IsGameOver(){if(get_Message_Event() == ESC_OUT)return(TRUTH);elsereturn(FALS);}Boolean IsTimeOut(){static long temp, sourc;temp = biostime(0, sourc);if((temp - sourc) < (TIMEINTERVAL - SpeedLevel))return FALS;else{sourc = temp;return TRUTH;}}void getMessageEvent(){if(get_Message_Event() == GENERAT_EGG || get_Message_Event() == ESC_OUT || get_Message_Event() == GAME_STOP)return;if(IsTimeOut() == TRUTH){set_Message_Event(STEP_MOVE);}if(bioskey(1)){set_Message_Event(bioskey(0) >> 8); return;}}void dispatchMessage_Event(){switch(get_Message_Event()){case UP_MOVE:move_To(SMD_UP, FALS);break;case DOWN_MOVE:move_To(SMD_DOWN, FALS);break;case LEFT_MOVE:move_To(SMD_LEFT, FALS);break;case RIGHT_MOVE:move_To(SMD_RIGHT, FALS);break;case STEP_MOVE:move_To(get_SHD(), TRUTH);break;case GENERA T_EGG:generate_Egg();break;case GAME_STOP:pause_game();break;case ESC_OUT:break;default:set_Message_Event(NO_EVENT); }}void main(){RegistryGraphicMode();set_GameStat(ON_PAL YING);process_GameStat(get_GameStat());clear_ScoreTotal();Init_obj_snake();Init_obj_egg();init_SpeedLevel();randomize();set_Message_Event(GENERAT_EGG);getch();cleardevice();Draw_mainGraphWindow();do{getMessageEvent(); dispatchMessage_Event();if(IsWinner() == TRUTH){set_GameStat(WINNER);break;}if(IsGameOver() == TRUTH){set_GameStat(GAMEOVER); break;}}while(1);process_GameStat(get_GameStat());closegraph(); }。

贪吃蛇游戏c语言源代码

贪吃蛇游戏c语言源代码

#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#ifdef __cplusplus#define __CPPARGS ...#else#define __CPPARGS#endifvoid interrupt (*oldhandler)(__CPPARGS);void interrupt newhandler(__CPPARGS);void SetTimer(void interrupt (*IntProc)(__CPPARGS));void KillTimer(void);void Initgra(void);void TheFirstBlock(void);void DrawMap(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 PrntScore(void);void Timer(void);void Win(void);void TheSecondBlock(void);void Food(void);void Dsnkorfd(int,int,int);void Delay(int);struct Snake{int x;int y;int color;}Snk[12];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,key=0,Times,Score,Hscore,Snkspeed,TimerCounter,TureorFalse; char Sco[2],Time[6];void main(){ Initgra();SetTimer(newhandler);TheFirstBlock();while(1){DrawMap();Snake_Headmv();GameOver();Snake_Bodymv();Snake_Bodyadd();PrntScore();Timer();Win();if(key==ESC)break;if(key==Enter){cleardevice();TheFirstBlock();}TheSecondBlock();Food();Delay(Snkspeed);}closegraph();KillTimer();}void interrupt newhandler(__CPPARGS){TimerCounter++;oldhandler();}void SetTimer(void interrupt (*IntProc)(__CPPARGS)) {oldhandler=getvect(0x1c);disable();setvect(0x1c,IntProc);enable();}void KillTimer(){disable();setvect(0x1c,oldhandler);enable();}void Initgra(){int gd=DETECT,gm;initgraph(&gd,&gm,"d:\\tc");}void TheFirstBlock(){setcolor(11);settextstyle(0,0,4);outtextxy(100,220,"The First Block");loop:key=bioskey(0);if(key==Enter){cleardevice();Initsnake();Initfood();Score=0;Hscore=1;Snkspeed=10;num=2;Times=0;key=0;TureorFalse=1;TimerCounter=0;Time[0]='0';Time[1]='0';Time[2]=':';Time[3]='1';Time[4]='0';Time[5]='\0'; }else if(key==ESC) cleardevice();else goto loop;}void DrawMap(){line(10,10,470,10);line(470,10,470,470);line(470,470,10,470);line(10,470,10,10);line(480,20,620,20);line(620,20,620,460);line(620,460,480,460);line(480,460,480,20);}void Initsnake(){randomize();num=2;Snk[0].x=random(440);Snk[0].x=Snk[0].x-Snk[0].x%20+50;Snk[0].y=random(440);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(440);Fd.x=Fd.x-Fd.x%20+30;Fd.y=random(440);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<20||Snk[0].x>460||Snk[0].y<20||Snk[0].y>460) {cleardevice();setcolor(11);settextstyle(0,0,4);outtextxy(160,220,"Game Over");loop1:key=bioskey(0);if(key==Enter){cleardevice();TheFirstBlock();}elseif(key==ESC)cleardevice();elsegoto loop1;}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");loop2:key=bioskey(0);if(key==Enter){cleardevice();TheFirstBlock();}elseif(key==ESC)cleardevice();else goto loop2;}}}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(440);Fd.x=Fd.x-Fd.x%20+30;Fd.y=random(440);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;}elseif(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;}elseif(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;}elseif(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;Score++;}}void PrntScore(){if(Hscore!=Score){setcolor(11);settextstyle(0,0,3); outtextxy(490,100,"SCORE"); setcolor(2);setfillstyle(1,0);rectangle(520,140,580,180); floodfill(530,145,2);Sco[0]=(char)(Score+48);Sco[1]='\0';Hscore=Score;setcolor(4);settextstyle(0,0,3); outtextxy(540,150,Sco);}}void Timer(){if(TimerCounter>18){Time[4]=(char)(Time[4]-1); if(Time[4]<'0'){Time[4]='9';Time[3]=(char)(Time[3]-1);}if(Time[3]<'0'){Time[3]='5';Time[1]=(char)(Time[1]-1);}if(TureorFalse){setcolor(11);settextstyle(0,0,3);outtextxy(490,240,"TIMER");setcolor(2);setfillstyle(1,0);rectangle(490,280,610,320);floodfill(530,300,2);setcolor(11);settextstyle(0,0,3);outtextxy(495,290,Time);TureorFalse=0;}if(Time[1]=='0'&&Time[3]=='0'&&Time[4]=='0') {setcolor(11);settextstyle(0,0,4);outtextxy(160,220,"Game Over");loop:key=bioskey(0);if(key==Enter){cleardevice();TheFirstBlock();}else if(key==ESC) cleardevice();else goto loop;}TimerCounter=0;TureorFalse=1;}}void Win(){if(Score==3)Times++;if(Times==2){cleardevice();setcolor(11);settextstyle(0,0,4);outtextxy(160,220,"You Win");loop:key=bioskey(0);if(key==Enter){cleardevice();TheFirstBlock();key=0;}else if(key==ESC) cleardevice();else goto loop;}}void TheSecondBlock(){if(Score==3){cleardevice();setcolor(11);settextstyle(0,0,4);outtextxy(100,220,"The Second Block"); loop:key=bioskey(0);if(key==Enter){cleardevice();Initsnake();Initfood();Score=0;Hscore=1;Snkspeed=8;num=2;key=0;}else if(key==ESC) cleardevice();else goto loop;}}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);}。

贪吃蛇游戏源代码

贪吃蛇游戏源代码
mainFrame.setVisible(true);
begin();
}
//----------------------------------------------------------------------
//keyPressed():按键检测
//----------------------------------------------------------------------
void begin()
{
if(snakeModel==null||!snakeModel.running)
{
snakeModel=new SnakeModel(this,canvasWidth/nodeWidth,
this.canvasHeight/nodeHeight);
(new Thread(snakeModel)).start();
//GreedSnake():初始化游戏界面
//----------------------------------------------------------------------
public GreedSnake()
{
//设置界面元素
mainFrame=new JFrame("GreedSnake");
*要点分析:
*1)数据结构:matrix[][]用来存储地图上面的信息,如果什么也没有设置为false,
* 如果有食物或蛇,设置为true;nodeArray,一个LinkedList,用来保存蛇的每
* 一节;food用来保存食物的位置;而Node类是保存每个位置的信息。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

scorecommand("allowscale", "false");
fscommand("showmenu", "false");
loadedbytes=0;
total=_root.getBytesTotal();
loadedbytes=_root.getBytesLoaded()
if (loadedbytes==total){nextScene();}
else{bfb=int((loadedbytes/total*100))+"%";}
stop();
fscommand("allowscale", "false");
fscommand("showmenu", "false");
music=new Sound()
music.attachSound("music");
music.stop()
music.start(0,10000)
musicstart=true
onClipEvent(keyDown){
temp=Key.getCode();
if(!keyon){;}
else if(game=="stop" and (temp==189 or temp==109)){ if (speed>1) {
speed--;
rate = speed;}}
else if (game=="stop" and (temp==107 or temp==187)) { if (speed<maxspeed) {
speed ++;
rate =speed;}
}else if(game<>"start"){enter();
}else if(temp==Key.ENTER){
enter();
}else if (temp == Key.DOWN and y1>=0) {
x1=0;
y1 = 1;
walk();
timestart()
}else if (temp == Key.UP and y1<=0) {
x1=0;
y1 = -1;
walk();
timestart()
}else if (temp == Key.LEFT and x1<=0) {
y1=0;
x1 = -1;
walk();
timestart()
}else if (temp == Key.RIGHT and x1>=0) {
y1=0;
x1 = 1;
walk();
timestart()
}
}
walks=new Sound();
walks.attachSound("walks");
die=new Sound();
die.attachSound("die");
eat=new Sound();
eat.attachSound("eat");
snakebody="snake1";
game="stop";
keyon=true;
startlong = 7;
maxspeed=10;
speed = 4;
time=new Array(0,1000,800,600,400,250,175,100,75,50,30) rate = speed;
function walk() {
x = x+x1;
y = y+y1;
if (x<0 or x>19 or y<0 or y>19) {
gotoAndStop("over");
} else if (map[x][y] == 2) {
eat.start();
body(x, y);
egg();
long++;
score=score+speed;
} else {
map[snake[0]._x/8][snake[0]._y/8] = 0;
if (map[x][y] == 1) {
gotoAndStop("over");
} else {
snake.push(snake[0]);
snake.shift(0);
snake[long-1]._x = x*8;
snake[long-1]._y = y*8;
map[x][y] = 1;
walks.start();
}
}
}
function egg() {
var x2, y2;
x2 = random(20);
y2 = random(20);
while (map[x2][y2] == 1) {
x2 = random(20);
y2 = random(20);
}
map[x2][y2] = 2;
egg2._x = x2*8;
egg2._y = y2*8;
}
function body(x3, y3) {
window.attachMovie(snakebody, "snake"+long,long);
temp=eval("window.snake"+long);
temp._x=x3*8;
temp._y=y3*8;
snake.push(temp);
map[x3][y3] = 1;
}
function enter(){
if(game=="stop"){
stopallsound()
gotoandplay("start");
}else if(game=="pause"){
game="start";
gotoandplay("play");
}else if(game=="start"){
game="pause";
gotoandplay("pause")
}
}
function clear(){
if (long>startlong) {
for (i=0; i<=long; i++) {
snake[i].removeMovieClip();
}
}
}
function timestart(){
clearInterval(Interval);
Interval=setInterval(walk,time[speed],x1,y1); }
clear();
score=0;
x = startlong-1;
y = 0;
x1 = 1;
y1 = 0;
map = new Array();
for (i=0; i<20; i++) {
map[i] = new Array(20);
}
snake = new Array();
x = startlong-1;
y = 0;
for (var long = 0; long<startlong; long++) { body(long, 0);
}
egg();
game="start";
运行结果如图:。

相关文档
最新文档