package wuziqi;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Pan extends JPanel implements MouseListener{
int i=0,j=0;
int row = 15;
// 数组下标
int col = 15;
// 数组上标
String qipan_name = "qipan1.jpg";
String qizi1_name = "c1.png";
String qizi2_name = "c2.png";
int num[][] = new int[row][col];
// 0:标示该位置为空,1:标示红棋子,2:标示黑棋子
boolean canSetqizi = true;
// 定义boolean值,用来判断该位置是否有子
int qizi_num = 0;
// 定义记录落子数
List<PaiHangBang> paihanglist = new ArrayList();
// 定义集合,用来存储排行榜
public void paint(Graphics g){
super.paint(g);
Image img= new ImageIcon("img/"+qipan_name).getImage();
// 调入棋盘图片
g.drawImage(img, 0, 0, 567, 567, this);
// 绘制棋盘
Image c1= new ImageIcon("img/"+qizi1_name).getImage();
Image c2= new ImageIcon("img/"+qizi2_name).getImage();
for(int i = 0;i<num.length;i++){
for(int j = 0;j<num[i].length;j++){
if(num[i][j] == 1)
{
g.drawImage(c1, i*35+20, j*35+20, 35, 35, this);
}
else if(num[i][j] == 2)
{
g.drawImage(c2, i*35+20, j*35+20, 35, 35, this);
}
}
// 重绘棋子
}
// 重载整个界面(防止最小化后原内容丢失)
}
public int[] getLoc(int x,int y) {
int count = 1;
// 定义计数器,用于计算棋子数
int[] wz1 = null;
int[] wz2 = null;
// 定义数组,用来存储危险位置
for(int i =x-1;i>=0;i--){
if(num[i][y] == num[x][y])
{
count++;
}
else
{
if(num[i][y] == 0){
wz1 = new int[]{i,y};
// 获取左边的危险位置坐标
}
break;
}
}
// 左
for(int i =x+1;i<row;i++){
if(num[i][y] == num[x][y])
{
count++;
}else{
if(num[i][y] == 0){
wz2 = new int[]{i,y};
// 获取有变位置危险坐标
}
break;
}
}
// 右
if(count>=3)
{
if(wz1 != null){
return wz1;
// 判断返回左边危险位置
}else if(wz2 != null){
return wz2;
// 判断返回右边危险位置
}else{
return null;
}
}
// 左右
count = 1;
wz1 = null;
wz2 = null;
// 初始化所有参数
for(int j =y-1;j>=0;j--){
if(num[x][j] == num[x][y])
{
count++;
}
else
{
if(num[x][j] == 0){
wz1 = new int[]{x,j};
}
break;
}
}
// 上
for(int j =y+1;j<col;j++){
if(num[x][j] == num[x][y])
{
count++;
}else{
if(num[x][j] == 0){
wz2 = new int[]{x,j};
}
break;
}
}
// 下
if(count>=3)
{
if(wz1 != null){
return wz1;
}else if(wz2 != null){
return wz2;
}else{
return null;
}
}
// 上下
count = 1;
wz1 = null;
wz2 = null;
for(int i =x-1,j =y-1;i>=0&&j>=0;i--,j--){
if(num[i][j] == num[x][y])
{
count++;
}
else
{
if(num[i][j] == 0){
wz1 = new int[]{i,j};
}
break;
}
}
// 左上
for(int i =x+1,j =y+1;i<row&&j<col;i++,j++){
if(num[i][j] == num[x][y])
{
count++;
}else{
if(num[i][j] == 0){
wz2 = new int[]{i,j};
}
break;
}
}
// 右下
if(count>=3)
{
if(wz1 != null){
return wz1;
}else if(wz2 != null){
return wz2;
}else{
return null;
}
}
// 左上右下
count = 1;
wz1 = null;
wz2 = null;
for(int i =x-1,j =y+1;i>=0&&j<col;i--,j++){
if(num[i][j] == num[x][y])
{
count++;
}
else
{
if(num[i][j] == 0){
wz1 = new int[]{i,j};
}
break;
}
}
// 左下
for(int i =x+1,j =y-1;i<row&&j>=0;i++,j--){
if(num[i][j] == num[x][y])
{
count++;
}else{
if(num[i][j] == 0){
wz2 = new int[]{i,j};
}
break;
}
}
// 右上
if(count>=3)
{
if(wz1 != null){
return wz1;
}else if(wz2 != null){
return wz2;
}else{
return null;
}
}
// 左下右上
return null;
}
public boolean iswin(int x,int y){
int count = 1;
for(int i =x-1;i>=0;i--){
if(num[i][y] == num[x][y])
{
count++;
}
else
{
break;
}
}
// 左
for(int i =x+1;i<row;i++){
if(num[i][y] == num[x][y])
{
count++;
}else{
break;
}
}
// 右
if(count>=5)
{
return true;
}
// 左右
count = 1;
for(int j =y-1;j>=0;j--){
if(num[x][j] == num[x][y])
{
count++;
}
else
{
break;
}
}
// 上
for(int j =y+1;j<col;j++){
if(num[x][j] == num[x][y])
{
count++;
}else{
break;
}
}
// 下
if(count>=5)
{
return true;
}
// 上下
count = 1;
for(int i =x-1,j =y-1;i>=0&&j>=0;i--,j--){
if(num[i][j] == num[x][y])
{
count++;
}
else
{
break;
}
}
// 左上
for(int i =x+1,j =y+1;i<row&&j<col;i++,j++){
if(num[i][j] == num[x][y])
{
count++;
}else{
break;
}
}
// 右下
if(count>=5)
{
return true;
}
// 左上右下
count = 1;
for(int i =x-1,j =y+1;i>=0&&j<col;i--,j++){
if(num[i][j] == num[x][y])
{
count++;
}
else
{
break;
}
}
// 左下
for(int i =x+1,j =y-1;i<row&&j>=0;i++,j--){
if(num[i][j] == num[x][y])
{
count++;
}else{
break;
}
}
// 右上
if(count>=5)
{
return true;
}
// 左下右上
return false;
}
// 判断输赢
@Override
public void mouseClicked(MouseEvent e) {
if(canSetqizi){
Graphics g = this.getGraphics();
int checkusersuccess = 0;
// 标示是否落子成功
int x = e.getX();
int y = e.getY();
// 获取鼠标点击的位置
Image c1= new ImageIcon("img/"+qizi1_name).getImage();
int i = (x-25)/35;
int j = (y-75)/35;
if(num[i][j] != 0){
JOptionPane.showMessageDialog(null, "该位置有旗子,请重新落子");
return;
// 判断有子,终止本次事件,进行下次事件触发
}else{
g.drawImage(c1, i*35+20, j*35+20, 35, 35, this);
// 画出玩家落子
num[i][j] = 1;
// 给数组付一个只值,表示该位置有旗子
checkusersuccess = 1;
// 标示量标示
qizi_num++;
// 记录玩家落子步数
}
boolean b=iswin(i,j);
if(b){
JOptionPane.showMessageDialog(null, "你赢了!");
canSetqizi = false;
PaiHangBang ph = new PaiHangBang();
ph.setJushu(paihanglist.size()+1);
ph.setBushu(qizi_num);
ph.setJieguo("win");
paihanglist.add(ph);
return;
}
// 调用boolean判断方法
try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
// 时间间隔:玩家落子后的等待
Random r = new Random();
Image c2 = new ImageIcon("img/"+qizi2_name).getImage();
// 调入黑棋子图片
do{
int[] wz =getLoc(i, j);
if(wz == null){
i = r.nextInt(15);
j = r.nextInt(15);
}else{
i=wz[0];
j=wz[1];
}
// 设置随机的坐标
}while(num[i][j] != 0);
g.drawImage(c2, i*35+20, j*35+20, 35, 35, this);
num[i][j] = 2;
boolean d=iswin(i,j);
if(d){
JOptionPane.showMessageDialog(null, "你输了!");
canSetqizi = false;
PaiHangBang ph = new PaiHangBang();
ph.setJushu(paihanglist.size()+1);
ph.setBushu(qizi_num);
ph.setJieguo("fail");
paihanglist.add(ph);
return;
}
// 随机电脑落子位置;
}
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
主要需求 1、对局双方各执一色棋子。 2、空棋盘开局。 3、玩家(黑棋)先、AI(红棋)后,交替下子,每次只能下一子。 4、棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。 5、黑方的第一枚棋子可下在棋盘任意交叉点上。 6、轮流下子是双方的权利,但允许任何一方放弃下子权,先形成5子连线者获胜。 主要设计 1、由于是单机的游戏,启动游戏后,可直接开始游戏。 2、游戏规则: 对局双方各执一色棋子。 空棋盘开局。 黑先、红后,交替下子,每次只能下一子。 棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。 黑方的第一枚棋子可下在棋盘任意交叉点上。 轮流下子是双方的权利,但允许任何一方放弃下子权,先形成5子连线者获胜。 3、设计排行榜功能 统计局数,步数和结果 4、更换棋盘 可以切换不同的棋盘,下棋更加赏心悦目。 5、更换棋子 可以芀不同的棋子颜色。
资源推荐
资源详情
资源评论
收起资源包目录
wuziqi(1).rar (40个子文件)
wuziqi
REMADE.MD 36B
bin
wuziqi
Wumain$2.class 968B
Wumain$4.class 1KB
Wumain$1.class 665B
Wumain$5.class 872B
Wumain$6.class 1KB
paihangbang.class 958B
Wumain$3.class 1KB
Wumain.class 2KB
pan.class 6KB
img
qipan1.jpg 133KB
qipan5.jpg 154KB
c0.png 29KB
c1.png 35KB
qipan0.jpg 102KB
c2.png 28KB
c8.png 17KB
c7.png 25KB
c6.png 28KB
c5.png 26KB
qipan7.jpg 215KB
qipan4.jpg 102KB
c3.png 25KB
c4.png 31KB
qipan2.jpg 236KB
qipan6.jpg 194KB
qipan3.jpg 191KB
wu.iml 448B
src
wuziqi
Pan.java 8KB
Wumain.java 3KB
PaiHangBang.java 503B
.idea
uiDesigner.xml 9KB
misc.xml 268B
.name 2B
modules.xml 251B
encodings.xml 195B
compiler.xml 168B
workspace.xml 7KB
inspectionProfiles
Project_Default.xml 1KB
profiles_settings.xml 128B
共 40 条
- 1
资源评论
小虚竹
- 粉丝: 12w+
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功