-
-
Save jeremy-brenner/4071573 to your computer and use it in GitHub Desktop.
ncurses pong in php, -jbrenner
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /usr/bin/env php | |
# $Id: pong.phps,v 1.2 2006/01/28 14:45:22 dingo Exp $ | |
# imported via lynx -dump 2006 jdq, orig by theedge@efnet | |
<?php | |
/* | |
Jeremy Brenner 2005 | |
*/ | |
ncurses_init(); | |
ncurses_timeout(0); | |
ncurses_cbreak(); | |
ncurses_start_color(); | |
ncurses_init_pair(1,NCURSES_COLOR_RED,NCURSES_COLOR_BLACK); | |
ncurses_init_pair(2,NCURSES_COLOR_GREEN,NCURSES_COLOR_BLACK); | |
ncurses_init_pair(3,NCURSES_COLOR_YELLOW,NCURSES_COLOR_BLACK); | |
ncurses_init_pair(4,NCURSES_COLOR_BLUE,NCURSES_COLOR_BLACK); | |
ncurses_init_pair(5,NCURSES_COLOR_MAGENTA,NCURSES_COLOR_BLACK); | |
ncurses_init_pair(6,NCURSES_COLOR_CYAN,NCURSES_COLOR_BLACK); | |
ncurses_init_pair(7,NCURSES_COLOR_WHITE,NCURSES_COLOR_BLACK); | |
$x=1; | |
$y=1; | |
$xdir = 1; | |
$ydir = 1; | |
$delay = 100000; | |
$go = TRUE; | |
$count = 0; | |
$gameover = " *Game Over* "; | |
$tryagain = "Try Again? (Y/N)"; | |
$paddle = "|=========|"; | |
ncurses_getmaxyx(STDSCR, $H, $W); | |
$p = ceil ( $W / 2 ) - ceil ( strlen ( $paddle ) / 2 ); | |
$pdir = 0; | |
$bwin = ncurses_newwin($H, $W, 0, 0); | |
ncurses_wborder($bwin, 0, 0, 0, 0, 0, 0, 0, 0); | |
while($go){ | |
$ch = ncurses_getch(); | |
switch( $ch ){ | |
case FALSE: | |
break; | |
case NCURSES_KEY_UP: | |
// $delay = ( $delay >= 10000 ) ? $delay - 10000 : 1; | |
break; | |
case NCURSES_KEY_DOWN: | |
// $delay = $delay + 10000; | |
break; | |
case NCURSES_KEY_LEFT: | |
$pdir = ( $pdir <= -4 ) ? -4 : $pdir - 1; | |
break; | |
case NCURSES_KEY_RIGHT: | |
$pdir = ( $pdir >= 4 ) ? 4 : $pdir + 1; | |
break; | |
case ord('q'): | |
case ord('Q'): | |
die(); | |
} | |
ncurses_getmaxyx(STDSCR, $H, $W); | |
ncurses_wmove($bwin, $y , $x ); | |
ncurses_wcolor_set($bwin, 2); | |
ncurses_waddstr($bwin, ' ' ); | |
ncurses_wmove($bwin, $H-2 , $p ); | |
ncurses_wcolor_set($bwin, 4); | |
ncurses_waddstr($bwin, str_repeat(' ',strlen($paddle)) ); | |
ncurses_wcolor_set($bwin, 1); | |
ncurses_wmove($bwin, $H-1 , $W-1 ); | |
$y += $ydir; | |
$x += $xdir; | |
$p += $pdir; | |
if($x >= $W - 1 ){ | |
$xdir *= -1; | |
$x = $W - 2; | |
}elseif($x <= 1){ | |
$xdir *= -1; | |
$x = 1; | |
} | |
if($y >= $H - 1){ | |
$ydir = -1; | |
}elseif($y == 1){ | |
$ydir = 1; | |
} | |
$pe = $p + strlen ( $paddle ) ; | |
if($p <= 1){ | |
$pdir = 0; | |
$p = 1; | |
} | |
if($pe >= $W-1){ | |
$pdir = 0; | |
$p = $W - strlen ( $paddle ) - 1; | |
} | |
ncurses_wmove($bwin, $y , $x ); | |
ncurses_wcolor_set($bwin, 2); | |
ncurses_waddstr($bwin, '#' ); | |
ncurses_wmove($bwin, $H-2 , $p ); | |
ncurses_wcolor_set($bwin, 4); | |
ncurses_waddstr($bwin, $paddle ); | |
ncurses_wcolor_set($bwin, 1); | |
ncurses_wmove($bwin, $H-1 , $W-1 ); | |
ncurses_wrefresh($bwin); | |
if( $y == $H - 3 && $x >= $p-1 && $x <= $pe ){ | |
$ydir = -1; | |
$xdir += $pdir; | |
if( $xdir == 0 ){ | |
$xdir = ( abs( $pdir ) > $pdir ) ? -1 : 1; | |
} | |
$xdir = ( $xdir > 5 ) ? 5 : $xdir; | |
$xdir = ( $xdir < -5 ) ? -5 : $xdir; | |
$delay = ( $delay >= 2000 ) ? $delay - 2000 : 1000; | |
$count++; | |
} | |
if( $y == $H - 1 ){ | |
$gw = strlen($tryagain)+2; | |
$gy = ceil ( $H / 2 ) - 2; | |
$gx = ceil( $W / 2 ) - ceil( $gw / 2 ); | |
$gwin = ncurses_newwin( 5, $gw , $gy , $gx ); | |
ncurses_wborder($gwin, 0, 0, 0, 0, 0, 0, 0, 0); | |
ncurses_wmove($gwin,1,1); | |
ncurses_waddstr($gwin, $gameover ); | |
ncurses_wmove($gwin,2,1); | |
ncurses_waddstr($gwin, "Bounces: " . $count ); | |
ncurses_wmove($gwin,3,1); | |
ncurses_waddstr($gwin, $tryagain ); | |
ncurses_wrefresh($gwin); | |
$dead = TRUE; | |
while( $dead ){ | |
$ch = ncurses_getch(); | |
switch( chr($ch) ){ | |
case 'y': | |
case 'Y': | |
$x=1; | |
$y=1; | |
$xdir = 1; | |
$ydir = 1; | |
$delay = 100000; | |
$dead = FALSE; | |
$go = TRUE; | |
$p = ceil ( $W / 2 ) - ceil ( strlen ( $paddle ) / | |
2 ); | |
$pdir = 0; | |
$count = 0; | |
break; | |
case 'q': | |
case 'Q': | |
case 'n': | |
case 'N': | |
$go = FALSE; | |
$dead = FALSE; | |
break; | |
} | |
} | |
} | |
// ncurses_refresh(); | |
usleep($delay); | |
} | |
ncurses_end() | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment