Standard C Library만으로 테트리스를 만들 수 있을까요?

익명 사용자의 이미지

흠..좀 엽기적일 수도 있겠군요. ^^;;

그냥 만들면 재미있겠다 싶어서.. ^^;;

지금 그냥 구상만 하고 있습니다. ^^;;

다른 부분은 다 가능할 것 같은 데..가장 고민이 되는 부분은 키입력을 받
으면서 시간을 체크하는 부분입니다.

curses를 써서 getch()를 쓰면 편할 것 같은 데....getch()은 Standard C
Library가 아니라서...

while ( 1 )
{
if(시간이지났나())
{
if( 덩어리 아래 아무거도 없나())
{
덩어리를 한 줄 내림();
}
else
{
덩어리를 그 자리에 멈추고 새로운 덩어리를 만듬();
}
}
키입력받는함수();

if ( 키입력을 받았나())
{
키입력대로 움직임();
}
}

이런 구도가 될 것 같은 데요. ^^;;

키입력 받는 함수가 문젠데... -.-;;

키입력을 기다리고 있으면 시간체크를 못해서 덩어리(?)가 내려가지를 않
는 데...

아시는 분 없나요?

키입력을 받는 함수인데 멈추지 않는 함수 아시는 분...

익명 사용자의 이미지


key 입력을 확인하는 방법은 다음 4가지 정도 되겠네요.

STDIN에 대해서...

1. poll이나 select를 사용한다.

2. fcntl(ioctl)로 non block read를 설정한다.(O_NONBLOCK)

3. termio struct를 사용하여 VMIN=1, VTIME=0을 조정하여
Non Block Mode가 되게 한다.

4. stty로 lflags의 icanon을 disable한다.

위의 사항중 1번은 termio struct를 변경하지 않지만
2 ~ 3은 모두 non block(-iconon)모드를 설정하기에
종료전에 반드시 원상태로 돌려 놓아야 합니다.

화면처리.

화면의 덩어리 down은 curses lib를 사용하지 않고는 상당히 힘들걸요.

익명 사용자의 이미지

key 입력을 확인하는 방법은 다음 4가지 정도 되겠네요.

STDIN에 대해서...

1. poll이나 select를 사용한다.

2. fcntl(ioctl)로 non block read를 설정한다.(O_NONBLOCK)

3. termio struct를 사용하여 VMIN=1, VTIME=0을 조정하여
Non Block Mode가 되게 한다.

4. stty로 lflags의 icanon을 disable한다.

위의 사항중 1번은 termio struct를 변경하지 않지만
2 ~ 3은 모두 non block(-iconon)모드를 설정하기에
종료전에 반드시 원상태로 돌려 놓아야 합니다.

제 질문을 잘못 이해하신듯 하네요 ^^;;

poll이나 select는 Standard C Library가 아닌 것 같은 데요.

흠...지금 생각해보니 Standard C Library가 정확하게 먼 지 저도 잘 모르
겠군요. ^^;;

제 생각은 stdio.h, stdlib, time.h, math.h 등등 정말 기본적으로 쓰는
함수들만 이용해서 만들려고 하는 것인데..poll이나 select등은 여기에 끼
워넣기엔 좀 무리가 있네요. ^^;;

3번과 4번은 제가 무식해서 잘 모르겠네요 ^^;;

조금만 더 자세한 설명을 해주실순 없네요 ^^;;

죄송... ^^;;

화면처리.

화면의 덩어리 down은 curses lib를 사용하지 않고는 상당히 힘들걸요.

void draw( char **data )
{
int i, j;

for ( i = 0; i < 20; i++ )
{
for ( j = 0; j < 10; j++ )
{
printf( "%c", data[ i ][ j ] );
}
printf( "\n" );
}
}

이런 식으로 할 생각이었는 데요. ^^;;

그냥 화면이 주루룩 주루룩~~ 올라가는 게 눈에 보일 테지만.. -.-;;;

키보드를 좀 많이 누르면 잘 안 보이겠죠? -_-;;;;;

흠...넘 엽기적인가요?

익명 사용자의 이미지

화면...쭉 넘긴다 해도..

터미널 마다... width,height 를 구해서..

그 만큼...넘겨주고 해야 할텐데..

좋은 방법은 아닌듯 싶군요...

^^ 글구.. select 는 glibc 함수 입니다..

익명 사용자의 이미지

poll은 linux에서는 최소한 libc.a에 포함되어 있습니다.
libc.a중 poll이 포함된 부분
>>
poll.o
U __errno_location
00000000 T __poll
00000000 W poll
<<

select도 linux에서는 최소한 libc.a에 포함되어 있습니다.
libc.a중 select이 포함된 부분
>>
select.o
00000000 T __select
U __syscall_error
00000000 W select
<<

익명 사용자의 이미지

제가 계속 말을 애매하게 했군요.

죄송합니다. 꾸벅..

저의 의도는

#include

main()
{
printf( "Hello World!\n" );
}

이 프로그램이 모든 씨 컴파일러로 컴파일이 되고 돌아가는 것 처럼 제가
만들고자 하는 테트리스도 그랬으면 좋겠다는 것입니다.

흠...안되면 Turbo C랑 gcc에서 만이라도...

그렇다고 Qt, SDL 이런 건 안되겠죠? ^^;;

익명 사용자의 이미지

화면...쭉 넘긴다 해도..

터미널 마다... width,height 를 구해서..

그 만큼...넘겨주고 해야 할텐데..

좋은 방법은 아닌듯 싶군요...

물론 좋은 방법은 아니죠 ^^;;

그런데 프로그램이 돌아간다는 데 의미를 두어야 할 프로그램인 것 같습니
다.

위쪽에 저 번 화면이 조금 남아있다고 해서 큰 일날건 없지 않습니까?

그냥 재미로 만드는 건데요 -)

익명 사용자의 이미지

재미로 만들거면...이번기회에..

curses 에 대해서도 공부해 보고 하는게 좋을듯 싶은데요..

^^....

익명 사용자의 이미지

이미 할 줄 아는 데요 ^^;;

익명 사용자의 이미지

하시고 싶은 말씀은?

익명 사용자의 이미지


켈..덩어리는 무슨 덩어리에요?

고기덩어리? 말씀이신가?

한마디로 도스의 kbhit() 같은 함수가 일단 있어야겠네요..

오직 그것만 만드시면.. 다른건 별달리 필요 없겠는데요.

그덩어리를 특정위치에서 뿌려주고..뿌린위치 기억할수 있고..

다시지우고 뿌릴수있고 다되겠죠?

이모든제어는 단지 잘키운 printf() 만으로도 가능합니다. ^^;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.