SlideShare a Scribd company logo
1 of 50
Download to read offline
プチコンに学ぶ?!
ゲームプログラミングの基本

2013.07 :PetitPetit3q
プチコンとは?
普段遊んでいるゲーム機で、
プログラミングができる!
通信やQRコードで、
プログラムを公開できる!
ゲームづくりの
素材も充実
音楽の打ち込みも可能
タッチパネルも入力しやすい
実は、パソコンと完全連動
プログラムもそのまま
プチコンのプログラムリスト (*.ptc)
サクラエディタで開いた場合
さらに、パソコンと完全連携
プログラムリスト、画像リソースを自由に編集可能
※ 非公式アプリ PTC Utilities
プチコン専用の
現代風BASIC言語
● 行番号は存在しない
● スコープは存在しない
● ユーザ定義関数も存在しない
画面表示の知識
画面表示の知識

キャラクタ
●
●

画面に表示する絵や背景として表示する情報
8×8 や 16×16 などサイズが決まっている

パレット
●

実際の色の情報
画面表示の知識
スプライト

● アニメーションにおけるセル画の概念に近い
● 1px単位で自由に移動させることができる
● プログラムからは、キャラクタ番号と座標を指定する
● ハードウェアにより処理されるので、 CPUに負荷がかからない
    ※ VRAMとは別の方法で、ハードウエアにより 1px単位で合成する
画面表示の知識
BG(背景-Background-)

●
●
●

キャラクタを格子状の枠に当てはめる感じで表示させることができる
全体として、1px単位で自由にスクロールさせることができる
プログラムからは、書き換えるキャラクタ番号と表示位置、全体のスクロール座標を指定する
画面表示の知識
グラフィック

●
●

プログラムから、 1px単位で自由に点を打ったり、図形を描画したりできる
ファミコンには搭載されていない
画面表示の知識
コンソール

●
●

文字や記号を格子状の枠の任意の位置に表示させることができる
ファミコンには搭載されていない
画面表示の知識
まとめ
機能

表示できるもの

色

プログラムでの
再描画

その他

スプライト

定義された
キャラクタ

パレット

不要

・1px単位で自由に移動可能
・一般的なゲームフレームワーク
 には実装

BG

定義された
キャラクタ

パレット

不要

・格子状にキャラクタを配置
・1px単位で全体をスクロール可能

グラフィック

点や図形を
自由に描画

RGB

必要

・現在のマシンはすべてこれ
・ファミコンは非搭載

コンソール

定義されている
文字

色番号

不要

・ファミコンには非搭載
画面表示の知識
ファミコンとの比較
ファミコン

プチコン

画面

256×240

256×192

スプライト

最大64

最大100

BG

2画面分

4画面分×2

グラフィック

なし

あり (4枚分)

コンソール

なし

あり (32×24文字)

言語

アセンブラ

BASIC
一般のプログラムとの違い
人間が操作しなくても、
常に動いている
●
●
●
●

プレイヤーの入力の検出
コンピュータ・プレイヤーの操作
状況の判断
画面の表示
Windowsプログラムのメッセージループ
メインループ(ゲームプログラム全般)
Windowsでのメインループ
CPU と GPU
ゲーム全体の進行と・画面の表示は
別のタイミングで実行されている
● ゲーム全体の進行 = CPU
● 画面の表示     = GPU
CPUとGPUのイメージ図

※ CPUやVRAMやGPUの中身は基本的にブラックボックスであり複雑なため、実際にどうなっているかは不明であるが、
  わかりやすく例えるとこのような動きをする
ディスプレイの描画タイミング

※ HSYNC(Horizontal SYNChronizing signal):水平同期信号
※ VSYNC(Vartical SYNChronizing signal):垂直同期信号
ゲームプログラムのメインループ
CPUとGPUのイメージ図

※ CPUやVRAMやGPUの中身は基本的にブラックボックスであり複雑なため、実際にどうなっているかは不明であるが、
  わかりやすく例えるとこのような動きをする
画面ちらつきの原因
ダブルバッファリング
ゲームプログラミングのテクニック
テーブル化
ゲームプログラムで大切なのは、いかにメインループを速くするかであるため、
メインループ内で極力計算をしないように、どんな簡単な計算でも
あらかじめ配列に計算結果を入れておくこと

内部データは小数で管理
内部データを小数や、大きな数字で扱うことによって、
250×192しかないDSの画面でも、細かくリアルなキャラクターの動きが実現できる
禁断のパズル的1行コーディング
●
●
●

0に何を掛けても割っても、結果は 0
1つのビット演算では、 0か、その値のいずれかのみ
論理演算は、 Trueなら1、Falseなら0 (プチコンの場合 )
<基本>
  X = X + (X == 4)
  IF X == 4 THEN X = X + 1
