■スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

■抽選プログラムのソース

mixiに書こうとおもったけど、文字制限にひかかったのでこっちにおいておきますね。

ほしい人いればスカイプのほうで申し出てくれれば、まだ修正するとおもいますが現時点のものをプレゼントしますよ////


抽選

追記にソース張っておきますね

---------------------------------
メインプログラム
フレームを出力、フレームにタブつけたりとかいろいろしてるプログラム。ボタンを押したら反応するようにするのもここにおいてあります。

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class SeiretuHojo extends JFrame implements ActionListener{
/*変数を設定*/
private String[] seiretumaeBuf; //整列前のデータを格納する領域
private boolean fcRenbanYou; //頭の連番を振るか振らないかのフラグ
private boolean fcSyuturyokuyou=true; //大会プログラムのFCを出力するかの判定
private boolean tyuusenFlag; //抽選プログラム1回目配列とかを作る判定
public boolean[] tyuusenyou; //抽選プログラムの出力判定表
public int tyuusenKai; //抽選プログラムの抽選回数をカウント
/*インスタンスの生成*/
BotanHantei bf=new BotanHantei();
TaikaiMes tm=new TaikaiMes();
Taikaityusen tt=new Taikaityusen();
/*FC整列*/
/*ボタン系*/
JButton fcDelete; //FC整列変換前エリアのクリアボタン
JButton fcHarituke; //FC整列変換前エリアに貼り付けボタン
JButton fcNoAri; //FCの変換時頭に数字をつけるボタン
JButton fcNoNasi; //FCの変換時頭に数字をつけないボタン
JButton fckopi; //FC整理後のエリアのコピーボタン
/*テキスト系*/
JTextArea fchenkanMae; //FC整列前の領域
JTextArea fchenkanGo; //FC整列後の領域
/*大会抽選用*/
/*ボタンエリア*/
JButton taSyutoku; //FC整理変換後のエリアを取得するボタン
JButton taHarituke; //FCを貼り付けして改行をするボタン
JButton taTyuusen; //シャッフルして抽選するボタン
JButton taKopi; //抽選したエリアのコピーボタン
/*テキスト系*/
JTextArea taikaiMae; //大会抽選前の領域
JTextArea taikaiGo; //大会抽選後の領域
JTextArea taikaiMes; //大会用のメッセージ領域
JTextField taName; //大会シード用の名前の領域
JTextField taKibo; //大会の規模用のフィールド
JTextField taSidNin; //大会のシード用のエリア
JTextField taNinzu; //大会用人数の領域
JTextField taBroksu; //大会用ブロック数の領域

/*ラジオボックス*/
ButtonGroup taFcumu; //大会用ラジオグループ
JRadioButton taRaFcDeru; //大会抽選後FC出力
JRadioButton taRaFcDenai; //大会抽選後FC未出力

/*抽選用*/
/*ボタン系*/
JButton tyuSyutoku; //FC整理変換後のエリアを取得するボタン
JButton tyuHarituke; //抽選前エリアに貼り付けして改行ボタン
JButton tyuTyusen; //抽選するエリア
JButton tyuRiset; //抽選情報を1回リセットするエリア
JButton tyuKopi; //抽選後エリアのコピー

/*テキストエリア*/
JTextArea tyuusenMae; //抽選したい人を入力する領域
JTextArea tyuusenGo; //抽選された人を出力する領域
JTextField tyuusenNin; //1回抽選するを押すと出力する人数を出力

/*フォント設定*/
Font fgop14 = new Font("MS Gothic",Font.PLAIN, 14);
Font fgo10 = new Font("MS Gothic",Font.BOLD, 10);
Font fgo12 = new Font("MS Gothic",Font.BOLD, 12);
Font fgo13 = new Font("MS Gothic",Font.BOLD, 13);
Font fgo14 = new Font("MS Gothic",Font.BOLD, 14);

/*フレーム*/
JPanel p = new JPanel();
/*メインメソッド*/
public static void main(String[] args){
SeiretuHojo ju=new SeiretuHojo();
ju.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ju.setSize(600, 480); //表示場所&表示サイズの決定
ju.setTitle("補助ツール"); //名前の設定
ju.setResizable(false); //サイズを変更不可能
ju.setVisible(true); //フレームの表示
}
SeiretuHojo(){
/*タブの作成*/
JTabbedPane tabHojo = new JTabbedPane();
/*タブ内のフレーム生成*/
JPanel tabCFSeiri = new JPanel(); //FC整理用タブ
JPanel tabTaikai = new JPanel(); //大会抽選用タブ
JPanel tabTyuusen = new JPanel(); //抽選用タブ
tabCFSeiri.setLayout(null); //FC整理用タブのレイアウトの設定
tabTaikai.setLayout(null); //大会抽選用タブのレイアウトの設定
tabTyuusen.setLayout(null); //抽選用タブのレイアウトの設定
/*タブ*/
tabHojo.addTab("FC整理",tabCFSeiri); //FC整理タブの追加
tabHojo.addTab("大会用",tabTaikai); //大会用のタブ追加
tabHojo.addTab("抽選用",tabTyuusen); //抽選用のタブ追加
tabHojo.setBounds(0, 0, 600, 480); //タブをメインフレームに設定
p.add(tabHojo); //メインフレームに設定
p.setLayout(null);
/*
*ここから各部品の設定
*/
/*FC整列用*/
JLabel fcsetumei1,fcsetumei2,fcsetumei3; //3つのラベルの設定
/*テキストエリア用のラベルの設定*/
fcsetumei1 =new JLabel("変換前FC"); //ラベルに文字の設定
fcsetumei1.setFont(fgo14); //ラベルにフォントの設定
fcsetumei1.setBounds(60, 0, 200, 25); //位置&サイズ設定
/*テキストエリアの設定*/
fchenkanMae =new JTextArea();
fchenkanMae.setFont(fgop14); //テキストエリアにフォントの設定
JScrollPane fcsc1 = new JScrollPane(fchenkanMae);//テキストエリアにスクロールバーを設定
fcsc1.setBounds(20, 25, 300, 350); //位置&サイズの設定
/*テキストエリア用のラベルの設定*/
fcsetumei2 =new JLabel("変換後FC"); //ラベルに文字の設定
fcsetumei2.setFont(fgo14); //ラベルにフォント設定
fcsetumei2.setBounds(380, 0, 200, 25); //位置&サイズ設定
/*テキストエリア&スクロールバー設定*/
fchenkanGo = new JTextArea();
fchenkanGo.setFont(fgop14); //テキストエリアにフォントの設定
JScrollPane fcsc2 = new JScrollPane(fchenkanGo);//テキストエリアにスクロールバーの設定
fcsc2.setBounds(340, 25, 235, 350); //位置&サイズの設定
/*ラベルの設定*/
fcsetumei3 =new JLabel("変換方法:連番"); //ラベルに文字設定
fcsetumei3.setFont(fgo13); //ラベルにフォント設定
fcsetumei3.setBounds(270, 370, 200, 20); //位置&サイズ設定
/*ボタンの設定*/
fcDelete = new JButton("クリア"); //変換前FCテキストエリアクリア用
fcDelete.setBounds(20, 380, 80, 30); //位置&サイズ設定
fcHarituke=new JButton("貼り付け"); //返還前FCテキストエリアに貼り付け用
fcHarituke.setBounds(130, 380, 90, 30); //位置&サイズの設定
fcNoAri = new JButton("有り"); //頭に連番を振るボタン
fcNoAri.setBounds(250, 390, 70, 20); //位置&サイズ設定
fcNoNasi= new JButton("無し"); //頭に連番を振らないボタン
fcNoNasi.setBounds(320, 390, 70, 20); //位置&サイズ設定
fckopi = new JButton("コピー"); //テキストエリアコピーボタン
fckopi.setBounds(420, 380, 80, 30); //位置&サイズ設定
/*FC整理タブに部品の貼り付け*/
tabCFSeiri.add(fcsetumei1);
tabCFSeiri.add(fcsc1);
tabCFSeiri.add(fcsetumei2);
tabCFSeiri.add(fcsc2);
tabCFSeiri.add(fcsetumei3);
tabCFSeiri.add(fcDelete);
tabCFSeiri.add(fcHarituke);
tabCFSeiri.add(fcNoAri);
tabCFSeiri.add(fcNoNasi);
tabCFSeiri.add(fckopi);
/*ボタンを押下の監視*/
fcDelete.addActionListener(this);
fcHarituke.addActionListener(this);
fcNoAri.addActionListener(this);
fcNoNasi.addActionListener(this);
fckopi.addActionListener(this);

/*大会整理用*/
JLabel tasetumei1,tasetumei2,tasetumei3,tasetumei4,tasetumei5,tasetumei6,tasetumei7;

/*ラベルの設定*/
tasetumei1 =new JLabel("抽選したい人を入力");//ラベルに文字設定
tasetumei1.setFont(fgo13); //フォントの設定
tasetumei1.setBounds(50, 0, 200, 25); //位置&サイズ設定
/*テキストエリアの設定*/
taikaiMae = new JTextArea(); //テキストエリアの設定
taikaiMae.setFont(fgop14); //テキストエリアにフォントの設定
JScrollPane tasc1 = new JScrollPane(taikaiMae);//スクロールの設定
tasc1.setBounds(20, 25,185, 350); //位置&サイズの設定
/*ラベルの設定*/
tasetumei2 =new JLabel("抽選結果"); //ラベルに文字の設定
tasetumei2.setFont(fgo13); //フォントの設定
tasetumei2.setBounds(450, 0, 200, 25); //位置&サイズ設定
/*テキストエリア&スクロールバー設定*/
taikaiGo = new JTextArea(""); //テキストエリアの設定
JScrollPane tasc2 = new JScrollPane(taikaiGo);//スクロールの設定
tasc2.setBounds(385, 25,185, 350); //位置&サイズの設定
/*テキストエリア&スクロールバー設定*/
taikaiMes=new JTextArea("エラーメッセージなどの表示");
JScrollPane tasc3 = new JScrollPane(taikaiMes);//スクロールの設定
taikaiMes.setEditable(false); //テキストエリアの編集不可能
tasc3.setBounds(210,175,170,200); //位置&サイズの設定
/*ラベルの設定*/
tasetumei3 =new JLabel("FC出力"); //ラベルに文字設定
tasetumei3.setFont(fgo13); //フォントの設定
tasetumei3.setBounds(270, 10, 200, 20); //位置&サイズの設定
/*ラジオボタン*/
taFcumu =new ButtonGroup(); //ラジオグループの設定
taRaFcDeru= new JRadioButton("する",true);//するボタンの設定&デフォルトで選択
taRaFcDeru.setBounds(220, 27, 80, 18); //位置&サイズの設定
taRaFcDenai=new JRadioButton("しない",false);//しないボタンの設定
taRaFcDenai.setBounds(300, 26, 80, 18); //位置&サイズの設定
taFcumu.add(taRaFcDeru); //ラジオグループに追加
taFcumu.add(taRaFcDenai); //ラジオグループに追加
/*ラベル設定*/
tasetumei4=new JLabel("トーナメントあれこれ");//ラベルの文字設定
tasetumei4.setBounds(225, 45, 200, 25); //位置&サイズの設定
/*テキスト設定*/
tasetumei5 =new JLabel(" ブロック数  :");//ラベルの文字設定
tasetumei5.setBounds(210, 65, 130, 20); //位置&サイズの設定
/*ブロック数用のテキストフィールドの設定*/
taBroksu= new JTextField("1"); //ブロック数入力フィールド、デフォは1ブロック
taBroksu.setBounds(340,67,30, 20); //位置&サイズの設定
/*ラベル設定*/
tasetumei6 =new JLabel("1ブロックの人数:");//ラベルに文字の設定
tasetumei6.setBounds(210, 85, 130, 20); //位置&サイズの設定
/*ブロックの人数用のテキストフィールドの設定*/
taNinzu= new JTextField("4"); //1ブロックの人数のデフォは4名
taNinzu.setBounds(340,87,30, 20); //位置&サイズの設定
/*ラベル設定*/
tasetumei7 =new JLabel("シード名:"); //ラベルの設定
tasetumei7.setBounds(210, 105, 70, 20); //位置&サイズの設定
/*テキストフィールドの設定*/
taName= new JTextField("シード"); //デフォルトでシードと入力
taName.setBounds(280,107,90, 20); //位置&サイズの設定
/*テキストフィールドの設定*/
taKibo =new JTextField("大会の規模:4名"); //テキストフィールドの設定
taKibo.setEditable(false);
taKibo.setBounds(230,127,120,20); //位置&サイズの設定
/*テキストフィールドの設定*/
taSidNin =new JTextField("今のシード:4名");//テキストフィールド設定
taSidNin.setEditable(false);
taSidNin.setBounds(230,147,120,20); //位置&サイズの設定
/*ボタンの設定*/
taSyutoku= new JButton("取得"); //FC整理から文字列の取得
taSyutoku.setBounds(20, 380, 80, 30); //位置&サイズの設定
taHarituke= new JButton("貼り付け"); //クリップボードから貼り付けて改行
taHarituke.setBounds(115, 380, 90, 29); //位置&サイズの設定
taTyuusen= new JButton("抽選"); //抽選開始ボタン
taTyuusen.setBounds(260, 380, 70, 30); //位置&サイズの設定
taKopi= new JButton("コピー"); //テキストエリアコピーボタン
taKopi.setBounds(420, 380, 80, 30); //位置&サイズの設定
/*タブに貼り付け*/
tabTaikai.add(taTyuusen);
tabTaikai.add(taSyutoku);
tabTaikai.add(taHarituke);
tabTaikai.add(taKopi);
tabTaikai.add(tasc1);
tabTaikai.add(tasc2);
tabTaikai.add(tasc3);
tabTaikai.add(taNinzu);
tabTaikai.add(taBroksu);
tabTaikai.add(taName);
tabTaikai.add(taRaFcDeru);
tabTaikai.add(taRaFcDenai);
tabTaikai.add(tasetumei1);
tabTaikai.add(tasetumei2);
tabTaikai.add(tasetumei3);
tabTaikai.add(tasetumei4);
tabTaikai.add(tasetumei5);
tabTaikai.add(tasetumei6);
tabTaikai.add(tasetumei7);
tabTaikai.add(taKibo);
tabTaikai.add(taSidNin);
/*ボタンの監視*/
taSyutoku.addActionListener(this);
taHarituke.addActionListener(this);
taTyuusen.addActionListener(this);
taKopi.addActionListener(this);
/*テキストエリアでエンター押したら(ry*/
taName.addActionListener(this);
taSidNin.addActionListener(this);
taBroksu.addActionListener(this);
taNinzu.addActionListener(this);

getContentPane().add(p, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent ae){ //ボタンを押したらプログラムを起動するようにする
taikaiMes.setText("エラーメッセージなどの表示");
boolean numberHenkan=true; //整数の値のみが入ってるか判定
boolean yuukouNinzu=false; //有効人数が0人の場合の判定
int taBlk=0; //ブロック数を設定
int taNinz=0; //1ブロックあたり人数
int sumNinzu=0; //大会の規模の格納
int sumNyuryoku=0; //入力された有効人数の格納
try{
taBlk=Integer.parseInt(taBroksu.getText());//数字に変換
taNinz=Integer.parseInt(taNinzu.getText());//数字に変換
sumNinzu=taBlk*taNinz; //規模の計算
taKibo.setText("大会の規模:"+sumNinzu+"名"); //表示する
}catch(NumberFormatException e){ //入力も文字が数字じゃないとここで受け取る
taKibo.setText("大会の規模:?名"); //大会の規模も不明
taSidNin.setText("今のシード:?名"); //シードも不明
taikaiMes.setText("ブロック数は整数か\n1ブロック人数に\n整数以外の数値が入ってます\n整数を入力してください。");
numberHenkan=false;
}
if(ae.getSource()==fcDelete){ //FC整理の変換前テキストのクリア
fchenkanMae.setText(""); //テキストエリアをクリアする
}
else if(ae.getSource()==fcHarituke){ //FC整理変換前のテキストの末尾に貼り付ける
String buf,buff; //一時バッファの作成
buf=fchenkanMae.getText(); //バッファに入力されてる文字を移動
fchenkanMae.setText(""); //テキストエリアのクリア
fchenkanMae.paste(); //テキストエリアにクリップボードから貼り付け
buff=fchenkanMae.getText(); //貼り付けた文字をセット
buf=bf.Harituke(buf,buff); //末尾に貼り付けるためにサブプログラムへ
fchenkanMae.setText(buf); //貼り付け
}
else if(ae.getSource()==fcNoAri){ //頭に番号を付けるボタン
String buf=bf.noAriHenkan(fchenkanMae.getText(),true);//テキストの文字を整理に渡す
fchenkanGo.setText(buf); //整列したのをテキストをセットする
}
else if(ae.getSource()==fcNoNasi){ //頭に番号を付けないボタン
String buf=bf.noAriHenkan(fchenkanMae.getText(),false);//テキストの文字を整理に渡す
fchenkanGo.setText(buf); //整理したテキストをセットする
}
else if(ae.getSource()==fckopi){ //コピーする
fchenkanGo.selectAll(); //全部選択する
fchenkanGo.copy(); //コピーをする
}
else if(ae.getSource()==taSyutoku){
taikaiMae.setText(fchenkanGo.getText());
}
else if(ae.getSource()==taHarituke){
String buf,buff; //一時バッファの作成
buf=taikaiMae.getText(); //バッファに入力されてる文字を移動
taikaiMae.setText(""); //テキストエリアのクリア
taikaiMae.paste(); //テキストエリアにクリップボードから貼り付け
buff=taikaiMae.getText(); //貼り付けた文字をセット
buf=bf.Harituke(buf,buff); //末尾に貼り付けるためにサブプログラムへ
taikaiMae.setText(buf); //貼り付け
}
else if((ae.getSource()==taTyuusen)){//抽選数字がうまく変換されてない場合抽選しない
String sido=taName.getText(); //シードの名前の取得
String str=taikaiMae.getText(); //入力された文字列を取得
try{
str=tt.tyuusen(str,taNinz,taBlk,sido,taRaFcDeru.isSelected());
taikaiGo.setText(str);
}catch(StringIndexOutOfBoundsException e){
yuukouNinzu=true;
}catch(Exception e){
}
}
else if(ae.getSource()==taKopi){
fchenkanGo.selectAll(); //全部選択する
fchenkanGo.copy(); //コピーをする
}

if(numberHenkan){ //整数が入力されて整数に直されてる時だけ処理
String buf=taikaiMae.getText(); //抽選したい人を格納
try{
sumNyuryoku=tm.ninzu(buf,taRaFcDeru.isSelected());//有効人数が何人かチェック
if(sumNyuryoku<=sumNinzu){ //大会規模と入力人数の判定
taSidNin.setText("今のシード:"+(sumNinzu-sumNyuryoku)+"名");
}else{
taSidNin.setText("参加者が"+(sumNyuryoku-sumNinzu)+"名多い");
taikaiMes.setText(tm.amari(buf,sumNinzu,true));
}
}catch(StringIndexOutOfBoundsException e){
yuukouNinzu=true;
}
}

if(yuukouNinzu){
taikaiMes.setText("有効行が1行もありません\n");
}

}
}

-------------------------
サブプログラム

ボタンを押したときメインプログラムに書くと長い場合があるんでこっちでやってもらう

public class BotanHantei{
/*
*クリップボードのbuffの文字列をbufの後に挿入する
*その後改行処理をして、メインプログラムに戻る
*/
public String Harituke(String buf,String buff){
if(buff.length()>0){ //クリップボードに値がないのなら何もしい
buf=buf+buff+"\n"; //末尾にクリップボードの挿入を行った後改行する
}
return buf;
}
/*
*FCを整理する
*/
public String noAriHenkan(String str,boolean ifrenban){
FCseiretu fsei= new FCseiretu(); //整理してくれるプログラムの起動準備
if(str.length()>0){ //何も文字がなければ何もしない
String[] seiretuyou; //整理用の配列の設定
seiretuyou= str.split("\n"); //改行ごとに配列に格納
for(int i=0;iint j=0; //@判定用
boolean attohantei=false; //@があるかどうかの判定
char attochar; //@をifで判定するようのcharを設定
for(;jattochar=seiretuyou[i].charAt(j); //文字列を1文字ずつcharに入れる
if(attochar=='@'||attochar=='@'){//@判定
attohantei=true; //@があればフラグを立てる
}
}
if(attohantei){ //フラグが立ってればFC整理する
seiretuyou[i]=fsei.cfseiri(seiretuyou[i]);//文字列を送る
}
}
str=""; //Strの初期化
for(int i=0;iif(ifrenban){ //連番をつけるかの判定
str=str+(i+1)+"."; //連番を先にstrに入れる
}
str=str+seiretuyou[i]+"\n"; //整理されたFCを入力処理
}
}
return str;
}
}

---------------------------
テキストエリアに入力された文字をチェックする
有効行をカウントしてメインプログラムに返す

ここの修正の余地あり。

public class TaikaiMes{
/*
*抽選される有効行のカウント
*/
public int ninzu(String buf,boolean hanteiumu){
String count[]=buf.split("\n");
int i;
char hantei;
int ninzu=0;
if(false==hanteiumu){
for(i=0;iif(0buf=count[i];
String set="";
int j=0;
for(;jhantei=buf.charAt(j);
while(hantei=='@'||hantei=='@' ){
j++;
if(buf.length()break;
}
for(;jhantei=buf.charAt(j);
set=set+hantei;
}
if(set.length()>0){
ninzu++;
}
}
}
}
}
}else{
for(i=0;iif(0ninzu++;
}
}
}
return ninzu;
}
public String amari(String buf,int idx,boolean hantei){
String count[]=buf.split("\n");
int i;
int j=0;
if(hantei){
for(i=0,j=0;iif(count[i].length()>0){
count[j]=count[i];
j++;
}
}
}
buf="以下の人が抽選されません\n";
for(;idxbuf=buf+count[idx]+"\n";
}
return buf;
}
}
---------------------------------
抽選をしてくれる重要なサブプログラム
今回ここも結構改良しました。

public class Taikaityusen{
public String tyuusen(String buf,int brok, int ninzu,String sidoName,boolean fcSyutu){
String[] tyusenMae= buf.split("\n");
int i;
String[] tyusenGo=new String[brok+brok*ninzu];
String[]name=new String[brok*ninzu];
int idx=0;
char hantei;
if(false==fcSyutu){
for(i=0;iif(0buf=tyusenMae[i];
String set="";
int j=0;
for(;jhantei=buf.charAt(j);
while(hantei=='@'||hantei=='@' ){
j++;
if(buf.length()break;
}
for(;jhantei=buf.charAt(j);
set=set+hantei;
}
if(set.length()>0){
name[idx]=set;
idx++;
}
}
}
}
}
}else{
for(i=0;iif(0name[idx]=tyusenMae[i];
idx++;
}
}
}
for(;idxname[idx]=sidoName;
}
if(false==fcSyutu){
for(i=0;iname[i]=(i+1)+"."+name[i];
}
}
boolean[]flag2=new boolean[name.length];
for(int j=0;flag2.length>j;j++){
flag2[j]=true;
}
buf="";
/*出力場所用のインデックスの確保*/
/*ランダムに抽選していく*/
for(int j=0;brok>j;j++){
/*ブロック名をここで出力*/
buf=buf+"■"+(j+1)+"ブロック■\n";
/*1ブロックの出力を制限するための宣言*/
int k=0;
while(k/*ランダム数字を発生させて、ranに格納させる*/
int ran =(int)(Math.random()*(brok*ninzu));
/*1度出力したかどうかのチェック*/
if(flag2[ran]==true){
/*1度も出力してなかったら出力用の格納領域に格納する*/
buf=buf+name[ran]+"\n";
/*フラグを立てる*/
flag2[ran]=false;
/*ブロック出力のカウントアップ*/
k++;
}
}
}
return buf;
}
}

■コメント

■管理人のみ閲覧できます []

このコメントは管理人のみ閲覧できます

■管理人のみ閲覧できます []

このコメントは管理人のみ閲覧できます

■管理人のみ閲覧できます []

このコメントは管理人のみ閲覧できます

■管理人のみ閲覧できます []

このコメントは管理人のみ閲覧できます
■コメントの投稿

管理者にだけ表示を許可する

 

連絡手段について

Messengerのアドレス&メールアドレス
monyonn(@)hotmail.co.jp
()を消して使用してください。

検索フォーム

QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。