2008-06-01から1ヶ月間の記事一覧

コマの初期配置

整数 6 を因数分解すると、2 と 3 の積になります。すると、2人の対戦では、それぞれに3つのコマを置くのが適当と考えられます。そこで、6つのコマを配置するなら、ゲーム盤の「対称性を損なわない」という結論に達しました。 盤面にコマを配置するときに…

初期画面

各六角形を蜂の巣状に配置するには、これらをひとつ置きに配置するだけです。 六角形を配置するときに、わずかな隙間を設けました。これは、同じ色のコマが密着して隣接すると、見た目が窮屈になるのを避けるためです。すると、全体的なコマの配置に均衡が取…

盤面の形状

オリジナルのゲーム盤の配置では、4つのコマを配置した状態から、ゲームを開始します。しかし、正六角形を基調とする盤面では、対称性が失われ、美観を損ねると考えました。新しいゲームを考案するときに、これが最大の難関でした。そして、試行錯誤の末に…

はじめに

最初にオセロゲーム(trinity)を作成したのが1988年ですから、今年でちょうど20年目になります。ここでは、Swing アプリケーションとして作成した事例を紹介します。 切っ掛けは、幼い頃に遊んだ「ダイヤモンドゲーム」でした。オセロゲームは2人が対峙す…

要求仕様の変更:オセロゲーム〈蜂の巣〉hexagon 1/5

《Previous|1/5|Next》 Shall_we_Agile = Java.use(better, Python) # 《記事一覧》 要求仕様の変更:hexagon 《著》伊藤うさぎ、森こねこ《監修》小泉ひよ子とタマゴ倶楽部更新♪2008/11/21

シーケンスの長さが違う場合

