読者です 読者をやめる 読者になる 読者になる

大学課題用記事

自作の簡易ポケモンダメージ計算アプリソースコード

 

 

import java.awt.Button;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class DamageCalculator extends JFrame implements ItemListener {
// ■ フィールド変数
CheckboxGroup grp1, grp2, grp3, grp4, grp5; // チェックボックスのグループのクラス
Checkbox cbx1, cbx2, cbx3, cbx4, cbx5, cbx6, cbx7, cbx8, cbx9, cbx10, cbx11;//チェックボックス一つずつの変数
Checkbox cbxa, cbxb, cbxc, cbxd, cbxe, cbxf, cbxg, cbxh, cbxi, cbxj, cbxk;//同上
boolean isStacked = false;//テキストフィールドに入力されているか否か
Button btg;//ボタン
String currentOp = "";
double stackedValue = 0.0;
boolean afterCalc = false;
JTextField result = new JTextField("");
Label lb1, lb2, lb3, lb4, lb5, lb6, lb7,lb8;
double red = 1, green = 0, blue = 0;
double type1 = 1, type2 = 1;
double having = 1.5;
double field = 1;
double weather1 = 1;
double weather2 = 1;
String ss = "";
TextField txt1, txt2, txt3, txt4, txt5, txt6;
double txt11 = 0.0;
double txt22 = 0.0;
double txt33 = 0.0;
double txt44 = 0.0;//使用する変数を定義&代入


public static void main(String [] args) {
DamageCalculator scbg = new DamageCalculator(); //アプリ開始

}

 

// ■ コンストラクタ
DamageCalculator() {
super("ポケモンダメージ計算");//タイトル
this.setSize(1000, 300); //サイズ設定
this.setLayout(new FlowLayout(FlowLayout.LEFT, 30, 30));//左詰め、間隔設定

grp1 = new CheckboxGroup();//チェックボックスグループインスタンス
grp2 = new CheckboxGroup();//チェックボックスグループインスタンス
grp3 = new CheckboxGroup();//チェックボックスグループインスタンス
grp4 = new CheckboxGroup();//チェックボックスグループインスタンス
grp5 = new CheckboxGroup();//チェックボックスグループインスタンス

lb5 = new Label("攻撃側 実数値:");//入力するものを表示
add(lb5);//ラベルを挿入
txt1 = new TextField(5); // 5文字幅設定
add(txt1); //テキストフィールド挿入

lb6 = new Label("攻撃側 技威力:");//入力するものを表示
add(lb6);//ラベルを挿入
txt3 = new TextField(5); // 5文字幅設定
add(txt3); //テキストフィールドを挿入

lb3 = new Label("タイプ一致補正を選択する:");//選択するものを表示
add(lb3);//ラベルを挿入

cbx6 = new Checkbox("なし", true, grp3);//grp3内で最初に選択されている。表記はなし
cbx6.addItemListener(this); add(cbx6); //チェックボックスを一つ表記
cbx7 = new Checkbox("あり", false, grp3);//grp3内で選択されていない。表記はあり
cbx7.addItemListener(this); add(cbx7);//チェックボックスを一つ表記



lb2 = new Label("持ち物補正を選択する:");//選択するものを表示
add(lb2);//ラベルを挿入

cbxa = new Checkbox("1.5倍", true, grp2);//grp2内で最初に選択されている。表記は1.5倍
cbxa.addItemListener(this); add(cbxa);//チェックボックスを一つ表記
cbxb = new Checkbox("1.3倍", false, grp2);//grp2内で選択されていない。表記は1.3倍
cbxb.addItemListener(this); add(cbxb);//チェックボックスを一つ表記
cbxc = new Checkbox("1.2倍", false, grp2);//grp2内で選択されていない。表記は1.2倍
cbxc.addItemListener(this); add(cbxc);//チェックボックスを一つ表記
cbxd = new Checkbox("1.1倍", false, grp2);//grp2内で選択されていない。表記は1.1倍
cbxd.addItemListener(this); add(cbxd);//チェックボックスを一つ表記
cbxe = new Checkbox("なし", false, grp2);//grp2内で選択されていない。表記はなし
cbxe.addItemListener(this); add(cbxe);//チェックボックスを一つ表記

lb8 = new Label("弱点・抵抗:");//選択するものを表示
add(lb8);//ラベルを挿入

cbxg = new Checkbox("等倍", true, grp5);//grp5内で最初に選択されている。表記は等倍
cbxg.addItemListener(this); add(cbxg);//チェックボックスを一つ表記
cbxh = new Checkbox("2倍", false, grp5);//grp5内で選択されていない。表記は2倍
cbxh.addItemListener(this); add(cbxh);//チェックボックスを一つ表記
cbxi = new Checkbox("4倍", false, grp5);//grp5内で選択されていない。表記は4倍
cbxi.addItemListener(this); add(cbxi);//チェックボックスを一つ表記
cbxj = new Checkbox("0.5倍", false, grp5);//grp5内で選択されていない。表記は0.5倍
cbxj.addItemListener(this); add(cbxj); //チェックボックスを一つ表記
cbxk = new Checkbox("0.25倍", false, grp5);//grp5内で選択されていない。表記は0.25倍
cbxk.addItemListener(this); add(cbxk);//チェックボックスを一つ表記




lb7 = new Label("防御側 防御実数値:");//入力するものを表示
add(lb7);//ラノベを挿入

txt5 = new TextField(5); // txt5の設定
add(txt5);//テキストフィールドを挿表示

lb1 = new Label("フィールド効果を選択する:");//選択するものを表示
add(lb1);//ラベルを表示

cbx1 = new Checkbox("なし", true, grp1);//grp1内で最初に選択されている。表記はなし
cbx1.addItemListener(this); add(cbx1);//チェックボックスを一つ表記
cbx2 = new Checkbox("エレキ", false, grp1);//grp1内で選択されていない。表記はエレキ
cbx2.addItemListener(this); add(cbx2);//チェックボックスを一つ表記
cbx3 = new Checkbox("ミスト", false, grp1);//grp1内で選択されていない。表記はミスト
cbx3.addItemListener(this); add(cbx3);//チェックボックスを一つ表記
cbx4 = new Checkbox("サイコ", false, grp1);//grp1内で選択されていない。表記はサイコ
cbx4.addItemListener(this); add(cbx4); //チェックボックスを一つ表記
cbx5 = new Checkbox("グラス", false, grp1);//grp1内で選択されていない。表記はグラス
cbx5.addItemListener(this); add(cbx5);//チェックボックスを一つ表記

lb4 = new Label("天候補正を選択する:");//選択するものを表示
add(lb4);//ラベルを表記


cbx8 = new Checkbox("なし", true, grp4);//grp4内で最初に選択されている。表記はなし
cbx8.addItemListener(this); add(cbx8);//チェックボックスを一つ表記
cbx9 = new Checkbox("日照り", false, grp4);//grp4内で選択されていない。表記は日照り
cbx9.addItemListener(this); add(cbx9);//チェックボックスを一つ表記
cbx10 = new Checkbox("雨", false, grp4);//grp4内で選択されていない。表記は雨
cbx10.addItemListener(this); add(cbx10);//チェックボックスを一つ表記
cbx11 = new Checkbox("砂嵐", false, grp4);//grp4内で選択されていない。表記は砂嵐
cbx11.addItemListener(this); add(cbx11);//チェックボックスを一つ表記

 


btg = new Button("計算"); add(new CalcButton("計算"), btg);//ボタンのインスタンス化と表示

lb5 = new Label("結果:");//出力結果が次のテキストフィールドに表示されることを表示
add(lb5);//ラベルの表記

txt4 = new TextField(15); // txt4の設定
add(txt4);//テキストフィールドを挿入

 


this.setVisible(true);//可視化
}



public void itemStateChanged(ItemEvent e) {
if (cbx1.getState() == true) field = 1; //cbx1がチェックされている場合fieldは1になる
if (cbx2.getState() == true) field = 1.5;//cbx2がチェックされている場合fieldは1.5になる
if (cbx3.getState() == true) field = 0.5; //cbx3がチェックされている場合fieldは0.5になる
if (cbx4.getState() == true) field = 1.5;//cbx4がチェックされている場合fieldは1.5になる
if (cbx5.getState() == true) field = 1.5;//cbx5がチェックされている場合fieldは1.5になる

if (cbx6.getState() == true) type1 = 1;//cbx6がチェックされている場合type1は1になる
if (cbx7.getState() == true) type1 = 1.5; //cbx7がチェックされている場合type1は1.5になる

if (cbxa.getState() == true) having = 1.5;//cbxaがチェックされている場合havingは1.5になる
if (cbxb.getState() == true) having = 1.3;//cbxbがチェックされている場合havingは1.3になる
if (cbxc.getState() == true) having = 1.2;//cbxcがチェックされている場合havingは1.2になる
if (cbxd.getState() == true) having = 1.1;//cbxdがチェックされている場合havingは1.1になる
if (cbxe.getState() == true) having = 1.0;//cbxeがチェックされている場合havingは1になる

if (cbx8.getState() == true) weather1 = 1;//cbx8がチェックされている場合weather1は1になる
if (cbx9.getState() == true) weather1 = 1.5; //cbx9がチェックされている場合weather1は1.5になる
if (cbx10.getState() == true) weather1 = 1.5;//cbx10がチェックされている場合weather1は1.5になる
if (cbx11.getState() == true) weather2 = 1.5; //cbx11がチェックされている場合weather2は1.5になる
if (cbx11.getState() == true) weather1 = 1; //cbx11がチェックされている場合weather1は1になる
else if (cbx11.getState() == false) weather2 = 1;//cbx11が選択されていないときweather2は1になる

if (cbxg.getState() == true) type2 = 1.0;//cbxgがチェックされている場合type2は1になる
if (cbxh.getState() == true) type2 = 2.0;//cbxhがチェックされている場合type2は2になる
if (cbxi.getState() == true) type2 = 4.0;//cbxiがチェックされている場合type2は4になる
if (cbxj.getState() == true) type2 = 0.5;//cbxjがチェックされている場合type2は0.5になる
if (cbxk.getState() == true) type2 = 0.25;//cbxkがチェックされている場合type2は0.25になる

 

}

public class CalcButton extends JButton implements ActionListener{


public CalcButton(String op){
super(op);
this.addActionListener(this);//ボタンが押された際に反応するようになる
}

public void actionPerformed(ActionEvent e){//ボタンが押された時

if(isStacked){//テキストフィールドが埋まっていれば


if ( currentOp.equals("計算")){ //押したボタンが計算という文字と一致していたならば計算
double attack = (Double.valueOf(txt1.getText())).doubleValue();//攻撃実数値
double technique = (Double.valueOf(txt3.getText())).doubleValue();//技威力

double defence = (Double.valueOf(txt5.getText())).doubleValue() * weather2;//防御側防御実数値

double a = (22 * technique * attack / defence / 50) + 2;//演算
double aa = Math.floor(a);//切り捨て処理
double b = aa * type1;//演算
double bb = Math.floor(b);//切り捨て処理
double c = bb * type2 * field;//演算
double cc =Math.floor(c);//切り捨て処理
double d = cc * weather1;//演算
double dd = Math.floor(d);//切り捨て処理
double f = dd * having;//最高乱数
double ff = Math.floor(f);//切り捨て処理
double g = ff * 0.85;//最低乱数
double gg = Math.floor(g);//切り捨て処理


txt4.setText(String.valueOf(gg) + "~" + String.valueOf(ff));//値を表示
}
}
currentOp = this.getText();//テキストに表示されている文字を代入
afterCalc =true;//afterCalcをtrueに

if( currentOp.equals("")){//取得したテキストに何も表示されていないなら
isStacked = false;//false
}
else{
isStacked = true;//それ以外はtrue
}
}


}


}

 

 

参考

fred7777.blog.fc2.com