Java是什么?
成都創(chuàng)新互聯是一家以重慶網站建設、網頁設計、品牌設計、軟件運維、成都網站營銷、小程序App開發(fā)等移動開發(fā)為一體互聯網公司。已累計為成都集裝箱等眾行業(yè)中小客戶提供優(yōu)質的互聯網建站和軟件開發(fā)服務。
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優(yōu)雅的思維方式進行復雜的編程 。
Java到底能干什么?
1、Java可以用來編寫網站
對于學生來說,最關心的是Java能做什么,市場上招什么工作跟Java有關。現在很多大型網站都用jsp寫的,JSP全名為JavaServerPages。
它是一種動態(tài)網頁技術,比如我們熟悉的163,一些政府網站都是采用JSP編寫的。所以學習Java的同學可以找編寫網站方面的工作,而且現在找這方面的崗位比較多。
2、Java可以做Android
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),其源代碼是Java。所以市場上見到的手機系統(tǒng)例如MIUI,阿貍云,樂蛙等,都是修改源代碼再發(fā)行的。
Java做安卓不單單是指系統(tǒng),還有APP.對于更多的開發(fā)人員來說,他們更多的時間是花在開發(fā)APP上面。
3、Java可以做游戲
或者你不知道,在以前諾基亞還很流行的時候,你玩的手機游戲有90%以上都是Java開發(fā)的。當然現在已經很少人再去開發(fā)了,都轉到安卓上去了。電腦上也有Java開發(fā)的游戲,最經典的是:《我的世界》(minecraft,簡稱MC)。
4、Java可以做軟件
一般編程語言都可以做軟件的,Java也不例外,例如Eclipse,MyEclipse等知名Java開發(fā)工具。有關開發(fā)軟件組件,可以了解JavaSwing編程或者awt相關知識。
5、其他
除了以上所提的Java語言應用范圍之外,家里的洗衣機、微波爐等家電都有可能是通過Java語言程序控制的呢。最重要的是要找到自己的一個興趣所在,專攻一個領域,堅持下去才會做出成績。
希望以上的回答能幫到大家!
1.有一個人的了一種很嚴重的疾病,醫(yī)生給他開了兩種藥片,分別稱為 A 藥片和 B 藥片,每種分別為 4 片,每天必須吃兩次,每次必須吃 A 和 B 藥片各一片,出現錯誤就會死掉,第一天,他正常吃藥,但是,第二天吃藥的時候,他不小心把藥片搞混了,這兩種藥片的外觀完全一樣,他也沒有別的辦法再獲取藥片,那么,他應該怎么辦?
答案
把剩下的四片藥全部分開成兩半,一半放一堆,另一半放另一堆,第二天每次吃其中一堆就行了
2.5000的階乘末尾有幾個0
答案:
1249個
因為一個5的倍數產生一個零,25的倍數產生二個零
125的倍數產生三個零,625的倍數產生四個零
3025產生五個零,前面計算過的不說,都比前面的多產生一個零
5,10,15,...,5000 一共1000個
25,50,75,...,5000 共200個
125,250,...,5000 共40個
625,1250,...,5000 共8個
3125 只有1個
所以共有1249個零
3.一頭母牛在3—10歲的時候每年可以生一頭小牛,生公牛和母牛的比率是50%,在牛12歲的時候就送入屠宰場買了。現在有一個農夫有1頭1歲大的母牛,在母牛3歲的時候就送到附近的農場去配種,請問40年后這個農夫可能會有多少頭牛,寫出相關的代碼或答題思路,最好用面向對象。
答案:
Java代碼
package com.polaris.test;
import java.util.*;
/**
* 問題描述:
*
* 一頭母牛在3—10歲的時候每年可以生一頭小牛,生公牛和母牛的比率是50%,
* 在牛12歲的時候就送入屠宰場買了。現在有一個農夫有1頭1歲大的母牛,
* 在母牛3歲的時候就送到附近的農場去配種,請問40年后這個農夫可能會有多少頭牛,
* 寫出相關的代碼或答題思路,最好用面向對象。
* @author polaris
* @version 1.0
*/
public class ComputeCattleNum {
// 保存所有母牛
private static ListCattle cows = new ArrayListCattle();
// 保存所有當前農夫擁有的牛
private static ListCattle cattles = new ArrayListCattle();
public static void main(String[] args) {
// 第一頭母牛
Cattle cow = new Cattle(0,3);
cows.add(cow);
// 40年
for(int i=0;i40;++i) {
// 大于等于12歲的牛送到屠宰場賣掉;同時每年,所有的牛
for(int j=0;jcattles.size();++j) {
Cattle temp = cattles.get(j);
if(temp.getDead()) {
cattles.remove(temp);
}
// 開始只有一頭母豬,年齡不生長
if(i0) {
cattles.get(j).grow();
}
}
// 母牛生小牛
for(int j=0;jcows.size();++j) {
Cattle calf = cows.get(j).bear();
if(calf!=null) {
if(calf.getSex()==0)
cows.add(calf);
cattles.add(calf);
}
}
}
System.out.println("40年后農夫擁有" + cattles.size() + "頭牛");
}
}
class Cattle {
// 牛的雌雄:0代表雌,1代表雄
private int sex;
// 牛的年齡
private int age;
// 是否賣掉(已死)
private boolean dead = false;
public Cattle(int sex, int age) {
this.sex = sex;
this.age = age;
}
/**
* 生小牛
* @return 生出的小牛
*/
public Cattle bear() {
Cattle calf = null;
if(this.sex==0) {
if(this.age=3 this.age=10) {
calf = new Cattle(random(),0);
} else {
//System.out.println("抱歉,此牛太小或太老,不能生育。");
}
} else {
//System.out.println("有沒有搞錯,公牛也想讓它生小牛?");
}
return calf;
}
private int random() {
return (int)Math.round(Math.random());
}
/**
* 長大一歲,如果當前大于等于12歲,則賣掉
*/
public void grow() {
if(this.age=12) dead = true;
else this.age++;
}
public int getSex() {
return this.sex;
}
public boolean getDead() {
return this.dead;
}
}
4.宴會桌旁
在某賓館的宴會廳里,有4位朋友正圍桌而坐,侃侃而談。他們用了中、英、法、日4種語言。現已知:
A.甲、乙、丙各會兩種語言,丁只會一種語言;
B.有一種語言4人中有3人都會;
C.甲會日語,丁不會日語,乙不會英語;
D. 甲與丙、丙與丁不能直接交談,乙與丙可以直接交談;
E. 沒有人既會日語,又會法語。
請問:甲乙丙丁各會什么語言?
答案:
第一題正解
甲:中日
乙:中法
丙:英法
丁:中
5.借機發(fā)財
從前有A、B兩個相鄰的國家,它們的關系很好,不但互相之間貿易交往頻繁,貨幣可以通用,匯率也相同。也就是說A國的100元等于B國的100 元。可是兩國關系因為一次事件而破裂了,雖然貿易往來仍然繼續(xù),但兩國國王卻互相宣布對方貨幣的100元只能兌換本國貨幣的90元。有一個聰明人,他手里 只有A國的100元鈔票,卻借機撈了一大把,發(fā)了一筆橫財。請你想一想,這個聰明人是怎樣從中發(fā)財的?
答案:
拿著A國100在A國換好B國的錢,然后再拿著換好的B國的錢去B國換A國的錢
如此循環(huán)
6.快馬加鞭
墨西哥農村現在仍然可以看到人們用馬和驢運載貨物。一位商人把四匹馬從甲村拉到乙村,而從甲村到乙村,A馬要花一小時,B馬要花兩小時,C馬要花四小時,D馬要花五小時。
這位商人一次只能拉兩匹馬,回來時他還要騎一匹馬,其中以走得慢的那匹馬作為從甲村拉到乙村所需的時間。聽說有人花了12小時就把四匹馬全部從甲村拉到乙村,請問:他是如何辦到的?
答案:
AB一起過B回來 4小時
CD 一起過A回來 6小時
AB 一起過 2小時
一共12小時
7.擊鼠標
擊鼠標比賽現在開始!參賽者有拉爾夫、威利和保羅。
拉爾夫10秒鐘能擊10下鼠標;威利20秒鐘能擊20下鼠標;保羅5秒鐘能擊5下鼠標。以上各人所用的時間是這樣計算的;從第一擊開始,到最后一擊結束。
他們是否打平手?如果不是,誰最先擊完40下鼠標?
答案:
拉爾夫
一個加速然后減速的過程。三個人平均速度相等。達到平均速度時間在中間的人可能性最大。
8.感覺
用第一感覺判斷8+8=91這個等式正確嗎?說明理由。
答案:
不正確。8+8=16
9.謊話
如果下列每個人說的話都是假話,那么是誰打碎了花瓶?
夏克:吉姆打碎了花瓶。
湯姆:夏克會告訴你誰打碎了花瓶。
埃普爾:湯姆,夏克和我不太可能打碎花瓶。
克力斯:我沒打碎花瓶。
艾力克:夏克打碎了花瓶,所以湯姆和埃普爾不太可能打碎花瓶。
吉姆:我打碎了花瓶,湯姆是無辜的。
答案:克力斯。吉姆的話有兩個條件,只要一個為false就為false。
10.大有作為
魯道夫、菲利普、羅伯特三位青年,一個當了歌手,一個考上大學,一個加入美軍陸戰(zhàn)隊,個個未來都大有作為。現已知:
A. 羅伯特的年齡比戰(zhàn)士的大;
B. 大學生的年齡比菲利普小;
C. 魯道夫的年齡和大學生的年齡不一樣。
請問:三個人中誰是歌手?誰是大學生?誰是士兵?
歌手 大學 美軍陸戰(zhàn)隊
魯道夫 X true
菲利普 true X X
羅伯特 true X
由A B=》羅伯特比菲利普小比戰(zhàn)士大。所以菲利普不是戰(zhàn)士
11.麻省理工大學的學生
美國麻省理大學的學生來自不同國家。
大衛(wèi)、比利、特德三名學生,一個是法國人,一個是日本人,一個是美國人。現已知:
1、 大衛(wèi)不喜歡面條,特德不喜歡漢堡包;
2、 喜歡面條的不是法國人;
3、 喜歡漢堡包的是日本人;
4、 比利不是美國人。
請推測出這三名留學生分別來自哪些國家?
答案:
法國人 日本人 美國人
大衛(wèi) true X
比利 true X
特德 X true
喜歡漢堡的是日本人,特德不喜歡漢堡=》特德不是日本人
喜歡漢堡的是日本人,所以喜歡面條的可暫假設也不是日本人=》美國人喜歡面條,大衛(wèi)不喜歡面條=》大衛(wèi)也不是美國人。所以特德是美國人
喜歡面條的不是法國人可暫假設不喜歡面條的是法國人=》大衛(wèi)是法國人
所以=》 比利時日本人
然后在那上面假設的結果挨個判斷原題條件。每個條件都符合。所以以上假設成立。
如需更多(包括各種面經,筆經)加我QQ:719116861。注明java!
import java.awt.*;
import javax.swing.*;
import java.util.Random;
import java.awt.event.*;
class Min extends JPanel //雷的類
{
//備注:鼠標的左鍵 = 1;右鍵 = 3;中鍵 = 2
private int flag = 0,statu = 0; //定義雷的屬性 0:沒有打開 1:打開 2:標示為雷 3:不確定
//flag = 0 不是雷 ; flag = 1是雷
private int but,count = 0; //but:哪一個鼠標鍵被按下去了 count:這個區(qū)域周圍有多少個雷
private int mx = 0,my = 0,mw = 10; //定義雷的坐標和寬度
public Min() //構造函數
{
statu = 0;
}
public Min(int f,int x,int y,int w)
//構造函數
{
flag = f;
mx = x;
my = y;
mw = w;
}
public int getFlag(){return flag;}
public int getStatu(){return statu;}
public int getMx(){return mx;}
public int getMy(){return my;}
public int getMw(){return mw;}
public int getCount(){return count;}
public void setFlag(int f){flag = f;}
public void setCount(int c){count = c;}
public void setData(int f,int x,int y,int w,int s)
//傳遞值
{
flag = f;
mx = (x-1)*w;
my = (y-1)*w;
mw = w-1;
statu = s;
}
//根據你點擊鼠標的不同來改變雷的屬性
public int sendKey(int key)
{
//返回值,如果游戲結束則返回-1
int rtn = 1;
if(key == 3)
{
switch(statu)
{
case 1:
break;
case 2:
statu = 3;
break;
case 3:
statu = 0;
break;
case 0:
statu = 2;
break;
}
rtn = 1;
}
if(key == 1 statu == 0)
{
switch(flag)
{
case 0:
statu = 1;
rtn = 2;
break;
case 1:
statu = 1;
rtn = -1;
break;
}
}
return rtn;
}
}
class DrawPanel extends JPanel
{
private int i,j;
private int f = 0; //if f = 1 then game over ,if f =2 then win
private int chx = 0,chy = 0; //專門記錄坐標x,y的值
private int msum = 6,ksum = 0; //msum:雷的個數,ksum:標示雷的個數
private int bx = 10,by = 10,bw = 40; //bx,by:棋盤的大小,bw:棋子的大小
public Min board[][] = {
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
{new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min(),new Min()},
};
// 畫坐標為ax,ay區(qū)域的雷的狀態(tài)
public void draw(Graphics g,int ax,int ay)
{
int x,y,w; // 坐標x,y;和寬度:w
int s,c,flag; //狀態(tài);雷的個數;
int cx = bw/2 - 4;
int cy = bw/2 + 4;
x = board[ax][ay].getMx();
y = board[ax][ay].getMy();
w = board[ax][ay].getMw();
s = board[ax][ay].getStatu();
c = board[ax][ay].getCount();
flag= board[ax][ay].getFlag();
switch(s)
{
case 0: //沒有打開狀態(tài)
{
g.setColor(Color.black);
g.fillRect(x,y,w,w);
break;
}
case 1: //打開狀態(tài)
{
g.setColor(Color.blue);
g.fillRect(x,y,w,w);
if(c != 0 flag == 0) //此處沒有雷
{
g.setColor(Color.red);
g.drawString(String.valueOf(c),x + cx,y + cy);
}
if(flag == 1) //此處有雷
{
g.setColor(Color.red);
g.fillRect(x,y,w,w);
g.setColor(Color.blue);
g.drawString(" 雷",x + cx,y + cy);
}
break;
}
case 2: //標雷狀態(tài)
{
g.setColor(Color.green);
g.fillRect(x,y,w,w);
g.setColor(Color.blue);
g.drawString(" 旗",x + cx,y + cy);
break;
}
case 3: //不確定狀態(tài)
{
g.setColor(Color.black);
g.fillRect(x,y,w,w);
g.setColor(Color.red);
g.drawString("?",x + cx,y + cy);
break;
}
default:
break;
}
}
// 沒有圖形器的繪圖函數:畫出坐標ax,ay的雷的狀態(tài)和圖形
public void draw(int ax,int ay)
{
Graphics g;
g = this.getGraphics();
draw(g,ax,ay);
}
//打開周圍沒有雷的地方,并且繪畫所在區(qū)域點擊左鍵觸發(fā)
public int openNoMin(int ax,int ay)
{
int i,j;
if(ax1||ay1||axbx||ayby) return 0; //鼠標點擊的區(qū)域出界了
if(board[ax][ay].getStatu() != 0) return 0; //如果此區(qū)域打開了,返回
board[ax][ay].sendKey(1); //如果返回值等于-1,就說明游戲結束
draw(ax,ay);
if(board[ax][ay].getFlag() == 1)
//如果游戲結束,把所有的雷都顯示出來
{
for(i = 1;i=bx;i++)
{
for(j = 1;j = by;j++)
{
if(board[i][j].getFlag() == 1)
{
board[i][j].sendKey(1);
draw(i,j);
}
}
}
return -1;
}
//如果游戲沒有結束
if(board[ax][ay].getCount() 0)
{
ksum ++;
return 1; //周圍有雷,就不用打開周圍地區(qū)
}
if(board[ax][ay].getCount() == 0 board[ax][ay].getFlag() == 0)
//周圍沒有雷,打開周圍地區(qū),直到有雷的地區(qū)
{
openNoMin(ax-1,ay-1);openNoMin(ax,ay-1);openNoMin(ax+1,ay-1);
openNoMin(ax-1,ay ); openNoMin(ax+1,ay );
openNoMin(ax-1,ay+1);openNoMin(ax,ay+1);openNoMin(ax+1,ay+1);
}
ksum ++;
return 1;
}
//計算坐標x,y的周圍雷的個數
public int getCount(int ai,int aj)
{
int sum = 0;
if(board[ai][aj].getFlag() == 1)
{
return sum;
}
if(ai1aj1aibxajby)
{
sum = board[ai-1][aj-1].getFlag()+ board[ai][aj-1].getFlag()+ board[ai+1][aj-1].getFlag()+
board[ai-1][aj ].getFlag()+ board[ai+1][aj ].getFlag()+
board[ai-1][aj+1].getFlag()+ board[ai][aj+1].getFlag()+ board[ai+1][aj+1].getFlag();
}
if(ai==1aj==1)
{
sum = board[ai+1][aj ].getFlag()+
board[ai][aj+1].getFlag()+ board[ai+1][aj+1].getFlag();
}
if(ai==1aj==by)
{
sum = board[ai][aj-1].getFlag()+ board[ai+1][aj-1].getFlag()+
board[ai+1][aj ].getFlag();
}
if(ai==bxaj==1)
{
sum = board[ai-1][aj ].getFlag()+
board[ai-1][aj+1].getFlag()+ board[ai][aj+1].getFlag();
}
if(ai==bxaj==by)
{
sum = board[ai-1][aj-1].getFlag()+ board[ai][aj-1].getFlag()+
board[ai-1][aj ].getFlag();
}
if(ai==1aj1ajby)
{
sum = board[ai][aj-1].getFlag()+ board[ai+1][aj-1].getFlag()+
board[ai+1][aj ].getFlag()+
board[ai][aj+1].getFlag()+ board[ai+1][aj+1].getFlag();
}
if(ai==bxaj1ajby)
{
sum = board[ai-1][aj-1].getFlag()+ board[ai][aj-1].getFlag()+
board[ai-1][aj ].getFlag()+
board[ai-1][aj+1].getFlag()+ board[ai][aj+1].getFlag();
}
if(ai1aibxaj==1)
{
sum = board[ai-1][aj ].getFlag()+ board[ai+1][aj ].getFlag()+
board[ai-1][aj+1].getFlag()+ board[ai][aj+1].getFlag()+ board[ai+1][aj+1].getFlag();
}
if(ai1aibxaj==by)
{
sum = board[ai-1][aj-1].getFlag()+ board[ai][aj-1].getFlag()+ board[ai+1][aj-1].getFlag()+
board[ai-1][aj ].getFlag()+ board[ai+1][aj ].getFlag();
}
return sum;
}
// 傳入參數:幾列,幾行,寬度,雷數
public void initMin(int ax,int ay,int aw,int as)
{
int k = 1; //表明產生的第幾個雷
Random r; //隨機數
f = 0; //f=0表示游戲還沒有結束
ksum = 0;
bx = ax;
by = ay;
bw = aw;
msum = as;
r = new Random();
//初始化底盤的值
for(i = 1;i = bx;i++)
{
for(j=1;j=by;j++)
{
board[i][j].setData(0,i,j,bw,0);
}
}
// 隨機產生雷
while(k = msum)
{
i = r.nextInt(bx)+1;
j = r.nextInt(by)+1;
if(board[i][j].getFlag() != 1)
{
board[i][j].setFlag(1);
k++;
}
}
// 非雷區(qū)的周圍有幾個雷,初始化其值
for(i = 1;i = bx;i++)
{
for(j=1;j=by;j++)
{
board[i][j].setCount(getCount(i,j));
}
}
setBackground(Color.white);
repaint();
}
// 構造函數
public DrawPanel(int ax,int ay,int aw,int as)
{
initMin(ax,ay,aw,as);
addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent me)
{
int r;
if(f != 0) return; //如果游戲結束,返回
chx = me.getX();
chy = me.getY();
if(me.getButton() != 1)
{
board[chx/bw+1][chy/bw+1].sendKey(me.getButton());
draw(chx/bw+1,chy/bw+1);
}
else if(me.getButton() == 1)
{
if(openNoMin(chx/bw+1,chy/bw+1) == -1)
{
f = 1;
repaint();
}
else if ( ksum + msum == bx*by )
{
f = 2;
repaint();
}
}
}
}
);
}
// 重畫所有的圖形,包括一些修飾的圖形
public void paint(Graphics g)
{
int x,y,w;
int s;
int cx = bw/2 - 4;
int cy = bw/2 + 4;
g.clearRect(0,0,600,600);
for(i=1;i=bx;i++)
{
for(j=1;j=by;j++)
{
draw(g,i,j);
}
}
if(f == 1)
{
Font f = new Font("11",1,70);
Font fo = g.getFont();
g.setColor(Color.white);
g.setFont(f);
//g.setSize();
g.drawString("Game Over",0,200);
g.setFont(fo);
}
if( f == 2 )
{
Font f = new Font("11",1,70);
Font fo = g.getFont();
g.setColor(Color.white);
g.setFont(f);
//g.setSize();
g.drawString("You win!",0,200);
g.setFont(fo);
}
}
};
// 主類和程序的入口
public class Mine extends JFrame implements ActionListener
{
Container cp = getContentPane();
JButton bt = new JButton("開局");
Label l1 = new Label("列:");
Label l2 = new Label("行:");
Label l3 = new Label("寬度:");
Label l4 = new Label("雷的個數:");
TextField tf1 = new TextField("10",2); //列
TextField tf2 = new TextField("10",2); //行
TextField tf3 = new TextField("40",2); //寬度
TextField tf4 = new TextField("15",2); //雷的個數
int x=10,y=10,w=40,sum=15;
DrawPanel dp = new DrawPanel(x,y,w,sum);
public Mine()
{
setBackground(Color.white);
cp.setLayout(null);
cp.add(dp);
cp.add(bt);
cp.add(tf1);
cp.add(tf2);
cp.add(tf3);
cp.add(tf4);
cp.add(l1);
cp.add(l2);
cp.add(l3);
cp.add(l4);
l1.setBounds(20 ,10,20,20);
tf1.setBounds(40,10,20,20);
l2.setBounds(70,10,20,20);
tf2.setBounds(90,10,20,20);
l3.setBounds(120,10,40,20);
tf3.setBounds(160,10,20,20);
l4.setBounds(190,10,60,20);
tf4.setBounds(250,10,20,20);
bt.setBounds(300,10,80,20);
dp.setBounds(20,40,x*w,y*w);
setResizable(false);
setSize(x*w+40,y*w+80);
setTitle(" 掃雷");
show();
bt.addActionListener(this);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{System.exit(0);}
}
);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == bt)
{
//x = Integer.parseInt(tf1.getText());
//y = Integer.parseInt(tf2.getText());
//w = Integer.parseInt(tf3.getText());
sum = Integer.parseInt(tf4.getText());
setSize(x*w+40,y*w+80);
dp.setBounds(20,40,x*w,y*w);
show();
dp.initMin(x,y,w,sum);
}
}
public static void main(String args[])
{
new Mine();
}
};
貪吃蛇游戲 望采納
import java.awt.Button;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.*;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Snake extends JFrame implements KeyListener{
int Count=0;
Button[][] grid = new Button[20][20];
ArrayListPoint snake_list=new ArrayListPoint();
Point bean=new Point(-1,-1);//保存隨機豆子【坐標】
int Direction = 1; //方向標志 1:上 2:下 3:左 4:右
//構造方法
public Snake()
{
//窗體初始化
this.setBounds(400,300,390,395);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GridLayout f=new GridLayout(20,20);
this.getContentPane().setBackground(Color.gray);
this.setLayout(f);
//初始化20*20個按鈕
for(int i=0;i20;i++)
for(int j=0;j20;j++)
{
grid[i][j]=new Button();
this.add(grid[i][j]);
grid[i][j].setVisible(false);
grid[i][j].addKeyListener(this);
grid[i][j].setBackground(Color.blue);
}
//蛇體初始化
grid[10][10].setVisible(true);
grid[11][10].setVisible(true);
grid[12][10].setVisible(true);
grid[13][10].setVisible(true);
grid[14][10].setVisible(true);
//在動態(tài)數組中保存蛇體按鈕坐標【行列】信息
snake_list.add(new Point(10,10));
snake_list.add(new Point(11,10));
snake_list.add(new Point(12,10));
snake_list.add(new Point(13,10));
snake_list.add(new Point(14,10));
this.rand_bean();
this.setTitle("總分:0");
this.setVisible(true);
}
//該方法隨機一個豆子,且不在蛇體上,并使豆子可見
public void rand_bean(){
Random rd=new Random();
do{
bean.x=rd.nextInt(20);//行
bean.y=rd.nextInt(20);//列
}while(snake_list.contains(bean));
grid[bean.x][bean.y].setVisible(true);
grid[bean.x][bean.y].setBackground(Color.red);
}
//判斷擬增蛇頭是否與自身有碰撞
public boolean is_cross(Point p){
boolean Flag=false;
for(int i=0;isnake_list.size();i++){
if(p.equals(snake_list.get(i) )){
Flag=true;break;
}
}
return Flag;
}
//判斷蛇即將前進位置是否有豆子,有返回true,無返回false
public boolean isHaveBean(){
boolean Flag=false;
int x=snake_list.get(0).x;
int y=snake_list.get(0).y;
Point p=null;
if(Direction==1)p=new Point(x-1,y);
if(Direction==2)p=new Point(x+1,y);
if(Direction==3)p=new Point(x,y-1);
if(Direction==4)p=new Point(x,y+1);
if(bean.equals(p))Flag=true;
return Flag;
}
//前進一格
public void snake_move(){
if(isHaveBean()==true){//////////////有豆子吃
Point p=new Point(bean.x,bean.y);//【很重要,保證吃掉的是豆子的復制對象】
snake_list.add(0,p); //吃豆子
grid[p.x][p.y].setBackground(Color.blue);
this.Count++;
this.setTitle("總分:"+Count);
this.rand_bean(); //再產生一個豆子
}else{///////////////////無豆子吃
//取原蛇頭坐標
int x=snake_list.get(0).x;
int y=snake_list.get(0).y;
//根據蛇頭坐標推算出擬新增蛇頭坐標
Point p=null;
if(Direction==1)p=new Point(x-1,y);//計算出向上的新坐標
if(Direction==2)p=new Point(x+1,y);//計算出向下的新坐標
if(Direction==3)p=new Point(x,y-1);//計算出向左的新坐標
if(Direction==4)p=new Point(x,y+1);//計算出向右的新坐標
//若擬新增蛇頭碰壁,或纏繞則游戲結束
if(p.x0||p.x19|| p.y0||p.y19||is_cross(p)==true){
JOptionPane.showMessageDialog(null, "游戲結束!");
System.exit(0);
}
//向蛇體增加新的蛇頭坐標,并使新蛇頭可見
snake_list.add(0,p);
grid[p.x][p.y].setVisible(true);
//刪除原蛇尾坐標,使蛇尾不可見
int x1=snake_list.get(snake_list.size()-1).x;
int y1=snake_list.get(snake_list.size()-1).y;
grid[x1][y1].setVisible(false);
snake_list.remove(snake_list.size()-1);
}
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_UP Direction!=2) Direction=1;
if(e.getKeyCode()==KeyEvent.VK_DOWN Direction!=1) Direction=2;
if(e.getKeyCode()==KeyEvent.VK_LEFT Direction!=4) Direction=3;
if(e.getKeyCode()==KeyEvent.VK_RIGHT Direction!=3) Direction=4;
}
@Override
public void keyReleased(KeyEvent e) { }
@Override
public void keyTyped(KeyEvent e) { }
public static void main(String[] args) throws InterruptedException {
Snake win=new Snake();
while(true){
win.snake_move();
Thread.sleep(300);
}
}
}
用MVC方式實現的貪吃蛇游戲,共有4個類。運行GreedSnake運行即可。主要是觀察者模式的使用,我已經添加了很多注釋了。
1、
/*
* 程序名稱:貪食蛇
* 原作者:BigF
* 修改者:algo
* 說明:我以前也用C寫過這個程序,現在看到BigF用Java寫的這個,發(fā)現雖然作者自稱是Java的初學者,
* 但是明顯編寫程序的素養(yǎng)不錯,程序結構寫得很清晰,有些細微得地方也寫得很簡潔,一時興起之
* 下,我認真解讀了這個程序,發(fā)現數據和表現分開得很好,而我近日正在學習MVC設計模式,
* 因此嘗試把程序得結構改了一下,用MVC模式來實現,對源程序得改動不多。
* 我同時也為程序增加了一些自己理解得注釋,希望對大家閱讀有幫助。
*/
package mvcTest;
/**
* @author WangYu
* @version 1.0
* Description:
* /pre
* Create on :Date :2005-6-13 Time:15:57:16
* LastModified:
* History:
*/
public class GreedSnake {
public static void main(String[] args) {
SnakeModel model = new SnakeModel(20,30);
SnakeControl control = new SnakeControl(model);
SnakeView view = new SnakeView(model,control);
//添加一個觀察者,讓view成為model的觀察者
model.addObserver(view);
(new Thread(model)).start();
}
}
-------------------------------------------------------------
2、
package mvcTest;
//SnakeControl.java
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* MVC中的Controler,負責接收用戶的操作,并把用戶操作通知Model
*/
public class SnakeControl implements KeyListener{
SnakeModel model;
public SnakeControl(SnakeModel model){
this.model = model;
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (model.running){ // 運行狀態(tài)下,處理的按鍵
switch (keyCode) {
case KeyEvent.VK_UP:
model.changeDirection(SnakeModel.UP);
break;
case KeyEvent.VK_DOWN:
model.changeDirection(SnakeModel.DOWN);
break;
case KeyEvent.VK_LEFT:
model.changeDirection(SnakeModel.LEFT);
break;
case KeyEvent.VK_RIGHT:
model.changeDirection(SnakeModel.RIGHT);
break;
case KeyEvent.VK_ADD:
case KeyEvent.VK_PAGE_UP:
model.speedUp();
break;
case KeyEvent.VK_SUBTRACT:
case KeyEvent.VK_PAGE_DOWN:
model.speedDown();
break;
case KeyEvent.VK_SPACE:
case KeyEvent.VK_P:
model.changePauseState();
break;
default:
}
}
// 任何情況下處理的按鍵,按鍵導致重新啟動游戲
if (keyCode == KeyEvent.VK_R ||
keyCode == KeyEvent.VK_S ||
keyCode == KeyEvent.VK_ENTER) {
model.reset();
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
-------------------------------------------------------------
3、
/*
*
*/
package mvcTest;
/**
* 游戲的Model類,負責所有游戲相關數據及運行
* @author WangYu
* @version 1.0
* Description:
* /pre
* Create on :Date :2005-6-13 Time:15:58:33
* LastModified:
* History:
*/
//SnakeModel.java
import javax.swing.*;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Random;
/**
* 游戲的Model類,負責所有游戲相關數據及運行
*/
class SnakeModel extends Observable implements Runnable {
boolean[][] matrix; // 指示位置上有沒蛇體或食物
LinkedList nodeArray = new LinkedList(); // 蛇體
Node food;
int maxX;
int maxY;
int direction = 2; // 蛇運行的方向
boolean running = false; // 運行狀態(tài)
int timeInterval = 200; // 時間間隔,毫秒
double speedChangeRate = 0.75; // 每次得速度變化率
boolean paused = false; // 暫停標志
int score = 0; // 得分
int countMove = 0; // 吃到食物前移動的次數
// UP and DOWN should be even
// RIGHT and LEFT should be odd
public static final int UP = 2;
public static final int DOWN = 4;
public static final int LEFT = 1;
public static final int RIGHT = 3;
public SnakeModel( int maxX, int maxY) {
this.maxX = maxX;
this.maxY = maxY;
reset();
}
public void reset(){
direction = SnakeModel.UP; // 蛇運行的方向
timeInterval = 200; // 時間間隔,毫秒
paused = false; // 暫停標志
score = 0; // 得分
countMove = 0; // 吃到食物前移動的次數
// initial matirx, 全部清0
matrix = new boolean[maxX][];
for (int i = 0; i maxX; ++i) {
matrix[i] = new boolean[maxY];
Arrays.fill(matrix[i], false);
}
// initial the snake
// 初始化蛇體,如果橫向位置超過20個,長度為10,否則為橫向位置的一半
int initArrayLength = maxX 20 ? 10 : maxX / 2;
nodeArray.clear();
for (int i = 0; i initArrayLength; ++i) {
int x = maxX / 2 + i;//maxX被初始化為20
int y = maxY / 2; //maxY被初始化為30
//nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]
//默認的運行方向向上,所以游戲一開始nodeArray就變?yōu)椋?/p>
// [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]
nodeArray.addLast(new Node(x, y));
matrix[x][y] = true;
}
// 創(chuàng)建食物
food = createFood();
matrix[food.x][food.y] = true;
}
public void changeDirection(int newDirection) {
// 改變的方向不能與原來方向同向或反向
if (direction % 2 != newDirection % 2) {
direction = newDirection;
}
}
/**
* 運行一次
* @return
*/
public boolean moveOn() {
Node n = (Node) nodeArray.getFirst();
int x = n.x;
int y = n.y;
// 根據方向增減坐標值
switch (direction) {
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
}
// 如果新坐標落在有效范圍內,則進行處理
if ((0 = x x maxX) (0 = y y maxY)) {
if (matrix[x][y]) { // 如果新坐標的點上有東西(蛇體或者食物)
if (x == food.x y == food.y) { // 吃到食物,成功
nodeArray.addFirst(food); // 從蛇頭贈長
// 分數規(guī)則,與移動改變方向的次數和速度兩個元素有關
int scoreGet = (10000 - 200 * countMove) / timeInterval;
score += scoreGet 0 ? scoreGet : 10;
countMove = 0;
food = createFood(); // 創(chuàng)建新的食物
matrix[food.x][food.y] = true; // 設置食物所在位置
return true;
} else // 吃到蛇體自身,失敗
return false;
} else { // 如果新坐標的點上沒有東西(蛇體),移動蛇體
nodeArray.addFirst(new Node(x, y));
matrix[x][y] = true;
n = (Node) nodeArray.removeLast();
matrix[n.x][n.y] = false;
countMove++;
return true;
}
}
return false; // 觸到邊線,失敗
}
public void run() {
running = true;
while (running) {
try {
Thread.sleep(timeInterval);
} catch (Exception e) {
break;
}
if (!paused) {
if (moveOn()) {
setChanged(); // Model通知View數據已經更新
notifyObservers();
} else {
JOptionPane.showMessageDialog(null,
"you failed",
"Game Over",
JOptionPane.INFORMATION_MESSAGE);
break;
}
}
}
running = false;
}
private Node createFood() {
int x = 0;
int y = 0;
// 隨機獲取一個有效區(qū)域內的與蛇體和食物不重疊的位置
do {
Random r = new Random();
x = r.nextInt(maxX);
y = r.nextInt(maxY);
} while (matrix[x][y]);
return new Node(x, y);
}
public void speedUp() {
timeInterval *= speedChangeRate;
}
public void speedDown() {
timeInterval /= speedChangeRate;
}
public void changePauseState() {
paused = !paused;
}
public String toString() {
String result = "";
for (int i = 0; i nodeArray.size(); ++i) {
Node n = (Node) nodeArray.get(i);
result += "[" + n.x + "," + n.y + "]";
}
return result;
}
}
class Node {
int x;
int y;
Node(int x, int y) {
this.x = x;
this.y = y;
}
}
------------------------------------------------------------
4、
package mvcTest;
//SnakeView.java
import javax.swing.*;
import java.awt.*;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Observable;
import java.util.Observer;
/**
* MVC模式中得Viewer,只負責對數據的顯示,而不用理會游戲的控制邏輯
*/
public class SnakeView implements Observer {
SnakeControl control = null;
SnakeModel model = null;
JFrame mainFrame;
Canvas paintCanvas;
JLabel labelScore;
public static final int canvasWidth = 200;
public static final int canvasHeight = 300;
public static final int nodeWidth = 10;
public static final int nodeHeight = 10;
public SnakeView(SnakeModel model, SnakeControl control) {
this.model = model;
this.control = control;
mainFrame = new JFrame("GreedSnake");
Container cp = mainFrame.getContentPane();
// 創(chuàng)建頂部的分數顯示
labelScore = new JLabel("Score:");
cp.add(labelScore, BorderLayout.NORTH);
// 創(chuàng)建中間的游戲顯示區(qū)域
paintCanvas = new Canvas();
paintCanvas.setSize(canvasWidth + 1, canvasHeight + 1);
paintCanvas.addKeyListener(control);
cp.add(paintCanvas, BorderLayout.CENTER);
// 創(chuàng)建底下的幫助欄
JPanel panelButtom = new JPanel();
panelButtom.setLayout(new BorderLayout());
JLabel labelHelp;
labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.NORTH);
labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.CENTER);
labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);
panelButtom.add(labelHelp, BorderLayout.SOUTH);
cp.add(panelButtom, BorderLayout.SOUTH);
mainFrame.addKeyListener(control);
mainFrame.pack();
mainFrame.setResizable(false);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.setVisible(true);
}
void repaint() {
Graphics g = paintCanvas.getGraphics();
//draw background
g.setColor(Color.WHITE);
g.fillRect(0, 0, canvasWidth, canvasHeight);
// draw the snake
g.setColor(Color.BLACK);
LinkedList na = model.nodeArray;
Iterator it = na.iterator();
while (it.hasNext()) {
Node n = (Node) it.next();
drawNode(g, n);
}
// draw the food
g.setColor(Color.RED);
Node n = model.food;
drawNode(g, n);
updateScore();
}
private void drawNode(Graphics g, Node n) {
g.fillRect(n.x * nodeWidth,
n.y * nodeHeight,
nodeWidth - 1,
nodeHeight - 1);
}
public void updateScore() {
String s = "Score: " + model.score;
labelScore.setText(s);
}
public void update(Observable o, Object arg) {
repaint();
}
}
希望采納
Display.java ? 接口代碼如下:
public?interface?Display?{
public?void?dis();
}
接口的實現類DisplayImpl.java ? ?代碼如下:
public?class?DisplayImpl?implements?Display?{
@Override
public?void?dis()?{
//?TODO?Auto-generated?method?stub
System.out.println("輸出方法");
}
public?static?void?main(String[]?args)?{
new?DisplayImpl().dis();
}
}
文章題目:吃豆人java用到的代碼,吃豆人編程
當前路徑:http://chinadenli.net/article22/dsicsjc.html
成都網站建設公司_創(chuàng)新互聯,為您提供定制網站、微信小程序、關鍵詞優(yōu)化、外貿網站建設、動態(tài)網站、網站建設
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