import javax.swing.JOptionPane;
public class DividedBy10v2{
public static void main( String[] args ){
int block[][] = new int[3][3];
int DetermineRow = 0; // The variable assigned for counting rows
int DetermineColumn = 0; // The variable assigned for counting columns
int blockRow,blockColumn;
int score = 0;
String inputRow, inputColumn;
//random a set of number
int randomSet[] = new int[100];
for(int i=0;i<randomSet.length;i++){
randomSet[i] = (int) (Math.random() * 9) + 1;
}
int round = 0 ;//for counting the round of the game
while( true ){
++round;
//print out the title and score
System.out.println( "-------------------------" );
System.out.println( "Divided by 10 - Mini Game" );
System.out.printf( "---- Score:%8d ----\n\n", score );
//show game board
System.out.println( " 0 1 2 " );
for(DetermineRow=0;DetermineRow<block.length;DetermineRow++){
System.out.print( DetermineRow + " ");
for(DetermineColumn=0;DetermineColumn<block.length;DetermineColumn++){
if(block[DetermineRow][DetermineColumn]!=0){
System.out.print( block[DetermineRow][DetermineRow] + " " );
}else{
System.out.print( "_ " );
}
}
System.out.println();
}
//display the coming value
System.out.printf( "Coming value : %d > %d > %d \n\n", randomSet[round], randomSet[(round + 1)], randomSet[(round + 2)] );
//check over checking
if(block[0][0]>0&&block[0][1]>0&&block[0][2]>0){
if(block[1][2]>0&&block[1][1]>0&&block[1][2]>0){
if(block[2][0]>0&&block[2][1]>0&&block[2][2]>0){
System.out.println( "------ Game Over ------" );
//continue check
int ContinueCheck = JOptionPane.showConfirmDialog(null, "Do you want to continue ?", "Continue?", JOptionPane.YES_NO_OPTION);
if( ContinueCheck == JOptionPane.YES_OPTION){
//initialize the game board
for(DetermineRow=0;DetermineRow<block.length;DetermineRow++)
for(DetermineColumn=0;DetermineColumn<block.length;DetermineColumn++)
block[DetermineRow][DetermineColumn]=0;
continue;
}else{if(ContinueCheck == JOptionPane.NO_OPTION){
System.out.println( "-------------------------" );
System.out.println("Good Bye !");
break;}
}
}
}
}
//input value
while(true){
inputRow = JOptionPane.showInputDialog( "The number of row you want to put the number" );
blockRow = Integer.parseInt(inputRow);
inputColumn = JOptionPane.showInputDialog( "The number of column you want to put the number" );
blockColumn = Integer.parseInt(inputColumn);
if(blockRow>=block.length || blockRow<0 || blockColumn>=block.length || blockColumn<0){
JOptionPane.showMessageDialog(null , "The block you want to enter the number does not exist." , "Error" , JOptionPane.ERROR_MESSAGE );
continue;
}else{
if(block[blockRow][blockColumn]!=0){
JOptionPane.showMessageDialog(null , "The block you want to enter the number has been entered an number." , "Error" , JOptionPane.ERROR_MESSAGE );
continue;
}else{
block[blockRow][blockColumn] = randomSet[round];
break;
}
}
}
//score got check
int modSumBlock[] = {-1,-1,-1,-1,-1,-1,-1,-1};//to store the remainder of the sum of 3 block
if(block[0][0] != 0 && block[0][1] != 0 && block[0][2] != 0)
modSumBlock[0] = (block[0][0] + block[0][1] + block[0][2]) % 10;
if(block[1][0] != 0 && block[1][1] != 0 && block[1][2] != 0)
modSumBlock[1] = (block[1][0] + block[1][1] + block[1][2]) % 10;
if(block[2][0] != 0 && block[2][1] != 0 && block[2][2] != 0)
modSumBlock[2] = (block[2][0] + block[2][1] + block[2][2]) % 10;
if(block[0][0] != 0 && block[1][0] != 0 && block[2][0] != 0)
modSumBlock[3] = (block[0][0] + block[1][0] + block[2][0]) % 10;
if(block[0][1] != 0 && block[1][1] != 0 && block[2][1] != 0)
modSumBlock[4] = (block[0][1] + block[1][1] + block[2][1]) % 10;
if(block[0][2] != 0 && block[1][2] != 0 && block[2][2] != 0)
modSumBlock[5] = (block[0][2] + block[1][2] + block[2][2]) % 10;
if(block[0][0] != 0 && block[1][1] != 0 && block[2][2] != 0)
modSumBlock[6] = (block[0][0] + block[1][1] + block[2][2]) % 10;
if(block[0][2] != 0 && block[1][1] != 0 && block[2][0] != 0)
modSumBlock[7] = (block[0][2] + block[1][1] + block[2][0]) % 10;
//all 'if' is used for checking if all block in the same row/column/diagonal are filled in number
//counting how many score got and where should be cleared by 8bit (in decimal)
int scoreCount = 0;
for(int n=0;n<8;n++){
if(modSumBlock[n]==0){
score += 10;
scoreCount += (int) Math.pow(2,n);
}else{
continue;
}
}
//start clear game board
if(scoreCount>=128){
block[0][2] = 0;
block[1][1] = 0;
block[2][0] = 0;
scoreCount -= 128;
}
if(scoreCount>=64){
block[0][0] = 0;
block[1][1] = 0;
block[2][2] = 0;
scoreCount -= 64;
}
if(scoreCount>=32){
block[0][2] = 0;
block[1][2] = 0;
block[2][2] = 0;
scoreCount -= 32;
}
if(scoreCount>=16){
block[0][1] = 0;
block[1][1] = 0;
block[2][1] = 0;
scoreCount -= 16;
}
if(scoreCount>=8){
block[0][0] = 0;
block[1][0] = 0;
block[2][0] = 0;
scoreCount -= 8;
}
if(scoreCount>=4){
block[2][0] = 0;
block[2][1] = 0;
block[2][2] = 0;
scoreCount -= 4;
}
if(scoreCount>=2){
block[1][0] = 0;
block[1][1] = 0;
block[1][2] = 0;
scoreCount -= 2;
}
if(scoreCount>=1){
block[0][0] = 0;
block[0][1] = 0;
block[0][2] = 0;
scoreCount -= 1;
}
}
}
}
The above code is a mini-game I made which consists of a 3x3 game board. Integer values range from 1-9 and are generated by the system and stored in an array. If all the values have been used, it will start again from the first element of the array. In each round, the next three coming numbers are shown to player, so the player know the value that is going to put not only in the current round, but also the coming two rounds.
Note that each position in the game board allows only one value. The program should check if the input position is already allocated. If so, player should be prompted to input again. At the end of a round, the system will check the three rows, the three columns and the two diagonals of the game board; if the sum of a set is divisible by 10, the sum can be added to the score and values can be removed from the game board. The empty slot is counted as 0, the game is over when the game board is full.
I want to simplify the code as it looks too messy and complicated. Is there a way to shorten the code using other methods? How do I also allow players to choose from different size of game board (e.g. starting of the game it will ask players if they want to play 3vs3 4vs4 or 5vs5)? You may try compile the code and play the game to see how it works.