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

bam6o0の記憶域

忘備録になればいいな

壁で跳ねるボールを作る(ボタン付き)

課題で制御ボタン付き壁で跳ねるボールを作ったので公開。

/*
  mainApplet.java
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

/*
  <applet code = "mainApplet" width = 660 height = 500>
  </applet>
*/

public class mainApplet extends Applet implements ActionListener{
  myCanvas canvas;
  Button b[];

  public void init(){
    setLayout(null);  //setBoundsでレイアウトを指定できるようにする
    setBackground(Color.lightGray); //背景色を指定
    canvas = new myCanvas();
    canvas.setBounds(10,10,500,500);  //Applet上のCanvasの左上位置と大きさを指定する
    add(canvas);
    canvas.start();

    //ボタン作成
    b = new Button[2];
    b[0] = new Button("start");
    b[1] = new Button("stop");

    for(int i=0;i < 2;i++){
      b[i].addActionListener(this);
      b[i].setBounds(250+i*40,520,40,20);
      add(b[i]);
    }
  }
  public void actionPerformed(ActionEvent e){  //開始と停止の制御
    if(e.getSource() == b[0]){
      canvas.waitFlag = false;
    }else if(e.getSource() == b[1]){
      canvas.waitFlag = true;
    }
  }
}
/*
  myCanvas.java
*/
import java.awt.*;
//ダブルバッファリングを備えたCanvasの作成
public class myCanvas extends Canvas implements Runnable{
  int x = 10;
  int y = 15;
  int x_speed = 10;
  int y_speed = 10;
  boolean waitFlag;
  Thread th;
  Image buffer;
  Graphics bufferg;

  public myCanvas(){
    th = new Thread(this);
    waitFlag = false;
  }

  public void start(){
    Dimension d =  getSize();
    buffer = createImage(d.width,d.height);
    th.start();
  }
  public void run(){
    try{
      while(true){
        if(!waitFlag){
          repaint();
        }
        th.sleep(100);
      }
    }catch(Exception e){}
  }

  public void update(Graphics g){
    paint(g);
  }
  public void paint(Graphics g){    //painの中に描画ルーチンを書きます
    // バッファのグラフィックコンテキストを取得する
  if(bufferg == null)
    bufferg = buffer.getGraphics();


  // バッファを描画する
  Dimension d = getSize();
  bufferg.setColor(Color.white);
  bufferg.fillRect(0, 0, d.width, d.height);
  bufferg.setColor(Color.black);
  bufferg.fillOval(x, y, 50, 50);


  // ウィンドウを更新する
  g.drawImage(buffer, 0, 0, this);

  // x座標を増やす
  x += x_speed;
  if(x + 50 > d.width || x < 0)
    x_speed = -x_speed;
  // y座標を増やす
  y += y_speed;
  if(y > d.height || y < 0)
    y_speed = -y_speed;
 }
}
<HTML><HEAD><TITLE>HelloWorld.java</TITLE></HEAD>
<BODY><H1>HelloWorld.javaのテスト</H1><HR>
<APPLET CODE="mainApplet" WIDTH=500 HEIGHT=500></APPLET>
</BODY></HTML>

実行方法

$javac *.java
$appletviewer mainApplet.html

実行結果  

f:id:bam6o0:20170118103101g:plain

球の一部が枠から飛び出してしまう。気が向いたら直す。
参考資料

第1章:準備運動 00のみ

python 言語処理100本ノック

言語処理100本ノックの第1章をやっていこうと思う。

第1章: 準備運動

00.文字列の逆順

文字列”stressed”の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ。

str = "stressed"
back_str = list(str)
back_str = ''.join(back_str[::-1])
print(back_str)

最初に書いたコード。
pythonの文字列はイミュータブルであるため、そのままでは文字列を逆順にできない。よってlist(str)で文字列をリスト化した。
その後スライスで要素を逆順にし、join()によってすべての要素を結合し出力した。

書いてて気づいたのだが…
この問題、変数の値自体を書き換える必要ない
また文字列のstrは最初からリストなのでlist()は不要。動的言語は変数の型を宣言せずとも使えることが裏目に出て、変数型を意識せずに使っていた。インタープリタすごい。

str = "stressed"
print(str[::-1])

2行で出来る問題でした。さすが準備問題…

本当はもっと書くつもりだったのだが、途中からブログデザインを変更するのにはまって時間が過ぎ去りました。

pythonに浸る

python 言語処理100本ノック

一年前サークル新歓時期にサークルのマスコット用TwitterBotを開発していた頃にpythonに触れたきり、全く何もしていなかった。

そのTwitterBot結果としてえげつない下ネタを自動生成してしまったことで友人の間では語り継がれている...

f:id:bam6o0:20170114065837j:plain

しかし、最近応募したインターンの経験欄にpythonでのTwitterBot開発と書いてしまったため、適度に思い出しておきたい。

また開発当時はネット情報を頼りに右往左往して曖昧さを残しながら作っていたため、結局大したことができなかった。この機会にもっとまともなコードを書けるよう、基本を固めたいと思う。

 

しかしやる気がでない…

 

そんな時、東北大学の乾・岡崎研究室 Web ページにて公開されている言語処理100本ノックなるものを知り、学習とブログのネタに今後解いていきたいと思う。

 

参考書には入門Python3を利用していく(購入済み)。

というかこの本を読んでるのに飽きただけ

ゆるく軽く適当に

日々プログラムなどの勉強をする上で、メリハリと忘備録のようなものが欲しくなり、またsnsで細々した内容を扱うのにも抵抗があったため、よく目にするHatena Blogを始めることにしました。

 

とりあえず大学講義で唯一扱ったc言語の講義が”ほぼ”終わったので、Pythonやらc++やらjavaなどを扱っていければと思います。

 

また関係ない読んだ本や感じたことも書くかもしれません。

 

オープンソース思考も兼ねてQiitaやgithubなども使っていければと思いますが、皆さんどうかお手柔らかによろしくお願いします。