为了学习J2EE的技术,现在在恶补java se的东西,先从最基础的学起,教材选了李刚的那本《疯狂java讲义》
第一章是java语言概述,介绍了java语言的特点,java环境的搭建和一些java程序的基本原则。
第二章大概介绍了一下oop,这部分有uml语言介绍,我大略过了一遍,看不太懂(囧)。
第三章 数据类型和运算符,因为我有点c的基础,所以这章看的也很快。
第四章 流程控制和数组,这章讲的非常详细,把数组底层的存储通过图片介绍一下,但是我感觉还是似懂非懂的。
第四章的课后习题3.编写一个控制台的五子棋游戏
我花了半天时间写了一个,电脑的下法是随机的。
import java.io.*;
public class Gobang
{
private String[][] board;
private static int BOARD_SIZE=15;
//棋盘初始化,大小设定为15
private void initBoard()
{
board=new String[BOARD_SIZE][BOARD_SIZE];
for(int i=0;i<BOARD_SIZE;i++)
{
for(int j=0;j<BOARD_SIZE;j++)
{
board[i][j]="╋";
}
}
}
//打印棋盘
private void printBoard()
{
// for(int i=1;i<=BOARD_SIZE;i++)
// System.out.print("一");
// System.out.println();
for(int i=0;i<BOARD_SIZE;i++)
{
for(int j=0;j<BOARD_SIZE;j++)
{
System.out.print(board[i][j]);
}
System.out.println();
}
}
//判断xpos,ypos处的子是否连成5个,是则返回ture,否返回false
public boolean isWin(int xpos,int ypos,String chesstype)
{
int sum=1;
int i;
int j;
//横向判断
i=xpos+1;
while(i>0&&i<BOARD_SIZE&&i<=xpos+4)
{
if(board[ypos-1][i-1]==chesstype)
sum++;
else
break;
i++;
}
i=xpos-1;
while(i>0&&i<BOARD_SIZE&&i>=xpos-4)
{
if(board[ypos-1][i-1]==chesstype)
sum++;
else
break;
i--;
}
if(sum==5)
return true;
sum=1;
//竖向判断
i=ypos+1;
while(i>0&&i<BOARD_SIZE&&i<=ypos+4)
{
if(board[i-1][xpos-1]==chesstype)
sum++;
else
break;
i++;
}
i=ypos-1;
while(i>0&&i<BOARD_SIZE&&i>=ypos-4)
{
if(board[i-1][xpos-1]==chesstype)
sum++;
else
break;
i--;
}
if(sum==5)
return true;
sum=1;
//右斜判断
i=xpos+1;
j=ypos+1;
while(i>0&&i<BOARD_SIZE&&i<=xpos+4&&j>0&&j<BOARD_SIZE&&j<=xpos+4)
{
if(board[j-1][i-1]==chesstype)
sum++;
else
break;
i++;
j++;
}
i=xpos-1;
j=ypos-1;
while(i>0&&i<BOARD_SIZE&&i>=xpos-4&&j>0&&j<BOARD_SIZE&&j>=xpos-4)
{
if(board[j-1][i-1]==chesstype)
sum++;
else
break;
i--;
j--;
}
if(sum==5)
return true;
sum=1;
//左斜判断
i=xpos-1;
j=ypos+1;
while(i>0&&i<BOARD_SIZE&&i>=xpos-4&&j>0&&j<BOARD_SIZE&&j<=xpos+4)
{
if(board[j-1][i-1]==chesstype)
sum++;
else
break;
i--;
j++;
}
i=xpos+1;
j=ypos-1;
while(i>0&&i<BOARD_SIZE&&i>=xpos-4&&j>0&&j<BOARD_SIZE&&j<=xpos+4)
{
if(board[j-1][i-1]==chesstype)
sum++;
else
break;
i++;
j--;
}
if(sum==5)
return true;
return false;
}
public static void main(String[] args) throws Exception
{
Gobang gb=new Gobang();
gb.initBoard();
gb.printBoard();
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String inputStr=null;
System.out.println("请输入坐标(x,y):");
while((inputStr=br.readLine())!=null)
{
String[] posStrArr=inputStr.split(",");
int xPos=Integer.parseInt(posStrArr[0]);
int yPos=Integer.parseInt(posStrArr[1]);
if(!(xPos>=0&&xPos<=BOARD_SIZE)||!(yPos>=0&&yPos<=BOARD_SIZE))
{
System.out.println("输入不合法,请重新输入坐标:");
continue;
}
else if(gb.board[yPos-1][xPos-1]=="●"||gb.board[yPos-1][xPos-1]=="○")
{
System.out.println("不能重复下子,请重新输入坐标:");
continue;
}
else{
gb.board[yPos-1][xPos-1]="●";
}
int cxPos=(int)(Math.random()*BOARD_SIZE);
int cyPos=(int)(Math.random()*BOARD_SIZE);
// System.out.println(cxPos);
// System.out.println(cyPos);
while(gb.board[cyPos][cxPos]=="●"||gb.board[cyPos][cxPos]=="○")
{
cxPos=(int)(Math.random()*BOARD_SIZE);
cyPos=(int)(Math.random()*BOARD_SIZE);
}
gb.board[cyPos][cxPos]="○";
gb.printBoard();
if(gb.isWin(xPos,yPos,"●"))
{
System.out.println("You Win!");
break;
}
else if(gb.isWin(cxPos+1,cyPos+1,"○"))
{
System.out.println("Computer Win!");
break;
}
System.out.println("请输入坐标(x,y):");
}
}
}