禁断のパズル的1行コーディング
<応用 自キャラの 8方向移動(シューティングなど )>
B=BUTTON()
X = X + ((B AND 4)/4) - ((B AND 8)/8)
Y = Y + ((B AND 2)/2) - ((B AND 1)
B=BUTTON()
IF ((B AND 4)!=0) THEN X = X+1
IF ((B AND 8)!=0) THEN X = X-1
IF ((B AND 2)!=0) THEN Y = Y+1
IF ((B AND 1)!=0) THEN Y = Y-1
禁断のパズル的1行コーディング
<応用 自キャラの 8方向移動(シューティングなど )>
現代(Javascript)風では
k = e.keyCode;
x = x + (((k & KEY_RIGHT) !=0)? 1:0) - (((k & KEY_LEFT) !=0)? 1:0);
y = y + (((k & KEY_DOWN ) !=0)? 1:0) - (((k & KEY_UP ) !=0)? 1:0);

k = e.keyCode;
if ( k & KEY_RIGHT !=0){
 x=x+1;
}
if ( k & KEY_LEFT !=0){
 x=x-1;
}
if ( k & KEY_DOWN !=0){
  y=y+1;
}
if ( k & KEY_UP !=0){
  y=y-1;
}
2D座標計算の基本
分度器とラジアン

○

ラジアン

☓

360°

180 = π
180 = 3.141592…
2D座標計算の基本
2D座標計算の基本
2D座標計算の基本
2D座標計算の基本
ジャンプの座標計算
ジャンプの座標計算
ジャンプというものは、
横方向に等速直線運動、
縦方向に等加速運動
これは
難しい計算をせずに、
足し算と引き算で実現できる
MMLの基本
応用 & 作品紹介

http://www.nicovideo.jp/watch/sm21126754
擬似3D
● 完全な3Dではないが、奥行きという概念を用いているもの
● X座標,Y座標を計算する際に、距離を考慮する必要がある
ラスタースクロール
● 古いゲーム機では、 VSYNCのみでなくHSYNCを検出可能
● HSYNCごとに1行づつ描画していた。
● スプライトは影響を受けない
参考資料
サイト名

説明

URL

プチコンMk2

公式サイト

http://smileboom.com/special/ptcm2/

おちゃめくらぶ

ポケコンやプチコンを極限まで極めた人によるサイト
1画面プログラムや、
BASICの短縮化・高速化テクニッ
ク、
各種アルゴリズムなど、
BASICによるゲームプログラミン
グの情報満載

http://ww5.tiki.ne.jp/~ochame/

NES研究室

上級者向けのファミコンソフト開発の資料満載

http://hp.vector.co.jp/authors/VA042397/index.
html

N88-BASIC

マニュアル?

http://hp.vector.co.
jp/authors/VA025043/N88BASIC_MANUAL.
HTML

AndroidBasic

Android上で、一般的なBASICと互換性の高いBASIC
(有料)

https://play.google.com/store/apps/details?
id=and.bas&hl=ja

BASIC STUDIO

PS2で、BASICによる3Dゲームを作れる?

http://www.artdink.co.jp/japanese/title/bs/

More Related Content

Viewers also liked

IchigoJam はじめてのプログラミング その1
IchigoJam はじめてのプログラミング その1IchigoJam はじめてのプログラミング その1
IchigoJam はじめてのプログラミング その1Taisuke Fukuno
 
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねてsuno88
 
自作ゲーム紹介「水鉄砲戦争」(Android)
自作ゲーム紹介「水鉄砲戦争」(Android)自作ゲーム紹介「水鉄砲戦争」(Android)
自作ゲーム紹介「水鉄砲戦争」(Android)PetitPetit3q -
 
Perlでプチコン
PerlでプチコンPerlでプチコン
Perlでプチコンhayajo Imai
 

Viewers also liked (6)

IchigoJam はじめてのプログラミング その1
IchigoJam はじめてのプログラミング その1IchigoJam はじめてのプログラミング その1
IchigoJam はじめてのプログラミング その1
 
8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて8bit 時代のプログラミング事情を訪ねて
8bit 時代のプログラミング事情を訪ねて
 
自作ゲーム紹介「水鉄砲戦争」(Android)
自作ゲーム紹介「水鉄砲戦争」(Android)自作ゲーム紹介「水鉄砲戦争」(Android)
自作ゲーム紹介「水鉄砲戦争」(Android)
 
Smile basic
Smile basicSmile basic
Smile basic
 
Perlでプチコン
PerlでプチコンPerlでプチコン
Perlでプチコン
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 

Similar to プチコンに学ぶ!?ゲームプログラミングの基本

[PyConJP2019]Pythonで切り開く新しい農業
[PyConJP2019]Pythonで切り開く新しい農業[PyConJP2019]Pythonで切り開く新しい農業
[PyConJP2019]Pythonで切り開く新しい農業Makoto Koike
 
mpld3でInteractiveデータ可視化
mpld3でInteractiveデータ可視化mpld3でInteractiveデータ可視化
mpld3でInteractiveデータ可視化monochrojazz
 
Google Developers Summit Android TV で実現するリビングルームでのアプリ体験
Google Developers Summit   Android TV で実現するリビングルームでのアプリ体験Google Developers Summit   Android TV で実現するリビングルームでのアプリ体験
Google Developers Summit Android TV で実現するリビングルームでのアプリ体験Takashi EGAWA
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmHirotaka Kawata
 
Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1Michael Tedder
 
ChatGPTで面白い物語は作れるのか?
ChatGPTで面白い物語は作れるのか?ChatGPTで面白い物語は作れるのか?
ChatGPTで面白い物語は作れるのか?Takanari Tokuwa
 
プログラミングとは
プログラミングとはプログラミングとは
プログラミングとはyayugu
 
Unity用ビジュアルノベルツール「宴3」開発帰還報告書
Unity用ビジュアルノベルツール「宴3」開発帰還報告書Unity用ビジュアルノベルツール「宴3」開発帰還報告書
Unity用ビジュアルノベルツール「宴3」開発帰還報告書Ryohei Tokimura
 
「宴」まとめ(2016年7月23UniBoookLT大会)
「宴」まとめ(2016年7月23UniBoookLT大会)「宴」まとめ(2016年7月23UniBoookLT大会)
「宴」まとめ(2016年7月23UniBoookLT大会)Ryohei Tokimura
 
iosアプリのPaintcode利用
iosアプリのPaintcode利用iosアプリのPaintcode利用
iosアプリのPaintcode利用Rika Kurano
 

Similar to プチコンに学ぶ!?ゲームプログラミングの基本 (12)

[PyConJP2019]Pythonで切り開く新しい農業
[PyConJP2019]Pythonで切り開く新しい農業[PyConJP2019]Pythonで切り開く新しい農業
[PyConJP2019]Pythonで切り開く新しい農業
 
Unreal Engine 4 Education 2 UnityとUE4の違いは?
Unreal Engine 4 Education 2 UnityとUE4の違いは?Unreal Engine 4 Education 2 UnityとUE4の違いは?
Unreal Engine 4 Education 2 UnityとUE4の違いは?
 
mpld3でInteractiveデータ可視化
mpld3でInteractiveデータ可視化mpld3でInteractiveデータ可視化
mpld3でInteractiveデータ可視化
 
Unreal Studio+機械CADのワークフロー
Unreal Studio+機械CADのワークフローUnreal Studio+機械CADのワークフロー
Unreal Studio+機械CADのワークフロー
 
Google Developers Summit Android TV で実現するリビングルームでのアプリ体験
Google Developers Summit   Android TV で実現するリビングルームでのアプリ体験Google Developers Summit   Android TV で実現するリビングルームでのアプリ体験
Google Developers Summit Android TV で実現するリビングルームでのアプリ体験
 
Open Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pmOpen Design Computer Project - Tsukuba.pm
Open Design Computer Project - Tsukuba.pm
 
Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1Game Development and Automation @ Agile Sapporo 2018 #1
Game Development and Automation @ Agile Sapporo 2018 #1
 
ChatGPTで面白い物語は作れるのか?
ChatGPTで面白い物語は作れるのか?ChatGPTで面白い物語は作れるのか?
ChatGPTで面白い物語は作れるのか?
 
プログラミングとは
プログラミングとはプログラミングとは
プログラミングとは
 
Unity用ビジュアルノベルツール「宴3」開発帰還報告書
Unity用ビジュアルノベルツール「宴3」開発帰還報告書Unity用ビジュアルノベルツール「宴3」開発帰還報告書
Unity用ビジュアルノベルツール「宴3」開発帰還報告書
 
「宴」まとめ(2016年7月23UniBoookLT大会)
「宴」まとめ(2016年7月23UniBoookLT大会)「宴」まとめ(2016年7月23UniBoookLT大会)
「宴」まとめ(2016年7月23UniBoookLT大会)
 
iosアプリのPaintcode利用
iosアプリのPaintcode利用iosアプリのPaintcode利用
iosアプリのPaintcode利用
 

プチコンに学ぶ!?ゲームプログラミングの基本