源碼?還是編譯好的 class 文件,如果是 class 文件的話,在 tomcat 下放在 webapps 下即可
② 跪求停車場管理系統源代碼,注意是javaweb
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
/*********************************
* 停車場管理
* author zhang
*2013-12-13
********************************/
public class CarStopManager {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("請入車牌號:");
String carno = sc.next();
CarStopManager carStopManager = new CarStopManager();
carStopManager.setCarNo(carno);//設置車牌號
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sdate = format.format(new Date());
System.out.println("當前時間(入場時間)是: "+sdate);
System.out.println("需要開出車場嗎?yes/no:");
String yesno = sc.next();
if(yesno.equals("yes")){
String edate = format.format(new Date());
System.out.println("出場時間是: "+edate);
//計算方法
carManager(2, sdate, edate,carStopManager);
}
}
/**
* 計算方法
*/
public static void carManager(int type,String starTime,
String endTime,CarStopManager carStopManager){
if(type==1){//按月收費
System.out.println("如若沒有繳納月費請繳納800元,如若繳納將不再提示!");
}else{
/**
* 一般不會有停車幾個月的吧?先不考慮停車幾年或者幾個月的
*/
String sDay = starTime.substring(8,10);//入場日期(天)
String sHour = starTime.substring(11, 13);//入場小時
String sMM = starTime.substring(14,16);//入場分鍾
String eDay = starTime.substring(8,10);//出場日期(天)
String eHour = endTime.substring(11, 13);//出廠小時
String eMM = endTime.substring(14,16);//出廠分鍾
float money = 0;//需繳納的費用
int shour = Integer.parseInt(sHour);
int ehour = Integer.parseInt(eHour);
int smm = Integer.parseInt(sMM);
int emm = Integer.parseInt(eMM);
int rehour = 0;//停車幾個小時
if(sDay.equals(eDay)){//同一天
//當天6點到20點之間
if((shour>=6 && shour<=20)){
if(ehour - shour<=6){//6個小時之內
rehour = (ehour - shour)*60+(emm - smm);//停車多少分鍾
//需要繳納的費用 前15分鍾免費 以後每15分鍾1.5元
money = (rehour/15-15)*1.5f;
}else{
int hour = ehour - shour -6;//6小時除外剩餘小時數
rehour = 6*60+(emm - smm);//停車多少分鍾
//前15分鍾免費 以後每15分鍾1.5元 超過6小時15分鍾2元
money = ((rehour/15-15)*1.5f)+(hour*60/2);
}
}
}else{//跨天 20點到 6點之間
//todo
}
System.out.println("您的車牌號是:"+carStopManager.getCarNo()+";
" +
"您此次停車花費的費用是: "+money+"元");
}
}
/**
* bean屬性
*/
private String carNo;//車牌號
private String startTime;//入場時間
private String endTime;//出場時間
/**
* 無參構造
*/
public CarStopManager(){
super();
}
/**
* 有參數構造
* @param carNo
* @param startTime
* @param endTime
*/
public CarStopManager(String carNo, String startTime, String endTime) {
super();
this.carNo = carNo;
this.startTime = startTime;
this.endTime = endTime;
}
/**
* 設置get方法
* @return
*/
public String getCarNo() {
return carNo;
}
/**
* 設置set方法
* @param carNo
*/
public void setCarNo(String carNo) {
this.carNo = carNo;
}
public String getStartTime() {
return startTime;
}
public void setStartTime(String startTime) {
this.startTime = startTime;
}
public String getEndTime() {
return endTime;
}
public void setEndTime(String endTime) {
this.endTime = endTime;
}
}
③ JAVA 編譯後WEB項目 源碼沒有了 怎麼可以添加新功能求各位高手指點,小弟不懈感激
看你是什麼樣的功能吧。
有可能是這樣的。對方將原碼編譯成一個jar文件放到web-inf/lib下。
他們需要你做的功能完全是新的,對即有的不會有影響。
如果是這樣,那你需要知道你要繼承什麼樣的介面來做實現。這個需要對方提供相應的資料。
如果是改動即有的功能,沒有源碼,做不了。
雖然可以反編譯代碼,但反編譯的也不是完全都准確的,有些語句解析的不正確,最常見的就是異常處理的反編譯。
總得來說,沒有源碼是很不方便的。
④ java源碼解析
如何快速讀懂項目源碼javaWeb一:學會如何讀一個JavaWeb項目源代碼步驟:表結構-web.xml-mvc-db-spring
ioc-log-代碼
1、先賣祥了解項目資料庫的表結構,這個方面是最容易忘記的,有時候我們只顧著看每一個方法是怎麼進行的,卻沒
有去了解資料庫之間的主外鍵關聯。其實如果先了解資料庫表結構,再去看一個方法的實現會更加容易。
2、然後需要過一遍web.xml,知道項目中用到了什麼攔
截器,監聽器,過濾器,擁有哪些配置文件。如果是攔截器,一般負責過濾請求,進行AOP等;如果是監可能是定時任務,初始化任務;配置文件有如使用了spring
後的讀取mvc相關,db相關,service相關,aop相關的文件。
3、查看攔截器,監聽器代碼,知道攔截了什麼請求,這
個類完成了怎樣的工作。有的人就是因為缺少了這一步,自己寫了一個action,配置文件也沒有寫錯,但是卻怎麼
調試也無法進入這個action,直到別人告訴他,請求被攔
4、接下來,看配置文件,首先一定是mvc相關的,如springmvc
中,要請求哪些請求是靜態資源,使用了哪些view策略,侍陵controller註解放在哪個包下等。然後是db相關配置文件,看使用了什麼資料庫,使用了
什麼orm框架,是否開啟了二級老配戚緩存,使用哪種產品作為二級緩存,事務管理的處理,需要掃描的實體類放在什麼位置。最後是spring核心的ioc
功能相關的配置文件,知道介面與具體類的注入大致是怎樣的。當然還有一些如apectj置文件,也是在這個步驟中完成
5、log
相關文件,日誌的各個級別是如何處理的,在哪些地方使用了log記錄日誌
6、從上面幾點後知道了整個開源項目的整體框架,閱讀每個方法就不再那麼難了。
7、當然如果有項目配套的開發文檔也是要閱讀的。
源碼解析-偏向鎖撤銷流程解讀
源碼鏈接:
簡單總結下偏向撤銷的流程:
細節補充:
如何判斷偏向所有者沒有正在持有該偏向鎖?
分兩步,首先判斷偏向所有者是否還活著,如果還活著,則遍歷它的棧,看是否能找到關聯該鎖的鎖記錄,如果找到,則正在持有,如果沒找到,則沒有持有。(遍歷過程在一個安全點執行,此時偏向所有者被阻塞。)
偏向所有者正在持有該偏向鎖,如何將其撤銷為輕量級鎖?
遍歷偏向所有者的棧,修改與該鎖關聯的所有頃橘旅鎖記錄,讓偏向所有者以為它對該對象加的就是輕量級鎖。
源碼中的highest_lock,為什麼說是最早關聯偏向鎖的鎖記錄呢?
首伍喊先,鎖記錄在棧里是連續存放的。
請求獲取鎖時,按照從低地址到高地址的順序,找在已關聯該鎖的鎖記錄之前,最後一個空閑的鎖記錄(沒有指向雀凳任何鎖對象)。
請求鎖的源碼如下:
而撤銷偏向鎖時,遍歷偏向所有者的鎖記錄,也是按照從低地址到高地址的順序,但它沒有break的邏輯,因為它要處理所有關聯該鎖的鎖記錄。所以退出循環後,highest_lock指向的是最早關聯該鎖的鎖記錄。
這篇:源碼解析-觸發批量撤銷或批量重偏向的條件,介紹了批量撤銷的觸發條件。
包含批量撤銷邏輯的源碼:
禁用類的可偏向屬性有兩點作用:
對於批量撤銷時,正在被線程持有的偏向鎖,通過在安全點遍歷所有Java線程的棧,將偏向鎖撤銷為輕量級鎖。
JAVA源碼解析的時候Character.MIN_RADIX為什麼=2?『』佔一個螞譽位,你想一下,如果值是1,那麼你怎麼輸笑物租入漢字
Character類的使用方法
Character:字元類型
1、屬碰兆性。
staticintMIN_RADIX:返回最小基數。
java解析eml的源代碼//?從EML文件得到MimeMessage對象
MimeMessage?message?=?new?MimeMessage(session,?new?FileInputStream(emlFile));
public?static?String?getMailSubject(Message?message)?throws?拆察Exception?{
return?MimeUtility.decodeText(message.getSubject());
}
public?static?String?getMailSender(Message?message)?throws?Exception?{
String?emailSender?=?null;
Address[]?addresses?=?message.getFrom();
if?(addresses?==?null?||?addresses.length??1)?{
throw?旅橘茄new?IllegalArgumentException("該郵件沒有發件人");
}
//?獲得發件人
InternetAddress?address?=?(InternetAddress)?addresses[0];
String?senderName?=?address.getPersonal();
if?(senderName?!=?null)?{
senderName?=?MimeUtility.decodeText(senderName);
emailSender?=?senderName?+?""?+?address.getAddress()?+?"";
}?else?{
senderName?=?address.getAddress();
}
return?emailSender;
}
public?static?String?getMailRecipients(Message?message,?Message.RecipientType?recipientType)?throws?Exception?{
StringBuilder?builder?=?new?StringBuilder();
Address[]?addresses?=?null;
if?(recipientType?==?null)?{
addresses?=?message.getAllRecipients();
}?else?{
addresses?=?message.getRecipients(recipientType);
}
if?(addresses?==?null?||?addresses.length??1)?{
throw?new?IllegalArgumentException("該郵件沒有收件人");
}
for?(Address?address?:?addresses)?{
InternetAddress?iAddress?=?(InternetAddress)?address;
builder.append(iAddress.toUnicodeString()).append(",?");
}
return?builder.deleteCharAt(builder.length()?-?1).toString();
}
public?static?String?getMailSendDate(Message?message,?String?pattern)?throws?Exception?{
String?sendDateString?=?null;
if?(pattern?==?null?||?"".equals(pattern.trim()))?{
pattern?=?"yyyy年MM月dd日?E?HH:mm";
}
Date?sendDate?=?message.getSentDate();
sendDateString?=?new?SimpleDateFormat(pattern).format(sendDate);
return?伍凱sendDateString;
}
public?static?boolean?containsAttachment(Part?part)?throws?Exception?{
boolean?flag?=?false;
if?(part?!=?null)?{
if?(part.isMimeType("multipart/*"))?{
MimeMultipart?mp?=?(MimeMultipart)?part.getContent();
for?(int?i?=?0;?i??mp.getCount();?i++)?{
BodyPart?bodyPart?=?mp.getBodyPart(i);
String?disposition?=?bodyPart.getDisposition();
if?(disposition?!=?null??(Part.ATTACHMENT.equalsIgnoreCase(disposition)
||?Part.INLINE.equalsIgnoreCase(disposition)))?{
flag?=?true;
}?else?if?(bodyPart.isMimeType("multipart/*"))?{
flag?=?containsAttachment(bodyPart);
}?else?{
String?contentType?=?bodyPart.getContentType();
if?(contentType.indexOf("application")?!=?-1)?{
flag?=?true;
}
if?(contentType.indexOf("name")?!=?-1)?{
flag?=?true;
}
}
if?(flag)
break;
}
}?else?if?(part.isMimeType("message/rfc822"))?{
flag?=?containsAttachment((Part)?part.getContent());
}
}
return?flag;
}
public?static?boolean?isSeen(Message?message)?throws?Exception?{
if?(message?==?null)?{
throw?new?MessagingException("Message?is?empty");
}
return?message.getFlags().contains(Flags.Flag.SEEN);
}
public?static?boolean?isReplaySign(Message?message)?throws?Exception?{
if?(message?==?null)?{
throw?new?MessagingException("Message?is?empty");
}
boolean?replaySign?=?false;
String[]?headers?=?message.getHeader("Disposition-Notification-To");
if?(headers?!=?null??headers.length??0)?{
replaySign?=?true;
}
return?replaySign;
}
public?static?String?getMailPriority(Message?message)?throws?Exception?{
if?(message?==?null)?{
throw?new?MessagingException("Message?is?empty");
}
String?priority?=?"普通";
String[]?headers?=?message.getHeader("X-Priority");
if?(headers?!=?null??headers.length??0)?{
String?mailPriority?=?headers[0];
if?(mailPriority.indexOf("1")?!=?-1?||?mailPriority.indexOf("High")?!=?-1)?{
priority?=?"緊急";
}?else?if?(mailPriority.indexOf("5")?!=?-1?||?mailPriority.indexOf("Low")?!=?-1)?{
priority?=?"低";
}?else?{
priority?=?"普通";?//?3或者Normal;
}
}
return?priority;
}
public?static?void?getMailTextContent(Part?part,?StringBuilder?content)?throws?Exception?{
if?(part?==?null)?{
throw?new?MessagingException("Message?content?is?empty");
}
boolean?containsTextInAttachment?=?part.getContentType().indexOf("name")??0;
if?(part.isMimeType("text/*")??containsTextInAttachment)?{
content.append(part.getContent().toString());
}?else?if?(part.isMimeType("message/rfc822"))?{
getMailTextContent((Part)?part.getContent(),?content);
}?else?if?(part.isMimeType("multipart/*"))?{
Multipart?mp?=?(Multipart)?part.getContent();
for?(int?i?=?0;?i??mp.getCount();?i++)?{
BodyPart?bodyPart?=?mp.getBodyPart(i);
getMailTextContent(bodyPart,?content);
}
}?else?if?(part.isMimeType("image/*"))?{
//?TODO?part.getInputStream()獲得輸入流然後輸出到指定的目錄
}?else?{
//?TODO?其它類型的contentType,?未做處理,?直接輸出
content.append(part.getContent().toString());
}
}
public?static?void?saveAttachment(Part?part,?String?destDir)?throws?Exception?{
if?(part?==?null)?{
throw?new?MessagingException("part?is?empty");
}
//?復雜的郵件包含多個郵件體
if?(part.isMimeType("multipart/*"))?{
Multipart?mp?=?(Multipart)?part.getContent();
//?遍歷每一個郵件體
for?(int?i?=?0;?i??mp.getCount();?i++)?{
BodyPart?bodyPart?=?mp.getBodyPart(i);
//?bodyPart也可能有多個郵件體組成
String?disposition?=?bodyPart.getDisposition();
if?(disposition?==?null??(Part.ATTACHMENT.equalsIgnoreCase(disposition)
||?Part.INLINE.equalsIgnoreCase(disposition)))?{
InputStream?in?=?bodyPart.getInputStream();
saveFile(in,?destDir,?decodeText(bodyPart.getFileName()));
}?else?if?(bodyPart.isMimeType("multipart/*"))?{
saveAttachment(bodyPart,?destDir);
}?else?{
String?contentType?=?bodyPart.getContentType();
if?(contentType.indexOf("name")?!=?-1?||?contentType.indexOf("application")?!=?-1)?{
saveFile(bodyPart.getInputStream(),?destDir,?decodeText(bodyPart.getFileName()));
}
}
}
}?else?if?(part.isMimeType("message/rfc822"))?{
saveAttachment((Part)?part.getContent(),?destDir);
}
}
public?static?void?saveFile(InputStream?in,?String?destDir,?String?fileName)?throws?Exception?{
FileOutputStream?out?=?new?FileOutputStream(new?File(destDir?+?fileName));
byte[]?buffer?=?new?byte[1024];
int?length?=?0;
while?((length?=?in.read(buffer))?!=?-1)?{
out.write(buffer,?0,?length);
}
out.close();
in.close();
}
public?static?String?decodeText(String?encodedText)?throws?Exception?{
if?(encodedText?==?null?||?"".equals(encodedText.trim()))?{
return?"";
}?else?{
return?MimeUtility.decodeText(encodedText);
}
}
⑤ 求Java web增刪改查 極簡源碼
//用戶新增
publicbooleanaddUser(Usersuser){
try{
conn=ConnDB.getConnection();
Stringsql="insertintotb_usersvalues(default,?,?,?,?,?,?)";
System.out.println(sql);
ps=conn.prepareStatement(sql);
ps.setInt(1,user.getDepID());
ps.setString(2,user.getUserName());
ps.setString(3,user.getUserPwd());
ps.setString(4,user.getUserCode());
ps.setString(5,user.getUserSex());
ps.setInt(6,user.getUserAge());
if(ps.executeUpdate()==1){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{//關閉當前頁打開的相關對象
ConnDB.close(conn,ps,null);
}
returnfalse;
}
//用戶刪除
publicbooleandelUser(intid){
try{
conn=ConnDB.getConnection();
Stringsql="deletefromtb_userswhereid=?";
System.out.println(sql);
ps=conn.prepareStatement(sql);
ps.setInt(1,id);
if(ps.executeUpdate()==1){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{//關閉當前頁打開的相關對象
ConnDB.close(conn,ps,null);
}
returnfalse;
}
//用戶編輯
publicbooleanupdateUser(Usersuser){
try{
conn=ConnDB.getConnection();
Stringsql="updatetb_userssetdepID=?,userName=?,userPwd=?,userCode=?,userSex=?,userAge=?whereid=?";
System.out.println(user.getDepID()+user.getUserName()+user.getUserPwd()+user.getUserCode()+user.getUserSex()+user.getUserAge()+user.getId());
ps=conn.prepareStatement(sql);
ps.setInt(1,user.getDepID());
ps.setString(2,user.getUserName());
ps.setString(3,user.getUserPwd());
ps.setString(4,user.getUserCode());
ps.setString(5,user.getUserSex());
ps.setInt(6,user.getUserAge());
ps.setInt(7,user.getId());
if(ps.executeUpdate()==1){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{//關閉當前頁打開的相關對象
ConnDB.close(conn,ps,null);
}
returnfalse;
}
//根據id查詢用戶
publicUsersfindAllUserById(intid){
Usersu=null;
DepDaodepd=null;
try{
conn=ConnDB.getConnection();
Stringsql="select*fromtb_userswhereid=?";
System.out.println(sql);
ps=conn.prepareStatement(sql);
ps.setInt(1,id);
rs=ps.executeQuery();
if(rs.next()){
depd=newDepDao();
Departmentdep=depd.findAllDepById(rs.getInt("depID"));
System.out.println(dep.getDepName());
u=newUsers();
u.setId(rs.getInt("id"));
u.setDepID(rs.getInt("depID"));
u.setUserName(rs.getString("userName"));
u.setUserPwd(rs.getString("userPwd"));
u.setUserCode(rs.getString("userCode"));
u.setUserSex(rs.getString("userSex"));
u.setUserAge(rs.getInt("userAge"));
u.setDep(dep);
}
}catch(Exceptione){
e.printStackTrace();
}finally{//關閉當前頁打開的相關對象
ConnDB.close(conn,ps,rs);
}
returnu;
}
這是我在層寫的代碼,都調用了ConnDB這個類,這個類完成了驅動的注冊,及連接資料庫的功能,代碼如下:
packagecom.asjy.util;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;
publicclassConnDB{
privatestaticStringurl="jdbc:mysql://localhost:3306/news";
privatestaticStringuser="root";
privatestaticStringpass="root";
//1.載入驅動
static{
try{
Class.forName("com.mysql.jdbc.Driver");
}catch(ClassNotFoundExceptione){
System.out.println("驅動載入失敗");
}
}
//2.建立資料庫連接對象
()throwsException{
returnDriverManager.getConnection(url,user,pass);
}
//3.關閉資料庫
publicstaticvoidclose(Connectionconn,Statementps,ResultSetrs){
try{
if(rs!=null){
rs.close();
rs=null;
}
if(ps!=null){
ps.close();
ps=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(SQLExceptione){
e.printStackTrace();
}
}
}
⑥ 用java web小游戲源代碼。期末結課老師讓做,急用,謝了
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
@SuppressWarnings("serial")
public class MainClass extends JFrame {
ControlSnake control;
Toolkit kit;
Dimension dimen;
public static void main(String[] args) {
new MainClass("my snake");
}
public MainClass(String s) {
super(s);
control = new ControlSnake();
control.setFocusable(true);
kit = Toolkit.getDefaultToolkit();
dimen = kit.getScreenSize();
add(control);
setLayout(new BorderLayout());
setLocation(dimen.width / 3, dimen.height / 3);// dimen.width/3,dimen.height/3
setSize(FWIDTH, FHEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setVisible(true);
}
public static final int FWIDTH = 315;
public static final int FHEIGHT = 380;
}
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer;
@SuppressWarnings("serial")
public class ControlSnake extends JPanel implements ActionListener {
Random rand;
ArrayList<Point> list, listBody;
String str, str1;
static boolean key;
int x, y, dx, dy, fx, fy, flag;
int snakeBody;
int speed;
public ControlSnake() {
snakeBody = 1;
str = "上下左右方向鍵控制 P鍵暫停...";
str1 = "現在的長度為:" + snakeBody;
key = true;
flag = 1;
speed = 700;
rand = new Random();
list = new ArrayList<Point>();
listBody = new ArrayList<Point>();
x = 5;
y = 5;
list.add(new Point(x, y));
listBody.add(list.get(0));
dx = 10;
dy = 0;
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
setBackground(Color.BLACK);
setSize(new Dimension(318, 380));
final Timer time = new Timer(speed, this);
time.start();
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 37) {
dx = -10;
dy = 0;
} else if (e.getKeyCode() == 38) {
dx = 0;
dy = -10;
} else if (e.getKeyCode() == 39) {
dx = 10;
dy = 0;
} else if (e.getKeyCode() == 40) {
dx = 0;
dy = 10;
} else if (e.getKeyCode() == 80) {
if (flag % 2 == 1) {
time.stop();
}
if (flag % 2 == 0) {
time.start();
}
flag++;
}
}
});
}
public void paint(Graphics g) {
g.setColor(Color.WHITE);
g.fillRect(0, 0, 400, 400);
g.setColor(Color.DARK_GRAY);
g.drawLine(3, 3, 305, 3);
g.drawLine(3, 3, 3, 305);
g.drawLine(305, 3, 305, 305);
g.drawLine(3, 305, 305, 305);
g.setColor(Color.PINK);
for (int i = 0; i < listBody.size(); i++) {
g.fillRect(listBody.get(i).x, listBody.get(i).y, 9, 9);
}
g.fillRect(x, y, 9, 9);
g.setColor(Color.ORANGE);
g.fillRect(fx, fy, 9, 9);
g.setColor(Color.DARK_GRAY);
str1 = "現在的長度為:" + snakeBody;
g.drawString(str, 10, 320);
g.drawString(str1, 10, 335);
}
public void actionPerformed(ActionEvent e) {
x += dx;
y += dy;
if (makeOut() == false) {
JOptionPane.showMessageDialog(null, "重新開始......");
speed = 700;
snakeBody = 1;
x = 5;
y = 5;
list.clear();
list.add(new Point(x, y));
listBody.clear();
listBody.add(list.get(0));
dx = 10;
dy = 0;
}
addPoint(x, y);
if (x == fx && y == fy) {
speed = (int) (speed * 0.8);//速度增加參數
if (speed < 200) {
speed = 100;
}
fx = rand.nextInt(30) * 10 + 5;// 2
fy = rand.nextInt(30) * 10 + 5;// 2
snakeBody++;// 2
} // 2
repaint();
}
public void addPoint(int xx, int yy) {
// 動態的記錄最新發生的50步以內的移動過的坐標
// 並畫出最新的snakeBody
if (list.size() < 100) {//蛇身長度最長為100
list.add(new Point(xx, yy));
} else {
list.remove(0);
list.add(new Point(xx, yy));
}
if (snakeBody == 1) {
listBody.remove(0);
listBody.add(0, list.get(list.size() - 1));
} else {
listBody.clear();
if (list.size() < snakeBody) {
for (int i = list.size() - 1; i > 0; i--) {
listBody.add(list.get(i));
}
} else {
for (int i = list.size() - 1; listBody.size() < snakeBody; i--) {
listBody.add(list.get(i));
}
}
}
}
public boolean makeOut() {
if ((x < 3 || y < 3) || (x > 305 || y > 305)) {
return false;
}
for (int i = 0; i < listBody.size() - 1; i++) {
for (int j = i + 1; j < listBody.size(); j++) {
if (listBody.get(i).equals(listBody.get(j))) {
return false;
}
}
}
return true;
}
}
/*貪吃蛇代碼*/