Category: 未分類

講義は休みでしたが今週の話題

ゲームソフト販売本数ランキング:今週1位は「METAL GEAR SOLID Δ: SNAKE EATER(PS5)」 GO! 『ブルアカ』『メイプルストーリー』減衰…ネクソンの日本事業は上期25%の減収で折り返し【ゲーム企業の決算を読む】GO! プロが教える動画制作、中高生向け無料オンライン講座9-10月 GO! 【キャリアクエスト】FGOだけじゃない、ラセングルならではの挑戦を求めて。“若い会社”で活躍する、とあるゼネラリストの働き方事情 GO! インディーゲームの祭典「INDIE Live Expo」開催日は11月29日に決定、100作品以上の紹介やアワードを予定 GO! Roblox、ユーザーに対しての「年齢確認」取り組み強化へ―未成年と大人のコミュニケーションを大きく制限する機能も追加予定 GO! R-18コンテンツを開いているブラウザタブを検知・スクショするマルウェア Webカムで撮影も 性的脅迫に使用か GO! App Storeの審査が突如通らず──DMM傘下のスマホゲームでトラブル 「リリースから実装済みの全イラストが修正対象に」GO! 「みんなのGOLF」新作、発売日に異例声明 ユーザーからの“不具合報告”続出で 「現象の原因究明に努める」GO!

講義は休みでしたが今週の話題

ゲームソフト販売本数ランキング:今週1位は再び「マリオカート ワールド(Switch2)」 GO! 【イベント告知】アカマイが「Akamai Cloud Day 2025」を9月24日に開催。特別セッションに安野貴博氏が登壇、ソニーグループや時雨堂の事例も GO! 赤字スタートのセガ、逆襲の鍵は『ソニックレーシング』と待望の『Football Manager』か【ゲーム企業の決算を読む】GO! 業績は減益、株価は高値。スクエニに迫る「物言う株主」の影【ゲーム企業の決算を読む】GO! グリーの2025年6月期決算は売上6.8%減―新作『まどドラ』投入もゲーム事業はQoQで減収【ゲーム企業の決算を読む】GO! 【キャリアクエスト】「これ、あったら面白い」を実際に作り出せる。セガ入社3年目の若手が語るプランナーという職種、そして自身の展望とは GO! マイクロソフト「Windows 11高負荷時にSSDを破損する不具合再現できず」と声明。一方Phisonは「Windows側の問題」と調査結果公表 GO! DDoS・Bot攻撃との“いたちごっこ”に終止符を──AkamaiとCygamesが語る、費用対効果と自動化を両立するセキュリティ戦略【CEDEC2025レポート】GO!

次回予告と今回の講義メモ

テキスト編次回予告:p.345「演算子のオーバーロード」から ゲーム開発演習:キーボードの状態を得る、画像の左右移動、簡易アニメーション など 講義メモ:memo20250802.zip

講義メモ:ゲーム開発演習

:キーボードの状態を得る、画像の左右移動、簡易アニメーション など テーマ24 背景画像のスクロール【再掲載】 ・背景画像を2枚用意して、1枚目の描画開始位置を少しずつずらし、空いた部分にもう1枚をつながるように描画すれば、  背景画像のスクロールが可能 ・なお、C#のGDI+では描画位置を示す座標を負の数や描画範囲外にできる。これにより、画像の一部を表示することが可能 ・画像全体が描画範囲の外になったら、描画対象から外すか、描画位置を変えると良い ・背景画像の縦スクロールの場合、描画開始位置が下端を超えたら0に戻すと良い ・背景画像は2枚になるが、画像オブジェクトは1つで良く、2つの参照変数で扱えば良い 提出フォロー:演習24 背景画像の縦スクロール ・背景画像のつなぎ目のY座標を示す変数backyを0で初期化しておき、タイマーによってインクリメントする  (背景画像.Heightを超えたら0に戻す) ・背景画像の描画を2回に増やし、(0, backy)からと、(0, backy – 背景画像.Height)から描画する ・タイマーのインターバルは10ミリ秒に変更すると良い ・プレイ画面の背景もシームレスにスクロールしたいので、タイマーのインクリメントはシーンに限らず行うように変更 作成例 //テーマ24 背景画像のスクロール using System; //C#標準クラス用 using System.Windows.Forms; //Application、Formクラス用 using System.Drawing; //Size、Graphics、Image、Penクラス、Color構造体用 class Program : Form { //Formクラスの派生クラス     enum mode { TITLE, PLAY, OVER }; //タイトル画面、プレイ画面、ゲームオーバー画面     mode scene = mode.TITLE; //シーンをタイトル画面とする     Image backi; //画像ファイル用変数     Timer t = new Timer(); //タイマーを生成     int sec = 0; //経過秒数     int backy = 0; //【追加】背景画像のつなぎ目のY座標     protected override void OnPaint(PaintEventArgs e) { //描画処理のオーバライド         //全画面に共通の描画処理         base.OnPaint(e); //元のメソッドの内容を呼び出す         e.Graphics.DrawImage(backi, 0, backy); //【変更】背景画像①を描画         e.Graphics.DrawImage(backi, 0, backy – backi.Height); //【追加】背景画像②を①の直上に描画         Font fm24 = new Font("メイリオ", 24, FontStyle.Bold); //フォントを生成         Brush bcyan = new SolidBrush(Color.Cyan); //シアン色のソリッドブラシを生成         switch (scene) { //シーンにより分岐         case…

