关于JAVA中同一个类中方法调用同类中另一方法参数传递的问题

关于JAVA中同一个类中方法调用同类中另一方法参数传递的问题,第1张

打个比方你就明白了。假设有1000万个箱子,从1到1000万编号。其中编号为80的分配给了你,而你把你的编号告诉了另一个人,那另一个人就可以找到这个箱子,并装一些东西到里面(即改变这个箱子装的东西),但这个箱子的编号并没有改变,只是有两个人知道了这个编号。

贪吃蛇程序:

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():游戏开始,放置贪吃蛇

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

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

}

}

确保是否是绿色版本。

如果是绿色版本,环境变量里必须配有jdk相应配制

譬如 JAVA_HOME,PATH

对于 mysql 只需启动就可以了,

对于eclipse里面的工程,你必须保证工程里引用的包是否路径正确.


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存