C言語でハート型

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

C言語でハート型

#1

投稿記事 by しじみ » 8年前

C言語初心者です
macのターミナルで 動きのあるハート型を表示するプログラムを作りました
もっと簡潔に表示できる書き方があれば 教えて下さい
osx10.11.3です
よろしくお願いします

コード:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>

#define A "■"
#define B "  "

#define M 30
#define X 10
#define Y 10

char masu1[4][4]={A,A};
char masu2[4][4]={B,B};
 
void set1();

int main()
{
       while(1){
		set1();
	}
	return 0;
}

void set1()
{
	int i,x,y,j,n=0;
	int a[M],c[M];

	do{
		for(i=0,j=M;i<M;i++,j--){
			a[i]=j;
			c[i]=i;
		}
		printf("\n");

		for(x=0;x<X;x++){
			for(y=0;y<Y;y++){
				//斜め左
				if(x>a[n]-20&&((y==5&&x==10)||
(y==4&&x==9)||(y==3&&x==8)||
(y==2&&x==7)||(y==1&&x==6)||
(y==0&&x==5))){
					printf("%s", *masu1);
				}
				//斜め右
				else if(x>a[n]-20&&((y==5&&x==8)||
(y==6&&x==7)||(y==7&&x==6)||
(y==8&&x==5))){
					printf("%s", *masu1);
				}
				//左縦
				else if(((x>2&&x<5)&&(x>a[n]-20 && y==0))){
					printf("%s",*masu1);
				}
				//右縦
				else if(((x>2&&x<5)&&(x>a[n]-20 && y==8))){
					printf("%s",*masu1);
				}
				//左横
				else if((y>0&&y<4)&&(x==2 && y<c[n]-7)){
					printf("%s", *masu1);
				}
				//右横
				else if((y>4&&y<8)&&(x==2 && y>a[n]-15)){
					printf("%s",*masu1);
				}
				else if(n>11 && x==3 && y==4){
					printf("%s", *masu1);
				}
				else{
					printf("%s", *masu2);
				}
			}
			printf("\n");
		}
		usleep(250000);
		system("clear");
		n++;
	}while(n<M);
}

アバター
little
記事: 44
登録日時: 12年前
連絡を取る:

Re: C言語でハート型

#2

投稿記事 by little » 8年前

しじみ さんが書きました:macのターミナルで 動きのあるハート型を表示するプログラムを作りました
もっと簡潔に表示できる書き方があれば 教えて下さい

mac...いいなぁ...(´・ω・`)
簡潔に表示できる書き方は、反則かもですが外部ファイルを利用するのがいいように思います。
他のハート以外のマークにも割と簡単に対応できますし。。

アルゴリズム的な話であれば他の人お願いします。。

main.c
► スポイラーを表示
heart.txt
► スポイラーを表示
最後に編集したユーザー little on 2016年4月06日(水) 00:40 [ 編集 3 回目 ]
百聞は~

しじみ

Re: C言語でハート型

#3

投稿記事 by しじみ » 8年前

なるほど 外部ファイルを使うってゆうのもあるんですね
あと コードを他の違う書き方わかればお願いします

アバター
little
記事: 44
登録日時: 12年前
連絡を取る:

Re: C言語でハート型

#4

投稿記事 by little » 8年前

一行ずつ表示するバージョンで組んでみました。

main.c
► スポイラーを表示
百聞は~

かずま

Re: C言語でハート型

#5

投稿記事 by かずま » 8年前

こんなのはいかがでしょうか?

コード:

#include <stdio.h>

#include <unistd.h>
#define msleep(x) usleep(x*1000)

//#include <windows.h>
//#define msleep(x) Sleep(x)
 
int a[11][2] = { 9,10, 8,8, 7,6, 6,4, 5,2, 4,2, 3,2, 2,4, 2,6, 2,8, 3,10 };
void set(int x, int y) { printf("\33[%d;%d;H■", x, y); }

int main(void)
{
    int i;
    while (1) {
        printf("\33[H\33[J");
        for (i = 0; i < 11; i++) {
            set(a[i][0], a[i][1]);
            set(a[i][0], 20 - a[i][1]);
            fflush(stdout);
            msleep(200);
        }
        msleep(2000);
    }
}

しじみ

Re: C言語でハート型

#6

投稿記事 by しじみ » 8年前

littelさん ありがとうございます
一行ずつというアイデアもあるんですね

しじみ

Re: C言語でハート型

#7

投稿記事 by しじみ » 8年前

かずまさん ありがとうございます
エスケープシーケンス使うとだいぶスッキリとしますね
他にもあれば 宜しくお願いします

閉鎖

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