Read the full article

講義メモ

テキスト編:p.323「例外処理の基礎(tryブロック・catchブロック)」から ゲーム開発演習:キーボードの状態を得る、画像の左右移動、簡易アニメーション など p.321 例外処理の基礎 ・プログラムによって異常状態が発生すると「実行時エラー」として、発生時点で異常終了する。 ・この異常状態を「例外(Exception)」として、これを表すクラスのオブジェクトで扱うことができる ・このオブジェクトを受け取って処理する仕組みが例外処理で、例外処理を組み込むことで「実行時エラー」をコントロールできる。 ・例えば、p.322 exception01.cs のように、double.Parse()メソッドに実数に変換できない文字列を渡すと、  Exceptionクラスの派生クラスであるFormatExceptionクラスのオブジェクトが生成され、例外処理がないので異常終了する。 ・以下が異常終了時のメッセージとその解説: ハンドルされていない例外: System.FormatException: 入力文字列の形式が正しくありません。  ⇒「ハンドルされていない」とは例外処理がないか例外処理対象になっていないことを示す  ⇒「System.FormatException」は形式例外を表すクラス  ⇒「入力文字列の形式が正しくありません。」はこのクラスのMessageプロパティにある文字列 場所 System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt) 場所 System.Double.Parse(String s) 場所 MyClass.Main() 場所 F:\ha241_AkibaC#\Project1\Project1\exception01.cs:行 9  ⇒下から上に向かって例外発生の経緯を示す。C#で実際にどう扱われたかがわかる  ⇒一番下の1行で「発生の起因となったクラス名.メソッド名 場所:ソースファイル名:行番号」が明示されている p.323 例外処理の基礎(続き)try-catch ・例外処理対象はtryブロックの記述によって指定する ・tryブロック内で例外が発生したら、その直後にcatchブロックを記述することで、対処ができる ・catchブロックで対処が行われたら例外状態は解消され、処理が続行される ・ただし、tryブロック内に複数の記述があり、その途中で例外が発生した場合は、発生行の下の行は実行されない ・例:下記の場合、①④⑤の順に実行され、②③はスキップされる try {  ①例外が発生する処理  ②処理  ③例外が発生する処理 } catch {  ④対処の処理 } ⑤通常処理 アレンジ演習:p.324 exception02.cs ・元のプログラムでは実数除算なのでゼロ除算の例外が発生しないので、形式例外(FormatException)のみになる ・そこで、変数a、bをint型にして、ゼロ除算の例外処理も記述しよう ・なお、実数除算で0.0以外の正の値を0.0で割ると∞、0.0以外の負の値を0.0で割ると-∞,0.0を0.0で割ると  NaN(Not a Number=非数)となる。 作成例 //アレンジ演習:p.324 exception02.cs using System; class MyClass {     public static void Main() {         int a = 0, b = 0; //【変更】         Console.Write("割られる数–");         string strA = Console.ReadLine();         try { //例外処理対象範囲①             a = int.Parse(strA); //【変更】形式例外発生の可能性         }         catch { //例外処理             Console.WriteLine("不適切な入力です"); //形式例外発生時の処理         }         Console.Write("割る数—");         string strB = Console.ReadLine();         try {…

Read the full article

