java小游戏源代码

时间:2024-06-01 16:48:00编辑:coo君

求用java写一个简单的小游戏窗口的代码

分情况看: (1)如果你没用非官方集成的开发环境的话,首先在你电脑上装个JDK,然后设置下电脑环境变量,里面有PATH和CLASSPATH这两个参数,具体怎么设置呢?就是把安装目录的地址拷贝到里面就好了,略有不同这两个参数的设置.安装完成后,把源代码文件的目录记下,源代码拷贝到记事本上,把后缀名改成".java";打开CMD窗口,先执行"javac 文件名.java"命令,在目录下会生成一个".class"的文件,那是编译生成的文件,如果顺利通过编译,说明源代码没错误,OK,你再执行"java 文件名.class"就执行程序了.


求一段JAVA编写的贪吃蛇小程序源代码

用MVC方式实现的贪吃蛇游戏,共有4个类。运行GreedSnake运行即可。主要是观察者模式的使用,我已经添加了很多注释了。
1、
/*
* 程序名称:贪食蛇
* 原作者:BigF
* 修改者:algo
* 说明:我以前也用C写过这个程序,现在看到BigF用Java写的这个,发现虽然作者自称是Java的初学者,
* 但是明显编写程序的素养不错,程序结构写得很清晰,有些细微得地方也写得很简洁,一时兴起之
* 下,我认真解读了这个程序,发现数据和表现分开得很好,而我近日正在学习MVC设计模式,
* 因此尝试把程序得结构改了一下,用MVC模式来实现,对源程序得改动不多。
* 我同时也为程序增加了一些自己理解得注释,希望对大家阅读有帮助。
*/

package mvcTest;

/**
* @author WangYu
* @version 1.0
* Description:
*
* Create on :Date :2005-6-13 Time:15:57:16
* LastModified:
* History:
*/
public class GreedSnake {
public static void main(String[] args) {
SnakeModel model = new SnakeModel(20,30);
SnakeControl control = new SnakeControl(model);
SnakeView view = new SnakeView(model,control);
//添加一个观察者,让view成为model的观察者
model.addObserver(view);

(new Thread(model)).start();
}
}

-------------------------------------------------------------
2、

package mvcTest;

//SnakeControl.java
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

/**
* MVC中的Controler,负责接收用户的操作,并把用户操作通知Model
*/
public class SnakeControl implements KeyListener{
SnakeModel model;

public SnakeControl(SnakeModel model){
this.model = model;
}

public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (model.running){ // 运行状态下,处理的按键
switch (keyCode) {
case KeyEvent.VK_UP:
model.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
model.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
model.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
model.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
model.speedUp();
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
model.speedDown();
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
model.changePauseState();
break;
default:
}
}

// 任何情况下处理的按键,按键导致重新启动游戏
if (keyCode == KeyEvent.VK_R ||
keyCode == KeyEvent.VK_S ||
keyCode == KeyEvent.VK_ENTER) {
model.reset();
}
}

public void keyReleased(KeyEvent e) {
}

public void keyTyped(KeyEvent e) {
}
}
-------------------------------------------------------------
3、
/*
*
*/

package mvcTest;

/**
* 游戏的Model类,负责所有游戏相关数据及运行
* @author WangYu
* @version 1.0
* Description:
*
* Create on :Date :2005-6-13 Time:15:58:33
* LastModified:
* History:
*/
//SnakeModel.java
import javax.swing.*;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Random;

/**
* 游戏的Model类,负责所有游戏相关数据及运行
*/
class SnakeModel extends Observable implements Runnable {
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 and DOWN should be even
// RIGHT and LEFT should be odd
public static final int UP = 2;
public static final int DOWN = 4;
public static final int LEFT = 1;
public static final int RIGHT = 3;

public SnakeModel( int maxX, int maxY) {
this.maxX = maxX;
this.maxY = maxY;

reset();
}

public void reset(){
direction = SnakeModel.UP; // 蛇运行的方向
timeInterval = 200; // 时间间隔,毫秒
paused = false; // 暂停标志
score = 0; // 得分
countMove = 0; // 吃到食物前移动的次数

// initial matirx, 全部清0
matrix = new boolean[maxX][];
for (int i = 0; i < maxX; ++i) {
matrix[i] = new boolean[maxY];
Arrays.fill(matrix[i], false);
}

// initial the snake
// 初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半
int initArrayLength = maxX > 20 ? 10 : maxX / 2;
nodeArray.clear();
for (int i = 0; i < initArrayLength; ++i) {
int x = maxX / 2 + i;//maxX被初始化为20
int y = maxY / 2; //maxY被初始化为30
//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]
//默认的运行方向向上,所以游戏一开始nodeArray就变为:
// [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]
nodeArray.addLast(new Node(x, y));
matrix[x][y] = true;
}

// 创建食物
food = createFood();
matrix[food.x][food.y] = true;
}

public void changeDirection(int newDirection) {
// 改变的方向不能与原来方向同向或反向
if (direction % 2 != newDirection % 2) {
direction = newDirection;
}
}

/**
* 运行一次
* @return
*/
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; // 触到边线,失败
}

