import java.awt.event.*
import java.applet.*
import java.io.*
public class testframe extends Frame implements ActionListener
{
Button b1
Panel p1
Label text1
TextField text2
TextArea text3
int num[]
int i
String str
int times=0
int A,B
public testframe(String str)
{
b1=new Button("确定")
p1=new Panel()
text1=new Label("输入四位塌茄整数:")
text2=new TextField(10)
text3=new TextArea(10,10)
p1.setLayout(null)
p1.setBackground(Color.GRAY)
setSize(300,300)
setVisible(true)
b1.setBackground(Color.BLUE)
b1.setForeground(Color.WHITE)
b1.setSize(80,30)
p1.add(text1)
p1.add(text2)
p1.add(text3)
p1.add(b1)
text1.setBounds(0,0,100,20)
text2.setBounds(0,2*text1.getBounds().height,150,20)
text3.setBounds(0,3*text1.getBounds().height,150,150)
b1.setBounds(200,50,60,30)
add(p1)
b1.addActionListener(this)
addWindowListener(new shut())
}
public void rand()
{ num=new int[10]
for(i=0i<4i++)
{
num[i]=(int)(Math.random()*10)
int j=0
while(j<i)
{if(num[j]==num[i])
{num[i]=(int)(Math.random()*10)
continue
}
j++
}
}
}
public void compair()
{
int x,m,n
x=Integer.parseInt(text2.getText())
A=0B=0
for(m=3m>-1m--){
for(n=0n<4n++){
if((int)(x/Math.pow(10,m))==num[n])
{
if(m+n==3)
A++
else
B++
}
}
x=x-(int)(x/Math.pow(10,m))*(int)(Math.pow(10,m))
}
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
if(times<5){
if(Integer.parseInt(text2.getText())<1000||Integer.parseInt(text2.getText())>9999)
text2.setText("输入数字不合法")
else
{ if(A==4)
text2.setText("猜对了")
times++
compair()
text3.append("第")
text3.append(String.valueOf(times))
text3.append("猜的结散坦果是:")
text3.append(String.valueOf(A))text3.append("A")
text3.append(String.valueOf(B))text3.append("B")
text3.append("\n")
}
}
else
{
text3.setText("冲衫桐超过5次,重新开始.\n")
times=0
rand()
}
}
public static void main(String[] args)
{
new testframe("窗口程序")
}
}
class shut extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0)
}
}
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 = 0i <qipan.lengthi++) {
for (int j = 0j <qipan[i].lengthj++) {
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 <0 || int_y <0 || 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 = 1i <= 4i++) {
//每次搜索不同的距离都搜索八个方向
for (int j = 0j <fangxiang.lengthj++) {
//约定如果某个方向为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 <0 || mubiao_x >= 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
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)