|
![]() ※該当の記事タイトル一覧はリンク一覧から参照できます。
Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾)名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月28日 ![]() ![]() 以下、動画です。 疑似3Dのゲームとなると「後ろを向いた主人公」の画像が必要になるのですが、手持ちの画像素材集には人間も動物もそのようなものがありませんでした。ネット上のフリー画像もあるのですが、「これだ」という使えそうなものはありませんでした。 その後、アマゾンで立体画像素材を自由に編集できる「アレンジOK!素材集2」というソフトを購入して、ここから主人公キャラを選択することにしました。このソフトは「人物」と「物」の色々な組み合わせが可能で、視点や服装や表情や画風まで自由に変えられます。エンディングの「建築中の家」も同じソフトの画像から切り取っています。 プログラムはこんな感じです。 ファイル一式はこちらからダウンロードできます。 ※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。 今回、プログラム中に以下のものを取り入れてみました。 ・三項演算子 ・ラムダ式(オブジェクトリストの並び替え) ・スムース縮小(Pygame) ・全画面表示(Pygame) まず、三項演算子ですが、背景の道路の縞模様を描写するところで使っています。 a = i - 8 - counter % 16 if i - counter % 16 >= 0 else 0これは一般的な条件式で書くとこんな感じになります。 if i - counter % 16 >= 0:三項演算子はPHPやJavaScriptにもあるので馴染みはなくはないのですが、書き方が大きく異るので、少し迷ってしまいました。Pythonの場合、どちらかと言えば英語の文法通りに解釈すると、うまく飲み込める感じです。 ラムダ式はオブジェクトのリスト(character_copy)を、「z座標属性の降順で並び替え」する処理で使っています。 character_copy = sorted(character_copy, key=lambda i: i.z, reverse=True)これもPHPやJavaScriptで同様の機能がありますが、書き方が大きく異なります。私の場合、並び替えの処理はSQLが真っ先に頭に浮かんでしまい、これを他の言語で表現するのに迷ってしまいます。 ちなみに、この部分は「奥にあるものから手前にあるものにかけて順番に画像を貼り付ける」という、疑似3Dで複数キャラクターを表示する上での「肝」になるところの前処理になります。 スムース縮小処理(Pygame)はタイトル画面のロゴのところで使っています。 image = pygame.transform.smoothscale(image, (c, d))このメソッドは縮小画像に「複数ピクセルの色の平均化」を行うため、通常の"transform.scale"メソッドに比べて縮小した画像の見た目がより自然な感じになります。ただし、GIF画像には対応しておらず、透明処理可能なものでは24bitか32bitカラーのPNG画像でないと使えません。あと、ストッパー、蛙、鳥の小さめのキャラクターに使用すると、周辺に白いモヤモヤが発生してしまい、これはこれで少し見苦しいので、こちらはsmoothの付かない方のメソッドで処理しています(画像もGIFです)。タイトルロゴについてはもともと白の縁取りがあり、白いモヤモヤも気にならないのでsmoothの付いている方で処理しています。 全画面表示(Pygame)はある方のブログ記事を参考にしました。F11キーで全画面表示のオンとオフを切り替えられます。 screen = pygame.display.set_mode((400, 300), FULLSCREEN)やはり全画面の方がゲームはやりやすいですね。 今回の疑似3Dゲームで、とりあえずPython + Pygameのミニゲーム作成は一段落、という感じです。次は別のモジュールを使いながら進めていくことになると思いますが、色々とできることが増えてくると嬉しいです。 Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)
![]() 光が丘公園初ラン名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月24日 ![]() ![]() ![]() ![]() やはり交差点の無い長めの周回コースを走るのは気持ちの良いものです。私がよく走る石神井公園は、やや急なアップダウンや視界の悪いところもあるので、今度15kmを超えるような長距離を走る場合には、また光が丘公園まで出向いてみようと思います。 ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)
![]() Python + Pygameで擬似3Dサンプルプログラム名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月19日 ![]() ![]() 先日、「Pythonゲームプログラミング 知っておきたい数学と物理の基本」というKindle本を購入したところ、この本に疑似3Dの視点と描写について分かりやすい解説がありました。私は高校生の時に「スペースハリアーのようなゲームが作りたい」と思ったことがあり、キャラクターの拡大・縮小や2D上の座標決めなど、色々とやってみたのですが、結局うまくいかずにそのまま時が過ぎてしまいました。あれから30年近く経ち、今になってようやく基本的な理論が理解できたのですが、考えていたよりも難しいものではなく、「何であの時に分からなかったんだろう?」と思ってしまいました。 過去のことを後悔しても仕方ないので、早速サンプルプログラムを作ってみることにしました。おおよそ事前に考えていたような内容のプログラムのまま、おおよそ思った通りに動いてくれました。 ということで、まずは動画です。 プログラムはこんな感じです。蛙はカーソルキーで上下左右、ZキーとXキーで前後に動きます。C、V、B、Nの各キーで視点の角度を変えることもできます。 """ 3d.py """ ファイル一式はこちらからダウンロードできます。 ※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。 今回はキャラクターが1つだけなので、重ね合わせの処理が単純でしたが、いざ複数のキャラクターが動くようなゲームを作るとなると、そのあたりを考慮しながら作り込んでいく必要があります。 頭にあるのは「オブジェクトをリスト化して、そのオブジェクトのリスト全体をコピーして、コピーした方のリストをZ座標で並び替えて、Z座標が奥にあるものから手前にあるものにかけて描画していく」というアイデアです。Pythonそのものも学習の意味も兼ねて、また少し時間をかけて作り込んでいこうと思います。 Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)
![]() 2017年を振り返って名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月17日 ![]() ![]() 我が家の行事としては、富良野スキー旅行、息子の小学卒業&中学入学、夏の福岡旅行などがありましたが、突然生活が変わってしまうような大きな出来事はありませんでした。まあ、何か悪い事が起きるよりは、日々平凡な生活を送れることだけでも喜びを感じてしまいます。それだけ歳を取ってきたということなのでしょう。 私自身、ここ最近は「新しいことをゼロから始める」ということはやっていません(ドローンを少しだけやりましたが…)。ただ、今までに自分が積み重ねてきたことの「更なるレベルアップ」については、中年になってしまった今でも心がけています。私が仕事以外で継続的にやっていることを挙げると、古い順からスキー、英語学習、Web制作&管理、カメラ、ランニングとあります。それぞれ今年はこんな感じの一年でした。 ■ スキー 2月にGoPro HERO5 Sessionを購入して動画撮影をやり始めました。ランニングで養った体力を使って、山頂からベースまで無理なくノンストップ滑走ができるようになったこともあり、早速富良野スキー場でもいくつか動画を撮影してYouTubeにアップしています。Panasonic DMC-TX1での写真撮影も加えて、「観光」の要素が高くなりつつありますが、いつかは草レースのようなものにも参加したいと思っています。いずれにしても安全な滑りだけは常に心がけたいです。 ■ 英語学習 ここ最近は仕事の上で英語で困るような場面はほとんど無くなりましたが、今でも字幕なしの洋画や、英語ネイティブ同士の会話には置いてきぼりを食らうことが多いです。この辺りを何とかしようと思い、1月から毎日通勤時にYouTubeで英語の動画を見るようになりました。週ごとにテーマを変えて学習していて、具体的にはこんな感じでした。 1/23ランニング、1/30スキー、2/6カメラ、2/13化学&物理、2/20病気&体、2/27ゲーム、3/6車&バイク、3/13料理… もともとリスニング学習が目的だったのですが、YouTubeから新たな知識を得ることも多かったです。例えばドローン、電気自動車、アメリカの政治&経済、仮想通貨などです(もちろん全て英語の動画です)。肝心のリスニング力については「1年前よりは少しマシになったかな…」程度ですが、YouTubeでの学習は面白いので、これからも続けていこうと思います。 ■ Web制作&管理 今年は新しいホームページは開設せず、全テキストファイルをUTF-8化する作業があった以外は、淡々と本ブログを続けているだけでした。ただ、知人のお誘いもあって、先月からPython(コンピューター言語)の学習を始めています。今のところはPygameモジュールを使ったミニゲームを2本作っただけで、Webの方に展開していませんが、来年には何か作っていこうと思っています。AI・機械学習の勉強も進めていきます。実は、JavaScript+GPSで「ミニRunKeeper」「ミニStrava」のようなランニングアプリもどきを作ろうと思ったりもしましたが、こちらは今後も実現するのか不透明です。 ■ カメラ 上でも書きましたが、昨年3月に購入したPanasonic DMC-TX1を中心に使っています。写真は全てNAS(サーバー)に保管していますが、一部をブログにアップしたり、PIXTAに投稿したりしています。手軽なグループ写真などはスマートフォンのカメラで十分ですが、やはり風景の撮影などでは、DMC-TX1の1インチセンサーが威力を発揮してくれます。2013年に購入したEOS Kiss X7の使用頻度が極端に落ちているものの、画質はこちらの方が上なので手放すことは無いと思います。これ以上の性能のカメラは、自分にはオーバースペックで使いこなせそうにないです。 ■ ランニング 昨年までは土日のどちらかで5~10km走るだけでしたが、ある知人グループの影響を受けて、1月下旬から週2回走るようになりました。おかげで10kmランで50分を切るのが難しくなくなり、11月に2年8ヶ月ぶりに参加したハーフマラソンでも、10分近くタイムを縮めることもできました。年間のランニング距離も、今までは370km前後だったのですが、今年は1000kmを超えてしまいました。今年はランニングを通じて多くの方と知り合うことができて、「人との繋がり」という点でも充実していました。ランニングは当初「スキーのトレーニング」という位置づけでしたが、今後も時折レースに参加していきたいと思います。来年はついにフルマラソンもあるかも…? そういえば、今年の始めに「甲種危険物取扱者試験の合格」を目標として掲げましたが、こちらは断念しました。もともと通勤時に勉強する予定だったのですが、上記のYouTube学習を優先するようになったのと、「個人的に実用面であまりメリットがないかな…」と思い始めたのが要因です。まあ、時間は限られているので、「トレードオフ」ということで仕方ないとは思っています。 そんな感じで2017年もそれなりに充実した1年でした。来年以降も健康には気をつけつつ、「更なるレベルアップ」を目指していこうと思います。 ニュースな記事(リンク一覧): マイコン博物館(青梅)訪問 / あけましておめでとうございます。(2025) / 2024年は平穏な年でした / ALL ABOUT マイコンBASICマガジン Ⅲ(ベーマガイベント) / Googleから居住者証明書を求められて / ...(記事連続表示)
![]() Python + Pygameのミニゲーム第二弾 『たけのこ狩り』名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月16日 ![]() ![]() 今回新たに試してみた機能は以下の通りです。 ・マウスでの操作 ・スプライト(オブジェクト、半透明処理、重ね合わせ、衝突等) ・三角関数の応用(角度と動きの連動) そんな感じで、ゲームの動画です。 プログラムもどうぞ。 ファイル一式はこちらからダウンロードできます。 ※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。 ゲーム自体は「日本らしさ」に加えて、少し「薄気味悪さ」もあります。手のキャラクターは私の右手の写真から切り取ったもので、これをそのまま使うか少し迷いましたが(薄気味悪いので…)、「よりインパクトが強い方がいいだろう」ということでそのままにしています。カメムシとカマキリの敵キャラも、モノクロで可愛さゼロです。 スプライトについては、当初"Sprite Group"の機能を使っていっぺんに表示させたり、衝突処理もスプライトのCollision機能を使用したりする予定でいました。しかし、Sprite Groupを使うとキャラクターの重ね合わせの順番を制御する処理が煩雑になってしまう上、Collision機能もいろいろやってみたものの自分の思っていた精度が出ずに、どちらも断念しました(私の使い方が悪かっただけかもしれませんが…)。そのため、各キャラクターのオブジェクトは形だけSpriteオブジェクトを継承していますが、普通に画像を貼り付けるのと全く変わらない処理に落ち着いてしまっています。 三角関数については、前回のサンプルプログラムのように、サイン(sin)とコサイン(cos)の結果をリスト化して、たけのこの円運動、波状移動などに使用しています。加えてカメムシの移動には「手」とカメムシの座標の違いから、アークタンジェント(atan2)でラジアン(角度)を算出して方向をコントロールしています。 正直なところ、私は数日前までatan2という関数を知りませんでした。当初は「2」が付いていないatan関数を使って、タンジェント値からまずはラジアン-1/2π~+1/2π(-90°~ +90°)を算出した後、座標によって正確なラジアン-π~+π(-180°~ +180°)を決定することを考えていました。「2」の付いているatan2関数はx, yの2つの引数を取ることから、座標からダイレクトに正確なラジアンを得ることができます。 今回もミニゲーム制作という形になりましたが、やはりコンピューター言語を学んでいく上では、実際に何か形になるものを作っていく方が理解できます。今、頭のなかに2点ほど作ってみたいものがあるので(サンプルプログラム程度ですが)、また時間を見て制作に取り掛かろうと思います。 Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)
![]() かぐらスキー場名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月13日 ![]() ![]() さすがに平日ということもあって、新幹線の乗車率は50%程度でした。越後湯沢駅からはスキー場行きのバスに乗っていくのですが、「道路に停まる路線バス」と「スキー場のステーション前に行く急行バス」の2種類があって、よく分からずに「路線バス」の方はパスして、「急行バス」の方に乗りました。バス停の前の方で待っていたので運良く座れましたが、出発前にはぎゅうぎゅう詰めの状態になり、スキー場のベースである「みつまたステーション」までこのまま20分間走り続けました。 ![]() そんな中、一応滑ることのできる全エリアを滑ろうと思い、ベースのみつまたエリアからゴンドラで上部のかぐらエリアに行き、そのままスキー場マップで言うところの左へ左へと滑って行き、田代エリアの端にあるロープウェイ乗り場まで行きました。ちなみに、今日はまだシーズン始めということもあり、ドラゴンドラが運休だったのと、かぐらエリア最上部の林間エキスパートコースも閉鎖されていました。 ![]() [ かぐらメインゲレンデ ] ![]() [ かぐらエリア・田代エリア分岐ポイント ] ![]() [ 田代第2ロマンスリフト ] その後、またかぐらエリアまで戻ったのですが、雪で視界が悪い上に、斜面に雪だまりが多くできていて滑りづらかったです。 今日はリフトとゴンドラに計20回乗り、滑走距離32kmでした。天気が悪かったので景色を楽しめず、またカービングの滑りはほぼ皆無でしたが、まあスキーシーズン始めは晴れる確率が低いので、仕方のないところです。 ![]() [ かぐらエリアとみつまたエリアを結ぶゴンドラコース ] かぐらスキー場の感想ですが…、スキー場の印象は天候によって大きく変わるので判断が難しいですが、コース上に平坦な所が意外と多くあるのと(スノボの人は大変そうです)、エリアの広さの割には長い中斜面が少ないかな、というところです。ただ、晴れた日の景色を見たら印象が変わるかも知れませんね。 ちなみに昨シーズンに購入したGoProも持参したのですが、ネジが緩んでいたからか映像が下向きになっていて、目の前の斜面しか映っていないような感じでした。ですので、今回は動画なしです。 あと、この前新調したスキージャケット「MILLET BULLIT II JKT」ですが、サイズがぴったりで動きやすかったです。やはり、今のスキーウェアは、変にサイズに余裕を持たせない方がいいですね。 以上、まとまりの無い文章ですみません。 スキー関連記事(リンク一覧): 富士見パノラマリゾート(2025年) / ピラタス蓼科スノーリゾート / ガーラ湯沢スキー場(2024-2025シーズン) / 今までに行ったことのあるスキー場まとめ(2024年) / 富士見パノラマリゾート(2024年2回目) / ...(記事連続表示)
![]() 湘南国際マラソン 10kmレース名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月4日 ![]() ![]() スタートは9:50でしたが、少し早めの8時過ぎに現地に到着しました。着替えてから荷物を預けて、「トイレに行っておこう」と思い、8:40頃から仮設トイレに並んだものの中々前に進みません。ようやく9時頃にトイレを済ませることができたのですが、フルマラソンのスタートが9時ちょうどということもあって、この頃にはトイレの周りもガラガラになりました。 今回は知人の方2名とスタート前に待ち合わせていて、9:30頃に指定された集合場所に向かったのですが、既に集団で西湘バイパスのスタート地点に向かって歩いていました。小走りで人の間を早歩きで抜けていったところ、運良く途中で知人の方と合流することができました。 ![]() ![]() コースはほぼ平坦で、しかも気温10℃程度で走りやすかったです。給水は最初の1回だけでした。4km過ぎの折り返し地点の後は、左手に海を見ながら、正面のやや右寄りに雪をかぶった富士山が見えて、景色や雰囲気を楽しむという点でも中々良かったです。 ![]() [ 西湘バイパス ] ![]() 手元の時計ではスタートラインからゴールまで47分09秒でしたが、後ほど公式サイトにアップされたものは、ネットで47分18秒、グロス(正式タイム)で50分17秒でした。レース以外のランも含めて10kmのStrava上のベストタイムは45分44秒ですが、StravaのGPS測定の誤差を加味すると、今回のネットタイムはベストよりも1分弱遅かったと言えます。ただよく考えると、正式なレースで10kmちょうどを走るのは今回が初めてなので、いずれにしても「10kmレース」としてはベストタイムではあります。 ゴール後にまた知人の方2名と合流、その後はフルマラソンに参加していた方とも合流し、夜には楽しい打ち上げ会がありました。ここでフルマラソンのお誘いを受けたりしましたが、「うーん、ちょっと考えてみようかな…」という気になりました。まあ、早くても来年の秋以降ですね。 そんな感じでランニングのレース参加はこれで一休みです。これから3月下旬まではスキーの方に集中します。 ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)
![]() Python - リスト内包表記とPygameのスプライト機能名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年12月2日 ![]() ![]() 以下、ソースコードです。 ------------------------- ファイル一式はこちらからダウンロードできます。 ※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。 まずはリスト内包表記(List Comprehension)です。 今から30年近く前(高校2年でした)、X68000であるゲームを作っている時に、円運動するキャラクターを設置しようと思いつきました。シンプルに三角関数(サイン/sin、コサイン/cos)で座標を決めればいいと思っていたのですが、当時のパソコンは今のものに比べて処理速度が貧弱ということもあり、キャラクターを複数設置すると三角関数の繰り返しの計算の影響で、動作に遅延が起きるようになってしまいました。そこで考えついたのが、「三角関数の計算で得られた数値を予め配列変数に格納しておき、キャラクターの座標はその配列変数から順番に取り出していく」という方式です。これにより繰り返しの処理が変数から数値を取り出すだけになったことから、動作の遅延は解消されました。 Pythonでは配列変数とは言わず、「リスト」と呼びますが、今回のソースコードでは、以下の部分が三角関数(コサイン)の計算とリストへの格納になります。 circle_x = [math.cos(math.pi/180*i) for i in range(360)] 他の言語に慣れている人なら、恐らくこんな感じの方が馴染み深いと思います。 for i in range(360): これが一行でまとまる上に見た目も分かりやすいので、 これからも内包表記を多用していこうと思います。 ちなみに、比較的「低速」と言われるPythonですが、当時のX68000のX-BASIC+Cコンパイラーで作成したプログラムよりも断然早く、この程度の円運動なら繰り返し三角関数を計算させる方法でも全く問題ありませんでした(10倍速でも問題無いです)。しかし、今後大きなプログラムを作る時など、端末側に負担をかけない意味で、このやり方は慣れておいた方が良いかなと思っています。 次にスプライト(Sprite)機能です。 また昔話になりますが、上述のX68000のX-BASICや、その数年前のファミコンのプログラミングソフト「ファミリーBASIC」でもスプライト機能に対応していました。スプライト機能を使うとキャラクターを動かしつつ特別な処理をしなくても、背景画像が崩れることはありません。逆にスプライト機能が無いパソコンでは、キャラクターが動作した後に残像が残ってしまうため、その部分のみを都度描き直したり、もしくは画面全体を毎回リフレッシュして描画するなどの手法が必要でした。 ちなみに、昨年作成したHTML5+JavaScriptのミニゲームでは、div要素をブロックにして座標を設定する形で、ほぼスプライト機能と同じことができました。 Pygameのスプライトについても、同じような機能を期待していたのですが、残念ながら何らかの処理をしない限り、キャラクターを動かした後に残像が残ってしまいます。そのため、今回作成したサンプルプログラムでは、動作毎に画面をリフレッシュする方式を取っています。 ただ、Pygameのスプライトは衝突(collision)判定が充実していて、グループ化の機能と合わせて使用すれば効率よくプログラムが書けるかも知れません。今回のサンプルプログラムにはその辺りの関数は含めていませんが、また近いうちにスプライト+衝突判定を利用したミニゲームを作ってみようと思います。 Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)
![]() Pythonの学習とPygameを使ったミニアクションゲーム作成名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年11月25日 ![]() ![]() 私は小学6年~高校2年の間に、PC-6001mkII(NEC)とX68000(シャープ)というパソコンで、BASIC言語を使ってゲームを作ったりしていました。その後、数年のブランクがありましたが、Visual Basic、Excel VBAからプログラミングを再開し、ホームページを自作するようになってからは、Web開発系言語のPerl、JavaScript、PHPも使うようになりました。一方、CやJavaなどのソフトウェア開発系の言語は、今までに全くと言っていい程触れていません。もとからプロのプログラマーではありませんが、週末に時間がある時などに趣味でプログラミングをしている「週末プログラマー」であります(Excel VBAのみ少し仕事で使っています)。ちなみに、PHPを使い始めたのが今から10年前で、それ以降は新しいプログラミング言語には手を出していませんでした。 何だかんだで、今月始めにようやくPythonの入門書を2冊購入し、PCにはPythonパッケージとして人気のあるAnacondaを入れてみました。入門書にあるサンプルプログラムを実際に書いたり書き換えたりしながら、Pythonの基礎を学習していきましたが、「学びやすい言語」という印象を受けました。第一に「読みやすく書きやすい」というのがあり、ユーザー関数やクラスの定義なども他の言語で慣れた人であれば、問題なく使うことができると思います。海外では子供のプログラミング学習でもPythonが使われ始めていると聞いていますが、これも頷けます。子供やプログラミング初心者から、大学の研究、人工知能、アプリの開発などまで幅広く使われており、さらに私のような中年が新たに学び始めるのにもPythonの壁は低いと感じます。 ただ、プログラミング言語を学ぶ上では、本を読んだりサンプルプログラムを少し動かしただけでは、使い方を理解しきれません。自分なりの使い方を確立していくステップとして、まずはミニアクションゲームを作成することにしました。ゲーム制作用のモジュールとしてPygameも利用します。 ということで、「DOG & BURGERS」というミニアクションゲームが完成しました。先週末から作り始めたので、製作期間は約1週間です。なぜ「犬」と「ハンバーガー」なのかというと、手持ちの画像素材集の犬とハンバーガーの画像が目についたので、そのままこれを使ってゲームにした、という流れです。以下、ゲームの動画になります。 プログラムはこんな感じです。 ファイル一式はこちらからダウンロードできます。 ※本プログラムやファイルの二次配布や二次掲載はご遠慮ください。個人的なプログラム改造はご自由にどうぞ。ただし、本プログラムに関するご質問等はお受けしません。 今回のミニゲームではPythonのユーザー関数やクラスの定義の他、Pygameによるキー入力、画像ファイルの表示、音の再生などを試すことができました。ここ最近では一年前にJavaScriptでミニゲームをいくつか作りましたが、ほぼ同じようなレベルのものがPythonでも作れそうです。ただ、「DOG & BURGERS」では以下の問題があり、今のところ解決せずにそのまま放置しています(他のPCでは確認していないので、私のPCだけの問題の可能性もあります)。 ・効果音の遅延。0.3秒程ズレが出てしまいます。 ・キー入力がやや不安定。カーソルキーやスペースキーを押しているのに、たまに反応しないことがあります。 今回はPython学習の第一歩という位置づけですが、次はWebサーバー上で動く何らかのプログラムを作ってみようと思います。WebArenaのSuiteXでもPython対応ということなので(ただし、バージョンは2.7)、せっかくなのでこれを使って色々と動かしてみます。 Python関連記事(リンク一覧): Python + Pygameの疑似3Dゲーム (ミニゲーム第三弾) / Python + Pygameで擬似3Dサンプルプログラム / Python + Pygameのミニゲーム第二弾 『たけのこ狩り』 / Python - リスト内包表記とPygameのスプライト機能 / Pythonの学習とPygameを使ったミニアクションゲーム作成 / ...(記事連続表示)
コメント:Pythonの学習とPygameを使ったミニアクションゲーム作成 名前: mafunana524 日付: 2020年12月8日 ![]() ![]() 7行目の「from pygame.locals import *」の「from」に 「No name 'locals' in module 'pygame'pylint(no-name-in-module) Unable to import 'pygame.locals'pylint(import-error)」というエラーが出ました。 これはvs cordが悪いのですか? それとも他に何か原因がありますか? コメント:Pythonの学習とPygameを使ったミニアクションゲーム作成 名前: 小川 邦久 リンク: https://kunisan.jp 日付: 2020年12月8日 ![]() すみません、3年位Pythonに触れていなかったため頭から抜けてしまっている上、vs cordについても全く分からないため、対応方法については正直コメントができないです。すみません…。
ちなみに我が家ではAnacondaで動作しています。 ![]() 2017川崎国際多摩川マラソン(ハーフマラソン)名前: 小川 邦久 リンク: http://kunisan.jp/ 日付: 2017年11月19日 ![]() ![]() スタートは等々力陸上競技場。朝9時半の号砲ですが、気温12℃で30分程待っていたりして、かなり寒く感じました。もともと上はTシャツだけで走る予定だったのですが、ウインドブレーカーをTシャツの内側に着て寒さ対策をし、なおかつゼッケンが隠れないようにしました。下は短パン+ロングタイツです。 ![]() スタートから4kmちょっとの所でダートコースに入ります。所々に砂が深いところがあり、足の蹴りが推進力になりきらず、少し滑ってしまう感じです。これが18.5km地点あたりまで続くので、かなりパワーのいるコースでした。道の端に少しだけ芝が生えていて、砂のある所よりもやや滑りづらくなっていたので、できるだけここを走るようにしました。 ![]() [ 多摩川沿いのダートコース ] 終始景色に大きな変化がなく、ある意味退屈なコースかもしれません。ただ、全体的にフラットなので、一定のペースで走り続けることができます。途中、1kmあたり5分15秒できれいにペースを刻んでくれるおじいさんランナーがいて、しばらくはこの方に付いていくようにしました。 ![]() ![]() 久しぶりのハーフマラソンは気温もコースもキツかったですが、完走後の爽快感や「やりきった感」は今まで参加したレースの中でも一番でした。走り終わった後は丸子温泉で疲れを取り(いつも通り湯船につかる時間は「カラスの行水」でしたが…)、王将でたらふく飲み食いして帰路につきました。 ハーフマラソンを次に走るのは…、まあ明言はできないですね。とりあえず、すぐではなさそうです。 ランニング関連記事(リンク一覧): GARMIN(ガーミン) Forerunner 965 / ASICS GEL-KAYANO 30 (ゲルカヤノ30) エクストラワイド / 白馬スノーハープクロスカントリー大会2024&上田 / 白馬スノーハープクロスカントリー大会2023&馬籠 / 台風2号による大雨で大阪で足止め→信州安曇野ハーフマラソン辞退 / ...(記事連続表示)
![]() ※該当の記事タイトル一覧はリンク一覧から参照できます。
■ ホームへ
|