1 #include "xtama_score.h"
2
tama_score(int score_hint)3 void tama_score( int score_hint )
4 {
5 char buf[10] ;
6
7 Score += score_hint ;
8
9 sprintf( buf ,"%7d",Score );
10
11 XClearArea( dpy , score , 0 , 126 , 150 , 40 , 0 ) ;
12
13 XSetForeground( dpy , gc , iro[YELLOW] );
14
15 XDrawString( dpy , score , gc , 40 , 156 , buf , 7 ) ;
16
17 }
18
level_disp(int level)19 void level_disp( int level )
20 {
21 char buf[10] ;
22
23 sprintf( buf ,"%7d",level );
24
25 XClearArea( dpy , score , 80 , 70 , 70 , 40 , 0 ) ;
26
27 XSetForeground( dpy , gc , iro[YELLOW] );
28
29 XDrawString( dpy , score , gc , 56 , 90 , buf , 7 ) ;
30
31 }
32
tama_tama(int left_tama)33 void tama_tama( int left_tama )
34 {
35 char buf[10] ;
36
37 if ( left_tama < 0 ) left_tama = 0 ;
38
39 sprintf( buf ,"%7d",left_tama ) ;
40
41 XClearArea( dpy , score , 0 , 395 , 150 , 40 , 0 ) ;
42
43 XSetForeground( dpy , gc , iro[YELLOW] );
44
45 XDrawString( dpy , score , gc , 40 , 415 , buf , 7 ) ;
46 }
47
tama_timer(long time,int tmp_score)48 Bool tama_timer( long time , int tmp_score )
49 {
50 struct timeval now_time ;
51
52 gettimeofday( &now_time , NULL );
53
54 tama_tama( tamakazu ) ;
55
56 if ( now_time.tv_sec > time ) return True ;
57 else{
58 tama_drawtime( time - now_time.tv_sec );
59 return False ;
60 }
61
62 }
63
tama_drawtime(int late)64 void tama_drawtime( int late )
65 {
66 int i ;
67 XGCValues values ;
68
69 values.line_width = 3 ;
70
71 XSetForeground( dpy , gc , iro[GREEN] );
72
73 XChangeGC( dpy , gc , GCLineWidth , &values ) ;
74
75 XClearArea( dpy , score , 0 , 328 , 155 , 20 , 0 ) ;
76
77 XDrawLine( dpy , score , gc , 9 , 350 , 142 , 350 ) ;
78
79 for ( i = 0 ; i < 11 ; i ++ )
80 XDrawLine( dpy , score , gc , 13 * i + 10 , 340 , 13 * i + 10 , 350 ) ;
81
82 XSetForeground( dpy , gc , iro[BLUE] );
83
84 late /= 3 ;
85
86 for ( i = 0 ; i < late ; i ++ )
87 XFillRectangle( dpy , score , gc , 13 * i + 12 , 336 , 10 , 12 ) ;
88
89 }
90
91
scoredemo()92 void scoredemo()
93 {
94 GC gc2;
95 Font font1, font2; /* �ե���ȹ�¤�Τ���� */
96 XEvent eve;
97 int i, j , ii , k , tmp ;
98
99 #define BUFF_LENGTH 21
100 #define RANK_NAME_LENGTH 20
101 char buf[BUFF_LENGTH] ;
102 char writing_fname[512] ;
103
104 struct sco {
105 int uid ;
106 int score ;
107 int level ;
108 } lank[16] ;
109
110 static char *message[] = {
111 "Score Ranking Best 15"," Name Score Level"
112 };
113
114 struct passwd *pass;
115
116 FILE *file ;
117
118 #ifdef FILELOCK
119 int msg_flag ;
120 #endif
121
122 if ( !getpwuid(getuid()) ){
123 printf("Can't get User infomation \n");
124 return ;
125 }
126
127 #ifndef SFILE
128 #define SFILE ".tama_score"
129 #endif
130
131 strcpy( writing_fname , SFILE ) ;
132
133 #ifdef FILELOCK
134 strcat( writing_fname , "-writing" ) ;
135 k = rename( SFILE , writing_fname ) ;
136 msg_flag = 0 ;
137 while( k < 0 ){
138 k = rename( SFILE , writing_fname ) ;
139 if( msg_flag == 0 ) {
140 printf("¾�οͤ���Ͽ��ʤΤ�....\n") ;
141 msg_flag = 1 ;
142 }
143 }
144 if( msg_flag != 0 ) printf("......OK\n") ;
145 #endif
146 if ( (file = fopen( writing_fname ,"r") ) == NULL )
147 {
148 if ( (file = fopen( writing_fname , "a" )) == NULL ) {
149 printf("Can't create file %s\n", writing_fname ) ;
150 return ;
151 }
152 for ( i = 0 ; i < 15 ; i ++ )
153 fprintf( file ,"%d %d %d \n", 0 ,100 * ( 15 - i ) , 14 - i) ;
154 fclose( file ) ;
155 file = fopen( writing_fname ,"r" ) ;
156 }
157
158 for ( i = 0 ; i < 15 ; i ++ )
159 fscanf( file ,"%d %d %d",&lank[i].uid,&lank[i].score,&lank[i].level) ;
160
161
162 fclose(file);
163
164 i = 0 ;
165 while ( lank[i].score >= Score && i < 15 )
166 i ++ ;
167
168 if ( i < 15 )
169 {
170 i = 0 ;
171 while ( lank[i].uid != getuid() && i < 15 )
172 i ++ ;
173
174 if ( i == 15 )
175 {
176 lank[14].uid = getuid() ;
177 lank[14].score = Score ;
178 lank[14].level = level ;
179 }
180 else
181 if ( lank[i].score < Score )
182 {
183 /*lank[i].uid = getuid() ; */
184 lank[i].score = Score ;
185 lank[i].level = level ;
186 }
187
188 for ( i = 1 ; i < 15 ; i ++ )
189 for ( j = i ; j < 15 ; j ++ )
190 {
191 if ( lank[15-j].score > lank[14 -j].score )
192 {
193 tmp = lank[15-j].uid ;
194 lank[15-j].uid = lank[14 -j].uid ;
195 lank[14 -j].uid = tmp ;
196
197 tmp = lank[15-j].score ;
198 lank[15-j].score = lank[14 -j].score ;
199 lank[14 -j].score = tmp ;
200
201 tmp = lank[15-j].level ;
202 lank[15-j].level = lank[14 -j].level ;
203 lank[14 -j].level = tmp ;
204 }
205 }
206
207 file = fopen( writing_fname ,"w");
208
209 for ( i = 0 ; i < 15 ; i ++ )
210 fprintf( file ,"%d %d %d \n",lank[i].uid,lank[i].score,lank[i].level) ;
211 fclose( file ) ;
212 }
213 #ifdef FILELOCK
214 rename( writing_fname , SFILE ) ;
215 #endif FILELOCK
216
217 font1= XLoadFont( dpy, "9x15bold" );
218 /*font2= XLoadFont( dpy, "-adobe-times-bold-i-normal--*-240-*-*-p-*-*" );*/
219 font2= XLoadFont( dpy, "-*-*-bold-o-*-*-24-*-*-*-p-*-iso8859-1" );
220
221 gc2 = XCreateGC( dpy, frame, (unsigned long)NULL, NULL );
222
223 i = 240 ;
224
225 XSetForeground( dpy , gc2 , iro[BLUE] );
226
227 XSetFont( dpy, gc2, font2 ); /* �ե���Ȥ����� */
228 XFlush( dpy );
229 XDrawString( dpy, frame, gc2, 160, 270-i,
230 message[0], strlen(message[0]) );
231 XSetFont( dpy, gc2, font1 ); /* �ե���Ȥ����� */
232 XFlush( dpy );
233 XDrawString( dpy, frame, gc2, 100, 300-i,
234 message[1], strlen(message[1]) );
235 for ( ii = 0 ; ii < 15 ; ii ++ )
236 {
237 for( k=0 ; k<BUFF_LENGTH ; k++ ) buf[k]=0 ;
238 if (!(pass = getpwuid(lank[ii].uid)))
239 sprintf(buf,"Anonymous");
240 else {
241 strncpy( buf , pass->pw_gecos , RANK_NAME_LENGTH ) ;
242 tmp = strlen( buf ) ;
243 for ( j = 0 ; j < tmp ; j ++ )
244 if ( buf[j] == ',' )
245 buf[j] = '\0' ;
246 }
247 XDrawString( dpy, frame, gc2, 110, 330-i + ii * 30, buf, strlen(buf) );
248
249 sprintf(&buf[11],"%-8d",lank[ii].score) ;
250 sprintf(&buf[7-strlen(&buf[11])],"%8d",lank[ii].score) ;
251 XDrawString( dpy, frame, gc2, 290, 330-i + ii * 30,
252 buf, strlen(buf) );
253 sprintf(buf,"%-2d", lank[ii].level);
254 XDrawString( dpy, frame, gc2, 397, 330-i + ii * 30,
255 buf, strlen(buf) );
256 XSync( dpy , 1 ) ;
257 }
258
259 timer( 500000 ) ;
260
261 while( True )
262 {
263 if ( XEventsQueued( dpy, QueuedAfterFlush )){
264 XNextEvent( dpy, &eve );
265 if ( eve.type == KeyPress || eve.type == ButtonPress ){
266 XClearWindow( dpy , frame );
267 return ;
268 }
269 }
270 }
271 }
272