public void run() {
running = true;
while (running) {
try {
Thread.sleep(timeInterval);
} catch (Exception e) {
break;
}

if (!paused) {
if (moveOn()) {
setChanged(); // Model通知View数据已经更新
notifyObservers();
} else {
JOptionPane.showMessageDialog(null,
"you failed",
"Game Over",
JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running = false;
}

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);
}

public void speedUp() {
timeInterval *= speedChangeRate;
}

public void speedDown() {
timeInterval /= speedChangeRate;
}

public void changePauseState() {
paused = !paused;
}

public String toString() {
String result = "";
for (int i = 0; i < nodeArray.size(); ++i) {
Node n = (Node) nodeArray.get(i);
result += "[" + n.x + "," + n.y + "]";
}
return result;
}
}

class Node {
int x;
int y;

Node(int x, int y) {
this.x = x;
this.y = y;
}
}
------------------------------------------------------------
4、

package mvcTest;

//SnakeView.java
import javax.swing.*;
import java.awt.*;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Observer;

/**
* MVC模式中得Viewer,只负责对数据的显示,而不用理会游戏的控制逻辑
*/
public class SnakeView implements Observer {
SnakeControl control = null;
SnakeModel model = null;

JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;

public static final int canvasWidth = 200;
public static final int canvasHeight = 300;

public static final int nodeWidth = 10;
public static final int nodeHeight = 10;

public SnakeView(SnakeModel model, SnakeControl control) {
this.model = model;
this.control = control;

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(control);
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(control);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
}

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 = model.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 = model.food;
drawNode(g, n);

updateScore();
}

private void drawNode(Graphics g, Node n) {
g.fillRect(n.x * nodeWidth,
n.y * nodeHeight,
nodeWidth - 1,
nodeHeight - 1);
}

public void updateScore() {
String s = "Score: " + model.score;
labelScore.setText(s);
}

public void update(Observable o, Object arg) {
repaint();
}
}
希望采纳


求一个简单又有趣的JAVA小游戏代码

