Практика программирования (Бейсик, Си, Паскаль)



         

Задачи, советы и ответы


Задание 8.14. Построение шахматной доски

Написать программу, которая рисует на экране шахматную доску. Идея программы подсказана К. Э. Садыровым, однако мы предпочли другую реализацию с целью демонстрации идентичных программ на разных языках.

Совет 1 (общий)

Структура программы мало чем отличается от программ, демонстрировавших палитру (см. выше). Единственная тонкость заключается в организации правильного чередования цвета заливки смежных квадратов как в пределах строки, так и при переходе на следующую строку. Для этой цели использован прием "мерцающего бита". При каждом повторении внутреннего цикла величина col принимает чередующиеся значения 7 или 8 (в "мерцающем бите" аналогичная операция выглядела бы так: bit=l- bit или bit:=not bit). Если такое же действие не было бы предусмотрено и во внешнем цикле, то две смежные линейки начинались бы с квадратов одинакового цвета.

Совет 2 (QBasic)

Для подчеркивания границ каждого поля доски приходится сначала заливать очередную клетку, а потом обводить ее границу.

Совет 3 (Си, Паскаль)

Построение залитого поля с одновременной обводкой его границы можно выполнить процедурой bar3d с нулевой глубиной трехмерного столбика.

Программа 8_14.bas

RЕМ Построение шахматной доски DEFINT A-Z SCREEN 12

х0=10: у0=10: col=8: w=50

F0R y=y0 T0 y0+7*w STEP w

col=15-col F0R x=x0 T0 x0+7*w STEP w

LINE (x,y)-(x+w,y+w),col,BF :' Заливка клетки

LINE (x,y)-(x+w,y+w),15,В :' 0бводка границ col=15-col:

' Цвет для смежной клетки NEXT x NEXT у

Программа 8_14.с

/* Построение шахматной доски */

#include <stdio.h>

#include <conio.h>

#include <graphics.h>

main() {

int x,y,x0=10,y0=10,col=8,w=50;

int gd=0,gm;

initgraph(Sgd,&gm,"");

for(y=y0; y<y0+8*w; y+=w)

{

col-15-col;

for(x=x0; x<x0+8*w; xt=w) {

setfillstyle(1,col);

bar3d(x,y,x+w,y+w,0,1); /* 0бводка и заливка клетки */

col=15-col; /* Цвет для смежной клетки */ } }

getch();

closegraph(); }




Содержание  Назад  Вперед