オセロ盤を斜めにしたような当たり判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kirbest

オセロ盤を斜めにしたような当たり判定

#1

投稿記事 by kirbest » 17年前

今、当たり判定といっていいのか分かりませんが、
マウスポインタでどこの「マス」を選択しているか調べるところで躓いてしまいました・・・

というのも、簡単なオセロを作るつもりだったのですが、
まったく普通だと面白くないので、オセロ盤を45度回転させて、
マスの形が◇←このようなオセロを作っているのです。
オセロのプログラム自体は、普通の□の形で作ったものがあるのでいいのですが、
どうしてもマウスでどのマスを選んでいるのか取得する方法が思いつきません。
唯一思いついたのは、全てのマスの中心からマウスまでの距離を測って
一番小さいマスというのを思いつきましたが、64回もルート付きの計算を常に行うのは重いような気がします。なにかいい方法はないでしょうか?

ibis

Re:オセロ盤を斜めにしたような当たり判定

#2

投稿記事 by ibis » 17年前

45°の傾きであれば、座標をこのように変換できますが、どうでしょうか。

x + y = ([左上-右下]軸の座標)
x - y + (盤面の幅または高さ) / 2 = ([右上-左下]軸の座標)

たいちう

Re:オセロ盤を斜めにしたような当たり判定

#3

投稿記事 by たいちう » 17年前

> 唯一思いついたのは、全てのマスの中心からマウスまでの距離を測って
> 一番小さいマスというのを思いつきましたが、
> 64回もルート付きの計算を常に行うのは重いような気がします。

どの位重いと思います?
昨今のパソコンならば多分1ミリ秒もかからず、
一回クリックする毎の処理としては、
無視してよい重さだと思います。
これで一応自力で解決することはできましたね。
何十年も前のパソコンと比較して、恵まれた環境に感謝しつつ、
自信を持ちましょう。

一方、無駄な処理というのはソースコードの可読性を下げる場合があり、
この影響は無視できません。後でソースコードを読む他人や自分が、
何でわざわざこんな事をしているのだろう、と考える事のないように、
できるだけ自然な方法を選択しましょう。

ibisさんの書く方法は、その1つです。
私ならば、クリックされたxy座標を、オセロ盤の縦横を基準とした
座標系に変換してから判定すると思います。
将来的に45°以外の角度に対応させたいというわけではなく、
一般化した方がより自然だと私が思うからです。

kirbest

Re:オセロ盤を斜めにしたような当たり判定

#4

投稿記事 by kirbest » 17年前

>ibisさん
ありがとうございます。
処理も簡単そうですし


>たいちうさん
書き忘れてたのですが、クリックしたときでなく、選択しているときは常に表示するつもりだったので・・・
しかし、たとえ表示してるとき常に処理していてもそんなに重くないようです
自然な方法というのを自分でも考えてみようと思います

バグ

Re:オセロ盤を斜めにしたような当たり判定

#5

投稿記事 by バグ » 17年前

例えばマウスが動いた時だけ処理するとか、再描画処理の時だけ処理するとか…
色々と処理を軽くする工夫はできると思いますよ(^-^)

閉鎖

“C言語何でも質問掲示板” へ戻る