毎日プログラムを書いたら

入門ANSI‐C

入門ANSI‐C

昨日のエントリでブログを書くだけで面白いと言う話をしたら、
その感覚で毎日プログラムを書いたら儲かるんじゃないの?と。
ためしに初めて作ったゲームプログラムをブログにアップします。
2009年の正月にセガ本を読んで宿題となっていた倉庫番です。

// souko.cpp : コンソール アプリケーション用のエントリ ポイントの定義 
// 

#include "stdafx.h" 
#include  
#include  

char* sline1="#######"; 
char* sline2="# ..p #"; 
char* sline3="# oo  #"; 
char* sline4="#     #"; 
char* sline5="#######"; 

char line1[7]; 
char line2[7]; 
char line3[7]; 
char line4[7]; 
char line5[7]; 

void move(int move_x, int move_y); 
void getpos(int* px, int* py); 
char getitem(int x, int y); 
void setitem(int x, int y, char c); 
char getitem(int x, int y) 

    switch(y) { 
    case 0: return line1[x]; 
    case 1: return line2[x]; 
    case 2: return line3[x]; 
    case 3: return line4[x]; 
    case 4: return line5[x]; 
    } 
    return 0; 

void setitem(int x, int y, char c) 

    switch(y) { 
    case 0: line1[x] = c; break; 
    case 1: line2[x] = c; break; 
    case 2: line3[x] = c; break; 
    case 3: line4[x] = c; break; 
    case 4: line5[x] = c; break; 
    } 

void getpos(int* px, int* py) 

    for(int x=0; x<7; x++) { 
        for(int y=0; y<5; y++) { 
            if(getitem(x,y) == 'p' || getitem(x,y) == 'P') { 
                *px = x; 
                *py = y; 
                return; 
            } 
        } 
    } 

void move(int move_x, int move_y) 

    int org_x; 
    int org_y; 
    int dest_x; 
    int dest_y; 
    int nimotu_org_x; 
    int nimotu_org_y; 
    int nimotu_dest_x; 
    int nimotu_dest_y; 
    getpos(&org_x, &org_y); 
    dest_x = org_x + move_x; 
    dest_y = org_y + move_y; 
    if(getitem(dest_x, dest_y) == '#') { 
        return; 
    } 
    if(getitem(dest_x, dest_y) == 'o' || getitem(dest_x, dest_y) == 'O') { 
        nimotu_org_x = dest_x; 
        nimotu_org_y = dest_y; 
        nimotu_dest_x = nimotu_org_x + move_x; 
        nimotu_dest_y = nimotu_org_y + move_y; 
        if(getitem(nimotu_dest_x, nimotu_dest_y) == '#') { 
            return; 
        } 
        if(getitem(nimotu_dest_x, nimotu_dest_y) == 'o') { 
            return; 
        } 
        if(getitem(nimotu_dest_x, nimotu_dest_y) == 'O') { 
            return; 
        } 
        if(getitem(nimotu_org_x, nimotu_org_y) == 'o') { 
            setitem(nimotu_org_x, nimotu_org_y, ' '); 
        } else { // 'O' 
            setitem(nimotu_org_x, nimotu_org_y, '.'); 
        } 
        if(getitem(nimotu_dest_x, nimotu_dest_y) == '.') { 
            setitem(nimotu_dest_x, nimotu_dest_y, 'O'); 
        } else { // ' ' 
            setitem(nimotu_dest_x, nimotu_dest_y, 'o'); 
        } 
    } 
    if(getitem(org_x, org_y) == 'p') { 
        setitem(org_x, org_y, ' '); 
    } else { // 'P' 
        setitem(org_x, org_y, '.'); 
    } 
    if(getitem(dest_x, dest_y) == ' ') { 
        setitem(dest_x, dest_y, 'p'); 
    } else { // '.' 
        setitem(dest_x, dest_y, 'P'); 
    } 

int main(int argc, char* argv[]) 

    memcpy(line1, sline1, 7); 
    memcpy(line2, sline2, 7); 
    memcpy(line3, sline3, 7); 
    memcpy(line4, sline4, 7); 
    memcpy(line5, sline5, 7); 
    char c; 
    while(1) { 
        printf("%s\n", line1); 
        printf("%s\n", line2); 
        printf("%s\n", line3); 
        printf("%s\n", line4); 
        printf("%s\n", line5); 
        if(line2[2] == 'O' && line2[3] == 'O') { 
            printf("Clear!!\n"); 
            cin >> c; 
            break; 
        } 
        cin >> c; 
        switch (c) { 
        case 'a': move(-1,0); break; 
        case 's': move(1,0); break; 
        case 'w': move(0,-1); break; 
        case 'z': move(0,1); break; 
        } 
    } 
    return 0; 

// 製作2時間プレイ10秒

C言語のようでC++の文法も混じっています。
これが1時間から2時間の間で書いた倉庫番のプログラムです。
宿題の制限時間が2時間だったこともあって、雑な部分もあります。
プログラムの時間はデバッグや動作確認も含めての時間です。
社会人として5年以上プログラムの仕事をしてから書いたものですが、
大学の卒論がこの倉庫番くらいの出来の情報学部のひと、結構います。
倉庫番でなくオセロを作れると優等生という感じでしょうか。
(もちろん対戦型でなくコンピュータが指すオセロの意味で)
これくらいのプログラムを毎日書けば本当に儲かるのか。
一年で365編書けることになります。
143行あるので概算すると5万行。
辻褄の合ったプログラムが5万行あるとそこそこのものになるかな。
続くかどうかが問題だし、テーマを一貫出来るかも問題。