「java围棋棋盘」java 围棋
本篇文章给大家谈谈java围棋棋盘,以及java 围棋对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
JAVA围棋棋盘等基础题
第一个:用Integer类的parseInt方法:
如:int a=parseInt("1111111","2");那么a就是127了。(好像是parseInt("2","1111111");自己试试)
第二个:
static final int huLu=7.5;//中元美元汇率
int a=100*huLu
System.out.println("¥"+Integer.toString(a));
第三个:做一个围棋棋盘的图片,加入程序就是了。
java编程问题
我自己写了一个简单的程序,可选择落子的先后顺序,重新开始,最后判断某一方是否为五子连珠。选择落子的先后顺序,只需定义一个boolean变量,每次切换取其反值;重制棋盘或重新开始就把棋盘重新绘制一遍;判断某一方是否为五子连珠,就判断某方的每个棋子,以它为中心与之紧邻的水平,垂直,左斜,右斜四个方向是否有五子连珠。用一个二维数组position存储棋盘上的棋子情况,position[x][y]=1,0,-1分别表示棋盘的第x行第y列下有黑子,无子,白子。源代码如下:
package com.test;
import java.awt.*;
import java.util.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;
public class MyFiveChess {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;
f.setSize(screenWidth / 2, screenHeight / 2);
f.setLocation(screenWidth / 4, screenHeight / 4);
f.setTitle("FiveChess");
MyPanel panel = new MyPanel();
f.add(panel);
f.setVisible(true);
}
}
class MyPanel extends JPanel {
private static final int SIDELENGTH = 10;
private ArrayListEllipse2D squares = new ArrayListEllipse2D();;
private Ellipse2D current = null;
JButton jb = new JButton("重新开始");
JButton jb2 = new JButton("切换先手");
boolean isBlack;
boolean first = true;
boolean isOver;
int l = 16;
int n = 20;
int bx = 20;
int by = 20;
int[][] position = new int[n + 1][n + 1];
public MyPanel(){
jb.addActionListener(new MyActionHandler());
jb2.addActionListener(new MyActionHandler());
addMouseListener(new MouseHandler());
addMouseMotionListener(new MouseMotionHandler());
add(jb);
add(jb2);
}
public void initMyPenal(){
squares = new ArrayListEllipse2D();
current = null;
isBlack = first;
isOver = false;
position = new int[n + 1][n + 1];
for(int i = 0; i = n; i++)
for(int j = 0; j = n; j++)
position[i][j] = 0;
repaint();
}
public void paint(Graphics g) {
super.paint(g);
jb.setLocation(400,150);
jb2.setLocation(400,200);
g.setColor(Color.RED);
g.setFont(new Font(null, Font.BOLD, 20));
g.drawString((first ? "黑" : "白")+"方下子", 400, 100);
g.setColor(new Color(240, 210, 120));
g.fillRect(bx - l, by - l, l * (n + 2), l * (n + 2));
g.setColor(Color.BLACK);
for (int i = 0; i = n; i++){
g.drawLine(bx, by + i * l, bx + l * n, by + i * l);
g.drawLine(bx + i * l, by, bx + i * l, by + l * n);
}
Graphics2D g2 = (Graphics2D)g;
isBlack = first;
for(Ellipse2D r : squares){
g2.setColor(isBlack ? Color.BLACK : Color.WHITE);
g2.fill(r);
isBlack = !isBlack;
}
if(isOver) {
g.setColor(Color.RED);
g.setFont(new Font("TimesRoman", Font.BOLD, 60));
g.drawString((isBlack ? "白" : "黑") + "方获胜", 120, 200);
}
}
public Ellipse2D find(Point2D p){
for(Ellipse2D r : squares)
if(r.contains(p))
return r;
return null;
}
public void add(Point2D p) {
if(p.getX() bx - l / 2 p.getX() bx + l * n + l / 2
p.getY() by - l / 2 p.getY() by + l * n + l / 2){
for (int i = 0; i = n; i++) {
for (int j = 0; j = n; j++) {
if(position[i][j] == 1 || position[i][j] == -1) continue;
current = new Ellipse2D.Double(bx + j * l - l / 2,
by + i * l - l / 2, l, l);
if (current.contains(p)) {
position[i][j] = isBlack ? 1 : -1;
isOver = isWin(position, isBlack, i , j) ? true : false;
current.setFrame(bx + j * l - l / 2 + 1,
by + i * l - l / 2 + 1, l - 2, l - 2);
squares.add(current);
repaint();
return;
}
}
}
}
}
private class MouseHandler extends MouseAdapter{
public void mousePressed(MouseEvent event){
if(isOver) return;
current = find(event.getPoint());
if(current == null)
add(event.getPoint());
}
}
private class MyActionHandler implements ActionListener{
public void actionPerformed(ActionEvent e) {
String cmd=e.getActionCommand();
if("重新开始".equals(cmd)){
initMyPenal();
}else if("切换先手".equals(cmd)){
initMyPenal();
first=!first;
}
}
}
private class MouseMotionHandler implements MouseMotionListener{
public void mouseMoved(MouseEvent event){
Rectangle r = new Rectangle(bx - l, by - l, l * (n + 2), l * (n + 2));
if(r.contains(event.getPoint())){
setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
}else setCursor(Cursor.getDefaultCursor());
}
public void mouseDragged(MouseEvent event){}
}
public boolean isWin(int[][] state, boolean isBlack, int x, int y) {//四个方向中是否有五子连珠
return isCzWin(state, isBlack, x, y)
|| isSpWin(state, isBlack, x, y)
|| isYxWin(state, isBlack, x, y)
|| isZxWin(state, isBlack, x, y);
}
public boolean isCzWin(int[][] state, boolean isBlack, int x, int y) {//判断垂直方向是否有五子连珠
int n = 0;
int a = (x = 4 ? x - 4 : 0);
int b = (x = state.length - 5 ? x + 4 : state.length - 1);
for (int i = a; i = b; i++)
if (state[i][y] == (isBlack ? 1: -1)) {
if (++n == 5) return true;
} else n = 0;
return false;
}
public boolean isSpWin(int[][] state, boolean isBlack, int x, int y) {//判断水平方向是否有五子连珠
int n = 0;
int a = (y = 4 ? y - 4 : 0);
int b = (y = state[0].length - 5 ? y + 4 : state[0].length - 1);
for (int i = a; i = b; i++)
if (state[x][i] == (isBlack ? 1: -1)) {
if (++n == 5) return true;
} else n = 0;
return false;
}
public boolean isZxWin(int[][] state, boolean isBlack, int x, int y) {//判断左斜方向是否有五子连珠
int n = 1, a = x, b = y;
for (int i = 1; i = 4 a 0 b 0; i++)
if (state[a - 1][b - 1] == (isBlack ? 1: -1)) {
n++; a--; b--;
} else break;
for (int i = 1; i = 4 x state.length - 1 y state[0].length - 1; i++)
if (state[x + 1][y + 1] == (isBlack ? 1: -1)) {
n++; x++; y++;
} else break;
if (n = 5) return true;
return false;
}
public boolean isYxWin(int[][] state, boolean isBlack, int x, int y) {//判断右斜方向是否有五子连珠
int n = 1, a = x, b = y;
for (int i = 1; i = 4 a 0 b state[0].length - 1; i++)
if (state[a - 1][b + 1] == (isBlack ? 1: -1)) {
n++; a--; b++;
} else break;
for (int i = 1; i = 4 x state.length - 1 y 0; i++)
if (state[x + 1][y - 1] == (isBlack ? 1: -1)) {
n++; x++; y--;
} else break;
if (n = 5) return true;
return false;
}
}
不是很完善,希望对你有帮助。
java 实现围棋盘每个格子装一颗粮食,以后每个格子增加一倍到最后总共有多少粮食。
第一个格子是2的0次方,第二个是2的1次方,第3个是2的2次方,。。。
格子数cellNumber就会有2^0+2^1+2^2+...+2^(cellNumber-1)个。楼上的那个不行,int在内存中占32位,棋盘数有324个,所以会溢出。
int cellNumber=324;
BitSet bits = new BitSet();
bits.set(0, cellNumber);
System.out.println(new BigInteger(1,bits.toByteArray()).toString());
java canvas画围棋棋盘
/*首先,
应用程序必须为 Canvas 类创建子类,以获得有用的功能(如创建自定义组件)。必须重写 paint 方法,以便在 canvas 上执行自定义图形。
以下是代码
*/
import java.awt.Canvas;
import java.awt.Font;
import javax.swing.*;
public class P {
public static void main(String[] args){
JFrame jf=new JFrame();
jf.setVisible(true);
jf.setLocation(200,200);
jf.setSize(300, 300);
jf.add(new a());
}
}
class a extends Canvas{
public void paint(java.awt.Graphics g){
int j=0,i=0;
while(i6){//for循环也可以
g.drawLine(0, 20*i, 100, 20*i);//横线,y坐标不变
g.drawLine(20*i, 0, 20*i, 100);
i++;
}
g.drawString("楚河汉界", 20, 130);
i=0;
while(i6){
g.drawLine(0,160+20*i, 100, 160+20*i);
g.drawLine(20*i, 160, 20*i, 260);
i++;}
}
}
虽然画出来了,但我想简化两个循环,如下:
class a extends Canvas{
public void paint(java.awt.Graphics g){
int j=0,i=0;
do{//用for循环也可以
if(j==0){
g.drawLine(0, 20*i, 100, 20*i);//横线
g.drawLine(20*i, 0, 20*i, 100);
}
else{
g.drawLine(0,160+20*i, 100, 160+20*i);
g.drawLine(20*i, 160, 20*i, 260);
}
if(i==5j==0){j=1;i=-1;g.drawString("楚河汉界", 20, 130);}//因为判断第一次之后,i会被加一次,而这次是没有画线的,会导致少了一条线,所以i=-1
i++;
}while(i6);
}
}
java围棋棋盘的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 围棋、java围棋棋盘的信息别忘了在本站进行查找喔。
发布于:2023-01-16,除非注明,否则均为
原创文章,转载请注明出处。