编写简单消消乐C,C#,java,都可以

编写简单消消乐C,C#,java,都可以,第1张

有一个我旅销喊拆野们老师编写的贪吃蛇程序 供你参考一下:

GreedSnake.java (也斗扮是程序入口):

import java.awt.BorderLayout

import java.awt.Canvas

import java.awt.Color

import java.awt.Container

import java.awt.Graphics

import java.awt.event.KeyEvent

import java.awt.event.KeyListener

import java.util.Iterator

import java.util.LinkedList

import javax.swing.JFrame

import javax.swing.JLabel

import javax.swing.JPanel

public class GreedSnake implements KeyListener {

JFrame mainFrame

Canvas paintCanvas

JLabel labelScore// 计分牌

SnakeModel snakeModel = null// 蛇

public static final int canvasWidth = 200

public static final int canvasHeight = 300

public static final int nodeWidth = 10

public static final int nodeHeight = 10

// ----------------------------------------------------------------------

// GreedSnake():初始化游戏界面

// ----------------------------------------------------------------------

public GreedSnake() {

// 设置界面元素

mainFrame = new JFrame("GreedSnake")

Container cp = mainFrame.getContentPane()

labelScore = new JLabel("Score:")

cp.add(labelScore, BorderLayout.NORTH)

paintCanvas = new Canvas()

paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1)

paintCanvas.addKeyListener(this)

cp.add(paintCanvas, BorderLayout.CENTER)

JPanel panelButtom = new JPanel()

panelButtom.setLayout(new BorderLayout())

JLabel labelHelp// 帮助信息

labelHelp = new JLabel("PageUp, PageDown for speed", JLabel.CENTER)

panelButtom.add(labelHelp, BorderLayout.NORTH)

labelHelp = new JLabel("ENTER or R or S for start", JLabel.CENTER)

panelButtom.add(labelHelp, BorderLayout.CENTER)

labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER)

panelButtom.add(labelHelp, BorderLayout.SOUTH)

cp.add(panelButtom, BorderLayout.SOUTH)

mainFrame.addKeyListener(this)

mainFrame.pack()

mainFrame.setResizable(false)

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

mainFrame.setVisible(true)

begin()

}

// ----------------------------------------------------------------------

// keyPressed():按键检测

// ----------------------------------------------------------------------

public void keyPressed(KeyEvent e) {

int keyCode = e.getKeyCode()

if (snakeModel.running)

switch (keyCode) {

case KeyEvent.VK_UP:

snakeModel.changeDirection(SnakeModel.UP)

break

case KeyEvent.VK_DOWN:

snakeModel.changeDirection(SnakeModel.DOWN)

break

case KeyEvent.VK_LEFT:

snakeModel.changeDirection(SnakeModel.LEFT)

break

case KeyEvent.VK_RIGHT:

snakeModel.changeDirection(SnakeModel.RIGHT)

break

case KeyEvent.VK_ADD:

case KeyEvent.VK_PAGE_UP:

snakeModel.speedUp()// 加速

break

case KeyEvent.VK_SUBTRACT:

case KeyEvent.VK_PAGE_DOWN:

snakeModel.speedDown()// 减速

break

case KeyEvent.VK_SPACE:

case KeyEvent.VK_P:

snakeModel.changePauseState()// 暂停或继续

break

default:

}

// 重新开始

if (keyCode == KeyEvent.VK_R || keyCode == KeyEvent.VK_S

|| keyCode == KeyEvent.VK_ENTER) {

snakeModel.running = false

begin()

}

}

// ----------------------------------------------------------------------

// keyReleased():空函数

// ----------------------------------------------------------------------

public void keyReleased(KeyEvent e) {

}

// ----------------------------------------------------------------------

// keyTyped():空函数

// ----------------------------------------------------------------------

public void keyTyped(KeyEvent e) {

}

// ----------------------------------------------------------------------

// repaint():绘制游戏界面(包括蛇和食物

// ----------------------------------------------------------------------

void repaint() {

Graphics g = paintCanvas.getGraphics()

// draw background

g.setColor(Color.WHITE)

g.fillRect(0, 0, canvasWidth, canvasHeight)

// draw the snake

g.setColor(Color.BLACK)

LinkedList na = snakeModel.nodeArray

Iterator it = na.iterator()

while (it.hasNext()) {

Node n = (Node) it.next()

drawNode(g, n)

}

// draw the food

g.setColor(Color.RED)

Node n = snakeModel.food

drawNode(g, n)

updateScore()

}

// ----------------------------------------------------------------------

// drawNode():绘画某一结点(蛇身或食物)

// ----------------------------------------------------------------------

private void drawNode(Graphics g, Node n) {

g.fillRect(n.x * nodeWidth, n.y * nodeHeight, nodeWidth - 1,

nodeHeight - 1)

}

// ----------------------------------------------------------------------

// updateScore():改变计分牌

// ----------------------------------------------------------------------

public void updateScore() {

String s = "Score: " + snakeModel.score

labelScore.setText(s)

}

// ----------------------------------------------------------------------

// begin():游戏开始,放置贪吃蛇

你可以参考一下 每次遇到不会的都来求助是很不方便的

如果你想了解和学习更多的JAVA编程,成为一名真正的JAVA高手,你可以来这个裙,前面三个数是四二六 中间是三九六 后面是二八四

把这串数字连起来就可以了,这是一个高手的学习裙,在这里你可以学习到书上学不到的知识,还有大牛相互讨论并指导你解答哦!

// ----------------------------------------------------------------------