具体如下:连连看的小源码package Lianliankan;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class lianliankan implements ActionListener{JFrame mainFrame; //主面板Container thisContainer;JPanel centerPanel,southPanel,northPanel; //子面板JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //分数标签JButton firstButton,secondButton; //分别记录两次62616964757a686964616fe59b9ee7ad9431333335326239被选中的按钮int grid[][] = new int[8][7];//储存游戏按钮位置static boolean pressInformation=false; //判断是否有按钮被选中int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标int i,j,k,n;//消除方法控制代码(code)是程序员用开发工具所支持的语言写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。对于字符和Unicode数据的位模式的定义,此模式代表特定字母、数字或符号(例如 0x20 代表一个空格,而 0x74 代表字符“t”)。一些数据类型每个字符使用一个字节;每个字节可以具有 256 个不同的位模式中的一个模式。在计算机中,字符由不同的位模式(ON 或 OFF)表示。每个字节有 8 位,这 8 位可以有 256 种不同的 ON 和 OFF 组合模式。对于使用 1 个字节存储每个字符的程序,通过给每个位模式指派字符可表示最多 256 个不同的字符。2 个字节有 16 位,这 16 位可以有 65,536 种唯一的 ON 和 OFF 组合模式。使用 2 个字节表示每个字符的程序可表示最多 65,536 个字符。单字节代码页是字符定义,这些字符映射到每个字节可能有的 256 种位模式中的每一种。代码页定义大小写字符、数字、符号以及 !、@、#、% 等特殊字符的位模式。每种欧洲语言(如德语和西班牙语)都有各自的单字节代码页。虽然用于表示 A 到 Z 拉丁字母表字符的位模式在所有的代码页中都相同,但用于表示重音字符(如"é"和"á")的位模式在不同的代码页中却不同。如果在运行不同代码页的计算机间交换数据,必须将所有字符数据由发送计算机的代码页转换为接收计算机的代码页。如果源数据中的扩展字符在接收计算机的代码页中未定义,那么数据将丢失。如果某个数据库为来自许多不同国家的客户端提供服务,则很难为该数据库选择这样一种代码页,使其包括所有客户端计算机所需的全部扩展字符。而且,在代码页间不停地转换需要花费大量的处理时间。

求java小游戏源代码

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Toolkit;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.File;
import java.util.Vector;

public class Frame extends JFrame implements Runnable {
JPanel contentPane;

JPanel jPanel1 = new JPanel();

JButton jButton1 = new JButton();

JSlider jSlider1 = new JSlider();

JLabel jLabel1 = new JLabel();

JButton jButton2 = new JButton();

JLabel jLabel2 = new JLabel();

int count = 1, rapidity = 80; // count 当前进行的个数, rapidity 游标的位置

int zhengque = 0, cuowu = 0;

int rush[] = { 10 ,20 ,30 }; //游戏每关的个数 可以自由添加.列 { 10 ,20 ,30 ,40,50}

int rush_count = 0; //记录关数

char list[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; //随机出现的数字 可以自由添加

Vector number = new Vector();

String paiduan = "true";

AudioClip Musci_anjian, Music_shibai, Music_chenggong;

public Frame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);

//-----------------声音文件---------------------
Musci_anjian = Applet.newAudioClip(new File("sounds//anjian.wav")
.toURL());
Music_shibai = Applet.newAudioClip(new File("sounds//shibai.wav")
.toURL());
Music_chenggong = Applet.newAudioClip(new File(
"sounds//chenggong.wav").toURL());

//---------------------------------------
jbInit();
} catch (Exception exception) {
exception.printStackTrace();
}
}

/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(588, 530));
setTitle("Frame Title");
jPanel1.setBorder(BorderFactory.createEtchedBorder());
jPanel1.setBounds(new Rectangle(4, 4, 573, 419));
jPanel1.setLayout(null);
jButton1.setBounds(new Rectangle(277, 442, 89, 31));
jButton1.setText("开始");
jButton1.addActionListener(new Frame1_jButton1_actionAdapter(this));
jSlider1.setBounds(new Rectangle(83, 448, 164, 21));
jSlider1.setMaximum(100);
jSlider1.setMinimum(1);
jSlider1.setValue(50);
jLabel1.setText("速度");
jLabel1.setBounds(new Rectangle(35, 451, 39, 18));
jButton2.setBounds(new Rectangle(408, 442, 89, 31));
jButton2.setText("结束");
jButton2.addActionListener(new Frame1_jButton2_actionAdapter(this));
jLabel2.setText("第一关:100个");
jLabel2.setBounds(new Rectangle(414, 473, 171, 21));
contentPane.add(jPanel1);
contentPane.add(jButton2);
contentPane.add(jButton1);
contentPane.add(jSlider1);
contentPane.add(jLabel1);
contentPane.add(jLabel2);
this.addKeyListener(new MyListener());
jButton1.addKeyListener(new MyListener());
jSlider1.addKeyListener(new MyListener());
jSlider1.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
rapidity = jSlider1.getValue();
}
});
}

