Dim a1 As Integer, a2, a3 As Integer
Call ks
a1 = i
Label4.Caption = a1
i = 0
Call ks
a2 = i
Label5.Caption = a2
i = 0
Call ks
a3 = i
Label6.Caption = a3
i = 0
If a1 + a2 + a3 <= 10 Then
rs = 1
Label1.ForeColor = vbRed
Else
rs = 0
Label2.ForeColor = vbRed
End If
Private Sub ks()
i = Round(Rnd * 6 + 1, 0)
If i >6 Then
i = 6
End If
End Sub
具拆灶体的自己写,不好意思
我自己写了一个简单的程序,可选择落子的先后顺序,重新开始,最后判断某一方是否缓枝为五子连珠。选择落子的扰李敏先后顺序,只需定义一个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 ArrayList<Ellipse2D>squares = new ArrayList<Ellipse2D>()
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 ArrayList<Ellipse2D>()
current = null
isBlack = first
isOver = false
position = new int[n + 1][n + 1]
for(int i = 0i <= ni++)
for(int j = 0j <= nj++)
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 = 0i <= ni++){
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 = 0i <= ni++) {
for (int j = 0j <= nj++) {
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 = ai <= bi++)
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 = ai <= bi++)
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 = 1i <= 4 &&a >0 &&b >0i++)
if (state[a - 1][b - 1] == (isBlack ? 1: -1)) {
n++a--b--
} else break
for (int i = 1i <= 4 &&x <state.length - 1 &&y <state[0].length - 1i++)
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 = 1i <= 4 &&a >0 &&b <state[0].length - 1i++)
if (state[a - 1][b + 1] == (isBlack ? 1: -1)) {
n++a--b++
} else break
for (int i = 1i <= 4 &&x <state.length - 1 &&y >0i++)
if (state[x + 1][y - 1] == (isBlack ? 1: -1)) {
n++x++y--
} else break
if (n >= 5) return true
return false
}
}
不是很完善,希望对你有帮助。
#include "iostream"#include <iomanip>
using namespace std
const int M=20
const int N=20
int main()
{
char weizhi[M][N]
int k,i,j,x,y,flag=0
cout<<"欢迎使用简易双人对战五子棋游戏"<<endl
cout<<"五子棋棋谱如下:"<<endl
for(k=0k<=Nk++)
cout<<setw(3)<<setfill(' ')<<k
cout<<endl
for(i=1i<=Mi++)
{
cout<<setw(3)<<setfill(' ')<<i
for(j=1j<=Nj++)
{
weizhi[i][j]='-'
cout<<setw(3)<<setfill(' ')<<weizhi[i][j]
}
cout<<endl
}
while(flag==0)
{
//红方落子
cout<<"请红方输入落子位衡培手置:"<<endl
loop1:
cout<<"请输入落子的行数:"
cin>>x
cout<<"请输咐嫌入落子的列数:"
cin>>y
if(weizhi[x][y]=='-')
{
weizhi[x][y]='*'
for(k=0k<中清=Nk++)
cout<<setw(3)<<setfill(' ')<<k
cout<<endl
for(i=1i<=Mi++)
{
cout<<setw(3)<<setfill(' ')<<i
for(j=1j<=Nj++)
cout<<setw(3)<<setfill(' ')<<weizhi[i][j]
cout<<endl
}
}
else
{
cout<<"你不能在这落子,请重新选择落子位置:"<<endl
goto loop1
}
//判断胜利
for(i=1i<=M-4i++)
{
for(j=1j<=N-4j++)
{
if(weizhi[i][j]=='*' &&weizhi[i][j+1]=='*' &&weizhi[i][j+2]=='*' &&weizhi[i][j+3]=='*' &&weizhi[i][j+4]=='*')
{
cout<<"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"<<endl
flag=1
break
}
if(weizhi[i][j]=='*' &&weizhi[i+1][j]=='*' &&weizhi[i+2][j]=='*' &&weizhi[i+3][j]=='*' &&weizhi[i+4][j]=='*')
{
cout<<"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"<<endl
flag=1
break
}
if(weizhi[i][j]=='*' &&weizhi[i+1][j+1]=='*' &&weizhi[i+2][j+2]=='*' &&weizhi[i+3][j+3]=='*' &&weizhi[i+4][j+4]=='*')
{
cout<<"恭喜红方获得简易双人对战五子棋的胜利!耶~~~"<<endl
flag=1
break
}
if(flag==1)
break
}
}
//蓝方落子
cout<<"请蓝方输入落子位置:"<<endl
loop2:
cout<<"请输入落子的行数:"
cin>>x
cout<<"请输入落子的列数:"
cin>>y
if(weizhi[x][y]=='-')
{
weizhi[x][y]='#'
for(k=0k<=Nk++)
cout<<setw(3)<<setfill(' ')<<k
cout<<endl
for(i=1i<=Mi++)
{
cout<<setw(3)<<setfill(' ')<<i
for(j=1j<=Nj++)
cout<<setw(3)<<setfill(' ')<<weizhi[i][j]
cout<<endl
}
}
else
{
cout<<"你不能在这落子,请重新选择落子位置:"
goto loop2
}
//判断胜利
for(i=1i<=M-4i++)
{
for(j=1j<=N-4j++)
{
if(weizhi[i][j]=='#' &&weizhi[i][j+1]=='#' &&weizhi[i][j+2]=='#' &&weizhi[i][j+3]=='#' &&weizhi[i][j+4]=='#')
{
cout<<"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"<<endl
flag=1
break
}
if(weizhi[i][j]=='#' &&weizhi[i+1][j]=='#' &&weizhi[i+2][j]=='#' &&weizhi[i+3][j]=='#' &&weizhi[i+4][j]=='#')
{
cout<<"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"<<endl
flag=1
break
}
if(weizhi[i][j]=='#' &&weizhi[i+1][j+1]=='#' &&weizhi[i+2][j+2]=='#' &&weizhi[i+3][j+3]=='#' &&weizhi[i+4][j+4]=='#')
{
cout<<"恭喜蓝方获得简易双人对战五子棋的胜利!耶~~~"<<endl
flag=1
break
}
if(flag==1)
break
}
}
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)