複数のシーケンスが指定されると、その長さが違うことがあります。短いために、対応する要素がないときには、そこに None があるものと見なします。 while (true) { bool done = true; for (int i = 0; i if (enums[i].MoveNext()) { args[i] = enums[i].Cur…

ソースコードの歩き方《IronPython》map 5/5

《Previous|5/5|Next》 Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 無限ループから抜け出す鍵は for ブロックの後には、次のコードの断片があります。 while (true) { bool done = true; for (...) { ... done = false; …

テストケースを使って

具体的なテストケースで説明すると、より理解が深まります。>>> map(lambda a,b,c: a+b+c, "AB", "12", "xy") ['A1x', 'B2y']lambda 関数には、シーケンスと同数の引数 a,b,c が必要です。各シーケンスの要素(文字)を順に参照して、それらを連結した文字列…

ソースコードの歩き方《IronPython》map 4/5

《Previous|4/5|Next》 Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 引数が3つ以上の場合:複数のシーケンス 複数のシーケンスを指定した場合を考察します。else ブロックの直後には、次のコードの断片があります。 IEnu…

引数が2つの場合:単一のシーケンス

条件式 param.Length == 2 が成立する、シーケンスを1つだけ指定した場合を考察します。 object func = param[0]; if (param.Length == 2) { IEnumerator i = Ops.GetEnumerator(param[1]); while (i.MoveNext()) { if (func == null) ret.AddNoLock(i.Curr…

ソースコードの歩き方《IronPython》map 3/5

《Previous|3/5|Next》 Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 まず全体を俯瞰してから if 文に続いて、次のコードの断片があります。 List ret = new List();変数 ret は、メソッドのリターン値を扱うために、空リ…

可変個の引数:params

Map のヘッダーに続いて、次のような記述があります。 public static List Map(params object[] param) { if (param == null || param.Length throw Ops.TypeError(...); }params と宣言してあるのは、0 個以上の引数 param に対処したいからです。すると、i…

ソースコード:Map(params object[])

静的メソッド Map が、組み込み関数 map に相当します。 # IronPython-1.1.2/Src/IronPython/Modules/Builtin.cs [PythonType("__builtin__")] public static partial class Builtin { ... [PythonName("map")] public static List Map(params object[] para…

ソースコードの歩き方《IronPython》map 2/5

《Previous|2/5|Next》 Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 ソースコードを散策する map の利用法を簡単に紹介したところで、ソースコードを散策する準備を整えます。IronPython をダウンロードしたら、フォルダ…

組み込み関数 map

次に、組み込み関数 map のヘルプ情報を確認します。>>> help(map) Help on built-in function map in module __builtin__:map(...) map(function, sequence[, sequence, ...]) -> list Return a list of the results of applying the function to the items…

事例:文字列を使って

第2引数 sequence に、シーケンスとして文字列を与えると、第1引数 function を各要素(文字)に適用します。>>> map(ord, "ABC") [65, 66, 67]組み込み関数 ord を使うと、文字列を構成する各要素(文字)の ASCII コード値が得られます。また、組み込み…

事例:リストの内包と比べて

組み込み関数 map の典型的な利用法は、関数を任意の要素に適用することです。>>> map(lambda e: e*2, range(10)) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]ここでは、各要素を2倍した値を列挙したリストが得られます。 第1引数 function には、任意の(第2引…

IDLE を起動する

Python IDLE を起動して、次のように入力すると、Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) ... >>> type(map) map が「組み込み関数」だと分かります。

関連記事

→ collect: Smalltalk use: better《25》これは要るけどこのほうがいいかな

ソースコードの歩き方《IronPython》map 1/5

《Previous|1/5|Next》 Python.use(better, src=”IronPython”) # ソースコードを散策する《記事一覧》 組み込み関数 map:IronPython 篇 《著》本間りす《監修》小泉ひよ子とタマゴ倶楽部更新♪08/09/10 IronPython のソースコードを読みながら、Python の…

typeof

7.5.11 The typeof operatortypeof-expression: typeof ( type ) typeof ( void ) 2008-00-00 ソースコードの歩き方《IronPython》set.__str__ 0/0《in draft》2008年11月19日(水)

Dictionary

[ComVisibleAttribute(false)] public class Dictionary : IDictionary, ICollection>, IEnumerable>, IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallbackpublic Dictionary( IEqualityComparer comparer ) public bool Conta…

foreach statement

8.8.4 The foreach statementforeach-statement: foreach ( type identifier in expression ) embedded-statement 2008-08-22 ソースコードの歩き方《IronPython》dict.keys 2008-09-23 ソースコードの歩き方《IronPython》dict.__str__ 3/3

KeyValuePair

[SerializableAttribute] public struct KeyValuePairpublic TKey Key { get; } public TValue Value { get; } 2008-09-23: ソースコードの歩き方《IronPython》dict.__str__ 3/3

IDictionary

[ComVisibleAttribute(true)] public interface IDictionary : ICollection, IEnumerableIDictionaryEnumerator GetEnumerator()

StringBuilder

[SerializableAttribute] [ComVisibleAttribute(true)] public sealed class StringBuilder : ISerializablepublic StringBuilder() public StringBuilder Append( Object value ) 2008-09-22: ソースコードの歩き方《IronPython》dict.__str__ 2/3 2008-00-…

Object

[SerializableAttribute] [ComVisibleAttribute(true)] [ClassInterfaceAttribute(ClassInterfaceType.AutoDual)] public class Objectpublic Type GetType()

IEnumerator

[ComVisibleAttribute(true)] [GuidAttribute("496B0ABF-CDEE-11d3-88E8-00902754C43A")] public interface IEnumeratorbool MoveNext() Object Current { get; } 2008-05-20 ソースコードの歩き方《IronPython》reduce 2/5 2008-05-21 ソースコードの歩き方…

IDictionaryEnumerator

[ComVisibleAttribute(true)] public interface IDictionaryEnumerator : IEnumeratorObject Current { get; } Object Key { get; } bool MoveNext() Object Value { get; } 2008-09-26 ソースコードの歩き方《IronPython》dict.update 3/3

ICollection

public interface ICollection : IEnumerable, IEnumerableIEnumerator GetEnumerator() IEnumerator GetEnumerator() 2008-08-20 ソースコードの歩き方《IronPython》dict.keys