void begin() {

if (snakeModel == null || !snakeModel.running) {

snakeModel = new SnakeModel(this, canvasWidth / nodeWidth,

this.canvasHeight / nodeHeight)

(new Thread(snakeModel)).start()

}

}

// ----------------------------------------------------------------------

// main():主函数

// ----------------------------------------------------------------------

public static void main(String[] args) {

GreedSnake gs = new GreedSnake()

}

}

Node.java:

public class Node {

int x

int y

Node(int x, int y) {

this.x = x

this.y = y

}

}

SnakeModel.java:

import java.util.Arrays

import java.util.LinkedList

import java.util.Random

import javax.swing.JOptionPane

public class SnakeModel implements Runnable {

GreedSnake gs

boolean[][] matrix// 界面数据保存在数组里

LinkedList nodeArray = new LinkedList()

Node food

int maxX// 最大宽度

int maxY// 最大长度

int direction = 2// 方向

boolean running = false

int timeInterval = 200// 间隔时间(速度)

double speedChangeRate = 0.75// 速度改变程度

boolean paused = false// 游戏状态

int score = 0

int countMove = 0

// UP和DOWN是偶数,RIGHT和LEFT是奇数

public static final int UP = 2

public static final int DOWN = 4

public static final int LEFT = 1

public static final int RIGHT = 3

// ----------------------------------------------------------------------

// GreedModel():初始化界面

// ----------------------------------------------------------------------

public SnakeModel(GreedSnake gs, int maxX, int maxY) {

this.gs = gs

this.maxX = maxX

this.maxY = maxY

matrix = new boolean[maxX][]

for (int i = 0i <maxX++i) {

matrix[i] = new boolean[maxY]

Arrays.fill(matrix[i], false)// 没有蛇和食物的地区置false

}

// 初始化贪吃蛇

int initArrayLength = maxX >20 ? 10 : maxX / 2

for (int i = 0i <initArrayLength++i) {

int x = maxX / 2 + i

int y = maxY / 2

nodeArray.addLast(new Node(x, y))

matrix[x][y] = true// 蛇身处置true

}

food = createFood()

matrix[food.x][food.y] = true// 食物处置true

}

// ----------------------------------------------------------------------

// changeDirection():改变运动方向

// ----------------------------------------------------------------------

public void changeDirection(int newDirection) {

if (direction % 2 != newDirection % 2)// 避免冲突

{

direction = newDirection

}

}

// ----------------------------------------------------------------------

// moveOn():贪吃蛇运动函数

// ----------------------------------------------------------------------

public boolean moveOn() {

Node n = (Node) nodeArray.getFirst()

int x = n.x

int y = n.y

switch (direction) {

case UP:

y--

break

case DOWN:

y++

break

case LEFT:

x--

break

case RIGHT:

x++

break

}

if ((0 <= x &&x <maxX) &&(0 <= y &&y <maxY)) {

if (matrix[x][y])// 吃到食物或者撞到身体

{

if (x == food.x &&y == food.y)// 吃到食物

{

nodeArray.addFirst(food)// 在头部加上一结点

// 计分规则与移动长度和速度有关

int scoreGet = (10000 - 200 * countMove) / timeInterval

score += scoreGet >0 ? scoreGet : 10

countMove = 0

food = createFood()

matrix[food.x][food.y] = true

return true

} else

return false// 撞到身体

} else// 什么都没有碰到

{

nodeArray.addFirst(new Node(x, y))// 加上头部

matrix[x][y] = true

n = (Node) nodeArray.removeLast()// 去掉尾部

matrix[n.x][n.y] = false

countMove++

return true

}

}

return false// 越界(撞到墙壁)

}

// ----------------------------------------------------------------------

// run():贪吃蛇运动线程

// ----------------------------------------------------------------------

public void run() {

running = true

while (running) {

try {

Thread.sleep(timeInterval)

} catch (Exception e) {

break

}

if (!paused) {

if (moveOn())// 未结束

{

gs.repaint()

} else// 游戏结束

{

JOptionPane.showMessageDialog(null, "GAME OVER",

"Game Over", JOptionPane.INFORMATION_MESSAGE)

break

}

}

}

running = false

}

// ----------------------------------------------------------------------

// createFood():生成食物及放置地点

// ----------------------------------------------------------------------

private Node createFood() {

int x = 0

int y = 0

do {

Random r = new Random()

x = r.nextInt(maxX)

y = r.nextInt(maxY)

} while (matrix[x][y])

return new Node(x, y)

}

// ----------------------------------------------------------------------

// speedUp():加快蛇运动速度

// ----------------------------------------------------------------------

public void speedUp() {

timeInterval *= speedChangeRate

}

// ----------------------------------------------------------------------

// speedDown():放慢蛇运动速度

// ----------------------------------------------------------------------

public void speedDown() {

timeInterval /= speedChangeRate

}

// ----------------------------------------------------------------------

// changePauseState(): 改变游戏状态(暂停或继续)

// ----------------------------------------------------------------------

public void changePauseState() {

paused = !paused

}

}

满意请采纳

最少是要求2个方格可以进行消除,至多没有上线,可以连续多少个相投色的方格即可一次性消除多少个方格。

方块消消乐,是以同色方格相连之后点击进行消除,属雀桐于休闲单机小游戏,消除过程中需要获得通关要求分值方可继续下一关,失败则需要蚂茄重新从第一关开始挑战。

小小乐作为休闲类游戏,以其清闷岁察新的配色,简单的方格界面,带给用户舒适的游戏体验,过程中想要获得高分,则需要有策略的调整几种颜色方格连接消除位置。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8262589.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存