public void run() {
number.clear();
zhengque = 0;
cuowu = 0;
paiduan = "true";
while (count <= rush[rush_count]) {
try {
Thread t = new Thread(new Tthread());
t.start();
count += 1;
Thread.sleep(1000 + (int) (Math.random() * 2000)); // 生产下组停顿时间
// 最快1快.最慢2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}

while (true) { // 等待最后一个字符消失
if (number.size() == 0) {
break;
}
}

if (zhengque == 0) { // 为了以后相除..如果全部正确或者错误就会出现错误. 所以..
zhengque = 1;
}
if (cuowu == 0) {
cuowu = 1;
}

if (paiduan.equals("true")) { // 判断是否是自然结束
if (zhengque / cuowu >= 2) {
JOptionPane.showMessageDialog(null, "恭喜你过关了");
rush_count += 1; // 自动加1关
if (rush_count < rush.length) {
if (rapidity > 10) { // 当速度大于10的时候在-5提加速度.怕速度太快
rapidity -= 5; // 速度自动减10毫秒
jSlider1.setValue(rapidity); // 选择位置
}
Thread t = new Thread(this);
t.start();
} else {
JOptionPane.showMessageDialog(null, "牛B...你通关了..");
rush_count = 0;
count = 0;
}
} else {
JOptionPane.showMessageDialog(null, "请再接再励");
rush_count = 0;
count = 0;
}
} else {
rush_count = 0;
count = 0;
}
}

public void jButton1_actionPerformed(ActionEvent e) {
Thread t = new Thread(this);
t.start();
}

public void jButton2_actionPerformed(ActionEvent e) {
count = rush[rush_count] + 1;
paiduan = "flase";
}

class Tthread implements Runnable {
public void run() {
boolean fo = true;
int Y = 0, X = 0;
JLabel show = new JLabel();
show.setFont(new java.awt.Font("宋体", Font.PLAIN, 33));
jPanel1.add(show);
X = 10 + (int) (Math.random() * 400);
String parameter = list[(int) (Math.random() * list.length)] + "";
Bean bean = new Bean();
bean.setParameter(parameter);
bean.setShow(show);
number.add(bean);
show.setText(parameter);
while (fo) {
// ---------------------数字下移--------------------
show.setBounds(new Rectangle(X, Y += 2, 33, 33));
try {
Thread.sleep(rapidity);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (Y >= 419) {
fo = false;
for (int i = number.size() - 1; i >= 0; i--) {
Bean bn = ((Bean) number.get(i));
if (parameter.equalsIgnoreCase(bn.getParameter())) {
cuowu += 1;
jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu
+ "个");
number.removeElementAt(i);
Music_shibai.play();
break;
}
}
}
}

}
}

class MyListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
String uu = e.getKeyChar() + "";
for (int i = 0; i < number.size(); i++) {
Bean bean = ((Bean) number.get(i));
if (uu.equalsIgnoreCase(bean.getParameter())) {
zhengque += 1;
number.removeElementAt(i);
bean.getShow().setVisible(false);
jLabel2.setText("正确:" + zhengque + "个,错误:" + cuowu + "个");
Music_chenggong.play();
break;
}
}

Musci_anjian.play();
}
}

public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception exception) {
exception.printStackTrace();
}
Frame frame = new Frame();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
}

class Frame1_jButton2_actionAdapter implements ActionListener {
private Frame adaptee;

Frame1_jButton2_actionAdapter(Frame adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.jButton2_actionPerformed(e);
}
}

class Frame1_jButton1_actionAdapter implements ActionListener {
private Frame adaptee;

Frame1_jButton1_actionAdapter(Frame adaptee) {
this.adaptee = adaptee;
}

public void actionPerformed(ActionEvent e) {
adaptee.jButton1_actionPerformed(e);
}
}

class Bean {
String parameter = null;

JLabel show = null;

public JLabel getShow() {
return show;
}

public void setShow(JLabel show) {
this.show = show;
}

public String getParameter() {
return parameter;
}

public void setParameter(String parameter) {
this.parameter = parameter;
}
}


大神们 急求基于eclipse的java小游戏程序的源码,程序不要多复杂啊。像坦克大战,五子棋,扫雷之类的谢谢

