pyxel ウィンドウ作成
Pyxel (ピクセル) はPython向けのレトロゲームエンジンです。
[pyxel公式](https://github.com/kitao/pyxel/blob/master/README.ja.md)
import pyxel TILE_SIZE = 8 MAP_WIDTH = 29 MAP_HEIGHT = 23 class Snake: def __init__(self): pyxel.init( MAP_WIDTH * TILE_SIZE, MAP_HEIGHT * TILE_SIZE, scale=3, fps=20, caption="Snake Game") pyxel.run(self.update, self.draw) def update(self): pass def draw(self): pass Snake()
このようなゲームウィンドウ(何も表示されていない)が作成できます。
(自分用) Kotlin Quiz 1
Q1. Kotlinの全てのクラスは共通の ? スーパークラスを持つか ?
Q2. 以下の Derived クラスに明示的に Base クラスでスーパータイプを宣言してください。
open class Base(p: Int) class Derived(p: Int) ???
Q3. Kotlin内のクラスは、 プライマリコンストラクタ と1つまたは複数の何コンストラクタ を持つことができる ?
Q4. 以下の宣言にプライマリコンストラクタを明示してください。
class Person(firstName: String) {
}
(解答例)
=======================================
A1.
Any スーパークラス
Any は java.lang.Object ではない。
A2.
open class Base(p: Int) class Derived(p: Int) : Base(p)
A4.
class Person constructor(firstName: String) { }
View has onTouchListner called on it but doesn’t override performClick (kotlin)
問題
以下のようにある ImageView のインスタンスに対して、setOnTouchListener を実装して画像に対するタッチイベントを実装したところ、動作はするのですが、”View has onTouchListner called on it but doesn’t override performClick” の警告がIDE上で表示されたままになりました。
image.setOnTouchListener { v, event ->
(省略)
対処
performClickをoverrideしないといけないという警告ですが、元の ImageView に対して行うのは大変なので、CustomImageView というクラスを作成して、そこで override してあげるようにします。
2つのコンストラクタもきちんと定義しておかないと、コンパイルエラーになります。
class CustomImageView : AppCompatImageView { constructor(ctx: Context) : super(ctx) constructor(ctx: Context, attrs: AttributeSet): super(ctx, attrs) override fun performClick(): Boolean { super.performClick() return true } }
レイアウトファイル上で、CustomImageView を使用するように指定します。
パッケージ名+クラス名で指定します。
<com.itstudy365.lesson.CustomImageView android:id="@+id/enemy_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="40dp" android:layout_gravity="center" app:srcCompat="@drawable/imagefile"/>
アクティビィティ側において、CustomImageView の型でインスタンスを生成するようにします。
private val image: CustomImageView = this.findViewById(R.id.enemy_image)
以上で警告が表示されなくなりました。
SQLite データの更新
特定のフィールドの数値を1だけインクリメントする更新を行います。
インクリメントの更新であれば、”set フィールド名=フィールド名+増分” で可能です。
データベースヘルパークラス内に、以下のような関数を用意します。
words テーブルの "count_questions" フィールドの値を1だけインクリメントします。
fun updateByCorrectAnswer(id: Int) { // Get database connection object val db = writableDatabase // Statement for update val sqlUpdate = "UPDATE words set count_questions = count_questions+1 where _id = ?" var stmt = db.compileStatement(sqlUpdate) stmt.bindLong(1, id.toLong()) stmt.executeUpdateDelete() }
結果、以下のように1つのフィールドの値が0から1に更新されます。
(自分用) Scala Quiz 2
Q1.
Scala で以下のような Any 型をキャストするには ?
val x: Any = 1 val y: Int = ???
Q2.
以下のコレクションを Seq(1,2,3,4,5,6) にするには ?
Seq(Seq(1,2,3), Seq(4), Seq(5, 6))
Q3.
Seq(scala.collection.Seq)とは?
Q4.
ディレクトリ内のファイルを削除するには ?
import scala.reflect.io.Directory import java.io.File val directory = new Directory(new File("/share/output/result")) directory.???
(解答例)
===================================
A1.
val x: Any = 1 val y: Int = x.asInstanceOf[Int]
A2.
Seq(Seq(1,2,3), Seq(4), Seq(5, 6)).flatMap { x => x }
A3.
Iterableのうち順序を持つもの。
全てのcollectionはIterableであるため、順序がある(要素にindexでアクセスできる)コレクションは全てSeqとなる。
※SeqでないコレクションにはMapやSetがある
A4.
import scala.reflect.io.Directory import java.io.File val directory = new Directory(new File("/share/output/result")) directory.deleteRecursively()
(自分用) Java Quiz 1
Q1. Java でプログラムされたライブラリで kuromoji とは何か?
Q2. kuromoji で文章をトークンに分解するクラスは?
Q3. kuromoji でトークンの品詞を返却する Token クラスのメソッドは?
Q4. kuromoji でトークンに分解された単語を返却する Token クラスのメソッドは?
Q5. kuromoji ですべての情報を文字列で返却する Token クラスのメソッドは?
Q6. java.lang.String クラスのメソッドで、以下の中で正規表現が使用できるのは?
replace / replaceAll / replaceFirst
Q7. 以下のエラーが意味することは ?
javax.net.ssl.SSLException: Received fatal alert: protocol_version
(解答例)
===========================================
A1.
Solrに同梱されている形態素解析器。辞書が内包されている。
A2.
Tokenizerクラス
A3.
getPartOfSpeechLevel1
※バージョンにより異なる
A4.
getSurface
※バージョンにより異なる
A5.
getAllFeatures
※バージョンにより異なる
A6.
replaceAll / replaceFirst
A7.
TLS プロトコルのバージョンが一致していない。
Java 1.8では、デフォルトのTLSプロトコルはv1.2で、Java 1.6および1.7では、デフォルトは廃止されたTLS1.0。
(自分用) Scala Quiz 1
Q1. リストの定義方法は ?
val list = ???
Q2. 文字列が特定の文字で開始されているかを確認するには ?
val text = "hoge" text.???("h")
Q3. 数値から文字列にどのようにキャストする ?
val number = 7 val text = number.???
Q4. scala で java.util.List を foreach にするには ?
Q5. 以下の出力結果は ? (true or false)
val textA = new String("テキスト") val textB = new String("テキスト") println(textA == textB) println(textA.equals(textB))
Q6. Javaでは全てのクラスが Object クラスから派生している。では Scala では?
Q7.
以下のように、ダブルクオーテーション記号を3つつなげた"""で囲んだ文字列を何と呼ぶか?
scala> val greet = """Hello. | My name is Tom. | I like baseball. | """
Q8.
以下の文字列からURL部分を空白に置換するには ?
val greet2 = """Hello. My name is Tom. https://xxx.co/CoRLSLA I like baseball. """
Q9.
以下に当てはまるタプルを宣言してください。
val sample: Tuple2[String, Int] = ???
Q10.
以下のエラーの意味は?
error: return outside method definition
(解答例)
===================================
A1.
val list = List(1, 2, 3)
A2.
val text = "hoge" text.startsWith("h")
A3.
val number = 7 val text = number.toString
A4.
以下のライブラリをインポートすることで、暗黙の型変換が行われる。
import scala.collection.convert.WrapAsScala._
A5.
どちらも true
println(textA == textB) // true println(textA.equals(textB)) // true
A6.
scala.Any クラス
A7.
生文字リテラル。エスケープ文字を持たず、複数行の文字列を記述できる。
A8.
greet2.replaceAll("http[s].*","")
A9.
val sample: Tuple2[String, Int] = ("hoge", 7)
A10.
リターン式 return e は名前付きのエンクロージングメソッドや関数の中でしか使えないという言語仕様。
例えば以下のような定義を行うと、同エラーが発生する。
val hoge = (x: Int) => { return x }