Практична робота №14
Складання програм з використанням графічних даних
Вправа 1. Побудова малюнків.
Завдання. Складіть програму побудови малюнків
та реалізуйте її в середовищі програмування.
Код програми (для варіанту):
from tkinter import *
window = Tk()
c = Canvas(window, width=300, height=300, bg=’white’)
c.pack()
c.create_polygon(100, 10, 20, 90, 180, 90, fill=’orange’)
c.create_rectangle(20, 90, 180, 170, fill=’red’)
c.create_polygon(180, 90, 180, 170, 260, 170, fill=’orange’)
c.create_rectangle(20, 170, 260, 250, fill=’yellow’)
Збережіть програму з іменем Побудова малюнків.
Вправа 2. Стовпчаста діаграма.
Завдання. У середовищі програмування розробіть проєкт, у якому у вікні головної форми буде побудована стовпчаста діаграма, яка демонструє співвідношення між числами: 15, 50,70, 25, 10, 30.
Код програми:
from tkinter import *
window = Tk()
c = Canvas(window, width=200, height=110, bg=’white’)
c.pack()
c.create_rectangle(10, 85, 30, 100, fill=’blue’)
c.create_rectangle(40, 50, 60, 100, fill=’blue’)
c.create_rectangle(70, 30, 90, 100, fill=’blue’)
c.create_rectangle(100, 75, 120, 100, fill=’blue’)
c.create_rectangle(130, 90, 150, 100, fill=’blue’)
c.create_rectangle(160, 70, 180, 100, fill=’blue’)
c.create_line(0, 100, 200, 100)
Збережіть програму з іменем Стовпчаста діаграма.
Вправа 3. Кругова діаграма.
Завдання. У середовищі програмування розробіть проект, у якому у вікні головної форми буде побудована кругова діаграма, яка демонструє склад повітря.
Код програми:
from tkinter import *
window = Tk()
c = Canvas(window, width=200, height=200, bg=’white’)
c.pack()
c.create_oval(10, 10, 190, 190, fill=’lightgrey’, outline=’white’)
c.create_arc(10, 10, 190, 190, start=90, extent=-280, fill=’blue’)
c.create_arc(10, 10, 190, 190, start=90, extent=10, fill=’red’)
c.create_arc(10, 10, 190, 190, start=100, extent=80, fill=’green’)
Збережіть програму з іменем Кругова діаграма.
Вправа 4. Площа фігур.
Завдання. Створіть проєкт Площа фігур, вікно якого містить зображення трикутника, прямокутника й кола різних кольорів та три кнопки. Після натиснення кнопки на екрані з’являється формула для обчислення площі фігури певної фігури .
Вікно програми має вигляд:
Код програми:
from tkinter import *
def button_click_1():
c.create_text(70, 120, text=’S = 0,5 * a * h’)
def button_click_2():
c.create_text(270, 120, text=’S=a*b’)
def button_click_3():
c.create_text(400, 120, text=’S = π*r*r’)
window = Tk()
c = Canvas(window, width=500, height=150, bg=’white’)
c.pack()
c.create_polygon(100, 10, 20, 90, 180, 90, fill=’red’)
c.create_rectangle(200, 10, 350, 90, fill=’blue’)
c.create_oval(370, 10, 450, 90, fill=’green’)
button = Button (window, text=’Площа трикутника’, command=button_click_1)
button.pack(pady =
button = Button (window, text=’Площа прямокутника’, command=button_click_2)
button.pack(pady =
button = Button (window, text=’Площа кола’, command=button_click_3)
button.pack(pady =
Збережіть програму з іменем Площа фігур.
Закрийте всі відкриті вікна.
Повідомте вчителя про завершення роботи.
Ответ:
Попробуй
Объяснение:
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
const int BOARD_SIZE = 10;
const char SHIP_SYMBOL = ‘S’;
const char HIT_SYMBOL = ‘X’;
const char MISS_SYMBOL = ‘O’;
const char EMPTY_SYMBOL = ‘.’;
// Функція для очищення екрану консолі
void clearScreen()
{
system(«clear»);
}
// Клас для представлення ігрового поля
class Board
{
public:
vector<vector<char>> grid;
Board()
{
grid.resize(BOARD_SIZE, vector<char>(BOARD_SIZE, EMPTY_SYMBOL));
}
// Функція для відображення ігрового поля
void display()
{
cout << » «;
for (int i = 0; i < BOARD_SIZE; ++i)
cout << i << » «;
cout << endl;
for (int i = 0; i < BOARD_SIZE; ++i)
{
cout << i << » «;
for (int j = 0; j < BOARD_SIZE; ++j)
cout << grid[i][j] << » «;
cout << endl;
}
}
// Функція для розміщення кораблів
void placeShips()
{
for (int i = 1; i <= 5; ++i)
{
int shipSize = 6 — i;
cout << «Розмістіть корабль розміром » << shipSize << endl;
for (int j = 0; j < i; ++j)
{
int x, y;
cout << «Введіть координати (x, y) для частини » << j + 1 << «: «;
cin >> x >> y;
while (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || grid[x][y] != EMPTY_SYMBOL)
{
cout << «Некоректні координати. Спробуйте ще раз: «;
cin >> x >> y;
}
grid[x][y] = SHIP_SYMBOL;
}
clearScreen();
display();
}
}
// Функція для перевірки чи виграв гравець
bool checkWin()
{
for (int i = 0; i < BOARD_SIZE; ++i)
{
for (int j = 0; j < BOARD_SIZE; ++j)
{
if (grid[i][j] == SHIP_SYMBOL)
return false;
}
}
return true;
}
};
// Функція для випадкового пострілу комп’ютера
void computerRandomShoot(Board &opponentBoard)
{
int x, y;
do
{
x = rand() % BOARD_SIZE;
y = rand() % BOARD_SIZE;
} while (opponentBoard.grid[x][y] == HIT_SYMBOL || opponentBoard.grid[x][y] == MISS_SYMBOL);
if (opponentBoard.grid[x][y] == SHIP_SYMBOL)
{
cout << «Комп’ютер влучив у ваш корабель!» << endl;
opponentBoard.grid[x][y] = HIT_SYMBOL;
}
else
{
cout << «Комп’ютер промахнувся.» << endl;
opponentBoard.grid[x][y] = MISS_SYMBOL;
}
}
// Функція для інтелектуальної гри комп’ютера
void computerIntelligentShoot(Board &opponentBoard, vector<pair<int, int>> &possibleMoves)
{
int index = rand() % possibleMoves.size();
int x = possibleMoves[index].first;
int y = possibleMoves[index].second;
possibleMoves.erase(possibleMoves.begin() + index);
if (opponentBoard.grid[x][y] == SHIP_SYMBOL)
{
cout << «Комп’ютер влучив у ваш корабель!» << endl;
opponentBoard.grid[x][y] = HIT_SYMBOL;
}
else
{
cout << «Комп’ютер промахнувся.» << endl;
opponentBoard.grid[x][y] = MISS_SYMBOL;
}
}
// Функція для гри між гравцем і комп’ютером
void playHumanVsComputer()
{
Board playerBoard, computerBoard;
vector<pair<int, int>> possibleMoves;
clearScreen();
cout << «Гравець, розташуйте свої кораблі.» << endl;
playerBoard.display();
playerBoard.placeShips();
cout << «Комп’ютер розташовує свої кораблі.» << endl;
computerBoard.placeShips();
clearScreen();
cout << «Гра розпочалась!» << endl;
while (true)
{
cout << «Ваш хід:» << endl;
cout << «Ваше поле:» << endl;
playerBoard.display();
cout << «Поле комп’ютера:» << endl;
computerBoard.display();
int x, y;
cout << «Введіть координати (x, y) для пострілу: «;
cin >> x >> y;
while (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || computerBoard.grid[x][y] == HIT_SYMBOL || computerBoard.grid[x][y] == MISS_SYMBOL)
{
cout << «Некоректні координати. Спробуйте ще раз: «;
cin >> x >> y;
}
if (computerBoard.grid[x][y] == SHIP_SYMBOL)
{
cout << «Ви влучили у корабель комп’ютера!» << endl;
computerBoard.grid[x][y] = HIT_SYMBOL;
if (computerBoard.checkWin())
{
cout << «Ви перемогли!» << endl;
break;
}
}
else
{
cout << «Ви промахнулися.» << endl;
computerBoard.grid[x][y] = MISS_SYMBOL;
}
cout << «Хід комп’ютера:» << endl;
computerRandomShoot(playerBoard);
if (playerBoard.checkWin())
{
cout << «Комп’ютер переміг!» << endl;
break;
}
}
}
// Функція для гри між двома комп’ютерами
void playComputerVsComputer()
{
Board board1, board2;
vector<pair<int, int>> possibleMoves;
cout << «Перший комп’ютер розташовує свої кораблі.» << endl;
board1.placeShips();
cout << «Другий комп’ютер розташовує свої кораблі.» << endl;
board2.placeShips();
clearScreen();
cout << «Гра розпочалась!» << endl;
while (true)
{
cout << «Хід першого комп’ютера:» << endl;
computerRandomShoot(board2);
if (board2.checkWin())
{
cout << «Перший комп’ютер переміг!» << endl;
break;
}
cout << «Хід другого комп’ютера:» << endl;
computerIntelligentShoot(board1, possibleMoves);
if (board1.checkWin())
{
cout << «Другий комп’ютер переміг!» << endl;
break;
}
}
}
int main()
{
srand(static_cast<unsigned>(time(0)));
int choice;
cout << «Виберіть режим гри:» << endl;
cout << «1. Людина проти комп’ютера» << endl;
cout << «2. Комп’ютер проти комп’ютера» << endl;
cout << «Ваш вибір: «;
cin >> choice;
if (choice == 1)
playHumanVsComputer();
else if (choice == 2)
playComputerVsComputer();
else
cout << «Некоректний вибір.» << endl;
return 0;
}