今週の話題

ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO! サイバーステップはオンクレ『トレバ』不振で5期連続の赤字、暗号資産事業で活路を模索【ゲーム企業の決算を読む】 GO! 「スイッチ2」全世界売上600万台突破。『マリカ ワールド』も563万本、初代スイッチを大きく上回る GO! 【キャリアクエスト】ツールが便利になる今、プログラマーに必要とされるものとは?アトラスで働くなかで見えてきた「プログラマーならではの仕事」GO! 「東京ゲームショウ2025」ビジネスデイ有料事前登録が開始!SIE社長・西野秀明氏による基調講演も決定 GO! 音楽はAIとの音声対話で作る時代に入った。Riffusion改めProducer.aiのAIプロデューサーと日本語で会話するだけで曲を作ってくれるのだ GO! インディーゲームの祭典「BitSummit the 13th」なんと5万8,000人以上が来場。来年は開催時期5月に、猛暑は回避? GO! 成人向けゲームの規制に揺れるitch.io、寄付すら不可の「無料の成人向けゲーム」に限り表示再開を実施―決済代行業者を経由しないため GO! 「プラチナゲームズ」を名乗る不審なメールに注意喚起―求人募集を装って送付、フィッシング詐欺等の可能性も GO!

次回予告と今回の講義メモ

テキスト編次回予告:p.323「例外処理の基礎(tryブロック・catchブロック)」から ゲーム開発演習次回予告:キーボードの状態を得る、画像の左右移動、簡易アニメーション など 講義メモ:memo20250712.zip

講義メモ ゲーム開発演習