import java.util.Scanner;public class Wuziqi {/** * 棋盘 */private final int[][] qipan;/** * 步数 */private int bushu;/** * 构造方法,设置棋盘规格 * @param x * @param y */public Wuziqi(int x, int y) {if (x < 1 || y < 1) {System.out.println("棋盘规格应不小于1,使用默认规格");qipan = new int[9][9];} else {qipan = new int[y][x];}}/** * 游戏开始 */public void play() {int[] zuobiao = null;//如果游戏没有结束while (!end(zuobiao)) {//落子,并取得坐标zuobiao = luozi();//输出棋盘out();}}/** * 输出棋盘和棋子 */private void out() {for (int i = 0; i < qipan.length; i++) {for (int j = 0; j < qipan[i].length; j++) {if (qipan[i][j] == 0) {System.out.print(" +");}else if (qipan[i][j] == -1) {System.out.print(" 白");}else if (qipan[i][j] == 1) {System.out.print(" 黑");}}System.out.println(" ");}}/** * 落子 */private int[] luozi() {int[] zuobiao;bushu++;if (bushu % 2 == 1) {System.out.println("请黑方落子");zuobiao = input();qipan[zuobiao[1]][zuobiao[0]] = 1;}else {System.out.println("请白方落子");zuobiao = input();qipan[zuobiao[1]][zuobiao[0]] = -1;}return zuobiao;}/** * 输入坐标 * @return */private int[] input() {Scanner sc = new Scanner(System.in);System.out.println("请输入x轴坐标");String x = sc.next();System.out.println("请输入y轴坐标");String y = sc.next();//如果没有通过验证,则再次执行input(),递归算法if (!validate(x, y)) {return input();}int int_x = Integer.valueOf(x);int int_y = Integer.valueOf(y);return new int[] {int_x, int_y};}/** * 校验数据 * @param x * @param y * @return */private boolean validate(String x, String y) {Integer int_x = null;Integer int_y = null;//异常处理的方式判断字符串是否是一个整数try {int_x = Integer.valueOf(x);int_y = Integer.valueOf(y);} catch (NumberFormatException e) {System.out.println("坐标格式错误,坐标应为整数");return false;}if (int_x = qipan[0].length || int_y >= qipan.length) {System.out.println("坐标越界");return false;}if (qipan[int_y][int_x] == 0) {return true;} else {System.out.println("坐标上已有棋子");}return false;};/** * 结束条件 * @return */private boolean end(int[] zuobiao) {if (zuobiao == null) {return false;}//计数器//表示棋盘上经过最近落子坐标的4条线上的连续(和最近落子颜色相同的)棋子的个数//如果某条线上连续的棋子大于等于4(加上最近落子本身,大于等于5),则游戏结束,符合五子棋规则int[] jieguo = new int[4];int x = zuobiao[0];int y = zuobiao[1];//定义八个方向final int[][] fangxiang = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};//最近落子的坐标上的棋子颜色int number = qipan[y][x];//搜索最近落子坐标为中心最远4的距离for (int i = 1; i <= 4; i++) {//每次搜索不同的距离都搜索八个方向for (int j = 0; j < fangxiang.length; j++) {//约定如果某个方向为null时,不再搜索这个方向。关键字continue是跳过本次(一次)循环的意思if (fangxiang[j] == null) {continue;}int mubiao_x = x + i * fangxiang[j][0];int mubiao_y = y + i * fangxiang[j][1];//如果搜索坐标相对于棋盘越界,则不再搜索这个方向if (mubiao_y >= qipan.length || mubiao_y = qipan[0].length || mubiao_x < 0) {fangxiang[j] = null;continue;}//如果最近落子坐标上的值等于目标坐标上的值(颜色相同),则计数器上某条线加1//否则认为这个方向没有棋子或有别的颜色的棋子,不再搜索这个方向if (number == qipan[mubiao_y][mubiao_x]) {jieguo[j % 4]++;}else {fangxiang[j] = null;}}}//查看计数器上是否有比3更大的数(查看是否有一方胜出)for (int i : jieguo) {if (i > 3) {System.out.println("游戏结束");if (bushu % 2 == 1) {System.out.println("黑方胜");} else {System.out.println("白方胜");}return true;}}//没有胜出者的情况下,查看棋盘上是否还有空位置,如果有,则游戏可以继续for (int[] arr : qipan) {for (int i : arr) {if (i == 0) {return false;}}}//如果没有空位置,则平局System.out.println("游戏结束,平局");return true;}}

JAVA编程语言是面向对象么?

Java是一门面向对象编程语言。
不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。
Java具有:
简单性
面向对象
分布式
健壮性
安全性
平台独立
可移植性
多线程
动态性
Java可以编写:
桌面应用程序
Web应用程序
分布式系统
嵌入式系统应用程序


安卓app主要用什么编程语言的

安卓App用Java和Kotlin作为开发语言。Google IO 2017宣布了 Kotlin 会成为 Android 官方开发语言。在Kotlin 语言出现之前,几乎所有的安卓应用程序都是使用Java语言编写的。扩展资料Google在今年I/O2017开发者大会中宣布,正式把Kotlin纳入Android程序的一级开发语言(First-classlanguage),并与开发团队JetBrains合组非牟利基金会推广Kotlin。据多间外国媒体报导,这是GoogleI/O开发者大会中引来最多欢呼声的消息。Kotlin将于AndroidStudio3.0得到支持,JetBrians指开发者不用再安装额外元件或担心兼容问题。Kotlin能与Java互通,但拥有Java不支持的功能。Google相信利用Kotlin可使Android程序开发更快捷有趣,但他们补充,此举绝非取代Java和C++的官方支持。

上一篇:安阳招教考试

下一篇:什么工作轻松又赚钱