Esimerkkejä MistralAI:n kyvykkyydestä.
Ohjelmiston toteuttaminen Mistral AI:lla
Tässä esimerkissä toteutetaan peli, mutta voit toteuttaa Mistral AI:llä myös ohjelmiston.

Kuva 1: Keskustelulinkistä löytyvä koodi tuottaa kuvan kaltaisen pelin, mutta korostan että tämä on vain karkea esimerkki siitä, millaisen pelin tai ohjelmiston voisit Mistral AI:n koodilla tuottaa.
Tässä tiedot mitä tarvitset saadaksesi tämän Pysty-Pong-pelin toimimaan:
Tarvittavat ohjelmat ja toimet:
-
Python (versio 3.8 tai uudempi)
→ Pythonin voi ladata täältä: python.org/downloads
-
Pygame-kirjasto
→ Asennetaan komentorivillä (CMD):
pip install pygame
(Pythonin mukana tulee yleensä pip, mutta varmistetaan asennuksen yhteydessä.)
-
Tekstieditori (esimerkiksi)
-
Notepad++ (helppo ja kevyt)
-
Tai vaihtoehtoisesti esim. Visual Studio Code (vähän monipuolisempi, sopii laajempaan ohjelmointiin)
-
CMD eli komentorivi (Windowsissa valmiina)
-
Äänitiedosto ("bounce.wav")
→ Ladataan ilmainen pieni pomppuääni ja tallennetaan samaan kansioon pelin kanssa.
(Äänitiedosto voi olla esimerkiksi äänitetty itsekin, mutta tärkeää että tiedosto on nimeltään bounce.wav.)
📦 Yhteenveto minimivaatimuksista:
| Tarvittava asia |
Vinkki |
| Python 3.8+ |
Asenna python.org-sivulta |
| Pygame-kirjasto |
Asennus CMD:ssä: pip install pygame |
| Tekstieditori |
Notepad++, VSCode tai muu |
| Komentorivi (CMD) |
Python-ohjelman ajamiseen |
| Äänitiedosto (bounce.wav) |
https://freesound.org/ |
📄 Tehtävä: Pysty-Pong -pelin tekeminen Pythonilla ja Pygamella
🎯 Tehtävän kuvaus
Tee yksinkertainen ping pong -peli, jossa:
-
Pallo liikkuu alhaalta ylöspäin ja kimpoaa takaisin pelaajan sekä tekoälyn ohjaamista palkkipelaajista.
-
Pelaaja ohjaa omaa palkkia näppäimistön vasen ja oikea -nuolinäppäimillä.
-
Tekoäly ohjaa yläreunan palkkia automaattisesti.
-
Peli sisältää starttinäytön, peli-ikkunan ja Game Over -näytön.
📦 Alustavat vaatimukset
Asenna Pygame kirjaston komentoriviltä:
pip install pygame
🧩 Perustoiminnallisuus
-
Pallo liikkuu kentällä ja kimpoaa seinistä ja palkista.
-
Pelaaja liikuttaa palkkia vasemmalle ja oikealle.
-
Tekoäly liikuttaa yläreunan palkkia automaattisesti pallon liikettä seuraten.
-
Pelaaja saa pisteen osuessaan palloon.
-
Jos pallo menee ohi ylä- tai alareunasta, tekoäly saa pisteen.
-
Tekoäly voittaa, jos se saa 3 pistettä → Game Over.
🛠️ Laajennetut ominaisuudet
-
Pelin vaikeuden nousu: Pallo nopeutuu joka minuutti, jos pelaaja ei saa pistettä.
-
Ääniefekti: Pallon osuessa palkkiin kuuluu ääni (bounce.wav).
-
Start Game -näyttö: Peli alkaa vasta kun pelaaja painaa SPACE.
-
Game Over -näyttö: Kun tekoäly saa 3 pistettä, peli näyttää Game Over -ruudun ja antaa mahdollisuuden aloittaa uudelleen painamalla SPACE.
📜 Pelin koko Python-koodi
import pygame
import random
import time
# Alustus
pygame.init()
# Näytön asetukset
WIDTH, HEIGHT = 600, 800
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Pysty-Pong")
# Värit
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# Fontit
font = pygame.font.SysFont(None, 48)
small_font = pygame.font.SysFont(None, 36)
# Ääniefekti (vaatii tiedoston bounce.wav)
bounce_sound = pygame.mixer.Sound("bounce.wav")
# Palkki-asetukset
PADDLE_WIDTH, PADDLE_HEIGHT = 100, 15
PLAYER_Y = HEIGHT - 40
AI_Y = 25
PADDLE_SPEED = 7
# Pallo
BALL_RADIUS = 10
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_dx = random.choice([-4, 4])
ball_dy = -4
# Pelaaja ja AI
player_x = WIDTH // 2 - PADDLE_WIDTH // 2
ai_x = WIDTH // 2 - PADDLE_WIDTH // 2
# Kellot ja pistelaskuri
clock = pygame.time.Clock()
score = 0
ai_score = 0
last_score_time = time.time()
speed_increment_interval = 60 # sekuntia
# Pelin tila
game_started = False
game_over = False
def draw_text_center(text, font, y, color=WHITE):
text_surf = font.render(text, True, color)
text_rect = text_surf.get_rect(center=(WIDTH // 2, y))
screen.blit(text_surf, text_rect)
# Pääsilmukka
running = True
while running:
screen.fill(BLACK)
# Aloitusnäyttö
if not game_started:
draw_text_center("PYSTY-PONG", font, HEIGHT // 2 - 50)
draw_text_center("Paina SPACE aloittaaksesi", small_font, HEIGHT // 2 + 10)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
game_started = True
score = 0
ai_score = 0
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_dx = random.choice([-4, 4])
ball_dy = -4
last_score_time = time.time()
continue
# Tapahtumat
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Ohjaus
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0:
player_x -= PADDLE_SPEED
if keys[pygame.K_RIGHT] and player_x < WIDTH - PADDLE_WIDTH:
player_x += PADDLE_SPEED
# AI:n liike
if ai_x + PADDLE_WIDTH / 2 < ball_x:
ai_x += PADDLE_SPEED * 0.8
elif ai_x + PADDLE_WIDTH / 2 > ball_x:
ai_x -= PADDLE_SPEED * 0.8
ai_x = max(0, min(WIDTH - PADDLE_WIDTH, ai_x))
# Pallon liike
ball_x += ball_dx
ball_y += ball_dy
# Kimpoaminen sivuilta
if ball_x <= 0 or ball_x >= WIDTH:
ball_dx *= -1
# Pelaajan osuma
if (player_x < ball_x < player_x + PADDLE_WIDTH) and (PLAYER_Y < ball_y + BALL_RADIUS < PLAYER_Y + PADDLE_HEIGHT):
ball_dy *= -1
bounce_sound.play()
score += 1
last_score_time = time.time()
# AI:n osuma
if (ai_x < ball_x < ai_x + PADDLE_WIDTH) and (AI_Y < ball_y - BALL_RADIUS < AI_Y + PADDLE_HEIGHT):
ball_dy *= -1
bounce_sound.play()
# Ohi mennyt
if ball_y < 0:
score = 0
ai_score += 1
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_dx = random.choice([-4, 4])
ball_dy = 4
last_score_time = time.time()
elif ball_y > HEIGHT:
score = 0
ai_score += 1
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_dx = random.choice([-4, 4])
ball_dy = -4
last_score_time = time.time()
# Pallo nopeutuu jos pelaaja ei saa pistettä
if time.time() - last_score_time > speed_increment_interval:
ball_dx *= 1.2
ball_dy *= 1.2
last_score_time = time.time()
# Game Over?
if ai_score >= 3:
game_over = True
game_started = False
# Piirretään
pygame.draw.rect(screen, WHITE, (player_x, PLAYER_Y, PADDLE_WIDTH, PADDLE_HEIGHT))
pygame.draw.rect(screen, WHITE, (ai_x, AI_Y, PADDLE_WIDTH, PADDLE_HEIGHT))
pygame.draw.circle(screen, WHITE, (int(ball_x), int(ball_y)), BALL_RADIUS)
# Tekstit
score_text = small_font.render(f"Pisteet: {score} Tekoäly: {ai_score}", True, WHITE)
screen.blit(score_text, (10, HEIGHT - 40))
# Game Over -näyttö
if game_over:
draw_text_center("GAME OVER", font, HEIGHT // 2 - 50)
draw_text_center("Paina SPACE aloittaaksesi uudestaan", small_font, HEIGHT // 2 + 10)
pygame.display.flip()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
game_over = False
score = 0
ai_score = 0
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_dx = random.choice([-4, 4])
ball_dy = -4
last_score_time = time.time()
continue
pygame.display.flip()
clock.tick(60)
pygame.quit()
🎵 Ääniefekti
Lataa ilmainen pomppuääni (esim. "bounce.wav") ja tallenna se pelin kansioon. Esimerkiksi:
📌 Huomio:
-
Jos haluat pakata projektin esimerkiksi .EXE-tiedostoksi (Windows), voidaan lisätä siihen vielä ohje.
-
Voit myöhemmin kehittää peliä lisäämällä esimerkiksi useita vaikeustasoja tai kaksinpelin!
"Haluaisin tehdä sairaanhoitohenkilöstölle ohjelmiston, jonka avulla he voivat etsiä eri sairauksia, eli hakusanalla."
Ohjelmisto sairaanhoitohenkilöstölle, jonka avulla voidaan etsiä sairauksia hakusanoilla, kuulostaa hyödylliseltä ja mielenkiintoiselta projektilta. Tässä on askelmerkit ohjelmiston toteutukseen:
1. Ohjelmiston perusominaisuudet
- Hakutoiminto: Käyttäjä voi syöttää hakusanan (esim. oire, sairauden nimi tai kehonosa).
- Tietokanta: Sisältää tiedot sairauksista, kuten:
- Sairauden nimi
- Oireet
- Hoitomenetelmät
- Tarvittavat tutkimukset
- Tuloslista: Näyttää sairaudet, jotka vastaavat hakusanaa.
- Yksityiskohtainen näkymä: Käyttäjä voi klikata sairautta ja nähdä lisätiedot.
2. Tekninen toteutus
- Käyttöliittymä:
- Desktop-sovellus: esim. käyttäen Pythonin Tkinteriä, PyQT
ä tai web-pohjainen ratkaisu kuten React/HTML+CSS.
- Mobiilisovellus: esim. Flutter tai React Native.
- Tietokanta:
- Yksinkertainen tietokanta: SQLite (lokalisoitu käyttö).
- Laajempi käyttö: PostgreSQL tai MySQL.
- Pilvipohjainen ratkaisu: Firebase tai MongoDB.
- Hakutoiminto: Käytä SQL
LIKE-hakuja tai kehittyneempää tekstin indeksointia, kuten Elasticsearch.
3. Datan hankinta
- Terveystiedot: Käytä avoimia tietolähteitä (esim. WHO
tietokannat, THL
avoimet aineistot) tai rakenna oma tietokanta keräämällä luotettavia sairaustietoja.
- Oikeudelliset ja eettiset kysymykset: Varmista, että tiedot ovat ajantasaisia ja noudattavat tietosuojasäädöksiä.
4. Lisäominaisuuksia
- Suosituimmat haut: Näytä yleisimmin haetut sairaudet.
- Hakufiltterit: Mahdollisuus rajata hakua esim. oireiden, kehonosien tai sairausryhmien perusteella.
- Monikielisyys: Tukee suomea, ruotsia ja englantia.
- Integraatiot: Mahdollisuus integroida muihin järjestelmiin (esim. potilastietojärjestelmät).
- AI-avusteinen haku: Käytä tekoälyä (GPT tai vastaava) suosittelemaan sairauksia syötettyjen oireiden perusteella.
5. Projektin jakaminen vaiheisiin
- Prototyyppi: Rakennetaan perustoiminnallisuus (hakusana, tuloslista, sairauden tiedot).
- Tietokannan laajennus: Lisää sairauksia ja tietoja.
- Käyttäjätestaus: Testaa ohjelmisto sairaanhoitohenkilöstöllä ja kerää palautetta.
- Jatkuva kehitys: Lisää ominaisuuksia ja paranna käytettävyyttä.
Salakirjoitukset ja purku:
"+(=%+( /+ 0!?**/". Ymmärsitkö mitä tuo tarkoitti? Et varmaankaan, sillä se oli salakirjoitusta, jonka avaamiseen tarvitaan avain.
Tässä esimerkissä mennään Sudenpennuista tuttuun aihepiiriin.
Promt: Suunnittele salakirjoitusaakkosto
Salakirjoitusaakkoston suunnittelussa voidaan käyttää monia erilaisia menetelmiä. Yksi yksinkertainen tapa on käyttää korvauskoodia, jossa jokainen aakkonen korvataan toisella merkillä, numerolla tai symbolilla. Tässä on esimerkki salakirjoitusaakkostosta, jossa käytetään symboleja ja numeroita:
Aakkoset: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Salakirjoitus: ! 2 # 4 % 6 & 8 ( 0 * - = + / < > ? @ ^ _ ` ~ |
Tässä järjestelmässä jokainen kirjain korvataan vastaavalla symbolilla tai numerolla. Esimerkiksi sana "SALA" kirjoitettaisiin salakirjoituksena "@=!!".
Voit luoda myös monimutkaisempia salakirjoitusjärjestelmiä lisäämällä sääntöjä, kuten kirjainten sekoittamisen, sanojen kääntämisen tai erilaisten salakirjoitustekniikoiden, kuten Caesarin salauksen, käyttämisen. Tärkeää on, että sekä lähettäjällä että vastaanottajalla on pääsy samaan salakirjoitusaakkostoon ja he tietävät, miten viesti salataan ja puretaan.
Kirjoita tuolla salakirjoituksella lause: Nimeni on Matti
Result
Lause "Nimeni on Matti" salakirjoitettuna edellä määritellyllä salakirjoitusaakkostolla on "+(=%+( /+ =!^^(".
Entä Nimeni on Jarkko kyseisellä salakirjoitusaakkostolla?
# Let's encrypt another sentence "Nimeni on Jarkko" using the provided substitution cipher.
# Sentence to encrypt
sentence_jarkko = "Nimeni on Jarkko"
# Encrypt the sentence using the same cipher map as before
encrypted_sentence_jarkko = ''.join(cipher_map.get(char.upper(), char) for char in sentence_jarkko)
encrypted_sentence_jarkko
Alalyzed
# Re-defining the substitution cipher map and encrypting the sentence "Nimeni on Jarkko" as previous state was reset.
cipher_map = {
'A': '!', 'B': '2', 'C': '#', 'D': '4', 'E': '%', 'F': '6', 'G': '&',
'H': '8', 'I': '(', 'J': '0', 'K': '*', 'L': '-', 'M': '=', 'N': '+',
'O': '/', 'P': '<', 'Q': '>', 'R': '?', 'S': '@', 'T': '^', 'U': '_',
'V': '`', 'W': '~', 'X': '|', 'Y': '\\', 'Z': '['
}
# Sentence to encrypt
sentence_jarkko = "Nimeni on Jarkko"
# Encrypt the sentence
encrypted_sentence_jarkko = ''.join(cipher_map.get(char.upper(), char) for char in sentence_jarkko)
encrypted_sentence_jarkko
Result
Lause "Nimeni on Jarkko" salakirjoitettuna edellä määritellyllä salakirjoitusaakkostolla on "+(=%+( /+ 0!?**/".
Komentokehote: Pura seuraava salakirjoitus: '+(=%+( /+ =!^^('
Annettu salakirjoitus '+(=%+( /+ =!^^(' purettuna edellä määritellyllä salakirjoitusaakkostolla on:
+ = N
( = I
% = E
= = M
+ = N
( = I
- = (välilyönti)
/ = O
+ = N
- = (välilyönti)
= = M
! = A
^ = T
^ = T
( = I
Joten purkamisessa saadaan: "Nimeni on Matti".