ゲーム開発演習:画面遷移、タイマー処理 など テーマ20 画面遷移【再掲載+α】 ・タイトル画面とプレイ画面とゲームオーバー画面のように、画面が移り変わることを画面遷移という ・画面ごとに違うプログラムを用意して呼び出すこともあるが、プログラム内で「今はどの画面なのか」を変数で保持すればシンプルに記述できる ・この変数をゲームモードやシーン等と呼び、プログラム内で共有することで、画面遷移を見やすく記述できる ・ゲームモードやシーンに用いる値は列挙型(p.66)にすると意味がわかりやすくなる ・構造例: class クラス名 : Form { //Formクラスを継承 enum { TITLE, PLAY, OVER }; //タイトル画面、プレイ画面、ゲームオーバー画面 int ゲームモード = TITLE; その他の初期化処理を記述 protected override void OnPaint(PaintEventArgs e) { //描画処理のオーバライド 全画面に共通の描画処理 ゲームモードがTITLEならばタイトル画面を描画 ゲームモードがPLAYならばプレイ画面を描画 ゲームモードがOVERならばゲームオーバー画面を描画 } public static void Main() { //実行用メソッド : } クラス名() { //コンストラクタ : } キー押し下げ時に実行されるメソッド { 共通処理(Escキーが押し下げられたら終了) ゲームモードがTITLEの時にEnterやSpaceキーが押し下げられたらゲームモードをPLAYに ゲームモードがOVERの時にEnterキーが押し下げられたらゲームモードをTITLEやPLAYに } } テーマ21 画面再描画【再掲載】 ・プログラム側で画面を書き換えても、そのままでは実画面には反映しない ・そのため、画面再描画をシステムに依頼する必要がある(OnPaintの直接実行は不可) ・画面再描画をシステムに依頼するにはContolクラスの静的メソッドInvalidateを引数なしで呼べばよい(「Contol.」は省略可) ・書式:Invalidate(); //画面再描画を依頼 演習21 タイトル画面の表示とプレイ画面への遷移 ・テーマ20「画面遷移」の「構造例」を実装してタイトル画面の表示とプレイ画面への遷移を確認しよう ・タイトル画面は中央に「GAME」、中央下に「Hit Enter Key」と適当なフォントで表示 ・プレイ画面は中央に「START」と適当なフォントで表示  ※チェス盤、機体などの描画はいったん削除 ・エンターキー(キーコード:return)が押されたら、プレイ画面に遷移する ・この時、画面がチラつくが、対処は次のテーマで扱う 作成例 //演習21 タイトル画面の表示とプレイ画面への遷移 using System; //C#標準クラス用 using System.Windows.Forms; //Application、Formクラス用 using System.Drawing; //Size、Graphics、Image、Penクラス、Color構造体用 class Program : Form { //Formクラスの派生クラス     enum mode { TITLE, PLAY, OVER }; //タイトル画面、プレイ画面、ゲームオーバー画面     mode scene = mode.TITLE; //シーンをタイトル画面とする     Image backi; //画像ファイル用変数…

Read the full article

講義メモ

テキスト編:p.310「12.5 イベント」から ゲーム開発演習:画面遷移、タイマー処理 など p.310 12.5 イベント ・コンソールアプリケーションにおける Console.ReadLine()メソッドのように、起動したプログラムが動的に情報を得る  手段がある ・しかし、Console.ReadLine()メソッドは単なる入力待ちであり、プログラム側からの制御はできない ・そこで、あらかじめ「これが起きたらあれをする」という定義をしておき、必要時に動的に呼び出される仕掛として、  イベント機能が提供されている。 ・キー入力、マウスの操作、通信の受信、時間の経過などの「何かが起きた」ことをイベントの発生という。 ・イベントに対して処理を実行するものをイベントハンドラという。  ※Java言語などではイベントリスナといい、C#の書籍においてもイベントリスナとされていることがある。 ・C#では主にフォームアプリケーションでイベントを扱うが、コンソールアプリケーションでもデリゲートを用いることで、  イベント処理の実装が可能。 ・例えば、Enterキー以外のキーの入力を即時に受け取るプログラムを記述できる。 p.312 イベントのプログラミング ・コンソールアプリケーションでもデリゲートを用いてイベント処理を実装する場合の例(クラス側):  ① 戻り値なし、引数なしのデリゲートを宣言する  ② イベントの発生を担うクラスを定義する  ③ ②の中に①を用いるイベントフィールドを定義する   書式: public event デリゲート名 イベント名;  ④ ②の中にイベントを発生させるメソッドを定義(「Onイベント名」というメソッド名を推奨)  ⑤ ④の中で「イベント名();」を実行することでイベントを発生させる。   ただし、イベントフィールドの準備ができていないときに動作するのを避けるために、イベント名がnullではないか   をチェックすること ・コンソールアプリケーションでもデリゲートを用いてイベント処理を実装する場合の例(Main()側):  ① イベントの発生により動作させたいメソッドを記述しておく。  ② main()の中で、イベントの発生を担うクラスのインスタンスを生成。  ③ main()の中で「②.イベントフィールド」に対して、マルチキャストデリゲートの書式で①を登録  ④ main()の中で「②.Onイベント名()」メソッドを呼び出すことで、イベントを発生させる ・なお、上記は説明用に、無理矢理イベントを起こさせる構成になっている p.313 event01.cs //p.313 event01.cs using System; delegate void MyDelegate(); //イベントで用いるデリゲートを宣言 class MyEventClass { //イベントの発生を担うクラス public event MyDelegate eventname; //イベントフィールドを定義(デリゲートを利用) public void OnEventname() { //イベントを発生させるメソッド if (eventname != null) { //イベントフィールドが準備済ならば eventname(); //イベントを発生させる } } } class MyClass { //イベントで呼び出されるメソッド①を持つクラス public void show() { //イベントで呼び出されるメソッド① Console.WriteLine(“show”); } } class MyClass2 { //イベントで呼び出されるメソッド②を持つクラス public void show2(){ //イベントで呼び出されるメソッド② Console.WriteLine(“show2!!”); } } class event01 {…

Read the full article

今週の話題

ゲームソフト販売本数ランキング:今週1位も「マリオカート ワールド(Switch2)」 GO! ゲーム領域で停滞も…高収益体質を築いたSHIFTの戦略的人材強化【ゲーム企業の決算を読む】GO! AI時代のゲームインフラとセキュリティ―ゲーム開発者が知るべき最新テクノロジーをアカマイが解説【CEDEC 2025】GO! モノリスソフト東京オフィスが人材を積極募集中―「ゼノブレイド」シリーズ総監督の「新作RPG」に向けた動き? GO! トランプ政権で“デジタル遺産の危機”に直面…保管プロジェクトや教育ゲームも支援打ち切りで資金難に GO! スイッチ海賊版サイト「Nsw2u」をFBIが摘発。現在はアクセス不可に GO! 中古スイッチソフト使用でスイッチ2が遠隔BAN!?迅速対応で一安心も復旧にゲームのパッケージ写真等の証明必要に GO! PC全年齢向け人気タイトルがSteamではコンソール版相当の内容に、なぜ?―お詫び文掲載の事態に…国内メーカー悩ます、ユーザーとプラットフォームの板挟み GO!