看了這套題目感覺很有興趣,就花了一個中午親手給你寫了一個類似的例子,相信可以幫助你對這個游戲有很好的理解,從右向左那個是僵尸,點一下鼠標(biāo)就出現(xiàn)植物,我只是起到一個拋磚引玉的作用。代碼如下(絕對可以用的代碼):
創(chuàng)新互聯(lián)基于成都重慶香港及美國等地區(qū)分布式IDC機房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)服務(wù)器托管報價,主機托管價格性價比高,為金融證券行業(yè)服務(wù)器主機托管,ai人工智能服務(wù)器托管提供bgp線路100M獨享,G口帶寬及機柜租用的專業(yè)成都idc公司。
import?java.awt.Dimension;
import?java.awt.Graphics;
import?java.awt.event.MouseEvent;
import?java.util.Vector;
import?javax.swing.JFrame;
import?javax.swing.event.MouseInputAdapter;
public?class?PlantsAndZombies?extends?JFrame?{
private?static?final?long?serialVersionUID?=?1L;
public?static?final?int?screenWidth=800;
public?static?final?int?screenHeight=600;
Printer?printer;
Zombies?zombies=new?Zombies();
Thread?T_Zombies;
Bullet?bullet=new?Bullet();
Thread?T_Bullet;
public?PlantsAndZombies(){
this.setSize(new?Dimension(screenWidth,screenHeight));
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
this.addMouseListener(new?Shoot(this));
this.setVisible(true);
printer=new?Printer(?this.getGraphics());
printer.Add(zombies);
printer.Add(bullet);
T_Zombies=new?Thread(zombies);
T_Zombies.start();
T_Bullet=new?Thread(bullet);
T_Bullet.start();
}
public?void?Shoot(){
bullet.getTarget(zombies);
}
public?static?void?main(String[]?args){
PlantsAndZombies?game=new?PlantsAndZombies();
}
public?void?run()?{
while(true){
}
}
}
interface?Drawable{
void?drawMe(Graphics?g);
}
class?Zombies?implements?Drawable,Runnable{
public?boolean?isLive=true;
public?int?x=PlantsAndZombies.screenWidth;
public?int?y=500;
public?void?run()?{
while(true){
if(x10){
x-=20;
}else?x=PlantsAndZombies.screenWidth;
try?{
Thread.sleep(500);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
public?void?drawMe(Graphics?g){
g.drawRect(x,y,20,50);
}
}
class?Bullet?implements?Drawable,Runnable{
private?int?x=0;
private?int?y=500;
private?Zombies?_z;
private?float?a,b,c;
private?float?step;
public?void?getTarget(Zombies?z){
_z=z;
//?用三點確定一個拋物線的方法,計算彈道
int?x1=0;
int?y1=500;
int?x2=(z.x-6*20)/2;
int?y2=300;??//?拋物線高度200個像素
int?x3=z.x-6*20;?//?假設(shè)擊中僵尸用3秒鐘,在這3秒鐘內(nèi)僵尸向前移動了6*20個像素
int?y3=500;
a=(float)((y2-y1)*(x3-x2)-(y3-y2)*(x2-x1))/(float)((x2*x2-x1*x1)*(x3-x2)-(x3*x3-x2*x2)*(x2-x1));
b=(float)((y2-y1)-a*(x2*x2-x1*x1))/(float)(x2-x1);
c=y1-a*x1*x1-b*x1;
step=(float)(x3-x1)/(float)(3*20);
}
public?void?run()?{
while(true){
try?{
x+=step;
y=(int)(a*x*x+b*x+c);
if(y500){
_z.isLive=false;
}
Thread.sleep(50);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
public?void?drawMe(Graphics?g)?{
g.drawRect(x,y,20,20);
}
}
class?Printer?extends?Thread{
private?VectorDrawable?v=new?VectorDrawable();
private?Graphics?_g;
public?Printer(Graphics?g){
_g=g;
this.start();
}
public?void?Add(Drawable?o){
v.add(o);
}
public?void?run(){
while(true){
_g.clearRect(0,0,PlantsAndZombies.screenWidth,PlantsAndZombies.screenHeight);
for(Drawable?o:v){
o.drawMe(_g);
}
try?{
Thread.sleep(500);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
}
}
}
class?Shoot?extends?MouseInputAdapter{
private?PlantsAndZombies?_adaptee;
public?Shoot(PlantsAndZombies?adaptee){
_adaptee=adaptee;
}
public?void?mouseClicked(MouseEvent?e)?{
_adaptee.Shoot();
}
}
1、首先描一個坐標(biāo)軸
2、確定方程式
3、打點
4、連線
5、取出打點的坐標(biāo),按照順序依次變更顏色(做出運動效果)
6、簡單的一元二次方程舉例【步驟5留給題主思考】
public class View extends JFrame {
public View() {
JFrame frame = new JFrame("Equation");
frame.getContentPane().setLayout(new BorderLayout());
JPanel panel1 = new JPanel();
panel1.setPreferredSize(new Dimension(50, 50));
JLabel labelA = new JLabel();
labelA.setText("a");
JTextField textA = new JTextField("0",3);
JLabel labelB = new JLabel();
labelB.setText("b");
JTextField textB = new JTextField("0",3);
JLabel labelC = new JLabel();
labelC.setText("c");
JTextField textC = new JTextField("0",3);
JButton draw = new JButton();
draw.setText("Draw");
draw.addActionListener( new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
Controller.a = Double.parseDouble(textA.getText());
Controller.b = Double.parseDouble(textB.getText());
Controller.c = Double.parseDouble(textC.getText());
repaint();
frame.pack();
frame.setSize(420,490);
}
});
panel1.add(labelA);
panel1.add(textA);
panel1.add(labelB);
panel1.add(textB);
panel1.add(labelC);
panel1.add(textC);
panel1.add(draw);
JPanel panel2 = new JPanel(){
public void paint(Graphics g){
super.paint(g);
Controller.grid(g);
Controller.Graphic1(g);
}
};
panel2.setBackground(Color.WHITE);
frame.getContentPane().add(panel1, BorderLayout.PAGE_START);
frame.getContentPane().add(panel2, BorderLayout.CENTER);
frame.setVisible(true);
frame.setSize(420,490);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
View frame = new View();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
public class Controller {
static double a=2, b=1, c=0;
public static void grid (Graphics g){
g.setColor(Color.blue);
g.drawLine(200,0,200,400);
g.drawLine(0,200,400,200);
for (int x=0; x=400; x= x +40){
g.drawLine(x,195,x,205);
}
for (int y=0; y=400; y=y+40){
g.drawLine(195,y,205,y);
}
}
public static void Graphic1(Graphics g) {
g.setColor(Color.red);
for (double x=-100;x=100;x = x+0.1){
double y = a * x * x + b * x + c;
int X = (int)Math.round(200 + x*20);
int Y = (int)Math.round(200 - y*20);
g.fillOval(X-2,Y-2,4,4);
}
}
}
……首先,這個明顯不是拋物線,而是sin/cos曲線
我習(xí)慣用輕量組件
取兩個數(shù),x1和y1,x從最左邊到最右邊循環(huán)賦值,y1=f(x1)
再取兩個數(shù),x2和y2,x2就是下一個x1的值,y2=f(x2)
其中f(x)是一個函數(shù),可以是sin(x),也可以是x的平方。
創(chuàng)建一個JPanel,但是別直接定義JPanel類,你需要這樣創(chuàng)建:
ClassName variable = new ClassName(parameters);
其中這個ClassName,需要你繼承JPanel,并覆蓋里邊的paintComponent(Graphics g)方法,不這樣創(chuàng)建是畫不出來的。
接下來就開始畫,g.drawLine(x1, y1, x2, y2),精度可能不高,但是效果是如圖的。
哎呀我靠逗比了,答完了才看見是在控制臺輸出的
前面也不用刪,但是把
g.drawLine(x1, y1, x2, y2)
換成
g.drawRect(x1, y1, 1, 1)
比較好,x2和y2就扔了吧。
要在控制臺輸出,先定義一下每行長度和寬度,也就是橫坐標(biāo)和縱坐標(biāo)。
越多越精細,但是太多了也不行,一行打不出來,會很……
然后用下面的兩個句子:
BufferedImage b=new BufferedImage(剛才那個面板的長度、寬度、1是三個需要傳遞的參數(shù));
某個面板.paint(b.createGraphics());
這樣把面板上顯示的內(nèi)容輸入在一個名字叫b的圖像里
這時候就可以用兩個循環(huán)嵌套,來挨個檢查b上的每一個點的顏色,用這個句子:
int color=b.getRGB(x, y);其中x和y分別是橫縱坐標(biāo)。color就是一個16進制的數(shù)字
轉(zhuǎn)成紅綠藍三色,就用下面這個:
int r=(color0xff0000)16, g=(color0xff00)8, b=color0xff;
(重名什么的去死吧?。?/p>
然后我們一般都是用黑筆來畫函數(shù)圖像對吧,就用if語句判斷紅綠藍是否都為0,如果是則系統(tǒng)打印一個*號,如果不是則系統(tǒng)打印一個空格。
最后再加一行,當(dāng)橫坐標(biāo)超出時,系統(tǒng)打印一個轉(zhuǎn)行符。
網(wǎng)站題目:java寫出拋物線代碼 java實現(xiàn)平拋
新聞來源:http://jinyejixie.com/article32/dosgcsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、搜索引擎優(yōu)化、微信公眾號、品牌網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、軟件開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容