import javax.swing.*;
創(chuàng)新互聯(lián)公司作為成都網(wǎng)站建設(shè)公司,專注成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì),有關(guān)成都定制網(wǎng)站方案、改版、費(fèi)用等問題,行業(yè)涉及成都混凝土攪拌機(jī)等多個(gè)領(lǐng)域,已為上千家企業(yè)服務(wù),得到了客戶的尊重與認(rèn)可。
import java.awt.*;
import java.awt.event.*;
public class lianliankan implements ActionListener
{
JFrame mainFrame; //主面板
Container thisContainer;
JPanel centerPanel,southPanel,northPanel; //子面板
JButton diamondsButton[][] = new JButton[6][5];//游戲按鈕數(shù)組
JButton exitButton,resetButton,newlyButton; //退出,重列,重新開始按鈕
JLabel fractionLable=new JLabel("0"); //分?jǐn)?shù)標(biāo)簽
JButton firstButton,secondButton; //分別記錄兩次被選中的按鈕
int grid[][] = new int[8][7];//儲(chǔ)存游戲按鈕位置
static boolean pressInformation=false; //判斷是否有按鈕被選中
int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戲按鈕的位置坐標(biāo)
int i,j,k,n;//消除方法控制
public void init(){
mainFrame=new JFrame("JKJ連連看");
thisContainer = mainFrame.getContentPane();
thisContainer.setLayout(new BorderLayout());
centerPanel=new JPanel();
southPanel=new JPanel();
northPanel=new JPanel();
thisContainer.add(centerPanel,"Center");
thisContainer.add(southPanel,"South");
thisContainer.add(northPanel,"North");
centerPanel.setLayout(new GridLayout(6,5));
for(int cols = 0;cols 6;cols++){
for(int rows = 0;rows 5;rows++ ){
diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1]));
diamondsButton[cols][rows].addActionListener(this);
centerPanel.add(diamondsButton[cols][rows]);
}
}
exitButton=new JButton("退出");
exitButton.addActionListener(this);
resetButton=new JButton("重列");
resetButton.addActionListener(this);
newlyButton=new JButton("再來一局");
newlyButton.addActionListener(this);
southPanel.add(exitButton);
southPanel.add(resetButton);
southPanel.add(newlyButton);
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())));
northPanel.add(fractionLable);
mainFrame.setBounds(280,100,500,450);
mainFrame.setVisible(true);
}
public void randomBuild() {
int randoms,cols,rows;
for(int twins=1;twins=15;twins++) {
randoms=(int)(Math.random()*25+1);
for(int alike=1;alike=2;alike++) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=randoms;
}
}
}
public void fraction(){
fractionLable.setText(String.valueOf(Integer.parseInt(fractionLable.getText())+100));
}
public void reload() {
int save[] = new int[30];
int n=0,cols,rows;
int grid[][]= new int[8][7];
for(int i=0;i=6;i++) {
for(int j=0;j=5;j++) {
if(this.grid[i][j]!=0) {
save[n]=this.grid[i][j];
n++;
}
}
}
n=n-1;
this.grid=grid;
while(n=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
while(grid[cols][rows]!=0) {
cols=(int)(Math.random()*6+1);
rows=(int)(Math.random()*5+1);
}
this.grid[cols][rows]=save[n];
n--;
}
mainFrame.setVisible(false);
pressInformation=false; //這里一定要將按鈕點(diǎn)擊信息歸為初始
init();
for(int i = 0;i 6;i++){
for(int j = 0;j 5;j++ ){
if(grid[i+1][j+1]==0)
diamondsButton[i][j].setVisible(false);
}
}
}
public void estimateEven(int placeX,int placeY,JButton bz) {
if(pressInformation==false) {
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
pressInformation=true;
}
else {
x0=x;
y0=y;
fristMsg=secondMsg;
firstButton=secondButton;
x=placeX;
y=placeY;
secondMsg=grid[x][y];
secondButton=bz;
if(fristMsg==secondMsg secondButton!=firstButton){
xiao();
}
}
}
public void xiao() { //相同的情況下能不能消去。仔細(xì)分析,不一條條注釋
if((x0==x (y0==y+1||y0==y-1)) || ((x0==x+1||x0==x-1)(y0==y))){ //判斷是否相鄰
remove();
}
else{
for (j=0;j7;j++ ) {
if (grid[x0][j]==0){ //判斷第一個(gè)按鈕同行哪個(gè)按鈕為空
if (yj) { //如果第二個(gè)按鈕的Y坐標(biāo)大于空按鈕的Y坐標(biāo)說明第一按鈕在第二按鈕左邊
for (i=y-1;i=j;i-- ){ //判斷第二按鈕左側(cè)直到第一按鈕中間有沒有按鈕
if (grid[x][i]!=0) {
k=0;
break;
}
else{ k=1; } //K=1說明通過了第一次驗(yàn)證
}
if (k==1) {
linePassOne();
}
}
if (yj){ //如果第二個(gè)按鈕的Y坐標(biāo)小于空按鈕的Y坐標(biāo)說明第一按鈕在第二按鈕右邊
for (i=y+1;i=j ;i++ ){ //判斷第二按鈕左側(cè)直到第一按鈕中間有沒有按鈕
if (grid[x][i]!=0){
k=0;
break;
}
else { k=1; }
}
if (k==1){
linePassOne();
}
}
if (y==j ) {
linePassOne();
}
}
if (k==2) {
if (x0==x) {
remove();
}
if (x0x) {
for (n=x0;n=x-1;n++ ) {
if (grid[n][j]!=0) {
k=0;
break;
}
if(grid[n][j]==0 n==x-1) {
remove();
}
}
}
if (x0x) {
for (n=x0;n=x+1 ;n-- ) {
if (grid[n][j]!=0) {
k=0;
break;
}
if(grid[n][j]==0 n==x+1) {
remove();
}
}
}
}
}
for (i=0;i8;i++ ) { //列
if (grid[i][y0]==0) {
if (xi) {
for (j=x-1;j=i ;j-- ) {
if (grid[j][y]!=0) {
k=0;
break;
}
else { k=1; }
}
if (k==1) {
rowPassOne();
}
}
if (xi) {
for (j=x+1;j=i;j++ ) {
if (grid[j][y]!=0) {
k=0;
break;
}
else { k=1; }
}
if (k==1) {
rowPassOne();
}
}
if (x==i) {
rowPassOne();
}
}
if (k==2){
if (y0==y) {
remove();
}
if (y0y) {
for (n=y0;n=y-1 ;n++ ) {
if (grid[i][n]!=0) {
k=0;
break;
}
if(grid[i][n]==0 n==y-1) {
remove();
}
}
}
if (y0y) {
for (n=y0;n=y+1 ;n--) {
if (grid[i][n]!=0) {
k=0;
break;
}
if(grid[i][n]==0 n==y+1) {
remove();
}
}
}
}
}
}
}
public void linePassOne(){
if (y0j){ //第一按鈕同行空按鈕在左邊
for (i=y0-1;i=j ;i-- ){ //判斷第一按鈕同左側(cè)空按鈕之間有沒按鈕
if (grid[x0][i]!=0) {
k=0;
break;
}
else { k=2; } //K=2說明通過了第二次驗(yàn)證
}
}
if (y0j){ //第一按鈕同行空按鈕在與第二按鈕之間
for (i=y0+1;i=j ;i++){
if (grid[x0][i]!=0) {
k=0;
break;
}
else{ k=2; }
}
}
}
public void rowPassOne(){
if (x0i) {
for (j=x0-1;j=i ;j-- ) {
if (grid[j][y0]!=0) {
k=0;
break;
}
else { k=2; }
}
}
if (x0i) {
for (j=x0+1;j=i ;j++ ) {
if (grid[j][y0]!=0) {
k=0;
break;
}
else { k=2; }
}
}
}
public void remove(){
firstButton.setVisible(false);
secondButton.setVisible(false);
fraction();
pressInformation=false;
k=0;
grid[x0][y0]=0;
grid[x][y]=0;
}
public void actionPerformed(ActionEvent e) {
if(e.getSource()==newlyButton){
int grid[][] = new int[8][7];
this.grid = grid;
randomBuild();
mainFrame.setVisible(false);
pressInformation=false;
init();
}
if(e.getSource()==exitButton)
System.exit(0);
if(e.getSource()==resetButton)
reload();
for(int cols = 0;cols 6;cols++){
for(int rows = 0;rows 5;rows++ ){
if(e.getSource()==diamondsButton[cols][rows])
estimateEven(cols+1,rows+1,diamondsButton[cols][rows]);
}
}
}
public static void main(String[] args) {
lianliankan llk = new lianliankan();
llk.randomBuild();
llk.init();
}
}
一個(gè)方法最優(yōu)行數(shù)限定在50-80行之間。一個(gè)方法不要超過50行,太多行數(shù)可讀性很差。一個(gè)Java代碼超過幾千甚至過萬(wàn),要考慮一些代碼優(yōu)化方式。
以1000行為準(zhǔn),超過千行就要考慮類拆分了。
對(duì)于經(jīng)常使用的java類,代碼行數(shù)應(yīng)該盡可能的少,這樣能減少java類的加載時(shí)間,減少內(nèi)存頻繁占用和回收。如果類過大,java類加載會(huì)耗時(shí)并且占用內(nèi)存大。容易引起內(nèi)存回收。
如果前期準(zhǔn)備得當(dāng),設(shè)計(jì),建模合理。一般來說,每個(gè)類的代碼就不會(huì)很多,幾百行。很早之前看過有前輩說,300行之內(nèi)。
你的分給的太多了,1000千行代碼,給5分就可以了。
import java.io.*;
public class HaHa {
public static void main(String[] args) throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("public class Test {\n");
sb.append("\tpublic static void main(String[] args) {\n");
for(int i = 0; i 1000; i++) {
sb.append("\t\tSystem.out.println(\"\u7f8e\u6b7b\u4f60\u4e86\uff0c50\u5206\u63621000\u884c\u4ee3\u7801\uff01\");\n");
}
sb.append("\t}\n");
sb.append("}\n");
FileWriter out = new FileWriter("Test.java");
out.write(sb.toString());
out.close();
}
}
這個(gè)需要建立一個(gè)數(shù)據(jù)庫(kù)和配置數(shù)據(jù)源才能夠正常保存游戲游戲記錄
如果沒有數(shù)據(jù)庫(kù)的話,執(zhí)行起來沒有問題,
但是在猜中之后,數(shù)據(jù)不能保存
而且會(huì)報(bào)跟數(shù)據(jù)庫(kù)相關(guān)的錯(cuò)誤。。。
不過對(duì)于初學(xué)來說,足夠了。。。
//猜數(shù)字游戲
//版本1.1
//作者:lymeng
//創(chuàng)建時(shí)間 2008/10/10
//最后修改時(shí)間 2008/10/14
import java.io.*;
import java.sql.*;
public class caishuzi
{
public static void main(String args[])
{
int suijishu; //產(chǎn)生的隨機(jī)數(shù)
String name; //玩家的名字
int nandu=-1; //選擇的難度
int caice=-1; //玩家所猜測(cè)的數(shù)字
int point=0; //記錄玩家猜測(cè)的次數(shù)
int a; //判斷是否保存信息成功
boolean fac=true;
String str;//用來判斷是否啟用了秘籍
shuru sr=new shuru();
zhuanhuan zh=new zhuanhuan();
baocun bc=new baocun();
suijishu sjs=new suijishu();
System.out.print("請(qǐng)輸入你的名字:");
name=sr.xinxi();
System.out.println("歡迎"+name+"來到猜數(shù)字的世界,請(qǐng)輸入整數(shù)");
System.out.println("數(shù)字越大 難度越高!");
System.out.print("難度: ");
while(fac)
{
nandu=zh.zhuanhuan1(sr.xinxi());
if(nandu-1)
{
System.out.print("你選擇的難度為:"+nandu);
fac=false;
}
else
{
System.out.println("請(qǐng)選擇正確的難度");
System.out.print("難度: ");
}
}
suijishu=sjs.suiji(nandu);
while(!fac)
{
System.out.print("請(qǐng)輸入你要猜測(cè)的數(shù)字: ");
str=sr.xinxi();
if(str.equals("lymeng"))
{System.out.println("正確數(shù)字是: "+suijishu);}
else
caice=zh.zhuanhuan1(str);
if(caice-1)
{
if(suijishu==caice)
{
System.out.println("恭喜你 猜對(duì)啦!");
point++;
//將玩家資料保存到數(shù)據(jù)庫(kù)中
a=bc.charu(name,point,nandu);
if(a-1)
System.out.println("信息保存成功");
else
System.out.println("信息保存失敗");
break;
}
else if(suijishucaice)
{
System.out.println("太小了!請(qǐng)重新輸入!");
point++;
}
else
{
System.out.println("太大了!請(qǐng)重新輸入!");
point++;
}
System.out.println("你已經(jīng)猜測(cè)了"+point+"次");
}
else
{
System.out.println("請(qǐng)輸入一個(gè)正確的數(shù)字");
}
}
}
}
//根據(jù)難度產(chǎn)生隨機(jī)數(shù)
class suijishu
{
public int suiji(int a)
{
int realnum;
realnum=(int)(Math.random()*50*a);
return realnum;
}
}
//記錄鍵盤得到的信息
class shuru
{
private String str;
public String xinxi()
{
try{
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
str=bf.readLine();
str=str.trim();
}catch(Exception ex)
{System.out.println("出錯(cuò)啦笨蛋");}
return str;
}
}
//將鍵盤輸入的字符轉(zhuǎn)換為數(shù)字
class zhuanhuan
{
private int a;
public int zhuanhuan1(String str)
{
try{
a=Integer.parseInt(str);
return a;
}catch(Exception ex){return -1;}
}
}
class baocun
{
public int charu(String name,int point,int nandu)
{
int a=-1;
String sql;
Connection con=null;
PreparedStatement ps=null;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:caishuzi");
sql="insert into user(uname,cishu,nandu) values(?,?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, name);
ps.setInt(2, point);
ps.setInt(3, nandu);
a=ps.executeUpdate();
//System.out.println("aaaaaaa");
ps.close();
con.close();
}catch(Exception ex)
{System.out.println("儲(chǔ)存出錯(cuò)啦!");
ex.printStackTrace();
}
return a;
}
}